Autor Thema: Doofes Vesa/Bochs/Qemu problem  (Gelesen 3789 mal)

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« 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 ^^
thetrue way is my way

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 19. August 2006, 19:28 »
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

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #2 am: 19. August 2006, 22:18 »
nenen, stosb, stosd beides das selbe ergebnis ;)
thetrue way is my way

Homix

  • Beiträge: 138
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 19. August 2006, 22:41 »
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

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #4 am: 19. August 2006, 22:56 »
jo ist 800x600x24
aber auch 800x600x32 versucht ;)

habe eine ATI graka
und ja, A20 gate ist vor dem ausführen der schleife aktiv ;)
thetrue way is my way

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 20. August 2006, 08:32 »
Und drei Stosb??? Hast du das auch ausprobiert???

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #6 am: 20. August 2006, 12:36 »
jop
alles ^^
thetrue way is my way

 

Einloggen