diff --git a/reactos/boot/freeldr/freeldr/arch/i386/custom.c b/reactos/boot/freeldr/freeldr/arch/i386/custom.c index 2e754ece57e..b9d1c0d7fa1 100644 --- a/reactos/boot/freeldr/freeldr/arch/i386/custom.c +++ b/reactos/boot/freeldr/freeldr/arch/i386/custom.c @@ -359,5 +359,5 @@ VOID OptionMenuReboot(VOID) UiMessageBox("The system will now reboot."); DiskStopFloppyMotor(); - SoftReboot(); + Reboot(); } diff --git a/reactos/boot/freeldr/freeldr/arch/i386/entry.S b/reactos/boot/freeldr/freeldr/arch/i386/entry.S index 63c0a0b3048..795cd40afe0 100644 --- a/reactos/boot/freeldr/freeldr/arch/i386/entry.S +++ b/reactos/boot/freeldr/freeldr/arch/i386/entry.S @@ -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 diff --git a/reactos/boot/freeldr/freeldr/arch/realmode/amd64.S b/reactos/boot/freeldr/freeldr/arch/realmode/amd64.S index 51294e15967..7d35fb684c3 100644 --- a/reactos/boot/freeldr/freeldr/arch/realmode/amd64.S +++ b/reactos/boot/freeldr/freeldr/arch/realmode/amd64.S @@ -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 diff --git a/reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc b/reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc index dd1fd492748..38fe40c60b6 100644 --- a/reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc +++ b/reactos/boot/freeldr/freeldr/arch/realmode/helpers.inc @@ -92,20 +92,17 @@ writehex_common: popfd ret -SoftReboot: - mov ax, HEX(40) - mov ds, ax - mov si, HEX(72) +Reboot: + cli - /* Set the word at location 40:72 to 1234h */ - mov word ptr [si], HEX(1234) + /* Set the word at location 40h:72h to 0 (cold reboot) */ + mov word ptr ds:[HEX(0472)], HEX(0) - /* and jump to location FFFF:0 in ROM */ - ljmp16 HEX(0FFFF), HEX(0000) + /* and jump to location F000h:FFF0h in ROM */ + ljmp16 HEX(0F000), HEX(0FFF0) ChainLoadBiosBootSectorCode: - /* Load segment registers */ cli xor ax, ax @@ -117,4 +114,4 @@ ChainLoadBiosBootSectorCode: mov esp, HEX(7C00) /* Jump to the bootsector code */ - ljmp16 HEX(0000), HEX(7C00) + ljmp16 HEX(0000), HEX(7C00) diff --git a/reactos/boot/freeldr/freeldr/arch/realmode/i386.S b/reactos/boot/freeldr/freeldr/arch/realmode/i386.S index 12c6afc84ee..e4876c84652 100644 --- a/reactos/boot/freeldr/freeldr/arch/realmode/i386.S +++ b/reactos/boot/freeldr/freeldr/arch/realmode/i386.S @@ -142,7 +142,7 @@ pm_entrypoint: callback_table: .word Int386 - .word SoftReboot + .word Reboot .word ChainLoadBiosBootSectorCode .word PxeCallApi .word PnpBiosGetDeviceNodeCount diff --git a/reactos/boot/freeldr/freeldr/freeldr.c b/reactos/boot/freeldr/freeldr/freeldr.c index 6d069b63573..01af41e2219 100644 --- a/reactos/boot/freeldr/freeldr/freeldr.c +++ b/reactos/boot/freeldr/freeldr/freeldr.c @@ -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 diff --git a/reactos/boot/freeldr/freeldr/include/arch/pc/pcbios.h b/reactos/boot/freeldr/freeldr/include/arch/pc/pcbios.h index 3f10198c9cf..b2a2d7900e4 100644 --- a/reactos/boot/freeldr/freeldr/include/arch/pc/pcbios.h +++ b/reactos/boot/freeldr/freeldr/include/arch/pc/pcbios.h @@ -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__ */ diff --git a/reactos/boot/freeldr/freeldr/include/arch/pc/x86common.h b/reactos/boot/freeldr/freeldr/include/arch/pc/x86common.h index e8c729704dc..91f8c420a0a 100644 --- a/reactos/boot/freeldr/freeldr/include/arch/pc/x86common.h +++ b/reactos/boot/freeldr/freeldr/include/arch/pc/x86common.h @@ -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 diff --git a/reactos/boot/freeldr/freeldr/ui/tui.c b/reactos/boot/freeldr/freeldr/ui/tui.c index 89e4a391b8d..a9d134f035a 100644 --- a/reactos/boot/freeldr/freeldr/ui/tui.c +++ b/reactos/boot/freeldr/freeldr/ui/tui.c @@ -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); } diff --git a/reactos/boot/freeldr/freeldr/ui/ui.c b/reactos/boot/freeldr/freeldr/ui/ui.c index b43091a2ab6..015491d8bef 100644 --- a/reactos/boot/freeldr/freeldr/ui/ui.c +++ b/reactos/boot/freeldr/freeldr/ui/ui.c @@ -229,7 +229,7 @@ BOOLEAN UiInitialize(BOOLEAN ShowGui) VOID UiUnInitialize(PCSTR BootText) { UiDrawBackdrop(); - UiDrawStatusText("Booting..."); + UiDrawStatusText(BootText); UiInfoBox(BootText); UiVtbl.UnInitialize();