From e971f67673c296dc2864bdac5863b67e771897cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 9 Nov 2013 00:28:26 +0000 Subject: [PATCH] [NTVDM]: Add offset information to the BIOS Data Area, and add missing fields. See the provided links in the patch for more information. svn path=/branches/ntvdm/; revision=60890 --- subsystems/ntvdm/bios.h | 128 ++++++++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 50 deletions(-) diff --git a/subsystems/ntvdm/bios.h b/subsystems/ntvdm/bios.h index 103dd3732a5..12cc3aad0a9 100644 --- a/subsystems/ntvdm/bios.h +++ b/subsystems/ntvdm/bios.h @@ -24,12 +24,12 @@ #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 ******************************************************************/