Ontwerp en bouw een besturingssysteem/Foutenopsporing/De console
De console is op dit moment onze belangrijkste bron van informatie. Voor alles wat er gebeurt zullen we een melding op de console moeten laten zien, en daarvoor is het belangrijk om, behalve vooraf gedefinieerde teksten, ook getallen in decimaal en hexadecimaal te kunnen afdrukken. In dit hoofdstuk behandelen we de console zoals deze na het opstarten van het systeem werkt.
Het consolegeheugen
[bewerken]Het zichtbare deel van de console is 80 karakters (of kolommen) breed en 25 regels hoog, en het wordt aangestuurd door de VGA controller. De VGA controller heeft een deel van het geheugen gereserveerd (vanaf 0xB8000) voor de weer te geven tekst. Helaas is daarmee alles gezegd; we zullen zelf moeten zorgen dat als we aan het einde van het scherm zijn, de tekst naar boven springt.
Elk karakter in het consolegeheugen is twee bytes groot. Het consolegeheugen is dus 80 kolommen * 25 regels * 2 bytes = 4000 bytes groot. Elke volgende regel staat na de voorgaande regel in het consolegeheugen. Dus de tweede regel begint op consolegeheugenadres 0xB8000 + 1 regel * 80 kolommen * 2 bytes = 0xB80A0. Kortom, het karakter op een bepaalde regel en kolom staat op het volgende geheugenadres:
(de eerste regel is , de eerste kolom is )
De karakters
[bewerken]15 | 12 | 11 | 8 | ||||
Achtergrond | Voorgrond |
7 | 0 | ||||||
Karakter |
Elk karakter in het consolegeheugen is 16 bits. De laagste 8 bits bepalen het karakter. Standaard is de ASCII tekenset actief. De hoogste 4 bits bepalen de achtergrondkleur, de voorgaande 4 bits de voorgrondkleur. Hieronder staat het standaard 16 kleurenpalet:
Waarde | Achtergrondkleur | Voorgrondkleur | ||
---|---|---|---|---|
0x0 | Zwart | Zwart | 9ABC2 | |
0x1 | Blauw | Blauw | 9ABC2 | |
0x2 | Groen | Groen | 9ABC2 | |
0x3 | Cyaan | Cyaan | 9ABC2 | |
0x4 | Rood | Rood | 9ABC2 | |
0x5 | Magenta | Magenta | 9ABC2 | |
0x6 | Oker | Oker | 9ABC2 | |
0x7 | Licht grijs | Licht grijs | 9ABC2 |
Waarde | Achtergrondkleur | Voorgrondkleur | ||
---|---|---|---|---|
0x8 | Zwart | Tekst |
Donkergrijs | 9ABC2 |
0x9 | Blauw | Tekst |
Lichtblauw | 9ABC2 |
0xA | Groen | Tekst |
Lichtgroen | 9ABC2 |
0xB | Cyaan | Tekst |
Licht cyaan | 9ABC2 |
0xC | Rood | Tekst |
Lichtrood | 9ABC2 |
0xD | Magenta | Tekst |
Licht magenta | 9ABC2 |
0xE | Oker | Tekst |
Geel | 9ABC2 |
0xF | Licht grijs | Tekst |
Wit | 9ABC2 |
Extra (appendix?): Hoe het kleurenpalet te veranderen? Hoe de letters aan te passen?