This commit is contained in:
rick 2023-09-13 15:52:45 +02:00
parent 306cbbf842
commit 951c4fee39
Signed by: Rick
GPG key ID: 5CBE8779CD27BCBA
2 changed files with 51 additions and 6 deletions

View file

@ -5,7 +5,7 @@ void fb_write_cell(unsigned int i, char c, unsigned char fg, unsigned char bg)
{ {
char *fb = (char*) 0xB8000; // adresse du framebuffer char *fb = (char*) 0xB8000; // adresse du framebuffer
*(fb + i) = c; *(fb + i) = c;
*(fb + i + 1) = (fg & 0x0F) | ((bg & 0x0F) << 4); // little endian ?? *(fb + i + 1) = (fg & 0x0F) | ((bg & 0x0F) << 4);
} }
void fb_move_cursor(unsigned short pos) void fb_move_cursor(unsigned short pos)

View file

@ -1,21 +1,59 @@
/** @file framebuffer.h */ /** @file framebuffer.h
* Fichier d'en-tête pour le framebuffer VGA.
*
* Références:
* - ports utilisés :
* https://wiki.osdev.org/VGA_Hardware#Port_0x3C4.2C_0x3CE.2C_0x3D4
* - ports utilisés, registres, couleurs, explications sur les adresses
* mémoires pour communiquer avec le framebuffer VGA :
* http://www.brokenthorn.com/Resources/OSDev10.html
* - explications sur les registres et sous-registres accessibles via les
* ports : http://www.osdever.net/FreeVGA/vga/vgareg.htm#indexed
* - commandes possibles : http://www.osdever.net/FreeVGA/vga/crtcreg.htm
* - encodage du caractère pour le framebuffer :
* https://devse.wiki/x86_64/p%C3%A9riph%C3%A9riques/framebuffer.html
*/
#ifndef FRAMEBUFFER_H #ifndef FRAMEBUFFER_H
#define FRAMEBUFFER_H #define FRAMEBUFFER_H
/**
* @def FB_ADDRESS
* L'adresse mémoire du mode texte couleur du VGA.
*/
#define FB_ADDRESS 0xB800
/** /**
* @def FB_COMMAND_PORT * @def FB_COMMAND_PORT
* Le port pour pouvoir envoyer des instructions au curseur du framebuffer * Le port pour pouvoir indiquer le sous-registre que l'on souhaite modifier
* dans le framebuffer VGA. Il s'agit du registre d'adresses.
*/ */
#define FB_COMMAND_PORT 0x3D4 #define FB_COMMAND_PORT 0x3D4
/** /**
* @def FB_DATA_PORT * @def FB_DATA_PORT
* Le port pour pouvoir envoyer des instructions au curseur du framebuffer * Le port pour pouvoir indiquer des données à écrire dans un sous-registre du
* framebuffer VGA. Il s'agit du registre de données.
*/ */
#define FB_DATA_PORT 0x3D5 #define FB_DATA_PORT 0x3D5
#define FB_HIGH_BYTE_COMMAND 14 /**
#define FB_LOW_BYTE_COMMAND 15 * @def FB_HIGH_BYTE_COMMAND
* Le sous-registre à modifier pour mettre à jour les premiers bits (15-8) du
* registre indiquant la position du curseur.
*
* Plus d'information : http://www.osdever.net/FreeVGA/vga/crtcreg.htm#0E
*/
#define FB_HIGH_BYTE_COMMAND 0x0E
/**
* @def FB_LOW_BYTE_COMMAND
* Le sous-registre à modifier pour mettre à jour les derniers bits (7-0) du
* registre indiquant la position du curseur.
*
* Plus d'information : http://www.osdever.net/FreeVGA/vga/crtcreg.htm#0F
*/
#define FB_LOW_BYTE_COMMAND 0x0F
#define FB_WHITE 0x0F #define FB_WHITE 0x0F
#define FB_BLACK 0x00 #define FB_BLACK 0x00
@ -23,6 +61,13 @@
/** /**
* permet d'écrire dans un emplacement du framebuffer * permet d'écrire dans un emplacement du framebuffer
* *
* Il va écrire dans l'emplacement i et i+1 du framebuffer le caractère c suivi
* d'un byte coupé en 2 : 4 bits pour la couleur du texte et 4 pour celle du
* fond.
*
* Structure du mot mit en mémoire X = bit pour le caractère, Y la couleur
* du texte et Z couleur du fond : (0) XXXXXXXX YYYYZZZZ (15)
*
* @param i l'emplacement il faut écrire * @param i l'emplacement il faut écrire
* @param c le caractère * @param c le caractère
* @param fg la couleur du texte * @param fg la couleur du texte