Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: thetrue am 19. August 2006, 10:01
-
moin,
also ich habe ein Problem mit VEsa und bochs oder qemu. Das Problem habe ich schon seid ner woche.
also wenn ich alles vollmalen will nutze ich das:
mov edi,[VbeModePhysBasePtr]
mov ecx, 800*600
mov ax, 0xAA
rep stosb
oder das:
mov ecx, 800*600
.lop:
mov [edi], byte 0xFF ;!! Blue
inc edi
mov [edi], byte 0xAA ;!! Green
inc edi
mov [edi], byte 0x00 ;!! Red
inc edi
loop .lop
beides geht unter Bochs und Qemu nicht, es wird nur oben ca ein fünftel angemalt, bei beiden versuchen ... Bei meinem echtem PC geht es und VPC macht auch alles richtig.
aber wenn ich so mache:
mov edi, [VbeModePhysBasePtr]
mov ebx, 9964h
mov ecx, 600
.lp:
push ecx
mov ecx, 800
.lop:
mov [edi], byte 0xFF ;!! Blue
inc edi
mov [edi], byte 0xAA ;!! Green
inc edi
mov [edi], byte 0x00 ;!! Red
inc edi
loop .lop
pop ecx
loop .lp
geht es überall ... aber bei bochs und qemu halt langsamm man kann sehr gut sehen wie alles zugemalt wird dauert ca eine secunde
woran liegt das??? ist es ein bug von qemu/bochs?
//edit: alle drei schleifen tuhen ja sowieso das selbe
aha, wenn ich push ecx dur mov edx, ecx und pop ecx durch mov ecx, edx ersetze, dann ist es das gleiche wie mit den beiden ersten schleifen ...
ich glaube das geht zu schnell für bochs und qemu ^^
-
Naja...das erste kann nicht gehen...
Aus dem Code der beiden anderen Varianten, hab ich abglesen, das alle 32Bit wieder ein Pixel kommt. Wenn du aber schreibst stosb schreibst du nur ein Byte, und hast somit ein nur ein Viertel bemalt.
Ersetz das stosb mal durch stosd.
Bei den beiden anderen Varianten seh ich keinen Unterschied, aber schau mal, ob jetzt die erste Variante funzt.
Nooooooooooos
-
nenen, stosb, stosd beides das selbe ergebnis ;)
-
hi,
wehclen Grafikmodus benutzt du ? warscheinlich 800x600 bei wieviel Bits ?
hast du A20 Gate aktiviert (könnte Probleme machen bei über 1 MB).
wenn du 24/32-Bits eingestellt hast:
Bochs und ATI-Grakas haben dann 24-Bits, nVidia Grakas 32-Bits. :wink:
mfg,
stefan
-
jo ist 800x600x24
aber auch 800x600x32 versucht ;)
habe eine ATI graka
und ja, A20 gate ist vor dem ausführen der schleife aktiv ;)
-
Und drei Stosb??? Hast du das auch ausprobiert???
-
jop
alles ^^