Bun venit pe SkullBox!

Bine ai venit, Vizitator. Trebuie să te autentifici sau să îţi creezi un cont.
Ai pierdut sau nu ai primit emailul care conţine codul de activare al contului?

Autentifică-te cu numele de utilizator, parola şi precizează durata sesiunii.
  Pagini: [1]
  Imprimă  
Cum sa folosesc SVGA prin BIOS  (Vizualizari 1277)
Xladhenian
*

Deconectat Deconectat

Mesaje: 47

Cum sa folosesc SVGA prin BIOS, Iun 17, 2007, 19:32

As vrea sa fac un program si apoi o librarie (pe care sa o folosesc si la alte programe) in care sa intru in modul grafic si sa manipulez memoria video (in DOS, fara sa am Windows in memorie).

Am folosit ca sa intru in modul SVGA 1024x768x16M

ASM
 MOV AX , 04F02H
 MOV BX , 00118H
 INT 10H
End;

Apoi am incercat apoi sa modific memoria si astfel sa imi apara pe ecran ceea ce doresc sa deseneze...

ASM
 MOV AX , 0A000H
 MOV ES , AX
 XOR DI , DI
 XOR AX , AX
End;
For a := 0 To 6553500 Do {a:LongInt}
 Begin
  Asm
   MOV ES:[DI] , AX
   INC DI
   MOV ES:[DI] , AX
   INC DI
   MOV ES:[DI] , AX
   INC DI
   INC AX
  End;
 End;

dar nu deseneaza decat in partea de sus a ecranului si la mijlocul acestuia...



Cum as putea sa fac sa pot sa desenez pe tot ecranul (sau unde ar trebui sa modific memoria si cum; sau ar trebui sa folosesc registrii precum EAX,EBX,etc)?

P.S. :
- am scris in TP6 programul
- imaginea am luat-o ruland programul in DOS-BOX 0.7
- daca rulez in Windows iese din program(poate e de la a := 0 To 6553600)
- daca rulez in DOS-BOX 0.7 merge incontinuu (nu da erori si nu apar alte probleme)
- daca rulez in MS-DOS 7.1 (folosind Virtual PC 2007) se blocheaza si nu vad decat partea de sus (cred ca e de la faptul ca memoria video din DOS e intre 0A000H si 0BFFFH)
Memorat
Shocker
*

Deconectat Deconectat

Mesaje: 410

WWW
Cum sa folosesc SVGA prin BIOS, Iun 17, 2007, 22:42

Citat

 MOV AX , 0A0000H

O mica nelamurire, AX e registru tip WORD, maxim FFFF, cum bagi tu A0000 in el ? [A0000 > FFFF]
Memorat


Just wake me up when everything's less overwhelming..., btw ShockingSoft is back !
Freakz only
Comics of the day
Xladhenian
*

Deconectat Deconectat

Mesaje: 47

Cum sa folosesc SVGA prin BIOS, Iun 18, 2007, 08:50

Am scris din greseala un 0 in plus ....  corect este 0A000H
Memorat
Shocker
*

Deconectat Deconectat

Mesaje: 410

WWW
Cum sa folosesc SVGA prin BIOS, Iun 18, 2007, 11:07

Citat
- daca rulez in Windows iese din program(poate e de la a := 0 To 6553600)

Cred ca doar la asta stiu sa iti raspund. Spre deosebire de DOS, in Windows aplicatiile pot rula in 2 "moduri": user-mode si supervisor mode [kernel mode]. Aplicatia ta ruleaza in "user mode" si nu are acces direct la resursele fizice, ceea ce incerci tu sa faci direct in ASM. Asta se poate face doar din kernel mode, mai exact din aplicatiile care ruleaza in kernel mode.
Probabil o varianta ar fi sa efectuezi un "system call", sa transferi codul tau in spatiul kernel, unde se poate face orice.
Nu mai am timp acum sa analizez tot codul, dar cred ca asta e cauza pentru care in windows nu merge
Memorat


Just wake me up when everything's less overwhelming..., btw ShockingSoft is back !
Freakz only
Comics of the day
Xladhenian
*

Deconectat Deconectat

Mesaje: 47

Cum sa folosesc SVGA prin BIOS, Iun 18, 2007, 11:27

Eu vreau ca programele sa ruleze doar pe DOS (fara sa am Windows in memorie), si nu pe Windows....
Memorat
Agkelos
*

Deconectat Deconectat

Mesaje: 5229

WWW
Cum sa folosesc SVGA prin BIOS, Iun 18, 2007, 14:29

Nici pascal nici ASM nu sunt domeniile mele in care ma pricep dar problema cred ca e la bucla. Bucla trebuie sa aiba 1024x768x16777216 iteratii (16777216 = 16 * 1024 * 1024), nu 6553500. Cred ca asta e motivul pentru care nu iti coloreaza toti pixelii de pe monitor.
Memorat



Problemele se rezolva pe forum. Nu trimiteti PM ca nu va ajut.
Pentru urgente, skullbox at skullbox . info.
DarkByte
*

Deconectat Deconectat

Mesaje: 2441

WWW
Cum sa folosesc SVGA prin BIOS, Iun 18, 2007, 14:34

Daca era numai asta, atunci pixelii nu-i punea in doua zone ale monitorului.
Memorat

Light travels faster than sound. This is why some people appear intelligent until they speak.

Quidquid latinum dictum sit, altum viditur.

Xladhenian
*

Deconectat Deconectat

Mesaje: 47

Cum sa folosesc SVGA prin BIOS, Iun 18, 2007, 15:01

Pentru 16 culori si 256 culori, un pixel ocupa 1 byte.
Pentru 32768 si 65536 culori, un pixel ocupa 2 bytes.
Pentru 16777216 culori fara Alpha, un pixel ocupa 3 bytes.
Pentru 16777216 culori cu Alpha, un pixel ocupa 4 bytes.

Este nevoie de X * Y * D bytes pentru toata memoria video.

X = Lungimea in pixels a ecranului
Y = Latimea in pixels a ecranului
D = adancimea culorii (1/2/3/4 bytes)

Pentru 1024x768x16M este nevoie de 1024 x 768 x 3 bytes = 2.359.296 bytes = 2.25MB.
Pentru 1600x1200x16M+A este nevoie de 1600 x 1200 x 4 bytes = 7.680.000 bytes = 7.32MB.

La o singura iteratie eu scriu 3 bytes de memorie, iar facand 6553600 iteratii, scriu 3 * 6553600 bytes = 19660800 bytes = 18.75MB.

18.75 MB > 2.25MB

Astfel eu pot sa scriu mult mai mult decat este necesar si pentru 1600x1200x16M+A.
Memorat
Shocker
*

Deconectat Deconectat

Mesaje: 410

WWW
Cum sa folosesc SVGA prin BIOS, Iun 18, 2007, 17:13

Citat
sau ar trebui sa folosesc registrii precum EAX,EBX,etc?

In DOS nu exista registrii extinsi [EAX, EBX], doar AX, BX, ...

Citat

Cod:

For a := 0 To 6553500 Do {a:LongInt}
 Begin
  Asm
   MOV ES:[DI] , AX
   INC DI
   MOV ES:[DI] , AX
   INC DI
   MOV ES:[DI] , AX
   INC DI
   INC AX
  End;
 End;


Aici stii ca AX tot incepe de la 0 de vreo 100 de ori nu?

In fine, din moment ce ai zis ca pe DOS-BOX e totul ok, ce te mai framanta?Thinking
Memorat


Just wake me up when everything's less overwhelming..., btw ShockingSoft is back !
Freakz only
Comics of the day
DarkByte
*

Deconectat Deconectat

Mesaje: 2441

WWW
Cum sa folosesc SVGA prin BIOS, Iun 18, 2007, 17:33

Pai in DosBox ii merge si ii face dungile alea pe ecran.
Memorat

Light travels faster than sound. This is why some people appear intelligent until they speak.

Quidquid latinum dictum sit, altum viditur.

Xladhenian
*

Deconectat Deconectat

Mesaje: 47

Cum sa folosesc SVGA prin BIOS, Iun 18, 2007, 17:41

1. nu imi deseneaza pe tot ecranul, asta nu merge
2. am zis ca merge incontinuu si ca nu apar erori sau probleme (sa se opreasca, sa se blocheze,etc), dar nu deseneaza corect (imaginea e luata din DOS-BOX)
3. stiu ca AX porneste de la 0 de multe ori pentru ca in AX pastrez intensitatea culorii
Memorat
SkullAds
Ecspert
ReclAmator
* * * * *
Google AdSense

Gen: Bărbat
Mesaje: Multe

Reclama AdSense,
 

 
   


Pagini: [1]
  Imprimă  
 
Schimbă forumul:  

Ethical hacking and programming community
Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC
Traducerea în limba română © 2006-2007 www.smf.ro