Sehr geehrte WINHISTORY-User,
Ich bin ein Hobbyprogrammierer und besonders „Spaßig“ finde ich das programmieren von bootfähigen Systemen (Betriebsystemen). Nur bin ich auch da noch eine Art Anfänger. Somit weis ich bei der Assemblerprogrammierung nicht wie man korrekt von Datenträgern, in meinem Fall Disketten, liest und frage daher euch
Mein Problem: Ich möchte, da ich mein System nicht nur sechs Sektoren groß sein soll, die komplette Diskette in den Arbeitsspeicher laden. Doch schon beim tüfteln an einer Subroutine die die ersten 3 Spuren lädt scheitere ich.
Spur 1 und Spur 2 werden korrekt geladen doch bei Spur 3 scheitert es.
Hier erstmal der Code:
; Dieser Code ist nur so ineffektiv verschachtelt damit ich es beim debugen einfacher habe!
load:
call load1
call load2
call load3
retn
load_rs:
push ds
mov ax, 0
mov dl, [bootdriv]
int 13h
pop ds
jc load_rs
retn
loader:
call load_rs
mov ax, 0x1000
mov es, ax
mov ah, 0x2
mov dx, 0
retn
load1:
call loader
mov bx, 0
mov al, 17
mov cl, 2
mov ch, 0
int 13h
jc reset
retn
load2:
call loader
mov bx, 0x2200
mov al, 18
mov cl, 1
mov ch, 1
int 13h
;0x7c64
jc reset
retn
load3:
call loader
mov bx, 0x4600
mov al, 18
mov cl, 1
mov ch, 2
int 13h
jc reset
retn
Alles anzeigen
Die Subroutine „load3“ ist dabei das Sorgenkind und lädt leider nicht das, was sie soll. Aber warum nicht? Diese Subroutine lädt irgend etwas aus dem freien Speicher der Diskette was ich daran erkenne das jede menge ‚F6’-Bytes in den Arbeitsspeicher geladen werden wo eigentlich der weiterführende Code des Kernels hin sollte.
Wie kann ich dafür sorgen das die 3. Spur die ich möchte geladen wird?
Zusammenfassend: Ich habe ein Image geschrieben welches auf Diskette formatiert wird (oder halt mit Bochs emuliert wird) welches sich beim booten in den RAM laden soll (nur der Bootsektor soll aber draußen bleiben). Die Test-Subroutine lädt jedoch ab spur 3 vom falschen Ort. Was ist der Fehler an der Subroutine?
Danke im Voraus!
Mit freundlichen Grüßen euer Klebestreifchien.
PS.: Dieser Thread wurde hierher verschoben weil Thema treffender ist!
EDIT: Habe hier noch schnell Korrekturen am Code vorgenommen. Funkt aber immer noch nicht, ist aber richtiger als vorher!