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

 


Dernière réponse
Sujet : [C] écrire dans la mémoire video...
verdoux Le bouquin d'Abrash a été remis en ligne.
http://www.ddj.com/articles/2001/0165/0165f/0165f.htm

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
verdoux Le bouquin d'Abrash a été remis en ligne.
http://www.ddj.com/articles/2001/0165/0165f/0165f.htm
AlphaT 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);
}
AlphaT 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]

belzme 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
verdoux 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]

AlphaT

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]

gilou Essayes de degotter le Graphics Programming Black Book de Michael Abrash, tu devrais y trouver les infos necessaires.
A+,
belzme 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?... :(
gilou Ca doit se trouver d'occase.
C'est vrai que c'etait un bon bouquin.
A+,
BifaceMcLeOD 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...)
AlphaT :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]

belzme wow, merci pour ta réponse très détaillé et très clair !
 
J'aurais pas pu demander mieux !
 
 
merci!
AlphaT 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]

belzme 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 :)

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