Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1861 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  programmation graphique 800*600

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Page Précédente
Auteur Sujet :

programmation graphique 800*600

n°738720
ptitchep
Posté le 25-05-2004 à 23:25:19  profilanswer
 

Bonjour
Je programme en mode 13h et j'aimerais bien passer à une résolution supérieur. j'ai regardé un peu partout à propos des modes VESA et j'ai pas trouvé grand chose (en plus j'ai un peu de mal avec l'anglais dès que les termes deviennent compliqués).
J'ai essayé de faire un prog simple (juste pour essayer) qui se contente de remplir la mémoire ecran pour afficher un ecran bleu uni:
(le mode 800*600*8 a été initialisé avant)
         
        push es
 mov ax,0a000h
 mov es,ax
 xor dx,dx
 
 boucle:
 mov ax,4f05h
 xor bx,bx
 int 10h
 
 xor di,di
 mov al,1
 mov cx,0ffffh
 rep stosb
 inc dx
 cmp dx,8
 jb boucle
        pop es
 
Je n'ai pas réussi à le réduire plus et pourtant lorsque je l'execute en boucle et que je comptabilise les images par seconde (en ajoutant un peu de c++) je me retrouve avec environ 10 images par seconde. c'est un peu faible non?
Si quelqu'un a une solution...
Merci
Chep

mood
Publicité
Posté le 25-05-2004 à 23:25:19  profilanswer
 

n°738788
bjone
Insert booze to continue
Posté le 26-05-2004 à 00:08:34  profilanswer
 

tu est sûr que c'est pas ta mesure temporelle qui est foireuse ?
 
avec quoi tu mesures ?

n°738799
bjone
Insert booze to continue
Posté le 26-05-2004 à 00:13:09  profilanswer
 

où alors y'a un perte de perf à l'appel du bios vidéo :??:
 

n°738863
ptitchep
Posté le 26-05-2004 à 00:52:04  profilanswer
 

Merci pour les reponses
En fait j'utilisais la fonction time pour obtenir l'heure je crois (j'avais deja été obligé de compter les images dans un autre prog et j'ai fait un copier coller). j'ai essayer en enlevant le décompte des secondes et en remplaçant :
 
mov al,1  
 
par:
 
mov al,couleur
 
et en augmentant couleur à chaque boucle
C'est peut-etre un peu plus rapide mais j'ai (presque, il ne faut pas exagérer) le temps de compter les 256 ecrans qui s'affichent...

n°738870
bjone
Insert booze to continue
Posté le 26-05-2004 à 01:00:42  profilanswer
 

bah moi ce que je te propose, c'est de faire 1000 remplissage du buffer vidéo, et de diviser ce qui a été mesuré par 1000, parceque ton aproche par time elle bancale.

n°738877
ptitchep
Posté le 26-05-2004 à 01:03:42  profilanswer
 

je vais essayer...

n°738889
ptitchep
Posté le 26-05-2004 à 01:12:24  profilanswer
 

Le prog met environ 1 min 17 sec pour afficher 1000 images
ca fait environ 13 images/sec. C'est pas très précis comme mesure mais ca suffit pour voir la lenteur. Il n'y avait que la fonction qui tournait en boucle, j'ai chronométré à la main...
Calculer avec time me faisait surement perdre un peu de tps...

n°738921
bjone
Insert booze to continue
Posté le 26-05-2004 à 02:18:58  profilanswer
 

non, mais c'est très très bizarre.
 
que l'affichage "banked" soit très sensiblement plus lent que le "linear", je veux bien, mais aussi lent y'a une couille dans le potage :??:
 
t'es sûr que tu attends pas le retour balayage ou autre glissade ?

n°738926
bjone
Insert booze to continue
Posté le 26-05-2004 à 02:25:34  profilanswer
 

t'as fait des tests avec les outils fournis avec univbe de SciTech ? (merde la version gratos est pu dispo :/)

n°739292
ptitchep
Posté le 26-05-2004 à 11:01:24  profilanswer
 

non je cherche ce que c...

mood
Publicité
Posté le 26-05-2004 à 11:01:24  profilanswer
 

n°739794
bjone
Insert booze to continue
Posté le 26-05-2004 à 13:38:53  profilanswer
 

bah c'était un soft qui permettait d'obtenir les extensions bios vesa 2.0 pour les cartes qui n'en avaient pas. (soft très interressant lors de l'age d'or des jeux dos svga)
 
si tu veux je t'envoyes les parties gratuites...
 
accessoirement Scitech participe au dev d'OpenWatcom... (la version OpenSource du compilateur utilisé lors de l'age d'or des jeux dos ;) ceci expliquant cela)


Message édité par bjone le 26-05-2004 à 13:41:48
n°740414
ptitchep
Posté le 26-05-2004 à 17:18:13  profilanswer
 

J'ai trouvé la version 6.53 (sdd653.exe) si tu peux m'eclairer sur le fonctionnement ça serait cool  
Merci
 
Chep

n°740503
HelloWorld
Salut tout le monde!
Posté le 26-05-2004 à 18:27:58  profilanswer
 

Tu es sous quel OS ?
Tu es sous le vrai DOS ou dans une boite d'émulation sous un OS 32 bits ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°740661
bjone
Insert booze to continue
Posté le 26-05-2004 à 20:06:47  profilanswer
 

ptitchep a écrit :

J'ai trouvé la version 6.53 (sdd653.exe) si tu peux m'eclairer sur le fonctionnement ça serait cool  
Merci
 
Chep


 
t'as un truc dedans qui s'appelles VBETEST.
 
si en 800x600x8, il débite plus d'images que toi en "banked" c'est qu'il y a un beans dans ton code (je dirai ptet à l'extérieur du code asm), sinon bah y'a un blem ailleurs.

n°740702
ptitchep
Posté le 26-05-2004 à 20:35:50  profilanswer
 

Ok j'ai fait le test, il m'affiche 60 fps. j'en suis loin...
Je suis sous windows 98 j'ai essayer de démarrer le pc sous dos et... c'est encore plus lent! J'y comprend rien!

n°740708
bjone
Insert booze to continue
Posté le 26-05-2004 à 20:43:22  profilanswer
 

bah pause un arrêt sur le 'jb', et  regarde si DX est pas corrompu par l'appel du bios.

n°745938
ptitchep
Posté le 31-05-2004 à 11:11:55  profilanswer
 

...
ça se tente...

n°746066
Kristoph
Posté le 31-05-2004 à 12:57:45  profilanswer
 

J'ai vraiment perdu la main en assembleur, c'est quoi ces lignes : ( je parrie que c'est ça qui prend le plus de temps )
 
 mov ax,4f05h  
 xor bx,bx  
 int 10h  

n°746087
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 31-05-2004 à 13:25:49  profilanswer
 

Kristoph a écrit :

J'ai vraiment perdu la main en assembleur, c'est quoi ces lignes : ( je parrie que c'est ça qui prend le plus de temps )
 
 mov ax,4f05h  
 xor bx,bx  
 int 10h


Ca appelle la fonction du BIOS qui réalise le bankswitching, qui prend en argument :
bx = 0 (toujours)
dx = n° de la banque


---------------
J'ai un string dans l'array (Paris Hilton)
n°746101
Kristoph
Posté le 31-05-2004 à 13:38:00  profilanswer
 

Bah voila le problème, il vaut largement mieux passer en mode protegé et utiliser un framebuffer complet mappé en mémoire que de passer par le bankswitching :)

n°746105
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 31-05-2004 à 13:42:46  profilanswer
 

Oui, mais il y aura forcément du bankswitching à faire, que ce soit par le BIOS ou à la main, vu que la VRAM en 13h fait 64000 octets, alors qu'il a besoin de 480000 octets.


---------------
J'ai un string dans l'array (Paris Hilton)
n°746119
Kristoph
Posté le 31-05-2004 à 14:00:30  profilanswer
 

Il faut voir que depuis le 386, on peut faire du mode 32bits ce qui a l'énorme avantage de ne plus nécessité de faire du bankswitching et par la même améliore énormément les perfs.
 

Citation :

(Version 2.0 of the VESA video standard) covers extra features like protected mode, flat memory video space (no banks), etc.

n°746125
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 31-05-2004 à 14:08:39  profilanswer
 

Kristoph a écrit :

Il faut voir que depuis le 386, on peut faire du mode 32bits ce qui a l'énorme avantage de ne plus nécessité de faire du bankswitching et par la même améliore énormément les perfs.
 

Citation :

(Version 2.0 of the VESA video standard) covers extra features like protected mode, flat memory video space (no banks), etc.




Effectivement, j'avais oublié que VESA 2.0 permettait de faire du flat :jap:


---------------
J'ai un string dans l'array (Paris Hilton)
n°746134
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 31-05-2004 à 14:16:20  profilanswer
 

ptitchep >> essaie de réécrire ton programme avec VBE 2.0 pour voir si tu gagnes en perfs :
 
http://www.geocities.com/SiliconVa [...] /vesa.html


---------------
J'ai un string dans l'array (Paris Hilton)
n°746230
bjone
Insert booze to continue
Posté le 31-05-2004 à 15:55:10  profilanswer
 

vi mais fo qu'il passe à DJGPP ou au Watcom.

n°748038
ptitchep
Posté le 01-06-2004 à 21:06:38  profilanswer
 

J'ai récupéré masm32 et j'ai remplacé stosb par stosd et je gagne un peu de temps. Expliquez moi comment passer en mode protégé pour avoir un buffer de 480000 octets parce que même en compilant en 32 bits mes segments sont limités à 64Ko
Merci bcp
Chep

n°748044
bjone
Insert booze to continue
Posté le 01-06-2004 à 21:08:44  profilanswer
 

tu télécharges DJGPP ou OpenWatcom, et tu compiles avec un Dos Extender comme DOS4G(W), PMODE(/W), ou CWSDPMI. y'en a d'autres mais c'est les plus connus/stables. (petite préférence pour PMODE)

n°748056
ptitchep
Posté le 01-06-2004 à 21:15:50  profilanswer
 

J'ai l'impression que l'installation de djgpp n'est pas très simple... je vais voir pour openwatcom...

n°748076
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 01-06-2004 à 21:22:54  profilanswer
 

open watcom est 100 fois plus simple à installer
pour compiler un programme DOS avec le dos4gw : wcl386 /l=dos4g tonprog.c

n°748082
ptitchep
Posté le 01-06-2004 à 21:26:33  profilanswer
 

Je suis en train de chercher open watcom mais j'ai l'impression qu'il est long a télécharger avec un 56k...

n°748092
ptitchep
Posté le 01-06-2004 à 21:32:32  profilanswer
 

Pouvez vous me dire ou le télécharger  gratuitement?

n°748106
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 01-06-2004 à 21:38:31  profilanswer
 

ptitchep a écrit :

Pouvez vous me dire ou le télécharger  gratuitement?

euh, [:google] hein !
c'est un projet Open Source

n°748132
ptitchep
Posté le 01-06-2004 à 21:44:05  profilanswer
 

ok j'ai rien dit c'est que je suis tombé sur open watcom donnation 25$ et quelque... j'ai téléchargé la source depuis le site, 43 Mo... J'en ai pour un bon mois...

n°748334
HelloWorld
Salut tout le monde!
Posté le 02-06-2004 à 00:24:33  profilanswer
 

Les sources d'Open Watcom, ça se compile pas avec... Open Watcom ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°748930
christophe​_d13
L'efficacité à tout prix.
Posté le 02-06-2004 à 15:01:56  profilanswer
 

Le problème de faire des appels de puis le mode réel aux fonctions VBE2, c'est que le proc doit passer en mode protégé, faire le traîtement VBE2 puis repasser en mode réel.
 
Donc l'idéal, tout le monde l'a dit, programmer directement en  mode protégé.

n°748947
HelloWorld
Salut tout le monde!
Posté le 02-06-2004 à 15:06:07  profilanswer
 

+1
L'idéal c'est d'utiliser OpenGL ou DirectX ou tout autre lib moderne sur un OS moderne.
C'est très simple :
- mode réel = segments de 64Ko max. Faut se prendre la tête pour manipuler des buffers plus gros, tout ça avec des performances médiocres (adressage 16 bits).
- 800*600 = 480 000. Si tu es en 16 bits, ça fait pas loin de 1Mo de mémoire à adresser depuis un OS qui en offre...640Ko. En 32 bits, tu as plus de mémoire à adresser que le processeur (en mode réel) ne te le permet.
 
Et tout ça sans bénéficier de la moindre capacité d'accélération des cartes graphiques. Rien que dessiner une ligne c'est la merde.


Message édité par HelloWorld le 02-06-2004 à 15:07:45

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°749252
christophe​_d13
L'efficacité à tout prix.
Posté le 02-06-2004 à 18:22:15  profilanswer
 

+1
Réel = prise de tête sauf pour faire du boot
Protégé = royal !

n°764190
ptitchep
Posté le 15-06-2004 à 13:13:38  profilanswer
 

J'ai (enfin) téléchargé open watcom mais je n'arrive pas a integrer de l'assembleur dans mon code c++:
asm
 {
  mov ax,12
 }
Il me trouve une erreur sur la ligne de l'accolade ouvrante...
Error!E121:col(4) syntax error
.......
 
Chep

n°764203
Kristoph
Posté le 15-06-2004 à 13:19:38  profilanswer
 

L'assebmeur inline dans du code C ou C++ ne fait parti d'aucune norme existante. Chaque compilateur fait comme il veut. Il faudra donc que tu cherches dans la doc de open watcom pour ça.
 
PS : en mode protege 32bit, il est de bon ton d'utiliser EAX à la place de AX ;)

n°764353
bjone
Insert booze to continue
Posté le 15-06-2004 à 14:13:51  profilanswer
 

avec OpenWatcom, l'asm il vaux mieux l'utiliser comme ça:
 

Code :
  1. #pragma intrinsic (Show_Mouse)
  2. void Show_Mouse(void);
  3. #pragma aux Show_Mouse = "mov ax,1" \
  4.                          "int 33h"  \
  5.                          modify [ eax ];

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  programmation graphique 800*600

 

Sujets relatifs
programmation 32 bitsinterface graphique (ms VC++ 6 // Borland C++ builder)
Interface graphique : comment docker des JPanel de maniere définitive?Liste des languages de programmation. [Scriptol vous connaissez?]
Petit Probleme de programmationl'affichage graphique sous visual fortran avec developer studio
affichage graphique menu langage CProgrammation en Vax
Programmation OS & API Windowsalgorithme et programmation en langage c
Plus de sujets relatifs à : programmation graphique 800*600


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR