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

  FORUM HardWare.fr
  Programmation

  [C] écrire dans la mémoire video...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] écrire dans la mémoire video...

n°21704
belzme
Hertz ou ne pas hertz...
Posté le 01-04-2001 à 23:12:57  profilanswer
 

Voila je doit faire une méthode qui doit écrire directement dans la mêmoire video...
 
Je me doute que je doit utiliser l'intrruption 10h, fonction 09h
 
mais quel registre je doit modifier, et si quel registre joue quel rôle ?
 
Un simple exemple me suffirait !
 
 
merci :)

mood
Publicité
Posté le 01-04-2001 à 23:12:57  profilanswer
 

n°21708
AlphaT
Posté le 02-04-2001 à 02:19:05  profilanswer
 

C'est bien via int 10h que tu dois prendre pour écrire directement dans la mémoire vidéo. Pour le DOS, ces exemples suivants fonctionnement bien.
 
1er exemple : afficher un simple caractère  
 
void AfficherCar(char Car, int Coul)
{
 union REGS rin, rout;
 rin.h.ah = 9;            /* No du service */
 rin.h.al = Car;          /* CaractŠre … afficher */
 rin.h.bh = 0;            /* No de page */
 rin.h.bl = Coul;         /* Couleur */
 rin.x.cx = 1;            /* Nb d'exemplaires */
 int86(0x10,&rin, &rout); /* Interruption logicielle */
}
 
2e exemple : effacer l'écran en noir ou de n'importe quelle couleur.
 
void EffacerEcran(Byte Coul)
{
 int i;
 Byte far *ptrVideo = (Byte far *) 0xB8000000;
 for (i = 0; i < 2000; i++)
   {
    *ptrVideo++ = '█';    //caractère à afficher
    *ptrVideo++ = Coul;
   }
}
 
On met dans le début du programme les DEFINEs suivants qui serviront de paramètre pour la variable Coul utilisée comme simple paramètre.
 
#define NOIR 0x00
#define BLEU 0x01
#define VERT 0x02
#define CYAN 0x03
#define ROUGE 0x04
#define JAUNE 0x0E
#define BLANC 0x0F
 
 
3e exemple: Écriture d'une chaîne de caractères à l'écran. *ch représente le texte ou la variable contenant le texte.
 
void EcrireChaine(Byte *ch, int Lig, int Col, Byte Couleur)
{
 Byte far *ptrVideo = (Byte far *) 0xB8000000;
 Byte far *ptr = ptrVideo + 160 * (Lig-1) + 2 * (Col-1);
 for( ; *ch; ch++)
   {
    *ptr++ = *ch;
    *ptr++ = Couleur;
   }
}
 
Un appel à cette procédure pourrait être comme suit:
 
EcrireChaine("Menu Option 1",10,30, BLANC);
 
Ce sont des exemples bien basiques... mais il existe un programme qui s'appelle Helppc pour se documenter sur les interruptions, les registres.

 

[edit]--Message édité par AlphaT--[/edit]

n°21710
belzme
Hertz ou ne pas hertz...
Posté le 02-04-2001 à 03:00:38  profilanswer
 

wow, merci pour ta réponse très détaillé et très clair !
 
J'aurais pas pu demander mieux !
 
 
merci!

n°21711
AlphaT
Posté le 02-04-2001 à 03:10:52  profilanswer
 

:jap:
 
ça évites pas mal de recherches parce que ce n'est pas un truc qu'on rencontre souvent aujourd'hui parce qu'on a des compilateurs de 3e et 4e génération utilisés dans des environnement de développement intégrés.

 

[edit]--Message édité par AlphaT--[/edit]

n°21911
BifaceMcLe​OD
The HighGlandeur
Posté le 03-04-2001 à 01:28:13  profilanswer
 

Ben sinon, il faut la BiblePC (ça existe encore, ce truc, d'ailleurs ? Moi je l'ai achetée il y a plus de 10 ans...)

n°21914
gilou
Modérateur
Modzilla
Posté le 03-04-2001 à 02:15:00  profilanswer
 

Ca doit se trouver d'occase.
C'est vrai que c'etait un bon bouquin.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°21917
belzme
Hertz ou ne pas hertz...
Posté le 03-04-2001 à 03:32:18  profilanswer
 

ben j'ai un help de la bible du PC pour les interuptions...
 
uhh mais j'ai essayer le effacerEcran et sa marche pas du tout... (passe même pas la compilation)...
 
 
pourquoi?... :(

n°21919
gilou
Modérateur
Modzilla
Posté le 03-04-2001 à 03:48:34  profilanswer
 

Essayes de degotter le Graphics Programming Black Book de Michael Abrash, tu devrais y trouver les infos necessaires.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°22039
AlphaT
Posté le 03-04-2001 à 15:16:10  profilanswer
 

BelzME a écrit a écrit :

ben j'ai un help de la bible du PC pour les interuptions...
 
uhh mais j'ai essayer le effacerEcran et sa marche pas du tout... (passe même pas la compilation)...
 
 
pourquoi?... :(




 
Ca marche nickel dans mon cas.
C'est quoi les messages d'erreur du compilateur?
 
Aussi dans ce module je précise que le caractère à afficher n'était pas le bon... la ligne en cause devient :
 
 *ptrVideo++ = '█';

 

[edit]--Message édité par AlphaT--[/edit]

n°22043
verdoux
And I'm still waiting
Posté le 03-04-2001 à 15:25:51  profilanswer
 

Le bouquin d'Abrash était disponible officiellement en download:
http://www.ddj.com/articles/2001/0165/0165f/0165f.htm
 
Mais le serveur n'a pas de tenu la charge.
N'empêche qu'on doit pouvoir le trouver maintenant sur des serveurs officieux.

 

[edit]--Message édité par Verdoux--[/edit]

mood
Publicité
Posté le 03-04-2001 à 15:25:51  profilanswer
 

n°22062
belzme
Hertz ou ne pas hertz...
Posté le 03-04-2001 à 16:34:52  profilanswer
 

hehe ok je vais aller voir :)
 
uh erreur de compilation :
 
ben le Byte il c'est même pas que sa existe...
j'ai essayer avec int , long etc sa veut pas passer (j'ai aussi de reduire a b8000 juste pour tester...)
 
ook vais regarder pour le bouquin sauf que je doit remettre sa pour demain :p

n°22126
AlphaT
Posté le 03-04-2001 à 21:37:48  profilanswer
 

Oupppss...
 
Ajoute ça au début (avec les définitions des procédures) de ton code et ton compilateur va aimer!
 
/* **** Types **** */
typedef unsigned char Byte;    /* Inventer le type Byte */

 

[edit]--Message édité par AlphaT--[/edit]

n°22127
AlphaT
Posté le 03-04-2001 à 21:40:55  profilanswer
 

Voici un autre truc que j'avais dans le mien :
 
void CacherCurseur(void)
{
   /* Pour faire disparaitre le curseur, il faut fournir  */
   /* des valeurs de ligne debut et fin superieures aux   */
   /* valeurs normales                                    */
 union REGS rin, rout;
 rin.h.ch = 255;           /* Ligne début */
 rin.h.cl = 255;           /* Ligne fin */
 rin.h.ah = 1;             /* No du service désiré */
 int86(0x10, &rin, &rout);
}

n°22973
verdoux
And I'm still waiting
Posté le 06-04-2001 à 15:04:58  profilanswer
 

Le bouquin d'Abrash a été remis en ligne.
http://www.ddj.com/articles/2001/0165/0165f/0165f.htm


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

  [C] écrire dans la mémoire video...

 

Sujets relatifs
NT: liste des dlls chargées en mémoire ?[C/C++/OPENGL] comment ecrire dans un HDC
Javascript et real video[ASP] comment écrire dans une base en fin de session ??
Afficher des infos sur la memoire en version texte !C++ Pb de libération de memoire.
[C] ecrire un tableau[N][N] en binaire dans un fichierHTML et Vidéo
problème de mémoire XMS avec un 386[Javascript] Limitation de mémoire @ déclarations de vars/arrays ?
Plus de sujets relatifs à : [C] écrire dans la mémoire video...


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