INT 14 - VIDEO FOSSIL - OPEN VFOSSIL
AX = 8101h
ES:DI -> buffer for application function table (see below)
CX = length of buffer in bytes
Return: AX = 1954h if installed
BH = highest VFOSSIL application function supported
Note:   the number of initialized pointers in the application function table
will never exceed CX/4; if the buffer is large enough, BH+1 pointers
will be initialized

Format of application function table:
Offset  Size    Description
00h    DWORD   -> function to query current video mode (VioGetMode)
04h    DWORD   -> function to set video mode (VioSetMode)
08h    DWORD   -> function to query hardware config (VioGetConfig)
0Ch    DWORD   -> function to write data in TTY mode (VioWrtTTY)
10h    DWORD   -> function to get current ANSI state (VioGetANSI)
14h    DWORD   -> function to set new ANSI state (VioSetANSI)
18h    DWORD   -> function to get curr cursor position (VioGetCurPos)
1Ch    DWORD   -> function to set cursor position (VioSetCurPos)
20h    DWORD   -> function to get cursor shape (VioGetCurType)
24h    DWORD   -> function to set cursor shape (VioSetCurType)
28h    DWORD   -> function to scroll screen up (VioScrollUp)
2Ch    DWORD   -> function to scroll screen down (VioScrollDn)
30h    DWORD   -> function to read cell string from screen (VioReadCellStr)
34h    DWORD   -> function to read char string from screen (VioReadCharStr)
38h    DWORD   -> function to write a cell string (VioWrtCellStr)
3Ch    DWORD   -> function to write char string, leaving attr (VioWrtCharStr)
40h    DWORD   -> function to write char string,const attr (VioWrtCharStrAttr)
44h    DWORD   -> function to replicate an attribute (VioWrtNAttr)
48h    DWORD   -> function to replicate a cell (VioWrtNCell)
4Ch    DWORD   -> function to replicate a character (VioWrtNChar)

Format of video mode data structure:
Offset  Size    Description
00h    WORD    length of structure including this field
02h    BYTE    mode characteristics
bit 0: clear if MDA, set otherwise
bit 1: graphics mode
bit 2: color disabled (black-and-white)
03h    BYTE    number of colors supported (1=2 colors, 4=16 colors, etc)
04h    WORD    number of text columns
06h    WORD    number of text rows
08h    WORD    reserved
0Ah    WORD    reserved
0Ch    DWORD   reserved

Format of video configuration data:
Offset  Size    Description
00h    WORD    structure length including this field
02h    WORD    adapter type
00h monochrome/printer
01h CGA
02h EGA
03h VGA
07h 8514/A
04h    WORD    display type
00h monochrome
01h color
02h enhanced color
09h 8514
06h    DWORD   adapter memory size

Format of cursor type record:
Offset  Size    Description
00h    WORD    cursor start line
02h    WORD    cursor end line
04h    WORD    cursor width (always 01h)
06h    WORD    cursor attribute (FFFFh = hidden)

Call VioGetMode with:
STACK:  WORD    VIO handle (must be 00h)
DWORD   pointer to video mode data structure (see above)
Return: AX = error code (00h, 74h, 17Eh, 1B4h)
0000h successful
0074h internal VIO failure
0163h unsupported mode
0166h invalid row value
0167h invalid column value
017Eh buffer too small
01A5h invalid VIO parameter
01B4h invalid VIO handle

Call VioSetMode with:
STACK:  WORD    VIO handle (must be 00h)
DWORD   pointer to video mode data structure (see above)
Return: AX = error code (00h, 74h, 163h, 17Eh, 1A5h, 1B4h) (see above)

Call VioGetConfig with:
STACK:  WORD    VIO handle (must be 00h)
DWORD   pointer to video configuration data buffer (see above)
Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see above)

Call VioWrtTTY with:
STACK:  WORD    VIO handle (must be 00h)
WORD    length of string
DWORD   pointer to character string to be written to screen
Return: AX = error code (00h, 74h, 1B4h) (see above)
Notes:  write wraps at end of line and terminates if it reaches end of screen
in ANSI mode, ANSI control sequences are interpreted, and this func is
not required to be reentrant; in non-ANSI mode, the function is
reentrant and may be called from within an MSDOS function call

Call VioGetANSI with:
STACK:  WORD    VIO handle (must be 00h)
DWORD   pointer to WORD which will be set to 00h if ANSI is off
or 01h if ANSI is on
Return: AX = error code (00h, 74h, 1B4h) (see above)

Call VioSetANSI with:
STACK:  WORD    VIO handle (must be 00h)
DWORD   pointer to WORD indicating new state of ANSI
00h off
01h on
Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)

Call VioGetCurPos with:
STACK:  WORD    VIO handle (must be 00h)
DWORD   pointer to WORD to hold current cursor column (0-based)
DWORD   pointer to WORD to hold current cursor row (0-based)
Return: AX = error code (00h, 74h, 1B4h) (see above)

Call VioSetCurPos with:
STACK:  WORD    VIO handle (must be 00h)
WORD    cursor column
WORD    cursor row
Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
Note:   if either coordinate is invalid, the cursor is not moved

Call VioGetCurType with:
STACK:  WORD    VIO handle (must be 00h)
DWORD   pointer to cursor type record (see above)
Return: AX = error code (00h, 74h, 1B4h) (see above)

Call VioSetCurType with:
STACK:  WORD    VIO handle (must be 00h)
DWORD   pointer to cursor type record (see above)
Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)

Call VioScrollUp with:
STACK:  WORD    VIO handle (must be 00h)
DWORD   pointer to char/attr cell for filling emptied rows
WORD    number or rows to scroll (FFFFh = clear area)
WORD    right column of scroll area
WORD    bottom row of scroll area
WORD    left column of scroll area
WORD    top row of scroll area
Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)

Call VioScrollDn with:
STACK:  WORD    VIO handle (must be 00h)
DWORD   pointer to char/attr cell for filling emptied rows
WORD    number or rows to scroll (FFFFh = clear area)
WORD    right column of scroll area
WORD    bottom row of scroll area
WORD    left column of scroll area
WORD    top row of scroll area
Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)

Call VioReadCellStr with:
STACK:  WORD    VIO handle (must be 00h)
WORD    column at which to start reading
WORD    row at which to start reading
DWORD   pointer to WORD containing length of buffer in bytes
on return, WORD contains number of bytes actually read
DWORD   pointer to buffer for cell string
Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)

Call VioReadCharStr with:
STACK:  WORD    VIO handle (must be 00h)
WORD    column at which to start reading
WORD    row at which to start reading
DWORD   pointer to WORD containing length of buffer in bytes
on return, WORD contains number of bytes actually read
DWORD   pointer to buffer for character string
Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)

Call VioWrtCellStr with:
STACK:  WORD    VIO handle (must be 00h)
WORD    column at which to start writing
WORD    row at which to start writing
WORD    length of cell string in bytes
DWORD   pointer to cell string to write
Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
Note:   write wraps at end of line and terminates if it reaches end of screen

Call VioWrtCharStr with:
STACK:  WORD    VIO handle (must be 00h)
WORD    column at which to start writing
WORD    row at which to start writing
WORD    length of character string
DWORD   pointer to character string to write
Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
Note:   write wraps at end of line and terminates if it reaches end of screen

Call VioWrtCharStrAttr with:
STACK:  WORD    VIO handle (must be 00h)
DWORD   pointer to attribute to be applied to each character
WORD    column at which to start writing
WORD    row at which to start writing
WORD    length of character string
DWORD   pointer to character string to write
Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
Note:   write wraps at end of line and terminates if it reaches end of screen

Call VioWrtNAttr with:
STACK:  WORD    VIO handle (must be 00h)
WORD    column at which to start writing
WORD    row at which to start writing
WORD    number of times to write attribute
DWORD   pointer to display attribute to replicate
Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
Note:   write wraps at end of line and terminates if it reaches end of screen

Call VioWrtNCell with:
STACK:  WORD    VIO handle (must be 00h)
WORD    column at which to start writing
WORD    row at which to start writing
WORD    number of times to write cell
DWORD   pointer to cell to replicate
Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
Note:   write wraps at end of line and terminates if it reaches end of screen

Call VioWrtNChar with:
STACK:  WORD    VIO handle (must be 00h)
WORD    column at which to start writing
WORD    row at which to start writing
WORD    number of times to write character
DWORD   pointer to character to replicate
Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
Note:   write wraps at end of line and terminates if it reaches end of screen

See also: 148102

148101 - VIDEO FOSSIL - OPEN VFOSSIL