Metropoli BBS
VIEWER: vdmbios.h MODE: TEXT (ASCII)
/***    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 <ds:[0]> */
/* .errnz  (size romdata_s NE 0501h) */
/* masm-end */
[ RETURN TO DIRECTORY ]