1
OS-Design / VESA VBE Framebuffer-Fehler
« am: 18. April 2010, 17:28 »
Hallo,
ich programmiere in Assembler mit fasm und bin nun im protected mode mit VESA 640*480*24 (mode 0112h). VirtualBox bestätigt mir den Modus.
1. Wieso muss man 4112h schreiben statt 0112h?
2. Wie lautet der mode für 32 bit-bit? 0129h laut http://en.wikipedia.org/wiki/VESA_BIOS_Extensions#Other_commonly_available_modes
funktioniert nicht.
3. Dies ist der Code zum schreiben von Pixeln:
Nun ist das erste Pixel, das eingefärbt wird nicht das erste oben links?/rechts?, sondern es ist mitten in der ersten Zeile (siehe http://www.abload.de/image.php?img=capture_04182010_17262vfd5.jpg ). Daraus schließe, dass ModeInfo_PhysBasePtr auf eine falsche Adresse zeigt. Aber wieso?
Wenn ich nun von edi 1566 (dezimal) abziehe, ist das erste Pixel auch das oberste linke, doch die letzte Zeile wird nur zur Hälfte gefüllt, wobei das letzte Pixel blau ist.
4. Wenn ich 480 bei [3] als Höhe eingebe, wird aber nur etwa ein drittel geefärbt
Ich hoffe, dass ihr mir helfen könnt.
Vielen Dank im Voraus!!!
ich programmiere in Assembler mit fasm und bin nun im protected mode mit VESA 640*480*24 (mode 0112h). VirtualBox bestätigt mir den Modus.
1. Wieso muss man 4112h schreiben statt 0112h?
2. Wie lautet der mode für 32 bit-bit? 0129h laut http://en.wikipedia.org/wiki/VESA_BIOS_Extensions#Other_commonly_available_modes
funktioniert nicht.
3. Dies ist der Code zum schreiben von Pixeln:
Code: [Auswählen]
Display_Pixel:
mov edi,[ModeInfo_PhysBasePtr]
mov ebx, 640 ; gewünschte Breite
mov ecx, 480 ; gewünschte Höhe
mov ax, 0xfafa ; untere 16 Bits der Farbe
mov dl, 0x00 ; obere 8 Bits der Farbe
Stapel:
push edi
push ebx
Zeile:
add edi,3
mov [edi-3],ax
mov [edi-1],dl
dec ebx
jnz Zeile ; springt solange nach Zeile, bis letztes Rechenergebnis null ergibt/Zero Flag gesetzt ist
pop ebx
pop edi
add edi, ModeInfo_BytesPerScanLine
loop Stapel ; zieht von ecx 1 ab; solange ecx nicht null ist, wird nach Stapel gesprungen.
ret
Nun ist das erste Pixel, das eingefärbt wird nicht das erste oben links?/rechts?, sondern es ist mitten in der ersten Zeile (siehe http://www.abload.de/image.php?img=capture_04182010_17262vfd5.jpg ). Daraus schließe, dass ModeInfo_PhysBasePtr auf eine falsche Adresse zeigt. Aber wieso?
Wenn ich nun von edi 1566 (dezimal) abziehe, ist das erste Pixel auch das oberste linke, doch die letzte Zeile wird nur zur Hälfte gefüllt, wobei das letzte Pixel blau ist.
4. Wenn ich 480 bei [3] als Höhe eingebe, wird aber nur etwa ein drittel geefärbt
Ich hoffe, dass ihr mir helfen könnt.
Vielen Dank im Voraus!!!