From 9606bcd3f2979459db0ff988a64a175d9577ee36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 14 Mar 2015 03:37:54 +0000 Subject: [PATCH] [NTVDM]: Move EMS support as a BIOS module (and initialize it after the BIOS has finished its initialization, including resetting the INT handlers). svn path=/trunk/; revision=66675 --- reactos/subsystems/mvdm/ntvdm/CMakeLists.txt | 2 +- reactos/subsystems/mvdm/ntvdm/bios/bios32/bios32.c | 6 ++++++ reactos/subsystems/mvdm/ntvdm/{ => bios/bios32}/ems.c | 8 ++++++++ reactos/subsystems/mvdm/ntvdm/{ => bios/bios32}/ems.h | 1 + reactos/subsystems/mvdm/ntvdm/emulator.c | 5 ----- 5 files changed, 16 insertions(+), 6 deletions(-) rename reactos/subsystems/mvdm/ntvdm/{ => bios/bios32}/ems.c (98%) rename reactos/subsystems/mvdm/ntvdm/{ => bios/bios32}/ems.h (98%) diff --git a/reactos/subsystems/mvdm/ntvdm/CMakeLists.txt b/reactos/subsystems/mvdm/ntvdm/CMakeLists.txt index 9f80333e0f8..69045e80e44 100644 --- a/reactos/subsystems/mvdm/ntvdm/CMakeLists.txt +++ b/reactos/subsystems/mvdm/ntvdm/CMakeLists.txt @@ -10,6 +10,7 @@ list(APPEND SOURCE bios/bios32/kbdbios32.c bios/bios32/vidbios32.c bios/bios32/moubios32.c + bios/bios32/ems.c bios/bios.c bios/kbdbios.c bios/rom.c @@ -33,7 +34,6 @@ list(APPEND SOURCE dos/mouse32.c dos/dem.c clock.c - ems.c emulator.c int32.c io.c diff --git a/reactos/subsystems/mvdm/ntvdm/bios/bios32/bios32.c b/reactos/subsystems/mvdm/ntvdm/bios/bios32/bios32.c index 548e7dd512d..bfc26b0291c 100644 --- a/reactos/subsystems/mvdm/ntvdm/bios/bios32/bios32.c +++ b/reactos/subsystems/mvdm/ntvdm/bios/bios32/bios32.c @@ -26,6 +26,8 @@ #include "vidbios32.h" #include "moubios32.h" +#include "ems.h" + #include "io.h" #include "hardware/cmos.h" #include "hardware/pic.h" @@ -665,6 +667,9 @@ Bios32Post(VOID) SearchAndInitRoms(&BiosContext); + /* Initialize EMS */ + EmsInitialize(); + /* * End of the 32-bit POST portion. We then fall back into 16-bit where * the rest of the POST code is executed, typically calling INT 19h @@ -726,6 +731,7 @@ BOOLEAN Bios32Initialize(VOID) VOID Bios32Cleanup(VOID) { + EmsCleanup(); MouseBios32Cleanup(); VidBios32Cleanup(); KbdBios32Cleanup(); diff --git a/reactos/subsystems/mvdm/ntvdm/ems.c b/reactos/subsystems/mvdm/ntvdm/bios/bios32/ems.c similarity index 98% rename from reactos/subsystems/mvdm/ntvdm/ems.c rename to reactos/subsystems/mvdm/ntvdm/bios/bios32/ems.c index 09919a2e1ff..5dfd8f07962 100644 --- a/reactos/subsystems/mvdm/ntvdm/ems.c +++ b/reactos/subsystems/mvdm/ntvdm/bios/bios32/ems.c @@ -195,6 +195,14 @@ static VOID WINAPI EmsIntHandler(LPWORD Stack) break; } + /* Get EMM Version */ + case 0x46: + { + setAH(EMS_STATUS_OK); + setAL(EMS_VERSION_NUM); + break; + } + /* Move/Exchange Memory */ case 0x57: { diff --git a/reactos/subsystems/mvdm/ntvdm/ems.h b/reactos/subsystems/mvdm/ntvdm/bios/bios32/ems.h similarity index 98% rename from reactos/subsystems/mvdm/ntvdm/ems.h rename to reactos/subsystems/mvdm/ntvdm/bios/bios32/ems.h index ccfdbe99f27..bb13db12036 100644 --- a/reactos/subsystems/mvdm/ntvdm/ems.h +++ b/reactos/subsystems/mvdm/ntvdm/bios/bios32/ems.h @@ -11,6 +11,7 @@ /* DEFINITIONS ****************************************************************/ +#define EMS_VERSION_NUM 0x04 #define EMS_INTERRUPT_NUM 0x67 #define EMS_SEGMENT 0xD000 #define EMS_MAX_HANDLES 16 diff --git a/reactos/subsystems/mvdm/ntvdm/emulator.c b/reactos/subsystems/mvdm/ntvdm/emulator.c index 246f827ae6f..74bd599fb3d 100644 --- a/reactos/subsystems/mvdm/ntvdm/emulator.c +++ b/reactos/subsystems/mvdm/ntvdm/emulator.c @@ -31,7 +31,6 @@ #include "hardware/sound/speaker.h" #include "hardware/pit.h" #include "hardware/video/vga.h" -#include "ems.h" #include "vddsup.h" #include "io.h" @@ -469,9 +468,6 @@ BOOLEAN EmulatorInitialize(HANDLE ConsoleInput, HANDLE ConsoleOutput) /* Initialize I/O ports */ /* Initialize RAM */ - /* Initialize EMS */ - EmsInitialize(); - /* Initialize the CPU */ /* Initialize the internal clock */ @@ -557,7 +553,6 @@ VOID EmulatorCleanup(VOID) PS2Cleanup(); - EmsCleanup(); SpeakerCleanup(); CmosCleanup(); // PitCleanup();