# Besturingssystemen practicum 1:
Jan-Pieter Baert & Gertjan De Smet
## Opgave 1: Afbeelden van het videogeheugen
## Antwoord A:
PageTable:
| Address | Waarde |
|:---------------:|:------:|
| 0x400000:0x8000 | |
| 0xB9000:0x8000 | 0b11 |
| 0xB8000:0x8000 | 0b11 |
| 0xC000:0x8000 | 0b0 |
| 0xB000:0x8000 | 0b11 |
| 0xA000:0x8000 | 0b11 |
| 0x9000:0x8000 | 0b11 |
| 0x8000:0x8000 | 0b11 |
| 0x7000:0x8000 | 0b11 |
| 0x6000:0x8000 | 0b11 |
| 0x5000:0x8000 | 0b11 |
| 0x4000:0x8000 | 0b11 |
| 0x3000:0x8000 | 0b11 |
| 0x2000:0x8000 | 0b11 |
| 0x1000:0x8000 | 0b11 |
| 0:0x8000 | 0b11 |
PageDirTable:
| Address | Waarde |
|:-------------:|:--------:|
| 0x2048:0x9000 | |
| ... | 0b |
| 0x0:0x9000 | 0:0x8003 |
Om zowel in kleuren- als in monochrome tekstmode hetzelfde logische adres te gebruiken passen we de PageTable lichtjes aan in de laatste lijnen:
```
DD 0B000h|3
TIMES ((0B8000h-0C000h)/4096) DD 0
DD VGA_MEM|3
TIMES ((0400000h-0B9000h)/4096) DD 0
```
We passen ook de printchar methode aan om het logische adres te gebruiken door lijn 432 aan te passen van
`mov [0xb8000+ebx],cx`
naar:
`mov [VGA_MEM_MAPPED+ebx],cx`
## Opgave 2: De code verplaatsen
## Antwoord B:
In de paginatabel hebben we voor elk van de originele eerste 12 adressen een nieuwe entry met opschuiving van 1MiB (= `Displacement`).
Daarna vullen we 999 (=`0x3E7`) lege page entries in zodat op index 1023 een entry voor het adres van het video geheugen `VGA_MEM` staat.
```
DD Displacement|3
DD 01000h+Displacement|3
DD 02000h+Displacement|3
DD 03000h+Displacement|3
DD 04000h+Displacement|3
DD 05000h+Displacement|3
DD 06000h+Displacement|3
DD 07000h+Displacement|3
DD 08000h+Displacement|3
DD 09000h+Displacement|3
DD 0A000h+Displacement|3
DD 0B000h+Displacement|3
DD 3
DD 01000h|3
DD 02000h|3
DD 03000h|3
DD 04000h|3
DD 05000h|3
DD 06000h|3
DD 07000h|3
DD 08000h|3
DD 09000h|3
DD 0A000h|3
DD 0B000h|3
; 0x3E7 = 999
TIMES 0x3E7 DD 0
DD VGA_MEM|3
```
## Opgave 3: De oorspronkelijke code wissen
## Antwoord C:
Het bitpatroon `0xCCCCCCCC` wordt gebruikt omdat het programma bij het lezen van dit geheugen een interupt zal genereren, ongeacht waar het begint te lezen in de 8 bytes. (De interupt int3 heeft de opcode `0xCC` )