[FREELDR]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 17 Dec 2012 00:22:11 +0000 (00:22 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 17 Dec 2012 00:22:11 +0000 (00:22 +0000)
- Effectively reboot instead of exiting the bootloader and hanging.
- Do a cold reboot instead of a (soft) warm reboot, to let the user be able to choose another boot support or do anything else, instead of directly rebooting to the bootloader. Rename the concerned function accordingly.

svn path=/trunk/; revision=57935

reactos/boot/freeldr/freeldr/arch/i386/custom.c
reactos/boot/freeldr/freeldr/arch/i386/entry.S
reactos/boot/freeldr/freeldr/arch/realmode/amd64.S
reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc
reactos/boot/freeldr/freeldr/arch/realmode/i386.S
reactos/boot/freeldr/freeldr/freeldr.c
reactos/boot/freeldr/freeldr/include/arch/pc/pcbios.h
reactos/boot/freeldr/freeldr/include/arch/pc/x86common.h
reactos/boot/freeldr/freeldr/ui/tui.c
reactos/boot/freeldr/freeldr/ui/ui.c

index 2e754ec..b9d1c0d 100644 (file)
@@ -359,5 +359,5 @@ VOID OptionMenuReboot(VOID)
        UiMessageBox("The system will now reboot.");
 
        DiskStopFloppyMotor();
-       SoftReboot();
+       Reboot();
 }
index 63c0a0b..795cd40 100644 (file)
@@ -198,10 +198,10 @@ _PxeCallApi:
     ret
 
 
-PUBLIC _SoftReboot
-_SoftReboot:
+PUBLIC _Reboot
+_Reboot:
     /* Set the function ID */
-    mov bx, FNID_SoftReboot
+    mov bx, FNID_Reboot
 
     /*Switch to real mode (We don't return) */
     jmp SwitchToReal
index 51294e1..7d35fb6 100644 (file)
@@ -50,7 +50,7 @@ Startup:
 
     /* Wait for a keypress */
     int HEX(16)
-    jmp SoftReboot
+    jmp Reboot
 
 Msg_Unsupported:
     .ascii "This CPU is not supported.", CR, LF
@@ -330,11 +330,11 @@ LongModeEntryPoint:
     .long 0, 0
 
     int HEX(16)
-    jmp SoftReboot
+    jmp Reboot
 
 CallbackTable:
     .word Int386
-    .word SoftReboot
+    .word Reboot
     .word ChainLoadBiosBootSectorCode
     .word PxeCallApi
     .word PnpBiosGetDeviceNodeCount
index dd1fd49..38fe40c 100644 (file)
@@ -92,20 +92,17 @@ writehex_common:
     popfd\r
     ret\r
 \r
-SoftReboot:\r
-       mov ax, HEX(40)\r
-       mov ds, ax\r
-       mov si, HEX(72)\r
+Reboot:\r
+       cli\r
 \r
-       /* Set the word at location 40:72 to 1234h */\r
-       mov word ptr [si], HEX(1234)\r
+       /* Set the word at location 40h:72h to 0 (cold reboot) */\r
+       mov word ptr ds:[HEX(0472)], HEX(0)\r
 \r
-       /* and jump to location FFFF:0 in ROM */\r
-       ljmp16  HEX(0FFFF), HEX(0000)\r
+       /* and jump to location F000h:FFF0h in ROM */\r
+       ljmp16 HEX(0F000), HEX(0FFF0)\r
 \r
 \r
 ChainLoadBiosBootSectorCode:\r
-\r
     /* Load segment registers */\r
     cli\r
     xor ax, ax\r
@@ -117,4 +114,4 @@ ChainLoadBiosBootSectorCode:
     mov esp, HEX(7C00)\r
 \r
     /* Jump to the bootsector code */\r
-    ljmp16     HEX(0000), HEX(7C00)\r
+    ljmp16 HEX(0000), HEX(7C00)\r
index 12c6afc..e4876c8 100644 (file)
@@ -142,7 +142,7 @@ pm_entrypoint:
 
 callback_table:
     .word Int386
-    .word SoftReboot
+    .word Reboot
     .word ChainLoadBiosBootSectorCode
     .word PxeCallApi
     .word PnpBiosGetDeviceNodeCount
index 6d069b6..01af41e 100644 (file)
@@ -40,13 +40,13 @@ VOID BootMain(LPSTR CmdLine)
        if (!UiInitialize(FALSE))
        {
                UiMessageBoxCritical("Unable to initialize UI.\n");
-               return;
+               goto quit;
        }
 
        if (!MmInitializeMemoryManager())
        {
                UiMessageBoxCritical("Unable to initialize memory manager");
-               return;
+               goto quit;
        }
 
 #ifdef _M_IX86
@@ -54,6 +54,11 @@ VOID BootMain(LPSTR CmdLine)
        HalpInitBusHandler();
 #endif
        RunLoader();
+
+quit:
+       /* If we reach this point, something went wrong before, therefore reboot */
+       DiskStopFloppyMotor();
+       Reboot();
 }
 
 // We need to emulate these, because the original ones don't work in freeldr
index 3f10198..b2a2d79 100644 (file)
@@ -119,7 +119,7 @@ int         Int386(int ivec, REGS* in, REGS* out);
 
 void   EnableA20(void);
 VOID   ChainLoadBiosBootSectorCode(VOID);      // Implemented in boot.S
-VOID   SoftReboot(VOID);                                       // Implemented in boot.S
+VOID   Reboot(VOID);                                   // Implemented in boot.S
 VOID   DetectHardware(VOID);           // Implemented in hardware.c
 
 #endif /* ! __ASM__ */
index e8c7297..91f8c42 100644 (file)
@@ -48,7 +48,7 @@
 
 /* Realmode function IDs */
 #define FNID_Int386 0
-#define FNID_SoftReboot 1
+#define FNID_Reboot 1
 #define FNID_ChainLoadBiosBootSectorCode 2
 #define FNID_PxeCallApi 3
 #define FNID_PnpBiosGetDeviceNodeCount 4
index 89e4a39..a9d134f 100644 (file)
@@ -48,8 +48,8 @@ int TuiPrintf(const char *Format, ...)
 
 BOOLEAN TuiInitialize(VOID)
 {
-       MachVideoClearScreen(ATTR(COLOR_WHITE, COLOR_BLACK));
        MachVideoHideShowTextCursor(FALSE);
+       MachVideoClearScreen(ATTR(COLOR_GRAY, COLOR_BLACK));
 
        TextVideoBuffer = VideoAllocateOffScreenBuffer();
        if (TextVideoBuffer == NULL)
@@ -71,7 +71,7 @@ VOID TuiUnInitialize(VOID)
                MachVideoSetDisplayMode(NULL, FALSE);
        }
 
-       //VideoClearScreen();
+       MachVideoClearScreen(ATTR(COLOR_GRAY, COLOR_BLACK));
        MachVideoHideShowTextCursor(TRUE);
 }
 
index b43091a..015491d 100644 (file)
@@ -229,7 +229,7 @@ BOOLEAN UiInitialize(BOOLEAN ShowGui)
 VOID UiUnInitialize(PCSTR BootText)
 {
        UiDrawBackdrop();
-       UiDrawStatusText("Booting...");
+       UiDrawStatusText(BootText);
        UiInfoBox(BootText);
 
        UiVtbl.UnInitialize();