home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
odtlktv4.zip
/
ODTLKT
/
TOOLKIT
/
INC
/
VDMBIOS.INC
< prev
next >
Wrap
Text File
|
1995-12-04
|
17KB
|
588 lines
;*** VDMBIOS.INC
;
;
; MVDM ROM BIOS Data Definitions
; Copyright (c) 1988,1989 Microsoft Corporation
;
; For include file hierarchy, see MVDM.INC
;
;
; MODIFICATION HISTORY
; 09/20/88 JTP Created.
; 12/04/88 JTP Converted to structure.
; @235 03/18/91 GAG Allow disk seek but do verify sector instead
;
;*** Low memory/ROM and EBIOS defines - used by VBIOS
;*** BIOS Interrupt Vectors
;
BIOSINT_PARITYCHECK EQU 002h
BIOSINT_PRINTSCREEN EQU 005h
BIOSINT_TIMERINTERRUPT EQU 008h
BIOSINT_KEYINTERRUPT EQU 009h
BIOSINT_COM2INTERRUPT EQU 00Bh
BIOSINT_COM1INTERRUPT EQU 00Ch
BIOSINT_LPT2INTERRUPT EQU 00Dh
BIOSINT_FLOPPYINTERRUPT EQU 00Eh
BIOSINT_LPT1INTERRUPT EQU 00Fh
BIOSINT_VIDEO EQU 010h
BIOSINT_EQUIPMENTCHECK EQU 011h
BIOSINT_MEMORYCHECK EQU 012h
BIOSINT_DISKIO EQU 013h
BIOSINT_COMIO EQU 014h
BIOSINT_OSHOOK EQU 015h
BIOSINT_KEYBOARD EQU 016h
BIOSINT_PRINTERIO EQU 017h
BIOSINT_ROMBASIC EQU 018h
BIOSINT_REBOOT EQU 019h
BIOSINT_TIMEOFDAY EQU 01Ah
BIOSINT_KEYBREAK EQU 01Bh
BIOSINT_CLOCKTICK EQU 01Ch
BIOSINT_VIDEOPARMS EQU 01Dh
BIOSINT_DISKPARMS EQU 01Eh
BIOSINT_VIDEOGRAPH EQU 01Fh
BIOSINT_OLDDISKIO EQU 040h
BIOSINT_HDISK1PARMS EQU 041h
BIOSINT_OLDVIDEO EQU 042h
BIOSINT_EXTVIDEOGRAPH EQU 043h
BIOSINT_HDISK2PARMS EQU 046h
;*** Int 10h Equates (AH values)
;
INT10_SETMODE EQU 000h
INT10_SETCURSORTYPE EQU 001h
INT10_SETCURSORPOS EQU 002h
INT10_QUERYCURSORPOS EQU 003h
INT10_QUERYLPEN EQU 004h
INT10_SETACTIVEPAGE EQU 005h
INT10_SCROLLUP EQU 006h
INT10_SCROLLDOWN EQU 007h
INT10_READCHARATTR EQU 008h
INT10_WRITECHARATTR EQU 009h
INT10_WRITECHAR EQU 00Ah
INT10_SETPALETTE EQU 00Bh
INT10_WRITEPIXEL EQU 00Ch
INT10_READPIXEL EQU 00Dh
INT10_WRITETTY EQU 00Eh
INT10_QUERYMODE EQU 00Fh
INT10_EGASETPALETTE EQU 010h
INT10_EGASELECTFONT EQU 011h
INT10_EGASELECTMISC EQU 012h
INT10_EGAWRITESTRING EQU 013h
INT10_VGADISPLAYCODES EQU 01Ah
INT10_VGAQUERYSTATE EQU 01Bh
INT10_VGASAVERESTORE EQU 01Ch
;*** Int 13h Equates (AH values)
;
INT13_DISKRESET EQU 000h
INT13_DISKSTATUS EQU 001h
INT13_READSECTORS EQU 002h
INT13_WRITESECTORS EQU 003h
INT13_VERIFYSECTORS EQU 004h
INT13_FORMATTRACK EQU 005h
INT13_QUERYDRVPARMS EQU 008h
INT13_DISKSEEK EQU 00Ch ;@235
INT13_QUERYDASDTYPE EQU 015h
INT13_QUERYCHANGE EQU 016h
INT13_SETDISKTYPE EQU 017h
INT13_SETMEDIATYPE EQU 018h
;*** Int 13h Status Equates (return in AH)
;
INT13STATUS_SUCCESS EQU 000h ;successful completion
INT13STATUS_BADCMD EQU 001h ;bad command
INT13STATUS_BADADDRMARK EQU 002h ;address mark not found
INT13STATUS_WRTPROTECT EQU 003h ;write on write-protected disk
INT13STATUS_RECNOTFOUND EQU 004h ;sector not found
INT13STATUS_BADRESET EQU 005h ;reset failed
INT13STATUS_MEDIACHANGE EQU 006h ;media changed
INT13STATUS_INITFAIL EQU 007h ;parm. act. failed
INT13STATUS_BADDMA EQU 008h ;DMA overrun
INT13STATUS_DMABOUNDARY EQU 009h ;DMA across 64K boundary
INT13STATUS_BADSECTOR EQU 00ah ;bad sector detected
INT13STATUS_BADTRACK EQU 00bh ;bad track detected
INT13STATUS_BADMEDIATYPE EQU 00ch ;unsupported track
INT13STATUS_BADFMTSECNUM EQU 00dh ;bad # of sectors on format
INT13STATUS_ADDRMARKDET EQU 00eh ;ctrl data addr mark detected (HD
INT13STATUS_DMAARBERR EQU 00fh ;DMA arbitration error
INT13STATUS_BADCRCECC EQU 010h ;bad CRC/ECC
INT13STATUS_DATACORRECT EQU 011h ;data ECC corrected
INT13STATUS_BADCNTLR EQU 020h ;controller failure
INT13STATUS_BADSEEK EQU 040h ;seek failed
INT13STATUS_TIMEOUT EQU 080h ;time out
INT13STATUS_DRVNOTREADY EQU 0aah ;drive not ready
INT13STATUS_UNDEFERR EQU 0bbh ;undefined error
INT13STATUS_WRITEFAULT EQU 0cch ;write fault
INT13STATUS_STATUSERROR EQU 0e0h ;status register error
INT13STATUS_SENSEFAIL EQU 0ffh ;sense operation failed
;*** Int 15h Equates (AH values)
;
INT15AH_KEYINTERCEPT EQU 04fh
INT15AH_KEYSYSREQ EQU 085h
INT15AH_DEVBUSY EQU 090h
INT15AH_INTCOMPLETE EQU 091h
;*** Int 15h Equates (AL values)
;
INT15AL_DISKETTE EQU 001h
INT15AL_KEYBOARD EQU 002h
;*** Int 16h Equates (AH values)
;
INT16_READCHAR EQU 000h
INT16_PEEKCHAR EQU 001h
INT16_QUERYSHIFT EQU 002h
INT16_SETDELAYS EQU 003h
INT16_WRITECHAR EQU 005h
INT16_READEXTCHAR EQU 010h
INT16_PEEKEXTCHAR EQU 011h
INT16_QUERYEXTSHIFT EQU 012h
INT16_READ122CHAR EQU 020h
INT16_PEEK122CHAR EQU 021h
INT16_QUERY122SHIFT EQU 022h
;*** Diskette Parameter Table (pointed by vector BIOSINT_DISKPARMS (1Eh))
;
DefStruc ,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
EndStruc FDPARMTABLE
DefType PFDPARMTABLE,dd ;pointer to diskette parameter table
;*** Fixed Disk Parameter Table
;
DefStruc ,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
EndStruc HDPARMTABLE
DefType PHDPARMTABLE,dd ;pointer to hard disk parameter table
;*** Hard disk parameter - control byte bit mask
;
HDPCTRL_DISABLERETRY EQU 0c0h ;disable retries
HDPCTRL_EXCEED8HEADS EQU 008h ;more than 8 heads
;*** Model byte equates (located at F000:FFFE in actual ROM)
;
ROMMODEL_PC1 EQU 00FFh ;PC-1, Expansion, Old PC2
ROMMODEL_PC2 EQU 00FEh ;PC-2, Newer
ROMMODEL_JR EQU 00FDh ;HALO
ROMMODEL_AT EQU 00FCh ;Salmon (PC-3)
;*** ROM format
;
ROMHDR_SIGNATURE EQU 0AA55h
ROMHDR_INCR EQU 2048
BLOCKSIZE EQU 512
BLOCKSPERPAGE EQU (PAGESIZE / BLOCKSIZE)
DefStruc ,romhdr_s
_WORD romhdr_wSignature ;should be ROMHDR_SIGNATURE
_BYTE romhdr_bnBlocks ;# of ROM blocks
_BYTE romhdr_abFiller,,ROMHDR_INCR-3
EndStruc ROMHDR
DefType PROMHDR,dd
;*** ROM BIOS Data Area
;
DefStruc ,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)
BIOSEQUIP_FLOPPY EQU 000001h ;machine has a floppy
BIOSEQUIP_X87 EQU 000002h ;X87=1 if coprocessor installed
BIOSEQUIP_VIDEOMASK EQU 000030h ;video configuration bits
BIOSEQUIP_COLOR40VIDEO EQU 000010h ;
BIOSEQUIP_COLOR80VIDEO EQU 000020h ;
BIOSEQUIP_MONOVIDEO EQU 000030h ;
BIOSEQUIP_FLOPPYMASK EQU 0000C0h ;# floppies-1 (if IPLDISK=1)
BIOSEQUIP_COMMASK EQU 000E00h ;# COM ports
BIOSEQUIP_PRINTERMASK EQU 00C000h ;# 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)
BIOSKFLAG_RIGHTSHIFT EQU 001h
BIOSKFLAG_LEFTSHIFT EQU 002h
BIOSKFLAG_SHIFTMASK EQU 003h
BIOSKFLAG_CTRL EQU 004h
BIOSKFLAG_ALT EQU 008h
BIOSKFLAG_SCROLLLOCK EQU 010h
BIOSKFLAG_NUMLOCK EQU 020h
BIOSKFLAG_CAPSLOCK EQU 040h
BIOSKFLAG_INSERT EQU 080h
_BYTE rb_fbKFlag1 ;KB_FLAG_1 (second byte of keyboard status)
BIOSKFLAG1_LEFTCTRL EQU 001h ;left CTRL down
BIOSKFLAG1_LEFTALT EQU 002h ;left ALT down
BIOSKFLAG1_SYSSHIFT EQU 004h ;SysReq pressed and held
BIOSKFLAG1_HOLDSTATE EQU 008h ;Ctrl-NumLock has been pressed
BIOSKFLAG1_SCROLLDOWN EQU 010h
BIOSKFLAG1_NUMDOWN EQU 020h
BIOSKFLAG1_CAPSDOWN EQU 040h
BIOSKFLAG1_INSDOWN EQU 080h
_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
BIOSSEEK_DRV0NORECAL EQU 001h
BIOSSEEK_DRV1NORECAL EQU 002h
BIOSSEEK_DRV2NORECAL EQU 004h
BIOSSEEK_DRV3NORECAL EQU 008h
BIOSSEEK_DRVINTERRUPT EQU 080h
_BYTE rb_fbFMotorStatus ;MOTOR_STATUS
BIOSMOTOR_DRV0RUNNING EQU 001h
BIOSMOTOR_DRV1RUNNING EQU 002h
BIOSMOTOR_DRV2RUNNING EQU 004h
BIOSMOTOR_DRV3RUNNING EQU 008h
BIOSMOTOR_DRVSELECT EQU 030h
BIOSMOTOR_WRTOPERATION EQU 080h
_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
BIOSVMODE_BW40 EQU 000h
BIOSVMODE_CO40 EQU 001h
BIOSVMODE_BW80 EQU 002h
BIOSVMODE_CO80 EQU 003h
BIOSVMODE_CO320X200X4 EQU 004h
BIOSVMODE_BW320X200X4 EQU 005h
BIOSVMODE_CO640X200X2 EQU 006h
BIOSVMODE_MONO80 EQU 007h
BIOSVMODE_PCJR1 EQU 008h
BIOSVMODE_PCJR2 EQU 009h
BIOSVMODE_PCJR3 EQU 00Ah
BIOSVMODE_COLRFONT EQU 00Bh
BIOSVMODE_MONOFONT EQU 00Ch
BIOSVMODE_CO320X200X16 EQU 00Dh
BIOSVMODE_CO640X200X16 EQU 00Eh
BIOSVMODE_MONO640X350X4 EQU 00Fh
BIOSVMODE_CO640X350X16 EQU 010h
BIOSVMODE_CO640X480X2 EQU 011h
BIOSVMODE_CO640X480X16 EQU 012h
BIOSVMODE_CO320X200X256 EQU 013h
_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
BIOSBREAK_SET EQU 080h
SBOOL rb_fReset ;RESET_FLAG
BIOSRESET_WARMBOOT EQU 01234h
;*** 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
BIOSVINFO_NOEMULATE EQU 001h ;(controls cursor emulation)
BIOSVINFO_EGAMONO EQU 002h ;
BIOSVINFO_WAITRETRC EQU 004h ;
BIOSVINFO_EGAINACTIVE EQU 008h ;
BIOSVINFO_MEMMASK EQU 060h ;(00=64k, 01=128k, 10=192k, 11=256k)
BIOSVINFO_DONTCLEAR EQU 080h ;(don't clear screen on resets)
_BYTE rb_bVSwitches ;INFO_3
BIOSVSW_SW1OFF EQU 001h
BIOSVSW_SW2OFF EQU 002h
BIOSVSW_SW3OFF EQU 004h
BIOSVSW_SW4OFF EQU 008h
BIOSVSW_FEATUREBITS EQU 0F0h
_BYTE rb_bVFlags ;Flags (for VGA and MCGA)
BIOSVFLAGS_VGAACTIVE EQU 001h
BIOSVFLAGS_GRAYSCALES EQU 002h
BIOSVFLAGS_VGAMONO EQU 004h
BIOSVFLAGS_NODEFPALETTE EQU 008h
BIOSVFLAGS_DSPSWITCHING EQU 040h
BIOSVFLAGS_350INES EQU 000h
BIOSVFLAGS_400INES EQU 010h
BIOSVFLAGS_200INES EQU 080h
BIOSVFLAGS_RESRVDLINES EQU 090h
;*** 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
BIOSKFLAG3_E1PREFIX EQU 001h ;supported
BIOSKFLAG3_SECPREFIX EQU 002h ;supported
BIOSKFLAG3_RIGHTCTRL EQU 004h ;right CTRL down
BIOSKFLAG3_RIGHTALT EQU 008h ;right ALT down
BIOSKFLAG3_KBX EQU 010h ;supported
BIOSKFLAG3_SETNUMLOCK EQU 020h ;supported
BIOSKFLAG3_LASTID EQU 040h ;supported
BIOSKFLAG3_READINGID EQU 080h ;supported (we never SET it though!)
_BYTE rb_fbKFlag2 ;KB_FLAG_2
BIOSKFLAG2_LEDS EQU 007h ;supported
BIOSKFLAG2_ACK EQU 010h ;supported
BIOSKFLAG2_RESEND EQU 020h ;supported
BIOSKFLAG2_LEDUPDATE EQU 040h ;always clear
BIOSKFLAG2_XMITERROR EQU 080h ;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,,054h ;this should "ORG" us to 0500h
;*** Extra data area (0500h)
;
_BYTE rb_bPrtScrStatus ;STATUS_BYTE
EndStruc ROMDATA
DefType PROMDATA,dd
VDMBase equ <ds:[0]>
.errnz (size romdata_s NE 0501h)