From 951c4fee39f0ee27a55f492dfb5cc5d1f81264d0 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 13 Sep 2023 15:52:45 +0200 Subject: [PATCH] add docs --- framebuffer.c | 2 +- framebuffer.h | 55 ++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/framebuffer.c b/framebuffer.c index bedd7c7..755a163 100644 --- a/framebuffer.c +++ b/framebuffer.c @@ -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 *(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) diff --git a/framebuffer.h b/framebuffer.h index fc29e8a..397e08a 100644 --- a/framebuffer.h +++ b/framebuffer.h @@ -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 #define FRAMEBUFFER_H +/** + * @def FB_ADDRESS + * L'adresse mémoire du mode texte couleur du VGA. + */ +#define FB_ADDRESS 0xB800 + /** * @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 + /** * @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_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_BLACK 0x00 @@ -23,6 +61,13 @@ /** * 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 où X = bit pour le caractère, Y la couleur + * du texte et Z couleur du fond : (0) XXXXXXXX YYYYZZZZ (15) + * * @param i l'emplacement où il faut écrire * @param c le caractère * @param fg la couleur du texte