/*** VDMBIOS.H * * For include file hierarchy, see MVDM.H */ /***ET+ Low memory/ROM and EBIOS defines - used by VBIOS */ /* c-begin */ #define ROMDATA_START (IVT_START+IVT_LEN) #define ROMDATA_LEN 0x101 /* sizeof(ROMDATA)-IVT_LEN */ #define ROMBIOS_START 0xF0000 #define ROMBIOS_LEN 0x10000 #define ROMBIOS_PAGES PAGESFROMBYTES(ROMBIOS_LEN) #define PS2BIOS_START 0xE0000 #define PS2BIOS_LEN 0x20000 #define PS2BIOS_PAGES PAGESFROMBYTES(PS2BIOS_LEN) #define EXTROM_START 0xC0000 /* where and how far to */ #define EXTROM_LEN 0x40000 /* search for external adapter ROMs */ #define EXTROM_PAGES PAGESFROMBYTES(EXTROM_LEN) #define EBIOSDATA_START 0x9FC00 #define EBIOSDATA_LEN 0x00400 #define EBIOSDATA_PAGES PAGESFROMBYTES(EBIOSDATA_LEN) #if ROMDATA_START != IVT_START+IVT_LEN #error ROMDATA_START not equal to IVT_START+IVT_LEN #endif #if defined(IVT_START) && defined(DCA_START) #if DCA_START != ROMDATA_START+ROMDATA_LEN #error DCA_START not equal to ROMDATA_START+ROMDATA_LEN #endif #define LOWMEM_START IVT_START #define LOWMEM_LEN (IVT_LEN+ROMDATA_LEN+DCA_LEN) #define LOWMEM_COPYLEN (IVT_LEN+ROMDATA_LEN) #define LOWMEM_PAGES PAGESFROMBYTES(LOWMEM_LEN) #endif /* c-end */ /*end*/ /*** BIOS Interrupt Vectors */ #define BIOSINT_PARITYCHECK 0x02 #define BIOSINT_PRINTSCREEN 0x05 #define BIOSINT_TIMERINTERRUPT 0x08 #define BIOSINT_KEYINTERRUPT 0x09 #define BIOSINT_COM2INTERRUPT 0x0B #define BIOSINT_COM1INTERRUPT 0x0C #define BIOSINT_LPT2INTERRUPT 0x0D #define BIOSINT_FLOPPYINTERRUPT 0x0E #define BIOSINT_LPT1INTERRUPT 0x0F #define BIOSINT_VIDEO 0x10 #define BIOSINT_EQUIPMENTCHECK 0x11 #define BIOSINT_MEMORYCHECK 0x12 #define BIOSINT_DISKIO 0x13 #define BIOSINT_COMIO 0x14 #define BIOSINT_OSHOOK 0x15 #define BIOSINT_KEYBOARD 0x16 #define BIOSINT_PRINTERIO 0x17 #define BIOSINT_ROMBASIC 0x18 #define BIOSINT_REBOOT 0x19 #define BIOSINT_TIMEOFDAY 0x1A #define BIOSINT_KEYBREAK 0x1B #define BIOSINT_CLOCKTICK 0x1C #define BIOSINT_VIDEOPARMS 0x1D #define BIOSINT_DISKPARMS 0x1E #define BIOSINT_VIDEOGRAPH 0x1F #define BIOSINT_OLDDISKIO 0x40 #define BIOSINT_HDISK1PARMS 0x41 #define BIOSINT_OLDVIDEO 0x42 #define BIOSINT_EXTVIDEOGRAPH 0x43 #define BIOSINT_HDISK2PARMS 0x46 /*** Int 10h Equates (AH values) */ #define INT10_SETMODE 0x00 #define INT10_SETCURSORTYPE 0x01 #define INT10_SETCURSORPOS 0x02 #define INT10_QUERYCURSORPOS 0x03 #define INT10_QUERYLPEN 0x04 #define INT10_SETACTIVEPAGE 0x05 #define INT10_SCROLLUP 0x06 #define INT10_SCROLLDOWN 0x07 #define INT10_READCHARATTR 0x08 #define INT10_WRITECHARATTR 0x09 #define INT10_WRITECHAR 0x0A #define INT10_SETPALETTE 0x0B #define INT10_WRITEPIXEL 0x0C #define INT10_READPIXEL 0x0D #define INT10_WRITETTY 0x0E #define INT10_QUERYMODE 0x0F #define INT10_EGASETPALETTE 0x10 #define INT10_EGASELECTFONT 0x11 #define INT10_EGASELECTMISC 0x12 #define INT10_EGAWRITESTRING 0x13 #define INT10_VGADISPLAYCODES 0x1A #define INT10_VGAQUERYSTATE 0x1B #define INT10_VGASAVERESTORE 0x1C /*** Int 13h Equates (AH values) */ #define INT13_DISKRESET 0x00 #define INT13_DISKSTATUS 0x01 #define INT13_READSECTORS 0x02 #define INT13_WRITESECTORS 0x03 #define INT13_VERIFYSECTORS 0x04 #define INT13_FORMATTRACK 0x05 #define INT13_QUERYDRVPARMS 0x08 #define INT13_DISKSEEK 0x0C /* @235 */ #define INT13_QUERYDASDTYPE 0x15 #define INT13_QUERYCHANGE 0x16 #define INT13_SETDISKTYPE 0x17 #define INT13_SETMEDIATYPE 0x18 /*** Int 13h Status Equates (return in AH) */ #define INT13STATUS_SUCCESS 0x00 /* successful completion */ #define INT13STATUS_BADCMD 0x01 /* bad command */ #define INT13STATUS_BADADDRMARK 0x02 /* address mark not found */ #define INT13STATUS_WRTPROTECT 0x03 /* write on write-protected disk */ #define INT13STATUS_RECNOTFOUND 0x04 /* sector not found */ #define INT13STATUS_BADRESET 0x05 /* reset failed (HD) */ #define INT13STATUS_MEDIACHANGE 0x06 /* media changed */ #define INT13STATUS_INITFAIL 0x07 /* parm. act. failed (HD) */ #define INT13STATUS_BADDMA 0x08 /* DMA overrun */ #define INT13STATUS_DMABOUNDARY 0x09 /* DMA across 64K boundary */ #define INT13STATUS_BADSECTOR 0x0a /* bad sector detected (HD) */ #define INT13STATUS_BADTRACK 0x0b /* bad track detected (HD) */ #define INT13STATUS_BADMEDIATYPE 0x0c /* unsupported track (HD) */ #define INT13STATUS_BADFMTSECNUM 0x0d /* bad # of sectors on format (HD) */ #define INT13STATUS_ADDRMARKDET 0x0e /* ctrl data addr mark detected (HD */ #define INT13STATUS_DMAARBERR 0x0f /* DMA arbitration error (HD) */ #define INT13STATUS_BADCRCECC 0x10 /* bad CRC/ECC */ #define INT13STATUS_DATACORRECT 0x11 /* data ECC corrected */ #define INT13STATUS_BADCNTLR 0x20 /* controller failure */ #define INT13STATUS_BADSEEK 0x40 /* seek failed */ #define INT13STATUS_TIMEOUT 0x80 /* time out */ #define INT13STATUS_DRVNOTREADY 0xaa /* drive not ready (HD) */ #define INT13STATUS_UNDEFERR 0xbb /* undefined error (HD) */ #define INT13STATUS_WRITEFAULT 0xcc /* write fault (HD) */ #define INT13STATUS_STATUSERROR 0xe0 /* status register error (HD) */ #define INT13STATUS_SENSEFAIL 0xff /* sense operation failed (HD) */ /*** Int 15h Equates (AH values) */ #define INT15AH_KEYINTERCEPT 0x4f #define INT15AH_KEYSYSREQ 0x85 #define INT15AH_DEVBUSY 0x90 #define INT15AH_INTCOMPLETE 0x91 /*** Int 15h Equates (AL values) */ #define INT15AL_DISKETTE 0x01 #define INT15AL_KEYBOARD 0x02 /*** Int 16h Equates (AH values) */ #define INT16_READCHAR 0x00 #define INT16_PEEKCHAR 0x01 #define INT16_QUERYSHIFT 0x02 #define INT16_SETDELAYS 0x03 #define INT16_WRITECHAR 0x05 #define INT16_READEXTCHAR 0x10 #define INT16_PEEKEXTCHAR 0x11 #define INT16_QUERYEXTSHIFT 0x12 #define INT16_READ122CHAR 0x20 #define INT16_PEEK122CHAR 0x21 #define INT16_QUERY122SHIFT 0x22 /*** Diskette Parameter Table (pointed by vector BIOSINT_DISKPARMS (1Eh)) */ typedef struct fdparmtable_s { BYTE fdp_bSpecify1; /* step-rate, head-unload */ BYTE fdp_bSpecify2; /* head-load, DMA mode */ BYTE fdp_bMotorOff; /* motor-off delay */ BYTE fdp_bSectorSize; /* bytes/sec (0=128,1=256,2=512,3=1024) */ BYTE fdp_nLastSector; /* (or think of it as # sectors/track) */ BYTE fdp_lenGapRW; /* */ BYTE fdp_lenData; /* */ BYTE fdp_lenGapFormat; /* */ BYTE fdp_bFormatData; /* format initialization byte */ BYTE fdp_bSettle; /* head settle time */ BYTE fdp_bMotorOn; /* motor start-up time */ } FDPARMTABLE; typedef FDPARMTABLE *PFDPARMTABLE; /* pointer to diskette parameter table */ /*** Fixed Disk Parameter Table */ typedef struct hdparmtable_s { WORD hdp_wMaxCylinders; /* maximum number of cylinders */ BYTE hdp_bMaxHeads; /* maximum number of heads */ WORD hdp_wReserve1; /* reserved (not used) */ WORD hdp_wWritePrecompCyl; /* starting write precompensation cyl. */ BYTE hdp_bMaxECCDataBurstLen; /* maximum ECC data burst length */ BYTE hdp_bControl; /* control byte */ BYTE hdp_abReserve2[3]; /* reserved (not used) */ WORD hdp_wLandingZone; /* landing zone for head parking */ BYTE hdp_bSectorsPerTrack; /* number of sectors per track */ BYTE hdp_bReserve3; /* reserved for future use */ } HDPARMTABLE; typedef HDPARMTABLE *PHDPARMTABLE; /* pointer to hard disk parameter table */ /*** Hard disk parameter - control byte bit mask */ #define HDPCTRL_DISABLERETRY 0xc0 /* disable retries */ #define HDPCTRL_EXCEED8HEADS 0x08 /* more than 8 heads */ /*** Model byte equates (located at F000:FFFE in actual ROM) */ #define ROMMODEL_PC1 0x0FF /* PC-1, Expansion, Old PC2 (PC) */ #define ROMMODEL_PC2 0x0FE /* PC-2, Newer (XT) */ #define ROMMODEL_JR 0x0FD /* HALO (JR) */ #define ROMMODEL_AT 0x0FC /* Salmon (PC-3) (AT) */ /*** ROM format */ #define ROMHDR_SIGNATURE 0xAA55 #define ROMHDR_INCR 512 /* this would be 2K, but we're paranoid */ #define BLOCKSIZE 512 #define BLOCKSPERPAGE (PAGESIZE / BLOCKSIZE) /* c-begin */ #define PAGESFROMBLOCKS(nbl) ((nbl+BLOCKSPERPAGE-1) / BLOCKSPERPAGE) #define BLOCKSFROMBYTES(nb) ((nb+BLOCKSIZE-1) / BLOCKSIZE) /* c-end */ typedef struct romhdr_s { WORD romhdr_wSignature; /* should be ROMHDR_SIGNATURE */ BYTE romhdr_bnBlocks; /* # of ROM blocks */ BYTE romhdr_abFiller[ROMHDR_INCR-3]; } ROMHDR; typedef ROMHDR *PROMHDR; /*** ROM BIOS Data Area */ typedef struct romdata_s { VPVOID rb_avpIVT[IVT_LEN/4]; /* interrupt vector table */ /*** Start of ROM BIOS Data Areas (0400h) */ WORD rb_awCOM[4]; /* RS232_BASE (addresses of serial cards) */ WORD rb_awLPT[4]; /* PRINTER_BASE (addresses of printer cards) */ WORD rb_fsEquip; /* EQUIP_FLAG (installed hardware) */ #define BIOSEQUIP_FLOPPY 0x00001 /* machine has a floppy */ #define BIOSEQUIP_X87 0x00002 /* X87=1 if coprocessor installed */ #define BIOSEQUIP_VIDEOMASK 0x00030 /* video configuration bits */ #define BIOSEQUIP_COLOR40VIDEO 0x00010 /* */ #define BIOSEQUIP_COLOR80VIDEO 0x00020 /* */ #define BIOSEQUIP_MONOVIDEO 0x00030 /* */ #define BIOSEQUIP_FLOPPYMASK 0x000C0 /* # floppies-1 (if IPLDISK=1) */ #define BIOSEQUIP_COMMASK 0x00E00 /* # COM ports */ #define BIOSEQUIP_PRINTERMASK 0x0C000 /* # LPT ports */ BBOOL rb_bfMfgTest; /* MFG_TST (initialization flag) */ WORD rb_wMemSize; /* MEMORY_SIZE (memory size in Kbytes) */ BBOOL rb_bfMfgError[2]; /* MFG_ERR_FLAG (scratchpad for manufacturing) */ /*** Start of keyboard data area (0417h) */ BYTE rb_fbKFlag; /* KB_FLAG (keyboard shift states) */ #define BIOSKFLAG_RIGHTSHIFT 0x01 #define BIOSKFLAG_LEFTSHIFT 0x02 #define BIOSKFLAG_SHIFTMASK 0x03 #define BIOSKFLAG_CTRL 0x04 #define BIOSKFLAG_ALT 0x08 #define BIOSKFLAG_SCROLLLOCK 0x10 #define BIOSKFLAG_NUMLOCK 0x20 #define BIOSKFLAG_CAPSLOCK 0x40 #define BIOSKFLAG_INSERT 0x80 BYTE rb_fbKFlag1; /* KB_FLAG_1 (second byte of keyboard status) */ #define BIOSKFLAG1_LEFTCTRL 0x01 /* left CTRL down */ #define BIOSKFLAG1_LEFTALT 0x02 /* left ALT down */ #define BIOSKFLAG1_SYSSHIFT 0x04 /* SysReq pressed and held */ #define BIOSKFLAG1_HOLDSTATE 0x08 /* Ctrl-NumLock has been pressed */ #define BIOSKFLAG1_SCROLLDOWN 0x10 #define BIOSKFLAG1_NUMDOWN 0x20 #define BIOSKFLAG1_CAPSDOWN 0x40 #define BIOSKFLAG1_INSDOWN 0x80 BYTE rb_bKAlt; /* ALT_INPUT (storage for Alt-keypad entry) */ WORD rb_npKHead; /* BUFFER_HEAD (advanced at task-time) */ WORD rb_npKTail; /* BUFFER_TAIL (advanced at interrupt-time) */ WORD rb_abKBuf[16]; /* KB_BUFFER */ /*** Start of floppy data area (043Eh) */ BYTE rb_fbFSeekStatus; /* SEEK_STATUS */ #define BIOSSEEK_DRV0NORECAL 0x01 #define BIOSSEEK_DRV1NORECAL 0x02 #define BIOSSEEK_DRV2NORECAL 0x04 #define BIOSSEEK_DRV3NORECAL 0x08 #define BIOSSEEK_DRVINTERRUPT 0x80 BYTE rb_fbFMotorStatus; /* MOTOR_STATUS */ #define BIOSMOTOR_DRV0RUNNING 0x01 #define BIOSMOTOR_DRV1RUNNING 0x02 #define BIOSMOTOR_DRV2RUNNING 0x04 #define BIOSMOTOR_DRV3RUNNING 0x08 #define BIOSMOTOR_DRVSELECT 0x30 #define BIOSMOTOR_WRTOPERATION 0x80 BYTE rb_bFMotorCount; /* MOTOR_COUNT */ BYTE rb_bFStatus; /* DISKETTE_STATUS */ BYTE rb_abFCtlStatus[7]; /* NEC_STATUS (also CMD_BLOCK and HD_ERROR) */ /*** Start of video data area (0449h) */ BYTE rb_bVMode; /* CRT_MODE */ #define BIOSVMODE_BW40 0x00 #define BIOSVMODE_CO40 0x01 #define BIOSVMODE_BW80 0x02 #define BIOSVMODE_CO80 0x03 #define BIOSVMODE_CO320X200X4 0x04 #define BIOSVMODE_BW320X200X4 0x05 #define BIOSVMODE_CO640X200X2 0x06 #define BIOSVMODE_MONO80 0x07 #define BIOSVMODE_PCJR1 0x08 #define BIOSVMODE_PCJR2 0x09 #define BIOSVMODE_PCJR3 0x0A #define BIOSVMODE_COLRFONT 0x0B #define BIOSVMODE_MONOFONT 0x0C #define BIOSVMODE_CO320X200X16 0x0D #define BIOSVMODE_CO640X200X16 0x0E #define BIOSVMODE_MONO640X350X4 0x0F #define BIOSVMODE_CO640X350X16 0x10 #define BIOSVMODE_CO640X480X2 0x11 #define BIOSVMODE_CO640X480X16 0x12 #define BIOSVMODE_CO320X200X256 0x13 WORD rb_nVCols; /* CRT_COLS */ WORD rb_wVLen; /* CRT_LEN */ WORD rb_wVStart; /* CRT_START */ WORD rb_awVCursorPos[8]; /* CURSOR_POSN */ WORD rb_wVCursorMode; /* CURSOR_MODE */ BYTE rb_bVPage; /* ACTIVE_PAGE */ WORD rb_wVPort; /* ADDR_6845 */ BYTE rb_bVModeByte; /* CRT_MODE_SET */ BYTE rb_bVPalByte; /* CRT_PALETTE */ /*** Start of POST data area (0467h) */ VPVOID rb_vpRomInit; /* IO_ROM_INIT and IO_ROM_SEG */ BBOOL rb_fInterrupt; /* INTR_FLAG */ /*** Start of timer data area (046Ch) */ ULONG rb_ulTickCount; /* TIMER_LOW and TIMER_HIGH */ BYTE rb_bTickOverflow; /* TIMER_OFL */ /*** Start of system data area (0471h) */ BBOOL rb_fBreak; /* BIOS_BREAK */ #define BIOSBREAK_SET 0x80 SBOOL rb_fReset; /* RESET_FLAG */ #define BIOSRESET_WARMBOOT 0x1234 /*** Start of hard disk data area (0474h) */ BYTE rb_bDStatus; /* DISK_STATUS1 (fixed disk status byte) */ BYTE rb_nDTotal; /* HF_NUM (count of fixed disk drives) */ BYTE rb_bDControl; /* CONTROL_BYTE (control byte drive options) */ BYTE rb_bDPortOffset; /* PORT_OFF (port offset) */ /*** Start of COM and LPT time-out data area (0478h) */ BYTE rb_abLPTtimeout[4]; /* PRINT_TIM_OUT */ BYTE rb_abCOMtimeout[4]; /* RS232_TIM_OUT */ /*** Start of additional keyboard data area (0480h) */ WORD rb_npKBufStart; /* BUFFER_START */ WORD rb_npKBufEnd; /* BUFFER_END */ /*** Start of EGA/VGA data area (0484h) */ BYTE rb_nVRows; /* ROWS (# rows-1) */ WORD rb_nVCharHeight; /* POINTS (height of char in pixels) */ BYTE rb_bVInfo; /* INFO */ #define BIOSVINFO_NOEMULATE 0x01 /* (controls cursor emulation) */ #define BIOSVINFO_EGAMONO 0x02 /* */ #define BIOSVINFO_WAITRETRC 0x04 /* */ #define BIOSVINFO_EGAINACTIVE 0x08 /* */ #define BIOSVINFO_MEMMASK 0x60 /* (00=64k, 01=128k, 10=192k, 11=256k) */ #define BIOSVINFO_DONTCLEAR 0x80 /* (don't clear screen on resets) */ BYTE rb_bVSwitches; /* INFO_3 */ #define BIOSVSW_SW1OFF 0x01 #define BIOSVSW_SW2OFF 0x02 #define BIOSVSW_SW3OFF 0x04 #define BIOSVSW_SW4OFF 0x08 #define BIOSVSW_FEATUREBITS 0xF0 BYTE rb_bVFlags; /* Flags (for VGA and MCGA) */ #define BIOSVFLAGS_VGAACTIVE 0x01 #define BIOSVFLAGS_GRAYSCALES 0x02 #define BIOSVFLAGS_VGAMONO 0x04 #define BIOSVFLAGS_NODEFPALETTE 0x08 #define BIOSVFLAGS_DSPSWITCHING 0x40 #define BIOSVFLAGS_350LINES 0x00 #define BIOSVFLAGS_400LINES 0x10 #define BIOSVFLAGS_200LINES 0x80 #define BIOSVFLAGS_RESRVDLINES 0x90 /*** Reserved area (048Ah) */ BYTE rb_bReserved1[1]; /* reserved */ /*** Start of additional diskette data area (048Bh) */ BYTE rb_bFLastRate; /* LASTRATE */ /*** Start of additional hard disk data area (048Ch) */ BYTE rb_bDStatusReg; /* HF_STATUS */ BYTE rb_bDErrorReg; /* HF_ERROR */ BBOOL rb_fDInterrupt; /* HF_INT_FLAG */ BBOOL rb_fDCombo; /* HF_CNTRL (combo hard disk/diskette card) */ /*** Start of additional diskette data area (0490h) */ BYTE rb_bF0State; /* DSK_STATE (drive 0 media state) */ BYTE rb_bF1State; /* (drive 1 media state) */ BYTE rb_bF0StartState; /* (drive 0 operation start state) */ BYTE rb_bF1StartState; /* (drive 1 operation start state) */ BYTE rb_bF0Cyl; /* DSK_TRK (drive 0 current cylinder) */ BYTE rb_bF1Cyl; /* (drive 1 current cylinder) */ /*** Start of additional keyboard data area (0496h) */ BYTE rb_fbKFlag3; /* KB_FLAG_3 */ #define BIOSKFLAG3_E1PREFIX 0x01 /* supported */ #define BIOSKFLAG3_SECPREFIX 0x02 /* supported */ #define BIOSKFLAG3_RIGHTCTRL 0x04 /* right CTRL down */ #define BIOSKFLAG3_RIGHTALT 0x08 /* right ALT down */ #define BIOSKFLAG3_KBX 0x10 /* supported */ #define BIOSKFLAG3_SETNUMLOCK 0x20 /* supported */ #define BIOSKFLAG3_LASTID 0x40 /* supported */ #define BIOSKFLAG3_READINGID 0x80 /* supported (we never SET it though!) */ BYTE rb_fbKFlag2; /* KB_FLAG_2 */ #define BIOSKFLAG2_LEDS 0x07 /* supported */ #define BIOSKFLAG2_ACK 0x10 /* supported */ #define BIOSKFLAG2_RESEND 0x20 /* supported */ #define BIOSKFLAG2_LEDUPDATE 0x40 /* always clear */ #define BIOSKFLAG2_XMITERROR 0x80 /* always clear */ /*** Start of real-time CMOS clock data area (0498h) */ VPVOID rb_vpWaitFlag; /* USER_FLAG and USER_FLAG_SEG */ ULONG rb_ulWaitFlag; /* RTC_LOW and RTC_HIGH */ BBOOL rb_fWaitActive; /* RTC_WAIT_FLAG */ BYTE rb_bReserved2[7]; /* this should "ORG" us to 04A8h */ /*** Start of additional EGA/VGA data area (04A8h) */ VPVOID rb_vpVideoPtrTable; /*** Format of VideoPtrTable: * * VPVOID[0] Parameter Table Pointer * Initialized to BIOS Video Parameter Table. * This value MUST exist. For a VGA, the table is: * * BYTE Value for CRT_COLS * BYTE Value for ROWS * BYTE Value for POINTS * WORD Value for CRT_LEN * BYTE*4 Values for SEQ registers 1-4 * BYTE Value for Miscellaneous Output register * BYTE*25 Values for CRT registers 0-18h * BYTE*20 Values for ATC registers 0-13h * BYTE*9 Values for GDC registers 0-8 * * VPVOID[1] Parameter Save Area Pointer * Initialized to 0000:0000, this value is optional. * When non-zero, this pointer will be used as pointer * to a RAM area where certain dynamic values are to * be saved. When in EGA operation this RAM area will * hold the 16 EGA palette register values plus * the overscan value in bytes 00h-10h respectively. * At least 256 bytes must be allocated for this area. * * VPVOID[2] Alpha Character Set Override Pointer * Initialized to 0000:0000, this value is optional. * When non-zero, this pointer is used as a pointer * to a tables described as follows: * * BYTE Bytes/character * * BYTE Block to load, should be zero for normal * operation * * WORD Count to store, should be 256 for normal * operation * * WORD Character offset, should be zero for normal * operation * * VPVOID Pointer to a font table * * BYTE Displayable rows * if 'FF' the maximum calculated value will be * used, else this value will be used * * BYTE Consecutive bytes of mode values for which * this font description is to be used. * The end of this stream is indicated by a * byte code of 'FF' * * VPVOID[3] Graphics Character Set Override Pointer * Initialized to 0000:0000, this value is optional. * When non-zero, this pointer is used as a pointer * to a tables described as follows: * * BYTE Displayable rows * * WORD Bytes per character * * VPVOID Pointer to a font table * * BYTE Consecutive bytes of mode values for which * this font description is to be used. * The end of this stream is indicated by a * byte code of 'FF' * * VPVOID[4] Address of Secondary Video Pointer Table (VGA ONLY): * * WORD Length of this table, in bytes * VPVOID Pointer to Display Combination Code Table * VPVOID Pointer to second Alpha Character Set Override * VPVOID Pointer to User Palette Profile Table * VPVOID Reserved * VPVOID Reserved * VPVOID Reserved * * VPVOID[5] Reserved and set to 0000:0000. * * VPVOID[6] Reserved and set to 0000:0000. */ BYTE rb_bReserved3[0x54]; /* this should "ORG" us to 0500h */ /*** Extra data area (0500h) */ BYTE rb_bPrtScrStatus; /* STATUS_BYTE */ } ROMDATA; typedef ROMDATA *PROMDATA; /* c-begin */ typedef PROMDATA PVDMBASE; #define VDMBase (*(PVDMBASE)0) /* c-end */ /* masm-begin */ /* VDMBase equ */ /* .errnz (size romdata_s NE 0501h) */ /* masm-end */