The Adapter Interface (AI) was introduced as the programming interface for the
IBM 8514/A before the register interface was publicly available.
AI interfaces have also been implemented for the XGA, IBM Image Adapter/A and
8514/A clones like the ATI Mach8/32
Also pure software versions exists like Tseng's RIXAI.

INT 7F - AI - Check for Adapter Interface
         AX = 0105h
         CX = 0000h
         DX = 0000h
Return: Carry clear if successful
        CX:DX -> Function table. One DWORD pointer for each function (0..60)
                 Most functions have one parameter (Shown as X below), a
                 pointer to a parameter table where the first WORD holds the
                 number of bytes following, thus if there are 10 bytes in all
                 the first WORD will be 8. It is the callers responsibility to
                 set this.

function 00h HLINE(X) - Line at Given Point
 Draws a polyline starting in the first position listed.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4*Number_of_points)
   02h   WORD    X-coordinate of 1st point
   04h   WORD    Y-coordinate of 1st point
      ...
  4*n+2  WORD    X-coordinate of Nth point
  4*n+4  WORD    Y-coordinate of Nth point

function 01h HCLINE(X) - Line at Current Position
 Draws a polyline from the current position to the last point
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4*Number_of_points)
   02h   WORD    X-coordinate of 1st point
   04h   WORD    Y-coordinate of 1st point
      ...
  4*n+2  WORD    X-coordinate of Nth point
  4*n+4  WORD    Y-coordinate of Nth point

function 02h HRLINE(X) - Relative Line at Given Position
 Draws a series of polylines, starting at the given point, with each endpoint
 given as an offset from the last point.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4 + 2*Number_of_points)
   02h   WORD    X-coordinate of starting point
   04h   WORD    Y-coordinate of starting point
      .....
  2*N+4  BYTE    X-coordinate of Nth relative point
  2*N+5  BYTE    Y-coordinate of Nth relative point


function 03h HCRLINE(X) - Relative Line at Current Position
 Draws a series of linesegments, each specified relative to the end of the
 previous segment (the current position for the first segment).
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(2*Number of segments)

  2*N+2  BYTE    X-coordinate offset (-128 to +127)
  2*N+3  BYTE    Y-coordinate offset (-128 to +127)

function 04h HSCP(X) - Set Current Position
 Sets the current drawing position
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4)
   02h   WORD    New X-coordinate
   04h   WORD    New Y-coordinate

function 05h HBAR(X) - Begin Area
 Marks the start of a series of commands that defines the boundary for a
 fill area. The sequence is terminated by a HEAR() command.
 The following commands are not allowed between the HBAR and HEAR:
   HOPEN, HCLOSE, HSMODE, HSHS, HSCMP, HSBP, HCHST and HCCHST.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(0)
Note: HBAR/HEAR commands can not be nested.

function 06h HEAR(X) - End Area
 Ends the area definition started by a HBAR command.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(0 or 1)
   02h   BYTE    Flag (only if length is 1):
                  00h  Fill the defined area
                  40h  Suspend the area definition. until the next HBAR
                  80h  Abort definition.
                 Note: bits 0-5 are probably ignored

function 07h HSCOL(X) - Set Color
 Sets the foreground color
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4)
   02h   DWORD   Foreground color index. Only the number of least significant
                 bits (depending on the current mode) are used.
                 0FFFFFFFFh is reserved for multiplane character sets

function 08h HOPEN(X) - Open Adapter
 Enables the adapter.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(3)
   02h   BYTE    Initialisation flags
                 Bit 0-5  Don't care
                       6  Clear to load default palette
                       7  Clear to clear video memory
   03h   BYTE    Mode. See HSMODE for (implementation specific) modelist.
   04h   BYTE    Return status. In the original 8514/A a non-zero return value
                 indicated failure, later version have assigned bits to
                 specific events:
                 Bit 7  Set if a driver/hardware mismatch occours
                     6  Set if a control program reject occours

function 09h HSMX(X) - Set Mix
 Sets the fore- and background mixes
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(2)
   02h   BYTE    Foreground mix (SRC is Source, DST is Destination):
                  00h:  Keep previous mix
                  01h:  SRC or DST
                  02h:  SRC
                  03h:  Reserved
                  04h:  SRC xor DST
                  05h:  DST          (I.e. do nothing)
                  06h:  Max(DST,SRC)
                  07h:  Min(DST,SRC)
                  08h:  SRC+DST  (overflow is clipped to maximum)
                  09h:  DST-SRC  (underflow is clipped to zero)
                  0Ah:  SRC-DST  (underflow is clipped to zero)
                  0Bh:  (SRC+DST)/2  (Average)
              0Ch-0Fh:  Reserved
                  10h:  Zero, all bits cleared
                  11h:  SRC and DST
                  12h:  SRC and (not DST)
                  13h:  SRC
                  14h:  (not SRC) and DST
                  15h:  DST
                  16h:  SRC xor DST
                  17h:  SRC or DST
                  18h:  (not SRC) and (not DST)
                  19h:  not (SRC xor DST)
                  1Ah:  not DST
                  1Bh:  SRC or (not DST)
                  1Ch:  not SRC
                  1Dh:  (not SRC) or DST
                  1Eh:  (not SRC) or (not DST)
                  1Fh:  One, all bits set
   03h   BYTE    Background mix (same as above)

function 0Ah HSBCOL(X) - Set Background Color
 Sets the background color
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4)
   02h   DWORD   Background color index. Only the number of least significant
                 bits (depending on the current mode) are used.
                 0xFFFFFFFF is reserved for color fonts.

function 0Bh HSLT(X) - Set Line Type
 Sets the current line type
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(1 or 6)
   02h   BYTE    Line pattern type
                   0: User defined pattern (see byte 4-7)
                   1: Dotted line (1 on, 2off)
                   2: Short dashed line (5 on, 3 off)
                   3: Dash-dot line (6 on, 4off, 2on, 4off)
                   4: Double doted line (2 on, 4 off, 2 on, 8 off)
                   5: Long dashed line (9 on, 3 off)
                   6: Dash-double-dot line (8 on, 4 off, 2 on, 4 off, 2 on,
                       4 off)
                   7: Solid line
                   8: Invisible line.
       Following fields only present if length =6
   03h   BYTE    Reserved
   04h   DWORD   Address of user defined pattern
                 Offset: Type:
                   00h   WORD   Number of on/off byte pairs(N)
                      ...
                  2*N    BYTE   On count
                  2*N+1  BYTE   Off count
                 Maximum pattern length is 48 pixels.

function 0Ch HSLW(X) - Set Line Width
 Sets the line drawing width
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(1)
   02h   BYTE    Line width in pixels. Original AI, ATI (Mach32) and XGA
                 versions only supports widths of 1 and 3.

function 0Dh HEGS(X) - Erase Graphics Screen
 Clears the screen and sets the current position to the top left corner
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(0)

function 0Eh HSGQ(X) - Set Graphics Quality
 Sets the graphics quality options
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(2)
   02h   WORD    Quality flags
                 Bit  0-9  Reserved
                       10  (XGA and ImageAdapter/A) If clear areas to be
                            filled are closed by connection the first point
                            to the last with a line
                           Reserved in the original AI.
                    11-12  0: Last pixel in a line is not drawn
                           1: Last pixel in a line is drawn
                           2: Last pixel in a line is drawn dependent on the
                              mix mode.
                       13  Reserved, set to 0
                       14  0: High precision, 1: low precision
                           Ignored in the XGA and ATI (Mach32) AI versions.
                       15  Reserved, set to 0

function 0Fh HSCMP(X) - Set Color Comparison Register
 Sets the color comparison information.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(5)
   02h   DWORD   Comparison Color (CC)
   06h   BYTE    Logic function:
                   0:  TRUE
                   1:  Destination >  CC
                   2:  Destination == CC
                   3:  Destination <  CC
                   4:  FALSE
                   5:  Destination >= CC
                   6:  Destination != CC
                   7:  Destination <= CC
                 If the color comparison is true the pixel is left unmodified

function 10h HINT(X) - Interrupt
 Waits until the event(s) specified by set bit(s) in the Event word happens
 before it returns. Used to synchronize with an event.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4)
   02h   DWORD   Event/Interrupt bits:
                   0-29  Reserved
                     30  Wait for hardware to be free (I.e. not busy
                         drawing). Only in the XGA version
                     31  Wait for vertical blank.

function 11h HSPATTO(X) - Set Pattern Reference Point
 Sets the pattern reference point for functions that use the pattern.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4)
   02h   WORD    X-coordinate
   04h   WORD    X-coordinate

function 12h HSPATT(X) - Set Symbol Shape
 Defines an area pattern
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(10 or 14)
   02h   BYTE    Cell width in pixels
   03h   BYTE    Cell height in lines
   04h   BYTE    Flags
                 Bit 0-5  Reserved
                       6  (XGA and ImageAdapter/A only) Set if pattern color
                            data is in packed pixel format, clear if it always
                            uses one byte per pixel
                             0: 1pixel/byte, 1: packed pixel format
                       7  0: Monochrome: Marker is drawn with current
                             foreground color&mix on the background color&mix,
                          1: Color: Marker is drawn in the color from the
                             color data (Byte 0Ch) on the current background
                             color&mix
   05h   BYTE    Reserved
   06h   WORD    Size of pattern in bytes
   08h   DWORD   Ptr to pattern definition data. A packed monochrome bitmap
       Following field only present if length = 14
   0Ch   DWORD   Address of pattern color data
Note: for the original AI (I.e. 8514/A hardware) the pattern is limited to
      32x32, for the XGA and ImageAdapter/A versions there is no limit

function 13h HLDPAL(X) -Load Palette
 Loads the color look-up table with either the default palette or a user
 specified palette.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(1 or 10)
   02h   BYTE    Palette type
                   00h  User defined palette as specified in the remaining
                        parameters
                   01h  Adapter default palette. Ignore remaining parameters
   03h   BYTE    Reserved
   04h   WORD    Index of first palette entry
   06h   WORD    Number of entries
   08h   DWORD   Address of palette data. This consists of 4 bytes per entry,
                 with the first byte (0) reserved, byte 1 is Green, byte 2 is
                 Blue and byte 3 is Red.
                 Note: one source has bytes 0 and 3 swapped ??

function 14h HSHS(X) - Set Scissors
 Sets the scissors rectangle, if rectangle not specified (length=0) the HOPEN
 default is used. Only pixels within the rectangle can be updated.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(0 or 8 (or 13 for XGA and
                 ImageAdapter/A versions))
       Following fields only present if length >=8
   02h   WORD    Left limit (low X)
   04h   WORD    Right limit (high X)
   06h   WORD    Bottom limit (high Y)
   08h   WORD    Top limit (low Y)
       Following fields only present if length =13 (XGA and ImageAdapter/A)
   0Ah   DWORD   Address of monochrome mask map. Only pixels with 1 in the
                 mask map can be updated.
   0Eh   BYTE    Reserved, must be 80h

function 15h HBBW(X) - BitBlt Write Image Data
 Defines the screen area to be written by the HBBCBN command(s) following
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(10 or 18)
   02h   WORD    Type of BitBlt:
                   0:  Writes a single plane. The source pattern is packed 8
                       bits to a byte.
                   1:  Writes all planes, the source data is packed.
                       Only supported in XGA versions of the AI.
                   8:  Writes all planes, source data has one pixel per byte
   04h   WORD    Width of block in pixels
   06h   WORD    Height of block in lines
   08h   WORD    Source X coordinate - left
   0Ah   WORD    Source Y coordinate - top

       The following fields are only present if the length is set to 18:
       If set the destination buffer is defined as a rectangle and the data
       is transferred to a rectangle within the buffer rectangle.

   0Ch   WORD    Offset of the destination rectangle from the left edge of
                 the larger data buffer rectangle.
   0Eh   WORD    Starting line in the data buffer
   10h   WORD    Width of the data buffer in bytes
   12h   WORD    Height of the data buffer in lines

function 16h HCBBW(X) - BitBlt Write Image Data at Current Position
 Defines the screen area to be written by the HBBCBN command(s) following
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(6 or 14)
   02h   WORD    Type of BitBlt:
                   0:  Writes a single plane. The source pattern is packed 8
                       bits to a byte.
                   1:  Writes all planes, the source data is packed.
                       Only supported in XGA versions of the AI.
                   8:  Writes all planes, source data has one pixel per byte
   04h   WORD    Width of block in pixels
   06h   WORD    Height of block in lines

       The following fields are only present if the length is set to 14:
       If set the destination buffer is defined as a rectangle and the data
       is transferred to a rectangle within the buffer rectangle.

   08h   WORD    Offset of the destination rectangle from the left edge of
                 the larger data buffer rectangle.
   0Ah   WORD    Starting line in the data buffer
   0Ch   WORD    Width of the data buffer in bytes
   0Eh   WORD    Height of the data buffer in lines

function 17h HBBR(X) - BitBlt Read image Data
 Defines the screen area to be read by the HBBCBN command(s) following
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(12 or 20)
   02h   WORD    Type of BitBlt:
                   0:  Reads a single plane. The plane is selected by byte 8
                       The resulting bits are packed 8 to a byte.
                   1:  Reads all planes, pack pixels as much as possible
                       Only supported in XGA versions of the AI.
                   8:  Reads all planes, one pixel per byte.
   04h   WORD    Width of block in pixels
   06h   WORD    Height of block in lines
   08h   BYTE    Selects the source plane for single plane reads
   09h   BYTE    Reserved
   0Ah   WORD    Source X coordinate - left
   0Ch   WORD    Source Y coordinate - top

       The following fields are only present if the length is set to 20:
       If set the destination buffer is defined as a rectangle and the data
       is transferred to a rectangle within the buffer rectangle.

   0Eh   WORD    Offset of the destination rectangle from the left edge of
                 the larger data buffer rectangle.
   10h   WORD    Starting line in the data buffer
   12h   WORD    Width of the data buffer in bytes
   14h   WORD    Height of the data buffer in lines

function 18h HBBCHN(X) - BitBlt Chained Data
 Defines the data buffer used by a preceding HBBR, HBBW or HCBBW command
 Parameter Block:
 Offset:  Type:  Description:
   00h    WORD   Length of data following(6)
   02h    DWORD  Address of data buffer
   06h    WORD   Number of bytes in buffer
Note: Multiple buffers can be used to transfer a full image.

function 19h HBBC(X) - Bitblt Copy
 Copies the source area to the destination area. Overlapping areas are
 handled correctly.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(16)
   02h   WORD    Type of Bitblt:
                   0: Across-the-plane copying (color expansion).
                      One plane (bit of each pixel - selected by Byte 8 of
                      this record) holds the monochrome map which is
                      expanded. Each 1 bit in the mono map causes the
                      corresponding pixel in the destination to be written
                      in the foreground color & mix, 0 bits causes writes
                      in the background color & mix.
                   8: Through-the-plane copying. The source is copied to
                      the destination with the foreground mix.
                 Note: one source claims 1 will also cause Through-the-plane
                       copying like 8.
   04h   WORD    Width of area
   06h   WORD    Height of area
   08h   BYTE    Source plane for bit expansion. For color expansions this
                 selects the plane which holds the monochrome map.
   09h   BYTE    Reserved
   0Ah   WORD    Source X coordinate - left edge
   0Ch   WORD    Source Y coordinate - top
   0Eh   WORD    Source X coordinate - left edge
   10h   WORD    Source Y coordinate - top

function 1Ah HSCOORD(X) - Set Coordinate Types
 Sets the coordinate formats used.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(3)
   02h   BYTE    Absolute coordinate format
                 bit 0-3  Number of fractional bytes. Default = 0
                     4-7  Number of bytes per coordinate. Default = 2
   03h   BYTE    Relative coordinate format
                 bit 0-3  Number of fractional bytes. Default = 0
                     4-7  Number of bytes per coordinate. Default = 1
   04h   BYTE    Number of dimensions: 2, 3 or 4

function 1Bh HQCOORD(X) - Query Coordinate Types
 Informs whether specific coordinate formats are supported
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4)
   02h   BYTE    Absolute coordinate format
                 bit 0-3  Number of fractional bytes. Default = 0
                     4-7  Number of bytes per coordinate. Default = 2
   03h   BYTE    Relative coordinate format
                 bit 0-3  Number of fractional bytes. Default = 0
                     4-7  Number of bytes per coordinate. Default = 1
   04h   BYTE    Number of dimensions. Only 2 supported
   05h   BYTE    Returned test results
                 bit 5  Set if specified dimension not supported
                     6  Set if specified dimension not supported
                     7  Set if specified dimension not supported

function 1Ch HSMODE(X) - Set Mode
 Sets a new mode
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(1, 2 for XGA or ImageAdapter/A)
   02h   BYTE    Adapter mode number
                   0:  1024x 768  with 12x20 char cell
                   1:   640x 480  with  8x14 char cell
                   2:  1024x 768  with  8x14 char cell
                   3:  1024x 768  with  7x15 char cell
                      Remaining in ATI versions only:
                   8:   800x 600  with  8x14 char cell
                  10:  1280x1024  with  7x15 char cell
       Remaining field only present if length = 2:
   03h   BYTE    Clear memory flag. 0: clear all memory, 80h don't clear

function 1Dh HQMODE(X) - Query Current Mode
 Returns the current mode and configuration
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(18, 20 for XGA or ImageAdapter/A)
   02h   BYTE    Mode number.
                  0: 1024x768, 12x20 char cell
                  1:  640x480,  8x14 char cell
                  2: 1024x768,  8x14 char cell
                  3: 1024x768,  7x15 char cell
   03h   WORD    Driver code level
                 Bit 0-4  Release number (starts from 0)
                       5  0: 4plane board, 1: 8plane board
                       6  (8514/A) Minimum CPU level
                            8086 or 80286 ?
                     6-7  (XGA/Image Adapter) Minimum CPU level
                            0: 80286, 1: 8086, 2: 80386
                    8-11  (XGA/Image Adapter) Specification level
                            0: level 1.0, 1: level 1.2, 2: level 2.0
                   12-15  (XGA/Image Adapter) Operation system
                            0: MS/PC-DOS

   05h   BYTE    Adapter Type.
                  3: 8514/A, 4: XGA, 5: Image Adapter/A
   06h   BYTE    Reserved
   07h   BYTE    Text cell width in pixels
   08h   BYTE    Text cell height in pixels
   09h   BYTE    Number of planes
   0Ah   WORD    Screen width in pixels
   0Ch   WORD    Screen height in lines
   0Eh   WORD    Pixels/inch - horizontally
   10h   WORD    Pixels/inch - vertically
                   59  for 640x480 on IBM 8514 monitor
                   79  for 640x480 on IBM 8512 or 8513 monitor
                   92  for 1024x768 on IBM 8514 monitor
   12h   BYTE    00h for monochrome, 0FFh for color display
   13h   BYTE    Intensity levels, I.e the number of bits the DAC can handle
                 for each of the 3 basic colors.
                   0: non-loadable palette
                   6: original 8514/A and XGA
                   8: XGA-NI

      Remaining fields only in XGA and Image Adapter/A version
   14h   BYTE    Software area fill plane required (set to 1)
   15h   BYTE    VGA mode support. 1 if a VGA compatible mode exists, 0 if not

function 1Eh HQMODES(X) - Query Adapter Modes
 Returns a list of the supported modes, considering video memory and monitor
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(33)
   02h   BYTE    Adapter type
   03h 32BYTEs   Mode list. Terminated by 0FFh.

function 1Fh HQDPS(X) - Query Drawing Process State Size
 Returns the size of various structures
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(6, 14 for XGA version)
   02h   WORD    Task buffer size in bytes
   04h   WORD    Stack usage in bytes
   06h   WORD    Palette save buffer in bytes

      Remaining fields only in the XGA version
   08h   DWORD   Amount of VRAM in bytes
   0Ch   DWORD   Amount of VRAM (in bytes) required for area fill plane

function 20h HRECT(X) - Fill Rectangle
 Fills a rectangle with the current area pattern
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(8, 8*Number_of_rects for the
                                         XGA and ImageAdapter/A versions)
   02h   WORD    X-coordinate of top-left corner (top row)
   04h   WORD    Y-coordinate of top-left corner (left edge)
   06h   WORD    Width of the rectangle in pixels
   08h   WORD    Height of the rectangle in lines
Note: For the XGA and ImageAdapter/A versions the rectangle data (byte 2-9) is
      repeated as many times as required by the length field.

function 21h HSBP(X) - Set Bit Plane Controls
 Enables or disables specific planes. Each set bit enables the plane, each
 clear bit disables it. Only the number of loworder bits from each field
 relevant to the current mode are used, I.e 4 in 16color modes and 8 in
 256color modes
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(12, 26 for XGA and ImageAdapter/A)
   02h   DWORD   Plane enable for graphics. Controls all writes to video
                 memory for drawing and regular text operations
   06h   DWORD   Plane enable for alphanumerics. Controls all writes to video
                 memory for alphanumeric operations.
   0Ah   DWORD   Plane enable for display. Controls which planes are displayed
       Remaining fields only available in XGA and ImageAdapter/A versions
   0Eh   BYTE    Flags, must be 0
   0Fh   BYTE    Reserved(0)
   10h   DWORD   Green bits mask
   14h   DWORD   Red bits mask
   18h   DWORD   Blue bits mask

function 22h HCLOSE(X) - Close Adapter
 Closes down the AI and switches to VGA
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(1)
   02h   BYTE    Reserved, must be 0
Note: one source claims the length is 0 rather than 1.

function 23h HESC(X) - Escape, Terminate Processing
 Terminates any current drawing operation
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(0)
Note: this has no effect in the XGA version

function 24h HXLATE(X) - Assign Multi-Plane Text Color Index Table
 Sets the color translation table for multiplane fonts.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(32)
   02h  8 DWORDs Color translation table for multiplane fonts, which can have
                  8 colors which are found by combining 1 bit from of 3 planes

function 25h HSCS(X) - Set Character Set
 Sets the current character set
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4)
   02h   DWORD   Ptr to font definition.
                 This area should not be changed until HSCS is called again

function 26h HCHST(X) - Text Character String at Given Position
 Writes a text string at the given (X,Y) position in the current font.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4 + textlen)
   02h   WORD    X-coordinate to plot text at
   04h   WORD    Y-coordinate to plot text at
   06h   TEXT    The text string. The number of characters is determined by
                 the length in the WORD at 00h (-4).

function 27h HCCHST(X) - Text Character String at Current Position
 Writes a text string at the current position in the current font.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(0 + textlen)
   02h   TEXT    The text string. The number of characters is determined by
                 the length in the WORD at 00h.

function 28h ABLOCKMFI(X) - Write Character Block
 Writes a block of characters to the display
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(9)
   02h   BYTE    Start X position (column)
   03h   BYTE    Start Y position (row)
   04h   BYTE    Width of block in characters
   05h   BYTE    Height of block in characters
   06h   DWORD  Pointer to character block
                 Each character occupies one DWORD:
                 Bit   8-9  Font number
                        12  Background transparent if set, opaque if clear
                        13  Overstrike
                        14  Reverse Video
                        15  Underscore
                     16-19  Foreground color
                     20-23  Background color
                     24-31  Character code
   0Ah   BYTE    Number of characters in block

function 29h ABLOCKCGA(X) - Write Character Block (CGA)
 Writes a block of characters to the display
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(10)
   02h   BYTE    Start X position (column)
   03h   BYTE    Start Y position (row)
   04h   BYTE    Width of block in characters
   05h   BYTE    Height of block in characters
   06h   DWORD   Pointer to character block
                 Each character occupies one WORD:
                 Bit 0-3  Foreground color
                     4-7  Background color
                    8-15  Character code
   0Ah   BYTE    Number of characters in block
   0Bh   BYTE    Attribute of the text
                 Bit 0-1  Font selection
                       4  Set for transparent background, clear for opaque
                          background (use characters background color)
                       5  Overstrike
                       6  Reverse Video
                       7  Underline

function 2Ah AERASE(X) - Erase Rectangle
 Clears a rectangle to the specified background color
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(5)
   02h   BYTE    Starting column
   03h   BYTE    Starting Row
   04h   BYTE    Number of Columns
   05h   BYTE    Number of Rows
   06h   BYTE    Bits 0-3  Reserved, should be 0
                      4-7  Background color

function 2Bh ASCROLL(X) - Scroll Rectangle
 Scrolls a rectangle of character cells
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(6)
   02h   BYTE    Starting character column of source
   03h   BYTE    Starting character row of source
   04h   BYTE    Number of character columns of area
   05h   BYTE    Number of character rows of area
   06h   BYTE    Starting character column of destination
   07h   BYTE    Starting character row of destination
Note: both source and destination must be entirely on screen

function 2Ch ACURSOR(X) - Set Cursor Position
 Moves the text-cursor
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(2)
   02h   BYTE    New X position in character Columns
   03h   BYTE    New Y position in character Rows

function 2Dh ASCUR(X) - Set Cursor Shape
 Sets the shape of the text cursor
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(3)
   02h   BYTE    Cursor start line. 0=top
   03h   BYTE    Cursor stop line
   04h   BYTE    Cursor Attributes
                  00h  Normal cursor
                  01h  Hidden cursor
                  02h  Left arrow cursor
                  03h  Right arrow cursor

function 2Eh ASFONT(X) - Set Character Set
 Defines the character set
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(6)
   02h   BYTE    Font number
   03h   BYTE    Reserved
   04h   DWORD   Address of the character set definition block:
                 Offset: Type:  Description:
                   00h   BYTE   Reserved
                   01h   BYTE   Type of character set
                                 00h  Bitmapped
                                 03h  Short stroke vector
                   02h   BYTE   Reserved
                   03h   DWORD  Reserved
                   07h   BYTE   Cell width in pixels
                   08h   BYTE   Cell height in pixels
                   09h   BYTE   Reserved
                   0Ah   WORD   Cell size (height*width/8 rounded up to
                                nearest number of bytes).
                   0Ch   WORD   Flags
                                Bit 13  Set for proportionally spaced font
                                    14  Set for color bitmapped fonts,
                                        clear for mono bitmapped fonts
                                Other bits must be 0.
                   0Eh   DWORD  Address of index table. One WORD for each
                                character code (see Initial and Final
                                codes in bytes 16h and 17h). Marks the
                                start of each character definition
                                (bitmap/stroked line) relative to the
                                start of the character definition table.
                   12h   DWORD  Address of character width table
                                Two bytes per character code. The first is
                                the indention in pixels from the left, the
                                second the indention in pixels from the
                                right, thus non-zero values makes the
                                character thinner.
                                Only used for proportionally spaced fonts
                   16h   BYTE   Initial code point. First character code
                                in the font tables.
                   17h   BYTE   Final code point. Last character code in the
                                font tables.
                   18h   DWORD  Address of character definition table. For
                                bitmapped fonts each character is defined
                                as a two-dimensional array of bits
                                occupying the minimum number of bytes per
                                character, I.e. an 11x9 font occupies 13
                                bytes. For Short Stroke vector fonts each
                                character is defined by a series of
                                draw/move commands each occupying one
                                byte, terminated by a null (00h) byte.
                                Each command byte is defined as:
                                Bit 0-3  Length in pixels projected onto the
                                         X or Y axis
                                      4  Clear for move, set for draw
                                    5-7  Direction
                                          0:   0 degrees (increasing X)
                                          1:  45 degrees
                                          2:  90 degrees (increasing Y)
                                          3: 135 degrees
                                          4: 180 degrees (decreasing X)
                                          5: 225 degrees
                                          6: 270 degrees (decreasing Y)
                                          7: 315 degrees
                   1Ch   WORD   Reserved
                   1Eh   DWORD  Address of 2nd character table
                                For Color Bitmapped Fonts where the
                                foreground color is NOT FFFFFFFFh this table
                                and the 3rd character table are ORed with the
                                primary character definition table to
                                produce one table. The image is drawn with
                                the current foreground color and mix on the
                                current background color and mix.
                   22h   WORD   Reserved
                   24h   DWORD  Address of 3rd character table. See the
                                description under the 2nd char table.

function 2Fh AXLATE(X) - Assign Alpha Attribute Color Index Table
 Defines character attribute to color translations.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(128)
   02h 16DWORDs  Foreground Character Attribute (bits 4-7) translation
                 table. One DWORD for each of 16 attribute combinations
   42h 16DWORDs  Background Character Attribute (bits 0-3) translation
                 table. One DWORD for each of 16 attribute combinations

function 30h HINIT(X) - Initialize State
 Sets the Task State buffer to the adapter dependent initial state
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(2)
   02h   WORD    Segment address of the Task State buffer, offset is 0.

function 31h HSYNC(X) - Synchronize Adapter
 Sets the adapter state to the state store in the specified task buffer.
 Used to implement task switching in a multi-tasking environment
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(2)
   02h   WORD    Segment of the Task state buffer

function 32h HMRK(X) - Marker at Given Position
 Places a marker symbol at each position given.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4*Number_of_points)
       ...
  4*N+2  WORD    X-coordinate of Nth point
  4*N+4  WORD    Y-coordinate of Nth point

function 33h HCMRK(X) - Marker at Current Position
 Draws a marker (defined by HSMARK) at the current position and each point in
 the data block. The marker is drawn around the point.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4*Number_of_points)
       ...
  4*N+2  WORD    X-coordinate of Nth point
  4*N+4  WORD    Y-coordinate of Nth point

function 34h HSMARK(X) - Set Marker Shape
 Sets the shape of the marker symbol
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(10 or 14)
   02h   BYTE    Mark width in pixels
   03h   BYTE    Mark height in lines
   04h   BYTE    Flags
                 Bit 0-5  Reserved, set to 0
                       6  (XGA and ImageAdapter/A only) For color data:
                             0: 1pixel/byte, 1: packed pixel format
                       7  0: Monochrome: Marker is drawn with current
                             foreground color&mix on the background color&mix,
                          1: Color: Marker is drawn in the color from the
                             color data (Byte 0Ch) on the current background
                             color&mix
   05h   BYTE    Reserved
   06h   WORD    Size of mark definition data
   08h   DWORD   Address of mark definition. A packed monochrome bitmap
       This field only present if length = 14
   0Ch   DWORD   Address of mark color data. Either one pixel/byte or packed
                 pixel data if byte 4 bit 6 set.

function 35h HSLPC(X) - Save Line Pattern Count
 Saves the line pattern count.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(0, 2 for XGA and ImageAdapter/A)
       The following field only present if length=2 (XGA and ImageAdapter/A)
   02h   WORD    Line pattern count stored in this word.

function 36h HRLPC(X) - Restore Line Pattern Count
 Restores a previously saved line pattern count.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(0, 2 for XGA and ImageAdapter/A)
   02h   WORD    Optional line pattern count to use for restore
                 Only present for XGA and ImageAdapter/A versions

function 37h HQCP(X) - Query Current Position
 Returns the current position
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4)
   02h   WORD    Current X coordinate
   04h   WORD    Current Y coordinate

function 38h HQDFPAL(X) - Query Default Palette
 Returns the default palette RGB values
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(64)
   02h  16DWORDs One DWORD for each of the 16 primary color indices with the
                 RGB value currently in use for that index.
                 Primary colors:
                  0: Black    1: Blue          2: Green,      3: Cyan
                  4: Red      5: Magenta       6: Brown       7: White
                  8: Grey     9: Lt Blue      10: Lt Green   11: Lt Cyan
                 12: Lt Red  13: Lt Magenta   14: Yellow     15: Bright White

function 39h HSPAL(X) - Save Palette
 Saves the palette in a format ready for loading with HRPAL
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(get from HQDPS)
   02h   BYTEs   Palette buffer, get size from HQDPS

function 3Ah HRPAL(X) - Restore Palette
 Restores a previously saved palette
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(up to 768)
   02h 768BYTEs  Palette data, up to 256 * 3BYTEs, see HQDPS for exact size

function 3Bh HSAFP(X) -
 Sets the area fill plane for areafill, raster text and marker operation.
 Only needed if the default bitmap has been changed with HSBMAP.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(5)
   02h   DWORD   Address of area fill plane. Linear offset into the video
                 memory, must be a multiple of 4.
   06h   BYTE    Reserved, must be 80h
Note: this function only implemented in the XGA and Image Adapter/A versions

function 3Ch ASCELL(X)
 Resizes the alphanumeric cell size. A new font should be loaded before text
 is output again.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(2)
   02h   BYTE    New cell width
   03h   BYTE    New cell height

function 3Dh ASGO(X)
 Sets the origin for text output.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4)
   02h   WORD    New X-position of grid origin
   04h   WORD    New Y-position of grid origin
Note: this function only implemented in the XGA and Image Adapter/A versions

function 3Eh HDLINE(X) -
 Draws a series of lines, from point 1 to 2, then from point 3 to 4 etc.
 The current position is set to the last point in the list, which may either
 be the endpoint of a line (even number of points) or a separate point.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4*Number_of_points)
       ...
  4*N+2  WORD    X-coordinate of the Nth point
  4*N+4  WORD    Y-coordinate of the Nth point
Note: this function only implemented in the XGA and Image Adapter/A versions

function 40h HPEL(X) -
 Draws horizontal strings of pixels using the current color and mix
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(6*Number_of_strings)
        ...
  6*N+2  WORD    X-coordinate (leftmost) of the Nth string
  6*N+4  WORD    Y-coordinate of the Nth string
  6*N+6  WORD    Number of pixels in the Nth string
Note: this function only implemented in the XGA and Image Adapter/A versions

function 41h HRPEL(X) -
 Reads the requested number of pixels from (X,Y) leftwards and places the
 read pixels in the data buffer in packed format.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(10)
   02h   DWORD   Ptr to pixel buffer
   06h   WORD    X-coordinate
   08h   WORD    Y-coordinate
   0Ah   WORD    Pixel count
Note: this function only implemented in the XGA and Image Adapter/A versions

function 42h HPSTEP(X) -
 Draws  a series of short stroke commands at the given position
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(8 or 12)
   02h   WORD    X-coordinate of start point
   04h   WORD    Y-coordinate of start point
   08h   DWORD   Address of Short Stroke-style data.
                 Each byte is a 8514 style Short-Stroke vector:
                 Bit 0-3  Length of linesegment in pixels
                       4  1 for draw, 0 for move
                     5-7  Direction in degrees counter-clockwise from X-axis
                            0:  0 deg, 1: 45 deg, 2: 90 deg, 3: 135deg
                            4: 180deg, 5: 225deg, 6: 270deg, 7: 315deg
                 A null byte terminates the data block.
   0Ch   DWORD   Address of source pixel buffer (only present if the length
                 field is 12). If present each pixel drawn (or skipped) gets
                 its colorinfo from this buffer, rather than the foreground
                 color & mix.
Note: this function only implemented in the XGA and Image Adapter/A versions

function 43h HCPSTEP(X)
 Draws a series of shortstroke linesegments.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4 or 8)
   02h   DWORD   Address of Short Stroke-style data.
                 Each byte is a 8514 style Short-Stroke vector:
                 Bit 0-3  Length of linesegment in pixels
                       4  1 for draw, 0 for move
                     5-7  Direction in degrees counter-clockwise from X-axis
                            0:  0 deg, 1: 45 deg, 2: 90 deg, 3: 135deg
                            4: 180deg, 5: 225deg, 6: 270deg, 7: 315deg
                 A null byte terminates the data block.
   06h   DWORD   Address of source pixel buffer (only present if the length
                 field is 8). If present each pixel drawn (or skipped) gets
                 its colorinfo from this buffer, rather than the foreground
                 color & mix.
Note: this function only implemented in the XGA and Image Adapter/A versions

function 44h HRSTEP(X) -
 Reads pixel data along a series of short stroke vectors from the given point
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(12)
   02h   WORD    Starting X-coordinate
   04h   WORD    Starting Y-coordinate
   06h   DWORD   Address of Short Stroke-style data.
                 Each byte is a 8514 style Short-Stroke vector:
                 Bit 0-3  Length of linesegment in pixels
                       4  1 for draw, 0 for move
                     5-7  Direction in degrees counter-clockwise from X-axis
                            0:  0 deg, 1: 45 deg, 2: 90 deg, 3: 135deg
                            4: 180deg, 5: 225deg, 6: 270deg, 7: 315deg
                 A null byte terminates the data block.
   0Ah   DWORD   Ptr to buffer where read pixels are placed in packed format
Note: this function only implemented in the XGA and Image Adapter/A versions

function 45h HSBMAP(X) -
 Sets current bitmap and attributes.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(10)
   02h   BYTE    Flags
                 Bit 0-5  Reserved, must be 0
                       6  1 for screen bitmaps, 0 for non-screen bitmaps
                       7  Reserved, must be 1
   03h   BYTE    Bitmap depth: 1, 2, 4 or 8
   04h   DWORD   Address of bitmap, as a linear offset from the start of the
                 display memory of the device. Must be a multiple of 8 bytes
                 for screen bitmaps and of 4 bytes for non-screen bitmaps.
   08h   WORD    Width of bitmap in pixels. Max 2048 pixels
                 Must be a multiple of 8 bytes for screen bitmaps and of 4
                 bytes for non-screen bitmaps.
   0Ah   WORD    Height of bitmap in lines. Max 2048 lines

function 46h HQBMAP(X) -
 Queries current bitmap attributes
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(10 or 18)
   02h   BYTE    Flags
                 Bit 0-5  Reserved, must be 0
                       6  Set for Screen bitmap, clear for non-screen
                       7  Reserved, must be 1
   03h   BYTE    Bitmap depth (1,2,4 or 8)
   04h   DWORD   Address of bitmap as linear offset from the start of the
                 frame buffer.
   08h   WORD    Width of bitmap in pixels
   0Ah   WORD    Height of bitmap in lines

      Remaining fields only present if the length field is 18
   0Ch   WORD    Display window X origin
   0Eh   WORD    Display window Y origin
   10h   WORD    Display window width in pixels
   12h   WORD    Display window height in lines
Note: this function only implemented in the XGA and Image Adapter/A versions

function 47h HBMC(X) -
 Copies bitmap block data, either within a bitmap or between bitmaps
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(48)
   02h   WORD    Flags
                 Bit    9  If set the source bitmap starts (logically) at
                           the bottom-left corner rather than the top-left
                    10-11  Location of pattern bitmap
                             0: pattern not present
                             2: Video RAM
                    12-13  Location of source bitmap
                             0: Source not present (use pattern instead).
                             2: Video RAM
                    14-15  Location of destination bitmap
                             2: Video RAM
   04h   WORD    Width of block in pixels
   06h   WORD    Height of block in lines
   08h   BYTE    Destination bitmap depth
   09h   BYTE    Reserved
   0Ah   DWORD   Address of destination bitmap
   0Eh   WORD    Pitch of destination in pixels
   10h   WORD    Height of destination map in lines
   12h   WORD    Destination X-coordinate
   14h   WORD    Destination Y-coordinate
   16h   BYTE    Source bitmap depth. 1,2 or 8
   17h   BYTE    Reserved
   18h   DWORD   Address of source bitmap
   1Ch   WORD    Pitch of source bitmap
   1Eh   WORD    Height of source bitmap
   20h   WORD    Source X-coordinate
   22h   WORD    Source Y-coordinate
   24h   BYTE    Pattern bitmap depth. 1
   25h   BYTE    Reserved
   26h   DWORD   Address of pattern bitmap
   2Ah   WORD    Pitch of pattern bitmap
   2Ch   WORD    Height of pattern bitmap
   2Eh   WORD    X-position of pattern within pattern bitmap
   30h   WORD    Y-position of pattern within pattern bitmap
Note: this function only implemented in the XGA and Image Adapter/A versions

function 48h HSDW(X) -
 Sets the display window
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(8)
   02h   WORD    New X-origin for display window
   04h   WORD    New Y-origin for display window
   06h   WORD    Window width in pixels
   08h   WORD    Window height in lines
Note: this function only implemented in the XGA and Image Adapter/A versions

function 49h HSPRITE(X) -
 Positions the Hardware Sprite
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(4)
   02h   WORD    New sprite hot-spot X-coordinate
   04h   WORD    New sprite hot-spot Y-coordinate
Note: this function only implemented in the XGA version

function 4Ah HSSPRITE(X)
 Defines and enables/disables the hardware sprite.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(1 or 24)
   02h   BYTE    Flags
                 Bit 0-6  Reserved
                       7  0: Disabled, 1: Enabled and visible
      Remaining fields only present if length=24
   03h   BYTE    Reserved, set to 0
   04h   BYTE    X hot-spot offset
   05h   BYTE    Y hot-spot offset
   06h   DWORD   Ptr to sprite definition data.
                 A 2bits per pixel packed bitmap, where each pixels indicates:
                   0:  Sprite Color 0
                   1:  Sprite Color 1
                   2:  Transparent (Screen data)
                   3:  Inverse screen data (XOR cursor)
   0Ah   WORD    Sprite width in pixels. Must be a multipla of 4. Max 64.
   0Ch   WORD    Sprite height in lines. Max 64.
   0Eh   WORD    Color 0, red component
   10h   WORD    Color 0, green component
   12h   WORD    Color 0, blue component
   14h   WORD    Color 1, red component
   16h   WORD    Color 1, green component
   18h   WORD    Color 1, blue component
Note: this function only implemented in the XGA version

function 4Bh HRWVEC(X) -
 Either draws a polyline from the data in the pixel buffer, or copies the
 pixels under the polyline into the pixel buffer. The polyline starts with the
 coordinates in WORDs 8 and 0Ah and continues to each coordinate set in turn.
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(10+4*Number_of_points)
   02h   BYTE    Flags
                 Bit 0-6  Reserved(0)
                       7  Set to write data, clear to read
   03h   BYTE    Reserved(0)
   04h   DWORD   Address of data buffer. For reads the data under the polyline
                 is stored in this buffer in packed format, for writes each
                 pixel in the buffer decides the mix to use for drawing the
                 corresponding pixel of the polyline. 0 causes the pixel to be
                 drawn with the background, all other values causes the pixel
                 to be drawn with the foreground mix.
                 The buffer is max 4095 bytes
   08h   WORD    Starting X-coordinate
   0Ah   WORD    Starting Y-coordinate

 4*N+8   WORD    X-coordinate of Nth point
 4*N+10  WORD    Y-coordinate of Nth point

Note: this function only implemented in the XGA and Image Adapter/A versions

function 4Eh HSFPAL(X) -
 Saves full palette
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(Get size from HQDPS)
   02h   WORD    Format, always 8
     Palette data follows. Call HQDPS for size of palette data.

function 4Fh HRFPAL(X) -
 Restores full palette. The size of the data area should be taken from HQDPS
 Parameter Block:
 Offset: Type:   Description:
   00h   WORD    Length of data following(size of palette data +1)
   02h   WORD    Format (8)
  04h-   BYTEs   Palette data. See HQDPS for size
Note: this function only implemented in the XGA and Image Adapter/A versions

function 50h HQDEVICE(X)
 Returns device specific information
Note: this function only implemented in the Image Adapter/A version


Check for AI installed:

  if MEML[0:$1FC]<>0 then     {Int Vector 7Fh not NULL}
  begin
    rp.cx:=0;
    rp.dx:=0;
    rp.ax:=$105;
    intr($7F,rp);
    if ((rp.flags and 1)=0)                 {Carry not set}
      and ((rp.cx<>0) or (rp.dx<>0) then    {CX:DX is non-zero}
        We have an AI. CX:DX points to the jump table
  end;

