Author: tkreuzer Date: Fri Jun 17 23:44:07 2011 New Revision: 52325
URL: http://svn.reactos.org/svn/reactos?rev=52325&view=rev Log: [FREELDR] - Instead of using the far jmp when switching to protected mode to go to the entry point, use a relative absolute jmp instruction, manually encoded - Remove the END from fathelp.inc, that was terminating the code - fix code for ML
Modified: trunk/reactos/boot/freeldr/freeldr/arch/realmode/fathelp.inc trunk/reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc trunk/reactos/boot/freeldr/freeldr/arch/realmode/i386.S trunk/reactos/boot/freeldr/freeldr/arch/realmode/int386.inc trunk/reactos/boot/freeldr/freeldr/arch/realmode/pnp.inc trunk/reactos/boot/freeldr/freeldr/arch/realmode/pxe.inc
Modified: trunk/reactos/boot/freeldr/freeldr/arch/realmode/fathelp.inc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/r... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/realmode/fathelp.inc [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/realmode/fathelp.inc [iso-8859-1] Fri Jun 17 23:44:07 2011 @@ -217,9 +217,8 @@ ret
-msgLoading: .asciz "Loading FreeLoader...\r\n" +msgLoading: .asciz "Loading FreeLoader...", CR, LF
.org 510 // Pad to 510 bytes .word HEX(0aa55) // BootSector signature
-END
Modified: trunk/reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/r... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc [iso-8859-1] Fri Jun 17 23:44:07 2011 @@ -1,10 +1,10 @@
Empty8042: - .word 0x00eb,0x00eb // jmp $+2, jmp $+2 - in al, 0x64 - cmp al, 0xff // legacy-free machine without keyboard + .word HEX(00eb), HEX(00eb) // jmp $+2, jmp $+2 + in al, HEX(64) + cmp al, HEX(0ff) // legacy-free machine without keyboard jz Empty8042_ret // controllers on Intel Macs read back 0xFF - test al, 0x02 + test al, 2 jnz Empty8042 Empty8042_ret: ret @@ -12,11 +12,11 @@ EnableA20: pusha call Empty8042 - mov al, 0xD1 // command write - out 0x64, al + mov al, HEX(0D1) // command write + out HEX(064), al call Empty8042 - mov al, 0xDF // A20 on - out 0x60, al + mov al, HEX(0DF) // A20 on + out HEX(060), al call Empty8042 popa ret @@ -46,9 +46,9 @@ writechr: pushf pusha - mov ah, 0x0E + mov ah, HEX(0E) xor bx, bx - int 0x10 + int HEX(10) popa popf ret
Modified: trunk/reactos/boot/freeldr/freeldr/arch/realmode/i386.S URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/r... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/realmode/i386.S [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/realmode/i386.S [iso-8859-1] Fri Jun 17 23:44:07 2011 @@ -31,7 +31,7 @@ call EnableA20
/* Safe real mode entry point in shared memory */ - mov dword ptr [BSS_RealModeEntry], offset switch_to_real16 + mov dword ptr ds:[BSS_RealModeEntry], offset switch_to_real16
/* Get address of optional header */ mov eax, dword ptr ds:[FREELDR_PE_BASE + IMAGE_DOS_HEADER_e_lfanew] @@ -41,8 +41,8 @@ mov eax, dword ptr ds:[eax + IMAGE_OPTIONAL_HEADER_AddressOfEntryPoint] add eax, FREELDR_PE_BASE
- /* Patch the long jump instruction */ - mov word ptr [pm_offset], ax + /* Save entry point */ + mov dword ptr [pm_entrypoint], eax
jmp exit_to_protected
@@ -87,7 +87,12 @@ mov sp, word ptr ds:[stack16]
/* Load IDTR with real mode value */ +#ifdef _USE_ML + DB 0Fh, 01h, 1Eh + DW rmode_idtptr +#else lidt rmode_idtptr +#endif
sti /* These are ok now */
@@ -108,7 +113,12 @@ mov word ptr ds:[stack16], sp
/* Load the GDT */ +#ifdef _USE_ML + DB 0Fh, 01h, 16h + DW rmode_idtptr +#else lgdt gdtptr +#endif
/* Enable Protected Mode */ mov eax, cr0 @@ -116,14 +126,13 @@ mov cr0, eax
/* Clear prefetch queue & correct CS */ - .byte HEX(0ea) // jmp far PMODE_CS:entry_point -pm_offset: - .word 0 // receives address of PE entry point - .word PMODE_CS + ljmp16 PMODE_CS, inpmode +inpmode: + .byte HEX(0ff), HEX(25) // opcode of indirect jump + .word pm_entrypoint, 0 +pm_entrypoint: + .long 0 // receives address of PE entry point nop -// FIXME: use ljmp16 PMODE_CS:inpmode + hexed 32bit jump - -
callback_table: .word Int386 @@ -174,15 +183,13 @@ /* GDT table pointer */ gdtptr: .word HEX(27) /* Limit */ - .long gdt /* Base Address */ + .word gdt, 0 /* Base Address */
/* Real-mode IDT pointer */ rmode_idtptr: .word HEX(3ff) /* Limit */ .long 0 /* Base Address */
-//.org 1024 - #include "int386.inc" #include "pxe.inc" #include "pnp.inc"
Modified: trunk/reactos/boot/freeldr/freeldr/arch/realmode/int386.inc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/r... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/realmode/int386.inc [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/realmode/int386.inc [iso-8859-1] Fri Jun 17 23:44:07 2011 @@ -34,9 +34,9 @@
/* Call the interrupt vector */ /*int Int386_vector*/ - .byte 0xcd + .byte HEX(0cd) Int386_vector_opcode: - .byte 0x00 + .byte 00
/* Save the registers */ mov dword ptr cs:[BSS_RegisterSet + REGS_EAX], eax
Modified: trunk/reactos/boot/freeldr/freeldr/arch/realmode/pnp.inc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/r... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/realmode/pnp.inc [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/realmode/pnp.inc [iso-8859-1] Fri Jun 17 23:44:07 2011 @@ -15,11 +15,11 @@
push 0
- call dword ptr [BSS_PnpBiosEntryPoint] + call dword ptr ds:[BSS_PnpBiosEntryPoint] add sp, 12
movzx ecx, ax - mov dword ptr [BSS_PnpResult], ecx + mov dword ptr ds:[BSS_PnpResult], ecx
ret
@@ -48,11 +48,11 @@ push 1
/* call entry point */ - call dword ptr [BSS_PnpBiosEntryPoint] + call dword ptr ds:[BSS_PnpBiosEntryPoint] add sp, 14
movzx ecx, ax - mov [BSS_PnpResult], ecx + mov dword ptr ds:[BSS_PnpResult], ecx
ret
Modified: trunk/reactos/boot/freeldr/freeldr/arch/realmode/pxe.inc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/r... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/realmode/pxe.inc [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/realmode/pxe.inc [iso-8859-1] Fri Jun 17 23:44:07 2011 @@ -26,8 +26,8 @@ push ax mov ax, [BSS_PxeFunction] push ax - call dword ptr [BSS_PxeEntryPoint] + call dword ptr ds:[BSS_PxeEntryPoint] add esp, 6 - mov [BSS_PxeResult], ax + mov word ptr ds:[BSS_PxeResult], ax
ret