[NTVDM]
authorAleksandar Andrejevic <aandrejevic@reactos.org>
Mon, 11 Nov 2013 04:00:10 +0000 (04:00 +0000)
committerAleksandar Andrejevic <aandrejevic@reactos.org>
Mon, 11 Nov 2013 04:00:10 +0000 (04:00 +0000)
Implement the miscellaneous BIOS system service (INT 15h) handler.
Implement INT 15h, AH = 88h, "Get Extended Memory Size".

svn path=/branches/ntvdm/; revision=60938

subsystems/ntvdm/bios.c
subsystems/ntvdm/bios.h

index 2363e5b..a08e831 100644 (file)
@@ -481,6 +481,7 @@ BOOLEAN BiosInitialize(VOID)
     RegisterInt32(BIOS_VIDEO_INTERRUPT    , BiosVideoService        );
     RegisterInt32(BIOS_EQUIPMENT_INTERRUPT, BiosEquipmentService    );
     RegisterInt32(BIOS_MEMORY_SIZE        , BiosGetMemorySize       );
+    RegisterInt32(BIOS_MISC_INTERRUPT     , BiosMiscService         );
     RegisterInt32(BIOS_KBD_INTERRUPT      , BiosKeyboardService     );
     RegisterInt32(BIOS_TIME_INTERRUPT     , BiosTimeService         );
     RegisterInt32(BIOS_SYS_TIMER_INTERRUPT, BiosSystemTimerInterrupt);
@@ -1176,6 +1177,30 @@ VOID WINAPI BiosGetMemorySize(LPWORD Stack)
     setAX(Bda->MemorySize);
 }
 
+VOID WINAPI BiosMiscService(LPWORD Stack)
+{
+    switch (getAH())
+    {
+        /* Get Extended Memory Size */
+        case 0x88:
+        {
+            /* Return the number of KB of RAM after 1 MB */
+            setAX((MAX_ADDRESS - 0x100000) / 1024);
+
+            /* Clear CF */
+            Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF;
+
+            break;
+        }
+
+        default:
+        {
+            DPRINT1("BIOS Function INT 15h, AH = 0x%02X NOT IMPLEMENTED\n",
+                    getAH());
+        }
+    }
+}
+
 VOID WINAPI BiosKeyboardService(LPWORD Stack)
 {
     switch (getAH())
index 7ca303c..8651389 100644 (file)
@@ -27,6 +27,7 @@
 #define BIOS_VIDEO_INTERRUPT        0x10
 #define BIOS_EQUIPMENT_INTERRUPT    0x11
 #define BIOS_MEMORY_SIZE            0x12
+#define BIOS_MISC_INTERRUPT         0x15
 #define BIOS_KBD_INTERRUPT          0x16
 #define BIOS_TIME_INTERRUPT         0x1A
 #define BIOS_SYS_TIMER_INTERRUPT    0x1C
@@ -171,6 +172,7 @@ BOOLEAN BiosScrollWindow(
 VOID WINAPI BiosVideoService(LPWORD Stack);
 VOID WINAPI BiosEquipmentService(LPWORD Stack);
 VOID WINAPI BiosGetMemorySize(LPWORD Stack);
+VOID WINAPI BiosMiscService(LPWORD Stack);
 VOID WINAPI BiosKeyboardService(LPWORD Stack);
 VOID WINAPI BiosTimeService(LPWORD Stack);
 VOID WINAPI BiosSystemTimerInterrupt(LPWORD Stack);