Autor Thema: Bootsektor  (Gelesen 11860 mal)

DePabba

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« am: 28. May 2006, 04:39 »
Hallo,

bin beim durchgooglen mal auf diese Seite gestossen und war sofort begeistert von dem, was es hier zu lernen gibt.
Ich wollte jetzt einmal beginnen, selber ein paar lowlevel-sachen auszuprobieren.

Wenn ich es richtig verstanden habe, lädt das BIOS den ersten Sektor (512 Byte) des Bootlaufwerks in den Speicher. Falls dieser Code mit dem Wort 0xAA55 endet, startet das BIOS diesen Code.

Ich habe nun spasseshalber folgenden Code geschrieben.

<CODE>
ORG 0x7C00
times 512 - ($ - $$) - 2 db 0
dw 0xAA55
</CODE>

Also ähnlich dem Code, wie er in Ausgabe 1 verwendet wird.
Jetzt habe ich diese Datei mit "nasm -f bin ..." assembliert und die Binärdatei mit Rawwrite auf eine Diskette kopiert.

Beim booten bzw. Bootversuch zeigt das System aber "Operating system not found" an. Was mache ich falsch?

Gruß
DePabba

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 28. May 2006, 10:31 »
Warscheinlich wird ein bisschen Code verlangt. Kannst ja mal nach dem ORG ein "jmp $" einfügen.


Gruss
Noooooooooops

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #2 am: 28. May 2006, 12:02 »
Zitat von: nooooooooos
Warscheinlich wird ein bisschen Code verlangt. Kannst ja mal nach dem ORG ein "jmp $" einfügen.


Gruss
Noooooooooops
Daran dürfte es eigentlich nicht liegen. Da der Sektor AA55h am Ende hat müsste er in den Speicher geladen werden und dann gestartet. Denn Nullen sind auch Opcodes. 00 00 müsste add [bx+si],ax sein. Und das müsste die CPU dann ausführen. Aber "Operating System not found" dürfte eigtnlich nicht erscheinen. Hört sich irgendwie so an, als wäre kein OS auf der platte und man wollte von der Platte starten. na ja

bitmaster
In the Future everyone will need OS-64!!!

Neo3

  • Beiträge: 39
    • Profil anzeigen
    • GlobalNetzone
Gespeichert
« Antwort #3 am: 28. May 2006, 13:29 »
@ DePabba: Wie soll das BIOS Was in den Arbeitsspeicher laden wen du ORG 0x7C00 und nicht 0x07C00, also nach mir chrast er dort darum findet er kein OS.

Edit: Auch bei dw 0xAA55 gleicher fehler dw 0x0AA55 dann sollte es eigentlich funktionieren.

Freundliche Grüsse
Neo3
Mit grosser Kraft folgt grosse Verantwortung.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #4 am: 28. May 2006, 14:32 »
Zitat von: Neo3
@ DePabba: Wie soll das BIOS Was in den Arbeitsspeicher laden wen du ORG 0x7C00 und nicht 0x07C00, also nach mir chrast er dort darum findet er kein OS.


Org sagt dem Assembler doch nur, dass der Code bei 0x7C00 beginnt, d.h. er addiert zu jedem Label 0x7C00 dazu. Das hat doch nix mit dem BIOS zu tun...

Zitat
Edit: Auch bei dw 0xAA55 gleicher fehler dw 0x0AA55 dann sollte es eigentlich funktionieren.

Wo is bitte da der Unterschied? Sind beides die gleichen Zahlen :wink:
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 28. May 2006, 15:13 »
Bei dem Code kann man eigentlich nicht viel falsch machen. Deswegen denke ich, dass das Schreiben auf die Diskette nicht geklappt hat.
Dieser Text wird unter jedem Beitrag angezeigt.

Neo3

  • Beiträge: 39
    • Profil anzeigen
    • GlobalNetzone
Gespeichert
« Antwort #6 am: 28. May 2006, 15:31 »
@ PorkChicken: Könnte durchaus möglich sein

@ bluecode: also ersteres 0x7C00 ist die rechtschreibung egal den es ist en wert und kein word aber wen ich ein word also dw 0xAA55 mache ist das nicht das gleiche wie dw 0x0AA55 oder sprichst du die fürenden nullen nie aus wen jemant scheibt 00000123? also zweiteres muss korigiert werden es get auch 0AA55h blos nicht die fürende Null vergesen weil ein word ist ein Wort und kein wert!
Mit grosser Kraft folgt grosse Verantwortung.

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #7 am: 28. May 2006, 15:51 »
@Neo3: Es ist sowas von egal ob du dw 0xAA55 oder dw 0x0AA55 schreibst. Es kommt beides das selbe raus. Ich denke so wie PorkChicken das, dass schreiben auf der Diskette nicht geklappt hat. Am Code ist jedenfalls nichts falsch.

bitmaster
In the Future everyone will need OS-64!!!

DePabba

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 28. May 2006, 17:04 »
Also ich hab auch schon 0x0AA55 ausprobiert, aber selbes Problem.
Wenn ihr sagt, dass der Code ansonsten in Ordnung ist, dann denke ich auch das es am schreiben auf die Diskette liegt.

Gibts noch ne andere Software zum lowlevel-schreiben auf ne Diskette außer Rawwrite?

Gruß
DePabba

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 28. May 2006, 17:14 »
Ich nehme partcopy.
Dieser Text wird unter jedem Beitrag angezeigt.

Neo3

  • Beiträge: 39
    • Profil anzeigen
    • GlobalNetzone
Gespeichert
« Antwort #10 am: 28. May 2006, 18:18 »
kannste auch bochs nehmen DePabba. Bochs ist eine Virtuele Machine also die emuliert dir ein Computer. Dann such hier einfach nach Bochs und du wirst von glaube ich Toaster ein Tread finden wo es ein code teil giebt der eine Config für bochs ist einfach bei floppy den Pfad angeben wo die Boot Datei von dir ist und gut ist, wen du englisch kannst einfach mal bochs starten wens du mit google gefunden hast und mal lesen, auch solche die nur teilweise Englisch können sollten damit zurecht kommen. Ich komm damit auch zu recht.

Freundliche grüsse
Neo3

PS: @bitmaster jo du hast recht aber warum stet das dann so in der ersten Lowlevel Ausgabe mit 0x0AA55, was bedeutet das Null, stet das wegen dem 0aa55h da ist es daher abgeleitet oder einfach nur nen fehler?
Mit grosser Kraft folgt grosse Verantwortung.

DePabba

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 28. May 2006, 19:25 »
Hallo,

habs jetzt mich Bochs probiert.
Funktioniert einwandfrei.
Keine Ahnung, warum der PC das nicht booten will.
Aber das hier ist eh einfachar und reicht mir auch zum testen.

Danke Leutz.

Gruß
DePabba

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #12 am: 28. May 2006, 19:36 »
Zitat von: Neo3
kannste auch bochs nehmen DePabba. Bochs ist eine Virtuele Machine also die emuliert dir ein Computer. Dann such hier einfach nach Bochs und du wirst von glaube ich Toaster ein Tread finden wo es ein code teil giebt der eine Config für bochs ist einfach bei floppy den Pfad angeben wo die Boot Datei von dir ist und gut ist, wen du englisch kannst einfach mal bochs starten wens du mit google gefunden hast und mal lesen, auch solche die nur teilweise Englisch können sollten damit zurecht kommen. Ich komm damit auch zu recht.

Freundliche grüsse
Neo3

PS: @bitmaster jo du hast recht aber warum stet das dann so in der ersten Lowlevel Ausgabe mit 0x0AA55, was bedeutet das Null, stet das wegen dem 0aa55h da ist es daher abgeleitet oder einfach nur nen fehler?
Bei AA55h ist ein Buchstabe vorn und das darf nicht, weil dies dann als Variable betrachtet wird und nichts als Wert. Bei 0xblabla ist das ja egal.

bitmaster
In the Future everyone will need OS-64!!!

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 28. May 2006, 20:00 »
Eben warscheinlich verlangt das Bios irgendwelche sonstige gesetzte Bits um den Code zu laden. Aber Bochs ist da nicht so streng.

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 28. May 2006, 20:01 »
;-)

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 30. May 2006, 19:37 »
was soll denn da sonst noch verlangt werden?
das BIOS achtet nur auf 0xaa55

ich denke auch eher das beim schreiben au die Diskette ein Fehler unterlaufen ist,
am besten machst du mal ein Image von der Diskette und schaust das mit nem Hexeditor an, dann siehste ob dort 0xaa55 steht

ich benutz übrigens partcopy, das fnd ich um einiges praktischer

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 02. June 2006, 22:43 »
Ein Word hat 16 Bit, also nach Adam Riese 2 Bytes. Eine Hexadezimalzahl stellt ne 4 Bit dar, also eine zweistellige Hexadezimalzahl 2 Nibble (=1 Byte).
Also ist 0x7C00 ein 16-Bit-Wert und 0x07C00 ein 20-Bit-Wert. Als Zeichen für eine Hexadezimalzahl steht 0x davor (wobei ich ein nachgestelltes h bevorzuge, aber egal).

OPERATING SYSTEM NOT FOUND ist eine BIOS-Meldung, also läuft das Schreiben auf Diskette fehl. Trotzdem würde ich eine Endlosschleife aufrufen und das Programm so kontrolliert "anhalten" - ehe er mir (rein zufällig natürlich) die Platte Spur für Spur formatiert :-)

Rawrite zum Schreiben ist gut, dd ist universeller (gibt's unter Cygwin oder -besser- als nativen Win32-Port).

Gruß,
Svenska

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 03. June 2006, 09:36 »
Zitat von: Svenska
Ein Word hat 16 Bit, also nach Adam Riese 2 Bytes. Eine Hexadezimalzahl stellt ne 4 Bit dar, also eine zweistellige Hexadezimalzahl 2 Nibble (=1 Byte).
Also ist 0x7C00 ein 16-Bit-Wert und 0x07C00 ein 20-Bit-Wert. Als Zeichen für eine Hexadezimalzahl steht 0x davor (wobei ich ein nachgestelltes h bevorzuge, aber egal).


Bei Assembler wird die größe einer Konstante über den Zusammenhang (z.B. bei mov al, 0xF) oder durch eine direkte Größenangabe (mov byte[40],0xF) festgestellt.

000000000000000000000000000000000000000000000000000015,
0x00000000000000000000000000000000000000000000000000F oder
0000000000000000000000000000000000000000000000000000Fh kannste auch benutzen. ;)
db 0x55AA

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 03. June 2006, 09:43 »
Hi
Zitat von: Osbios
...
000000000000000000000000000000000000000000000000000015,
...


und damit bis du dir sicher? in c würdest du damit ganz böse auf die nase fallen. Da das eine Oktale darstellung ist. und dem dezimalen Wert 13 entspricht.

gruss

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #19 am: 03. June 2006, 10:46 »
Und in Brainfuck würde es zu einem Syntaxfehler führen...
Ich rede ja auch von Assembler !!!
db 0x55AA

 

Einloggen