Compare commits
No commits in common. "c6922febc18498b7c72d7c18240c0a3521443abe" and "306cbbf842f7eeb624506ae22a68c7f18bd0cd21" have entirely different histories.
c6922febc1
...
306cbbf842
2 changed files with 13 additions and 72 deletions
|
@ -3,15 +3,15 @@
|
||||||
|
|
||||||
void fb_write_cell(unsigned int i, char c, unsigned char fg, unsigned char bg)
|
void fb_write_cell(unsigned int i, char c, unsigned char fg, unsigned char bg)
|
||||||
{
|
{
|
||||||
char *fb = (char *) FB_ADDRESS;
|
char *fb = (char*) 0xB8000; // adresse du framebuffer
|
||||||
*(fb + i) = c;
|
*(fb + i) = c;
|
||||||
*(fb + i + 1) = ((bg & 0x0F) << 4) | (fg & 0x0F);
|
*(fb + i + 1) = (fg & 0x0F) | ((bg & 0x0F) << 4); // little endian ??
|
||||||
}
|
}
|
||||||
|
|
||||||
void fb_move_cursor(unsigned short pos)
|
void fb_move_cursor(unsigned short pos)
|
||||||
{
|
{
|
||||||
outb(FB_ADDRESS_PORT, FB_HIGH_BYTE_COMMAND);
|
outb(FB_COMMAND_PORT, FB_HIGH_BYTE_COMMAND);
|
||||||
outb(FB_DATA_PORT, (pos >> 8) & 0x00FF);
|
outb(FB_DATA_PORT, (pos >> 8) & 0x00FF);
|
||||||
outb(FB_ADDRESS_PORT, FB_LOW_BYTE_COMMAND);
|
outb(FB_COMMAND_PORT, FB_HIGH_BYTE_COMMAND);
|
||||||
outb(FB_DATA_PORT, pos & 0x00FF);
|
outb(FB_DATA_PORT, pos & 0x00FF);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,87 +1,28 @@
|
||||||
/** @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
|
* @def FB_COMMAND_PORT
|
||||||
* L'adresse mémoire du mode texte couleur du VGA.
|
* Le port pour pouvoir envoyer des instructions au curseur du framebuffer
|
||||||
*/
|
*/
|
||||||
#define FB_ADDRESS 0x000B8000
|
#define FB_COMMAND_PORT 0x3D4
|
||||||
|
|
||||||
/**
|
|
||||||
* @def FB_ADDRESS_PORT
|
|
||||||
* 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_ADDRESS_PORT 0x3D4
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @def FB_DATA_PORT
|
* @def FB_DATA_PORT
|
||||||
* Le port pour pouvoir indiquer des données à écrire dans un sous-registre du
|
* Le port pour pouvoir envoyer des instructions au curseur du framebuffer
|
||||||
* 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
|
||||||
* @def FB_HIGH_BYTE_COMMAND
|
#define FB_LOW_BYTE_COMMAND 15
|
||||||
* 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
|
|
||||||
|
|
||||||
/**
|
#define FB_WHITE 0x0F
|
||||||
* @def FB_LOW_BYTE_COMMAND
|
#define FB_BLACK 0x00
|
||||||
* 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_BLACK 0x00
|
|
||||||
#define FB_BLUE 0x01
|
|
||||||
#define FB_GREEN 0x02
|
|
||||||
#define FB_CYAN 0x03
|
|
||||||
#define FB_RED 0x04
|
|
||||||
#define FB_MAGENTA 0x05
|
|
||||||
#define FB_BROWN 0x06
|
|
||||||
#define FB_L_GREY 0x07
|
|
||||||
#define FB_D_GREY 0x08
|
|
||||||
#define FB_L_BLUE 0x09
|
|
||||||
#define FB_L_GREEN 0x0A
|
|
||||||
#define FB_L_CYAN 0x0B
|
|
||||||
#define FB_L_RED 0x0C
|
|
||||||
#define FB_L_MAGENRA 0x0D
|
|
||||||
#define FB_YELLOW 0x0E
|
|
||||||
#define FB_WHITE 0x0F
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 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 i l'emplacement où 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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue