Interrupt List, part 2 of 8
This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown
----------15---------------------------------
INT 15 - Microsoft TSR Specification
       No additional information available at this time.
----------1500-------------------------------
INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)
       AH = 00h
Return: CF set on error
           AH = 86h no cassette present
       CF clear if successful
SeeAlso: AH=01h"CASSETTE"
----------1500-------------------------------
INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS
       AH = 00h
Return: CX = signed X count
       DX = signed Y count
----------1500-------------------------------
INT 15 - VMiX v2+ - INSTALLATION CHECK???
       AH = 00h
Return: DX = 0798h???
----------1500-------------------------------
INT 15 - MultiDOS Plus - GIVE UP TIME SLICE
       AH = 00h
Note:   if issued by the highest-priority task while MultiDOS is using
         priority-based rather than round-robin scheduling, control will be
         returned to the caller immediately
SeeAlso: AH=03h"MultiDOS",AX=1000h
----------1501-------------------------------
INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
       AH = 01h
Return: CF set on error
           AH = 86h no cassette present
       CF clear if successful
SeeAlso: AH=00h"CASSETTE"
----------1501-------------------------------
INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
       AH = 01h
       AL = NVRAM location (00h to 3Fh)
       BL = NVRAM data value
Return: AH = return code
           00h OK
           01h address bad
           02h write error
SeeAlso: AH=02h"Amstrad"

Format of NVRAM:
Offset  Size    Description
00h    BYTE    time of day: seconds
01h    BYTE    alarm time: seconds
02h    BYTE    time of day: minutes
03h    BYTE    alarm time: minutes
04h    BYTE    time of day: hours
05h    BYTE    alarm time: hours
06h    BYTE    day of week, 1 = Sunday
07h    BYTE    day of month
08h    BYTE    month
09h    BYTE    year mod 100
0Ah    BYTE    RTC status register A
               bit 7: set if date/time being updated
                   6-4: time base speed, default 010 = 32768 Hz
                   3-0: interrupt rate selection, default 0110 = 1024 Hz
0Bh    BYTE    RTC status register B
               bit 7: clear if normal update, set if abort update
                   6: periodic interrupt enable
                   5: alarm interrupt enable
                   4: update end interrupt enable
                   3: square wave enable
                   2: date mode (clear = BCD, set = binary)
                   1: 24-hour format
                   0: daylight saving time enable
0Ch    BYTE    RTC status register C (read-only)
               bit 7: IRQF flag
                   6: PF flag
                   5: AF flag
                   4: UF flag
0Dh    BYTE    RTC status register D
               bit 7: battery good
0Eh  6 BYTEs   time and date machine last used
14h    BYTE    user RAM checksum
15h    WORD    Enter key scancode/ASCII code
17h    WORD    Forward delete key scancode/ASCII code
19h    WORD    Joystick fire button 1 scancode/ASCII code
1Bh    WORD    Joystick fire button 2 scancode/ASCII code
1Dh    WORD    mouse button 1 scancode/ASCII code
1Fh    WORD    mouse button 2 scancode/ASCII code
21h    BYTE    mouse X scaling factor
22h    BYTE    mouse Y scaling factor
23h    BYTE    initial VDU mode and drive count
24h    BYTE    initial VDU character attribute
25h    BYTE    size of RAM disk in 2K blocks
26h    BYTE    initial system UART setup byte
27h    BYTE    initial external UART setup byte
28h 24 BYTEs   available for user application
Note:   bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
         the clock chip
----------1501-------------------------------
INT 15 - VMiX - I/O CHANNEL OBJECT MANAGER
       AH = 01h
       STACK: WORD  object ID of requestor
              DWORD pointer to name of requested method
              WORD  arg1
              WORD  arg2
              WORD  arg3
              WORD  arg4
Return: DX:AX??? -> IRP structure or 0000h:0000h
----------1501-------------------------------
INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE
       AH = 01h
       AL = semaphore number (00h-3Fh)
Return: AH = status
           00h successful
           02h invalid semaphore number
Notes:  if the semaphore is not owned, ownership is assigned to the calling
         task and the call returns immediately
       if the semaphore is already owned by another task, the calling task
         is placed on a queue for the semaphore and suspended until it can
         become owner of the semaphore
       semaphore 0 is used internally by MultiDOS to synchronize DOS access
SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS"
----------1502-------------------------------
INT 15 - CASSETTE - READ DATA
       AH = 02h
       CX = number of bytes to read
       ES:BX -> buffer
Return: CF clear if successful
           DX = number of bytes read
           ES:BX -> byte following last byte read
       CF set on error
       AH = status
           00h successful
           01h CRC error
           02h bad tape signals
           04h no data
           80h invalid command
           86h no cassette present
SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE"
----------1502-------------------------------
INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
       AH = 02h
       AL = NVRAM location (00h to 3Fh)
Return: AH = return code
           00h OK
           01h address bad
           02h checksum error
       AL = NVRAM data value
SeeAlso: AH=01h"Amstrad"
----------1502-------------------------------
INT 15 - VMiX - MEMORY OBJECT MANAGER
       AH = 02h
       STACK:  WORD    object ID of requestor
               DWORD   pointer to name of requested method
               WORD    arg1
               WORD    arg2
               WORD    arg3
               WORD    arg4
               WORD    arg5
Return: DX:AX??? = pointer to memory block
----------1502-------------------------------
INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE
       AH = 02h
       AL = semaphore number (00h-3Fh)
Return: AH = status
           00h successful
           01h not semaphore owner
           02h invalid semaphore number
Notes:  if any tasks are waiting for the semaphore, the first task on the wait
         queue will become the new owner and be reawakened
       do not use within an interrupt handler
SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS"
----------1503-------------------------------
INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
       AH = 03h
       CX = number of bytes to write
       ES:BX -> data buffer
Return: CF clear if successful
           ES:BX -> byte following last byte written
       CF set on error
       AH = status (see AH=02h"CASSETTE")
       CX = 0000h
SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"
----------1503-------------------------------
INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
       AH = 03h
       AL = value (I,R,G,B bits)
SeeAlso: AH=04h"Amstrad"
----------1503-------------------------------
INT 15 - VMiX - PROMPTED CONSOLE INPUT
       AH = 03h
       STACK:  DWORD   pointer to ASCII prompt
               WORD    field outline character
               WORD    length of input field
               DWORD   address of pointer to input buffer
               WORD    number of characters input
Return: AX = length of input (input buffer is padded with blanks)
----------1503-------------------------------
INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL
       AH = 03h
       DX = number of time slices to remain suspended
Return: after specified interval has elapsed
Note:   when priority-based scheduling is in use, high-priority tasks should
         use this function to yield the processor
SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS"
----------1504-------------------------------
INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
       AH = 04h
       ES:DI -> results buffer length 20h for System Parameter Table
       DS = segment containing ABIOS RAM extensions (zero if none)
Return: AH = 00h success: results at ES:DI
       CF set on failure
SeeAlso: AH=05h"ABIOS",C1h

Format of ABIOS System Parameter Table:
Offset  Size    Description
00h    DWORD   FAR address of ABIOS Common Start Routine
04h    DWORD   FAR address of ABIOS Interrupt Routine
08h    DWORD   FAR address of ABIOS Time-out Routine
0Ch    WORD    number of bytes of stack required by this ABIOS implementation
0Eh 16 BYTEs   reserved
1Eh    WORD    number of entries in initialization table
----------1504-------------------------------
INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
       AH = 04h
       AL = value (RDSEL1 and RDSEL0)
SeeAlso: AH=03h"Amstrad",05h"Amstrad"
----------1504-------------------------------
INT 15 - VMiX - VPRINTF
       AH = 04h
       STACK:  DWORD   control string
               DWORD   array of arguments
----------1504-------------------------------
INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK
       AH = 04h
       AL = mailbox number (00h-3Fh)
       CX = message length in bytes
       DS:SI -> message
Return: AH = status
           00h successful
           01h out of message memory
           02h invalid mailbox number
Note:   the message is copied into a system buffer; the caller may immediately
         reuse its buffer
SeeAlso: AH=05h"MultiDOS"
----------1505-------------------------------
INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
       AH = 05h
       ES:DI -> results buffer length (18h * Number_of_Entries)
       DS = segment containing ABIOS RAM extensions (zero if none)
Return: AH = 00h success: results at ES:DI
       CF set on failure
SeeAlso: AH=04h"ABIOS",C1h

Format of one entry of ABIOS Initialization Table:
Offset  Size    Description
00h    WORD    device ID
02h    WORD    number of Logical IDs
04h    WORD    Device Block length (zero for ABIOS patch or extension)
06h    DWORD   -> init routine for Device Block and Function Transfer Table
0Ah    WORD    request block length
0Ch    WORD    Function Transfer Table length (zero for a patch)
0Eh    WORD    Data Pointers length (in Common Data Area)
10h    BYTE    secondary device ID (hardware level this ABIOS ver supports)
11h    BYTE    revision (device driver revision level this ABIOS supports)
12h  6 BYTEs   reserved
----------1505-------------------------------
INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
       AH = 05h
       AL = value (I,R,G,B bits)
SeeAlso: AH=04h"Amstrad"
----------1505-------------------------------
INT 15 - VMiX - GET PROCESS ID OF CURRENT PROCESS
       AH = 05h
Return: AX = process ID
SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX"
----------1505-------------------------------
INT 15 - MultiDOS Plus - CHECK MAILBOX
       AH = 05h
       AL = mailbox number (00h-3Fh)
Return: AH = status
           00h successful
               DX = length of first message in queue, 0000h if no message
           02h invalid mailbox number
SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS"
----------1506-------------------------------
INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
       AH = 06h
Return: BX = version number
----------1506-------------------------------
INT 15 - VMiX - GET POINTER TO PROCESS CONTROL BLOCK
       AH = 06h
       STACK:  WORD    process ID
Return: DX:AX??? -> process control block
SeeAlso: AH=07h"VMiX",AH=08h"VMiX"
----------1506-------------------------------
INT 15 - MultiDOS Plus - READ MAILBOX
       AH = 06h
       AL = mailbox number (00h-3Fh)
       CX = size of buffer in bytes
       ES:DI -> buffer for message
Return: AH = status
           00h successful
               CX = number of bytes copied
               DX = actual length of message
           02h invalid mailbox number
Note:   if the caller's buffer is not large enough, the message is truncated
         and the remainder is lost
SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS"
----------1507-------------------------------
INT 15 - VMiX - GET POINTER TO OBJECT CONTROL BLOCK
       AH = 07h
       STACK:  WORD    object type
Return: DX:AX??? -> object control block
SeeAlso: AH=06h"VMiX",AH=08h"VMiX"
----------1507-------------------------------
INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)
       AH = 07h
       BX:CX = entry point of new task
       DX = stack size in paragraphs
Return: AH = status
           00h successful
           01h no free task control blocks
           02h no free memory for task's stack
Note:   execution returns immediately to calling task
SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS"
----------1508-------------------------------
INT 15 - VMiX - GET CHANNEL CONTROL BLOCK
       AH = 08h
       STACK:  WORD    channel ID
Return: DX:AX??? -> channel control block
SeeAlso: AH=06h"VMiX",AH=07h"VMiX"
----------1508-------------------------------
INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)
       AH = 08h
Return: calling task terminated, so execution never returns to caller
Notes:  an internal task must be terminated with this function rather than a
         DOS termination function
       task's stack space is returned to parent task's memory pool
SeeAlso: AH=07h"MultiDOS"
----------1509-------------------------------
INT 15 - VMiX - GET ID OF QUEUED ELEMENT
       AH = 09h
       STACK:  WORD    queue ID (0 = process queue, 1 = object, 3 = type)
               WORD    subqueue ID
Return: AX = ID
SeeAlso: AH=0Ah"VMiX"
----------1509-------------------------------
INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY
       AH = 09h
       AL = new priority
Note:   the priority has different meanings depending on whether priority-
         based or round-robin scheduling is used
SeeAlso: AH=07h"MultiDOS"
----------150A-------------------------------
INT 15 - VMiX - GET ID OF NEXT QUEUED ELEMENT
       AH = 0Ah
       STACK:  WORD    queue ID (0 = process queue, 1 = object, 3 = type)
               WORD    ID of current element in queue chain
Return: AX = ID of next element
SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX"
----------150A-------------------------------
INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL
       AH = 0Ah
       AL = new interval
           00h = 55.0 ms (default)
           80h = 27.5 ms
           40h = 13.75 ms
           20h = 6.88 ms
           10h = 3.44 ms
           08h = 1.72 ms
SeeAlso: AH=03h"MultiDOS"
----------150B-------------------------------
INT 15 - VMiX - GET TOTAL NUMBER OF ACTIVE PROCESSES
       AH = 0Bh
Return: AX = number of active processes
SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX"
----------150B-------------------------------
INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY
       AH = 0Bh
Notes:  sets calling task's screen pointer to actual screen memory; the pointer
         may be restored with AH=0Ch
       caller's video mode must be same as foreground task's video mode
       any text written while in the background will be saved to the
         foreground task's virtual screen when it switches to the background
       useful if a background task wants to display a message on the
         foreground screen
SeeAlso: AH=0Ch"MultiDOS"
----------150C-------------------------------
INT 15 - VMiX - GET POINTER TO PROCESS TSS STACK
       AH = 0Ch
       STACK:  WORD    process ID
Return: DX:AX??? -> TSS stack store
----------150C-------------------------------
INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY
       AH = 0Ch
Note:   restores task's screen pointer saved by AH=0Bh; must not be called
         unless AH=0Bh has been called first
SeeAlso: AH=0Bh"MultiDOS"
----------150D-------------------------------
INT 15 - VMiX - START A CHILD PROCESS JOB SHELL
       AH = 0Dh
       STACK:  DWORD   ASCIZ string starting with requested I/O channel and
                       followed by standard VMiX shell command string
Return: AX = status
SeeAlso: AH=0Eh"VMIX"
----------150D-------------------------------
INT 15 - MultiDOS Plus - DISABLE MULTITASKING
       AH = 0Dh
Note:   calling task receives all time slices until AH=0Eh is called; this
         allows time-critical events or nonreentrant code to be processed
SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS"
----------150E-------------------------------
INT 15 - VMiX - TERMINATE PROCESS
       AH = 0Eh
       STACK:  WORD    process ID
Return: AX = status
SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX"
----------150E-------------------------------
INT 15 - MultiDOS Plus - ENABLE MULTITASKING
       AH = 0Eh
SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS"
----------150F-------------------------------
INT 15 - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
       AH = 0Fh
       AL = phase code
           00h reserved
           01h surface analysis
           02h formatting
Return: CF clear if formatting should continue, set if it should terminate
Note:   called during ESDI drive formatting after each cylinder is completed
SeeAlso: INT 13/AH=1Ah
----------150F-------------------------------
INT 15 - VMiX - GET KEY FIELD OF QUEUED ELEMENT
       AH = 0Fh
       STACK:  WORD    queue ID (0 = process queue, 1 = object q, 3 = type q)
               WORD    ID of element in queue chain
Return: AX = key
SeeAlso: AH=0Ah"VMiX"
----------150F-------------------------------
INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND
       AH = 0Fh
       DS:BX -> ASCIZ command
Return: after command has been processed
Notes:  specified string is executed as if it had been typed at the MultiDOS
         command prompt
       the task is placed on a queue which MultiDOS examines periodically and
         is suspended until MultiDOS has processed the command
       all lowercase characters up to the first blank are converted to upper
         case within the given buffer
----------1510-------------------------------
INT 15 - VMiX - EXECUTE FUNCTION IN PROTECTED MODE
       AH = 10h
       STACK:  DWORD   pointer to function
             N WORDs   function args
Return: ???
----------1510-------------------------------
INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
       AH = 10h
       AL = semaphore number (00h-3Fh)
Return: AH = status
           00h semaphore not in use
           01h semaphore owned by another task
           02h invalid semaphore number
           03h semaphore owned by caller
SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
----------151000-----------------------------
INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
       AX = 1000h
Return: after other processes run
Note:   under DESQview, if the process issuing this call has hooked INT 08h,
         the current time-slice is set to expire at the next clock tick rather
         than immediately
SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=89h,INT 21/AH=EEh"DoubleDOS"
SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah
SeeAlso: INT 7F/AH=E8h
----------151001-----------------------------
INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
       AX = 1001h
       BX = number of bytes to allocate
Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
Note:   use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
         common memory
SeeAlso: AX=1002h,AX=DE0Ch,AX=DE15h
----------151002-----------------------------
INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
       AX = 1002h
       ES:DI -> previously allocated block
Return: block freed
SeeAlso: AX=1001h,AX=DE0Dh
----------151003-----------------------------
INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
       AX = 1003h
       BH = attribute
       BL = character
       DX = segment of object handle for window
Note:   BX=0 does not display anything, it only positions the hardware cursor
----------1510-------------------------------
INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
       AH = 10h
       AL = 04h thru 12h
Return: pops up "Programming error" window in DV 2.x
----------151013-----------------------------
INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
       AX = 1013h
       ES:DI -> FAR service routine
Return: BX = bit mask indicating which bit was allocated
            0000h if no more bits available
SeeAlso: AX=1014h,AX=1015h
Note:   only a few TopView/DESQview API calls are allowed during a hardware
         interrupt; if other calls need to be made, the interrupt handler
         must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
----------151014-----------------------------
INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
       AX = 1014h
       BX = bit mask from INT 15/AX=1013h
SeeAlso: AX=1013h,AX=1015h
----------151015-----------------------------
INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
       AX = 1015h
       BX = bit mask for interrupts to post
Return: indicated routines will be called: (DV 2.0x) at next task switch
                                          (DV 2.2x) immediately
SeeAlso: AX=1013h,AX=1014h
Notes:  this is one of the few TopView calls which are allowed from a hardware
         interrupt handler
       the handler will be called with ES containing the segment of the handle
         of the next task to be executed; on return, ES must be the segment of
         a task handle
----------151016-----------------------------
INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
       AX = 1016h
       ES:DI = possible object handle
Return: BX = FFFFh if ES:DI is a valid object handle
            0000h if ES:DI is not
Note:   under DESQview versions prior to 2.50, an object handle is always a
         pointer to the object; for versions 2.50 and up, only task handles
         are always pointers (other handles may consist of an object number
         and offset into DESQview's common memory)
SeeAlso: AX=DE14h,AX=DE2Bh

Format of object:
Offset  Size    Description
00h    WORD    offset in common memory of previous object of same type
02h    WORD    offset in common memory of next object of same type
04h    WORD    signature FEDCh (DV 2.42-)
               signature FEDCh or object number (DV 2.50+)
06h    WORD    object type
08h    DWORD   object handle to return to caller
0Ch    DWORD   canonicalized object address (segment = common memory)
       ...     varies by object type and DESQview version
----------151017-----------------------------
INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
       AX = 1017h
Return: pops up "Programming error" window in DV 2.x
----------151018-----------------------------
INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
       AX = 1018h
       BH = column
       BL = row
       ES = segment of object handle for window below which to search
            0000h = start search with topmost window
Return: ES = segment of object handle for window which is visible at the
              indicated position, or covered by indicated window
          = 0000h no window
SeeAlso: AX=1023h,AX=1024h
----------151019-----------------------------
INT 15 - TopView - "SOUND" - MAKE TONE
       AX = 1019h
       BX = frequency in Hertz (0000h = silence)
       CX = duration in clock ticks (18.2 ticks/sec)
Return: immediately, tone continues to completion
Notes:  if another tone is already playing, the new tone does not start until
         completion of the previous one.  Up to 32 tones may be queued before
         the process is blocked until a note completes.
       in DV 2.00, the lowest tone allowed is 20 Hz
       if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
         notes are also cancelled
SeeAlso: INT 16/AH=73h
----------15101A-----------------------------
INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
       AX = 101Ah
Return: stack switched
Notes:  this call may not be nested; a second call must be preceded by a call
         to "USTACK" (AX=1025h)
       while TopView requires many API calls to be executed while on the
         task's internal stack, DESQview allows those calls to be executed
         regardless of the current stack
SeeAlso: AX=1025h
----------15101B-----------------------------
INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
       AX = 101Bh
Return: task-switching temporarily disabled
Notes:  will not task-switch until "ENDC" (AX = 101Ch) called unless task
         voluntarily releases the CPU (upon regaining the CPU, task-switching
         will again be disabled)
       suspends the caller until DOS is free
SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
SeeAlso: INT 60/DI=0602h
----------15101C-----------------------------
INT 15 - TopView - "ENDC" - END CRITICAL REGION
       AX = 101Ch
Return: task-switching enabled
Note:   this API call may be made from within a hardware interrupt handler
SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
----------15101D-----------------------------
INT 15 - TopView - "STOP" - STOP TASK
       AX = 101Dh
       ES = segment of object handle for task to be stopped
            (== handle of main window for that task)
Return: indicated task will not get any CPU time until restarted with AX=101Eh
Note:   once a task has been stopped, additional "STOP"s are ignored
BUG:    in DV 2.00, this function is ignored unless the indicated task is the
         current task
SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX",INT 21/AH=81h
----------15101E-----------------------------
INT 15 - TopView - "START" - START TASK
       AX = 101Eh
       ES = segment of object handle for task to be started
            (== handle of main window for that task)
Return: indicated task is started up again
Note:   once a task has been started, additional "START"s are ignored
SeeAlso: AX=101Dh,AX=102Bh,INT 21/AH=82h
----------15101F-----------------------------
INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
       AX = 101Fh
       BX = bit fields
            bits 0-12: number of characters to display
            bits 13,14: which mouse button may be pressed to remove window
                        00 = either
                        01 = left
                        10 = right
                        11 = either
            bit 15: beep if 1
       ES:DI -> text of message
       CH = width of error window (0 = default)
       CL = height of error window (0 = default)
       DX = segment of object handle
Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
Note:   window remains on-screen until ESC or indicated mouse button is pressed
----------151020-----------------------------
INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
       AX = 1020h
Return: pops up "Programming error" window in DV v2.00+
----------151021-----------------------------
INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
       AX = 1021h
       BX = segment of object handle for task to interrupt (not self)
       DX:CX -> FAR routine to jump to next time task is run
Return: nothing
Notes:  the FAR routine is entered with the current ES, DS, SI, DI, and BP
         values, using the task's internal stack (see AX=101Ah); only SS:SP
         needs to be preserved
       multiple PGMINTs to a single task are processed last-in first-out
       if the other task is in a DOS or DV API call, the interruption will
         occur on return from that call
----------151022BX0000-----------------------
INT 15 - TopView - "GETVER" - GET VERSION
       AX = 1022h
       BX = 0000h
Return: BX nonzero, TopView or compatible loaded
       (BL = major version, BH = minor version)
Notes:  TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
----------151023-----------------------------
INT 15 - TopView - "POSWIN" - POSITION WINDOW
       AX = 1023h
       BX = segment of object handle for parent window within which to
            position the window (0 = full screen)
       ES = segment of object handle for window to be positioned
       DL = bit flags
            bits 0,1: horizontal position
               00 = current
               01 = center
               10 = left
               11 = right
            bits 2,3: vertical position
               00 = current
               01 = center
               10 = top
               11 = bottom
            bit 4: don't redraw screen if set
            bits 5-7 not used
       CH = number of columns to offset from position specified by DL
       CL = number of rows to offset from position specified by DL
Return: nothing
----------151024-----------------------------
INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
       AX = 1024h
       BX = segment of object handle for window
             (0 = use default)
Return: ES:DI -> virtual screen
       CX = size of virtual screen in bytes
       DL = 00h text screen
            01h graphics screen
SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
----------151025-----------------------------
INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
       AX = 1025h
Return: stack switched back
Notes:  call only after having switched to internal stack with AX=101Ah
       while TopView requires many API calls to be executed while on the
         task's private stack, DESQview allows those calls to be executed
         regardless of the current stack
SeeAlso: AX=101Ah
----------1510-------------------------------
INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
       AH = 10h
       AL = 26h thru 2Ah
Return: pops up "Programming error" window in DV 2.x
----------15102B-----------------------------
INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
       AX = 102Bh
       BX = segment of object handle for task
Return: nothing
Note:   forces a task which is waiting on its objectq to continue by placing
         the handle for the task on the objectq
SeeAlso: AX=101Dh,AX=101Eh,INT 21/AH=82h
----------15102C-----------------------------
INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
       AX = 102Ch
       ES:DI -> contents of .PIF/.DVP file (see below)
       BX = size of .PIF/.DVP info
Return: BX = segment of object handle for new task
            0000h on error
SeeAlso: AX=DE24h,INT 21/AH=4Bh

Format of .PIF/.DVP file:
Offset  Size    Description
00h    BYTE    reserved (0)
01h    BYTE    checksum of bytes 02h through 170h
02h 30 BYTEs   blank-padded program title
20h    WORD    maximum memory to allocate to partition in K
22h    WORD    minimum memory required in K
24h 64 BYTEs   ASCIZ program pathname
64h    BYTE    default drive letter ('A',...)
65h 64 BYTEs   ASCIZ default directory name
A5h 64 BYTEs   ASCIZ program parameters
E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
E6h    BYTE    number of text pages used
E7h    BYTE    number of first interrupt to save
E8h    BYTE    number of last interrupt to save
E9h    BYTE    rows in virtual screen buffer
EAh    BYTE    columns in virtual screen buffer
EBh    BYTE    initial window position, row
ECh    BYTE    initial window position, column
EDh    WORD    system memory in K
EFh 64 BYTEs   ASCIZ shared program name
12Fh 64 BYTEs   ASCIZ shared program data file
16Fh    BYTE    flags1
               bit 7: writes text directly to screen
               bit 6: runs in foreground only
               bit 5: uses math coprocessor
               bit 4: accesses system keyboard buffer directly
               bits 3-1: reserved (0)
               bit 0: swappable
170h    BYTE    flags2
               bit 6: uses command-line parameters in field at A5h
               bit 5: swaps interrupt vectors
---information unique to .DVP files---
171h  2 BYTEs   keys to use on open menu
173h    WORD    size of script buffer in bytes
175h    WORD    automatically give up CPU after this many tests for keyboard
               input in one clock tick (default 0 = never)
177h    BYTE    nonzero = "uses own colors"
178h    BYTE    nonzero if application swappable
179h  3 BYTEs   reserved (0) according to Quarterdeck documentation
               in actual .DVP files, frequently 01h
17Ch    BYTE    nonzero to automatically close on exit
17Dh    BYTE    nonzero if copy-protect floppy is required
---information unique to DESQview 2.0+---
17Eh    BYTE    .DVP version number
               00h DESQview v1.2+
               01h DESQview v2.0+
               02h DESQview v2.2+
17Fh    BYTE    reserved (0)
180h    BYTE    initial number of rows in physical window
181h    BYTE    initial number of columns in physical window
182h    WORD    maximum expanded memory to allow, in K
184h    BYTE    flags3
               bit 7: automatically assign window position
               bit 5: maximum memory value has been specified
               bit 4: disallow "Close" command
               bit 3: foreground-only when doing graphics
               bit 2: don't virtualize
               bit 1: ??? set by DV 2.31 when "Runs in Background" = "D"
185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
186h    BYTE    number of graphics pages used
187h    WORD    extra system memory size
189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
---information unique to DESQview 2.2+---
18Ah    BYTE    serial port usage
               FFh uses all serial ports
               00h no serial ports
               01h only COM1
               02h only COM2
18Bh    BYTE    flags4
               bit 7: automatically close application on exit if .COM or .EXE
                       specified
               bit 6: swappable if not using serial ports
               bit 5: start program with window hidden (v2.26+)
               bit 4: start program in background (v2.26+)
               bit 3: virtualize text
               bit 2: virtualize graphics
               bit 1: share CPU when foreground
               bit 0: share EGA when foreground and zoomed
18Ch    BYTE    protection level for 386 machines
18Dh 19 BYTEs   reserved (0) for regular DESQview
---information unique to DESQview/X 1.0---
18Dh    BYTE    X flags
               bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
                      (NEWPROC) inherit DOS client layer usage
               bit 1: don't display DOS window
               bit 2: don't display wait message when opening window
               bits 3-7: unused (0)
18Eh    BYTE    X keyboard behavior (0-3)
18Fh    BYTE    font scaling
               00h fixed fonts
               01h scalable fonts
190h 10 BYTEs   reserved (0)
19Ah    WORD    length of data follownig XDVP signature
19Ch  4 BYTEs   signature "XDVP"
1A0h  N BYTEs   list of variable length records (see below)

Format of variable length record:
Offset  Size    Description
00h    WORD    length of following record, 0000h if end of record list
02h    BYTE    record type
               01h script filename, up to 64 characters
               02h command-line parameters (allows >64 characters on cmdline)
               03h environment inheritance
               04h environment string
               05h starting window position
---types 01h,02h,04h---
03h  N BYTEs   ASCII data
---type 03h---
03h    BYTE    inheritance
               00h do not inherit
               01h inherit environment
---type 05h---
03h  N BYTEs   ASCII copy of fields as typed into DVPMAN, separated by commas:
               starting row, starting column, starting height, starting width
Note:   if there are multiple occurrences of record types 01h, 02h, or 03h,
         only the last instance of each type is used; multiple occurrences of
         type 04h are concatenated
----------15102D-----------------------------
INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
       AX = 102Dh
       BL = subfunction
            00h determine whether using keyboard mouse
               Return: BL = 00h using real mouse
                            01h using keyboard mouse
            01h turn keyboard mouse on
            02h turn keyboard mouse off
----------15102E-----------------------------
INT 15 - DESQview v2.40 - ALLOCATE ??? MEMORY
       AX = 102Eh
       BX = number of bytes
Return: AX = status
           0000h successful
               ES = segment of allocated memory
           0001h failed
----------1511-------------------------------
INT 15 - TopView commands
       AH = 11h
       AL = various (except 17h)
Note:   in DESQview 2.x, these function calls are identical to AH=DEh, so
         see those below
SeeAlso: AH=DEh
----------1511-------------------------------
INT 15 - VMiX - EXECUTE SHELL SYSTEM COMMANDS
       AH = 11h
       STACK:  DWORD   pointer to ASCIZ string containing a VMiX shell
                       request (max len = 127)
Return: AX = status
----------1511-------------------------------
INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
       AH = 11h
Note:   disables the Alt-Z MultiDOS command/program-selection hotkey
SeeAlso: AH=12h"MultiDOS"
----------151117BX0000-----------------------
INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
       AX = 1117h
       BX = 0000h      get current mapping context without setting
            nonzero    set new mapping context
Return: BX = mapping context in effect before call
       interrupts enabled
Notes:  this function differs from AX = DE17h for DESQview v2.20 through 2.25
       mapping contexts determine conventional-memory addressability; setting
         a mapping context ensures that the associated program and data areas
         are in memory for access.  Usable by drivers, TSRs and shared
         programs.
       caller need not be running under DESQview, but must ensure that the
         stack in use will not be mapped out by the call
SeeAlso: AX=DE17h,INT 2F/AX=1685h
----------1511DE-----------------------------
INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
       AX = 11DEh
Return: CF clear if installed
           AX = segment at which QEXT.SYS is located
Note:   a private entry point may be found by searching the beginning of the
         returned segment for the signature string
         "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
         prior to the signature contains the QEXT version number in BCD,
         and the word prior to that contains the offset within the QEXT
         code segment of the private entry point
SeeAlso: INT 67/AH=3Fh

Call private entry point with:
       AH = 00h ???
       AH = nonzero ???
----------1512-------------------------------
INT 15 - VMiX - PUT PROCESS TO SLEEP
       AH = 12h
       STACK:  WORD    process ID
Return: AX = status
SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
----------1512-------------------------------
INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
       AH = 12h
Note:   enables the Alt-Z MultiDOS command/program-selection hotkey
SeeAlso: AH=11h"MultiDOS"
----------1512--BH00-------------------------
INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
       AH = 12h
       BH = 00h
       BL = which handle to return
           00h handle in DWORD on top of stack
           01h current task's window handle
           02h given task's mailbox handle (task's handle on stack)
           03h current task's mailbox handle
           04h given task's keyboard handle (task's handle on stack)
           05h current task's keyboard object handle
           06h given task's OBJECTQ handle (task's handle on stack)
           07h current task's OBJECTQ handle
           08h   \
             thru > return 0000:0000 under DV < 2.26
           10h   /
           0Ch (2.26+) task owning object with handle in DWORD on top of stack
           0Dh (2.26+) task handle of owner (parent) of current task
Return: DWORD on top of stack is object handle
Note:   BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
         mailbox, panel, pointer, and timer objects) or is an orphan (task,
         window)
SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
----------1512--BH01-------------------------
INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
       AH = 12h
       BH = 01h
       BL = object type to create
           00h (DV 2.0x only) handle is DWORD on top of stack
           01h (DV 2.0x only) use task's window handle
           02h (DV 2.0x only) given task's mailbox (task's handle on stack)
           03h (DV 2.0x only) current task's mailbox
           04h (DV 2.0x only) given task's keyboard (task's handle on stack)
           05h (DV 2.0x only) current task's keyboard object
           08h WINDOW class
           09h MAILBOX class
           0Ah KEYBOARD class
           0Bh TIMER object (counts down 32-bit time in 10ms increments)
           0Fh POINTER object
           10h PANEL object
       STACK: (if window object or WINDOW class)
              DWORD address to jump to (no new task if high word == 0)
              DWORD (reserved) 0 = non-task window, FFFFh = task window
              DWORD bytes for task's private stack (FFFFh == default of 0100h)
              DWORD bytes system memory for input buffer for READ/READN
                       (0 == none, -1 == default--same as logical window size)
              DWORD window size, columns
              DWORD window size, rows
              DWORD length of window title
              DWORD address of window title
Return: DWORD on top of stack is new object handle
Notes:  if a new task is created, it is started with
         AX = BX = SI = DI = BP = 0
         DX:CX = handle of parent task
         DS = ES = SS = segment of private stack (and new task's handle)
       new windows are orphans, inherit the colors/hidden status of the
         creating task's window, and are placed in the upper left hand corner
         of the screen but not automatically redrawn
       new keyboards are closed, and have all object bits cleared except for
         the hardware cursor bit
SeeAlso: AH=12h/BH=02h,AH=12h/BH=81h
----------1512--BH02-------------------------
INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
       AH = 12h
       BH = 02h
       BL = object
           00h handle in DWORD on top of stack
               window: close window and free
               timer: free timer
               panel: free panel object
               pointer: free pointer
           01h task's window handle - kills task, never returns
           02h given task's mailbox (task's handle on top of stack)
           03h current task's mailbox
           04h given task's keyboard (task's handle on top of stack)
           05h current task's keyboard object
Notes:  when a window is freed, its keyboard and pointer objects are freed;
         task windows also free any mailbox, objectq, and panel objects held
         by the task and any child tasks
       if the keyboard being freed is the default keyboard for a task, this
         call is equivalent to CLOSE
       panel and pointer objects are automatically closed if open
SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh,AH=12h/BH=82h
----------1512--BH03-------------------------
INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
       AH = 12h
       BH = 03h
       BL = object
           00h mailbox handle in DWORD on top of stack
           02h sender of last msg read from mailbox (task's handle on stack)
           03h sender of last msg read from current task's mailbox
Return: DWORD on stack is task handle of message sender
SeeAlso: AH=12h/BH=00h,AH=12h/BH=83h
----------1512--BH03-------------------------
INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
       AH = 12h
       BH = 03h
       BL = window to be connected
           00h handle of window to be attached in DWORD on top of stack
           01h attach current task's main window
       STACK: DWORD handle of window to attach to or 00000000h to detach
Return: ???
Notes:  when two windows are connected, both will move if the user moves either
       multiple windows may be attached to a single window, but each window
         may only be attached to one window at a time
SeeAlso: AH=12h/BH=83h
----------1512--BX0300-----------------------
INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
       AH = 12h
       BX = 0300h
       STACK: DWORD handle of panel object
Return: STACK: DWORD length of directory (always multiple of 14 bytes)
              DWORD address of directory
Note:   a null string is returned if the object is not open
SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h

Format of panel file:
Offset  Size    Description
00h  2 BYTEs   C0h C3h
02h    BYTE    number of panels in file
03h    for each panel in file:
           8 BYTEs  blank-padded panel name
             DWORD  panel offset in file
             WORD   panel length
       data for panels (each consists of one or more window/query/manager
       streams)
           first byte of each panel must be 1Bh, fifth byte must be E5h
----------1512--BH04-------------------------
INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
       AH = 12h
       BH = 04h
       BL = window to read from
           00h handle is DWORD on top of stack
           01h use calling task's default window
           0Ch (DV 2.26+) default window of task owning handle on top of stack
           0Dh (DV 2.26+) default window of parent task of current task
Return: STACK:  DWORD number of bytes read
               DWORD address of buffer
Notes:  reading starts at the current logical cursor position; the cursor is
         updated to point at the character following the last one read
       any translucent blanks (FFh) which are visible on screen are changed
         to the character which is seen through them
       the string produced by the read is placed in an input buffer which may
         be reused by the next READ or READN of a window
       window stream opcodes D8h and D9h determine whether the read returns
         characters or attributes
SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h,AH=12h/BH=84h
----------1512--BH04-------------------------
INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
       AH = 12h
       BH = 04h
       BL = object
           00h handle is DWORD on top of stack
               mailbox: wait for and get next message
               keyboard: wait for and get pointer to next input buffer
               pointer: wait for and get next message
           02h get next message from mailbox (task's handle on top of stack)
           03h get next message from current task's mailbox
           04h get the next input from keyboard (handle on top of stack)
           05h get the next input from task's default keyboard
           06h wait for input from any object in OBJECTQ (handle on stack)
           07h wait for input from any object in task's default OBJECTQ
Return: STACK: (if objectq) DWORD handle of object with input
              (otherwise)  DWORD number of bytes
                           DWORD address
Notes:  for a keyboard in keystroke mode, the input buffer is a single byte
         containing the character code as returned by the BIOS; the BIOS scan
         code is available via the STATUS call if the character is zero
       for a keyboard in field mode, the input buffer format is determined
         by the field table header for the window the keyboard is attached to
       keyboard input buffers and mailbox message buffers may be invalidated
         by the next READ, ERASE, CLOSE, or FREE message to the same object
SeeAlso: AH=12h/BH=05h"OBJECT",AH=12h/BH=84h

Format of pointer message:
Offset  Size    Description
00h    WORD    row
02h    WORD    column
04h    BYTE    status
               bit 6: set when press/release mode active and button released
               bits 7-2: number of clicks-1 if multiple-click mode active
               bits 1,0: button pressed (00=none,01=button1,10=button2)
05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
----------1512--BX0400-----------------------
INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
       AH = 12h
       BX = 0400h
       STACK: DWORD timer's handle
Return: after timer expires
       STACK: DWORD time in 1/100 sec after midnight when timer expired
SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
----------1512--BX0400-----------------------
INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
       AH = 12h
       BX = 0400h
       STACK: DWORD handle of panel object
              DWORD window's handle (or 0 for current task's window)
              DWORD length of panel name
              DWORD pointer to panel name
Return: STACK: DWORD handle of keyboard or 0
              DWORD handle of window which was used
Notes:  status of APPLY may be checked with STATUS message
       panel MUST have the following format
         first byte must be 1Bh (i.e. must start with a stream)
         first opcode in stream must be E5h
           single byte arg of opcode is interpreted thus:
             bits 7,6  11 means create new window
                       10 means create new field table for existing window
                       01 means use existing window and field table
             bit 5 if set, panel contains a field table
                       (creates a new keyboard and puts it in field mode)
             bit 4 if set, panel contains input fields
             bit 3 if set, panel contains select fields but no input fields
       if the panel contains input or select fields, a keyboard handle is
         returned; either the window's current open keyboard or a
         newly-created keyboard object.  The caller should read that keyboard
         to obtain input from the panel.
SeeAlso: AH=12h/BH=84h
----------1512--BH05------------------------
INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
       AH = 12h
       BH = 05h
       BL = object
           00h handle is DWORD on top of stack
               timer: start timer to end at a specified time
               keyboard: add input buffer to queue
               pointer: move pointer icon to specified position
           02h send message by value/status=0 to mbox (task's handle on stack)
           03h send message by value/status=0 to current task's mailbox
           04h add input buffer to KEYBOARD queue (handle on top of stack)
           05h add input buffer to task's default KEYBOARD queue
           06h add an object to OBJECTQ (handle on top of stack)
           07h add an object to task's default OBJECTQ
       STACK: (if mailbox)  DWORD length
                            DWORD address
              (if keyboard) DWORD status (scan code in keystroke mode)
                            DWORD length (should be 1 in keystroke mode)
                            DWORD address
              (if objectq)  DWORD handle of object to add
              (if timer)    DWORD 1/100ths seconds since midnight (actually
                                  only accurate to 1/18 sec)
              (if pointer)  DWORD column relative to origin of window
                            DWORD row relative to origin of window
Notes:  under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
       the data and status written to a keyboard object must match the format
         returned by the keyboard object in the current mode
       the pointer position is scaled according to the current scaling factors
SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
----------1512--BH05-------------------------
INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
       AH = 12h
       BH = 05h
       BL = window to write to
           00h DWORD on top of stack is window handle
           01h write string to task's default window
           0Ch (DV 2.26+) default window of task owning handle on top of stack
           0Dh (DV 2.26+) default window of parent of current task
       STACK: DWORD object handle if handle passed on stack
              DWORD total length of string (high word == 0)
              DWORD address of string to display
Return: indicated actions performed
       a. non-control characters are displayed (opcodes DEh and DFh control
          whether the attributes are left or changed to the current attrib)
       b. CR/LF/BS/Tab cause the usual cursor movement
       c. ESC starts a data structure with additional commands if following
          byte is less than 20h; otherwise, it is written to the window
       STACK:  DWORD handle of new window if window stream opcode E6h
               else nothing
SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h

Data Structure:
       MAGIC  DB  1Bh
       MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
       LENGTH DW  ?   ; length of remainder in bytes
       var-length fields follow, each an OPCODE followed by
            zero or more args

MODE 00h (set or display values) "WINDOW STREAM"
   Opcodes:args
       00h  display 20h blanks with the default attribute
       01h-1Fh display OPCODE blanks with the default attribute
       20h  display char with default attribute 20h times
            BYTE char to repeat
       21h-3Fh display char with default attribute OPCODE-20h times
            BYTE char to repeat
       40h  display 20h blanks with specified attribute
            BYTE attribute of blanks
       41h-5Fh display OPCODE-40h blanks with specified attribute
            BYTE attribute of blanks
       60h  display next 20h characters
            20h BYTEs characters to display
       61h-7Fh display next OPCODE-60h characters
            N BYTEs characters to display
       80h-87h  display N blanks with default attribute
            BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
                     [000h means 800h]
       88h-8Fh display N copies of the character
            BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
                     [000h means 800h]
            BYTE character to repeat
       90h-97h  display N blanks with specified attribute
            BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
                     [000h means 800h]
            BYTE attribute
       98h-9FH  display string at logical cursor pos
            BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
                     [000h means 800h]
            N BYTEs string to display
       A0h  set logical cursor row
            BYTE row number (0 is top)
       A1h  set logical cursor column
            BYTE column number (0 is leftmost)
       A2h  set top edge of scrolling region
            BYTE row
       A3h  set left edge of scrolling region
            BYTE column
       A4h  set row of physical window position
            BYTE line
       A5h  set column of physical window position
            BYTE column
       A6h  set height of physical window
            BYTE #rows
       A7h  set width of physical window
            BYTE #columns
       A8h  set viewport row
            BYTE row
       A9h  set viewport column
            BYTE column
       AAh  set virtual screen height [contents of window unpredictable after]
            BYTE rows
       ABh  set virtual screen width [contents of window unpredictable after]
            BYTE columns
       ACh-AEh  unused
       AFh  set compatible/preferred video modes
            BYTE compatibility/preference mask
               bit 7   compatible with monochrome
               bit 6   compatible with color text, EGA/VGA graphics
               bit 5   compatible with medium-resolution CGA graphics
               bit 4   compatible with high-resolution CGA graphics
               bit 3   prefer monochrome
               bit 2   prefer color text, EGA/VGA graphics
               bit 1   prefer medium-resolution CGA graphics
               bit 0   prefer high-resolution CGA graphics
       B0h  move logical cursor down
            BYTE #rows (signed, negative values move up)
                       [if #rows=0 and hardware cursor owner, update hw crsr]
       B1h  move logical cursor right
            BYTE #cols (signed, negative values move left)
                       [if #cols=0 and hardware cursor owner, update hw crsr]
       B2h  shift top edge of scrolling region
            BYTE #rows (signed)
       B3h  shift left edge of scrolling region
            BYTE #cols (signed)
       B4h  shift physical window down
            BYTE #lines (signed)
       B5h  shift physical window right
            BYTE #columns (signed)
       B6h  expand physical window vertically
            BYTE #lines (signed)
       B7h  expand physical window horizontally
            BYTE #columns (signed)
       B8h  adjust viewport row
            BYTE #rows (signed)
       B9h  adjust viewport column
            BYTE #columns (signed)
       BAh  adjust virtual screen height [contents of window unpredict after]
            BYTE #rows to increase (signed)
       BBh  adjust virtual screen width [contents of window unpredictbl after]
            BYTE #cols to increase (signed)
       BCh-BFh  reserved (currently unused)
       C0h  set logical cursor position
            BYTE row number (0 is top border)
            BYTE column number (0 is left border)
       C1h  set top left corner of scrolling region
            BYTE row
            BYTE column
       C2h  set physical window pos
            BYTE upper left row (no top border if 0)
            BYTE upper left column (no left border if 0)
       C3h  set current window size
            BYTE #rows
            BYTE #cols
       C4h  set upper left corner of viewport (portion of virtual screen
            displayed in window)
            BYTE row
            BYTE column
       C5h  set size of virtual screen [contents unpredictable afterwards]
            BYTE #rows
            BYTE #cols
       C6h  unused
       C7h  unused
       C8h  set logical cursor relative to current position
            BYTE number of rows to move down (signed)
            BYTE number of columns to move right (signed)
                 [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
       C9h  shift top left corner of scrolling region
            BYTE #rows (signed)
            BYTE #cols (signed)
       CAh  set window pos relative to current position
            BYTE number of rows to shift down (signed)
            BYTE number of columns to shift right (signed)
       CBh  set window size relative to current size
            BYTE number of rows to expand (signed)
            BYTE number of cols to expand (signed)
       CCh  shift viewport relative to current position
            BYTE rows to shift (signed)
            BYTE cols to shift (signed)
       CDh  resize virtual screen
            BYTE #rows to expand (signed)
            BYTE #cols to expand (signed)
       CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
       CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
       D0h  allow window frame to extend beyond screen
       D1h  always display a complete frame, even if window extends beyond
            edge of screen
       D2h  allow DV to change logical colors on video mode switch (default)
       D3h  application changes logical attributes
       D4h  window is visible [must redraw to actually make visible]
       D5h  window is hidden [must redraw to actually remove]
       D6h  window has frame (default)
       D7h  window unframed [must redraw to actually remove frame]
       D8h  READ/READN will read characters from window (default)
       D9h  READ/READN will read attributes from window
       DAh  use logical attributes, which may be remapped
               attributes
                  1 normal text
                  2 highlighted normal text
                  3 help text
                  4 highlighted help text
                  5 error message
                  6 highlighted error message
                  7 emphasized text
                  8 marked text
                  9-16 are reverse video versions of 1-8
       DBh  use physical attributes for characters
       DCh  enable special actions for control characters (default)
       DDh  disable special control char handling, all chars displayable by
            BIOS TTY call
       DEh  write both character and attribute (default)
       DFh  write character only, leave attribute untouched
       E0h  repeat following commands through E1h opcode
            BYTE number of times to repeat (00h means 256 times)
       E1h  end of commands to repeat, start repeating them
       E2h  set current output color
            BYTE color
       E3h  clear virtual screen from scroll origin to end using current color
       E4h  redraw window
       E5h  select menu style
            BYTE style (normally 18h)
               bits 5,4 = 01 use two-letter menu entries for remainder of
                 this stream
       E5h  (panel file only)
            BYTE modifier
               bits 7,6 = 11 panel stream creates new window
                        = 10 panel defines new field table for existing window
                        = 01 panel stream uses existing window & field table
               bit 5 = 1 stream contains a field table (create kyboard object)
               bit 4 = 1 stream defines input fields (create keyboard object)
               bit 3 = 1 stream defines select fields but not input fields
               bit 2 = 1 stream defines exclusive input window (DV 2.2)
               bit 1 reserved
               bit 0 reserved
       E6h  create new window and perform rest of manipulations in new window
            BYTE number of rows
            BYTE number of columns
            Return: DWORD object handle of new window returned on stack at end
       E7h  no operation
       E8h  scroll area up (top left corner defined by opcode C1h)
            BYTE height
            BYTE width
       E9h  scroll area down (top left corner defined by opcode C1h)
            BYTE height
            BYTE width
       EAh  scroll area left (top left corner defined by opcode C1h)
            BYTE height
            BYTE width
       EBh  scroll area right (top left corner defined by opcode C1h)
            BYTE height
            BYTE width
       ECh  set logical attributes for window contents
            BYTE video modes command applies to
               bit 7   monochrome
               bit 6   color text, EGA/VGA graphics
               bit 5   medium-resolution CGA graphics
               bit 4   high-resolution CGA graphics
            BYTE which attributes to set
               bit 7  if set, copy single following byte to indicated attribs
               bits 4-6  # of first attribute to change - 1
               bits 0-3  # of consecutive attributes to change
            N BYTEs new attributes
       EDh  set logical attributes for window frame
            BYTE video modes command applies to (see opcode ECh)
            BYTE which attributes to set
               bit 7  if set, copy single following byte to indicated attrs
               bits 4-6  # of first attribute to change - 1
               bits 0-3  # of consecutive attributes to change
            N BYTEs new attributes
                 attributes
                      1 = top left corner
                      2 = top right corner
                      3 = bottom left corner
                      4 = bottom right corner
                      5 = top edge
                      6 = bottom edge
                      7 = left edge
                      8 = right edge
       EEh  set characters for window frame
            BYTE video modes command applies to (see opcode ECh)
            BYTE which characters to set
               bit 7  if set, copy single following byte to indicated chars
               bits 4-6  # of first char to change - 1
               bits 0-3  # of consecutive chars to change
            N BYTEs new chars (same relative position as attributes above)
       EFh  set window name
            BYTE length of name (should be in range 0 to logical screen width)
            N BYTEs name
       F0h  clear input field to blanks
            BYTE field number
       F1h  fill input field with character
            BYTE field number
            BYTE char
       F2h  set color of input field
            BYTE field number (1-N)
            BYTE attribute
       F3h  set initial contents of input field
            BYTE field number (1-N)
            N BYTEs enough chars to exactly fill field as defined by op FFh
       F4h  position cursor to start of specific input field
            BYTE field number (1-N)
       F5h  change field table entry
            BYTE field number
            7-8 BYTEs field table entry (see opcode FFh below)
       F6h  set field type
            BYTE field number
            BYTE type
                       00h inactive
                       40h output field
                       80h input field
                       C0h deselected field
                       C2h selected field
       F7h  "broadcast write"  write data to fields with program output bit
               set in field table entry, in field number order
            N BYTEs (total length of all program output fields)
       F8h  scroll field up a line
            BYTE field number
       F9h  scroll field down a line
            BYTE field number
       FAh  scroll field left
            BYTE field number
       FBh  scroll field right
            BYTE field number
       FCh  set field table header
            BYTE number of fields (must be <= existing number of fields)
            BYTE screen behavior bits
               bit 7  reserved
               bit 6  set if menu items may be selected via keyboard
               bit 5  set if left mouse button may terminate entry
               bit 4  set if right mouse button may terminate entry
               bit 3  if set, select fields return contents or blanks rather
                       than 'Y' or 'N'
               bit 2  if set, modified bits reset on return to application
               bits 0,1 = 00 no data returned on read of keyboard
                          01 data returned as array of chars containing
                               all fields packed together, with no field
                               numbers
                          10 data returned as numbered variable-length
                               records for all fields
                          11 data returned as numbered variable-length
                               records for the fields which were modified
            BYTE current input field (updated by DESQview)
            BYTE current select field (updated by DESQview)
            BYTE attribute for select fields when they are pointed at
            BYTE attribute for select fields which have been selected
       FDh  reset modified bit for all fields
       FEh  reset selected and modified bits for all fields
       FFh  set up input fields
            6 BYTEs table header (see opcode FCh above)
            the field table entries, one for each field
                BYTE start row    \
                BYTE start column  \ if menu selection and start is to
                BYTE end row       / right or below end, select from kbd only
                BYTE end column   /
                BYTE field type
                   bits 7,6 = 00 inactive (non-entry) field
                              01 echos keystrokes input to make menu selection
                              10 fill-in field
                              11 select field
                   bit 5  field can be filled by broadcast write (F7h opcode)
                   bit 4  reserved
                   bit 3  reserved
                   bit 2  reserved
                   bit 1  set if field selected
                   bit 0  set if field modified
                BYTE modifier
                     if type is fill-in, then bit flags to determine behavior
                         bit 7  if set, automatically enter CR when field full
                         bit 6  move to next field when current field is full
                         bit 5  if set, enter text from right end (for numbers)
                         bit 4  if set, force input to uppercase
                         bit 3  if set, clear old contents on first keystroke
                         bit 2  if set, input returned when cursor moves out
                                of modified field (API level 2.02+)
                         bit 1  reserved
                         bit 0  reserved
                     if select field, first key to press to activate
                         00h if have to point-&-click or is an extended-ASCII
                             keystroke (only if two-key menus enabled)
                BYTE (select field only) normal color of field
                BYTE second key for select field.  This byte is present iff
                     two-letter menu entries selected with opcode E5h, and
                     in that case is present regardless of field type
            Note: DESQview uses and updates the actual copy of the information
              which is contained in the stream.  Thus this info must remain
              intact until after the data entry is complete.

MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
       A0h return logical cursor row in next byte
       A1h return logical cursor column in next byte
       A2h return top row of scrolling region in next byte
       A3h return left column of scrolling region in next byte
       A4h return row of physical window origin in next byte
       A5h return column of physical window origin in next byte
       A6h return height of physcial window in next byte
       A7h return width of physical window in next byte
       A8h return row of viewport origin in next byte
       A9h return column of viewport origin in next byte
       AAh return height of virtual screen in next byte
       ABh return width of virtual screen in next byte
       AFh return current video mode in next byte
       C0h return current logical cursor position in next two bytes
       C1h return top left corner of scrolling region in next two bytes
       C2h return current window position in next two bytes
       C3h return current window size in next two bytes
       C4h return current viewport origin in next two bytes
       C5h return current virtual screen size in next two bytes
       D0h \ overwritten with D0h if frames may fall off screen edge
       D1h /                  D1h if frames always displayed entirely
       D2h \ overwritten with D2h if DESQview controls color palette
       D3h /                  D3h if application changes color palette
       D4h \ overwritten with D4h if window visible
       D5h /                  D5h if window hidden
       D6h \ overwritten with D6h if window has frame
       D7h /                  D7h if window unframed
       D8h \ overwritten with D8h if reading characters from window
       D9h /                  D9h if reading attributes from window
       DAh \ overwritten with DAh if using logical attributes
       DBh /                  DBh if using physical attributes
       DCh \ overwritten with DCh if TTY control char interpretation on
       DDh /                  DDh if TTY control char interpretation off
       DEh \ overwritten with DEh if writing both characters and attributes
       DFh /                  DFh if leaving attributes untouched
       E2h return current color in next byte
       ECh get logical attributes for window contents
           BYTE execute call if currently in specified video mode
               bit 7   monochrome
               bit 6   color text, EGA/VGA graphics
               bit 5   medium-resolution CGA graphics
               bit 4   high-resolution CGA graphics
           BYTE which attributes to get
               bit 7 unused???
               bits 4-6 first attribute to get - 1
               bits 0-3 # consecutive attributes
           N BYTEs buffer to hold attributes
       EDh get logical attributes for window frame
           BYTE execute call if currently in video mode (see opcode ECh)
           BYTE which attributes to get
               bit 7 unused???
               bits 4-6 first attribute to get - 1
               bits 0-3 # consecutive attributes
           N BYTEs buffer to hold attributes
       EEh get characters for window frame
           BYTE execute call if currently in video mode (see opcode ECh)
           BYTE which attributes to get
               bit 7 unused???
               bits 4-6 first char to get - 1
               bits 0-3 # consecutive chars
           N BYTEs buffer to hold chars
       EFh return first N characters of current window name
           BYTE    max length of returned name
           N BYTEs buffer to hold window name
       F3h return contents of specified field
           BYTE field number
           N BYTEs buffer to hold field contents (size exactly equal to field
                   size)
       F5h get field table entry
           BYTE field number
           7-8 BYTEs buffer to hold field table entry
              Notes: DV < 2.26 always returns 7 bytes
                     DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
                       table is using 8-byte entries and eighth byte after
                       F5h is E7h (NOP); otherwise, 7 bytes are returned
                     DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
                       depending on the field table entry size
       F6h get type of a field
           BYTE field number
           BYTE type
       FCh get field table header
           6 BYTEs buffer to store header

MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
       00h allow window to be moved horizontally
       01h allow window to be moved vertically
       02h allow window to change width
       03h allow window to change height
       04h allow window to be scrolled horizontally
       05h allow window to be scrolled vertically
       06h allow "Close Window" menu selection for application
       07h allow "Hide Window" menu selection for application
       08h allow application to be suspended ("Rearrange/Freeze")
       0Eh allow "Scissors" menu
       10h allow DESQview main menu to be popped up
       11h allow "Switch Windows" menu
       12h allow "Open Window" menu
       13h allow "Quit" menu selection
       20h-33h opposite of 00h-13h, disallow specified action
       40h notify if horizontal position of window changes
       41h notify if vertical position of window changes
       42h notify if width of window changes
       43h notify if height of window changes
       44h notify if window scrolled horizontally
       45h notify if window scrolled vertically
       46h notify if window is closed--program has to clean up and exit itself
       47h notify if window is hidden
       48h notify if "?" on main menu selected
       49h notify if pointer message sent to window
       4Ah notify if window is placed in foreground
       4Bh notify if window is placed in background
       4Ch notify if video mode changes
       4Dh notify if "Scissors" menu "Cut" option selected
       4Eh notify if "Scissors" menu "Copy" option selected
       4Fh notify if "Scissors" menu "Paste" option selected
       50h notify if DESQview main menu about to pop up
       51h notify if DESQview main menu popped down
       60h-71h  opposite of 40h-51h: don't notify on specified event
       84h attach window to parent task's window (both move together)
       85h detach window from parent task's window (may move independently)
       86h disable background operation for application
       87h enable running in background
       88h set minimum size of physical window
           BYTE rows
           BYTE columns
       89h set maximum size of physical window
           BYTE rows
           BYTE cols
       8Ah set primary asynchronous notification routine
           DWORD address of routine, 0000h:0000h means none (see also below)
       8Bh set async notification parameter
           DWORD 32-bit value passed to 8Ah async routine in DS:SI
       ACh (DV2.2+) perform regular select field attribute processing
       ADh (DV2.2+) protect attributes in selected field from being lost
       AEh make window default notify window for owning app (API level 2.00+)
       AFh set selected field marker character
           BYTE character to display at left edge of selected fields
       BCh set standard field processing mode
       BDh set alternate field processing mode (enables cursor pad for menus)
       BEh disables changing reverse logical attributes with ECh opcode
       BFh enables changing reverse logical attributes with ECh opcode
       C0h make current window topmost in system
       C1h force current process into foreground
       C2h make current window topmost in process
       C3h position mouse pointer relative to origin of current field
           BYTE rows below upper left corner of field
           BYTE columns to right of upper left corner of field
       C4h position mouse pointer relative to origin of given field
           BYTE field number
           BYTE rows below upper left corner of field
           BYTE columns to right of upper left corner of field
       C5h orphan current window (also hides it)
               Note: must be last in stream; all subsequent commands ignored
       C6h show all windows for this process
       C7h hide all windows for this process
       C8h suspend process and hide all its windows
       C9h force current process into background
       CAh make current window bottom-most in process
       CBh cancel current window manager operation, remove DV menu, give
           control to topmost application
       CCh orphan window and give it to the system for use as paste data
       CEh reorder windows
           DWORD pointer to null-terminated list of words
                 each word is segment of object handle for a window
       FFh no operation

MODES 14h to 1Fh "USER STREAMS"
       normally NOPs, but may be defined by SETESC message to invoke FAR
       routines, one for each mode number
         on entry to handler,
               DS:SI -> first byte of actual stream (not header)
               CX = #bytes in stream
               ES:DI = window's handle

Asynchronous notification routine defined by manager stream 8Ah called with:
       ES:DI = handle of window
       DS:SI is 32-bit value set by 8Bh manager stream opcode
          mailbox contains message indicating event
             Opcode
              40h  horizontal movement
                  DWORD object handle of window
                  BYTE  new row
                  BYTE  new col
              41h  vertical movement
                  DWORD object handle of window
                  BYTE  new row
                  BYTE  new col
              42h  horizontal size change
                  DWORD object handle of window
                  BYTE  new rows
                  BYTE  new cols
              43h  vertical size change
                  DWORD object handle of window
                  BYTE  new rows
                  BYTE  new cols
              44h  scrolled horizontally
                  DWORD object handle of window
                  BYTE  mouse row within window
                  BYTE  mouse column within window
                  BYTE  field mouse is on, 0 if none
                  BYTE  amount moved: >0 right, <0 left, 0 done
              45h  scrolled vertically
                  DWORD object hande of window
                  BYTE  mouse row within window
                  BYTE  mouse column within window
                  BYTE  field mouse is on, 0 if none
                  BYTE  amount moved: >0 down, <0 up, 0 done
              46h  window close request
                  DWORD object handle of window
                  BYTE  mouse pointer row
                  BYTE  mouse pointer column
                  BYTE  field mouse is on, 0 if none
              47h  application's windows hidden
              48h  Help for Program selected
                  DWORD object handle of window
                  BYTE  mouse pointer row
                  BYTE  mouse pointer column
                  BYTE  field mouse is on, 0 if none
              49h  pointer message sent to window
                  DWORD pointer handle which received message
              4Ah  switched to window from another ("raise")
              4Bh  switched away from the window ("lower")
              4Ch  video mode changed
                  BYTE new BIOS video mode
              4Dh  Scissors/cUt selected
                  DWORD object handle of window
                  BYTE  row of upper left corner
                  BYTE  column of upper left corner
                  BYTE  field number ul corner is in, 0=none
                  DWORD handle of orphaned window created with
                        copy of data from specified region
                  BYTE  height of region
                  BYTE  width of region
              4Eh  Scissors/Copy selected
                  DWORD object handle of window
                  BYTE  row of upper left corner
                  BYTE  column of upper left corner
                  BYTE  field number ul corner is in, 0=none
                  DWORD handle of orphaned window created with
                        copy of data from specified region
                  BYTE  height of region
                  BYTE  width of region
              4Fh  Scissors/Paste selected
                  DWORD object handle of window
                  BYTE  row of upper left corner
                  BYTE  column of upper left corner
                  BYTE  field number ul corner is in, 0=none
                  DWORD handle of orphaned window with data
                  BYTE  height of region
                  BYTE  width of region
                       Note: orphaned data window should be adopted or freed
                               when done
              50h  main menu about to pop up
              51h  main menu popped down
Return: all registers unchanged
----------1512--BH06-------------------------
INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
       AH = 12h
       BH = 06h
       BL = object
           00h object handle in DWORD on top of stack
               mailbox, keyboard, pointer, or timer
               (DV 2.50+) window
           01h (DV 2.50+) current task's window
           04h given task's keyboard (task's handle on top of stack)
           05h current task's default keyboard
       STACK: DWORD new priority of object in task's OBJECTQ
                       (new priority of task if window handle)
Notes:  initially all objects have the same default value.  Should only make
         relative adjustments to this default value.
       when changing priorities, all objects already on the objectq are
         reordered
       for window handles, only the non-blocked task(s) with the highest
         priority receive CPU time under DESQview 2.50-2.52; the default
         priority is 0Ah
SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
----------1512--BH07-------------------------
INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
       AH = 12h
       BH = 07h
       BL = object
           00h object handle in DWORD on top of stack
               mailbox, keyboard, pointer, or timer
               (DV 2.50+) window
           01h (DV 2.50+) current task's window
           04h given task's keyboard (task's handle on top of stack)
           05h current task's default keyboard
Return: STACK: DWORD object priority
Note:   initially all objects have the same default value.  Should only make
         relative adjustments to this default value.
SeeAlso: AH=12h/BH=06h
----------1512--BH08-------------------------
INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
       AH = 12h
       BH = 08h
       BL = object
           00h handle in DWORD on top of stack
               window: total character positions in window
               timer: elapsed time since timer started
               pointer: number of messages queued to pointer object
               panel: number of panels in panel file
               keyboard: number of input buffers queued
           01h total chars in current task's default window
           02h number of messages in task's mailbox (task's handle on stack)
           03h number of messages in current task's mailbox
           04h number of input buffers queued in task's kbd (handle on stack)
           05h number of input buffers queued for current task's default kbd
           06h number of objects queued in OBJECTQ (task's handle on stack)
           07h number of objects queued in current task's OBJECTQ
           0Ch (DV 2.26+) total chars in window owning handle on top of stack
           0Dh (DV 2.26+) total chars in parent task's window
Return: DWORD on top of stack is result
Note:   for panel objects, a count of zero is returned if no panel file is open
         for the object
SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
----------1512--BH09-------------------------
INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
       AH = 12h
       BH = 09h
       BL = object
           00h handle in DWORD on top of stack
               window: get chars/line
               timer: get 1/100 seconds remaining before timer expires
               mailbox: (DV/X) get number of bytes queued to mailbox
           01h get number of chars/line in current task's default window
           0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
           0Dh (DV 2.26+) get chars/line in parent task's window
Return: DWORD on top of stack is length
SeeAlso: AH=12h/BH=08h
----------1512--BH0A-------------------------
INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
       AH = 12h
       BH = 0Ah
       BL = window to write to
           00h window handle is DWORD on top of stack
           01h current task's default window
           0Ch (DV 2.26+) default window of task owning handle on top of stack
           0Dh (DV 2.26+) default window of parent of current task
       STACK:  DWORD count of attributes
               DWORD address of attribute string
               DWORD count of characters
               DWORD address of character string
Notes:  if one string is longer than the other, the shorter one will be reused
         until the longer one is exhausted
       the cursor is left just after the last character written
SeeAlso: AH=12h/BH=0Bh"WINDOW"
----------1512--BH0A-------------------------
INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
       AH = 12h
       BH = 0Ah
       BL = mailbox to write to
           00h handle is DWORD on top of stack
           02h default mailbox of task whose handle is on top of stack
           03h current task's default mailbox
       STACK:  DWORD   status (low byte)
               DWORD   length of message
               DWORD   address of message
Notes:  the message is copied into either system or common memory
       insufficient memory normally causes the process to be aborted; under
         DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
SeeAlso: AH=12h/BH=0Bh"MAILBOX"
----------1512--BH0A-------------------------
INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
       AH = 12h
       BH = 0Ah
       BL = object
           00h handle is DWORD on top of stack
               timer: start timer for specified interval
               pointer: set control flags
               keyboard: set control flags
           04h set control flags on KEYBOARD object (handle on top of stack)
           05h set control flags on task's default KEYBOARD object
       STACK: (if timer)   DWORD duration in 1/100 seconds
              (otherwise)  DWORD bits to set
SeeAlso: AH=12h/BH=0Bh"OBJECT"

For keyboard objects, the bits have the following significance:
       bit 15 reserved, can't be set
       bit 14 unused
       bit 13 reserved, can't be set
       bit 12-6 unused
       bit 5  (DV 2.2+) exclusive input
       bit 4  filter all keys (used with handler established by SETESC)
               if 0, only keys that would normally be displayed are filtered
       bit 3  program continues executing while input in progress
       bit 2  insert mode active for field mode
       bit 1  hardware cursor displayed when task is hardware cursor owner
               must be set if keyboard in field mode and field table includes
               input fields
       bit 0  keyboard is in field mode rather than keystroke mode

For pointer objects, the bits have the following significance:
       bit 15 reserved, can't be set
       bit 14-8 unused
       bit 7  mouse pointer is hidden while in window
       bit 6  get messages even if window not topmost
       bit 5  get messages even if window not foreground
       bit 4  multiple clicks separated by less than 1/3 second are counted
               and returned in a single message
       bit 3  pointer position is relative to screen origin, not window origin
       bit 2  send message on button release as well as button press
       bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
               pointer leaves the window
       bit 0  send message only on button activity, not movement
              DV-specific, and INT 15/AX=DE0Fh must have been called first
----------1512--BH0B-------------------------
INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
       AH = 12h
       BH = 0Bh
       BL = window to write attributes to
           00h handle is DWORD on top of stack
           01h current task's default window
           0Ch (DV 2.26+) default window of task owning handle on top of stack
           0Dh (DV 2.26+) default window of parent of current task
       STACK:  DWORD number of attributes to write
               DWORD address of attributes
Note:   the attributes are written starting at the current cursor position; the
         cursor is left just after the last position written
SeeAlso: AH=12h/BH=0Ah"WINDOW"
----------1512--BH0B-------------------------
INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
       AH = 12h
       BH = 0Bh
       BL = mailbox to write to
           00h handle is DWORD on top of stack
           02h default mailbox of task whose handle is on top of stack
           03h current task's default mailbox
       STACK:  DWORD   status (low byte)
               DWORD   length of message
               DWORD   address of message
Notes:  only a pointer to the message is stored, but the write may still fail
         due to insufficient memory
       under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
SeeAlso: AH=12h/BH=0Ah"MAILBOX"
----------1512--BH0B-------------------------
INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
       AH = 12h
       BH = 0Bh
       BL = OBJECTQ from which to remove all copies of a particular object
           06h OBJECTQ of task whose handle is on top of stack
           07h task's default OBJECTQ
       STACK:  DWORD   handle of object to remove
Note:   should be sent whenever an object is erased or closed
----------1512--BH0B-------------------------
INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
       AH = 12h
       BH = 0Bh
       BL = object
           00h handle is DWORD on top of stack
               pointer: reset control flags
               keyboard: reset control flags
           04h clear control flags on KEYBOARD object (handle on top of stack)
           05h clear control flags on task's default KEYBOARD object
       STACK:  DWORD   which bits to clear (see AH=12h/BH=0Ah"OBJECT")
SeeAlso: AH=12h/BH=0Ah"OBJECT"
----------1512--BH0C-------------------------
INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
       AH = 12h
       BH = 0Ch
       BL = object
           00h handle is DWORD on top of stack
               window:   fill with given character from scroll origin to end
               keyboard: attach to a window
               timer:    open
               pointer:  start taking input for window
               panel:    associate with a panel file
           01h fill task's default window with given char from scrl org to end
           02h open given task's mailbox for input (task's handle on stack)
           03h open current task's mailbox
           04h attach a KEYBOARD to a window (handle on top of stack)
           05h attach task's default KEYBOARD to a window
           06h open a task's OBJECTQ (task's handle on top of stack)
           07h open current task's OBJECTQ
           0Ch (DV 2.26+) fill def window of task owning handle on top of stck
           0Dh (DV 2.26+) fill default window of parent of current task
        STACK: (if window)   DWORD character to fill with
               (if keyboard) DWORD handle of window to attach to
               (if pointer)  DWORD handle of window to attach to
               (if panel)    DWORD length of filename or resident panel
                             DWORD address of filename or resident panel
               (otherwise)   nothing
Notes:  if first byte of panel file name is 1Bh, then the "name" IS a panel
       if first two bytes of panel file "name" are C0hC3h, then the "name" IS
         the panel file
       result code of open may be retrieved with STATUS message
       logical cursor is left at scroll origin after filling window
       the task opening a mailbox becomes its owner, and the only task allowed
         to read the mailbox
       messages are only sent to a pointer object when the mouse is positioned
         in the window to which the pointer has been attached
       there is no need to explicitly open a timer object, as ADDTO and WRITE
         messages automatically open the timer
SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
----------1512--BH0D-------------------------
INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
       AH = 12h
       BH = 0Dh
       BL = object
           00h handle is DWORD on top of stack
               timer:    close
               keyboard: detach from window and discard queued input
               pointer:  stop taking input
               panel:    close
               mailbox:  close, unlock, and discard any pending messages
           02h close given task's mailbox (task's handle on top of stack)
           03h close task's default mailbox
           04h close KEYBOARD object (handle on top of stack)
           05h close task's default KEYBOARD
           06h close givent task's OBJECTQ (task's handle on top of stack)
           07h close current task's OBJECTQ
Notes:  when an OBJECTQ is closed, each object in the OBJECTQ is sent an
         ERASE message (AH=12h/BH=0Eh)
       when a panel object is closed, the panel file and any panels currently
         in use are freed; window and keyboard objects created by APPLY are
         not affected, but field mode input ceases
       open but idle timer objects consume a small amount of CPU time
SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
----------1512--BH0E-------------------------
INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
       AH = 12h
       BH = 0Eh
       BL = object
           00h handle is DWORD on top of stack
               window:   clear from scroll origin to end of window
               keyboard: discard input
               timer:    cancel current interval
               pointer:  discard all pending messages
               mailbox:  discard all pending messages
           01h clear task's default window from scroll origin to end
           02h discard all queued messages in mailbox (handle on top of stack)
           03h discard all queued messages in current task's default mailbox
           04h discard all input queued to KEYBOARD (handle on top of stack)
           05h discard all input queued to task's default KEYBOARD
           06h remove all objects from OBJECTQ (task's handle on top of stack)
           07h remove all objects from current task's OBJECTQ
           0Ch (DV 2.26+) clear window of task owning handle on top of stack
           0Dh (DV 2.26+) clear default window of parent of current task
Note:   when an OBJECTQ is erased, each object in the OBJECTQ is also erased
SeeAlso: AH=12h/BH=02h
----------1512--BH0F-------------------------
INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
       AH = 12h
       BH = 0Fh
       BL = object
           00h handle is DWORD on top of stack
               timer:   is it running?
               pointer: return status of last message
               panel:   verify success of last OPEN or APPLY
           02h return status of last msg READ from mailbox (handle on stack)
           03h return status of last msg READ from task's default mailbox
           04h get status of last msg from task's KEYBOARD (task handle on stk)
           05h get status of last msg from task's default KEYBOARD
           06h return whether OBJECTQ is open or not (handle on top of stack)
           07h return whether task's default OBJECTQ is open or not
Return: DWORD on top of stack is status
Notes:  if object is a panel object, the status indicates the error code:
         00h successful
         14h panel name not in panel directory
         15h not enough memory to apply panel
         16h invalid panel format
         17h panel file already open
         81h-92h  DOS error codes+80h                  \  codes > 80h indicate
         95h not enough memory to open panel file       > that the panel was
         98h null panel file name                      /  not opened
       if object is a timer, the status is:
         00000000h open but not running
         40000000h open and running
         80000000h closed
       if object is an OBJECTQ, the status is:
         00000000h open
         80000000h closed
       if object is a keyboard in keystroke mode, the status is the extended
         character code (scan code) of teh last keystroke
       if object is a keyboard in field mode, the status indicates the reason
         for the last return from the field manager
         00h Enter key pressed
         01h Button 1 or keystroke selection
         02h Button 2
         03h validation
         04h auto Enter on field
         1Bh Escape pressed
         46h ^Break pressed
         other: extended code for key terminating input
       the status of mailbox messages sent by the window manager is always 80h
       the status of a pointer message is the same as the status field in the
         message
SeeAlso: AH=12h/BH=04h"READ"
----------1512--BH10-------------------------
INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
       AH = 12h
       BH = 10h
       BL = object
           00h handle is DWORD on top of stack
               window: return TRUE if logical cursor past end of window
               mailbox: ???
           01h returns TRUE if logical cursor past end of task's def window
           02h return ??? for task's mailbox (task's handle on top of stack)
           03h return ??? for current task's mailbox
           0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
           0Dh (DV 2.26+) check log cursor of window of parent task
Return: DWORD on top of stack is status
----------1512--BH11-------------------------
INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
       AH = 12h
       BH = 11h
       BL = window for which to move cursor
           00h window's handle is DWORD on top of stack
           01h task's default window
           0Ch (DV 2.26+) default window of task owning handle on top of stack
           0Dh (DV 2.26+) default window of parent of current task
       STACK: DWORD column
              DWORD row
----------1512--BH11-------------------------
INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
       AH = 12h
       BH = 11h
       BL = mailbox to name
           00h DWORD on top of stack is mailbox handle
           02h use given task's mailbox (task's handle on top of stack)
           03h use current task's default mailbox
       STACK: DWORD length of name
              DWORD address of name
SeeAlso: AH=12h/BH=12h"GETNAME",AX=DE0Eh
----------1512--BX1100-----------------------
INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
       AH = 12h
       BX = 1100h
       STACK: DWORD object handle for pointer object
              DWORD number of colums to scale pointer position to
              DWORD number of rows to scale pointer position to
SeeAlso: AH=12h/BX=1200h
----------1512--BH12-------------------------
INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
       AH = 12h
       BH = 12h
       BL = window to read from
           00h handle is DWORD on top of stack
           01h read next N chars or attributes on task's default window
           0Ch (DV 2.26+) read window of task owning handle on top of stack
           0Dh (DV 2.26+) read default window of parent of current task
       STACK: DWORD count
Return: STACK: DWORD width of screen line
              DWORD address
              DWORD count actually read
Notes:  reading starts at the current logical cursor position; the cursor is
         updated to point at the character following the last one read
       any translucent blanks (FFh) which are visible on screen are changed
         to the character which is seen through them
       the string produced by the read is placed in an input buffer which may
         be reused by the next READ or READN of a window
       window stream opcodes D8h and D9h determine whether the read returns
         characters or attributes
SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
----------1512--BH12-------------------------
INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
       AH = 12h
       BH = 12h
       BL = mailbox for which to retrieve name
           00h DWORD on top of stack is mailbox handle
           02h use given task's mailbox (task's handle on top of stack)
           03h use current task's default mailbox
       STACK: DWORD length of buffer for name
              DWORD pointer to buffer
Return: STACK: DWORD length of returned name (or size of buffer, if less)
Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
Note:   the returned name is not NUL-terminated
SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
----------1512--BX1200-----------------------
INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
       AH = 12h
       BX = 1200h
       STACK: DWORD object handle for pointer
Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
              DWORD pointer pos scaled as if window were this many rows high
SeeAlso: AH=12h/BX=1100h
----------1512--BH13-------------------------
INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
       AH = 12h
       BH = 13h
       BL = window object
           00h DWORD on top of stack is handle for window to redraw
           01h redraw task's default window
           0Ch (DV 2.26+) redraw window of task owning handle on top of stack
           0Dh (DV 2.26+) redraw default window of parent of current task
SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
----------1512--BH13-------------------------
INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
       AH = 12h
       BH = 13h
       BL = mailbox from which to read
           00h DWORD on top of stack is mailbox handle
           02h use given task's mailbox (task's handle on top of stack)
           03h use current task's default mailbox
       STACK: DWORD size of buffer in bytes
              DWORD pointer to buffer
Return: STACK: DWORD number of bytes read
Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
Notes:  this call blocks if no input is available, but will return less than
         the requested number of bytes if some (but insufficient) data is
         available
       use this call instead of AH=12h/BH=04h if the mailbox has flag bits
         4 or 5 set, as common memory may be exhausted by that call when
         attempting to read the next message
SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
----------1512--BX1300-----------------------
INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
       AH = 12h
       BX = 1300h
       STACK: DWORD object handle for pointer
              DWORD character to use for pointer
----------1512--BH14-------------------------
INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
       AH = 12h
       BH = 14h
       BL = message modifier
           00h handle is DWORD on top of stack
           01h define user stream
           04h intercept keystrokes from KEYBOARD to a window (handle on stack)
           05h intercept keystrokes from task's default KEYBOARD to a window
       STACK: (if window)   DWORD user stream number (14h-1Fh)
                            DWORD address of FAR user stream handler
              (if keyboard) DWORD address of FAR filter function

The keyboard filter function is called when the keyboard is in field mode.  On
entry,
       AL = character
       AH = 00h or extended ASCII code if AL = 00h
       BL = field number
       CH = cursor column
       CL = cursor row
       DL = field type modifier (sixth item in field table entry)
       DH = seventh item in field table entry
       ES:SI = window's handle
       DS:DI -> field table entry for field containing the cursor
The filter function should return
       AH = 00h use keystroke
            01h ignore keystroke
            FFh beep and ignore keystroke
Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
----------1512--BH14-------------------------
INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
       AH = 12h
       BH = 14h
       BL = object
           00h mailbox handle is DWORD on top of stack
           02h use given task's mailbox (task's handle on top of stack)
           03h use current task's default mailbox
Note:   release exclusive access by sending CLOSE message to mailbox
       access may be requested multiple times, and requires multiple CLOSEs
SeeAlso: AH=12h/BH=0Dh
----------1512--BH15-------------------------
INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
       AH = 12h
       BH = 15h
       BL = object
           00h DWORD on top of stack
               mailbox, keyboard, or pointer only
           02h mailbox for task whose handle is on top of stack
           03h mailbox for current task
           04h keyboard for task whose handle is on top of stack
           05h keyboard for current task
       STACK: DWORD flags
               if mailbox:
                       bit 0: all mail messages in common memory
                       bit 1: allow write even if closed
                       bit 2: don't erase messages when mailbox closed
                       bit 4: (DV/X) append messages with like status and
                               sender (stream-oriented mail)
                       bit 5: (DV/X) store mail in expanded memory (pool
                               grows as needed)
                       bit 6: (DV/X) make mailbox into non-owned mailbox
               if keyboard:
                       bit 5: exclusive input when keyboard in use for input
Return: nothing
Notes:  only available if the API level has been set to at least 2.20
       equivalent to performing SUBFROM and ADDTO calls on the object
       if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
         "READ" (see AH=12h/BX=1300h"READINTO") to retrieve messages
SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
----------1512--BH16-------------------------
INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
       AH = 12h
       BH = 16h
       BL = object
           00h DWORD on top of stack
               mailbox, keyboard, or pointer only
           02h mailbox for task whose handle is on top of stack
           03h mailbox for current task
           04h keyboard for task whose handle is on top of stack
           05h keyboard for current task
Return: STACK: DWORD current control flags (see AH=12h/BH=15h)
Notes:  only available if the API level has been set to at least 2.20
       if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
         "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",AH=12h/BH=15h
----------1512--BH17-------------------------
INT 15 - DESQview v2.42-2.52 - BUG
       AH = 12h
       BH = 17h
       BL = object
           00h DWORD on top of stack
               mailbox, keyboard, or pointer only
           02h mailbox for task whose handle is on top of stack
           03h mailbox for current task
           04h keyboard for task whose handle is on top of stack
           05h keyboard for current task
Notes:  due to a fencepost error, message 17h is accepted for mailboxes,
         keyboards, and pointers, but causes a random branch
       DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02
----------1512--BH80-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 80h
Note:   this function is identical to AH=12h/BH=00h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL:
               00h no error
               01h invalid values
               02h alias invalid
               03h handle valid but wrong type
               04h invalid handle
SeeAlso: AH=12h/BH=00h
----------1512--BH81-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 81h
Note:   this function is identical to AH=12h/BH=01h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=01h
----------1512--BH82-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 82h
Note:   this function is identical to AH=12h/BH=02h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=02h
----------1512--BH83-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 83h
Note:   this function is identical to AH=12h/BH=03h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
----------1512--BH84-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 84h
Note:   this function is identical to AH=12h/BH=04h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
----------1512--BH85-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 85h
Note:   this function is identical to AH=12h/BH=05h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=05h
----------1512--BH86-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 86h
Note:   this function is identical to AH=12h/BH=06h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=06h
----------1512--BH87-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 87h
Note:   this function is identical to AH=12h/BH=07h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=07h
----------1512--BH88-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 88h
Note:   this function is identical to AH=12h/BH=08h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=08h
----------1512--BH89-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 89h
Note:   this function is identical to AH=12h/BH=09h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=09h
----------1512--BH8A-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 8Ah
Note:   this function is identical to AH=12h/BH=0Ah, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=0Ah
----------1512--BH8B-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 8Bh
Note:   this function is identical to AH=12h/BH=0Bh, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=0Bh
----------1512--BH8C-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 8Ch
Note:   this function is identical to AH=12h/BH=0Ch, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=0Ch
----------1512--BH8D-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 8Dh
Note:   this function is identical to AH=12h/BH=0Dh, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=0Dh
----------1512--BH8E-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 8Eh
Note:   this function is identical to AH=12h/BH=0Eh, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=0Eh
----------1512--BH8F-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 8Fh
Note:   this function is identical to AH=12h/BH=0Fh, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=0Fh
----------1512--BH90-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 90h
Note:   this function is identical to AH=12h/BH=10h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=10h
----------1512--BH91-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 91h
Note:   this function is identical to AH=12h/BH=11h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
----------1512--BH92-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 92h
Note:   this function is identical to AH=12h/BH=12h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
----------1512--BH93-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 93h
Note:   this function is identical to AH=12h/BH=13h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=13h
----------1512--BH94-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 94h
Note:   this function is identical to AH=12h/BH=14h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=14h
----------1512--BH95-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 95h
Note:   this function is identical to AH=12h/BH=15h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=15h
----------1512--BH96-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
       AH = 12h
       BH = 96h
Note:   this function is identical to AH=12h/BH=16h, except that DESQview will
         not pop up a "Programming Error" window, instead returning an error
         code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=16h
----------1513-------------------------------
INT 15 - VMiX - WAKE PROCESS
       AH = 13h
       STACK:  WORD    process ID
Return: AX = status
SeeAlso: AH=12h"VMiX"
----------1513-------------------------------
INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
       AH = 13h
Return: BX:AX -> task control block (see below)
SeeAlso: AH=15h"MultiDOS"

Format of MultiDOS Plus v4.0 task control block:
Offset  Size    Description
00h    DWORD   pointer to next TCB
04h  8 BYTEs   ASCIZ task name
0Ch  2 BYTEs   ???
0Eh    WORD    task PSP segment
10h    WORD    abort/suspend flags
12h    WORD    current screen segment (see AH=0Bh,AH=0Ch)
14h    WORD    priority level (0000h-FFFEh)
16h    WORD    time slice counter
18h  2 BYTEs   ???
1Ah    WORD    suspend timer value
1Ch    WORD    stack segment
1Eh    WORD    stack pointer
20h    WORD    display type
22h    WORD    display memory
24h  2 BYTEs   ???
26h    WORD    termination count
28h    WORD    equipment flag for BIO10 driver
2Ah    BYTE    background CRT mode
2Bh    WORD    screen width in columns
2Dh    WORD    screen size in bytes
2Fh    WORD    segment of physical screen memory
31h 16 BYTEs   eight cursor positions
41h    WORD    current cursor shape
43h    BYTE    active display page
44h    WORD    CRT controller I/O port base
46h  2 BYTEs   ???
48h    WORD    foreground task flag
4Ah  6 BYTEs   ???
50h    WORD    saved video segment (see AH=0Bh,AH=0Ch)
52h    DWORD   old INT 22
56h    DWORD   old INT 23
5Ah    DWORD   old INT 24
5Eh    WORD    top of memory for task
60h  4 BYTEs   ???
64h    WORD    DTA segment (see INT 21/AH=1Ah)
66h    WORD    DTA offset
68h  4 BYTEs   ???
6Ch    BYTE    current ANSI.SYS attribute
6Dh    BYTE    current ANSI.SYS column
6Eh    BYTE    current ANSI.SYS row
6Fh    BYTE    current ANSI.SYS display state
70h    BYTE    maximum ANSI.SYS columns
71h    BYTE    current ANSI.SYS page
72h    WORD    saved ANSI.SYS cursor position
74h    BYTE    ANSI.SYS parameter buffer index
75h    BYTE    current ANSI.SYS screen mode
76h    BYTE    ANSI.SYS wrap flag
77h  6 BYTEs   ANSI.SYS parameter buffer
7Dh    BYTE    ANSI.SYS keyboard DSR state
7Eh  7 BYTEs   ANSI.SYS keyboard DSR buffer
85h  3 BYTEs   ???
88h 16 BYTEs   request header for DOS driver calls
98h 14 BYTEs   ???
A6h    WORD    segment of EMS map if EMS task
A8h    WORD    flag: task makes EMS calls
AAh    WORD    EMS handle for task
ACh    WORD    keyboard shift state
AEh 12 BYTEs   ???
BAh    WORD    TCB of parent if child task
BCh    WORD    termination code
BEh    WORD    COM port number
C0h  4 BYTEs   ???
C4h    WORD    current IRQ number
C6h  2 BYTEs   ???
C8h    WORD    miscellaneous flag word
CAh  2 BYTEs   ???
CCh    DWORD   old INT 10
D0h    WORD    EMS alternate map set number
D2h 414 BYTEs  DOS current disk and directory context (optional)
----------1514-------------------------------
INT 15 - VMiX - CLEAR WINDOW
       AH = 14h
       STACK:  WORD    top left corner of window
               WORD    bottom right corner of window
Return: AX = status
SeeAlso: AH=15h"VMiX"
----------1514-------------------------------
INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
       AH = 14h
Return: AX = current state
           0000h MultiDOS Plus command prompt is background task
           0001h command prompt is foreground task
SeeAlso: AH=0Bh"MultiDOS"
----------1515-------------------------------
INT 15 - VMiX - SET BANNER WINDOW MESSAGE
       AH = 15h
       STACK:  DWORD   pointer to ASCIZ banner message
Return: AX = status
SeeAlso: AH=14h"VMiX"
----------1515-------------------------------
INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
       AH = 15h
Return: BX:AX -> system block (see below)
SeeAlso: AH=13h"MultiDOS"

Format of MultiDOS Plus 4.0 system block:
Offset  Size    Description
00h    WORD    segment of system control block
02h    WORD    redirection flag set by /NOREDIRECT
04h    WORD    no-INT 10 flag set by /NO10
06h    DWORD   old INT 10
0Ah    DWORD   new INT 10
0Eh    DWORD   pointer to WORD with current TCB offset (see AH=13h)
12h    DWORD   pointer to WORD with idle task TCB offset
16h    DWORD   pointer to WORD with foreground TCB offset
1Ah    DWORD   pointer to WORD with MultiDOS TCB offset
1Eh    WORD    Task Control Block size
20h    WORD    number of TCBs
22h    WORD    flag: EMS present
24h    WORD    EMS page frame base segment
26h    WORD    16K pages in EMS page frame
28h    WORD    base segment for conventional memory tasks
2Ah    WORD    conventional memory size in paragraphs
2Ch    DWORD   pointer to list of queue pointers
----------1516-------------------------------
INT 15 - VMiX - SET ROOT WINDOW SIZE AND HOME CURSOR
       AH = 16h
       STACK:  DWORD   pointer to I/O Request Packet
               WORD    top left corner of window
               WORD    bottom right corner of window
Return: AX = status
SeeAlso: AH=17h"VMiX"
----------1516-------------------------------
INT 15 - MultiDOS Plus - INITIALIZATION
       AH = 16h
Note:   used internally during initialization; any other calls will cause
         unpredicatable results
----------1517-------------------------------
INT 15 - VMiX - GET CONSOLE WINDOW COLORS
       AH = 17h
Return: AH = foreground color
       AL = background color
SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
----------1517-------------------------------
INT 15 - MultiDOS Plus - MAP IRQ
       AH = 17h
       AL = IRQ to map (01h-0Fh)
       BX = offset of task control block (see AH=13h) to associate with IRQ
Return: AX = status
           0000h successful
           other invalid IRQ
Note:   the EMS map of the specified TCB is associated with the given interrupt
SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
----------1518-------------------------------
INT 15 - VMiX - SET CONSOLE COLORS
       AH = 18h
       STACK:  WORD    new background/foreground colors
Return: AX = color
SeeAlso: AH=17h"VMiX"
----------1518-------------------------------
INT 15 - MultiDOS Plus - UNMAP IRQ
       AH = 18h
       AL = IRQ to unmap (01h-0Fh)
Return: AX = status
           0000h successful
           0001h invalid IRQ
Note:   results are unpredictable if the IRQ has not been mapped
SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
----------1519-------------------------------
INT 15 - VMiX v2+ - ???
       AH = 19h
       STACK: WORD ???
Return: ???
----------1519-------------------------------
INT 15 - MultiDOS Plus - UNMAP ALL IRQs
       AH = 19h
Return: AX destroyed
Note:   for MultiDOS internal use only
SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
----------151A-------------------------------
INT 15 - VMiX v2+ - ???
       AH = 1Ah
       STACK: 3 WORDs ???
Return: ???
----------151A-------------------------------
INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
       AH = 1Ah
       DS:SI -> 8-byte name
Return: AL = status
           00h successful
               AH = semaphore number (20h-3Fh)
           04h out of string space
Notes:  all eight bytes of the name are significant
       if the name does not already exist, it is added to the name table and
         associated with a free semaphore number
       names cannot be destroyed
SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
----------151B-------------------------------
INT 15 - VMiX v2+ - ???
       AH = 1Bh
       STACK: 5 WORDs ???
Return: ???
----------151B-------------------------------
INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
       AH = 1Bh
       DS:SI -> 8-byte name
Return: AH = status
           00h successful
           02h invalid semaphore number
           03h caller already owns semaphore
           04h out of string space
Notes:  (see AH=01h"MultiDOS")
       equivalent to AH=1Ah followed by AH=01h
SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
----------151C-------------------------------
INT 15 - VMiX v2+ - ???
       AH = 1Ch
       STACK: 5 WORDs ???
Return: ???
----------151C-------------------------------
INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
       AH = 1Ch
       DS:SI -> 8-byte name
Return: AH = status
           00h successful
           01h not semaphore owner
           02h invalid semaphore number
           04h out of string space
Notes:  (see AH=02h"MultiDOS")
       equivalent to AH=1Ah followed by AH=02h
SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
----------151D-------------------------------
INT 15 - VMiX v2+ - ???
       AH = 1Dh
       ???
Return: ???
----------151D-------------------------------
INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
       AH = 1Dh
       DS:SI -> 8-byte name
Return; AH = status
           00h semaphore not in use
           01h semaphore owned by another task
           02h invalid semaphore number
           03h caller owns semaphore
           04h out of string space
Notes:  (see AH=10h"MultiDOS")
       equivalent to AH=1Ah followed by AH=10h
SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
----------151E-------------------------------
INT 15 - VMiX v2+ - ???
       AH = 1Eh
       STACK: WORD ???
Return: ???
----------151E00-----------------------------
INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
       AX = 1E00h
       DX = event/trigger number (00h-3Fh)
Return: AH = status
           00h successful
SeeAlso: AX=1E01h,AX=1E02h
----------151E01-----------------------------
INT 15 - MultiDOS Plus - TRIGGER EVENT
       AX = 1E01h
       DX = event/trigger number (00h-3Fh)
Return: AH = status
           00h successful
           01h invalid event/trigger number
Notes:  schedules any task waiting for event; if no task is waiting, the event
         counter is incremented (and will roll over if it was 65535)
       may be invoked by interrupt handler
SeeAlso: AX=1E00h,AX=1E02h
----------151E02-----------------------------
INT 15 - MultiDOS Plus - WAIT FOR EVENT
       AX = 1E02h
       DX = event/trigger number (00h-3Fh)
Return: AH = status
           00h successful
           01h invalid event/trigger number
Note:   if the event counter is zero, the task is suspended until the event is
         triggered with AX=1E01h; else, the counter is decremented and the
         call returns immediately
SeeAlso: AX=1E00h,AX=1E01h
----------151F-------------------------------
INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS
       AH = 1Fh
Return: BX = first segment of conventional memory
       DX = first segment of EMS swap frame into which MultiDOS will load
               programs
----------1520-------------------------------
INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED
       AH = 20h
Return: AX = current state
           0000h multitasking enabled
           other TCB of task that disabled multitasking
SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
----------152000-----------------------------
INT 15 - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG
       AX = 2000h
SeeAlso: AX=2001h
----------152001-----------------------------
INT 15 - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG
       AX = 2001h
       ES:BX -> byte which is to be incremented while in a DOS call
SeeAlso: AX=2000h
----------152010-----------------------------
INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
       AX = 2010h
       ???
Return: ???
SeeAlso: AX=2011h
----------152011-----------------------------
INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
       AX = 2011h
       ???
Return: ???
SeeAlso: AX=2010h
----------1521-------------------------------
INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
       AH = 21h
       AL = subfunction
           00h read POST log
           01h write POST log
               BH = device ID
               BL = error code
Return: CF set on error
       AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
       if function 00h:
          BX = number of error codes stored
          ES:DI -> error log
Note:   the log is a series of words, the first byte of which identifies the
         error code and the second the device.
----------1522-------------------------------
INT 15 U - SYSTEM - LOCATE ROM BASIC (later PS/2's only)
       AH = 22h
Return: CF set on error
           AH = status
       CF clear on success:
           ES -> segment of ROM BASIC
----------152400-----------------------------
INT 15 - Qualitas 386MAX v6.01 - TURN ON ???
       AX = 2400h
Return: CF clear
       AH = 00h
SeeAlso: AX=2401h,AX=2402h
----------152401-----------------------------
INT 15 - Qualitas 386MAX v6.01 - TURN OFF ???
       AX = 2401h
Return: CF clear
       AH = 00h
SeeAlso: AX=2400h,AX=2402h
----------152402-----------------------------
INT 15 - Qualitas 386MAX v6.01 - GET STATE OF ???
       AX = 2402h
Return: CF clear
       AH = 00h
       AL = current state (00h off, 01h on)
SeeAlso: AX=2400h,AX=2401h
----------152403-----------------------------
INT 15 - Qualitas 386MAX v6.01 - GET ???
       AX = 2403h
       ???
Return: CF clear
       AH = 00h
       BX = bit flags???
           bit 0: ???
           bit 1: ???
Note:   reportedly also used by some PS/2 models
----------1540-------------------------------
INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
       AH = 40h
       AL = subfunction
           00h get system profile in CX and BX
           01h set system profile from CX and BX
           02h get internal modem profile in BX
           03h set internal modem profile from BX
----------154000-----------------------------
INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
       AX = 4000h
Return: AX = 4000h
       CL = 00h timeout disabled
          else timeout in minutes
SeeAlso: AX=4001h,AX=4600h
----------154001CL00-------------------------
INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
       AX = 4001h
       CL = 00h timeout disabled
          else  timeout in minutes
Return: AL = 00h timeout modified
            01h timeout cannot be modified
            40h timeout cannot be modified
       CL = 00h timeout disabled
          else timeout in minutes
SeeAlso: AX=4000h,AX=4601h
----------1541-------------------------------
INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE)
       AH = 41h
       AL = condition type
           bits 0-2: condition to wait for
                    0 any external event
                    1 compare and return if equal
                    2 compare and return if not equal
                    3 test and return if not zero
                    4 test and return if zero
           bit 3:    reserved
           bit 4:    1=port address, 0=user byte
           bits 5-7: reserved
       BH = condition compare or mask value
       BL = timeout value times 55 milliseconds
           00h means no timeout
       DX = I/O port address if AL bit 4 set
       ES:DI -> user byte if AL bit 4 clear
----------1542-------------------------------
INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX)
       AH = 42h
       AL = 00h to use system profile
            01h to force suspend regardless of system profile
Note:   the HP 95LX apparently suspends regardless of the value in AL; on
         power-up, execution will resume following the instruction calling
         this function
SeeAlso: AH=44h
----------154280-----------------------------
INT 15 - Compaq SLT/286 - ENTER STANDBY
       AX = 4280h
Return: AH = 42h
       CF clear if successful
       CF set if unable to enter standby
SeeAlso: AX=4600h,AX=5307h/BX=0001h/CX=0001h
----------1543-------------------------------
INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
       AH = 43h
Return: AL = status bits
           bit 0: LCD detached
           bit 1: reserved
           bit 2: RS232/parallel adapter powered on
           bit 3: internal modem powered on
           bit 4: power activated by alarm
           bit 5: standby power lost
           bit 6: external power in use
           bit 7: power low
----------1544-------------------------------
INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
       AH = 44h
       AL = 00h to power off
            01h to power on
SeeAlso: AH=42h
----------154600-----------------------------
INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
       AX = 4600h
Return: AH = modem configuration information
           bit 0 powerup state
                   0 off
                   1 on
               1 modem installed
               2 IRQ line assignment
                   0 IRQ 4
                   1 IRQ 3
               3 COM port assignment
                   0 = COM 2
                   1 = COM 1
               4 modem state
                   0 not assigned
                   1 assigned
               5 modem is on
       AL = power conservation status information
           bit 0  power source (0 internal, 1 external)
              1-2 low battery state
                   00 no low battery condition
                   01 low battery 1
                   10 reserved
                   11 low battery 2
              3-4 power conservation mode
                   00 automatic
                   01 on
                   10 off
                   11 reserved
       BH = default system inactivity timeout (1-21 minutes)
       BL = current system inactivity timeout (1-21 minutes)
       CH = default video display inactivity timeout (1-63 minutes)
       CL = current video display inactivity timeout (1-63 minutes)
       DH = default fixed disk drive inactivity timeout (1-21 minutes)
       DL = current fixed disk drive inactivity timeout (1-21 minutes)
SeeAlso: AX=4280h,AX=4601h,INT 77
----------154601-----------------------------
INT 15 - Compaq SLT/286 - Modify Power Conservation/Modem Configuration
       AX = 4601h
       BL = system inactivity timeout (1-21 minutes)
          = FFh do not change
       CL = video display inactivity timeout (1-63 minutes)
          = FFh do not change
       DL = current fixed disk drive inactivity timeout (1-21 minutes)
          = FFh do not change
       DH = 00h turn modem OFF
          = 01h turn modem ON
          = FFh do not change modem state
Return: CF clear if successful
           AH = 00h
           BL = current system inactivity timeout (1-21 minutes)
           CL = current video display inactivity timeout (1-63 minutes)
           DL = current fixed disk drive inactivity timeout (1-21 minutes)
           DH = FFh modem state unchanged
              = 00h modem turned OFF
              = 01h modem turned ON
       CF set on error
           AH = 01h input is out of range
              = 02h - No modem present
SeeAlso: AX=4600h,INT 77
----------154900-----------------------------
INT 15 - Far East MSDOS - GET DOS TYPE
       AX = 4900h
Return: CF clear if successful
           AH = 00h
           BL = type of DOS running
               00h DOS/V
               01h DOS/J or DOS/K (early IBM Japan versions of MSDOS)
       CF set on error
           AH = 86h (function not supported)
Note:   in practice, DOS/J returns AH=86h; AX DOS does not support this call
SeeAlso: INT 21/AH=30h
----------154DD4-----------------------------
INT 15 - HP 95LX - INSTALLATION CHECK
       AX = 4DD4h
Return: BX = 4850h ("HP") if HP 95LX
           CX = ??? (0101h)
           DL = ??? (00h)
SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h
SeeAlso: INT 61"HP 95LX"
----------154E-------------------------------
INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP
       AH = 4Eh
       AL = light sleep
           00h disabled
           01h enabled
Note:   when light sleep is disabled, the system will continue running at full
         speed; when enabled, it may automatically slow to conserve batteries
SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h
----------154F-------------------------------
INT 15 - OS HOOK - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
       AH = 4Fh
       AL = hardware scan code
       CF set
Return: CF set
          AL = hardware scan code
       CF clear
          scan code should be ignored
Note:   called by INT 9 handler to translate scan codes; the INT 09 code does
         not examine the scan code it reads from the keyboard until after
         this function returns.  This permits software to rearrange the
         keyboard; for example, swapping the CapsLock and Control keys, or
         turning the right Shift key into Enter.
SeeAlso: INT 09,INT 15/AH=C0h
----------155300BX0000-----------------------
INT 15 - Advanced Power Management Specification - INSTALLATION CHECK
       AX = 5300h
       BX = 0000h (device ID of system BIOS)
Return: CF clear if successful
           AH = major version (BCD)
           AL = minor version (BCD)
           BX = 504Dh ("PM")
           CX = flags
               bit 0: 16-bit protected mode interface supported
               bit 1: 32-bit protected mode interface supported
               bit 2: CPU idle call reduces processor speed
               bit 3: BIOS power management disabled
               bits 4-7 reserved
       CF set on error
           AH = error code (86h) (see below)

Values for error code:
01h    power management functionality disabled
02h    interface connection already in effect
03h    interface not connected
04h    real-mode interface not connected
05h    16-bit protected-mode interface already connected
06h    16-bit protected-mode interface not supported
07h    32-bit protected-mode interface already connected
08h    32-bit protected-mode interface not supported
09h    unrecognized device ID
0Ah    invalid parameter value in CX
0Bh-1Fh reserved for other interface and general errors
20h-3Fh reserved for CPU errors
40h-5Fh reserved for device errors
60h    can't enter requested state
61h-7Fh reserved for other system errors
80h    no power management events pending
81h-85h reserved for other power management event errors
86h    APM not present
87h-9Fh reserved for other power management event errors
----------155301BX0000-----------------------
INT 15 - Advanced Power Management Specification - CONNECT REAL-MODE INTERFACE
       AX = 5301h
       BX = 0000h (device ID of system BIOS)
Return: CF clear if successful
       CF set on error
           AH = error code (02h,09h) (see AX=5300h)
SeeAlso: AX=5302h,AX=5303h,AX=5304h
----------155302BX0000-----------------------
INT 15 R - Advanced Power Management Spec - CONNECT 16-BIT PROTMODE INTERFACE
       AX = 5302h
       BX = 0000h (device ID of system BIOS)
Return: CF clear if successful
           AX = real-mode segment base address of protected-mode 16-bit code
               segment
           BX = offset of entry point
           CX = real-mode segment base address of protected-mode 16-bit data
               segment
       CF set on error
           AH = error code (05h,06h,09h) (see AX=5300h)
Notes:  the caller must initialize two consecutive descriptors with the
         returned segment base addresses; these descriptors must be valid
         whenever the protected-mode interface is called, and will have
         their limits arbitrarily set to 64K.
       the protected mode interface is invoked by making a far call with the
         same register values as for INT 15; it must be invoked while CPL=0,
         the code segment descriptor must have a DPL of 0, the stack must be
         in a 16-bit segment and have enough room for BIOS use and possible
         interrupts, and the current I/O permission bit map must allow access
         to the I/O ports used for power management.
       functions 00h-03h are not available from protected mode
SeeAlso: AX=5301h,AX=5303h,AX=5304h
----------155303BX0000-----------------------
INT 15 - Advanced Power Management Spec - CONNECT 32-BIT PROTMODE INTERFACE
       AX = 5303h
       BX = 0000h (device ID of system BIOS)
Return: CF clear if successful
           AX = real-mode segment base address of protected-mode 32-bit code
               segment
           EBX = offset of entry point
           CX = real-mode segment base address of protected-mode 16-bit code
               segment
           DX = real-mode segment base address of protected-mode 16-bit data
               segment
       CF set on error
           AH = error code (07h,08h,09h) (see AX=5300h)
Notes:  the caller must initialize three consecutive descriptors with the
         returned segment base addresses for 32-bit code, 16-bit code, and
         16-bit data, respectively; these descriptors must be valid whenever
         the protected-mode interface is called, and will have their limits
         arbitrarily set to 64K.
       the protected mode interface is invoked by making a far call to the
         32-bit code segment with the same register values as for INT 15; it
         must be invoked while CPL=0, the code segment descriptor must have a
         DPL of 0, the stack must be in a 32-bit segment and have enough room
         for BIOS use and possible interrupts, and the current I/O permission
         bit map must allow access to the I/O ports used for power management.
       functions 00h-03h are not available from protected mode
SeeAlso: AX=5301h,AX=5302h,AX=5304h
----------155304BX0000-----------------------
INT 15 - Advanced Power Management Specification - DISCONNECT INTERFACE
       AX = 5304h
       BX = 0000h (device ID of system BIOS)
Return: CF clear if successful
       CF set on error
           AH = error code (03h,09h) (see AX=5300h)
SeeAlso: AX=5301h,AX=5302h,AX=5303h
----------155305-----------------------------
INT 15 - Advanced Power Management Specification - CPU IDLE
       AX = 5305h
Return: after system leaves idle state
       CF clear
Notes:  call when the system is idle and should be suspended until the next
         system event or interrupt
       should not be called from within a hardware interrupt handler to avoid
         reentrance problems
       if an interrupt causes the system to resume normal processing, the
         interrupt may or may not have been handled when the BIOS returns
         from this call; thus, the caller should allow interrupts on return
       interrupt handlers may not retain control if the BIOS allows
         interrupts while in idle mode even if they are able to determine
         that they were called from idle mode
       the caller should issue this call continuously in a loop until it needs
         to perform some processing of its own
SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h
----------155306-----------------------------
INT 15 - Advanced Power Management Specification - CPU BUSY
       AX = 5306h
Return: CF clear
Notes:  called to ensure that the system runs at full speed even on systems
         where the BIOS is unable to recognize increased activity (especially
         if interrupts are hooked by other programs and not chained to the
         BIOS)
       this call may be made even when the system is already running at full
         speed, but it will create unnecessary overhead
       should not be called from within a hardware interrupt handler to avoid
         reentrance problems
SeeAlso: AX=5305h
----------155307-----------------------------
INT 15 - Advanced Power Management Specification - SET POWER STATE
       AX = 5307h
       BX = device ID (see below)
       CX = system state ID
           0000h ready (not supported for device ID 0001h)
           0001h stand-by
           0002h suspend
           0003h off (not supported for device ID 0001h)
           0004h-FFFFh reserved
Return: CF clear if successful
       CF set on error
           AH = error code (01h,09h,0Ah,60h) (see AX=5300h)
Note:   should not be called from within a hardware interrupt handler to avoid
         reentrance problems

Values for device IDs:
0000h  system BIOS
0001h  all devices for which the system BIOS manages power
01xxh  display (01FFh for all attached display devices)
02xxh  secondary storage (02FFh for all attached secondary storage devices)
03xxh  parallel ports (03FFh for all attached parallel ports)
04xxh  serial ports (04FFh for all attached serial ports)
0500h-FFFFh reserved
----------155307BX0001-----------------------
INT 15 - Advanced Power Management Specification - SYSTEM STAND-BY
       AX = 5307h
       BX = 0001h
       CX = 0001h
Return: CF clear
Notes:  puts the entire system into stand-by mode; normally called in response
         to a System Stand-by Request notification after any necessary
         processing, but may also be invoked at the caller's discretion
       should not be called from within a hardware interrupt handler to avoid
         reentrance problems
       the stand-by state is typically exited on an interrupt
SeeAlso: AX=4280h,AX=5307h/BX=0001h/CX=0002h,AX=530Bh
----------155307BX0001-----------------------
INT 15 - Advanced Power Management Specification - SUSPEND SYSTEM
       AX = 5307h
       BX = 0001h
       CX = 0002h
Return: after system is resumed
       CF clear
Notes:  puts the entire system into a low-power suspended state; normally
         called in response to a Suspend System Request notification after
         any necessary processing, but may also be invoked at the caller's
         discretion
       should not be called from within a hardware interrupt handler to avoid
         reentrance problems
       the caller may need to update its date and time values because the
         system could have been suspended for a long period of time
SeeAlso: AX=5307h/BX=0001h/CX=0001h,AX=530Bh
----------155308BXFFFF-----------------------
INT 15 - Advanced Power Management Spec - ENABLE/DISABLE POWER MANAGEMENT
       AX = 5308h
       BX = FFFFh
       CX = new state
           0000h disabled
           0001h enabled
Return: CF clear if successful
       CF set on error
           AH = error code (01h,09h,0Ah) (see AX=5300h)
Notes:  when power management is disabled, the system BIOS will not
         automatically power down devices, enter stand-by or suspended mode,
         or perform any power-saving actions in response to AX=5305h calls
       should not be called from within a hardware interrupt handler to avoid
         reentrance problems
SeeAlso: AX=5309h
----------155309BXFFFF-----------------------
INT 15 - Advanced Power Management Specification - RESTORE POWER-ON DEFAULTS
       AX = 5309h
       BX = FFFFh
Return: CF clear if successful
       CF set on error
           AH = error code (09h) (see AX=5300h)
Note:   should not be called from within a hardware interrupt handler to avoid
         reentrance problems
SeeAlso: AX=5308h
----------15530ABX0001-----------------------
INT 15 - Advanced Power Management Specification - GET POWER STATUS
       AX = 530Ah
       BX = 0001h
Return: CF clear if successful
           BH = AC line status
               00h off-line
               01h on-line
               FFh unknown
               other reserved
           BL = battery status
               00h high
               01h low
               02h critical
               03h charging
               FFh unknown
               other reserved
           CL = remaining battery life
               00h-64h (0-100) percentage of full charge
               FFh unknown
       CF set on error
           AH = error code (09h) (see AX=5300h)
Note:   should not be called from within a hardware interrupt handler to avoid
         reentrance problems
----------15530B-----------------------------
INT 15 - Advanced Power Management Specification - GET POWER MANAGEMENT EVENT
       AX = 530Bh
Return: CF clear if successful
           BX = event code
               0001h system stand-by request
               0002h system suspend request
               0003h normal resume system notification
               0004h critical resume system notification
               0005h battery low notification
       CF set on error
           AH = error code (03h,80h) (see AX=5300h)
Notes:  although power management events are often asynchronous, notification
         will not be made until polled via this call to permit software to
         only receive event notification when it is prepared to process
         power management events; since these events are not very time-
         critical, it should be sufficient to poll once or twice per second
       the critical resume notification is made after the system resumes
         from an emergency suspension; normally, the system BIOS only notifies
         its partner that it wishes to suspend and relies on the partner to
         actually request the suspension, but no notification is made on an
         emergency suspension
       should not be called from within a hardware interrupt handler to avoid
         reentrance problems
SeeAlso: AX=5307h,AX=5307h/BX=0001h/CX=0001h,AX=5307h/BX=0001h/CX=0002h
----------155400-----------------------------
INT 15 - Omniview Multitasker - INSTALLATION NOTIFICATION
       AX = 5400h
       ES:BX -> device information tables
       DI:DX -> dispatcher entry point
Note:   called by OmniView to notify programs loaded before OmniView of state
         changes inside OmniView
SeeAlso: AX=5407h,INT 2F/AX=DE00h
----------155401-----------------------------
INT 15 - Omniview Multitasker - PROCESS CREATION
       AX = 5401h
       ES:BX = process handle
Note:   called by OmniView to notify programs loaded before OmniView of state
         changes inside OmniView
SeeAlso: AX=5402h,INT 2F/AX=DE04h
----------155402-----------------------------
INT 15 - Omniview Multitasker - PROCESS DESTRUCTION
       AX = 5402h
       ES:DX = process handle
Note:   called by OmniView to notify programs loaded before OmniView of state
         changes inside OmniView
SeeAlso: AX=5401h,INT 2F/AX=DE05h
----------155403-----------------------------
INT 15 - Omniview Multitasker - SAVE
       AX = 5403h
       ES:DX = process swapping out
Note:   called by OmniView to notify programs loaded before OmniView of state
         changes inside OmniView
SeeAlso: AX=5404h,INT 2F/AX=DE08h
----------155404-----------------------------
INT 15 - Omniview Multitasker - RESTORE
       AX = 5404h
       ES:DX = process swapping in
Note:   called by OmniView to notify programs loaded before OmniView of state
         changes inside OmniView
SeeAlso: AX=5403h,INT 2F/AX=DE09h
----------155405-----------------------------
INT 15 - Omniview Multitasker - SWITCHING TO BACKGROUND
       AX = 5405h
       ES:DX = process swapping in
Note:   called by OmniView to notify programs loaded before OmniView of state
         changes inside OmniView
SeeAlso: AX=5406h
----------155406-----------------------------
INT 15 - Omniview Multitasker - SWITCHING TO FOREGROUND
       AX = 5406h
       ES:DX = process swapping in
Note:   called by OmniView to notify programs loaded before OmniView of state
         changes inside OmniView
SeeAlso: AX=5405h
----------155407-----------------------------
INT 15 - Omniview Multitasker - EXIT NOTIFICATION
       AX = 5407h
Note:   called by OmniView to notify programs loaded before OmniView of state
         changes inside OmniView
SeeAlso: AX=5400h,INT 2F/AX=DE03h
----------1580-------------------------------
INT 15 - OS HOOK - DEVICE OPEN (AT,XT286,PS)
       AH = 80h
       BX = device ID
       CX = process ID
       CF clear
Return: CF clear if successful
           AH = 00h
       CF set on error
           AH = status
               80h invalid command (PC,PCjr)
               86h function not supported (XT)
Note:   this function should be hooked by a multitasker which wishes to keep
         track of device ownership; the default BIOS handler merely returns
         successfully
SeeAlso: AH=81h,AH=82h
----------1581-------------------------------
INT 15 - OS HOOK - DEVICE CLOSE
       AH = 81h
       BX = device ID
       CX = process ID
       CF clear
Return: CF clear if successful
           AH = 00h
       CF set on error
           AH = status (see AH=80h)
Note:   this function should be hooked by a multitasker which wishes to keep
         track of device ownership; the default BIOS handler merely returns
         successfully
SeeAlso: AH=80h,AH=82h
----------1582-------------------------------
INT 15 - OS HOOK - PROGRAM TERMINATION
       AH = 82h
       BX = process ID
       CF clear
Return: CF clear if successful
           AH = 00h
       CF set on error
           AH = status (see AH=80h)
Notes:  closes all devices opened by the given process ID with function 80h
       this function should be hooked by a multitasker which wishes to keep
         track of device ownership; the default BIOS handler merely returns
         successfully
SeeAlso: AH=80h,AH=81h
----------1583-------------------------------
INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
       AH = 83h
       AL = subfunction
           00h set interval
               CX:DX = microseconds to delay
               ES:BX -> byte whose high bit is to be set at end of interval
           01h cancel wait interval
Return: CF set on error or function already busy
           AH = status
               80h invalid command (PC,PCjr)
               86h function not supported (XT and later)
       CF clear if successful
Note:   the resolution of the wait period is 977 microseconds on most systems
         because most BIOSes use the 1/1024 second fast interrupt from the AT
         real-time clock chip which is available on INT 70
SeeAlso: AH=86h,INT 70
----------1584-------------------------------
INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)
       AH = 84h
       DX = subfunction
           0000h read joystick switches
               Return: AL bits 7-4 = switch settings
           0001h read positions of joysticks
               Return: AX = X position of joystick A
                       BX = Y position of joystick A
                       CX = X position of joystick B
                       DX = Y position of joystick B
Return: CF set on error
           AH = status
               80h invalid command (PC,PCjr)
               86h function not supported (other)
       CF clear if successful
Notes:  if no game port is installed, subfunction 0000h returns AL=00h (all
         switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
       a 250kOhm joystick typically returns 0000h-01A0h
----------1585-------------------------------
INT 15 - OS HOOK - SysRq KEY ACTIVITY (AT,PS)
       AH = 85h
       AL = 00h SysRq key pressed
          = 01h SysRq key released
       CF clear
Return: CF clear if successful
           AH = 00h
       CF set on error
           AH = status (see AH=84h)
Notes:  called by keyboard decode routine
       the default handler simply returns successfully; programs which wish
         to monitor the SysRq key must hook this call
SeeAlso: INT 09
----------1586-------------------------------
INT 15 - BIOS - WAIT (AT,PS)
       AH = 86h
       CX:DX = interval in microseconds
Return: CF clear if successful (wait interval elapsed)
       CF set on error or AH=83h wait already in progress
           AH = status (see AH=84h)
Note:   the resolution of the wait period is 977 microseconds on most systems
         because most BIOSes use the 1/1024 second fast interrupt from the AT
         real-time clock chip which is available on INT 70
SeeAlso: AH=83h,INT 70
----------1587-------------------------------
INT 15 - SYSTEM - COPY EXTENDED MEMORY
       AH = 87h
       CX = number of words to copy (max 8000h)
       ES:SI -> global descriptor table
Return: CF set on error
       CF clear if successful
       AH = status
           00h source copied into destination
           01h parity error
           02h interrupt error
           03h address line 20 gating failed
           80h invalid command (PC,PCjr)
           86h unsupported function (XT,PS30)
Notes:  copy is done in protected mode with interrupts disabled
       this function is incompatible with the OS/2 compatibility box
SeeAlso: AH=88h,AH=89h

Format of global descriptor table:
Offset  Size    Description
00h 16 BYTEs   zeros
10h    WORD    source segment length in bytes (2*CX-1 or greater)
12h  3 BYTEs   24-bit linear source address, low byte first
15h    BYTE    source segment access rights (93h)
16h    WORD    zero
18h    WORD    destination segment length in bytes (2*CX-1 or greater)
1Ah  3 BYTEs   24-bit linear destination address, low byte first
1Dh    BYTE    destination segment access rights (93h)
1Eh 18 BYTEs   zeros
----------1588-------------------------------
INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
       AH = 88h
Return: CF clear if successful
           AX = number of contiguous KB starting at absolute address 100000h
       CF set on error
           AH = status
               80h invalid command (PC,PCjr)
               86h unsupported function (XT,PS30)
Note:   TSRs which wish to allocate extended memory to themselves often hook
         this call, and return a reduced memory size.  They are then free to
         use the memory between the new and old sizes at will.
SeeAlso: AH=87h
----------1589-------------------------------
INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
       AH = 89h
       BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
       BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
       ES:SI -> GDT for protected mode
              offset 0h  null descriptor (initialize to zeros)
                     8h  GDT descriptor
                    10h  IDT descriptor
                    18h  DS
                    20h  ES
                    28h  SS
                    30h  CS
                    38h  uninitialized, used to build descriptor for BIOS CS
       CX = offset into protected-mode CS to jump to
Return: CF set on error
          AH = FFh  error enabling address line 20
       CF clear if successful
          AH = 00h
          in protected mode at specified address
Note:   BL and BH must be multiples of 8
SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
----------1590-------------------------------
INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
       AH = 90h
       AL = device type
           00h disk
           01h diskette
           02h keyboard
           03h PS/2 pointing device
           21h waiting for keyboard input (Phoenix BIOS)
           80h network
           FBh digital sound (Tandy)
           FCh disk reset (PS)
           FDh diskette motor start
           FEh printer
       ES:BX -> request block for type codes 80h through BFh
       CF clear
Return: CF set if wait time satisfied
       CF clear if driver must perform wait
           AH = 00h
Notes:  type codes are allocated as follows:
         00-7F non-reentrant devices; OS must arbitrate access
         80-BF reentrant devices; ES:BX points to a unique control block
         C0-FF wait-only calls, no complementary INT 15/AH=91h call
       floppy and hard disk BIOS code uses this call to implement a timeout;
         for device types 00h and 01h, a return of CF set means that the
         timeout expired before the disk responded.
       this function should be hooked by a multitasker to allow other tasks
         to execute while the BIOS is waiting for I/O completion; the default
         handler merely returns with AH=00h and CF clear
SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h
----------1591-------------------------------
INT 15 - OS HOOK - DEVICE POST (AT,PS)
       AH = 91h
       AL = device type (see AH=90h)
       ES:BX -> request block for type codes 80h through BFh
       CF clear
Return: AH = 00h
Note:   this function should be hooked by a multitasker to allow other tasks
         to execute while the BIOS is waiting for I/O completion; the default
         handler merely returns with AH=00h and CF clear
SeeAlso: AH=90h
----------15BC-------------------------------
INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED
       AH = BCh
Return: CF clear
       BYTE 0040h:00B0h set to ??? (43 on my 386/33)
Note:   reads system timer channel 0 twice, then does calculations on returned
         values
----------15BF00-----------------------------
INT 15 - Rational Systems DOS/16M - ???
       AX = BF00h
       ???
Return: ???
Note:   under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
SeeAlso: AX=BF02h
----------15BF01-----------------------------
INT 15 - Rational Systems DOS/16M - ???
       AX = BF01h
       ???
Return: ???
Notes:  under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
       called by DOS/4GW
SeeAlso: AX=BF00h,AX=BF02h
----------15BF02DX0000-----------------------
INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
       AX = BF02h
       DX = 0000h
Return: DX = nonzero if installed
           DX:SI -> XBRK structure (see below)
Note:   this function is also supported by DOS/4G
SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h

Format of XBRK structure:
Offset  Size    Description
00h    DWORD   linear address of first available byte
04h    DWORD   linear address of last available byte + 1 ???
08h    DWORD   real-mode address of XBRK structure???
0Ch    DWORD   ???
10h  2 BYTEs   ???
12h    WORD    segment of ???
14h  8 BYTEs   ???
1Ch 512 BYTEs  protected-mode IDT
21Ch  N BYTEs   protected-mode GDT
----------15BF03-----------------------------
INT 15 - Rational Systems DOS/4GW - UNINSTALL???
       AX = BF03h
       BX = PSP segment of extender
       ???
Return: ???
Note:   if BX is not the PSP segment of the extender, it passes the call down
         the INT 15 chain; this allows nested instances of the extender
SeeAlso: AX=BF06h
----------15BF04-----------------------------
INT 15 - Rational Systems DOS/4GW - ???
       AX = BF04h
       BX = PSP segment of extender
Return: nothing???
Notes:  if BX is not the PSP segment of the extender, it passes the call down
         the INT 15 chain; this allows nested instances of the extender
       grabs INT 2Fh and installs handlers for INT 2F/AX=1605h-1607h
SeeAlso: INT 2F/AX=1607h/BX=22C0h
----------15BF05-----------------------------
INT 15 - Rational Systems DOS/4GW - INITIALIZE PROTECTED-MODE INTERFACE
       AX = BF05h
       BX = PSP segment of extender
Return: nothing???
Notes:  if BX is not the PSP segment of the extender, it passes the call down
         the INT 15 chain; this allows nested instances of the extender
       calls INT 67/AX=DE01h if ???
----------15BF06-----------------------------
INT 15 - Rational Systems DOS/4GW - ???
       AX = BF06h
       BX = PSP segment of extender
       ???
Return: ???
Note:   if BX is not the PSP segment of the extender, it passes the call down
         the INT 15 chain; this allows nested instances of the extender
SeeAlso: AX=BF03h
----------15BFDCDX0000-----------------------
INT 15 - Rational Systems DOS/4GW - INSTALLATION CHECK
       AX = BFDCh
       DX = 0000h
       SI = 0000h
Return: DX = nonzero if installed
           DX:SI -> XBRK structure (see AX=BF02h)
SeeAlso: AX=BF02h
----------15BFDEBX0000-----------------------
INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
       AX = BFDEh
       BX = 0000h
Return: AX = ??? (0003h)
       BX = FFFFh
SeeAlso: AX=BF02h
----------15BFDEBX0001-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
       AX = BFDEh
       BX = 0001h
Return: BX = 0000h (success)
       CX:DX -> name of process manager executable
SeeAlso: AX=BFDEh/BX=0000h
----------15BFDEBX0002-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???
       AX = BFDEh
       BX = 0002h
       CX:DX -> ???
Return: BX = 0000h (success)
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
----------15BFDEBX0003-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
       AX = BFDEh
       BX = 0003h
Return: BX = 0000h (success)
       CX:DX -> ???
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
----------15BFDEBX0004-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
       AX = BFDEh
       BX = 0004h
       CL = ???
Return: BX = 0000h (success)
       CX:DX -> XBRK structure (see AX=BF02h)
SeeAlso: AX=BFDEh/BX=0000h
----------15BFDEBX0005-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
       AX = BFDEh
       BX = 0005h
       CX = new value for ???
Return: BX = 0000h (success)
       AX = old value of ???
       DS:SI -> ??? (if AX nonzero on return)
       ES:DI -> ??? (if AX zero on return)
Note:   called by DOS4GW.EXE
SeeAlso: AX=BFDEh/BX=0000h
----------15BFDEBX0006-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
       AX = BFDEh
       BX = 0006h
Return: BX = 0000h (success)
       AH = interrupt number??? (BEh)
       CX:DX = ???
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
----------15BFDEBX0007-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???
       AX = BFDEh
       BX = 0007h
       CX:DX = ???
Return: BX = 0000h (success)
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
----------15BFDEBX0008-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
       AX = BFDEh
       BX = 0008h
       CX = segment of ???
       DS = ???
Return: BX = status
           0000h successful
               AL = ??? (80h or C0h)
               DX = ??? (0603h) if AL=C0h
           0001h failed
               AX = 0000h
Note:   called by DOS4GW.EXE
SeeAlso: AX=BFDEh/BX=0000h
----------15BFDEBX0009-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
       AX = BFDEh
       BX = 0009h
Return: BX = 0000h (success)
       CX:DX -> full pathname to LOAD32.EXP
SeeAlso: AX=BFDEh/BX=0000h
----------15BFDEBX000A-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - DECREMENT ???
       AX = BFDEh
       BX = 000Ah
Return: BX = 0000h (success)
       AX = new value of ??? counter
Notes:  also resets a variety of values if the counter goes negative
       called by DOS4GW.EXE
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
----------15BFDEBX000B-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - INCREMENT ???
       AX = BFDEh
       BX = 000Bh
Return: AX = new value of ??? counter
Note:   called by DOS4GW.EXE
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
----------15BFDEBX000C-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
       AX = BFDEh
       BX = 000Ch
       CL = ???
           00h
           nonzero
Return: ???
SeeAlso: AX=BFDEh/BX=0000h
----------15BFDEBX000D-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
       AX = BFDEh
       BX = 000Dh
       ???
Return: ???
SeeAlso: AX=BFDEh/BX=0000h
----------15BFDEBX000E-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
       AX = BFDEh
       BX = 000Eh
       DX:CX -> ???
Return: AX = segment of handle for calling task
       BX = ??? (probably destroyed)
       DX:CX -> ???
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
----------15BFDEBX000F-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
       AX = BFDEh
       BX = 000Fh
Return: AX = segment of handle for calling task
       BX = ??? (probably destroyed)
       DX:CX -> ???
Note:   identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
----------15BFDEBX0010-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET TASK HANDLE
       AX = BFDEh
       BX = 0010h
Return: AX = segment of caller's task handle
       BX destroyed
SeeAlso: AX=BFDEh/BX=000Fh
----------15BFDEBX0011-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
       AX = BFDEh
       BX = 0011h
Return: CX = code segment of DVDOS4GX.DVR
       BX = ??? (0004h)
SeeAlso: AX=BFDEh/BX=0000h
----------15BFDEBX0012-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
       AX = BFDEh
       BX = 0012h
Return: DX = code segment of DVDOS4GX.DVR
       BX = ??? (012Ch)
       CX = ??? (0006h)
SeeAlso: AX=BFDEh/BX=0000h
----------15BFDEBX0013-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
       AX = BFDEh
       BX = 0013h
Return: DX:CX -> ???
SeeAlso: AX=BFDEh/BX=000Eh
----------15BFDEBX0014-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - LOCK ??? MAILBOX
       AX = BFDEh
       BX = 0014h
       CX = index of ??? mailbox
               (0000h-0004h valid, but no range checking done)
Return: AX,BX destroyed
SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
----------15BFDEBX0015-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
       AX = BFDEh
       BX = 0015h
       CX = index of ??? mailbox
               (0000h-0004h valid, but no range checking done)
Return: AX,BX destroyed
SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
----------15BFDEBX0016-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
       AX = BFDEh
       BX = 0016h
       CX = index of ??? mailbox
               (0000h-0004h valid, but no range checking done)
Return: AX = status
           0000h no one owns mailbox
           0001h mailbox has an owner
       BX destroyed
SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
----------15BFDEBX0017-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
       AX = BFDEh
       BX = 0017h
       CX = index of ??? mailbox
               (0000h-0004h valid, but no range checking done)
Return: AX = segment of mailbox owner's handle
       BX = segment of caller's task handle
SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
----------15BFDEBXFFFD-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
       AX = BFDEh
       BX = FFFDh
Return: CX:DX = ???
SeeAlso: AX=BFDEh/BX=FFFEh
----------15BFDEBXFFFE-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???
       AX = BFDEh
       BX = FFFEh
       CX:DX = ???
SeeAlso: AX=BFDEh/BX=FFFDh
----------15BFDEBXFFFF-----------------------
INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - NOP
       AX = BFDEh
       BX = FFFFh
SeeAlso: AX=BFDEh/BX=0000h
----------15C0-------------------------------
INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
       AH = C0h
Return: CF set if BIOS doesn't support call
       CF clear on success
           ES:BX -> ROM table (see below)
       AH = status
           00h successful
           86h unsupported function
Notes:  the 1/10/86 XT BIOS returns an incorrect value for the feature byte
       the configuration table is at F000h:E6F5h in 100% compatible BIOSes
       Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
         and a model byte at absolute address FE845h
       Tandy 1000 machines contain 21h in the byte at F000h:C000h
       some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
         past the end of the configuration table

Format of ROM configuration table:
Offset  Size    Description
00h    WORD    number of bytes following
02h    BYTE    model (see below)
03h    BYTE    submodel (see below)
04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
05h    BYTE    feature byte 1:
               bit 7 = DMA channel 3 used by hard disk BIOS
               bit 6 = 2nd 8259 installed
               bit 5 = Real-Time Clock installed
               bit 4 = INT 15/AH=4Fh called upon INT 9h
               bit 3 = wait for external event supported
               bit 2 = extended BIOS area allocated (usually at top of RAM)
               bit 1 = bus is Micro Channel instead of ISA
               bit 0 reserved
06h    BYTE    feature byte 2:
               bit 7 = ???
               bit 6 = INT 16/AH=09h (keyboard functionality) supported
               bits 5-0 = ???
07h    BYTE    feature byte 3:
               reserved (0)
08h    BYTE    feature byte 4:
               reserved (0)
09h    BYTE    feature byte 5:
               reserved (0) (IBM)
               ??? (08h) (Phoenix 386 v1.10)
---AWARD BIOS---
0Ah  N BYTEs   AWARD copyright notice
---Phoenix BIOS---
0Ah    BYTE    ??? (00h)
0Bh    BYTE    major version
0Ch    BYTE    minor version (BCD)
0Dh  4 BYTEs   ASCIZ string "PTL" (Phoenix Technologies Ltd)

Values for model/submodel/revision:
Model  Submdl  Rev      BIOS date       System
FFh    *       *       04/24/81        PC (original)
FFh    *       *       10/19/81        PC (some bugfixes)
FFh    *       *       10/27/82        PC (HD, 640K, EGA support)
FFh    46h     ***       ???           Olivetti M15
FEh    *       *       08/16/82        PC XT
FEh    *       *       11/08/82        PC XT and Portable
FEh    43h     ***       ???           Olivetti M240
FEh    A6h     ???       ???           ??? (checked for by 386MAX v6.01)
FDh    *       *       06/01/83        PCjr
FCh    *       *       01/10/84        AT models 068,099 6 MHz 20MB
FCh    00h     01h     06/10/85        AT model  239     6 MHz 30MB
FCh    00h     <> 01h    ???           7531/2 Industrial AT
FCh    01h     00h     11/15/85        AT models 319,339 8 MHz, Enh Keyb, 3.5"
FCh    01h     00h     09/17/87        Tandy 3000
FCh    01h     00h     01/15&88        Toshiba T5200/100
FCh    01h     00h     12/26*89        Toshiba T1200/XE
                       (Those date characters are not typos)
FCh    01h     30h       ???           Tandy 3000NL
FCh    01h     ???       ???           Compaq 286/386
FCh    02h     00h     04/21/86        PC XT-286
FCh    04h     00h     02/13/87     ** PS/2 Model 50 (10 MHz/1 ws 286)
FCh    04h     03h     04/18/88        PS/2 Model 50Z (10 MHz/0 ws 286)
FCh    05h     00h     02/13/87     ** PS/2 Model 60 (10 MHz 286)
FCh    06h     ???       ???           7552 "Gearbox"
FCh    08h     ***       ???           Epson, unknown model
FCh    09h     00h       ???           PS/2 Model 25 (10 MHz 286)
FCh    09h     02h     06/28/89        PS/2 Model 30-286
FCh    0Bh     00h     02/16/90        PS/1 Model 2011 (10 MHz 286)
FCh    30h     ***       ???           Epson, unknown model
FCh    31h     ***       ???           Epson, unknown model
FCh    33h     ***       ???           Epson, unknown model
FCh    42h     ***       ???           Olivetti M280
FCh    45h     ***       ???           Olivetti M380 (XP 1, XP3, XP 5)
FCh    48h     ***       ???           Olivetti M290
FCh    4Fh     ***       ???           Olivetti M250
FCh    50h     ***       ???           Olivetti M380 (XP 7)
FCh    51h     ***       ???           Olivetti PCS286
FCh    52h     ***       ???           Olivetti M300
FCh    81h     00h     01/15/88        Phoenix 386 BIOS v1.10 10a
FBh    00h     01h     01/10/86        PC XT, Enh Keyb, 3.5" support
FBh    00h     02h     05/09/86        PC XT
FBh    4Ch     ***       ???           Olivetti M200
FAh    00h     00h     09/02/86        PS/2 Model 30 (8 MHz 8086)
FAh    00h     01h     12/12/86        PS/2 Model 30
FAh    01h     00h       ???           PS/2 Model 25/25L (8 MHz 8086)
FAh    4Eh     ***       ???           Olivetti M111
F9h    00h     00h     09/13/85        PC Convertible
F8h    00h     00h     03/30/87     ** PS/2 Model 80 (16MHz 386)
F8h    01h     00h     10/07/87        PS/2 Model 80 (20MHz 386)
F8h    04h     02h     04/11/88        PS/2 Model 70 20MHz, type 2 system brd
F8h    04h     03h     03/17/89        PS/2 Model 70 20MHz, type 2 system brd
F8h    09h     00h       ???           PS/2 Model 70 16MHz, type 1 system brd
F8h    09h     02h     04/11/88        PS/2 Model 70 some models
F8h    09h     03h     03/17/89        PS/2 Model 70 some models
F8h    0Bh     00h     01/18/89        PS/2 Model P70 (8573-121) typ 2 sys brd
F8h    0Bh     02h     12/16/89        PS/2 Model P70 ??
F8h    0Ch     00h     11/02/88        PS/2 Model 55SX (16 MHz 386SX)
F8h    0Dh     00h       ???           PS/2 Model 70 25MHz, type 3 system brd
F8h    11h     00h     10/01/90        PS/2 Model 90 (25 MHz 486)
F8h    13h     00h     10/01/90        PS/2 Model 90 (33 MHz 486)
F8h    14h     00h     10/01/90        PS/2 Model 90-AK9 (25 MHz 486)
F8h    16h     00h     10/01/90        PS/2 Model 90-AKD (33 MHz 486)
F8h    19h     05h       ???           PS/2 Model 35/35LS or 40 (20 MHz 386SX)
F8h    1Bh     00h     10/02/89        PS/2 Model 70-486 (25 MHz 486)
F8h    1Ch     00h     02/08/90        PS/2 Model 65-121 (16 MHz 386SX)
F8h    1Eh     00h     02/08/90        PS/2 Model 55LS (16 MHz 386SX)
F8h    23h     01h       ???           PS/2 Model L40 (20 MHz 386SX)
F8h    25h     06h       ???           PS/2 Model M57 (20 MHz 386SLC)
F8h    26h     01h       ???           PS/2 Model 57 (20 MHz 386SX)
F8h    2Ah     00h       ???           PS/2 Model 95 (50 MHz 486)
F8h    2Bh     00h       ???           PS/2 Model 90 (50 MHz 486)
F8h    2Ch     01h       ???           PS/2 Model 95 (20 MHz 486SX)
F8h    2Dh     00h       ???           PS/2 Model 90 (20 MHz 486SX)
F8h    2Eh     01h       ???           PS/2 Model 95 (20 MHz 486SX + 487SX)
F8h    2Fh     00h       ???           PS/2 Model 90 (20 MHz 486SX + 487SX)
F8h    30h     00h       ???           PS/1 Model 2121 (16 MHz 386SX)
F8h    50h     00h       ???           PS/2 Model P70 (8573) (16 MHz 386)
F8h    50h     01h     12/16/89        PS/2 Model P70 (8570-031)
F8h    52h     00h       ???           PS/2 Model P75 (33 MHz 486)
F8h    61h     ***       ???           Olivetti P500
F8h    62h     ***       ???           Olivetti P800
F8h    80h     00h       ???           PS/2 Model 80 (25 MHz 386)
F8h    80h     01h     11/21/89        PS/2 Model 80-A21
F8h    ???     ???       ???           PS/2 Model 90 (25 MHz 486SX)
F8h    ???     ???       ???           PS/2 Model 95 (25 MHz 486SX)
F8h    ???     ???       ???           PS/2 Model 90 (25 MHz 486SX + 487SX)
F8h    ???     ???       ???           PS/2 Model 95 (25 MHz 486SX + 487SX)
E1h    ???     ???       ???           ??? (checked for by DOS4GW.EXE)
9Ah    *       *         ???           Compaq XT/Compaq Plus
30h    ???     ???       ???           Sperry PC
2Dh    *       *         ???           Compaq PC/Compaq Deskpro
???    56h     ???       ???           Olivetti, unknown model
???    74h     ???       ???           Olivetti, unknown model
   * This BIOS call is not implemented in these early versions.
     Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.
  ** These BIOS versions require the DASDDRVR.SYS patches.
 *** These Olivetti and Epson machines store the submodel in the byte at
       F000h:FFFDh.

Values for Dell model byte:
02h    Dell 200
03h    Dell 300
05h    Dell 220
06h    Dell 310
07h    Dell 325
09h    Dell 310A
0Ah    Dell 316
0Bh    Dell 220E
0Ch    Dell 210
0Dh    Dell 316SX
0Eh    Dell 316LT
0Fh    Dell 320LX
11h    Dell 425E
----------15C1-------------------------------
INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
       AH = C1h
Return: CF set on error
       CF clear if successful
           ES = segment of data area
SeeAlso: AH=04h"ABIOS"
----------15C200BH00-------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
       AX = C200h
       BH = 00h disable
            01h enable
Return: CF set on error
       AH = status
           00h successful
           01h invalid function
           02h invalid input
           03h interface error
           04h need to resend
           05h no device handler installed
----------15C201-----------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
       AX = C201h
Return: CF set on error
           AH = status (see AX=C200h)
       CF clear if successful
           BH = device ID
SeeAlso: INT 33/AX=0000h
----------15C202-----------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
       AX = C202h
       BH = sampling rate
           00h 10/second
           01h 20/second
           02h 40/second
           03h 60/second
           04h 80/second
           05h 100/second
           06h 200/second
Return: CF set on error
           AH = status (see AX=C200h)
SeeAlso: INT 33/AX=001Ch
----------15C203-----------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
       AX = C203h
       BH = resolution
           00h one count per mm
           01h two counts per mm
           02h four counts per mm
           03h eight counts per mm
Return: CF set on error
           AH = status (see AX=C200h)
----------15C204-----------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
       AX = C204h
Return: CF set on error
           AH = status (see AX=C200h)
       CF clear if successful
           BH = device ID
----------15C205-----------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
       AX = C205h
       BH = data package size (1 - 8 bytes)
Return: CF set on error
           AH = status (see AX=C200h)
SeeAlso: AX=C201h
----------15C206-----------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET/SET SCALING FACTOR
       AX = C206h
       BH = subfunction
           00h return device status
               Return: BL = status
                          bit 0: right button pressed
                          bit 1: reserved
                          bit 2: left button pressed
                          bit 3: reserved
                          bit 4: 0 if 1:1 scaling, 1 if 2:1 scaling
                          bit 5: device enabled
                          bit 6: 0 if stream mode, 1 if remote mode
                          bit 7: reserved
                       CL = resolution (see AX=C203h)
                       DL = sample rate, reports per second
           01h set scaling at 1:1
           02h set scaling at 2:1
Return: CF set on error
           AH = status (see AX=C200h)
----------15C207-----------------------------
INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
       AX = C207h
       ES:BX -> FAR user device handler
Return: CF set on error
           AH = status (see AX=C200h)
SeeAlso: INT 33/AX=000Ch
----------15C3------------------------------
INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
       AH = C3h
       AL = 00h disable
            01h enable
               BX = timer counter
Return: CF set on error
       CF clear if successful
Note:   the watchdog timer generates an NMI
----------15C4-------------------------------
INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
       AH = C4h
       AL = 00h return base POS register address
            01h enable slot
                BL = slot number
            02h enable adapter
Return: CF set on error
       DX = base POS register address (if function 00h)
----------15C5-------------------------------
INT 15 U - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
       AH = C5h
       AL = interrupt being invoked
           01h INT 19
           02h INT 14
           03h INT 16
           04h INT 40 (floppy INT 13)
           05h INT 17
           06h INT 10
           07h INT 12
           08h INT 11
           09h INT 1A
Return: all registers except AX must be preserved
Notes:  called as the very first action of the indicated ROM BIOS interrupt
         handlers on the PS/2 Models 30/286, 50Z, and 95
       default handler does nothing and returns CF clear for the above
         subfunctions, CF set and AH=86h for all other subfunctions
       value of AX passed to the original interrupt handler is pushed on
         stack immediately prior to call
----------15C6-------------------------------
INT 15 U - PS/2 Model 95 - ???
       AH = C6h
       ???
Return: ???
----------15C7-------------------------------
INT 15 U - PS/2 Model 95 - ???
       AH = C7h
       ???
Return: ???
----------15C8-------------------------------
INT 15 U - PS/2 Model 95 - ???
       AH = C8h
       ???
Return: ???
----------15C9-------------------------------
INT 15 U - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
       AH = C9h
       AL = 10h (may be required on some non-PS BIOSes)
Return: AH = 00h
       CH = CPU type
           03h 80386
           04h 80486
       CL = mask revision
           23h 386SX
Notes:  the BIOS must save DX at startup in order to be able to support this
         call; PS/2 Models 56, 57, 90, and 95 are known to support it
       the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)
----------15CA-------------------------------
INT 15 U - PS/2 Model 95 - ???
       AH = CAh
       ???
Return: ???
----------15CB-------------------------------
INT 15 U - PS/2 Model 95 - ???
       AH = CBh
       ???
Return: ???
----------15CC-------------------------------
INT 15 U - PS/2 Model 95 - ???
       AH = CCh
       ???
Return: ???
----------15CD-------------------------------
INT 15 U - PS/2 Model 95 - ???
       AH = CDh
       ???
Return: ???
----------15CE-------------------------------
INT 15 U - PS/2 Model 95 - ???
       AH = CEh
       ???
Return: ???
----------15CF-------------------------------
INT 15 U - PS/2 Model 95 - ???
       AH = CFh
       ???
Return: ???
----------15D800-----------------------------
INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
       AX = D800h
       CL = slot number (including embedded and virtual)
Return: CF clear if successful
           AH = 00h
       CF set on error
           AH = error code
               80h invalid slot number
               82h EISA CMOS corrupt
               83h empty slot
               86h invalid BIOS-FW function call
               87h invalid system configuration
       AL bit flags
           bit 7: set if duplicate IDs
               6: set if product ID readable
             4,5: slot type (00=expansion, 01=embedded, 10=virtual device)
             0-3: duplicate ID number if bit 7 set
       BH = major revision level of configuration utility
       BL = minor revision level of configuration utility
       CX = checksum of configuration file
       DH = number of device functions
       DL = combined function information byte
       SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
Note:   call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
SeeAlso: AX=D801h,AX=D804h
----------15D801-----------------------------
INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
       AX = D801h
       CH = function number to read
       CL = slot number (including embedded and virtual)
       DS:SI -> 320-byte buffer for standard configuration data block
Return: CF clear if successful
           AH = 00h
           DS:SI buffer filled
       CF set on error
           AH = error code
               80h invalid slot number
               81h invalid function number
               82h EISA CMOS corrupt
               83h empty slot
               86h invalid BIOS-FW function call
               87h invalid system configuration
       BX destroyed
Note:   call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
----------15D802-----------------------------
INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
       AX = D802h
       BH = EISA config utility major revision level
       BL = EISA config utility minor revision level
Return: CF clear if successful
           AH = 00h
       CF set on error
           AH = error code
               84h error clearing CMOS
               86h invalid BIOS-FW function call
               88h config utility version not supported
Note:   call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
SeeAlso: AX=D803h
----------15D803-----------------------------
INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
       AX = D803h
       CX = length of data structure (0000h = empty slot)
               includes two bytes for config file checksum
       DS:SI -> configuration data
Return: CF clear if successful
           AH = 00h
       CF set on error
           AH = error code
               84h error clearing CMOS
               85h EISA CMOS is full
               86h invalid BIOS-FW function call
Note:   call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
SeeAlso: AX=D802h
----------15D804-----------------------------
INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
       AX = D804h
       CL = slot number (including embedded and virtual)
Return: CF clear if successful
           AH = 00h
       CF set on error
           AH = error code
               80h invalid slot number
               83h empty slot
               86h invalid BIOS-FW function call
       SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
Note:   call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
SeeAlso: AX=D800h
----------15D8-------------------------------
INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
       AH = D8h
       AL = 80h to 84h
       other registers as appropriate for AL=00h to 04h
Return: as appropriate for AL=00h to 04h
Note:   these functions are identical to AX=D800h to D804h, except that they
         should be called when using 32-bit CS addressing mode (pointers use
         ESI rather than SI as offset) instead of 16-bit addressing mode
SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
----------15DE00-----------------------------
INT 15 - DESQview - GET PROGRAM NAME
       AX = DE00h
Return: AX = offset into DESQVIEW.DVO of program most recently selected from
               the "Switch Windows" menu (see below)
Note:   always returns AX=0000h under DESQview/X
SeeAlso: AX=DE07h

Format of program entry in DESQVIEW.DVO:
Offset  Size    Description
00h    BYTE    length of name (FFh if end of file)
01h  N BYTEs   name
     2 BYTEs   keys to invoke program (second = 00h if only one key used)
       BYTE    program type
               00h normal program
               04h divider
               80h Delete a Program
               81h Change a Program
       WORD    ??? apparently always 0000h
----------15DE01-----------------------------
INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
       AX = DE01h
Return: nothing
Notes:  reads DESQVIEW.DVO, disables Open menu if file not in current directory
       NOP for DESQview/X
----------15DE02-----------------------------
INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
       AX = DE02h
Return: nothing
Note:   this call is a NOP in DV 2.x
SeeAlso: AX=DE03h
----------15DE03-----------------------------
INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
       AX = DE03h
Return: AX = ??? for current window
       BX = ??? for current window
Note:   this call is a NOP in DV 2.x
SeeAlso: AX=DE02h
----------15DE04-----------------------------
INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
       AX = DE04h
Return: BX = bytes of common memory available
       CX = largest block available
       DX = total common memory in bytes
SeeAlso: AX=DE05h,AX=DE06h
----------15DE05-----------------------------
INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
       AX = DE05h
Return: BX = K of memory available
       CX = largest block available
       DX = total conventional memory in K
SeeAlso: AX=DE04h,AX=DE06h
----------15DE06-----------------------------
INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
       AX = DE06h
Return: BX = K of expanded memory available
       CX = largest block available
       DX = total expanded memory in K
SeeAlso: AX=DE04h,AX=DE05h
----------15DE07-----------------------------
INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
       AX = DE07h
Return: AX = number of program as it appears on the "Switch Windows" menu
Note:   this API call may be made from a hardware interrupt handler
SeeAlso: AX=DE00h
----------15DE08-----------------------------
INT 15 - DESQview - GET ???
       AX = DE08h
Return: AX = 0000h if ??? is not set to the current task
            0001h if ??? is set to the current task
----------15DE09-----------------------------
INT 15 - DESQview - UNIMPLEMENTED
       AX = DE09h
Return: nothing (NOP in DV 1.x and 2.x)
----------15DE0A-----------------------------
INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
       AX = DE0Ah
       BL = character
Return: character displayed, next call will display in next position (which
       wraps back to the start of the line if off the right edge of screen)
Notes:  displays character on bottom line of *physical* screen, regardless
         of current size of window (even entirely hidden)
       does not know about graphics display modes, just pokes the characters
         into display memory
       this API call may be made from a hardware interrupt handler
SeeAlso: AX=1003h
----------15DE0B-----------------------------
INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
       AX = DE0Bh
       BL = API level minor version number
       BH = API level major version number
Return: AX = maximum API level (AH = major, AL = minor)
Notes:  if the requested API level is greater than the version of DESQview, a
         "You need a newer version" error window is popped up
       the API level defaults to 1.00, and is inherited by child tasks
----------15DE0C-----------------------------
INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
       AX = DE0Ch
       BX = number of bytes
Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
Note:   use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
         system memory
SeeAlso: AX=1001h,AX=DE0Dh,AX=DE15h
----------15DE0D-----------------------------
INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
       AX = DE0Dh
       ES:DI -> previously allocated block
Return: nothing
SeeAlso: AX=1002h,AX=DE0Ch
----------15DE0E-----------------------------
INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
       AX = DE0Eh
       ES:DI -> name to find
       CX = length of name
Return: BX = 0000h not found
            0001h found
               DS:SI = object handle
SeeAlso: AH=12h/BH=11h,AH=12h/BX=1200h"GETNAME"

Special mailbox names:
"COM1" ... "COM4"      RBcomm using COM1 ... COM4
"DESQview/X Help Engine"
"DESQview/X Network Server"  Network Manager
"DESQview X Server0"   X-Windows server
"DESQview X Server7"   X-Windows printing service
"INBOX"                DESQview/X LPD requests
"OUTBOX"               DESQview/X LPD responses
"WAITBOX"              semaphore to synchronize DESQview/X LPD communications
----------15DE0F-----------------------------
INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
       AX = DE0Fh
Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
Notes:  sends a manager stream with opcodes AEh, BDh, and BFh to task's window
       enables an additional mouse mode
----------15DE10-----------------------------
INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
       AX = DE10h
       BH = scan code
       BL = character
Return: nothing
Notes:  a later read will get the keystroke as if it had been typed by the user
       multiple pushes are read last-in first-out
       if a script exists for the pushed key in the current application, the
         script will be executed
       early copies of DV 2.00 destroy AX, BX, ES, and DI
SeeAlso: INT 16/AH=05h
----------15DE11BL00-------------------------
INT 15 - DESQview 2.00+ - "JUSTIFY" - EN/DISABLE AUTOMATIC WINDOW JUSTIFICATION
       AX = DE11h
       BL = 00h      viewport will not move automatically
            nonzero  viewport will move to keep cursor visible (default)
Return: nothing
----------15DE12BX0000-----------------------
INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
       AX = DE12h
       BX = 0000h    select normal style (linefeed only moves down)
            nonzero  select C style (linefeed moves to start of next line)
Return: nothing
Note:   set on a per-task basis, and inherited from the parent task
----------15DE13-----------------------------
INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
       AX = DE13h
Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
            without matching ENDC (see INT 15/AX=101Ch)
Note:   this API call may be made from within a hardware interrupt handler
SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
----------15DE14-----------------------------
INT 15 - DESQview v2.20+ - GET OBJECT TYPE
       AX = DE14h
       ES:DI -> object
Return: BL = 00h not an object
            08h window or task
            09h mailbox
            0Ah keyboard
            0Bh timer
            0Ch objectq
            0Fh pointer
            10h panel
SeeAlso: AX=1016h
----------15DE15BL00-------------------------
INT 15 - DESQview v2.20+ - SET ERROR HANDLING
       AX = DE15h
       BL = 00h post system error on all error conditions
            01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
                messages sent to mailboxes which fail due to lack of system
                or common memory
            02h (v2.26+) same as 01h, but return null pointer for GETMEM
                calls which fail due to lack of system memory
Return: nothing
SeeAlso: AX=DE16h
----------15DE16-----------------------------
INT 15 - DESQview v2.20+ - GET ERROR HANDLING
       AX = DE16h
Return: BL = 00h always post system error
            01h return carry flag set on failed mailbox writes
            02h return CF set on failed mailbox writes and NULL on failed
                GETMEM calls
SeeAlso: AX=DE15h
----------15DE17-----------------------------
INT 15 - DESQview v2.20-2.25 - reserved
       AX = DE17h
Return: pops up "Programming error" window
Note:   AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
SeeAlso: AX=1117h
----------15DE17BX0000-----------------------
INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
       AX = DE17h
       BX = 0000h      get current mapping context without setting
            nonzero    set new mapping context
Return: BX = mapping context in effect before call
Notes:  mapping contexts determine conventional-memory addressability; setting
         a mapping context ensures that the associated program and data areas
         are in memory for access.  Usable by drivers, TSRs and shared
         programs.
       caller need not be running under DESQview
       this API call may be made from a hardware interrupt handler
SeeAlso: AX=1117h,AX=DE21h,INT 2F/AX=1685h
----------15DE18-----------------------------
INT 15 - DESQview v2.20+ - internal - ???
       AX = DE18h
       BP = function number
           high byte must be 10h
           low byte is function
               00h set ???
                   BL = ???  (00h-10h, video mode???)
                   BH = value to store
               03h set ???
                   BL = ??? (stored in driver)
               0Ah get ???
                   ES:DI -> 18-byte buffer to hold ???
Note:   calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
----------15DE19-----------------------------
INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
       AX = DE19h
       BX = number of bytes to allocate
Return: AX = 0000h successful
               ES:DI -> allocated block
            nonzero insufficient memory
Note:   this API call may be made from within a hardware interrupt handler
SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
----------15DE1A-----------------------------
INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
       AX = DE1Ah
       DS:SI -> previously allocated block
Note:   this function may be called from within a hardware interrupt handler
SeeAlso: AX=DE0Dh,AX=DE19h
----------15DE1B-----------------------------
INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
       AX = DE1Bh
Return: nothing
SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
----------15DE1C-----------------------------
INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
       AX = DE1Ch
Return: nothing
Notes:  similar to AX=101Bh, but begins the critical region without ensuring
         that DOS is free
       the official documentation states that this call should be paired with
         "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
       this API call may be made from within a hardware interrupt handler
SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
----------15DE1D-----------------------------
INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
       AX = DE1Dh
       DX = segment of handle for task to receive keystroke
       BL = character
       BH = scan code
Return: AX = 0000h if successful
          nonzero if receiver's keyboard buffer was full
Notes:  the key is treated as though the user had pressed it, ignoring any
         script which may be bound to the key, and using the current field
         table if the keyboard object is in field processing mode
       multiple PUTKEYs are seen in the order in which they are executed
SeeAlso: AX=DE10h
----------15DE1E-----------------------------
INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
       AX = DE1Eh
Return: CL = actual number of rows on screen
       CH = actual number of columns on screen
       BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
Note:   this API call may be made from a hardware interrupt handler
SeeAlso: INT 10/AH=0Fh
----------15DE1F-----------------------------
INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
       AX = DE1Fh
Return: BX = segment of task handle or 0000h if no tasks are using DOS
Note:   this API call may be made from within a hardware interrupt handler
SeeAlso: AX=DE13h
----------15DE20-----------------------------
INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
       AX = DE20h
       BX = segment of handle of task to interupt
       DX:CX -> FAR interrupt routine
       BP,SI,DI,DS,ES as required by interrupt routine
Return: nothing
Notes:  unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
         making the DISPATCHINT call
       multiple "DISPATCHINT" calls are processed in the order in which they
         were executed
       the FAR routine is entered with the current ES, DS, SI, DI, and BP
         values, using the task's internal stack (see AX=101Ah); only SS:SP
         needs to be preserved
       this API call may be made from within a hardware interrupt handler
SeeAlso: AX=1021h,AX=DE2Ah
----------15DE21-----------------------------
INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
       AX = DE21h
       BX = new state
           0000h turn off
           nonzero turn on
Return: BX = old state of virtualization
Notes:  this API call may be made from within a hardware interrupt handler
       under DV 2.40 and 2.42, this call appears to have no effect and always
         returns a nonzero value in BX which appears to be the offset within
         the DV common memory segment of the caller's task object; it may
         only have an effect within a hardware interrupt handler
SeeAlso: AX=1117h,AX=DE17h
----------15DE22-----------------------------
INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
       AX = DE22h
       DX = segment of task handle
Return: DX = total amount of memory in paragraphs
       BX = amount of system memory in paragraphs
       CX = largest block of system memory available in paragraphs
       AX = flags
           bit 0: system memory resides in shared memory
               1: process's memory is swapped out
               2: process's system memory is swapped out
Notes:  if the task handle is a child task, the returned values will be for the
         process containing the task, rather than the task itself
       if the process's system memory is swapped out, BX,CX,DX remain
         unchanged, because the memory usage cannot be determined
SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
----------15DE23-----------------------------
INT 15 U - DESQview v2.31+ - ???
       AX = DE23h
       BX = ??? IRQ number on first PIC?
       CX = ??? IRQ number on second PIC?
Return: ???
Note:   called by QEMM 6.00+
----------15DE24-----------------------------
INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
       AX = DE24h
       BX = length of .DVP data
       CX = length of ??? string
       DS:SI -> ??? string
       ES:DI -> .DVP data (see AX=102Ch)
Return: BX = segment of task handle??? or 0000h on error
Note:   this call is similar to AX=102Ch except that it can interpret the
         extended DVP data
SeeAlso: AX=102Ch
----------15DE25-----------------------------
INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
       AX = DE25h
       ES:DI -> 67-byte buffer for ASCIZ directory name
Return: ES:DI buffer filled with directory from which DESQview was started
BUG:    DV 2.42 does not place a terminating NUL at the end of the directory
         name, so if the buffer is not cleared to zeros before the call,
         there is no way to tell where the directory name ends.  This bug
         has been fixed in DV 2.52 (DV/X 1.02)
SeeAlso: AX=DE2Eh,INT 21/AH=47h
----------15DE26-----------------------------
INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
       AX = DE26h
Return: BX = segment of handle for task with keyboard focus
Note:   under DESQview/X, the X server always has the keyboard focus unless a
         "direct" window is active
SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
----------15DE27-----------------------------
INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
       AX = DE27h
       BX = type
           0000h process
           0001h task
       ES:DI -> list of Instance Item Structures (see below)
Return: CF clear if successful
           AX = ???
           BX = ???
       CF set on error
           AX = ???
Note:   DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h

Format of Instance Item Structure [one element of list]:
Offset  Size    Description
00h    WORD    length of data area DESQview should save and restore on context
               switches (0000h = end of list)
02h    DWORD   pointer to area to be saved/restored
----------15DE28-----------------------------
INT 15 U - DESQview v2.50+ - ???
       AX = DE28h
       BX = segment of ??? or 0000h for default
       ???
Return: ???
Note:   DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
SeeAlso: AX=DE2Ah
----------15DE29BX0000-----------------------
INT 15 U - DESQview v2.50+ - ???
       AX = DE29h
       BX = 0000h
       ???
Return: CF clear if successful
           ???
       CF set on error
Note:   DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
----------15DE29BX0001-----------------------
INT 15 U - DESQview v2.50+ - ???
       AX = DE29h
       BX = 0001h
       DX = segment of window handle
Return: CF clear if successful
           AX = ???
           DX = ???
       CF set on error
Note:   DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
----------15DE29BX0002-----------------------
INT 15 U - DESQview v2.50+ - ???
       AX = DE29h
       BX = 0002h
       DX = segment of window handle
Return: CF clear if successful
           AX = ???
           DX = ???
       CF set on error
Note:   DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
----------15DE29BX0003-----------------------
INT 15 U - DESQview v2.50+ - ???
       AX = DE29h
       BX = 0003h
       DX = segment of window handle
Return: CF clear if successful
           ???
       CF set on error
Note:   DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
----------15DE29BX0004-----------------------
INT 15 U - DESQview v2.50+ - GET DISPLAY NAME
       AX = DE29h
       BX = 0004h
       CX = size of buffer in bytes
       DX = segment of window handle
       ES:DI -> buffer for display name
Return: CF clear if successful
           buffer filled with ASCIZ display name (truncated if necessary) or
             null string if no display
       CF set on error
Notes:  DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
       the name ":0" refers to the local display
----------15DE29BX0005-----------------------
INT 15 U - DESQview v2.50+ - ???
       AX = DE29h
       BX = 0005h
       ???
Return: CF clear if successful
           ???
       CF set on error
Note:   DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
----------15DE2A-----------------------------
INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
       AX = DE2Ah
       BX = segment of handle for task to interrupt or 0000h for caller
       DX:CX -> interrupt routine
       BP,SI,DI,DS,ES as required by interrupt routine
Return: nothing
Notes:  DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
       this call is the same as AX=DE20h except that it will delay
         interrupting the specified task until after it has exited DOS
SeeAlso: AX=1021h,AX=DE20h
----------15DE2B-----------------------------
INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
       AX = DE2Bh
       ES:DI -> starting object
               0000h:0000h for first object in list???
Return: AX = status
           0000h successful
               ES:DI -> next object of same type (window/non-window)
           0001h failed (ES:DI was not a valid handle)
Notes:  DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
       there are two separate lists, one for window/task objects and one
         for all other objects
SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
----------15DE2CDX0100-----------------------
INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
       AX = DE2Ch
       DX = window information format version (0100h for DESQview 2.5x)
       BX = segment of window handle or 0000h for default
       ES:DI -> buffer for window information (see below)
Return: AX = status
           0000h successful
Note:   DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
SeeAlso: AX=1000h,AX=DE01h,AX=DE2Bh

Format of window information:
Offset  Size    Description
00h    BYTE    task flag: 00h window, 01h task
01h    BYTE    process number if owner task
               00h if non-owner task
02h    WORD    segment of owner's handle, 0000h if orphaned
04h    WORD    mapping context
06h    BYTE    status
               00h "Waiting" waiting for input
               01h "Idle" keyboard poll limit reached
               03h same as 01h
               04h "Pausing" INT 15/AX=1000h pause called
               04h direct: user did something to allow task switch
               05h "ModeChg" video mode about to be changed
               06h "ModeNtf" notify that video mode changed
               07h "MoniCh" requested change to other monitor
               08h "StartPgm" control relinquished to start new process
               09h "MgrCan" made window manager CANCEL command
               0Ah "Slicing" time slice expired
               0Bh "Exit DOS" notify on DOS calls
               0Ch "Enter DOS" process is re-entering DOS
               0Dh "Terminate" INT 21/AH=4Ch or task freed
               0Eh "BrkNxt" Control-Break pressed
               0Fh "MgrCol" keyboard focus taken away
               10h "PgmInt" interrupted by API call from another task
               11h "BldOpen" call to INT 15/AX=DE01h
07h    BYTE    unused
08h    WORD    status bits
               bit 0: DESQview process
               bit 1: process swapped out
               bit 2: process is resized direct window (suspended)
               bit 3: process suspended itself
               bit 4: user suspended process
               bit 5: process is being created
               bit 6: task is freeing another task
0Ah    BYTE    01h if foreground-only window
----------15DE2D-----------------------------
INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
       AX = DE2Dh
       CX = direction
           FFFFh set socket handler
               DX:BX -> FAR function for socket interface
                       must be of the format described under INT 63"DESQview"
           other get socket handler
               Return: DX:BX -> socket handler
Notes:  DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
       the "set" subfunction is normally called only by SOCKET.DVR
SeeAlso: AX=DE2Eh,INT 63"DESQview"
----------15DE2E-----------------------------
INT 15 U - DESQview v2.50+ - SOCKET API
       AX = DE2Eh
       DX:BX -> socket record or 0000h:0000h to create a new socket record
Return: CX = size of socket record in bytes
       DX:BX -> socket record which was used
Notes:  DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
       socket records are allocated from common memory
       for Unix compatibility, each socket and connection on a socket is
         allocated a DOS file handle (referencing an SFT for NUL) which is
         used on various calls to specify which of possibly multiple
         connections is to be operated upon
SeeAlso: AX=DE2Dh,INT 63"DESQview"

Format of socket record:
Offset  Size    Description
00h    WORD    signature F0ADh
02h    WORD    function number
               0000h initialize socket???
               0001h "gethostname"
               0002h "ioctl" check for input
               0003h "sleep" delay for specified period
               0004h "htons" convert word to network (big-endian) byte order
               0005h "select"
               0006h "bsd_close"/"so_close" close socket
               0007h NOP
               0008h "connect" initiate connection on socket
               0009h "recv"/"recvfrom" read from socket
               000Ah "socket"
               000Bh ???
               000Ch "gethostbyname"
               000Dh "send"/"sendto" write to socket
               000Eh ??? (does something to all connections for process)
               000Fh "getpid" get process identifier
               0010h "gettimeofday"
               0011h "bind" assign name to socket
               0012h "listen" listen for connections on socket
               0013h "accept" accept connection on socket
               0014h connect to X server
               0015h "gethostbyaddr" get host information for an address
               0016h "getprotobyname"
               0017h "getprotobynumber"
               0018h "getservbyname"
               0019h "getservbyport"
               001Ah "getsockname" determine name bound to socket
               001Bh "getpeername" get name of connected peer
               001Ch "getsockopt"/"setsockopt"
               001Dh "so_exit"  close all sockets for calling process
               001Eh "issock" determine whether file handle references socket
               001Fh "so_attach" reattach previously detached socket
               0020h "so_detach" temporarily detach socket
               0021h get DESQview directory
               0022h "NewProc" start new application (see AX=102Ch)
               0023h "so_linkup"
               0024h canonicalize filename
               0025h indirect INT 15h call
               0026h Network Manager interface
               0027h "so_unlink"    close connection from "so_linkup"
               0028h "raisepriority"
               0029h "lowerpriority"
               002Ah ???
               FFFFh "NetExit" (appears to be a NOP)
04h    WORD    returned error code (see below)
06h    WORD    maximum message size??? (usually 0400h)
08h    WORD    PSP segment to use or 0000h if socket not valid
0Ah    WORD    scratch space (JFT size)
0Ch    DWORD   scratch space (JFT address)
10h    DWORD   mailbox handle (initialized by function 0000h)
14h    DWORD   timer object handle (initialized by function 0000h)
---function 0000h---
18h    WORD    (return) ???
---function 0001h---
18h    WORD    (return) status???
1Ah 128 BYTEs  (return) ASCIZ hostname (empty string if not on network)
9Ah    WORD    maximum length of hostname to return
---function 0002h---
18h    WORD    (return) status
1Ah    WORD    socket's file handle
1Ch    WORD    IOCTL function
               05h "FIONREAD" determine available input
               06h "FIONBIO" set blocking state of socket
1Eh    WORD    (return, subfn 05h) number of bytes available for reading
               (call, subfn 06h) 0000h blocking, nonzero nonblocking
---function 0003h---
18h  2 BYTEs   unused
1Ah    WORD    delay time in seconds
---function 0004h---
18h    WORD    (return) result in network (big-endian) byte order
1Ah    WORD    value to convert to network byte order
---function 0005h---
18h    WORD    (return) number of handles meeting the specified conditions???
1Ah    WORD    number of file handles in each bitset???
1Ch    DWORD   bitset of socket handles to check for readability???
20h    DWORD   bitset of socket handles to check for writability???
24h    DWORD   bitset of socket handles to check for errors???
28h    WORD    timeout in ??? or 0000h to block until some socket ready
2Ah    DWORD   ???
2Eh    DWORD   ???
---function 0006h---
18h    WORD    (return) status: 0000h if successful, FFFFh on error
1Ah    WORD    socket's file handle
---function 0008h---
18h    WORD    (return) status: 0000h if successful, FFFFh on error
1Ah    WORD    socket's file handle
1Ch    WORD    0001h if socket name specified, 0000h if not
1Eh    WORD    length of socket name
20h  N BYTEs   name of socket to which to connect
---function 0009h---
18h    WORD    (return) number of bytes actually read, 0000h if connection
                       closed, or FFFFh on error
1Ah    WORD    socket's file handle
1Ch    WORD    number of bytes to read
1Eh    WORD    flags
20h    WORD    0000h if no source address desired
               0001h if source address is to be stored (datagram sockets)
22h    WORD    length of source address
24h 110 BYTEs  source address
92h 1K BYTEs   buffer for data to be read
---function 000Ah---
18h    WORD    (return) socket's file handle or FFFFh on error
1Ah    WORD    address family (0001h,0002h)
1Ch    WORD    socket type
1Eh    WORD    protocol
---function 000Bh---
18h    WORD    (return) 0001h if ??? or FFFFh on error
1Ah    WORD    socket's file handle
1Eh    WORD    (call) ???
---function 000Ch---
18h 128 BYTEs  buffer containing ASCIZ hostname
               special case if empty string or "unix"
98h    ???     'struct hostent' ???
A2h    ???     (return) ???
---function 000Dh---
18h    WORD    (return) number of bytes actually written or FFFFh on error
1Ah    WORD    socket's file handle
1Ch    WORD    number of bytes to write
1Eh    WORD    number of bytes to follow in subsequent writes???
20h    WORD    flags
22h    WORD    0000h if no destination specified, 0001h if destination present
24h    WORD    ???
26h    WORD    length of destination address
28h 110 BYTEs  destination address
96h 1K BYTEs   buffer containing data to be written
---function 000Eh---
no additional fields
---function 000Fh---
18h    DWORD   (return) DESQview task handle of calling process
---function 0010h---
18h    DWORD   (return) current time
1Ch    DWORD   (return) ???
---function 0011h---
18h    WORD    (return) status: 0000h if successful, FFFFh on error
1Ah    WORD    socket's file handle
1Ch    WORD    length of name
1Eh  N BYTEs   buffer for socket name
---function 0012h---
18h    WORD    (return) status: 0000h if successful, FFFFh on error
1Ah    WORD    socket's file handle
1Ch    WORD    maximum backlog of pending connections allowed on socket
---function 0013h---
18h    WORD    (return) file handle for new connection or FFFFh on error
1Ah    WORD    listen()ing socket's file handle
1Ch    WORD    (call) length of buffer for connecting entity's address
               (return) actual length of address
1Eh  N BYTEs   buffer for connecting entity's address
---function 0014h---
18h    WORD    (return) socket's file handle or FFFFh on error
1Ah  4 BYTEs   (return) ???
1Eh    WORD    (return) ???
20h    WORD    (return) ???
22h 256 BYTEs  ASCIZ X display name
122h    ???
---function 0015h---
18h    WORD    (call) type of address??? (test for 0001h seen)
1Ah    WORD    (call) length of buffer for host address
1Ch 110 BYTEs  buffer containing host address
8Ah    WORD    (return) offset of official host name???
8Ch    WORD    (return) offset of alias list???
8Eh    WORD    (return) address type???
90h    WORD    (return) length of an address in bytes???
92h    WORD    (return) offset of address???
9Ah  N BYTEs   (return) ??? buffer for hostname, alias list, and host address
---function 0016h---
18h    ???     buffer for protocol name???
98h    ???
---function 0017h---
18h    WORD    (call) protocol number???
1Ah    WORD    (return) ??? or 0001h
---function 0018h---
18h 128 BYTEs  buffer containing ???
98h 128 BYTEs  buffer containing ???
118h    WORD    (return) ???
---function 0019h---
18h    WORD    length of name???
1Ah 128 BYTEs  buffer for name???
9Ah    WORD    (return) ???
---function 001Ah---
18h    WORD    (return) 0000h if successful, FFFFh on error
1Ah    WORD    socket's file handle
1Ch    WORD    (call) length of buffer for socket name
               (return) actual length of socket name
1Eh  N BYTEs   buffer for socket name
---function 001Bh---
18h    WORD    (return) status: 0000h if successful, FFFFh on error
1Ah    WORD    socket's file handle
1Ch    WORD    (call) size of buffer for name
               (return) actual size of name
1Eh  N BYTEs   buffer for peer's name
---function 001Ch---
18h    WORD    (return) status: 0000h if successful, FFFFh on error
1Ah    WORD    direction: 0000h to get, 0001h to set
1Ch    WORD    socket's file handle
1Eh    WORD    option level
20h    WORD    option name
22h    WORD    (call) length of buffer for option value
               (return) actual length of option value
24h  N BYTEs   buffer for option value
---function 001Dh---
no additional fields
---function 001Eh---
18h    WORD    (return) status: 0000h ??? or 0001h ???
1Ah    WORD    file handle which may or may not be a socket
---function 001Fh---
18h    WORD    (return) file handle or FFFFh on error
1Ah    DWORD   (call) pointer to Socket Context Record (see below) of a
                       previously detached socket
---function 0020h---
18h    WORD    (return) status: 0000h if successful or FFFFh on error
1Ah    WORD    socket's file handle
1Ch    DWORD   (return) pointer to Socket Context Record (see below) for
                       the file handle
---function 0021h---
18h 64 BYTEs   buffer for DESQview startup directory (see AX=DE25h)
---function 0022h---
18h    DWORD   (return) task handle of new application
1Ch    WORD    size of .DVP data
1Eh 129 BYTEs  ASCIZ ???
9Fh  N BYTEs   .DVP data (see AX=102Ch)
---function 0023h---
18h    WORD    (return) ??? or FFFFh on error
1Ah    WORD    socket's file handle???
---function 0024h---
18h    WORD    (return) DOS error code (see INT 21/AH=59h)
                       0000h if successful
1Ah 129 BYTEs  ASCIZ filename/pathname
11Bh 129 BYTEs  ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
---function 0025h---
18h    WORD    value of AX
1Ah    WORD    value of BX
1Ch    WORD    (call) value of CX for call if AH value other than 12h
               (call) number of stack parameters if AH value is 12h
               (return) returned CX for calls other than INT 15/AH=12h
1Eh    WORD    value of DX
20h    WORD    value of DI
22h    WORD    value of SI
24h    WORD    value of DS
26h    WORD    value of ES
28h    WORD    (return) value of FLAGS after call
2Ah  N DWORDs  (call) stack parameters for INT 15/AH=12h call
               (return) stack results from INT 15/AH=12h call
---function 0026h---
18h    WORD    (call) subfunction
                       0004h "so_exit"???
                       0005h "gethostbyname"
                       0006h "gethostname"
                       0009h "socket"
                       000Dh "gethostbyaddr"
                       000Fh "getprotobyname"
                       0010h get protocol name for protocol number
                       0011h "getservbyname"
                       0012h "getservbyport"
                       0013h "getsockname"???
                       0016h ???
                       0017h kill Network Manager
                       0018h "getpeername"???
                       0019h ??? (called by socket function 0000h)
                       001Ah ???
                       001Bh "so_linkup"
                       001Dh get network services
                       001Fh "getpwuid"
                       0020h "getpwnam"
                       0021h "getpwvar"
                       0022h "crypt"
                       0023h "so_unlink"
                       0024h "getlogin"
                       0028h "sethostent"
                       0029h "gethostent"
                       002Ah "soaddhost"
                       002Bh "soupdatehost"
                       002Ch "sodeletehost"
                       002Dh "setservent"
                       002Eh "getservent"
                       002Fh "setpwent"
                       0030h "getpwent"
                       0031h ???
                       0032h ???
                       0033h ???
                       0034h get IP network number
                       0035h ??? (pops up Network Manager window)
                       0037h ???
                       0038h get machine name and IP address
                       0039h ???
               (return) status???
1Ah    WORD    (call) size of parameter data
               (return) size of returned data
1Ch  N BYTEs   (call) parameter data required by call (see below)
               (return) result data (see below)
---function 0027h---
18h    WORD    (return) status: 0000h if successful, FFFFh on error
1Ah    WORD    socket's file handle
---functions 0028h,0029h---
18h    WORD    (call) file handle for which to set priority low/high
                       FFFFh to change calling task's priority
---function 002Ah---
no additional fields

Format of Function 0026h/Subfunction 000Fh data:
Offset  Size    Description
00h  8 BYTEs   (return) ???

Format of Function 0026h/Subfunction 0010h data:
Offset  Size    Description
00h  2 BYTEs   (return) ???
02h    WORD    (return) protocol number
04h    WORD    (call) protocol number for which to get name
06h    WORD    (return) ???
08h    var     (return) ASCIZ protocol name
N      var     (return) ASCIZ protocol name

Format of Function 0026h/Subfunction 0011h data:
Offset  Size    Description
00h  8 BYTEs   ???
08h    var     (return) ASCIZ protocol name
       var     (return) ASCIZ ??? name
       var     (return) ASCIZ ??? name

Format of Function 0026h/Subfunction 0012h data:
Offset  Size    Description
00h  8 BYTEs   (return) ???

Format of Function 0026h/Subfunction 0013h data:
Offset  Size    Description
00h 116 BYTEs  (return) ???

Format of Function 0026h/Subfunction 0016h data:
Offset  Size    Description
00h  4 BYTEs   (return) ???

Format of Function 0026h/Subfunction 0018h data:
Offset  Size    Description
00h 116 BYTEs  (return) ???

Format of Function 0026h/Subfunction 0019h data:
Offset  Size    Description
00h  4 BYTEs   (return) ???
04h    DWORD   (return) task handle of ???

Format of Function 0026h/Subfunction 001Ah data:
Offset  Size    Description
00h 38 BYTEs   (return) ???

Format of Function 0026h/Subfunction 001Bh data:
Offset  Size    Description
00h 10 BYTEs   (return) ???

Format of Function 0026h/Subfunction 001Dh return data [array]:
Offset  Size    Description
00h    WORD    ??? or FFFFh if end of array
02h  7 BYTEs   ???
09h 27 BYTEs   ASCIZ name of service

Format of Function 0026h/Subfunction 0024h return data:
Offset  Size    Description
00h    var     ASCIZ username

Format of Function 0026h/Subfunction 0030h data:
Offset  Size    Description
00h    WORD    (call) UID or 0000h for current user
               (return) ???
02h    WORD    (return) UID
04h  6 BYTEs   (return) ???
0Ah    var     (return) ASCIZ username
       var     (return) ASCIZ encrypted password
       var     (return) ASCIZ initial ("home") directory

Format of Function 0026h/Subfunction 0034h data:
Offset  Size    Description
00h  1-3 BYTEs IP network number of caller's machine (low byte first)

Format of Function 0026h/Subfunction 0038h return data:
Offset  Size    Description
00h    BYTE    ???
01h  4 BYTEs   IP address
05h    var     ASCIZ machine name
       ???

Values for error code:
0000h successful
0009h "BADF" bad file handle
000Ch "ENOMEM" out of memory
000Eh "EFAULT" bad address
0016h "EINVAL" invalid argument
0018h "EMFILE" too many open files
0020h "EPIPE" ??? broken pipe
0023h "EWOULDBLOCK" operation cannot be completed at this time
0024h "EINPROGRESS" operation now in progress
0026h "ENOTSOCK" socket invalid
0028h "EMSGSIZE" message too long to send atomically
002Ch "ESOCKTNOSUPPORT" socket type not supported
002Fh "EAFNOSUPPORT" address family not supp. by protocol fam.
0031h "EDOM" argument too large
0038h "EISCONN" socket is already connected
0039h "ENOTCONN" socket is not connected

Format of Socket Context Record:
Offset  Size    Description
00h    DWORD   pointer to next Socket Context Record, 0000h:0000h if last
04h    WORD    SFT index for socket, 00FFh if not connected, FFFFh if detached
06h    WORD    PSP segment of owner or 0000h
08h    WORD    mapping context of owning window
0Ah  2 BYTEs   ???
0Ch    WORD    address family
0Eh    WORD    socket type
10h    WORD    protocol
12h    WORD    socket state
               0001h created
               0002h bound
               0003h listening???
               0005h connected
14h    DWORD   timer object handle
18h    DWORD   object handle (mailbox???)
1Ch    DWORD   object handle of parent of above object or 0000h:0000h
20h    DWORD   pointer to ??? or 0000h
24h  6 BYTEs   ???
2Ah    WORD    file handle for socket or FFFFh
2Ch  2 BYTEs   ???
2Eh    WORD    nonzero if socket nonblocking
---network connections only---
30h  2 BYTEs   ???
32h    WORD    ???
34h  4 BYTEs   IP address of remote (big-endian)
38h  6 BYTEs   ???
----------15DE2F-----------------------------
INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
       AX = DE2Fh
Return: BX = status
           0001h keyboard focus has been given to a direct window since the
               last call
           0000h if not
Notes:  DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
       Quarterdeck states that this call will not be available under future
         versions of DESQview Classic
----------15DE30-----------------------------
INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
       AX = DE30h
Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
Notes:  DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
       you must first check the DESQview version to verify that it is 2.50 or
         greater
SeeAlso: INT 21/AH=2Bh/CX=4445h
----------15E00F-----------------------------
INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
       AX = E00Fh
       ES:BX -> start of 2nd processor's execution
Return: AL = 0Fh successful
          = 00h failure
SeeAlso: AX=E10Eh,AX=E200h
----------15E10E-----------------------------
INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
       AX = E10Eh
       ES:BX -> start of 2nd processor's execution
Return: AL = 0Fh successful (halted)
          = 00h failure (not halted)
SeeAlso: AX=E00Fh,AX=E200h
----------15E200-----------------------------
INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
       AX = E200h
Return: AX = 8000h if 2nd processor available
SeeAlso: AX=E00Fh,AX=E10Eh
----------15E4-------------------------------
INT 15 - ???
       AH = E4h
       AL = subfunction
           21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
       DL = ???
Return: ???
----------15F200CX454D-----------------------
INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALISATION CHECK ???
       AX = F200h
       CX = 454Dh
Return: CF clear if hardware already initialised
           BX = upper RAM areas in use
               bit 0: C000-C3FF
               bit 1: C400-C7FF
               ...
               bit 11: EC00-EFFF
       CF set if hardware not initialised yet
----------1600-------------------------------
INT 16 - KEYBOARD - GET KEYSTROKE
       AH = 00h
Return: AH = BIOS scan code
       AL = ASCII character
Notes:  on extended keyboards, this function discards any extended keystrokes,
         returning only when a non-extended keystroke is available
       the BIOS scan code is usually, but not always, the same as the hardware
         scan code processed by INT 09.  It is the same for ASCII keystrokes
         and most unshifted special keys (F-keys, arrow keys, etc.), but
         differs for shifted special keys.
SeeAlso: AH=01h,AH=05h,AH=10h,AH=20h,INT 18/AH=00h
----------1601-------------------------------
INT 16 - KEYBOARD - CHECK FOR KEYSTROKE
       AH = 01h
Return: ZF set if no keystroke available
       ZF clear if keystroke available
           AH = BIOS scan code
           AL = ASCII character
Note:   if a keystroke is present, it is not removed from the keyboard buffer;
         however, any extended keystrokes which are not compatible with 83/84-
         key keyboards are removed in the process of checking whether a
         non-extended keystroke is available
SeeAlso: AH=00h,AH=11h,AH=21h,INT 18/AH=01h
----------1602-------------------------------
INT 16 - KEYBOARD - GET SHIFT FLAGS
       AH = 02h
Return: AL = shift flags
           bit 7: Insert active
               6: CapsLock active
               5: NumLock active
               4: ScrollLock active
               3: Alt key pressed (either Alt on 101/102-key keyboards)
               2: Ctrl key pressed (either Ctrl on 101/102-key keyboards)
               1: left shift key pressed
               0: right shift key pressed
SeeAlso: AH=12h,AH=22h,INT 18/AH=02h
----------1603-------------------------------
INT 16 - KEYBOARD - SET TYPEMATIC RATE AND DELAY
       AH = 03h
       AL = subfunction
           00h set default delay and rate (PCjr and some PS/2)
           01h increase delay before repeat (PCjr)
           02h decrease repeat rate by factor of 2 (PCjr)
           03h increase delay and decrease repeat rate (PCjr)
           04h turn off typematic repeat (PCjr and some PS/2)
           05h set repeat rate and delay (AT,PS)
               BH = delay value (00h = 250ms to 03h = 1000ms)
               BL = repeat rate (00h=30/sec to 0Ch=10/sec [def] to 1Fh=2/sec)
           06h get current typematic rate and delay (newer PS/2s)
               Return: BL = repeat rate (see above)
                       BH = delay (see above)
Note:   use INT 16/AH=09h to determine whether some of the subfunctions are
         supported
SeeAlso: INT 16/AH=09h
----------1604-------------------------------
INT 16 - KEYBOARD - SET KEYCLICK (PCjr only)
       AH = 04h
       AL = keyclick state
           00h off
           01h on
SeeAlso: AH=03h
----------1605-------------------------------
INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
       AH = 05h
       CH = scan code
       CL = ASCII character
Return: AL = 00h if successful
            01h if keyboard buffer full
Note:   under DESQview, the following "keystrokes" invoke the following
         actions when they are read from the keyboard buffer:
               38FBh or FB00h  switch to next window (only if main menu
                               popped up)
               38FCh or FC00h  pop up DESQview main menu
               38FEh or FE00h  close the current window
               38FFh or FF00h  pop up DESQview learn menu
SeeAlso: AH=00h,AH=71h,AH=FFh,INT 15/AX=DE10h
----------1605-------------------------------
INT 16 - KEYBOARD - SELECT KEYBOARD LAYOUT (PCjr only)
       AH = 05h
       AL = function
           01h set keyboard layout to French
           02h set keyboard layout to German
           03h set keyboard layout to Italian
           04h set keyboard layout to Spanish
           05h set keyboard layout to UK
           80h check if function supported
               Return: AL <> 80h if supported
Return: ???
Note:   called by DOS 3.2 KEYBxx.COM
SeeAlso: AH=92h,AH=A2h
----------1609-------------------------------
INT 16 - KEYBOARD - GET KEYBOARD FUNCTIONALITY
       AH = 09h
Return: AL = keyboard functions supported
           bit 7: reserved
           bit 6:
           bit 5:
           bit 4: INT 16/AH=0Ah supported
           bit 3: INT 16/AX=0306h supported
           bit 2: INT 16/AX=0305h supported
           bit 1: INT 16/AX=0304h supported
           bit 0: INT 16/AX=0300h supported
Note:   this function is only available if bit 6 of the second feature byte
         returned by INT 15/AH=C0h is set
SeeAlso: AH=03h,AH=0Ah,INT 15/AH=C0h
----------160A-------------------------------
INT 16 - KEYBOARD - GET KEYBOARD ID
       AH = 0Ah
Return: BX = keyboard ID
Note:   check return value from AH=09h to determine whether this function is
         supported
SeeAlso: AH=09h
----------1610-------------------------------
INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (enhanced kbd support only)
       AH = 10h
Return: AH = BIOS scan code
       AL = ASCII character
Notes:  if no keystroke is available, this function waits until one is placed
         in the keyboard buffer
       the BIOS scan code is usually, but not always, the same as the hardware
         scan code processed by INT 09.  It is the same for ASCII keystrokes
         and most unshifted special keys (F-keys, arrow keys, etc.), but
         differs for shifted special keys.
       unlike AH=00h, this function does not discard extended keystrokes
SeeAlso: AH=00h,AH=11h,AH=20h
----------1611-------------------------------
INT 16 - KEYBOARD - CHECK FOR ENHANCED KEYSTROKE (enh kbd support only)
       AH = 11h
Return: ZF set if no keystroke available
       ZF clear if keystroke available
           AH = BIOS scan code
           AL = ASCII character
Notes:  if a keystroke is available, it is not removed from the keyboard buffer
       unlike AH=01h, this function does not discard extended keystrokes
SeeAlso: AH=01h,AH=10h,AH=21h
----------1612-------------------------------
INT 16 - KEYBOARD - GET EXTENDED SHIFT STATES (enh kbd support only)
       AH = 12h
Return: AL = shift flags 1 (same as returned by AH=02h)
           bit 7: Insert active
               6: CapsLock active
               5: NumLock active
               4: ScrollLock active
               3: Alt key pressed (either Alt on 101/102-key keyboards)
               2: Ctrl key pressed (either Ctrl on 101/102-key keyboards)
               1: left shift key pressed
               0: right shift key pressed
       AH = shift flags 2
           bit 7: SysRq key pressed
               6: CapsLock pressed
               5: NumLock pressed
               4: ScrollLock pressed
               3: right Alt key pressed
               2: right Ctrl key pressed
               1: left Alt key pressed
               0: left Ctrl key pressed
Notes:  AL bit 3 set only for left Alt key on many machines
       AH bits 7 through 4 always clear on a Compaq SLT/286
SeeAlso: AH=02h,AH=22h,AH=51h
----------1620-------------------------------
INT 16 - KEYBOARD - GET 122-KEY KEYSTROKE???
       AH = 20h
Return: ??? see AH=10h
Note:   use AH=09h to determine whether this function is supported
SeeAlso: AH=00h,AH=10h,AH=21h
----------1621-------------------------------
INT 16 - KEYBOARD - CHECK FOR 122-KEY KEYSTROKE???
       AH = 21h
Return: ??? see AH=11h
Note:   use AH=09h to determine whether this function is supported
SeeAlso: AH=01h,AH=11h,AH=20h
----------1622-------------------------------
INT 16 - KEYBOARD - GET 122-KEY SHIFT STATUS???
       AH = 22h
Return: ??? see AH=12h
Note:   use AH=09h to determine whether this function is supported
SeeAlso: AH=02h,AH=12h
----------164252-----------------------------
INT 16 - TEXTCAP 2.0 - INSTALLATION CHECK
       AX = 4252h
Return: AX = 5242h if installed
Note:   TEXTCAP 2.0 is a heavily modified (by Gisbert W. Selke) version of the
         PC Magazine utility CAPTURE written by Tom Kihlken
SeeAlso: AX=4253h,AX=4254h
----------164253-----------------------------
INT 16 - TEXTCAP 2.0 - UNINSTALL
       AX = 4253h
Return: AX = segment of resident code
Notes:  the uninstall code does not check whether interrupt vectors have been
         chained by other programs
       the caller must free the main memory block (using the returned segment)
SeeAlso: AX=4252h,AX=4254h
----------164254-----------------------------
INT 16 - TEXTCAP 2.0 - DUMP TEXT SCREEN TO FILE
       AX = 4254h
Return: AX = status
           4254h if screen dump will be written as soon as disk becomes idle
           5442h if screen dump written
SeeAlso: AX=4252h,AX=4253h
----------164500-----------------------------
INT 16 - Shamrock Software EMAIL - GET STATUS
       AX = 4500h
       DL = port number (01h = COM1)
       ES:BX -> 13-byte buffer for ASCIZ name
Return: AX = 4D00h if EMAIL installed on specified port
           ES:BX -> "" if no connection
                 -> "*" if connection but caller has not identified name
                 -> name otherwise
           CX = version (CH = major, CL = minor)
           DL = privilege level of user (00h = guest)
           DH = chosen language (00h German, 01h English)
SeeAlso: AX=4501h,AX=4502h
----------164501-----------------------------
INT 16 - Shamrock Software EMAIL - GET ELAPSED ONLINE TIME AND MAXIMUM TIME
       AX = 4501h
       DL = port number (01h = COM1)
Return: AX = 4D00h if EMAIL installed on specified port
           BX = maximum connect time in clock ticks
           CX = maximum connect time for guests (without name) in clock ticks
           DX = elapsed connect time of current user in clock ticks
SeeAlso: AX=4500h
----------164502-----------------------------
INT 16 - Shamrock Software EMAIL - GET CURRENT COMMUNICATIONS PARAMETERS
       AX = 4502h
       DL = port number (01h = COM1)
Return: AX = 4D00h if EMAIL installed on specified port
           BL = current value of serial port's Line Control Register
           BH = flags
               bit 0: ISO code
                   1: pause
                   2: linefeed
                   3: ANSI sequences
           CX = selected country code (33 = France, 49 = Germany, etc)
           DX = baudrate divisor (115200/DX = baudrate)
SeeAlso: AX=4500h
----------164503-----------------------------
INT 16 - Shamrock Software EMAIL - SPECIFY COMMAND-WORD FOR USER FUNCTION
       AX = 4503h
       DL = port number (01h = COM1)
       DH = maximum execution time in clock ticks (00h = 5 seconds)
       ES:BX -> ASCIZ string with new user command-word
Return: AX = 4D00h if EMAIL installed on specified port
Notes:  a single user command (consisting of only uppercase letters and digits)
         may be defined, and remains valid until it is overwritten or the
         EMAIL program terminates; the user command must be activated by
         calling AX=4504h at least once.
       an existing command word may be redefined with this function
SeeAlso: AX=4504h,AX=4505h
----------164504-----------------------------
INT 16 - Shamrock Software EMAIL - CHECK FOR USER FUNCTION COMMAND-WORD
       AX = 4504h
       DL = port number (01h = COM1)
       ES:BX -> 80-byte buffer for ASCIZ user input line
Return: AX = 4D00h if EMAIL installed on specified port
           DL = flags
               bit 0: user function supported (always set)
                   1: user entered user-function command word
           if DL bit 1 set,
               ES:BX buffer contains line entered by user which begins with
                       the defined command word and has been converted to all
                       caps
Note:   caller must process the returned commandline and invoke AX=4505h
         within five seconds with the result of that processing
SeeAlso: AX=4503h,AX=4505h
----------164505-----------------------------
INT 16 - Shamrock Software EMAIL - SEND RESULT OF USER FUNCTION
       AX = 4505h
       DL = port number (01h = COM1)
       DH = error flag
           bit 3: set on error
       ES:BX -> ASCIZ text to return to user, max 1024 bytes
Return: AH = 4Dh if EMAIL installed on specified port
       AL = status
           00h successful
           02h unable to perform function (timeout, prev call not complete)
           other error
Notes:  if the error flag in DH is set, the string is not sent and an error
         message is generated instead; if this function is not called within
         five seconds of AX=4504h, EMAIL automatically generates an error
         message
       the string is copied into an internal buffer, allowing this function's
         caller to continue immediately
SeeAlso: AX=4503h,AX=4504h,INT 17/AX=2400h
----------164506-----------------------------
INT 16 - Shamrock Software EMAIL - MONITOR XMODEM DOWNLOAD
       AX = 4506h
       DL = port number (01h = COM1)
       ES:BX -> 13-byte buffer for ASCIZ filename
Return: AX = 4D00h if EMAIL installed on specified port
           DH = Xmodem status
               00h no XGET command given
               01h XGET in progress
               02h XGET completed successfully
           ES:BX buffer filled with last filename given to XGET command
               (without path)
Note:   DH=02h will only be returned once per XGET; subsequent calls will
         return DH=00h
SeeAlso: AX=4500h,INT 17/AX=2408h
----------165000-----------------------------
INT 16 - KEYBOARD - AX PC - SET KEYBOARD COUNTRY CODE
       AX = 5000h
       BX = country code
           0001h USA (English), 0051h Japan
Return: AL = status
           00h successful
           01h bad country code
           02h other error
SeeAlso: AX=5001h,INT 10/AX=5000h,INT 17/AX=5000h
----------165001-----------------------------
INT 16 - KEYBOARD - AX PC - GET KEYBOARD COUNTRY CODE
       AX = 5001h
Return: AL = status
           00h successful
               BX = country code
           02h error
SeeAlso: AX=5000h,INT 10/AX=5001h,INT 17/AX=5001h
----------1651-------------------------------
INT 16 - KEYBOARD - AX PC - READ SHIFT KEY STATUS
       AH = 51h
Return: AL = standard shift key states (see AH=12h)
       AH = Kana lock (00h off, 01h on)
SeeAlso: AH=02h,AH=12h,AH=22h
----------165500-----------------------------
INT 16 - Microsoft Word internal - MICROSOFT WORD COOPERATION WITH TSR
       AX = 5500h
Return: AX = 4D53h ('MS') if keyboard TSR present
Notes:  during startup, Microsoft Word tries to communicate with any TSRs
         that are present through this call.
       if the return is not 4D53h, Word installs its own INT 09 and INT 16
         handlers; otherwise it assumes that the TSR will handle the keyboard
SeeAlso: INT 1A/AX=3601h
----------1655FF-----------------------------
INT 16 - Swap Utilities - ???
       AX = 55FFh
       BX >= 0004h
       CX = function
           0000h set ??? flag
           other clear ??? flag
Note:   present in SWAPSH and SWAPDT v1.77j, distributed with PC Tools 7
----------166969BX6968-----------------------
INT 16 - PC Tools v5.1+ BACKTALK - UNHOOK
       AX = 6969h
       BX = 6968h
Return: resident code unhooked, but not removed from memory
----------166969BX6969-----------------------
INT 16 - PC Tools v5.1+ BACKTALK - INSTALLATION CHECK
       AX = 6969h
       BX = 6969h
       DX = 0000h
Return: DX nonzero if installed
           BX = CS of resident code
           DX = PSP segment of resident code
           DS:SI -> ASCIZ identification string "CPoint Talk"
----------166F00BX0000-----------------------
INT 16 - HP Vectra - ??? - INSTALLATION CHECK
       AX = 6F00h
       BX = 0000h
Return: BX = 4850h if present
Note:   called by recent MS Mouse drivers
----------166F0D-----------------------------
INT 16 - HP Vectra - ???
       AX = 6F0Dh
       ???
Return: ???
Note:   called by MS Windows HPSYSTEM.DRV and HPEBIOS.386
SeeAlso: AX=6F0Eh
----------166F0E-----------------------------
INT 16 - HP Vectra - ???
       AX = 6F0Eh
       ???
Return: ???
Note:   called by MS Windows HPSYSTEM.DRV and HPEBIOS.386
SeeAlso: AX=6F0Dh
----------1670-------------------------------
INT 16 - FAKEY.COM - INSTALLATION CHECK
       AH = 70h
Return: AX = 1954h if installed
Note:   FAKEY is a keystroke faking utility by System Enhancement Associates
----------1671-------------------------------
INT 16 - FAKEY.COM - PUSH KEYSTROKES
       AH = 71h
       CX = number of keystrokes
       DS:SI -> array of words containing keystrokes to be returned by AH=00h
Note:   FAKEY is a keystroke faking utility by System Enhancement Associates
SeeAlso: AH=05h,AH=72h
----------1672-------------------------------
INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
       AH = 72h
Note:   FAKEY is a keystroke faking utility by System Enhancement Associates
SeeAlso: AH=71h
----------1673-------------------------------
INT 16 - FAKEY.COM - PLAY TONES
       AH = 73h
       CX = number of tones to play
       DS:SI -> array of tones (see below)
Note:   FAKEY is a keystroke faking utility by System Enhancement Associates
SeeAlso: INT 15/AX=1019h

Format of tone array entries:
Offset  Size    Description
00h    WORD    divisor for timer channel 2
02h    WORD    duration in clock ticks
----------1675-------------------------------
INT 16 - pcANYWHERE III - SET TICK COUNT FOR SCANNING
       AH = 75h
       AL = number of ticks between checks for new screen changes
----------1676-------------------------------
INT 16 - pcANYWHERE III - SET ERROR CHECKING TYPE
       AH = 76h
       AL = error checking type
           00h none
           01h fast
           02h slow
----------1677-------------------------------
INT 16 - pcANYWHERE III - LOG OFF
       AH = 77h
       AL = mode
           00h wait for another call
           01h leave in Memory Resident Mode
           02h leave in Automatic Mode
           FFh leave in current operating mode
----------167761-----------------------------
INT 16 - WATCH.COM v2.x-v3.0 - INSTALLATION CHECK
       AX = 7761h ('wa')
Return: AX = 5741h ('WA') if installed
Note:   WATCH.COM is part of the "TSR" package by Kim Kokkonen
SeeAlso: INT 21/AX=7761h
----------167788BX7789-----------------------
INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
       AX = 7788h
       BX = 7789h
       DS:SI -> signature "PUSHDIR VERSION 1.0"
Return: AX = 7789h if installed and signature correct
       BX = 7788h
       SI destroyed
----------1679-------------------------------
INT 16 - pcANYWHERE III - CHECK STATUS
       AH = 79h
Return: AX = status
           FFFFh if resident and active
           FFFEh if resident but not active
           FFFDh if in Memory Resident mode
           FFFCh if in Automatic mode
           other value if not resident
SeeAlso: AX=7B00h,INT 21/AX=2B44h
----------167A-------------------------------
INT 16 - pcANYWHERE III - CANCEL SESSION
       AH = 7Ah
----------167B00-----------------------------
INT 16 - pcANYWHERE III - SUSPEND
       AX = 7B00h
SeeAlso: AH=79h,AX=7B01h
----------167B01-----------------------------
INT 16 - pcANYWHERE III - RESUME
       AX = 7B01h
SeeAlso: AH=79h,AX=7B00h
----------167C-------------------------------
INT 16 - pcANYWHERE III - GET PORT CONFIGURATION
       AH = 7Ch
Return: AH = port number
       AL = baud rate
           00h = 50 baud
           01h = 75 baud
           02h = 110 baud
           03h = 134.5 baud
           04h = 150 baud
           05h = 300 baud
           06h = 600 baud
           07h = 1200 baud
           08h = 1800 baud
           09h = 2000 baud
           0Ah = 2400 baud
           0Bh = 4800 baud
           0Ch = 7200 baud
           0Dh = 9600 baud
           0Eh = 19200 baud
----------167D-------------------------------
INT 16 - pcANYWHERE III - GET/SET TERMINAL PARAMETERS
       AH = 7Dh
       AL = subfunction
           00h set terminal parameters
           01h get terminal parameters
           02h get configuration header and terminal parameters
       DS:CX -> terminal parameter block
----------167E-------------------------------
INT 16 - pcANYWHERE III - COMMUNICATIONS I/O THROUGH PORT
       AH = 7Eh
       AL = subfunction
           01h port input status
               Return AX = 0 if no characer ready,
                      AX = 1 if character ready
           02h port input character
               Return AL = received character
           03h port output character in CX
           11h hang up phone
----------167F-------------------------------
INT 16 - pcANYWHERE III - SET KEYBOARD/SCREEN MODE
       AH = 7Fh
       AL = subfunction
           00h enable remote keyboard only
           01h enable host keyboard only
           02h enable both keyboards
           08h display top 24 lines
           09h display bottom 24 lines
           10h Hayes modem
           11h other modem
           12h direct connect
----------1680-------------------------------
INT 16 - MAKEY.COM - INSTALLATION CHECK
       AH = 80h
Return: AX = 1954h if installed
Note:   MAKEY is a utility by System Enhancement Associates
----------168765BX4321-----------------------
INT 16 - AT.COM version 8/26/87 - API
       AX = 8765h
       BX = 4321h
       CX = ??? or FFFFh
       if CX = FFFFh
               DX = number of event to remove or FFFFh
Return: ES:BX -> event record array
Note:   AT.COM is a resident scheduler by Bill Frolik

Format of event record:
Offset  Size    Description
00h    BYTE    in-use flag (00h free, 01h in use, FFh end of array)
01h    BYTE    day of date on which to trigger
02h    BYTE    month of date on which to trigger
03h    BYTE    trigger time, minute
04h    BYTE    trigger time, hour
05h    WORD    offset of command to be executed
----------1692-------------------------------
INT 16 - ???
       AH = 92h
Return: AH <= 80h if ???
Note:   called by DOS 3.2 KEYBxx.COM and DOS 5.0 KEYB.COM
SeeAlso: AH=05h"PCjr",AH=A2h
----------1699-------------------------------
INT 16 - SCOUT v5.4 - GET ???
       AH = 99h
Return: AX = ABCDh
       BX:CX -> ??? (appears to be start of PSP for resident portion)
Note:   Scout is a memory-resident file manager by New-Ware
SeeAlso: AH=9Eh
----------169E-------------------------------
INT 16 - SCOUT v5.4 - INSTALLATION CHECK
       AH = 9Eh
Return: AX = ABCDh if installed
Note:   Scout is a memory-resident file manager by New-Ware
SeeAlso: AH=99h
----------16A2-------------------------------
INT 16 - ???
       AH = A2h
Return: AH <= 80h if ???
Note:   this function is called by DOS 5.0 KEYB.COM
SeeAlso: AH=92h
----------16AA-------------------------------
INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS
       AH = AAh
       Various registers set up by high level language.
Return: Graphics performed
Note:   PT stands for Paint Tools which is a graphics library for Turbo Pascal,
         Modula 2 and others from DataBiten in Sweden. The library is
         installed as a memory resident driver.
----------16CA--BX736B-----------------------
INT 16 - CtrlAlt Associates STACKEY.COM v3.00 - API
       AH = CAh
       BX = 736Bh ("sk")
       CX = 736Bh
       AL = function
           00h installation check
               Return: DX = words available in keyboard buffer
           01h place keystroke in buffer
               DX = keystroke (DH = scan code, DL = ASCII character)
               Return: DX = words available in keyboard buffer
                           FFFFh on error
           02h flush STACKEY and BIOS keyboard buffers
Return: AX = CAFFh if installed
           BX = segment of resident code
           CX = STACKEY version (CH = major, CL = minor)
Note:   STACKEY is a shareware keyboard-input faking TSR
----------16CA00BX6570-----------------------
INT 16 - CtrlAlt Associates EGAPAL.COM v1.00 - INSTALLATION CHECK
       AX = CA00h
       BX = 6570h ("ep")
       CX = 6570h
Return: AX = CAFFh if installed
           BX = segment of resident code
           CX = ??? (0090h)
Note:   EGAPAL is a TSR supplied with STACKEY which makes EGA palette settings
         permanent across mode switches
SeeAlso: AX=CA00h/BX=7670h
----------16CA00BX7670-----------------------
INT 16 - CtrlAlt Associates VGAPAL.COM v1.00 - INSTALLATION CHECK
       AX = CA00h
       BX = 7670h ("vp")
       CX = 7670h
Return: AX = CAFFh if installed
           BX = segment of resident code
           CX = ??? (0090h)
Note:   VGAPAL is a TSR supplied with STACKEY which makes VGA palette settings
         permanent across mode switches
SeeAlso: AX=CA00h/BX=6570h
----------16E0E0-----------------------------
INT 16 - TurboPower TSRs - ALTERNATE INSTALLATION CHECK
       AX = E0E0h
Return: AX = 1F1Fh if installed
           DWORD 0040h:00F0h -> last data block in TSR list (see AX=F0F0h)
Note:   the returned TSR list provides support for communication among TSRs
         built with TurboPower's Turbo Professional and Object Professional
         libraries for Turbo Pascal
SeeAlso: AX=F0F0h
----------16ED--BHED-------------------------
INT 16 - BORLAND TURBO LIGHTNING - API
       AH = EDh
       BH = EDh
       BL = function
           00h installation check
               Return: AX = 5205h
                       CH = major version
                       CL = minor version
           01h ???
           02h get resident CS
               Return: AX = code segment of resident portion
           03h get resident ???
               Return: AX = offset of some buffer in resident code seg
           04h ???
           05h set ???
               AL = 0 to 0Ch
               Return: AX = status
                           0000h if OK
                           0001h if out of range.
           06h ???
           07h ???
           08h ???
               AL = char???
               CX = ???
               DX = ???
               Return: AX = 0, 1 or 2
           09h ???
           0Ah ???
               CX = ???
               DX = ???
               Return: AX = ???
           0Bh ???
               DS:SI -> ???
               Return: AX = 0, 40h, 80h
           0Ch ???
               DS:SI -> ???
               Return: AH = 0
                       AL = ???
           0Dh set ???
               (sets an internal flag)
           0Eh ???
               DS:SI -> ???
               Return: AX = 0, 1 or 2.
           0Fh ???
           10h ???
Notes:  AX in general returns an error code from most functions.
----------16F0-------------------------------
INT 16 - Compaq 386 - SET CPU SPEED
       AH = F0h
       AL = speed
           00h equivalent to 6 MHz 80286 (COMMON)
           01h equivalent to 8 MHz 80286 (FAST)
           02h full 16 MHz (HIGH)
           03h toggles between 8 MHz-equivalent and speed set by system board
               switch (AUTO or HIGH)
           08h full 16 MHz except 8 MHz-equivalent during floppy disk access
           09h specify speed directly
               CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
SeeAlso: AH=F1h,AH=F3h
----------16F0F0-----------------------------
INT 16 - TurboPower TSRs - INSTALLATION CHECK
       AX = F0F0h
Return: AX = 0F0Fh if installed
           ES:DI -> last data block in TSR list
Note:   the returned TSR list provides support for communication among TSRs
         built with TurboPower's Turbo Professional and Object Professional
         libraries for Turbo Pascal
SeeAlso: AX=E0E0h

Format of data block:
Offset  Size    Description
00h    DWORD   pointer to program tag (counted ASCII string)
04h    WORD    interface version number (0400h)
06h    DWORD   pointer to command entry point
0Ah    DWORD   pointer to previous data block (0000h:0000h if none)
0Eh    DWORD   pointer to next data block (0000h:0000h if none)
---swappable TSRs only---
12h    DWORD   pointer to swapping data
16h    DWORD   pointer to user data
       more???
----------16F1-------------------------------
INT 16 - Compaq 386 - READ CURRENT CPU SPEED
       AH = F1h
Return: AL = speed code (see AH=F0h)
            if AL = 09h, CX = speed code
SeeAlso: AH=F0h,AH=F3h
----------16F2-------------------------------
INT 16 - Compaq 386 - DETERMINE ATTACHED KEYBOARD TYPE
       AH = F2h
Return: AL = type
           00h if 11-bit AT keyboard is in use
           01h if 9-bit PC keyboard is in use
----------16F3-------------------------------
INT 16 - Compaq 80286s - SET CPU SPEED LIMIT (OVERRIDE JUMPER)
       AH = F3h
       AL = 00h limit is 6 Mhz
          = 01h limit is 8 Mhz/6 Mhz
SeeAlso: AH=F0h,AH=F1h
----------16F398-----------------------------
INT 16 U - NORTON GUIDES - INSTALLATION CHECK
       AX = F398h
Return: AX = 6A73h ("js")
       BH = scan code of current hot key
       BL = ASCII code of current hot key
Note:   NG.EXE was written by John Socha
----------16F400-----------------------------
INT 16 - Compaq Systempro - CACHE CONTROLLER STATUS
       AX = F400h
Return: AH = E2h
       AL = status
           00h not present
           01h enabled
           02h disabled
SeeAlso: AX=F401h,AX=F402h
----------16F401-----------------------------
INT 16 - Compaq Systempro - ENABLE CACHE CONTROLLER
       AX = F401h
Return: AX = E201h
SeeAlso: AX=F400h,AX=F402h
----------16F402-----------------------------
INT 16 - Compaq Systempro - DISABLE CACHE CONTROLLER
       AX = F402h
Return: AX = E202h
SeeAlso: AX=F400h,AX=F401h
----------16FEA4-----------------------------
INT 16 - PC Tools 7 CPSCHED/DESKTOP - ???
       AX = FEA4h
       ???
Return: ???
----------16FEC6-----------------------------
INT 16 - PC Tools 7 CPSCHED - ???
       AX = FEC6h
       DL = ???
       ???
Return: ???
----------16FED3-----------------------------
INT 16 - PC Tools 7 CPSCHED/DESKTOP - ???
       AX = FED3h
       ???
Return: ???
----------16FEDC-----------------------------
INT 16 - PC Tools 7 CPSCHED - ???
       AX = FEDCh
       ???
Return: ???
----------16FEEFCX0000-----------------------
INT 16 - PC Tools 7 CPSCHED/DESKTOP - INSTALLATION CHECK
       AX = FEEFh
       CX = 0000h
Return: CX = ABCDh if PC Tools scheduler (CPSCHED or DESKTOP) installed
           BX = segment of resident portion
SeeAlso: AX=FFEFh
----------16FEF1-----------------------------
INT 16 - PC Tools 7 CPSCHED/DESKTOP - ???
       AX = FEF1h
       ???
Return: ???
----------16FF-------------------------------
INT 16 - KEYBOARD - KBUF extensions - ADD KEY TO TAIL OF KEYBOARD BUFFER
       AH = FFh
       DX = scan code
Return: AL = status
           00h success
           01h failure
Note:   KBUF is a keyboard buffer expander by Mark Adler
SeeAlso: AH=05h
----------16FF-------------------------------
INT 16 - OPTIMA 1024 VGA-Sync - QUERY ZOOM INTERRUPT
       AH = FFh
Return: AL = interrupt number to which BIOS keyboard handler has been relocated
       AL+1 = Zoom interrupt number
       BX = hotkey
Note:   The default interrupts are 60h for keyboard and 61h for Zoom interrupt;
         the default hot key is F10
SeeAlso: INT 60"OPTIMA"
----------16FF91-----------------------------
INT 16 - PC Tools 7 DESKTOP - ???
       AX = FF91h
       ???
Return: AX = 0000h
SeeAlso: AX=FF92h
----------16FF92-----------------------------
INT 16 - PC Tools 7 DESKTOP - ???
       AX = FF92h
       ???
Return: AX = 0000h
Note:   like AX=FF91h, but temporarily sets ??? to 3
SeeAlso: AX=FF91h
----------16FF93-----------------------------
INT 16 - PC Tools 7 DESKTOP - SET ??? FLAG
       AX = FF93h
       ???
Return: ???
----------16FF94-----------------------------
INT 16 - PC Tools 7 DESKTOP - SET ???
       AX = FF94h
       CX = ???
       ???
Return: ???
----------16FF95-----------------------------
INT 16 - PC Tools 7 DESKTOP - SET ???
       AX = FF95h
       BX = ???
       ???
Return: ???
----------16FF96-----------------------------
INT 16 - PC Tools 7 DESKTOP - ???
       AX = FF96h
       CL = ???
Return: ???
----------16FF97-----------------------------
INT 16 - PC Tools 7 DESKTOP - ???
       AX = FF97h
       ???
Return: ???
----------16FF98-----------------------------
INT 16 - PC Tools 7 DESKTOP - READ ??? FROM \DESK.OVL FILE
       AX = FF98h
       DX = offset in file
       ???
Return: ???
----------16FF99-----------------------------
INT 16 - PC Tools 7 DESKTOP - ???
       AX = FF99h
       ???
Return: ???
----------16FF9A-----------------------------
INT 16 - PC Tools 7 DESKTOP - GET NAME OF COLOR SCHEME
       AX = FF9Ah
Return: ES:BX -> name of current color scheme
Note:   available even if not popped up
----------16FF9B-----------------------------
INT 16 - PC Tools 7 DESKTOP - UNUSED???
       AX = FF9Bh
       ???
Return: ???
Note:   sounds triple-length beep
----------16FF9E-----------------------------
INT 16 - PC Tools 7 DESKTOP - ???
       AX = FF9Eh
       DL = ???
       ???
Return: ???
----------16FFA1-----------------------------
INT 16 - PC Tools 7 DESKTOP - ???
       AX = FFA1h
       ???
Return: ???
----------16FFA2-----------------------------
INT 16 - PC Tools 7 DESKTOP - ???
       AX = FFA2h
       ???
Return: ???
----------16FFA3BX0000-----------------------
INT 16 - PC Tools 7 DATAMON - INSTALLATION CHECK
       AX = FFA3h
       BX = 0000h
       CX = 0000h
Return: AX = segment of resident code
       BX = 5555h
       CX = 5555h
----------16FFA3BX0001-----------------------
INT 16 - PC Tools 7 DATAMON - GET ???
       AX = FFA3h
       BX = 0001h
       CX = 0001h
Return: AX:BX -> ???
       CX = BX
----------16FFA3BX0002-----------------------
INT 16 - PC Tools 7 DATAMON - GET ???
       AX = FFA3h
       BX = 0002h
       CX = 0002h
Return: AX = ??? (0 or 1)
       CX = BX = AX
----------16FFA3BX0003-----------------------
INT 16 - PC Tools 7 DATAMON - GET ???
       AX = FFA3h
       BX = 0003h
       CX = 0003h
Return: AX = ??? (0 or 1)
       CX = BX = AX
----------16FFA3BX0004-----------------------
INT 16 - PC Tools 7 DATAMON - SET ??? FLAG
       AX = FFA3h
       BX = 0004h
       CX = 0004h
SeeAlso: AX=FFA3h/BX=0005h
----------16FFA3BX0005-----------------------
INT 16 - PC Tools 7 DATAMON - CLEAR ??? FLAG
       AX = FFA3h
       BX = 0005h
       CX = 0005h
SeeAlso: AX=FFA3h/BX=0004h
----------16FFA3BX0006-----------------------
INT 16 - PC Tools 7 DATAMON - SET PSP SEGMENT ???
       AX = FFA3h
       BX = 0006h
       CX = 0006h
       DX = current PSP segment as known to DOS??? or 0000h
----------16FFA4-----------------------------
INT 16 - PC Tools 7 DESKTOP - ???
       AX = FFA4h
       ???
Return: ???
Note:   available even when not popped up
----------16FFA5CX1111-----------------------
INT 16 - PC-Cache v6+ - INSTALLATION CHECK
       AX = FFA5h
       CX = 1111h
Return: CH = 00h if installed
           ES:DI -> internal data (see below)
           CL = cache state
               01h enabled
               02h disabled
SeeAlso: INT 13/AH=A0h,INT 21/AH=2Bh/CX=4358h

Format of internal data:
Offset  Size    Description
-1Ch 20 BYTEs   cached drive list, one byte per drive A: to T:
               each byte is either blank (20h) or drive letter (41h-54h)
-8     BYTE    ???
-7     WORD    number of physical transfers (scaled down to 0000h-7FFFh)
-5     WORD    number of saved transfers (scaled down to 0000h-7FFFh)
-3   3 BYTEs   ???
----------16FFA5CXAAAA-----------------------
INT 16 - PC-Cache v6+ - ENABLE DELAYED WRITES
       AX = FFA5h
       CX = AAAAh
Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
SeeAlso: AX=FFA5h/CX=CCCCh
----------16FFA5CXCCCC-----------------------
INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES
       AX = FFA5h
       CX = CCCCh
Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
Note:   delayed writes are automatically disabled on EXECing
         (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??;
         however, delayed writes are not automatically reenabled upon the
         program's termination in v6.
SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh
----------16FFA5CXDDDD-----------------------
INT 16 - PC-Cache v6+ - FLUSH AND DISABLE CACHE
       AX = FFA5h
       CX = DDDDh
SeeAlso: AX=FFA5h/CX=EEEEh,AX=FFA5h/CX=FFFFh
----------16FFA5CXEEEE-----------------------
INT 16 - PC-Cache v6+ - ENABLE CACHE
       AX = FFA5h
       CX = EEEEh
SeeAlso: AX=FFA5h/CX=DDDDh
----------16FFA5CXFFFF-----------------------
INT 16 - PC-Cache v6+ - FLUSH CACHE
       AX = FFA5h
       CX = FFFFh
SeeAlso: AX=FFA5h/CX=CCCCh,AX=FFA5h/CX=DDDDh,INT 13/AH=A1h
----------16FFA6-----------------------------
INT 16 - PC Tools v6.0+ DESKTOP API - GET ???
       AX = FFA6h
Return: DS:SI -> ???
Note:   available only when popped up
----------16FFA7-----------------------------
INT 16 - PC Tools v6.0+ DESKTOP API - GET ??? PATH
       AX = FFA7h
Return: DS:SI -> ASCIZ path (directory from which PCTools was run???)
----------16FFA8-----------------------------
INT 16 - PC Tools v6.0+ DESKTOP API - ???
       AX = FFA8h
       DS:SI -> three consecutive ASCIZ strings for ??? (max 256 bytes total)
       ???
Return: ???
Notes:  available only when popped up
       strings copied into internal buffer, among other actions
----------16FFA9-----------------------------
INT 16 - PC Tools v6.0+ DESKTOP API - GET VERSION STRING
       AX = FFA9h
Return: DS:SI -> version string
----------16FFAA-----------------------------
INT 16 - PC Tools v6.0+ DESKTOP API - ???
       AX = FFAAh
       ???
Return: ???
Note:   available only when popped up
----------16FFAB-----------------------------
INT 16 - PC Tools v6.0+ DESKTOP API - GET EDITOR SETTINGS???
       AX = FFABh
Return: DS:SI -> editor setting strings???
----------16FFAC-----------------------------
INT 16 - PC Tools v6.0+ DESKTOP API - SET ???
       AX = FFACh
       DL = ???
Note:   available only when popped up
----------16FFAD-----------------------------
INT 16 - PC Tools v6.0+ DESKTOP API - SET ???
       AX = FFADh
       DL = ???
----------16FFAE-----------------------------
INT 16 - PC Tools v6.0+ DESKTOP API - GET ???
       AX = FFAEh
Return: AL = ???
----------16FFAF-----------------------------
INT 16 - PC Tools v6.0+ DESKTOP API - SET ???
       AX = FFAFh
       DL = ???
----------16FFB0-----------------------------
INT 16 - PC Tools v6.0+ DESKTOP API - SET ???
       AX = FFB0h
       BL = ???
----------16FFB1-----------------------------
INT 16 - PC Tools v6.0+ DESKTOP API - ???
       AX = FFB1h
       ???
Return: ???
----------16FFB2-----------------------------
INT 16 - PC Tools v5.5+ DESKTOP API - GET ???
       AX = FFB2h
Return: DS:SI -> ???
----------16FFB3-----------------------------
INT 16 - PC Tools v5.5+ DESKTOP API - ???
       AX = FFB3h
       ???
Return: ???
Note:   available only when popped up
----------16FFB4-----------------------------
INT 16 - PC Tools v5.5+ DESKTOP API - SET ??? FLAG
       AX = FFB4h
Note:   available only when popped up
SeeAlso: AX=FFBBh
----------16FFB5-----------------------------
INT 16 - PC Tools v5.5+ DESKTOP API - GET/SET WINDOW PARAMETERS
       AX = FFB5h
       BX = window specifier (000Fh to 0019h) (see below)
       DX = 0000h get, nonzero = set
       ES:DI -> window parameter buffer (see below)
SeeAlso: AX=FFCBh

Values for window specifier:
000Fh  comm/FAX
0014h  hotkey selection
0015h  ASCII table
0016h  system colors menu

Format of window parameters:
Offset  Size    Description
00h    BYTE    rows in window, not counting frame
01h    BYTE    columns in window, not counting frame
02h    BYTE    row number of top of window
03h    BYTE    2*column number of left of window
04h    BYTE    character attribute for ???
05h    BYTE    character attribute for background/border
06h    BYTE    character attribute for ???
07h    DWORD   pointer to ??? on screen
0Bh  4 BYTEs   ???
0Fh    BYTE    nonzero if window may be resized
Note:   if running in monochrome mode, character attributes at offsets 04h to
         06h are stored unchanged, but attributes other than 07h, 0Fh, or 70h
         are changed to 07h on reading
----------16FFB6-----------------------------
INT 16 - PC Tools v5.5+ DESKTOP API - GET ???
       AX = FFB6h
Return: AH = ???
       AL = ???
----------16FFB7-----------------------------
INT 16 - PC Tools v5.5+ DESKTOP API - GET/SET ???
       AX = FFB7h
       BX = direction
           0000h copy to buffer
           else  copy from buffer
       DS:SI -> 70-byte buffer with ???
Return: data copied
Note:   available only when popped up under v6.0+
----------16FFB8-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - GET/SET???
       AX = FFB8h
       BH = subfunction
           00h get
               Return: BL = old value of ???
                       CL = old value of ??? (v6.0+)
                       CH = old value of ??? (v6.0+)
           nonzero set
               BL = new value for ???
               CL = new value for ??? (v6.0+)
               CH = new value for ??? (v6.0+)
               DH = ???
               Return: AL = old value replaced by CL (v6.0+)
                       AH = old value replaced by CH (v6.0+)
----------16FFB9-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFB9h
       ???
Return: AX = ???
       CX = ???
       DS:SI -> ???
       ES:DI -> ???
----------16FFBA-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFBAh
       ???
Return: AX = ???
Note:   available only when popped up
----------16FFBB-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - CLEAR ??? FLAG
       AX = FFBBh
Note:   available only when popped up
SeeAlso: AX=FFB4h
----------16FFBC-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - RESTORE ORIGINAL SCREEN???
       AX = FFBCh
----------16FFBD-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ??? DATABASE INDEXING MESSAGES
       AX = FFBDh
       ???
Return: ???
----------16FFBE-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFBEh
       ???
Return: ???
Note:   available only when popped up
----------16FFBF-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFBFh
       BX = DOS file handle to write on
       ???
Return: ???
Note:   available only when popped up
----------16FFC0-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFC0h
       ???
Return: AX = 0000h if successful
       AX = FFFFh on error
Note:   available only when popped up
----------16FFC1-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFC1h
       BL = ???
       ES:DI -> data structure (see below)
       ???
Return: AX = ???
Note:   available only when popped up

Format of data structure:
Offset  Size    Description
00h    WORD    ???
02h    WORD    ???
04h    WORD    ???
06h    WORD    ???
08h    WORD    ???
0Ah    BYTE    ???
0Bh    BYTE    ???
       ???
----------16FFC2-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFC2h
       ???
Return: AH = ???
       CX = ???
       DH = ???
       DL = ???
Note:   available only when popped up
SeeAlso: AX=FFC3h
----------16FFC3-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFC3h
       ???
Return: AH = ???
       CX = ???
       DH = ???
       DL = ???
Note:   available only when popped up
SeeAlso: AX=FFC2h
----------16FFC4-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
       AX = FFC4h
Return: AL = ???
       BX = segment of scratch space???
       CX = segment of stored screen data (section covered by window???)
       DX = segment of window parameters for ???
       ES:BP -> ???
Note:   available only when popped up in versions prior to 6.0
----------16FFC5-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - CHECK WHETHER DESKTOP LOADED RESIDENT
       AX = FFC5h
Return: BL = nonzero if loaded resident
          = 00h if nonresident
Note:   available only when popped up; should call AX=FFEFh first to ensure
         that DESKTOP is active
SeeAlso: AX=FFEFh,AX=FFF3h
----------16FFC6-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
       AX = FFC6h
       BL = new value for ???
----------16FFC7-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - REMOVE WINDOW
       AX = FFC7h
       ???
Return: ???
----------16FFC8-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
       AX = FFC8h
Return: DS:SI -> ???
Note:   valid only while popped up
----------16FFC9-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - COPY DATA TO CLIPBOARD
       AX = FFC9h
       DS:SI -> characters to store in clipboard
       CX = size in bytes
Return: CF set on error
Notes:  available only when popped up
       while copying, bytes of 00h and 0Ah are skipped
----------16FFCA-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
       AX = FFCAh
       DX = ???
Return: AX destroyed
Note:   available only when popped up
----------16FFCB-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - SELECT WINDOW PARAMETERS???
       AX = FFCBh
       DX = window specifier???
Return: AX destroyed
Note:   available only when popped up
SeeAlso: AX=FFB5h
----------16FFCC-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY ASCIZ STRING CENTERED IN WINDOW
       AX = FFCCh
       DS:SI -> ASCIZ string
Return: AX = ???
       CX = ???
       ES:DI -> address past last character displayed (v5.1/5.5)
             -> ??? on menu bar (v6.0)
----------16FFCD-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFCDh
       DS:DX -> ???
Return: ???
Note:   available only when popped up
----------16FFCE-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - SET ??? DELAYS
       AX = FFCEh
       CX = ???
Return: nothing???
----------16FFCF-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - CLOSE PRINTER/PRINT FILE
       AX = FFCFh
Note:   available only when popped up
----------16FFD0-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - PREPARE TO PRINT???
       AX = FFD0h
       ???
Return: ???
Note:   available only when popped up
----------16FFD1-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY PRINT OPTIONS MENU
       AX = FFD1h
Return: BX = number of copies
       DX = destination
           00h cancel
           01h LPT1
           02h LPT2
           03h LPT3
           04h COM1
           05h COM2
           06h disk file
Note:   available only when popped up
----------16FFD2-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFD2h
       BX = ???
Return: BL = ???
Note:   available only when popped up
----------16FFD3-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFD3h
       DS:SI -> 92-byte data record for ???
Return: ???
----------16FFD4BH3C-------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - CREATE/OPEN/DELETE FILE
       AX = FFD4h
       BH = 3Ch create file (with no attributes)
            3Dh open file
            41h delete file
       BL = access mode
            00h read only
            01h write only
            02h read/write
       DS:SI -> ASCIZ filename
Return: BX = file handle
           0000h on error
Note:   operation is attempted in (in order) the directory from which the
         desktop was started/run???, the directory specified with the
         filename, X:\PCTOOLS\, and X:\
----------16FFD5-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFD5h
       ???
Return: ???
Note:   available only when popped up
----------16FFD6-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFD6h
       BX = ???
       CX = ???
       DX = offset in ???
       ???
Return: ???
Note:   available only when popped up
----------16FFD7-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFD7h
       ???
Return: BL = ???
Note:   available only when popped up
----------16FFD8-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - SAFE CREATE FILE
       AX = FFD8h
       DS:BX -> ASCIZ filename
Return: BX = file handle
           0000h on error
Note:   pops up confirmation menu if file already exists
       only available when popped up???
----------16FFD9-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
       AX = FFD9h
Return: AX = ???
Note:   available only when popped up
----------16FFDA-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - GET NAME OF LAST FILE OPENED
       AX = FFDAh
       DS:SI -> ??? (v5.1/5.5 only)
Return: DS:SI -> filename
----------16FFDB-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
       AX = FFDBh
       BL = ???
Note:   available only when popped up
----------16FFDC-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - UNHOOK
       AX = FFDCh
Return: interrupt vectors 09h, 10h (v6.0+), 16h, 1Ch, and 21h restored to
         original values
----------16FFDDBX0000-----------------------
INT 16 - PC Tools v5.1+ PCShell API - INSTALLATION CHECK
       AX = FFDDh
       BX = 0000h
Return: CX = 5555h
       DX = 5555h if PCShell installed in resident mode
----------16FFDDBX0001-----------------------
INT 16 - PC Tools v5.1+ PCShell API - REQUEST POP-UP
       AX = FFDDh
       BX = 0001h
SeeAlso: AX=FFDDh/BX=0003h
----------16FFDDBX0002-----------------------
INT 16 - PC Tools v5.1-5.5 PCShell API - GET ???
       AX = FFDDh
       BX = 0002h
Return: AL =
           00h ???
           01h ???
Note:   PCShell v6.0+ displays the error message "Incorrect PCRUN version",
         awaits a keystroke, and aborts the current process
----------16FFDDBX0003-----------------------
INT 16 - PC Tools v5.1+ PCShell API - REQUEST POP-UP
       AX = FFDDh
       BX = 0003h
SeeAlso: AX=FFDDh/BX=0001h
----------16FFDDBX0004-----------------------
INT 16 - PC Tools v5.1+ PCShell API - GET ???
       AX = FFDDh
       BX = 0004h
Return: CF clear if successful
           DS:SI -> ???
----------16FFDDBX0005-----------------------
INT 16 - PC Tools v5.1+ PCShell API - ???
       AX = FFDDh
       BX = 0005h
       ???
Return: ???
----------16FFDDBX0006-----------------------
INT 16 - PC Tools v5.1+ PCShell API - ???
       AX = FFDDh
       BX = 0006h
       ???
Return: ???
----------16FFDDBX0007-----------------------
INT 16 - PC Tools v5.1+ PCShell API - SET ??? FLAG
       AX = FFDDh
       BX = 0007h
Return: CF clear if successful
SeeAlso: AX=FFDDh/BX=0008h
----------16FFDDBX0008-----------------------
INT 16 - PC Tools v5.1+ PCShell API - CLEAR ??? FLAG
       AX = FFDDh
       BX = 0008h
Return: ???
SeeAlso: AX=FFDDh/BX=0007h
----------16FFDDBX0009-----------------------
INT 16 - PC Tools v6.0+ PCShell API - GET PCRUN PARAMETERS
       AX = FFDDh
       BX = 0009h
Return: CF clear if successful
           DS:SI -> list of pointers (see below)

Format of returned pointer list:
Offset  Size    Description
00h    WORD    offset of WORD containing ???
02h    WORD    offset of name of program to execute
04h    WORD    offset of 80-byte buffer for ???
06h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
08h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
----------16FFDDBX000A-----------------------
INT 16 - PC Tools v6.0+ PCRUN API - INSTALLATION CHECK
       AX = FFDDh
       BX = 000Ah
Return: CX = 5555h if running
       DX = 5555h
Note:   also sets a flag
----------16FFDDBX000B-----------------------
INT 16 - PC Tools v6.0+ PCRUN API - ???
       AX = FFDDh
       BX = 000Bh
       ???
Return: CX = 5555h if PCRUN active
       DX = 5555h
Note:   also clears flag set by AX=FFDDh/BX=000Ah
----------16FFDE-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY POPUP MENU
       AX = FFDEh
       DS:DX -> menu description (must be on a paragraph boundary)
Return: AX = ???
           AL seems to be the number of the selected button
Note:   available only when popped up
SeeAlso: AX=FFEEh
----------16FFDF-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFDFh
       ???
Return: ???
----------16FFE0-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFE0h
       CX = ???
       DX = ???
Note:   available only when popped up
----------16FFE1-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - BEEP
       AX = FFE1h
----------16FFE2-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFE2h
       DX = ???
Return: ???
Note:   available only when popped up
----------16FFE3-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - PRINT CHARACTER
       AX = FFE3h
       BL = character to print to currently open printer or print file
Return: CF set on error
Note:   available only when popped up
SeeAlso: INT 17/AH=00h
----------16FFE4-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFE4h
       DX = segment of ???
Return: ???
Note:   available only when popped up
----------16FFE5-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - POP UP FILE SELECTION MENU
       AX = FFE5h
       DS:SI -> ASCIZ wildcard filespec followed by ASCIZ menu title
       DX = segment of window parameters???
Return: AX = DOS file handle for file
               DS:DX -> filename???
          = FFFFh if cancelled by user
Note:   available only when popped up
SeeAlso: AX=FFDAh
----------16FFE6-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - CHECK FOR AND GET KEYSTROKE
       AX = FFE6h
Return: AX = 0000h if no key available
            else  BIOS keycode
Notes:  available only when popped up
       invokes INT 28 idle interrupt before checking for key
----------16FFE7-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFE7h
       BX = segment of ???
Return: ???
Note:   available only when popped up
----------16FFE8-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY NUMBER
       AX = FFE8h
       CX = number
       DH = attribute
       DS:SI -> destination for ASCII number
Return: DS:SI buffer filled in with alternating characters and attributes
----------16FFE9-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - GET FILE LIST???
       AX = FFE9h
Return: BX = segment of file/directory list (14 bytes per file, NUL-padded)
Note:   available only when popped up
----------16FFEA-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY COUNTED STRING
       AX = FFEAh
       DS:SI -> counted string (count byte followed by string)
Return: ???
Note:   available only when popped up
----------16FFEB-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFEBh
       ???
Return: ???
----------16FFEC-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - GET KEY
       AX = FFECh
       DS:SI -> FAR routine to ???
       BX = ???
       ???
Return: AX = keystroke
           FFFFh if F10 pressed to go to menu
Notes:  available only when popped up
       invokes INT 28 while waiting for keystroke
       F10 is hotkey to Desktop menu
----------16FFED-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
       AX = FFEDh
Return: AX = ???
Note:   available only when popped up
----------16FFEE-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE PULLDOWN MENUS
       AX = FFEEh
       DS:SI -> pulldown menu system description (see below)
Return: AX destroyed
Notes:  available only when popped up
       if the accessory does not need any menu items of its own, it should
         call AX=FFFAh instead
SeeAlso: AX=FFF7h,AX=FFFAh

Format of pulldown menu system description:
Offset  Size    Description
00h    WORD    offset of menu bar contents (counted string)
02h    WORD    number of items on menu bar
04h 10 BYTEs   scan codes for hotkeying to each of up to ten menu items
0Eh 10 BYTEs   which character to highlight in each menu item (01h=first)
18h    WORD    offset of first menu definition (see below)
1Ah    WORD    offset of second menu definition
       ...

Format of menu definition:
Offset  Size    Description
00h    WORD    offset of menu contents (see below)
02h    WORD    number of entries in menu
04h    for each entry:
               Offset  Size    Description
                00h    BYTE    scancode of Alt-key to invoke entry
                01h    BYTE    character to highlight (01h=first, etc)
                02h    WORD    offset of FAR routine to handle selection

Format of menu contents:
Offset  Size    Description
00h    BYTE    number of lines in menu
01h    BYTE    width of menu
02h  N BYTEs   counted strings, one for each line in menu
----------16FFEFCX0000-----------------------
INT 16 - PC Tools v5.1+ DESKTOP API - INSTALLATION CHECK
       AX = FFEFh
       CX = 0000h
Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
           BX = segment of resident portion
           AX = ??? (v5.1/5.5 only)
SeeAlso: AX=FEEFh,AX=FFC5h,AX=FFF3h
----------16FFF0-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
       AX = FFF0h
       DX = ???
Return: AX destroyed
Note:   available only when popped up
----------16FFF1BX0000-----------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ALTERNATE INSTALLATION CHECK
       AX = FFF1h
       BX = 0000h  leave ??? flag as is
           nonzero set ??? flag
Return: CX = 5555h if installed
       DX = 5555h
----------16FFF2-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY HELP LINE
       AX = FFF2h
       DS:SI -> ASCIZ function key label string (each label preceded by '[')
               or help text
Return: AX destroyed
Notes:  available only when popped up
       if the specified string does not start with '[', it is displayed
         centered on the bottom line, else the function key labels are shown
----------16FFF3-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - PREPARE TO UNLOAD RESIDENT DESKTOP
       AX = FFF3h
Note:   releases any EMS being used; restores video mode, page, and cursor
         shape; and restores interrupt vectors
SeeAlso: AX=FFC5h,AX=FFEFh
----------16FFF4-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - ???
       AX = FFF4h
       ???
Return: ???
Note:   available only when popped up
SeeAlso: AX=FFF6h
----------16FFF5-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - GET SCREEN ATTRIBUTE ARRAY
       AX = FFF5h
Return: ES:BX -> screen attributes data structure (see below)
       AL = ??? (v6.0+)

Format of attribute data structure:
Offset  Size    Description
-1     BYTE    attribute for desktop background
00h    BYTE    attribute for normal characters on desktop menu
01h    BYTE    attribute for highlighted characters on desktop menu
02h  5 BYTEs   ???
07h    BYTE    attribute for dialog boxes
08h 15 BYTEs   ???
17h    BYTE    attribute for message boxes
----------16FFF6-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - INVOKE NOTEPAD EDITOR
       AX = FFF6h
       DS = segment of editor buffer structure (see below)
       BX = ???
       DX = segment of window parameters structure (see AX=FFB5h)
Return: ???
Note:   available only when popped up
SeeAlso: AX=FFF4h

Format of editor buffer structure:
Offset  Size    Description
00h    WORD    offset of current cursor position in buffer segment
02h  2 BYTEs   ???
04h    WORD    offset of beginning of file data in buffer segment
06h 10 BYTEs   ???
10h  N BYTEs   ASCIZ name of file being edited
----------16FFF7-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - PROCESS MENU BAR ENTRY???
       AX = FFF7h
       DS:SI -> ???
       ???
Return: ???
Notes:  available only when popped up
       performs input processing on the menu bar set up with AX=FFEEh
SeeAlso: AX=FFEEh,AX=FFFBh
----------16FFF8-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - DRAW EMPTY WINDOW
       AX = FFF8h
       DS:0000h -> window parameters structure (see AX=FFB5h)
       DS:BX -> DWORD to store address of ??? on screen
Return: ???
----------16FFF9-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE SCREEN REFRESH ROUTINE
       AX = FFF9h
       ES:BX -> FAR routine to redisplay the utility's window
Note:   available only when popped up
----------16FFFA-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE STANDARD PULLDOWN MENUS
       AX = FFFAh
Notes:  available only when popped up
       adds the "Window" option to the "Desktop" option which is the only one
         available when no accessories are active.  Unlike AX=FFEEh, no
         additional menu items are added between "Desktop" and "Window"
SeeAlso: AX=FFEEh,AX=FFFBh
----------16FFFB-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - PROCESS STANDARD MENU BAR
       AX = FFFBh
Return: ???
Notes:  available only when popped up
       performs input processing on the standard menu bar set up with AX=FFFAh
SeeAlso: AX=FFF7h
----------16FFFC-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - GET HOTKEYS AND KEYBOARD VECTOR
       AX = FFFCh
Return: ES:BX -> hotkey table (see below)
       DS:DX = original INT 9 vector

Format of hotkey table:
Offset  Size    Description
00h  2 BYTEs   scancode/shift state for desktop hotkey
02h  2 BYTEs   scancode/shift state for clipboard paste key
04h  2 BYTEs   scancode/shift state for clipboard copy key
06h  2 BYTEs   scancode/shift state for screen autodial key
----------16FFFD-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - COPY ???
       AX = FFFDh
Return: AX destroyed
Note:   copies 4000 bytes from ??? to ??? under certain circumstances
----------16FFFE-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - SHOW MOUSE CURSOR
       AX = FFFEh
SeeAlso: AX=FFFFh,INT 33/AX=0001h
----------16FFFF-----------------------------
INT 16 - PC Tools v5.1+ DESKTOP API - HIDE MOUSE CURSOR
       AX = FFFFh
SeeAlso: AX=FFFEh,INT 33/AX=0002h
----------17----DX0ABC-----------------------
INT 17 - PRINTER - LPTx v5.x INSTALLATION CHECK
       DX = 0ABCh
Return: AX = AAAAh
       DX = BAAAh
       ES = code segment of resident portion
----------17----DX0B90-----------------------
INT 17 - PRINTER - LPTx v6.x INSTALLATION CHECK
       DX = 0B90h
Return: DX = ABBBh
       ES = code segment of resident portion
----------17----DX0B91-----------------------
INT 17 - PRINTER - LPTx v7.x INSTALLATION CHECK
       DX = 0B91h
Return: DX = ABCBh
       ES = code segment of resident portion
----------17----DX0F5F-----------------------
INT 17 - PRINTER - LPTx v4.x INSTALLATION CHECK
       DX = 0F5Fh
Return: AX = AAAAh
       DX = F555h
       ES = code segment of resident portion
----------1700-------------------------------
INT 17 - PRINTER - WRITE CHARACTER
       AH = 00h
       AL = character to write
       DX = printer number (00h-02h)
Return: AH = printer status
           bit 7: not busy
               6: acknowledge
               5: out of paper
               4: selected
               3: I/O error
               2: unused
               1: unused
               0: timeout
SeeAlso: AH=84h"AX",AH=F1h,INT 16/AX=FFE3h,INT 1A/AH=11h"NEC"
----------1701-------------------------------
INT 17 - PRINTER - INITIALIZE PORT
       AH = 01h
       DX = printer number (00h-02h)
Return: AH = printer status (see AH=00h)
SeeAlso: AH=02h,INT 1A/AH=10h"NEC"
----------1702-------------------------------
INT 17 - PRINTER - GET STATUS
       AH = 02h
       DX = printer number (00h-02h)
Return: AH = printer status (see AH=00h)
SeeAlso: AH=01h,AH=F2h,INT 1A/AH=12h"NEC"
----------1702--DX0000-----------------------
INT 17 - INSET - INSTALLATION CHECK
       AH = 02h
       DX = 0000h
       CX = 07C3h (1987d)
Return: CX = 07C2h (1986d) if installed
Note:   INSET is a text/graphics integration program
----------1720-------------------------------
INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER
       AH = 20h
       AL = function number
           00h installation check
               Return: BX = driver version number (BH=major,BL=minor)
                       CH = ??? (00h)
                       CL = ???
                       DX = ??? (0100h)
               Note: also enables the remaining functions
           01h set ??? flag
           02h get information
               CL = subfunction
                   00h get printer type
                       Return: ES:DI -> ASCIZ printer name
                   01h get paper size
                       DX = size index
                       Return: ES:DI -> ASCIZ paper size description
                   02h get ???
                       Return: BX = ???
                   03h get printer information???
                       DX = ???
                       ES:BX -> buffer for ??? (min 134 bytes)
           03h ???
               ES:BX -> ???
           04h get ???
               Return: ES:DI -> ???
           05h advance printer to next page
               Note: also clears flag set by function 01h
           06h advance printer to next page and shut down
               Note:   also clears flag set by function 01h and disables
                         functions other than 00h
           07h not implemented, AX returned unchanged
       BL = printer number???
Return: AX = status
           0000h successful
           0001h invalid printer???
           0002h ???
           0003h invalid subfunction
           0005h driver disabled, must call function 00h first
           0009h unknown printer error
           000Bh printer not selected
           000Ch printer out of paper
           000Eh error while writing to serial printer
           000Fh ???
           0010h invalid function number
           0011h value out of range
----------172400-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - ENABLE/DISABLE API FUNCTIONS
       AX = 2400h
       DL = new state
           00h disabled
           01h enabled
Return: DL = 24h if installed
       DH = minor version number
       CX = network address of this machine
       AL = status
           00h successful
           01h timeout
           02h header error
           03h data error
           04h busy
           05h invalid parameters
SeeAlso: AX=2403h,INT 16/AX=4500h
----------172401-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, NO HANDSHAKE
       AX = 2401h
       BL = timeout in clock ticks
Return: AL = status (see AX=2400h)
       DX:BX -> receive buffer
SeeAlso: AX=2402h,AX=2404h,AX=2408h
----------172402-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT BLOCK, NO HANDSHAKE
       AX = 2402h
       transmit buffer filled (see AX=2403h)
Return: AL = status (see AX=2400h)
SeeAlso: AX=2401h,AX=2403h,AX=2404h,AX=2409h
----------172403-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - GET STATUS AND TRANSMISSION BUFFER
       AX = 2403h
Return: AL = status (see AX=2400h)
       CX = number of characters in receive ring buffer
       DX:BX -> transmit buffer
SeeAlso: AX=2400h,AX=2402h
----------172404-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - SEND ACK BLOCK
       AX = 2404h
       BX = target address
Return: AL = status (see AX=2400h)
SeeAlso: AX=2402h,AX=2405h
----------172405-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - SEND NAK BLOCK
       AX = 2405h
       BX = target address
Return: AL = status (see AX=2400h)
SeeAlso: AX=2402h,AX=2404h
----------172406-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED RECEIVE
       AX = 2406h
Return: AL = status (see AX=2400h)
SeeAlso: AX=2407h,AX=240Ah
----------172407-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE CHARACTER FROM REMOTE
       AX = 2407h
Return: AL = status (see also AX=2400h)
           06h end of data
       DL = received character
SeeAlso: AX=2406h
----------172408-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, WITH HANDSHAKE
       AX = 2408h
Return: AL = status (see also AX=2400h)
           06h end of data
       CX = number of bytes in receive buffer
       DX:SI -> receive buffer
SeeAlso: AX=2401h,AX=2405h,AX=2409h
----------172409-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT COMMAND, WITH HANDSHAKE
       AX = 2409h
       BX = target address
       CX = number of data bytes
       DL = command code to send
       DS:SI -> data bytes for command
Return: AL = status (see also AX=2400h)
           03h no response
           06h remote currently unable to perform command
SeeAlso: AX=2405h,AX=2408h
----------17240A-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED TRANSMIT
       AX = 240Ah
Return: AL = status (see AX=2400h)
SeeAlso: AX=2406h,AX=240Bh,AX=240Ch
----------17240B-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT SINGLE CHARACTER TO REMOTE
       AX = 240Bh
       DL = character to send
Return: AL = status (see also AX=2400h)
           03h transmission error
           06h write error
SeeAlso: AX=2407h,AX=240Ah,AX=240Ch
----------17240C-----------------------------
INT 17 - Shamrock Software NET.24 v3.11+ - END CHARACTER-ORIENTED TRANSMIT
       AX = 240Ch
Return: AL = status (see also AX=2400h)
           03h transmission error
           06h remote breaks connection
SeeAlso: AX=240Ah,AX=240Bh
----------175000-----------------------------
INT 17 - AX (Japanese AT) PRINTER - SET PRINTER COUNTRY CODE
       AX = 5000h
       BX = country code
           0001h USA (English), 0051h Japan
Return: AL = status
           00h successful
           01h bad country code
           02h other error
SeeAlso: AX=5001h,AH=51h,INT 10/AX=5000h,INT 16/AX=5000h
----------175001-----------------------------
INT 17 - AX (Japanese AT) PRINTER - GET PRINTER COUNTRY CODE
       AX = 5001h
Return: AL = status
           00h successful
               BX = country code
           02h error
SeeAlso: AX=5000h,AH=51h,INT 10/AX=5001h,INT 16/AX=5001h
----------1751-------------------------------
INT 17 - AX (Japanese AT) PRINTER - JIS to Shift-JIS CONVERSION
       AH = 51h
       DX = 2-byte JIS code
Return: DX = shift-JIS value or 0000h on error
Note:   one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
         characters to Shift-JIS characters, and the other performs the
         opposite conversion
SeeAlso: AX=5000h,AH=52h
----------1752-------------------------------
INT 17 - AX (Japanese AT) PRINTER - Shift-JIS to JIS CONVERSION
       AH = 52h
       DX = 2-byte shift-JIS code
Return: DX = JIS code or 0000h on error
Note:   one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
         characters to Shift-JIS characters, and the other performs the
         opposite conversion
SeeAlso: AH=51h
----------1760-------------------------------
INT 17 - FLASHUP.COM - INSTALLATION CHECK
       AH = 60h
Return: AL = 60h
       DX = CS of resident code
Notes:  FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co.
       FLASHUP also hooks INT 10 and receives commands via INT 10/AH=09h,0Ah
         consisting of an 80h followed by the actual command
SeeAlso: INT 10/AH=09h,INT 10/AH=0Ah
----------1761-------------------------------
INT 17 - SPEEDSCR.COM - INSTALLATION CHECK
       AH = 61h
Return: AL = 61h
       DX = CS of resident code
Note:   SPEEDSCR.COM is by The Software Bottling Co.
----------1781-------------------------------
INT 17 - Alloy NTNX, MW386 - CANCEL JOBS FOR CURRENT USER
       AH = 81h
       AL = 00h (NTNX compatibility mode)
       CL = number of jobs to cancel
Return: AL = status
           00h success
           01h..7Fh warning
           80h general failure
           81h host overloaded (NTNX only)
           82h module busy (NTNX only)
           83h host busy (NTNX only)
           84h re-entry flag set
           85h invalid request
           86h invalid printer
           87h invalid process ID
           89h access denied
           8Ah option not available for given port type
           8Bh option not available for given task type
           91h printer busy
           C2h file not found
           C3h path not found
           C4h file access failure
Note:   cancels the last CL printouts for the current task
SeeAlso: AH=82h
----------1782-------------------------------
INT 17 - Alloy NTNX, MW386 - CANCEL ALL JOBS FOR CURRENT USER
       AH = 82h
       AL = 00h (NTNX compatibility mode)
Return: AL = status (see AH=81h)
SeeAlso: AH=81h
----------1783-------------------------------
INT 17 - Alloy NTNX, MW386 - SET NUMBER OF COPIES
       AH = 83h
       AL = mode
           00h NTNX compatibility
               CL = number of copies (max 99, default 1)
           02h MW386 v2+
               BX = logical device number
                   00h-03h = LPT1-LPT4
                   04h-07h = COM1-COM4
               CX = number of copies
Return: AL = status (see AH=81h)
Note:   in NTNX compatibility mode, this function only affects LPT1
----------1784-------------------------------
INT 17 - Alloy NTNX, MW386 - GENERATE PRINT BREAK
       AH = 84h
       AL = mode
           00h NTNX compatibility
           02h MW386 v2+
               BX = logical device number
                   00h-03h = LPT1-LPT4
                   04h-07h = COM1-COM4
Note:   closes spool file and tells spooler to queue the print job (LPT1 only
         under MW386 in NTNX compatibility mode)
----------1784-------------------------------
INT 17 - AX (Japanese AT) PRINTER - OUTPUT CHARACTER WITHOUT CONVERSION
       AH = 84h
       AL = character
       DX = printer number
Return: AH = printer status (see AH=00h)
SeeAlso: AH=00h,AH=85h
----------1785-------------------------------
INT 17 - AX (Japanese AT) PRINTER - ENABLE/DISABLE CHARACTER CONVERSION
       AH = 85h
       AL = new state (00h enabled, 01h disabled)
SeeAlso: AH=84h"AX"
----------1787-------------------------------
INT 17 - Alloy NTNX - SET INDOS POINTER
       AH = 87h
       AL = 00h
       CX:BX -> buffer for user-written printer drivers
Return: BX,CX destroyed
Note:   must be executed before the printer is enabled
SeeAlso: AH=8Ah
----------1788-------------------------------
INT 17 - Alloy NTNX, MW386 - REMOVE PRINTER FROM SPOOLER
       AH = 88h
       AL = mode
           00h NTNX compatibility
               DX = NTNX printer number
                   00h host LPT1
                   01h host LPT2
                   02h host LPT3
                   03h host LPT4
                   04h host COM1
                   05h host COM2
                   06h user's logical COM2
                   07h user's terminal AUX port
                   08h user's logical COM1 (MW386 only)
           01h MW386
               DX = MW386 printer number
Return: AH = status (see AH=81h)
Note:   removes specified printer from the spooler's list of printers
SeeAlso: AH=89h,AH=8Bh
----------1789-------------------------------
INT 17 - Alloy NTNX, MW386 - ADD PRINTER TO SPOOLER
       AH = 89h
       AL = mode
           00h NTNX compatibility
               DX = NTNX printer number (see AH=88h)
           01h MW386
               DX = MW386 printer number
Return: AL = status (see AH=81h)
Note:   the specified printer is added to the spooler's list of available
         printers
SeeAlso: AH=88h,AH=8Bh
----------178A-------------------------------
INT 17 - Alloy NTNX - ACTIVATE USER-WRITTEN PRINTER DRIVER
       AH = 8Ah
       ???
SeeAlso: AH=92h
----------178B-------------------------------
INT 17 - Alloy MW386 - GET PHYSICAL DEVICE NUMBER FROM NAME
       AH = 8Bh
       DS:DX -> ASCIZ printer name
Return: AL = status (see also AH=81h)
           00h successful
               DX = physical device number
SeeAlso: AH=89h,AH=8Ch,INT 14/AH=20h"Alloy"
----------178C-------------------------------
INT 17 - Alloy MW386 - GET DEVICE NAME FROM PHYSICAL DEVICE NUMBER
       AH = 8Ch
       DX = physical device number
       ES:DI -> 17-byte buffer for ASCIZ device name
Return: AL = status (see also AH=81h)
           00h successful
               ES:DI buffer filled
SeeAlso: AH=88h,AH=8Bh
----------178D-------------------------------
INT 17 - Alloy NTNX,MW386 - RESET SPOOLER
       AH = 8Dh
       AL = 00h
Notes:  clears all buffers and resets spooler to boot-up values
       MW386 supports this function for compatibility only; it is a NOP
Return: AL = status (see AH=81h)
----------178E-------------------------------
INT 17 - Alloy NTNX - GET INT 28 ENTRY POINT
       AH = 8Eh
       AL = 00h
Return: CX:BX -> INT 28 entry point
SeeAlso: AH=8Fh
----------178F-------------------------------
INT 17 - Alloy NTNX - GET DOS INTERCEPT ENTRY POINT
       AH = 8Fh
       AL = 00h
Return: CX:BX -> DOS intercept routine
SeeAlso: AH=8Eh
----------1790-------------------------------
INT 17 - Alloy NTNX, MW386 - SPOOL FILE BY NAME
       AH = 90h
       AL = mode
           00h NTNX compatibility
               DL = printer code (FFh=current) (NTNX, MW386 v1.x only)
               DH = number of copies (FFh=current) (NTNX, MW386 v1.x only)
           02h MW386 v2+
               BX = logical device number
                   00h-03h = LPT1-LPT4
                   04h-07h = COM1-COM4
       CX:SI -> ASCIZ pathname
Return: AL = status (see AH=81h)
Note:   in mode 00h, the file is always sent to logical LPT1
SeeAlso: AH=A0h
----------1791-------------------------------
INT 17 - Alloy NTNX, MW386 - GET USER NUMBER AND CURRENT PRINTER
       AH = 91h
       AL = mode
           00h NTNX compatibility
               Return: CX = user number (00h = host)
                       DX = currently selected printer number (00h-08h)
           01h MW386
               Return: CX = user number
                       DX = physical dev number of currently selected printer
           02h MW386 v2+
               BX = logical device number
                   00h-03h = LPT1-LPT4
                   04h-07h = COM1-COM4
               Return: CX = user number
                       DX = physical device number
Return: AL = status (see AH=81h)
SeeAlso: AH=8Ch
----------1792-------------------------------
INT 17 - Alloy NTNX - CHECK PRINTER DRIVER
       AH = 92h
       AL = 00h
       CL = 00h
Return: CL = driver state
           01h initialized
           80h not initialized
       AX = status (see AH=81h)
SeeAlso: AH=8Ah
----------1794-------------------------------
INT 17 - Alloy NTNX, MW386 - SELECT PRINTER
       AH = 94h
       AL = mode
           00h NTNX compatibility
               DX = NTNX printer number (see AH=88h)
           01h MW386
               DX = MW386 printer number
           02h MW386 v2+
               BX = logical printer number
               DX = MW386 printer number
Return: AL = status (see AH=81h)
Note:   modes 00h and 01h affect only logical LPT1
SeeAlso: AH=8Bh,AH=95h
----------1795-------------------------------
INT 17 - Alloy NTNX, MW386 - GET CURRENT PRINTER
       AH = 95h
       AL = mode
           00h NTNX compatibility
               Return: DX = NTNX printer number (see AH=88h)
                           (FFFFh if current printer not compatible with NTNX)
           01h MW386
               Return: DX = MW386 printer number
           02h MW386 v2+
               BX = logical device number
                   00h-03h = LPT1-LPT4
                   04h-07h = COM1-COM4
               Return: DX = MW386 printer number (FFFFh = none)
Return: AL = status (see AH=81h)
Note:   modes 00h and 01h return the printer number of logical LPT1 only
SeeAlso: AH=94h
----------1796-------------------------------
INT 17 - Alloy NTNX - SET SERIAL PORT PARAMETERS
       AH = 96h
       AL = 00h
Note:   documentation states that this is a NOP, doing only XOR AX,AX before
         returning
SeeAlso: INT 14/AH=24h
----------1797-------------------------------
INT 17 - Alloy NTNX, MW386 - SET DATA DRIVEN PRINT BREAK
       AH = 97h
       AL = mode
           00h NTNX compatibility
           02h MW386 v2+
               BX = logical device number
                   00h-03h = LPT1-LPT4
                   04h-07h = COM1-COM4
       CH,CL,DH = three character break sequence
       DL = subfunction
           00h set break string
           else reset break
Return: AL = status (see AH=81h)
Notes:  mode 00h affects only logical LPT1
       when the break string is encountered, the spool file will be closed and
         queued for printing automatically
       the break string is not permanently saved, and will be reset each time
         MW386 or the user is rebooted
SeeAlso: AH=9Bh
----------1798-------------------------------
INT 17 - Alloy NTNX,MW386 - RESTART PRINTER
       AH = 98h
       AL = 00h
       DL = printer number (FFh=current)
Return: AL = status
           00h successful
           01h incorrect printer
           02h task not found
Note:   MW386 supports this function for compatibility only; it is a NOP
----------1799-------------------------------
INT 17 - Alloy NTNX, MW386 - GET/SET PRINTER MODE
       AH = 99h
       AL = mode
           00h NTNX compatibility
               DL = NTNX printer number (see AH=88h)
                       (FFh = task's current logical LPT1)
               DH = mode
                   bit 0: get mode if 1, set mode if 0
                       1: private ("attached")
                       2: direct instead of spooled
                       3-7 reserved (0)
           01h MW386
               DX = MW386 printer number
               CL = mode (as for DH above)
Return: AL = status (see AH=81h)
       DH = mode (bits 1 and 2 set as above)
       DL = printer owner's user number if not spooled
----------179A-------------------------------
INT 17 - Alloy NTNX,MW386 - SET TAB EXPANSION
       AH = 9Ah
       AL = mode
           00h NTNX compatibility
               DX = NTNX printer number (see AH=88h)
                       (FFFFh = current logical LPT1)
           01h MW386
               DX = MW386 printer number
       CL = tab length (00h = no expansion, 01h-63h = spaces per tab)
Return: AL = status (see AH=81h)
Note:   beginning with MW386 v2.0, tab expansion is set on a per-printer basis
         rather than a per-user basis; NTNX and MW386 v1.x ignore DX
SeeAlso: AH=A4h
----------179B-------------------------------
INT 17 - Alloy NTNX,MW386 - SET PRINT BREAK TIMEOUT
       AH = 9Bh
       AL = mode
           00h NTNX compatibility
               CX = timeout value in clock ticks (1/18 sec) (00h = never)
           01h MW386
               CX = timeout value in seconds (00h = never)
           02h MW386 v2+
               BX = logical device number
                   00h-03h = LPT1-LPT4
                   04h-07h = COM1-COM4
               CX = timeout value in seconds (00h = never)
Return: AL = status (see AH=81h)
Notes:  modes 00h and 01h affect only the current logical LPT1
       if no data is sent to a printer for the specified amount of time, the
         spool file will be closed and queued for printing automatically
SeeAlso: AH=97h
----------17A0-------------------------------
INT 17 - Alloy MW386 - SPOOL COPY OF FILE
       AH = A0h
       AL = mode
           00h NTNX compatibility
               DX = ??? (NTNX, MW386 v1.x only)
           02h MW386 v2+
               BX = logical device number
                   00h-03h = LPT1-LPT4
                   04h-07h = COM1-COM4
       CX:SI -> ASCIZ pathname
Return: AL = status (see AH=81h)
Notes:  makes a copy of the specified file in the spooler's directory, allowing
         the original file to be modified or deleted while the copy is printed
       in mode 00h, the file is printed on logical LPT1
SeeAlso: AH=90h
----------17A4-------------------------------
INT 17 - Alloy MW386 - ENABLE/DISABLE FORM FEED
       AH = A4h
       AL = new state
           00h form feed after end of print job disabled
           01h form feed enabled
Return: AL = status (see AH=81h)
Note:   only affects the current logical LPT1
SeeAlso: AH=9Ah,AH=A6h,INT 7F/AH=05h"NTNX (Host)"
----------17A6-------------------------------
INT 17 - Alloy MW386 - ENABLE/DISABLE BANNER PAGE
       AH = A6h
       AL = new state
           00h banner page before print job disabled
           01h banner page enabled
Return: AL = status (see AH=81h)
Note:   only affects the current logical LPT1
SeeAlso: AH=A4h
----------17A7-------------------------------
INT 17 - Alloy MW386 v2+ - GET/SET SPOOL FLAGS
       AH = A7h
       AL = spool flags
           bit 0: banner page enabled (see AH=A4h)
               1: form feed enabled (see AH=A6h)
               2-6: reserved (0)
               7: set flags if 1, get flags if 0
       BX = logical device number
           00h-03h = LPT1-LPT4
           04h-07h = COM1-COM4
Return: AL = status (see AH=81h)
Note:   the documentation does not state which register contains the result of
         a GET
SeeAlso: AH=A4h,AH=A6h
----------17A8-------------------------------
INT 17 - Alloy MW386 - DEFINE TEMPORARY FILENAME
       AH = A8h
       CX:SI -> ASCIZ filename without extension (max 8 chars)
Return: AL = status (see AH=81h)
Note:   allows application to specify banner page filename for spool files
         collected from the application's printer output
SeeAlso: AH=A9h
----------17A9-------------------------------
INT 17 - Alloy MW386 - CHANGE TEMPORARY SPOOL DRIVE
       AH = A9h
       AL = new spool drive (2=C:,3=D:,etc)
Return: AL = status (see AH=81h)
Note:   does not remove previous spooling directory since jobs may be pending
SeeAlso: AH=A8h
----------17AA-------------------------------
INT 17 - Alloy MW386 v2+ - GET REAL-TIME PRINTER STATUS
       AH = AAh
       AL = mode
           00h NTNX
               DX = NTNX printer number (see AH=88h)
           01h MW386
               DX = MW386 printer number
Return: AH = instantaneous printer status
           00h printer ready
           01h not ready
           12h off line
           13h out of paper
           14h general device failure
           15h device timeout
           16h bad device number
----------17AF-------------------------------
INT 17 - Alloy MW386 - CHECK SPOOLER
       AH = AFh
Return: AX = 55AAh if spooler available
----------17C0-------------------------------
INT 17 - PC Magazine PCSpool - GET CONTROL BLOCK ADDRESS
       AH = C0h
       DX = printer port (0-3)
Return: ES:BX -> control block (see below)
SeeAlso: AH=C1h

Format of control block:
Offset  Size    Description
00h    WORD    printer number
02h    WORD    address of printer status port
04h    WORD    number of first record in queue
06h    WORD    number of last record in queue
08h    DWORD   characters already printed
0Ch    DWORD   number of characters remaining
10h    DWORD   pointer to dequeue buffer
14h    DWORD   previous count of characters printed
18h    DWORD   number of clock ticks taken to print them
1Ch    WORD    offset of next character to output
1Eh    WORD    offset of next character to print
20h    WORD    pointer to spooling queue record
22h    BYTE    current spooling status
23h    BYTE    current printer status:
               00h OK
               01h not ready
               02h paused with message
               03h paused
               04h initializing
               FEh non-existent port
               FFh not spooled
24h    BYTE    current control record type
25h    WORD    observed printer speed
27h    WORD    characters to print per service
29h    BYTE    01h if disk write needed
2Ah    BYTE    01h if queued data should be flushed
2Bh    BYTE    01h to update cps status
----------17C1--------------------------------
INT 17 - PC Magazine PCSpool - BUILD PAUSE CONTROL RECORD
       AH = C1h
       DX = printer port (0-3)
       DS:SI -> ASCIIZ string to save for display
Note:   flushes pending writes
SeeAlso: AH=C0h,AH=C2h
----------17C2-------------------------------
INT 17 - PC Magazine PCSpool - FLUSH PENDING WRITES
       AH = C2h
       DX = printer port (0-3)
SeeAlso: AH=C3h
----------17C3-------------------------------
INT 17 - PC Magazine PCSpool - CANCEL PRINTER QUEUE (FLUSH ALL QUEUED OUTPUT)
       AH = C3h
       DX = printer port (0-3)
SeeAlso: AH=C2h,AH=C7h
----------17C4-------------------------------
INT 17 - PC Magazine PCSpool - QUERY SPOOLER ACTIVE
       AH = C4h
Return: DI = B0BFh
       SI = segment
----------17C5-------------------------------
INT 17 - PC Magazine PCSpool - JOB SKIP PRINTER QUEUE
       AH = C5h
       DX = printer port (0-3)
Note:   cancels up to the pause record
----------17C6-------------------------------
INT 17 - PC Magazine PCSpool - CHECK PRINTER QUEUE STATUS
       AH = C6h
       DX = printer port (0-3)
Return: AX = 0 printer not active or at pause
          = 1 printer busy
----------17C7-------------------------------
INT 17 - PC Magazine PCSpool - CLOSE QUEUE
       AH = C7h
       DX = printer port (0-3)
SeeAlso: AH=C3h
----------17CD00-----------------------------
INT 17 - INSET - EXECUTE COMMAND STRING
       AX = CD00h
       DS:DX -> ASCIZ command string (max 80 bytes)
Return: CX = 07C2h (1986d)
Note:   user interface menus pop up after last command, unless that command
       exits INSET
----------17CD01-----------------------------
INT 17 - INSET - GET IMAGE SIZE
       AX = CD01h
       DS:DX -> ASCIZ name of image file
Return: AX = height in 1/720th inch
       BX = width in 1/720th inch
       CX = 07C2h (1986d)
----------17CD02-----------------------------
INT 17 - INSET - INITIALIZE
       AX = CD02h
Return: CX = 07C2h (1986d)
Note:   all open files are closed and the printer is reset
SeeAlso: AX=CD04h
----------17CD03-----------------------------
INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE
       AX = CD03h
Return: CX = 07C2h (1986d)
----------17CD04-----------------------------
INT 17 - INSET - INITIALIZE LINKED MODE
       AX = CD04h
       ES:SI -> FAR routine for linked mode
Return: CX = 07C2h
Note:   calling sequence for linked-mode routine
       AL = 00h send character in BL to printer
          = 01h send CX bytes from DS:DX to printer
          = 02h move print head to horizontal starting position of image
       return code for linked-mode routine:
       AX = 0000h success
          = 0001h failure
SeeAlso: AX=CD02h,AX=CD08h
----------17CD05-----------------------------
INT 17 - INSET - START MERGING IMAGE INTO TEXT
       AX = CD05h
       DS:DX -> ASCIZ name of PIX file
       CX = left margin of text in 1/720th inch
Return: AH = printer type
           00h page-oriented (multiple images may be placed side-by-side)
           01h line-oriented (use AX=CD06h for vertical paper movement)
       CX = 07C2h (1986d)
SeeAlso: AX=CD07h
----------17CD06-----------------------------
INT 17 - INSET - GRAPHICS LINE FEED
       AX = CD06h
Return: AH = completion status
           00h image complete
           01h image incomplete
       CX = 07C2h (1986d)
SeeAlso: AX=CD09h
----------17CD07-----------------------------
INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER
       AX = CD07h
Return: CX = 07C2h
SeeAlso: AX=CD05h
----------17CD08-----------------------------
INT 17 - INSET - CANCEL LINK MODE
       AX = CD08h
Return: CX = 07C2h
SeeAlso: AX=CD04h
----------17CD09-----------------------------
INT 17 - INSET - ALTER TEXT LINE SPACING
       AX = CD09h
       CX = line spacing in 1/720th inch
Return: CX = 07C2h
Note:   not yet implemented, line spacing is currently fixed at 1/6 inch
SeeAlso: AX=CD06h
----------17CD0A-----------------------------
INT 17 - INSET - GET SETUP
       AX = CD0Ah
       DS:DX -> buffer for IN.SET data
Return: CX = 07C2h
----------17CD0B-----------------------------
INT 17 - INSET - START GETTING SCALED IMAGE
       AX = CD0Bh
       DS:SI -> ASCIZ pathname of .PIX file
       BX = number of bitplanes
       CX = number of rows in output bitmap
       DX = number of columns in output bitmap
Return: AX = status
           0000h OK
           FFFFh error
Note:   image is returned in strips by repeated calls to AX=CD0Ch
----------17CD0C-----------------------------
INT 17 - INSET - GET NEXT IMAGE STRIP
       AX = CD0Ch
Return: AX = status
           0000h OK but not complete
           0001h OK and image complete
           FFFFh error
       DS:SI -> buffer (max 4K) for bit map strip
       CX = start row
       DX = number of rows
       BX = offset in bytes between bit planes
Note:   buffer may be overwritten by subsequent calls
SeeAlso: AX=CD0Bh
----------17F0-------------------------------
INT 17 - NorthNet Jetstream API - INSTALLATION CHECK
       AH = F0h
       DX = printer port (0-3)
Return: AX = 0001h Jetstream present
            else  non-Jetstream port
Note:   NorthNet Jetstream is a high-performance DMA-driven parallel card able
         to drive printers at up to 80000 characters per second
----------17F1-------------------------------
INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER
       AH = F1h
       CX = data buffer length
       DX = printer port (0-3)
       DS:SI -> data buffer
Return: AX = status
           0000h printer not ready (see also AH=02h)
           other printing started
SeeAlso: AH=00h,AH=F2h,AH=F3h,AH=F5h
----------17F2-------------------------------
INT 17 - NorthNet Jetstream API - GET PRINT PROGRESS STATUS
       AH = F2h
       DX = printer port (0-3)
Return: AX = status
           0000h prior print request finished
           other number of characters left to print
SeeAlso: AH=02h,AH=F1h,AH=F3h
----------17F3-------------------------------
INT 17 - NorthNet Jetstream API - ABORT PRINT OPERATION
       AH = F3h
       DX = printer port (0-3)
Return: AX = number of unprinted characters due to abort
SeeAlso: AH=F1h,AH=F4h
----------17F4-------------------------------
INT 17 - NorthNet Jetstream API - SET COMPLETION (POST) ADDRESS
       AH = F4h
       DX = printer port (0-3)
       DS:DS -> FAR post address (called with interrupts on)
SeeAlso: AH=F1h,AH=F3h
----------17F5-------------------------------
INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER FROM EXTENDED MEMORY
       AH = F5h
       CX = data buffer length
       DX = printer port (0-3)
       DS:SI -> data buffer (32-bit physical address)
Return: AX = status
           0000h printer not ready (see also AH=02h)
           other printing started
SeeAlso: AH=F1h
----------18---------------------------------
INT 18 - START CASSETTE BASIC
Note:   only PCs produced by IBM contain BASIC in ROM, so the action is
         unpredicatable on compatibles; this interrupt often reboots the
         system, and often has no effect at all
SeeAlso: INT 86"NetBIOS"
----------1800-------------------------------
INT 18 - NEC PC-9800 series - KEYBOARD - GET KEYSTROKE
       AH = 00h
Return: AX = keystroke
SeeAlso: AH=01h,AH=02h,INT 16/AH=00h
----------1801-------------------------------
INT 18 - NEC PC-9800 series - KEYBOARD - CHECK FOR KEYSTROKE
       AH = 01h
Return: ZF set if no keystroke available
       ZF clear if keystroke available
           AX = keystroke
SeeAlso: AH=00h,AH=02h,INT 16/AH=01h
----------1802-------------------------------
INT 18 - NEC PC-9800 series - KEYBOARD - GET SHIFT STATUS
       AH = 02h
Return: AL = shift flags
SeeAlso: AH=00h,AH=02h,AH=03h,AH=04h,INT 16/AH=02h
----------1803-------------------------------
INT 18 - NEC PC-9800 series - KEYBOARD - INITIALIZE
       AH = 03h
       ???
Return: ???
SeeAlso: AH=00h,AH=04h
----------1804-------------------------------
INT 18 - NEC PC-9800 series - KEYBOARD - KEY PRESSED
       AH = 04h
       ???
Return: ???
Note:   details are not available at this time
SeeAlso: AH=00h,AH=02h,INT 16/AH=00h,INT 16/AH=01h,INT 16/AH=02h
----------18---------------------------------
INT 18 - NEC PC-9800 series - VIDEO
       AH = function
           0Ah set video mode
           0Bh get video mode
           0Ch start text screen display
           0Dh end text screen display
           0Eh set single display area
           0Fh set multiple display area
           10h set cursor shape
           11h display cursor
           12h terminate cursor
           13h set cursor position
           14h read font patter
           16h initialize text video RAM
           1Ah define user character
       ???
Return: ???
Notes:  details are not available at this time
       text video RAM is located at segments A000h (characters) and A200h
         (attributes)
----------19---------------------------------
INT 19 - SYSTEM - BOOTSTRAP LOADER
  Reboot the system without clearing memory or restoring interrupt vectors.
  Because interrupt vectors are preserved, this interrupt usually causes a
  system hang if any TSRs have hooked vectors from 00h through 1Ch,
  particularly INT 08.

  Usually, the BIOS will try to read sector 1, head 0, track 0 from drive A:
  to 0000h:7C00h.  If this fails, and a hard disk is installed, the BIOS will
  read sector 1, head 0, track 0 of the first hard disk.  This sector should
  contain a master bootstrap loader and a partition table.  After loading the
  master boot sector at 0000h:7C00h, the master bootstrap loader is given
  control.  It will scan the partition table for an active partition, and will
  then load the operating system's bootstrap loader (contained in the first
  sector of the active partition) and give it control.

  True IBM PCs issue an INT 18 if neither floppy nor hard disk have a valid
  boot sector.

Notes:  to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
         0040h:0072h and jump to FFFFh:0000h.  For a cold boot equivalent to
         a reset, store 0000h at 0040h:0072h before jumping.
       VDISK.SYS hooks this interrupt to allow applications to find out how
         much extended memory has been used by VDISKs (see below).  DOS 3.3+
         PRINT hooks INT 19 but does not set up a correct VDISK header block
         at the beginning of its INT 19 handler segment, thus causing some
         programs to overwrite extended memory which is already in use.
       default handler is at F000h:E6F2h for 100% compatible BIOSes
SeeAlso: INT 14/AH=17h,INT 18

Format of VDISK header block (at beginning of INT 19 handler's segment):
Offset  Size    Description
00h 18 BYTEs   n/a (for VDISK.SYS, the device driver header)
12h 11 BYTEs   signature string "VDISK  Vn.m" for VDISK.SYS version n.m
1Dh 15 BYTEs   n/a
2Ch  3 BYTEs   linear address of first byte of available extended memory

Format of hard disk master boot sector:
Offset  Size    Description
00h 446 BYTEs  Master bootstrap loader code
1BEh 16 BYTEs   partition record for partition 1 (see below)
1CEh 16 BYTEs   partition record for partition 2
1DEh 16 BYTEs   partition record for partition 3
1EEh 16 BYTEs   partition record for partition 4
1FEh    WORD    signature, AA55h indicates valid boot block

Format of partition record:
Offset  Size    Description
00h    BYTE    boot indicator (80h = active partition)
01h    BYTE    partition start head
02h    BYTE    partition start sector (bits 0-5)
03h    BYTE    partition start track (bits 8,9 in bits 6,7 of sector)
04h    BYTE    operating system indicator (see below)
05h    BYTE    partition end head
06h    BYTE    partition end sector (bits 0-5)
07h    BYTE    partition end track (bits 8,9 in bits 6,7 of sector)
08h    DWORD   sectors preceding partition
0Ch    DWORD   length of partition in sectors

Values for operating system indicator:
00h empty
01h DOS 12-bit FAT
02h XENIX root file system
03h XENIX /usr file system (obsolete)
04h DOS 16-bit FAT
05h DOS 3.3+ extended partition
06h DOS 3.31+ Large File System
07h QNX
07h OS/2 HPFS
07h Advanced Unix
08h AIX bootable partition, SplitDrive
09h AIX data partition
09h Coherent filesystem
0Ah OPUS
0Ah Coherent swap partition
10h OPUS
40h VENIX 80286
50h Disk Manager, read-only partition
51h Novell???
51h Disk Manager, read/write partition
52h CP/M
52h Microport System V/386
56h GoldenBow VFeature
61h SpeedStor
63h Unix SysV/386, 386/ix
63h Mach, MtXinu BSD 4.3 on Mach
63h GNU HURD
64h Novell NetWare
75h PC/IX
80h Minix v1.1 - 1.4a
81h Minix v1.4b+
81h Linux
82h Linux Swap partition (planned)
93h Amoeba file system
94h Amoeba bad block table
B7h BSDI file system (secondarily swap)
B8h BSDI swap partition (secondarily file system)
C6h DR-DOS 6.0 LOGIN.EXE-secured partition
DBh CP/M, Concurrent CP/M, Concurrent DOS
DBh CTOS (Convergent Technologies OS)
E1h SpeedStor 12-bit FAT extended partition
E4h SpeedStor 16-bit FAT extended partition
F2h DOS 3.3+ secondary
FEh LANstep
FFh Xenix bad block table
----------1A00-------------------------------
INT 1A - TIME - GET SYSTEM TIME
       AH = 00h
Return: CX:DX = number of clock ticks since midnight
       AL = midnight flag, nonzero if midnight passed since time last read
Notes:  there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
       IBM and many clone BIOSes set the flag for AL rather than incrementing
         it, leading to loss of a day if two consecutive midnights pass
         without a request for the time (e.g. if the system is on but idle)
SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch
----------1A01-------------------------------
INT 1A - TIME - SET SYSTEM TIME
       AH = 01h
       CX:DX = number of clock ticks since midnight
SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
----------1A02-------------------------------
INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
       AH = 02h
Return: CF clear if successful
           CH = hour (BCD)
           CL = minutes (BCD)
           DH = seconds (BCD)
           DL = daylight savings flag (00h standard time, 01h daylight time)
       CF set on error (i.e. clock not running or in middle of update)
SeeAlso: AH=00h
----------1A03-------------------------------
INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
       AH = 03h
       CH = hour (BCD)
       CL = minutes (BCD)
       DH = seconds (BCD)
       DL = daylight savings flag (00h standard time, 01h daylight time)
SeeAlso: AH=01h
----------1A04-------------------------------
INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
       AH = 04h
Return: CF clear if successful
           CH = century (BCD)
           CL = year (BCD)
           DH = month (BCD)
           DL = day (BCD)
       CF set on error
SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah
----------1A05-------------------------------
INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
       AH = 05h
       CH = century (BCD)
       CL = year (BCD)
       DH = month (BCD)
       DL = day (BCD)
SeeAlso: AH=04h,INT 21/AH=2Bh
----------1A06-------------------------------
INT 1A - TIME - SET ALARM (AT,XT286,PS)
       AH = 06h
       CH = hour (BCD)
       CL = minutes (BCD)
       DH = seconds (BCD)
Return: CF set on error (alarm already set or clock stopped for update)
       CF clear if successful
Note:   the alarm occurs every 24 hours until turned off, invoking INT 4A each
         time
SeeAlso: AH=07h,INT 4A
----------1A07-------------------------------
INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
       AH = 07h
Return: alarm disabled
Note:   does not disable the real-time clock's IRQ
SeeAlso: AH=06h,INT 70
----------1A08-------------------------------
INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
       AH = 08h
       CH = hours in BCD
       CL = minutes in BCD
       DH = seconds in BCD
----------1A09-------------------------------
INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
       AH = 09h
Return: CH = hours in BCD
       CL = minutes in BCD
       DH = seconds in BCD
       DL = alarm status
           00h alarm not enabled
           01h alarm enabled but will not power up system
           02h alarm will power up system
----------1A0A-------------------------------
INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
       AH = 0Ah
Return: CF set on error
       CF clear if successful
           CX = count of days since Jan 1,1980
SeeAlso: AH=04h,AH=0Bh
----------1A0B-------------------------------
INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
       AH = 0Bh
       CX = count of days since Jan 1,1980
Return: CF set on error
       CF clear if successful
SeeAlso: AH=05h,AH=0Ah
----------1A10-------------------------------
INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE
       AH = 10h
       ???
Return: ???
SeeAlso: AH=11h,AH=12h,INT 17/AH=01h
----------1A11-------------------------------
INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER
       AH = 11h
       ???
Return: ???
SeeAlso: AH=10h,AH=12h,INT 17/AH=00h
----------1A12-------------------------------
INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS
       AH = 12h
       ???
Return: ???
SeeAlso: AH=10h,AH=11h,INT 17/AH=02h
----------1A3601-----------------------------
INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK
       AX = 3601h
Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
               ASCIZ string "WPCORP\0"
Notes:  WordPerfect 5.0 will call this interrupt at start up to determine if a
         third party product wants to interface with it.  The third party
         product must intercept this interrupt and return the address of a
         keyboard monitor routine.
       Before checking for keyboard input, and after every key entered by the
         user, Word Perfect will call the routine whose address was provided
         in DS:SI with the following parameters:
               Entry:  AX = key code or 0
                       BX = WordPerfect state flag
               Exit:   AX = 0 or key code
                       BX = 0 or segment address of buffer with key codes
       See the "WordPerfect 5.0 Developer's Toolkit" for further information.
SeeAlso: INT 16/AX=5500h
----------1A6108-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDWITHREPLY" - SEND MSG AND GET REPLY
       AX = 6108h
       STACK:  WORD    conversation ID (0000h-0009h)
               DWORD   pointer to message buffer
               WORD    length of message
               DWORD   pointer to reply buffer
               WORD    length of reply buffer
               WORD    0000h (use default "Cparams" structure)
Return: AX = status (see below)
       STACK unchanged
Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
         which implements the Simple Network Application Protocol
SeeAlso: AX=6205h

Values for status:
0000h successful
F830h "SNAP_ABORTED"
FC04h "SNAP_SERVERDIED"
FC05h "SNAP_RESEND"
FC06h "SNAP_SELECTFAILED"
FC07h "SNAP_WRONGVERSION"
FC08h "SNAP_INVALIDACK"
FC09h "SNAP_TIMEOUT"
FC0Ah "SNAP_SERVERREJECT"
FC0Bh "SNAP_NOREPLYDUE"
FC0Ch "SNAP_NOAUTHENTICATE"/"SNAP_GUARDIAN_ERROR"
FC0Dh "SNAP_NOINIT"
FC0Eh "SNAP_SOCKETERROR"
FC0Fh "SNAP_BUFFERLIMIT"
FC10h "SNAP_INVALIDCID"
FC11h "SNAP_INVALIDOP"
FC12h "SNAP_XMITFAIL"
FC13h "SNAP_NOMORERETRIES"
FC14h "SNAP_BADPARMS"
FC15h "SNAP_NOMEMORY"
FC16h "SNAP_NOMORECONVS"
FFFFh failed (invalid function/parameter)
----------1A6205-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDNOREPLY" - SEND MSG, DON'T AWAIT REPLY
       AX = 6205h
       STACK:  WORD    conversation ID (0000h-0009h)
               DWORD   pointer to message
               WORD    length of message
               WORD    0000h (use default "Cparms" structure)
Return: AX = status (see AX=6108h)
       STACK unchanged
SeeAlso: AX=6108h
----------1A6308-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_BEGINCONV" - BEGIN CONVERSATION
       AX = 6308h
       STACK:  WORD    offset of ASCIZ "guardian"
               WORD    offset of ASCIZ hostname
               WORD    offset of ASCIZ server name
               WORD    offset of ASCIZ userid
               WORD    offset of ASCIZ password
               WORD    offset of password length
               WORD    offset of password type
               WORD    offset of "Cparms" structure (see below)
Return: ???
       STACK unchanged
Note:   all stacked offsets are within the SNAP data segment (use AX=6A01h
         to allocate a buffer)
SeeAlso: AX=6405h,AX=7202h

Format of Cparms structure:
Offset  Size    Description
00h    WORD    retry delay in seconds
02h    WORD    timeout delay in seconds
04h    WORD    maximum buffer size
06h    WORD    encryption level
----------1A6405-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_ENDCONV" - END CONVERSATION
       AX = 6405h
       STACK:  WORD    conversation ID (0000h-0009h)
               DWORD   pointer to message buffer
               WORD    length of message
               WORD    0000h (use default "Cparms" structure)
Return: AX = status (see AX=6108h)
       STACK unchanged
Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
         which implements the Simple Network Application Protocol
SeeAlso: AX=6308h
----------1A6900-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_DATASEG" - GET RESIDENT DATA SEGMENT
       AX = 6900h
Return: AX = value used for DS by resident code
SeeAlso: AX=6A01h,AX=6F01h
----------1A6A01-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_ALLOC" - ALLOCATE BUFFER IN SNAP DATA SEGMENT
       AX = 6A01h
       STACK:  WORD    number of bytes to allocate
Return: AX = offset of allocated buffer or 0000h if out of memory
       STACK unchanged
Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
         which implements the Simple Network Application Protocol
SeeAlso: AX=6B01h
----------1A6B01-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_FREE" - DEALLOCATE BUFFER IN SNAP DATA SEGMENT
       AX = 6B01h
       STACK:  WORD    offset within SNAP data segment of previously allocated
                       buffer
Return: STACK unchanged
Note:   this call is a NOP if the specified offset is 0000h
SeeAlso: AX=6A01h
----------1A6C04-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYTO" - COPY DATA TO RESIDENT SNAP PACKAGE
       AX = 6C04h
       STACK:  WORD    offset within SNAP data segment of dest (nonzero)
               WORD    segment of source buffer
               WORD    offset of source buffer
               WORD    number of bytes to copy
Return: AX = offset of byte after last one copied to destination
       STACK unchanged
Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
         which implements the Simple Network Application Protocol
SeeAlso: AX=6D04h
----------1A6D04-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYFROM" - COPY DATA FROM RESIDENT SNAP PACKAGE
       AX = 6D04h
       STACK:  WORD    offset within SNAP data segment of source buffer
               WORD    segment of destination buffer
               WORD    offset of destination buffer
               WORD    number of bytes to copy
Return: AX = offset of byte after last one copied from source
       buffer filled
       STACK unchanged
SeeAlso: AX=6C04h
----------1A6E01-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_SETDEBUG" - SET ???
       AX = 6E01h
       STACK:  WORD    new value for ???
Return: AX = old value of ???
       STACK unchanged
Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
         which implements the Simple Network Application Protocol
----------1A6F01-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_CHKINSTALL" - INSTALLATION CHECK
       AX = 6F01h
       STACK: WORD 0000h
Return: AX = status
           0000h SNAP is resident
           other SNAP not present
       STACK unchanged
Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
         which implements the Simple Network Application Protocol, and is
         required by PCVENUS (a network shell).  The combination of SNAP and
         PCVENUS allows the use of the Andrew File System as one or more
         networked drives.
SeeAlso: AX=6900h,AX=7400h
----------1A7002-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_SETANCHOR"
       AX = 7002h
       STACK:  WORD    anchor number (0000h-0009h)
               WORD    new value for the anchor
Return: AX = status
           0000h successful
           FFFFh failed (top word on stack not in range 00h-09h)
       STACK unchanged
SeeAlso: AX=7101h
----------1A7101-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_GETANCHOR"
       AX = 7101h
       STACK:  WORD    anchor number (0000h-0009h)
Return: AX = anchor's value
       STACK unchanged
Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
         which implements the Simple Network Application Protocol
SeeAlso: AX=7002h
----------1A7202-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_SETCONVPARMS" - SET CONVERSATION PARAMETERS
       AX = 7202h
       STACK:  WORD    conversation ID (0000h-0009h)
               WORD    offset within resident data segment of "Cparms"
                       structure (see AX=6308h)
Return: AX = status???
       STACK unchanged
SeeAlso: AX=6308h
----------1A7302-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_CLIENTVERSION" - ???
       AX = 7302h
       STACK:  WORD    conversation ID (0000h-0009h)
               WORD    offset within resident data segment of ???
Return: AX = ???
       ???
       STACK unchanged
SeeAlso: AX=7400h
----------1A7400-----------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_VERSION" - GET VERSION
       AX = 7400h
Return: AX = version (AH=major, AL=minor)
Note:   this call is only valid if SNAP is installed
SeeAlso: AX=7302h,INT 1A/AX=6F01h
----------1A75-------------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_NOP" - ???
       AH = 75h
       AL = ???
Return: AX = ??? (0000h)
Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
         which implements the Simple Network Application Protocol
----------1A76-------------------------------
INT 1A - SNAP.EXE 3.2+ - "SNAP_802_5" - ???
       AH = 76h
       AL = ???
Return: AX = ???
----------1A77-------------------------------
INT 1A - SNAP.EXE 3.4 - ???
       AH = 77h
       AL = ??? (at least 01h)
       STACK:  WORD    ???
               ???
Return: ???
       STACK unchanged
----------1A7802-----------------------------
INT 1A - SNAP.EXE 3.4 - ???
       AX = 7802h
       STACK:  WORD    ???
               WORD    ???
Return: ???
       STACK unchanged
Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
         which implements the Simple Network Application Protocol
----------1A7F-------------------------------
INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
       AH = 7Fh
       ???
Return: ???
SeeAlso: AH=80h,AH=83h,AH=85h
----------1A80-------------------------------
INT 1A - PCjr - SET UP SOUND MULTIPLEXOR
       AH = 80h
       AL = 00h source is 8253 channel 2
            01h source is cassette input
            02h source is I/O channel "Audio IN"
            03h source is sound generator chip
SeeAlso: AH=7Fh,AH=83h
----------1A8100-----------------------------
INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND - INSTALLATION CHECK
       AX = 8100h
Return: AH > 80h if supported
----------1A83-------------------------------
INT 1A - Tandy 2500, Tandy 1000L series - START PLAYING DIGITAL SOUND
       AH = 83h
       AL = volume (0=lowest, 7=highest)
       CX = number of bytes to play
       DX = time between sound samples (multiples of 273 nanoseconds)
       ES:BX -> sound data (array of 8-bit PCM samples)
Return: ???
Notes:  this call returns immediately while the sound plays in the
         background
       The sound data pointed to by ES:BX probably shouldn't cross a 64k
         boundary.  The BIOS appears to call INT 15/AX=91FBh when the sound
         device underflows to allow another INT 1A/AH=83h for seamless
         playing of long sounds.
SeeAlso: AH=84h,INT 15/AH=91h
----------1A84-------------------------------
INT 1A - Tandy 2500, Tandy 1000L series - STOP PLAYING DIGITAL SOUND
       AH = 84h
Return: ???
SeeAlso: AH=83h,AH=85h
----------1A85-------------------------------
INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
       AH = 85h
       ???
Return: ???
SeeAlso: AH=7Fh,AH=83h
----------1AA0-------------------------------
INT 1A - Disk Spool II v2.07 - INSTALLATION CHECK
       AH = A0h
Return: AH = B0h if installed
           AL = pending INT 1A/AH=D0h subfunction if nonzero???
           ES = code segment
           ES:BX -> name of current spool file
           ES:SI -> current despool file
           CL = 00h despooler is disabled
              = 41h despooler is enabled
           CH = 00h spooler is disabled
              = 41h spooler is enabled
           DL = 00h despooler is currently active printing a file
              = 41h despooler is standing by
           DH = 00h ???
              = 41h ???
           DI = 0000h ???
                0001h ???
Note:   Disk Spool II is a shareware disk-based print spooler by Budget
         Software Company
SeeAlso: AH=ABh,AH=C0h,AH=D0h
----------1AAB-------------------------------
INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK
       AH = ABh
Return: AH = BAh if installed
           AL = pending INT 1A/AH=ADh subfunction if nonzero???
           ES = code segment
           ES:BX -> name of current spool file
           ES:SI -> current despool file
           CL = 00h despooler is disabled
              = 41h despooler is enabled
           CH = 00h spooler is disabled
              = 41h spooler is enabled
           DL = 00h despooler is currently active printing a file
              = 41h despooler is standing by
           DH = 00h ???
              = 41h ???
           DI = 0000h ???
                0001h ???
Note:   Disk Spool II is a shareware disk-based print spooler by Budget
         Software Company
SeeAlso: AH=A0h,AH=ACh,AH=ADh
----------1AAC-------------------------------
INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK
       AH = ACh
Return: (see AH=ABh)
Note:   this function is identical to AH=ABh
SeeAlso: AH=A0h,AH=ABh,AH=ADh
----------1AAD-------------------------------
INT 1A - Disk Spool II v1.83 - FUNCTION CALLS
       AH = ADh
       AL = function code
           02h enable spooler only
           03h enable the despooler
           04h disable the despooler
           08h inhibit popup menu
           09h enable popup menu
           0Ah ???
           0Bh disable the spooler
           0Ch start despooler after last successfully printed document???
           0Dh start despooler at the exact point where it last left off???
           0Eh pop up the menu
           0Fh ???
           11h ???
           14h ???
           15h ???
           16h ???
           17h ???
           18h ???
           19h ???
           20h clear file pointed to by the despooler???
           21h ???
           22h ???
           23h ???
           30h ???
Return: AH = 00h if successful
SeeAlso: AH=ABh
----------1AC0-------------------------------
INT 1A - Disk Spool II v2.07 - ALTERNATE INSTALLATION CHECK
       AH = C0h
Return: (see AH=A0h)
Note:   this call is identical to AH=A0h
SeeAlso: AH=A0h,AH=ABh,AH=D0h
----------1AD0-------------------------------
INT 1A - Disk Spool II v2.07 - FUNCTION CALLS
       AH = D0h
       AL = function code
           01h enable spooler and despooler
           02h enable spooler only
           03h enable despooler at beginning of file
           04h disable the despooler
           05h disable the despooler and spooler
           06h clear the spool file
           08h inhibit the popup menu
           09h enable the popup menu
           0Ah ??? (called by Disk Spool's INT 21 handler)
           0Bh disable the spooler
           0Ch start despooler after last successfully printed document
           0Dh start despooler at the exact point where it last left off
           0Eh pop up the menu
           0Fh ???
           11h start new spool file??? (called by Disk Spool's INT 21 handler
                       when a program terminates)
           14h ???
           15h delete despool file and reset ???
           16h ??? (writes something to unknown file)
           17h ??? (writes something to despool file, then reads something
                       else and ???)
           18h ??? (reads something from despool file, and then ???)
           19h ??? (creates/truncates spool file)
           20h clear file pointed to by the despooler
           21h ??? (writes something to unknown file)
           22h ??? (writes something to spool file if spooler/despooler using
                       same file)
           23h ??? (opens/creates unknown file, then ???)
           30h ???
           31h ???
           32h beep
           33h append CRLF to spool file???
           34h ???
           35h ???
           36h ???
           37h append CRLF to spool file and start a new spool file???
           38h ???
           51h ??? (called by Disk Spool's INT 21 handler)
           52h ??? (called by Disk Spool's INT 21 handler)
           57h ???
SeeAlso: AH=A0h,AH=ADh
----------1AF7-------------------------------
INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
       AH = F7h
Notes:  RighTime is a TSR by G.T. Becker which continuously adjusts the system
         time to correct for clock drift
       any AH value from F0h-F7h or F9h-FEh will perform this function in
         version 1.1, but F7h is the function called by transient portion
SeeAlso: AH=F8h,AH=FFh"RighTime"
----------1AF8-------------------------------
INT 1A - RighTime v1.1 - ENABLE
       AH = F8h
Notes:  RighTime is a TSR by G.T. Becker which continuously adjusts the system
         time to correct for clock drift
       RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
         TeSseRact program identifier based on its current state: "RighTime"
         when enabled, "RighTim"F7h when disabled.
SeeAlso: AH=F7h,AH=FFh"RighTime"
----------1AFE-------------------------------
INT 1A - AT&T 6300 - READ TIME AND DATE
       AH = FEh
Return: BX = day count (0 = Jan 1, 1984)
       CH = hour
       CL = minute
       DH = second
       DL = hundredths
SeeAlso: AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
----------1AFF-------------------------------
INT 1A - AT&T 6300 - SET TIME AND DATE
       AH = FFh
       BX = day count (0 = Jan 1, 1984)
       CH = hour
       CL = minute
       DH = second
       DL = hundredths
Return: ???
SeeAlso: AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
----------1AFF-------------------------------
INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
       AH = FFh
Notes:  RighTime is a TSR by G.T. Becker which continuously adjusts the system
         time to correct for clock drift
       upon being permanently disabled, RighTime closes the file handle
         referencing its executable (which is updated with time correction
         information every two minutes while RighTime is enabled).
----------1B---------------------------------
INT 1B - KEYBOARD - CONTROL-BREAK HANDLER
  called when INT 09 determines that Control-Break has been pressed
Note:   normally points to a short routine in DOS which sets the Ctrl-C flag,
         thus invoking INT 23h the next time DOS checks for Ctrl-C.
SeeAlso: INT 23
----------1C---------------------------------
INT 1C - TIME - SYSTEM TIMER TICK
  called on each clock tick by the INT 08 handler
Notes:  preferred interrupt to chain when a program needs to be invoked
         regularly
       not available on NEC 9800-series PCs
SeeAlso: INT 08
----------1D---------------------------------
INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
Note:   default parameter table at F000h:F0A4h for 100% compatible BIOSes
SeeAlso: INT 10/AH=00h

Format of video parameters:
Offset  Size    Description
00h 16 BYTEs   6845 register values for modes 00h and 01h
10h 16 BYTEs   6845 register values for modes 02h and 03h
20h 16 BYTEs   6845 register values for modes 04h and 05h
30h 16 BYTEs   6845 register values for modes 06h and 07h
40h    WORD    bytes in video buffer for modes 00h and 01h
42h    WORD    bytes in video buffer for modes 02h and 03h
44h    WORD    bytes in video buffer for modes 04h and 05h
46h    WORD    bytes in video buffer for modes 06h and 07h
48h  8 BYTEs   columns on screen for each of modes 00h through 07h
50h  8 BYTEs   CRT controller mode bytes for each of modes 00h through 07h
----------1E---------------------------------
INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
Note:   default parameter table at F000h:EFC7h for 100% compatible BIOSes
SeeAlso: INT 13/AH=0Fh,INT 41

Format of diskette parameter table:
Offset  Size    Description
00h    BYTE    first specify byte
               bits 7-4: step rate
                    3-0: head unload time (0Fh = 240 ms)
01h    BYTE    second specify byte
               bits 7-1: head load time (01h = 4 ms)
                      0: non-DMA mode (always 0)
02h    BYTE    delay until motor turned off (in clock ticks)
03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
04h    BYTE    sectors per track
05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
08h    BYTE    format filler byte (default F6h)
09h    BYTE    head settle time in milliseconds
0Ah    BYTE    motor start time in 1/8 seconds
----------1F---------------------------------
INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  points at 1024 bytes of graphics data, 8 bytes for each character 80h-FFh
Note:   graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
         compatible BIOSes
SeeAlso: INT 10/AX=5000h,INT 43
---------------------------------------------

Downloaded From P-80 International Information Systems 304-744-2253