/* 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 .