creation d'une bibliotheque grafique.

creation d'une bibliotheque grafique. - C - Programmation

Marsh Posté le 21-04-2007 à 16:44:09    

Voila je vais tenter de bien expliquer les chose.
En premier je vais vous presenter le code.

Citation :


#include <conio.h>
#include <dpmi.h>
#include <dos.h>
#include <string.h>
 
 
 
 
 
 
 
 
void int_vesa()
{
        __dpmi_regs registres;
        registres.x.ax = 0x4F02;
        registres.x.bx = 0x101;
        __dpmi_int(0x10, &registres);
        return;
}
 
 
 
 
void def_num_deg(char num)
{
        __dpmi_regs registres;
        registres.x.ax = 0x4F05;
        registres.x.dx = num;
        __dpmi_int(0x10, &registres);
        return;
}
 
 
 
 
int main()
{
        char ecran_vir[65535];
        memset(&ecran_vir,0xAB,65535);
        //memset(&ecran_vir,0x3A,65535);
        int_vesa();
        dosmemput(&ecran_vir,65535,0xA0000);
        getch();
        return 0;
}


 
 
 
Le mode VESA me fais des choses asser bisard.
La premier fois que je l'ai utiliser s'étais sur un pc virtuelle et les codes marchaient relativement bien.
A present je suis sous XP et il se passe des chose que je ne m'esplique pas.
Tous les programes sur le sujet vesa( exemple, tuto), aucun ne marche ou presque auqun.
En cherchan j'arive progresivement a localiser des problemme et voila que j'arive a une inpasse.
Le code si desus est compiler sous djgpp.
Se copilateur 32bits est soidisant sencet assurer 4294967296 byte de memoir.
Selement si je veux programer le mode 0x112 : soit mon ecran virtuelle
                    int ecanr_vir[19][16384];    (soit int 4 bytes) et seg = 65535 bytes 19 = 640*480*4/65535.  
La memoir utiliser est donc de 1245184 bytes, jutilise une pichnette de memoir.
Voila se qu'il me repon  

Citation :


Exiting due to signal SIGSEGV
Stack Fault at eip=00001f8a
eax=000b8000 ebx=00000299 ecx=00092758 edx=00000000 esi=00000054 edi=00012770
ebp=00092748 esp=fff5273c program=C:\DJGPP\TRAVAIL\VESA5.EXE
cs: sel=01a7  base=02990000  limit=0009ffff
ds: sel=01af  base=02990000  limit=0009ffff
es: sel=01af  base=02990000  limit=0009ffff
fs: sel=017f  base=00007550  limit=0000ffff
gs: sel=01bf  base=00000000  limit=0010ffff
ss: sel=01af  base=02990000  limit=0009ffff
App stack: [00092770..00012770]  Exceptn stack: [000126d4..00010794]
 
Call frame traceback EIPs:
  0x00001f8a


 
Alors la  :pfff:   :(   :??:   :pt1cable:  
 
En final a se poin, est t'il posible de reservet un espase memoir sous djgpp comme sous turbo c(PS un espase de 1245184 BYTES mini)
 
De plus si je depasse une resolution de 640 * 480 (peux inporte le nombre de couleur)
L'ecran mafiche "frecance trop élever"
 
Si vous pourier m'eclerais j'en vous serais reconesent.
 
PS je suis sous XP
DSL pour l'ortografe, ni faite pas a tention, j'ai pas eu le temtp de men ocuper.
 
@++


Message édité par darta123 le 21-04-2007 à 18:05:01
Reply

Marsh Posté le 21-04-2007 à 16:44:09   

Reply

Marsh Posté le 21-04-2007 à 16:55:09    

T'as beau etre "DSL pour l'ortografe" ca ne rend pas ton truc moins imbitable. C'est limite du foutage de gueule.

Reply

Marsh Posté le 21-04-2007 à 17:09:24    

Ok pour fermer la parentese sur l'hortographe , j'ai un endicape.
Sa m'aide bien pour les forum. Sa fais toujour plaisir de resevoir d'aussi belle vane.


Message édité par darta123 le 21-04-2007 à 17:57:41
Reply

Marsh Posté le 21-04-2007 à 17:55:07    

Je m'excuse, je ne pouvais pas savoir. Sache que des mecs qui ecrivent comme toi juste par flemme il y en a ici. Alors quand tu dis, en parlant de l'orthographe, que t'as pas eu le temps de t'en occuper, a mes yeux tu apparais comme l'un d'entre eux.
 
Pour en revenir a ton sujet, ce que tu cherches a faire est etrange, pourquoi ne pas utiliser une bibliotheque graphique existante, ou passer par l'API de ton systeme d'exploitation?

Reply

Marsh Posté le 21-04-2007 à 18:00:19    

ok pas grave t'inquiette
En fait s'est plus pour tenter de faire une biblioteque grafique que de l'utiliser.

Reply

Marsh Posté le 21-04-2007 à 18:07:01    

Ouais mais sous Windows, je ne pense pas que tu puisses ecrire dans la memoire video comme ca. Les bibliotheques graphiques sous Windows que je connais passent par DirectX (je pense a Allegro et SDL).
 
Si ton but est d'implementer des fonctions graphiques (blitting, trace de lignes, courbes, rotations ... ) tu peux utiliser la librairie SDL qui va te permettre tres facilement de passer en plein ecran et te donner un pointeur vers ton frame buffer.
 
Par contre, si ce qui t'interesse c'est le cote prise de controle de la carte video, changer le mode d'affichage, bref, le cote pilotage du materiel, je pense que sous Windows XP c'est mort ; mais tu peux faire tourner tes programmes dans DosBox ou meme un Qemu. Ca va te simuler une machine et tu pourras en faire ce que tu veux.

Reply

Marsh Posté le 21-04-2007 à 18:46:10    

Oui bien sur , tu as reson. Mais le truc s'est que ma biblioteque marche presque. Je vais essayer avec SDL. Sinon pour la biblioteque, elle marche sur des simulateur mais j'apresirer la voir tourner sur linux au moin.  
Merci a toi.


Message édité par darta123 le 21-04-2007 à 18:54:34
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed