---
# System prepended metadata

title: 'Besturingssystemen practicum 1:'

---

# 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` )