#include "affichage.h"
#include "commun.h"
#include "memoire.h"
unsigned char posX = 0;
unsigned char posY = 18;
void afficheUnCaractere(const PCARACTERE a)
{
char* pVideo = MemoireVideo;
//Si nous arrivons à la fin de la ligne
if(posX > LARGEUR_ECRAN)
{
posY += 1;
posX = 0;
}
switch(a->caractere)
{
case '\n':
posY += 1;
posX = 0;
break;
case '\t':
posX+=4;
break;
case '\b':
//Si nous reculons et que nous sommes au debut de la première ligne
if( (posX == 0) && (posY > 0) )
{
//Nous remontons à la ligne precedente
posY--;
//Nous remettons le curseur à la fin de la ligne
posX = LARGEUR_ECRAN;
}
//Sinan, on peut réécrire le caractère precedent
else
{
pVideo[posX+posY*LARGEUR_ECRAN -1] = 0;
pVideo[posX+posY*LARGEUR_ECRAN -2] = 0;
posX -= 2;
}
break;
default:
pVideo[posX + posY*LARGEUR_ECRAN] = a->caractere;
pVideo[posX + posY*LARGEUR_ECRAN + 1] = a->attribut;
posX+=2;
}
return;
}
void afficheUneChaine(const PCHAINE a)
{
CARACTERE ch;
char* chaine = a->chaine;
ch.attribut = a->attribut;
for(; *chaine ; chaine++)
{
ch.caractere = *chaine;
afficheUnCaractere(&ch);
}
return;
}
void afficheUneChaineVerte(const char * a)
{
CHAINE ch;
ch.chaine = (char*)a;
ch.attribut = forgeCouleurClair(Vert);
afficheUneChaine(&ch);
return;
}
void afficheNoyauOk(void)
{
CHAINE b;
b.chaine = "Noyau\t\t\t\t\t\t\t\t\t\t\t [OK]\n";
b.attribut = forgeCouleur(Blanc);
afficheUneChaine(&b);
zeroMemory((char*)0x713233, 7);
return;
}
void afficheChargementIDTOk(void)
{
CHAINE b;
b.chaine = "IDT \t\t\t\t\t\t\t\t\t\t\t\t[OK]\n";
b.attribut = forgeCouleur(Blanc);
afficheUneChaine(&b);
return;
}
void afficheInterruptionsDemasquesOk(void)
{
CHAINE b;
b.chaine = "Interruptions Demasquees\t\t[OK]\n";
b.attribut = forgeCouleur(Blanc);
afficheUneChaine(&b);
return;
}
void affichageInterruption(void)
{
CHAINE ch;
ch.chaine = "Clavier!! !\n";
ch.attribut = forgeCouleurClair(Rouge);
afficheUneChaine(&ch);
return;
}
void afficheConfigurationControleursIntsOk(void)
{
CHAINE ch;
ch.chaine = "Controleurs d'interruptions [OK]\n";
ch.attribut = forgeCouleur(Blanc);
afficheUneChaine(&ch);
return;
}
void afficheUnEntier(const PENTIER in)
{
unsigned char i, digit;
char chaine[10];
CHAINE ch;
ch.attribut = in->attribut;
ch.chaine = chaine;
//Null terminated string
chaine[9] = 0;
//On ajoute un espace
chaine[8] = ' ';
//On parcours chaque digit de l'entier
for(i = 0; i < 8; i++)
{
//On forge notre chaine
digit = RecupereDigit(i, in->entier);
//Si le nombre est > 9, on fait en sorte que le digit (nombre entres 10 et 15) affiche la lettre associé ('A' = 0x41, le nombre minimal etant 10, 0x41-10=0x37)
if(digit > 9)
chaine[7-i] = 0x37 + digit;
else
//Sinan c'est un nombre entres 0 et 9
chaine[7-i] = digit + '0';
}
afficheUneChaine(&ch);
return;
}