Author: tkreuzer
Date: Wed Jun 15 19:17:00 2011
New Revision: 52253

URL: http://svn.reactos.org/svn/reactos?rev=52253&view=rev
Log:
[FREELDR]
- Add underscore to names of trap handlers and add C prototypes (will be needed 
later)
- Move multiboot code to seperate file multiboot.S, not compiled atm, the code 
wasn't in use anyway
- Remove EnableA20 dummy

Added:
    trunk/reactos/boot/freeldr/freeldr/arch/i386/multiboot.S   (with props)
Modified:
    trunk/reactos/boot/freeldr/freeldr/arch/i386/entry.S
    trunk/reactos/boot/freeldr/freeldr/arch/i386/i386idt.S
    trunk/reactos/boot/freeldr/freeldr/arch/i386/i386trap.S
    trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.c
    trunk/reactos/boot/freeldr/freeldr/arch/i386/ntoskrnl.c
    trunk/reactos/boot/freeldr/freeldr/arch/i386/realmode.S
    trunk/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/entry.S
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i386/entry.S?rev=52253&r1=52252&r2=52253&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/entry.S [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/entry.S [iso-8859-1] Wed Jun 
15 19:17:00 2011
@@ -17,12 +17,12 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-.intel_syntax noprefix
-#define HEX(y) 0x##y
-
 #include <asm.inc>
 #include <arch/pc/x86common.h>
 #include <multiboot.h>
+
+EXTERN _BootMain:PROC
+EXTERN _InitIdt:PROC
 
 .code32
 
@@ -74,6 +74,7 @@
        nop
        nop
 
+#ifndef _USE_ML
 /*
  * Switches the processor to protected mode
  * it destroys eax
@@ -213,12 +214,9 @@
 
        /* Now return in r-mode! */
        ret
-
+#endif
 
 .code32
-PUBLIC _EnableA20
-_EnableA20:
-    ret
 
 Int386_regsin:
        .long 0
@@ -295,153 +293,6 @@
     nop
 
 
-/* Multiboot support
- *
- * Allows freeldr to be loaded as a "multiboot kernel" by
- * other boot loaders like Grub
- */
-
-#define MB_INFO_SIZE                90
-#define MB_INFO_FLAGS_OFFSET        0
-#define MB_INFO_BOOT_DEVICE_OFFSET  12
-#define MB_INFO_COMMAND_LINE_OFFSET 16
-#define CMDLINE_SIZE                256
-
-/*
- * We want to execute at 0x8000 (to be compatible with bootsector
- * loading), but Grub only allows loading of multiboot kernels
- * above 1MB. So we let Grub load us there and then relocate
- * ourself to 0x8000
- */
-#define FREELDR_BASE HEX(8000)
-#define INITIAL_BASE HEX(200000)
-
-       /* Align 32 bits boundary */
-.align 4
-
-       /* Multiboot header */
-MultibootHeader:
-       /* magic */
-       .long MULTIBOOT_HEADER_MAGIC
-       /* flags */
-       .long MULTIBOOT_HEADER_FLAGS
-       /* checksum */
-       .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
-       /* header_addr */
-       .long INITIAL_BASE + MultibootHeader - FREELDR_BASE
-       /* load_addr */
-       .long INITIAL_BASE
-       /* load_end_addr */
-       .long INITIAL_BASE + __bss_start__ - FREELDR_BASE
-       /* bss_end_addr */
-       .long INITIAL_BASE + __bss_end__ - FREELDR_BASE
-       /* entry_addr */
-       .long INITIAL_BASE + MultibootEntry - FREELDR_BASE
-
-MultibootEntry:
-       cli             /* Even after setting up the our IDT below we are
-                        * not ready to handle hardware interrupts (no entries
-                        * in IDT), so there's no sti here. Interrupts will be
-                        * enabled in due time */
-
-       /* 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
-       /* Reload segment selectors */
-       //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
-       mov es, dx
-
-       /* Check for valid multiboot signature */
-       cmp eax, MULTIBOOT_BOOTLOADER_MAGIC
-       jne mbfail
-
-       /* Store multiboot info in a safe place */
-       mov esi, ebx
-       mov edi, offset mb_info + INITIAL_BASE - FREELDR_BASE
-       mov ecx, MB_INFO_SIZE
-       rep movsb
-
-       /* Save commandline */
-       mov edx, [ebx + MB_INFO_FLAGS_OFFSET]
-       test dword ptr [ebx + MB_INFO_FLAGS_OFFSET], MB_INFO_FLAG_COMMAND_LINE
-       jz mb3
-       mov esi, [ebx + MB_INFO_COMMAND_LINE_OFFSET]
-       mov edi, offset cmdline + INITIAL_BASE - FREELDR_BASE
-       mov ecx, CMDLINE_SIZE
-mb2:   lodsb
-       stosb
-       test al, al
-       jz mb3
-       dec ecx
-       jnz mb2
-mb3:
-
-       /* Copy to low mem */
-       mov esi, INITIAL_BASE
-       mov edi, FREELDR_BASE
-       mov ecx, (offset __bss_end__ - FREELDR_BASE)
-       add ecx, 3
-       shr ecx, 2
-       rep movsd
-
-       /* Load the GDT and IDT */
-       lgdt    gdtptr
-       lidt    i386idtptr
-
-       /* Clear prefetch queue & correct CS,
-        * jump to low mem */
-       //ljmp  $PMODE_CS, $mb4
-       jmp far ptr PMODE_CS:mb4
-mb4:
-       /* Reload segment selectors */
-       mov dx, PMODE_DS
-       mov ds, dx
-       mov es, dx
-       mov fs, dx
-       mov gs, dx
-       mov ss, dx
-       mov esp, STACK32ADDR
-
-       mov ebx, offset mb_info
-       /* See if the boot device was passed in */
-       mov edx, [ebx + MB_INFO_FLAGS_OFFSET]
-       test edx, MB_INFO_FLAG_BOOT_DEVICE
-       jz mb5
-       /* Retrieve boot device info */
-       mov eax, [ebx + MB_INFO_BOOT_DEVICE_OFFSET]
-       shr eax, 16
-       inc al
-       mov byte ptr [_FrldrBootPartition], al
-       mov byte ptr [_FrldrBootDrive], ah
-       jmp mb6
-mb5:   /* No boot device known, assume first partition of first harddisk */
-       mov byte ptr [_FrldrBootDrive], HEX(80)
-       mov byte ptr [_FrldrBootPartition], 1
-mb6:
-       /* Check for command line */
-       mov eax, offset cmdline
-       test dword ptr [ebx + MB_INFO_FLAGS_OFFSET], MB_INFO_FLAG_COMMAND_LINE
-       jnz mb7
-       xor eax, eax
-mb7:
-
-       /* GO! */
-       push eax
-       call    _BootMain
-
-mbfail:
-       call    switch_to_real
-       .code16
-       int     0x19
-mbstop:        jmp     mbstop  /* We should never get here */
-
-       .code32
-
        /* 16-bit stack pointer */
 stack16:
        .word   STACK16ADDR
@@ -496,22 +347,11 @@
        .word HEX(27)           /* Limit */
        .long gdt                       /* Base Address */
 
-/* Initial GDT table pointer for multiboot */
-gdtptrhigh:
-       .word HEX(27)           /* Limit */
-       .long gdt + INITIAL_BASE - FREELDR_BASE /* Base Address */
-
 /* Real-mode IDT pointer */
 rmode_idtptr:
        .word HEX(3ff)          /* Limit */
        .long 0                 /* Base Address */
 
-mb_info:
-       .fill   MB_INFO_SIZE, 1, 0
-
-cmdline:
-       .fill   CMDLINE_SIZE, 1, 0
-
 PUBLIC _FrldrBootDrive
 _FrldrBootDrive:
     .long 0

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/i386idt.S
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i386/i386idt.S?rev=52253&r1=52252&r2=52253&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/i386idt.S [iso-8859-1] 
(original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/i386idt.S [iso-8859-1] Wed Jun 
15 19:17:00 2011
@@ -26,91 +26,91 @@
        .p2align        2       /* force 4-byte alignment */
 EXTERN(i386idt)
        /* Exception 0 - Divide By Zero */
-       .word   i386DivideByZero                                /* Offset 0 - 
15 */
+       .word   _i386DivideByZero                               /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Flags, Zero 
Byte */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 1 - Debug Exception */
-       .word   i386DebugException                              /* Offset 0 - 
15 */
+       .word   _i386DebugException                             /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 2 - NMI */
-       .word   i386NMIException                                /* Offset 0 - 
15 */
+       .word   _i386NMIException                               /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 3 - Breakpoint (INT 3) */
-       .word   i386Breakpoint                                  /* Offset 0 - 
15 */
+       .word   _i386Breakpoint                                 /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 4 - Overflow (INTO with EFLAGS[OF] set) */
-       .word   i386Overflow                                    /* Offset 0 - 
15 */
+       .word   _i386Overflow                                   /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 5 - Bound Exception */
-       .word   i386BoundException                              /* Offset 0 - 
15 */
+       .word   _i386BoundException                             /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 6 - Invalid Opcode */
-       .word   i386InvalidOpcode                               /* Offset 0 - 
15 */
+       .word   _i386InvalidOpcode                              /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 7 - FPU Not Available */
-       .word   i386FPUNotAvailable                             /* Offset 0 - 
15 */
+       .word   _i386FPUNotAvailable                            /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 8 - Double Fault */
-       .word   i386DoubleFault                                 /* Offset 0 - 
15 */
+       .word   _i386DoubleFault                                        /* 
Offset 0 - 15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 9 - Coprocessor Segment Overrun */
-       .word   i386CoprocessorSegment                          /* Offset 0 - 
15 */
+       .word   _i386CoprocessorSegment                         /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 10 (0x0A) - Invalid TSS */
-       .word   i386InvalidTSS                                  /* Offset 0 - 
15 */
+       .word   _i386InvalidTSS                                 /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 11 (0x0B) - Segment Not Present */
-       .word   i386SegmentNotPresent                           /* Offset 0 - 
15 */
+       .word   _i386SegmentNotPresent                          /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 12 (0x0C) - Stack Exception */
-       .word   i386StackException                              /* Offset 0 - 
15 */
+       .word   _i386StackException                             /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 13 (0x0D) - General Protection Fault */
-       .word   i386GeneralProtectionFault                      /* Offset 0 - 
15 */
+       .word   _i386GeneralProtectionFault                     /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 14 (0x0E) - Page Fault */
-       .word   i386PageFault                                   /* Offset 0 - 
15 */
+       .word   _i386PageFault                                  /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
@@ -122,19 +122,19 @@
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 16 (0x10) - Coprocessor Error */
-       .word   i386CoprocessorError                            /* Offset 0 - 
15 */
+       .word   _i386CoprocessorError                           /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 17 (0x11) - Alignment Check */
-       .word   i386AlignmentCheck                              /* Offset 0 - 
15 */
+       .word   _i386AlignmentCheck                             /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */
 
        /* Exception 18 (0x12) - Machine Check */
-       .word   i386MachineCheck                                /* Offset 0 - 
15 */
+       .word   _i386MachineCheck                               /* Offset 0 - 
15 */
        .word   0x0008                                          /* Selector */
        .word   0x8e00                                          /* Zero byte, 
flags */
        .word   0x0000                                          /* Offset 16 - 
31 */

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/i386trap.S
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i386/i386trap.S?rev=52253&r1=52252&r2=52253&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/i386trap.S [iso-8859-1] 
(original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/i386trap.S [iso-8859-1] Wed 
Jun 15 19:17:00 2011
@@ -122,26 +122,26 @@
 .endm
 
 /************************************************************************/
-TRAP_STUB i386DivideByZero, 0
-TRAP_STUB i386DebugException, 1
-TRAP_STUB i386NMIException, 2
-TRAP_STUB i386Breakpoint, 3
-TRAP_STUB i386Overflow, 4
-TRAP_STUB i386BoundException, 5
-TRAP_STUB i386InvalidOpcode, 6
-TRAP_STUB i386FPUNotAvailable, 7
-TRAP_STUB2 i386DoubleFault, 8
-TRAP_STUB i386CoprocessorSegment, 9
-TRAP_STUB2 i386InvalidTSS, 10
-TRAP_STUB2 i386SegmentNotPresent, 11
-TRAP_STUB2 i386StackException, 12
-TRAP_STUB2 i386GeneralProtectionFault, 13
-TRAP_STUB2 i386PageFault, 14
+TRAP_STUB _i386DivideByZero, 0
+TRAP_STUB _i386DebugException, 1
+TRAP_STUB _i386NMIException, 2
+TRAP_STUB _i386Breakpoint, 3
+TRAP_STUB _i386Overflow, 4
+TRAP_STUB _i386BoundException, 5
+TRAP_STUB _i386InvalidOpcode, 6
+TRAP_STUB _i386FPUNotAvailable, 7
+TRAP_STUB2 _i386DoubleFault, 8
+TRAP_STUB _i386CoprocessorSegment, 9
+TRAP_STUB2 _i386InvalidTSS, 10
+TRAP_STUB2 _i386SegmentNotPresent, 11
+TRAP_STUB2 _i386StackException, 12
+TRAP_STUB2 _i386GeneralProtectionFault, 13
+TRAP_STUB2 _i386PageFault, 14
 // 15 is reserved
-TRAP_STUB i386CoprocessorError, 16
-TRAP_STUB i386AlignmentCheck, 17
-TRAP_STUB i386MachineCheck, 18
-TRAP_STUB i386SimdFloatError, 19
+TRAP_STUB _i386CoprocessorError, 16
+TRAP_STUB _i386AlignmentCheck, 17
+TRAP_STUB _i386MachineCheck, 18
+TRAP_STUB _i386SimdFloatError, 19
 
 /************************************************************************
  * DEBUGGING SUPPORT FUNCTIONS

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.c?rev=52253&r1=52252&r2=52253&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.c [iso-8859-1] 
(original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.c [iso-8859-1] Wed Jun 
15 19:17:00 2011
@@ -22,8 +22,6 @@
 VOID
 PcMachInit(const char *CmdLine)
 {
-    EnableA20();
-
     /* Setup vtbl */
     MachVtbl.ConsPutChar = PcConsPutChar;
     MachVtbl.ConsKbHit = PcConsKbHit;

Added: trunk/reactos/boot/freeldr/freeldr/arch/i386/multiboot.S
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i386/multiboot.S?rev=52253&view=auto
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/multiboot.S (added)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/multiboot.S [iso-8859-1] Wed 
Jun 15 19:17:00 2011
@@ -1,0 +1,178 @@
+/*
+ *  FreeLoader
+ *  Copyright (C) 1998-2002  Brian Palmer  <[email protected]>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <asm.inc>
+#include <arch/pc/x86common.h>
+#include <multiboot.h>
+
+
+/* Multiboot support
+ *
+ * Allows freeldr to be loaded as a "multiboot kernel" by
+ * other boot loaders like Grub
+ */
+
+#define MB_INFO_SIZE                90
+#define MB_INFO_FLAGS_OFFSET        0
+#define MB_INFO_BOOT_DEVICE_OFFSET  12
+#define MB_INFO_COMMAND_LINE_OFFSET 16
+#define CMDLINE_SIZE                256
+
+/*
+ * We want to execute at 0x8000 (to be compatible with bootsector
+ * loading), but Grub only allows loading of multiboot kernels
+ * above 1MB. So we let Grub load us there and then relocate
+ * ourself to 0x8000
+ */
+#define INITIAL_BASE HEX(200000)
+
+       /* Align 32 bits boundary */
+.align 4
+
+       /* Multiboot header */
+MultibootHeader:
+       /* magic */
+       .long MULTIBOOT_HEADER_MAGIC
+       /* flags */
+       .long MULTIBOOT_HEADER_FLAGS
+       /* checksum */
+       .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
+       /* header_addr */
+       .long INITIAL_BASE + MultibootHeader - FREELDR_BASE
+       /* load_addr */
+       .long INITIAL_BASE
+       /* load_end_addr */
+       .long INITIAL_BASE + __bss_start__ - FREELDR_BASE
+       /* bss_end_addr */
+       .long INITIAL_BASE + __bss_end__ - FREELDR_BASE
+       /* entry_addr */
+       .long INITIAL_BASE + MultibootEntry - FREELDR_BASE
+
+MultibootEntry:
+       cli             /* Even after setting up the our IDT below we are
+                        * not ready to handle hardware interrupts (no entries
+                        * in IDT), so there's no sti here. Interrupts will be
+                        * enabled in due time */
+
+       /* 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
+       /* Reload segment selectors */
+       //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
+       mov es, dx
+
+       /* Check for valid multiboot signature */
+       cmp eax, MULTIBOOT_BOOTLOADER_MAGIC
+       jne mbfail
+
+       /* Store multiboot info in a safe place */
+       mov esi, ebx
+       mov edi, offset mb_info + INITIAL_BASE - FREELDR_BASE
+       mov ecx, MB_INFO_SIZE
+       rep movsb
+
+       /* Save commandline */
+       mov edx, [ebx + MB_INFO_FLAGS_OFFSET]
+       test dword ptr [ebx + MB_INFO_FLAGS_OFFSET], MB_INFO_FLAG_COMMAND_LINE
+       jz mb3
+       mov esi, [ebx + MB_INFO_COMMAND_LINE_OFFSET]
+       mov edi, offset cmdline + INITIAL_BASE - FREELDR_BASE
+       mov ecx, CMDLINE_SIZE
+mb2:   lodsb
+       stosb
+       test al, al
+       jz mb3
+       dec ecx
+       jnz mb2
+mb3:
+
+       /* Copy to low mem */
+       mov esi, INITIAL_BASE
+       mov edi, FREELDR_BASE
+       mov ecx, (offset __bss_end__ - FREELDR_BASE)
+       add ecx, 3
+       shr ecx, 2
+       rep movsd
+
+       /* Load the GDT and IDT */
+       lgdt    gdtptr
+       lidt    i386idtptr
+
+       /* Clear prefetch queue & correct CS,
+        * jump to low mem */
+       //ljmp  $PMODE_CS, $mb4
+       jmp far ptr PMODE_CS:mb4
+mb4:
+       /* Reload segment selectors */
+       mov dx, PMODE_DS
+       mov ds, dx
+       mov es, dx
+       mov fs, dx
+       mov gs, dx
+       mov ss, dx
+       mov esp, STACK32ADDR
+
+       mov ebx, offset mb_info
+       /* See if the boot device was passed in */
+       mov edx, [ebx + MB_INFO_FLAGS_OFFSET]
+       test edx, MB_INFO_FLAG_BOOT_DEVICE
+       jz mb5
+       /* Retrieve boot device info */
+       mov eax, [ebx + MB_INFO_BOOT_DEVICE_OFFSET]
+       shr eax, 16
+       inc al
+       mov byte ptr [_FrldrBootPartition], al
+       mov byte ptr [_FrldrBootDrive], ah
+       jmp mb6
+mb5:   /* No boot device known, assume first partition of first harddisk */
+       mov byte ptr [_FrldrBootDrive], HEX(80)
+       mov byte ptr [_FrldrBootPartition], 1
+mb6:
+       /* Check for command line */
+       mov eax, offset cmdline
+       test dword ptr [ebx + MB_INFO_FLAGS_OFFSET], MB_INFO_FLAG_COMMAND_LINE
+       jnz mb7
+       xor eax, eax
+mb7:
+
+       /* GO! */
+       push eax
+       call    _BootMain
+
+mbfail:
+       call    switch_to_real
+       .code16
+       int     0x19
+mbstop:        jmp     mbstop  /* We should never get here */
+
+mb_info:
+       .fill MB_INFO_SIZE, 1, 0
+
+cmdline:
+       .fill CMDLINE_SIZE, 1, 0
+
+/* Initial GDT table pointer for multiboot */
+gdtptrhigh:
+       .word HEX(27)           /* Limit */
+       .long gdt + INITIAL_BASE - FREELDR_BASE /* Base Address */

Propchange: trunk/reactos/boot/freeldr/freeldr/arch/i386/multiboot.S
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/ntoskrnl.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i386/ntoskrnl.c?rev=52253&r1=52252&r2=52253&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/ntoskrnl.c [iso-8859-1] 
(original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/ntoskrnl.c [iso-8859-1] Wed 
Jun 15 19:17:00 2011
@@ -72,6 +72,7 @@
     return STATUS_NOT_IMPLEMENTED;
 }
 
+#ifndef _MSC_VER
 NTHALAPI
 VOID
 NTAPI
@@ -119,3 +120,4 @@
     #error unimplemented
 #endif
 }
+#endif

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/realmode.S
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i386/realmode.S?rev=52253&r1=52252&r2=52253&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/realmode.S [iso-8859-1] 
(original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/realmode.S [iso-8859-1] Wed 
Jun 15 19:17:00 2011
@@ -1,24 +1,11 @@
 
 
 #include <asm.inc>
-
-.code16
-PUBLIC _mainCRTStartup
-_mainCRTStartup:
-_LoaderEntry:
-    ret
-
-.endcode16
 
 .code32
 
 
 // globals
-PUBLIC _FrldrBootPartition
-_FrldrBootPartition:
-PUBLIC _FrldrBootDrive
-_FrldrBootDrive:
-
 PUBLIC _PageDirectoryStart
 _PageDirectoryStart:
 PUBLIC _PageDirectoryEnd
@@ -32,13 +19,6 @@
 _kernel_pagetable:
 PUBLIC _lowmem_pagetable
 _lowmem_pagetable:
-
-
-PUBLIC RealEntryPoint
-RealEntryPoint:
-
-PUBLIC _EnableA20
-_EnableA20:
 
 PUBLIC _ChainLoadBiosBootSectorCode
 _ChainLoadBiosBootSectorCode:
@@ -73,9 +53,6 @@
 PUBLIC _PnpBiosSupported
 _PnpBiosSupported:
 
-PUBLIC _Int386
-_Int386:
-
 PUBLIC _PxeCallApi
 _PxeCallApi:
 

Modified: trunk/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h?rev=52253&r1=52252&r2=52253&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h [iso-8859-1] 
(original)
+++ trunk/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h [iso-8859-1] 
Wed Jun 15 19:17:00 2011
@@ -24,4 +24,23 @@
 #undef KIP0PCRADDRESS
 #define KIP0PCRADDRESS                      0xffdff000
 
+void i386DivideByZero(void);
+void i386DebugException(void);
+void i386NMIException(void);
+void i386Breakpoint(void);
+void i386Overflow(void);
+void i386BoundException(void);
+void i386InvalidOpcode(void);
+void i386FPUNotAvailable(void);
+void i386DoubleFault(void);
+void i386CoprocessorSegment(void);
+void i386InvalidTSS(void);
+void i386SegmentNotPresent(void);
+void i386StackException(void);
+void i386GeneralProtectionFault(void);
+void i386PageFault(void);
+void i386CoprocessorError(void);
+void i386AlignmentCheck(void);
+void i386MachineCheck(void);
+
 /* EOF */


Reply via email to