Files
x86-bare-metal-examples/paging.S
2019-07-19 00:00:00 +00:00

37 lines
958 B
ArmAsm

/* https://github.com/cirosantilli/x86-bare-metal-examples#paging.S */
#include "common.h"
BEGIN
CLEAR
STAGE2
PROTECTED_MODE
SETUP_PAGING_4M
/* Setup a test canary value. */
movl $0x1234, 0x1000
/* Print the canary to make sure it is really there. */
VGA_PRINT_HEX_4 0x1000
/* Make page 0 point to 4KiB. */
orb $0x10, page_table + 1
PAGING_ON
/* THIS is what we've been working for!!!
* Even though we mov to 0, the paging circuit reads that as physical address 0x1000,
* so the canary value 0x1234 should be modified to 0x5678.
**/
movl $0x5678, 0
/* Turn paging back off to prevent it from messing with us.
* Remember that VGA does memory accesses, so if paging is still on,
* we must identity map up to it, which we have, so this is not mandatory.
* */
PAGING_OFF
/* Print the (hopefully) modified value 0x5678. */
VGA_PRINT_HEX_4 0x1000
jmp .