Same code/same and host using VMWARE, BOCHS, and QEMU works just fine, although I did have to enable large page support in BOCHS and QEMU.
VBOX is the odd one out, which is a shame as it's my favorite virtualization tool.
The CPUID 0x80000001 does not give me EDX BIT 26 (pdpe1gb). Enabling this via the cpuid-set command is ignored.
Any idea of the correct (exact) setting to enable pdpe1gb support?
Many thanks!
DP
Code: Select all
MOV EAX, 0x80000001
CPUID
AND EDX, pdpe1gb ;macro 0x1 << 26
JNZ long_mode_1g_page_tables_available
WRITE_TERMINAL_32 `Machine does not support 1 GiB Page Tables. Terminating.\n`
WAIT_FOREVER
long_mode_1g_page_tables_available:
MOV DWORD EAX, LONGMODE_PDPTE_ADDR
OR DWORD EAX, 0b011
MOV DWORD [LONGMODE_PML4E_ADDR], EAX
MOV DWORD [LONGMODE_PML4E_ADDR + 4], 0
MOV EAX, 0 ;first page address
MOV EBX, 0b10000011 ;flags: rw + final entry (no PDE or lower)
MOV ECX, 0x200 ;number of entries
MOV EDI, LONGMODE_PDPTE_ADDR; first destination address
.pdpte_loop:
MOV [EDI], EBX ;store flags
MOV [EDI + 4], EAX ;store address
ADD EDI, 8 ;next entry
ADD EAX, 0b100000000000000000000; next page address
LOOP .pdpte_loop