Wie der Titel schon vermutem lässt würde ich gerne Daten (erstmal nur einen Sektor) von der Diskette direkt ins Video RAM (A000h:0000h) schreiben. (Ich befinde mich natürlich noch im RealMode)
Ich setze also ES:BX auf A000h:0000h bevor ich die 2. Funktion des 13. Interrupts ausführe, die soll dann die eingelesenen Daten direkt nach ES:BX, also ins Video RAM schreiben. Da ich mich zu diesem Zeitpunkt schon im "VGA Mode 13h" befinde erwarte ich, dass der Inhalt des gelesenen Sektors (des Bootsektors) sofort als lustige bunte Pixel auf dem Bildschirm angezeigt wird. Leider bleibt der Bildschirm jedoch schwarz.
hier der interessante Auszug meines Codes:
Und hier die Unterfunktionen, da es sich hierbei um 3rd Party Code handelt glaube ich nicht, dass hier der Fehler liegt.
Sieht jemand meinen Fehler, oder soll ich mal den kompletten Code posten?!
Ich setze also ES:BX auf A000h:0000h bevor ich die 2. Funktion des 13. Interrupts ausführe, die soll dann die eingelesenen Daten direkt nach ES:BX, also ins Video RAM schreiben. Da ich mich zu diesem Zeitpunkt schon im "VGA Mode 13h" befinde erwarte ich, dass der Inhalt des gelesenen Sektors (des Bootsektors) sofort als lustige bunte Pixel auf dem Bildschirm angezeigt wird. Leider bleibt der Bildschirm jedoch schwarz.
hier der interessante Auszug meines Codes:
Code: [Auswählen]
call reset_disk
call init_vga
mov dl, [bootdrv] ; Laufwerk setzen bevor die Segmentregister ein Setzen verhindern ([bootdrv] liegt in einem anderen Block)
xor bx, bx
mov ax, 0xA000
mov es, ax ; Daten schreiben nach ES:BX = 0xA000:0x0000
mov ds, ax
load1:
mov ah, 0x02 ; Funktion Nr. 2
mov al, 1 ; 1 Sektor zu lesen
mov cx, 1 ; Track=0, Sector=1 (sollte der Bootsektor sein)
mov dh, 0 ; Head 0
int 13h ; den Interrupt ausführen
jc load1 ; Fehler? Noch mal!
mov byte [0], 0x07 ; Dieser Pixel wird korrekt angezeigt
ende: jmp ende
Und hier die Unterfunktionen, da es sich hierbei um 3rd Party Code handelt glaube ich nicht, dass hier der Fehler liegt.
Code: [Auswählen]
reset_disk:
push ds ; Sichere DS
mov ax, 0 ; Die gewünschte Funktion (reset)
mov dl, [bootdrv] ; Dieses Laufwerk ist gewünscht
int 13h ; Den Interrupt ausführen
pop ds ; DS wiederherstellen
jc reset_disk ; Geht nicht? -> Noch mal!
retn
init_vga:
MOV AX, 0013h
INT 10h
retnSieht jemand meinen Fehler, oder soll ich mal den kompletten Code posten?!

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert


