From b7383087f479a0bc6f37fce52d4f158045908254 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 15 Nov 2010 19:45:52 +0000 Subject: [PATCH] revert unwanted changes svn path=/branches/cmake-bringup/; revision=49597 --- boot/freeldr/freeldr/arch/i386/arch.S | 116 +++++++++++--------------- 1 file changed, 50 insertions(+), 66 deletions(-) diff --git a/boot/freeldr/freeldr/arch/i386/arch.S b/boot/freeldr/freeldr/arch/i386/arch.S index c15a1c653ed..225dc4be3f9 100644 --- a/boot/freeldr/freeldr/arch/i386/arch.S +++ b/boot/freeldr/freeldr/arch/i386/arch.S @@ -17,19 +17,16 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include +.intel_syntax noprefix +#define HEX(y) 0x##y + +#define ASM #include #include -EXTERN _BootMain:PROC -EXTERN __bss_start__:DWORD -EXTERN __bss_end__:DWORD -EXTERN i386idtptr:FWORD - -.code16 + .code16 -PUBLIC RealEntryPoint -RealEntryPoint: +EXTERN(RealEntryPoint) cli @@ -47,10 +44,9 @@ RealEntryPoint: sti /* Init pmode */ - call switch_to_prot + call switch_to_prot -.endcode16 -.code32 + .code32 /* Zero BootDrive and BootPartition */ xor eax, eax @@ -68,7 +64,7 @@ RealEntryPoint: call _BootMain call switch_to_real -.code16 + .code16 int HEX(19) @@ -82,8 +78,9 @@ stop: * Switches the processor to protected mode * it destroys eax */ -PUBLIC switch_to_prot -switch_to_prot: +EXTERN(switch_to_prot) + +.code16 cli /* None of these */ @@ -107,9 +104,9 @@ switch_to_prot: mov word ptr ds:[stack16], sp /* Load the GDT */ - lgdt gdtptr + lgdt gdtptr /* Load the IDT */ - lidt i386idtptr + lidt i386idtptr /* Enable Protected Mode */ mov eax, cr0 @@ -117,12 +114,12 @@ switch_to_prot: mov cr0, eax /* Clear prefetch queue & correct CS */ - ljmp16 PMODE_CS, inpmode + //ljmp PMODE_CS, inpmode + jmp far ptr PMODE_CS:inpmode -inpmode: -.endcode16 .code32 +inpmode: /* Setup segment selectors */ mov ax, PMODE_DS mov ds, ax @@ -142,8 +139,9 @@ inpmode: * Switches the processor back to real mode * it destroys eax */ -PUBLIC switch_to_real -switch_to_real: +EXTERN(switch_to_real) + +.code32 /* We don't know what values are currently */ /* in the segment registers. So we are */ @@ -184,7 +182,7 @@ switch_to_real16: mov cr0, eax /* Clear prefetch queue & correct CS */ - //ljmp16 0, offset inrmode + //ljmp $0, $inrmode jmp far ptr 0:inrmode inrmode: @@ -209,7 +207,7 @@ inrmode: push word ptr ds:[code16ret] /* Load IDTR with real mode value */ - lidt rmode_idtptr + lidt rmode_idtptr sti /* These are ok now */ @@ -220,8 +218,9 @@ inrmode: /* * Needed for enabling the a20 address line */ +.code16 empty_8042: - .word HEX(00eb), HEX(00eb) // jmp $+2, jmp $+2 + .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 @@ -230,14 +229,11 @@ empty_8042: empty_8042_ret: ret -.endcode16 -.code32 - /* * Enable the A20 address line (to allow access to over 1mb) */ -PUBLIC _EnableA20 -_EnableA20: +EXTERN(_EnableA20) +.code32 pusha @@ -252,9 +248,7 @@ _EnableA20: out HEX(60), al call empty_8042 call switch_to_prot - -.endcode16 -.code32 + .code32 popa @@ -263,26 +257,23 @@ _EnableA20: /* * Disable the A20 address line */ -PUBLIC _DisableA20 -_DisableA20: +EXTERN(_DisableA20) +.code32 pusha call switch_to_real + .code16 -.code16 - - call empty_8042 + 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 - -.endcode16 -.code32 + call empty_8042 + call switch_to_prot + .code32 popa @@ -310,7 +301,7 @@ _DisableA20: #define INITIAL_BASE HEX(200000) /* Align 32 bits boundary */ - .align 4 +.align 4 /* Multiboot header */ MultibootHeader: @@ -340,10 +331,10 @@ MultibootEntry: /* Although the multiboot spec says we should be called with the * segment registers set to 4GB flat mode, let's be sure and set up * our own */ - lgdt gdtptrhigh + INITIAL_BASE - FREELDR_BASE + lgdt gdtptrhigh + INITIAL_BASE - FREELDR_BASE /* Reload segment selectors */ - ljmp PMODE_CS, (mb1 + INITIAL_BASE - FREELDR_BASE) - //jmp far ptr PMODE_CS: (offset mb1 + INITIAL_BASE - FREELDR_BASE) + //ljmp $PMODE_CS, $(mb1 + INITIAL_BASE - FREELDR_BASE) + jmp far ptr PMODE_CS: (mb1 + INITIAL_BASE - FREELDR_BASE) mb1: mov dx, PMODE_DS mov ds, dx @@ -383,13 +374,13 @@ mb3: rep movsd /* Load the GDT and IDT */ - lgdt gdtptr - lidt i386idtptr + lgdt gdtptr + lidt i386idtptr /* Clear prefetch queue & correct CS, * jump to low mem */ - ljmp PMODE_CS, mb4 - //jmp far ptr PMODE_CS:mb4 + //ljmp $PMODE_CS, $mb4 + jmp far ptr PMODE_CS:mb4 mb4: /* Reload segment selectors */ mov dx, PMODE_DS @@ -425,17 +416,15 @@ mb7: /* GO! */ push eax - call _BootMain + call _BootMain mbfail: call switch_to_real -.code16 - int HEX(19) -mbstop: - jmp mbstop /* We should never get here */ + .code16 + int 0x19 +mbstop: jmp mbstop /* We should never get here */ -.endcode16 -.code32 + .code32 /* 16-bit stack pointer */ stack16: @@ -507,13 +496,8 @@ mb_info: cmdline: .fill CMDLINE_SIZE, 1, 0 -PUBLIC _BootDrive -_BootDrive: +EXTERN(_BootDrive) .long 0 - -PUBLIC _BootPartition -_BootPartition: + +EXTERN(_BootPartition) .long 0 - -END - -- 2.17.1