Warning Nu esti autentificat. Te rog autentifica-te sau inregistreaza-te pentru a avea acces la toate facilitatile forumului.
SkullBox  
Decembrie 05, 2008, 05:45:40 am
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.
Noutăţi: Dictum, factum...!
 
 SkullBoxDirector webTutoriale  Pagina principală   Ajutor Caută Autentificare Creează un cont  
Pagini: [1]
  Imprimă  
Subiect: Cum sa folosesc SVGA prin BIOS  (Citit de 1237 ori)
0Utilizatori şi 1 Vizitatori
Xladhenian
*
Deconectat Deconectat

Mesaje: 47


Cum sa folosesc SVGA prin BIOS, Iunie 17, 2007, 07:32:42 pm

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, Iunie 17, 2007, 10:42:15 pm

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, Iunie 18, 2007, 08:50:04 am

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

Mesaje: 410



WWW
Cum sa folosesc SVGA prin BIOS, Iunie 18, 2007, 11:07:46 am

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, Iunie 18, 2007, 11:27:19 am

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

Gen: Bărbat
Mesaje: 4957



WWW
Cum sa folosesc SVGA prin BIOS, Iunie 18, 2007, 02:29:30 pm

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



DarkByte
Administrator
*
Deconectat Deconectat

Mesaje: 2252



WWW
Cum sa folosesc SVGA prin BIOS, Iunie 18, 2007, 02:34:05 pm

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

Xladhenian
*
Deconectat Deconectat

Mesaje: 47


Cum sa folosesc SVGA prin BIOS, Iunie 18, 2007, 03:01:48 pm

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, Iunie 18, 2007, 05:13:23 pm

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
Administrator
*
Deconectat Deconectat

Mesaje: 2252



WWW
Cum sa folosesc SVGA prin BIOS, Iunie 18, 2007, 05:33:09 pm

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

Xladhenian
*
Deconectat Deconectat

Mesaje: 47


Cum sa folosesc SVGA prin BIOS, Iunie 18, 2007, 05:41:01 pm

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:  

Creat cu MySQL Creat cu PHP Ethical hacking and programming community Director web romanesc cu inscriere gratuita Validat cu XHTML 1.0! Validat cu CSS!
IPFind, FAQDB, LAMP.ro, Good Proxy, Aberez.EU, RoFreeSBIE, ShockingSoft.com, HostVision, Invatam.net, PC Troubleshooting, Curs valutar online
Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC
Traducerea în limba română © 2006-2007 www.smf.ro