UNIX,Linux,Retele,Programare

  • Index
  •  » ASM
  •  » Cum sa folosesc SVGA prin BIOS

17 Jun 07 21:32

Xladhenian
Apprentice
Înregistrat: 15 Apr 07
Mesaje: 47

Cum sa folosesc SVGA prin BIOS

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...

http://upload.skullbox.info/202.png

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)

Offline

 

» If at first you don't succeed call it a beta release

tutoriale,programare

Scuze de offtopic

18 Jun 07 00:42

Shocker
Student
Locaţie: localhost
Înregistrat: 24 Sep 06
Mesaje: 410
Site web

Re: Cum sa folosesc SVGA prin BIOS


MOV AX , 0A0000H

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


http://www.shockingsoft.com/shocker/abiturent.png
Just wake me up when everything's less overwhelming..., btw ShockingSoft is back !
Freakz only
Comics of the day

Offline

 

18 Jun 07 10:50

Xladhenian
Apprentice
Înregistrat: 15 Apr 07
Mesaje: 47

Re: Cum sa folosesc SVGA prin BIOS

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

Offline

 

18 Jun 07 13:07

Shocker
Student
Locaţie: localhost
Înregistrat: 24 Sep 06
Mesaje: 410
Site web

Re: Cum sa folosesc SVGA prin BIOS

- 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


http://www.shockingsoft.com/shocker/abiturent.png
Just wake me up when everything's less overwhelming..., btw ShockingSoft is back !
Freakz only
Comics of the day

Offline

 

18 Jun 07 13:27

Xladhenian
Apprentice
Înregistrat: 15 Apr 07
Mesaje: 47

Re: Cum sa folosesc SVGA prin BIOS

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

Offline

 

18 Jun 07 16:29

Agkelos
SkullBox Guardian
Locaţie: Ouranos
Înregistrat: 22 Sep 06
Mesaje: 4324
Site web

Re: Cum sa folosesc SVGA prin BIOS

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.


PM - Modalitate de a trimite mesaje private/personale utilizatorilor; aici nu se rezolva probleme si nu se dau sfaturi.
Forum - Locul in care se cer sfaturi si se rezolva probleme; aici nu se dau datele personale/confidentiale.

Docendo discimus.

Offline

 

18 Jun 07 16:34

DarkByte
SkullBox Guardian
Locaţie: Lost in the Forgotten Realm...
Înregistrat: 23 Sep 06
Mesaje: 2160
Site web

Re: Cum sa folosesc SVGA prin BIOS

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

Offline

 

18 Jun 07 17:01

Xladhenian
Apprentice
Înregistrat: 15 Apr 07
Mesaje: 47

Re: Cum sa folosesc SVGA prin BIOS

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.

Offline

 

18 Jun 07 19:13

Shocker
Student
Locaţie: localhost
Înregistrat: 24 Sep 06
Mesaje: 410
Site web

Re: Cum sa folosesc SVGA prin BIOS

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

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


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?:-?


http://www.shockingsoft.com/shocker/abiturent.png
Just wake me up when everything's less overwhelming..., btw ShockingSoft is back !
Freakz only
Comics of the day

Offline

 

18 Jun 07 19:33

DarkByte
SkullBox Guardian
Locaţie: Lost in the Forgotten Realm...
Înregistrat: 23 Sep 06
Mesaje: 2160
Site web

Re: Cum sa folosesc SVGA prin BIOS

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

Offline

 

18 Jun 07 19:41

Xladhenian
Apprentice
Înregistrat: 15 Apr 07
Mesaje: 47

Re: Cum sa folosesc SVGA prin BIOS

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

Offline

 

» Press CTRL+ALT+DEL now for an IQ test

tutoriale,programare

Scuze de offtopic

  • Index
  •  » ASM
  •  » Cum sa folosesc SVGA prin BIOS

Antet forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson



Ethical hacking and programming community