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