diff --git a/reactos/boot/freeldr/freeldr/arch/i386/entry.S b/reactos/boot/freeldr/freeldr/arch/i386/entry.S index 0f0a10f8401..4abacd938fb 100644 --- a/reactos/boot/freeldr/freeldr/arch/i386/entry.S +++ b/reactos/boot/freeldr/freeldr/arch/i386/entry.S @@ -211,69 +211,11 @@ inrmode: ret - /* - * Needed for enabling the a20 address line - */ -.code16 -empty_8042: - .word 0x00eb,0x00eb // jmp $+2, jmp $+2 - in al, HEX(64) - cmp al, HEX(ff) // legacy-free machine without keyboard - jz empty_8042_ret // controllers on Intel Macs read back 0xFF - test al, 2 - jnz empty_8042 -empty_8042_ret: - ret - - /* - * Enable the A20 address line (to allow access to over 1mb) - */ -EXTERN(_EnableA20) .code32 +PUBLIC _EnableA20 +_EnableA20: + ret - pusha - - call switch_to_real -.code16 - - call empty_8042 - mov al, HEX(D1) // command write - out HEX(64), al - call empty_8042 - mov al, HEX(DF) // A20 on - out HEX(60), al - call empty_8042 - call switch_to_prot - .code32 - - popa - - ret - - /* - * Disable the A20 address line - */ -EXTERN(_DisableA20) -.code32 - - pusha - - call switch_to_real - .code16 - - call empty_8042 - mov al, HEX(D1) // command write - out HEX(64), al - call empty_8042 - mov al, HEX(DD) // A20 off - out HEX(60), al - call empty_8042 - call switch_to_prot - .code32 - - popa - - ret /* Multiboot support * diff --git a/reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc b/reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc index 051bdc2be21..adf3abf41f0 100644 --- a/reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc +++ b/reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc @@ -3,21 +3,21 @@ Empty8042: .word 0x00eb,0x00eb // jmp $+2, jmp $+2 in al, 0x64 cmp al, 0xff // legacy-free machine without keyboard - jz empty_8042_ret // controllers on Intel Macs read back 0xFF + jz Empty8042_ret // controllers on Intel Macs read back 0xFF test al, 0x02 - jnz x86_16_Empty8042 -empty_8042_ret: + jnz Empty8042 +Empty8042_ret: ret EnableA20: pusha - call x86_16_Empty8042 + call Empty8042 mov al, 0xD1 // command write out 0x64, al - call x86_16_Empty8042 + call Empty8042 mov al, 0xDF // A20 on out 0x60, al - call x86_16_Empty8042 + call Empty8042 popa ret diff --git a/reactos/boot/freeldr/freeldr/arch/realmode/i386.S b/reactos/boot/freeldr/freeldr/arch/realmode/i386.S index 58d0710e73e..a6f88e8e038 100644 --- a/reactos/boot/freeldr/freeldr/arch/realmode/i386.S +++ b/reactos/boot/freeldr/freeldr/arch/realmode/i386.S @@ -27,6 +27,9 @@ RealModeEntryPoint: /* Setup the stack */ mov sp, word ptr ds:stack16 + /* Enable A20 address line */ + call EnableA20 + /* Get address of optional header */ mov eax, dword ptr ds:[FREELDR_PE_BASE + IMAGE_DOS_HEADER_e_lfanew] add eax, FREELDR_PE_BASE + 4 + IMAGE_FILE_HEADER_SIZE