[NTVDM]: Add offset information to the BIOS Data Area, and add missing fields. See...
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 9 Nov 2013 00:28:26 +0000 (00:28 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 9 Nov 2013 00:28:26 +0000 (00:28 +0000)
svn path=/branches/ntvdm/; revision=60890

subsystems/ntvdm/bios.h

index 103dd37..12cc3aa 100644 (file)
 
 #define BIOS_SEGMENT 0xF000
 
-#define BIOS_VIDEO_INTERRUPT 0x10
-#define BIOS_EQUIPMENT_INTERRUPT 0x11
-#define BIOS_MEMORY_SIZE 0x12
-#define BIOS_KBD_INTERRUPT 0x16
-#define BIOS_TIME_INTERRUPT 0x1A
-#define BIOS_SYS_TIMER_INTERRUPT 0x1C
+#define BIOS_VIDEO_INTERRUPT        0x10
+#define BIOS_EQUIPMENT_INTERRUPT    0x11
+#define BIOS_MEMORY_SIZE            0x12
+#define BIOS_KBD_INTERRUPT          0x16
+#define BIOS_TIME_INTERRUPT         0x1A
+#define BIOS_SYS_TIMER_INTERRUPT    0x1C
 
 #define CONSOLE_FONT_HEIGHT 8
 #define BIOS_KBD_BUFFER_SIZE 16
@@ -69,54 +69,82 @@ enum
 
 #pragma pack(push, 1)
 
+/*
+ * BIOS Data Area at 0040:XXXX
+ *
+ * See: http://webpages.charter.net/danrollins/techhelp/0093.HTM
+ * and: http://www.bioscentral.com/misc/bda.htm
+ * for more information.
+ */
 typedef struct
 {
-    WORD SerialPorts[4];
-    WORD ParallelPorts[3];
-    WORD EbdaSegment;       // Sometimes, ParallelPort
-    WORD EquipmentList;
-    BYTE Reserved0;         // Errors in PCjr infrared keyboard link
-    WORD MemorySize;
-    WORD Reserved1;         // Scratch pad for manufacturing error tests
-    WORD KeybdShiftFlags;
-    BYTE AlternateKeypad;
-    WORD KeybdBufferHead;
-    WORD KeybdBufferTail;
-    WORD KeybdBuffer[BIOS_KBD_BUFFER_SIZE];
-    BYTE DriveRecalibrate;
-    BYTE DriveMotorStatus;
-    BYTE MotorShutdownCounter;
-    BYTE LastDisketteOperation;
-    BYTE Reserved2[7];
-    BYTE VideoMode;
-    WORD ScreenColumns;
-    WORD VideoPageSize;
-    WORD VideoPageOffset;
-    WORD CursorPosition[BIOS_MAX_PAGES];
-    BYTE CursorEndLine;
-    BYTE CursorStartLine;
-    BYTE VideoPage;
-    WORD CrtBasePort;
-    BYTE CrtModeControl;
-    BYTE CrtColorPaletteMask;
-    DWORD Uptime;
-    BYTE Reserved3;
-    DWORD TickCounter;
-    BYTE MidnightPassed;
-    BYTE BreakFlag;
-    WORD SoftReset;
-    BYTE LastDiskOperation;
-    BYTE NumDisks;
-    BYTE DriveControlByte;
-    BYTE DiskPortOffset;
-    BYTE LptTimeOut[4];
-    BYTE ComTimeOut[4];
-    WORD KeybdBufferStart;
-    WORD KeybdBufferEnd;
-    BYTE ScreenRows;
-    WORD CharacterHeight;
+    WORD SerialPorts[4];                        // 0x00
+    WORD ParallelPorts[3];                      // 0x08
+    WORD EbdaSegment;                           // 0x0e - ParallelPort in PC/XT
+    WORD EquipmentList;                         // 0x10
+    BYTE Reserved0;                             // 0x12 - Errors in PCjr infrared keyboard link
+    WORD MemorySize;                            // 0x13
+    WORD Reserved1;                             // 0x15 - Scratch pad for manufacturing error tests
+    WORD KeybdShiftFlags;                       // 0x17
+    BYTE AlternateKeypad;                       // 0x19
+    WORD KeybdBufferHead;                       // 0x1a
+    WORD KeybdBufferTail;                       // 0x1c
+    WORD KeybdBuffer[BIOS_KBD_BUFFER_SIZE];     // 0x1e
+    BYTE DriveRecalibrate;                      // 0x3e
+    BYTE DriveMotorStatus;                      // 0x3f
+    BYTE MotorShutdownCounter;                  // 0x40
+    BYTE LastDisketteOperation;                 // 0x41
+    BYTE Reserved2[7];                          // 0x42
+    BYTE VideoMode;                             // 0x49
+    WORD ScreenColumns;                         // 0x4a
+    WORD VideoPageSize;                         // 0x4c
+    WORD VideoPageOffset;                       // 0x4e
+    WORD CursorPosition[BIOS_MAX_PAGES];        // 0x50
+    BYTE CursorEndLine;                         // 0x60
+    BYTE CursorStartLine;                       // 0x61
+    BYTE VideoPage;                             // 0x62
+    WORD CrtBasePort;                           // 0x63
+    BYTE CrtModeControl;                        // 0x65
+    BYTE CrtColorPaletteMask;                   // 0x66
+    BYTE CassetteData[5];                       // 0x67
+    DWORD TickCounter;                          // 0x6c
+    BYTE MidnightPassed;                        // 0x70
+    BYTE BreakFlag;                             // 0x71
+    WORD SoftReset;                             // 0x72
+    BYTE LastDiskOperation;                     // 0x74
+    BYTE NumDisks;                              // 0x75
+    BYTE DriveControlByte;                      // 0x76
+    BYTE DiskPortOffset;                        // 0x77
+    BYTE LptTimeOut[4];                         // 0x78
+    BYTE ComTimeOut[4];                         // 0x7c
+    WORD KeybdBufferStart;                      // 0x80
+    WORD KeybdBufferEnd;                        // 0x82
+    BYTE ScreenRows;                            // 0x84
+    WORD CharacterHeight;                       // 0x85
+    BYTE EGAFlags[2];                           // 0x87
+    BYTE VGAFlags[2];                           // 0x89
+    DWORD Reserved3;                            // 0x8b
+    BYTE Reserved4;                             // 0x8f
+    BYTE Reserved5[2];                          // 0x90
+    BYTE Reserved6[2];                          // 0x92
+    BYTE Reserved7[2];                          // 0x94
+    WORD Reserved8;                             // 0x96
+    DWORD Reserved9;                            // 0x98
+    DWORD Reserved10;                           // 0x9c
+    DWORD Reserved11[2];                        // 0xa0
+    DWORD EGAPtr;                               // 0xa8
+    BYTE Reserved12[68];                        // 0xac
+    BYTE Reserved13[16];                        // 0xf0
+
+    DWORD Reserved14;                           // 0x100
+    BYTE Reserved15[12];                        // 0x104
+    BYTE Reserved16[17];                        // 0x110
+    BYTE Reserved17[15];                        // 0x121
+    BYTE Reserved18[3];                         // 0x130
 } BIOS_DATA_AREA, *PBIOS_DATA_AREA;
 
+C_ASSERT(sizeof(BIOS_DATA_AREA) == 0x133);
+
 #pragma pack(pop)
 
 /* FUNCTIONS ******************************************************************/