Autor Thema: Verstaendnisfrage  (Gelesen 3471 mal)

noob

  • Beiträge: 63
    • Profil anzeigen
Gespeichert
« am: 25. February 2006, 19:03 »
hi!

ich hab mir ein kleines C programm geschrieben mit dem ich 510 bytes auf eine diskette so schreiben kann dass sie bootet! das funkt schon! nun will ich nen kleinen bootloader schreiben der in den 510 bytes liegt, der einen weiteren code laedt! nun ist es mein verstaendisproblem kann ein code einen anderen externen code laden oder muessen diese beiden codestuecke zusammengelinkt werden? waenn diese zusammengelinkt werden muessen dann bringt sich das ganze doch wieder nichts denn dann ist wieder nur eine bin da und genau das will ich ja vermeiden!

und wie mache ich es nun das eine bin eine andere laedt?
ich speichere die naechste bin einfach ab dem 512 byte auf der disk!(die lowlevel sachen die auf einem os basieren sind fuer mich kein problem mehr, ich steige erst ein in dieses geniale thema also seit ein wenig einsichtig mit mir :)

danke

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #1 am: 25. February 2006, 23:53 »
Nun, generell werden die beiden Stages (so wird es meistens genannt) nicht zusammengelinkt, aber wenn du Stage 2 (also die Stage, die erst geladen wird) an eine bestimmte Addresse linkst, wird es einfacher (aber halt unflexibler).

Dann wirst du den BIOS Interrupt für die Floppy bedienen müssen, hierbei können dir wohl andere helfen, denn ich bin nicht so gut in Assembler. Assembler empflieht sich hier sehr, da bei 510 Byte an Platz jedes einzelne Byte natürlich zählt.
*post*

Thoth

  • Beiträge: 62
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 26. February 2006, 04:06 »
Also ich würde sagen, dass es generell kein Problem ist, den zweiten Teil als eigene Binary zu assemblieren und dann in die Sektoren zwei bis ... zu schreiben. Aber wesentlich bequemer, v.a. für die Entwicklung ist es imho, ein kleines Programm in die 512 Bytes zu quetschen, dass aus einer FAT12 partitionierten Diskette eine bestimmte Datei sucht und lädt. Dann kann man nämlich selbige Datei gemütlich mit dem Windows Explorer oder sonstigem Programm deines favorisierten Betriebssystems austauschen, ohne jedesmal rawrite oder vergleichbares bemühen zu müssen.

Hier liegt auch irgendwo ein solcher Bootloader rum, ich glaub von TeeJay, aber der ist ein wenig unübersichtlich. Ich möchte nicht behaupten, dass meiner besser ist, aber er ist auf jeden Fall besser kommenteiert, wenn Interesse besteht - einfach PN.
Madness isn't a bug - it's a feature

noob

  • Beiträge: 63
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 26. February 2006, 11:33 »
aber das was ich nicht verstehe ist:
waenn ich meine 2. binary z.b an die adresse 10 000 linke kann ich diese ja mit jmp 10 000 aufrufen nicht? aber wer laedt die 2. binary? das ist das was ich nicht verstehe!

Thoth

  • Beiträge: 62
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 26. February 2006, 13:35 »
Naja, das sollte die erste Binary machen. Das BIOS lädt nur den Bootsektor und gibt dann die Kontrolle an diesen ab. Wohin du die zweite Datei linkst ist eigentlich wurst, es muss halt dafür gesorgt sein, dass die erste Datei sie auch dorthin lädt.

Und eben dieses Laden der Datei von Diskette oder sonstiges Bootmedium wird normalerweise mit BIOS Interrupts gemacht, z.B. int 0x13.
Madness isn't a bug - it's a feature

 

Einloggen