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

  FORUM HardWare.fr
  Programmation
  C

  Turbo C [oldies inside] Mode graphique...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Turbo C [oldies inside] Mode graphique...

n°1009427
oZen
Récupéré mon Zeuuuu.
Posté le 11-03-2005 à 11:10:47  profilanswer
 

Bonjour !!
 
J'ai installé Turbo C 1.1 sur un vieux 386 portable monochrome, et je cherche a afficher un mode graphique 640x480 monochrome (portable vga tt de meme).
 
J'ai le code pour un mode 13h (320x200, 256 couleurs), mais je le trouve pas tres fin et inutile puisque le portable est monochrome...
 

Code :
  1. #include <dos.h>
  2. #define LARGEUR             320
  3. typedef unsigned char  byte;
  4. typedef unsigned short word;
  5. byte *VGA=(byte *)0xA0000000L;
  6. void set_mode(byte mode)
  7. {
  8.   union REGS regs;
  9.   regs.h.ah = 0x00;
  10.   regs.h.al = mode;
  11.   int86(0x10, &regs, &regs);
  12. }
  13. void pixel(int x,int y,byte color)
  14. {
  15.   VGA[y*LARGEUR+x]=color;
  16. }
  17. void main()
  18. {
  19.   int x,y,color;
  20.   set_mode(0x13);
  21.     pixel(100,100,15);
  22.   return;
  23. }


 
J'ai donc ce code qui s'initialise en mode 13h affiche un pixel en 100x100 et en blanc.
Lorsque je passe en mode 12h (celui qui m'interesse: 640x480 mono), ca marche plus. Aucun pixel ne s'allume.
J'ai biensur changer la LARGEUR dans le define...
 
Quelles modif. je devrais faire pour que cela marche en mode 12h ?
De plus en mode 13h les couleurs sont facile a nommer, mais en monochrome, donc 1 bit par pixel, quelles valeur pour quelles "couleurs" ? (0=noir, 1=blanc ? (c just pour etre sur)).
 
Merci beaucoup d'avance !!!


---------------
http://reopen911.online.fr/?page_id=45
mood
Publicité
Posté le 11-03-2005 à 11:10:47  profilanswer
 

n°1009606
db__
spécialiste de l'à peu près
Posté le 11-03-2005 à 13:00:21  profilanswer
 

Bonjour
Je ne me rapelle plus très bien comment marche tout ça mais il ne faut pas oublier qu'en monochrome un point est codé sur 1 bit et non 1 octet donc quand on affecte une valeur à un point il faut faire un savant calcul d'adressage.
adr = y * 80 + (x >> 3); calcul l'octet du pixel
a = x & 7; calcul la position du bit dans l'octet
val = 1 << a; positionne le bit au bon endroit
if (v)
  *adr |= val; allume le point
else
  *adr &= val ^ 0xff; éteint le point
adr est le déplacement dans le segment vidéo 0xa000
v est 0 pour éteint autre valeur pour alumé
x et y la position du point en commençant par 0
le tout est à mettre en forme.
Tout ça est infiniment plus simple en assembleur.
Cordialement

n°1009617
oZen
Récupéré mon Zeuuuu.
Posté le 11-03-2005 à 13:11:12  profilanswer
 

oki merci bcp db_ !!!


---------------
http://reopen911.online.fr/?page_id=45

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

  Turbo C [oldies inside] Mode graphique...

 

Sujets relatifs
[C#] application graphique fonctionnant sous Win / LinuxRepresentation graphique d'une arborescence complexe
ajout d'un champ dynamique interface graphiqueAutorun page .htm --> mode "F11"
Graphique sous VB6Jolie interface graphique en VB
Bouton graphique : problème de MouseListener...Graphique en C/C++ avec MFC
[Sondage] Logiciel => Interface GraphiqueUne appli graphique pour tester ses expressions XPath ??
Plus de sujets relatifs à : Turbo C [oldies inside] Mode graphique...


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