Es gibt gleich noch ein Problem. Ich möchte eine Funktion schreiben, die den besten Grafikmodus auswählt. Dazu habe ich eine Funktion geschrieben, die die Informationen zum aktuellen Grafikmodus in 0x8000 schreiben soll. Leider ist cx nie 0xFFFF. Hier der Code:
mov dword [VBEInfoBlock-start], "VBE2"
mov ax, 0x4F00
mov bx, VBEInfoBlock-start
mov es, bx
mov di, 0
int 0x10
; ...
Get_Info_Of_Grafic_Mode:
mov bx, VBEInfoBlock-start
mov es, bx
mov di, 14
mov cx, [es:di]
mov es, cx
mov al, byte [Grafic_Mode_number-start]
mov ah, 0
mov cx, 2
mul cx
mov di, ax
mov cx, [es:di]
mov bx, 0x8000
mov es, bx
mov di, 0
mov ax, 0x4F01
int 0x10
ret
VBE2 funktioniert. Die Funktion Get_Info_Of_Grafic_Mode soll zuerst die Adresse der Liste auslesen und dann den Modusnamen aus der Liste auslesen. Danke im Voraus.
EDIT:
OK, das kann natürlich nicht funktionieren. Ich habe die Funktion jetzt so verändert, dass es imho funktionieren müsste:
mov bx, 0x7E00
mov es, bx
mov di, 0
mov [es:di], dword "VBE2"
mov ax, 0x4F00
int 0x10
; ...
Choose_Best_Grafic_Mode:
call Get_Grafic_Mode_Info
cmp ax, 0x118
je Set_Grafic_Mode
Get_Grafic_Mode_Info:
mov bx, 0x7E00
mov es, bx
mov di, 14
mov es, [es:di]
mov di, word [Grafic_Mode_number-start]
mov bx, 0x8000
mov es, bx
mov di, 0
mov cx, [es:di]
mov ax, 0x4F01
int 0x10
mov ax, cx
ret
Set_Grafic_Mode:
mov ax, 0x4F02
mov bx, 0x11B
int 0x10
jmp GraficModeSet
Das sollte doch eigentlich funktionieren, weil 0x118 normalerweise unterstürzt wird. Sobald der Grafikmodus gefunden wird soll er gesetzt werden. Das ist natürlich nur ein einfacher Test, aber ich weiß nicht mal, warum das nicht funktioniert.