Autor Thema: Wieder mal Vesa...  (Gelesen 8193 mal)

475

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« am: 02. July 2005, 20:11 »
Hi, ich sitze inzwischen seit über 1 woche daran, mit vesa was zu zeichnen.
Vesa initialisiere ich ohne probleme im kernel16.asm mit folgenden code:
SetVesaMode:
push ax
push bx

mov ax, 4f00h
mov bx, 0x7e0
mov es, bx
mov di, 0x0
int 0x10

cmp ax, 0x004f
jne .1

mov bx, 0x7e0
mov es, bx
mov di, 0x0
mov ax, [es:di+4]

mov ax, 0x4f01
mov di, 0x0
mov bx, 0x800 ; VbeInfoBlock nach 0x8000
mov es, bx
mov cx, 0x0115 ; Videomodus 800x600 mit lfb
int 0x10

mov ax, 0x4f02
mov bx, 0x4115
int 0x10

cmp ax, 0x004f
je .3
.1:
mov si, msg_VesaError
call PrintString
.2:
jmp .2
.3:
pop bx
pop ax
ret

danach wird in den PMode geschalten. der Vesamodeinfoblock müsste sich jetzt an 0x8000 befinden (im pmode).

hier ist meine vesa.c:
unsigned long *Video;
unsigned short sWidth, sHeight;
unsigned short VBEModeInfo = 0x8000;


void InitVideo()
{
unsigned long *pLong = (unsigned long *)(VBEModeInfo + 0x28);
unsigned short *pShort = (unsigned short*)(VBEModeInfo + 0x12);
Video = (unsigned long*)(pLong[0]);
sWidth = pShort[0];
sHeight = pShort[1];
}

void FillScreen(unsigned long color)
{
unsigned long End = sWidth * sHeight, i;

for (i=0;i<End;i++)
Video[i] = color;
}


void PutPixel(short x, short y, unsigned long color)
{
if (x>=0 && y>=0 && x<sWidth && y<sHeight)
Video[y*sWidth+x] = color;
}

...



Das Problem sieht folgend aus:
Er schaltet den Vesamodus, initialisiert den PMode, aber ich kann weder einen pixel zeichnen,  noch den bildschirm füllen...

Danke schon mal

475

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 03. July 2005, 13:50 »
so... hab es jetzt geschafft, das er pixel zeichnen kann.
Allerdings nicht so wie er soll.

Wenn ich ein Pixel zeichnen will, stimmen die koordinaten nicht und beim bildschirm füllen ist der ganze bildschirm "gestrichelt"

Der Code ist der gleiche geblieben (hab nur die header etwas abgeändert, wo auch der fehler war)

stafe

  • Beiträge: 35
    • Profil anzeigen
    • http://www.staticos.at.tf
Gespeichert
« Antwort #2 am: 03. July 2005, 14:07 »
Hast du den VESA code mit Bochs getestet oder ??

Bei meinem Vesa code passiert das gleiche wenn ich ihn unter Bochs teste ...
aber unter M$ Virtual PC und auf dem PC funktionierts ohne Probleme ...
mfG Stafe

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 03. July 2005, 14:27 »
Du musst die Farbtiefe überprüfen wenn du Pixel zeichenen willst. AFAIK benutzt Bochs gerne einen 24Bit Mode, das solltest du also überprüfen.

475

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 03. July 2005, 14:38 »
danke.. hab es jetzt mal auf nem normalen pc getestet und da füllt er den halben bildschirm mit der farbe.
Jedoch macht er nicht den ganzen bildschirm...

Wie kann ich bochs mitteilen, dass er 32 bit verwenden soll? hab nix mit google gefunden.



<->
Hab jetzt mal Verschiedene Modis probiert...
er zeichnet bei 640x480 fast alles, bei 800x600 nur noch die hälfte und bei 1024x768 ca. 1/3.
Kann es sein, dass ich vesa mit lfb nicht richtig initialisiert hab?

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #5 am: 04. July 2005, 13:33 »
hast du den a20 gate richti aktiviert?
das war bei mir auf jedenfall das problem...

hackgod

  • Beiträge: 70
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 04. July 2005, 15:12 »
das is zwar OT, aber was is mit deiner Page zack? Die funzt irgendwie nich

475

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 04. July 2005, 15:34 »
Danke. Es lag wirklich am A20 gate.

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« Antwort #8 am: 05. July 2005, 16:31 »
OT: gute Frage, frag ich mich auch schon eine Weile.

475

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 05. July 2005, 21:06 »
OT: me 2

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #10 am: 06. July 2005, 16:44 »
jaja meine page geht net mehr... habe vergessen die domain zu bezahlen... :( solte bis nächsten monat wieder funktionieren...  :oops:  :oops:

 

Einloggen