home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / doc / intlist / interrup.lst < prev    next >
File List  |  1991-05-11  |  2MB  |  62,191 lines

  1. Interrupt List        Release 33            Last change 1/3/93
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. ---------------------------------------------
  4. Please redistribute the following files unmodified as a group, in a pair of
  5. archives named INTER33A and INTER33B (preferably the original authenticated
  6. PKZIP archives):
  7.     INTERRUP.1ST    the read-me file, containing credits, availability info
  8.     INTERRUP.A    INT 00 through INT 14    \
  9.     INTERRUP.B    INT 15 through INT 1F     \   total 1037 pages at
  10.     INTERRUP.C    INT 20 thru INT 21/7F      \  60 lines per page,
  11.     INTERRUP.D    INT 21/80 through INT 2E   \ 1110 with INTPRINT -p
  12.     INTERRUP.E    INT 2F through INT 2F/BF   / (4500 entries)
  13.     INTERRUP.F    INT 2F/C0 through INT 4F  /
  14.     INTERRUP.G    INT 50 through INT 67     /
  15.     INTERRUP.H    INT 68 through INT FF    /
  16.     INTERRUP.PRI    a brief introduction to interrupts
  17.     INTPRINT.COM    a simple formatter that also generates a list summary
  18.     INTPRINT.DOC    instructions for INTPRINT
  19.     GLOSSARY.LST    a glossary of terms, abbreviations, and acronyms
  20.     MEMORY.LST    format of the BIOS data area
  21. The following files should be distributed in an archive called INTER33C:
  22.     INT.COM        invoke interrupts from commandline
  23.     INT2GUID.*    convert list into TurboPower GUIDE or POPHELP database
  24.     INT2HLP.BAT    Perl script to convert list into QuickHelp database
  25.     INT2QH.*    program to convert list into QuickHelp database
  26.     INTHELP.*    convert list into TurboPower GUIDE database
  27.     INTLIST.E    Epsilon extension for handling list
  28.     INTPRINT.C    source code for INTPRINT
  29. ---------------------------------------------
  30. If you notice any mistakes or omissions, please let me know!  It is only with
  31. YOUR help that the list can continue to grow at the current rate.  Please send
  32. all changes to me rather than distributing a modified version of the list.
  33.  
  34. Please read the file INTERRUP.1ST before asking me any questions.  You may find
  35. that they have already been addressed.
  36.  
  37.      Ralf Brown
  38.  
  39. ARPA: ralf@cs.cmu.edu
  40. UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf
  41. BIT:  ralf%cs.cmu.edu@carnegie
  42. FIDO: Ralf Brown 1:129/26.1
  43.     or post a message to me in the DR_DEBUG echo (I probably won't see it
  44.     unless you address it to me)
  45. CIS:  >INTERNET:ralf@cs.cmu.edu 
  46.  
  47. I reply to all e-mail submissions and inquiries, but some of my replies bounce
  48. because of bad return paths.  If you don't get a response from me within a
  49. reasonable period of time, send it again with a better return path (starting at
  50. harvard or ucbvax for UUCP, from the ARPA Internet for others).
  51. ---------------------------------------------
  52. See INTERRUP.1ST for the key to system abbreviations and a list of the
  53. trademarks mentioned here.
  54. ---------------------------------------------
  55. DISCLAIMER:  THIS MATERIAL IS PROVIDED "AS IS".     I verify the information
  56. contained in this list to the best of my ability, but I cannot be held
  57. responsible for any problems caused by use or misuse of the information,
  58. especially for those functions not officially  documented.  If it is marked
  59. "internal" or undocumented, you should check it carefully to make sure it
  60. works the same way in your version of the software (and please let me know
  61. whether or not it works the same way).    Information marked with "???" is
  62. known to be incomplete or guesswork.
  63. ---------------------------------------------
  64. The use of -> instead of = signifies that the indicated register or register
  65. pair contains a pointer to the specified item, rather than the item itself.
  66. One or more letters may follow the interrupt number; they have the following
  67. meanings:  U - undocumented function, u - partially documented function,
  68. P - available only in protected mode, R - available only in real or V86 mode
  69. ----------00---------------------------------
  70. INT 00 - CPU-generated - DIVIDE ERROR
  71. Desc:    generated if the divisor of a DIV or IDIV instruction is zero or the
  72.       quotient overflows the result register; DX and AX will be unchanged.
  73. Notes:    on an 8086/8088, the return address points to the following instruction
  74.     on an 80286+, the return address points to the divide instruction
  75. SeeAlso: INT 04
  76. ----------01---------------------------------
  77. INT 01 - CPU-generated - SINGLE STEP
  78. Desc:    generated after each instruction if TF (trap flag) is set; TF is
  79.       cleared on invoking the single-step interrupt handler
  80. Notes:    interrupts are prioritized such that external interrupts are invoked
  81.       after the INT 01 pushes CS:IP/FLAGS and clears TF, but before the
  82.       first instruction of the handler executes
  83.     used by debuggers for single-instruction execution tracing, such as
  84.       MSDOS DEBUG's T command
  85. SeeAlso: INT 03
  86. ----------01---------------------------------
  87. INT 01 - CPU-generated (80386+) - DEBUGGING EXCEPTIONS
  88. Desc:    generated by the CPU on various occurrences which may be of interest
  89.       to a debugger program
  90. Note:    events which may trigger the interrupt:
  91.       Instruction address breakpoint fault - will return to execute inst
  92.       Data address breakpoint trap - will return to following instruction
  93.       General detect fault, debug registers in use
  94.       Task-switch breakpoint trap
  95. SeeAlso: INT 03
  96. ----------02---------------------------------
  97. INT 02 - external hardware - NON-MASKABLE INTERRUPT
  98. Desc:    generated by the CPU when the input to the NMI pin is asserted
  99. Notes:    return address points to start of interrupted instruction on 80286+
  100.     although the Intel documentation states that this interrupt is
  101.       typically used for power-failure procedures, it has many other uses
  102.       on IBM-compatible machines:
  103.         Memory parity error: all except Jr, CONV, and some machines
  104.                 without memory parity
  105.         Breakout switch on hardware debuggers
  106.         Coprocessor interrupt: all except Jr and CONV
  107.         Keyboard interrupt: Jr, CONV
  108.         I/O channel check: CONV, PS50+
  109.         Disk-controller power-on request: CONV
  110.         System suspend: CONV
  111.         Real-time clock: CONV
  112.         System watch-dog timer, time-out interrupt: PS50+
  113.         DMA timer time-out interrupt: PS50+
  114.         Low battery: HP 95LX
  115.         Module pulled: HP 95LX
  116. ----------03---------------------------------
  117. INT 03 - CPU-generated - BREAKPOINT
  118. Desc:    generated by the one-byte breakpoint instruction (opcode CCh)
  119. Notes:    used by debuggers to implement breakpoints, such as MSDOS DEBUG's G
  120.       command
  121.     also used by Turbo Pascal versions 1,2,3 when {$U+} specified
  122.     return address points to byte following the breakpoint instruction
  123. SeeAlso: INT 01
  124. ----------0309--SI4647-----------------------
  125. INT 03 - Soft-ICE BACK DOOR COMMANDS
  126.     AH = 09h
  127.     SI = 4647h ('FG')
  128.     DI = 4A4Dh ('JM')
  129.     AL = function
  130.         10h display string in Soft-ICE window
  131.         DS:DX -> ASCIZ string to display (max 100 bytes, 0Dh OK)
  132.         11h execute Soft-ICE command
  133.         DS:DX -> ASCIZ command string (max 100 bytes, 0Dh OK)
  134.         12h get breakpoint information
  135.         Return:    BH = entry number of last breakpoint set
  136.             BL = type of last breakpoint set
  137.                 00h BPM (breakpoint register types)
  138.                 01h I/O
  139.                 02h INTerrupt
  140.                 03h BPX (INT 03h-style breakpoint)
  141.                 04h reserved
  142.                 05h range
  143.             DH = entry number of last breakpoint to be triggered
  144.             DL = type of last triggered breakpoint (see above)
  145. Desc:    this API allows application programs to control some aspects of the
  146.       Soft-ICE debugger
  147. Program: Soft-ICE is a debugger by Nu-Mega Technologies, Inc.
  148. ----------04---------------------------------
  149. INT 04 - CPU-generated - INTO DETECTED OVERFLOW
  150. Desc:    the INTO instruction will generate this interrupt if OF (Overflow Flag)
  151.       is set; otherwise, INTO is effectively a NOP
  152. Note:    may be used for convenient overflow testing (to prevent errors from
  153.       propagating) instead of JO or a JNO/JMP combination
  154. SeeAlso: INT 00
  155. ----------05---------------------------------
  156. INT 05 - PRINT SCREEN
  157. Desc:    dump the current text screen to the first printer
  158. Notes:    normally invoked by the INT 09 handler when PrtSc key is pressed, but
  159.       may be invoked directly by applications
  160.     byte at 0050h:0000h contains status used by default handler
  161.       00h not active
  162.       01h PrtSc in progress
  163.       FFh last PrtSc encountered error
  164.     default handler is at F000h:FF54h in IBM PC and 100%-compatible BIOSes
  165. SeeAlso: INT 10/AH=12h/BL=20h
  166. ----------05---------------------------------
  167. INT 05 - CPU-generated (80186+) - BOUND RANGE EXCEEDED
  168. Desc:    generated by BOUND instruction when the value to be tested is less than
  169.       the indicated lower bound or greater than the indicated upper bound.
  170. Note:    returning from this interrupt re-executes the failing BOUND instruction
  171. ----------06---------------------------------
  172. INT 06 - CPU-generated (80286+) - INVALID OPCODE
  173. Desc:    this interrupt is generated when the CPU attempts to execute an
  174.       invalid opcode (most protected-mode instructions are considered
  175.       invalid in real mode) or a BOUND, LDS, LES, or LIDT instruction
  176.       which specifies a register rather than a memory address
  177. Notes:    return address points to beginning of invalid instruction
  178.     with proper programming, this interrupt may be used to emulate
  179.       instructions which do not exist; many 386 BIOSes emulate the 80286
  180.       undocumented LOADALL instruction which was removed from the 80386+
  181. SeeAlso: INT 0C"CPU",INT 0D"CPU"
  182. ----------06---------------------------------
  183. INT 06 C - HP 95LX - SLEEP/WAKEUP
  184. Desc:    this interrupt is called just before going into light or deep
  185.       (shutdown) sleep and just after returning from light or deep sleep
  186. SeeAlso: INT 0B"HP 95LX",INT 15/AX=4DD4h,INT 15/AH=4Eh
  187. ----------07---------------------------------
  188. INT 07 - CPU-generated (80286+) - PROCESSOR EXTENSION NOT AVAILABLE
  189. Desc:    this interrupt is automatically called if a coprocessor instruction is
  190.       encountered when no coprocessor is installed
  191. Note:    can be used to emulate a numeric coprocessor in software
  192. SeeAlso: INT 09"MATH UNIT PROTECTION"
  193. ----------08---------------------------------
  194. INT 08 - IRQ0 - SYSTEM TIMER
  195. Desc:    generated 18.2 times per second by channel 0 of the 8254 system timer,
  196.       this interrupt is used to keep the time-of-day clock updated
  197. Notes:    programs which need to be invoked regularly should use INT 1C unless
  198.       they need to reprogram the timer while still keeping the time-of-day
  199.       clock running at the proper rate
  200.     default handler is at F000h:FEA5h in IBM PC and 100%-compatible BIOSes
  201.     may be masked by setting bit 0 on I/O port 21h
  202. SeeAlso: INT 1C,INT 4A,INT 50"DESQview",INT 58"DoubleDOS",INT 70,INT 78"GO32"
  203. ----------08---------------------------------
  204. INT 08 - CPU-generated (80286+) - DOUBLE EXCEPTION DETECTED
  205. Desc:    called when multiple exceptions occur on one instruction, or an
  206.       exception occurs in an exception handler
  207. Notes:    called in protected mode if an interrupt above the defined limit of
  208.       the interrupt vector table occurs
  209.     return address points at beginning of instruction with errors or the
  210.       beginning of the instruction which was about to execute when the
  211.       external interrupt caused the exception
  212.     if an exception occurs in the double fault handler, the CPU goes into
  213.       SHUTDOWN mode (which circuitry in the PC/AT converts to a reset);
  214.       this "triple fault" is a faster way of returning to real mode on
  215.       many 80286 machines than the standard keyboard controller reset
  216. ----------09---------------------------------
  217. INT 09 - IRQ1 - KEYBOARD DATA READY
  218. Desc:    this interrupt is generated when data is received from the keyboard.
  219.       This is normally a scan code (from either a keypress *or* a key
  220.       release), but may also be an ACK or NAK of a command on AT-class
  221.       keyboards.
  222. Notes:    this IRQ may be masked by setting bit 1 on I/O port 21h
  223.     if the BIOS supports an enhanced (101/102-key) keyboard, it calls
  224.       INT 15/AH=4Fh after reading the scan code from the keyboard and
  225.       before further processing; all further processing uses the scan
  226.       code returned from INT 15/AH=4Fh
  227.     the default interrupt handler is at F000h:E987h in 100%-compatible
  228.       BIOSes
  229.     the interrupt handler performs the following actions for certain
  230.       special keystrokes:
  231.         Ctrl-Break     clear keyboard buffer, place word 0000h in buffer,
  232.              invoke INT 1B, and set flag at 0040h:0071h
  233.         SysRq     invoke INT 15/AH=85h
  234.         Ctrl-Numlock place system in a tight wait loop until next INT 09
  235.         Ctrl-Alt-Del jump to BIOS startup code (either F000h:FFF0h or the
  236.                destination of the jump at that address)
  237.         Shift-PrtSc     invoke INT 05
  238.     DRDOS hooks this interrupt to control the cursor shape (underscore/
  239.       half block) for overwrite/insert mode
  240.     DR Multiuser DOS hooks this interrupt for cursor shape control and to
  241.       control whether Ctrl-Alt-Del reboots the current session or the
  242.       entire system
  243. SeeAlso: INT 05,INT 0B"HP 95LX",INT 15/AH=4Fh,INT 15/AH=85h,INT 16,INT 1B
  244. SeeAlso: INT 2F/AX=A901h,INT 51"DESQview",INT 59"DoubleDOS",INT 79"GO32"
  245.  
  246. Values for scan code:
  247.  01h    Esc         31h    N        
  248.  02h    1 !         32h    M        
  249.  03h    2 @         33h    , <         63h    F16
  250.  04h    3 #         34h    . >         64h    F17
  251.  05h    4 $         35h    / ?         65h    F18
  252.  06h    5 %         36h    Right Shift     66h    F19
  253.  07h    6 ^         37h    Grey*         67h    F20
  254.  08h    7 &         38h    Alt         68h    F21
  255.  09h    8 *         39h    SpaceBar     69h    F22
  256.  0Ah    9 (         3Ah    CapsLock     6Ah    F23
  257.  0Bh    0 )         3Bh    F1         6Bh    F24
  258.  0Ch    - _         3Ch    F2         6Ch    --
  259.  0Dh    = +         3Dh    F3         6Dh    EraseEOF
  260.  0Eh    Backspace     3Eh    F4        
  261.  0Fh    Tab         3Fh    F5         6Fh    Copy/Play
  262.  10h    Q         40h    F6        
  263.  11h    W         41h    F7        
  264.  12h    E         42h    F8         72h    CrSel
  265.  13h    R         43h    F9        
  266.  14h    T         44h    F10         74h    ExSel
  267.  15h    Y         45h    NumLock         75h    --
  268.  16h    U         46h    ScrollLock     76h    Clear
  269.  17h    I         47h    Home
  270.  18h    O         48h    UpArrow
  271.  19h    P         49h    PgUp
  272.  1Ah    [ {         4Ah    Grey-
  273.  1Bh    ] }         4Bh    LeftArrow
  274.  1Ch    Enter         4Ch    Keypad 5                     
  275.  1Dh    Ctrl         4Dh    RightArrow                     
  276.  1Eh    A         4Eh    Grey+                         
  277.  1Fh    S         4Fh    End                         
  278.  20h    D         50h    DownArrow     E0h    prefix code
  279.  21h    F         51h    PgDn         E1h    prefix code
  280.  22h    G         52h    Ins         FAh    ACK
  281.  23h    H         53h    Del         FEh    RESEND
  282.  24h    J         54h    SysRq         FFh    kbd error/buffer full
  283.  25h    K
  284.  26h    L                    
  285.  27h    ; :         57h    F11
  286.  28h    ' "         58h    F12        
  287.  29h    ` ~        
  288.  2Ah    Left Shift     5Ah    PA1
  289.  2Bh    \ |         5Bh    F13
  290.  2Ch    Z         5Ch    F14
  291.  2Dh    X         5Dh    F15
  292.  2Eh    C        
  293.  2Fh    V        
  294.  30h    B        
  295. Note:    scan codes 57h-E1h are only available on the extended (101/102-key)
  296.       keyboard and Host Connected (122-key) keyboard; scan codes 5Ah-76h
  297.       are only available on the 122-key keyboard
  298. ----------09---------------------------------
  299. INT 09 - CPU-generated (80286,80386) - PROCESSOR EXTENSION PROTECTION ERROR
  300. Desc:    called if the coprocessor attempts to access memory outside a segment
  301.       boundary; it may occur at an arbitrary time after the coprocessor
  302.       instruction was issued
  303. Note:    until the condition is cleared or the coprocessor is reset, the only
  304.       coprocessor instruction which may be used is FNINIT; WAIT or other
  305.       coprocessor instructions will cause a deadlock because the
  306.       coprocessor is still busy waiting for data
  307. SeeAlso: INT 07"CPU"
  308. ----------09---------------------------------
  309. INT 09 P - internal hardware - RESERVED BY Intel (80486)
  310. Note:    this exception has been moved to INT 0D
  311. SeeAlso: INT 09"MATH",INT 0D
  312. ----------0A---------------------------------
  313. INT 0A - IRQ2 - LPT2 (PC), VERTICAL RETRACE INTERRUPT (EGA,VGA)
  314. Notes:    the TOPS and PCnet adapters use this interrupt request line by default
  315.     DOS 3.2 revectors IRQ2 to a stack-switching routine
  316.     on ATs and above, the physical data line for IRQ2 is labeled IRQ9 and
  317.       connects to the slave 8259.  The BIOS redirects the interrupt for
  318.       IRQ9 back here.
  319.     under DESQview, only the INT 15h vector and BASIC segment address (the
  320.       word at 0000h:0510h) may be assumed to be valid for the handler's
  321.       process
  322.     many VGA boards do not implement the vertical retrace interrupt,
  323.       including the IBM VGA Adapter where the traces are either cut or
  324.       removed
  325. SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71,INT 7A"GO32"
  326. ----------0A---------------------------------
  327. INT 0A - IRQ2 - Tandy 1000-series HARD DISK
  328. Note:    may be masked by setting bit 2 on I/O port 21h
  329. SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71
  330. ----------0A---------------------------------
  331. INT 0A - IRQ2 - ROLAND MPU MIDI INTERFACE
  332. Note:    newer Roland cards and MIDI interfaces by other manufacturers use
  333.       a jumper-selectable IRQ, but software and hardware generally defaults
  334.       to IRQ2
  335. SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71,INT 7A"GO32"
  336. ----------0A---------------------------------
  337. INT 0A P - CPU-generated (80286+) - INVALID TASK STATE SEGMENT
  338. Desc:    automatically called during a task switch if the new TSS specified by
  339.       the task gate is invalid for any of the following reasons:
  340.         TSS limit is less than 43 (80286) or 103 (80386/80486)
  341.         LDT selector invalid or segment not present
  342.         null SS selector, or SS selector outside LDT/GDT limit
  343.         stack segment is read-only
  344.         stack segment DPL differs from new CPL, or RPL <> CPL
  345.         CS selector is outside LDT/GDT limit or not code
  346.         non-conforming code segment's DPL differs from CPL
  347.         conforming code segment's DPL > CPL
  348.         DS/ES selectors outside LDT/GDT limit or not readable segments
  349. Note:    the handler must use a task gate in order to have a valid TSS under
  350.       which to execute; it must also reset the busy bit in the new TSS
  351. SeeAlso: INT 0B"CPU"
  352. ----------0B---------------------------------
  353. INT 0B - IRQ3 - SERIAL COMMUNICATIONS (COM2)
  354. Notes:    the TOPS and PCnet adapters use this interrupt request line as an
  355.       alternate
  356.     on PS/2's, COM2 through COM8 share this interrupt; on many PC's, COM4
  357.       shares this interrupt
  358.     may be masked by setting bit 3 on I/O port 21h
  359. SeeAlso: INT 0C"COM1",INT 53"DESQview",INT 5B"DoubleDOS",INT 7B"GO32"
  360. ----------0B---------------------------------
  361. INT 0B P - CPU-generated (80286+) - SEGMENT NOT PRESENT
  362. Desc:    generated when loading a segment register if the segment descriptor
  363.       indicates that the segment is not currently in memory, unless the
  364.       segment is an LDT (see INT 0A"CPU") or stack segment (see
  365.       INT 0C"CPU") needed by a task switch
  366. Note:    may be used to implement virtual memory by loading in segments as they
  367.       are accessed, clearing the "not present" bit after loading
  368. SeeAlso: INT 0A"CPU",INT 0E"hardware"
  369. ----------0B---------------------------------
  370. INT 0B - HP 95LX - LOW-LEVEL KEYBOARD HANDLER
  371. Desc:    this is the lowest-level keyboard handler on an HP 95LX palmtop
  372. Note:    debounces key, places the keycode in I/O register 60h, and calls INT 09
  373. SeeAlso: INT 09,INT 0D"HP 95LX",INT 15/AX=4DD4h
  374. ----------0C---------------------------------
  375. INT 0C - IRQ4 - SERIAL COMMUNICATIONS (COM1)
  376. Notes:    on many PC's, COM3 shares this interrupt
  377.     may be masked by setting bit 4 on I/O port 21h
  378.     this vector is modified but not restored by Direct Access v4.0, and
  379.       may be left dangling by other programs written with the same version
  380.       of compiled BASIC
  381. SeeAlso: INT 0B"COM2",INT 54"DESQview",INT 5C"DoubleDOS",INT 7C"GO32"
  382. ----------0C---------------------------------
  383. INT 0C - CPU-generated (80286+) - STACK FAULT
  384. Desc:    this interrupt is generated in protected mode on a stack overflow or
  385.       underflow, or if an inter-level transition or task switch references
  386.       a stack segment marked "not present"; it is generated in real mode
  387.       on accessing a word operand at SS:FFFFh
  388. Note:    the 80286 will shut down in real mode if SP=1 before a push.  On the
  389.       PC AT and compatibles, external circuitry generates a reset on
  390.       shutdown.
  391. SeeAlso: INT 0B"CPU",INT 0D"CPU"
  392. ----------0C---------------------------------
  393. INT 0C - IBM SYSTEM 36/38 WORKSTATION EMULATION - API POINTER
  394.    Call offset 100h in the interrupt handler's segment with
  395.     AH = function
  396.         03h update screen
  397.         05h select next session
  398.         AL = session number (00h-03h)
  399.         Return: AL = session type code
  400.                 00h not active
  401.                 01h display session
  402.                 02h printer session
  403.                 FEh invalid session number
  404.             DS = requested session's data segment (0 if not active)
  405. Return: ???
  406.  
  407. Format of emulator's data area (offset from interrupt handler's segment):
  408. Offset    Size    Description
  409. 13Eh    BYTE    bit flags for status line indicators turned on since this byte
  410.         last zerod
  411. 13Fh    BYTE    bit flags for status line indicators turned off since this
  412.         byte last set to FFh
  413. 140h    WORD    offset of EBCDIC to ASCII translation
  414. 146h    WORD    offset of EBCDIC screen buffer
  415. 148h    WORD    offset of EC (engineering change) level signature
  416. 150h    BYTE    "KEYI"
  417. 151h    BYTE    5250 key scan code to be sent to remote
  418. 15Bh    BYTE    "SYSAV"
  419. 15Dh    BYTE    5250 cursor column
  420. 15Eh    BYTE    5250 cursor row
  421. 167h    BYTE    "DVCTAD"
  422. 178h    BYTE    "FLAGS"
  423. 184h    BYTE    "SESSNOAD"
  424. 193h    BYTE    "STNAD"
  425. 198h    BYTE    "NSDS"
  426. ----------0D---------------------------------
  427. INT 0D - IRQ5 - FIXED DISK (PC,XT), LPT2 (AT), reserved (PS/2)
  428. Notes:    under DESQview, only the INT 15h vector and BASIC segment address (the
  429.       word at 0000h:0510h) may be assumed to be valid for the handler's
  430.       process
  431.     may be masked by setting bit 5 on I/O port 21h
  432. SeeAlso: INT 0E"IRQ6",INT 0F"IRQ7",INT 55"DESQview",INT 5D"DoubleDOS"
  433. SeeAlso: INT 7D"GO32"
  434. ----------0D---------------------------------
  435. INT 0D - IRQ5 - Tandy 1000 60 Hz RAM REFRESH
  436. Desc:    used to ensure that the dynamic RAM retains its contents
  437. SeeAlso: INT 55
  438. ----------0D---------------------------------
  439. INT 0D - HP 95LX - INFRARED INTERRUPT
  440. Desc:    this interrupt is used to perform communications over the infrared
  441.       data link
  442. SeeAlso: INT 0B"HP 95LX",INT 0E"HP 95LX",INT 15/AX=4DD4h
  443. ----------0D---------------------------------
  444. INT 0D - CPU-generated (80286+) - GENERAL PROTECTION VIOLATION
  445. Desc:    the CPU generates this interrupt when it detects a protection violation
  446.       which does not fit under any other category having a separate
  447.       interrupt
  448. Notes:    called in real mode when
  449.         an instruction accesses a word operand located at offset FFFFh in
  450.           segment CS, DS, ES, FG, or GS
  451.         a PUSH MEM or POP MEM instruction contains an invalid bit encoding
  452.           in the second byte
  453.         an instruction exceeds the maximum length allowed (10 bytes for
  454.           80286, 15 bytes for 80386/80486)
  455.         an instruction wraps from offset FFFFh to offset 0000h
  456.     called in protected mode on protection violations not covered by INT 06
  457.       through INT 0C, including
  458.         segment limit violations
  459.         write to read-only segments
  460.         accesses using null DS or ES selectors
  461.         accesses to segments with privilege greater than CPL
  462.         wrong descriptor type
  463.     called on 80486 protected-mode floating-point protection fault
  464. SeeAlso: INT 09"80486",INT 0C"STACK"
  465. ----------0E---------------------------------
  466. INT 0E - IRQ6 - DISKETTE CONTROLLER
  467. Desc:    this interrupt is generated by the floppy disk controller on
  468.       completion of an operation
  469. Notes:    default handler is at F000h:EF57h in IBM PC and 100%-compatible BIOSes
  470.     may be masked by setting bit 6 on I/O port 21h
  471. SeeAlso: INT 0D"IRQ5",INT 56"DESQview",INT 5E"DoubleDOS",INT 7E"GO32"
  472. ----------0E---------------------------------
  473. INT 0E - CPU-generated (80386+ native mode) - PAGE FAULT
  474. Desc:    this interrupt is generated in protected and virtual-86 modes on
  475.       attempting to access a 4K memory page whose page table entry has
  476.       the "present" bit cleared
  477. Note:    used to implement virtual memory
  478. SeeAlso: INT 0B"hardware"
  479. ----------0E---------------------------------
  480. INT 0E - HP 95LX - EXTERNAL CARD INTERRUPT
  481. SeeAlso: INT 0D"HP 95LX",INT 0F"HP 95LX",INT 15/AX=4DD4h
  482. ----------0F---------------------------------
  483. INT 0F - IRQ7 - PARALLEL PRINTER
  484. Desc:    this interrupt is generated by the LPT1 printer adapter when the
  485.       printer becomes ready
  486. Notes:    most printer adapters do not reliably generate this interrupt
  487.     the 8259 interrupt controller generates an interrupt corresponding to
  488.       IRQ7 when an error condition occurs
  489. SeeAlso: INT 0D"LPT2",INT 57"DESQview",INT 5F"DoubleDOS",INT 7F"GO32"
  490. ----------0F---------------------------------
  491. INT 0F - HP 95LX - REAL-TIME CLOCK
  492. SeeAlso: INT 0E"HP 95LX",INT 15/AX=4DD4h,INT 70
  493. ----------10---------------------------------
  494. INT 10 - CPU-generated (80286+) - COPROCESSOR ERROR
  495. Desc:    this interrupt is generated by the CPU when the -ERROR pin is asserted
  496.       by the coprocessor
  497. Note:    AT's and clones usually wire the coprocessor to use IRQ13, but not all
  498.       get it right
  499. SeeAlso: INT 09"hardware",INT 75
  500. ----------1000-------------------------------
  501. INT 10 - VIDEO - SET VIDEO MODE
  502.     AH = 00h
  503.     AL = mode (see below)
  504. Return: AL = video mode flag (Phoenix BIOS)
  505.         20h mode > 7
  506.         30h modes 0-5 and 7
  507.         3Fh mode 6
  508.     AL = CRT controller mode byte (Phoenix 386 BIOS v1.10)
  509. Notes:    IBM standard modes do not clear the screen if the high bit of AL is set
  510.       (EGA or higher only)
  511.     the Tseng ET4000 chipset is used by the Orchid Prodesigner II, Diamond
  512.       SpeedSTAR VGA, Groundhog Graphics Shadow VGA, Boca Super X VGA,
  513.       Everex EV-673
  514.     the installation check for Ahead adapters is the signature "AHEAD" at
  515.       C000h:0025h
  516.     the installation check for Paradise adapters is the signature "VGA=" at
  517.       C000h:007Dh
  518.     the installation check for Oak Tech OTI-037/057/067/077 chipsets is the
  519.       signature "OAK VGA" at C000h:0008h
  520.     the installation check for ATI adapters is the signature "761295520" at
  521.       C000h:0031h; the byte at C000h:0043h indicates the chipset revision:
  522.         31h for 18800
  523.         32h for 18800-1
  524.         33h for 18800-2
  525.         34h for 18800-4
  526.         35h for 18800-5
  527.       the two bytes at C000h:0040h indicate the adapter type
  528.         "22" EGA Wonder
  529.         "31" VGA Wonder
  530.         "32" EGA Wonder800+
  531.       the byte at C000h:0042h contains feature flags
  532.         bit 1: mouse port present
  533.         bit 4: programmable video clock
  534.       the byte at C000h:0044h contains additional feature flags if chipset
  535.       byte > 30h
  536.         bit 0: 70 Hz non-interlaced display
  537.         bit 1: Korean (double-byte) characters
  538.         bit 2: 45 MHz memory clock rather than 40 MHz
  539.         bit 3: zero wait states
  540.         bit 4: paged ROMs
  541.         bit 6: no 8514/A monitor support
  542.         bit 7: HiColor DAC
  543.     the installation check for Genoa video adapters is the signature
  544.       77h XXh 99h 66h at C000h:0037h, where XXh is
  545.         00h for Genoa 6200/6300
  546.         11h for Genoa 6400/6600
  547.         22h for Genoa 6100
  548.         33h for Genoa 5100/5200
  549.         55h for Genoa 5300/5400
  550.       for SuperEGA BIOS v2.41+, C000h:0057h contains the product level
  551.       for SuperEGA BIOS v3.0+, C000h:0070h contains the signature
  552.       "EXTMODE", indicating support for extended modes
  553. SeeAlso: AX=0070h,AX=007Eh,AX=10E0h,AX=10F0h,AH=40h,AX=6F05h,AH=FFh"GO32"
  554. SeeAlso: INT 33/AX=0028h,INT 5F/AH=00h,INT 62/AX=0001h
  555.  
  556. Values for video mode:
  557.       text/ text pixel     pixel    colors    disply    scrn  system
  558.       grph resol  box    resoltn        pages    addr
  559.  00h = T   40x25  8x8        16gray       8    B800 CGA,PCjr
  560.      = T   40x25  8x14        16gray       8    B800 EGA
  561.      = T   40x25  8x16          16       8    B800 MCGA
  562.      = T   40x25  9x16          16       8    B800 VGA
  563.  01h = T   40x25  8x8          16       8    B800 CGA,PCjr
  564.      = T   40x25  8x14          16       8    B800 EGA
  565.      = T   40x25  8x16          16       8    B800 MCGA
  566.      = T   40x25  9x16          16       8    B800 VGA
  567.  02h = T   80x25  8x8        16gray       4    B800 CGA,PCjr
  568.      = T   80x25  8x14        16gray       4    B800 EGA
  569.      = T   80x25  8x16          16       4    B800 MCGA
  570.      = T   80x25  9x16          16       4    B800 VGA
  571.  03h = T   80x25  8x8          16       4    B800 CGA,PCjr
  572.      = T   80x25  8x14          16       4    B800 EGA
  573.      = T   80x25  8x16          16       4    B800 MCGA
  574.      = T   80x25  9x16          16       4    B800 VGA
  575.  04h = G   40x25  8x8    320x200       4        B800 CGA,PCjr,EGA,MCGA,VGA
  576.  05h = G   40x25  8x8    320x200     4gray        B800 CGA,PCjr,EGA
  577.      = G   40x25  8x8    320x200       4        B800 MCGA,VGA
  578.  06h = G   80x25  8x8    640x200       2        B800 CGA,PCjr,EGA,MCGA,VGA
  579.  07h = T   80x25  9x14         mono      var    B000 MDA,Hercules,EGA
  580.      = T   80x25  9x16         mono        B000 VGA
  581.  08h = T  132x25  8x8          16        B800 ATI EGA/VGA Wonder [1]
  582.      = T  132x25  8x8         mono        B000 ATI EGA/VGA Wonder [1]
  583.      = G   20x25  8x8    160x200      16             PCjr, Tandy 1000
  584.      = G   90x43  8x8    720x352     mono        B000 Hercules + MSHERC.COM
  585.  09h = G   40x25  8x8    320x200      16             PCjr
  586.  0Ah = G   80x25  8x8    640x200       4             PCjr, Tandy 1000
  587.  0Bh =     reserved (used internally by EGA BIOS)
  588.      = G        640x200      16             Tandy 1000 SL/TL
  589.  0Ch =     reserved (used internally by EGA BIOS)
  590.  0Dh = G   40x25  8x8    320x200      16       8    A000 EGA,VGA
  591.  0Eh = G   80x25  8x8    640x200      16       4    A000 EGA,VGA
  592.  0Fh = G   80x25  8x14    640x350     mono       2    A000 EGA,VGA
  593.  10h = G   80x25  8x14    640x350       4       2    A000 64k EGA
  594.      = G        640x350      16        A000 256k EGA,VGA
  595.  11h = G   80x30  8x16    640x480     mono        A000 VGA,MCGA,ATI EGA,ATI VIP
  596.  12h = G   80x30  8x16    640x480 16/256k        A000 VGA,ATI VIP
  597.      = G   80x30  8x16    640x480     16/64        A000 ATI EGA Wonder
  598.      = G        640x480      16             UltraVision+256K EGA
  599.  13h = G   40x25  8x8    320x200 256/256k    A000 VGA,MCGA,ATI VIP
  600.  14h = T  132x25  Nx16          16             XGA, IBM Enhanced VGA [2]
  601.      = G   80x25  8x8    640x200                 Lava Chrome II EGA
  602.      = G        640x400      16             Tecmar VGA/AD
  603.  15h = G   80x25  8x14    640x350                 Lava Chrome II EGA
  604.  16h = G   80x25  8x14    640x350                 Lava Chrome II EGA
  605.      = G        800x600      16             Tecmar VGA/AD
  606.  17h = T  132x25                     Tecmar VGA/AD
  607.      = G   80x34  8x14    640x480                 Lava Chrome II EGA
  608.  18h = T  132x25         mono        B000 Cirrus 5320 chipset
  609.      = T  132x44  8x8         mono             Tseng Labs EVA
  610.      = T  132x44  8x8         16/256       2    B000 Tseng ET4000 chipset
  611.      = G   80x34  8x14    640x480                 Lava Chrome II EGA
  612.      = G           1024x768      16             Tecmar VGA/AD
  613.  19h = T  132x25  8x14         mono             Tseng Labs EVA
  614.      = T  132x25  8x14         16/256       4    B000 Tseng ET4000 chipset
  615.      = T  132x34         mono        B000 Cirrus 5320 chipset
  616.  1Ah = T  132x28  8x13         mono             Tseng Labs EVA
  617.      = T  132x28  8x13         16/256       4    B000 Tseng ET4000 chipset
  618.      = T  132x44         mono        B000 Cirrus 5320 chipset
  619.      = G        640x350     256             Tecmar VGA/AD
  620.  1Bh = G        640x400     256             Tecmar VGA/AD
  621.  1Ch = T  132x25                     Cirrus 5320 chipset
  622.      = G        640x480     256             Tecmar VGA/AD
  623.  1Dh = T  132x43                     Cirrus 5320 chipset
  624.      = G        800x600     256             Tecmar VGA/AD
  625.  1Eh = T  132x44                     Cirrus 5320 chipset
  626.  1Fh = G        800x600      16             Realtek RTVGA
  627.  20h = G        240x128            B000 HP 95LX
  628.  21h = T  132x60          16       2    B800 Tseng ET4000 chipset
  629.      = T  132x44  9x9  1188x396     16/256k    B800 WD90C
  630.      = G   80x43  8x8    720x348     mono        B000 DESQview 2.x+Hercules [3]
  631.      = G           1024x768      16             Realtek RTVGA
  632.  22h = T  132x44  8x8                     Tseng Labs EVA
  633.      = T  132x44  8x8         16/256       2    B800 Tseng ET4000 chipset
  634.      = T  132x44  8x8                     Ahead Systems EGA2001
  635.      = T  132x44  8x8          16       2    B800 Ahead B
  636.      = T  132x44          16             Orchid Prodesigner VGA
  637.      = T  132x43                     Allstar Peacock (VGA)
  638.      = G   80x43  8x8    720x348     mono        B800 DESQview 2.x+Hercules [3]
  639.  23h = T  132x25  6x14                     Tseng Labs EVA
  640.      = T  132x25  8x14         16/256       4    B800 Tseng ET4000 chipset
  641.      = T  132x25  8x14                     Ahead Systems EGA2001
  642.      = T  132x25  8x14          16       4    B800 Ahead B
  643.      = T  132x25  8x8          16        B800 ATI EGA Wonder,ATI VIP
  644.      = T  132x25                     Cirrus 5320 chipset
  645.      = T  132x28                     Allstar Peacock (VGA)
  646.      = T  132x28          16             Orchid Prodesigner VGA
  647.  24h = T  132x25                     Allstar Peacock (VGA)
  648.      = T  132x25          16             Orchid Prodesigner VGA
  649.      = T  132x28  6x13                     Tseng Labs EVA
  650.      = T  132x28  8x13         16/256       4    B800 Tseng ET4000 chipset
  651.      = T  132x28  8x12          16       1    B800 Ahead B
  652.      = T  132x28                     Cirrus 5320 chipset
  653.  25h = G   80x60  8x8    640x480                 Tseng Labs EVA
  654.      = G   80x60  8x8    640x480     16/256       1    A000 Tseng ET4000 chipset
  655.      = G        640x480      16             VEGA VGA
  656.      = G   80x60  8x8    640x480      16        A000 Orchid Prodesigner VGA
  657.      = G   80x60  8x8    640x480      16       1    A000 Ahead B (same as 26h)
  658.      = G        640x480      16             NEC GB-1
  659.      = G        640x480      16             Cirrus 5320 chipset
  660.      = G        640x400     256             Realtek RTVGA
  661.  26h = T   80x60  8x8                     Tseng Labs EVA
  662.      = T   80x60  8x8         16/256       2    B800 Tseng ET4000 chipset
  663.      = T   80x60                     Allstar Peacock (VGA)
  664.      = T   80x60          16             Orchid ProDesigner VGA
  665.      = G   80x60  8x8    640x480                 Ahead Systems EGA2001
  666.      = G   80x60  8x8    640x480      16       1    A000 Ahead B (same as 25h)
  667.      = G        640x480     256             Realtek RTVGA
  668.  27h = T  132x25  8x8         mono        B000 ATI EGA Wonder,ATI VIP
  669.      = G        720x512      16             VEGA VGA
  670.      = G        720x512      16             Genoa
  671.      = G        800x600     256             Realtek RTVGA
  672.  28h = T  ???x???                     VEGA VGA
  673.      = G           1024x768     256             Realtek RTVGA (1meg)
  674.  29h = G        800x600      16             VEGA VGA
  675.      = G  100x37  8x16    800x600      16        A000 Orchid
  676.      = G        800x600      16        A000 STB,Genoa,Sigma
  677.      = G        800x600      16             Allstar Peacock (VGA)
  678.      = G  100x37  8x16    800x600     16/256       1    A000 Tseng ET3000/4000 chipset
  679.      = G        800x600     ???             EIZO MDB10
  680.      = G        800x600      16             Cirrus 5320 chipset
  681.  2Ah = T  100x40                     Allstar Peacock (VGA)
  682.      = T  100x40  8x16          16             Orchid Prodesigner VGA
  683.      = T  100x40  8x15        16/256       4    B800 Tseng ET4000 chipset
  684.      = G           1280x1024 256             Realtek RTVGA
  685.  2Dh = G        640x350     256             VEGA VGA
  686.      = G        640x350 256/256k    A000 Orchid, Genoa, STB
  687.      = G   80x25  8x14    640x350 256/256k   1    A000 Tseng ET3000/4000 chipset
  688.      = G        640x350     256             Cirrus 5320 chipset
  689.  2Eh = G        640x480     256             VEGA VGA
  690.      = G   80x30  8x16    640x480 256/256k    A000 Orchid
  691.      = G        640x480 256/256k    A000 STB,Genoa,Sigma
  692.      = G   80x30  8x16    640x480 256/256k   1    A000 Tseng ET3000/4000 chipset
  693.  2Fh = T  160x50  8x8  1280x400      16       4    B800 Ahead B (Wizard/3270)
  694.      = G        720x512     256             VEGA VGA
  695.      = G        720x512     256             Genoa
  696.      = G   80x25  8x16    640x400 256/256k   1    A000 Tseng ET4000 chipset
  697.  30h = G        800x600     256             VEGA VGA
  698.      = G  100x37  8x16    800x600 256/256k    A000 Orchid 
  699.      = G        800x600 256/256k    A000 STB,Genoa,Sigma
  700.      = G        720x350       2             3270 PC
  701.      = G        800x600     256             Cardinal
  702.      = G        ???x???            B800 AT&T 6300
  703.      = G  100x37  8x16    800x600 256/256k   1    A000 Tseng ET3000/4000 chipset
  704.  32h = T   80x34  8x10          16       4    B800 Ahead B (Wizard/3270)
  705.  33h = T  132x44  8x8          16        B800 ATI EGA Wonder,ATI VIP
  706.      = T   80x34  8x8          16       4    B800 Ahead B (Wizard/3270)
  707.  34h = T   80x66  8x8          16       4    B800 Ahead B (Wizard/3270)
  708.  36h = G        960x720      16             VEGA VGA
  709.      = G        960x720      16             STB
  710.      = G        960x720      16             Tseng ET3000 only
  711.  37h = T  132x44  8x8         mono        B800 ATI EGA Wonder,ATI VIP
  712.      = G           1024x768      16             VEGA VGA
  713.      = G  128x48  8x16 1024x768      16        A000 Orchid
  714.      = G           1024x768      16        A000 STB,Genoa,Sigma
  715.      = G           1024x768      16             Definicon
  716.      = G  128x48  8x16 1024x768      16       1    A000 Tseng ET3000/4000
  717.  38h = G           1024x768     256             STB VGA/EM-16 Plus (1MB)
  718.      = G  128x48  8x16 1024x768 256/256k   1    A000 Tseng ET4000 chipset
  719.      = G           1024x768     256             Orchid ProDesigner II
  720.  3Dh = G           1280x1024  16             Definicon
  721.      = G  128x64  8x16 1280x1024  16       1    A000 Tseng ET4000 v3.00 [6,8]
  722.  3Eh = G           1280x961      16             Definicon
  723.  40h = T   80x43                     VEGA VGA, Tecmar VGA/AD
  724.      = T   80x43                     Video7 V-RAM VGA
  725.      = T   80x43                     Tatung VGA
  726.      = T  100x30          16             MORSE VGA
  727.      = T  100x30                     Cirrus 510/520 chipset
  728.      = T   80x25    720x350     mono             Genoa SuperEGA BIOS 3.0+
  729.      = G   80x25  8x16    640x400       2       1    B800 AT&T 6300, AT&T VDC600
  730.      = G   80x25  8x16    640x400       2       1    B800 Compaq Portable
  731.  41h = T  132x25                     VEGA VGA
  732.      = T  132x25                     Tatung VGA
  733.      = T  132x25                     Video7 V-RAM VGA
  734.      = T  100x50          16             MORSE VGA
  735.      = T  100x50                     Cirrus 510/520 chipset
  736.      = T   80x34  9x14    720x476     16/256k    B800 WD90C
  737.      = G        640x200      16       1         AT&T 6300
  738.      = G   80x25    720x348     mono        B000 Genoa SuperEGA BIOS 3.0+
  739.  42h = T  132x43                     VEGA VGA
  740.      = T  132x43                     Tatung VGA
  741.      = T  132x43                     Video7 V-RAM VGA
  742.      = T   80x34  9x10           4       4    B800 Ahead B (Wizard/3270)
  743.      = T  100x60          16             MORSE VGA
  744.      = T  100x60                     Cirrus 510/520 chipset
  745.      = G   80x25  8x16    640x400      16             AT&T 6300, AT&T VDC600
  746.      = G   80x25    720x348     mono        B800 Genoa SuperEGA BIOS 3.0+
  747.  43h = T   80x60                     VEGA VGA
  748.      = T   80x60                     Tatung VGA
  749.      = T   80x60                     Video7 V-RAM VGA
  750.      = T   80x45  9x8           4       4    B800 Ahead B (Wizard/3270)
  751.      = T  100x75          16             MORSE VGA
  752.      = T   80x29    720x348     mono             Genoa SuperEGA BIOS 3.0+
  753.      = G         640x200 of 640x400 viewport     AT&T 6300 (unsupported)
  754.  44h =     disable VDC and DEB output             AT&T 6300
  755.      = T  100x60                     VEGA VGA
  756.      = T  100x60                     Tatung VGA
  757.      = T  100x60                     Video7 V-RAM VGA
  758.      = T   80x32    720x352     mono             Genoa SuperEGA BIOS 3.0+
  759.  45h = T  132x28                     Tatung VGA
  760.      = T  132x28                     Video7 V-RAM VGA
  761.      = T   80x44    720x352     mono             Genoa SuperEGA BIOS 3.0+
  762.  46h = T  132x25  8x14         mono             Genoa 6400
  763.      = T  132x25  9x14         mono             Genoa SuperEGA BIOS 3.0+
  764.      = G  100x40  8x15    800x600       2             AT&T VDC600
  765.  47h = T  132x29  8x12         mono             Genoa 6400
  766.      = T  132x29  9x12         mono             Genoa SuperEGA BIOS 3.0+
  767.      = T  132x28  9x16 1188x448     16/256k    B800 WD90C
  768.      = G  100x37  8x16    800x600      16             AT&T VDC600
  769.  48h = T  132x32  8x12         mono             Genoa 6400
  770.      = T  132x32  9x11         mono             Genoa SuperEGA BIOS 3.0+
  771.      = G   80x50  8x8    640x400       2        B800 AT&T 6300, AT&T VDC600
  772.  49h = T  132x44  8x8         mono             Genoa 6400
  773.      = T  132x44  9x8         mono             Genoa SuperEGA BIOS 3.0+
  774.      = G   80x30  8x16    640x480                 Lava Chrome II EGA
  775.  4Dh = T  120x25                     VEGA VGA
  776.  4Eh = T  120x43                     VEGA VGA
  777.      = T   80x60  8x8         16/256k    B800 Oak OTI-067/OTI-077 [7]
  778.  4Fh = T  132x25                     VEGA VGA
  779.      = T  132x60                     some Oak Tech VGA [7]
  780.  50h = T   80x30  8x16         16/256k    B800 Trident TVGA 8800/8900
  781.      = T   80x34                     Lava Chrome II EGA
  782.      = T   80x43         mono             VEGA VGA
  783.      = T  132x25  9x14         mono             Ahead Systems EGA2001
  784.      = T  132x25  9x14           4       4    B800 Ahead B
  785.      = T  132x25  8x14          16       8    B800 OAK Technologies VGA-16
  786.      = T  132x25  8x14         16/256k    B800 Oak OTI-037/067/077 [7]
  787.      = T  132x30          16             MORSE VGA
  788.      = T  132x30                     Cirrus 510/520 chipset
  789.      = G   80x30  8x16    640x480      16             Paradise EGA-480
  790.      = G   80x30  8x16    640x480      16             NEL Electronics BIOS
  791.      = G        640x480     mono???         Taxan 565 EGA
  792.      = G   40x25  8x8    320x200                 Genoa SuperEGA BIOS 3.0+
  793.  51h = T   80x30  8x16                     Paradise EGA-480
  794.      = T   80x30  9x16                     NEL Electronics BIOS
  795.      = T   80x30                     Lava Chrome II EGA
  796.      = T   80x43  8x11         16/256k    B800 Trident TVGA 8800/8900
  797.      = T  132x25         mono             VEGA VGA
  798.      = T  132x43  8x8          16       5    B800 OAK Technologies VGA-16
  799.      = T  132x43  8x8        16/256k        B800 Oak OTI-037/067/077
  800.      = T  132x28  9x12           4       4    B800 Ahead B
  801.      = T  132x50          16             MORSE VGA
  802.      = T  132x50                     Cirrus 510/520 chipset
  803.      = G   80x34  8x14    640x480      16             ATI EGA Wonder
  804.      = G   80x25  8x8    640x200                 Genoa SuperEGA BIOS 3.0+
  805.  52h = T   80x60                     Lava Chrome II EGA
  806.      = T   80x60  8x8         16/256k    B800 Trident TVGA 8800/8900
  807.      = T  132x43         mono             VEGA VGA
  808.      = T  132x44  9x8         mono             Ahead Systems EGA2001
  809.      = T  132x44  9x8           4       2    B800 Ahead B
  810.      = T  132x60          16             MORSE VGA
  811.      = T  132x60                     Cirrus 510/520 chipset
  812.      = G   94x29  8x14    752x410      16             ATI EGA Wonder
  813.      = G  100x75  8x8    800x600      16       1    A000 OAK Technologies VGA-16
  814.      = G  100x75  8x8    800x600      16        A000 Oak OTI-037 chipset [7]
  815.      = G  100x37  8x16    800x600      16        A000 Oak OTI-067/077 chips [7]
  816.      = G  128x30  8x16 1024x480      16             NEL Electronics BIOS
  817.  53h = T   80x25  8x16                     NEL Electronics BIOS
  818.      = T   80x60          16             MORSE VGA
  819.      = T   80x60                     Cirrus 510/520 chipset
  820.      = T  132x25  8x14         16/256k    B800 Trident TVGA 8800/8900
  821.      = T  132x43                     Lava Chrome II EGA
  822.      = G        640x480     256             Oak VGA
  823.      = G   80x30  8x16    640x480     256        A000 Oak OTI-067/OTI-077 [7]
  824.      = G  100x40  8x14    800x560      16             ATI EGA Wonder,ATI VIP
  825.      = G                         AX PC
  826.  54h = T  132x25                     Lava Chrome II EGA
  827.      = T  132x30  8x16         16/256k    B800 Trident TVGA 8800/8900
  828.      = T  132x43  8x8                     Paradise EGA-480
  829.      = T  132x43  8x8                     NEL Electronics BIOS
  830.      = T  132x43  7x9         16/256k    B800 Paradise VGA
  831.      = T  132x43  8x9         16/256k    B800 Paradise VGA on multisync
  832.      = T  132x43                     Taxan 565 EGA
  833.      = T  132x43                     AST VGA Plus
  834.      = T  132x43                     Hewlett-Packard D1180A
  835.      = T  132x43  7x9          16             AT&T VDC600
  836.      = T  132x50  8x8          16        A000 NCR 77C22 [9]
  837.      = T  132x43  9x9  1188x387     16/256k    B800 WD90C
  838.      = G  100x42  8x14    800x600      16        A000 ATI EGA Wonder, VGA Wonder
  839.      = G  100x42  8x14    800x600      16        A000 ATI Ultra 8514A, ATI XL
  840.      = G        800x600     256        A000 Oak VGA    
  841.      = G  100x37  8x16    800x600     256        A000 Oak OTI-067/077 chips [7]
  842.  55h = T   80x66  8x8         16/256k    A000 ATI VIP
  843.      = T  132x25  8x14                     Paradise EGA-480
  844.      = T  132x25  8x14                     NEL Electronics BIOS
  845.      = T  132x25  7x16         16/256k    B800 Paradise VGA
  846.      = T  132x25  8x16         16/256k    B800 Paradise VGA on multisync
  847.      = T  132x25                     Taxan 565 EGA
  848.      = T  132x25                     AST VGA Plus
  849.      = T  132x25                     Hewlett-Packard D1180A
  850.      = T  132x25  7x16          16             AT&T VDC600
  851.      = T  132x25  8x16          16        A000 NCR 77C22 [9]
  852.      = T  132x43  8x11         16/256k    B800 Trident TVGA 8800/8900
  853.      = T  132x25  9x16 1188x400     16/256k    B800 WD90C
  854.      = G   94x29  8x14    752x410                 Lava Chrome II EGA
  855.      = G  128x48  8x16 1024x768     16/256k    A000 ATI VGA Wonder v4+     [4]
  856.      = G           1024x768     16/256k         ATI VGA Wonder Plus
  857.      = G           1024x768     16/256k         ATI Ultra 8514A,ATI XL
  858.      = G  128x48  8x16 1024x768       4        A000 Oak OTI-067/077 chips [7]
  859.  56h = T  132x43  8x8           3???       2    B000 NSI Smart EGA+
  860.      = T  132x43  7x9           4        B000 Paradise VGA
  861.      = T  132x43  8x9           4        B000 Paradise VGA on multisync
  862.      = T  132x43         mono             Taxan 565 EGA
  863.      = T  132x43  7x9           2             AT&T VDC600
  864.      = T  132x43  9x8                     NEL Electronics BIOS
  865.      = T  132x50  8x8           4        A000 NCR 77C22 [9]
  866.      = T  132x60  8x8         16/256k    B800 Trident TVGA 8800/8900
  867.      = G           1024x768      16        A000 Oak VGA
  868.      = G  128x48  8x16 1024x768      16        A000 Oak OTI-067/077 chips [7]
  869.  57h = T  132x25  8x14           3???       4    B000 NSI Smart EGA+
  870.      = T  132x25  7x16           4        B000 Paradise VGA
  871.      = T  132x25  8x16           4        B000 Paradise VGA on multisync
  872.      = T  132x25  9x14                     NEL Electronics BIOS
  873.      = T  132x25         mono             Taxan 565 EGA
  874.      = T  132x25  7x16           2             AT&T VDC600
  875.      = T  132x25  9x14         16/256k    B800 Trident TVGA 8800/8900
  876.      = T  132x25  8x16           4        A000 NCR 77C22 [9]
  877.      = G   96x48  8x16    768x1024  16        A000 Oak OTI-067/077 chips [7]
  878.  58h = T   80x33  8x14          16        B800 ATI EGA Wonder,ATI VIP
  879.      = T   80x32  9x16          16             Genoa 6400
  880.      = T   80x43  8x8                     NEL Electronics BIOS
  881.      = T  132x30  9x16         16/256k    B800 Trident TVGA 8800/8900
  882.      = G  100x75  8x8    800x600     16/256k    A000 Paradise VGA
  883.      = G  100x75  8x8    800x600      16             AT&T VDC600
  884.      = G        800x600      16             AST VGA Plus, Compaq VGA
  885.      = G        800x600      16             Dell VGA
  886.      = G        800x600      16             Hewlett-Packard D1180A
  887.      = G        800x600     ???             ELT VGA PLUS 16
  888.      = G  100x75  8x8    800x600      16        A000 NCR 77C22 [9]
  889.      = G  160x64  8x16 1280x1024  16        A000 Oak OTI-077 chipset [7]
  890.      = G  100x75  8x8    800x600     16/256k    A000 Paradise VGA, WD90C
  891.  59h = T   80x43  9x8                     NEL Electronics BIOS
  892.      = T   80x66  8x8         16/256k    A000 ATI VIP
  893.      = T  132x43  9x11         16/256k    B800 Trident TVGA 8800/8900
  894.      = G  100x75  8x8    800x600       2        A000 Paradise VGA
  895.      = G  100x75  8x8    800x600       2             AT&T VDC600
  896.      = G        800x600       2             AST VGA Plus, Compaq VGA
  897.      = G        800x600       2             Dell VGA
  898.      = G        800x600       2             Hewlett-Packard D1180A
  899.      = G  100x75  8x8    800x600       2        A000 NCR 77C22 [9]
  900.      = G  128x48  8x16 1024x768     256        A000 Oak OTI-077 chipset [7]
  901.  5Ah = T   80x60  8x8                     NEL Electronics BIOS
  902.      = T  132x60  9x8         16/256k    B800 Trident TVGA 8800/8900
  903.      = G  128x48  8x16 1024x768       2        A000 NCR 77C22 [9]
  904.  5Bh = T   80x30  8x16                B800 ATI VGA Wonder (undoc)
  905.      = G        640x350     256             Genoa 6400
  906.      = G   80x25  8x16    640x400      32K        A000 Oak OTI-067/077 chips [7]
  907.      = G        800x600      16             Maxxon, SEFCO TVGA, Imtec
  908.      = G  100x75  8x8    800x600     16/256k    A000 Trident TVGA 8800, 8900
  909.      = G        800x600     ???             Vobis MVGA
  910.      = G  100x37  8x16    800x600                 NEL Electronics BIOS
  911.      = G  128x48  8x16 1024x768      16        A000 NCR 77C22 [8,9]
  912.  5Ch = T  100x37  8x16                     NEL Electronics BIOS
  913.      = G        640x400     256             Logix, ATI Prism Elite
  914.      = G        640x400     256             Maxxon, SEFCO TVGA, Imtec
  915.      = G   80x25  8x16    640x400     256/256k    A000 Zymos Poach, Hi Res 512
  916.      = G   80x25  8x16    640x400     256/256k    A000 Trident TVGA 8800/8900
  917.      = G   80x30  8x16    640x480     256             Genoa 6400
  918.      = G   80x30  8x16    640x480      32K        A000 Oak OTI-077 chipset [7]
  919.      = G  100x75  8x8    800x600     256        A000 NCR 77C22 [9]
  920.      = G  100x75  8x8    800x600     256/256k    A000 WD90C
  921.  5Dh = T  100x75  8x8                     NEL Electronics BIOS
  922.      = G        640x480     256             Logix, ATI Prism Elite
  923.      = G        640x480     256             Maxxon, SEFCO TVGA, Imtec
  924.      = G   80x30  8x16    640x480     256/256k    A000 Zymos Poach, Hi Res 512
  925.      = G   80x30  8x16    640x480     256/256k    A000 Trident TVGA 8800 (512K)
  926.      = G  128x48  8x16 1024x768      16        A000 NCR 77C22 [9]
  927.      = G  128x48  8x16 1024x768      16/256k    A000 WD90C
  928.  5Eh = G        640x400     256             Paradise VGA,VEGA VGA
  929.      = G        640x400     256             AST VGA Plus, NCR 77C22
  930.      = G        640x400     256             Compaq VGA, Dell VGA
  931.      = G   80x25  8x16    640x400     256             AT&T VDC600
  932.      = G   80x25  8x16    640x400     256        A000 NCR 77C22 [9]
  933.      = G        800x600      16             Logix, ATI Prism Elite
  934.      = G  100x37  8x16    800x600      16             NEL Electronics BIOS
  935.      = G  100x75  8x8    800x600     256             Genoa 6400
  936.      = G  100x75  8x8    800x600     256/256k    A000 Zymos Poach, Trident 8900
  937.      = G  100x75  8x8    800x600     256/256k    A000 Hi Res 512
  938.      = G   80x25  8x16    640x400     256/256k    A000 WD90C
  939.  5Fh = G        640x480     256             Paradise VGA
  940.      = G        640x480     256             AST VGA Plus, NCR 77C22
  941.      = G        640x480     256             Compaq VGA, Dell VGA
  942.      = G        640x480     256             Hewlett-Packard D1180A
  943.      = G   80x30  8x16    640x480     256             AT&T VDC600 (512K)
  944.      = G   80x30  8x16    640x480     256        A000 NCR 77C22 [9]
  945.      = G           1024x768      16             Logix, ATI Prism Elite
  946.      = G           1024x768      16             Maxxon, Imtec
  947.      = G  128x48  8x16 1024x768      16             Genoa 6400
  948.      = G  128x48  8x16 1024x768      16/256k    A000 Zymos Poach, Hi Res 512
  949.      = G  128x48  8x16 1024x768      16/256k    A000 Trident TVGA 88/8900 512K
  950.      = G   80x30  8x16    640x480     256/256k    A000 WD90C
  951.  60h = T  132x25  8x14          16/64       8    B800 Quadram Ultra VGA
  952.      = T  132x25  8x14          16             Genoa 6400
  953.      = T  132x25  8x14          16             Genoa SuperEGA BIOS 3.0+
  954.      = T  132x25                     Cirrus 5320 chipset
  955.      = G   80x???    ???x400                 Corona/Cordata BIOS 4.10+
  956.      = G   80x25  8x16    640x400     256       1    A000 Ahead A, Ahead B
  957.      = G        752x410                 VEGA VGA
  958.      = G        752x410      16             Tatung VGA
  959.      = G        752x410      16             Video7 V-RAM VGA
  960.      = G  128x48  8x16 1024x768       4/256k    A000 Trident TVGA 8900
  961.      = G  128x48  8x16 1024x768     256/256k    A000 WD90C
  962.  61h = T  132x29  8x12          16/64       8    B800 Quadram Ultra VGA
  963.      = T  132x29  8x8          16             Genoa 6400
  964.      = T  132x29  8x8          16             Genoa SuperEGA BIOS 3.0+
  965.      = T  132x50                     Cirrus 5320 chipset
  966.      = G        ???x400                 Corona/Cordata BIOS 4.10+
  967.      = G   80x25  8x16    640x400     256        A000 ATI VGA Wonder,VGA Wonder+
  968.      = G   80x25  8x16    640x400     256        A000 ATI Ultra 8514A,ATI XL
  969.      = G   80x30  8x16    640x480     256       1    A000 Ahead A, Ahead B (512K)
  970.      = G        720x540                 VEGA VGA
  971.      = G        720x540      16             Tatung VGA
  972.      = G        720x540      16             Video7 V-RAM VGA
  973.      = G   96x64  8x16    768x1024  16/256k    A000 Trident TVGA 88/8900 512K
  974.      = G  128x48  8x16 1024x768     256        A000 NCR 77C22 [8,9]
  975.  62h = T  132x32  8x11          16/64       6    B800 Quadram Ultra VGA
  976.      = T  132x32  8x12          16             Genoa 6400
  977.      = T  132x32  8x11          16             Genoa SuperEGA BIOS 3.0+
  978.      = G        640x450      16             Cirrus 510/520 chipset
  979.      = G   80x30  8x16    640x480     256        A000 ATI VGA Wonder,VGA Wonder+
  980.      = G   80x30  8x16    640x480     256        A000 ATI Ultra 8514A,ATI XL
  981.      = G        800x600                 VEGA VGA
  982.      = G        800x600      16             Tatung VGA
  983.      = G        800x600      16             Video7 V-RAM VGA
  984.      = G  100x75  8x8    800x600     256       1    A000 Ahead A, Ahead B (512K)
  985.      = G  128x48  8x16 1024x768     256/256k    A000 Trident TVGA 8900, Zymos
  986.      = G  128x48  8x16 1024x768     256        A000 NCR 77C22 [9]
  987.      = G        640x480     32K        A000 WD90C
  988.  63h = T  132x44  8x8          16/64       5    B800 Quadram Ultra VGA
  989.      = T  132x44  8x8          16             Genoa 6400
  990.      = T  132x44  8x8          16             Genoa SuperEGA BIOS 3.0+
  991.      = G        720x540      16             MORSE VGA
  992.      = G        720x540      16             Cirrus 510/520 chipset
  993.      = G  100x42  8x14    800x600     256        A000 ATI VGA Wonder,VGA Wonder+
  994.      = G  100x42  8x14    800x600     256        A000 ATI Ultra 8514A,ATI XL
  995.      = G  128x48  7x16 1024x768     256       1    A000 Ahead B (1MB)
  996.      = G           1024x768       2             Video7 V-RAM VGA
  997.      = G        800x600     32K        A000 WD90C
  998.  64h = T  132x60  8x8          16             Genoa 6400
  999.      = G        800x600      16             MORSE VGA
  1000.      = G        800x600      16             Cirrus 510/520 chipset
  1001.      = G        800x600     ???             SAMPO-Mira VGA
  1002.      = G           1024x768       4             Video7 V-RAM VGA
  1003.      = G  128x48  8x16 1024x768     256        A000 ATI VGA Wonder Plus,ATI XL
  1004.      = G  160x64  8x16 1280x1024 16/256k    A000 WD90C [8]
  1005.  65h = G           1024x768      16             Video7 V-RAM VGA
  1006.      = G  128x48  8x16 1024x768      16        A000 ATI VGA Wonder
  1007.  66h = G        640x400     256             Tatung VGA
  1008.      = G        640x400     256             Video7 V-RAM VGA
  1009.      = T   80x50  8x8    640x400     16/256k    B800 WD90C
  1010.  67h = G        640x480     256             Video7 V-RAM VGA
  1011.      = G  128x48  8x16 1024x768       4        A000 ATI VGA Wonder
  1012.      = G  160x64  8x16 1280x1024  16        A000 NCR 77C22 [8,9]
  1013.      = T   80x43  8x8    640x344     16/256k    B800 WD90C
  1014.  69h = G        720x540     256             Video7 V-RAM VGA
  1015.      = T  132x50  8x8  1056x400     16/256k    B800 WD90C
  1016.  6Ah = G        800x600      16        A000 VESA standard interface
  1017.      = G  100x75  8x8    800x600      16             Genoa 6400
  1018.      = G        800x600      16        A000 Ahead A
  1019.      = G  100x75  8x8    800x600      16       1    A000 Ahead B (VESA) (see 71h)
  1020.      = G        800x600      16             Zymos Poach, Hi Res 512
  1021.      = G        800x600      16             Epson LT-386SX in CRT Mode
  1022.      = G        800x600      16             Compuadd 316SL in CRT Mode
  1023.      = G  100x42  8x14    800x600            A000 ATI VGA Wonder (undoc)
  1024.      = G  160x64  8x16 1280x1024 256        A000 NCR 77C22 [8,9]
  1025.  6Bh = T  100x37  8x16          16             Genoa 6400
  1026.      = T  100x37  8x16                     NEL Electronics BIOS
  1027.  6Ch = G  100x75  8x8    800x600     256             Genoa 6400
  1028.      = G  160x60  8x16 1280x960     16/256k    A000 WD90C [8]
  1029.  70h =     extended mode set (see AX=0070h)         Everex Micro Enhancer EGA
  1030.      = T   40x25  8x8          16       8    B800 Quadram (CGA double scan)
  1031.      = T   40x25  8x8    (CGA dblscan)             Genoa SuperEGA BIOS 3.0+
  1032.      = G        360x480     256             Cirrus 510/520/5320 chips
  1033.      = G   90x28  8x14    720x392      16       1    A000 Ahead B
  1034.      = G        800x600      16             C&T chipset, Cardinal
  1035.  71h = T   80x25  8x8          16       8    B800 Quadram (CGA double scan)
  1036.      = T   80x25  8x8    (CGA dblscan)             Genoa SuperEGA BIOS 3.0+
  1037.      = G        528x400     256             Cirrus 510/520 chipset
  1038.      = G  100x35  8x16    800x600     16of64        A000 NSI Smart EGA+
  1039.      = G  100x75  8x8    800x600      16       1    A000 Ahead B (same as 6Ah)
  1040.      = G        960x720      16             C&T chipset, Cardinal
  1041.  72h = T   80x60  8x8          16        B800 Quadram Ultra VGA
  1042.      = T   80x60  8x8          16        B800 Genoa 6400
  1043.      = T   80x60  8x8          16        B800 Genoa SuperEGA BIOS 3.0+
  1044.      = G        528x480     256             Cirrus 510/520 chipset
  1045.      = G        640x480 32768        A000 ATI
  1046.      = G           1024x768      16             C&T chipset, Cardinal
  1047.      = G        640x480     16M        A000 WD90C
  1048.  73h = G   80x60  8x8    640x480      16        A000 Quadram Ultra VGA
  1049.      = G   80x60  8x8    640x480      16             Genoa 6400
  1050.      = G   80x60  8x8    640x480      16             Genoa SuperEGA BIOS 3.0+
  1051.  74h = T   80x66  8x8          16        B800 Quadram Ultra VGA
  1052.      = T   80x66  8x8          16        B800 Genoa 6400
  1053.      = T   80x66  8x8          16        B800 Genoa SuperEGA BIOS 3.0+
  1054.      = G        640x400       2        B800 Toshiba 3100 AT&T mode
  1055.      = G  128x48  8x16 1024x768      16       1    A000 Ahead A, Ahead B (512K)
  1056.  75h = G  128x48  8x16 1024x768       4       1    A000 Ahead B
  1057.      = G   80x66    640x528      16???        A000 Quadram Ultra VGA
  1058.      = G   80x66    640x528      16             Genoa SuperEGA BIOS 3.0+
  1059.  76h = T   94x29  8x14          16        B800 Quadram Ultra VGA
  1060.      = T   94x29  8x14                     Genoa SuperEGA BIOS 3.0+
  1061.      = G  128x48  8x16 1024x768       2       1    A000 Ahead B
  1062.  77h = G   94x29    752x410      16???        A000 Quadram Ultra VGA
  1063.      = G   94x29    752x410      16             Genoa SuperEGA BIOS 3.0+
  1064.  78h = T  100x37  8x16          16             Genoa 6400
  1065.      = T  100x75  8x8          16        B800 Quadram Ultra VGA
  1066.      = T  100x75  8x8                     Genoa SuperEGA BIOS 3.0+
  1067.      = G        640x400     256             STB VGA/EM-16 Plus
  1068.      = G        640x400     256             Cardinal, C&T chipset
  1069.      = G        640x400     256             Cirrus 5320 chipset
  1070.  79h = G        640x480     256             Cardinal, C&T chipset
  1071.      = G  100x75    800x600      16???        A000 Quadram Ultra VGA
  1072.      = G  100x75  8x8    800x600      16             Genoa SuperEGA BIOS 3.0+
  1073.      = G  100x75  8x8    800x600      16             Genoa 6400
  1074.  7Ah = T  114x60  8x8          16        B800 Quadram Ultra VGA
  1075.      = T  114x60  8x8                     Genoa SuperEGA BIOS 3.0+
  1076.      = G        720x540     256             C&T chipset, Cardinal
  1077.  7Bh = G        800x600     256             C&T chipset, Cardinal
  1078.      = G  114x60    912x480      16???        A000 Quadram Ultra VGA
  1079.      = G        912x480      16             Genoa SuperEGA BIOS 3.0+
  1080.  7Ch = G        512x512      16             Genoa
  1081.  7Dh = G   64x32  8x16    512x512     256             Genoa
  1082.  7Eh =     special mode set (see AX=007Eh)         Paradise VGA, AT&T VDC600
  1083.      = G   80x25  8x16    640x400     256             Genoa 6400
  1084.  7Fh =     special function set (see AX=007Fh)         Paradise VGA, AT&T VDC600
  1085.      = G  128x48  8x16 1024x768       4             Genoa 6400
  1086.  82h = T   80x25         B&W             AT&T VDC overlay mode [5]
  1087.  83h = T   80x25                     AT&T VDC overlay mode [5]
  1088.  86h = G        640x200     B&W             AT&T VDC overlay mode [5]
  1089.  88h = G   90x43  8x8    720x352     mono        B000 Hercules + MSHERC.COM
  1090.  C0h = G        640x400     2/prog pallet         AT&T VDC overlay mode [5]
  1091.  C4h =     disable output                     AT&T VDC overlay mode [5]
  1092.  D0h = G        640x400       2        B800 DEC VAXmate AT&T mode
  1093. Notes:
  1094. [1] for ATI EGA Wonder, mode 08h is only valid if SMS.COM is loaded resident.
  1095.       SMS maps mode 08h to mode 27h if the byte at location 0040:0063 is 0B4h,
  1096.       otherwise to mode 23h, thus selecting the appropriate (monochrome or
  1097.       color) 132x25 character mode.
  1098.     for ATI VGA Wonder, mode 08h is the same, and only valid if VCONFIG loaded
  1099.       resident
  1100. [2] early XGA boards support 132-column text but do not have this BIOS mode
  1101. [3] DESQview intercepts calls to change into these two modes (21h is page 0,
  1102.       22h is page 1) even if there is no Hercules graphics board installed
  1103. [4] ATI BIOS v4-1.00 has a text-scrolling bug in this mode
  1104. [5] for AT&T VDC overlay modes, BL contains the DEB mode, which may be 06h,
  1105.       40h, or 44h
  1106. [6] BIOS text support is broken in this undocumented mode; scrolling moves only
  1107.       about 1/3 of the screen (and does even that portion incorrectly), while
  1108.       screen clears only clear about 3/4.
  1109. [7] The Oak OTI-037/067/077 modes are present in the Oak VGA BIOS, which OEMs
  1110.       may choose to use only partially or not at all; thus, not all Oak boards
  1111.       support all "Oak" modes listed here
  1112. [8] interlaced only
  1113. [9] this card uses the full 128K A000h-BFFFh range for the video buffer,
  1114.       precluding the use of a monochrome adapter in the same system
  1115. ----------100070-----------------------------
  1116. INT 10 - VIDEO - Everex Micro Enhancer EGA/Viewpoint VGA - EXTENDED MODE SET
  1117.     AX = 0070h
  1118.     BL = mode (see below)
  1119. SeeAlso: AH=00h,AX=6F05h,AX=7000h/BX=0004h,AH=FFh"GO32"
  1120.  
  1121. Values for video mode:
  1122.       text/ text pixel     pixel    colors    disp    scrn  monitor    adapter
  1123.       grph resol  box    resoltn        page    addr
  1124.  00h = G        640x480      16             multsync    EGA,VGA
  1125.  01h = G        752x410      16             multsync    EGA,VGA
  1126.  02h = G        800x600      16             multsync    EGA,VGA
  1127.  03h = T   80x34                     multsync    EGA,VGA
  1128.  04h = T   80x60                     multsync    EGA,VGA
  1129.  05h = T   94x29                     multsync    EGA only
  1130.  06h = T   94x51                     multsync    EGA only
  1131.  07h = T  100x43  8x14          16                VGA only
  1132.  08h = T  100x75  8x8          16                VGA only
  1133.  09h = T   80x44                     EGA    EGA only
  1134.  0Ah = T  132x25                     EGA    EGA,VGA
  1135.  0Bh = T  132x44                     EGA    EGA,VGA
  1136.  0Ch = T  132x25                     CGA    EGA only
  1137.  0Dh = T   80x44                     mono    EGA only
  1138.  0Eh = T  132x25                     mono
  1139.  0Fh = T  132x44                     mono
  1140.  10h =     reserved
  1141.  11h = G           1280x350       4                EGA only
  1142.  12h = G           1280x600       4                EGA only
  1143.  13h = G        640x350     256                EGA,EV673
  1144.  14h = G        640x400     256
  1145.  15h = G        512x480     256
  1146.  16h = T   80x30  8x16         256                VGA only
  1147.  18h = T  100x27  8x16          16                VGA only
  1148.  20h = G           1024x768      16                Everex 629,678
  1149.                                 Everex EV-673
  1150.  21h = T  160x64  8x16 1280x1024  16                1MB VGA only
  1151.  30h = G        640x480     256                Everex 629,678
  1152.                                 Everex EV-673
  1153.  31h = G        800x600     256                Everex 629,678
  1154.                                 Everex EV-673
  1155.  32h = G  128x48  8x16 1024x768     256                1MB VGA only
  1156.  40h = T  132x30  8x16          16                VGA only
  1157.  50h = T  132x32  8x16         mono                VGA only
  1158.  62h = G   40x25  8x8    320x200     32K                Vwpt TC (EV629)
  1159.  70h = G   64x30  8x16    512x480     32K                Viewpoint TC
  1160.  71h = G   80x30  8x16    640x480     32K                Viewpoint TC
  1161.  76h = G   64x30  8x16    512x480     16M                Viewpoint TC
  1162.  77h = G   80x30  8x16    640x480     16M                Viewpoint TC
  1163. ----------10007E-----------------------------
  1164. INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - SET SPECIAL MODE
  1165.     AX = 007Eh
  1166.     BX = horizontal dimension of the mode desired
  1167.     CX = vertical dimension of the mode desired
  1168.          (both BX/CX in pixels for graphics modes, rows for alpha modes)
  1169.     DX = number of colors of the mode desired (0000h for monochrome modes)
  1170. Return: BH = 7Eh if successful (Paradise VGA)
  1171.     AL = 7Eh if successful (AT&T VDC600)
  1172. SeeAlso: AH=00h,AX=0070h,AX=007Fh,AX=6F05h,AH=FFh"GO32"
  1173. ----------10007F-----------------------------
  1174. INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - EXTENDED FUNCTIONS
  1175.     AX = 007Fh
  1176.     BH = function
  1177.         00h     set VGA operation
  1178.         01h     set non-VGA operation
  1179.         color modes (0,1,2,3,4,5,6) will set non-VGA CGA operation
  1180.         monochrome mode 7 will set non-VGA MDA/Hercules operation
  1181.         02h     query mode status
  1182.         Return: BL = 00h if operating in VGA mode, 01h if non-VGA mode
  1183.             CH = total video RAM size in 64k byte units
  1184.             CL = video RAM used by the current mode
  1185.         03h     lock current mode
  1186.         allows current mode (VGA or non-VGA) to survive re-boot
  1187.         04h     enter CGA mode (AT&T VDC600 only)
  1188.         05h     enter MDA mode (AT&T VDC600 only)
  1189.         0Ah,0Bh,0Ch,0Dh,0Eh,0Fh  WRITE PARADISE REGISTERS 0,1,2,3,4,5
  1190.         (port 03CEh indices 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh)
  1191.         BL = value to set in the paradise register
  1192.         1Ah,1Bh,1Ch,1Dh,1Eh,1Fh READ PARADISE REGISTERS 0,1,2,3,4,5
  1193.         (port 03CEh indices 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh)
  1194.         Return: BL = value of the paradise register
  1195.             BH = 7Fh if successful
  1196. Return: AL = 7Fh if successful (AT&T VDC600)
  1197. SeeAlso: AX=007Eh
  1198. ----------1001-------------------------------
  1199. INT 10 - VIDEO - SET TEXT-MODE CURSOR SHAPE
  1200.     AH = 01h
  1201.     CH = bit 7    should be zero
  1202.          bits 6,5 cursor blink
  1203.              (00=normal, 01=invisible, 10=erratic, 11=slow)
  1204.              (00=normal, other=invisible on EGA/VGA)
  1205.          bits 4-0 top scan line containing cursor
  1206.     CL = bottom scan line containing cursor (bits 0-4)
  1207. Notes:    buggy on EGA systems--BIOS remaps cursor shape in 43 line modes, but
  1208.       returns unmapped cursor shape
  1209.     UltraVision scales size to the current font height by assuming 14-line
  1210.       monochrome and 8-line color fonts; this call is not valid if cursor
  1211.       emulation has been disabled
  1212.     applications which wish to change the cursor by programming the
  1213.       hardware directly on EGA or above should call INT 10/AX=1130h or
  1214.       read 0040h:0085h first to determine the current font height
  1215. BUG:    AMI 386 BIOS and AST Premier 386 BIOS will lock up the system if AL
  1216.       is not equal to the current video mode
  1217. SeeAlso: AH=03h,AX=CD05h
  1218. ----------1002-------------------------------
  1219. INT 10 - VIDEO - SET CURSOR POSITION
  1220.     AH = 02h
  1221.     BH = page number
  1222.         0-3 in modes 2&3
  1223.         0-7 in modes 0&1
  1224.         0 in graphics modes
  1225.     DH = row (00h is top)
  1226.     DL = column (00h is left)
  1227. SeeAlso: AH=03h,AH=05h,INT 60/DI=030Bh
  1228. ----------1003-------------------------------
  1229. INT 10 - VIDEO - GET CURSOR POSITION AND SIZE
  1230.     AH = 03h
  1231.     BH = page number
  1232.         0-3 in modes 2&3
  1233.         0-7 in modes 0&1
  1234.         0 in graphics modes
  1235. Return: AX = 0000h (Phoenix BIOS)
  1236.     CH = start scan line
  1237.     CL = end scan line
  1238.     DH = row (00h is top)
  1239.     DL = column (00h is left)
  1240. Notes:    a separate cursor is maintained for each of up to 8 display pages
  1241.     many ROM BIOSes incorrectly return the default size for a color display
  1242.       (start 06h, end 07h) when a monochrome display is attached
  1243. SeeAlso: AH=01h,AH=02h
  1244. ----------1004-------------------------------
  1245. INT 10 - VIDEO - READ LIGHT PEN POSITION (except VGA)
  1246.     AH = 04h
  1247. Return: AH = light pen trigger flag
  1248.         00h not down/triggered
  1249.         01h down/triggered
  1250.         DH,DL = row,column of character light pen is on
  1251.         CH = pixel row (graphics modes 04h-06h)
  1252.         CX = pixel row (graphics modes with >200 rows)
  1253.         BX = pixel column
  1254. Notes:    on a CGA, returned column numbers are always multiples of 2 (320-
  1255.       column modes) or 4 (640-column modes)
  1256.     returned row numbers are only accurate to two lines
  1257. ----------1005-------------------------------
  1258. INT 10 - VIDEO -  SELECT ACTIVE DISPLAY PAGE
  1259.     AH = 05h
  1260.     AL = new page number (00h to number of pages - 1) (see AH=00h)
  1261. Note:    to determine whether the requested page actually exists, use AH=0Fh
  1262.       to query the current page after making this call
  1263. SeeAlso: AH=0Fh,AH=43h,AH=45h
  1264. ----------1005-------------------------------
  1265. INT 10 - VIDEO - PCjr - MANIPULATE CRT/CPU PAGE REGISTERS
  1266.     AH = 05h
  1267.     AL = subfunction
  1268.         80h read CRT and CPU page registers
  1269.         Return: BH = CRT page register
  1270.             BL = CPU page register
  1271.         81h set CPU page register
  1272.         BL = CPU page
  1273.         82h set CRT page register
  1274.         BH = CRT page
  1275.         83h set both CPU and CRT page registers
  1276.         BL = CPU page
  1277.         BH = CRT page
  1278. Notes:    the CPU page determines which 16K block of the first 128K of physical
  1279.       memory will be mapped at B800h by the hardware
  1280.     the CRT page determines the start address of the memory used by the
  1281.       video controller
  1282. ----------1005-------------------------------
  1283. INT 10 - VIDEO - Corona/Cordata BIOS v4.10+ - GRAPHICS BITMAP BUFFER
  1284.     AH = 05h
  1285.     AL =
  1286.         00h set address of graphics bitmap buffer (video modes 60h,61h)
  1287.         BX = segment of buffer
  1288.         0Fh get address of graphics bitmap buffer (video modes 60h,61h)
  1289.         Return: DX = segment of graphics bitmap buffer
  1290. ----------1006-------------------------------
  1291. INT 10 - VIDEO - SCROLL UP WINDOW
  1292.     AH = 06h
  1293.     AL = number of lines by which to scroll up (00h = clear entire window)
  1294.     BH = attribute used to write blank lines at bottom of window
  1295.     CH,CL = row,column of window's upper left corner
  1296.     DH,DL = row,column of window's lower right corner
  1297. Note:    affects only the currently active page (see AH=05h)
  1298. Warning: some implementations have a bug which destroys BP
  1299. SeeAlso: AH=07h,AH=72h,AH=73h,AX=7F07h,INT 50/AX=0014h
  1300. ----------1007-------------------------------
  1301. INT 10 - VIDEO - SCROLL DOWN WINDOW
  1302.     AH = 07h
  1303.     AL = number of lines by which to scroll down (00h=clear entire window)
  1304.     BH = attribute used to write blank lines at top of window
  1305.     CH,CL = row,column of window's upper left corner
  1306.     DH,DL = row,column of window's lower right corner
  1307. Note:    affects only the currently active page (see AH=05h)
  1308. Warning: some implementations have a bug which destroys BP
  1309. SeeAlso: AH=06h,AH=72h,AH=73h,INT 50/AX=0014h
  1310. ----------1008-------------------------------
  1311. INT 10 - VIDEO - READ CHARACTER AND ATTRIBUTE AT CURSOR POSITION
  1312.     AH = 08h
  1313.     BH = page number (00h to number of pages - 1) (see AH=00h)
  1314. Return: AH = attribute
  1315.         bit 7: blink
  1316.         bits 6-4: background color
  1317.             000 black
  1318.             001 blue
  1319.             010 green
  1320.             011 cyan
  1321.             100 red
  1322.             101 magenta
  1323.             110 brown
  1324.             111 white
  1325.         bits 3-0: foreground color
  1326.             0000 black     1000 dark gray
  1327.             0001 blue     1001 light blue
  1328.             0010 green     1010 light green
  1329.             0011 cyan     1011 light cyan
  1330.             0100 red     1100 light red
  1331.             0101 magenta     1101 light magenta
  1332.             0110 brown     1110 yellow
  1333.             0111 light gray     1111 white
  1334.     AL = character
  1335. Notes:    for monochrome displays, a foreground of 1 with background 0 is
  1336.       underlined 
  1337.     the blink bit may be reprogrammed to enable intense background colors
  1338.       using AX=1003h or by programming the CRT controller
  1339.     the foreground intensity bit (3) can be programmed to switch between
  1340.       character sets A and B on EGA and VGA cards, thus enabling 512
  1341.       simultaneous characters on screen.  In this case the bit's usual
  1342.       function (intensity) is regularly turned off.
  1343. SeeAlso: AH=09h,AX=1003h,AX=5001h
  1344. ----------1009-------------------------------
  1345. INT 10 - VIDEO - WRITE CHARACTER AND ATTRIBUTE AT CURSOR POSITION
  1346.     AH = 09h
  1347.     AL = character to display
  1348.     BH = page number (00h to number of pages - 1) (see AH=00h)
  1349.     BL = attribute (text mode) or color (graphics mode)
  1350.          if bit 7 set in graphics mode, character is xor'ed onto screen
  1351.     CX = number of times to write character
  1352. Notes:    all characters are displayed, including CR, LF, and BS
  1353.     replication count in CX may produce an unpredictable result in graphics
  1354.       modes if it is greater than the number of positions remaining in the
  1355.       current row
  1356. SeeAlso: AH=08h,AH=0Ah,AH=4Bh"GRAFIX",INT 17/AH=60h,INT 1F,INT 43,INT 44
  1357. ----------100A-------------------------------
  1358. INT 10 - VIDEO - WRITE CHARACTER ONLY AT CURSOR POSITION
  1359.     AH = 0Ah
  1360.     AL = character to display
  1361.     BH = page number (00h to number of pages - 1) (see AH=00h)
  1362.     BL = attribute (PCjr only) or color (graphics mode)
  1363.          if bit 7 set in graphics mode, character is xor'ed onto screen
  1364.     CX = number of times to write character
  1365. Notes:    all characters are displayed, including CR, LF, and BS
  1366.     replication count in CX may produce an unpredictable result in graphics
  1367.       modes if it is greater than the number of positions remaining in the
  1368.       current row
  1369. SeeAlso: AH=08h,AH=09h,AH=4Bh,INT 17/AH=60h,INT 1F,INT 43,INT 44
  1370. ----------100B--BH00-------------------------
  1371. INT 10 - VIDEO - SET BACKGROUND/BORDER COLOR
  1372.     AH = 0Bh
  1373.     BH = 00h
  1374.     BL = background/border color (border only in text modes)
  1375. SeeAlso: AH=0Bh/BH=01h
  1376. ----------100B--BH01-------------------------
  1377. INT 10 - VIDEO - SET PALETTE
  1378.     AH = 0BH
  1379.     BH = 01h
  1380.     BL = palette ID
  1381.         00h background, green, red, and brown/yellow
  1382.         01h background, cyan, magenta, and white
  1383. SeeAlso: AH=0Bh/BH=00h
  1384. ----------100C-------------------------------
  1385. INT 10 - VIDEO - WRITE GRAPHICS PIXEL
  1386.     AH = 0Ch
  1387.     BH = page number
  1388.     AL = pixel color (if bit 7 set, value is xor'ed onto screen)
  1389.     CX = column
  1390.     DX = row
  1391. Notes:    valid only in graphics modes
  1392.     BH is ignored if the current video mode supports only one page
  1393. SeeAlso: AH=0Dh,AH=46h
  1394. ----------100D-------------------------------
  1395. INT 10 - VIDEO - READ GRAPHICS PIXEL
  1396.     AH = 0Dh
  1397.     BH = page number
  1398.     CX = column
  1399.     DX = row
  1400. Return: AL = pixel color
  1401. Notes:    valid only in graphics modes
  1402.     BH is ignored if the current video mode supports only one page
  1403. SeeAlso: AH=0Ch,AH=47h
  1404. ----------100E-------------------------------
  1405. INT 10 - VIDEO - TELETYPE OUTPUT
  1406.     AH = 0Eh
  1407.     AL = character to write
  1408.     BH = page number
  1409.     BL = foreground color (graphics modes only)
  1410. Desc:    display a character on the screen, advancing the cursor and scrolling
  1411.       the screen as necessary
  1412. Notes:    characters 07h (BEL), 08h (BS), 0Ah (LF), and 0Dh (CR) are interpreted
  1413.       and do the expected things
  1414.     IBM PC ROMs dated 4/24/81 and 10/19/81 require that BH be the same as
  1415.       the current active page
  1416. SeeAlso: AH=02h,AH=0Ah
  1417. ----------100F-------------------------------
  1418. INT 10 - VIDEO - GET CURRENT VIDEO MODE
  1419.     AH = 0Fh
  1420. Return: AH = number of character columns
  1421.     AL = display mode (see AH=00h)
  1422.     BH = active page (see AH=05h)
  1423. Notes:    if mode was set with bit 7 set ("no blanking"), the returned mode will
  1424.       also have bit 7 set
  1425.     EGA, VGA, and UltraVision return either AL=03h (color) or AL=07h
  1426.       (monochrome) in all extended-row text modes
  1427. SeeAlso: AH=00h,AH=05h,AX=10F2h/BL=00h,AX=1130h,AX=CD04h
  1428. ----------100F56BX4756-----------------------
  1429. INT 10 - VUIMAGE DISPLAY DRIVER (v2.20 and below)
  1430.     AX = 0F56h
  1431.     BX = 4756h
  1432.     CX = 4944h
  1433.     DL = function
  1434.         01h installation check
  1435.         Return: AX = 5649h
  1436.             BX = 4443h
  1437.             CX = 5647h
  1438.             DH = 01h
  1439.         02h get first video mode's parameters
  1440.         Return: AX = BIOS mode number
  1441.             BX = width in pixels
  1442.             CX = height in pixels
  1443.             DX = number of colors
  1444.         03h get next video mode's parameters
  1445.         Return: as for DL=02h
  1446.         04h display line???
  1447.         ES:DI -> record (see below)
  1448.         ???
  1449.         Return: ???
  1450. Notes:    VUIMAGE is a shareware GIF/TIFF image viewer by Offe Enterprises
  1451.     the use of TSR display drivers was discontinued after v2.20
  1452.  
  1453. Format of record for DL=04h:
  1454. Offset    Size    Description
  1455.  00h    WORD    row number
  1456.  02h    WORD    starting column???
  1457.  04h    WORD    ending column???
  1458.     ???
  1459. ----------100F--SIF123-----------------------
  1460. INT 10 - FRIEZE v7.41+ - INSTALLATION CHECK
  1461.     AH = 0Fh
  1462.     SI = F123h
  1463.     DI = 321Fh
  1464. Return: AH = number of character columns
  1465.     AL = display mode (see AH=00h)
  1466.     BH = active page (see AH=05h)
  1467.     SI = DI = F345h if installed
  1468. Notes:    if mode was set with bit 7 set ("no blanking"), the returned mode will
  1469.       also have bit 7 set
  1470.     EGA, VGA, and UltraVision return either AL=03h (color) or AL=07h
  1471.       (monochrome) in all extended-row text modes
  1472. SeeAlso: AH=0Fh"VIDEO",AH=4Bh"FRIEZE"
  1473. ----------1010-------------------------------
  1474. INT 10 - BIOS Window Extension v1.1 - SET WINDOW COORDINATES
  1475.     AH = 10h
  1476.     CH,CL = row,column of upper left corner of window
  1477.     DH,DL = row,column of lower right corner of window
  1478. Return: AL = status
  1479.         00h successful
  1480.         01h failed
  1481.     AH destroyed
  1482. Program: BWE is a TSR by John J. Seal published in May 1986 Dr. Dobb's Journal
  1483. Note:    when a window has been set, all output via AH=0Eh is restricted to
  1484.       the specified window
  1485. SeeAlso: AH=11h"Window",AH=12h"Window"
  1486. ----------1010-------------------------------
  1487. INT 10 - VIDEO - Eagle PC2 BIOS Rev. C - SET SCROLL SPEED
  1488.     AH = 10h
  1489.     AL = speed
  1490.         00h fast
  1491.         01h slow (only moves characters during vertical retrace)
  1492. Return: AH = previous speed
  1493. ----------101000----------------------------
  1494. INT 10 - VIDEO - SET SINGLE PALETTE REGISTER (PCjr,EGA,MCGA,VGA)
  1495.     AX = 1000h
  1496.     BL = palette register number (00h-0Fh)
  1497.        = attribute register number (undocumented)
  1498.          10h attribute mode control register (should let BIOS control this)
  1499.          11h overscan color register (see also AX=1001h)
  1500.          12h color plane enable register (bits 3-0 enable corresponding
  1501.         text attribute bit)
  1502.          13h horizontal PEL panning register
  1503.          14h color select register
  1504.     BH = color or attribute register value
  1505. Notes:    on MCGA, only BX = 0712h is supported
  1506.     under UltraVision, the palette locking status (see AX=CD01h)
  1507.       determines the outcome
  1508. SeeAlso: AX=1002h,AX=1007h,AX=CD01h
  1509. ----------101001-----------------------------
  1510. INT 10 - VIDEO - SET BORDER (OVERSCAN) COLOR (PCjr,EGA,VGA)
  1511.     AX = 1001h
  1512.     BH = border color (00h-3Fh)
  1513. BUG:    the original IBM VGA BIOS incorrectly updates the parameter save area
  1514.       and places the border color at offset 11h of the palette table
  1515.       rather than offset 10h
  1516. Note:    under UltraVision, the palette locking status (see AX=CD01h)
  1517.       determines the outcome
  1518. SeeAlso: AX=1002h,AX=1008h,AX=CD01h
  1519. ----------101002-----------------------------
  1520. INT 10 - VIDEO - SET ALL PALETTE REGISTERS (PCjr,EGA,VGA)
  1521.     AX = 1002h
  1522.     ES:DX -> palette register list
  1523. Note:    under UltraVision, the palette locking status (see AX=CD01h)
  1524.       determines the outcome
  1525. SeeAlso: AX=1000h,AX=1001h,AX=1009h,AX=CD01h
  1526.  
  1527. Format of palette register list:
  1528. Offset    Size    Description
  1529.  00h 16 BYTEs    colors for palette registers 00h through 0Fh
  1530.  10h    BYTE    border color
  1531. ----------101003-----------------------------
  1532. INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA)
  1533.     AX = 1003h
  1534.     BL = new state
  1535.         00h background intensity enabled
  1536.         01h blink enabled
  1537.     BH = 00h to avoid problems on some adapters
  1538. Notes:    although there is no function to get the current status on adapters
  1539.       prior to the VGA, bit 5 of 0040h:0065h indicates the state; on the
  1540.       VGA, use AH=1Bh and check offset 2Dh of the returned data
  1541.     when configured for a monochrome display, the Boca Research Multi-EGA
  1542.       with ROM v M1.1 Type D has its screen disrupted if BH is not clear
  1543. SeeAlso: AH=08h,AH=1Bh
  1544. ----------101007-----------------------------
  1545. INT 10 - VIDEO - GET INDIVIDUAL PALETTE REGISTER (VGA,UltraVision v2+)
  1546.     AX = 1007h
  1547.     BL = palette or attribute (undoc) register number (see AX=1000h)
  1548. Return: BH = palette or attribute register value
  1549. Note:    UltraVision v2+ supports this function even on color EGA systems in
  1550.       video modes 00h-03h, 10h, and 12h; direct programming of the palette
  1551.       registers will cause incorrect results because the EGA registers are
  1552.       write-only.  To guard against older versions or unsupported video
  1553.       modes, programs which expect to use this function on EGA systems
  1554.       should set BH to FFh on entry.
  1555. SeeAlso: AX=1000h,AX=1009h
  1556. ----------101008-----------------------------
  1557. INT 10 - VIDEO - READ OVERSCAN (BORDER COLOR) REGISTER (VGA,UltraVision v2+)
  1558.     AX = 1008h
  1559. Return: BH = border color (00h-3Fh)
  1560. Note:    UltraVision v2+ supports this function even on color EGA systems in
  1561.       video modes 00h-03h, 10h, and 12h; direct programming of the palette
  1562.       registers will cause incorrect results because the EGA registers are
  1563.       write-only.  To guard against older versions or unsupported video
  1564.       modes, programs which expect to use this function on EGA systems
  1565.       should set BH to FFh on entry.
  1566. SeeAlso: AX=1001h
  1567. ----------101009-----------------------------
  1568. INT 10 - VIDEO - READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER (VGA)
  1569.     AX = 1009h
  1570.     ES:DX -> 17-byte buffer (see AX=1002h)
  1571. Note:    UltraVision v2+ supports this function even on color EGA systems in
  1572.       video modes 00h-03h, 10h, and 12h; direct programming of the palette
  1573.       registers will cause incorrect results because the EGA registers are
  1574.       write-only.  To guard against older versions or unsupported video
  1575.       modes, programs which expect to use this function on EGA systems
  1576.       should set the ES:DX buffer to FFh before calling.
  1577. SeeAlso: AX=1002h,AX=1007h,AX=CD02h
  1578. ----------101010-----------------------------
  1579. INT 10 - VIDEO - SET INDIVIDUAL DAC REGISTER (VGA/MCGA)
  1580.     AX = 1010h
  1581.     BX = register number
  1582.     CH = new value for green (0-63)
  1583.     CL = new value for blue (0-63)
  1584.     DH = new value for red (0-63)
  1585. SeeAlso: AX=1012h,AX=1015h
  1586. ----------101012-----------------------------
  1587. INT 10 - VIDEO - SET BLOCK OF DAC REGISTERS (VGA/MCGA)
  1588.     AX = 1012h
  1589.     BX = starting color register
  1590.     CX = number of registers to set
  1591.     ES:DX -> table of 3*CX bytes where each 3 byte group represents one
  1592.          byte each of red, green and blue (0-63)
  1593. SeeAlso: AX=1010h,AX=1017h
  1594. ----------101013-----------------------------
  1595. INT 10 - VIDEO - SELECT VIDEO DAC COLOR PAGE (VGA)
  1596.     AX = 1013h
  1597.     BL = subfunction
  1598.         00h select paging mode
  1599.         BH = 00h select 4 blocks of 64
  1600.         BH = 01h select 16 blocks of 16
  1601.         01h select page
  1602.         BH = page number (00h to 03h) or (00h to 0Fh)
  1603. Note:    this function is not valid in mode 13h
  1604. SeeAlso: AX=101Ah
  1605. ----------101015-----------------------------
  1606. INT 10 - VIDEO - READ INDIVIDUAL DAC REGISTER (VGA/MCGA)
  1607.     AX = 1015h
  1608.     BL = palette register number
  1609. Return: DH = red value
  1610.     CH = green value
  1611.     CL = blue value
  1612. SeeAlso: AX=1010h,AX=1017h
  1613. ----------101017-----------------------------
  1614. INT 10 - VIDEO - READ BLOCK OF DAC REGISTERS (VGA/MCGA)
  1615.     AX = 1017h
  1616.     BX = starting palette register
  1617.     CX = number of palette registers to read
  1618.     ES:DX -> buffer (3 * CX bytes in size) (see also AX=1012h)
  1619. Return: buffer filled with CX red, green and blue triples
  1620. SeeAlso: AX=1012h,AX=1015h
  1621. ----------101018-----------------------------
  1622. INT 10 U - VIDEO - SET PEL MASK (VGA/MCGA)
  1623.     AX = 1018h
  1624.     BL = new PEL value
  1625. SeeAlso: AX=1019h
  1626. ----------101019-----------------------------
  1627. INT 10 U - VIDEO - READ PEL MASK (VGA/MCGA)
  1628.     AX = 1019h
  1629. Return:    BL = value read
  1630. SeeAlso: AX=1018h
  1631. ----------10101A-----------------------------
  1632. INT 10 - VIDEO - GET VIDEO DAC COLOR-PAGE STATE (VGA)
  1633.     AX = 101Ah
  1634. Return: BL = paging mode
  1635.         00h four pages of 64
  1636.         01h sixteen pages of 16
  1637.     BH = current page
  1638. SeeAlso: AX=1013h
  1639. ----------10101B-----------------------------
  1640. INT 10 - VIDEO - PERFORM GRAY-SCALE SUMMING (VGA/MCGA)
  1641.     AX = 101Bh
  1642.     BX = starting palette register
  1643.     CX = number of registers to convert
  1644. SeeAlso: AH=12h/BL=33h
  1645. ----------1010E0-----------------------------
  1646. INT 10 - VIDEO - Diamond Speedstar 24 - SET 24-BIT GRAPHICS MODE
  1647.     AX = 10E0h
  1648.     BL = video mode (see also AH=00h)
  1649.         2Eh = 640x480
  1650. Return: ???
  1651. SeeAlso: AH=00h,AX=10F0h
  1652. ----------1010F0-----------------------------
  1653. INT 10 - VIDEO - Tseng ET-4000 BIOS - SET HiColor GRAPHICS MODE
  1654.     AX = 10F0h
  1655.     BL = video mode (see also AH=00h)
  1656.         32768-color modes:
  1657.         13h = 320x200
  1658.         2Dh = 640x350
  1659.         2Eh = 640x480
  1660.         2Fh = 640x400
  1661.         30h = 800x600
  1662.         16M-color modes:
  1663.         3Eh = 640x480 (Genoa 7900)
  1664. Return:    AL = 10h if supported
  1665.     AH = status
  1666.         00h if successful
  1667.         other on error
  1668. Note:    the Tseng HiColor BIOS extensions are supported by:
  1669.       Diamond Computer Systems    SpeedStar HiColor VGA
  1670.       Everex Systems        HC VGA
  1671.       Focus Information Systems    2theMax 4000
  1672.       Cardinal Technologies        VGA732
  1673.       Orchid ProDesigner IIs    Genoa 7900
  1674. SeeAlso: AH=00h,AX=10E0h,AX=10F1h,AX=10F2h
  1675. ----------1010F1-----------------------------
  1676. INT 10 - VIDEO - Tseng ET-4000 BIOS - GET DAC TYPE
  1677.     AX = 10F1h
  1678. Return: AL = 10h if supported
  1679.     BL = type of digital/analog converter
  1680.         00h normal VGA DAC
  1681.         01h Sierra SC1148x HiColor DAC
  1682.         02h new Sierra DAC
  1683.        else other HiColor DAC
  1684. SeeAlso: AX=10F0h,AX=10F2h
  1685. ----------1010F2BL00-------------------------
  1686. INT 10 u - VIDEO - Tseng ET-4000 BIOS - CHECK IF IN HiColor MODE
  1687.     AX = 10F2h
  1688.     BL = 00h
  1689. Return: AX = 0010h if supported
  1690.     BL = video mode type
  1691.         00h normal
  1692.         else HiColor mode
  1693. SeeAlso: AH=0Fh,AX=10F0h,AX=10F1h
  1694. ----------1011-------------------------------
  1695. INT 10 - BIOS Window Extension v1.1 - GET WINDOW COORDINATES
  1696.     AH = 11h
  1697. Return: CH,CL = row,column of upper left corner
  1698.     DH,DL = row,column of lower right corner
  1699. Program: BWE is a TSR by John J. Seal published in May 1986 Dr. Dobb's Journal
  1700. SeeAlso: AH=10h"Window",AH=12h"Window"
  1701. ----------1011-------------------------------
  1702. INT 10 - VIDEO - TEXT-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA)
  1703.     AH = 11h
  1704.     The following functions will cause a mode set, completely resetting
  1705.     the video environment, but without clearing the video buffer
  1706.     AL = 00h, 10h: load user-specified patterns
  1707.         ES:BP -> user table
  1708.         CX      = count of patterns to store
  1709.         DX      = character offset into map 2 block
  1710.         BL      = block to load in map 2
  1711.         BH      = number of bytes per character pattern
  1712.     AL = 01h, 11h: load ROM monochrome patterns (8 by 14)
  1713.         BL      = block to load
  1714.     AL = 02h, 12h: load ROM 8 by 8 double-dot patterns
  1715.         BL      = block to load
  1716.     AL = 03h: set block specifier
  1717.         BL      = block specifier
  1718.            (EGA/MCGA) bits 0,1 = block selected by chars with attribute
  1719.                      bit 3 = 0
  1720.                   bits 2,3 = block selected by chars with attribute
  1721.                      bit 3 = 1
  1722.            (VGA) bits 0,1,4 = block selected by attribute bit 3 = 0
  1723.              bits 2,3,5 = block selected by attribute bit 3 = 1
  1724.     AL = 04h, 14h: load ROM 8x16 character set (VGA)
  1725.         BL    = block to load
  1726. Notes:    The routines called with AL=1xh are designed to be called only
  1727.       immediately after a mode set and are similar to the routines called
  1728.       with AL=0xh, except that:
  1729.           Page 0 must be active.
  1730.           Bytes/character is recalculated.
  1731.           Max character rows is recalculated.
  1732.           CRT buffer length is recalculated.
  1733.           CRTC registers are reprogrammed as follows:
  1734.              R09 = bytes/char-1 ; max scan line (mode 7 only)
  1735.              R0A = bytes/char-2 ; cursor start
  1736.              R0B = 0        ; cursor end
  1737.              R12 = ((rows+1)*(bytes/char))-1 ; vertical display end
  1738.              R14 = bytes/char    ; underline loc
  1739.                (*** BUG: should be 1 less ***)
  1740.     the current block specifiers may be determined with INT 10/AH=1Bh,
  1741.       looking at offsets 2Bh and 2Ch of the returned data (VGA only)
  1742. SeeAlso: AH=1Bh,AX=CD10h
  1743. ----------1011-------------------------------
  1744. INT 10 - VIDEO - GRAPHICS-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA)
  1745.     AH = 11h
  1746.     AL = 20h: set user 8 by 8 graphics characters (INT 1F)
  1747.         ES:BP -> user table
  1748.     AL = 21h: set user graphics characters
  1749.         ES:BP -> user table
  1750.         CX      = bytes per character
  1751.         BL      = row specifier
  1752.            00h user set
  1753.               DL = number of rows
  1754.            01h 14 rows
  1755.            02h 25 rows
  1756.            03h 43 rows
  1757.     AL = 22h: ROM 8 by 14 set
  1758.         BL = row specifier (see above)
  1759.     AL = 23h: ROM 8 by 8 double dot
  1760.         BL = row specifier (see above)
  1761.     AL = 24h: load 8x16 graphics characters (VGA/MCGA)
  1762.         BL = row specifier (see above)
  1763.     AL = 29h: load 8x16 graphics characters (Compaq Systempro)
  1764.         BL = row specifier (see above)
  1765. Notes:    these functions are meant to be called only after a mode set
  1766.     UltraVision v2+ sets INT 43 to the appropriate font for AL=22h,23h,24h,
  1767.       and 29h
  1768. SeeAlso: INT 1F, INT 43
  1769. ----------101130-----------------------------
  1770. INT 10 - VIDEO - GET FONT INFORMATION (EGA, MCGA, VGA)
  1771.     AX = 1130h
  1772.     BH = pointer specifier
  1773.         00h INT 1Fh pointer
  1774.         01h INT 43h pointer
  1775.         02h ROM 8x14 character font pointer
  1776.         03h ROM 8x8 double dot font pointer
  1777.         04h ROM 8x8 double dot font (high 128 characters)
  1778.         05h ROM alpha alternate (9 by 14) pointer (EGA,VGA)
  1779.         06h ROM 8x16 font (MCGA, VGA)
  1780.         07h ROM alternate 9x16 font (VGA only)
  1781.         11h (UltraVision v2+) 8x20 font (VGA) or 8x19 font (autosync EGA)
  1782.         12h (UltraVision v2+) 8x10 font (VGA) or 8x11 font (autosync EGA)
  1783. Return: ES:BP = specified pointer
  1784.     CX    = bytes/character of on-screen font (not the requested font!)
  1785.     DL    = character rows on screen - 1 (VGA)
  1786.           = character rows on screen (EGA)
  1787. Note:    for UltraVision v2+, the 9xN alternate fonts follow the corresponding
  1788.       8xN font at ES:BP+256N
  1789. SeeAlso: AX=1100h,AX=1120h,INT 1F,INT 43
  1790. ----------1012-------------------------------
  1791. INT 10 - BIOS Window Extension v1.1 - GET BLANKING ATTRIBUTE
  1792.     AH = 12h
  1793. Return: BH = attribute to use on blanked lines when scrolling
  1794. Program: BWE is a TSR by John J. Seal published in May 1986 Dr. Dobb's Journal
  1795. SeeAlso: AH=11h"Window",AH=12h"Window"
  1796. ----------1012--BL10-------------------------
  1797. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, EGA, VGA, MCGA) - GET EGA INFO
  1798.     AH = 12h
  1799.     BL = 10h
  1800. Return: BH = 00h color mode in effect (I/O port 3Dxh)
  1801.          01h mono mode in effect (I/O port 3Bxh)
  1802.     BL = 00h  64k bytes memory installed
  1803.          01h 128k bytes memory installed
  1804.          02h 192k bytes memory installed
  1805.          03h 256k bytes memory installed
  1806.     CH = feature bits
  1807.     CL = switch settings
  1808. Note:    one possible check for the presence of an EGA or later display card
  1809.       is to call this function with BH=FFh; if not present, BH will be
  1810.       unchanged on return
  1811. ----------1012--BL20-------------------------
  1812. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS,EGA,VGA,MCGA) - ALTERNATE PRTSC
  1813.     AH = 12h
  1814.     BL = 20h  select alternate print screen routine
  1815. Notes:    installs a PrtSc routine from the video card's BIOS to replace the
  1816.       default PrtSc handler from the ROM BIOS, which usually does not
  1817.       understand screen heights other than 25 lines
  1818.     some adapters disable print-screen instead of enhancing it
  1819. SeeAlso: INT 05
  1820. ----------1012--BL2E-------------------------
  1821. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  1822.     AH = 12h
  1823.     BL = 2Eh
  1824. Note:    due to an omitted end-of-list marker, this version of the BIOS will
  1825.       crash the system on this function
  1826. ----------1012--BL30-------------------------
  1827. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA) - SELECT VERTICAL RESOLUTION
  1828.     AH = 12h
  1829.     BL = 30h
  1830.     AL = vertical resolution
  1831.          00h 200 scan lines
  1832.          01h 350 scan lines
  1833.          02h 400 scan lines
  1834. Return: AL = 12h if function supported
  1835. ----------1012--BL31-------------------------
  1836. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - PALETTE LOADING
  1837.     AH = 12h
  1838.     BL = 31h
  1839.     AL = 00h enable default palette loading
  1840.          01h disable default palette loading
  1841. Return: AL = 12h if function supported
  1842. ----------1012--BL32-------------------------
  1843. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - VIDEO ADDRESSING
  1844.     AH = 12h
  1845.     BL = 32h
  1846.     AL = 00h enable video addressing
  1847.          01h disable video addressing
  1848. Return: AL = 12h if function supported
  1849. ----------1012--BL33-------------------------
  1850. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - GRAY-SCALE SUMMING
  1851.     AH = 12h
  1852.     BL = 33h
  1853.     AL = 00h enable gray scale summing
  1854.          01h disable gray scale summing
  1855. Return: AL = 12h if function supported
  1856. SeeAlso: AX=101Bh,AX=BF06h
  1857. ----------1012--BL34-------------------------
  1858. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA) - CURSOR EMULATION
  1859.     AH = 12h
  1860.     BL = 34h
  1861.     AL = 00h enable alphanumeric cursor emulation
  1862.          01h disable alphanumeric cursor emulation
  1863. Return: AL = 12h if function supported
  1864. ----------1012--BL35-------------------------
  1865. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS) - DISPLAY-SWITCH INTERFACE
  1866.     AH = 12h
  1867.     BL = 35h
  1868.     AL = 00h initial adapter video off
  1869.          01h initial planar video on
  1870.          02h switch active video off
  1871.          03h switch inactive video on
  1872.          80h *UNDOCUMENTED* set system board video active flag
  1873.     ES:DX -> buffer (128 byte save area if AL = 0, 2 or 3)
  1874. Return: AL = 12h if function supported
  1875. ----------1012--BL36-------------------------
  1876. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, VGA) - VIDEO REFRESH CONTROL
  1877.     AH = 12h
  1878.     BL = 36h
  1879.     AL = 00h enable refresh
  1880.          01h disable refresh
  1881. Return: AL = 12h if function supported
  1882. ----------1012--BH55-------------------------
  1883. INT 10 - VIDEO - ALTERNATE FUNC SELECT (ATI,Tatung,Taxan) - ENHANCED FEATURES
  1884.     AH = 12h
  1885.     BH = 55h
  1886.     BL = subfunction
  1887.         00h disabled enhanced features
  1888.         01h enable enhanced features
  1889.         02h get status
  1890.         Return: AL = status flags
  1891.                 bit 3: set if enhanced features enabled
  1892.                 bits 7-5 monitor type
  1893.                 000 PS/2 mono
  1894.                 001 PS/2 color
  1895.                 010 multi-sync
  1896.                 011 Taxan 650 25kHz
  1897.                 100 RGB
  1898.                 101 mono
  1899.                 110 EGA
  1900.                 111 Compaq internal
  1901.         03h disable register trapping (CGA emulation)
  1902.         04h enable register trapping
  1903.         05h program mode described by table at ES:BP
  1904.         06h get mode table
  1905.         AL = video mode
  1906.         Return: ES:BP -> table suitable for mode AL (and subfnc BL=05h)
  1907.             BP = FFFFh on error
  1908.  
  1909. Format of ATI VGA Wonder video mode table:
  1910. Offset    Size    Description
  1911.  00h    BYTE    number of columns
  1912.  01h    BYTE    maximum row (number of rows - 1)
  1913.  02h    BYTE    scan lines per row
  1914.  03h    WORD    video buffer size in bytes
  1915.  05h  4 BYTEs    values for Sequencer registers 1-4
  1916.  09h    BYTE    value for Miscellaneous Output register
  1917.  0Ah 25 BYTEs    values for CRTC registers 00h-18h
  1918.         00h horizontal total size (chars)
  1919.         01h horizontal displayed (chars)
  1920.         02h horizontal sync position (chars)
  1921.         03h horizontal sync width (chars)
  1922.         04h vertical total size (char rows)
  1923.         05h vertical total adjust (scan lines)
  1924.         06h vertical displayed (char rows)
  1925.         07h vertical sync position (char rows)
  1926.         08h interlace mode
  1927.         09h max scan line in row
  1928.         0Ah cursor start scan line
  1929.         0Bh cursor end scan line
  1930.         0Ch screen memory start (high)
  1931.         0Dh screen memory start (low)
  1932.         0Eh cursor address (high)
  1933.         0Fh cursor address (low)
  1934.         10h light pen (high)
  1935.         11h light pen (low)
  1936.  23h 20 BYTEs    default palette (values for Attribute Controller regs 00h-13h)
  1937.  37h  9 BYTEs    values for Graphics Controller registers 00h-08h
  1938. ----------1012--BL74-------------------------
  1939. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  1940.     AH = 12h
  1941.     BL = 74h
  1942. Note:    due to an omitted end-of-list marker, this version of the BIOS will
  1943.       crash the system on this function
  1944. ----------1012--BL80-------------------------
  1945. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  1946.     AH = 12h
  1947.     BL = 80h
  1948. Note:    due to an omitted end-of-list marker, this version of the BIOS will
  1949.       crash the system on this function
  1950. ----------1012--BLBE-------------------------
  1951. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  1952.     AH = 12h
  1953.     BL = BEh
  1954. Note:    due to an omitted end-of-list marker, this version of the BIOS will
  1955.       crash the system on this function
  1956. ----------1012--BLC6-------------------------
  1957. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  1958.     AH = 12h
  1959.     BL = C6h
  1960. Note:    due to an omitted end-of-list marker, this version of the BIOS will
  1961.       crash the system on this function
  1962. ----------1012--BLF0-------------------------
  1963. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  1964.     AH = 12h
  1965.     BL = F0h
  1966. Note:    due to an omitted end-of-list marker, this version of the BIOS will
  1967.       crash the system on this function
  1968. ----------1013-------------------------------
  1969. INT 10 - VIDEO - WRITE STRING (AT and later,EGA)
  1970.     AH = 13h
  1971.     AL = write mode
  1972.        bit 0: update cursor after writing
  1973.            1: string contains alternating characters and attributes
  1974.     BH = page number
  1975.     BL = attribute if string contains only characters
  1976.     CX = number of characters in string
  1977.     DH,DL = row,column at which to start writing
  1978.     ES:BP -> string to write
  1979. Notes:    recognizes CR, LF, BS, and bell
  1980.     also available PC or XT with EGA or higher
  1981.     HP 95LX only supports write mode 00h
  1982. BUG:    on the IBM VGA Adapter, any scrolling which may occur is performed on
  1983.       the active page rather than the requested page
  1984. SeeAlso: AH=09h,AH=0Ah
  1985. ----------101400-----------------------------
  1986. INT 10 - VIDEO - LOAD USER-SPECIFIED LCD CHARACTER FONT (CONV,Compaq Port 386)
  1987.     AX = 1400h
  1988.     ES:DI -> character font
  1989.     BH = number of bytes per character
  1990.         08h or 10h (Compaq)
  1991.     BL = 00h load main font (block 0)
  1992.          01h load alternate font (block 1)
  1993.     CX = number of characters to store
  1994.     DX = character offset into RAM font area
  1995. SeeAlso: AH=11h,AX=1401h
  1996. ----------101401-----------------------------
  1997. INT 10 - VIDEO - LOAD SYSTEM ROM DEFAULT LCD CHARACTER FONT (CONV,CP386)
  1998.     AX = 1401h
  1999.     BL = font to load
  2000.         00h main font (block 0)
  2001.         01h alternate font (block 1)
  2002. SeeAlso: AH=11h,AX=1400h
  2003. ----------101402-----------------------------
  2004. INT 10 - VIDEO - SET MAPPING OF LCD HIGH INTENSITY ATTRIBUTES (CONV,CP386)
  2005.     AX = 1402h
  2006.     BL = function
  2007.         00h ignore high intensity attribute
  2008.         01h map high intensity to underscore
  2009.         02h map high intensity to reverse video
  2010.         03h map high intensity to selected alternate font
  2011.         B0h half intensity (Compaq)
  2012.         B1h toggle active intensity bit interpretation (CP386)
  2013. ----------1015-------------------------------
  2014. INT 10 - VIDEO - GET PHYSICAL DISPLAY PARAMETERS (CONVERTIBLE)
  2015.     AH = 15h
  2016. Return: AX = alternate display adapter type
  2017.         0000h none
  2018.         5140h LCD
  2019.         5153h CGA
  2020.         5151h mono
  2021.     ES:DI -> parameter table (see below)
  2022. SeeAlso: AH=1Bh
  2023.  
  2024. Format of display parameter table:
  2025. Offset    Size    Description
  2026.  00h    WORD    monitor model number
  2027.  02h    WORD    vertical pixels per meter
  2028.  04h    WORD    horizontal pixels per meter
  2029.  06h    WORD    total vertical pixels
  2030.  08h    WORD    total horizontal pixels
  2031.  0Ah    WORD    horizontal pixel separation in micrometers
  2032.  0Ch    WORD    vertical pixel separation in micrometers
  2033. ----------1015-------------------------------
  2034. INT 10 - VIDEO - SET SUPERIMPOSE MODE (Sperry PC)
  2035.     AH = 15h
  2036.     AL = superimpose mode
  2037.         00h show graphics screen
  2038.         01h show text screen
  2039.         02h show text screen superimposed on graphics screen
  2040. ----------101A-------------------------------
  2041. INT 10 - VIDEO - DISPLAY COMBINATION (PS,VGA/MCGA)
  2042.     AH = 1Ah
  2043.     AL = 00h read display combination code
  2044.         Return: BL = active display code (see below)
  2045.             BH = alternate display code
  2046.          01h set display combination code
  2047.         BL = active display code (see below)
  2048.         BH = alternate display code
  2049. Return: AL = 1Ah if function was supported
  2050.  
  2051. Values for display combination code:
  2052.     00h no display
  2053.     01h monochrome adapter w/ monochrome display
  2054.     02h CGA w/ color display
  2055.     03h reserved
  2056.     04h EGA w/ color display
  2057.     05h EGA w/ monochrome display
  2058.     06h PGA w/ color display
  2059.     07h VGA w/ monochrome analog display
  2060.     08h VGA w/ color analog display
  2061.     09h reserved
  2062.     0Ah MCGA w/ digital color display
  2063.     0Bh MCGA w/ monochrome analog display
  2064.     0Ch MCGA w/ color analog display
  2065.     FFh unknown display type
  2066. ----------101B-------------------------------
  2067. INT 10 - VIDEO - FUNCTIONALITY/STATE INFORMATION (PS,VGA/MCGA)
  2068.     AH = 1Bh
  2069.     BX = implementation type
  2070.         0000h return funtionality/state information
  2071.     ES:DI -> 64 byte buffer for state information (see below)
  2072. Return: AL = 1Bh if function supported
  2073.         ES:DI buffer filled with state information
  2074. SeeAlso: AH=15h
  2075.  
  2076. Format of state information:
  2077. Offset    Size    Description
  2078.  00h    DWORD    address of static funtionality table (see below)
  2079.  04h    BYTE    video mode in effect
  2080.  05h    WORD    number of columns
  2081.  07h    WORD    length of regen buffer in bytes
  2082.  09h    WORD    starting address of regen buffer
  2083.  0Bh    WORD    cursor position for page 0
  2084.  0Dh    WORD    cursor position for page 1
  2085.  0Fh    WORD    cursor position for page 2
  2086.  11h    WORD    cursor position for page 3
  2087.  13h    WORD    cursor position for page 4
  2088.  15h    WORD    cursor position for page 5
  2089.  17h    WORD    cursor position for page 6
  2090.  19h    WORD    cursor position for page 7
  2091.  1Bh    WORD    cursor type
  2092.  1Dh    BYTE    active display page
  2093.  1Eh    WORD    CRTC port address
  2094.  20h    BYTE    current setting of register (3?8)
  2095.  21h    BYTE    current setting of register (3?9)
  2096.  22h    BYTE    number of rows
  2097.  23h    WORD    bytes/character
  2098.  25h    BYTE    display combination code of active display
  2099.  26h    BYTE    DCC of alternate display
  2100.  27h    WORD    number of colors supported in current mode
  2101.  29h    BYTE    number of pages supported in current mode
  2102.  2Ah    BYTE    number of scan lines active
  2103.         (0,1,2,3) = (200,350,400,480)
  2104.  2Bh    BYTE    primary character block
  2105.  2Ch    BYTE    secondary character block
  2106.  2Dh    BYTE    miscellaneous flags
  2107.         bit 0 all modes on all displays on
  2108.             1 gray summing on
  2109.             2 monochrome display attached
  2110.             3 default palette loading disabled
  2111.             4 cursor emulation enabled
  2112.             5 0 = intensity; 1 = blinking
  2113.             6 PS/2 P70 plasma display (without 9-dot wide font) active
  2114.             7 reserved
  2115.  2Eh  3 BYTEs    reserved (00h)
  2116.  31h    BYTE    video memory available
  2117.         00h = 64K, 01h = 128K, 02h = 192K, 03h = 256K
  2118.  32h    BYTE    save pointer state flags
  2119.         bit 0 512 character set active
  2120.             1 dynamic save area present
  2121.             2 alpha font override active
  2122.             3 graphics font override active
  2123.             4 palette override active
  2124.             5 DCC override active
  2125.             6 reserved
  2126.             7 reserved
  2127.  33h 13 BYTEs    reserved (00h)
  2128.  
  2129. Format of Static Functionality Table:
  2130. Offset    Size    Description
  2131.  00h    BYTE    modes supported #1
  2132.         bit 0 to bit 7 = 1 modes 0,1,2,3,4,5,6 supported
  2133.  01h    BYTE    modes supported #2
  2134.         bit 0 to bit 7 = 1 modes 8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh supported
  2135.  02h    BYTE    modes supported #3
  2136.         bit 0 to bit 3 = 1 modes 10h,11h,12h,13h supported
  2137.         bit 4 to bit 7 reserved
  2138.  03h  4 BYTEs    reserved
  2139.  07h    BYTE    scan lines supported
  2140.         bit 0 to bit 2 = 1 if scan lines 200,350,400 supported
  2141.  08h    BYTE    total number of character blocks available in text modes
  2142.  09h    BYTE    maximum number of active character blocks in text modes
  2143.  0Ah    BYTE    miscellaneous function flags #1
  2144.         bit 0 all modes on all displays function supported
  2145.             1 gray summing function supported
  2146.             2 character font loading function supported
  2147.             3 default palette loading enable/disable supported
  2148.             4 cursor emulation function supported
  2149.             5 EGA palette present
  2150.             6 color palette present
  2151.             7 color paging function supported
  2152.  0Bh    BYTE    miscellaneous function flags #2
  2153.         bit 0 light pen supported
  2154.             1 save/restore state function 1Ch supported
  2155.             2 intensity blinking function supported
  2156.             3 Display Combination Code supported
  2157.           4-7 reserved
  2158.  0Ch    WORD    reserved
  2159.  0Eh    BYTE    save pointer function flags
  2160.         bit 0 512 character set supported
  2161.             1 dynamic save area supported
  2162.             2 alpha font override supported
  2163.             3 graphics font override supported
  2164.             4 palette override supported
  2165.             5 DCC extension supported
  2166.             6 reserved
  2167.             7 reserved
  2168.  0Fh    BYTE    reserved
  2169. ----------101C-------------------------------
  2170. INT 10 - VIDEO - SAVE/RESTORE VIDEO STATE (PS50+,VGA)
  2171.     AH = 1Ch
  2172.     AL = 00h return state buffer size
  2173.         Return: BX = number of 64-byte blocks needed
  2174.          01h save video state
  2175.         ES:BX -> buffer
  2176.          02h restore video state
  2177.         ES:BX -> buffer containing previously saved state
  2178.     CX = requested states
  2179.          bit 0 video hardware
  2180.          1 BIOS data areas
  2181.          2 color registers and DAC state
  2182.           3-15 reserved
  2183. Return: AL = 1Ch if function supported
  2184. Notes:    many BIOSes corrupt the video registers when saving the state, so a
  2185.       program should restore the state immediately after saving it (the
  2186.       saved data is uncorrupted)
  2187.     the BIOS data area consists of the 96 bytes from 0040h:0049h-00A8h
  2188.  
  2189. Format of video hardware state:
  2190. Offset    Size    Description
  2191.  00h    BYTE    sequencer index register
  2192.  01h    BYTE    CRTC index register
  2193.  02h    BYTE    graphics controller index register
  2194.  03h    BYTE    attribute controller index register
  2195.  04h    BYTE    feature controller register
  2196.  05h  4 BYTEs    sequencer registers
  2197.  09h    BYTE    sequencer register 0
  2198.  0Ah 25 BYTEs    CRTC registers 0-8
  2199.  23h 16 BYTEs    palette registers 00h-0Fh
  2200.  33h  4 BYTEs    attribute registers 10h-13h
  2201.  37h  9 BYTEs    graphics controller registers 0-8
  2202.  40h    BYTE    CRTC base address (low)
  2203.  41h    BYTE    CRTC base address (high)
  2204.  42h    BYTE    plane 0 latch
  2205.  43h    BYTE    plane 1 latch
  2206.  44h    BYTE    plane 2 latch
  2207.  45h    BYTE    plane 3 latch
  2208.  
  2209. Format of DAC state:
  2210. Offset    Size    Description
  2211.  00h    BYTE    read/write mode DAC
  2212.  01h    BYTE    pixel address
  2213.  02h    BYTE    pixel mask
  2214.  03h 768 BYTEs    color data (256 triples)
  2215. 303h    BYTE    color select register
  2216. ----------101D-------------------------------
  2217. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  2218.     AH = 1Dh
  2219. Note:    this version of the BIOS jumps to a random location on this function
  2220.       due to a fencepost error
  2221. ---------------------------------------------
  2222. INT 10 - VIDEO - XGA - GET DMQS (Display Mode Query and Set) DATA LENGTH
  2223.     AX = 1F00h
  2224. Return: AL = 1Fh if supported
  2225.         BX = number of bytes of DMQS data
  2226. Note:    not supported on the original IBM XGA, only on XGA-NI (non-interlaced)
  2227.       and later models.
  2228. SeeAlso: AX=1F01h
  2229. ---------------------------------------------
  2230. INT 10 - VIDEO - XGA - READ DMQS DATA
  2231.     AX = 1F01h
  2232.     ES:DI -> user buffer for return data (call AH=1F00 for size)
  2233. Return: AL = 1Fh if function supported
  2234.     user buffer filled with DMQS data, see below.
  2235. Note:    not supported on the original IBM XGA, only on XGA-NI (non-interlaced)
  2236.       and later models.
  2237. SeeAlso: AX=1F00h
  2238.  
  2239. Format of DMQS buffer:
  2240. Offset    Size    Description
  2241.  00h    WORD    offset (in bytes) to DMQS data for next XGA instance
  2242.  02h    BYTE    slot number
  2243.  03h    BYTE    XGA implementation function level identifier
  2244.  04h    BYTE    XGA implementation resolution level identifier
  2245.  05h    WORD    vendor identifier - identifies card vendor
  2246.  07h    WORD    vendor defined field
  2247.  09h    WORD    XGA adapter I/O register base address
  2248.  0Bh    WORD    XGA coprocessor register base address
  2249.         (Paragraph---multiply by 10h to get physical address)
  2250.  0Dh    WORD    1 Megabyte system video memory aperture
  2251.         0000h if not allocated
  2252.         (Multiply by 100000h to get physical address)
  2253.  0Fh    WORD    4 Megabyte system video memory aperture
  2254.         0000h if not allocated
  2255.         (Multiply by 100000h to get physical address)
  2256.  11h    WORD    video memory base address
  2257.         (Multiply by 100000h to get physical address)
  2258.  13h    WORD    composite ID of the attached display
  2259.  15h    BYTE    amount of video memory available, in multiples of 256K 
  2260. bytes
  2261.  16h    DWORD    alternate XGA coprocessor register base address.  0 = 
  2262. none.
  2263.  1Ah    var    DMQS Data for further XGA Instances (as above)
  2264. Note:    "Instances" refers to the capability of having up to 8 XGA 
  2265.       adapters in one computer.
  2266. ----------103000CX0000-----------------------
  2267. INT 10 - VIDEO - LOCATE 3270PC CONFIGURATION TABLE (INSTALLATION CHECK)
  2268.     AX = 3000h
  2269.     CX = 0000h
  2270.     DX = 0000h
  2271. Return: CX:DX -> 3270PC configuration table (see below)
  2272.     CX:DX = 0000h:0000h if 3270PC Control Program not active
  2273.  
  2274. Format of 3270 PC configuration table:
  2275. Offset    Size    Description
  2276.  00h    BYTE    aspect ratio X
  2277.  01h    BYTE    aspect ratio Y
  2278.  02h    BYTE    monitor type
  2279.         00h = 5151 (mono) or 5272 (color)
  2280.         01h = 3295
  2281.         02h = 5151 or 5272 with XGA (???) graphics adapter
  2282.         03h = 5279 with 3270PC G adapter
  2283.         04h = 5379 model C01 with 3270PC GX adapter
  2284.         05h = 5379 model M01 with 3270PC GX adapter
  2285.         07h = non-3270PC with 3270 Workstation Program
  2286.         FFh = 3270PC Control Program not loaded
  2287.  03h    BYTE    reserved
  2288.  04h    BYTE    adapter ID
  2289.         00h = 5151/5272 adapter
  2290.         04h = 5151/5272 with XGA adapter
  2291.         30h = 3295 or 3270PC G/GX adapter
  2292.  05h    BYTE    reserved
  2293.  06h    BYTE    function flags 1
  2294.         bit 7: mono text, 1 page
  2295.             6: color text, 1 page
  2296.             5: color text, 4 pages
  2297.             4: CGA color graphics
  2298.             3: 720x350 two-color graphics
  2299.             2: 360x350 four-color graphics
  2300.             1: 720x350 eight-color graphics
  2301.  07h    BYTE    function flags 2
  2302.         bit 6: GPI graphics supported
  2303.  08h    WORD    segment address of Control Program Level table (see below)
  2304.  0Ah 10 BYTEs    reserved
  2305.  
  2306. Format of Control Program Level table:
  2307. Offset    Size    Description
  2308.  00h    WORD    program version
  2309.         02xxh = 3270PC Control Program v2.xx
  2310.         03xxh = 3270PC Control Program v3.xx
  2311.         04xxh = 3270 Workstation Program v1.xx
  2312.  02h    BYTE    Control Program ID (00h)
  2313.  03h 27 BYTEs    Control Program Descriptor ("IBM 3270 PC CONTROL PROGRAM")
  2314. ----------1038-------------------------------
  2315. INT 10 - Tinytalk Personal v1.09f - GET CONFIGURATION INFO
  2316.     AH = 38h
  2317. Return: ES:DI -> configuration info (see below)
  2318. Notes:    Tinytalk is a shareware screen reader by OMS Development/Eric Bohlman
  2319.     this call is also used as the installation check by verifying that the
  2320.       returned ES:DI points at valid configuration info
  2321. SeeAlso: INT 14/AX=F0F1h,INT 2F/FB00h"AutoBraille"
  2322.  
  2323. Format of configuration info:
  2324. Offset    Size    Description
  2325.  00h  8 BYTEs    signature "TTCONFIG"
  2326.  08h    WORD    size of configuration data, not counting signature, this WORD,
  2327.         or the following byte
  2328.  0Ah    BYTE    ???
  2329.  0Bh    ???    configuration data
  2330. ----------1040-------------------------------
  2331. INT 10 - VIDEO - SET GRAPHICS MODE (Hercules GRAFIX)
  2332.     AH = 40h
  2333. SeeAlso: AH=00h,AH=41h
  2334. ----------1041-------------------------------
  2335. INT 10 - VIDEO - SET TEXT MODE (Hercules GRAFIX)
  2336.     AH = 41h
  2337. SeeAlso: AH=00h,AH=40h
  2338. ----------1042-------------------------------
  2339. INT 10 - VIDEO - CLEAR CURRENT PAGE (Hercules GRAFIX)
  2340.     AH = 42h
  2341. SeeAlso: AH=45h
  2342. ----------1043-------------------------------
  2343. INT 10 - VIDEO - SELECT DRAWING PAGE (Hercules GRAFIX)
  2344.     AH = 43h
  2345.     AL = page number (0,1)
  2346. SeeAlso: AH=05h,AH=44h,AH=45h
  2347. ----------1044-------------------------------
  2348. INT 10 - VIDEO - SELECT DRAWING FUNCTION (Hercules GRAFIX)
  2349.     AH = 44h
  2350.     AL = drawing function
  2351.         00h clear pixels
  2352.         01h set pixels
  2353.         02h invert pixels
  2354. SeeAlso: AH=45h,AH=46h,AH=4Ch,AH=4Dh
  2355. ----------1045-------------------------------
  2356. INT 10 - VIDEO - SELECT PAGE TO DISPLAY (Hercules GRAFIX)
  2357.     AH = 45h
  2358.     AL = page number (0,1)
  2359. SeeAlso: AH=05h,AH=42h,AH=43h
  2360. ----------1046-------------------------------
  2361. INT 10 - VIDEO - DRAW ONE PIXEL (Hercules GRAFIX)
  2362.     AH = 46h
  2363.     DI = x (0-720)
  2364.     BP = y (0-347)
  2365. Note:    function 44h determines operation and function 43h which page to use
  2366. SeeAlso: AH=0Ch,AH=47h,AH=49h,AH=4Ch,AH=4Dh
  2367. ----------1047-------------------------------
  2368. INT 10 - VIDEO - FIND PIXEL VALUE (Hercules GRAFIX)
  2369.     AH = 47h
  2370.     DI = x (0-720)
  2371.     BP = y (0-347)
  2372. Return: AL = 00h pixel clear
  2373.     AL = 01h pixel set
  2374. Note:    function 43h specifies which page is used
  2375. SeeAlso: AH=0Dh,AH=46h
  2376. ----------1048-------------------------------
  2377. INT 10 - VIDEO - MOVE TO POINT (Hercules GRAFIX)
  2378.     AH = 48h
  2379.     DI = x (0-720)
  2380.     BP = y (0-347)
  2381. SeeAlso: AH=49h
  2382. ----------1049-------------------------------
  2383. INT 10 - VIDEO - DRAW TO POINT (Hercules GRAFIX)
  2384.     AH = 49h
  2385.     DI = x (0-720)
  2386.     BP = y (0-347)
  2387. Note:    function 48h or 49h specify first point, 44h operation and 43h page to
  2388.       use
  2389. SeeAlso: AH=43h,AH=44h,AH=48h,AH=4Ch,AH=4Dh
  2390. ----------104A-------------------------------
  2391. INT 10 - VIDEO - BLOCK FILL (Hercules GRAFIX)
  2392.     AH = 4Ah
  2393.     DI = x coordinate of lower left corner
  2394.     BP = y coordinate of lower left corner
  2395.     BX = height in pixels
  2396.     CX = width in pixels
  2397. Note:    draws a solid rectangle
  2398. SeeAlso: AH=4Eh
  2399. ----------104B-------------------------------
  2400. INT 10 - VIDEO - DISPLAY CHARACTER (Hercules GRAFIX)
  2401.     AH = 4Bh
  2402.     AL = character to display
  2403.     DI = x (0-720)
  2404.     BP = y (0-347)
  2405. Note:    unlike the other BIOS character functions character position is
  2406.       specified in pixels rather than rows and columns
  2407. SeeAlso: AH=09h,AH=0Ah
  2408. ----------104B-------------------------------
  2409. INT 10 - FRIEZE v7.0+ - API
  2410.     AH = 4Bh
  2411.     CL = function
  2412.         00h reserved
  2413.         01h load window
  2414.         ES:BX -> ASCIZ filename from which to read
  2415.         02h save window
  2416.         ES:BX -> ASCIZ filename to which to write
  2417.         03h (v7.41) set ???
  2418.         AL = ???
  2419.         04h (v7.41) set ???
  2420.         AL = ???
  2421.         06h (v7.41) ???
  2422.         AL = ???
  2423.         07h set window size
  2424.         ES:BX -> four-WORD structure with Xmin, Ymin, Xmax, Ymax
  2425.         09h set patterns
  2426.         ES:BX -> 16-BYTE vector of screen->printer color correspondnces
  2427.         0Ah get patterns
  2428.         ES:BX -> 16-BYTE buffer for color correspondences
  2429.         0Bh set mode
  2430.         AL = mode
  2431.         0Ch (v7.41) ???
  2432.         AL = ???
  2433.             00h ??? (calls original INT 05)
  2434.             else ???
  2435.         0Dh (v7.41) ???
  2436.         AL = ???
  2437.             00h ??? (calls original INT 05)
  2438.             else ???
  2439.         0Eh (v7.41) ???
  2440.         ???
  2441.         0Fh get window
  2442.         ES:BX -> four-WORD buffer for Xmin, Ymin, Xmax, Ymax
  2443.         10h set print options
  2444.         ES:BX -> printer options in same format as FRIEZE cmdline
  2445.         11h (v7.41) ???
  2446.         ???
  2447.         12h (v7.41) ???
  2448.         ???
  2449.         13h (v7.41) ???
  2450.         ???
  2451.         14h get version
  2452.         Return: AH = major version (00h if FRIEZE version before 7)
  2453.             AL = minor version
  2454.         15h set parameters
  2455.         ES:BX -> parameter table (see below)
  2456.         16h get parameters
  2457.         ES:BX -> buffer for parameter table (see below)
  2458.         17h get printer resolution
  2459.         ES:BX -> 12-WORD table for six horizontal/vertical resol pairs
  2460.         18h reserved (v8.0 only)
  2461.         50h (v7.41) get ???
  2462.         Return: AX = ???
  2463.         51h (v7.41) get ???
  2464.         Return: ES = ??? (seen 2348h)
  2465.             AX = ??? (seen 8432h)
  2466. Return: AX = status
  2467.         00h successful
  2468.         01h user aborted printout with ESC
  2469.         02h reserved
  2470.         03h file read error
  2471.         04h file write error
  2472.         05h file not found
  2473.         06h invalid header (not an image or wrong screen mode)
  2474.         07h file close error
  2475.         08h disk error
  2476.         09h printer error
  2477.         0Ah invalid function
  2478.         0Bh can't create file
  2479.         0Ch wrong video mode
  2480. SeeAlso: AH=0Fh/SI=F123h
  2481.  
  2482. Format of parameter table:
  2483. Offset    Size    Description
  2484.  00h    WORD    top margin (1/100 inch)
  2485.  02h    WORD    left margin (1/100 inch)
  2486.  04h    WORD    horizontal size (1/100 inch)
  2487.  06h    WORD    vertical size (1/100 inch)
  2488.  08h    WORD    quality/draft mode
  2489.         00h draft mode
  2490.         01h quality mode
  2491.         02h use horizontal/vertical resolution for output resolution
  2492.  0Ah    WORD    printer horizontal resolution (dots per inch)
  2493.  0Ch    WORD    printer vertical resolution (dots per inch)
  2494.  0Eh    WORD    reserved (FFFFh)
  2495. Note:    any field which should remain unchanged may be filled with FFFFh
  2496. ----------104C-------------------------------
  2497. INT 10 - VIDEO - DRAW ARC (Hercules GRAFIX)
  2498.     AH = 4Ch
  2499.     AL = quadrant (1 = upper right, 2 = upper left, etc)
  2500.     DI = x coordinate of center
  2501.     BP = y coordinate of center
  2502.     BX = radius
  2503. SeeAlso: AH=49h,AH=4Dh
  2504. ----------104D-------------------------------
  2505. INT 10 - VIDEO - DRAW CIRCLE (Hercules GRAFIX)
  2506.     AH = 4Dh
  2507.     DI = x of center
  2508.     BP = y of center
  2509.     BX = radius
  2510. SeeAlso: AH=49h,AH=4Ch
  2511. ----------104E-------------------------------
  2512. INT 10 - VIDEO - FILL AREA (Hercules GRAFIX)
  2513.     AH = 4Eh
  2514.     DI = x coordinate of an interior point
  2515.     BP = y coordinate of an interior point
  2516. Notes:    fills convex polygonal areas
  2517.     the first fill makes the figure solid, the second erases it
  2518. SeeAlso: AH=4Ah
  2519. ----------104F00-----------------------------
  2520. INT 10 - VESA SuperVGA BIOS - GET SuperVGA INFORMATION
  2521.     AX = 4F00h
  2522.     ES:DI -> 256-byte buffer for SuperVGA information (see below)
  2523. Return: AL = 4Fh function supported
  2524.     AH = status
  2525.         00h successful
  2526.         01h failed
  2527. SeeAlso: AX=4F01h,AX=7F00h
  2528.  
  2529. Format of SuperVGA information:
  2530. Offset    Size    Description
  2531.  00h  4 BYTEs    signature ('VESA')
  2532.  04h    WORD    VESA version number
  2533.  06h    DWORD    pointer to OEM name
  2534.         "761295520" for ATI
  2535.  0Ah  4 BYTEs    capabilities
  2536.  0Eh    DWORD    pointer to list of supported VESA and OEM video modes
  2537.         (list of words terminated with FFFFh)
  2538.  12h 238 BYTEs    reserved
  2539. ----------104F01-----------------------------
  2540. INT 10 - VESA SuperVGA BIOS - GET SuperVGA MODE INFORMATION
  2541.     AX = 4F01h
  2542.     CX = SuperVGA video mode
  2543.     ES:DI -> 256-byte buffer mode information (see below)
  2544. Return: AL = 4Fh function supported
  2545.     AH = status
  2546.         00h successful
  2547.         01h failed
  2548. SeeAlso: AX=4F00h,AX=4F02h
  2549.  
  2550. Format of mode information:
  2551. Offset    Size    Description
  2552.  00h    WORD    mode attributes
  2553.         bit 0: mode supported
  2554.         bit 1: optional information available
  2555.         bit 2: BIOS output supported
  2556.         bit 3: set if color, clear if monochrome
  2557.         bit 4: set if graphics mode, clear if text mode
  2558.  02h    BYTE    window A attributes
  2559.         bit 0: exists
  2560.         bit 1: readable
  2561.         bit 2: writable
  2562.         bits 3-7 reserved
  2563.  03h    BYTE    window B attributes (as for window A)
  2564.  04h    WORD    window granularity in K
  2565.  06h    WORD    window size in K
  2566.  08h    WORD    start segment of window A
  2567.  0Ah    WORD    start segment of window B
  2568.  0Ch    DWORD    -> FAR window positioning function (equivalent to AX=4F05h)
  2569.  10h    WORD    bytes per scan line
  2570. ---remainder is optional for VESA modes in v1.0/1.1, needed for OEM modes---
  2571.  12h    WORD    width in pixels
  2572.  14h    WORD    height in pixels
  2573.  16h    BYTE    width of character cell in pixels
  2574.  17h    BYTE    height of character cell in pixels
  2575.  18h    BYTE    number of memory planes
  2576.  19h    BYTE    number of bits per pixel
  2577.  1Ah    BYTE    number of banks
  2578.  1Bh    BYTE    memory model type
  2579.         00h text
  2580.         01h CGA graphics
  2581.         02h HGC graphics
  2582.         03h 16-color (EGA) graphics
  2583.         04h packed pixel graphics
  2584.         05h "sequ 256" (non-chain 4) graphics
  2585.         06h direct color (HiColor, 24-bit color)
  2586.         07h YUV
  2587.         08h-0Fh reserved for VESA
  2588.         10h-FFh OEM memory models
  2589.  1Ch    BYTE    size of bank in K
  2590.  1Dh    BYTE    number of image pages
  2591.  1Eh    BYTE    reserved (0)
  2592. ---VBE v1.2+---
  2593.  1Fh    BYTE    red mask size
  2594.  20h    BYTE    red field position
  2595.  21h    BYTE    green mask size
  2596.  22h    BYTE    green field size
  2597.  23h    BYTE    blue mask size
  2598.  24h    BYTE    blue field size
  2599.  25h    BYTE    reserved mask size
  2600.  26h    BYTE    reserved mask position
  2601.  27h    BYTE    direct color mode info
  2602.  28h    BYTE    reserved (0)
  2603. ----------104F02-----------------------------
  2604. INT 10 - VESA SuperVGA BIOS - SET SuperVGA VIDEO MODE
  2605.     AX = 4F02h
  2606.     BX = mode
  2607.         bit 15 set means don't clear video memory
  2608. Return: AL = 4Fh function supported
  2609.     AH = status
  2610.         00h successful
  2611.         01h failed
  2612. SeeAlso: AX=4F01h,AX=4F03h
  2613.  
  2614. Values for VESA video mode:
  2615.  00h-FFh OEM video modes (see AH=00h)
  2616.  100h    640x400x256
  2617.  101h    640x480x256
  2618.  102h    800x600x16
  2619.  103h    800x600x256
  2620.  104h    1024x768x16
  2621.  105h    1024x768x256
  2622.  106h    1280x1024x16
  2623.  107h    1280x1024x256
  2624.  108h    80x60 text
  2625.  109h    132x25 text
  2626.  10Ah    132x43 text
  2627.  10Bh    132x50 text
  2628.  10Ch    132x60 text
  2629. ---VBE v1.2---
  2630.  10Dh    320x200x32K
  2631.  10Eh    320x200x64K
  2632.  10Fh    320x200x16M
  2633.  110h    640x480x32K
  2634.  111h    640x480x64K
  2635.  112h    640x480x16M
  2636.  113h    800x600x32K
  2637.  114h    800x600x64K
  2638.  115h    800x600x16M
  2639.  116h    1024x768x32K
  2640.  117h    1024x768x64K
  2641.  118h    1024x768x16M
  2642.  119h    1280x1024x32K
  2643.  11Ah    1280x1024x64K
  2644.  11Bh    1280x1024x16M
  2645.  
  2646. Values for S3 OEM video mode:
  2647.  201h    640x480x256
  2648.  202h    800x600x16
  2649.  203h    800x600x256
  2650.  204h    1024x768x16
  2651.  205h    1024x768x256
  2652.  206h    1280x960x16
  2653.  208h    1280x1024x16
  2654.  301h    640x480x32K
  2655. ----------104F03-----------------------------
  2656. INT 10 - VESA SuperVGA BIOS - GET CURRENT VIDEO MODE
  2657.     AX = 4F03h
  2658. Return: AL = 4Fh function supported
  2659.     AH = status
  2660.         00h successful
  2661.         01h failed
  2662.     BX = video mode (see AX=4F02h)
  2663. SeeAlso: AX=4F02h
  2664. ----------104F04-----------------------------
  2665. INT 10 - VESA SuperVGA BIOS - SAVE/RESTORE SuperVGA VIDEO STATE
  2666.     AX = 4F04h
  2667.     DL = subfunction
  2668.         00h get state buffer size
  2669.         Return: BX = number of 64-byte blocks needed
  2670.         01h save video states
  2671.         ES:BX -> buffer
  2672.         02h restore video states
  2673.         ES:BX -> buffer
  2674.     CX = flags for states to save/restore
  2675.         bit 0: video hardware state
  2676.         bit 1: video BIOS data state
  2677.         bit 2: video DAC state
  2678.         bit 3: SuperVGA state
  2679. Return: AL = 4Fh function supported
  2680.     AH = status
  2681.         00h successful
  2682.         01h failed
  2683. ----------104F05-----------------------------
  2684. INT 10 - VESA SuperVGA BIOS - CPU VIDEO MEMORY CONTROL
  2685.     AX = 4F05h
  2686.     BH = subfunction
  2687.         00h select video memory window
  2688.         DX = window address in video memory (in granularity units)
  2689.         01h get video memory window
  2690.         Return: DX = window address in video memory (in gran. units)
  2691.     BL = window number
  2692.         00h window A
  2693.         01h window B
  2694. Return: AL = 4Fh function supported
  2695.     AH = status
  2696.         00h successful
  2697.         01h failed
  2698. SeeAlso: AX=4F01h,AX=4F06h,AX=4F07h,AX=7000h/BX=0004h
  2699. ----------104F06-----------------------------
  2700. INT 10 - VESA SuperVGA BIOS v1.1 - GET/SET LOGICAL SCAN LINE LENGTH
  2701.     AX = 4F06h
  2702.     BL = function
  2703.         00h set scan line length
  2704.         CX = desired width in pixels
  2705.         01h get scan line length
  2706. Return: AL = 4Fh if function supported
  2707.     AH = status
  2708.         00h successful
  2709.         01h failed
  2710.     BX = bytes per scan line
  2711.     CX = number of pixels per scan line
  2712.     DX = maximum number of scan lines
  2713. Notes:    if the desired width is not achievable, the next larger width will be
  2714.       set
  2715.     the scan line may be wider than the visible area of the screen
  2716.     this function is valid in text modes, provided that values are
  2717.       multiplied by the character cell width/height
  2718. SeeAlso: AX=4F01h,AX=4F05h,AX=4F07h
  2719. ----------104F07BH00-------------------------
  2720. INT 10 - VESA SuperVGA BIOS v1.1 - GET/SET DISPLAY START
  2721.     AX = 4F07h
  2722.     BH = 00h (reserved)
  2723.     BL = 00h set display start
  2724.         CX = leftmost displayed pixel in scan line
  2725.         DX = first displayed scan line
  2726.        = 01h get display start
  2727.         Return: BH = 00h
  2728.             CX = leftmost displayed pixel in scan line
  2729.             DX = first displayed scan line
  2730. Return: AL = 4Fh if function supported
  2731.     AH = status
  2732.         00h successful
  2733.         01h failed
  2734. Note:    this function is valid in text modes, provided that values are
  2735.       multiplied by the character cell width/height
  2736. SeeAlso: AX=4F01h,AX=4F05h,AX=4F06h
  2737. ----------104F08-----------------------------
  2738. INT 10 - VESA SuperVGA BIOS v1.2+ - GET/SET DAC PALETTE CONTROL
  2739.     AX = 4F08h
  2740.     BL = function
  2741.         00h set DAC palette width
  2742.         BH = desired number of bits per primary color
  2743.         01h get DAC palette width
  2744. Return: AL = 4Fh if function supported
  2745.     AH = status
  2746.     BH = current number of bits per primary (06h = standard VGA)
  2747. ----------104FFF-----------------------------
  2748. INT 10 - VESA SuperVGA BIOS - Everex - TURN VESA ON/OFF
  2749.     AX = 4FFFh
  2750.     DL = new state (00h off, 01h on)
  2751. Return: AX = 0000h if successful
  2752. ----------1050-------------------------------
  2753. INT 10 - SCROLOCK.COM - INSTALLATION CHECK
  2754.     AH = 50h
  2755. Return: BX = 1954h if installed
  2756.         AL = 00 if inactive, nonzero if active
  2757. Program: SCROLOCK is a utility supplied with System Enhancement Associates' ARC
  2758. SeeAlso: AH=51h
  2759. ----------105000-----------------------------
  2760. INT 10 - VIDEO - AX PC - SET SCREEN COUNTRY CODE
  2761.     AX = 5000h
  2762.     BX = country code
  2763.         0001h USA (English), 0051h Japan
  2764. Return: AL = status
  2765.         00h successful
  2766.         01h bad country code
  2767.         02h other error
  2768. SeeAlso: AX=5001h,INT 16/AX=5000h
  2769. ----------105001-----------------------------
  2770. INT 10 - VIDEO - AX PC - GET SCREEN COUNTRY CODE
  2771.     AX = 5001h
  2772. Return: AL = status
  2773.         00h successful
  2774.         BX = country code
  2775.         02h error
  2776. SeeAlso: AH=00h,AX=5000h,INT 16/AX=5001h,INT 21/AH=38h
  2777. ----------105049-----------------------------
  2778. INT 10 - VIDEO - SCREENR v1.55+ - API
  2779.     AX = 5049h ('PI')
  2780.     BX = function
  2781.         0000h installation check
  2782.         0001h lock mode
  2783.         0002h unlock mode
  2784.         0003h lock palette
  2785.         0004h unlock palette
  2786. Return: AX = 0000h if installed
  2787.         BX = TSR version (BH=major,BL=minor)
  2788.         CL = mode locking status
  2789.         00h mode not locked
  2790.         01h mode locked : INT 10/AH=00h disabled
  2791.         CH = palette locking status
  2792.         00h palette not locked
  2793.         01h palette locked, the following functions are disabled:
  2794.             AX=1000h, AX=1001h, AX=1002h, AX=1010h, AX=1012h
  2795. Program: SCREENR is a TSR supplied with Patrick Ibbetson's SCREEN display
  2796.       utility.
  2797. ----------1051-------------------------------
  2798. INT 10 - SCROLOCK.COM - ENABLE/DISABLE
  2799.     AH = 51h
  2800.     AL = state
  2801.         00h disable
  2802.         nonzero enable
  2803. Program: SCROLOCK is a utility supplied with System Enhancement Associates' ARC
  2804. SeeAlso: AH=50h"SCROLOCK"
  2805. ----------105100-----------------------------
  2806. INT 10 - VIDEO - AX PC - REGISTER EXTERNAL CHARACTER
  2807.     AX = 5100h
  2808.     BH = character width in bits (10h)
  2809.     BL = character height (10h)
  2810.     DX = character code (DH = F0h-F3h, DL=40h-7Eh,80h-FCh)
  2811.     ES:BP -> character bitmap
  2812. Return: AL = status (00h successful, 01h failed)
  2813. SeeAlso: AX=5101h,INT 1F
  2814. ----------105101-----------------------------
  2815. INT 10 - VIDEO - AX PC - READ CHARACTER
  2816.     AX = 5101h
  2817.     BH = character width in bits
  2818.     BL = character height
  2819.     DX = character code (DH = 00h if 8-bit character)
  2820.     ES:BP -> buffer for character bitmap
  2821. Return: AL = status (00h successful, 01h failed)
  2822. SeeAlso: AH=09h,AX=5100h
  2823. ----------105200-----------------------------
  2824. INT 10 - VIDEO - AX PC - SET VIRTUAL TEXT RAM BUFFER
  2825.     AX = 5200h
  2826.     BX = segment of buffer
  2827. SeeAlso: AX=5201h
  2828. ----------105201-----------------------------
  2829. INT 10 - VIDEO - AX PC - GET VIRTUAL TEXT RAM BUFFER
  2830.     AX = 5201h
  2831. Return: BX = segment of buffer or 0000h if failed
  2832. SeeAlso: AX=8300h,AH=FEh
  2833. ----------1053-------------------------------
  2834. INT 10 - Show Partner F/X v3.6 - START PRESENTATION
  2835.     AH = 53h
  2836.     DS:DX -> ASCIZ name of presentation file (no path, extension forced to
  2837.         .PR2)
  2838. Return: ???
  2839. SeeAlso: AH=55h
  2840. ----------1055-------------------------------
  2841. INT 10 - Show Partner F/X v3.6 - UNINSTALL
  2842.     AH = 55h
  2843. Return: FXSHOW.EXE removed from memory
  2844. SeeAlso: AH=53h
  2845. ----------105555-----------------------------
  2846. INT 10 - VIDEO - ATI EGA/VGA Wonder Super Switch - INSTALLATION CHECK
  2847.     AX = 5555h
  2848. Return: AX = AAAAh    if installed
  2849.     BX:CX -> ??? routine in SMS.COM resident portion
  2850.           -> data area in VCONFIG
  2851. Program: Super Switch (SMS.COM) is a video mode switch program supplied with
  2852.       ATI EGA Wonder. It also maps video mode 08h to 27h or 23h.
  2853. SeeAlso: INT 10/AH=00h,INT 2F/AX=6400h
  2854.  
  2855. Format of data area:
  2856. Offset    Size    Description
  2857.  00h    DWORD    original INT 09 vector
  2858.  04h    DWORD    original INT 10 vector
  2859.  08h    DWORD    original INT 1C vector
  2860.  0Ch    WORD    screen saver state, 0=off, 1=on
  2861.  0Eh    WORD    blanking interval in clock ticks
  2862. ----------106A00BX0000-----------------------
  2863. INT 10 - Direct Graphics Interface Standard (DGIS) - INQUIRE AVAILABLE DEVICES
  2864.     AX = 6A00h
  2865.     BX = 0000h
  2866.     CX = 0000h
  2867.     DX = buffer length (may be 0)
  2868.     ES:DI -> buffer
  2869. Return: BX = number of bytes stored in buffer
  2870.     CX = bytes required for all descriptions (0 if no DGIS)
  2871. Note:    buffer contains descriptions and addresses of DGIS-compatible
  2872.       display(s) and printer(s)
  2873. SeeAlso: AX=6A02h
  2874. ----------106A01CX0000-----------------------
  2875. INT 10 - DGIS - REDIRECT CHARACTER OUTPUT
  2876.     AX = 6A01h
  2877.     CX = 0000h
  2878.     ES:DI = address of device to send INT 10 output to
  2879. Return: CX = 0000h  output could not be redirected
  2880.          else INT 10h output now routed to requested display
  2881. SeeAlso: AX=6A02h
  2882. ----------106A02-----------------------------
  2883. INT 10 - DGIS - INQUIRE INT 10 OUTPUT DEVICE
  2884.     AX = 6A02h
  2885.     ES:DI = 0000h:0000h
  2886. Return: ES:DI = 0000h:0000h  if current display is non-DGIS
  2887.         else address of the current DGIS INT 10 display
  2888. SeeAlso: AX=6A00h,AX=6A01h
  2889. ----------106E00------------------------------------
  2890. INT 10 - Paradise VGA internal - GET ???
  2891.     AX = 6E00h
  2892. Return: AH = ??? (depends on serial number)
  2893.     AL = ???
  2894.     BX = ???
  2895.     CL = ???
  2896.     CH = ???
  2897.     DX = ???
  2898. SeeAlso: AX=6E04,AX=6E05
  2899. ----------106E04-------------------------------------
  2900. INT 10 - Paradise VGA internal - GET SCREEN SIZE AND ???
  2901.     AX = 6E04h
  2902. Return: BX = screen width (columns)
  2903.     CX = screen height (lines)
  2904.     AH = ??? (05h or FFh)
  2905.     AL = ??? (04h or video mode)
  2906. SeeAlso: AX=6E00,AX=6E05
  2907. ----------106E05-------------------------------------
  2908. INT 10 - Paradise VGA internal - SET MODE
  2909.     AX = 6E05h
  2910.     BL = mode
  2911. Note:    like AH=0, AL=BL.
  2912. SeeAlso: AH=00,AX=6E00,AX=6E04,AX=6F05h
  2913. ----------106F00-----------------------------
  2914. INT 10 - VIDEO - Video7 VGA,VEGA VGA,HP Ext BIOS - INSTALLATION CHECK
  2915.     AX = 6F00h
  2916.     BX = 0000h
  2917. Return: BX = 5637h ('V7') indicates Video7 VGA/VEGA VGA extensions are present
  2918.     BX = 4850h ('HP') indicates HP Extended BIOS video functions present
  2919. SeeAlso: AX=6F01h,AX=6F02h,AX=6F03h,AX=6F04h,AX=6F05h
  2920. ----------106F01-----------------------------
  2921. INT 10 - VIDEO - Video7 VGA,VEGA VGA,HP Ext BIOS - GET MONITOR INFO
  2922.     AX = 6F01h
  2923. Return: AL = monitor type code (HP,VEGA VGA only) (see below)
  2924.     AH = status register information
  2925.          bit  0 = display enable
  2926.             0 = display enabled
  2927.             1 = vertical or horizontal retrace in progress
  2928.          bit  1 = light pen flip flop set
  2929.          bit  2 = light pen switch activated
  2930.          bit  3 = vertical sync
  2931.          bit  4 = monitor resolution
  2932.             0 = high resolution (>200 lines)
  2933.             1 = low resolution (<=200 lines)
  2934.          bit  5 = display type
  2935.             0 = color
  2936.             1 = monochrome
  2937.          bits6,7= diagnostic bits
  2938.     CL = current value of Extended Control register (HP Ext BIOS, and only
  2939.         if AL=41h)
  2940. Note:    bits 0-3 are the same as the EGA/VGA status register bits 0-3
  2941.  
  2942. Values for monitor type code (HP Extended BIOS):
  2943.  00h    non-HP card with ROM and possibly its own INT 10h driver
  2944.  41h    MultiMode video display adapter
  2945.  42h-44h reserved
  2946.  45h    industry standard monochrome display adapter
  2947.  46h    industry standard color display adapter
  2948.  51h    reserved
  2949. ---------------------------------------------
  2950. INT 10 - VIDEO - HP Vetra EXTENDED BIOS - SET MONITOR INFO
  2951.     AX = 6F02h
  2952.     BL = new value for extende dcontrol register
  2953.         bit 0: screen resolution (0 = 200 lines, 1 = 400 lines)
  2954.         bit 1: underline enable (if set, 'blue' bit of fg color = underl)
  2955.         bit 2: font (0 = Standard-8, 1 = HP-Roman-8)
  2956.         bit 3: memory disabled for CPU access
  2957.         bit 4: allow access to full 32K memory instead of wrapping at 16K
  2958.         bit 5: select second 16K page instead of first
  2959.         bits 6,7 unused
  2960. Return:    nothing
  2961. Notes:    this function is only valid when an HP MultiMode Video Display Adapter
  2962.       is installed
  2963.     the Extended Control register is at I/O address 3DDh
  2964. SeeAlso: AX=6F01h,AX=6F03h
  2965. ---------------------------------------------
  2966. INT 10 - VIDEO - HP Vectra EXTENDED BIOS - MODIFY MONITOR INFO
  2967.     AX = 6F03h
  2968.     BH = exclude mask (set bits are not modified)
  2969.     BL = new values for bits indicated by BH (see AX=6F02h)
  2970. Return:    nothing
  2971. Note:    this function is only valid when an HP MultiMode Video Display Adapter
  2972.       is installed
  2973. SeeAlso: AX=6F01h,AX=6F02h
  2974. ----------106F04-----------------------------
  2975. INT 10 - VIDEO - Video7 VGA,VEGA VGA,HP Vectra - GET MODE AND SCREEN RESOLUTION
  2976.     AX = 6F04h
  2977. Return: AL = current video mode (see AX=6F05h)
  2978.     BX = horizontal columns (text) or pixels (graphics)
  2979.     CX = vertical columns (text) or pixels (graphics)
  2980. SeeAlso: AX=6F05h
  2981. ----------106F05-----------------------------
  2982. INT 10 - VIDEO - Video7 VGA, VEGA EXTENDED EGA/VGA - SET VIDEO MODE
  2983.     AX = 6F05h
  2984.     BL = mode (see below)
  2985. Notes:    also supported by the HP Vectra Extended BIOS
  2986.     on the HP Vectra, this function rather than AH=00h must be used to
  2987.       return to an IBM-standard mode after setting an HP-specified mode
  2988.       from 08h to 0Fh.
  2989. SeeAlso: AH=00h,AX=0070h,AX=007Eh,AX=6F04h
  2990.  
  2991. Values for video mode:
  2992.       text/ text pixel     pixel    colors    disp    scrn  system
  2993.       grph resol  box    resoltn        page    addr
  2994.  00h-13h = standard IBM modes (see AH=00h)
  2995.  08h = T   80x27           mono             HP MultiMode Video 
  2996.  09h = T   80x27                     HP MultiMode Video 
  2997.  0Ah = T   40x27           mono             HP MultiMode Video 
  2998.  0Bh = T   40x27                     HP MultiMode Video 
  2999.  0Ch = Reserved                         HP MultiMode Video 
  3000.  0Dh = G        640x400                 HP MultiMode Video 
  3001.  0Eh = G        320x400                 HP MultiMode Video 
  3002.  0Fh = G        320x400                 HP MultiMode Video 
  3003.  40h = T   80x43  8x8                     Video7/VEGA VGA
  3004.  41h = T  132x25  8x14                     Video7/VEGA VGA
  3005.  42h = T  132x43  8x8                     Video7/VEGA VGA
  3006.  43h = T   80x60  8x8                     Video7/VEGA VGA
  3007.  44h = T  100x60  8x8                     Video7/VEGA VGA
  3008.  45h = T  132x28  8x8                     Video7/VEGA VGA
  3009.  60h = G        752x410      16             Video7 VGA, VEGA VGA
  3010.  61h = G        720x540      16             Video7 VGA, VEGA VGA
  3011.      = G        720x540      16             Northgate, Headland 1024i
  3012.  62h = G        800x600      16             Video7 VGA, VEGA Ext EGA
  3013.      = G        800x600      16             Headland 1024i
  3014.  63h = G           1024x768       2             Video7 VGA
  3015.  64h = G           1024x768       4             Video7 VGA
  3016.  65h = G           1024x768      16             Video7 VGA, VEGA Ext EGA
  3017.      = G           1024x768      16             Headland 1024i
  3018.  66h = G        640x400     256             Video7 VGA, VEGA Ext VGA
  3019.      = G        640x400     256             Northgate, Headland 1024i
  3020.  67h = G        640x480     256             Video7 VGA, VEGA Ext VGA
  3021.      = G        640x480     256             Headland 1024i
  3022.  68h = G        720x540     256             Video7 VGA, VEGA Ext VGA
  3023.      = G        720x540     256             Headland 1024i
  3024.  69h = G        800x600     256             Video7 VGA, VEGA Ext VGA
  3025.      = G        800x600     256             Headland 1024i
  3026.  70h = G        752x410      16gray         Video7 VGA, VEGA VGA
  3027.  71h = G        720x540      16gray         Video7 VGA, VEGA VGA
  3028.  72h = G        800x600      16gray         Video7 VGA
  3029.  73h = G           1024x768       2gray         Video7 VGA
  3030.  74h = G           1024x768       4gray         Video7 VGA
  3031.  75h = G           1024x768      16gray         Video7 VGA
  3032.  76h = G        640x400     256gray         Video7 VGA
  3033.  77h = G        640x480     256gray         Video7 VGA
  3034.  78h = G        720x540     256gray         Video7 VGA
  3035.  79h = G        800x600     256gray         (future)
  3036. SeeAlso: AH=00h,AX=0070h,AX=007Eh,AX=6F04h
  3037. ----------106F06-----------------------------
  3038. INT 10 - VIDEO - Video7 VGA,VEGA VGA - SELECT AUTOSWITCH MODE
  3039.     AX = 6F06h
  3040.     BL = Autoswitch mode select
  3041.          00h select EGA/VGA-only modes
  3042.          01h select Autoswitched VGA/EGA/CGA/MGA modes
  3043.          02h select 'bootup' CGA/MGA modes
  3044.     BH = enable/disable (00h enable, 01h = disable selection)
  3045. ----------106F07-----------------------------
  3046. INT 10 - VIDEO -  Video7 VGA,VEGA VGA - GET VIDEO MEMORY CONFIGURATION
  3047.     AX = 6F07h
  3048. Return: AL = 6Fh
  3049.     AH = bits 0-6 = number of 256K blocks of video memory
  3050.          bit 7    = DRAM/VRAM (0: DRAM, 1: VRAM)
  3051.     BH = chip revision (SR8F) (S/C Chip in VEGA VGA)
  3052.     BL = chip revision (SR8E) (G/A Chip in VEGA VGA)
  3053.     CX = 0000h
  3054. SeeAlso: AH=12h/BL=10h
  3055. ----------1070-------------------------------
  3056. INT 10 - VIDEO - TANDY 2000 only - GET ADDRESS OF VIDEO RAM
  3057.     AH = 70h
  3058. Return: AX:BX -> WORD containing green plane's offset
  3059.     AX:CX -> WORD containing green plane's segment
  3060.     AX:DX -> WORD containing segment of red (offset 0) and blue (offset
  3061.             4000) planes
  3062. SeeAlso: AH=71h
  3063. ----------107000BX0000-----------------------
  3064. INT 10 - Everex Extended Video BIOS - RETURN EMULATION STATUS
  3065.     AX = 7000h
  3066.     BX = 0000h
  3067. Return: AL = 70h if Trident-based Everex card
  3068.     CL = monitor type
  3069.         00h mono
  3070.         01h CGA
  3071.         02h EGA
  3072.         03h digital multifrequency
  3073.         04h IBM PS/2
  3074.         05h IBM 8514
  3075.         06h SuperVGA
  3076.         07h analog multifrequency
  3077.         08h super multifrequency
  3078.     CH = feature bits
  3079.         bits 7,6: 00 = 256K memory
  3080.               01 = 512K memory
  3081.               10 = 1024K
  3082.               11 = 2048K memory
  3083.         bit 5:    special oscillator present
  3084.         bit 4:    VGA protect enabled
  3085.         bit 0:    6845 emulation
  3086.     DX = video board info
  3087.         bits 4-15: board ID model
  3088.         bits 0-3:  board ID revision
  3089.     DI = BCD BIOS version number
  3090. Note:    board models for Trident-based Everex cards:
  3091.         236h Ultragraphics II
  3092.         620h Vision VGA
  3093.         673h EVGA
  3094.         678h Viewpoint
  3095. ----------107000BX0004-----------------------
  3096. INT 10 - Everex Extended Video BIOS - GET PAGING FUNCTION POINTER FOR CURR MODE
  3097.     AX = 7000h
  3098.     BX = 0004h
  3099. Return: ES:DI -> FAR paging function (call with DL = page to set)
  3100. Note:    the word preceding ES:DI is the length of the function in bytes, and
  3101.       the last byte of the function is a FAR return instruction.
  3102. SeeAlso: AX=4F05h,AX=7000h/BX=0000h,AX=7000h/BX=0005h
  3103. ----------107000BX0005-----------------------
  3104. INT 10 - Everex Extended Video BIOS - GET SUPPORTED MODE INFO
  3105.     AX = 7000h
  3106.     BX = 0005h
  3107.     CL = maximum number of modes to get info for
  3108.     CH = mode type to get info for (see below)
  3109.     DL = monitor type to get info for
  3110.     ES:DI -> buffer for mode info (see below)
  3111. Return: CL = total number of modes fitting criteria
  3112.     CH = size of each info record
  3113. SeeAlso: AX=7000h/BX=0000h,AX=7000h/BX=0004h
  3114.  
  3115. Values for mode type:
  3116.  00h all modes
  3117.  01h monochrome text modes
  3118.  02h color text modes
  3119.  03h four-color CGA graphics modes
  3120.  04h two-color CGA graphics modes
  3121.  05h 16-color graphics modes
  3122.  06h 256-color graphics modes
  3123.  
  3124. Format of mode information record:
  3125. Offset    Size    Description
  3126.  00h    BYTE    mode number (bit 7 set if extended mode)
  3127.  01h    BYTE    mode type (see above)
  3128.  02h    BYTE    info bits
  3129.         bits 7,6 reserved
  3130.              5     monochrome mode
  3131.              4     interlaced display
  3132.              3     requires special oscillator
  3133.              2,1 memory required
  3134.              00 = 256K
  3135.              01 = 512K
  3136.              10 = 1024K
  3137.              11 = 2048K
  3138.              0     reserved
  3139.  03h    BYTE    font height
  3140.  04h    BYTE    text columns on screen
  3141.  05h    BYTE    text rows on screen
  3142.  06h    WORD    number of scan lines
  3143.  08h    BYTE    color information
  3144.         bits 7-4 reserved
  3145.              3-0 bits per pixel
  3146. ----------1071-------------------------------
  3147. INT 10 - VIDEO - TANDY 2000 only - GET ADDRESS OF INCRAM
  3148.     AH = 71h
  3149. Return: AX:BX -> WORD containing segment address of INCRAM
  3150.     AX:CX -> WORD containing offset of INCRAM
  3151. SeeAlso: AH=70h
  3152. ----------1072-------------------------------
  3153. INT 10 - VIDEO - TANDY 2000 only - SCROLL RIGHT PART OR ALL OF SCREEN
  3154.     AH = 72h
  3155.     AL = number of columns to shift scroll area, 00h to clear entire area
  3156.     BH = new attributes for blanked columns at left
  3157.     CH,CL = row, column of upper left corner of scroll area
  3158.     DH,DL = row, column of lower right corner of scroll area
  3159. SeeAlso: AH=06h,AH=07h,AH=73h,INT 15/AH=12h/BH=05h
  3160. ----------1073------------------------------
  3161. INT 10 - VIDEO - TANDY 2000 only - SCROLL LEFT PART OR ALL OF SCREEN
  3162.     AH = 73h
  3163.     AL = number of columns to shift scroll area, 00h to clear entire area
  3164.     BH = new attributes for blanked columns at right
  3165.     CH,CL = row, column of upper left corner of scroll area
  3166.     DH,DL = row, column of lower right corner of scroll area
  3167. SeeAlso: AH=06h,AH=07h,AH=72h,INT 15/AH=12h/BH=05h
  3168. ----------107F00-----------------------------
  3169. INT 10 - SOLLEX SuperVGA - GET EXTENSIONS INFO
  3170.     AX = 7F00h
  3171. Return: AL != 7Fh if not supported
  3172.     AL = 7Fh if supported
  3173.         AH = status
  3174.         00h successful
  3175.             ES:DI -> info structure (see below)
  3176.         01h failed
  3177. SeeAlso: AX=4F00h
  3178.  
  3179. Format of info structure:
  3180. Offset    Size    Description
  3181.  00h    DWORD    pointer to VESA function dispatch table
  3182.  04h    DWORD    pointer to SOLLEX function dispatch table
  3183.  08h    DWORD    pointer to VESA SuperVGA info (see AX=4F00h)
  3184.  0Ch    DWORD    pointer to mode info structure table, consisting of
  3185.         alternating ResInfo (see below) and VESA mode information
  3186.         (see AX=4F01h) blocks, terminated with an FFFFh word
  3187.  10h    DWORD    pointer to font info structure table (see below)
  3188.  14h    WORD    high resolution crystal frequency in Hz (0000h = not present)
  3189.  16h    DWORD    pointer to ASCIZ ID string
  3190.  1Ah    DWORD    pointer to timeout reset table
  3191.         array of bytes, each a multiple of the minimum time increment
  3192.  1Eh    WORD    minimum time increment in timer ticks
  3193.  20h    BYTE    inverse options supported
  3194.         bit 0: inverse supported
  3195.         bits 1-7: reserved
  3196.  21h    BYTE    normal color value
  3197.  22h    BYTE    inverse color value
  3198.  23h    WORD    port to be accessed for normal/inverse settings
  3199.  25h    WORD    type of interface chip (currently undefined)
  3200.  27h    WORD    program operational mode
  3201.         bits 1-0: 00 no preference
  3202.               01 terse (minimum detail in program messages)
  3203.               10 verbose
  3204.               11 use menus if supported, verbose mode otherwise
  3205.         bits 7-2: reserved
  3206.  29h    WORD    SOLLEX specification version
  3207.  2Bh    WORD    version of VESA/SOLLEX implementation
  3208.  2Dh    DWORD    offset to relocatable portion of SOLLEX extensions (for CONFIG)
  3209.  2Eh    DWORD    offset to unused section of the extensions ROM
  3210.  31h 16 BYTEs    reserved
  3211. Note:    all DWORD pointers initially require segment fixups; if the segment
  3212.       is 0000h, it should be changed to the returned ES, otherwise it
  3213.       may be assumed to be correct
  3214.  
  3215. Format of ResInfo:
  3216. Offset    Size    Description
  3217.  00h    WORD    16-bit mode number
  3218.  02h    WORD    adapter type (00h VGA, 01h EGA, 02h CGA, 03h MDA)
  3219.  04h    WORD    display info (see AX=7F01h/BL=01h)
  3220.  06h    DWORD    pointer to video parameter table
  3221.  0Ah    BYTE    replacement entry in master Video Parameter
  3222.  0Bh    BYTE    mode requested for mode set by BIOS
  3223.  0Ch    DWORD    pointer to LoadReg table
  3224.  10h    BYTE    index into table of clock values (see below)
  3225.  
  3226. Format of font info table [array] entry:
  3227. Offset    Size    Description
  3228.  00h    BYTE    required font height
  3229.  01h    BYTE    parameter to load text mode font
  3230.  02h    BYTE    parameter to load graphics mode font
  3231.  
  3232. Values for clock value index:
  3233.  00h    25 MHz
  3234.  01h    28 MHz
  3235.  02h    PCLK
  3236.  03h    31.5 MHz (VESA 640x480)
  3237.  04h    reserved
  3238.  05h    16 MHz (EGA)
  3239.  06h    PCLK
  3240.  07h    24 MHz (EGA)
  3241.  08h    25 MHz
  3242.  09h    28 MHz
  3243.  0Ah    36 MHz
  3244.  0Bh    45 MHz (for 1024x768)
  3245.  0Ch    80 MHz
  3246.  0Dh    40 MHz
  3247.  0Eh    65 MHz
  3248.  0Fh     1 MHz (for powerdown)
  3249. ----------107F01BL00-------------------------
  3250. INT 10 - SOLLEX SuperVGA - ADAPTER CONTROL - SET ADAPTER
  3251.     AX = 7F01h
  3252.     BL = 00h
  3253.     CX = adapter request
  3254.         bits 1-0: adapter type (00 VGA, 01 EGA, 10 CGA, 11 MDA)
  3255.         bit 2:    reserved
  3256.         bits 4-3: change displays (00 none, 01 analog 10 digital 11 panel)
  3257.         bits 6-5: desired monitor sense (01 color, 10 mono, 11=8514)
  3258.         bit 7:    lock override
  3259.         bit 8:    alternate adapter mode
  3260.         bits 15-9: reserved
  3261. Return: AL != 7Fh if not supported
  3262.     AL = 7Fh if supported
  3263.         AH = status
  3264.         00h successful
  3265.         01h failed
  3266. Note:    initializes video hardware to a particular standard
  3267. SeeAlso: AX=7F00h,AX=7F01h/BL=01h,AX=7F01h/BL=02h
  3268. ----------107F01BL01-------------------------
  3269. INT 10 - SOLLEX SuperVGA - ADAPTER CONTROL - GET ADAPTER
  3270.     AX = 7F01h
  3271.     BL = 01h
  3272. Return: AL != 7Fh if not supported
  3273.     AL = 7Fh if supported
  3274.         AH = status
  3275.         00h successful
  3276.         01h failed
  3277.         BX = adapter type (see AX=7F01h/BL=00h)
  3278.         DX = display type
  3279.         bits 1-0: monitor sense (00 none, 01 color, 10 mono, 11=8514)
  3280.         bit 2:      multi-frequency analog monitor active
  3281.         bit 3:      LCD panel active
  3282.         bit 4:      plasma/electroluminescent panel active
  3283.         bit 5:      PS/2-type monitor active
  3284.         bit 6:      multi-frequency digital monitor active
  3285.         bit 7:      Enhanced Color Display monitor active
  3286.         bit 8:      alternate display active
  3287.         bits 15-9: reserved
  3288. SeeAlso: AX=7F00h,AX=7F01h/BL=00h,AX=7F01h/BL=02h
  3289. ----------107F01BL02-------------------------
  3290. INT 10 - SOLLEX SuperVGA - ADAPTER CONTROL - DETERMINE ADAPTER SUPPORT
  3291.     AX = 7F01h
  3292.     BL = 02h
  3293.     CX = adapter request (see AX=7F01h/BL=00h)
  3294. Return: AL != 7Fh if not supported
  3295.     AL = 7Fh if supported
  3296.         AH = status
  3297.         00h requested setting can successfully be made
  3298.         01h requested setting not available in this configuration
  3299. SeeAlso: AX=7F00h,AX=7F01h/BL=00h
  3300. ----------107F02BL00-------------------------
  3301. INT 10 - SOLLEX SuperVGA - DISPLAY OUTPUT CONTROL - SET DISPLAY OUTPUT
  3302.     AX = 7F02h
  3303.     BL = 00h
  3304.     CX = display output setting
  3305.         bit 0: CRTC control in bits 2,1 valid
  3306.         bit 1: enable digital output
  3307.         bit 2: enable analog output
  3308.         bit 3: panel control in bits 5,4 valid
  3309.         bit 4: enable LCD output
  3310.         bit 5: enable plasma/EL output
  3311.         bit 6: inverse control in bit 7 valid
  3312.         bit 7: 0=normal, 1=inverse
  3313.         bits 15-8 reserved
  3314. Return: AL != 7Fh if not supported
  3315.     AL = 7Fh if supported
  3316.         AH = status
  3317.         00h successful
  3318.         01h failed
  3319. SeeAlso: AX=7F00h,AX=7F02h/BL=00h
  3320. ----------107F02BL01-------------------------
  3321. INT 10 - SOLLEX SuperVGA - DISPLAY OUTPUT CONTROL - GET DISPLAY OUTPUT
  3322.     AX = 7F02h
  3323.     BL = 01h
  3324. Return: AL != 7Fh if not supported
  3325.     AL = 7Fh if supported
  3326.         AH = status
  3327.         00h successful
  3328.             BX = display output setting (see AX=7F02h/BL=00h)
  3329.             CX = displays attached
  3330.             bit 0: PS/2 display on analog output
  3331.             bit 1: multi-frequency monitor on analog output
  3332.             bit 2: LCD panel attached
  3333.             bit 3: plasma/electroluminescent panel attached
  3334.             bit 4: multi-frequency monitor on digital output
  3335.             bit 5: Enhanced Color Display attached to digital outpt
  3336.             bit 6: alternate display
  3337.             bits 15-7: reserved
  3338.         01h failed
  3339. SeeAlso: AX=7F00h,AX=7F02h/BL=00h
  3340. ----------107F03BL00-------------------------
  3341. INT 10 - SOLLEX SuperVGA - VIDEO SUPPORT CONTROL - GET SUPPORT INFO
  3342.     AX = 7F03h
  3343.     BL = 00h
  3344.     CX = support type
  3345.         0000h VGA, 0001h EGA, 0002h CGA, 0003h MDA, 0004h extensions,
  3346.         0005h-0012h reserved for SOLLEX, 0013h Hercules,
  3347.         0014h-001Fh reserved for SOLLEX, 0020h-00FFh reserved for OEM
  3348. Return: AL != 7Fh if not supported
  3349.     AL = 7Fh if supported
  3350.         AH = status
  3351.         00h successful
  3352.             CX = size of video support code
  3353.             DX = segment of physical video support (0000h if no ROM)
  3354.             ES = segment of active video support
  3355.             ES:DI -> information block (DI = 0000h if none available)
  3356.         01h failed
  3357. SeeAlso: AX=7F03h/BL=01h
  3358. ----------107F03BL01-------------------------
  3359. INT 10 - SOLLEX SuperVGA - VIDEO SUPPORT CONTROL - INITIALIZE VIDEO SUPPORT
  3360.     AX = 7F03h
  3361.     BL = 01h
  3362.     CX = support request
  3363.     ES = segment of support code
  3364. Return: AL != 7Fh if not supported
  3365.     AL = 7Fh if supported
  3366.         AH = status
  3367.         00h successful
  3368.         01h failed
  3369. Note:    initializes the indicated video support by calling ES:0003h; this
  3370.       function may be used to switch the active video support back to
  3371.       ROM after AX=7F03h/BL=02h
  3372. SeeAlso: AX=7F03h/BL=00h
  3373. ----------107F03BL02-------------------------
  3374. INT 10 - SOLLEX SuperVGA - VIDEO SUPPORT CONTROL - GO RAM RESIDENT
  3375.     AX = 7F03h
  3376.     BL = 02h
  3377.     CX = support request
  3378.     ES = destination segment
  3379. Return: AL != 7Fh if not supported
  3380.     AL = 7Fh if supported
  3381.         AH = status
  3382.         00h successful
  3383.         01h failed
  3384. SeeAlso: AX=7F00h,AX=7F03h/BL=01h
  3385. ----------107F04BL00-------------------------
  3386. INT 10 - SOLLEX SuperVGA - POWER CONTROL - SET POWER STATE
  3387.     AX = 7F04h
  3388.     BL = 00h
  3389.     CX = new power state
  3390. Return: AL != 7Fh if not supported
  3391.     AL = 7Fh if supported
  3392.         AH = status
  3393.         00h successful
  3394.         01h failed
  3395. Note:    higher values progressively reduce the operations available on the
  3396.       video adapter while yielding increasing power savings
  3397. SeeAlso: AX=7F00h,AX=7F04h/BL=01h
  3398. ----------107F04BL01-------------------------
  3399. INT 10 - SOLLEX SuperVGA - POWER CONTROL - GET POWER STATE
  3400.     AX = 7F04h
  3401.     BL = 01h
  3402. Return: AL != 7Fh if not supported
  3403.     AL = 7Fh if supported
  3404.         AH = status
  3405.         00h successful
  3406.             CX = current power state
  3407.             DX = maximum state
  3408.         01h failed
  3409. SeeAlso: AX=7F00h,AX=7F04h/BL=00h
  3410. ----------107F04BL02-------------------------
  3411. INT 10 - SOLLEX SuperVGA - POWER CONTROL - SET TIMEOUT RESET
  3412.     AX = 7F04h
  3413.     BL = 02h
  3414.     CX = timeout reset
  3415. Return: AL != 7Fh if not supported
  3416.     AL = 7Fh if supported
  3417.         AH = status
  3418.         00h successful
  3419.         01h failed
  3420. SeeAlso: AX=7F00h,AX=7F04h/BL=03h
  3421. ----------107F04BL03-------------------------
  3422. INT 10 - SOLLEX SuperVGA - POWER CONTROL - GET TIMEOUT RESET
  3423.     AX = 7F04h
  3424.     BL = 03h
  3425. Return: AL != 7Fh if not supported
  3426.     AL = 7Fh if supported
  3427.         AH = status
  3428.         00h successful
  3429.             BX = time increment
  3430.             CX = current timeout reset
  3431.             DX = maximum timeout reset
  3432.             ES:DI -> timeout reset table (array of bytes)
  3433.         01h failed
  3434. Note:    the timeout period is computed as (BYTE ES:[DI+CX]) * BX timer ticks
  3435. SeeAlso: AX=7F00h,AX=7F04h/BL=02h
  3436. ----------107F05-----------------------------
  3437. INT 10 - SOLLEX SuperVGA - LOAD REGISTER
  3438.     AX = 7F05h
  3439.     ES:DI -> register value table (see below)
  3440. Return: AL != 7Fh if not supported
  3441.     AL = 7Fh if supported
  3442.         AH = status
  3443.         00h successful
  3444.         01h failed
  3445. SeeAlso: AH=F1h,AH=F3h,AH=F5h
  3446.  
  3447. Format of register value table:
  3448. Offset    Size    Description
  3449.  00h    WORD    base I/O register (FFFFh = end of list)
  3450.  02h 2N BYTEs    pairs of values to be written to the base I/O register as an
  3451.         index value and the following register as a data byte
  3452.  2N+2    WORD    FFFFh (end of data list)
  3453.     ... (repeats until FFFFh base address)
  3454. ----------107F06-----------------------------
  3455. INT 10 - SOLLEX SuperVGA - MULTIPLE FONT CONTROL
  3456.     AX = 7F06h
  3457.     BL = subfunction
  3458.         00h set multiple font state
  3459.         CX = new state (00h off, 01h on)
  3460.         01h get multiple font state
  3461.         Return: BL = current state (00h off, 01h on)
  3462. Return: AL != 7Fh if not supported
  3463.     AL = 7Fh if supported
  3464.         AH = status
  3465.         00h successful
  3466.         01h failed
  3467. SeeAlso: AH=11h
  3468. ----------107F07-----------------------------
  3469. INT 10 - SOLLEX SuperVGA - FILL VIDEO RAM
  3470.     AX = 7F07h
  3471.     BL = how much to fill
  3472.        00h regen size
  3473.        01h all video memory
  3474.     CX = pattern to write (normally 0720h for text modes and 0000h for gr)
  3475. Return: AL != 7Fh if not supported
  3476.     AL = 7Fh if supported
  3477.         AH = status
  3478.         00h successful
  3479.         01h failed
  3480. SeeAlso: AH=06h
  3481. ----------1080--DX4456-----------------------
  3482. INT 10 U - VIDEO - DESQview 2.0x only - internal - SET ??? HANDLER
  3483.     AH = 80h
  3484.     DX = 4456h ('DV')
  3485.     ES:DI -> FAR subroutine to be called on ???
  3486. Return: DS = segment of DESQview data structure for video buffer
  3487. Note:    this function is probably meant for internal use only, due to the magic
  3488.       value required in DX
  3489.     the subroutine seems to be called when the DESQview menu is accessed;
  3490.       on entry, AL = 03h or 04h
  3491. ----------1081--DX4456-----------------------
  3492. INT 10 U - VIDEO - DESQview 2.0x only - internal - GET ???
  3493.     AH = 81h
  3494.     DX = 4456h ('DV')
  3495. Return: ES = segment of DESQview data structure for video buffer
  3496.         BYTE ES:[0] = current window number in DV 2.0x
  3497. Note:    this function is probably meant for internal use only, due to the magic
  3498.       value required in DX
  3499. SeeAlso: AH=82h
  3500. ----------1082--DX4456-----------------------
  3501. INT 10 U - VIDEO - DESQview 2.0x only - internal - GET CURRENT WINDOW INFO
  3502.     AH = 82h
  3503.     DX = 4456h ('DV')
  3504. Return: DS = segment in DESQview for data structure
  3505.          in DV 2.00,
  3506.           BYTE DS:[0] = window number
  3507.           WORD DS:[1] = segment of other data structure
  3508.           WORD DS:[3] = segment of window's object handle
  3509.     ES = segment of DESQview data structure for video buffer
  3510.     AL = current window number
  3511.     AH = ???
  3512.     BL = direct screen writes
  3513.         00h program does not do direct writes
  3514.         01h program does direct writes, so shadow buffer not usable
  3515.     BH = ???
  3516.     CL = current video mode
  3517.     CH = ???
  3518. Note:    this function is probably meant for internal use only, due to the magic
  3519.       value required in DX
  3520. SeeAlso: AH=81h
  3521. ----------108200-----------------------------
  3522. INT 10 - VIDEO - AX PC - GET/SET SCROLL MODE
  3523.     AX = 8200h
  3524.     BL = new scroll mode or FFh to get current mode
  3525.         00h dynamic, 01h software
  3526. Return: AL = scroll mode (current mode if BL=FFh, previous mode otherwise)
  3527. SeeAlso: AH=06h,AH=07h
  3528. ----------108300-----------------------------
  3529. INT 10 - VIDEO - AX PC - GET VIDEO RAM ADDRESS
  3530.     AX = 8300h
  3531. Return: AX = offset of video RAM
  3532.     ES:BX -> virtual text RAM buffer
  3533. SeeAlso: AX=5201h
  3534. ----------108B-------------------------------
  3535. INT 10 - Alloy MW386 - FORCE WORKSTATION SCREEN UPDATE
  3536.     AH = 8Bh
  3537. SeeAlso: AH=92h,AH=93h
  3538. ----------1090-------------------------------
  3539. INT 10 - Alloy MW386 - GET PHYSICAL WORKSTATION DISPLAY MODE
  3540.     AH = 90h
  3541. Return: AL = current video mode (see AH=00h)
  3542. SeeAlso: AH=91h
  3543. ----------1091-------------------------------
  3544. INT 10 - Alloy MW386 - GET PHYSICAL WORKSTATION ADAPTER TYPE
  3545.     AH = 91h
  3546. Return: AL = video adapter type
  3547.         00h monochrome
  3548.         01h Hercules monochrome graphics
  3549.         02h CGA
  3550.         03h EGA
  3551.         04h VGA
  3552.         80h monochrome text terminal
  3553.         81h Hercules graphics terminal
  3554.         82h color graphics terminal
  3555. Note:    types less than 80h do not imply that the current user is on the host
  3556. SeeAlso: AH=90h
  3557. ----------1092-------------------------------
  3558. INT 10 - Alloy MW386 - INHIBIT WORKSTATION SCREEN UPDATES
  3559.     AH = 92h
  3560. Note:    the terminal will be updated even when screen updates are inhibited if
  3561.       TTY output is used
  3562. SeeAlso: AH=8Bh
  3563. ----------1093-------------------------------
  3564. INT 10 - Alloy MW386 - REDRAW SCREEN
  3565.     AH = 93h
  3566. SeeAlso: AH=8Bh
  3567. ----------10BF00-----------------------------
  3568. INT 10 - VIDEO - Compaq Portable Extensions - SELECT EXTERNAL MONITOR
  3569.     AX = BF00h
  3570. Note:    all registers preserved and the internal monitor is blanked
  3571.     the external monitor becomes the active monitor
  3572. SeeAlso: AX=BF01h
  3573. ----------10BF01-----------------------------
  3574. INT 10 - VIDEO - Compaq Portable Extensions - SELECT INTERNAL MONITOR
  3575.     AX = BF01h
  3576. Note:    all registers preserved and the external monitor is blanked
  3577.     the internal monitor becomes the active monitor
  3578. SeeAlso: AX=BF00h
  3579. ----------10BF02-----------------------------
  3580. INT 10 - VIDEO - Compaq Portable Extensions - SET MASTER MODE OF CURRENT CTRLR
  3581.     AX = BF02h
  3582.     BH = master mode
  3583.         04h CGA
  3584.         05h EGA
  3585.         07h MDA
  3586. SeeAlso: AX=BF03h
  3587. ----------10BF03BX0000-----------------------
  3588. INT 10 - VIDEO - Compaq Portable/Systempro Extensions - GET ENVIRONMENT
  3589.     AX = BF03h
  3590.     BX = 0000h
  3591. Return: BH = active monitor
  3592.         00h = external
  3593.         01h = internal
  3594.     BL = master mode
  3595.         00h = switchable VDU not present
  3596.         04h = CGA
  3597.         05h = EGA
  3598.         07h = MDA
  3599.         08h = switchable LCD controller present
  3600.     CH = 00h (reserved)
  3601.     CL = switchable VDU mode supported
  3602.         bit     0   = CGA supported
  3603.         bits 1,2 = reserved (1)
  3604.         bit     3   = MDA supported
  3605.         bits 4-7 = reserved (1)
  3606.     DH = internal monitor type
  3607.         00h = none
  3608.         01h = Dual-mode monitor
  3609.         02h = 5153 RGB monitor
  3610.         03h = Compaq Color monitor
  3611.         04h = 640x400 flat panel
  3612.         07h = LCD VGA
  3613.     DL = external monitor type
  3614.         00h = none
  3615.         01h = dual-mode monitor
  3616.         02h = 5153 RGB monitor
  3617.         03h = Compaq Color monitor
  3618.         04h = 640x400 flat panel
  3619.         05h = VGC monochrome
  3620.         06h = VGC color
  3621. SeeAlso: AH=1Ah,AX=BF00h,AX=BF01h,AX=BF02h
  3622. ----------10BF04-----------------------------
  3623. INT 10 - VIDEO - Compaq Portable Extensions - SET MODE SWITCH DELAY
  3624.     AX = BF04h
  3625.     BH = new state of delay
  3626.         00h enabled
  3627.         01h disabled
  3628. SeeAlso: AX=BF05h
  3629. ----------10BF05-----------------------------
  3630. INT 10 - VIDEO - Compaq Systempro Extensions - ENABLE/DISABLE DISPLAY
  3631.     AX = BF05h
  3632.     BH = new state of video
  3633.         00h off
  3634.         01h on
  3635. SeeAlso: AX=BF04h
  3636. ----------10BF06-----------------------------
  3637. INT 10 - VIDEO - Compaq SLT/286 - READ GRAY SCALE TABLE
  3638.     AX = BF06h
  3639.     CL = address to be read from gray scale table
  3640. Return: AL = bit 3-0 - Value read from gray scale table
  3641.     CL = address to be read from gray scale table
  3642. SeeAlso: AH=12h/BL=33h,AX=BF07h
  3643. ----------10BF07-----------------------------
  3644. INT 10 - VIDEO - Compaq SLT/286 - WRITE GRAY SCALE TABLE
  3645.     AX = BF07h
  3646.     CH = value to write to gray scale table
  3647.     CL = address to be written to gray scale table
  3648. SeeAlso: AX=BF06h
  3649. ----------10BF08-----------------------------
  3650. INT 10 - VIDEO - Compaq SLT/286 - WRITE COLOR MIX REGISTERS
  3651.     AX = BF08h
  3652.     CH = bits 7-4 - Green weight
  3653.          bits 3-0 - Blue weight
  3654.     CL = bits 7-4 - unused
  3655.          bits 3-0 - Red weight
  3656. ----------10CC00SI0000-----------------------
  3657. INT 10 - VIDEO - UltraVision - GET STATUS (INSTALLATION CHECK)
  3658.     AX = CC00h
  3659.     SI = 0000h (if checking version)
  3660. Return: CX = ABCDh
  3661.     AL = Ultravision extensions
  3662.         00h enabled
  3663.         FFh disabled
  3664.     AH = card designator
  3665.     BX:00F0h -> palette values (for compatibility with NEWFONT)
  3666.     DX = support for high resolution modes
  3667.         00h not active
  3668.         01h active
  3669.     SI = UltraVision version number (v1.2+), high byte=major,low byte=minor
  3670.        = unchanged for versions <1.2
  3671. SeeAlso: AX=CC01h,AX=CC02h
  3672. ----------10CC01-----------------------------
  3673. INT 10 - VIDEO - UltraVision - DISABLE EXTENSIONS
  3674.     AX = CC01h
  3675. Notes:    subsequent BIOS calls will be passed through to previous handler
  3676.     should be followed immediately by mode set to restore normal EGA/VGA
  3677.       state
  3678. SeeAlso: AX=CC02h
  3679. ----------10CC02-----------------------------
  3680. INT 10 - VIDEO - UltraVision - ENABLE EXTENSIONS
  3681.     AX = CC02h
  3682. Note:    should be followed immediately by mode set to restore previous
  3683.       UltraVision state
  3684. SeeAlso: AX=CC01h
  3685. ----------10CD00-----------------------------
  3686. INT 10 - VIDEO - UltraVision - LOAD ULTRAVISION PALETTE (color EGA,VGA)
  3687.     AX = CD00h
  3688.     CL = palette table number (01h-07h for v1.x, 01h-0Fh for v2+)
  3689.     DS:DX -> 16-byte palette register list (colors for registers 00h-0Fh)
  3690. Notes:    if palette locking is in effect for the current mode, the new colors
  3691.       will be displayed immediately; otherwise, the system reverts to the
  3692.       default palette
  3693.     palette table 0 is reserved for the default palette and cannot be set
  3694.     UltraVision always sets the border color to black
  3695. SeeAlso: AX=CD01h,AX=CD02h
  3696. ----------10CD01-----------------------------
  3697. INT 10 - VIDEO - UltraVision - SET PALETTE LOCKING STATUS (color EGA,VGA)
  3698.     AX = CD01h
  3699.     CL = palette locking value
  3700.         00h none
  3701.         01h text modes only (02h,03h)
  3702.         FFh all modes (all standard color text and graphics modes)
  3703. Notes:    intended for video modes with 16 or fewer colors
  3704. SeeAlso: AX=1000h,AX=1002h,AX=CD00h,AX=CD03h
  3705. ----------10CD02-----------------------------
  3706. INT 10 - VIDEO - UltraVision - GET ULTRAVISION PALETTE (EGA,VGA)
  3707.     AX = CD02h
  3708. Return: CL = palette table number
  3709.     DS:DX -> 17-byte palette register list
  3710.     DS:SI -> current font names table (see below)
  3711. Note:    only the font names are valid on monochrome EGA systems
  3712. SeeAlso: AX=1009h,AX=CD00h
  3713.  
  3714. Format of palette register list:
  3715. Offset    Size    Description
  3716.  00h 16 BYTEs    colors for palette registers 00h through 0Fh
  3717.  10h    BYTE    border color
  3718.  
  3719. Format of current font names table (v2+):
  3720. Offset    Size    standard EGA    HiRes EGA    VGA
  3721.  00h  8 BYTEs    N/A        F19 font    F20 font
  3722.  08h  8 BYTEs    F14 font    F14 font    F14 font
  3723.  10h  8 BYTEs    N/A        F11 font    F10 font
  3724.  18h  8 BYTEs    F8 font        F8 font        F8 font
  3725.  
  3726. Format of current font names table (v1.x):
  3727. Offset    Size    HiRes EGA
  3728.  00h  8 BYTEs    F19/F14 font
  3729.  08h  8 BYTEs    F11/F8 font
  3730. ----------10CD03-----------------------------
  3731. INT 10 - VIDEO - UltraVision - GET PALETTE LOCKING STATUS (color EGA,VGA)
  3732.     AX = CD03h
  3733. Return: CL = palette locking value
  3734.         00h none
  3735.         01h text modes only
  3736.         FFh all modes
  3737. SeeAlso: AX=CD01h
  3738. ----------10CD04-----------------------------
  3739. INT 10 - VIDEO - UltraVision - GET UltraVision TEXT MODE (EGA,VGA)
  3740.     AX = CD04h
  3741. Return: AL = mode number
  3742.         11h 80x25
  3743.         12h 80x43, 80x50
  3744.         13h 80x34, 80x36
  3745.         14h 80x60, 80x63
  3746.         19h 94x25
  3747.         1Ah 94x43, 94x50
  3748.         1Bh 94x36
  3749.         1Ch 94x63
  3750.         21h 108x25
  3751.         22h 108x43, 108x50
  3752.         23h 107x34, 108x36
  3753.         24h 108x60, 108x63
  3754.         31h 120x25
  3755.         32h 120x43, 120x50
  3756.         33h 132x25
  3757.         34h 132x44, 132x50
  3758.         39h 120x36
  3759.         3Ah 120x63
  3760.         3Bh 132x36
  3761.         3Ch 132x60
  3762. SeeAlso: AH=0Fh,AX=CC00h,AH=CDh
  3763. ----------10CD05-----------------------------
  3764. INT 10 - VIDEO - UltraVision - SET CURSOR TYPE (EGA,VGA)
  3765.     AX = CD05h
  3766.     CL = type
  3767.         00h line cursor
  3768.         FFh box cursor
  3769. Note:    sets default cursor type for text-based programs
  3770. SeeAlso: AH=01h,AX=CD06h
  3771. ----------10CD06-----------------------------
  3772. INT 10 - VIDEO - UltraVision - GET CURSOR TYPE (EGA,VGA)
  3773.     AX = CD06h
  3774. Return:    CL = type
  3775.         00h line cursor
  3776.         FFh box cursor
  3777. SeeAlso: AH=03h,AX=CD05h
  3778. ----------10CD07-----------------------------
  3779. INT 10 - VIDEO - UltraVision v1.2+ - SET UNDERLINE STATUS (EGA,VGA)
  3780.     AX = CD07h
  3781.     CL = hardware underline status
  3782.         00h off (color systems only)
  3783.         01h underline below characters
  3784.         02h strike through characters
  3785.     BL = foreground color for normal text (FFh = current)
  3786.     BH = foreground color for bright text (FFh = current)
  3787. Return: CL = hardware underline status
  3788.     BL = current foreground color for normal text
  3789.     BH = current foreground color for bright text
  3790. Notes:    when underline or strikeout is enabled in color text modes, the
  3791.       specified colors will be assigned temporarily to colors 01h and 09h,
  3792.       allowing affected text to match non-underlined text.    The color
  3793.       remapping uses values from the current onscreen palette regardless
  3794.       of the palette locking status (see AX=CD01h)
  3795.     specify the standard colors (BL=01h,BH=09h) to enable underline or
  3796.       strikeout without color remapping
  3797. SeeAlso: AX=CD08h
  3798. ----------10CD08-----------------------------
  3799. INT 10 - VIDEO - UltraVision v1.2+ - GET UNDERLINE STATUS (EGA,VGA)
  3800.     AX = CD08h
  3801. Return: CL = hardware underline status (see AX=CD07h)
  3802.     BL = foreground color for normal text
  3803.     BH = foreground color for bright text
  3804. Note:    only CL is valid on monochrome EGA systems
  3805. SeeAlso: AX=CD07h
  3806. ----------10CD10-----------------------------
  3807. INT 10 - VIDEO - UltraVision - LOAD USER FONT (EGA,VGA)
  3808.     AX = CD10h
  3809.     BH = bytes per character (08h,0Ah,0Bh,0Eh,13h,14h)
  3810.     CX = ABCDh load 9xN alternate font (v2+)
  3811.        else number of characters to load
  3812.         DX = character offset into font table
  3813.         DS:SI -> 8-byte ASCII font name
  3814.     ES:BP -> font definitions
  3815. Return: AX = FFFFh if invalid font parameters
  3816. Notes:    loads the designated characters into UltraVision's resident font area
  3817.     should be followed by a video mode set to reload character generator
  3818. SeeAlso: AX=1100h
  3819. ----------10CD-------------------------------
  3820. INT 10 - VIDEO - UltraVision - SET ULTRAVISION TEXT MODE (EGA,VGA)
  3821.     AH = CDh
  3822.     AL = text mode number (see AX=CD04h)
  3823. Return: AX = CDCDh if invalid mode
  3824. SeeAlso: AX=CD04h
  3825. ----------10EF-------------------------------
  3826. INT 10 - VIDEO - MSHERC.COM - INSTALLATION CHECK???
  3827.     AH = EFh
  3828. Return: DL = video adapter type
  3829.         00h original Hercules
  3830.         01h ???  \ one is probably Hercules Plus, the other
  3831.         02h ???  / Hercules InColor
  3832.         FFh non-Hercules 
  3833.     DH = memory mode byte
  3834.         01h "half" mode
  3835.         03h "full" mode
  3836. Note:    MSHERC.COM is a support program for the Microsoft Quick languages which
  3837.       makes their graphics libraries compatible with a Hercules card by
  3838.       adding video modes 08h and 88h, and supporting text in the new
  3839.       graphics modes.  While in mode 08h or 88h, INT 10 supports the
  3840.       Hercules card much like a CGA.
  3841. ----------10F0-------------------------------
  3842. INT 10 - EGA Register Interface Library - READ ONE REGISTER
  3843.     AH = F0h
  3844.     BL = register number
  3845.     BH = 00h
  3846.     DX = group index
  3847.         Pointer/data chips
  3848.            00h CRT Controller (25 reg) 3B4h mono modes, 3D4h color modes
  3849.            08h Sequencer (5 registers) 3C4h
  3850.            10h Graphics Controller (9 registers) 3CEh
  3851.            18h Attribute Controller (20 registers) 3C0h
  3852.         Single registers
  3853.            20h Miscellaneous Output register 3C2h
  3854.            28h Feature Control register (3BAh mono modes, 3DAh color modes)
  3855.            30h Graphics 1 Position register 3CCh
  3856.            38h Graphics 2 Position register 3CAh
  3857. Return: BL = data
  3858. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3859.       compatibility box, and others
  3860. SeeAlso: AH=F1h,AH=F2h,INT 2F/AX=BC00h
  3861. ----------10F1-------------------------------
  3862. INT 10 - EGA Register Interface Library - WRITE ONE REGISTER
  3863.     AH = F1h
  3864.     DX = group index (see AH=F0h)
  3865.         if single register:
  3866.         BL = value to write
  3867.         otherwise
  3868.         BL = register number
  3869.         BH = value to write
  3870. Return: BL = data
  3871. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3872.       compatibility box, and others
  3873. SeeAlso: AX=7F05h,AH=F0h,AH=F3h
  3874. ----------10F2-------------------------------
  3875. INT 10 - EGA Register Interface Library - READ REGISTER RANGE
  3876.     AH = F2h
  3877.     CH = starting register number
  3878.     CL = Number of registers (>1)
  3879.     DX = group index
  3880.          00h CRTC (3B4h mono modes, 3D4h color modes)
  3881.          08h Sequencer 3C4h
  3882.          10h Graphics Controller 3CEh
  3883.          18h Attribute Controller 3C0h
  3884.     ES:BX -> buffer, CL bytes
  3885. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3886.       compatibility box, and others
  3887. SeeAlso: AH=F0h,AH=F3h
  3888. ----------10F3-------------------------------
  3889. INT 10 - EGA Register Interface Library - WRITE REGISTER RANGE
  3890.     AH = F3h
  3891.     CH = starting register
  3892.     CL = number of registers (>1)
  3893.     DX = group index (see AH=F2h)
  3894.     ES:BX -> buffer, CL bytes
  3895. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3896.       compatibility box, and others
  3897. SeeAlso: AX=7F05h,AH=F1h,AH=F2h
  3898. ----------10F4-------------------------------
  3899. INT 10 - EGA Register Interface Library - READ REGISTER SET
  3900.     AH = F4h
  3901.     CX = number of registers to read (>1)
  3902.     ES:BX -> table of records (see below)
  3903. Return: register values in table filled in
  3904. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3905.       compatibility box, and others
  3906. SeeAlso: AH=F0h,AH=F2h,AH=F5h
  3907.  
  3908. Format of entries in table of register records:
  3909. Offset    Size    Description
  3910.  00h    WORD    group index
  3911.         Pointer/data chips
  3912.            00h CRTC (3B4h mono modes, 3D4h color modes)
  3913.            08h Sequencer 3C4h
  3914.            10h Graphics Controller 3CEh
  3915.            18h Attribute Controller 3C0h
  3916.         Single registers
  3917.            20h Miscellaneous Output register 3C2h
  3918.            28h Feature Control register (3BAh mono modes, 3DAh color)
  3919.            30h Graphics 1 Position register 3CCh
  3920.            38h Graphics 2 Position register 3CAh
  3921.  02h    BYTE    register number (0 for single registers)
  3922.  03h    BYTE    register value
  3923. ----------10F5-------------------------------
  3924. INT 10 - EGA Register Interface Library - WRITE REGISTER SET
  3925.     AH = F5h
  3926.     CX = number of registers to write (>1)
  3927.     ES:BX -> table of records (see AH=F4h)
  3928. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3929.       compatibility box, and others
  3930. SeeAlso: AX=7F05h,AH=F1h,AH=F3h,AH=F4h
  3931. ----------10F6------------------------------
  3932. INT 10 - EGA Register Interface Library - REVERT TO DEFAULT REGISTERS
  3933.     AH = F6h
  3934. Note:    provided by the Microsoft Mouse driver, OS/2 compatibility box, and
  3935.       others
  3936. SeeAlso: AH=F7h
  3937. ----------10F7------------------------------
  3938. INT 10 - EGA Register Interface Library - DEFINE DEFAULT REGISTER TABLE
  3939.     AH = F7h
  3940.     DX = port number
  3941.        Pointer/data chips
  3942.           00h CRTC (3B4h mono modes, 3D4h color modes)
  3943.           08h Sequencer 3C4h
  3944.           10h Graphics Controller 3CEh
  3945.           18h Attribute Controller 3C0h
  3946.        Single registers
  3947.           20h Miscellaneous Output register 3C2h
  3948.           28h Feature Control register (3BAh mono modes, 3DAh color modes)
  3949.           30h Graphics 1 Position register 3CCh
  3950.           38h Graphics 2 Position register 3CAh
  3951.     ES:BX -> table of one-byte entries, one byte to be written to each
  3952.          register
  3953. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3954.       compatibility box, and others
  3955. SeeAlso: AH=F6h
  3956. ----------10FA--BX0000----------------------
  3957. INT 10 - EGA Register Interface Library - INTERROGATE DRIVER
  3958.     AH = FAh
  3959.     BX = 0000h
  3960. Return: BX = 0000h if mouse driver not present
  3961.     ES:BX -> EGA Register Interface version number, if present:
  3962.         byte 0 = major release number
  3963.         byte 1 = minor release number
  3964. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3965.       compatibility box, and others
  3966. SeeAlso: AH=F6h,INT 2F/AX=BC00h
  3967. ----------10FA------------------------------
  3968. INT 10 - FASTBUFF.COM - INSTALLATION CHECK
  3969.     AH = FAh
  3970. Return: AX = 00FAh if installed
  3971.         ES = segment of resident code
  3972. Program: FASTBUFF.COM is a keyboard speedup/screen blanking utility by David
  3973.       Steiner
  3974. ----------10FE------------------------------
  3975. INT 10 - TopView - GET SHADOW BUFFER
  3976.     AH = FEh
  3977.     ES:DI -> assumed video buffer
  3978.         B800h:0000h color text/CGA graphics, B000h:0000h mono text,
  3979.           or A000h:0000h EGA/VGA graphics (RSIS environments only)
  3980. Return: ES:DI -> actual video buffer for calling process
  3981. Notes:    if no multitasker or RSIS-compliant environment is installed, ES:DI is
  3982.       returned unchanged; RSIS is the Relocated Screen Interface
  3983.       Specification
  3984.     for display pages other than 0, use AH=05h and AH=0Fh to determine
  3985.       whether a particular page exists
  3986.     TopView requires a call to AH=FFh to notify it that the screen has
  3987.       changed; DESQview will check for changes itself until the first call
  3988.       to AH=FFh
  3989. SeeAlso: AH=05h,AX=5201h,AH=FFh,INT 15/AX=1024h,INT 21/AH=2Bh"DESQview"
  3990. SeeAlso: INT 21/AH=ECh"DoubleDOS"
  3991. ----------10FF-------------------------------
  3992. INT 10 - TopView - UPDATE SCREEN FROM SHADOW BUFFER
  3993.     AH = FFh
  3994.     CX = number of consecutive changed characters
  3995.     ES:DI -> first changed character in shadow buffer
  3996. Notes:    avoid CX=0000h
  3997.     DESQview will discontinue the automatic screen updating initiated by
  3998.       AH=FEh after this call
  3999.     not supported (ignored) by DESQview/X 1.0x
  4000. SeeAlso: AH=FEh
  4001. ----------10FF-------------------------------
  4002. INT 10 - DJ GO32.EXE 80386+ DOS extender - VIDEO EXTENSIONS
  4003.     AH = FFh
  4004.     AL = video mode
  4005.         00h 80x25 text
  4006.         01h default text
  4007.         02h CXxDX text
  4008.         03h biggest text
  4009.         04h 320x200 graphics
  4010.         05h default graphics
  4011.         06h CXxDX graphics
  4012.         07h    biggest non-interlaced graphics
  4013.         08h biggest graphics
  4014. SeeAlso: AH=00h,INT 21/AH=FFh"GO32"
  4015. ----------10FF00-----------------------------
  4016. INT 10 - CARBON COPY PLUS v5.0 - CHECK IF CC CONNECTED TO CCHELP
  4017.     AX = FF00h
  4018. Return: BL = 00h not connected
  4019.        = 01h connected
  4020. SeeAlso: AX=FF01h,AX=FF02h
  4021. ----------10FF01-----------------------------
  4022. INT 10 - CARBON COPY PLUS v5.0 - DISCONNECT AND RESET LINE
  4023.     AX = FF01h
  4024. SeeAlso: AX=FF00h,AX=FF02h
  4025. ----------10FF02-----------------------------
  4026. INT 10 - CARBON COPY PLUS v5.0 - GET LAST PHONE NUMBER DIALED
  4027.     AX = FF02h
  4028. Return: ES:DI -> ASCIZ phone number
  4029. SeeAlso: AX=FF00h,AX=FF01h
  4030. ----------11---------------------------------
  4031. INT 11 - CPU-generated (80486+) - ALIGNMENT CHECK
  4032.    Bit AC in the EFLAGS register enables this interrupt on a memory reference
  4033.      on a mis-aligned address when in privilege mode 3.
  4034. ----------11---------------------------------
  4035. INT 11 - BIOS - GET EQUIPMENT LIST
  4036. Return: AX = BIOS equipment list word
  4037.         bits
  4038.         0      floppy disk(s) installed (see bits 6-7)
  4039.         1      80x87 coprocessor installed
  4040.         2,3      number of 16K banks of RAM on motherboard (PC only)
  4041.           number of 64K banks of RAM on motherboard (XT only)
  4042.         2      pointing device installed (PS)
  4043.         3      unused (PS)
  4044.         4-5      initial video mode
  4045.           00 EGA, VGA, or PGA
  4046.           01 40x25 color
  4047.           10 80x25 color
  4048.           11 80x25 monochrome
  4049.         6-7      number of floppies installed less 1 (if bit 0 set)
  4050.         8      DMA support installed (PCjr, some Tandy 1000s, 1400LT)
  4051.         9-11  number of serial ports installed
  4052.         12      game port installed
  4053.         13      serial printer attached (PCjr)
  4054.           internal modem installed (PC/Convertible)
  4055.         14-15 number of parallel ports installed
  4056. ---Compaq and many other 386/486 machines--
  4057.     EAX bit 23: page tables set so that Weitek coprocessor addressable in
  4058.             real mode
  4059.         bit 24: Weitek math coprocessor present
  4060. ---Compaq Systempro
  4061.     EAX bit 25: internal DMA parallel port available
  4062.         26: IRQ for internal DMA parallel port (if bit 25 set)
  4063.             0 = IRQ5
  4064.             1 = IRQ7
  4065.          27,28: parallel port DMA channel
  4066.             00 DMA channel 0
  4067.             01 DMA channel 0 ???
  4068.             10 reserved
  4069.             11 DMA channel 3
  4070. SeeAlso: INT 12
  4071. ----------11----SI6A6A-----------------------
  4072. INT 11 - Columbia Data Products Standard Device Level Protocol (SDLP) 1.6
  4073.     SI = 6A6Ah
  4074.     AH = command (see below)
  4075.     AL = SCSI Addressing
  4076.         bits 2-0 SCSI Target LUN (logical unit number)
  4077.         bits 5-3 SCSI Target ID
  4078.         bits 7-6 Host Adapter
  4079. Return: CF clear if successful
  4080.     CF set on error
  4081.         AL = error code
  4082. SeeAlso: INT 21/AX=4402"ASPI"
  4083.  
  4084. Values for SDLP command:
  4085.  00h SDLP initialization
  4086.  01h SDLP System Identify
  4087.  02h simple read sectors
  4088.  03h simple write sectors
  4089.  04h simple verify sectors/seek to sector
  4090.  05h get device size/type
  4091.  06h ready unit
  4092.  07h format unit
  4093.  08h diagnostics
  4094.  09h rewind
  4095.  0Ah erase
  4096.  0Bh write filemarks
  4097.  0Ch space
  4098.  0Dh prevent/allow media removal
  4099.  0Eh load/unload media
  4100.  0Fh reserved - returns good status
  4101.  10h set block size
  4102.  11h write setmark
  4103.  12h set error level
  4104.  13h get address of Request Sense Buffer
  4105.  14h get SDLP error via Request Sense
  4106.  F0h Vendor Unique Function (WD7000-FASST2 only)
  4107.  FDh reset current SCSI HAC
  4108.  FEh get/set current SCSI HAC
  4109.  FFh execute SCSI command
  4110. ----------11BC--DX1954-----------------------
  4111. INT 11 - BNU FOSSIL - INSTALLATION CHECK
  4112.     AH = BCh
  4113.     DX = 1954h
  4114. Return: AX = 1954h
  4115.     ES:DX -> entry point of driver (instead of INT 14)
  4116. ----------11FF--SI6A6A-----------------------
  4117. INT 11 - WD7000 SDLP interface - EXECUTE GENERIC SCSI COMMAND
  4118.     AH = FFh
  4119.     SI = 6A6Ah
  4120.     AL = SCSI Addressing
  4121.         bits 2-0 SCSI Target LUN (logical unit number)
  4122.         bits 5-3 SCSI Target ID
  4123.         bit 7    write flag, set for write operations, clear otherwise
  4124.     CX = bytes of data to be transmitted (max FFF0h)
  4125.     DH = 00h
  4126.     DL = length of SCSI Command Descriptor Block
  4127.     DS:DI -> SCSI Command Descriptor Block
  4128.     ES:BX -> data buffer
  4129. Return: CF set on error
  4130.         AL = error code
  4131.     CF clear if successful
  4132. Note:    because of busmaster operations with WD7000FASST avoid accessing
  4133.       video memory directly; check 386 memory manager for VDS support.
  4134.       The WD7000XTAT works with programmed IO and does not have this
  4135.       limitation.
  4136. SeeAlso: INT 21/AX=4402"ASPI"
  4137. ----------11FFFECXFFFE-----------------------
  4138. INT 11 - BACK&FORTH (before v1.62) API
  4139.     AX = FFFEh
  4140.     CX = FFFEh
  4141.     BX = function
  4142.         00h installation check
  4143.         Return: AX = 0001h BNFHIGH and BNFLOW both loaded
  4144.                = 0003h only BNFHIGH loaded
  4145.                else neither loaded
  4146.         01h ???
  4147.         Return: DX:AX -> ???
  4148.         02h ???
  4149.         03h ???
  4150.         04h ???
  4151.         05h ??? switches current PSP segment and stack if BNFLOW has not
  4152.             yet announced itself installed
  4153.         06h ???
  4154.         Return: AX = ???
  4155. SeeAlso: INT 12/AX=FFFEh
  4156. ----------12---------------------------------
  4157. INT 12 - BIOS - GET MEMORY SIZE
  4158. Return:    AX = kilobytes of contiguous memory starting at absolute address 00000h
  4159. Note:    this call returns the contents of the word at 0040h:0013h; in PC and
  4160.       XT, this value is set from the switches on the motherboard
  4161. SeeAlso: INT 11,INT 2F/AX=4A06h
  4162. ----------12----CX1806-----------------------
  4163. INT 12 - KEYBUI v2.0+ - INSTALLATION CHECK
  4164.     CX = 1806h
  4165. Return:    AX = kilobytes of contiguous memory starting at absolute address 00000h
  4166.     CX = 1960h if installed
  4167. Note:    KEYBUI is a resident keyboard driver by Johan Zwiekhorst which allows
  4168.       accented characters and box drawing on standard QWERTY keyboards; it
  4169.       also provides break-to-DOS and screen blanking capabilities
  4170. ----------12----CX1807-----------------------
  4171. INT 12 - PARKER v2.0+ - INSTALLATION CHECK
  4172.     CX = 1807h
  4173. Return:    AX = kilobytes of contiguous memory starting at absolute address 00000h
  4174.     CX = 1961h if installed
  4175. Note:    PARKER is an optionally-resident hard disk parking program by Johan
  4176.       Zwiekhorst
  4177. ----------12FFFECXFFFE-----------------------
  4178. INT 12 - Back&Forth v1.62+ - API
  4179.     AX = FFFEh
  4180.     CX = FFFEh
  4181.     BX = function
  4182.         00h installation check
  4183.         Return: AX = 0001h installed
  4184.                  else  not loaded
  4185.         02h build program ID list
  4186.         ES:DI -> buffer of at least 100 bytes, to be filled with words
  4187.         Return: AX = number of programs defined
  4188.             ES:DI buffer filled with AX words
  4189.         03h switch to specified task (task need not be open yet)
  4190.         DX = two-letter program ID
  4191.         Return: AX = 0000h if task undefined
  4192.         04h ???
  4193.         05h    ???
  4194.         06h    get version (undoc)
  4195.         Return: AX = version * 100 (v1.71 = 00ABh)
  4196.         07h ???
  4197.         08h get open tasks (undoc)
  4198.         ES:DI -> task info buffer (see below)
  4199.         Return: AX = number of open tasks (max 20)
  4200.         09h    ???
  4201. Note:    Back & Forth is a task switcher by Progressive Solutions, Inc.
  4202. SeeAlso: INT 11/AX=FFFEh
  4203.  
  4204. Format of task info buffer:
  4205. Offset    Size    Description
  4206.  00h 21 BYTEs    ASCIZ task name
  4207.  15h    BYTE    hotkey shift state (as for INT 16/AH=02h)
  4208.  16h    WORD    hotkey scan code
  4209.  18h    WORD    program ID
  4210. ----------1300-------------------------------
  4211. INT 13 - DISK - RESET DISK SYSTEM
  4212.     AH = 00h
  4213.     DL = drive (if bit 7 is set both hard disks and floppy disks reset)
  4214. Return: AH = status (see AH=01h)
  4215.     CF clear if successful (returned AH=00h)
  4216.     CF set on error
  4217. Note:    forces controller to recalibrate drive heads (seek to track 0)
  4218. SeeAlso: AH=0Dh,AH=11h,INT 21/AH=0Dh,INT 4E"TI Professional"
  4219. ----------1301-------------------------------
  4220. INT 13 - DISK - GET STATUS OF LAST OPERATION
  4221.     AH = 01h
  4222.     DL = drive (bit 7 set for hard disk)
  4223. Return: CF clear if successful (returned status 00h)
  4224.     CF set on error
  4225.     AH = status of previous operation
  4226.         00h successful completion
  4227.         01h invalid function in AH or invalid parameter
  4228.         02h address mark not found
  4229.         03h disk write-protected (floppy)
  4230.         04h sector not found
  4231.         05h reset failed (hard disk)
  4232.         06h disk changed (floppy)
  4233.         07h drive parameter activity failed (hard disk)
  4234.         08h DMA overrun
  4235.         09h attempted DMA across 64K boundary
  4236.         0Ah bad sector detected (hard disk)
  4237.         0Bh bad track detected (hard disk)
  4238.         0Ch unsupported track or invalid media
  4239.         0Dh invalid number of sectors on format (hard disk)
  4240.         0Eh control data address mark detected (hard disk)
  4241.         0Fh DMA arbitration level out of range (hard disk)
  4242.         10h uncorrectable CRC or ECC error on read
  4243.         11h data ECC corrected (hard disk)
  4244.         20h controller failure
  4245.         40h seek failed
  4246.         80h timeout (not ready)
  4247.         AAh drive not ready (hard disk)
  4248.         BBh undefined error (hard disk)
  4249.         CCh write fault (hard disk)
  4250.         E0h status register error (hard disk)
  4251.         FFh sense operation failed (hard disk)
  4252. Note:    some BIOSes return the status in AL; the PS/2 Model 30/286 returns the
  4253.       status in both AH and AL
  4254. ----------1302-------------------------------
  4255. INT 13 - DISK - READ SECTOR(S) INTO MEMORY
  4256.     AH = 02h
  4257.     AL = number of sectors to read (must be nonzero)
  4258.     CH = low eight bits of cylinder number
  4259.     CL = sector number (bits 0-5)
  4260.          high two bits of cylinder (bits 6-7, hard disk only)
  4261.     DH = head number
  4262.     DL = drive number (bit 7 set for hard disk)
  4263.     ES:BX -> data buffer
  4264. Return: CF set on error
  4265.         if AH = 11h (corrected ECC error), AL = burst length
  4266.     CF clear if successful
  4267.     AH = status (see AH=01h)
  4268.     AL = number of sectors transferred
  4269. Notes:    errors on a floppy may be due to the motor failing to spin up quickly
  4270.       enough; the read should be retried at least three times, resetting
  4271.       the disk with AH=00h between attempts
  4272.     AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  4273.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  4274. SeeAlso: AH=03h,AH=0Ah
  4275. ----------1303-------------------------------
  4276. INT 13 - DISK - WRITE DISK SECTOR(S)
  4277.     AH = 03h
  4278.     AL = number of sectors to write (must be nonzero)
  4279.     CH = low eight bits of cylinder number
  4280.     CL = sector number (bits 0-5)
  4281.          high two bits of cylinder (bits 6-7, hard disk only)
  4282.     DH = head number
  4283.     DL = drive number (bit 7 set for hard disk)
  4284.     ES:BX -> data buffer
  4285. Return: CF set on error
  4286.     CF clear if successful
  4287.     AH = status (see AH=01h)
  4288.     AL = number of sectors transferred
  4289. Notes:    errors on a floppy may be due to the motor failing to spin up quickly
  4290.       enough; the write should be retried at least three times, resetting
  4291.       the disk with AH=00h between attempts
  4292.     AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  4293.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  4294. SeeAlso: AH=02h,AH=0Bh
  4295. ----------1304-------------------------------
  4296. INT 13 - DISK - VERIFY DISK SECTOR(S)
  4297.     AH = 04h
  4298.     AL = number of sectors to verify (must be nonzero)
  4299.     CH = low eight bits of cylinder number
  4300.     CL = sector number (bits 0-5)
  4301.          high two bits of cylinder (bits 6-7, hard disk only)
  4302.     DH = head number
  4303.     DL = drive number (bit 7 set for hard disk)
  4304.     ES:BX -> data buffer (PC,XT,AT with BIOS prior to 11/15/85)
  4305. Return: CF set on error
  4306.     CF clear if successful
  4307.     AH = status (see AH=01h)
  4308.     AL = number of sectors verified
  4309. Notes:    errors on a floppy may be due to the motor failing to spin up quickly
  4310.       enough; the write should be retried at least three times, resetting
  4311.       the disk with AH=00h between attempts
  4312.     this function does not compare the disk with memory, it merely
  4313.       checks whether the sector's stored CRC matches the data's actual CRC
  4314.     AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  4315.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  4316. SeeAlso: AH=02h
  4317. ----------1305-------------------------------
  4318. INT 13 - FLOPPY - FORMAT TRACK
  4319.     AH = 05h
  4320.     AL = number of sectors to format
  4321.     CH = track number
  4322.     DH = head number
  4323.     DL = drive number
  4324.     ES:BX -> address field buffer (see below)
  4325. Return: CF set on error
  4326.     CF clear if successful
  4327.     AH = status (see AH=01h)
  4328. Notes:    on AT or higher, call AH=17h first
  4329.     the number of sectors per track is read from the diskette parameter
  4330.       table pointed at by INT 1E
  4331. SeeAlso: AH=05h"FIXED",AH=17h,AH=18h,INT 1E
  4332.  
  4333. Format of address field buffer entry (one per sector in track):
  4334. Offset    Size    Description
  4335.  00h    BYTE    track number
  4336.  01h    BYTE    head number (0-based)
  4337.  02h    BYTE    sector number
  4338.  03h    BYTE    sector size (00h=128 bytes, 01h=256 bytes, 02h=512, 03h=1024)
  4339. ----------1305-------------------------------
  4340. INT 13 - FIXED DISK - FORMAT TRACK
  4341.     AH = 05h
  4342.     AL = interleave value (XT-type controllers only)
  4343.     ES:BX -> 512-byte format buffer
  4344.         the first 2*(sectors/track) bytes contain F,N for each sector
  4345.            F = 00h for good sector, 80h for bad sector
  4346.            N = sector number
  4347.     CH = cylinder number (bits 8,9 in high bits of CL)
  4348.     CL = high bits of cylinder number (bits 7,6)
  4349.     DH = head
  4350.     DL = drive
  4351. Return: AH = status code (see AH=01h)
  4352. Notes:    AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  4353.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  4354.     for XT-type controllers on an AT or higher, AH=0Fh should be called
  4355.       first
  4356. SeeAlso: AH=05h"FLOPPY",AH=06h"FIXED",AH=07h"FIXED",AH=0Fh,AH=18h,AH=1Ah
  4357. ----------1305-------------------------------
  4358. INT 13 - Future Domain SCSI BIOS - SEND SCSI MODE SELECT COMMAND
  4359.     AH = 05h
  4360.     DL = hard drive ID
  4361.     ES:BX -> mode select data (see below)
  4362. Return: CF set on error
  4363.     AH = status code (see AH=01h)
  4364. Notes:    this function can be called before AH=07h"SCSI" or AH=06h"SCSI" to 
  4365.       format a SCSI disk with the desired parameters
  4366.     the mode select data below is from the SCSI-1 specification
  4367. SeeAlso: AH=06h"SCSI",AH=07h"SCSI"
  4368.  
  4369. Format of mode select data:
  4370. Offset    Size    Description
  4371.  00h    BYTE    number of bytes of remaining data (12 + vendor unique length)
  4372.  01h    BYTE    reserved (0)
  4373.  02h    BYTE    medium type (0 for hard disk)
  4374.  03h    BYTE    reserved (0)
  4375.  04h    BYTE    block descriptor length (8)
  4376.  05h    BYTE    density code (0 for hard disk)
  4377.  06h  3 BYTEs    number of blocks (big-endian) (000000h for entire disk)
  4378.  09h    BYTE    reserved (0)
  4379.  0Ah  3 BYTEs    block length (big-endian) (512 standard, or 256)
  4380.  0Dh    ???    vendor-specific parameter bytes (optional)
  4381. ----------1306-------------------------------
  4382. INT 13 - FIXED DISK - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT,PORT)
  4383.     AH = 06h
  4384.     AL = interleave value
  4385.     CH = cylinder number (bits 8,9 in high bits of CL)
  4386.     CL = sector number
  4387.     DH = head
  4388.     DL = drive
  4389. Return: AH = status code (see AH=01h)
  4390. Note:    AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  4391.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  4392. SeeAlso: AH=05h"FIXED",AH=07h"FIXED"
  4393. ----------1306-------------------------------
  4394. INT 13 - Future Domain SCSI BIOS - FORMAT DRIVE WITH BAD SECTOR MAPPING
  4395.     AH = 06h
  4396.     AL = interleave
  4397.          (0 = default, 1 = consecutive sectors, 2 - 255 = vendor unique)
  4398.     DL = hard drive ID
  4399.     DH = bits 7-5 drive LUN
  4400.          bit 4    defect list is available
  4401.          bit 3    defect list is complete (erase drive's defect list)
  4402.          bits 2-0 defect table format
  4403.               (000=use defect table A, 100=use defect table B,
  4404.               101=use defect table C)
  4405.     ES:BX ->  defect table A, B or C (see below)
  4406. Return: CF set on error
  4407.     AH = status code (see AH=01h)
  4408. Notes:    block addresses must be in ascending order (for table B, cylinder is
  4409.       most significant, byte from index least significant; for table C,
  4410.       cylinder is most significant, sector number least significant)
  4411.     table B defect bytes from index of FFFFFFFFh indicates that the entire
  4412.       track shall be reassigned
  4413.     table C defect sector number of FFFFFFFFh indicates that the entire
  4414.       track shall be reassigned
  4415. SeeAlso: AH=05h"SCSI",AH=06h"FIXED",AH=07h"SCSI"
  4416.  
  4417. Format of defect table A:
  4418. Offset    Size    Description
  4419.  00h    WORD    number of bytes remaining in table
  4420.  02h    BYTE    reserved (0)
  4421.  03h    BYTE    reserved (0)
  4422.  04h    WORD    defect list length (big-endian) (4*number of defects)
  4423.  06h  4 DWORDs    defect block addresses (big-endian)
  4424.  
  4425. Format of defect table B:
  4426. Offset    Size    Description
  4427.  00h    WORD    number of bytes remaining in table
  4428.  02h    BYTE    reserved (0)
  4429.  03h    BYTE    reserved (0)
  4430.  04h    WORD    defect list length (big-endian) (8*number of defects)
  4431.  06h 8N BYTEs    Defect List [array]
  4432.     Offset    Size    Description
  4433.      00h  3 BYTEs    cylinder number of defect (big-endian)
  4434.      03h    BYTE    head number of defect
  4435.      04h    DWORD    defect bytes from index (big-endian)
  4436.  
  4437. Format of defect table C:
  4438. Offset    Size    Description
  4439.  00h    WORD    number of bytes remaining in table
  4440.  02h    BYTE    reserved (0)
  4441.  03h    BYTE    reserved (0)
  4442.  04h    WORD    defect list length (big-endian) (8*number of defects)
  4443.  06h 8N BYTEs    defect list
  4444.     Offset    Size    Description
  4445.      00h  3 BYTEs    cylinder number of defect (big-endian)
  4446.      03h    BYTE    head number of defect
  4447.      04h    DWORD    defect sector number (big-endian)
  4448. ----------1307-------------------------------
  4449. INT 13 - FIXED DISK - FORMAT DRIVE STARTING AT GIVEN TRACK (XT,PORT)
  4450.     AH = 07h
  4451.     AL = interleave value (XT only)
  4452.     ES:BX = 512-byte format buffer (see AH=05h)
  4453.     CH = cylinder number (bits 8,9 in high bits of CL)
  4454.     CL = sector number
  4455.     DH = head
  4456.     DL = drive
  4457. Return: AH = status code (see AH=01h)
  4458. Note:    AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  4459.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  4460. SeeAlso: AH=05h"FIXED",AH=06h"FIXED",AH=1Ah
  4461. ----------1307-------------------------------
  4462. INT 13 - Future Domain SCSI BIOS - FORMAT DRIVE
  4463.     AH = 07h
  4464.     AL = interleave (0 = default, 1 = consecutive sectors, 
  4465.            2 - 255 = vendor unique)
  4466.     DL = hard drive ID
  4467. Return: CF set on error
  4468.     AH = status code (see AH=01h)
  4469. SeeAlso: AH=05h"SCSI",AH=06h"SCSI",AH=07h"FIXED"
  4470. ----------1308-------------------------------
  4471. INT 13 - DISK - GET DRIVE PARAMETERS (PC,XT286,CONV,PS,ESDI,SCSI)
  4472.     AH = 08h
  4473.     DL = drive (bit 7 set for hard disk)
  4474. Return: CF set on error
  4475.         AH = status (07h) (see AH=01h)
  4476.     CF clear if successful
  4477.         AH = 00h
  4478.         BL = drive type (AT/PS2 floppies only)
  4479.         01h 360K
  4480.         02h 1.2M
  4481.         03h 720K
  4482.         04h 1.44M
  4483.         06h ??? (checked by 386MAX v6.01)
  4484.         CH = low eight bits of maximum cylinder number
  4485.         CL = maximum sector number (bits 5-0)
  4486.          high two bits of maximum cylinder number (bits 7-6)
  4487.         DH = maximum head number
  4488.         DL = number of drives
  4489.         ES:DI -> drive parameter table (floppies only)
  4490. Notes:    may return successful even though specified drive is greater than the
  4491.       number of attached drives of that type (floppy/hard); check DL to
  4492.       ensure validity
  4493.     for systems predating the IBM AT, this call is only valid for hard
  4494.       disks, as it is implemented by the hard disk BIOS rather than the
  4495.       ROM BIOS
  4496.     Toshiba laptops with HardRAM return DL=02h when called with DL=80h,
  4497.       but fail on DL=81h.  The BIOS data at 40h:75h correctly reports 01h.
  4498. SeeAlso: AH=15h,INT 1E,INT 41
  4499. ----------1309-------------------------------
  4500. INT 13 - HARD DISK - INITIALIZE CONTROLLER WITH DRIVE PARAMETERS (AT,PS)
  4501.     AH = 09h
  4502.     DL = drive (80h for first, 81h for second)
  4503. Return: CF clear if successful
  4504.     CF set on error
  4505.     AH = status (see AH=01h)
  4506. Notes:    on the PC and XT, this function uses the parameter table pointed at by
  4507.       INT 41
  4508.     on the AT and later, this function uses the parameter table pointed at
  4509.       by INT 41 if DL=80h, and the parameter table pointed at by INT 46 if
  4510.       DL=81h
  4511. SeeAlso: INT 41,INT 46
  4512. ----------130A-------------------------------
  4513. INT 13 - HARD DISK - READ LONG SECTOR(S) (AT and later)
  4514.     AH = 0Ah
  4515.     AL = number of sectors
  4516.     CH = low eight bits of cylinder number
  4517.     CL = sector number (bits 5-0)
  4518.          high two bits of cylinder number (bits 7-6)
  4519.     DH = head number
  4520.     DL = drive number (80h = first, 81h = second)
  4521.     ES:BX -> data buffer
  4522. Return: CF clear if successful
  4523.     CF set on error
  4524.     AH = status (see AH=01h)
  4525.     AL = number of sectors transferred
  4526. Notes:    this function reads in four to seven bytes of error-correcting code
  4527.       along with each sector's worth of information
  4528.     data errors are not automatically corrected, and the read is aborted
  4529.       after the first sector with an ECC error
  4530.     used for diagnostics only on PS/2 systems
  4531. SeeAlso: AH=02h,AH=0Bh
  4532. ----------130B-------------------------------
  4533. INT 13 - HARD DISK - WRITE LONG SECTOR(S) (AT and later)
  4534.     AH = 0Bh
  4535.     AL = number of sectors
  4536.     CH = low eight bits of cylinder number
  4537.     CL = sector number (bits 5-0)
  4538.          high two bits of cylinder number (bits 7-6)
  4539.     DH = head number
  4540.     DL = drive number (80h = first, 81h = second)
  4541.     ES:BX -> data buffer
  4542. Return: CF clear if successful
  4543.     CF set on error
  4544.     AH = status (see AH=01h)
  4545.     AL = number of sectors transferred
  4546. Notes:    each sector's worth of data must be followed by four to seven bytes of
  4547.       error-correction information
  4548.     used for diagnostics only on PS/2 systems
  4549. SeeAlso: AH=03h,AH=0Ah
  4550. ----------130C-------------------------------
  4551. INT 13 - HARD DISK - SEEK TO CYLINDER
  4552.     AH = 0Ch
  4553.     CH = low eight bits of cylinder number
  4554.     CL = sector number (bits 5-0)
  4555.          high two bits of cylinder number (bits 7-6)
  4556.     DH = head number
  4557.     DL = drive number (80h = first, 81h = second hard disk)
  4558. Return: CF set on error
  4559.     CF clear if successful
  4560.     AH = status (see AH=01h)
  4561. SeeAlso: AH=00h,AH=02h,AH=0Ah
  4562. ----------130D-------------------------------
  4563. INT 13 - HARD DISK - RESET HARD DISKS
  4564.     AH = 0Dh
  4565.     DL = drive number (80h = first, 81h = second hard disk)
  4566. Return: CF set on error
  4567.     CF clear if successful
  4568.     AH = status (see AH=01h)
  4569. Notes:    reinitializes the hard disk controller, resets the specified drive's
  4570.       parameters, and recalibrates the drive's heads (seek to track 0)
  4571.     not for PS/2 ESDI drives
  4572. SeeAlso: AH=00h,INT 21/AH=0Dh
  4573. ----------130E-------------------------------
  4574. INT 13 - HARD DISK - READ SECTOR BUFFER (XT only)
  4575.     AH = 0Eh
  4576.     DL = drive number (80h = first, 81h = second hard disk)
  4577.     ES:BX -> buffer
  4578. Return: CF set on error
  4579.     CF clear if successful
  4580.     AH = status code (see AH=01h)
  4581. Notes:    transfers controller's sector buffer.  No data is read from the drive
  4582.     used for diagnostics only on PS/2 systems
  4583. SeeAlso: AH=0Ah
  4584. ----------130F-------------------------------
  4585. INT 13 - HARD DISK - WRITE SECTOR BUFFER (XT only)
  4586.     AH = 0Fh
  4587.     DL = drive number (80h = first, 81h = second hard disk)
  4588.     ES:BX -> buffer
  4589. Return: CF set on error
  4590.     CF clear if successful
  4591.     AH = status code (see AH=01h)
  4592. Notes:    does not write data to the drive
  4593.     should be called before formatting to initialize an XT-type
  4594.       controller's sector buffer
  4595.     used for diagnostics only on PS/2 systems
  4596. SeeAlso: AH=0Bh
  4597. ----------1310-------------------------------
  4598. INT 13 - HARD DISK - CHECK IF DRIVE READY
  4599.     AH = 10h
  4600.     DL = drive number (80h = first, 81h = second hard disk)
  4601. Return: CF set on error
  4602.     CF clear if successful
  4603.     AH = status (see AH=01h)
  4604. ----------1311-------------------------------
  4605. INT 13 - HARD DISK - RECALIBRATE DRIVE
  4606.     AH = 11h
  4607.     DL = drive number (80h = first, 81h = second hard disk)
  4608. Return:    CF set on error
  4609.     CF clear if successful
  4610.     AH = status (see AH=01h)
  4611. Note:    causes hard disk controller to seek the specified drive to cylinder 0
  4612. SeeAlso: AH=00h,AH=0Ch,AH=19h"FIXED DISK"
  4613. ----------1312-------------------------------
  4614. INT 13 - HARD DISK - CONTROLLER RAM DIAGNOSTIC (XT,PS)
  4615.     AH = 12h
  4616.     DL = drive number (80h = first, 81h = second hard disk)
  4617. Return: CF set on error
  4618.     CF clear if successful
  4619.     AH = status code (see AH=01h)
  4620. SeeAlso: AH=13h,AH=14h
  4621. ----------1312-------------------------------
  4622. INT 13 - Future Domain SCSI CONTROLLER - STOP SCSI DISK
  4623.     AH = 12h
  4624.     DL = hard drive ID
  4625. Return: CF set on error
  4626.     AH = status code (see AH=01h)
  4627. Notes:    available at least on the TMC-870 8-bit SCSI controller BIOS v6.0A
  4628.     if the given drive is a SCSI device, the SCSI Stop Unit command is sent
  4629.       and either "Disk prepared for shipping" or "Disk Stop command failed"
  4630.       is displayed
  4631. ----------1313-------------------------------
  4632. INT 13 - HARD DISK - DRIVE DIAGNOSTIC (XT,PS)
  4633.     AH = 13h
  4634.     DL = drive number (80h = first, 81h = second hard disk)
  4635. Return: CF set on error
  4636.     CF clear if successful
  4637.     AH = status code (see AH=01h)
  4638. SeeAlso: AH=12h,AH=14h
  4639. ----------1314-------------------------------
  4640. INT 13 - HARD DISK - CONTROLLER INTERNAL DIAGNOSTIC
  4641.     AH = 14h
  4642. Return: CF set on error
  4643.     CF clear if successful
  4644.     AH = status code (see AH=01h)
  4645. SeeAlso: AH=12h,AH=13h
  4646. ----------1315-------------------------------
  4647. INT 13 - DISK - GET DISK TYPE (XT 1/10/86 or later,XT286,AT,PS)
  4648.     AH = 15h
  4649.     DL = drive number (bit 7 set for hard disk)
  4650. Return:    CF clear if successful
  4651.         AH = type code
  4652.         00h no such drive
  4653.         01h floppy without change-line support
  4654.         02h floppy with change-line support
  4655.         03h hard disk
  4656.             CX:DX = number of 512-byte sectors
  4657.     CF set on error
  4658.         AH = status (see AH=01h)
  4659. SeeAlso: AH=08h,AH=16h,AH=17h,AH=19h"SCSI"
  4660. ----------1316-------------------------------
  4661. INT 13 - FLOPPY DISK - DETECT DISK CHANGE (XT 1/10/86 or later,XT286,AT,PS)
  4662.     AH = 16h
  4663.     DL = drive number
  4664. Return: CF clear if change line inactive
  4665.         AH = 00h (disk not changed)
  4666.     CF set if change line active
  4667.         AH = 06h change line active or not supported
  4668.            = 80h drive not ready or not present
  4669. Note:    call AH=15h first to determine whether the drive supports a change
  4670.       line
  4671. SeeAlso: AH=15h
  4672. ----------1317-------------------------------
  4673. INT 13 - FLOPPY DISK - SET DISK TYPE FOR FORMAT (AT,PS)
  4674.     AH = 17h
  4675.     AL = format type
  4676.         01h = 320/360K disk in 360K drive
  4677.         02h = 320/360K disk in 1.2M drive
  4678.         03h = 1.2M disk in 1.2M drive
  4679.         04h = 720K disk in 720K drive
  4680.     DL = drive number
  4681. Return: CF set on error
  4682.     CF clear if successful
  4683.     AH = status (see AH=01h)
  4684. Note:    this function does not handle 1.44M drives; use AH=18h instead
  4685. SeeAlso: AH=15h,AH=18h
  4686. ----------1318-------------------------------
  4687. INT 13 - DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS)
  4688.     AH = 18h
  4689.     DL = drive number
  4690.     CH = lower 8 bits of highest cylinder number (number of cylinders - 1)
  4691.     CL = sectors per track (bits 0-5)
  4692.          top 2 bits of highest cylinder number (bits 6,7)
  4693. Return: AH = status
  4694.         00h requested combination supported
  4695.         01h function not available
  4696.         0Ch not supported or drive type unknown
  4697.         80h there is no disk in the drive
  4698.     ES:DI -> 11-byte parameter table
  4699. SeeAlso: AH=05h,AH=07h,AH=17h
  4700. ----------1318-------------------------------
  4701. INT 13 - Future Domain SCSI BIOS - GET SCSI CONTROLLER INFORMATION
  4702.     AH = 18h
  4703.     DL = hard drive ID
  4704. Return: CF set on error
  4705.         AH = status code (see AH=01h)
  4706.     CF clear if successful
  4707.         AX = 4321h (magic number)
  4708.         CX = controller family code
  4709.         0203h TMC-1650/1660/1670/1680 (ROM 2.0)
  4710.             BH = number of exclusively ROM-controlled SCSI devices
  4711.             BL = canonical SCSI device number for specified drive
  4712.         040Ah TMC-820/830/840/850/860/870/875/880/885 (ROM <= 6.0A)
  4713.             BH = number of exclusively ROM-controlled SCSI devices
  4714.             BL = canonical SCSI device number for specified drive
  4715.         050Dh TMC-840/841/880/881 (ROM 5.2D)
  4716.             BH = number of exclusively ROM-controlled SCSI devices
  4717.             BL = canonical SCSI device number for specified drive
  4718.         0700h TMC-830/850/860/875/885 (ROM 7.0)
  4719.             DH = number of exclusively ROM-controlled SCSI devices
  4720.             DL = canonical SCSI device number for specified drive
  4721. Note:    also sets an internal flag (non-resettable) which prevents some
  4722.       controller messages from being displayed, allows writes to
  4723.       removable devices (use caution!), and enables the INT 13 interface
  4724.       for more than one drive (i.e. DL >= 81h) in at least some ROM
  4725.       versions
  4726. SeeAlso: AH=05h"SCSI",AH=1Bh"SCSI"
  4727. ----------1319-------------------------------
  4728. INT 13 - FIXED DISK - PARK HEADS (XT286,PS)
  4729.     AH = 19h
  4730.     DL = drive
  4731. Return: CF set on error
  4732.     AH = status (see AH=01h)
  4733. SeeAlso: AH=11h
  4734. ----------1319-------------------------------
  4735. INT 13 - Future Domain SCSI CONTROLLER - REINITIALIZE DRIVE
  4736.     AH = 19h
  4737.     DL = hard drive ID
  4738. Return: CF set on error
  4739.         AH = status code (see AH=01h)
  4740.     CF clear if successful
  4741.         AH = disk type (03h = fixed disk)
  4742.         CX:DX = number of 512-byte sectors
  4743. Notes:    sends SCSI Read Capacity command to get number of logical blocks and
  4744.       adjusts the result for 512-byte sectors
  4745.     displays either "Error in Read Capacity Command" or "nnn Bytes per
  4746.       sector" (nnn=256 or 512, the only sizes supported in the translation
  4747.       code)
  4748.     should probably be called when a removable device has its media changed
  4749.     returns the same values as AH=15h
  4750. SeeAlso: AH=15h,AH=1Ah
  4751. ----------131A-------------------------------
  4752. INT 13 - ESDI FIXED DISK - FORMAT UNIT (PS)
  4753.     AH = 1Ah
  4754.     AL = defect table count
  4755.     CL = format modifiers
  4756.         bit 4: generate periodic interrupt
  4757.         bit 3: perform surface analysis
  4758.         bit 2: update secondary defect map
  4759.         bit 1: ignore secondary defect map
  4760.         bit 0: ignore primary defect map
  4761.     DL = drive
  4762.     ES:BX -> defect table
  4763. Return: CF set on error
  4764.     AH = status (see AH=01h)
  4765. Note:    if periodic interrupt selected, INT 15/AH=0Fh is called after each
  4766.       cylinder is formatted
  4767. SeeAlso: AH=07h,INT 15/AH=0Fh
  4768. ----------131A-------------------------------
  4769. INT 13 - Future Domain SCSI CONTROLLER - GET SCSI PARTIAL MEDIUM CAPACITY
  4770.     AH = 1Ah
  4771.     CH = track (bits 8,9 in high bits of CL)
  4772.     CL = sector (01h to number of sectors/track for drive)
  4773.     DH = head
  4774.     DL = hard drive ID
  4775. Return: CF set on error
  4776.     AH = status code (see AH=01h)
  4777.     CX:DX = logical block number of last quickly-accessible block after
  4778.         given block
  4779. Note:    sends SCSI Read Capacity command with the PMI bit set to obtain the
  4780.       logical block address of the last block after which a substantial
  4781.       delay in data transfer will be encountered (usually the last block
  4782.       on the current cylinder).  No translation to 512 byte sectors is
  4783.       performed on the result if data is stored on the disk in other than
  4784.       512 byte sectors.
  4785. SeeAlso: AH=15h,AH=19h"SCSI"
  4786. ----------131B-------------------------------
  4787. INT 13 - ESDI FIXED DISK - GET MANUFACTURING HEADER
  4788.     AH = 1Bh
  4789.     AL = number of record
  4790.     DL = drive
  4791.     ES:BX -> buffer for manufacturing header (defect list)
  4792. Return: CF set on error
  4793.         AH = status
  4794. Note:    manufacturing header format (Defect Map Record format) can be found
  4795.       in IBM 70MB, 115MB Fixed Disk Drives Technical Reference
  4796. ----------131B-------------------------------
  4797. INT 13 - Future Domain SCSI CONTROLLER - GET POINTER TO SCSI DISK INFO BLOCK
  4798.     AH = 1Bh
  4799.     DL = hard drive ID
  4800. Return: CF set on error
  4801.         AH = status code (see AH=01h)
  4802.     CF clear if successful
  4803.         ES:BX -> SCSI disk information block
  4804. Note:    also sets a non-resettable flag which prevents some controller messages
  4805.       from being displayed
  4806. SeeAlso: AH=18h"SCSI",AH=1Ch"SCSI"
  4807.  
  4808. Format of SCSI disk information block:
  4809. Offset    Size    Description
  4810.  00h    BYTE    drive physical information
  4811.         bit 0: ???
  4812.         bit 1: device uses parity
  4813.         bit 2: 256 bytes per sector instead of 512
  4814.         bit 3: don't have capacity yet???
  4815.         bit 4: disk is removable
  4816.         bit 5: logical unit number is not present
  4817.  01h    WORD    translated number of cylinders
  4818.  03h    BYTE    translated number of heads
  4819.  04h    BYTE    translated number of sectors per track (17, 34, or 63)
  4820.  05h    BYTE    drive address
  4821.         bits 0-2: logical unit number
  4822.         bits 3-5: device number
  4823.  06h    BYTE    01h at initialization
  4824.  07h    BYTE    sense code byte 00h, or extended sense code byte 0Ch
  4825.  08h    BYTE    00h
  4826.  09h    BYTE    00h or extended sense code byte 02h (sense key)
  4827.  0Ah    BYTE    00h
  4828.  0Bh 10 BYTEs    copy of Command Descriptor Block (CDB)
  4829.  15h    DWORD    translated number of sectors on device
  4830. ----------131C-------------------------------
  4831. INT 13 - Future Domain SCSI CONTROLLER - GET POINTER TO FREE CONTROLLER RAM
  4832.     AH = 1Ch
  4833.     DL = hard drive ID (any valid SCSI hard disk)
  4834. Return: CF set on error
  4835.         AH = status code (see AH=01h)
  4836.     CF clear if successful
  4837.         ES:BX -> first byte of free RAM on controller
  4838. Notes:    the Future Domain TMC-870 contains 1024 bytes of RAM at offsets 1800h
  4839.       to 1BFFh on-bard the controller for storing drive information and
  4840.       controller status; ES:BX points to the first byte available for other
  4841.       uses
  4842.     ES contains the segment at which the controller resides; the
  4843.       controller's two memory-mapped I/O ports are at offsets 1C00h, 1E00h
  4844. SeeAlso: AH=1Bh"SCSI"
  4845. ----------131C0A-----------------------------
  4846. INT 13 - ESDI FIXED DISK - GET DEVICE CONFIGURATION
  4847.     AX = 1C0Ah
  4848.     DL = drive
  4849.     ES:BX -> buffer for device configuration (drive physical parameter)
  4850. Return: CF set on error
  4851.         AH = status
  4852. Note:    device configuration format can be found in IBM ESDI Fixed Disk Drive
  4853.       Adapter/A Technical Reference
  4854. ----------131C0B-----------------------------
  4855. INT 13 - ESDI FIXED DISK - GET ADAPTER CONFIGURATION
  4856.     AX = 1C0Bh
  4857.     ES:BX -> buffer for adapter configuration
  4858. Return: CF set on error
  4859.         AH = status
  4860. SeeAlso: AX=1C0Ch
  4861. ----------131C0C-----------------------------
  4862. INT 13 - ESDI FIXED DISK - GET POS INFORMATION
  4863.     AX = 1C0Ch
  4864.     ES:BX -> POS information
  4865. Return: CF set on error
  4866.         AH = status
  4867. SeeAlso: AX=1C0Bh
  4868. ----------131C0E-----------------------------
  4869. INT 13 - ESDI FIXED DISK - TRANSLATE RBA TO ABA
  4870.     AX = 1C0Eh
  4871.     CH = low 8 bits of cylinder number
  4872.     CL = sector number, high two bits of cylinder number in bits 6 and 7
  4873.     DH = head number
  4874.     DL = drive number
  4875.     ES:BX -> ABA number
  4876. Return: CF set on error
  4877.         AH = status
  4878. Note:    ABA (absolute block address) format can be found in IBM ESDI Adapter
  4879.       Technical Reference by using its Device Configuration Status Block
  4880. ----------131D-------------------------------
  4881. INT 13 - IBMCACHE.SYS - CACHE STATUS
  4882.     AH = 1Dh
  4883.     AL = subfunction
  4884.         01h get status record
  4885.         DL = drive???
  4886.         Return: ES:BX -> status record
  4887.             CF set on error
  4888.                 AH = error code
  4889.         02h set cache status
  4890.         ES:BX -> status record
  4891.         DL = drive???
  4892.         Return: CF set on error
  4893.  
  4894. Format of status record:
  4895. Offset    Size    Description
  4896.  00h    DWORD    total number of read requests
  4897.  04h    DWORD    total number of hits
  4898.  08h    DWORD    number of physical disk reads
  4899.  0Ch    DWORD    total number of sectors requested by physical disk reads
  4900.  10h  6 bytes    ???
  4901.  16h    DWORD    pointer to start of error list
  4902.  1Ah    DWORD    pointer to end of error list
  4903.  1Eh    WORD    ???
  4904.  20h    BYTE    using extended memory if nonzero
  4905.  21h    BYTE    ???
  4906.  22h  4 BYTEs    ASCII version number
  4907.  26h    WORD    cache size in K
  4908.  28h    WORD    sectors per page
  4909.  
  4910. Format of error list:
  4911. Offset    Size    Description
  4912.  00h    DWORD    relative block address of bad page
  4913.  04h    BYTE    drive
  4914.  05h    BYTE    sector bit-map
  4915.  06h    WORD    next error
  4916. ----------1320-------------------------------
  4917. INT 13 - DISK - ??? (Western Digital "Super BIOS")
  4918.     AH = 20h
  4919.     ???
  4920. Return: ???
  4921. Note:    seems to return some kind of status
  4922. ----------1320FF-----------------------------
  4923. INT 13 - QCACHE - DISMOUNT
  4924.     AX = 20FFh
  4925. Return: ???
  4926. ----------1321-------------------------------
  4927. INT 13 - QCACHE - FLUSH CACHE
  4928.     AH = 21h
  4929. Return: ???
  4930. SeeAlso: AH=25h,AH=2Eh
  4931. ----------1322-------------------------------
  4932. INT 13 - QCACHE - ENABLE/DISABLE CACHE
  4933.     AH = 22h
  4934.     AL = 00h disable cache
  4935.          01h enable cache
  4936. ----------1324-------------------------------
  4937. INT 13 - QCACHE - SET SECTORS
  4938.     AH = 24h
  4939.     BX = number of sectors
  4940. Return: ???
  4941. ----------1325-------------------------------
  4942. INT 13 - QCACHE - SET FLUSH INTERVAL
  4943.     AH = 25h
  4944.     BC = interval
  4945. Return: ???
  4946. SeeAlso: AH=21h,AH=2Eh
  4947. ----------1327--BX0000-----------------------
  4948. INT 13 - QCACHE - INSTALLATION CHECK
  4949.     AH = 27h
  4950.     BX = 0000h
  4951. Return: BX nonzero if installed
  4952. ----------132A-------------------------------
  4953. INT 13 - QCACHE - SET BUFFER SIZE
  4954.     AH = 2Ah
  4955.     AL = buffer size
  4956. Return: ???
  4957. ----------132C-------------------------------
  4958. INT 13 - QCACHE - SET BUFFERED WRITES
  4959.     AH = 2Ch
  4960.     AL = state
  4961.         00h disable
  4962.         01h enable
  4963. Return: ???
  4964. SeeAlso: AH=2Dh
  4965. ----------132D-------------------------------
  4966. INT 13 - QCACHE - SET BUFFERED READ
  4967.     AH = 2Dh
  4968.     AL = state
  4969.         00h disable
  4970.         01h enable
  4971. Return: ???
  4972. SeeAlso: AH=2Ch
  4973. ----------132E-------------------------------
  4974. INT 13 - QCACHE - SET FLUSH COUNT
  4975.     AH = 2Eh
  4976.     BX = flush count
  4977. Return: ???
  4978. SeeAlso: AH=21h,AH=25h
  4979. ----------1330-------------------------------
  4980. INT 13 - QCACHE - GET INFO
  4981.     AH = 30h
  4982.     AL = what to get
  4983.         00h system info
  4984.         01h drive info
  4985.     DS:DX -> buffer for info
  4986. Return: ???
  4987. ----------135504-----------------------------
  4988. INT 13 - Seagate - GET CONTROLLER TYPE???
  4989.     AX = 5504h
  4990.     DX = drive (bit 7 set for hard disk)
  4991. Return: CF clear if successful
  4992.         AX = 4321h,4322h if Seagate controller
  4993.     CF set on error
  4994. SeeAlso: AX=5505h,AX=5514h
  4995. ----------135505-----------------------------
  4996. INT 13 - Seagate - PARK HEADS???
  4997.     AX = 5505h
  4998.     DX = drive (bit 7 set for hard disk)
  4999. Return: CF clear if successful
  5000.     CF set on error
  5001. SeeAlso: AX=5504h,AX=5515h
  5002. ----------135514-----------------------------
  5003. INT 13 - Seagate - ???
  5004.     AX = 5514h
  5005.     DX = drive (bit 7 set for hard disk)
  5006. Return: CF clear if successful
  5007.     CF set on error
  5008.     AX = return value (FEBEh,FEBFh,FEDAh,FEDBh)
  5009. SeeAlso: AX=5504h,AX=5515h
  5010. ----------135515-----------------------------
  5011. INT 13 - Seagate - PARK HEADS???
  5012.     AX = 5515h
  5013.     DX = drive (bit 7 set for hard disk)
  5014. Return: CF clear if successful
  5015.     CF set on error
  5016. Note:    appears to be identical to AX=5505h
  5017. SeeAlso: AX=5504h,AX=5505h
  5018. ----------1370-------------------------------
  5019. INT 13 - Priam EDVR.SYS DISK PARTITIONING SOFTWARE???
  5020.     AH = 70h
  5021.     ???
  5022. Return: ???
  5023. Note:    Priam's EDISK.EXE (FDISK replacement) and EFMT.EXE (low-level
  5024.       formatting program) make this call, presumably to EDVR.SYS (the
  5025.       partitioning driver)
  5026. SeeAlso: AH=ADh
  5027. ----------1375-------------------------------
  5028. INT 13 - ???
  5029.     AH = 75h
  5030.     ???
  5031. Return: AH = ???
  5032.     ???
  5033. Note:    intercepted by PC-Cache (v5.1 only)
  5034. ----------1376-------------------------------
  5035. INT 13 - ???
  5036.     AH = 76h
  5037.     ???
  5038. Return: AH = ???
  5039.     ???
  5040. Note:    intercepted by PC-Cache (v5.1 only)
  5041. ----------137B00-----------------------------
  5042. INT 13 - NOW! - GET INFORMATION
  5043.     AX = 7B00h
  5044.     CX:DX -> 1F8h-byte buffer for information record (see below)
  5045. Return: AX = 0000h
  5046.     BX = segment of main resident code
  5047.     ES = ???
  5048. Program: NOW! is a disk cache by Vertisoft Systems, Inc.
  5049. SeeAlso: AX=7B02h,AH=EFh
  5050.  
  5051. Format of information record:
  5052. Offset    Size    Description
  5053.  00h 80 BYTEs    name of directory from which NOW! was started
  5054.  50h 424 BYTEs    ???
  5055.  81h  ? BYTEs    array of bytes for ???
  5056.  F7h 250 BYTEs    array of 25 entries, one per drive???
  5057.     Offset    Size    Description
  5058.      00h  2 BYTEs    ???
  5059.      02h    WORD    ???
  5060.      04h    WORD    ???
  5061.      06h  4 BYTEs    ???
  5062. 1F1h  7 BYTEs    ???
  5063. ----------137B01-----------------------------
  5064. INT 13 - NOW! - ???
  5065.     AX = 7B01h
  5066. Return: DX = segment of ???
  5067. SeeAlso: AX=7B00h
  5068. ----------137B02-----------------------------
  5069. INT 13 - NOW! - SET INFORMATION
  5070.     AX = 7B02h
  5071.     BX = segment of ??? (10h above a PSP)
  5072.     CX:DX -> 1F8h-byte information record (see AX=7B00h)
  5073. Return: ???
  5074. Program: NOW! is a disk cache by Vertisoft Systems, Inc.
  5075. Note:    NOW! grabs the INT 24h value from the PSP reached via the segment in
  5076.       BX
  5077. SeeAlso: AX=7B00h
  5078. ----------137B03-----------------------------
  5079. INT 13 - NOW! - ???
  5080.     AX = 7B03h
  5081.     ???
  5082. Return: ???
  5083. SeeAlso: AX=7B00h,AX=7B04h
  5084. ----------137B04-----------------------------
  5085. INT 13 - NOW! - ???
  5086.     AX = 7B04h
  5087.     ???
  5088. Return: ???
  5089. SeeAlso: AX=7B03h
  5090. ----------137B05-----------------------------
  5091. INT 13 - NOW! - GET ???
  5092.     AX = 7B05h
  5093.     BX:AX = number of physical accesses???
  5094.     DX:CX = total disk accesses???
  5095. SeeAlso: AX=7B00h,AX=7B06h
  5096. ----------137B06-----------------------------
  5097. INT 13 - NOW! - GET ???
  5098.     AX = 7B06h
  5099.     BX = ???
  5100. Return: AX = 0000h
  5101.     BX = ???
  5102. SeeAlso: AX=7B05h,AX=7B07h
  5103. ----------137B07-----------------------------
  5104. INT 13 - NOW! - GET ???
  5105.     AX = 7B07h
  5106. Return: AX = ???
  5107.     BX = ???
  5108.     CX = ???
  5109.     DX = ???
  5110. SeeAlso: AX=7B06h
  5111. ----------137B08-----------------------------
  5112. INT 13 - NOW! - ???
  5113.     AX = 7B08h
  5114.     CX = ??? (default 00h)
  5115. Return: ???
  5116. SeeAlso: AX=7B00h
  5117. ----------1380--CX6572-----------------------
  5118. INT 13 - FAST! - API
  5119.     AH = 80h
  5120.     CX = 6572h
  5121.     DX = 1970h
  5122.     ES:BX -> data structure (see below)
  5123.     AL = function
  5124.         01h ???
  5125.         04h ???
  5126.         05h ???
  5127.         06h installation check
  5128.         Return: AX = 1965h if installed
  5129.         07h ???
  5130.         09h ???
  5131.         0Ah ???
  5132.         0Bh ???
  5133.         0Ch set ??? flag
  5134.         0Dh clear ??? flag
  5135. Return: AH = 00h if successful (except function 06h)
  5136.  
  5137. Format of data structure:
  5138. Offset    Size    Description
  5139.  00h    DWORD    pointer to 19-byte signature string 
  5140.         13h 07h 06h 08h 11h 18h 0Fh 0Eh 02h 18h 13h 08h 0Bh 08h 01h 00h
  5141.           04h 08h 15h  (v4.04)
  5142.  04h    ???    ???
  5143. ----------1381--SI4358-----------------------
  5144. INT 13 - Super PC Kwik/PC-Cache 5.x - ???
  5145.     AH = 81h
  5146.     SI = 4358h
  5147.     ???
  5148. Return: ???
  5149. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5150.       Super PC Kwik, and thus support this call
  5151.     returns immediately in PC-Cache v5.x
  5152. ----------1382--SI4358-----------------------
  5153. INT 13 - Super PC Kwik/PC-Cache 5.x - ???
  5154.     AH = 82h
  5155.     SI = 4358h
  5156.     ???
  5157. Return: AL = ???
  5158. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5159.       Super PC Kwik, and thus support this call
  5160. SeeAlso: AH=84h
  5161. ----------1383--SI4358-----------------------
  5162. INT 13 - Super PC Kwik/PC-Cache 5.x - ???
  5163.     AH = 83h
  5164.     SI = 4358h
  5165.     AL = ???
  5166.     ES:BX -> ???
  5167.     ???
  5168. Return: ???
  5169. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5170.       Super PC Kwik, and thus support this call
  5171. SeeAlso: AH=85h
  5172. ----------1384--SI4358-----------------------
  5173. INT 13 - Super PC Kwik/PC-Cache 5.x - ???
  5174.     AH = 84h
  5175.     SI = 4358h
  5176.     AL = ???
  5177.     ???
  5178. Return: AL = ???
  5179. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5180.       Super PC Kwik, and thus support this call
  5181. SeeAlso: AH=82h
  5182. ----------1385--SI4358-----------------------
  5183. INT 13 - Super PC Kwik/PC-Cache 5.x - ???
  5184.     AH = 85h
  5185.     SI = 4358h
  5186.     AL = ???
  5187.     DL = ???
  5188.     ???
  5189. Return: ???
  5190. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5191.       Super PC Kwik, and thus support this call
  5192. SeeAlso: AH=83h
  5193. ----------1386--SI4358-----------------------
  5194. INT 13 - Qualitas Qcache v4.00 - ???
  5195.     AH = 86h
  5196.     SI = 4358h
  5197.     ???
  5198. Return: ???
  5199. ----------1387--SI4358-----------------------
  5200. INT 13 - Qualitas Qcache v4.00 - ???
  5201.     AH = 87h
  5202.     SI = 4358h
  5203.     ???
  5204. Return: ???
  5205. ----------1388--SI4358-----------------------
  5206. INT 13 - Qualitas Qcache v4.00 - ???
  5207.     AH = 88h
  5208.     SI = 4358h
  5209.     ???
  5210. Return: ???
  5211. ----------138EED-----------------------------
  5212. INT 13 - HyperDisk v4.01+ - ???
  5213.     AX = 8EEDh
  5214.     ???
  5215. Return: ???
  5216. Note:    HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  5217. SeeAlso: AX=8EEEh,AX=8EEFh,AH=EEh,INT 2F/AH=DFh
  5218. ----------138EEE-----------------------------
  5219. INT 13 - HyperDisk v4.01+ - ???
  5220.     AX = 8EEEh
  5221. Return: CF set
  5222.     AX = CS of HyperDisk resident code
  5223.     ???
  5224. Note:    identical to AX=8EEFh in HYPERDKX v4.21-4.30
  5225. SeeAlso: AX=8EEDh,AX=8EEFh,AH=EEh
  5226. ----------138EEF-----------------------------
  5227. INT 13 - HyperDisk v4.01+ - ???
  5228.     AX = 8EEFh
  5229. Return: CF set
  5230.     AX = CS of HyperDisk resident code
  5231.     ???
  5232. Note:    identical to AX=8EEEh in HYPERDKX v4.21-4.30
  5233. SeeAlso: AX=8EEDh,AX=8EEEh,AH=EEh
  5234. ----------13A0--SI4358-----------------------
  5235. INT 13 - Super PC Kwik - GET RESIDENT CODE SEGMENT
  5236.     AH = A0h
  5237.     SI = 4358h
  5238. Return: AX = segment of resident code
  5239. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5240.       Super PC Kwik, and thus support this call
  5241. SeeAlso: INT 16/AX=FFA5h/CX=1111h
  5242. ----------13A1--SI4358-----------------------
  5243. INT 13 - Super PC Kwik - FLUSH CACHE
  5244.     AH = A1h
  5245.     SI = 4358h
  5246. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5247.       Super PC Kwik, and thus support this call
  5248. SeeAlso: INT 16/AX=FFA5h/CX=FFFFh
  5249. ----------13A2--SI4358-----------------------
  5250. INT 13 - Super PC Kwik - ???
  5251.     AH = A2h
  5252.     SI = 4358h
  5253.     ???
  5254. Return: ???
  5255. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5256.       Super PC Kwik, and thus support this call
  5257. ----------13A5-------------------------------
  5258. INT 13 C - Super PC Kwik - ???
  5259.     AH = A5h
  5260.     SI = ???
  5261. Return: AX = ???
  5262.     SI = ???
  5263. Notes:    called when a program terminates but stays resident (see INT 21/AH=31h)
  5264.     this call is not supported by Qualitas Qcache 4.00
  5265. ----------13AA--SI4358-----------------------
  5266. INT 13 - Qualitas Qcache v4.00 - ???
  5267.     AH = AAh
  5268.     SI = 4358h
  5269.     ???
  5270. Return: ???
  5271. ----------13AB--SI4358-----------------------
  5272. INT 13 - Qualitas Qcache v4.00 - ???
  5273.     AH = ABh
  5274.     SI = 4358h
  5275.     ???
  5276. Return: ???
  5277. ----------13AC--SI4358-----------------------
  5278. INT 13 - Qualitas Qcache v4.00 - ???
  5279.     AH = ACh
  5280.     SI = 4358h
  5281.     ???
  5282. Return: ???
  5283. ----------13AD-------------------------------
  5284. INT 13 - Priam HARD DISK CONTROLLER???
  5285.     AH = ADh
  5286.     ???
  5287. Return: ???
  5288. Note:    this call is made from Priam's EFMT.EXE (low-level formatter), probably
  5289.       to check the ROM type on the controller for their hard disk kits
  5290. SeeAlso: AH=70h
  5291. ----------13AD--SI4358-----------------------
  5292. INT 13 - Qualitas Qcache v4.00 - ???
  5293.     AH = ADh
  5294.     SI = 4358h
  5295.     ???
  5296. Return: ???
  5297. ----------13B0--SI4358-----------------------
  5298. INT 13 - Super PC Kwik - ???
  5299.     AH = B0h
  5300.     SI = 4358h
  5301.     ???
  5302. Return: ???
  5303. Note:    PC Tools PC-Cache 5.x is an OEM version of Super PC Kwik, and thus
  5304.       supports this call; Qualitas Qcache does not support it
  5305. ----------13EE-------------------------------
  5306. INT 13 - SWBIOS - SET 1024 CYLINDER FLAG
  5307.     AH = EEh
  5308.     DL = drive number (80h, 81h)
  5309. Return: CF clear
  5310.        AH = 00h
  5311. Notes:    the following INT 13 call will interpret the cylinder number as 1024
  5312.       less than the desired cylinder
  5313.     flag cleared by all INT 13 calls except AH=EEh
  5314.     SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports
  5315.       these calls
  5316.     also supported by HyperDisk v4.01+ and PC-Cache v5.5+, in order to allow
  5317.       caching of drives using SWBIOS to access more than 1024 cylinders
  5318. SeeAlso: AH=F9h,AH=FEh,INT 16/AX=FFA5h/CX=1111h,INT 2F/AH=DFh
  5319. ----------13EF-------------------------------
  5320. INT 13 - NOW! - ???
  5321.     AH = EFh
  5322.     CX = ???
  5323.     DL = ???
  5324.     ???
  5325. Return: ???
  5326. SeeAlso: AX=7B00h
  5327. ----------13F9-------------------------------
  5328. INT 13 - SWBIOS - INSTALLATION CHECK
  5329.     AH = F9h
  5330.     DL = drive number (80h,81h)
  5331. Return: CF clear 
  5332.         DX = configuration word
  5333.         bit 15 set if other SWBIOS extensions available
  5334.     CF set on error
  5335. Note:    SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports
  5336.       these calls
  5337. SeeAlso: AH=EEh
  5338. ----------13FA--DX5945-----------------------
  5339. INT 13 - PC Tools v8+ VSAFE, VWATCH - API
  5340.     AH = FAh
  5341.     DX = 5945h
  5342.     AL = function (00h-07h)
  5343. Return: varies by function
  5344. Note:    this API is identical to the ones on INT 16/AH=FAh and INT 21/AH=FAh,
  5345.       so it is listed in its entirety under INT 16/AX=FA00h and following
  5346. SeeAlso: INT 16/AX=FA00h
  5347. ----------13FE-------------------------------
  5348. INT 13 - SWBIOS - GET EXTENDED CYLINDER COUNT
  5349.     AH = FEh
  5350.     DL = drive number (80h, 81h)
  5351. Return: CF clear
  5352.     DX = number of cylinders beyond 1024 on drive
  5353. Notes:    standard INT 13/AH=08h will return a cylinder count truncated to 1024
  5354.     BIOS without this extension would return count modulo 1024
  5355.     SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports
  5356.       these calls
  5357. SeeAlso: AH=EEh
  5358. ----------14---------------------------------
  5359. INT 14 - SERIAL I/O- Digiboard DigiCHANNEL PC/X* Extender INT 14 (XAPCM232.SYS)
  5360. Note:    the installation check for this driver is to determine whether the
  5361.       "~DOSXAM~" character device exists
  5362. ----------1400-------------------------------
  5363. INT 14 - SERIAL - INITIALIZE PORT
  5364.     AH = 00h
  5365.     AL = port parameters
  5366.         bits 7-5 data rate (110,150,300,600,1200,2400,4800,9600 bps)
  5367.         bits 4-3 parity (00 or 10 = none, 01 = odd, 11 = even)
  5368.         bit 2    stop bits (set = 2, clear = 1)
  5369.         bits 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8)
  5370.     DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)
  5371. Return: AH = line status (see AH=03h)
  5372.         FFh if error on Digiboard XAPCM232.SYS
  5373.     AL = modem status (see AH=03h)
  5374. Notes:    default handler is at F000h:E739h in IBM PC and 100% compatible BIOSes
  5375.     since the PCjr supports a maximum of 4800 bps, attempting to set 9600
  5376.       bps will result in 4800 bps
  5377.     various network and serial-port drivers support the standard BIOS
  5378.       functions with interrupt-driven I/O instead of the BIOS's polled I/O
  5379. SeeAlso: AH=04h"SERIAL",AH=04h"MultiDOS",AH=05h"SERIAL",AX=8000h"ARTICOM"
  5380. SeeAlso: AH=81h"COMM-DRV",AH=82h"COURIERS",AH=8Ch
  5381. ----------1400-------------------------------
  5382. INT 14 - FOSSIL (Fido/Opus/Seadog Standard Interface Level) - INITIALIZE
  5383.     AH = 00h
  5384.     AL = initializing parameters
  5385.         7 - 6 - 5       4 - 3     2      1 - 0
  5386.         -BAUD RATE-       PARITY   STOP   WORD
  5387.                     BITS  LENGTH
  5388.         000 19200 bd   00 none  0: 1  00: 5
  5389.         001 38400 bd   01 odd   1: 2  01: 6
  5390.         010      300 bd   11 even      10: 7
  5391.         011      600 bd          11: 8
  5392.         100     1200 bd
  5393.         101     2400 bd
  5394.         110     4800 bd
  5395.         111     9600 bd (4800 on PCjr)
  5396.     DX = port number (0-3 or FFh if only performing non-I/O setup)
  5397. Return: AH = RS-232 status code bits
  5398.         0: RDA - input data is available in buffer
  5399.         1: OVRN - data has been lost
  5400.         5: THRE - room is available in output buffer
  5401.         6: TSRE - output buffer empty
  5402.     AL = modem status bits
  5403.         3: always 1
  5404.         7: DCD - carrier detect
  5405. SeeAlso: AH=05h"FOSSIL",AH=81h"COMM-DRV",AH=82h"COURIERS"
  5406. ----------1400-------------------------------
  5407. INT 14 - MBBIOS - INITIALIZE PORT
  5408.     AH = 00h
  5409.     AL = port parameters
  5410.         bits 7-5 data rate
  5411.             (normally 110,150,300,600,1200,2400,4800,9600 bps;
  5412.             9600,14400,19200,28800,38400,57600,115200,330400 bps
  5413.             if the high-speed option is set)
  5414.         bits 4-3 parity (00 or 10 = none, 01 = odd, 11 = even)
  5415.         bit 2    stop bits (set = 2, clear = 1)
  5416.         bits 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8)
  5417.     DX = port number
  5418. Return: AH = line status (see AH=03h)
  5419.     AL = modem status (see AH=03h)
  5420. Note:    MBBIOS was written by H. Roy Engehausen
  5421. SeeAlso: AH=04h"MBBIOS",AH=05h"MBBIOS"
  5422. ----------1401-------------------------------
  5423. INT 14 - SERIAL - WRITE CHARACTER TO PORT
  5424.     AH = 01h
  5425.     AL = character to write
  5426.     DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)
  5427. Return: AH bit 7 clear if successful
  5428.     AH bit 7 set on error
  5429.     AH bits 6-0 = port status (see AH=03h)
  5430. Note:    various network and serial-port drivers support the standard BIOS
  5431.       functions with interrupt-driven I/O instead of the BIOS's polled I/O
  5432. SeeAlso: AH=02h,AH=0Bh"FOSSIL",AX=8000h"ARTICOM",AH=89h
  5433. ----------1402-------------------------------
  5434. INT 14 - SERIAL - READ CHARACTER FROM PORT
  5435.     AH = 02h
  5436.     AL = 00h (ArtiCom)
  5437.     DX = port number (00h-03h (04h-43h for Digiboard XAPCM232.SYS))
  5438. Return: AH = line status (see AH=03h)
  5439.     AL = received character if AH bit 7 clear
  5440. Notes:    will timeout if DSR is not asserted, even if function 03h returns
  5441.       data ready
  5442.     various network and serial-port drivers support the standard BIOS
  5443.       functions with interrupt-driven I/O instead of the BIOS's polled I/O
  5444. SeeAlso: AH=01h,AH=02h"FOSSIL",AH=84h,AH=FCh
  5445. ----------1402-------------------------------
  5446. INT 14 - FOSSIL - RECEIVE CHARACTER WITH WAIT
  5447.     AH = 02h
  5448.     DX = port number (0-3)
  5449. Return: AL = character received
  5450.     AH = 00h
  5451. SeeAlso: AH=01h,AH=02h"SERIAL"
  5452. ----------1403-------------------------------
  5453. INT 14 - SERIAL - GET PORT STATUS
  5454.     AH = 03h
  5455.     AL = 00h (ArtiCom)
  5456.     DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)
  5457. Return: AH = line status
  5458.         bit 7: timeout
  5459.         6: transmit shift register empty
  5460.         5: transmit holding register empty
  5461.         4: break detected
  5462.         3: framing error
  5463.         2: parity error
  5464.         1: overrun error
  5465.         0: receive data ready
  5466.     AL = modem status
  5467.         bit 7: carrier detect
  5468.         6: ring indicator
  5469.         5: data set ready
  5470.         4: clear to send
  5471.         3: delta carrier detect
  5472.         2: trailing edge of ring indicator
  5473.         1: delta data set ready
  5474.         0: delta clear to send
  5475.     AX = 9E00h if disconnected (ArtiCom)
  5476. SeeAlso: AH=00h,AH=07h"MultiDOS",AX=8000h"ARTICOM",AH=81h"COURIERS",AX=FD02h
  5477. ----------1404-------------------------------
  5478. INT 14 - SERIAL I/O - EXTENDED INITIALIZE (CONVERTIBLE,PS)
  5479.     AH = 04h
  5480.     AL = break status
  5481.         00h if break
  5482.         01h if no break
  5483.     BH = parity
  5484.         00h no parity
  5485.         01h odd parity
  5486.         02h even parity
  5487.         03h stick parity odd
  5488.         04h stick parity even
  5489.     BL = number of stop bits
  5490.         00h one stop bit
  5491.         01h two stop bits (1.5 if 5 bit word length)
  5492.     CH = word length
  5493.         00h 5 bits
  5494.         01h 6 bits
  5495.         02h 7 bits
  5496.         03h 8 bits
  5497.     CL = bps rate
  5498.         00h 110
  5499.         01h 150
  5500.         02h 300
  5501.         03h 600
  5502.         04h 1200
  5503.         05h 2400
  5504.         06h 4800
  5505.         07h 9600
  5506.         08h 19200
  5507.     DX = port number
  5508. Return: AX = port status code (see AH=00h)
  5509. SeeAlso: AH=00h,AH=1Eh,AX=8000h"ARTICOM"
  5510. ----------1404-------------------------------
  5511. INT 14 - FOSSIL - INITIALIZE DRIVER
  5512.     AH = 04h
  5513.     DX = port number
  5514.     optionally BX=4F50h
  5515.            ES:CX -> byte to be set upon ^C
  5516. Return: AX = 1954h (if successful)
  5517.     BL = maximum function number supported (excluding 7Eh and above)
  5518.     BH = revision of FOSSIL supported
  5519.     DTR is raised
  5520. Note:    the word at offset 6 in the interrupt handler contains 1954h, and the
  5521.       following byte contains the maximum function number supported
  5522. SeeAlso: AH=05h"FOSSIL",AH=1Ch
  5523. ----------1404-------------------------------
  5524. INT 14 - MultiDOS Plus IODRV - INITIALIZE PORT
  5525.     AH = 04h
  5526. Return: port initialized; if Hayes-compatible modem, a connection has been
  5527.       established
  5528. Note:    the port number is stored at offset BEh in the Task Control Block
  5529.       (see INT 15/AH=13h"MultiDOS")
  5530. SeeAlso: AH=00h,AH=05h"MultiDOS",AH=20h"MultiDOS",INT 15/AH=13h"MultiDOS"
  5531. ----------1404-------------------------------
  5532. INT 14 - Digiboard DigiCHANNEL PC/X* - CHANGE BAUD RATE
  5533.     AH = 04h
  5534.     AL = initializing parameters
  5535.         bits 7-5 unused
  5536.         bits 4,3: parity (00 none, 01 odd, 11 even)
  5537.         bit 2: stop bits (0 = one, 1 = two)
  5538.         bits 1,0: data bits (00 = five, 01 = six, 10 = seven, 11 = eight)
  5539.     BX = baud rate
  5540.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5541. Return: AH = status
  5542.         00h successful
  5543.         FFh error
  5544. SeeAlso: AH=05h"Digiboard"
  5545. ----------1404-------------------------------
  5546. INT 14 - MBBIOS - INQUIRY
  5547.     AH = 04h
  5548. Return: AH = AAh
  5549.     AL = 55h
  5550. SeeAlso: AH=00h"MBBIOS",AH=09h"MBBIOS"
  5551. ----------1405-------------------------------
  5552. INT 14 - SERIAL I/O - EXTENDED COMMUNICATION PORT CONTROL (CONVERTIBLE,PS)
  5553.     AH = 05h
  5554.     AL = 00h read modem control register
  5555.           Return: BL = modem control register (see below)
  5556.               AH = status
  5557.     AL = 01h write modem control register
  5558.           BL = modem control register
  5559.           bit 0: data terminal ready
  5560.           bit 1: request to send
  5561.           bit 2: OUT1
  5562.           bit 3: OUT2
  5563.           bit 4: LOOP
  5564.           bits 5-7 reserved
  5565.           Return: AX = status
  5566.     DX = port number
  5567. Note:    also supported by ArtiCom
  5568. SeeAlso: AH=00h,AH=1Fh,AX=8000h"ARTICOM"
  5569. ----------1405-------------------------------
  5570. INT 14 - FOSSIL - DEINITIALIZE DRIVER
  5571.     AH = 05h
  5572.     DX = port number
  5573. Return: none
  5574.     DTR is not affected
  5575. SeeAlso: AH=00h,AH=04h"FOSSIL",AH=1Dh,AH=8Dh
  5576. ----------1405-------------------------------
  5577. INT 14 - MultiDOS Plus IODRV - READ CHARACTER FROM PORT
  5578.     AH = 05h
  5579.     AL = timeout in seconds (00h = never)
  5580. Return: AL = status
  5581.         00h successful
  5582.         AH = character read
  5583.         01h read error
  5584.         02h timed out
  5585.         other modem status (CTS, DSR) changed
  5586. Note:    the port number is stored at offset BEh in the Task Control Block
  5587. SeeAlso: AH=02h,AH=04h"MultiDOS",AH=06h"MultiDOS",AH=22h"MultiDOS"
  5588. SeeAlso: INT 15/AH=13h"MultiDOS"
  5589. ----------1405-------------------------------
  5590. INT 14 - Digiboard DigiCHANNEL PC/X* - CHANGE PROTOCOL
  5591.     AH = 05h
  5592.     AL = protocol
  5593.         bits 7-4 unused
  5594.         bit 3: RTS/CTS
  5595.         bit 2: DSR
  5596.         bits 1,0: XON/XOFF
  5597.     BH = new XOFF character (00h = current)
  5598.     BL = new XON character (00h = current)
  5599.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5600. Return: AH = status
  5601.         00h successful
  5602.         FFh error
  5603. SeeAlso: AH=04h"Digiboard"
  5604. ----------1405-------------------------------
  5605. INT 14 - MBBIOS - DROP DTR AND RTS
  5606.     AH = 05h
  5607.     DX = port number
  5608. Return: none
  5609. SeeAlso: AH=00h"MBBIOS",AH=06h"MBBIOS",AH=06h"FOSSIL"
  5610. ----------1406-------------------------------
  5611. INT 14 - FOSSIL - RAISE/LOWER DTR
  5612.     AH = 06h
  5613.     DX = port
  5614.     AL = DTR state to be set
  5615.         00h = lower
  5616.         01h = raise
  5617. SeeAlso: AH=05h"MBBIOS",AH=1Ah
  5618. ----------1406-------------------------------
  5619. INT 14 - MultiDOS Plus IODRV - WRITE CHARACTER TO PORT
  5620.     AH = 06h
  5621.     AL = character
  5622. Return: AL = status
  5623.         00h successful
  5624. Notes:    the port number is stored at offset BEh in the Task Control Block
  5625.     if output queue is full, the calling task is blocked until the
  5626.       character can be stored
  5627. SeeAlso: AH=01h,AH=04h"MultiDOS",AH=05h"MultiDOS",AH=21h"MultiDOS"
  5628. SeeAlso: INT 15/AH=13h"MultiDOS"
  5629. ----------1406-------------------------------
  5630. INT 14 - MBBIOS - RAISE DTR AND RTS
  5631.     AH = 06h
  5632.     DX = port number
  5633. Return: none
  5634. SeeAlso: AH=05h"MBBIOS",AH=07h"MBBIOS"
  5635. ----------1407-------------------------------
  5636. INT 14 - FOSSIL - RETURN TIMER TICK PARAMETERS
  5637.     AH = 07h
  5638. Return: AL = timer tick interrupt number
  5639.     AH = ticks per second on interrupt number in AL
  5640.     DX = approximate number of milliseconds per tick
  5641. SeeAlso: AH=16h
  5642. ----------1407-------------------------------
  5643. INT 14 - MultiDOS Plus IODRV - GET PORT STATUS
  5644.     AH = 07h
  5645. Return: CL = modem status (see AH=03h)
  5646.     CH = character at head of input queue (if any)
  5647.     DX = number of characters in input queue
  5648. Note:    the port number is stored at offset BEh in the Task Control Block
  5649. SeeAlso: AH=03h,AH=05h"MultiDOS",AH=08h"MultiDOS",AH=09h"MultiDOS"
  5650. SeeAlso: AH=23h"MultiDOS",INT 15/AH=13h"MultiDOS"
  5651. ----------1407-------------------------------
  5652. INT 14 - MBBIOS - SEND BREAK
  5653.     AH = 07h
  5654.     DX = port number
  5655. Return: none
  5656. SeeAlso: AH=06h"MBBIOS"
  5657. ----------1408-------------------------------
  5658. INT 14 - FOSSIL - FLUSH OUTPUT BUFFER WAITING TILL ALL OUTPUT IS DONE
  5659.     AH = 08h
  5660.     DX = port number
  5661. SeeAlso: AH=09h"FOSSIL"
  5662. ----------1408-------------------------------
  5663. INT 14 - MultiDOS Plus 4.0 IODRV - GET AND RESET PORT LINE STATUS
  5664.     AH = 08h
  5665. Return: AL = line status (see AH=03h)
  5666.     AH destroyed
  5667. Notes:    the port number is stored at offset BEh in the Task Control Block
  5668.     on every line status change, the line status is ORed with the line
  5669.       status accumulator; this function returns the accumulator and clears
  5670.       it
  5671. SeeAlso: AH=03h,AH=04h"MultiDOS",AH=07h"MultiDOS",INT 15/AH=13h"MultiDOS"
  5672. ----------1408-------------------------------
  5673. INT 14 - Digiboard DigiCHANNEL PC/X* - ALTERNATE STATUS CHECK
  5674.     AH = 08h
  5675.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5676. Return: AH = RS232 status bits (see AH=03h)
  5677.     ZF set if no characters queued
  5678.     ZF clear if character available
  5679.         AL = next character
  5680. SeeAlso: AH=03h,AH=09h"Digiboard"
  5681. ----------1408-------------------------------
  5682. INT 14 - MBBIOS - NON-DESTRUCTIVE READ
  5683.     AH = 08h
  5684.     DX = port number
  5685. Return: AL = character
  5686.     AH = status (see AH=02h)
  5687. SeeAlso: AH=0Bh"MBBIOS",AH=0Ch"FOSSIL"
  5688. ----------1409-------------------------------
  5689. INT 14 - FOSSIL - PURGE OUTPUT BUFFER THROWING AWAY ALL PENDING OUTPUT
  5690.     AH = 09h
  5691.     DX = port number
  5692. SeeAlso: AH=08h"FOSSIL",AH=0Ah"FOSSIL",AH=88h
  5693. ----------1409-------------------------------
  5694. INT 14 - MultiDOS Plus IODRV - RESET PORT STATUS
  5695.     AH = 09h
  5696. Return: modem status byte cleared
  5697. Note:    the port number is stored at offset BEh in the Task Control Block
  5698. SeeAlso: AH=04h"MultiDOS",AH=07h"MultiDOS",INT 15/AH=13h"MultiDOS"
  5699. ----------1409-------------------------------
  5700. INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR BUFFERS
  5701.     AH = 09h
  5702.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5703. Return: AH = status
  5704.         00h successful
  5705.         FFh error
  5706. SeeAlso: AH=08h"Digiboard",AH=0Ah"Digiboard",AH=10h"Digiboard"
  5707. ----------1409-------------------------------
  5708. INT 14 - MBBIOS - GET/SET OPTIONS
  5709.     AH = 09h
  5710.     AL = option byte
  5711.         00000001b - Transmit Buffering Enabled
  5712.         00000101b - Hardware Handshaking Enabled
  5713.         00100000b - High Speed Option Enabled
  5714.     DX = port number???
  5715. Return: AL = old option byte
  5716. SeeAlso: AH=04h"MBBIOS",AH=10h"FOSSIL"
  5717. ----------140A-------------------------------
  5718. INT 14 - FOSSIL - PURGE INPUT BUFFER THROWING AWAY ALL PENDING INPUT
  5719.     AH = 0Ah
  5720.     DX = port number
  5721. SeeAlso: AH=09h"FOSSIL",AH=85h
  5722. ----------140A-------------------------------
  5723. INT 14 - Digiboard DigiCHANNEL PC/X* - INPUT QUEUE CHECK
  5724.     AH = 0Ah
  5725.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5726. Return: AX = number of characters available in buffer
  5727. SeeAlso: AH=09h"Digiboard",AH=0Dh"Digiboard"
  5728. ----------140A-------------------------------
  5729. INT 14 - MBBIOS - WRITE BUFFER
  5730.     AH = 0Ah
  5731.     CX = count
  5732.     ES:DI -> buffer
  5733. Return: AX = status (see AH=03h)
  5734.     DI = is updated
  5735.     CX = unsent character count
  5736. SeeAlso: AH=0Bh"MBBIOS",AH=19h"FOSSIL"
  5737. ----------140B-------------------------------
  5738. INT 14 - FOSSIL - TRANSMIT NO WAIT
  5739.     AH = 0Bh
  5740.     AL = character
  5741.     DX = port number
  5742. Return: AX = 0000h character not accepted
  5743.        = 0001h character accepted
  5744. SeeAlso: AH=01h
  5745. ----------140B-------------------------------
  5746. INT 14 - MBBIOS - READ BUFFER
  5747.     AH = 0Bh
  5748.     CX = size of buffer
  5749.     ES:DI -> buffer
  5750. Return: AH = LSR
  5751.     AL = MSR
  5752.     CX = count of characters
  5753.     DI = is updated
  5754. SeeAlso: AH=08h"MBBIOS",AH=0Ah"MBBIOS",AH=18h"FOSSIL"
  5755. ----------140C-------------------------------
  5756. INT 14 - FOSSIL - NON-DESTRUCTIVE READ AHEAD
  5757.     AH = 0Ch
  5758.     DX = port number
  5759. Return: AX = FFFFh character not available
  5760.     AX = 00xxh character xx available
  5761. SeeAlso: AH=08h"MBBIOS",AH=20h"FOSSIL"
  5762. ----------140D-------------------------------
  5763. INT 14 - FOSSIL - KEYBOARD READ WITHOUT WAIT
  5764.     AH = 0Dh
  5765. Return: AX = FFFFh character not available
  5766.        = xxyyh standard IBM-style scan code
  5767. SeeAlso: AH=0Eh
  5768. ----------140D-------------------------------
  5769. INT 14 - Digiboard DigiCHANNEL PC/X* - GET POINTER TO CH_KEY_RDY FLAG
  5770.     AH = 0Dh
  5771.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5772. Return: ES:BX -> CH_KEY_RDY flag
  5773. SeeAlso: AH=0Ah"Digiboard"
  5774.  
  5775. Values for CH_KEY_RDY flag:
  5776.  00h    receive buffer empty
  5777.  FFh    characters available
  5778. ----------140E-------------------------------
  5779. INT 14 - FOSSIL - KEYBOARD READ WITH WAIT
  5780.     AH = 0Eh
  5781. Return: AX = xxyyh standard IBM-style scan code
  5782. SeeAlso: AH=0Dh"FOSSIL"
  5783. ----------140E-------------------------------
  5784. INT 14 - Digiboard DigiCHANNEL PC/X* - WRITE STRING
  5785.     AH = 0EH
  5786.     CX = number of characters to write
  5787.     ES:BX -> string
  5788.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5789. Return: AX = number of characters actually written
  5790.     ZF clear if successful
  5791.     ZF set on error
  5792. SeeAlso: AH=0Fh"Digiboard"
  5793. ----------140F-------------------------------
  5794. INT 14 - FOSSIL - ENABLE/DISABLE FLOW CONTROL
  5795.     AH = 0Fh
  5796.     AL = bit mask describing flow control requested
  5797.         0: xon/xoff on transmit (watch for xoff while sending)
  5798.         1: CTS/RTS (CTS on transmit/RTS on receive)
  5799.         2: reserved
  5800.         3: xon/xoff on receive (send xoff when buffer near full)
  5801.         4-7: all 1
  5802.     DX = port number
  5803. SeeAlso: AH=09h"MBBIOS",AH=10h"FOSSIL"
  5804. ----------140F-------------------------------
  5805. INT 14 - Digiboard DigiCHANNEL PC/X* - READ STRING
  5806.     AH = 0Fh
  5807.     CX = number of characters to read
  5808.     ES:BX -> buffer
  5809.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5810. Return: AX = number of characters read
  5811.     ZF clear if successful
  5812.     ZF set on error (line status or wrong number of characters)
  5813. SeeAlso: AH=0Eh"Digiboard"
  5814. ----------1410-------------------------------
  5815. INT 14 - FOSSIL - EXTENDED ^C/^K CHECKING AND TRANSMIT ON/OFF
  5816.     AH = 10h
  5817.     AL = bit mask
  5818.         0: enable/disable ^C/^K checking
  5819.         1: enable/disable the transmitter
  5820.     DX = port number
  5821. SeeAlso: AH=0Fh"FOSSIL"
  5822. ----------1410-------------------------------
  5823. INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR RECEIVE BUFFER
  5824.     AH = 10h
  5825.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5826. Return: AH = status
  5827.         00h successful
  5828.         FFh error
  5829. SeeAlso: AH=09h"Digiboard",AH=11h"Digiboard"
  5830. ----------1411-------------------------------
  5831. INT 14 - FOSSIL - SET CURRENT CURSOR LOCATION
  5832.     AH = 11h
  5833.     DH = row
  5834.     DL = column
  5835. Note:    this is the same as INT 10/AH=02h
  5836. SeeAlso: AH=12h"FOSSIL"
  5837. ----------1411-------------------------------
  5838. INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR TRANSMIT BUFFER
  5839.     AH = 11h
  5840.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5841. Return: AH = status
  5842.         00h successful
  5843.         FFh error
  5844. SeeAlso: AH=09h"Digiboard",AH=10h"Digiboard"
  5845. ----------1412-------------------------------
  5846. INT 14 - FOSSIL - READ CURRENT CURSOR LOCATION
  5847.     AH = 12h
  5848. Return: DH = row
  5849.     DL = column
  5850. Note:    this is the same as INT 10/AH=03h
  5851. SeeAlso: AH=11h"FOSSIL"
  5852. ----------1412-------------------------------
  5853. INT 14 - Digiboard DigiCHANNEL PC/X* - GET TRANSMIT BUFFER FREE SPACE
  5854.     AH = 12h
  5855.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5856. Return: AX = number of bytes free
  5857. SeeAlso: AH=0Ah"Digiboard"
  5858. ----------1413-------------------------------
  5859. INT 14 - FOSSIL - SINGLE CHARACTER ANSI WRITE TO SCREEN
  5860.     AH = 13h
  5861.     AL = character
  5862. Note:    should not be called if it is unsafe to call DOS
  5863. SeeAlso: AH=15h
  5864. ----------1414-------------------------------
  5865. INT 14 - FOSSIL - ENABLE OR DISABLE WATCHDOG PROCESSING
  5866.     AH = 14h
  5867.     AL = 01h enable watchdog
  5868.          00h disable watchdog
  5869.     DX = port number
  5870. ----------1415-------------------------------
  5871. INT 14 - FOSSIL - WRITE CHARACTER TO SCREEN USING BIOS SUPPORT ROUTINES
  5872.     AH = 15h
  5873.     AL = character
  5874. SeeAlso: AH=13h
  5875. ----------1416-------------------------------
  5876. INT 14 - FOSSIL - INSERT/DELETE FUNCTION FROM TIMER TICK CHAIN
  5877.     AH = 16h
  5878.     AL = function
  5879.         00h = delete
  5880.         01h = add
  5881.     ES:DX -> routine to call
  5882. Return: AX = status
  5883.         0000h successful
  5884.         0001h unsuccessful
  5885. SeeAlso: AH=07h"FOSSIL"
  5886. ----------1416-------------------------------
  5887. INT 14 - Digiboard DigiCHANNEL PC/X* - CCB COMMAND
  5888.     AH = 16h
  5889.     AL = CCB command number (see below)
  5890.     BL = byte 2
  5891.     BH = byte 3
  5892.     CL = byte 1 (for all channel functions except 4Eh and 4Fh)
  5893.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5894. Return: AH = status
  5895.         00h successful
  5896.         FFh error
  5897. SeeAlso: AH=18h"Digiboard"
  5898.  
  5899. Values for CCB command number:
  5900.  40h Set Receive Mid Water Mark
  5901.  41h Set Receive High Water Mark
  5902.  42h Flush Receive Buffer
  5903.  43h Flush Transmit Buffer
  5904.  44h Transmit Pause
  5905.  45h Transmit Resume
  5906.  46h Set Interrupt to Host Mask
  5907.  47h Set Baud, Data, Stop and Parity
  5908.  48h Send Break
  5909.  49h Set Modem Lines
  5910.  4Ah Set Break Count
  5911.  4Bh Set Handshake
  5912.  4Ch Set Xon/Xoff Characters
  5913.  4Dh Set Transmit Mid Water Mark
  5914.  4Eh IRQ Polling Timer to Host
  5915.  4Fh Buffer Set All
  5916.  50h Port On
  5917.  51h Port Off
  5918.  52h Receive Pause
  5919.  53h Special Character Interrupt
  5920.  54h RS-422 Enable
  5921. ----------1417-------------------------------
  5922. INT 14 - FOSSIL - REBOOT SYSTEM
  5923.     AH = 17h
  5924.     AL = method
  5925.         00h = cold boot
  5926.         01h = warm boot
  5927. SeeAlso: INT 19
  5928. ----------1418-------------------------------
  5929. INT 14 - FOSSIL - READ BLOCK
  5930.     AH = 18h
  5931.     CX = maximum number of characters to transfer
  5932.     DX = port number
  5933.     ES:DI -> user buffer
  5934. Return: AX = number of characters transferred
  5935. SeeAlso: AH=19h"FOSSIL",AH=83h"COURIERS",AX=FF02h,INT 6B/AX=0100h
  5936. ----------1418-------------------------------
  5937. INT 14 - Digiboard DigiCHANNEL PC/X* - SEND BIOS COMMAND
  5938.     AH = 18h
  5939.     ES:BX -> 16-byte command string
  5940.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5941. Return: AH = status
  5942.         00h successful
  5943.         80h timeout
  5944.     AL = mailbox status
  5945.         00h no errors
  5946.         8Xh BIOS error
  5947.     ES:BX buffer filled in with mailbox string
  5948.     ZF clear if no errors
  5949.     ZF set if either status byte contains an error code
  5950. SeeAlso: AH=16h"Digiboard"
  5951. ----------1419-------------------------------
  5952. INT 14 - FOSSIL - WRITE BLOCK
  5953.     AH = 19h
  5954.     CX = maximum number of characters to transfer
  5955.     DX = port number
  5956.     ES:DI -> user buffer
  5957. Return: AX = number of characters transferred
  5958. SeeAlso: AH=18h"FOSSIL",AH=86h,INT 6B/AX=0000h
  5959. ----------1419-------------------------------
  5960. INT 14 - Digiboard DigiCHANNEL PC/X* - SPECIAL CHARACTER INTERRUPT
  5961.     AH = 19h
  5962.     BL = flag
  5963.         00h disable special character interrupt
  5964.         FFh enable interrupt
  5965.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5966. Return: AH = status
  5967.         00h successful    
  5968.         FFh failed
  5969. SeeAlso: AH=1Ah"Digiboard"
  5970. ----------141A-------------------------------
  5971. INT 14 - FOSSIL - BREAK BEGIN OR END
  5972.     AH = 1Ah
  5973.     AL = 00h stop sending 'break'
  5974.          01h start sending 'break'
  5975.     DX = port number
  5976. SeeAlso: AH=06h"FOSSIL",AH=8Ah,AH=FAh
  5977. ----------141A-------------------------------
  5978. INT 14 - Digiboard DigiCHANNEL PC/X - SPECIAL CHARACTER FLAG/COUNTER
  5979.     AH = 1Ah
  5980.     BX = subfunction
  5981.         00h return pointer to special character flag byte
  5982.         01h return pointer to special character counter word
  5983.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5984. Return: ES:BX -> special character flag or counter
  5985. Notes:    flag is FFh if one or more special characters are in the receive
  5986.       buffer; it is 00h and the counter is invalid if no special characters
  5987.       are in the receive buffer
  5988.     counter (if valid) contains the number of characters in the receive
  5989.       buffer up to and including the last-received special character
  5990. ----------141B-------------------------------
  5991. INT 14 - FOSSIL - RETURN INFORMATION ABOUT THE DRIVER
  5992.     AH = 1Bh
  5993.     DX = port number
  5994.     CX = size of user buffer
  5995.     ES:DI -> user buffer for driver info (see below)
  5996. Return: AX = number of characters transferred
  5997.     CX = 3058h ("0X") (X00 FOSSIL only)
  5998.     DX = 2030h (" 0") (X00 FOSSIL only)
  5999.  
  6000. Format of driver info:
  6001. Offset    Size    Description
  6002.  00h    WORD    size of structure in bytes
  6003.  02h    BYTE    FOSSIL spec driver conforms to
  6004.  03h    BYTE    revision level of this specific driver
  6005.  04h    DWORD    pointer to ASCIZ identification string
  6006.  08h    WORD    size of the input buffer
  6007.  0Ah    WORD    number of bytes left in buffer
  6008.  0Ch    WORD    size of the output buffer
  6009.  0Eh    WORD    number of bytes left in buffer
  6010.  10h    BYTE    width of screen
  6011.  11h    BYTE    length of screen
  6012.  12h    BYTE    actual baud rate, computer to modem
  6013. ----------141C-------------------------------
  6014. INT 14 - X00 FOSSIL - ACTIVATE PORT
  6015.     AH = 1Ch
  6016.     DX = port number
  6017. Return: AX = 1954h if successful
  6018.     BL = maximum function number supported (not including 7Eh and above)
  6019.     BH = revision of FOSSIL specification supported
  6020. Note:    this is a duplicate of AH=04h, so that AH=04h may be made compatible
  6021.       with the PS/2 BIOS in a future release
  6022. SeeAlso: AH=04h"FOSSIL",AH=1Dh
  6023. ----------141D-------------------------------
  6024. INT 14 - X00 FOSSIL - DEACTIVATE PORT
  6025.     AH = 1Dh
  6026.     DX = port number
  6027. Return: none
  6028. Notes:    this is a duplicate of AH=05h, so that AH=05h may be made compatible
  6029.       with the PS/2 BIOS in a future release
  6030.     ignored if the port was never activated with AH=04h or AH=1Ch
  6031. SeeAlso: AH=05h"FOSSIL",AH=1Ch
  6032. ----------141E-------------------------------
  6033. INT 14 - X00 FOSSIL - EXTENDED LINE CONTROL INITIALIZATION
  6034.     AH = 1Eh
  6035.     AL = break status
  6036.         00h if break
  6037.         01h if no break
  6038.     BH = parity
  6039.         00h no parity
  6040.         01h odd parity
  6041.         02h even parity
  6042.         03h stick parity odd
  6043.         04h stick parity even
  6044.     BL = number of stop bits
  6045.         00h one stop bit
  6046.         01h two stop bits (1.5 if 5 bit word length)
  6047.     CH = word length
  6048.         00h 5 bits
  6049.         01h 6 bits
  6050.         02h 7 bits
  6051.         03h 8 bits
  6052.     CL = bps rate
  6053.         00h 110
  6054.         01h 150
  6055.         02h 300
  6056.         03h 600
  6057.         04h 1200
  6058.         05h 2400
  6059.         06h 4800
  6060.         07h 9600
  6061.         08h 19200
  6062.     DX = port number
  6063. Return: AX = port status code (see AH=00h)
  6064. Notes:    this function is intended to exactly emulate the PS/2 BIOS AH=04h call
  6065.     if the port was locked at X00 load time, the appropriate parameters are
  6066.       ignored
  6067. SeeAlso: AH=00h,AH=04h"SERIAL I/O"
  6068. ----------141F-------------------------------
  6069. INT 14 - X00 FOSSIL - EXTENDED SERIAL PORT STATUS/CONTROL
  6070.     AH = 1Fh
  6071.     AL = 00h read modem control register
  6072.           Return: BL = modem control register (see below)
  6073.               AH = status
  6074.     AL = 01h write modem control register
  6075.           BL = modem control register
  6076.           bit 0: data terminal ready
  6077.           bit 1: request to send
  6078.           bit 2: OUT1
  6079.           bit 3: OUT2 (interrupts) enabled
  6080.           bit 4: LOOP
  6081.           bits 5-7 reserved
  6082.           Return: AX = status
  6083.     DX = port number
  6084. SeeAlso: AH=00h,AH=05h"SERIAL I/O"
  6085. Notes:    this function is intended to exactly emulate the PS/2 BIOS AH=05h call
  6086.     X00 forces BL bit 3 set (interrupts cannot be disabled)
  6087. ----------1420-------------------------------
  6088. INT 14 - X00 FOSSIL - DESTRUCTIVE READ WITH NO WAIT
  6089.     AH = 20h
  6090.     DX = port number
  6091. Return: AH = 00h if character was available
  6092.         AL = next character (removed from receive buffer)
  6093.     AX = FFFFh if no character available
  6094. SeeAlso: AH=0Ch,AH=21h"X00"
  6095. ----------1420-------------------------------
  6096. INT 14 - Alloy MW386 - ATTACH LOGICAL COMMUNICATIONS PORT TO PHYSICAL PORT
  6097.     AH = 20h
  6098.     AL = logical port (01h COM1, 02h COM2)
  6099.     DX = physical port number
  6100. Return: AX = status
  6101.         0000h successful
  6102.         FFFFh failed
  6103. SeeAlso: AH=21h"Alloy",AH=22h"Alloy",AH=23h"Alloy",INT 17/AH=8Bh"Alloy"
  6104. ----------1420-------------------------------
  6105. INT 14 - MultiDOS Plus - INITIALIZE PORT
  6106.     AH = 20h
  6107.     AL = port parameters (see AH=00h"SERIAL")
  6108.     DX = port number (0-3)
  6109. Return: AH = status
  6110.         00h successful
  6111.         41h no such port
  6112.         64h monitor mode already active
  6113. SeeAlso: AH=00h"SERIAL",AH=04h"MultiDOS",AH=21h"MultiDOS",AH=23h"MultiDOS"
  6114. ----------1421-------------------------------
  6115. INT 14 - X00 FOSSIL - STUFF RECEIVE BUFFER
  6116.     AH = 21h
  6117.     AL = character
  6118.     DX = port number
  6119. Notes:    the given character is inserted at the end of the receive buffer as if
  6120.       it had just arrived from the serial port; all normal receive
  6121.       processing (XON/XOFF, ^C/^K) is performed on the character
  6122.     fully re-entrant
  6123. SeeAlso: AH=20h"X00"
  6124. ----------1421-------------------------------
  6125. INT 14 - Alloy MW386 v1.x only - RELEASE PHYSICAL COMMUNICATIONS PORT
  6126.     AH = 21h
  6127.     DX = physical port number
  6128. Return: AX = status
  6129.         0000h successful
  6130.         FFFFh failed
  6131. SeeAlso: AH=20h"Alloy",AH=22h"Alloy"
  6132. ----------1421-------------------------------
  6133. INT 14 - MultiDOS Plus - TRANSMIT CHARACTER
  6134.     AH = 21h
  6135.     AL = character to send
  6136.     DX = port number
  6137. Return: AH = status
  6138.         00h successful
  6139.         39h no DSR or CTS
  6140.         3Ch no DSR
  6141.         3Bh no CTS
  6142.         41h no such port
  6143.         42h monitor mode not active
  6144.         97h timed out
  6145. Note:    monitor mode must have been turned on with AH=24h before calling
  6146. SeeAlso: AH=20h"MultiDOS",AH=22h"MultiDOS",AH=24h"MultiDOS"
  6147. ----------1422-------------------------------
  6148. INT 14 - Alloy MW386 v2+ - RELEASE LOGICAL COMMUNICATIONS PORT
  6149.     AH = 22h
  6150.     AL = logical port (01h COM1, 02h COM2)
  6151. Return: AX = status (0000h successful)
  6152. SeeAlso: AH=20h"Alloy",AH=21h"Alloy"
  6153. ----------1422-------------------------------
  6154. INT 14 - MultiDOS Plus - RECEIVE CHARACTER
  6155.     AH = 22h
  6156.     DX = port number
  6157. Return: AH = status (see also AH=21h"MultiDOS")
  6158.         00h successful
  6159.         AL = character
  6160.         3Dh framing and parity error
  6161.         3Eh overrun error
  6162.         3Fh framing error
  6163.         40h parity error
  6164.         96h ring buffer overflow
  6165. Note:    if no character is available, this function waits until a character
  6166.       arrives or an implementation-dependent timeout elapses
  6167. SeeAlso: AH=20h"MultiDOS",AH=21h"MultiDOS",AH=27h
  6168. ----------1423-------------------------------
  6169. INT 14 - Alloy MW386 v2+ - GET PORT NUMBER FROM LOGICAL PORT ID
  6170.     AH = 23h
  6171.     AL = logical port (01h COM1, 02h COM2)
  6172.     DH = user ID
  6173.     DL = process ID (DH,DL both FFh for current task)
  6174. Return: AL = MW386 port mode
  6175.         bit 0: port is shared (spooler only)
  6176.         1: port is spooled instead of direct (spooler only)
  6177.         2: port is assigned as logical COM device, not in spooler
  6178.         3: port is free
  6179.     CX = MW386 port number
  6180.     DH = owner's user ID
  6181.     DL = owner's task ID
  6182. SeeAlso: AH=20h"Alloy",INT 17/AH=8Bh"Alloy"
  6183. ----------1423-------------------------------
  6184. INT 14 - MultiDOS Plus - GET PORT STATUS
  6185.     AH = 23h
  6186.     DX = port number
  6187. Return: AH = line status (see AH=03h)
  6188.     AL = modem status (see AH=03h)
  6189. SeeAlso: AH=03h,AH=07h"MultiDOS",AH=20h"MultiDOS"
  6190. ----------1424-------------------------------
  6191. INT 14 - Alloy MW386 v2+ - CHANGE PHYSICAL PORT PARAMETERS
  6192.     AH = 24h
  6193.     CX = physical I/O port number
  6194.     DS:DX -> configuration table (see below)
  6195. Return: AH = 00h
  6196. Note:    invalid port numbers are merely ignored
  6197. SeeAlso: INT 17/AH=96h
  6198.  
  6199. Format of configuration table:
  6200. Offset    Size    Description
  6201.  00h    BYTE    baud rate
  6202.         00h 38400
  6203.         01h 19200
  6204.         02h  9600
  6205.         03h  7200
  6206.         04h  4800
  6207.         05h  3600
  6208.         06h  2400
  6209.         07h  2000
  6210.         08h  1200
  6211.         09h   600
  6212.         0Ah   300
  6213.         0Bh   150
  6214.         0Ch   134.5
  6215.  01h    BYTE    data bits (00h=5, 01h=6, 02h=7, 03h=8)
  6216.  02h    BYTE    parity (00h none, 01h odd, 02h even)
  6217.  03h    BYTE    stop bits (00h=1, 01h=2)
  6218.  04h    BYTE    receive flow control
  6219.         00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC, 04h RTS/CTS
  6220.  05h    BYTE    transmit flow control (as for receive)
  6221. ----------1424-------------------------------
  6222. INT 14 - MultiDOS Plus - SET MONITOR MODE
  6223.     AH = 24h
  6224.     AL = port status storage
  6225.         00h single status for entire receive buffer
  6226.         01h separate status kept for each byte in receive buffer
  6227.     DX = port number
  6228. Return: AH = status
  6229.         00h successful
  6230.         3Ah invalid status storage specified
  6231.         41h no such port
  6232.         64h monitor mode already active
  6233. Note:    in monitor mode, MultiDOS redirects all BIOS video output to a serial
  6234.       port
  6235. SeeAlso: AH=20h"MultiDOS",AH=25h
  6236. ----------1425-------------------------------
  6237. INT 14 - MultiDOS Plus - CLEAR BUFFERS
  6238.     AH = 25h
  6239.     AL = function
  6240.         00h only clear buffers
  6241.         01h clear buffers and deactivate
  6242.     DX = port number
  6243. Return: AH = status
  6244.         00h successful
  6245.         3Ah invalid function
  6246.         41h no such port
  6247.         42h monitor mode not active
  6248. SeeAlso: AH=20h"MultiDOS",AH=24h"MultiDOS"
  6249. ----------1427-------------------------------
  6250. INT 14 - MultiDOS Plus - GET BUFFER CHARACTER COUNT
  6251.     AH = 27h
  6252.     DX = port number
  6253. Return: AH = status
  6254.         00h successful
  6255.         41h no such port
  6256.         42h monitor mode not active
  6257.     AL = number of characters in receive buffer
  6258. ----------147E-------------------------------
  6259. INT 14 - FOSSIL - INSTALL AN EXTERNAL APPLICATION FUNCTION
  6260.     AH = 7Eh
  6261.     AL = code assigned to external application (80h-BFh)
  6262.         80h reserved for communications FOSSIL
  6263.         81h video FOSSIL
  6264.         82h reserved for keyboard FOSSIL
  6265.         83h reserved for system FOSSIL
  6266.     ES:DX -> entry point
  6267. Return: AX = 1954h
  6268.     BL = code assigned to application (same as input AL)
  6269.     DH = 00h failed
  6270.          01h successful
  6271. SeeAlso: AH=7Fh,AH=80h"FOSSIL",AX=8100h,AH=82h"FOSSIL",AH=83h"FOSSIL"
  6272. ----------147F-------------------------------
  6273. INT 14 - FOSSIL - REMOVE AN EXTERNAL APPLICATION FUNCTION
  6274.     AH = 7Fh
  6275.     AL = code assigned to external application
  6276.     ES:DX -> entry point
  6277. Return: AX = 1954h
  6278.     BL = code assigned to application (same as input AL)
  6279.     DH = 00h failed
  6280.          01h successful
  6281. SeeAlso: AH=7Eh
  6282. ----------1480-------------------------------
  6283. INT 14 - COMMUNICATIONS FOSSIL
  6284.     AH = 80h
  6285. SeeAlso: AH=7Eh
  6286. ----------1480-------------------------------
  6287. INT 14 - COURIERS.COM - INSTALLATION CHECK
  6288.     AH = 80h
  6289. Return: AH = E8h if loaded
  6290. Note:    COURIERS is a TSR utility by PC Magazine
  6291. ----------148000-----------------------------
  6292. INT 14 - ARTICOM - INSTALLATION CHECK
  6293.     AX = 8000h
  6294. Return: AL = FFh if installed
  6295.         BH = major version
  6296.         BL = minor version
  6297. Program: ArtiCom is an asynchronous communications driver by Artisoft which
  6298.       works on top of NetBIOS and allows modem/serial-port sharing by
  6299.       programs using INT 14 for serial I/O.
  6300. Note:    ArtiCom supports 32 simultaneous COM ports using multiport cars and
  6301.       drivers
  6302. SeeAlso: AH=00h,AH=01h,AH=02h,AH=03h,AH=04h,AH=05h,AX=8001h,AX=8002h
  6303. ----------148001-----------------------------
  6304. INT 14 - ARTICOM - UNLOAD ASYNCHRONOUS REDIRECTOR FROM MEMORY
  6305.     AX = 8001h
  6306. Return: AX = error code, if error (see AX=8003h)
  6307. SeeAlso: AX=8000h,AX=8002h,AX=8003h
  6308. ----------148002-----------------------------
  6309. INT 14 - ARTICOM - GET ASYNCHRONOUS REDIRECTOR STATUS
  6310.     AX = 8002h
  6311.     ES:DI -> buffer for redirector status structure (see below)
  6312. Return: AX = error code, if error (see AX=8003h)
  6313. SeeAlso: AX=8000h,AX=8003h
  6314.  
  6315. Format of redirector status:
  6316. Offset    Size    Description  
  6317.  00h    WORD    redirector major and minor version numbers
  6318.  02h    WORD    redirectable ports found
  6319.  04h    WORD    redirectable ports + local ports found
  6320.  06h    WORD    redirector internal buffer size
  6321.  08h    WORD    maximum servers maintained
  6322.  0Ah    WORD    number of adapters found
  6323. ----------148003-----------------------------
  6324. INT 14 - ARTICOM - TRANSLATE ERROR CODE TO ERROR STRING
  6325.     AX = 8003h
  6326.     CX = error number to translate
  6327. Return: ES:DI -> ASCIZ error text or NULL if can't translate.
  6328. SeeAlso: AX=8000h
  6329.  
  6330. Values for error codes:
  6331.  00h    "No error"
  6332.  01h    "An invalid port number was specified"
  6333.  02h    "Port is already redirected"
  6334.  03h    "Too many ports redirected"
  6335.  04h    "Cannot locate the server"
  6336.  05h    "Server is busy"
  6337.  06h    "Access denied"
  6338.  07h    "Resource in use"
  6339.  08h    "Resource in use - request queued"
  6340.  09h    "No such resource"
  6341.  0Ah    "Invalid username/password pair"
  6342.  0Bh    "Noncompatible version number"
  6343.  0Ch    "Can't remove from memory"
  6344.  0Dh    "Bad NETBIOS adapter number"
  6345.  0Eh    "No more entries in list"
  6346.  0Fh    "Resource is not available at this time"
  6347.  10h    "Invalid value to INT 14 call"
  6348. ----------148004-----------------------------
  6349. INT 14 - ARTICOM - ATTACH ASYNCHRONOUS RESOURCE
  6350.     AX = 8004h
  6351.     DX = port to redirect (COM1=0, COM2=1, ...)
  6352.     CH = attach type
  6353.     CL = adapter to use for attach, 0FFh to search all
  6354.     ES:DI -> attachment structure (see below)
  6355. Return: AX = error code, if error (see AX=8003h)
  6356. Note:    The wildcard '*' is supported in the server and resource fields.  If
  6357.       wild cards are used then the first matching available server is
  6358.       attached.
  6359. SeeAlso: AX=8000h,AX=8003h,AX=8005h
  6360.  
  6361. Format of attachment structure:
  6362. Offset    Size    Description  
  6363.  00h 16 BYTEs    server to look for attach
  6364.  10h 16 BYTEs    attach to resource name
  6365.  20h 16 BYTEs    username for attach
  6366.  30h 16 BYTEs    password for username or resource
  6367.  40h    BYTE    attach type
  6368.         00h normal
  6369.         01h queue if resource is in use (not yet supported in v1.00)
  6370. ----------148005-----------------------------
  6371. INT 14 - ARTICOM - DETACH ASYNCHRONOUS RESOURCE
  6372.     AX = 8005h
  6373.     DX = port to detach (COM1=0, COM2=1, ...)
  6374. Return: AX = error code, if error (see AX=8003h)
  6375. Note:    only a previously attached resource can be detached
  6376. SeeAlso: AX=8000h,AX=8003h,AX=8004h
  6377. ----------148006-----------------------------
  6378. INT 14 - ARTICOM - GET RESOURCE INFORMATION
  6379.     AX = 8006h
  6380.     BX = remote port (COM1=0, COM2=1, ...)
  6381.     CL = adapter number, FFH to try all adapters 
  6382.     ES:DI -> resource information structure (see below)
  6383.     DS:SI -> 16 byte server name. See note.
  6384. Return: AX = error code, if error (see AX=8003h)
  6385.     BX = next remote port, recall to get next resource info
  6386. Note:    Wild cards supported in both the resource field and server name 
  6387.     string DS:SI. If wild cards used then first matching available
  6388.     resource information is searched. Set resource field to 0FFh to
  6389.     return all resources.
  6390. SeeAlso: AX=8000h,AX=8002h,AX=8003h,AX=8007h
  6391.  
  6392. Format of resource information structure:
  6393. Offset    Size    Description
  6394.  00h    BYTE    00h = free, else used
  6395.  01h 16 BYTEs    resource name
  6396.  11h 16 BYTEs    username of resource user
  6397.  21h    WORD    amount of time used
  6398.  23h    WORD    amount of time remaining
  6399.  53h 48 BYTEs    description of resource
  6400.  93h 64 BYTEs    initialization string for modem 
  6401.  B3h 32 BYTEs    dial string for modem 
  6402.  D3h 32 BYTEs    hang-up string for modem 
  6403. ----------148007-----------------------------
  6404. INT 14 - ARTICOM - GET REDIRECTED PORT INFORMATION
  6405.     AX = 8007h
  6406.     DX = port index (COM1=0, COM2=1, ...)
  6407.     ES:DI -> buffer for port information structure (see below)
  6408. Return: CF clear if redirection info returned and port is redirected
  6409.     CF set if not a redirected port
  6410.     AX = error code, if error (see AX=8003h)
  6411. SeeAlso: AX=8000h,AX=8003h,AX=8006h,AX=8008h
  6412.  
  6413. Format of port information structure:
  6414. Offset    Size    Description
  6415.  00h 16 BYTEs    server name resource is on
  6416.  10h    BYTE    adapter number server is on
  6417.  11h    BYTE    resource name
  6418.  21h    WORD    remote port index, use to get additional information
  6419.  23h    WORD    buffer size
  6420.  25h    WORD    baud rate (see below)
  6421.  26h    BYTE    modem status register
  6422.  27h    BYTE    modem control register
  6423.  28h    BYTE    line status register
  6424.  29h    BYTE    line control register
  6425.  2Ah    BYTE    flow control in use: 0 - NONE, 1 - XON/XOFF, 2 - RTS/CTS
  6426.  2Bh    WORD    send timeout in ticks
  6427.  2Dh    WORD    receive timeout in ticks
  6428.  2Fh    WORD    time used on remote port
  6429.  31h    WORD    time left before timeout
  6430.  33h    BYTE    if server changes allowed?
  6431.  34h    WORD    FFFFh (-1) if connection ok, else old port index
  6432.  
  6433. Values for baud rate:
  6434.  00h    110
  6435.  01h    150
  6436.  02h    300
  6437.  03h    600
  6438.  04h    1200
  6439.  05h    2400
  6440.  06h    4800
  6441.  07h    9600
  6442.  08h    19200
  6443.  09h    38400
  6444.  0Ah    57600
  6445.  0Bh    115200
  6446.  0Ch    134.5
  6447.  0Dh    1800
  6448.  0Eh    2000
  6449.  0Fh    3600
  6450.  10h    7200
  6451. ----------148008-----------------------------
  6452. INT 14 - ARTICOM - GET AVAILABLE SERVER NAME
  6453.     AX = 8008h
  6454.     BX = server index (0,1,...)
  6455.     ES:DI -> server name structure (see below)
  6456. Return: AX = error code, if error (see AX=8003)
  6457.     BX = next remote port, repeat call to get next available server
  6458. Note:    the wildcard '*' is supported in the server name field.     Set the
  6459.       server name to FFh to search for all servers.
  6460. SeeAlso: AX=8000h,AX=8003h,AX=8007h
  6461.  
  6462. Format of server name structure:
  6463. Offset     Size      Description
  6464.   00h 16 BYTEs      (call) ASCIZ servername
  6465.   10h     BYTE      (return) the adapter server is found
  6466. ----------148009-----------------------------
  6467. INT 14 - ARTICOM - SET SEND AND RECEIVE TIMEOUTS 
  6468.     AX = 8009h
  6469.     BX = send timeout in ticks
  6470.     CX = receive timeout in ticks
  6471.     DX = port index (COM1=0, COM2=1, ...)
  6472. Return: nothing
  6473. SeeAlso: AX=8000h,AX=800Ah
  6474. ----------14800A-----------------------------
  6475. INT 14 - ARTICOM - MODIFY FLOW CONTROL
  6476.     AX = 800Ah
  6477.     BL = flow control type (00h none, 01h XON/XOFF, 02h RTS/CTS)
  6478.     DX = port index (COM1=0, COM2=1, ...)
  6479. Return: AX = error code, if error (see AX=8003h)
  6480. Note:    for attached ports only!
  6481. SeeAlso: AX=8000h,AX=8003h,AX=8009h
  6482. ----------148025-----------------------------
  6483. INT 14 - ARTICOM - SET INTERNAL SEND/RECEIVE VECTOR
  6484.     AX = 8025h
  6485.     DS:DX -> address of trap function (see below) to call on read/write
  6486. Note:    setting the vector to a user function allows the redirector's activity
  6487.       to be monitored.
  6488. SeeAlso: AX=8000h,AX=8035h,INT 21/AH=25h
  6489.  
  6490. Trap function called with:
  6491.     AH = operation
  6492.         80h reading character
  6493.         81h writing character
  6494.     AL = character
  6495.     Return: AX must be preserved
  6496.         far JUMP to old trap function (see AX=8035h)
  6497. ----------148035-----------------------------
  6498. INT 14 - ARTICOM - GET INTERNAL SEND/RECEIVE VECTOR
  6499.     AX = 8035h
  6500. Return: ES:BX -> address of current send/receive routine
  6501. Note:    this function returns the address of the routine which is called 
  6502.       inside A-REDIR.EXE each time a character is received or sent on the
  6503.       active COM port.
  6504. SeeAlso: AX=8000h,AX=8025h,INT 21/AH=35h
  6505. ----------1481-------------------------------
  6506. INT 14 - COURIERS.COM - CHECK IF PORT BUSY
  6507.     AH = 81h
  6508.     AL = port number (1-4)
  6509. Return: AH = 00h port available
  6510.          01h port exists but already in use
  6511.          02h port nonexistent
  6512. Note:    COURIERS is a TSR utility by PC Magazine
  6513. SeeAlso: AH=83h,AH=8Dh
  6514. ----------1481-------------------------------
  6515. INT 14 - Egberto Willies COMM-DRV - EXTENDED INITIALIZATION
  6516.     AH = 81h
  6517.     BX:DI -> port control block
  6518. Return: ???
  6519. SeeAlso: AH=00h
  6520.  
  6521. Format of port control block:
  6522. Offset    Type    Description
  6523.  00h    WORD    port IO address
  6524.  02h    WORD    port IRQ
  6525.  04h    WORD    baud rate
  6526.  06h    WORD    parity
  6527.  08h    WORD    data bits
  6528.  0Ah    WORD    stop bits
  6529.  0Ch    WORD    break status
  6530.             0000h off
  6531.  0Eh    WORD    flow control protocol
  6532.  10h    BYTE    input block
  6533.  11h    BYTE    output block
  6534.  12h    WORD    low threshold
  6535.  14h    WORD    high threshold
  6536.  16h    WORD    segment of buffer
  6537.  18h    WORD    offset of buffer
  6538.  1Ah    WORD    input buffer length
  6539.  1Ch    WORD    output buffer length
  6540.  1Eh    BYTE    auxiliary address
  6541.  1Fh    BYTE    spare
  6542.  20h  4 WORDs    spares
  6543. ----------148100-----------------------------
  6544. INT 14 - VIDEO FOSSIL - RETURN VFOSSIL INFORMATION
  6545.     AX = 8100h
  6546.     ES:DI -> buffer for VFOSSIL information (see below)
  6547. Return: AX = 1954h if installed
  6548. SeeAlso: AH=7Eh,AX=8101h
  6549.  
  6550. Format of VFOSSIL information:
  6551. Offset    Size    Description
  6552.  00h    WORD    size of information in bytes, including this field
  6553.  02h    WORD    VFOSSIL major version
  6554.  04h    WORD    VFOSSIL revision level
  6555.  06h    WORD    highest VFOSSIL application function supported
  6556. ----------148101-----------------------------
  6557. INT 14 - VIDEO FOSSIL - OPEN VFOSSIL
  6558.     AX = 8101h
  6559.     ES:DI -> buffer for application function table (see below)
  6560.     CX = length of buffer in bytes
  6561. Return: AX = 1954h if installed
  6562.         BH = highest VFOSSIL application function supported
  6563. Note:    the number of initialized pointers in the application function table
  6564.       will never exceed CX/4; if the buffer is large enough, BH+1 pointers
  6565.       will be initialized
  6566. SeeAlso: AX=8102h
  6567.  
  6568. Format of application function table:
  6569. Offset    Size    Description
  6570.  00h    DWORD    -> function to query current video mode (VioGetMode)
  6571.  04h    DWORD    -> function to set video mode (VioSetMode)
  6572.  08h    DWORD    -> function to query hardware config (VioGetConfig)
  6573.  0Ch    DWORD    -> function to write data in TTY mode (VioWrtTTY)
  6574.  10h    DWORD    -> function to get current ANSI state (VioGetANSI)
  6575.  14h    DWORD    -> function to set new ANSI state (VioSetANSI)
  6576.  18h    DWORD    -> function to get curr cursor position (VioGetCurPos)
  6577.  1Ch    DWORD    -> function to set cursor position (VioSetCurPos)
  6578.  20h    DWORD    -> function to get cursor shape (VioGetCurType)
  6579.  24h    DWORD    -> function to set cursor shape (VioSetCurType)
  6580.  28h    DWORD    -> function to scroll screen up (VioScrollUp)
  6581.  2Ch    DWORD    -> function to scroll screen down (VioScrollDn)
  6582.  30h    DWORD    -> function to read cell string from screen (VioReadCellStr)
  6583.  34h    DWORD    -> function to read char string from screen (VioReadCharStr)
  6584.  38h    DWORD    -> function to write a cell string (VioWrtCellStr)
  6585.  3Ch    DWORD    -> function to write char string, leaving attr (VioWrtCharStr)
  6586.  40h    DWORD    -> function to write char string,const attr (VioWrtCharStrAttr)
  6587.  44h    DWORD    -> function to replicate an attribute (VioWrtNAttr)
  6588.  48h    DWORD    -> function to replicate a cell (VioWrtNCell)
  6589.  4Ch    DWORD    -> function to replicate a character (VioWrtNChar)
  6590.  
  6591. Format of video mode data structure:
  6592. Offset    Size    Description
  6593.  00h    WORD    length of structure including this field
  6594.  02h    BYTE    mode characteristics
  6595.         bit 0: clear if MDA, set otherwise
  6596.         bit 1: graphics mode
  6597.         bit 2: color disabled (black-and-white)
  6598.  03h    BYTE    number of colors supported (1=2 colors, 4=16 colors, etc)
  6599.  04h    WORD    number of text columns
  6600.  06h    WORD    number of text rows
  6601.  08h    WORD    reserved
  6602.  0Ah    WORD    reserved
  6603.  0Ch    DWORD    reserved
  6604.  
  6605. Format of video configuration data:
  6606. Offset    Size    Description
  6607.  00h    WORD    structure length including this field
  6608.  02h    WORD    adapter type
  6609.         00h monochrome/printer
  6610.         01h CGA
  6611.         02h EGA
  6612.         03h VGA
  6613.         07h 8514/A
  6614.  04h    WORD    display type
  6615.         00h monochrome
  6616.         01h color
  6617.         02h enhanced color
  6618.         09h 8514
  6619.  06h    DWORD    adapter memory size
  6620.  
  6621. Format of cursor type record:
  6622. Offset    Size    Description
  6623.  00h    WORD    cursor start line
  6624.  02h    WORD    cursor end line
  6625.  04h    WORD    cursor width (always 01h)
  6626.  06h    WORD    cursor attribute (FFFFh = hidden)
  6627.  
  6628. Call VioGetMode with:
  6629.     STACK:    WORD    VIO handle (must be 00h)
  6630.         DWORD    pointer to video mode data structure (see above)
  6631. Return: AX = error code (00h, 74h, 17Eh, 1B4h)
  6632.         0000h successful
  6633.         0074h internal VIO failure
  6634.         0163h unsupported mode
  6635.         0166h invalid row value
  6636.         0167h invalid column value
  6637.         017Eh buffer too small
  6638.         01A5h invalid VIO parameter
  6639.         01B4h invalid VIO handle
  6640.  
  6641. Call VioSetMode with:
  6642.     STACK:    WORD    VIO handle (must be 00h)
  6643.         DWORD    pointer to video mode data structure (see above)
  6644. Return: AX = error code (00h, 74h, 163h, 17Eh, 1A5h, 1B4h) (see above)
  6645.  
  6646. Call VioGetConfig with:
  6647.     STACK:    WORD    VIO handle (must be 00h)
  6648.         DWORD    pointer to video configuration data buffer (see above)
  6649. Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see above)
  6650.  
  6651. Call VioWrtTTY with:
  6652.     STACK:    WORD    VIO handle (must be 00h)
  6653.         WORD    length of string
  6654.         DWORD    pointer to character string to be written to screen
  6655. Return: AX = error code (00h, 74h, 1B4h) (see above)
  6656. Notes:    write wraps at end of line and terminates if it reaches end of screen
  6657.     in ANSI mode, ANSI control sequences are interpreted, and this func is
  6658.       not required to be reentrant; in non-ANSI mode, the function is
  6659.       reentrant and may be called from within an MSDOS function call
  6660.  
  6661. Call VioGetANSI with:
  6662.     STACK:    WORD    VIO handle (must be 00h)
  6663.         DWORD    pointer to WORD which will be set to 00h if ANSI is off
  6664.             or 01h if ANSI is on
  6665. Return: AX = error code (00h, 74h, 1B4h) (see above)
  6666.  
  6667. Call VioSetANSI with:
  6668.     STACK:    WORD    VIO handle (must be 00h)
  6669.         DWORD    pointer to WORD indicating new state of ANSI
  6670.             00h off
  6671.             01h on
  6672. Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)
  6673.  
  6674. Call VioGetCurPos with:
  6675.     STACK:    WORD    VIO handle (must be 00h)
  6676.         DWORD    pointer to WORD to hold current cursor column (0-based)
  6677.         DWORD    pointer to WORD to hold current cursor row (0-based)
  6678. Return: AX = error code (00h, 74h, 1B4h) (see above)
  6679.  
  6680. Call VioSetCurPos with:
  6681.     STACK:    WORD    VIO handle (must be 00h)
  6682.         WORD    cursor column
  6683.         WORD    cursor row
  6684. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6685. Note:    if either coordinate is invalid, the cursor is not moved
  6686.  
  6687. Call VioGetCurType with:
  6688.     STACK:    WORD    VIO handle (must be 00h)
  6689.         DWORD    pointer to cursor type record (see above)
  6690. Return: AX = error code (00h, 74h, 1B4h) (see above)
  6691.  
  6692. Call VioSetCurType with:
  6693.     STACK:    WORD    VIO handle (must be 00h)
  6694.         DWORD    pointer to cursor type record (see above)
  6695. Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)
  6696.  
  6697. Call VioScrollUp with:
  6698.     STACK:    WORD    VIO handle (must be 00h)
  6699.         DWORD    pointer to char/attr cell for filling emptied rows
  6700.         WORD    number or rows to scroll (FFFFh = clear area)
  6701.         WORD    right column of scroll area
  6702.         WORD    bottom row of scroll area
  6703.         WORD    left column of scroll area
  6704.         WORD    top row of scroll area
  6705. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6706.  
  6707. Call VioScrollDn with:
  6708.     STACK:    WORD    VIO handle (must be 00h)
  6709.         DWORD    pointer to char/attr cell for filling emptied rows
  6710.         WORD    number or rows to scroll (FFFFh = clear area)
  6711.         WORD    right column of scroll area
  6712.         WORD    bottom row of scroll area
  6713.         WORD    left column of scroll area
  6714.         WORD    top row of scroll area
  6715. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6716.  
  6717. Call VioReadCellStr with:
  6718.     STACK:    WORD    VIO handle (must be 00h)
  6719.         WORD    column at which to start reading
  6720.         WORD    row at which to start reading
  6721.         DWORD    pointer to WORD containing length of buffer in bytes
  6722.             on return, WORD contains number of bytes actually read
  6723.         DWORD    pointer to buffer for cell string
  6724. Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)
  6725.  
  6726. Call VioReadCharStr with:
  6727.     STACK:    WORD    VIO handle (must be 00h)
  6728.         WORD    column at which to start reading
  6729.         WORD    row at which to start reading
  6730.         DWORD    pointer to WORD containing length of buffer in bytes
  6731.             on return, WORD contains number of bytes actually read
  6732.         DWORD    pointer to buffer for character string
  6733. Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)
  6734.  
  6735. Call VioWrtCellStr with:
  6736.     STACK:    WORD    VIO handle (must be 00h)
  6737.         WORD    column at which to start writing
  6738.         WORD    row at which to start writing
  6739.         WORD    length of cell string in bytes
  6740.         DWORD    pointer to cell string to write
  6741. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6742. Note:    write wraps at end of line and terminates if it reaches end of screen
  6743.  
  6744. Call VioWrtCharStr with:
  6745.     STACK:    WORD    VIO handle (must be 00h)
  6746.         WORD    column at which to start writing
  6747.         WORD    row at which to start writing
  6748.         WORD    length of character string
  6749.         DWORD    pointer to character string to write
  6750. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6751. Note:    write wraps at end of line and terminates if it reaches end of screen
  6752.  
  6753. Call VioWrtCharStrAttr with:
  6754.     STACK:    WORD    VIO handle (must be 00h)
  6755.         DWORD    pointer to attribute to be applied to each character
  6756.         WORD    column at which to start writing
  6757.         WORD    row at which to start writing
  6758.         WORD    length of character string
  6759.         DWORD    pointer to character string to write
  6760. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6761. Note:    write wraps at end of line and terminates if it reaches end of screen
  6762.  
  6763. Call VioWrtNAttr with:
  6764.     STACK:    WORD    VIO handle (must be 00h)
  6765.         WORD    column at which to start writing
  6766.         WORD    row at which to start writing
  6767.         WORD    number of times to write attribute
  6768.         DWORD    pointer to display attribute to replicate
  6769. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6770. Note:    write wraps at end of line and terminates if it reaches end of screen
  6771.  
  6772. Call VioWrtNCell with:
  6773.     STACK:    WORD    VIO handle (must be 00h)
  6774.         WORD    column at which to start writing
  6775.         WORD    row at which to start writing
  6776.         WORD    number of times to write cell
  6777.         DWORD    pointer to cell to replicate
  6778. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6779. Note:    write wraps at end of line and terminates if it reaches end of screen
  6780.  
  6781. Call VioWrtNChar with:
  6782.     STACK:    WORD    VIO handle (must be 00h)
  6783.         WORD    column at which to start writing
  6784.         WORD    row at which to start writing
  6785.         WORD    number of times to write character
  6786.         DWORD    pointer to character to replicate
  6787. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6788. Note:    write wraps at end of line and terminates if it reaches end of screen
  6789. ----------148102-----------------------------
  6790. INT 14 - VIDEO FOSSIL - CLOSE VFOSSIL
  6791.     AX = 8102h
  6792. Return: AX = 1954h
  6793. Note:    terminates all operations; after this call, the video FOSSIL may either
  6794.       be removed from memory or reinitialized
  6795. SeeAlso: AX=8101h,AX=8103h
  6796. ----------148103-----------------------------
  6797. INT 14 - VIDEO FOSSIL - UNINSTALL
  6798.     AX = 8103h
  6799. Return:    AX = 1954h
  6800. Note:    this is an extension to the VFOSSIL spec by Bob Hartman's VFOS_IBM
  6801. ----------1482-------------------------------
  6802. INT 14 - KEYBOARD FOSSIL
  6803.     AH = 82h
  6804. SeeAlso: AH=7Eh
  6805. ----------1482-------------------------------
  6806. INT 14 - COURIERS.COM - CONFIGURE PORT
  6807.     AH = 82h
  6808.     AL = port number (1-4)
  6809.     BX = speed (bps)
  6810.     CX = bit flags
  6811.         bit 0: enable input flow control
  6812.         bit 1: enable output flow control
  6813.         bit 2: use X.PC protocol (not yet implemented)
  6814. SeeAlso: AH=00h,AH=8Ch,INT 7A"X.PC"
  6815. ----------1483-------------------------------
  6816. INT 14 - SYSTEM FOSSIL
  6817.     AH = 83h
  6818. SeeAlso: AH=7Eh
  6819. ----------1483-------------------------------
  6820. INT 14 - COURIERS.COM - START INPUT
  6821.     AH = 83h
  6822.     ES:BX -> circular input buffer
  6823.     CX = length of buffer 
  6824.         (should be at least 128 bytes if input flow control enabled)
  6825. SeeAlso: AH=18h,AH=87h,AH=8Dh,AH=A5h"BAPI"
  6826. ----------1484-------------------------------
  6827. INT 14 - COURIERS.COM - READ CHARACTER
  6828.     AH = 84h
  6829. Return: ZF set if no characters available
  6830.     ZF clear
  6831.        AL = character
  6832.        AH = modem status bits
  6833.         bit 7: set on input buffer overflow
  6834. SeeAlso: AH=02h,AH=86h,AH=89h
  6835. ----------1485-------------------------------
  6836. INT 14 - COURIERS.COM - FLUSH PENDING INPUT
  6837.     AH = 85h
  6838. SeeAlso: AH=0Ah,AH=88h
  6839. ----------1486-------------------------------
  6840. INT 14 - COURIERS.COM - START OUTPUT
  6841.     AH = 86h
  6842.     ES:BX -> output buffer
  6843.     CX = length of output buffer
  6844. SeeAlso: AH=19h,AH=83h"COURIERS",AH=A4h"BAPI"
  6845. ----------1487-------------------------------
  6846. INT 14 - COURIERS.COM - OUTPUT STATUS
  6847.     AH = 87h
  6848. Return: AX = number of unsent characters
  6849. ----------1488-------------------------------
  6850. INT 14 - COURIERS.COM - ABORT OUTPUT
  6851.     AH = 88h
  6852. SeeAlso: AH=09h,AH=85h
  6853. ----------1489-------------------------------
  6854. INT 14 - COURIERS.COM - SEND SINGLE CHARACTER
  6855.     AH = 89h
  6856.     CL = character to send
  6857. SeeAlso: AH=01h,AH=84h
  6858. ----------148A-------------------------------
  6859. INT 14 - COURIERS.COM - SEND BREAK
  6860.     AH = 8Ah
  6861. SeeAlso: AH=89h,AH=FAh
  6862. ----------148C-------------------------------
  6863. INT 14 - COURIERS.COM - SET SPEED
  6864.     AH = 8Ch
  6865.     BX = speed in bps
  6866. SeeAlso: AH=00h,AH=82h"COURIERS"
  6867. ----------148D-------------------------------
  6868. INT 14 - COURIERS.COM - DECONFIGURE PORT
  6869.     AH = 8Dh
  6870. SeeAlso: AH=82h"COURIERS"
  6871. ----------14A0-------------------------------
  6872. INT 14 - 3com BAPI SERIAL I/O - CONNECT TO PORT
  6873.     AH = A0h
  6874.     ???
  6875. Return: ???
  6876. SeeAlso: AH=A1h"BAPI"
  6877. ----------14A0--CXFFFF-----------------------
  6878. INT 14 - Interconnections Inc. TES - INSTALLATION CHECK/STATUS REPORT
  6879.     AH = A0h
  6880.     CX = FFFFh
  6881. Return: CF clear if successful
  6882.         AX = 5445h ('TE')
  6883.         CX <> FFFFh
  6884.         DX = port number
  6885.     CF set on error
  6886. Note:    TES is a network serial port emulation program
  6887. SeeAlso: AH=A1h"TES"
  6888. ----------14A1-------------------------------
  6889. INT 14 - 3com BAPI SERIAL I/O - DISCONNECT FROM PORT
  6890.     AH = A1h
  6891.     ???
  6892. Return: ???
  6893. SeeAlso: AH=A0h"BAPI"
  6894. ----------14A1-------------------------------
  6895. INT 14 - Interconnections Inc. TES - GET LIST OF SESSIONS WITH STATUS
  6896.     AH = A1h
  6897. Return: CX = number of active sessions
  6898.     ES:SI -> status array (see below)
  6899. SeeAlso: AH=A2h"TES",AH=A3h"TES"
  6900.  
  6901. Format of status array entry:
  6902. Offset    Size    Description
  6903.  00h    BYTE    status
  6904.  01h    WORD    offset of name
  6905. ----------14A2-------------------------------
  6906. INT 14 - Interconnections Inc. TES - GET LIST OF SERVER NAMES
  6907.     AH = A2h
  6908. Return:    CX = number of servers
  6909.     ES:SI -> array of offsets from ES for server names
  6910. SeeAlso: AH=A1h"TES"
  6911. ----------14A3-------------------------------
  6912. INT 14 - Interconnections Inc. TES - START A NEW SESSION
  6913.     AH = A3h
  6914.     ES:SI -> ???
  6915. Return: CF clear if successful
  6916.         AX = 5445h ('TE')
  6917.         CX <> FFFFh
  6918.         DX = port number
  6919.     CF set on error
  6920. SeeAlso: AH=A1h"TES",AH=A4h"TES",AH=A6h"TES"
  6921. ----------14A4-------------------------------
  6922. INT 14 - 3com BAPI SERIAL I/O - WRITE BLOCK
  6923.     AH = A4h
  6924.     CX = length
  6925.     DH = session number (00h)
  6926.     ES:BX -> buffer
  6927. Return: CX = number of bytes sent
  6928. SeeAlso: AH=19h,AH=86h,AH=A5h"BAPI"
  6929. ----------14A4-------------------------------
  6930. INT 14 - Interconnections Inc. TES - HOLD CURRENTLY ACTIVE SESSION
  6931.     AH = A4h
  6932.     ???
  6933. Return: ???
  6934. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  6935. ----------14A5-------------------------------
  6936. INT 14 - 3com BAPI SERIAL I/O - READ BLOCK
  6937.     AH = A5h
  6938.     CX = length
  6939.     DH = session number (00h)
  6940.     ES:BX -> buffer
  6941. Return: CX = number of bytes read
  6942. SeeAlso: AH=18h,AH=83h"COURIERS",AH=A4h"BAPI",AX=FF02h
  6943. ----------14A5-------------------------------
  6944. INT 14 - Interconnections Inc. TES - RESUME A SESSION
  6945.     AH = A5h
  6946.     AL = session number
  6947. Return: ???
  6948. SeeAlso: AH=A4h"TES",AH=A6h"TES"
  6949. ----------14A6-------------------------------
  6950. INT 14 - 3com BAPI SERIAL I/O - SEND SHORT BREAK
  6951.     AH = A6h
  6952.     DH = session number (00h)
  6953. SeeAlso: AH=1Ah,AH=8Ah,AH=FAh
  6954. ----------14A6-------------------------------
  6955. INT 14 - Interconnections Inc. TES - DROP A SESSION
  6956.     AH = A6h
  6957.     AL = session number
  6958. Return: AH = status
  6959.         00h successful
  6960.         else error
  6961. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  6962. ----------14A7-------------------------------
  6963. INT 14 - 3com BAPI SERIAL I/O - READ STATUS
  6964.     AH = A7h
  6965.     ???
  6966. Return: ???
  6967. ----------14A7-------------------------------
  6968. INT 14 - Interconnections Inc. TES - SWITCH TO NEXT ACTIVE SESSION
  6969.     AH = A7h
  6970.     ???
  6971. Return: ???
  6972. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  6973. ----------14A8-------------------------------
  6974. INT 14 - Interconnections Inc. TES - SEND STRING TO COMMAND INTERPRETER
  6975.     AH = A8h
  6976.     AL = 00h no visible response
  6977.     ES:SI -> ASCIZ command
  6978. Return: ???
  6979. ----------14AF00BXAAAA-----------------------
  6980. INT 14 - 3com BAPI SERIAL I/O - INSTALLATION CHECK
  6981.     AX = AF00h
  6982.     BX = AAAAh
  6983. Return: AX = AF01h if installed
  6984. ----------14B0-------------------------------
  6985. INT 14 - 3com BAPI SERIAL I/O - ENABLE/DISABLE "ENTER COMMAND MODE" CHARACTER
  6986.     AH = B0h
  6987.     AL = 00h disable
  6988.        = 01h enable
  6989. ----------14B1-------------------------------
  6990. INT 14 - 3com BAPI SERIAL I/O - ENTER COMMAND MODE
  6991.     AH = B1h
  6992. ----------14F0F0-----------------------------
  6993. INT 14 - ASAP v1.0 - ???
  6994.     AX = F0F0h
  6995.     DX = ???
  6996.     ???
  6997. Return: ???
  6998. Note:    ASAP (Automatic Screen Access Program) is a shareware screen reader by
  6999.       MicroTalk
  7000. SeeAlso: AX=F0F1h
  7001. ----------14F0F1DX0000-----------------------
  7002. INT 14 - ASAP v1.0 - INSTALLATION CHECK
  7003.     AX = F0F1h
  7004.     DX = 0000h
  7005. Return: DX = segment of resident code
  7006.        = 0000h if not installed
  7007. Note:    ASAP (Automatic Screen Access Program) is a shareware screen reader by
  7008.       MicroTalk
  7009. SeeAlso: AX=F0F0h,INT 10/AH=38h
  7010. ----------14F4FF-----------------------------
  7011. INT 14 - IBM/Yale EBIOS SERIAL I/O - INSTALLATION CHECK
  7012.     AX = F4FFh
  7013.     DX = port (00h-03h)
  7014. Return: CF clear if present
  7015.         AX = 0000h
  7016.     CF set if not present
  7017.         AX <> 0000h
  7018. ----------14F9-------------------------------
  7019. INT 14 - IBM/Yale EBIOS SERIAL I/O - REGAIN CONTROL
  7020.     AH = F9h
  7021.     DX = port (00h-03h)
  7022. ----------14FA-------------------------------
  7023. INT 14 - IBM/Yale EBIOS SERIAL I/O - SEND BREAK
  7024.     AH = FAh
  7025.     DX = port (00h-03h)
  7026. SeeAlso: AH=1Ah,AH=8Ah
  7027. ----------14FB-------------------------------
  7028. INT 14 - IBM/Yale EBIOS SERIAL I/O - SET OUTGOING MODEM SIGNALS
  7029.     AH = FBh
  7030.     AL = modem control register
  7031.         bit 0: data terminal ready
  7032.         1: request to send
  7033.         2: OUT1
  7034.         3: OUT2
  7035.         4: loopback
  7036.         bits 5-7 unused
  7037.     DX = port (00h-03h)
  7038. ----------14FC-------------------------------
  7039. INT 14 - IBM/Yale EBIOS SERIAL I/O - READ CHARACTER, NO WAIT
  7040.     AH = FCh
  7041.     DX = port (00h-03h)
  7042. Return: AH = RS232 status bits (see AH=00h)
  7043.     AL = character
  7044. SeeAlso: AH=02h,AH=0Ch,AX=FF02h
  7045. ----------14FD02-----------------------------
  7046. INT 14 - IBM/Yale EBIOS SERIAL I/O - READ STATUS
  7047.     AX = FD02h
  7048. Return: CX = number of characters available
  7049. ----------14FF02-----------------------------
  7050. INT 14 - IBM/Yale EBIOS SERIAL I/O - BUFFERED READ
  7051.     AX = FF02h
  7052.     CX = length
  7053.     DX = port (00h-03h)
  7054.     ES:BX -> buffer
  7055. Return: CX = number of characters read
  7056. SeeAlso: AH=18h,AH=83h"COURIERS",AH=A5h"BAPI",AH=FCh
  7057. ---------------------------------------------
  7058. Interrupt List, part 2 of 8
  7059. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  7060. ----------15---------------------------------
  7061. INT 15 - Microsoft TSR Specification
  7062.     No additional information available at this time.
  7063. ----------1500-------------------------------
  7064. INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)
  7065.     AH = 00h
  7066. Return: CF set on error
  7067.         AH = 86h no cassette present
  7068.     CF clear if successful
  7069. SeeAlso: AH=01h"CASSETTE"
  7070. ----------1500-------------------------------
  7071. INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS
  7072.     AH = 00h
  7073. Return: CX = signed X count
  7074.     DX = signed Y count
  7075. ----------1500-------------------------------
  7076. INT 15 - VMiX v2+ - INSTALLATION CHECK
  7077.     AH = 00h
  7078. Return: DX = 0798h if installed
  7079.         AX = version (AH = major, AL = minor)
  7080. ----------1500-------------------------------
  7081. INT 15 - MultiDOS Plus - GIVE UP TIME SLICE
  7082.     AH = 00h
  7083. Note:    if issued by the highest-priority task while MultiDOS is using
  7084.       priority-based rather than round-robin scheduling, control will be
  7085.       returned to the caller immediately
  7086. SeeAlso: AH=03h"MultiDOS",AX=1000h
  7087. ----------1501-------------------------------
  7088. INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
  7089.     AH = 01h
  7090. Return: CF set on error
  7091.         AH = 86h no cassette present
  7092.     CF clear if successful
  7093. SeeAlso: AH=00h"CASSETTE"
  7094. ----------1501-------------------------------
  7095. INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
  7096.     AH = 01h
  7097.     AL = NVRAM location (00h to 3Fh)
  7098.     BL = NVRAM data value
  7099. Return: AH = return code
  7100.         00h OK
  7101.         01h address bad
  7102.         02h write error
  7103. SeeAlso: AH=02h"Amstrad"
  7104.  
  7105. Format of NVRAM:
  7106. Offset    Size    Description
  7107.  00h    BYTE    time of day: seconds
  7108.  01h    BYTE    alarm time: seconds
  7109.  02h    BYTE    time of day: minutes
  7110.  03h    BYTE    alarm time: minutes
  7111.  04h    BYTE    time of day: hours
  7112.  05h    BYTE    alarm time: hours
  7113.  06h    BYTE    day of week, 1 = Sunday
  7114.  07h    BYTE    day of month
  7115.  08h    BYTE    month
  7116.  09h    BYTE    year mod 100
  7117.  0Ah    BYTE    RTC status register A
  7118.         bit 7: set if date/time being updated
  7119.             6-4: time base speed, default 010 = 32768 Hz
  7120.             3-0: interrupt rate selection, default 0110 = 1024 Hz
  7121.  0Bh    BYTE    RTC status register B
  7122.         bit 7: clear if normal update, set if abort update
  7123.             6: periodic interrupt enable
  7124.             5: alarm interrupt enable
  7125.             4: update end interrupt enable
  7126.             3: square wave enable
  7127.             2: date mode (clear = BCD, set = binary)
  7128.             1: 24-hour format
  7129.             0: daylight saving time enable
  7130.  0Ch    BYTE    RTC status register C (read-only)
  7131.         bit 7: IRQF flag
  7132.             6: PF flag
  7133.             5: AF flag
  7134.             4: UF flag
  7135.  0Dh    BYTE    RTC status register D
  7136.         bit 7: battery good
  7137.  0Eh  6 BYTEs    time and date machine last used
  7138.  14h    BYTE    user RAM checksum
  7139.  15h    WORD    Enter key scancode/ASCII code
  7140.  17h    WORD    Forward delete key scancode/ASCII code
  7141.  19h    WORD    Joystick fire button 1 scancode/ASCII code
  7142.  1Bh    WORD    Joystick fire button 2 scancode/ASCII code
  7143.  1Dh    WORD    mouse button 1 scancode/ASCII code
  7144.  1Fh    WORD    mouse button 2 scancode/ASCII code
  7145.  21h    BYTE    mouse X scaling factor
  7146.  22h    BYTE    mouse Y scaling factor
  7147.  23h    BYTE    initial VDU mode and drive count
  7148.  24h    BYTE    initial VDU character attribute
  7149.  25h    BYTE    size of RAM disk in 2K blocks
  7150.  26h    BYTE    initial system UART setup byte
  7151.  27h    BYTE    initial external UART setup byte
  7152.  28h 24 BYTEs    available for user application
  7153. Note:    bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
  7154.       the clock chip
  7155. ----------1501-------------------------------
  7156. INT 15 - VMiX - "sys_chanreq" - I/O CHANNEL OBJECT MANAGER
  7157.     AH = 01h
  7158.     STACK:    WORD    object ID of requestor
  7159.         DWORD    pointer to ASCIZ name of requested method
  7160.             "assign" assign channel to object
  7161.             "deassign" deassign channel
  7162.             "cursor" set cursor on/off
  7163.             "init" initialize comm port
  7164.             "open" open I/O channel
  7165.             "position" set cursor position
  7166.             "receive" get buffered packet from comm port
  7167.             "send" send buffered packet to comm port
  7168.             "vio" set current virtual I/O to specified channel
  7169.             "window" make window at cursor position
  7170.         ---if "assign"---
  7171.          WORD    object UID
  7172.          WORD    caller UID/PID
  7173.          DWORD    CSL with port
  7174.         ---if "deassign"---
  7175.          WORD    channel ID
  7176.         ---if "cursor"---
  7177.          WORD    channel ID (must be a SRCSINK)
  7178.          WORD    new state (0000h off, 0001h on)
  7179.         ---if "init"---
  7180.          WORD    channel ID (must be a SRCSINK)
  7181.          WORD    comm port number (00h-03h)
  7182.          WORD    UART init code
  7183.         ---if "open"---
  7184.          WORD    channel ID
  7185.         ---if "position"---
  7186.          WORD    channel ID (must be a SRCSINK)
  7187.          WORD    position (high byte = row, low byte = column)
  7188.         ---if "receive"---
  7189.          DWORD    pointer to buffer
  7190.         ---if "send"---
  7191.          WORD    length of buffer
  7192.          DWORD    pointer to buffer
  7193.         ---if "vio"---
  7194.          WORD    channel ID (must be a SRCSINK)
  7195.         ---if "window"---
  7196.          WORD    top left (high byte = row, low byte = column)
  7197.          WORD    bottom right (high byte = row, low byte = column)
  7198. Return: DX:AX -> IRP structure or 0000h:0000h 
  7199. SeeAlso: AH=00h"VMiX",AH=02h"VMiX"
  7200. ----------1501-------------------------------
  7201. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE
  7202.     AH = 01h
  7203.     AL = semaphore number (00h-3Fh)
  7204. Return: AH = status
  7205.         00h successful
  7206.         02h invalid semaphore number
  7207. Notes:    if the semaphore is not owned, ownership is assigned to the calling
  7208.       task and the call returns immediately
  7209.     if the semaphore is already owned by another task, the calling task
  7210.       is placed on a queue for the semaphore and suspended until it can
  7211.       become owner of the semaphore
  7212.     semaphore 0 is used internally by MultiDOS to synchronize DOS access
  7213. SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS"
  7214. ----------1502-------------------------------
  7215. INT 15 - CASSETTE - READ DATA
  7216.     AH = 02h
  7217.     CX = number of bytes to read
  7218.     ES:BX -> buffer
  7219. Return:    CF clear if successful
  7220.         DX = number of bytes read
  7221.         ES:BX -> byte following last byte read
  7222.     CF set on error
  7223.     AH = status
  7224.         00h successful
  7225.         01h CRC error
  7226.         02h bad tape signals
  7227.         04h no data
  7228.         80h invalid command
  7229.         86h no cassette present
  7230. SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE"
  7231. ----------1502-------------------------------
  7232. INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
  7233.     AH = 02h
  7234.     AL = NVRAM location (00h to 3Fh)
  7235. Return: AH = return code
  7236.         00h OK
  7237.         01h address bad
  7238.         02h checksum error
  7239.     AL = NVRAM data value
  7240. SeeAlso: AH=01h"Amstrad"
  7241. ----------1502-------------------------------
  7242. INT 15 - VMiX - "sys_memreq" - MEMORY OBJECT MANAGER
  7243.     AH = 02h
  7244.     STACK:    WORD    object ID of requestor
  7245.         DWORD    pointer to ASCIZ name of requested method
  7246.             "assign" allocate low memory block
  7247.             "assign extended" allocate extended memory pages
  7248.             "assign gdt" allocate GDT selector
  7249.             "paged" allocate low paged memory
  7250.             "paged extended" alllocate extended memory pages
  7251.             "deassign" free memory block
  7252.             "deassign gdt" free GDT selector
  7253.             "getvpage" get physical address for virtual page
  7254.             "setvpage" set physical address for virtual page
  7255.             "info" get VMiX memory usage info block
  7256.             "move" move contents of 32-bit memory
  7257.             "newmcb" make new DOS memory control block
  7258.             "owner" get process ID of MCB or PSP owner
  7259.             "umb" allocate upper memory block
  7260.             "video" toggle system use of vidoe memory and get stat
  7261.         ---if "assign"---
  7262.          WORD    number of objects
  7263.          WORD    size in bytes (multiple of 512 bytes)
  7264.         ---if "assign extended"---
  7265.          WORD    number of objects
  7266.          WORD    size in bytes (multiple of 4K)
  7267.         ---if "assign gdt"---
  7268.          WORD    access type (low byte)
  7269.          WORD    segment size in paragraphs
  7270.          DWORD    pointer to start of physical segment
  7271.         ---if "paged"---
  7272.          WORD    number of 512-byte pages
  7273.         ---if "paged extended"
  7274.          WORD    number of 4K pages
  7275.         ---if "deassign"---
  7276.          DWORD    pointer returned by previous allocation call
  7277.         ---if "deassign gdt"---
  7278.          WORD    GDT selector
  7279.         ---if "getvpage"---
  7280.          WORD    owner's process ID
  7281.          DWORD    pointer to buffer for page structure (struct VPGE)
  7282.         ---if "setvpage"---
  7283.          WORD    owner's process ID
  7284.          DWORD    pointer to new page structure (struct VPGE)
  7285.         ---if "info"---
  7286.          no additional arguments
  7287.         ---if "move"
  7288.          DWORD    32-bit source address
  7289.          DWORD    32-bit destination address
  7290.          WORD    number of words to move
  7291.         ---if "newmcb"---
  7292.          DWORD    pointer to new MCB's location
  7293.          WORD    size of memory block
  7294.          DWORD    pointer to ASCIZ name string (max 8 chars)
  7295.         ---if "owner"---
  7296.          WORD    MCB or PSP segment
  7297.         ---if "umb"---
  7298.          WORD    size in paragraphs
  7299.         ---if "video"---
  7300.          no additional arguments
  7301. Return: DX:AX -> memory block or VPGE struct or 0000h:0000h
  7302. SeeAlso: AH=00h"VMiX",AH=01h"VMiX"
  7303. ----------1502-------------------------------
  7304. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE
  7305.     AH = 02h
  7306.     AL = semaphore number (00h-3Fh)
  7307. Return: AH = status
  7308.         00h successful
  7309.         01h not semaphore owner
  7310.         02h invalid semaphore number
  7311. Notes:    if any tasks are waiting for the semaphore, the first task on the wait
  7312.       queue will become the new owner and be reawakened
  7313.     do not use within an interrupt handler
  7314. SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS"
  7315. ----------1503-------------------------------
  7316. INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
  7317.     AH = 03h
  7318.     CX = number of bytes to write
  7319.     ES:BX -> data buffer
  7320. Return: CF clear if successful
  7321.         ES:BX -> byte following last byte written
  7322.     CF set on error
  7323.     AH = status (see AH=02h"CASSETTE")
  7324.     CX = 0000h
  7325. SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"
  7326. ----------1503-------------------------------
  7327. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
  7328.     AH = 03h
  7329.     AL = value (I,R,G,B bits)
  7330. SeeAlso: AH=04h"Amstrad"
  7331. ----------1503-------------------------------
  7332. INT 15 - VMiX - "sys_pinput" - PROMPTED CONSOLE INPUT
  7333.     AH = 03h
  7334.     STACK:    DWORD    pointer to ASCII prompt
  7335.         WORD    field outline character
  7336.         WORD    length of input field (max 7Fh)
  7337.         DWORD    address of pointer to input buffer
  7338. Return: AX = length of input (input buffer is padded with blanks)
  7339. SeeAlso: AH=04h"VMiX"
  7340. ----------1503-------------------------------
  7341. INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL
  7342.     AH = 03h
  7343.     DX = number of time slices to remain suspended
  7344. Return: after specified interval has elapsed
  7345. Note:    when priority-based scheduling is in use, high-priority tasks should
  7346.       use this function to yield the processor
  7347. SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS"
  7348. ----------1504-------------------------------
  7349. INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
  7350.     AH = 04h
  7351.     ES:DI -> results buffer length 20h for System Parameter Table
  7352.     DS = segment containing ABIOS RAM extensions (zero if none)
  7353. Return: AH = 00h success: results at ES:DI
  7354.     CF set on failure
  7355. SeeAlso: AH=05h"ABIOS",C1h
  7356.  
  7357. Format of ABIOS System Parameter Table:
  7358. Offset    Size    Description
  7359.  00h    DWORD    FAR address of ABIOS Common Start Routine
  7360.  04h    DWORD    FAR address of ABIOS Interrupt Routine
  7361.  08h    DWORD    FAR address of ABIOS Time-out Routine
  7362.  0Ch    WORD    number of bytes of stack required by this ABIOS implementation
  7363.  0Eh 16 BYTEs    reserved
  7364.  1Eh    WORD    number of entries in initialization table
  7365. ----------1504-------------------------------
  7366. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
  7367.     AH = 04h
  7368.     AL = value (RDSEL1 and RDSEL0)
  7369. SeeAlso: AH=03h"Amstrad",05h"Amstrad"
  7370. ----------1504-------------------------------
  7371. INT 15 - VMiX - "sys_vprintf" - FORMATTED OUTPUT TO STREAM
  7372.     AH = 04h
  7373.     STACK:    DWORD    control string
  7374.         DWORD    array of arguments
  7375. SeeAlso: AH=03h"VMiX"
  7376. ----------1504-------------------------------
  7377. INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK
  7378.     AH = 04h
  7379.     AL = mailbox number (00h-3Fh)
  7380.     CX = message length in bytes
  7381.     DS:SI -> message
  7382. Return: AH = status
  7383.         00h successful
  7384.         01h out of message memory
  7385.         02h invalid mailbox number
  7386. Note:    the message is copied into a system buffer; the caller may immediately
  7387.       reuse its buffer
  7388. SeeAlso: AH=05h"MultiDOS"
  7389. ----------1505-------------------------------
  7390. INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
  7391.     AH = 05h
  7392.     ES:DI -> results buffer length (18h * Number_of_Entries)
  7393.     DS = segment containing ABIOS RAM extensions (zero if none)
  7394. Return: AH = 00h success: results at ES:DI
  7395.     CF set on failure
  7396. SeeAlso: AH=04h"ABIOS",C1h
  7397.  
  7398. Format of one entry of ABIOS Initialization Table:
  7399. Offset    Size    Description
  7400.  00h    WORD    device ID
  7401.  02h    WORD    number of Logical IDs
  7402.  04h    WORD    Device Block length (zero for ABIOS patch or extension)
  7403.  06h    DWORD    -> init routine for Device Block and Function Transfer Table
  7404.  0Ah    WORD    request block length
  7405.  0Ch    WORD    Function Transfer Table length (zero for a patch)
  7406.  0Eh    WORD    Data Pointers length (in Common Data Area)
  7407.  10h    BYTE    secondary device ID (hardware level this ABIOS ver supports)
  7408.  11h    BYTE    revision (device driver revision level this ABIOS supports)
  7409.  12h  6 BYTEs    reserved
  7410. ----------1505-------------------------------
  7411. INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
  7412.     AH = 05h
  7413.     AL = value (I,R,G,B bits)
  7414. SeeAlso: AH=04h"Amstrad"
  7415. ----------1505-------------------------------
  7416. INT 15 - VMiX - "sys_getpid" - GET PROCESS ID OF CURRENT PROCESS
  7417.     AH = 05h
  7418. Return: AX = process ID
  7419. SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX"
  7420. ----------1505-------------------------------
  7421. INT 15 - MultiDOS Plus - CHECK MAILBOX
  7422.     AH = 05h
  7423.     AL = mailbox number (00h-3Fh)
  7424. Return: AH = status
  7425.         00h successful
  7426.         DX = length of first message in queue, 0000h if no message
  7427.         02h invalid mailbox number
  7428. SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS"
  7429. ----------1506-------------------------------
  7430. INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
  7431.     AH = 06h
  7432. Return: BX = version number
  7433. ----------1506-------------------------------
  7434. INT 15 - VMiX - "sys_getpcb" - GET POINTER TO PROCESS CONTROL BLOCK
  7435.     AH = 06h
  7436.     STACK:    WORD    process ID
  7437. Return: DX:AX -> process control block
  7438. SeeAlso: AH=05h"VMiX",AH=07h"VMiX",AH=08h"VMiX"
  7439. ----------1506-------------------------------
  7440. INT 15 - MultiDOS Plus - READ MAILBOX
  7441.     AH = 06h
  7442.     AL = mailbox number (00h-3Fh)
  7443.     CX = size of buffer in bytes
  7444.     ES:DI -> buffer for message
  7445. Return: AH = status
  7446.         00h successful
  7447.         CX = number of bytes copied
  7448.         DX = actual length of message
  7449.         02h invalid mailbox number
  7450. Note:    if the caller's buffer is not large enough, the message is truncated
  7451.       and the remainder is lost
  7452. SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS"
  7453. ----------1507-------------------------------
  7454. INT 15 - VMiX - "sys_getocb" - GET POINTER TO OBJECT CONTROL BLOCK
  7455.     AH = 07h
  7456.     STACK:    WORD    object type
  7457. Return: DX:AX -> object control block
  7458. SeeAlso: AH=06h"VMiX",AH=08h"VMiX"
  7459. ----------1507-------------------------------
  7460. INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)
  7461.     AH = 07h
  7462.     BX:CX = entry point of new task
  7463.     DX = stack size in paragraphs
  7464. Return: AH = status
  7465.         00h successful
  7466.         01h no free task control blocks
  7467.         02h no free memory for task's stack
  7468. Note:    execution returns immediately to calling task
  7469. SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS"
  7470. ----------1508-------------------------------
  7471. INT 15 - VMiX - "sys_getccb" - GET CHANNEL CONTROL BLOCK
  7472.     AH = 08h
  7473.     STACK:    WORD    channel ID
  7474. Return: DX:AX -> channel control block
  7475. SeeAlso: AH=06h"VMiX",AH=07h"VMiX"
  7476. ----------1508-------------------------------
  7477. INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)
  7478.     AH = 08h
  7479. Return: calling task terminated, so execution never returns to caller
  7480. Notes:    an internal task must be terminated with this function rather than a
  7481.       DOS termination function
  7482.     task's stack space is returned to parent task's memory pool
  7483. SeeAlso: AH=07h"MultiDOS"
  7484. ----------1509-------------------------------
  7485. INT 15 - VMiX - "sys_getqueue" - GET ID OF QUEUED ELEMENT
  7486.     AH = 09h
  7487.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  7488.         WORD    subqueue ID
  7489. Return: AX = queue ID
  7490. SeeAlso: AH=0Ah"VMiX"
  7491. ----------1509-------------------------------
  7492. INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY
  7493.     AH = 09h
  7494.     AL = new priority
  7495. Note:    the priority has different meanings depending on whether priority-
  7496.       based or round-robin scheduling is used
  7497. SeeAlso: AH=07h"MultiDOS"
  7498. ----------150A-------------------------------
  7499. INT 15 - VMiX - "sys_qetqnext" - GET ID OF NEXT QUEUED ELEMENT
  7500.     AH = 0Ah
  7501.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  7502.         WORD    ID of current element in queue chain
  7503. Return: AX = ID of next element
  7504. SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX"
  7505. ----------150A-------------------------------
  7506. INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL
  7507.     AH = 0Ah
  7508.     AL = new interval
  7509.         00h = 55.0 ms (default)
  7510.         80h = 27.5 ms
  7511.         40h = 13.75 ms
  7512.         20h = 6.88 ms
  7513.         10h = 3.44 ms
  7514.         08h = 1.72 ms
  7515. SeeAlso: AH=03h"MultiDOS"
  7516. ----------150B-------------------------------
  7517. INT 15 - VMiX - "sys_sysreq" - SYSTEM CONFIGURATION MANAGER
  7518.     AH = 0Bh
  7519.     STACK:    WORD    caller's UID
  7520.         DWORD    pointer to ASCIZ name of requested method
  7521.             "abort" abort current send/receive on comm port
  7522.             "block" start/end critical section
  7523.             "close" terminate interrupt-drive comm I/O
  7524.             "open" prepare comm port for interrupt-driven I/O
  7525.             "delay" set delay timer and wait
  7526.             "hibernate" put process to sleep
  7527.             "ints" enable/disable interrupt-driven INT 14h
  7528.             "length" get current send/receive buffer offsets
  7529.             "kswitch" switch stacks
  7530.             "numproc" get number of active processes
  7531.             "protocol" set protocol function for comm interrupts
  7532.             "relocate" set/reset VMiX flag for relocating to himem
  7533.             "status" get current open comm port status
  7534.             "wake" awaken a process
  7535.             "xport" get comm port polled for logins
  7536.         ---if "abort"---
  7537.          no additional arguments
  7538.         ---if "block"---
  7539.          WORD    0000h end, 0001h start
  7540.         ---if "close"---
  7541.          no additional arguments
  7542.         ---if "open"---
  7543.          WORD    comm port (00h-03h)
  7544.          WORD    BIOS parameter byte (see INT 14/AH=00h), except
  7545.             bits 7-5 = 000 for 19200, 001 for 38400, 011 for 115200
  7546.         ---if "delay"---
  7547.          WORD    time in seconds
  7548.         ---if "hibernate"---
  7549.          WORD    process ID
  7550.         ---if "ints"---
  7551.          WORD    0000h if no, 0001h if yes
  7552.         ---if "length","numproc","relocate","status","xport"---
  7553.          no additional arguments
  7554.         ---if "kswitch"---
  7555.          DWORD    pointer to new stack
  7556.         ---if "protocol"---
  7557.          DWORD    pointer to function (must be in low "assign"ed memory
  7558.             when in 386 mode)
  7559.         ---if "wake"---
  7560.          WORD    process ID
  7561. Return: DX:AX -> result or 0000h:0000h
  7562.         ---if "length"---
  7563.          BYTE    receive offset
  7564.          BYTE    send offset
  7565.         ---if "kswitch"---
  7566.          DWORD    old stack pointer
  7567.         ---if "numproc"---
  7568.          WORD    number of active processes
  7569.         ---if "status"---
  7570.          current open comm port status
  7571.         ---if "xport"---
  7572.          current comm port being polled for logins
  7573. SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX"
  7574. ----------150B-------------------------------
  7575. INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY
  7576.     AH = 0Bh
  7577. Notes:    sets calling task's screen pointer to actual screen memory; the pointer
  7578.       may be restored with AH=0Ch
  7579.     caller's video mode must be same as foreground task's video mode
  7580.     any text written while in the background will be saved to the
  7581.       foreground task's virtual screen when it switches to the background
  7582.     useful if a background task wants to display a message on the
  7583.       foreground screen
  7584. SeeAlso: AH=0Ch"MultiDOS"
  7585. ----------150C-------------------------------
  7586. INT 15 - VMiX - "sys_getstack" - GET POINTER TO PROCESS TSS STACK
  7587.     AH = 0Ch
  7588.     STACK:    WORD    process ID
  7589. Return: DX:AX -> TSS stack store
  7590. SeeAlso: AH=00"VMiX"
  7591. ----------150C-------------------------------
  7592. INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY
  7593.     AH = 0Ch
  7594. Note:    restores task's screen pointer saved by AH=0Bh; must not be called
  7595.       unless AH=0Bh has been called first
  7596. SeeAlso: AH=0Bh"MultiDOS"
  7597. ----------150D-------------------------------
  7598. INT 15 - VMiX - "sys_spawn" - START A CHILD PROCESS JOB SHELL
  7599.     AH = 0Dh
  7600.     STACK:    DWORD    ASCIZ string starting with requested I/O channel and
  7601.             followed by standard VMiX shell command string
  7602. Return: AX = process ID or error code "SYS_ERROR"
  7603. Note:    the maximum string length is 7Fh characters
  7604. SeeAlso: AH=0Eh"VMIX",AH=11h"VMiX",INT 21/AH=4Bh
  7605. ----------150D-------------------------------
  7606. INT 15 - MultiDOS Plus - DISABLE MULTITASKING
  7607.     AH = 0Dh
  7608. Note:    calling task receives all time slices until AH=0Eh is called; this
  7609.       allows time-critical events or nonreentrant code to be processed
  7610. SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS"
  7611. ----------150E-------------------------------
  7612. INT 15 - VMiX - "sys_kill" - HARD TERMINATE PROCESS
  7613.     AH = 0Eh
  7614.     STACK:    WORD    process ID
  7615. Return: AX = status (SYS_OK or SYS_ERROR)
  7616. SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX"
  7617. ----------150E-------------------------------
  7618. INT 15 - MultiDOS Plus - ENABLE MULTITASKING
  7619.     AH = 0Eh
  7620. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS"
  7621. ----------150F-------------------------------
  7622. INT 15 C - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
  7623.     AH = 0Fh
  7624.     AL = phase code
  7625.         00h reserved
  7626.         01h surface analysis
  7627.         02h formatting
  7628. Return: CF clear if formatting should continue, set if it should terminate
  7629. Note:    called during ESDI drive formatting after each cylinder is completed
  7630. SeeAlso: INT 13/AH=1Ah
  7631. ----------150F-------------------------------
  7632. INT 15 - VMiX - "sys_getqkey" - GET KEY FIELD OF QUEUED ELEMENT
  7633.     AH = 0Fh
  7634.     STACK:    WORD    queue ID (0 = process queue, 1 = object q, 3 = type q)
  7635.         WORD    ID of element in queue chain
  7636. Return: AX = key
  7637. SeeAlso: AH=0Ah"VMiX"
  7638. ----------150F-------------------------------
  7639. INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND
  7640.     AH = 0Fh
  7641.     DS:BX -> ASCIZ command
  7642. Return: after command has been processed
  7643. Notes:    specified string is executed as if it had been typed at the MultiDOS
  7644.       command prompt
  7645.     the task is placed on a queue which MultiDOS examines periodically and
  7646.       is suspended until MultiDOS has processed the command
  7647.     all lowercase characters up to the first blank are converted to upper
  7648.       case within the given buffer
  7649. ----------1510-------------------------------
  7650. INT 15 - VMiX - "sys_virtual" - EXECUTE CONFORMING FUNCTION IN PROTECTED MODE
  7651.     AH = 10h
  7652.     STACK:    DWORD    pointer to function
  7653.           N    WORDs    function args
  7654. Return: AX = function's return value??? (not specified in documentation)
  7655. Note:    while the function is executing, the following global descriptors are
  7656.       available:
  7657.         20h stack segment
  7658.         38h code segment of function
  7659.         40h data alias for function's code segment
  7660.       additional GDT descriptors can be allocated using AH=02h with
  7661.       function "assign gdt"
  7662. SeeAlso: AH=02h"VMiX",AH=51h"VMiX"
  7663. ----------1510-------------------------------
  7664. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
  7665.     AH = 10h
  7666.     AL = semaphore number (00h-3Fh)
  7667. Return: AH = status
  7668.         00h semaphore not in use
  7669.         01h semaphore owned by another task
  7670.         02h invalid semaphore number
  7671.         03h semaphore owned by caller
  7672. SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
  7673. ----------151000-----------------------------
  7674. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  7675.     AX = 1000h
  7676. Return: after other processes run
  7677. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  7678.       the current time-slice is set to expire at the next clock tick rather
  7679.       than immediately
  7680. SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=89h,INT 21/AH=EEh"DoubleDOS"
  7681. SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah
  7682. SeeAlso: INT 7F/AH=E8h
  7683. ----------151001-----------------------------
  7684. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  7685.     AX = 1001h
  7686.     BX = number of bytes to allocate
  7687. Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
  7688.     AX = status (DV v2.42)
  7689.         0000h successful
  7690.         0001h failed
  7691. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  7692.       common memory.  Under DV v2.42, this call never generates a user
  7693.       prompt regardless of the SETERROR value; instead, it always returns
  7694.       AX=0001h and ES:DI=0000h:0000h if out of memory
  7695. SeeAlso: AX=1002h,AX=102Eh,AX=DE0Ch,AX=DE15h
  7696. ----------151002-----------------------------
  7697. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  7698.     AX = 1002h
  7699.     ES:DI -> previously allocated block
  7700. Return: block freed
  7701. SeeAlso: AX=1001h,AX=DE0Dh
  7702. ----------151003-----------------------------
  7703. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  7704.     AX = 1003h
  7705.     BH = attribute
  7706.     BL = character
  7707.     DX = segment of object handle for window
  7708. Note:    BX=0 does not display anything, it only positions the hardware cursor
  7709. ----------1510-------------------------------
  7710. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  7711.     AH = 10h
  7712.     AL = 04h thru 12h
  7713. Return: pops up "Programming error" window in DV 2.x
  7714. ----------151013-----------------------------
  7715. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  7716.     AX = 1013h
  7717.     ES:DI -> FAR service routine
  7718. Return: BX = bit mask indicating which bit was allocated
  7719.          0000h if no more bits available
  7720. SeeAlso: AX=1014h,AX=1015h
  7721. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  7722.       interrupt; if other calls need to be made, the interrupt handler
  7723.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  7724. ----------151014-----------------------------
  7725. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  7726.     AX = 1014h
  7727.     BX = bit mask from INT 15/AX=1013h
  7728. SeeAlso: AX=1013h,AX=1015h
  7729. ----------151015-----------------------------
  7730. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  7731.     AX = 1015h
  7732.     BX = bit mask for interrupts to post
  7733. Return: indicated routines will be called: (DV 2.0x) at next task switch
  7734.                        (DV 2.2x) immediately on return from
  7735.                              hardware interrupt
  7736. SeeAlso: AX=1013h,AX=1014h
  7737. Notes:    this is one of the few TopView calls which are allowed from a hardware
  7738.       interrupt handler
  7739.     the handler will be called with ES containing the segment of the handle
  7740.       of the next task to be executed; on return, ES must be the segment of
  7741.       a task handle
  7742. ----------151016-----------------------------
  7743. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  7744.     AX = 1016h
  7745.     ES:DI = possible object handle
  7746. Return: BX = FFFFh if ES:DI is a valid object handle
  7747.          0000h if ES:DI is not
  7748. Note:    under DESQview versions prior to 2.50, an object handle is always a
  7749.       pointer to the object; for versions 2.50 and up, only task handles
  7750.       are always pointers (other handles may consist of a unique object
  7751.       number and offset into DESQview's common memory)
  7752. SeeAlso: AX=DE14h,AX=DE2Bh,AX=DE2Ch
  7753.  
  7754. Format of object:
  7755. Offset    Size    Description
  7756.  00h    WORD    offset in common memory of previous object of same type
  7757.  02h    WORD    offset in common memory of next object of same type
  7758.  04h    WORD    signature FEDCh (DV 2.42-)
  7759.         signature FEDCh or object number (DV 2.50+)
  7760.  06h    WORD    object type
  7761.         00h window/task
  7762.         01h mailbox
  7763.         02h keyboard
  7764.         03h timer
  7765.         04h pointer
  7766.         05h panel
  7767.         06h objectq
  7768.  08h    DWORD    object handle to return to caller
  7769.  0Ch    DWORD    canonicalized object address (segment = common memory)
  7770.  10h    WORD    offset in common memory of owning task
  7771.  12h    WORD    mapping context
  7772.     remainder varies by object type and DESQview version
  7773. ---v2.42 keyboard object---
  7774.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  7775.         bit 15: keyboard opened
  7776.  16h  4 BYTEs    ???
  7777.  1Ah    WORD    priority in OBJECTQ???
  7778.  1Ch    ...
  7779.  25h    WORD    offset in common memory of ??? task
  7780.  27h  4 BYTEs    ???
  7781. ---v2.42 objectq object---
  7782.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  7783.         bit 15: OBJECTQ opened
  7784.  16h  2 BYTEs    ???
  7785.  18h    WORD    offset in common memory of ??? task
  7786.  1Ah  6 BYTEs    ???
  7787. ---v2.42 mailbox object---
  7788.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  7789.         bit 15: mailbox opened
  7790.  1Ah    WORD    priority in OBJECTQ???
  7791.  1Ch  6 BYTEs    ???
  7792.  22h    WORD    offset in common memory of mailbox name (counted string)
  7793.         0000h if no name
  7794.      <= 5 BYTEs    ???
  7795. ---v2.22-2.42 window/task object---
  7796.  14h    BYTE    00h window, 01h task
  7797.  15h    BYTE    internal (not Switch menu) window number???
  7798.  16h    BYTE    internal (not Switch menu) window number???
  7799.  17h    WORD    segment of internal window record
  7800.  19h  2 BYTEs    ???
  7801.  1Bh    BYTE    cursor row
  7802.  1Ch    BYTE    cursor column
  7803.  1Dh  2 BYTEs    ???
  7804.  1Fh    BYTE    window height (logical)
  7805.  20h    BYTE    window width (logical)
  7806.  21h    BYTE    window position, row
  7807.  22h    BYTE    window position, column
  7808.  23h    BYTE    window height (visible)
  7809.  24h    BYTE    window width (visible)
  7810.  25h    BYTE    row of top of frame (or window if unframed)
  7811.  26h    BYTE    column of left of frame (or window if unframed)
  7812.  27h    BYTE    window height (physical, including frame)
  7813.  28h    BYTE    window width (physical, including frame)
  7814.  29h 10 BYTEs    ???
  7815.  33h    BYTE    minimum height of window
  7816.  34h    BYTE    minimum width of window
  7817.  35h    BYTE    maximum height of window
  7818.  36h    BYTE    maximum width of window
  7819.  37h  3 BYTEs    ???
  7820.  3Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  7821.  42h 24 BYTEs    attributes???
  7822.  5Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  7823.  62h  6 BYTEs    ???
  7824.  68h    WORD    offset in common memory of window name or 0000h if untitled
  7825.  6Ah    WORD    length of window name
  7826.  6Ch  2 BYTEs    ???
  7827.  6Eh    WORD    offset of logical cursor in window (in character cells)
  7828.  70h    DWORD    pointer to field table for window
  7829.  74h  3 BYTEs    ???
  7830.  77h    BYTE    number of last-visited field
  7831.  78h    DWORD    pointer to field table entry for last-visited field
  7832.  7Ch  3 BYTEs    ???
  7833.  7Fh    BYTE    select field marker character
  7834.  80h    BYTE    ??? bit flags
  7835.         bit 0: allow ECh window stream opcode to change reverse logattr
  7836.         bit 1: alternate field processing mode selected
  7837.  81h    BYTE    ???
  7838.  82h    DWORD    notification function (manager stream opcode 8Ah)
  7839.         no notification if segment = 0000h
  7840.  86h    DWORD    notification argument (manager stream opcode 8Bh)
  7841.  8Ah    WORD    offset in common memory of ??? window object or 0000h
  7842.  8Ch    WORD    offset in common memory of ??? window object or 0000h
  7843.  8Eh    WORD    offset in common memory of ??? window object or 0000h
  7844.  8Ch  6 BYTEs    ???
  7845.  ---task object only
  7846.  92h 11 BYTEs    ???
  7847.  9Bh    BYTE    ??? bit flags
  7848.         bit 3: ???
  7849.         bit 6: perform protected-attribute processing on select fields
  7850.  9Ch    BYTE    ???
  7851.  9Dh    WORD    offset in common memory of current register save record
  7852.         (see below).  No register save record in use if < 01C0h
  7853.  9Fh    WORD    offset in common memory of task's keyboard object
  7854.  A1h    WORD    offset in common memory of task's OBJECTQ object
  7855.  A3h    WORD    offset in common memory of task's mailbox object
  7856.  A5h    WORD    semaphore: FFFFh if on user stack, else on task's private stack
  7857.  A7h    DWORD    user's SS:SP
  7858.  ABh    WORD    task's private SP (SS read from offset 0Ah)
  7859.  ADh  6 BYTEs    ???
  7860.  B3h    BYTE    ??? bit flags
  7861.         bit 0: run in foreground only
  7862.  B4h  2 BYTEs    ???
  7863.  B6h    BYTE    task status (see AX=DE2Ch)
  7864.  B7h  9 BYTEs    ???
  7865.  C0h    WORD    head pointer for keyboard buffer (wraps back to 00h after 80h)
  7866.  C2h    WORD    tail pointer for keyboard buffer (wraps back to 00h after 80h)
  7867.  C4h  2 BYTEs    ??? (0000h)
  7868.  C6h    WORD    segment of keyboard buffer for task
  7869.  C8h    WORD    offset in common memory of ??? keyboard object
  7870.  CAh    BYTE    ???
  7871.  CBh    WORD    offset in common memory of ??? object
  7872.  CEh    BYTE    ??? flag
  7873.  CFh    WORD    offset in common memory of default notify window for task
  7874.         or 0000h if none
  7875.  D1h  4 BYTEs    ???
  7876.  D5h    BYTE    window number on Switch Window menu
  7877.  D6h  5 BYTEs    ???
  7878.  DBh    WORD    offset in common memory of ??? object
  7879.  DDh  2 BYTEs    ???
  7880.  DFh    WORD    API level for task
  7881.  E1h    WORD    offset in common memory of ??? keyboard object
  7882.  E7h    WORD    segment of ???
  7883.  FDh    BYTE    ???
  7884. 119h    DWORD    SS:SP for ???
  7885. 11Dh  4 BYTEs    ???
  7886. 121h    DWORD    pointer to ???
  7887. 125h 35 BYTEs    ???
  7888. ---v2.22
  7889. 145h        task's default keyboard object
  7890. ---v2.42
  7891. 148h    WORD    ???
  7892. 14Ah    BYTE    ???
  7893. 14Dh 42 BYTEs    task's default keyboard object
  7894. 177h 32 BYTEs    task's ObjectQ object
  7895. 197h 41 BYTEs    task's default mailbox object
  7896. 1C0h 24 BYTEs    first register save record
  7897. 450h    --    default top of private stack
  7898.  
  7899. Format of Register Save Record:
  7900. Offset    Size    Description
  7901.  00h    WORD    AX
  7902.  02h    WORD    BX
  7903.  04h    WORD    CX
  7904.  06h    WORD    DX
  7905.  08h    WORD    DI
  7906.  0Ah    WORD    SI
  7907.  0Eh    WORD    DS
  7908.  10h    WORD    ES
  7909.  12h    DWORD    return address
  7910.  16h    WORD    original flags
  7911. ----------151017-----------------------------
  7912. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  7913.     AX = 1017h
  7914. Return: pops up "Programming error" window in DV 2.x
  7915. ----------151018-----------------------------
  7916. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  7917.     AX = 1018h
  7918.     BH = column
  7919.     BL = row
  7920.     ES = segment of object handle for window below which to search
  7921.          0000h = start search with topmost window
  7922. Return: ES = segment of object handle for window which is visible at the
  7923.            indicated position, or covered by indicated window
  7924.        = 0000h no window
  7925. SeeAlso: AX=1023h,AX=1024h
  7926. ----------151019-----------------------------
  7927. INT 15 - TopView - "SOUND" - MAKE TONE
  7928.     AX = 1019h
  7929.     BX = frequency in Hertz (0000h = silence)
  7930.     CX = duration in clock ticks (18.2 ticks/sec)
  7931. Return: immediately, tone continues to completion
  7932. Notes:    if another tone is already playing, the new tone does not start until
  7933.       completion of the previous one.  Up to 32 tones may be queued before
  7934.       the process is blocked until a note completes.
  7935.     in DV 2.00, the lowest tone allowed is 20 Hz
  7936.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  7937.       notes are also cancelled
  7938. SeeAlso: INT 16/AH=73h
  7939. ----------15101A-----------------------------
  7940. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  7941.     AX = 101Ah
  7942. Return: stack switched
  7943. Notes:    this call may not be nested; a second call must be preceded by a call
  7944.       to "USTACK" (AX=1025h)
  7945.     while TopView requires many API calls to be executed while on the
  7946.       task's internal stack, DESQview allows those calls to be executed
  7947.       regardless of the current stack
  7948. SeeAlso: AX=1025h
  7949. ----------15101B-----------------------------
  7950. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  7951.     AX = 101Bh
  7952. Return: task-switching temporarily disabled
  7953. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  7954.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  7955.       will again be disabled)
  7956.     suspends the caller until DOS is free
  7957. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  7958. SeeAlso: INT 60/DI=0602h
  7959. ----------15101C-----------------------------
  7960. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  7961.     AX = 101Ch
  7962. Return: task-switching enabled
  7963. Note:    this API call may be made from within a hardware interrupt handler
  7964. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
  7965. ----------15101D-----------------------------
  7966. INT 15 - TopView - "STOP" - STOP TASK
  7967.     AX = 101Dh
  7968.     ES = segment of object handle for task to be stopped
  7969.          (== handle of main window for that task)
  7970. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  7971. Note:    once a task has been stopped, additional "STOP"s are ignored
  7972. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  7973.       current task
  7974. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX",INT 21/AH=81h
  7975. ----------15101E-----------------------------
  7976. INT 15 - TopView - "START" - START TASK
  7977.     AX = 101Eh
  7978.     ES = segment of object handle for task to be started
  7979.          (== handle of main window for that task)
  7980. Return: indicated task is started up again
  7981. Note:    once a task has been started, additional "START"s are ignored
  7982. SeeAlso: AX=101Dh,AX=102Bh,INT 21/AH=82h
  7983. ----------15101F-----------------------------
  7984. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  7985.     AX = 101Fh
  7986.     BX = bit fields
  7987.          bits 0-12: number of characters to display
  7988.          bits 13,14: which mouse button may be pressed to remove window
  7989.              00 = either
  7990.              01 = left
  7991.              10 = right
  7992.              11 = either
  7993.          bit 15: beep if 1
  7994.     ES:DI -> text of message
  7995.     CH = width of error window (0 = default)
  7996.     CL = height of error window (0 = default)
  7997.     DX = segment of object handle
  7998. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  7999. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  8000. ----------151020-----------------------------
  8001. INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
  8002.     AX = 1020h
  8003. Return: pops up "Programming error" window in DV v2.00+
  8004. ----------151021-----------------------------
  8005. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  8006.     AX = 1021h
  8007.     BX = segment of object handle for task to interrupt (not self)
  8008.     DX:CX -> FAR routine to jump to next time task is run
  8009. Return: nothing
  8010. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  8011.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  8012.       needs to be preserved
  8013.     multiple PGMINTs to a single task are processed last-in first-out
  8014.     if the other task is in a DOS or DV API call, the interruption will
  8015.       occur on return from that call
  8016. ----------151022BX0000-----------------------
  8017. INT 15 - TopView - "GETVER" - GET VERSION
  8018.     AX = 1022h
  8019.     BX = 0000h
  8020. Return: BX nonzero, TopView or compatible loaded
  8021.     (BL = major version, BH = minor version)
  8022. Notes:    TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
  8023. ----------151023-----------------------------
  8024. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  8025.     AX = 1023h
  8026.     BX = segment of object handle for parent window within which to
  8027.          position the window (0 = full screen)
  8028.     ES = segment of object handle for window to be positioned
  8029.     DL = bit flags
  8030.          bits 0,1: horizontal position
  8031.         00 = current
  8032.         01 = center
  8033.         10 = left
  8034.         11 = right
  8035.          bits 2,3: vertical position
  8036.         00 = current
  8037.         01 = center
  8038.         10 = top
  8039.         11 = bottom
  8040.          bit 4: don't redraw screen if set
  8041.          bits 5-7 not used
  8042.     CH = number of columns to offset from position specified by DL
  8043.     CL = number of rows to offset from position specified by DL
  8044. Return: nothing
  8045. ----------151024-----------------------------
  8046. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  8047.     AX = 1024h
  8048.     BX = segment of object handle for window
  8049.           (0 = use default)
  8050. Return: ES:DI -> virtual screen
  8051.     CX = size of virtual screen in bytes
  8052.     DL = 00h text screen
  8053.          01h graphics screen
  8054. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  8055. ----------151025-----------------------------
  8056. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  8057.     AX = 1025h
  8058. Return: stack switched back
  8059. Notes:    call only after having switched to internal stack with AX=101Ah
  8060.     while TopView requires many API calls to be executed while on the
  8061.       task's private stack, DESQview allows those calls to be executed
  8062.       regardless of the current stack
  8063. SeeAlso: AX=101Ah
  8064. ----------1510-------------------------------
  8065. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  8066.     AH = 10h
  8067.     AL = 26h thru 2Ah
  8068. Return: pops up "Programming error" window in DV 2.x
  8069. ----------15102B-----------------------------
  8070. INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
  8071.     AX = 102Bh
  8072.     BX = segment of object handle for task
  8073. Return: nothing
  8074. Note:    forces a task which is waiting on its objectq to continue by placing
  8075.       the handle for the task on the objectq
  8076. SeeAlso: AX=101Dh,AX=101Eh,INT 21/AH=82h
  8077. ----------15102C-----------------------------
  8078. INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
  8079.     AX = 102Ch
  8080.     ES:DI -> contents of .PIF/.DVP file (see below)
  8081.     BX = size of .PIF/.DVP info
  8082. Return: BX = segment of object handle for new task
  8083.          0000h on error
  8084. SeeAlso: AX=DE24h,INT 21/AH=4Bh
  8085.  
  8086. Format of .PIF/.DVP file:
  8087. Offset    Size    Description
  8088.  00h    BYTE    reserved (0)
  8089.  01h    BYTE    checksum of bytes 02h through 170h
  8090.  02h 30 BYTEs    blank-padded program title
  8091.  20h    WORD    maximum memory to allocate to partition in K
  8092.  22h    WORD    minimum memory required in K
  8093.  24h 64 BYTEs    ASCIZ program pathname
  8094.  64h    BYTE    default drive letter ('A',...)
  8095.  65h 64 BYTEs    ASCIZ default directory name
  8096.  A5h 64 BYTEs    ASCIZ program parameters
  8097.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  8098.  E6h    BYTE    number of text pages used
  8099.  E7h    BYTE    number of first interrupt to save
  8100.  E8h    BYTE    number of last interrupt to save
  8101.  E9h    BYTE    rows in virtual screen buffer
  8102.  EAh    BYTE    columns in virtual screen buffer
  8103.  EBh    BYTE    initial window position, row
  8104.  ECh    BYTE    initial window position, column
  8105.  EDh    WORD    system memory in K
  8106.  EFh 64 BYTEs    ASCIZ shared program name
  8107. 12Fh 64 BYTEs    ASCIZ shared program data file
  8108. 16Fh    BYTE    flags1
  8109.         bit 7: writes text directly to screen
  8110.         bit 6: runs in foreground only
  8111.         bit 5: uses math coprocessor
  8112.         bit 4: accesses system keyboard buffer directly
  8113.         bits 3-1: reserved (0)
  8114.         bit 0: swappable
  8115. 170h    BYTE    flags2
  8116.         bit 6: uses command-line parameters in field at A5h
  8117.         bit 5: swaps interrupt vectors
  8118. ---information unique to .DVP files---
  8119. 171h  2 BYTEs    keys to use on open menu
  8120. 173h    WORD    size of script buffer in bytes
  8121. 175h    WORD    automatically give up CPU after this many tests for keyboard
  8122.         input in one clock tick (default 0 = never)
  8123. 177h    BYTE    nonzero = "uses own colors"
  8124. 178h    BYTE    nonzero if application swappable
  8125. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  8126.         in actual .DVP files, frequently 01h
  8127. 17Ch    BYTE    nonzero to automatically close on exit (see also offset 18Bh)
  8128. 17Dh    BYTE    nonzero if copy-protect floppy is required
  8129. ---information unique to DESQview 2.0+---
  8130. 17Eh    BYTE    .DVP version number
  8131.         00h DESQview v1.2+
  8132.         01h DESQview v2.0+
  8133.         02h DESQview v2.2+
  8134. 17Fh    BYTE    reserved (0)
  8135. 180h    BYTE    initial number of rows in physical window
  8136. 181h    BYTE    initial number of columns in physical window
  8137. 182h    WORD    maximum expanded memory to allow, in K
  8138. 184h    BYTE    flags3
  8139.         bit 7: automatically assign window position
  8140.         bit 5: maximum memory value has been specified
  8141.         bit 4: disallow "Close" command
  8142.         bit 3: foreground-only when doing graphics
  8143.         bit 2: don't virtualize
  8144.         bit 1: ??? set by DV 2.31 when "Runs in Background" = "D"
  8145. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  8146. 186h    BYTE    number of graphics pages used
  8147. 187h    WORD    extra system memory size
  8148. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  8149. ---information unique to DESQview 2.2+---
  8150. 18Ah    BYTE    serial port usage
  8151.         FFh uses all serial ports
  8152.         00h no serial ports
  8153.         01h only COM1
  8154.         02h only COM2
  8155. 18Bh    BYTE    flags4
  8156.         bit 7: automatically close application on exit if .COM or .EXE
  8157.             specified (see also offset 17Ch)
  8158.         bit 6: swappable if not using serial ports
  8159.         bit 5: start program with window hidden (v2.26+)
  8160.         bit 4: start program in background (v2.26+)
  8161.         bit 3: virtualize text
  8162.         bit 2: virtualize graphics
  8163.         bit 1: share CPU when foreground
  8164.         bit 0: share EGA when foreground and zoomed
  8165. 18Ch    BYTE    protection level for 386 machines
  8166. 18Dh 19 BYTEs    reserved (0) for regular DESQview
  8167. ---information unique to DESQview/X 1.0---
  8168. 18Dh    BYTE    X flags
  8169.         bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
  8170.                (NEWPROC) inherit DOS client layer usage
  8171.         bit 1: don't display DOS window
  8172.         bit 2: don't display wait message when opening window
  8173.         bits 3-7: unused (0)
  8174. 18Eh    BYTE    X keyboard behavior (0-3)
  8175. 18Fh    BYTE    font scaling
  8176.         00h fixed fonts
  8177.         01h scalable fonts
  8178. 190h 10 BYTEs    reserved (0)
  8179. 19Ah    WORD    length of data follownig XDVP signature
  8180. 19Ch  4 BYTEs    signature "XDVP"
  8181. 1A0h  N BYTEs    list of variable length records (see below)
  8182.  
  8183. Format of variable length record:
  8184. Offset    Size    Description
  8185.  00h    WORD    length of following record, 0000h if end of record list
  8186.  02h    BYTE    record type
  8187.         01h script filename, up to 64 characters
  8188.         02h command-line parameters (allows >64 characters on cmdline)
  8189.         03h environment inheritance
  8190.         04h environment string
  8191.         05h starting window position
  8192. ---types 01h,02h,04h---
  8193.  03h  N BYTEs    ASCII data
  8194. ---type 03h---
  8195.  03h    BYTE    inheritance
  8196.         00h do not inherit
  8197.         01h inherit environment
  8198. ---type 05h---
  8199.  03h  N BYTEs    ASCII copy of fields as typed into DVPMAN, separated by commas:
  8200.         starting row, starting column, starting height, starting width
  8201. Note:    if there are multiple occurrences of record types 01h, 02h, or 03h,
  8202.       only the last instance of each type is used; multiple occurrences of
  8203.       type 04h are concatenated
  8204. ----------15102D-----------------------------
  8205. INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  8206.     AX = 102Dh
  8207.     BL = subfunction
  8208.          00h determine whether using keyboard mouse
  8209.         Return: BL = 00h using real mouse
  8210.                  01h using keyboard mouse
  8211.          01h turn keyboard mouse on
  8212.          02h turn keyboard mouse off
  8213. ----------15102E-----------------------------
  8214. INT 15 - DESQview v2.40+ - ALLOCATE SYSTEM MEMORY
  8215.     AX = 102Eh
  8216.     BX = number of bytes
  8217. Return: AX = status
  8218.         0000h successful
  8219.         ES:DI -> allocated system memory
  8220.         0001h failed
  8221.         ES:DI = 0000h:0000h
  8222. Note:    under DV 2.42, this call is identical to AX=1001h
  8223. SeeAlso: AX=1001h,AX=1002h,AX=DE0Ch
  8224.  
  8225. Format of system memory block header (one paragraph before memory block):
  8226. Offset    Size    Description
  8227.  00h    WORD    segment of next header or 0000h
  8228.  02h    WORD    segment of previous header or 0000h
  8229.  04h    WORD    size of block in paragraphs, including header
  8230.  06h    BYTE    availability flag (00h in use, 01h free)
  8231. ----------1511-------------------------------
  8232. INT 15 - TopView commands
  8233.     AH = 11h
  8234.     AL = various (except 17h)
  8235. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  8236.       see those below
  8237. SeeAlso: AH=DEh
  8238. ----------1511-------------------------------
  8239. INT 15 - VMiX - "sys_system" - EXECUTE SHELL SYSTEM COMMANDS
  8240.     AH = 11h
  8241.     STACK:    DWORD    pointer to ASCIZ string containing a VMiX shell
  8242.             request (max len = 127)
  8243. Return: AX = status (SYS_OK or SYS_ERROR)
  8244. SeeAlso: AH=0Ch"VMiX"
  8245. ----------1511-------------------------------
  8246. INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
  8247.     AH = 11h
  8248. Note:    disables the Alt-Z MultiDOS command/program-selection hotkey
  8249. SeeAlso: AH=12h"MultiDOS"
  8250. ----------151117BX0000-----------------------
  8251. INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  8252.     AX = 1117h
  8253.     BX = 0000h    get current mapping context without setting
  8254.          nonzero    set new mapping context
  8255. Return: BX = mapping context in effect before call
  8256.     interrupts enabled
  8257. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  8258.     mapping contexts determine conventional-memory addressability; setting
  8259.       a mapping context ensures that the associated program and data areas
  8260.       are in memory for access.  Usable by drivers, TSRs and shared
  8261.       programs.
  8262.     caller need not be running under DESQview, but must ensure that the
  8263.       stack in use will not be mapped out by the call
  8264. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  8265. ----------1511DE-----------------------------
  8266. INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
  8267.     AX = 11DEh
  8268. Return: CF clear if installed
  8269.         AX = segment at which QEXT.SYS is located
  8270. Note:    a private entry point may be found by searching the beginning of the
  8271.       returned segment for the signature string
  8272.       "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  8273.       prior to the signature contains the QEXT version number in BCD,
  8274.       and the word prior to that contains the offset within the QEXT
  8275.       code segment of the private entry point
  8276. SeeAlso: INT 67/AH=3Fh
  8277.  
  8278. Call private entry point with:
  8279.     AH = 00h ???
  8280.     AH = nonzero ???
  8281. ----------1512-------------------------------
  8282. INT 15 - VMiX - "sys_sleep" - PUT PROCESS TO SLEEP
  8283.     AH = 12h
  8284.     STACK:    WORD    process ID
  8285. Return: AX = status (SYS_OK or SYS_ERROR)
  8286. SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
  8287. ----------1512-------------------------------
  8288. INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
  8289.     AH = 12h
  8290. Note:    enables the Alt-Z MultiDOS command/program-selection hotkey
  8291. SeeAlso: AH=11h"MultiDOS"
  8292. ----------1512--BH00-------------------------
  8293. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  8294.     AH = 12h
  8295.     BH = 00h
  8296.     BL = which handle to return
  8297.         00h handle in DWORD on top of stack
  8298.         01h current task's window handle
  8299.         02h given task's mailbox handle (task's handle on stack)
  8300.         03h current task's mailbox handle
  8301.         04h given task's keyboard handle (task's handle on stack)
  8302.         05h current task's keyboard object handle
  8303.         06h given task's OBJECTQ handle (task's handle on stack)
  8304.         07h current task's OBJECTQ handle
  8305.         08h      \
  8306.           thru > return 0000:0000 under DV < 2.26
  8307.         10h      /
  8308.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  8309.         0Dh (2.26+) task handle of owner (parent) of current task
  8310. Return: DWORD on top of stack is object handle
  8311. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  8312.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  8313.       window)
  8314. SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
  8315. ----------1512--BH01-------------------------
  8316. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  8317.     AH = 12h
  8318.     BH = 01h
  8319.     BL = object type to create
  8320.         00h (DV 2.0x only) handle is DWORD on top of stack
  8321.         01h (DV 2.0x only) use task's window handle
  8322.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  8323.         03h (DV 2.0x only) current task's mailbox
  8324.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  8325.         05h (DV 2.0x only) current task's keyboard object
  8326.         08h WINDOW class
  8327.         09h MAILBOX class
  8328.         0Ah KEYBOARD class
  8329.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  8330.         0Fh POINTER object
  8331.         10h PANEL object
  8332.     STACK: (if window object or WINDOW class)
  8333.            DWORD address to jump to (no new task if high word == 0)
  8334.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  8335.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  8336.            DWORD bytes system memory for input buffer for READ/READN
  8337.             (0 == none, -1 == default--same as logical window size)
  8338.            DWORD window size, columns
  8339.            DWORD window size, rows
  8340.            DWORD length of window title
  8341.            DWORD address of window title
  8342. Return: DWORD on top of stack is new object handle
  8343. Notes:    if a new task is created, it is started with
  8344.       AX = BX = SI = DI = BP = 0
  8345.       DX:CX = handle of parent task
  8346.       DS = ES = SS = segment of private stack (and new task's handle)
  8347.     new windows are orphans, inherit the colors/hidden status of the
  8348.       creating task's window, and are placed in the upper left hand corner
  8349.       of the screen but not automatically redrawn
  8350.     new keyboards are closed, and have all object bits cleared except for
  8351.       the hardware cursor bit
  8352. SeeAlso: AH=12h/BH=02h,AH=12h/BH=81h
  8353. ----------1512--BH02-------------------------
  8354. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  8355.     AH = 12h
  8356.     BH = 02h
  8357.     BL = object
  8358.         00h handle in DWORD on top of stack
  8359.         window: close window and free
  8360.         timer: free timer
  8361.         panel: free panel object
  8362.         pointer: free pointer
  8363.         01h task's window handle - kills task, never returns
  8364.         02h given task's mailbox (task's handle on top of stack)
  8365.         03h current task's mailbox
  8366.         04h given task's keyboard (task's handle on top of stack)
  8367.         05h current task's keyboard object
  8368. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  8369.       task windows also free any mailbox, objectq, and panel objects held
  8370.       by the task and any child tasks
  8371.     if the keyboard being freed is the default keyboard for a task, this
  8372.       call is equivalent to CLOSE
  8373.     panel and pointer objects are automatically closed if open
  8374. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh,AH=12h/BH=82h
  8375. ----------1512--BH03-------------------------
  8376. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  8377.     AH = 12h
  8378.     BH = 03h
  8379.     BL = object
  8380.         00h mailbox handle in DWORD on top of stack
  8381.         02h sender of last msg read from mailbox (task's handle on stack)
  8382.         03h sender of last msg read from current task's mailbox
  8383. Return: DWORD on stack is task handle of message sender
  8384. SeeAlso: AH=12h/BH=00h,AH=12h/BH=83h
  8385. ----------1512--BH03-------------------------
  8386. INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  8387.     AH = 12h
  8388.     BH = 03h
  8389.     BL = window to be connected
  8390.         00h handle of window to be attached in DWORD on top of stack
  8391.         01h attach current task's main window
  8392.     STACK: DWORD handle of window to attach to or 00000000h to detach
  8393. Return: STACK popped
  8394. Notes:    when two windows are connected, both will move if the user moves either
  8395.     multiple windows may be attached to a single window, but each window
  8396.       may only be attached to one window at a time
  8397. SeeAlso: AH=12h/BH=83h
  8398. ----------1512--BX0300-----------------------
  8399. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  8400.     AH = 12h
  8401.     BX = 0300h
  8402.     STACK: DWORD handle of panel object
  8403. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  8404.            DWORD address of directory
  8405. Note:    a null string is returned if the object is not open
  8406. SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h
  8407.  
  8408. Format of panel file:
  8409. Offset    Size    Description
  8410.  00h  2 BYTEs    C0h C3h
  8411.  02h    BYTE    number of panels in file
  8412.  03h    for each panel in file:
  8413.         8 BYTEs  blank-padded panel name
  8414.           DWORD  panel offset in file
  8415.           WORD   panel length
  8416.     data for panels (each consists of one or more window/query/manager
  8417.     streams)
  8418.         first byte of each panel must be 1Bh, fifth byte must be E5h
  8419. ----------1512--BH04-------------------------
  8420. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  8421.     AH = 12h
  8422.     BH = 04h
  8423.     BL = window to read from
  8424.         00h handle is DWORD on top of stack
  8425.         01h use calling task's default window
  8426.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  8427.         0Dh (DV 2.26+) default window of parent task of current task
  8428. Return: STACK:    DWORD number of bytes read
  8429.         DWORD address of buffer
  8430. Notes:    reading starts at the current logical cursor position; the cursor is
  8431.       updated to point at the character following the last one read
  8432.     any translucent blanks (FFh) which are visible on screen are changed
  8433.       to the character which is seen through them
  8434.     the string produced by the read is placed in an input buffer which may
  8435.       be reused by the next READ or READN of a window
  8436.     window stream opcodes D8h and D9h determine whether the read returns
  8437.       characters or attributes
  8438. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h,AH=12h/BH=84h
  8439. ----------1512--BH04-------------------------
  8440. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  8441.     AH = 12h
  8442.     BH = 04h
  8443.     BL = object
  8444.         00h handle is DWORD on top of stack
  8445.         mailbox: wait for and get next message
  8446.         keyboard: wait for and get pointer to next input buffer
  8447.         pointer: wait for and get next message
  8448.         02h get next message from mailbox (task's handle on top of stack)
  8449.         03h get next message from current task's mailbox
  8450.         04h get the next input from keyboard (handle on top of stack)
  8451.         05h get the next input from task's default keyboard
  8452.         06h wait for input from any object in OBJECTQ (handle on stack)
  8453.         07h wait for input from any object in task's default OBJECTQ
  8454. Return: STACK: (if objectq) DWORD handle of object with input
  8455.            (otherwise)  DWORD number of bytes
  8456.                 DWORD address
  8457. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  8458.       containing the character code as returned by the BIOS; the BIOS scan
  8459.       code is available via the STATUS call if the character is zero
  8460.     for a keyboard in field mode, the input buffer format is determined
  8461.       by the field table header for the window the keyboard is attached to
  8462.     keyboard input buffers and mailbox message buffers may be invalidated
  8463.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  8464. SeeAlso: AH=12h/BH=05h"OBJECT",AH=12h/BH=84h
  8465.  
  8466. Format of pointer message:
  8467. Offset    Size    Description
  8468.  00h    WORD    row
  8469.  02h    WORD    column
  8470.  04h    BYTE    status
  8471.         bit 7: set when press/release mode active and button pressed
  8472.         bit 6: set when press/release mode active and button released
  8473.         bits 7-2: number of clicks-1 if multiple-click mode active
  8474.         bits 1,0: button pressed (00=none,01=button1,10=button2)
  8475.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  8476. ----------1512--BX0400-----------------------
  8477. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  8478.     AH = 12h
  8479.     BX = 0400h
  8480.     STACK: DWORD timer's handle
  8481. Return: after timer expires
  8482.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  8483. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
  8484. ----------1512--BX0400-----------------------
  8485. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  8486.     AH = 12h
  8487.     BX = 0400h
  8488.     STACK: DWORD handle of panel object
  8489.            DWORD window's handle (or 0 for current task's window)
  8490.            DWORD length of panel name
  8491.            DWORD pointer to panel name
  8492. Return: STACK: DWORD handle of window which was used
  8493.            DWORD handle of keyboard or 0
  8494. Notes:    status of APPLY may be checked with STATUS message
  8495.     panel MUST have the following format
  8496.       first byte must be 1Bh (i.e. must start with a stream)
  8497.       first opcode in stream must be E5h
  8498.         single byte arg of opcode is interpreted thus:
  8499.           bits 7,6    11 means create new window
  8500.             10 means create new field table for existing window
  8501.             01 means use existing window and field table
  8502.           bit 5 if set, panel contains a field table 
  8503.             (creates a new keyboard and puts it in field mode)
  8504.           bit 4 if set, panel contains input fields
  8505.           bit 3 if set, panel contains select fields but no input fields
  8506.     if the panel contains input or select fields, a keyboard handle is
  8507.       returned; either the window's current open keyboard or a
  8508.       newly-created keyboard object.  The caller should read that keyboard
  8509.       to obtain input from the panel.
  8510. SeeAlso: AH=12h/BH=84h
  8511. ----------1512--BH05------------------------
  8512. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  8513.     AH = 12h
  8514.     BH = 05h
  8515.     BL = object
  8516.         00h handle is DWORD on top of stack
  8517.         timer: start timer to end at a specified time
  8518.         keyboard: add input buffer to queue
  8519.         pointer: move pointer icon to specified position
  8520.         02h send message by value/status=0 to mbox (task's handle on stack)
  8521.         03h send message by value/status=0 to current task's mailbox
  8522.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  8523.         05h add input buffer to task's default KEYBOARD queue
  8524.         06h add an object to OBJECTQ (handle on top of stack)
  8525.         07h add an object to task's default OBJECTQ
  8526.     STACK: (if mailbox)  DWORD length
  8527.                  DWORD address
  8528.            (if keyboard) DWORD status (scan code in keystroke mode)
  8529.                  DWORD length (should be 1 in keystroke mode)
  8530.                  DWORD address
  8531.            (if objectq)  DWORD handle of object to add
  8532.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  8533.                    only accurate to 1/18 sec)
  8534.            (if pointer)  DWORD column relative to origin of window
  8535.                  DWORD row relative to origin of window
  8536. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  8537.     the data and status written to a keyboard object must match the format
  8538.       returned by the keyboard object in the current mode
  8539.     the pointer position is scaled according to the current scaling factors
  8540. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  8541. ----------1512--BH05-------------------------
  8542. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  8543.     AH = 12h
  8544.     BH = 05h
  8545.     BL = window to write to
  8546.         00h DWORD on top of stack is window handle
  8547.         01h write string to task's default window
  8548.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  8549.         0Dh (DV 2.26+) default window of parent of current task
  8550.     STACK: DWORD object handle if handle passed on stack
  8551.            DWORD total length of string (high word == 0)
  8552.            DWORD address of string to display
  8553. Return: indicated actions performed
  8554.     a. non-control characters are displayed (opcodes DEh and DFh control
  8555.        whether the attributes are left or changed to the current attrib)
  8556.     b. CR/LF/BS/Tab cause the usual cursor movement
  8557.     c. ESC starts a data structure with additional commands if following
  8558.        byte is less than 20h; otherwise, it is written to the window
  8559.     STACK:    DWORD handle of new window if window stream opcode E6h
  8560.         else nothing
  8561. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  8562.  
  8563. Data Structure:
  8564.     MAGIC  DB  1Bh
  8565.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  8566.     LENGTH DW  ?   ; length of remainder in bytes
  8567.     var-length fields follow, each an OPCODE followed by
  8568.          zero or more args
  8569.  
  8570. MODE 00h (set or display values) "WINDOW STREAM"
  8571.     Opcodes:args
  8572.     00h  display 20h blanks with the default attribute
  8573.     01h-1Fh display OPCODE blanks with the default attribute
  8574.     20h  display char with default attribute 20h times
  8575.          BYTE char to repeat
  8576.     21h-3Fh display char with default attribute OPCODE-20h times
  8577.          BYTE char to repeat
  8578.     40h  display 20h blanks with specified attribute
  8579.          BYTE attribute of blanks
  8580.     41h-5Fh display OPCODE-40h blanks with specified attribute
  8581.          BYTE attribute of blanks
  8582.     60h  display next 20h characters
  8583.          20h BYTEs characters to display
  8584.     61h-7Fh display next OPCODE-60h characters
  8585.          N BYTEs characters to display
  8586.     80h-87h     display N blanks with default attribute
  8587.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  8588.               [000h means 800h]
  8589.     88h-8Fh display N copies of the character
  8590.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  8591.               [000h means 800h]
  8592.          BYTE character to repeat
  8593.     90h-97h     display N blanks with specified attribute
  8594.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  8595.               [000h means 800h]
  8596.          BYTE attribute
  8597.     98h-9FH     display string at logical cursor pos
  8598.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  8599.               [000h means 800h]
  8600.          N BYTEs string to display
  8601.     A0h  set logical cursor row
  8602.          BYTE row number (0 is top)
  8603.     A1h  set logical cursor column
  8604.          BYTE column number (0 is leftmost)
  8605.     A2h  set top edge of scrolling region
  8606.          BYTE row
  8607.     A3h  set left edge of scrolling region
  8608.          BYTE column
  8609.     A4h  set row of physical window position
  8610.          BYTE line
  8611.     A5h  set column of physical window position
  8612.          BYTE column
  8613.     A6h  set height of physical window
  8614.          BYTE #rows
  8615.     A7h  set width of physical window
  8616.          BYTE #columns
  8617.     A8h  set viewport row
  8618.          BYTE row
  8619.     A9h  set viewport column
  8620.          BYTE column
  8621.     AAh  set virtual screen height [contents of window unpredictable after]
  8622.          BYTE rows
  8623.     ABh  set virtual screen width [contents of window unpredictable after]
  8624.          BYTE columns
  8625.     ACh-AEh     unused
  8626.     AFh  set compatible/preferred video modes
  8627.          BYTE compatibility/preference mask
  8628.         bit 7    compatible with monochrome
  8629.         bit 6    compatible with color text, EGA/VGA graphics
  8630.         bit 5    compatible with medium-resolution CGA graphics
  8631.         bit 4    compatible with high-resolution CGA graphics
  8632.         bit 3    prefer monochrome
  8633.         bit 2    prefer color text, EGA/VGA graphics
  8634.         bit 1    prefer medium-resolution CGA graphics
  8635.         bit 0    prefer high-resolution CGA graphics
  8636.     B0h  move logical cursor down
  8637.          BYTE #rows (signed, negative values move up)
  8638.             [if #rows=0 and hardware cursor owner, update hw crsr]
  8639.     B1h  move logical cursor right
  8640.          BYTE #cols (signed, negative values move left)
  8641.             [if #cols=0 and hardware cursor owner, update hw crsr]
  8642.     B2h  shift top edge of scrolling region
  8643.          BYTE #rows (signed)
  8644.     B3h  shift left edge of scrolling region
  8645.          BYTE #cols (signed)
  8646.     B4h  shift physical window down
  8647.          BYTE #lines (signed)
  8648.     B5h  shift physical window right
  8649.          BYTE #columns (signed)
  8650.     B6h  expand physical window vertically
  8651.          BYTE #lines (signed)
  8652.     B7h  expand physical window horizontally
  8653.          BYTE #columns (signed)
  8654.     B8h  adjust viewport row
  8655.          BYTE #rows (signed)
  8656.     B9h  adjust viewport column
  8657.          BYTE #columns (signed)
  8658.     BAh  adjust virtual screen height [contents of window unpredict after]
  8659.          BYTE #rows to increase (signed)
  8660.     BBh  adjust virtual screen width [contents of window unpredictbl after]
  8661.          BYTE #cols to increase (signed)
  8662.     BCh-BFh     reserved (currently unused)
  8663.     C0h  set logical cursor position
  8664.          BYTE row number (0 is top border)
  8665.          BYTE column number (0 is left border)
  8666.     C1h  set top left corner of scrolling region
  8667.          BYTE row
  8668.          BYTE column
  8669.     C2h  set physical window pos
  8670.          BYTE upper left row (no top border if 0)
  8671.          BYTE upper left column (no left border if 0)
  8672.     C3h  set current window size
  8673.          BYTE #rows
  8674.          BYTE #cols
  8675.     C4h  set upper left corner of viewport (portion of virtual screen
  8676.          displayed in window)
  8677.          BYTE row
  8678.          BYTE column
  8679.     C5h  set size of virtual screen [contents unpredictable afterwards]
  8680.          BYTE #rows
  8681.          BYTE #cols
  8682.     C6h  unused
  8683.     C7h  unused
  8684.     C8h  set logical cursor relative to current position
  8685.          BYTE number of rows to move down (signed)
  8686.          BYTE number of columns to move right (signed)
  8687.           [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  8688.     C9h  shift top left corner of scrolling region
  8689.          BYTE #rows (signed)
  8690.          BYTE #cols (signed)
  8691.     CAh  set window pos relative to current position
  8692.          BYTE number of rows to shift down (signed)
  8693.          BYTE number of columns to shift right (signed)
  8694.     CBh  set window size relative to current size
  8695.          BYTE number of rows to expand (signed)
  8696.          BYTE number of cols to expand (signed)
  8697.     CCh  shift viewport relative to current position
  8698.          BYTE rows to shift (signed)
  8699.          BYTE cols to shift (signed)
  8700.     CDh  resize virtual screen
  8701.          BYTE #rows to expand (signed)
  8702.          BYTE #cols to expand (signed)
  8703.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  8704.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  8705.     D0h  allow window frame to extend beyond screen
  8706.     D1h  always display a complete frame, even if window extends beyond 
  8707.          edge of screen
  8708.     D2h  allow DV to change logical colors on video mode switch (default)
  8709.     D3h  application changes logical attributes
  8710.     D4h  window is visible [must redraw to actually make visible]
  8711.     D5h  window is hidden [must redraw to actually remove]
  8712.     D6h  window has frame (default)
  8713.     D7h  window unframed [must redraw to actually remove frame]
  8714.     D8h  READ/READN will read characters from window (default)
  8715.     D9h  READ/READN will read attributes from window
  8716.     DAh  use logical attributes, which may be remapped
  8717.         attributes
  8718.            1 normal text
  8719.            2 highlighted normal text
  8720.            3 help text
  8721.            4 highlighted help text
  8722.            5 error message
  8723.            6 highlighted error message
  8724.            7 emphasized text
  8725.            8 marked text
  8726.            9-16 are reverse video versions of 1-8
  8727.     DBh  use physical attributes for characters
  8728.     DCh  enable special actions for control characters (default)
  8729.     DDh  disable special control char handling, all chars displayable by
  8730.          BIOS TTY call
  8731.     DEh  write both character and attribute (default)
  8732.     DFh  write character only, leave attribute untouched
  8733.     E0h  repeat following commands through E1h opcode
  8734.          BYTE number of times to repeat (00h means 256 times)
  8735.     E1h  end of commands to repeat, start repeating them
  8736.     E2h  set current output color
  8737.          BYTE color
  8738.     E3h  clear virtual screen from scroll origin to end using current color
  8739.     E4h  redraw window
  8740.     E5h  select menu style
  8741.          BYTE style (normally 18h)
  8742.         bits 5,4 = 01 use two-letter menu entries for remainder of
  8743.           this stream
  8744.     E5h  (panel file only)
  8745.          BYTE modifier
  8746.         bits 7,6 = 11 panel stream creates new window
  8747.              = 10 panel defines new field table for existing window
  8748.              = 01 panel stream uses existing window & field table
  8749.         bit 5 = 1 stream contains a field table (create kyboard object)
  8750.         bit 4 = 1 stream defines input fields (create keyboard object)
  8751.         bit 3 = 1 stream defines select fields but not input fields
  8752.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  8753.         bit 1 reserved
  8754.         bit 0 reserved
  8755.     E6h  create new window and perform rest of manipulations in new window
  8756.          BYTE number of rows
  8757.          BYTE number of columns
  8758.          Return: DWORD object handle of new window returned on stack at end
  8759.          Note: the window is created with a physical size of 0x0 at the
  8760.              same position as the window to which this stream was sent
  8761.     E7h  no operation
  8762.     E8h  scroll area up (top left corner defined by opcode C1h)
  8763.          BYTE height
  8764.          BYTE width
  8765.     E9h  scroll area down (top left corner defined by opcode C1h)
  8766.          BYTE height
  8767.          BYTE width
  8768.     EAh  scroll area left (top left corner defined by opcode C1h)
  8769.          BYTE height
  8770.          BYTE width
  8771.     EBh  scroll area right (top left corner defined by opcode C1h)
  8772.          BYTE height
  8773.          BYTE width
  8774.     ECh  set logical attributes for window contents
  8775.          BYTE video modes command applies to
  8776.         bit 7    monochrome
  8777.         bit 6    color text, EGA/VGA graphics
  8778.         bit 5    medium-resolution CGA graphics
  8779.         bit 4    high-resolution CGA graphics
  8780.          BYTE which attributes to set
  8781.         bit 7  if set, copy single following byte to indicated attribs
  8782.         bits 4-6  # of first attribute to change - 1
  8783.         bits 0-3  # of consecutive attributes to change
  8784.          N BYTEs new attributes
  8785.     EDh  set logical attributes for window frame
  8786.          BYTE video modes command applies to (see opcode ECh)
  8787.          BYTE which attributes to set
  8788.         bit 7  if set, copy single following byte to indicated attrs
  8789.         bits 4-6  # of first attribute to change - 1
  8790.         bits 0-3  # of consecutive attributes to change
  8791.          N BYTEs new attributes
  8792.           attributes
  8793.                1 = top left corner
  8794.                2 = top right corner
  8795.                3 = bottom left corner
  8796.                4 = bottom right corner
  8797.                5 = top edge
  8798.                6 = bottom edge
  8799.                7 = left edge
  8800.                8 = right edge
  8801.     EEh  set characters for window frame
  8802.          BYTE video modes command applies to (see opcode ECh)
  8803.          BYTE which characters to set
  8804.         bit 7  if set, copy single following byte to indicated chars
  8805.         bits 4-6  # of first char to change - 1
  8806.         bits 0-3  # of consecutive chars to change
  8807.          N BYTEs new chars (same relative position as attributes above)
  8808.     EFh  set window name
  8809.          BYTE length of name (should be in range 0 to logical screen width)
  8810.          N BYTEs name
  8811.     F0h  clear input field to blanks
  8812.          BYTE field number
  8813.     F1h  fill input field with character
  8814.          BYTE field number
  8815.          BYTE char
  8816.     F2h  set color of input field
  8817.          BYTE field number (1-N)
  8818.          BYTE attribute
  8819.     F3h  set initial contents of input field
  8820.          BYTE field number (1-N)
  8821.          N BYTEs enough chars to exactly fill field as defined by op FFh
  8822.     F4h  position cursor to start of specific input field
  8823.          BYTE field number (1-N)
  8824.     F5h  change field table entry
  8825.          BYTE field number
  8826.          7-8 BYTEs field table entry (see opcode FFh below)
  8827.     F6h  set field type
  8828.          BYTE field number
  8829.          BYTE type
  8830.             00h inactive
  8831.             40h output field
  8832.             80h input field
  8833.             C0h deselected field
  8834.             C2h selected field
  8835.     F7h  "broadcast write"    write data to fields with program output bit
  8836.         set in field table entry, in field number order
  8837.          N BYTEs (total length of all program output fields)
  8838.     F8h  scroll field up a line
  8839.          BYTE field number
  8840.     F9h  scroll field down a line
  8841.          BYTE field number
  8842.     FAh  scroll field left
  8843.          BYTE field number
  8844.     FBh  scroll field right
  8845.          BYTE field number
  8846.     FCh  set field table header
  8847.          BYTE number of fields (must be <= existing number of fields)
  8848.          BYTE screen behavior bits
  8849.         bit 7  reserved
  8850.         bit 6  set if menu items may be selected via keyboard
  8851.         bit 5  set if left mouse button in "status" mode (press
  8852.             anywhere in window immediately returns control to app)
  8853.         bit 4  set if right mouse button in "status" mode
  8854.         bit 3  if set, select fields return contents or blanks rather
  8855.             than 'Y' or 'N'
  8856.         bit 2  if set, modified bits reset on return to application
  8857.         bits 0,1 = 00 no data returned on read of keyboard
  8858.                01 data returned as array of chars containing
  8859.                 all fields packed together, with no field
  8860.                 numbers
  8861.                10 data returned as numbered variable-length
  8862.                 records for all fields
  8863.                11 data returned as numbered variable-length
  8864.                 records for the fields which were modified
  8865.          BYTE current input field (updated by DESQview)
  8866.          BYTE current select field (updated by DESQview)
  8867.          BYTE attribute for select fields when they are pointed at
  8868.          BYTE attribute for select fields which have been selected
  8869.     FDh  reset modified bit for all fields
  8870.     FEh  reset selected and modified bits for all fields
  8871.     FFh  set up input fields
  8872.          6 BYTEs table header (see opcode FCh above)
  8873.          the field table entries, one for each field
  8874.          BYTE start row       \
  8875.          BYTE start column  \ if menu selection and start is to
  8876.          BYTE end row        / right or below end, select from kbd only
  8877.          BYTE end column   /
  8878.          BYTE field type
  8879.             bits 7,6 = 00 inactive (non-entry) field
  8880.                    01 echos keystrokes input to make menu selection
  8881.                    10 fill-in field
  8882.                    11 select field
  8883.             bit 5  field can be filled by broadcast write (F7h opcode)
  8884.             bit 4  reserved
  8885.             bit 3  reserved
  8886.             bit 2  reserved
  8887.             bit 1  set if field selected
  8888.             bit 0  set if field modified
  8889.          BYTE modifier
  8890.               if type is fill-in, then bit flags to determine behavior
  8891.               bit 7     if set, automatically enter CR when field full
  8892.               bit 6     move to next field when current field is full
  8893.               bit 5     if set, enter text from right end (for numbers)
  8894.               bit 4     if set, force input to uppercase
  8895.               bit 3     if set, clear old contents on first keystroke
  8896.               bit 2     if set, input returned when cursor moves out
  8897.                  of modified field ("validate",API level 2.02+)
  8898.               bit 1     reserved
  8899.               bit 0     reserved
  8900.               if select field, first key to press to activate
  8901.               00h if have to point-&-click or is an extended-ASCII
  8902.                   keystroke (only if two-key menus enabled)
  8903.          BYTE (select field only) normal color of field
  8904.          BYTE second key for select field.  This byte is present iff
  8905.               two-letter menu entries selected with opcode E5h, and
  8906.               in that case is present regardless of field type
  8907.          Note: DESQview uses and updates the actual copy of the information
  8908.            which is contained in the stream.  Thus this info must remain
  8909.            intact until after the data entry is complete.
  8910.  
  8911. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  8912.     A0h return logical cursor row in next byte
  8913.     A1h return logical cursor column in next byte
  8914.     A2h return top row of scrolling region in next byte
  8915.     A3h return left column of scrolling region in next byte
  8916.     A4h return row of physical window origin in next byte
  8917.     A5h return column of physical window origin in next byte
  8918.     A6h return height of physcial window in next byte
  8919.     A7h return width of physical window in next byte
  8920.     A8h return row of viewport origin in next byte
  8921.     A9h return column of viewport origin in next byte
  8922.     AAh return height of virtual screen in next byte
  8923.     ABh return width of virtual screen in next byte
  8924.     AFh return current video mode in next byte
  8925.     C0h return current logical cursor position in next two bytes
  8926.     C1h return top left corner of scrolling region in next two bytes
  8927.     C2h return current window position in next two bytes
  8928.     C3h return current window size in next two bytes
  8929.     C4h return current viewport origin in next two bytes
  8930.     C5h return current virtual screen size in next two bytes
  8931.     D0h \ overwritten with D0h if frames may fall off screen edge
  8932.     D1h /               D1h if frames always displayed entirely
  8933.     D2h \ overwritten with D2h if DESQview controls color palette
  8934.     D3h /               D3h if application changes color palette
  8935.     D4h \ overwritten with D4h if window visible
  8936.     D5h /               D5h if window hidden
  8937.     D6h \ overwritten with D6h if window has frame
  8938.     D7h /               D7h if window unframed
  8939.     D8h \ overwritten with D8h if reading characters from window
  8940.     D9h /               D9h if reading attributes from window
  8941.     DAh \ overwritten with DAh if using logical attributes
  8942.     DBh /               DBh if using physical attributes
  8943.     DCh \ overwritten with DCh if TTY control char interpretation on
  8944.     DDh /               DDh if TTY control char interpretation off
  8945.     DEh \ overwritten with DEh if writing both characters and attributes
  8946.     DFh /               DFh if leaving attributes untouched
  8947.     E2h return current color in next byte
  8948.     ECh get logical attributes for window contents
  8949.         BYTE execute call if currently in specified video mode
  8950.         bit 7    monochrome
  8951.         bit 6    color text, EGA/VGA graphics
  8952.         bit 5    medium-resolution CGA graphics
  8953.         bit 4    high-resolution CGA graphics
  8954.         BYTE which attributes to get
  8955.         bit 7 unused???
  8956.         bits 4-6 first attribute to get - 1
  8957.         bits 0-3 # consecutive attributes
  8958.         N BYTEs buffer to hold attributes
  8959.     EDh get logical attributes for window frame
  8960.         BYTE execute call if currently in video mode (see opcode ECh)
  8961.         BYTE which attributes to get
  8962.         bit 7 unused???
  8963.         bits 4-6 first attribute to get - 1
  8964.         bits 0-3 # consecutive attributes
  8965.         N BYTEs buffer to hold attributes
  8966.     EEh get characters for window frame
  8967.         BYTE execute call if currently in video mode (see opcode ECh)
  8968.         BYTE which attributes to get
  8969.         bit 7 unused???
  8970.         bits 4-6 first char to get - 1
  8971.         bits 0-3 # consecutive chars
  8972.         N BYTEs buffer to hold chars
  8973.     EFh return first N characters of current window name
  8974.         BYTE    max length of returned name
  8975.         N BYTEs buffer to hold window name
  8976.     F3h return contents of specified field
  8977.         BYTE field number
  8978.         N BYTEs buffer to hold field contents (size exactly equal to field
  8979.             size)
  8980.     F5h get field table entry
  8981.         BYTE field number
  8982.         7-8 BYTEs buffer to hold field table entry
  8983.            Notes: DV < 2.26 always returns 7 bytes
  8984.               DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  8985.             table is using 8-byte entries and eighth byte after
  8986.             F5h is E7h (NOP); otherwise, 7 bytes are returned
  8987.               DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  8988.             depending on the field table entry size
  8989.     F6h get type of a field
  8990.         BYTE field number
  8991.         BYTE type
  8992.     FCh get field table header
  8993.         6 BYTEs buffer to store header
  8994.  
  8995. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  8996.     00h allow window to be moved horizontally
  8997.     01h allow window to be moved vertically
  8998.     02h allow window to change width
  8999.     03h allow window to change height
  9000.     04h allow window to be scrolled horizontally
  9001.     05h allow window to be scrolled vertically
  9002.     06h allow "Close Window" menu selection for application
  9003.     07h allow "Hide Window" menu selection for application
  9004.     08h allow application to be suspended ("Rearrange/Freeze")
  9005.     0Eh allow "Scissors" menu
  9006.     10h allow DESQview main menu to be popped up
  9007.     11h allow "Switch Windows" menu
  9008.     12h allow "Open Window" menu
  9009.     13h allow "Quit" menu selection
  9010.     20h-33h opposite of 00h-13h, disallow specified action
  9011.     40h notify if horizontal position of window changes
  9012.     41h notify if vertical position of window changes
  9013.     42h notify if width of window changes
  9014.     43h notify if height of window changes
  9015.     44h notify if window scrolled horizontally
  9016.     45h notify if window scrolled vertically
  9017.     46h notify if window is closed--program has to clean up and exit itself
  9018.     47h notify if window is hidden
  9019.     48h notify if "?" on main menu selected
  9020.     49h notify if pointer message sent to window
  9021.     4Ah notify if window is placed in foreground
  9022.     4Bh notify if window is placed in background
  9023.     4Ch notify if video mode changes
  9024.     4Dh notify if "Scissors" menu "Cut" option selected
  9025.     4Eh notify if "Scissors" menu "Copy" option selected
  9026.     4Fh notify if "Scissors" menu "Paste" option selected
  9027.     50h notify if DESQview main menu about to pop up
  9028.     51h notify if DESQview main menu popped down
  9029.     60h-71h     opposite of 40h-51h: don't notify on specified event
  9030.     84h attach window to parent task's window (both move together)
  9031.     85h detach window from parent task's window (may move independently)
  9032.     86h disable background operation for application
  9033.     87h enable running in background
  9034.     88h set minimum size of physical window
  9035.         BYTE rows
  9036.         BYTE columns
  9037.     89h set maximum size of physical window
  9038.         BYTE rows
  9039.         BYTE cols
  9040.     8Ah set primary asynchronous notification routine
  9041.         DWORD address of routine, 0000h:0000h means none (see also below)
  9042.     8Bh set async notification parameter
  9043.         DWORD 32-bit value passed to 8Ah async routine in DS:SI
  9044.     ACh (DV2.2+) perform regular select field attribute processing
  9045.     ADh (DV2.2+) protect attributes in selected field from being lost
  9046.     AEh make window default notify window for owning app (API level 2.00+)
  9047.     AFh set selected field marker character
  9048.         BYTE character to display at left edge of selected fields
  9049.     BCh set standard field processing mode 
  9050.     BDh set alternate field processing mode (enables cursor pad for menus)
  9051.     BEh disables changing reverse logical attributes with ECh opcode
  9052.     BFh enables changing reverse logical attributes with ECh opcode
  9053.     C0h make current window topmost in system
  9054.     C1h force current process into foreground
  9055.     C2h make current window topmost in process
  9056.     C3h position mouse pointer relative to origin of current field
  9057.         BYTE rows below upper left corner of field
  9058.         BYTE columns to right of upper left corner of field
  9059.     C4h position mouse pointer relative to origin of given field
  9060.         BYTE field number
  9061.         BYTE rows below upper left corner of field
  9062.         BYTE columns to right of upper left corner of field
  9063.     C5h orphan current window (also hides it)
  9064.         Note: must be last in stream; all subsequent commands ignored
  9065.     C6h show all windows for this process
  9066.     C7h hide all windows for this process
  9067.     C8h suspend process and hide all its windows
  9068.     C9h force current process into background
  9069.     CAh make current window bottom-most in process
  9070.     CBh cancel current window manager operation, remove DV menu, give 
  9071.         control to topmost application
  9072.     CCh orphan window and give it to the system for use as paste data
  9073.     CEh reorder windows
  9074.         DWORD pointer to null-terminated list of words
  9075.           each word is segment of object handle for a window
  9076.     FFh no operation
  9077.  
  9078. MODES 14h to 1Fh "USER STREAMS"
  9079.     normally NOPs, but may be defined by SETESC message to invoke FAR
  9080.     routines, one for each mode number
  9081.       on entry to handler,
  9082.         DS:SI -> first byte of actual stream (not header)
  9083.         CX = #bytes in stream
  9084.         ES:DI = window's handle
  9085.  
  9086. Asynchronous notification routine defined by manager stream 8Ah called with:
  9087.     ES:DI = handle of window
  9088.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  9089.        mailbox contains message indicating event
  9090.           Opcode
  9091.            40h  horizontal movement
  9092.            DWORD object handle of window
  9093.            BYTE     new row
  9094.            BYTE     new col
  9095.            41h  vertical movement
  9096.            DWORD object handle of window
  9097.            BYTE     new row
  9098.            BYTE     new col
  9099.            42h  horizontal size change
  9100.            DWORD object handle of window
  9101.            BYTE     new rows
  9102.            BYTE     new cols
  9103.            43h  vertical size change
  9104.            DWORD object handle of window
  9105.            BYTE     new rows
  9106.            BYTE     new cols
  9107.            44h  scrolled horizontally
  9108.            DWORD object handle of window
  9109.            BYTE     mouse row within window
  9110.            BYTE     mouse column within window
  9111.            BYTE     field mouse is on, 0 if none
  9112.            BYTE     amount moved: >0 right, <0 left, 0 done
  9113.            45h  scrolled vertically
  9114.            DWORD object hande of window
  9115.            BYTE     mouse row within window
  9116.            BYTE     mouse column within window
  9117.            BYTE     field mouse is on, 0 if none
  9118.            BYTE     amount moved: >0 down, <0 up, 0 done
  9119.            46h  window close request
  9120.            DWORD object handle of window
  9121.            BYTE     mouse pointer row
  9122.            BYTE     mouse pointer column
  9123.            BYTE     field mouse is on, 0 if none
  9124.            47h  application's windows hidden
  9125.            48h  Help for Program selected
  9126.            DWORD object handle of window
  9127.            BYTE     mouse pointer row
  9128.            BYTE     mouse pointer column
  9129.            BYTE     field mouse is on, 0 if none
  9130.            49h  pointer message sent to window
  9131.            DWORD pointer handle which received message
  9132.            4Ah  switched to window from another ("raise")
  9133.            4Bh  switched away from the window ("lower")
  9134.            4Ch  video mode changed
  9135.            BYTE new BIOS video mode
  9136.            4Dh  Scissors/cUt selected
  9137.            DWORD object handle of window
  9138.            BYTE     row of upper left corner
  9139.            BYTE     column of upper left corner
  9140.            BYTE     field number ul corner is in, 0=none
  9141.            DWORD handle of orphaned window created with
  9142.              copy of data from specified region
  9143.            BYTE     height of region
  9144.            BYTE     width of region
  9145.            4Eh  Scissors/Copy selected
  9146.            DWORD object handle of window
  9147.            BYTE     row of upper left corner
  9148.            BYTE     column of upper left corner
  9149.            BYTE     field number ul corner is in, 0=none
  9150.            DWORD handle of orphaned window created with
  9151.              copy of data from specified region
  9152.            BYTE     height of region
  9153.            BYTE     width of region
  9154.            4Fh  Scissors/Paste selected
  9155.            DWORD object handle of window
  9156.            BYTE     row of upper left corner
  9157.            BYTE     column of upper left corner
  9158.            BYTE     field number ul corner is in, 0=none
  9159.            DWORD handle of orphaned window with data
  9160.            BYTE     height of region
  9161.            BYTE     width of region
  9162.             Note: orphaned data window should be adopted or freed
  9163.                 when done
  9164.            50h  main menu about to pop up
  9165.            51h  main menu popped down
  9166. Return: all registers unchanged
  9167. ----------1512--BH06-------------------------
  9168. INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  9169.     AH = 12h
  9170.     BH = 06h
  9171.     BL = object
  9172.         00h object handle in DWORD on top of stack
  9173.         mailbox, keyboard, pointer, or timer
  9174.         (DV 2.50+) window
  9175.         01h (DV 2.50+) current task's window
  9176.         04h given task's keyboard (task's handle on top of stack)
  9177.         05h current task's default keyboard
  9178.     STACK: DWORD new priority of object in task's OBJECTQ
  9179.             (new priority of task if window handle)
  9180. Notes:    initially all objects have the same default value.  Should only make 
  9181.       relative adjustments to this default value.
  9182.     when changing priorities, all objects already on the objectq are
  9183.       reordered
  9184.     for window handles, only the non-blocked task(s) with the highest
  9185.       priority receive CPU time under DESQview 2.50-2.52; the default
  9186.       priority is 0Ah
  9187. SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
  9188. ----------1512--BH07-------------------------
  9189. INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  9190.     AH = 12h
  9191.     BH = 07h
  9192.     BL = object
  9193.         00h object handle in DWORD on top of stack
  9194.         mailbox, keyboard, pointer, or timer
  9195.         (DV 2.50+) window
  9196.         01h (DV 2.50+) current task's window
  9197.         04h given task's keyboard (task's handle on top of stack)
  9198.         05h current task's default keyboard
  9199. Return: STACK: DWORD object priority
  9200. Note:    initially all objects have the same default value.  Should only make 
  9201.       relative adjustments to this default value.
  9202. SeeAlso: AH=12h/BH=06h
  9203. ----------1512--BH08-------------------------
  9204. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  9205.     AH = 12h
  9206.     BH = 08h
  9207.     BL = object
  9208.         00h handle in DWORD on top of stack
  9209.         window: total character positions in window
  9210.         timer: elapsed time since timer started
  9211.         pointer: number of messages queued to pointer object
  9212.         panel: number of panels in panel file
  9213.         keyboard: number of input buffers queued
  9214.         01h total chars in current task's default window
  9215.         02h number of messages in task's mailbox (task's handle on stack)
  9216.         03h number of messages in current task's mailbox
  9217.         04h number of input buffers queued in task's kbd (handle on stack)
  9218.         05h number of input buffers queued for current task's default kbd
  9219.         06h number of objects queued in OBJECTQ (task's handle on stack)
  9220.         07h number of objects queued in current task's OBJECTQ
  9221.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  9222.         0Dh (DV 2.26+) total chars in parent task's window
  9223. Return: DWORD on top of stack is result
  9224. Note:    for panel objects, a count of zero is returned if no panel file is open
  9225.       for the object
  9226. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  9227. ----------1512--BH09-------------------------
  9228. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  9229.     AH = 12h
  9230.     BH = 09h
  9231.     BL = object
  9232.         00h handle in DWORD on top of stack
  9233.         window: get chars/line
  9234.         timer: get 1/100 seconds remaining before timer expires
  9235.         mailbox: (DV/X) get number of bytes queued to mailbox
  9236.         01h get number of chars/line in current task's default window
  9237.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  9238.         0Dh (DV 2.26+) get chars/line in parent task's window
  9239. Return: DWORD on top of stack is length
  9240. SeeAlso: AH=12h/BH=08h
  9241. ----------1512--BH0A-------------------------
  9242. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  9243.     AH = 12h
  9244.     BH = 0Ah
  9245.     BL = window to write to
  9246.         00h window handle is DWORD on top of stack
  9247.         01h current task's default window
  9248.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  9249.         0Dh (DV 2.26+) default window of parent of current task
  9250.     STACK:    DWORD count of attributes
  9251.         DWORD address of attribute string
  9252.         DWORD count of characters
  9253.         DWORD address of character string
  9254. Notes:    if one string is longer than the other, the shorter one will be reused
  9255.       until the longer one is exhausted
  9256.     the cursor is left just after the last character written
  9257. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  9258. ----------1512--BH0A-------------------------
  9259. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  9260.     AH = 12h
  9261.     BH = 0Ah
  9262.     BL = mailbox to write to
  9263.         00h handle is DWORD on top of stack
  9264.         02h default mailbox of task whose handle is on top of stack
  9265.         03h current task's default mailbox
  9266.     STACK:    DWORD    status (low byte)
  9267.         DWORD    length of message
  9268.         DWORD    address of message
  9269. Notes:    the message is copied into either system or common memory
  9270.     insufficient memory normally causes the process to be aborted; under
  9271.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  9272. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  9273. ----------1512--BH0A-------------------------
  9274. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  9275.     AH = 12h
  9276.     BH = 0Ah
  9277.     BL = object
  9278.         00h handle is DWORD on top of stack
  9279.         timer: start timer for specified interval
  9280.         pointer: set control flags
  9281.         keyboard: set control flags
  9282.         04h set control flags on KEYBOARD object (handle on top of stack)
  9283.         05h set control flags on task's default KEYBOARD object
  9284.     STACK: (if timer)   DWORD duration in 1/100 seconds
  9285.            (otherwise)  DWORD bits to set
  9286. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  9287.  
  9288. For keyboard objects, the bits have the following significance:
  9289.     bit 15 reserved, can't be set
  9290.     bit 14 unused
  9291.     bit 13 reserved, can't be set
  9292.     bit 12-6 unused
  9293.     bit 5  (DV 2.2+) exclusive input
  9294.     bit 4  filter all keys (used with handler established by SETESC)
  9295.         if 0, only keys that would normally be displayed are filtered
  9296.     bit 3  program continues executing while input in progress
  9297.     bit 2  insert mode active for field mode
  9298.     bit 1  hardware cursor displayed when task is hardware cursor owner
  9299.         must be set if keyboard in field mode and field table includes
  9300.         input fields
  9301.     bit 0  keyboard is in field mode rather than keystroke mode
  9302.  
  9303. For pointer objects, the bits have the following significance:
  9304.     bit 15 reserved, can't be set
  9305.     bit 14-8 unused
  9306.     bit 7  mouse pointer is hidden while in window
  9307.     bit 6  get messages even if window not topmost
  9308.     bit 5  get messages even if window not foreground
  9309.     bit 4  multiple clicks separated by less than 1/3 second are counted
  9310.         and returned in a single message
  9311.     bit 3  pointer position is relative to screen origin, not window origin
  9312.     bit 2  send message on button release as well as button press
  9313.     bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  9314.         pointer leaves the window
  9315.     bit 0  send message only on button activity, not movement
  9316.            DV-specific, and INT 15/AX=DE0Fh must have been called first
  9317. ----------1512--BH0B-------------------------
  9318. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  9319.     AH = 12h
  9320.     BH = 0Bh
  9321.     BL = window to write attributes to
  9322.         00h handle is DWORD on top of stack
  9323.         01h current task's default window
  9324.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  9325.         0Dh (DV 2.26+) default window of parent of current task
  9326.     STACK:    DWORD number of attributes to write
  9327.         DWORD address of attributes
  9328. Note:    the attributes are written starting at the current cursor position; the
  9329.       cursor is left just after the last position written
  9330. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  9331. ----------1512--BH0B-------------------------
  9332. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  9333.     AH = 12h
  9334.     BH = 0Bh
  9335.     BL = mailbox to write to
  9336.         00h handle is DWORD on top of stack
  9337.         02h default mailbox of task whose handle is on top of stack
  9338.         03h current task's default mailbox
  9339.     STACK:    DWORD    status (low byte)
  9340.         DWORD    length of message
  9341.         DWORD    address of message
  9342. Notes:    only a pointer to the message is stored, but the write may still fail
  9343.       due to insufficient memory
  9344.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  9345. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  9346. ----------1512--BH0B-------------------------
  9347. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  9348.     AH = 12h
  9349.     BH = 0Bh
  9350.     BL = OBJECTQ from which to remove all copies of a particular object
  9351.         06h OBJECTQ of task whose handle is on top of stack
  9352.         07h task's default OBJECTQ
  9353.     STACK:    DWORD    handle of object to remove
  9354. Note:    should be sent whenever an object is erased or closed
  9355. ----------1512--BH0B-------------------------
  9356. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  9357.     AH = 12h
  9358.     BH = 0Bh
  9359.     BL = object
  9360.         00h handle is DWORD on top of stack
  9361.         pointer: reset control flags
  9362.         keyboard: reset control flags
  9363.         04h clear control flags on KEYBOARD object (handle on top of stack)
  9364.         05h clear control flags on task's default KEYBOARD object
  9365.     STACK:    DWORD    which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  9366. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  9367. ----------1512--BH0C-------------------------
  9368. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  9369.     AH = 12h
  9370.     BH = 0Ch
  9371.     BL = object
  9372.         00h handle is DWORD on top of stack
  9373.         window:      fill with given character from scroll origin to end
  9374.         keyboard: attach to a window
  9375.         timer:      open
  9376.         pointer:  start taking input for window
  9377.         panel:      associate with a panel file
  9378.         01h fill task's default window with given char from scrl org to end
  9379.         02h open given task's mailbox for input (task's handle on stack)
  9380.         03h open current task's mailbox
  9381.         04h attach a KEYBOARD to a window (handle on top of stack)
  9382.         05h attach task's default KEYBOARD to a window
  9383.         06h open a task's OBJECTQ (task's handle on top of stack)
  9384.         07h open current task's OBJECTQ
  9385.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  9386.         0Dh (DV 2.26+) fill default window of parent of current task
  9387.      STACK: (if window)   DWORD character to fill with
  9388.         (if keyboard) DWORD handle of window to attach to
  9389.         (if pointer)  DWORD handle of window to attach to
  9390.         (if panel)    DWORD length of filename or resident panel
  9391.                   DWORD address of filename or resident panel
  9392.         (otherwise)   nothing
  9393. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  9394.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  9395.       the panel file
  9396.     result code of open may be retrieved with STATUS message
  9397.     logical cursor is left at scroll origin after filling window
  9398.     the task opening a mailbox becomes its owner, and the only task allowed
  9399.       to read the mailbox
  9400.     messages are only sent to a pointer object when the mouse is positioned
  9401.       in the window to which the pointer has been attached
  9402.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  9403.       messages automatically open the timer
  9404. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  9405. ----------1512--BH0D-------------------------
  9406. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  9407.     AH = 12h
  9408.     BH = 0Dh
  9409.     BL = object
  9410.         00h handle is DWORD on top of stack
  9411.         timer:      close
  9412.         keyboard: detach from window and discard queued input
  9413.         pointer:  stop taking input
  9414.         panel:      close
  9415.         mailbox:  close, unlock, and discard any pending messages
  9416.         02h close given task's mailbox (task's handle on top of stack)
  9417.         03h close task's default mailbox
  9418.         04h close KEYBOARD object (handle on top of stack)
  9419.         05h close task's default KEYBOARD
  9420.         06h close givent task's OBJECTQ (task's handle on top of stack)
  9421.         07h close current task's OBJECTQ
  9422. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  9423.       ERASE message (AH=12h/BH=0Eh)
  9424.     when a panel object is closed, the panel file and any panels currently
  9425.       in use are freed; window and keyboard objects created by APPLY are
  9426.       not affected, but field mode input ceases
  9427.     open but idle timer objects consume a small amount of CPU time
  9428. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  9429. ----------1512--BH0E-------------------------
  9430. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  9431.     AH = 12h
  9432.     BH = 0Eh
  9433.     BL = object
  9434.         00h handle is DWORD on top of stack
  9435.         window:      clear from scroll origin to end of window
  9436.         keyboard: discard input
  9437.         timer:      cancel current interval
  9438.         pointer:  discard all pending messages
  9439.         mailbox:  discard all pending messages
  9440.         01h clear task's default window from scroll origin to end
  9441.         02h discard all queued messages in mailbox (handle on top of stack)
  9442.         03h discard all queued messages in current task's default mailbox
  9443.         04h discard all input queued to KEYBOARD (handle on top of stack)
  9444.         05h discard all input queued to task's default KEYBOARD
  9445.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  9446.         07h remove all objects from current task's OBJECTQ
  9447.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  9448.         0Dh (DV 2.26+) clear default window of parent of current task
  9449. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  9450. SeeAlso: AH=12h/BH=02h
  9451. ----------1512--BH0F-------------------------
  9452. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  9453.     AH = 12h
  9454.     BH = 0Fh
  9455.     BL = object
  9456.         00h handle is DWORD on top of stack
  9457.         timer:     is it running?
  9458.         pointer: return status of last message
  9459.         panel:     verify success of last OPEN or APPLY
  9460.         02h return status of last msg READ from mailbox (handle on stack)
  9461.         03h return status of last msg READ from task's default mailbox
  9462.         04h get status of last msg from task's KEYBOARD (task handle on stk)
  9463.         05h get status of last msg from task's default KEYBOARD
  9464.         06h return whether OBJECTQ is open or not (handle on top of stack)
  9465.         07h return whether task's default OBJECTQ is open or not
  9466. Return: DWORD on top of stack is status
  9467. Notes:    if object is a panel object, the status indicates the error code:
  9468.       00h successful
  9469.       14h panel name not in panel directory
  9470.       15h not enough memory to apply panel
  9471.       16h invalid panel format
  9472.       17h panel file already open
  9473.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  9474.       95h not enough memory to open panel file     > that the panel was
  9475.       98h null panel file name            /  not opened
  9476.     if object is a timer, the status is:
  9477.       00000000h open but not running
  9478.       40000000h open and running
  9479.       80000000h closed
  9480.     if object is an OBJECTQ, the status is:
  9481.       00000000h open
  9482.       80000000h closed
  9483.     if object is a keyboard in keystroke mode, the status is the extended
  9484.       character code (scan code) of teh last keystroke
  9485.     if object is a keyboard in field mode, the status indicates the reason
  9486.       for the last return from the field manager
  9487.       00h Enter key pressed
  9488.       01h Button 1 or keystroke selection
  9489.       02h Button 2
  9490.       03h validation
  9491.       04h auto Enter on field
  9492.       1Bh Escape pressed
  9493.       46h ^Break pressed
  9494.       other: extended code for key terminating input
  9495.     the status of mailbox messages sent by the window manager is always 80h
  9496.     the status of a pointer message is the same as the status field in the
  9497.       message
  9498. SeeAlso: AH=12h/BH=04h"READ"
  9499. ----------1512--BH10-------------------------
  9500. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  9501.     AH = 12h
  9502.     BH = 10h
  9503.     BL = object
  9504.         00h handle is DWORD on top of stack
  9505.         window: return TRUE if logical cursor past end of window
  9506.         mailbox: ???
  9507.         01h returns TRUE if logical cursor past end of task's def window
  9508.         02h return ??? for task's mailbox (task's handle on top of stack)
  9509.         03h return ??? for current task's mailbox
  9510.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  9511.         0Dh (DV 2.26+) check log cursor of window of parent task
  9512. Return: DWORD on top of stack is status
  9513. ----------1512--BH11-------------------------
  9514. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  9515.     AH = 12h
  9516.     BH = 11h
  9517.     BL = window for which to move cursor
  9518.         00h window's handle is DWORD on top of stack
  9519.         01h task's default window
  9520.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  9521.         0Dh (DV 2.26+) default window of parent of current task
  9522.     STACK: DWORD column
  9523.            DWORD row
  9524. ----------1512--BH11-------------------------
  9525. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  9526.     AH = 12h
  9527.     BH = 11h
  9528.     BL = mailbox to name
  9529.         00h DWORD on top of stack is mailbox handle
  9530.         02h use given task's mailbox (task's handle on top of stack)
  9531.         03h use current task's default mailbox
  9532.     STACK: DWORD length of name
  9533.            DWORD address of name
  9534. SeeAlso: AH=12h/BH=12h"GETNAME",AX=DE0Eh
  9535. ----------1512--BX1100-----------------------
  9536. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  9537.     AH = 12h
  9538.     BX = 1100h
  9539.     STACK: DWORD object handle for pointer object
  9540.            DWORD number of colums to scale pointer position to
  9541.            DWORD number of rows to scale pointer position to
  9542. SeeAlso: AH=12h/BX=1200h
  9543. ----------1512--BH12-------------------------
  9544. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  9545.     AH = 12h
  9546.     BH = 12h
  9547.     BL = window to read from
  9548.         00h handle is DWORD on top of stack
  9549.         01h read next N chars or attributes on task's default window
  9550.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  9551.         0Dh (DV 2.26+) read default window of parent of current task
  9552.     STACK: DWORD count
  9553. Return: STACK: DWORD number of bytes actually read
  9554.            DWORD address of buffer containing data
  9555. Notes:    reading starts at the current logical cursor position; the cursor is
  9556.       updated to point at the character following the last one read
  9557.     any translucent blanks (FFh) which are visible on screen are changed
  9558.       to the character which is seen through them
  9559.     the string produced by the read is placed in an input buffer which may
  9560.       be reused by the next READ or READN of a window
  9561.     window stream opcodes D8h and D9h determine whether the read returns
  9562.       characters or attributes
  9563. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  9564. ----------1512--BH12-------------------------
  9565. INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
  9566.     AH = 12h
  9567.     BH = 12h
  9568.     BL = mailbox for which to retrieve name
  9569.         00h DWORD on top of stack is mailbox handle
  9570.         02h use given task's mailbox (task's handle on top of stack)
  9571.         03h use current task's default mailbox
  9572.     STACK: DWORD length of buffer for name
  9573.            DWORD pointer to buffer
  9574. Return: STACK: DWORD length of returned name (or size of buffer, if less)
  9575. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  9576. Note:    the returned name is not NUL-terminated
  9577. SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
  9578. ----------1512--BX1200-----------------------
  9579. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  9580.     AH = 12h
  9581.     BX = 1200h
  9582.     STACK: DWORD object handle for pointer
  9583. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  9584.            DWORD pointer pos scaled as if window were this many rows high
  9585. SeeAlso: AH=12h/BX=1100h
  9586. ----------1512--BH13-------------------------
  9587. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  9588.     AH = 12h
  9589.     BH = 13h
  9590.     BL = window object
  9591.         00h DWORD on top of stack is handle for window to redraw
  9592.         01h redraw task's default window
  9593.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  9594.         0Dh (DV 2.26+) redraw default window of parent of current task
  9595. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  9596. ----------1512--BH13-------------------------
  9597. INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
  9598.     AH = 12h
  9599.     BH = 13h
  9600.     BL = mailbox from which to read
  9601.         00h DWORD on top of stack is mailbox handle
  9602.         02h use given task's mailbox (task's handle on top of stack)
  9603.         03h use current task's default mailbox
  9604.     STACK: DWORD size of buffer in bytes
  9605.            DWORD pointer to buffer
  9606. Return: STACK: DWORD number of bytes read
  9607. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  9608. Notes:    this call blocks if no input is available, but will return less than
  9609.       the requested number of bytes if some (but insufficient) data is
  9610.       available
  9611.     use this call instead of AH=12h/BH=04h if the mailbox has flag bits
  9612.       4 or 5 set, as common memory may be exhausted by that call when
  9613.       attempting to read the next message
  9614. SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
  9615. ----------1512--BX1300-----------------------
  9616. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  9617.     AH = 12h
  9618.     BX = 1300h
  9619.     STACK: DWORD object handle for pointer
  9620.            DWORD character to use for pointer
  9621. ----------1512--BH14-------------------------
  9622. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  9623.     AH = 12h
  9624.     BH = 14h
  9625.     BL = message modifier
  9626.         00h handle is DWORD on top of stack
  9627.         01h define user stream
  9628.         04h intercept keystrokes from KEYBOARD to a window (handle on stack)
  9629.         05h intercept keystrokes from task's default KEYBOARD to a window
  9630.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  9631.                  DWORD address of FAR user stream handler
  9632.            (if keyboard) DWORD address of FAR filter function
  9633.  
  9634. The keyboard filter function is called when the keyboard is in field mode.  On
  9635. entry,
  9636.     AL = character
  9637.     AH = 00h or extended ASCII code if AL = 00h
  9638.     BL = field number
  9639.     CH = cursor column
  9640.     CL = cursor row
  9641.     DL = field type modifier (sixth item in field table entry)
  9642.     DH = seventh item in field table entry
  9643.     ES:SI = window's handle
  9644.     DS:DI -> field table entry for field containing the cursor
  9645. The filter function should return
  9646.     AH = 00h use keystroke
  9647.          01h ignore keystroke
  9648.          FFh beep and ignore keystroke
  9649. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  9650. ----------1512--BH14-------------------------
  9651. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  9652.     AH = 12h
  9653.     BH = 14h
  9654.     BL = object
  9655.         00h mailbox handle is DWORD on top of stack
  9656.         02h use given task's mailbox (task's handle on top of stack)
  9657.         03h use current task's default mailbox
  9658. Note:    release exclusive access by sending CLOSE message to mailbox
  9659.     access may be requested multiple times, and requires multiple CLOSEs
  9660. SeeAlso: AH=12h/BH=0Dh
  9661. ----------1512--BH15-------------------------
  9662. INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  9663.     AH = 12h
  9664.     BH = 15h
  9665.     BL = object
  9666.         00h DWORD on top of stack
  9667.         mailbox, keyboard, or pointer only
  9668.         02h mailbox for task whose handle is on top of stack
  9669.         03h mailbox for current task
  9670.         04h keyboard for task whose handle is on top of stack
  9671.         05h keyboard for current task
  9672.     STACK: DWORD flags
  9673.         if mailbox:
  9674.             bit 0: all mail messages in common memory
  9675.             bit 1: allow write even if closed
  9676.             bit 2: don't erase messages when mailbox closed
  9677.             bit 4: (DV/X) append messages with like status and
  9678.                 sender (stream-oriented mail)
  9679.             bit 5: (DV/X) store mail in expanded memory (pool
  9680.                 grows as needed)
  9681.             bit 6: (DV/X) make mailbox into non-owned mailbox
  9682.         if keyboard:
  9683.             bit 5: exclusive input when keyboard in use for input
  9684. Return: nothing
  9685. Notes:    only available if the API level has been set to at least 2.20
  9686.     equivalent to performing SUBFROM and ADDTO calls on the object
  9687.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  9688.       "READ" (see AH=12h/BX=1300h"READINTO") to retrieve messages
  9689. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  9690. ----------1512--BH16-------------------------
  9691. INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  9692.     AH = 12h 
  9693.     BH = 16h
  9694.     BL = object
  9695.         00h DWORD on top of stack
  9696.         mailbox, keyboard, or pointer only
  9697.         02h mailbox for task whose handle is on top of stack
  9698.         03h mailbox for current task
  9699.         04h keyboard for task whose handle is on top of stack
  9700.         05h keyboard for current task
  9701. Return: STACK: DWORD current control flags (see AH=12h/BH=15h)
  9702. Notes:    only available if the API level has been set to at least 2.20
  9703.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  9704.       "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
  9705. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",AH=12h/BH=15h
  9706. ----------1512--BH17-------------------------
  9707. INT 15 - DESQview v2.42-2.52 - BUG
  9708.     AH = 12h
  9709.     BH = 17h
  9710.     BL = object
  9711.         00h DWORD on top of stack
  9712.         mailbox, keyboard, or pointer only
  9713.         02h mailbox for task whose handle is on top of stack
  9714.         03h mailbox for current task
  9715.         04h keyboard for task whose handle is on top of stack
  9716.         05h keyboard for current task
  9717. Notes:    due to a fencepost error, message 17h is accepted for mailboxes,
  9718.       keyboards, and pointers, but causes a random branch
  9719.     DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02
  9720. ----------1512--BH80-------------------------
  9721. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9722.     AH = 12h
  9723.     BH = 80h
  9724. Note:    this function is identical to AH=12h/BH=00h, except that DESQview will
  9725.       not pop up a "Programming Error" window, instead returning an error
  9726.       code in AL:
  9727.         00h no error
  9728.         01h invalid values
  9729.         02h alias invalid
  9730.         03h handle valid but wrong type
  9731.         04h invalid handle
  9732. SeeAlso: AH=12h/BH=00h
  9733. ----------1512--BH81-------------------------
  9734. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9735.     AH = 12h
  9736.     BH = 81h
  9737. Note:    this function is identical to AH=12h/BH=01h, except that DESQview will
  9738.       not pop up a "Programming Error" window, instead returning an error
  9739.       code in AL (see AH=12h/BH=80h)
  9740. SeeAlso: AH=12h/BH=01h
  9741. ----------1512--BH82-------------------------
  9742. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9743.     AH = 12h
  9744.     BH = 82h
  9745. Note:    this function is identical to AH=12h/BH=02h, except that DESQview will
  9746.       not pop up a "Programming Error" window, instead returning an error
  9747.       code in AL (see AH=12h/BH=80h)
  9748. SeeAlso: AH=12h/BH=02h
  9749. ----------1512--BH83-------------------------
  9750. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9751.     AH = 12h
  9752.     BH = 83h
  9753. Note:    this function is identical to AH=12h/BH=03h, except that DESQview will
  9754.       not pop up a "Programming Error" window, instead returning an error
  9755.       code in AL (see AH=12h/BH=80h)
  9756. SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
  9757. ----------1512--BH84-------------------------
  9758. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9759.     AH = 12h
  9760.     BH = 84h
  9761. Note:    this function is identical to AH=12h/BH=04h, except that DESQview will
  9762.       not pop up a "Programming Error" window, instead returning an error
  9763.       code in AL (see AH=12h/BH=80h)
  9764. SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
  9765. ----------1512--BH85-------------------------
  9766. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9767.     AH = 12h
  9768.     BH = 85h
  9769. Note:    this function is identical to AH=12h/BH=05h, except that DESQview will
  9770.       not pop up a "Programming Error" window, instead returning an error
  9771.       code in AL (see AH=12h/BH=80h)
  9772. SeeAlso: AH=12h/BH=05h
  9773. ----------1512--BH86-------------------------
  9774. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9775.     AH = 12h
  9776.     BH = 86h
  9777. Note:    this function is identical to AH=12h/BH=06h, except that DESQview will
  9778.       not pop up a "Programming Error" window, instead returning an error
  9779.       code in AL (see AH=12h/BH=80h)
  9780. SeeAlso: AH=12h/BH=06h
  9781. ----------1512--BH87-------------------------
  9782. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9783.     AH = 12h
  9784.     BH = 87h
  9785. Note:    this function is identical to AH=12h/BH=07h, except that DESQview will
  9786.       not pop up a "Programming Error" window, instead returning an error
  9787.       code in AL (see AH=12h/BH=80h)
  9788. SeeAlso: AH=12h/BH=07h
  9789. ----------1512--BH88-------------------------
  9790. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9791.     AH = 12h
  9792.     BH = 88h
  9793. Note:    this function is identical to AH=12h/BH=08h, except that DESQview will
  9794.       not pop up a "Programming Error" window, instead returning an error
  9795.       code in AL (see AH=12h/BH=80h)
  9796. SeeAlso: AH=12h/BH=08h
  9797. ----------1512--BH89-------------------------
  9798. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9799.     AH = 12h
  9800.     BH = 89h
  9801. Note:    this function is identical to AH=12h/BH=09h, except that DESQview will
  9802.       not pop up a "Programming Error" window, instead returning an error
  9803.       code in AL (see AH=12h/BH=80h)
  9804. SeeAlso: AH=12h/BH=09h
  9805. ----------1512--BH8A-------------------------
  9806. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9807.     AH = 12h
  9808.     BH = 8Ah
  9809. Note:    this function is identical to AH=12h/BH=0Ah, except that DESQview will
  9810.       not pop up a "Programming Error" window, instead returning an error
  9811.       code in AL (see AH=12h/BH=80h)
  9812. SeeAlso: AH=12h/BH=0Ah
  9813. ----------1512--BH8B-------------------------
  9814. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9815.     AH = 12h
  9816.     BH = 8Bh
  9817. Note:    this function is identical to AH=12h/BH=0Bh, except that DESQview will
  9818.       not pop up a "Programming Error" window, instead returning an error
  9819.       code in AL (see AH=12h/BH=80h)
  9820. SeeAlso: AH=12h/BH=0Bh
  9821. ----------1512--BH8C-------------------------
  9822. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9823.     AH = 12h
  9824.     BH = 8Ch
  9825. Note:    this function is identical to AH=12h/BH=0Ch, except that DESQview will
  9826.       not pop up a "Programming Error" window, instead returning an error
  9827.       code in AL (see AH=12h/BH=80h)
  9828. SeeAlso: AH=12h/BH=0Ch
  9829. ----------1512--BH8D-------------------------
  9830. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9831.     AH = 12h
  9832.     BH = 8Dh
  9833. Note:    this function is identical to AH=12h/BH=0Dh, except that DESQview will
  9834.       not pop up a "Programming Error" window, instead returning an error
  9835.       code in AL (see AH=12h/BH=80h)
  9836. SeeAlso: AH=12h/BH=0Dh
  9837. ----------1512--BH8E-------------------------
  9838. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9839.     AH = 12h
  9840.     BH = 8Eh
  9841. Note:    this function is identical to AH=12h/BH=0Eh, except that DESQview will
  9842.       not pop up a "Programming Error" window, instead returning an error
  9843.       code in AL (see AH=12h/BH=80h)
  9844. SeeAlso: AH=12h/BH=0Eh
  9845. ----------1512--BH8F-------------------------
  9846. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9847.     AH = 12h
  9848.     BH = 8Fh
  9849. Note:    this function is identical to AH=12h/BH=0Fh, except that DESQview will
  9850.       not pop up a "Programming Error" window, instead returning an error
  9851.       code in AL (see AH=12h/BH=80h)
  9852. SeeAlso: AH=12h/BH=0Fh
  9853. ----------1512--BH90-------------------------
  9854. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9855.     AH = 12h
  9856.     BH = 90h
  9857. Note:    this function is identical to AH=12h/BH=10h, except that DESQview will
  9858.       not pop up a "Programming Error" window, instead returning an error
  9859.       code in AL (see AH=12h/BH=80h)
  9860. SeeAlso: AH=12h/BH=10h
  9861. ----------1512--BH91-------------------------
  9862. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9863.     AH = 12h
  9864.     BH = 91h
  9865. Note:    this function is identical to AH=12h/BH=11h, except that DESQview will
  9866.       not pop up a "Programming Error" window, instead returning an error
  9867.       code in AL (see AH=12h/BH=80h)
  9868. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
  9869. ----------1512--BH92-------------------------
  9870. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9871.     AH = 12h
  9872.     BH = 92h
  9873. Note:    this function is identical to AH=12h/BH=12h, except that DESQview will
  9874.       not pop up a "Programming Error" window, instead returning an error
  9875.       code in AL (see AH=12h/BH=80h)
  9876. SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
  9877. ----------1512--BH93-------------------------
  9878. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9879.     AH = 12h
  9880.     BH = 93h
  9881. Note:    this function is identical to AH=12h/BH=13h, except that DESQview will
  9882.       not pop up a "Programming Error" window, instead returning an error
  9883.       code in AL (see AH=12h/BH=80h)
  9884. SeeAlso: AH=12h/BH=13h
  9885. ----------1512--BH94-------------------------
  9886. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9887.     AH = 12h
  9888.     BH = 94h
  9889. Note:    this function is identical to AH=12h/BH=14h, except that DESQview will
  9890.       not pop up a "Programming Error" window, instead returning an error
  9891.       code in AL (see AH=12h/BH=80h)
  9892. SeeAlso: AH=12h/BH=14h
  9893. ----------1512--BH95-------------------------
  9894. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9895.     AH = 12h
  9896.     BH = 95h
  9897. Note:    this function is identical to AH=12h/BH=15h, except that DESQview will
  9898.       not pop up a "Programming Error" window, instead returning an error
  9899.       code in AL (see AH=12h/BH=80h)
  9900. SeeAlso: AH=12h/BH=15h
  9901. ----------1512--BH96-------------------------
  9902. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9903.     AH = 12h
  9904.     BH = 96h
  9905. Note:    this function is identical to AH=12h/BH=16h, except that DESQview will
  9906.       not pop up a "Programming Error" window, instead returning an error
  9907.       code in AL (see AH=12h/BH=80h)
  9908. SeeAlso: AH=12h/BH=16h
  9909. ----------1513-------------------------------
  9910. INT 15 - VMiX - "sys_wake" - WAKE SLEEPING PROCESS
  9911.     AH = 13h
  9912.     STACK:    WORD    process ID
  9913. Return: AX = status (SYS_OK or SYS_ERROR)
  9914. SeeAlso: AH=12h"VMiX"
  9915. ----------1513-------------------------------
  9916. INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
  9917.     AH = 13h
  9918. Return: BX:AX -> task control block (see below)
  9919. SeeAlso: AH=15h"MultiDOS"
  9920.  
  9921. Format of MultiDOS Plus v4.0 task control block:
  9922. Offset    Size    Description
  9923.  00h    DWORD    pointer to next TCB
  9924.  04h  8 BYTEs    ASCIZ task name
  9925.  0Ch  2 BYTEs    ???
  9926.  0Eh    WORD    task PSP segment
  9927.  10h    WORD    abort/suspend flags
  9928.  12h    WORD    current screen segment (see AH=0Bh,AH=0Ch)
  9929.  14h    WORD    priority level (0000h-FFFEh)
  9930.  16h    WORD    time slice counter
  9931.  18h  2 BYTEs    ???
  9932.  1Ah    WORD    suspend timer value
  9933.  1Ch    WORD    stack segment
  9934.  1Eh    WORD    stack pointer
  9935.  20h    WORD    display type
  9936.  22h    WORD    display memory
  9937.  24h  2 BYTEs    ???
  9938.  26h    WORD    termination count
  9939.  28h    WORD    equipment flag for BIO10 driver
  9940.  2Ah    BYTE    background CRT mode
  9941.  2Bh    WORD    screen width in columns
  9942.  2Dh    WORD    screen size in bytes
  9943.  2Fh    WORD    segment of physical screen memory
  9944.  31h 16 BYTEs    eight cursor positions
  9945.  41h    WORD    current cursor shape
  9946.  43h    BYTE    active display page
  9947.  44h    WORD    CRT controller I/O port base
  9948.  46h  2 BYTEs    ???
  9949.  48h    WORD    foreground task flag
  9950.  4Ah  6 BYTEs    ???
  9951.  50h    WORD    saved video segment (see AH=0Bh,AH=0Ch)
  9952.  52h    DWORD    old INT 22
  9953.  56h    DWORD    old INT 23
  9954.  5Ah    DWORD    old INT 24
  9955.  5Eh    WORD    top of memory for task
  9956.  60h  4 BYTEs    ???
  9957.  64h    WORD    DTA segment (see INT 21/AH=1Ah)
  9958.  66h    WORD    DTA offset
  9959.  68h  4 BYTEs    ???
  9960.  6Ch    BYTE    current ANSI.SYS attribute
  9961.  6Dh    BYTE    current ANSI.SYS column
  9962.  6Eh    BYTE    current ANSI.SYS row
  9963.  6Fh    BYTE    current ANSI.SYS display state
  9964.  70h    BYTE    maximum ANSI.SYS columns
  9965.  71h    BYTE    current ANSI.SYS page
  9966.  72h    WORD    saved ANSI.SYS cursor position
  9967.  74h    BYTE    ANSI.SYS parameter buffer index
  9968.  75h    BYTE    current ANSI.SYS screen mode
  9969.  76h    BYTE    ANSI.SYS wrap flag
  9970.  77h  6 BYTEs    ANSI.SYS parameter buffer
  9971.  7Dh    BYTE    ANSI.SYS keyboard DSR state
  9972.  7Eh  7 BYTEs    ANSI.SYS keyboard DSR buffer
  9973.  85h  3 BYTEs    ???
  9974.  88h 16 BYTEs    request header for DOS driver calls
  9975.  98h 14 BYTEs    ???
  9976.  A6h    WORD    segment of EMS map if EMS task
  9977.  A8h    WORD    flag: task makes EMS calls
  9978.  AAh    WORD    EMS handle for task
  9979.  ACh    WORD    keyboard shift state
  9980.  AEh 12 BYTEs    ???
  9981.  BAh    WORD    TCB of parent if child task
  9982.  BCh    WORD    termination code
  9983.  BEh    WORD    COM port number
  9984.  C0h  4 BYTEs    ???
  9985.  C4h    WORD    current IRQ number
  9986.  C6h  2 BYTEs    ???
  9987.  C8h    WORD    miscellaneous flag word
  9988.  CAh  2 BYTEs    ???
  9989.  CCh    DWORD    old INT 10
  9990.  D0h    WORD    EMS alternate map set number
  9991.  D2h 414 BYTEs    DOS current disk and directory context (optional)
  9992. ----------1514-------------------------------
  9993. INT 15 - VMiX - "sys_clrwindow" - CLEAR WINDOW
  9994.     AH = 14h
  9995.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  9996.         WORD    bottom right corner of window (high = row, low = col)
  9997. Return: AX = status (SYS_OK)
  9998. Note:    clears window to color set with "sys_setcolors" (AH=18h)
  9999. SeeAlso: AH=15h"VMiX",AH=16h"VMiX",AH=18h"VMiX",AH=1Fh"VMiX"
  10000. ----------1514-------------------------------
  10001. INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
  10002.     AH = 14h
  10003. Return: AX = current state
  10004.         0000h MultiDOS Plus command prompt is background task
  10005.         0001h command prompt is foreground task
  10006. SeeAlso: AH=0Bh"MultiDOS"
  10007. ----------1515-------------------------------
  10008. INT 15 - VMiX - "sys_setbwindow" - SET BANNER WINDOW MESSAGE
  10009.     AH = 15h
  10010.     STACK:    DWORD    pointer to ASCIZ banner    message for top of screen
  10011. Return: AX = status (SYS_OK)
  10012. SeeAlso: AH=14h"VMiX",AH=16h"VMiX"
  10013. ----------1515-------------------------------
  10014. INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
  10015.     AH = 15h
  10016. Return: BX:AX -> system block (see below)
  10017. SeeAlso: AH=13h"MultiDOS"
  10018.  
  10019. Format of MultiDOS Plus 4.0 system block:
  10020. Offset    Size    Description
  10021.  00h    WORD    segment of system control block
  10022.  02h    WORD    redirection flag set by /NOREDIRECT
  10023.  04h    WORD    no-INT 10 flag set by /NO10
  10024.  06h    DWORD    old INT 10
  10025.  0Ah    DWORD    new INT 10
  10026.  0Eh    DWORD    pointer to WORD with current TCB offset (see AH=13h)
  10027.  12h    DWORD    pointer to WORD with idle task TCB offset
  10028.  16h    DWORD    pointer to WORD with foreground TCB offset
  10029.  1Ah    DWORD    pointer to WORD with MultiDOS TCB offset
  10030.  1Eh    WORD    Task Control Block size
  10031.  20h    WORD    number of TCBs
  10032.  22h    WORD    flag: EMS present
  10033.  24h    WORD    EMS page frame base segment
  10034.  26h    WORD    16K pages in EMS page frame
  10035.  28h    WORD    base segment for conventional memory tasks
  10036.  2Ah    WORD    conventional memory size in paragraphs
  10037.  2Ch    DWORD    pointer to list of queue pointers
  10038. ----------1516-------------------------------
  10039. INT 15 - VMiX - "sys_setwindow" - SET ROOT WINDOW SIZE AND HOME CURSOR
  10040.     AH = 16h
  10041.     STACK:    DWORD    pointer to I/O Request Packet
  10042.         WORD    top left corner of window (high byte = row, low = col)
  10043.         WORD    bottom right corner of window (high = row, low = col)
  10044. Return: AX = status (SYS_OK or SYS_ERROR)
  10045. SeeAlso: AH=14h"VMiX",AH=17h"VMiX"
  10046. ----------1516-------------------------------
  10047. INT 15 - MultiDOS Plus - INITIALIZATION
  10048.     AH = 16h
  10049. Note:    used internally during initialization; any other calls will cause
  10050.       unpredicatable results
  10051. ----------1517-------------------------------
  10052. INT 15 - VMiX - "sys_getcolors" - GET CONSOLE WINDOW COLORS
  10053.     AH = 17h
  10054. Return: AH = foreground color
  10055.     AL = background color
  10056. SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
  10057. ----------1517-------------------------------
  10058. INT 15 - MultiDOS Plus - MAP IRQ
  10059.     AH = 17h
  10060.     AL = IRQ to map (01h-0Fh)
  10061.     BX = offset of task control block (see AH=13h) to associate with IRQ
  10062. Return: AX = status
  10063.         0000h successful
  10064.         other invalid IRQ
  10065. Note:    the EMS map of the specified TCB is associated with the given interrupt
  10066. SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
  10067. ----------1518-------------------------------
  10068. INT 15 - VMiX - "sys_setcolors" - SET CONSOLE COLORS
  10069.     AH = 18h
  10070.     STACK:    WORD    new background/foreground colors
  10071.             bits 3-0: foreground
  10072.             bits 7-4: background
  10073.             bits 15-8: unused
  10074. Return: AX = color
  10075. SeeAlso: AH=14h"VMiX",AH=17h"VMiX",AH=19h"VMiX"
  10076. ----------1518-------------------------------
  10077. INT 15 - MultiDOS Plus - UNMAP IRQ
  10078.     AH = 18h
  10079.     AL = IRQ to unmap (01h-0Fh)
  10080. Return: AX = status
  10081.         0000h successful
  10082.         0001h invalid IRQ
  10083. Note:    results are unpredictable if the IRQ has not been mapped
  10084. SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
  10085. ----------1519-------------------------------
  10086. INT 15 - VMiX v2+ - "sys_setconwn" - SET WINDOW COLORS
  10087.     AH = 19h
  10088.     STACK:    WORD    new background/foreground colors
  10089.             bits 3-0: foreground
  10090.             bits 7-4: background
  10091.             bits 15-8: unused
  10092. Return: AX = color
  10093. SeeAlso: AH=18h"VMiX"
  10094. ----------1519-------------------------------
  10095. INT 15 - MultiDOS Plus - UNMAP ALL IRQs
  10096.     AH = 19h
  10097. Return: AX destroyed
  10098. Note:    for MultiDOS internal use only
  10099. SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
  10100. ----------151A-------------------------------
  10101. INT 15 - VMiX v2+ - "sys_sint" - INVOKE SOFTWARE INTERRUPT
  10102.     AH = 1Ah
  10103.     STACK:    WORD    interrupt number
  10104.         DWORD    pointer to register structure
  10105. Return: AX = returned flags
  10106. ----------151A-------------------------------
  10107. INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
  10108.     AH = 1Ah
  10109.     DS:SI -> 8-byte name
  10110. Return: AL = status
  10111.         00h successful
  10112.         AH = semaphore number (20h-3Fh)
  10113.         04h out of string space
  10114. Notes:    all eight bytes of the name are significant
  10115.     if the name does not already exist, it is added to the name table and
  10116.       associated with a free semaphore number
  10117.     names cannot be destroyed
  10118. SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  10119. ----------151B-------------------------------
  10120. INT 15 - VMiX v2+ - "sys_blkmov" - MOVE MEMORY BLOCK
  10121.     AH = 1Bh
  10122.     STACK:    DWORD    source address
  10123.         DWORD    destination address
  10124.         WORD    number of words to move
  10125. Return: nothing
  10126. ----------151B-------------------------------
  10127. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
  10128.     AH = 1Bh
  10129.     DS:SI -> 8-byte name
  10130. Return: AH = status
  10131.         00h successful
  10132.         02h invalid semaphore number
  10133.         03h caller already owns semaphore
  10134.         04h out of string space
  10135. Notes:    (see AH=01h"MultiDOS")
  10136.     equivalent to AH=1Ah followed by AH=01h
  10137. SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  10138. ----------151C-------------------------------
  10139. INT 15 - VMiX v2+ - "sys_bitblt" - PUT GRAPHICAL OBJECT AT CURSOR POSITION
  10140.     AH = 1Ch
  10141.     STACK:    WORD    AND/OR pixel with background (00h = OR, 01h = AND)
  10142.         DWORD    pointer to object bitmap
  10143.         WORD    object width in pixels
  10144.         WORD    object height in pixels
  10145. Return: nothing
  10146. SeeAlso: AH=1Dh"VMiX"
  10147. ----------151C-------------------------------
  10148. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
  10149.     AH = 1Ch
  10150.     DS:SI -> 8-byte name
  10151. Return: AH = status
  10152.         00h successful
  10153.         01h not semaphore owner
  10154.         02h invalid semaphore number
  10155.         04h out of string space
  10156. Notes:    (see AH=02h"MultiDOS")
  10157.     equivalent to AH=1Ah followed by AH=02h
  10158. SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
  10159. ----------151D-------------------------------
  10160. INT 15 - VMiX v2+ - "sys_getfont" - GET CURRENT CONSOLE GRAPHICS FONT
  10161.     AH = 1Dh
  10162. Return: AX = current font number (00h-03h)
  10163. SeeAlso: AH=1Ch"VMiX",AH=1Eh"VMiX"
  10164. ----------151D-------------------------------
  10165. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
  10166.     AH = 1Dh
  10167.     DS:SI -> 8-byte name
  10168. Return; AH = status
  10169.         00h semaphore not in use
  10170.         01h semaphore owned by another task
  10171.         02h invalid semaphore number
  10172.         03h caller owns semaphore
  10173.         04h out of string space
  10174. Notes:    (see AH=10h"MultiDOS")
  10175.     equivalent to AH=1Ah followed by AH=10h
  10176. SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
  10177. ----------151E-------------------------------
  10178. INT 15 - VMiX v2+ - "sys_setfont" - SET CONSOLE GRAPHICS FONT
  10179.     AH = 1Eh
  10180.     STACK: WORD new font number (00h-03h)
  10181. Return: AX = current font number (00h-03h)
  10182. SeeAlso: AH=1Dh"VMiX"
  10183. ----------151E00-----------------------------
  10184. INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
  10185.     AX = 1E00h
  10186.     DX = event/trigger number (00h-3Fh)
  10187. Return: AH = status
  10188.         00h successful
  10189. SeeAlso: AX=1E01h,AX=1E02h
  10190. ----------151E01-----------------------------
  10191. INT 15 - MultiDOS Plus - TRIGGER EVENT
  10192.     AX = 1E01h
  10193.     DX = event/trigger number (00h-3Fh)
  10194. Return: AH = status
  10195.         00h successful
  10196.         01h invalid event/trigger number
  10197. Notes:    schedules any task waiting for event; if no task is waiting, the event
  10198.       counter is incremented (and will roll over if it was 65535)
  10199.     may be invoked by interrupt handler
  10200. SeeAlso: AX=1E00h,AX=1E02h
  10201. ----------151E02-----------------------------
  10202. INT 15 - MultiDOS Plus - WAIT FOR EVENT
  10203.     AX = 1E02h
  10204.     DX = event/trigger number (00h-3Fh)
  10205. Return: AH = status
  10206.         00h successful
  10207.         01h invalid event/trigger number
  10208. Note:    if the event counter is zero, the task is suspended until the event is
  10209.       triggered with AX=1E01h; else, the counter is decremented and the
  10210.       call returns immediately
  10211. SeeAlso: AX=1E00h,AX=1E01h
  10212. ----------151F-------------------------------
  10213. INT 15 - VMiX v2.???+ - "sys_scrollwin" - SCROLL WINDOW
  10214.     AH = 1Fh
  10215.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  10216.         WORD    bottom right corner of window
  10217. Return: AX = status (SYS_OK)
  10218. SeeAlso: AH=14h"VMiX",AH=18h"VMiX"
  10219. ----------151F-------------------------------
  10220. INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS
  10221.     AH = 1Fh
  10222. Return: BX = first segment of conventional memory
  10223.     DX = first segment of EMS swap frame into which MultiDOS will load
  10224.         programs
  10225. ----------1520-------------------------------
  10226. INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED
  10227.     AH = 20h
  10228. Return: AX = current state
  10229.         0000h multitasking enabled
  10230.         other TCB of task that disabled multitasking
  10231. SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
  10232. ----------152000-----------------------------
  10233. INT 15 - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG
  10234.     AX = 2000h
  10235. SeeAlso: AX=2001h
  10236. ----------152001-----------------------------
  10237. INT 15 - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG
  10238.     AX = 2001h
  10239.     ES:BX -> byte which is to be incremented while in a DOS call
  10240. SeeAlso: AX=2000h
  10241. ----------152010-----------------------------
  10242. INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
  10243.     AX = 2010h
  10244.     ???
  10245. Return: ???
  10246. SeeAlso: AX=2011h
  10247. ----------152011-----------------------------
  10248. INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
  10249.     AX = 2011h
  10250.     ???
  10251. Return: ???
  10252. SeeAlso: AX=2010h
  10253. ----------1521-------------------------------
  10254. INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
  10255.     AH = 21h
  10256.     AL = subfunction
  10257.         00h read POST log
  10258.         01h write POST log
  10259.         BH = device ID
  10260.         BL = error code
  10261. Return: CF set on error
  10262.     AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
  10263.     if function 00h:
  10264.        BX = number of error codes stored
  10265.        ES:DI -> error log
  10266. Note:    the log is a series of words, the first byte of which identifies the
  10267.       error code and the second the device.
  10268. ----------1522-------------------------------
  10269. INT 15 U - SYSTEM - LOCATE ROM BASIC (later PS/2's only)
  10270.     AH = 22h
  10271. Return: CF set on error
  10272.         AH = status
  10273.     CF clear on success:
  10274.         ES -> segment of ROM BASIC
  10275. ----------152400-----------------------------
  10276. INT 15 - Qualitas 386MAX v6.01 - TURN ON ???
  10277.     AX = 2400h
  10278. Return: CF clear
  10279.     AH = 00h
  10280. SeeAlso: AX=2401h,AX=2402h
  10281. ----------152401-----------------------------
  10282. INT 15 - Qualitas 386MAX v6.01 - TURN OFF ???
  10283.     AX = 2401h
  10284. Return: CF clear
  10285.     AH = 00h
  10286. SeeAlso: AX=2400h,AX=2402h
  10287. ----------152402-----------------------------
  10288. INT 15 - Qualitas 386MAX v6.01 - GET STATE OF ???
  10289.     AX = 2402h
  10290. Return: CF clear
  10291.     AH = 00h
  10292.     AL = current state (00h off, 01h on)
  10293. SeeAlso: AX=2400h,AX=2401h
  10294. ----------152403-----------------------------
  10295. INT 15 - Qualitas 386MAX v6.01 - GET ???
  10296.     AX = 2403h
  10297.     ???
  10298. Return: CF clear
  10299.     AH = 00h
  10300.     BX = bit flags???
  10301.         bit 0: ???
  10302.         bit 1: ???
  10303. Note:    reportedly also used by some PS/2 models
  10304. ----------1540-------------------------------
  10305. INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
  10306.     AH = 40h
  10307.     AL = subfunction
  10308.         00h get system profile in CX and BX
  10309.         01h set system profile from CX and BX
  10310.         02h get internal modem profile in BX
  10311.         03h set internal modem profile from BX
  10312. ----------154000-----------------------------
  10313. INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
  10314.     AX = 4000h
  10315. Return: AX = 4000h
  10316.     CL = 00h timeout disabled
  10317.        else timeout in minutes
  10318. SeeAlso: AX=4001h,AX=4600h
  10319. ----------154001CL00-------------------------
  10320. INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
  10321.     AX = 4001h
  10322.     CL = 00h timeout disabled
  10323.        else     timeout in minutes
  10324. Return: AL = 00h timeout modified
  10325.          01h timeout cannot be modified
  10326.          40h timeout cannot be modified
  10327.     CL = 00h timeout disabled
  10328.        else timeout in minutes
  10329. SeeAlso: AX=4000h,AX=4601h
  10330. ----------1541-------------------------------
  10331. INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE)
  10332.     AH = 41h
  10333.     AL = condition type
  10334.         bits 0-2: condition to wait for
  10335.              0 any external event
  10336.              1 compare and return if equal
  10337.              2 compare and return if not equal
  10338.              3 test and return if not zero
  10339.              4 test and return if zero
  10340.         bit 3:    reserved
  10341.         bit 4:    1=port address, 0=user byte
  10342.         bits 5-7: reserved
  10343.     BH = condition compare or mask value
  10344.     BL = timeout value times 55 milliseconds
  10345.         00h means no timeout
  10346.     DX = I/O port address if AL bit 4 set
  10347.     ES:DI -> user byte if AL bit 4 clear
  10348. ----------1542-------------------------------
  10349. INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX)
  10350.     AH = 42h
  10351.     AL = 00h to use system profile
  10352.          01h to force suspend regardless of system profile
  10353. Note:    the HP 95LX apparently suspends regardless of the value in AL; on
  10354.       power-up, execution will resume following the instruction calling
  10355.       this function
  10356. SeeAlso: AH=44h
  10357. ----------154280-----------------------------
  10358. INT 15 - Compaq SLT/286 - ENTER STANDBY
  10359.     AX = 4280h
  10360. Return: AH = 42h
  10361.     CF clear if successful
  10362.     CF set if unable to enter standby
  10363. SeeAlso: AX=4600h,AX=5307h/BX=0001h/CX=0001h
  10364. ----------1543-------------------------------
  10365. INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
  10366.     AH = 43h
  10367. Return: AL = status bits
  10368.         bit 0: LCD detached
  10369.         bit 1: reserved
  10370.         bit 2: RS232/parallel adapter powered on
  10371.         bit 3: internal modem powered on
  10372.         bit 4: power activated by alarm
  10373.         bit 5: standby power lost
  10374.         bit 6: external power in use
  10375.         bit 7: power low
  10376. ----------1544-------------------------------
  10377. INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
  10378.     AH = 44h
  10379.     AL = 00h to power off
  10380.          01h to power on
  10381. SeeAlso: AH=42h
  10382. ----------154600-----------------------------
  10383. INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
  10384.     AX = 4600h
  10385. Return: AH = modem configuration information
  10386.         bit 0 powerup state
  10387.             0 off
  10388.             1 on
  10389.         1 modem installed
  10390.         2 IRQ line assignment
  10391.             0 IRQ 4
  10392.             1 IRQ 3
  10393.         3 COM port assignment
  10394.             0 = COM 2
  10395.             1 = COM 1
  10396.         4 modem state
  10397.             0 not assigned
  10398.             1 assigned
  10399.         5 modem is on
  10400.     AL = power conservation status information
  10401.         bit 0  power source (0 internal, 1 external)
  10402.            1-2 low battery state
  10403.             00 no low battery condition
  10404.             01 low battery 1
  10405.             10 reserved
  10406.             11 low battery 2
  10407.            3-4 power conservation mode
  10408.             00 automatic
  10409.             01 on
  10410.             10 off
  10411.             11 reserved
  10412.     BH = default system inactivity timeout (1-21 minutes)
  10413.     BL = current system inactivity timeout (1-21 minutes)
  10414.     CH = default video display inactivity timeout (1-63 minutes)
  10415.     CL = current video display inactivity timeout (1-63 minutes)        
  10416.     DH = default fixed disk drive inactivity timeout (1-21 minutes)
  10417.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  10418. SeeAlso: AX=4280h,AX=4601h,INT 77
  10419. ----------154601-----------------------------
  10420. INT 15 - Compaq SLT/286 - Modify Power Conservation/Modem Configuration
  10421.     AX = 4601h
  10422.     BL = system inactivity timeout (1-21 minutes)
  10423.        = FFh do not change
  10424.     CL = video display inactivity timeout (1-63 minutes)        
  10425.        = FFh do not change
  10426.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  10427.        = FFh do not change
  10428.     DH = 00h turn modem OFF
  10429.        = 01h turn modem ON
  10430.        = FFh do not change modem state
  10431. Return: CF clear if successful
  10432.         AH = 00h
  10433.         BL = current system inactivity timeout (1-21 minutes)
  10434.         CL = current video display inactivity timeout (1-63 minutes)    
  10435.         DL = current fixed disk drive inactivity timeout (1-21 minutes)
  10436.         DH = FFh modem state unchanged
  10437.            = 00h modem turned OFF
  10438.            = 01h modem turned ON
  10439.     CF set on error
  10440.         AH = 01h input is out of range
  10441.            = 02h - No modem present
  10442. SeeAlso: AX=4600h,INT 77
  10443. ----------154900-----------------------------
  10444. INT 15 - Far East MSDOS - GET DOS TYPE
  10445.     AX = 4900h
  10446. Return: CF clear if successful
  10447.         AH = 00h
  10448.         BL = type of DOS running
  10449.         00h DOS/V
  10450.         01h DOS/J or DOS/K (early IBM Japan versions of MSDOS)
  10451.     CF set on error
  10452.         AH = 86h (function not supported)
  10453. Note:    in practice, DOS/J returns AH=86h; AX DOS does not support this call
  10454. SeeAlso: INT 21/AH=30h
  10455. ----------154DD4-----------------------------
  10456. INT 15 - HP 95LX - INSTALLATION CHECK
  10457.     AX = 4DD4h
  10458. Return: BX = 4850h ("HP") if HP 95LX
  10459.         CX = ??? (0101h)
  10460.         DL = ??? (00h)
  10461. SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h
  10462. SeeAlso: INT 61"HP 95LX"
  10463. ----------154E-------------------------------
  10464. INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP
  10465.     AH = 4Eh
  10466.     AL = light sleep
  10467.         00h disabled
  10468.         01h enabled
  10469. Note:    when light sleep is disabled, the system will continue running at full
  10470.       speed; when enabled, it may automatically slow to conserve batteries
  10471. SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h
  10472. ----------154F-------------------------------
  10473. INT 15 C - KEYBOARD - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
  10474.     AH = 4Fh
  10475.     AL = hardware scan code
  10476.     CF set
  10477. Return: CF set
  10478.        AL = hardware scan code
  10479.     CF clear
  10480.        scan code should be ignored
  10481. Note:    called by INT 9 handler to translate scan codes; the INT 09 code does
  10482.       not examine the scan code it reads from the keyboard until after
  10483.       this function returns.  This permits software to rearrange the
  10484.       keyboard; for example, swapping the CapsLock and Control keys, or
  10485.       turning the right Shift key into Enter.
  10486. SeeAlso: INT 09,INT 15/AH=C0h
  10487. ----------1550-------------------------------
  10488. INT 15 - VMIX v2.???+ - "sys_vm_page" - SET NEW VIRTUAL PAGE TABLE
  10489.     AH = 50h
  10490.     BX = segment of page directory table
  10491.     CX = page number of page table
  10492. SeeAlso: AH=10h"VMiX",AH=51h"VMiX",AH=52h"VMiX"
  10493. ----------1551-------------------------------
  10494. INT 15 - VMiX v2.???+ - "sys_vm_func" - EXECUTE FUNCTION IN PROTECTED MODE
  10495.     AH = 51h
  10496.     STACK:    DWORD    selector:offset of function
  10497. Return: registers as returned by function
  10498. Note:    executes function with privilege level 0 (highest privilege)
  10499. SeeAlso: AH=10h"VMiX",AH=52h"VMiX"
  10500. ----------1552-------------------------------
  10501. INT 15 - VMiX v2.???+ - "sys_vm_init" - INITIALIZE PROTECTED-MODE ENVIRONMENT
  10502.     AH = 52h
  10503. SeeAlso: AH=50h"VMiX",AH=51h"VMiX"
  10504. ----------155300BX0000-----------------------
  10505. INT 15 - Advanced Power Management Specification - INSTALLATION CHECK
  10506.     AX = 5300h
  10507.     BX = 0000h (device ID of system BIOS)
  10508. Return: CF clear if successful
  10509.         AH = major version (BCD)
  10510.         AL = minor version (BCD)
  10511.         BX = 504Dh ("PM")
  10512.         CX = flags
  10513.         bit 0: 16-bit protected mode interface supported
  10514.         bit 1: 32-bit protected mode interface supported
  10515.         bit 2: CPU idle call reduces processor speed
  10516.         bit 3: BIOS power management disabled
  10517.         bits 4-7 reserved
  10518.     CF set on error
  10519.         AH = error code (86h) (see below)
  10520.  
  10521. Values for error code:
  10522.  01h    power management functionality disabled
  10523.  02h    interface connection already in effect
  10524.  03h    interface not connected
  10525.  04h    real-mode interface not connected
  10526.  05h    16-bit protected-mode interface already connected
  10527.  06h    16-bit protected-mode interface not supported
  10528.  07h    32-bit protected-mode interface already connected
  10529.  08h    32-bit protected-mode interface not supported
  10530.  09h    unrecognized device ID
  10531.  0Ah    invalid parameter value in CX
  10532.  0Bh-1Fh reserved for other interface and general errors
  10533.  20h-3Fh reserved for CPU errors
  10534.  40h-5Fh reserved for device errors
  10535.  60h    can't enter requested state
  10536.  61h-7Fh reserved for other system errors
  10537.  80h    no power management events pending
  10538.  81h-85h reserved for other power management event errors
  10539.  86h    APM not present
  10540.  87h-9Fh reserved for other power management event errors
  10541. ----------155301BX0000-----------------------
  10542. INT 15 - Advanced Power Management Specification - CONNECT REAL-MODE INTERFACE
  10543.     AX = 5301h
  10544.     BX = 0000h (device ID of system BIOS)
  10545. Return: CF clear if successful
  10546.     CF set on error
  10547.         AH = error code (02h,09h) (see AX=5300h)
  10548. SeeAlso: AX=5302h,AX=5303h,AX=5304h
  10549. ----------155302BX0000-----------------------
  10550. INT 15 R - Advanced Power Management Spec - CONNECT 16-BIT PROTMODE INTERFACE
  10551.     AX = 5302h
  10552.     BX = 0000h (device ID of system BIOS)
  10553. Return: CF clear if successful
  10554.         AX = real-mode segment base address of protected-mode 16-bit code
  10555.         segment
  10556.         BX = offset of entry point
  10557.         CX = real-mode segment base address of protected-mode 16-bit data
  10558.         segment
  10559.     CF set on error
  10560.         AH = error code (05h,06h,09h) (see AX=5300h)
  10561. Notes:    the caller must initialize two consecutive descriptors with the
  10562.       returned segment base addresses; these descriptors must be valid
  10563.       whenever the protected-mode interface is called, and will have
  10564.       their limits arbitrarily set to 64K.
  10565.     the protected mode interface is invoked by making a far call with the
  10566.       same register values as for INT 15; it must be invoked while CPL=0,
  10567.       the code segment descriptor must have a DPL of 0, the stack must be
  10568.       in a 16-bit segment and have enough room for BIOS use and possible
  10569.       interrupts, and the current I/O permission bit map must allow access
  10570.       to the I/O ports used for power management.
  10571.     functions 00h-03h are not available from protected mode
  10572. SeeAlso: AX=5301h,AX=5303h,AX=5304h
  10573. ----------155303BX0000-----------------------
  10574. INT 15 - Advanced Power Management Spec - CONNECT 32-BIT PROTMODE INTERFACE
  10575.     AX = 5303h
  10576.     BX = 0000h (device ID of system BIOS)
  10577. Return: CF clear if successful
  10578.         AX = real-mode segment base address of protected-mode 32-bit code
  10579.         segment
  10580.         EBX = offset of entry point
  10581.         CX = real-mode segment base address of protected-mode 16-bit code
  10582.         segment
  10583.         DX = real-mode segment base address of protected-mode 16-bit data
  10584.         segment
  10585.     CF set on error
  10586.         AH = error code (07h,08h,09h) (see AX=5300h)
  10587. Notes:    the caller must initialize three consecutive descriptors with the
  10588.       returned segment base addresses for 32-bit code, 16-bit code, and
  10589.       16-bit data, respectively; these descriptors must be valid whenever
  10590.       the protected-mode interface is called, and will have their limits
  10591.       arbitrarily set to 64K.
  10592.     the protected mode interface is invoked by making a far call to the
  10593.       32-bit code segment with the same register values as for INT 15; it
  10594.       must be invoked while CPL=0, the code segment descriptor must have a
  10595.       DPL of 0, the stack must be in a 32-bit segment and have enough room
  10596.       for BIOS use and possible interrupts, and the current I/O permission
  10597.       bit map must allow access to the I/O ports used for power management.
  10598.     functions 00h-03h are not available from protected mode
  10599. SeeAlso: AX=5301h,AX=5302h,AX=5304h
  10600. ----------155304BX0000-----------------------
  10601. INT 15 - Advanced Power Management Specification - DISCONNECT INTERFACE
  10602.     AX = 5304h
  10603.     BX = 0000h (device ID of system BIOS)
  10604. Return: CF clear if successful
  10605.     CF set on error
  10606.         AH = error code (03h,09h) (see AX=5300h)
  10607. SeeAlso: AX=5301h,AX=5302h,AX=5303h
  10608. ----------155305-----------------------------
  10609. INT 15 - Advanced Power Management Specification - CPU IDLE
  10610.     AX = 5305h
  10611. Return: after system leaves idle state
  10612.     CF clear
  10613. Notes:    call when the system is idle and should be suspended until the next
  10614.       system event or interrupt
  10615.     should not be called from within a hardware interrupt handler to avoid
  10616.       reentrance problems
  10617.     if an interrupt causes the system to resume normal processing, the
  10618.       interrupt may or may not have been handled when the BIOS returns
  10619.       from this call; thus, the caller should allow interrupts on return
  10620.     interrupt handlers may not retain control if the BIOS allows
  10621.       interrupts while in idle mode even if they are able to determine
  10622.       that they were called from idle mode
  10623.     the caller should issue this call continuously in a loop until it needs
  10624.       to perform some processing of its own
  10625. SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h
  10626. ----------155306-----------------------------
  10627. INT 15 - Advanced Power Management Specification - CPU BUSY
  10628.     AX = 5306h
  10629. Return: CF clear
  10630. Notes:    called to ensure that the system runs at full speed even on systems
  10631.       where the BIOS is unable to recognize increased activity (especially
  10632.       if interrupts are hooked by other programs and not chained to the
  10633.       BIOS)
  10634.     this call may be made even when the system is already running at full
  10635.       speed, but it will create unnecessary overhead
  10636.     should not be called from within a hardware interrupt handler to avoid
  10637.       reentrance problems
  10638. SeeAlso: AX=5305h
  10639. ----------155307-----------------------------
  10640. INT 15 - Advanced Power Management Specification - SET POWER STATE
  10641.     AX = 5307h
  10642.     BX = device ID (see below)
  10643.     CX = system state ID
  10644.         0000h ready (not supported for device ID 0001h)
  10645.         0001h stand-by
  10646.         0002h suspend
  10647.         0003h off (not supported for device ID 0001h)
  10648.         0004h-FFFFh reserved
  10649. Return: CF clear if successful
  10650.     CF set on error
  10651.         AH = error code (01h,09h,0Ah,60h) (see AX=5300h)
  10652. Note:    should not be called from within a hardware interrupt handler to avoid
  10653.       reentrance problems
  10654.  
  10655. Values for device IDs:
  10656.  0000h    system BIOS
  10657.  0001h    all devices for which the system BIOS manages power
  10658.  01xxh    display (01FFh for all attached display devices)
  10659.  02xxh    secondary storage (02FFh for all attached secondary storage devices)
  10660.  03xxh    parallel ports (03FFh for all attached parallel ports)
  10661.  04xxh    serial ports (04FFh for all attached serial ports)
  10662.  0500h-FFFFh reserved
  10663. ----------155307BX0001-----------------------
  10664. INT 15 - Advanced Power Management Specification - SYSTEM STAND-BY
  10665.     AX = 5307h
  10666.     BX = 0001h
  10667.     CX = 0001h
  10668. Return: CF clear
  10669. Notes:    puts the entire system into stand-by mode; normally called in response
  10670.       to a System Stand-by Request notification after any necessary
  10671.       processing, but may also be invoked at the caller's discretion
  10672.     should not be called from within a hardware interrupt handler to avoid
  10673.       reentrance problems
  10674.     the stand-by state is typically exited on an interrupt
  10675. SeeAlso: AX=4280h,AX=5307h/BX=0001h/CX=0002h,AX=530Bh
  10676. ----------155307BX0001-----------------------
  10677. INT 15 - Advanced Power Management Specification - SUSPEND SYSTEM
  10678.     AX = 5307h
  10679.     BX = 0001h
  10680.     CX = 0002h
  10681. Return: after system is resumed
  10682.     CF clear
  10683. Notes:    puts the entire system into a low-power suspended state; normally
  10684.       called in response to a Suspend System Request notification after
  10685.       any necessary processing, but may also be invoked at the caller's
  10686.       discretion
  10687.     should not be called from within a hardware interrupt handler to avoid
  10688.       reentrance problems
  10689.     the caller may need to update its date and time values because the
  10690.       system could have been suspended for a long period of time
  10691. SeeAlso: AX=5307h/BX=0001h/CX=0001h,AX=530Bh
  10692. ----------155308BXFFFF-----------------------
  10693. INT 15 - Advanced Power Management Spec - ENABLE/DISABLE POWER MANAGEMENT
  10694.     AX = 5308h
  10695.     BX = FFFFh
  10696.     CX = new state
  10697.         0000h disabled
  10698.         0001h enabled
  10699. Return: CF clear if successful
  10700.     CF set on error
  10701.         AH = error code (01h,09h,0Ah) (see AX=5300h)
  10702. Notes:    when power management is disabled, the system BIOS will not
  10703.       automatically power down devices, enter stand-by or suspended mode,
  10704.       or perform any power-saving actions in response to AX=5305h calls
  10705.     should not be called from within a hardware interrupt handler to avoid
  10706.       reentrance problems
  10707. SeeAlso: AX=5309h
  10708. ----------155309BXFFFF-----------------------
  10709. INT 15 - Advanced Power Management Specification - RESTORE POWER-ON DEFAULTS
  10710.     AX = 5309h
  10711.     BX = FFFFh
  10712. Return: CF clear if successful
  10713.     CF set on error
  10714.         AH = error code (09h) (see AX=5300h)
  10715. Note:    should not be called from within a hardware interrupt handler to avoid
  10716.       reentrance problems
  10717. SeeAlso: AX=5308h
  10718. ----------15530ABX0001-----------------------
  10719. INT 15 - Advanced Power Management Specification - GET POWER STATUS
  10720.     AX = 530Ah
  10721.     BX = 0001h
  10722. Return: CF clear if successful
  10723.         BH = AC line status
  10724.         00h off-line
  10725.         01h on-line
  10726.         FFh unknown
  10727.         other reserved
  10728.         BL = battery status
  10729.         00h high
  10730.         01h low
  10731.         02h critical
  10732.         03h charging
  10733.         FFh unknown
  10734.         other reserved
  10735.         CL = remaining battery life
  10736.         00h-64h (0-100) percentage of full charge
  10737.         FFh unknown
  10738.     CF set on error
  10739.         AH = error code (09h) (see AX=5300h)
  10740. Note:    should not be called from within a hardware interrupt handler to avoid
  10741.       reentrance problems
  10742. ----------15530B-----------------------------
  10743. INT 15 - Advanced Power Management Specification - GET POWER MANAGEMENT EVENT
  10744.     AX = 530Bh
  10745. Return: CF clear if successful
  10746.         BX = event code
  10747.         0001h system stand-by request
  10748.         0002h system suspend request
  10749.         0003h normal resume system notification
  10750.         0004h critical resume system notification
  10751.         0005h battery low notification
  10752.     CF set on error
  10753.         AH = error code (03h,80h) (see AX=5300h)
  10754. Notes:    although power management events are often asynchronous, notification
  10755.       will not be made until polled via this call to permit software to
  10756.       only receive event notification when it is prepared to process
  10757.       power management events; since these events are not very time-
  10758.       critical, it should be sufficient to poll once or twice per second
  10759.     the critical resume notification is made after the system resumes
  10760.       from an emergency suspension; normally, the system BIOS only notifies
  10761.       its partner that it wishes to suspend and relies on the partner to
  10762.       actually request the suspension, but no notification is made on an
  10763.       emergency suspension
  10764.     should not be called from within a hardware interrupt handler to avoid
  10765.       reentrance problems
  10766. SeeAlso: AX=5307h,AX=5307h/BX=0001h/CX=0001h,AX=5307h/BX=0001h/CX=0002h
  10767. ----------155400-----------------------------
  10768. INT 15 C - Omniview Multitasker - INSTALLATION NOTIFICATION
  10769.     AX = 5400h
  10770.     ES:BX -> device information tables
  10771.     DI:DX -> dispatcher entry point
  10772. Note:    called by OmniView to notify programs loaded before OmniView of state
  10773.       changes inside OmniView
  10774. SeeAlso: AX=5407h,INT 2F/AX=DE00h
  10775. ----------155401-----------------------------
  10776. INT 15 C - Omniview Multitasker - PROCESS CREATION
  10777.     AX = 5401h
  10778.     ES:BX = process handle
  10779. Note:    called by OmniView to notify programs loaded before OmniView of state
  10780.       changes inside OmniView
  10781. SeeAlso: AX=5402h,INT 2F/AX=DE04h
  10782. ----------155402-----------------------------
  10783. INT 15 C - Omniview Multitasker - PROCESS DESTRUCTION
  10784.     AX = 5402h
  10785.     ES:DX = process handle
  10786. Note:    called by OmniView to notify programs loaded before OmniView of state
  10787.       changes inside OmniView
  10788. SeeAlso: AX=5401h,INT 2F/AX=DE05h
  10789. ----------155403-----------------------------
  10790. INT 15 C - Omniview Multitasker - SAVE
  10791.     AX = 5403h
  10792.     ES:DX = process swapping out
  10793. Note:    called by OmniView to notify programs loaded before OmniView of state
  10794.       changes inside OmniView
  10795. SeeAlso: AX=5404h,INT 2F/AX=DE08h
  10796. ----------155404-----------------------------
  10797. INT 15 C - Omniview Multitasker - RESTORE
  10798.     AX = 5404h
  10799.     ES:DX = process swapping in
  10800. Note:    called by OmniView to notify programs loaded before OmniView of state
  10801.       changes inside OmniView
  10802. SeeAlso: AX=5403h,INT 2F/AX=DE09h
  10803. ----------155405-----------------------------
  10804. INT 15 C - Omniview Multitasker - SWITCHING TO BACKGROUND
  10805.     AX = 5405h
  10806.     ES:DX = process swapping in
  10807. Note:    called by OmniView to notify programs loaded before OmniView of state
  10808.       changes inside OmniView
  10809. SeeAlso: AX=5406h
  10810. ----------155406-----------------------------
  10811. INT 15 C - Omniview Multitasker - SWITCHING TO FOREGROUND
  10812.     AX = 5406h
  10813.     ES:DX = process swapping in
  10814. Note:    called by OmniView to notify programs loaded before OmniView of state
  10815.       changes inside OmniView
  10816. SeeAlso: AX=5405h
  10817. ----------155407-----------------------------
  10818. INT 15 C - Omniview Multitasker - EXIT NOTIFICATION
  10819.     AX = 5407h
  10820. Note:    called by OmniView to notify programs loaded before OmniView of state
  10821.       changes inside OmniView
  10822. SeeAlso: AX=5400h,INT 2F/AX=DE03h
  10823. ----------1580-------------------------------
  10824. INT 15 C - OS HOOK - DEVICE OPEN (AT,XT286,PS)
  10825.     AH = 80h
  10826.     BX = device ID
  10827.     CX = process ID
  10828.     CF clear
  10829. Return: CF clear if successful
  10830.         AH = 00h
  10831.     CF set on error
  10832.         AH = status
  10833.         80h invalid command (PC,PCjr)
  10834.         86h function not supported (XT)
  10835. Note:    this function should be hooked by a multitasker which wishes to keep
  10836.       track of device ownership; the default BIOS handler merely returns
  10837.       successfully
  10838. SeeAlso: AH=81h,AH=82h
  10839. ----------1581-------------------------------
  10840. INT 15 C - OS HOOK - DEVICE CLOSE
  10841.     AH = 81h
  10842.     BX = device ID
  10843.     CX = process ID
  10844.     CF clear
  10845. Return: CF clear if successful
  10846.         AH = 00h
  10847.     CF set on error
  10848.         AH = status (see AH=80h)
  10849. Note:    this function should be hooked by a multitasker which wishes to keep
  10850.       track of device ownership; the default BIOS handler merely returns
  10851.       successfully
  10852. SeeAlso: AH=80h,AH=82h
  10853. ----------1582-------------------------------
  10854. INT 15 C - OS HOOK - PROGRAM TERMINATION
  10855.     AH = 82h
  10856.     BX = process ID
  10857.     CF clear
  10858. Return: CF clear if successful
  10859.         AH = 00h
  10860.     CF set on error
  10861.         AH = status (see AH=80h)
  10862. Notes:    closes all devices opened by the given process ID with function 80h
  10863.     this function should be hooked by a multitasker which wishes to keep
  10864.       track of device ownership; the default BIOS handler merely returns
  10865.       successfully
  10866. SeeAlso: AH=80h,AH=81h
  10867. ----------1583-------------------------------
  10868. INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
  10869.     AH = 83h
  10870.     AL = subfunction
  10871.         00h set interval
  10872.         CX:DX = microseconds to delay
  10873.         ES:BX -> byte whose high bit is to be set at end of interval
  10874.         01h cancel wait interval
  10875. Return: CF set on error or function already busy
  10876.         AH = status
  10877.         80h invalid command (PC,PCjr)
  10878.         86h function not supported (XT and later)
  10879.     CF clear if successful
  10880. Note:    the resolution of the wait period is 977 microseconds on most systems
  10881.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  10882.       real-time clock chip which is available on INT 70
  10883. SeeAlso: AH=86h,INT 70
  10884. ----------1584-------------------------------
  10885. INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)
  10886.     AH = 84h
  10887.     DX = subfunction
  10888.         0000h read joystick switches
  10889.         Return: AL bits 7-4 = switch settings
  10890.         0001h read positions of joysticks
  10891.         Return: AX = X position of joystick A
  10892.             BX = Y position of joystick A
  10893.             CX = X position of joystick B
  10894.             DX = Y position of joystick B
  10895. Return: CF set on error
  10896.         AH = status
  10897.         80h invalid command (PC,PCjr)
  10898.         86h function not supported (other)
  10899.     CF clear if successful
  10900. Notes:    if no game port is installed, subfunction 0000h returns AL=00h (all
  10901.       switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
  10902.     a 250kOhm joystick typically returns 0000h-01A0h
  10903. ----------1585-------------------------------
  10904. INT 15 C - OS HOOK - SysRq KEY ACTIVITY (AT,PS)
  10905.     AH = 85h
  10906.     AL = 00h SysRq key pressed
  10907.        = 01h SysRq key released
  10908.     CF clear
  10909. Return: CF clear if successful
  10910.         AH = 00h
  10911.     CF set on error
  10912.         AH = status (see AH=84h)
  10913. Notes:    called by keyboard decode routine
  10914.     the default handler simply returns successfully; programs which wish
  10915.       to monitor the SysRq key must hook this call
  10916. SeeAlso: INT 09
  10917. ----------1586-------------------------------
  10918. INT 15 - BIOS - WAIT (AT,PS)
  10919.     AH = 86h
  10920.     CX:DX = interval in microseconds
  10921. Return: CF clear if successful (wait interval elapsed)
  10922.     CF set on error or AH=83h wait already in progress
  10923.         AH = status (see AH=84h)
  10924. Note:    the resolution of the wait period is 977 microseconds on most systems
  10925.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  10926.       real-time clock chip which is available on INT 70
  10927. SeeAlso: AH=83h,INT 70
  10928. ----------1587-------------------------------
  10929. INT 15 - SYSTEM - COPY EXTENDED MEMORY
  10930.     AH = 87h
  10931.     CX = number of words to copy (max 8000h)
  10932.     ES:SI -> global descriptor table
  10933. Return: CF set on error
  10934.     CF clear if successful
  10935.     AH = status
  10936.         00h source copied into destination
  10937.         01h parity error
  10938.         02h interrupt error
  10939.         03h address line 20 gating failed
  10940.         80h invalid command (PC,PCjr)
  10941.         86h unsupported function (XT,PS30)
  10942. Notes:    copy is done in protected mode with interrupts disabled
  10943.     this function is incompatible with the OS/2 compatibility box
  10944. SeeAlso: AH=88h,AH=89h
  10945.  
  10946. Format of global descriptor table:
  10947. Offset    Size    Description
  10948.  00h 16 BYTEs    zeros
  10949.  10h    WORD    source segment length in bytes (2*CX-1 or greater)
  10950.  12h  3 BYTEs    24-bit linear source address, low byte first
  10951.  15h    BYTE    source segment access rights (93h)
  10952.  16h    WORD    zero
  10953.  18h    WORD    destination segment length in bytes (2*CX-1 or greater)
  10954.  1Ah  3 BYTEs    24-bit linear destination address, low byte first
  10955.  1Dh    BYTE    destination segment access rights (93h)
  10956.  1Eh 18 BYTEs    zeros
  10957. ----------1588-------------------------------
  10958. INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
  10959.     AH = 88h
  10960. Return: CF clear if successful
  10961.         AX = number of contiguous KB starting at absolute address 100000h
  10962.     CF set on error
  10963.         AH = status
  10964.         80h invalid command (PC,PCjr)
  10965.         86h unsupported function (XT,PS30)
  10966. Note:    TSRs which wish to allocate extended memory to themselves often hook
  10967.       this call, and return a reduced memory size.    They are then free to
  10968.       use the memory between the new and old sizes at will.
  10969. SeeAlso: AH=87h
  10970. ----------1589-------------------------------
  10971. INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
  10972.     AH = 89h
  10973.     BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
  10974.     BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
  10975.     ES:SI -> GDT for protected mode
  10976.            offset 0h  null descriptor (initialize to zeros)
  10977.               8h  GDT descriptor
  10978.              10h  IDT descriptor
  10979.              18h  DS
  10980.              20h  ES
  10981.              28h  SS
  10982.              30h  CS
  10983.              38h  uninitialized, used to build descriptor for BIOS CS
  10984.     CX = offset into protected-mode CS to jump to
  10985. Return: CF set on error
  10986.        AH = FFh  error enabling address line 20
  10987.     CF clear if successful
  10988.        AH = 00h
  10989.        in protected mode at specified address
  10990. Note:    BL and BH must be multiples of 8
  10991. SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
  10992. ----------1590-------------------------------
  10993. INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
  10994.     AH = 90h
  10995.     AL = device type
  10996.         00h disk
  10997.         01h diskette
  10998.         02h keyboard
  10999.         03h PS/2 pointing device
  11000.         21h waiting for keyboard input (Phoenix BIOS)
  11001.         80h network
  11002.         FBh digital sound (Tandy)
  11003.         FCh disk reset (PS)
  11004.         FDh diskette motor start
  11005.         FEh printer
  11006.     ES:BX -> request block for type codes 80h through BFh
  11007.     CF clear
  11008. Return: CF set if wait time satisfied
  11009.     CF clear if driver must perform wait
  11010.         AH = 00h
  11011. Notes:    type codes are allocated as follows:
  11012.       00-7F non-reentrant devices; OS must arbitrate access
  11013.       80-BF reentrant devices; ES:BX points to a unique control block
  11014.       C0-FF wait-only calls, no complementary INT 15/AH=91h call
  11015.     floppy and hard disk BIOS code uses this call to implement a timeout;
  11016.       for device types 00h and 01h, a return of CF set means that the
  11017.       timeout expired before the disk responded.
  11018.     this function should be hooked by a multitasker to allow other tasks
  11019.       to execute while the BIOS is waiting for I/O completion; the default
  11020.       handler merely returns with AH=00h and CF clear
  11021. SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h
  11022. ----------1591-------------------------------
  11023. INT 15 - OS HOOK - DEVICE POST (AT,PS)
  11024.     AH = 91h
  11025.     AL = device type (see AH=90h)
  11026.     ES:BX -> request block for type codes 80h through BFh
  11027.     CF clear
  11028. Return: AH = 00h
  11029. Note:    this function should be hooked by a multitasker to allow other tasks
  11030.       to execute while the BIOS is waiting for I/O completion; the default
  11031.       handler merely returns with AH=00h and CF clear
  11032. SeeAlso: AH=90h
  11033. ----------15BC-------------------------------
  11034. INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED
  11035.     AH = BCh
  11036. Return: CF clear
  11037.     BYTE 0040h:00B0h set to ??? (43 on my 386/33)
  11038. Note:    reads system timer channel 0 twice, then does calculations on returned
  11039.       values
  11040. ----------15BF00-----------------------------
  11041. INT 15 - Rational Systems DOS/16M - ???
  11042.     AX = BF00h
  11043.     ???
  11044. Return: ???
  11045. Note:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  11046. SeeAlso: AX=BF02h
  11047. ----------15BF01-----------------------------
  11048. INT 15 - Rational Systems DOS/16M - ???
  11049.     AX = BF01h
  11050.     ???
  11051. Return: ???
  11052. Notes:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  11053.     called by DOS/4GW
  11054. SeeAlso: AX=BF00h,AX=BF02h
  11055. ----------15BF02DX0000-----------------------
  11056. INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
  11057.     AX = BF02h
  11058.     DX = 0000h
  11059. Return: DX = nonzero if installed
  11060.         DX:SI -> XBRK structure (see below)
  11061. Note:    this function is also supported by DOS/4G
  11062. SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
  11063. SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
  11064.  
  11065. Format of XBRK structure:
  11066. Offset    Size    Description
  11067.  00h    DWORD    linear address of first available byte
  11068.  04h    DWORD    linear address of last available byte + 1 ???
  11069.  08h    DWORD    real-mode address of XBRK structure???
  11070.  0Ch    DWORD    ???
  11071.  10h  2 BYTEs    ???
  11072.  12h    WORD    segment of ???
  11073.  14h  8 BYTEs    ???
  11074.  1Ch 512 BYTEs    protected-mode IDT
  11075. 21Ch  N BYTEs    protected-mode GDT
  11076. ----------15BF03-----------------------------
  11077. INT 15 - Rational Systems DOS/4GW - UNINSTALL???
  11078.     AX = BF03h
  11079.     BX = PSP segment of extender
  11080.     ???
  11081. Return: ???
  11082. Note:    if BX is not the PSP segment of the extender, it passes the call down
  11083.       the INT 15 chain; this allows nested instances of the extender
  11084. SeeAlso: AX=BF06h
  11085. ----------15BF04-----------------------------
  11086. INT 15 - Rational Systems DOS/4GW - ???
  11087.     AX = BF04h
  11088.     BX = PSP segment of extender
  11089. Return: nothing???
  11090. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  11091.       the INT 15 chain; this allows nested instances of the extender
  11092.     grabs INT 2Fh and installs handlers for INT 2F/AX=1605h-1607h
  11093. SeeAlso: INT 2F/AX=1607h/BX=22C0h
  11094. ----------15BF05-----------------------------
  11095. INT 15 - Rational Systems DOS/4GW - INITIALIZE PROTECTED-MODE INTERFACE
  11096.     AX = BF05h
  11097.     BX = PSP segment of extender
  11098. Return: nothing???
  11099. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  11100.       the INT 15 chain; this allows nested instances of the extender
  11101.     calls INT 67/AX=DE01h if ???
  11102. ----------15BF06-----------------------------
  11103. INT 15 - Rational Systems DOS/4GW - ???
  11104.     AX = BF06h
  11105.     BX = PSP segment of extender
  11106.     ???
  11107. Return: ???
  11108. Note:    if BX is not the PSP segment of the extender, it passes the call down
  11109.       the INT 15 chain; this allows nested instances of the extender
  11110. SeeAlso: AX=BF03h
  11111. ----------15BFDCDX0000-----------------------
  11112. INT 15 - Rational Systems DOS/4GW - INSTALLATION CHECK
  11113.     AX = BFDCh
  11114.     DX = 0000h
  11115.     SI = 0000h
  11116. Return: DX = nonzero if installed
  11117.         DX:SI -> XBRK structure (see AX=BF02h)
  11118. SeeAlso: AX=BF02h
  11119. ----------15BFDEBX0000-----------------------
  11120. INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
  11121.     AX = BFDEh
  11122.     BX = 0000h
  11123. Return: AX = ??? (0003h)
  11124.     BX = FFFFh
  11125. SeeAlso: AX=BF02h
  11126. ----------15BFDEBX0001-----------------------
  11127. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
  11128.     AX = BFDEh
  11129.     BX = 0001h
  11130. Return: BX = 0000h (success)
  11131.     CX:DX -> name of process manager executable
  11132. SeeAlso: AX=BFDEh/BX=0000h
  11133. ----------15BFDEBX0002-----------------------
  11134. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???
  11135.     AX = BFDEh
  11136.     BX = 0002h
  11137.     CX:DX -> ???
  11138. Return: BX = 0000h (success)
  11139. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
  11140. ----------15BFDEBX0003-----------------------
  11141. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  11142.     AX = BFDEh
  11143.     BX = 0003h
  11144. Return: BX = 0000h (success)
  11145.     CX:DX -> ???
  11146. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
  11147. ----------15BFDEBX0004-----------------------
  11148. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11149.     AX = BFDEh
  11150.     BX = 0004h
  11151.     CL = ???
  11152. Return: BX = 0000h (success)
  11153.     CX:DX -> XBRK structure (see AX=BF02h)
  11154. SeeAlso: AX=BFDEh/BX=0000h
  11155. ----------15BFDEBX0005-----------------------
  11156. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11157.     AX = BFDEh
  11158.     BX = 0005h
  11159.     CX = new value for ???
  11160. Return: BX = 0000h (success)
  11161.     AX = old value of ???
  11162.     DS:SI -> ??? (if AX nonzero on return)
  11163.     ES:DI -> ??? (if AX zero on return)
  11164. Note:    called by DOS4GW.EXE
  11165. SeeAlso: AX=BFDEh/BX=0000h
  11166. ----------15BFDEBX0006-----------------------
  11167. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  11168.     AX = BFDEh
  11169.     BX = 0006h
  11170. Return: BX = 0000h (success)
  11171.     AH = interrupt number??? (BEh)
  11172.     CX:DX = ???
  11173. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
  11174. ----------15BFDEBX0007-----------------------
  11175. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???
  11176.     AX = BFDEh
  11177.     BX = 0007h
  11178.     CX:DX = ???
  11179. Return: BX = 0000h (success)
  11180. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
  11181. ----------15BFDEBX0008-----------------------
  11182. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11183.     AX = BFDEh
  11184.     BX = 0008h
  11185.     CX = segment of ???
  11186.     DS = ???
  11187. Return: BX = status
  11188.         0000h successful
  11189.         AL = ??? (80h or C0h)
  11190.         DX = ??? (0603h) if AL=C0h
  11191.         0001h failed
  11192.         AX = 0000h
  11193. Note:    called by DOS4GW.EXE
  11194. SeeAlso: AX=BFDEh/BX=0000h
  11195. ----------15BFDEBX0009-----------------------
  11196. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
  11197.     AX = BFDEh
  11198.     BX = 0009h
  11199. Return: BX = 0000h (success)
  11200.     CX:DX -> full pathname to LOAD32.EXP
  11201. SeeAlso: AX=BFDEh/BX=0000h
  11202. ----------15BFDEBX000A-----------------------
  11203. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - DECREMENT ???
  11204.     AX = BFDEh
  11205.     BX = 000Ah
  11206. Return: BX = 0000h (success)
  11207.     AX = new value of ??? counter
  11208. Notes:    also resets a variety of values if the counter goes negative
  11209.     called by DOS4GW.EXE
  11210. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
  11211. ----------15BFDEBX000B-----------------------
  11212. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - INCREMENT ???
  11213.     AX = BFDEh
  11214.     BX = 000Bh
  11215. Return:    AX = new value of ??? counter
  11216. Note:    called by DOS4GW.EXE
  11217. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
  11218. ----------15BFDEBX000C-----------------------
  11219. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11220.     AX = BFDEh
  11221.     BX = 000Ch
  11222.     CL = ???
  11223.         00h
  11224.         nonzero
  11225. Return: ???
  11226. SeeAlso: AX=BFDEh/BX=0000h
  11227. ----------15BFDEBX000D-----------------------
  11228. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11229.     AX = BFDEh
  11230.     BX = 000Dh
  11231.     ???
  11232. Return: ???
  11233. SeeAlso: AX=BFDEh/BX=0000h
  11234. ----------15BFDEBX000E-----------------------
  11235. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11236.     AX = BFDEh
  11237.     BX = 000Eh
  11238.     DX:CX -> ???
  11239. Return: AX = segment of handle for calling task
  11240.     BX = ??? (probably destroyed)
  11241.     DX:CX -> ???
  11242. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
  11243. ----------15BFDEBX000F-----------------------
  11244. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11245.     AX = BFDEh
  11246.     BX = 000Fh
  11247. Return: AX = segment of handle for calling task
  11248.     BX = ??? (probably destroyed)
  11249.     DX:CX -> ???
  11250. Note:    identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
  11251. SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
  11252. ----------15BFDEBX0010-----------------------
  11253. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET TASK HANDLE
  11254.     AX = BFDEh
  11255.     BX = 0010h
  11256. Return: AX = segment of caller's task handle
  11257.     BX destroyed
  11258. SeeAlso: AX=BFDEh/BX=000Fh
  11259. ----------15BFDEBX0011-----------------------
  11260. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  11261.     AX = BFDEh
  11262.     BX = 0011h
  11263. Return: CX = code segment of DVDOS4GX.DVR
  11264.     BX = ??? (0004h)
  11265. SeeAlso: AX=BFDEh/BX=0000h
  11266. ----------15BFDEBX0012-----------------------
  11267. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  11268.     AX = BFDEh
  11269.     BX = 0012h
  11270. Return: DX = code segment of DVDOS4GX.DVR
  11271.     BX = ??? (012Ch)
  11272.     CX = ??? (0006h)
  11273. SeeAlso: AX=BFDEh/BX=0000h
  11274. ----------15BFDEBX0013-----------------------
  11275. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  11276.     AX = BFDEh
  11277.     BX = 0013h
  11278. Return: DX:CX -> ???
  11279. SeeAlso: AX=BFDEh/BX=000Eh
  11280. ----------15BFDEBX0014-----------------------
  11281. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - LOCK ??? MAILBOX
  11282.     AX = BFDEh
  11283.     BX = 0014h
  11284.     CX = index of ??? mailbox
  11285.         (0000h-0004h valid, but no range checking done)
  11286. Return: AX,BX destroyed
  11287. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  11288. ----------15BFDEBX0015-----------------------
  11289. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
  11290.     AX = BFDEh
  11291.     BX = 0015h
  11292.     CX = index of ??? mailbox
  11293.         (0000h-0004h valid, but no range checking done)
  11294. Return: AX,BX destroyed
  11295. SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
  11296. ----------15BFDEBX0016-----------------------
  11297. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
  11298.     AX = BFDEh
  11299.     BX = 0016h
  11300.     CX = index of ??? mailbox
  11301.         (0000h-0004h valid, but no range checking done)
  11302. Return: AX = status
  11303.         0000h no one owns mailbox
  11304.         0001h mailbox has an owner
  11305.     BX destroyed
  11306. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  11307. ----------15BFDEBX0017-----------------------
  11308. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
  11309.     AX = BFDEh
  11310.     BX = 0017h
  11311.     CX = index of ??? mailbox
  11312.         (0000h-0004h valid, but no range checking done)
  11313. Return: AX = segment of mailbox owner's handle
  11314.     BX = segment of caller's task handle
  11315. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
  11316. ----------15BFDEBXFFFD-----------------------
  11317. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  11318.     AX = BFDEh
  11319.     BX = FFFDh
  11320. Return: CX:DX = ???
  11321. SeeAlso: AX=BFDEh/BX=FFFEh
  11322. ----------15BFDEBXFFFE-----------------------
  11323. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???
  11324.     AX = BFDEh
  11325.     BX = FFFEh
  11326.     CX:DX = ???
  11327. SeeAlso: AX=BFDEh/BX=FFFDh
  11328. ----------15BFDEBXFFFF-----------------------
  11329. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - NOP
  11330.     AX = BFDEh
  11331.     BX = FFFFh
  11332. SeeAlso: AX=BFDEh/BX=0000h
  11333. ----------15C0-------------------------------
  11334. INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
  11335.     AH = C0h
  11336. Return: CF set if BIOS doesn't support call
  11337.     CF clear on success
  11338.         ES:BX -> ROM table (see below)
  11339.     AH = status
  11340.         00h successful
  11341.         86h unsupported function
  11342. Notes:    the 1/10/86 XT BIOS returns an incorrect value for the feature byte
  11343.     the configuration table is at F000h:E6F5h in 100% compatible BIOSes
  11344.     Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
  11345.       and a model byte at absolute address FE845h
  11346.     Tandy 1000 machines contain 21h in the byte at F000h:C000h
  11347.     some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
  11348.       past the end of the configuration table
  11349.  
  11350. Format of ROM configuration table:
  11351. Offset    Size    Description
  11352.  00h    WORD    number of bytes following
  11353.  02h    BYTE    model (see below)
  11354.  03h    BYTE    submodel (see below)
  11355.  04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
  11356.  05h    BYTE    feature byte 1:
  11357.         bit 7 = DMA channel 3 used by hard disk BIOS
  11358.         bit 6 = 2nd 8259 installed
  11359.         bit 5 = Real-Time Clock installed
  11360.         bit 4 = INT 15/AH=4Fh called upon INT 9h
  11361.         bit 3 = wait for external event supported
  11362.         bit 2 = extended BIOS area allocated (usually at top of RAM)
  11363.         bit 1 = bus is Micro Channel instead of ISA
  11364.         bit 0 reserved
  11365.  06h    BYTE    feature byte 2:
  11366.         bit 7 = ???
  11367.         bit 6 = INT 16/AH=09h (keyboard functionality) supported
  11368.         bits 5-0 = ???
  11369.  07h    BYTE    feature byte 3:
  11370.         reserved (0)
  11371.  08h    BYTE    feature byte 4:
  11372.         reserved (0)
  11373.  09h    BYTE    feature byte 5:
  11374.         reserved (0) (IBM)
  11375.         ??? (08h) (Phoenix 386 v1.10)
  11376. ---AWARD BIOS---
  11377.  0Ah  N BYTEs    AWARD copyright notice
  11378. ---Phoenix BIOS---
  11379.  0Ah    BYTE    ??? (00h)
  11380.  0Bh    BYTE    major version
  11381.  0Ch    BYTE    minor version (BCD)
  11382.  0Dh  4 BYTEs    ASCIZ string "PTL" (Phoenix Technologies Ltd)
  11383.  
  11384. Values for model/submodel/revision:
  11385. Model  Submdl  Rev    BIOS date    System
  11386.  FFh    *    *    04/24/81    PC (original)
  11387.  FFh    *    *    10/19/81    PC (some bugfixes)
  11388.  FFh    *    *    10/27/82    PC (HD, 640K, EGA support)
  11389.  FFh    46h    ***      ???        Olivetti M15
  11390.  FEh    *    *    08/16/82    PC XT
  11391.  FEh    *    *    11/08/82    PC XT and Portable
  11392.  FEh    43h    ***      ???        Olivetti M240
  11393.  FEh    A6h    ???      ???        ??? (checked for by 386MAX v6.01)
  11394.  FDh    *    *    06/01/83    PCjr
  11395.  FCh    *    *    01/10/84    AT models 068,099 6 MHz 20MB
  11396.  FCh    00h    01h    06/10/85    AT model  239      6 MHz 30MB
  11397.  FCh    00h    <> 01h      ???        7531/2 Industrial AT
  11398.  FCh    01h    00h    11/15/85    AT models 319,339 8 MHz, Enh Keyb, 3.5"
  11399.  FCh    01h    00h    09/17/87    Tandy 3000
  11400.  FCh    01h    00h    01/15&88    Toshiba T5200/100
  11401.  FCh    01h    00h    12/26*89    Toshiba T1200/XE
  11402.             (Those date characters are not typos)
  11403.  FCh    01h    30h      ???        Tandy 3000NL
  11404.  FCh    01h    ???      ???        Compaq 286/386
  11405.  FCh    02h    00h    04/21/86    PC XT-286
  11406.  FCh    04h    00h    02/13/87     ** PS/2 Model 50 (10 MHz/1 ws 286)
  11407.  FCh    04h    03h    04/18/88    PS/2 Model 50Z (10 MHz/0 ws 286)
  11408.  FCh    05h    00h    02/13/87     ** PS/2 Model 60 (10 MHz 286)
  11409.  FCh    06h    ???      ???        7552 "Gearbox"
  11410.  FCh    08h    ***      ???        Epson, unknown model
  11411.  FCh    09h    00h      ???        PS/2 Model 25 (10 MHz 286)
  11412.  FCh    09h    02h    06/28/89    PS/2 Model 30-286
  11413.  FCh    0Bh    00h    02/16/90    PS/1 Model 2011 (10 MHz 286)
  11414.  FCh    30h    ***      ???        Epson, unknown model
  11415.  FCh    31h    ***      ???        Epson, unknown model
  11416.  FCh    33h    ***      ???        Epson, unknown model
  11417.  FCh    42h    ***      ???        Olivetti M280
  11418.  FCh    45h    ***      ???        Olivetti M380 (XP 1, XP3, XP 5)
  11419.  FCh    48h    ***      ???        Olivetti M290
  11420.  FCh    4Fh    ***      ???        Olivetti M250
  11421.  FCh    50h    ***      ???        Olivetti M380 (XP 7)
  11422.  FCh    51h    ***      ???        Olivetti PCS286
  11423.  FCh    52h    ***      ???        Olivetti M300
  11424.  FCh    81h    00h    01/15/88    Phoenix 386 BIOS v1.10 10a
  11425.  FBh    00h    01h    01/10/86    PC XT, Enh Keyb, 3.5" support
  11426.  FBh    00h    02h    05/09/86    PC XT
  11427.  FBh    4Ch    ***      ???        Olivetti M200
  11428.  FAh    00h    00h    09/02/86    PS/2 Model 30 (8 MHz 8086)
  11429.  FAh    00h    01h    12/12/86    PS/2 Model 30
  11430.  FAh    01h    00h      ???        PS/2 Model 25/25L (8 MHz 8086)
  11431.  FAh    4Eh    ***      ???        Olivetti M111
  11432.  F9h    00h    00h    09/13/85    PC Convertible
  11433.  F8h    00h    00h    03/30/87     ** PS/2 Model 80 (16MHz 386)
  11434.  F8h    01h    00h    10/07/87    PS/2 Model 80 (20MHz 386)
  11435.  F8h    04h    02h    04/11/88    PS/2 Model 70 20MHz, type 2 system brd
  11436.  F8h    04h    03h    03/17/89    PS/2 Model 70 20MHz, type 2 system brd
  11437.  F8h    09h    00h      ???        PS/2 Model 70 16MHz, type 1 system brd
  11438.  F8h    09h    02h    04/11/88    PS/2 Model 70 some models
  11439.  F8h    09h    03h    03/17/89    PS/2 Model 70 some models
  11440.  F8h    0Bh    00h    01/18/89    PS/2 Model P70 (8573-121) typ 2 sys brd
  11441.  F8h    0Bh    02h    12/16/89    PS/2 Model P70 ??
  11442.  F8h    0Ch    00h    11/02/88    PS/2 Model 55SX (16 MHz 386SX)
  11443.  F8h    0Dh    00h      ???        PS/2 Model 70 25MHz, type 3 system brd
  11444.  F8h    11h    00h    10/01/90    PS/2 Model 90 (25 MHz 486)
  11445.  F8h    13h    00h    10/01/90    PS/2 Model 90 (33 MHz 486)
  11446.  F8h    14h    00h    10/01/90    PS/2 Model 90-AK9 (25 MHz 486)
  11447.  F8h    16h    00h    10/01/90    PS/2 Model 90-AKD (33 MHz 486)
  11448.  F8h    19h    05h      ???        PS/2 Model 35/35LS or 40 (20 MHz 386SX)
  11449.  F8h    1Bh    00h    10/02/89    PS/2 Model 70-486 (25 MHz 486)
  11450.  F8h    1Ch    00h    02/08/90    PS/2 Model 65-121 (16 MHz 386SX)
  11451.  F8h    1Eh    00h    02/08/90    PS/2 Model 55LS (16 MHz 386SX)
  11452.  F8h    23h    01h      ???        PS/2 Model L40 (20 MHz 386SX)
  11453.  F8h    25h    06h      ???        PS/2 Model M57 (20 MHz 386SLC)
  11454.  F8h    26h    01h      ???        PS/2 Model 57 (20 MHz 386SX)
  11455.  F8h    2Ah    00h      ???        PS/2 Model 95 (50 MHz 486)
  11456.  F8h    2Bh    00h      ???        PS/2 Model 90 (50 MHz 486)
  11457.  F8h    2Ch    01h      ???        PS/2 Model 95 (20 MHz 486SX)
  11458.  F8h    2Dh    00h      ???        PS/2 Model 90 (20 MHz 486SX)
  11459.  F8h    2Eh    01h      ???        PS/2 Model 95 (20 MHz 486SX + 487SX)
  11460.  F8h    2Fh    00h      ???        PS/2 Model 90 (20 MHz 486SX + 487SX)
  11461.  F8h    30h    00h      ???        PS/1 Model 2121 (16 MHz 386SX)
  11462.  F8h    50h    00h      ???        PS/2 Model P70 (8573) (16 MHz 386)
  11463.  F8h    50h    01h    12/16/89    PS/2 Model P70 (8570-031)
  11464.  F8h    52h    00h      ???        PS/2 Model P75 (33 MHz 486)
  11465.  F8h    61h    ***      ???        Olivetti P500
  11466.  F8h    62h    ***      ???        Olivetti P800
  11467.  F8h    80h    00h      ???        PS/2 Model 80 (25 MHz 386)
  11468.  F8h    80h    01h    11/21/89    PS/2 Model 80-A21
  11469.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX)
  11470.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX)
  11471.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX + 487SX)
  11472.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX + 487SX)
  11473.  E1h    ???    ???      ???        ??? (checked for by DOS4GW.EXE)
  11474.  9Ah    *    *      ???        Compaq XT/Compaq Plus
  11475.  30h    ???    ???      ???        Sperry PC
  11476.  2Dh    *    *      ???        Compaq PC/Compaq Deskpro
  11477.  ???    56h    ???      ???        Olivetti, unknown model
  11478.  ???    74h    ???      ???        Olivetti, unknown model
  11479.     * This BIOS call is not implemented in these early versions.
  11480.       Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.
  11481.    ** These BIOS versions require the DASDDRVR.SYS patches.
  11482.   *** These Olivetti and Epson machines store the submodel in the byte at
  11483.     F000h:FFFDh.
  11484.  
  11485. Values for Dell model byte:
  11486.  02h    Dell 200
  11487.  03h    Dell 300
  11488.  05h    Dell 220
  11489.  06h    Dell 310
  11490.  07h    Dell 325
  11491.  09h    Dell 310A
  11492.  0Ah    Dell 316
  11493.  0Bh    Dell 220E
  11494.  0Ch    Dell 210
  11495.  0Dh    Dell 316SX
  11496.  0Eh    Dell 316LT
  11497.  0Fh    Dell 320LX
  11498.  11h    Dell 425E
  11499. ----------15C1-------------------------------
  11500. INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
  11501.     AH = C1h
  11502. Return: CF set on error
  11503.     CF clear if successful
  11504.         ES = segment of data area
  11505. SeeAlso: AH=04h"ABIOS"
  11506. ----------15C200BH00-------------------------
  11507. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
  11508.     AX = C200h
  11509.     BH = 00h disable
  11510.          01h enable
  11511. Return: CF set on error
  11512.     AH = status
  11513.         00h successful
  11514.         01h invalid function
  11515.         02h invalid input
  11516.         03h interface error
  11517.         04h need to resend
  11518.         05h no device handler installed
  11519. ----------15C201-----------------------------
  11520. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
  11521.     AX = C201h
  11522. Return: CF set on error
  11523.         AH = status (see AX=C200h)
  11524.     CF clear if successful
  11525.         BH = device ID
  11526. SeeAlso: INT 33/AX=0000h
  11527. ----------15C202-----------------------------
  11528. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
  11529.     AX = C202h
  11530.     BH = sampling rate
  11531.         00h 10/second
  11532.         01h 20/second
  11533.         02h 40/second
  11534.         03h 60/second
  11535.         04h 80/second
  11536.         05h 100/second
  11537.         06h 200/second
  11538. Return: CF set on error
  11539.         AH = status (see AX=C200h)
  11540. SeeAlso: INT 33/AX=001Ch
  11541. ----------15C203-----------------------------
  11542. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
  11543.     AX = C203h
  11544.     BH = resolution
  11545.         00h one count per mm
  11546.         01h two counts per mm
  11547.         02h four counts per mm
  11548.         03h eight counts per mm
  11549. Return: CF set on error
  11550.         AH = status (see AX=C200h)
  11551. ----------15C204-----------------------------
  11552. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
  11553.     AX = C204h
  11554. Return: CF set on error
  11555.         AH = status (see AX=C200h)
  11556.     CF clear if successful
  11557.         BH = device ID
  11558. ----------15C205-----------------------------
  11559. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
  11560.     AX = C205h
  11561.     BH = data package size (1 - 8 bytes)
  11562. Return: CF set on error
  11563.         AH = status (see AX=C200h)
  11564. SeeAlso: AX=C201h
  11565. ----------15C206-----------------------------
  11566. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET/SET SCALING FACTOR
  11567.     AX = C206h
  11568.     BH = subfunction
  11569.         00h return device status
  11570.         Return: BL = status
  11571.                bit 0: right button pressed
  11572.                bit 1: reserved
  11573.                bit 2: left button pressed
  11574.                bit 3: reserved
  11575.                bit 4: 0 if 1:1 scaling, 1 if 2:1 scaling
  11576.                bit 5: device enabled
  11577.                bit 6: 0 if stream mode, 1 if remote mode
  11578.                bit 7: reserved
  11579.             CL = resolution (see AX=C203h)
  11580.             DL = sample rate, reports per second
  11581.         01h set scaling at 1:1
  11582.         02h set scaling at 2:1
  11583. Return: CF set on error
  11584.         AH = status (see AX=C200h)
  11585. ----------15C207-----------------------------
  11586. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
  11587.     AX = C207h
  11588.     ES:BX -> FAR user device handler
  11589. Return: CF set on error
  11590.         AH = status (see AX=C200h)
  11591. SeeAlso: INT 33/AX=000Ch
  11592. ----------15C3------------------------------
  11593. INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
  11594.     AH = C3h
  11595.     AL = 00h disable
  11596.          01h enable
  11597.         BX = timer counter
  11598. Return: CF set on error
  11599.     CF clear if successful
  11600. Note:    the watchdog timer generates an NMI
  11601. ----------15C4-------------------------------
  11602. INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
  11603.     AH = C4h
  11604.     AL = 00h return base POS register address
  11605.          01h enable slot
  11606.          BL = slot number
  11607.          02h enable adapter
  11608. Return: CF set on error
  11609.     DX = base POS register address (if function 00h)
  11610. SeeAlso: AH=C6h
  11611. ----------15C5-------------------------------
  11612. INT 15 UC - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
  11613.     AH = C5h
  11614.     AL = interrupt being invoked
  11615.         01h INT 19
  11616.         02h INT 14
  11617.         03h INT 16
  11618.         04h INT 40 (floppy INT 13)
  11619.         05h INT 17
  11620.         06h INT 10
  11621.         07h INT 12
  11622.         08h INT 11
  11623.         09h INT 1A
  11624. Return: all registers except AX must be preserved
  11625. Notes:    called as the very first action of the indicated ROM BIOS interrupt
  11626.       handlers on the PS/2 Models 30/286, 50Z, and 95
  11627.     default handler does nothing and returns CF clear for the above
  11628.       subfunctions, CF set and AH=86h for all other subfunctions
  11629.     value of AX passed to the original interrupt handler is pushed on
  11630.       stack immediately prior to call
  11631. ----------15C6-------------------------------
  11632. INT 15 U - later PS/2 models - GET POS DATA
  11633.     AH = C6h
  11634.     ???
  11635. Return: ???
  11636. Notes:    this function is referenced by name and number in some IBM BIOS manuals
  11637.     IBM reports that "there are a number of problems with this call" and
  11638.       does not recommend its use.
  11639. SeeAlso: AH=C4h
  11640. ----------15C7-------------------------------
  11641. INT 15 U - PS/2 Model 95 - ???
  11642.     AH = C7h
  11643.     ???
  11644. Return: ???
  11645. ----------15C8-------------------------------
  11646. INT 15 U - PS/2 Model 95 - ???
  11647.     AH = C8h
  11648.     ???
  11649. Return: ???
  11650. ----------15C9-------------------------------
  11651. INT 15 U - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
  11652.     AH = C9h
  11653.     AL = 10h (may be required on some non-PS BIOSes)
  11654. Return: AH = 00h
  11655.     CH = CPU type
  11656.         03h 80386DX or clone
  11657.         04h 80486
  11658.         23h 80386SX or clone
  11659.     CL = mask revision (stepping level)
  11660. Notes:    the BIOS must save DX at startup in order to be able to support this
  11661.       call; PS/2 Models 56, 57, 90, and 95 are known to support it
  11662.     the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)
  11663. ----------15CA-------------------------------
  11664. INT 15 U - PS/2 Model 95 - ???
  11665.     AH = CAh
  11666.     ???
  11667. Return: ???
  11668. ----------15CB-------------------------------
  11669. INT 15 U - PS/2 Model 95 - ???
  11670.     AH = CBh
  11671.     ???
  11672. Return: ???
  11673. ----------15CC-------------------------------
  11674. INT 15 U - PS/2 Model 95 - ???
  11675.     AH = CCh
  11676.     ???
  11677. Return: ???
  11678. ----------15CD-------------------------------
  11679. INT 15 U - PS/2 Model 95 - ???
  11680.     AH = CDh
  11681.     ???
  11682. Return: ???
  11683. ----------15CE-------------------------------
  11684. INT 15 U - PS/2 Model 95 - ???
  11685.     AH = CEh
  11686.     ???
  11687. Return: ???
  11688. ----------15CF-------------------------------
  11689. INT 15 U - PS/2 Model 95 - ???
  11690.     AH = CFh
  11691.     ???
  11692. Return: ???
  11693. ----------15D800-----------------------------
  11694. INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
  11695.     AX = D800h
  11696.     CL = slot number (including embedded and virtual)
  11697. Return: CF clear if successful
  11698.         AH = 00h
  11699.     CF set on error
  11700.         AH = error code
  11701.         80h invalid slot number
  11702.         82h EISA CMOS corrupt
  11703.         83h empty slot
  11704.         86h invalid BIOS-FW function call
  11705.         87h invalid system configuration
  11706.     AL bit flags
  11707.         bit 7: set if duplicate IDs
  11708.         6: set if product ID readable
  11709.           4,5: slot type (00=expansion, 01=embedded, 10=virtual device)
  11710.           0-3: duplicate ID number if bit 7 set
  11711.     BH = major revision level of configuration utility
  11712.     BL = minor revision level of configuration utility
  11713.     CX = checksum of configuration file
  11714.     DH = number of device functions
  11715.     DL = combined function information byte
  11716.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  11717. Note:    call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
  11718. SeeAlso: AX=D801h,AX=D804h
  11719. ----------15D801-----------------------------
  11720. INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
  11721.     AX = D801h
  11722.     CH = function number to read
  11723.     CL = slot number (including embedded and virtual)
  11724.     DS:SI -> 320-byte buffer for standard configuration data block
  11725. Return: CF clear if successful
  11726.         AH = 00h
  11727.         DS:SI buffer filled
  11728.     CF set on error
  11729.         AH = error code
  11730.         80h invalid slot number
  11731.         81h invalid function number
  11732.         82h EISA CMOS corrupt
  11733.         83h empty slot
  11734.         86h invalid BIOS-FW function call
  11735.         87h invalid system configuration
  11736.     BX destroyed
  11737. Note:    call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
  11738. ----------15D802-----------------------------
  11739. INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
  11740.     AX = D802h
  11741.     BH = EISA config utility major revision level
  11742.     BL = EISA config utility minor revision level
  11743. Return: CF clear if successful
  11744.         AH = 00h
  11745.     CF set on error
  11746.         AH = error code
  11747.         84h error clearing CMOS
  11748.         86h invalid BIOS-FW function call
  11749.         88h config utility version not supported
  11750. Note:    call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
  11751. SeeAlso: AX=D803h
  11752. ----------15D803-----------------------------
  11753. INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
  11754.     AX = D803h
  11755.     CX = length of data structure (0000h = empty slot)
  11756.         includes two bytes for config file checksum
  11757.     DS:SI -> configuration data
  11758. Return: CF clear if successful
  11759.         AH = 00h
  11760.     CF set on error
  11761.         AH = error code
  11762.         84h error clearing CMOS
  11763.         85h EISA CMOS is full
  11764.         86h invalid BIOS-FW function call
  11765. Note:    call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
  11766. SeeAlso: AX=D802h
  11767. ----------15D804-----------------------------
  11768. INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
  11769.     AX = D804h
  11770.     CL = slot number (including embedded and virtual)
  11771. Return: CF clear if successful
  11772.         AH = 00h
  11773.     CF set on error
  11774.         AH = error code
  11775.         80h invalid slot number
  11776.         83h empty slot
  11777.         86h invalid BIOS-FW function call
  11778.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  11779. Note:    call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
  11780. SeeAlso: AX=D800h
  11781. ----------15D8-------------------------------
  11782. INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
  11783.     AH = D8h
  11784.     AL = 80h to 84h
  11785.     other registers as appropriate for AL=00h to 04h
  11786. Return: as appropriate for AL=00h to 04h
  11787. Note:    these functions are identical to AX=D800h to D804h, except that they
  11788.       should be called when using 32-bit CS addressing mode (pointers use
  11789.       ESI rather than SI as offset) instead of 16-bit addressing mode
  11790. SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
  11791. ----------15DE00-----------------------------
  11792. INT 15 - DESQview - GET PROGRAM NAME
  11793.     AX = DE00h
  11794. Return: AX = offset into DESQVIEW.DVO of program most recently selected from
  11795.         the "Switch Windows" menu (see below)
  11796. Note:    always returns AX=0000h under DESQview/X
  11797. SeeAlso: AX=DE07h
  11798.  
  11799. Format of program entry in DESQVIEW.DVO:
  11800. Offset    Size    Description
  11801.  00h    BYTE    length of name (FFh if end of file)
  11802.  01h  N BYTEs    name
  11803.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  11804.     BYTE    program type
  11805.         00h normal program
  11806.         04h divider
  11807.         80h Delete a Program
  11808.         81h Change a Program
  11809.     WORD    ??? apparently always 0000h
  11810. ----------15DE01-----------------------------
  11811. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  11812.     AX = DE01h
  11813. Return: nothing
  11814. Notes:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  11815.     NOP for DESQview/X
  11816. ----------15DE02-----------------------------
  11817. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  11818.     AX = DE02h
  11819. Return: nothing
  11820. Note:    this call is a NOP in DV 2.x
  11821. SeeAlso: AX=DE03h
  11822. ----------15DE03-----------------------------
  11823. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  11824.     AX = DE03h
  11825. Return: AX = ??? for current window
  11826.     BX = ??? for current window
  11827. Note:    this call is a NOP in DV 2.x
  11828. SeeAlso: AX=DE02h
  11829. ----------15DE04-----------------------------
  11830. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  11831.     AX = DE04h
  11832. Return: BX = bytes of common memory available
  11833.     CX = largest block available
  11834.     DX = total common memory in bytes
  11835. SeeAlso: AX=DE05h,AX=DE06h
  11836. ----------15DE05-----------------------------
  11837. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  11838.     AX = DE05h
  11839. Return: BX = K of memory available
  11840.     CX = largest block available
  11841.     DX = total conventional memory in K
  11842. SeeAlso: AX=DE04h,AX=DE06h
  11843. ----------15DE06-----------------------------
  11844. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  11845.     AX = DE06h
  11846. Return: BX = K of expanded memory available
  11847.     CX = largest block available
  11848.     DX = total expanded memory in K
  11849. SeeAlso: AX=DE04h,AX=DE05h
  11850. ----------15DE07-----------------------------
  11851. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  11852.     AX = DE07h
  11853. Return: AX = number of program as it appears on the "Switch Windows" menu
  11854. Note:    this API call may be made from a hardware interrupt handler
  11855. SeeAlso: AX=DE00h
  11856. ----------15DE08-----------------------------
  11857. INT 15 - DESQview - GET ???
  11858.     AX = DE08h
  11859. Return: AX = 0000h if ??? is not set to the current task
  11860.          0001h if ??? is set to the current task
  11861. ----------15DE09-----------------------------
  11862. INT 15 - DESQview - UNIMPLEMENTED
  11863.     AX = DE09h
  11864. Return: nothing (NOP in DV 1.x and 2.x)
  11865. ----------15DE0A-----------------------------
  11866. INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  11867.     AX = DE0Ah
  11868.     BL = character
  11869. Return: character displayed, next call will display in next position (which
  11870.     wraps back to the start of the line if off the right edge of screen)
  11871. Notes:    displays character on bottom line of *physical* screen, regardless
  11872.       of current size of window (even entirely hidden)
  11873.     does not know about graphics display modes, just pokes the characters
  11874.       into display memory
  11875.     this API call may be made from a hardware interrupt handler
  11876. SeeAlso: AX=1003h
  11877. ----------15DE0B-----------------------------
  11878. INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  11879.     AX = DE0Bh
  11880.     BL = API level minor version number
  11881.     BH = API level major version number
  11882. Return: AX = maximum API level (AH = major, AL = minor)
  11883. Notes:    if the requested API level is greater than the version of DESQview, a
  11884.       "You need a newer version" error window is popped up
  11885.     the API level defaults to 1.00, and is inherited by child tasks
  11886. ----------15DE0C-----------------------------
  11887. INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  11888.     AX = DE0Ch
  11889.     BX = number of bytes
  11890. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  11891. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  11892.       system memory
  11893. SeeAlso: AX=1001h,AX=102Eh,AX=DE0Dh,AX=DE15h,AX=DE19h
  11894. ----------15DE0D-----------------------------
  11895. INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  11896.     AX = DE0Dh
  11897.     ES:DI -> previously allocated block
  11898. Return: nothing
  11899. SeeAlso: AX=1002h,AX=DE0Ch
  11900. ----------15DE0E-----------------------------
  11901. INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
  11902.     AX = DE0Eh
  11903.     ES:DI -> name to find
  11904.     CX = length of name
  11905. Return: BX = 0000h not found
  11906.          0001h found
  11907.         DS:SI = object handle
  11908. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1200h"GETNAME"
  11909.  
  11910. Special mailbox names:
  11911.  "COM1" ... "COM4"    RBcomm using COM1 ... COM4
  11912.  "DESQview/X Help Engine"
  11913.  "DESQview/X Network Server"  Network Manager
  11914.  "DESQview X Server0"    X-Windows server
  11915.  "DESQview X Server7"    X-Windows printing service
  11916.  "INBOX"        DESQview/X LPD requests
  11917.  "OUTBOX"        DESQview/X LPD responses
  11918.  "WAITBOX"        semaphore to synchronize DESQview/X LPD communications
  11919. ----------15DE0F-----------------------------
  11920. INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
  11921.     AX = DE0Fh
  11922. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  11923. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  11924.     enables an additional mouse mode
  11925. ----------15DE10-----------------------------
  11926. INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  11927.     AX = DE10h
  11928.     BH = scan code
  11929.     BL = character
  11930. Return: nothing
  11931. Notes:    a later read will get the keystroke as if it had been typed by the user
  11932.     multiple pushes are read last-in first-out
  11933.     if a script exists for the pushed key in the current application, the
  11934.       script will be executed
  11935.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  11936. SeeAlso: INT 16/AH=05h
  11937. ----------15DE11BL00-------------------------
  11938. INT 15 - DESQview v2.00+ - "JUSTIFY" - EN/DISABLE AUTOM. WINDOW JUSTIFICATION
  11939.     AX = DE11h
  11940.     BL = 00h      viewport will not move automatically
  11941.          nonzero  viewport will move to keep cursor visible (default)
  11942. Return: nothing
  11943. ----------15DE12BX0000-----------------------
  11944. INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  11945.     AX = DE12h
  11946.     BX = 0000h    select normal style (linefeed only moves down)
  11947.          nonzero  select C style (linefeed moves to start of next line)
  11948. Return: nothing
  11949. Note:    set on a per-task basis, and inherited from the parent task
  11950. ----------15DE13-----------------------------
  11951. INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  11952.     AX = DE13h
  11953. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  11954.          without matching ENDC (see INT 15/AX=101Ch)
  11955. Note:    this API call may be made from within a hardware interrupt handler
  11956. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  11957. ----------15DE14-----------------------------
  11958. INT 15 - DESQview v2.20+ - GET OBJECT TYPE
  11959.     AX = DE14h
  11960.     ES:DI -> object
  11961. Return: BL = 00h not an object
  11962.          08h window or task
  11963.          09h mailbox
  11964.          0Ah keyboard
  11965.          0Bh timer
  11966.          0Ch objectq
  11967.          0Fh pointer
  11968.          10h panel
  11969. SeeAlso: AX=1016h
  11970. ----------15DE15-----------------------------
  11971. INT 15 - DESQview v2.20+ - SET ERROR HANDLING
  11972.     AX = DE15h
  11973.     BL = error handling mode
  11974.         00h post system error on all error conditions
  11975.         01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  11976.         messages sent to mailboxes which fail due to lack of system
  11977.         or common memory
  11978.         02h (v2.26+) same as 01h, but also return null pointer for GETMEM
  11979.         calls which fail due to lack of system memory
  11980. Return: nothing
  11981. SeeAlso: AX=DE0Ch,AX=DE16h
  11982. ----------15DE16-----------------------------
  11983. INT 15 - DESQview v2.20+ - GET ERROR HANDLING
  11984.     AX = DE16h
  11985. Return: BL = current mode
  11986.         00h always post system error
  11987.         01h return carry flag set on failed mailbox writes
  11988.         02h return CF set on failed mailbox writes and NULL on failed
  11989.         GETMEM calls
  11990. SeeAlso: AX=DE15h
  11991. ----------15DE17-----------------------------
  11992. INT 15 - DESQview v2.20-2.25 - reserved
  11993.     AX = DE17h
  11994. Return: pops up "Programming error" window
  11995. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  11996. SeeAlso: AX=1117h
  11997. ----------15DE17-----------------------------
  11998. INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  11999.     AX = DE17h
  12000.     BX = function
  12001.         0000h   get current mapping context without setting
  12002.         nonzero set new mapping context to BX
  12003. Return: BX = mapping context in effect before call
  12004. Notes:    mapping contexts determine conventional-memory addressability; setting
  12005.       a mapping context ensures that the associated program and data areas
  12006.       are in memory for access.  Usable by drivers, TSRs and shared
  12007.       programs.
  12008.     caller need not be running under DESQview
  12009.     this API call may be made from a hardware interrupt handler
  12010. SeeAlso: AX=1117h,AX=DE21h,INT 2F/AX=1685h
  12011. ----------15DE18-----------------------------
  12012. INT 15 - DESQview v2.20+ - internal - ???
  12013.     AX = DE18h
  12014.     BP = function number
  12015.         high byte must be 10h
  12016.         low byte is function
  12017.         00h set ???
  12018.             BL = ???  (00h-10h, video mode???)
  12019.             BH = value to store
  12020.         03h set ???
  12021.             BL = ??? (stored in driver)
  12022.         0Ah get ???
  12023.             ES:DI -> 18-byte buffer to hold ???
  12024. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  12025. ----------15DE19-----------------------------
  12026. INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  12027.     AX = DE19h
  12028.     BX = number of bytes to allocate
  12029. Return: AX = 0000h successful
  12030.         ES:DI -> allocated block
  12031.          nonzero insufficient memory
  12032. Note:    this API call may be made from within a hardware interrupt handler
  12033. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  12034. ----------15DE1A-----------------------------
  12035. INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  12036.     AX = DE1Ah
  12037.     DS:SI -> previously allocated block
  12038. Note:    this function may be called from within a hardware interrupt handler
  12039. SeeAlso: AX=DE0Dh,AX=DE19h
  12040. ----------15DE1B-----------------------------
  12041. INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  12042.     AX = DE1Bh
  12043. Return: nothing
  12044. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  12045. ----------15DE1C-----------------------------
  12046. INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  12047.     AX = DE1Ch
  12048. Return: nothing
  12049. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  12050.       that DOS is free
  12051.     the official documentation states that this call should be paired with
  12052.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  12053.     this API call may be made from within a hardware interrupt handler
  12054. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  12055. ----------15DE1D-----------------------------
  12056. INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  12057.     AX = DE1Dh
  12058.     DX = segment of handle for task to receive keystroke
  12059.     BL = character
  12060.     BH = scan code
  12061. Return: AX = 0000h if successful
  12062.        nonzero if receiver's keyboard buffer was full
  12063. Notes:    the key is treated as though the user had pressed it, ignoring any
  12064.       script which may be bound to the key, and using the current field
  12065.       table if the keyboard object is in field processing mode
  12066.     multiple PUTKEYs are seen in the order in which they are executed
  12067. SeeAlso: AX=DE10h
  12068. ----------15DE1E-----------------------------
  12069. INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  12070.     AX = DE1Eh
  12071. Return:    CL = actual number of rows on screen
  12072.     CH = actual number of columns on screen
  12073.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  12074. Note:    this API call may be made from a hardware interrupt handler
  12075. SeeAlso: INT 10/AH=0Fh
  12076. ----------15DE1F-----------------------------
  12077. INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  12078.     AX = DE1Fh
  12079. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  12080. Note:    this API call may be made from within a hardware interrupt handler
  12081. SeeAlso: AX=DE13h,INT 21/AH=34h
  12082. ----------15DE20-----------------------------
  12083. INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  12084.     AX = DE20h
  12085.     BX = segment of handle of task to interupt
  12086.     DX:CX -> FAR interrupt routine
  12087.     BP,SI,DI,DS,ES as required by interrupt routine
  12088. Return: nothing
  12089. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  12090.       making the DISPATCHINT call
  12091.     multiple "DISPATCHINT" calls are processed in the order in which they
  12092.       were executed
  12093.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  12094.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  12095.       needs to be preserved
  12096.     this API call may be made from within a hardware interrupt handler
  12097. SeeAlso: AX=1021h,AX=DE2Ah
  12098. ----------15DE21-----------------------------
  12099. INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  12100.     AX = DE21h
  12101.     BX = new state
  12102.         0000h turn off
  12103.         nonzero turn on
  12104. Return: BX = old state of virtualization
  12105. Notes:    this API call may be made from within a hardware interrupt handler
  12106.     under DV 2.40 and 2.42, this call appears to have no effect and always
  12107.       returns a nonzero value in BX which appears to be the offset within
  12108.       the DV common memory segment of the caller's task object; it may
  12109.       only have an effect within a hardware interrupt handler
  12110. SeeAlso: AX=1117h,AX=DE17h
  12111. ----------15DE22-----------------------------
  12112. INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  12113.     AX = DE22h
  12114.     DX = segment of task handle
  12115. Return: DX = total amount of memory in paragraphs
  12116.     BX = amount of system memory in paragraphs
  12117.     CX = largest block of system memory available in paragraphs
  12118.     AX = flags
  12119.         bit 0: system memory resides in shared memory
  12120.         1: process's memory is swapped out
  12121.         2: process's system memory is swapped out
  12122. Notes:    if the task handle is a child task, the returned values will be for the
  12123.       process containing the task, rather than the task itself
  12124.     if the process's system memory is swapped out, BX,CX,DX remain
  12125.       unchanged, because the memory usage cannot be determined
  12126. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  12127. ----------15DE23-----------------------------
  12128. INT 15 U - DESQview v2.31+ - ???
  12129.     AX = DE23h
  12130.     BX = ??? IRQ number on first PIC?
  12131.     CX = ??? IRQ number on second PIC?
  12132. Return: ???
  12133. Note:    called by QEMM 6.00+
  12134. ----------15DE24-----------------------------
  12135. INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
  12136.     AX = DE24h
  12137.     BX = length of .DVP data
  12138.     CX = length of ??? string
  12139.     DS:SI -> ??? string
  12140.     ES:DI -> .DVP data (see AX=102Ch)
  12141. Return: BX = segment of task handle??? or 0000h on error
  12142. Note:    this call is similar to AX=102Ch except that it can interpret the
  12143.       extended DVP data
  12144. SeeAlso: AX=102Ch
  12145. ----------15DE25-----------------------------
  12146. INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
  12147.     AX = DE25h
  12148.     ES:DI -> 67-byte buffer for ASCIZ directory name
  12149. Return: ES:DI buffer filled with directory from which DESQview was started
  12150. BUG:    DV 2.42 does not place a terminating NUL at the end of the directory
  12151.       name, so if the buffer is not cleared to zeros before the call,
  12152.       there is no way to tell where the directory name ends.  This bug
  12153.       has been fixed in DV 2.52 (DV/X 1.02)
  12154. SeeAlso: AX=DE2Eh,INT 21/AH=47h
  12155. ----------15DE26-----------------------------
  12156. INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
  12157.     AX = DE26h
  12158. Return: BX = segment of handle for task with keyboard focus
  12159. Note:    under DESQview/X, the X server always has the keyboard focus unless a
  12160.       "direct" window is active
  12161. SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
  12162. ----------15DE27-----------------------------
  12163. INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
  12164.     AX = DE27h
  12165.     BX = type
  12166.         0000h process
  12167.         0001h task
  12168.     ES:DI -> list of Instance Item Structures (see below)
  12169. Return: CF clear if successful
  12170.         AX = ???
  12171.         BX = ???
  12172.     CF set on error
  12173.         AX = ???
  12174. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12175. SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h
  12176.  
  12177. Format of Instance Item Structure [one element of list]:
  12178. Offset    Size    Description
  12179.  00h    WORD    length of data area DESQview should save and restore on context
  12180.         switches (0000h = end of list)
  12181.  02h    DWORD    pointer to area to be saved/restored
  12182. ----------15DE28-----------------------------
  12183. INT 15 U - DESQview v2.50+ - ???
  12184.     AX = DE28h
  12185.     BX = segment of ??? or 0000h for default
  12186.     ???
  12187. Return: ???
  12188. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12189. SeeAlso: AX=DE2Ah
  12190. ----------15DE29BX0000-----------------------
  12191. INT 15 U - DESQview v2.50+ - ???
  12192.     AX = DE29h
  12193.     BX = 0000h
  12194.     ???
  12195. Return: CF clear if successful
  12196.         ???
  12197.     CF set on error
  12198. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12199. ----------15DE29BX0001-----------------------
  12200. INT 15 U - DESQview v2.50+ - ???
  12201.     AX = DE29h
  12202.     BX = 0001h
  12203.     DX = segment of window handle
  12204. Return: CF clear if successful
  12205.         AX = ???
  12206.         DX = ???
  12207.     CF set on error
  12208. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12209. ----------15DE29BX0002-----------------------
  12210. INT 15 U - DESQview v2.50+ - ???
  12211.     AX = DE29h
  12212.     BX = 0002h
  12213.     DX = segment of window handle
  12214. Return: CF clear if successful
  12215.         AX = ???
  12216.         DX = ???
  12217.     CF set on error
  12218. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12219. ----------15DE29BX0003-----------------------
  12220. INT 15 U - DESQview v2.50+ - ???
  12221.     AX = DE29h
  12222.     BX = 0003h
  12223.     DX = segment of window handle
  12224. Return: CF clear if successful
  12225.         ???
  12226.     CF set on error
  12227. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12228. ----------15DE29BX0004-----------------------
  12229. INT 15 U - DESQview v2.50+ - GET DISPLAY NAME
  12230.     AX = DE29h
  12231.     BX = 0004h
  12232.     CX = size of buffer in bytes
  12233.     DX = segment of window handle
  12234.     ES:DI -> buffer for display name
  12235. Return: CF clear if successful
  12236.         buffer filled with ASCIZ display name (truncated if necessary) or
  12237.           null string if no display
  12238.     CF set on error
  12239. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12240.     the name ":0" refers to the local display
  12241. ----------15DE29BX0005-----------------------
  12242. INT 15 U - DESQview v2.50+ - ???
  12243.     AX = DE29h
  12244.     BX = 0005h
  12245.     ???
  12246. Return: CF clear if successful
  12247.         ???
  12248.     CF set on error
  12249. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12250. ----------15DE2A-----------------------------
  12251. INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
  12252.     AX = DE2Ah
  12253.     BX = segment of handle for task to interrupt or 0000h for caller
  12254.     DX:CX -> interrupt routine
  12255.     BP,SI,DI,DS,ES as required by interrupt routine
  12256. Return: nothing
  12257. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12258.     this call is the same as AX=DE20h except that it will delay
  12259.       interrupting the specified task until after it has exited DOS
  12260. SeeAlso: AX=1021h,AX=DE20h
  12261. ----------15DE2B-----------------------------
  12262. INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
  12263.     AX = DE2Bh
  12264.     ES:DI -> starting object
  12265.         0000h:0000h for first object in list???
  12266. Return: AX = status
  12267.         0000h successful
  12268.         ES:DI -> next object of same type (window/non-window)
  12269.         0001h failed (ES:DI was not a valid handle)
  12270. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12271.     there are two separate lists, one for window/task objects and one
  12272.       for all other objects
  12273. SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
  12274. ----------15DE2CDX0100-----------------------
  12275. INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
  12276.     AX = DE2Ch
  12277.     DX = window information format version (0100h for DESQview 2.5x)
  12278.     BX = segment of window handle or 0000h for default
  12279.     ES:DI -> buffer for window information (see below)
  12280. Return: AX = status
  12281.         0000h successful
  12282. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12283. SeeAlso: AX=1000h,AX=1016h,AX=DE01h,AX=DE2Bh
  12284.  
  12285. Format of window information:
  12286. Offset    Size    Description
  12287.  00h    BYTE    task flag: 00h window, 01h task
  12288.  01h    BYTE    process number if owner task
  12289.         00h if non-owner task
  12290.  02h    WORD    segment of owner's handle, 0000h if orphaned
  12291.  04h    WORD    mapping context
  12292.  06h    BYTE    task status (see below)
  12293.  07h    BYTE    unused
  12294.  08h    WORD    status bits
  12295.         bit 0: DESQview process
  12296.         bit 1: process swapped out
  12297.         bit 2: process is resized direct window (suspended)
  12298.         bit 3: process suspended itself
  12299.         bit 4: user suspended process
  12300.         bit 5: process is being created
  12301.         bit 6: task is freeing another task
  12302.  0Ah    BYTE    01h if foreground-only window
  12303.  
  12304. Values for task status:
  12305.  00h "Waiting" waiting for input
  12306.  01h "Idle" keyboard poll limit reached
  12307.  03h same as 01h
  12308.  04h "Pausing" INT 15/AX=1000h pause called
  12309.  04h DV/X direct: user did something to allow task switch
  12310.  05h "ModeChg" video mode about to be changed
  12311.  06h "ModeNtf" notify that video mode changed
  12312.  07h "MoniCh" requested change to other monitor
  12313.  08h "StartPgm" control relinquished to start new process
  12314.  09h "MgrCan" made window manager CANCEL command
  12315.  0Ah "Slicing" time slice expired
  12316.  0Bh "Exit DOS" notify on DOS calls
  12317.  0Ch "Enter DOS" process is re-entering DOS
  12318.  0Dh "Terminate" INT 21/AH=4Ch or task freed
  12319.  0Eh "BrkNxt" Control-Break pressed
  12320.  0Fh "MgrCol" keyboard focus taken away
  12321.  10h "PgmInt" interrupted by API call from another task
  12322.  11h "BldOpen" call to INT 15/AX=DE01h
  12323. ----------15DE2D-----------------------------
  12324. INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
  12325.     AX = DE2Dh
  12326.     CX = direction
  12327.         FFFFh set socket handler
  12328.         DX:BX -> FAR function for socket interface
  12329.             must be of the format described under INT 63"DESQview"
  12330.         other get socket handler
  12331.         Return: DX:BX -> socket handler
  12332. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12333.     the "set" subfunction is normally called only by SOCKET.DVR
  12334. SeeAlso: AX=DE2Eh,INT 63"DESQview"
  12335. ----------15DE2E-----------------------------
  12336. INT 15 U - DESQview v2.50+ - SOCKET API
  12337.     AX = DE2Eh
  12338.     DX:BX -> socket record or 0000h:0000h to create a new socket record
  12339. Return: CX = size of socket record in bytes
  12340.     DX:BX -> socket record which was used
  12341. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12342.     socket records are allocated from common memory
  12343.     for Unix compatibility, each socket and connection on a socket is
  12344.       allocated a DOS file handle (referencing an SFT for NUL) which is
  12345.       used on various calls to specify which of possibly multiple
  12346.       connections is to be operated upon
  12347. SeeAlso: AX=DE2Dh,INT 63"DESQview"
  12348.  
  12349. Format of socket record:
  12350. Offset    Size    Description
  12351.  00h    WORD    signature F0ADh
  12352.  02h    WORD    function number
  12353.         0000h initialize socket???
  12354.         0001h "gethostname"
  12355.         0002h "ioctl" check for input
  12356.         0003h "sleep" delay for specified period
  12357.         0004h "htons" convert word to network (big-endian) byte order
  12358.         0005h "select"
  12359.         0006h "bsd_close"/"so_close" close socket
  12360.         0007h NOP
  12361.         0008h "connect" initiate connection on socket
  12362.         0009h "recv"/"recvfrom" read from socket
  12363.         000Ah "socket"
  12364.         000Bh ???
  12365.         000Ch "gethostbyname"
  12366.         000Dh "send"/"sendto" write to socket
  12367.         000Eh ??? (does something to all connections for process)
  12368.         000Fh "getpid" get process identifier
  12369.         0010h "gettimeofday"
  12370.         0011h "bind" assign name to socket
  12371.         0012h "listen" listen for connections on socket
  12372.         0013h "accept" accept connection on socket
  12373.         0014h connect to X server
  12374.         0015h "gethostbyaddr" get host information for an address
  12375.         0016h "getprotobyname"
  12376.         0017h "getprotobynumber"
  12377.         0018h "getservbyname"
  12378.         0019h "getservbyport"
  12379.         001Ah "getsockname" determine name bound to socket
  12380.         001Bh "getpeername" get name of connected peer
  12381.         001Ch "getsockopt"/"setsockopt"
  12382.         001Dh "so_exit"     close all sockets for calling process
  12383.         001Eh "issock" determine whether file handle references socket
  12384.         001Fh "so_attach" reattach previously detached socket
  12385.         0020h "so_detach" temporarily detach socket
  12386.         0021h get DESQview directory
  12387.         0022h "NewProc" start new application (see AX=102Ch)
  12388.         0023h "so_linkup"
  12389.         0024h canonicalize filename
  12390.         0025h indirect INT 15h call
  12391.         0026h Network Manager interface
  12392.         0027h "so_unlink"    close connection from "so_linkup"
  12393.         0028h "raisepriority"
  12394.         0029h "lowerpriority"
  12395.         002Ah ???
  12396.         FFFFh "NetExit" (appears to be a NOP)
  12397.  04h    WORD    returned error code (see below)
  12398.  06h    WORD    maximum message size??? (usually 0400h)
  12399.  08h    WORD    PSP segment to use or 0000h if socket not valid
  12400.  0Ah    WORD    scratch space (JFT size)
  12401.  0Ch    DWORD    scratch space (JFT address)
  12402.  10h    DWORD    mailbox handle (initialized by function 0000h)
  12403.  14h    DWORD    timer object handle (initialized by function 0000h)
  12404. ---function 0000h---
  12405.  18h    WORD    (return) ???
  12406. ---function 0001h---
  12407.  18h    WORD    (return) status???
  12408.  1Ah 128 BYTEs    (return) ASCIZ hostname (empty string if not on network)
  12409.  9Ah    WORD    maximum length of hostname to return
  12410. ---function 0002h---
  12411.  18h    WORD    (return) status
  12412.  1Ah    WORD    socket's file handle
  12413.  1Ch    WORD    IOCTL function
  12414.         05h "FIONREAD" determine available input
  12415.         06h "FIONBIO" set blocking state of socket
  12416.  1Eh    WORD    (return, subfn 05h) number of bytes available for reading
  12417.         (call, subfn 06h) 0000h blocking, nonzero nonblocking
  12418. ---function 0003h---
  12419.  18h  2 BYTEs    unused
  12420.  1Ah    WORD    delay time in seconds
  12421. ---function 0004h---
  12422.  18h    WORD    (return) result in network (big-endian) byte order
  12423.  1Ah    WORD    value to convert to network byte order
  12424. ---function 0005h---
  12425.  18h    WORD    (return) number of handles meeting the specified conditions???
  12426.  1Ah    WORD    number of file handles in each bitset???
  12427.  1Ch    DWORD    bitset of socket handles to check for readability???
  12428.  20h    DWORD    bitset of socket handles to check for writability???
  12429.  24h    DWORD    bitset of socket handles to check for errors???
  12430.  28h    WORD    timeout in ??? or 0000h to block until some socket ready
  12431.  2Ah    DWORD    ???
  12432.  2Eh    DWORD    ???
  12433. ---function 0006h---
  12434.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12435.  1Ah    WORD    socket's file handle
  12436. ---function 0008h---
  12437.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12438.  1Ah    WORD    socket's file handle
  12439.  1Ch    WORD    0001h if socket name specified, 0000h if not
  12440.  1Eh    WORD    length of socket name
  12441.  20h  N BYTEs    name of socket to which to connect
  12442. ---function 0009h---
  12443.  18h    WORD    (return) number of bytes actually read, 0000h if connection
  12444.             closed, or FFFFh on error
  12445.  1Ah    WORD    socket's file handle
  12446.  1Ch    WORD    number of bytes to read
  12447.  1Eh    WORD    flags
  12448.  20h    WORD    0000h if no source address desired
  12449.         0001h if source address is to be stored (datagram sockets)
  12450.  22h    WORD    length of source address
  12451.  24h 110 BYTEs    source address
  12452.  92h 1K BYTEs    buffer for data to be read
  12453. ---function 000Ah---
  12454.  18h    WORD    (return) socket's file handle or FFFFh on error
  12455.  1Ah    WORD    address family (0001h,0002h)
  12456.  1Ch    WORD    socket type
  12457.  1Eh    WORD    protocol
  12458. ---function 000Bh---
  12459.  18h    WORD    (return) 0001h if ??? or FFFFh on error
  12460.  1Ah    WORD    socket's file handle
  12461.  1Eh    WORD    (call) ???
  12462. ---function 000Ch---
  12463.  18h 128 BYTEs    buffer containing ASCIZ hostname
  12464.         special case if empty string or "unix"
  12465.  98h    ???    'struct hostent' ???
  12466.  A2h    ???    (return) ???
  12467. ---function 000Dh---
  12468.  18h    WORD    (return) number of bytes actually written or FFFFh on error
  12469.  1Ah    WORD    socket's file handle
  12470.  1Ch    WORD    number of bytes to write
  12471.  1Eh    WORD    number of bytes to follow in subsequent writes???
  12472.  20h    WORD    flags
  12473.  22h    WORD    0000h if no destination specified, 0001h if destination present
  12474.  24h    WORD    ???
  12475.  26h    WORD    length of destination address
  12476.  28h 110 BYTEs    destination address
  12477.  96h 1K BYTEs    buffer containing data to be written
  12478. ---function 000Eh---
  12479.  no additional fields
  12480. ---function 000Fh---
  12481.  18h    DWORD    (return) DESQview task handle of calling process
  12482. ---function 0010h---
  12483.  18h    DWORD    (return) current time
  12484.  1Ch    DWORD    (return) ???
  12485. ---function 0011h---
  12486.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12487.  1Ah    WORD    socket's file handle
  12488.  1Ch    WORD    length of name
  12489.  1Eh  N BYTEs    buffer for socket name
  12490. ---function 0012h---
  12491.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12492.  1Ah    WORD    socket's file handle
  12493.  1Ch    WORD    maximum backlog of pending connections allowed on socket
  12494. ---function 0013h---
  12495.  18h    WORD    (return) file handle for new connection or FFFFh on error
  12496.  1Ah    WORD    listen()ing socket's file handle
  12497.  1Ch    WORD    (call) length of buffer for connecting entity's address
  12498.         (return) actual length of address
  12499.  1Eh  N BYTEs    buffer for connecting entity's address
  12500. ---function 0014h---
  12501.  18h    WORD    (return) socket's file handle or FFFFh on error
  12502.  1Ah  4 BYTEs    (return) ???
  12503.  1Eh    WORD    (return) ???
  12504.  20h    WORD    (return) ???
  12505.  22h 256 BYTEs    ASCIZ X display name
  12506. 122h    ???
  12507. ---function 0015h---
  12508.  18h    WORD    (call) type of address??? (test for 0001h seen)
  12509.  1Ah    WORD    (call) length of buffer for host address
  12510.  1Ch 110 BYTEs    buffer containing host address
  12511.  8Ah    WORD    (return) offset of official host name???
  12512.  8Ch    WORD    (return) offset of alias list???
  12513.  8Eh    WORD    (return) address type???
  12514.  90h    WORD    (return) length of an address in bytes???
  12515.  92h    WORD    (return) offset of address???
  12516.  9Ah  N BYTEs    (return) ??? buffer for hostname, alias list, and host address
  12517. ---function 0016h---
  12518.  18h    ???    buffer for protocol name???
  12519.  98h    ???
  12520. ---function 0017h---
  12521.  18h    WORD    (call) protocol number???
  12522.  1Ah    WORD    (return) ??? or 0001h
  12523. ---function 0018h---
  12524.  18h 128 BYTEs    buffer containing ???
  12525.  98h 128 BYTEs    buffer containing ???
  12526. 118h    WORD    (return) ???
  12527. ---function 0019h---
  12528.  18h    WORD    length of name???
  12529.  1Ah 128 BYTEs    buffer for name???
  12530.  9Ah    WORD    (return) ???
  12531. ---function 001Ah---
  12532.  18h    WORD    (return) 0000h if successful, FFFFh on error
  12533.  1Ah    WORD    socket's file handle
  12534.  1Ch    WORD    (call) length of buffer for socket name
  12535.         (return) actual length of socket name
  12536.  1Eh  N BYTEs    buffer for socket name
  12537. ---function 001Bh---
  12538.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12539.  1Ah    WORD    socket's file handle
  12540.  1Ch    WORD    (call) size of buffer for name
  12541.         (return) actual size of name
  12542.  1Eh  N BYTEs    buffer for peer's name
  12543. ---function 001Ch---
  12544.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12545.  1Ah    WORD    direction: 0000h to get, 0001h to set
  12546.  1Ch    WORD    socket's file handle
  12547.  1Eh    WORD    option level
  12548.  20h    WORD    option name
  12549.  22h    WORD    (call) length of buffer for option value
  12550.         (return) actual length of option value
  12551.  24h  N BYTEs    buffer for option value
  12552. ---function 001Dh---
  12553.  no additional fields
  12554. ---function 001Eh---
  12555.  18h    WORD    (return) status: 0000h ??? or 0001h ???
  12556.  1Ah    WORD    file handle which may or may not be a socket
  12557. ---function 001Fh---
  12558.  18h    WORD    (return) file handle or FFFFh on error
  12559.  1Ah    DWORD    (call) pointer to Socket Context Record (see below) of a
  12560.             previously detached socket
  12561. ---function 0020h---
  12562.  18h    WORD    (return) status: 0000h if successful or FFFFh on error
  12563.  1Ah    WORD    socket's file handle
  12564.  1Ch    DWORD    (return) pointer to Socket Context Record (see below) for
  12565.             the file handle
  12566. ---function 0021h---
  12567.  18h 64 BYTEs    buffer for DESQview startup directory (see AX=DE25h)
  12568. ---function 0022h---
  12569.  18h    DWORD    (return) task handle of new application
  12570.  1Ch    WORD    size of .DVP data
  12571.  1Eh 129 BYTEs    ASCIZ ???
  12572.  9Fh  N BYTEs    .DVP data (see AX=102Ch)
  12573. ---function 0023h---
  12574.  18h    WORD    (return) ??? or FFFFh on error
  12575.  1Ah    WORD    socket's file handle???
  12576. ---function 0024h---
  12577.  18h    WORD    (return) DOS error code (see INT 21/AH=59h)
  12578.             0000h if successful
  12579.  1Ah 129 BYTEs    ASCIZ filename/pathname
  12580. 11Bh 129 BYTEs    ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
  12581. ---function 0025h---
  12582.  18h    WORD    value of AX
  12583.  1Ah    WORD    value of BX
  12584.  1Ch    WORD    (call) value of CX for call if AH value other than 12h
  12585.         (call) number of stack parameters if AH value is 12h
  12586.         (return) returned CX for calls other than INT 15/AH=12h
  12587.  1Eh    WORD    value of DX
  12588.  20h    WORD    value of DI
  12589.  22h    WORD    value of SI
  12590.  24h    WORD    value of DS
  12591.  26h    WORD    value of ES
  12592.  28h    WORD    (return) value of FLAGS after call
  12593.  2Ah  N DWORDs    (call) stack parameters for INT 15/AH=12h call
  12594.         (return) stack results from INT 15/AH=12h call
  12595. ---function 0026h---
  12596.  18h    WORD    (call) subfunction
  12597.             0004h "so_exit"???
  12598.             0005h "gethostbyname"
  12599.             0006h "gethostname"
  12600.             0009h "socket"
  12601.             000Dh "gethostbyaddr"
  12602.             000Fh "getprotobyname"
  12603.             0010h get protocol name for protocol number
  12604.             0011h "getservbyname"
  12605.             0012h "getservbyport"
  12606.             0013h "getsockname"???
  12607.             0016h ???
  12608.             0017h kill Network Manager
  12609.             0018h "getpeername"???
  12610.             0019h ??? (called by socket function 0000h)
  12611.             001Ah ???
  12612.             001Bh "so_linkup"
  12613.             001Dh get network services
  12614.             001Fh "getpwuid"
  12615.             0020h "getpwnam"
  12616.             0021h "getpwvar"
  12617.             0022h "crypt"
  12618.             0023h "so_unlink"
  12619.             0024h "getlogin"
  12620.             0028h "sethostent"
  12621.             0029h "gethostent"
  12622.             002Ah "soaddhost"
  12623.             002Bh "soupdatehost"
  12624.             002Ch "sodeletehost"
  12625.             002Dh "setservent"
  12626.             002Eh "getservent"
  12627.             002Fh "setpwent"
  12628.             0030h "getpwent"
  12629.             0031h ???
  12630.             0032h ???
  12631.             0033h ???
  12632.             0034h get IP network number
  12633.             0035h ??? (pops up Network Manager window)
  12634.             0037h ???
  12635.             0038h get machine name and IP address
  12636.             0039h ???
  12637.         (return) status???
  12638.  1Ah    WORD    (call) size of parameter data
  12639.         (return) size of returned data
  12640.  1Ch  N BYTEs    (call) parameter data required by call (see below)
  12641.         (return) result data (see below)
  12642. ---function 0027h---
  12643.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12644.  1Ah    WORD    socket's file handle
  12645. ---functions 0028h,0029h---
  12646.  18h    WORD    (call) file handle for which to set priority low/high
  12647.             FFFFh to change calling task's priority
  12648. ---function 002Ah---
  12649.  no additional fields
  12650.  
  12651. Format of Function 0026h/Subfunction 000Fh data:
  12652. Offset    Size    Description
  12653.  00h  8 BYTEs    (return) ???
  12654.  
  12655. Format of Function 0026h/Subfunction 0010h data:
  12656. Offset    Size    Description
  12657.  00h  2 BYTEs    (return) ???
  12658.  02h    WORD    (return) protocol number
  12659.  04h    WORD    (call) protocol number for which to get name
  12660.  06h    WORD    (return) ???
  12661.  08h    var    (return) ASCIZ protocol name
  12662.  N    var    (return) ASCIZ protocol name
  12663.  
  12664. Format of Function 0026h/Subfunction 0011h data:
  12665. Offset    Size    Description
  12666.  00h  8 BYTEs    ???
  12667.  08h    var    (return) ASCIZ protocol name
  12668.     var    (return) ASCIZ ??? name
  12669.     var    (return) ASCIZ ??? name
  12670.  
  12671. Format of Function 0026h/Subfunction 0012h data:
  12672. Offset    Size    Description
  12673.  00h  8 BYTEs    (return) ???
  12674.  
  12675. Format of Function 0026h/Subfunction 0013h data:
  12676. Offset    Size    Description
  12677.  00h 116 BYTEs    (return) ???
  12678.  
  12679. Format of Function 0026h/Subfunction 0016h data:
  12680. Offset    Size    Description
  12681.  00h  4 BYTEs    (return) ???
  12682.  
  12683. Format of Function 0026h/Subfunction 0018h data:
  12684. Offset    Size    Description
  12685.  00h 116 BYTEs    (return) ???
  12686.  
  12687. Format of Function 0026h/Subfunction 0019h data:
  12688. Offset    Size    Description
  12689.  00h  4 BYTEs    (return) ???
  12690.  04h    DWORD    (return) task handle of ???
  12691.  
  12692. Format of Function 0026h/Subfunction 001Ah data:
  12693. Offset    Size    Description
  12694.  00h 38 BYTEs    (return) ???
  12695.  
  12696. Format of Function 0026h/Subfunction 001Bh data:
  12697. Offset    Size    Description
  12698.  00h 10 BYTEs    (return) ???
  12699.  
  12700. Format of Function 0026h/Subfunction 001Dh return data [array]:
  12701. Offset    Size    Description
  12702.  00h    WORD    ??? or FFFFh if end of array
  12703.  02h  7 BYTEs    ???
  12704.  09h 27 BYTEs    ASCIZ name of service
  12705.  
  12706. Format of Function 0026h/Subfunction 0024h return data:
  12707. Offset    Size    Description
  12708.  00h    var    ASCIZ username
  12709.  
  12710. Format of Function 0026h/Subfunction 0030h data:
  12711. Offset    Size    Description
  12712.  00h    WORD    (call) UID or 0000h for current user
  12713.         (return) ???
  12714.  02h    WORD    (return) UID
  12715.  04h  6 BYTEs    (return) ???
  12716.  0Ah    var    (return) ASCIZ username
  12717.     var    (return) ASCIZ encrypted password
  12718.     var    (return) ASCIZ initial ("home") directory
  12719.  
  12720. Format of Function 0026h/Subfunction 0034h data:
  12721. Offset    Size    Description
  12722.  00h  1-3 BYTEs    IP network number of caller's machine (low byte first)
  12723.  
  12724. Format of Function 0026h/Subfunction 0038h return data:
  12725. Offset    Size    Description
  12726.  00h    BYTE    ???
  12727.  01h  4 BYTEs    IP address
  12728.  05h    var    ASCIZ machine name
  12729.     ???
  12730.  
  12731. Values for error code:
  12732.  0000h successful
  12733.  0009h "BADF" bad file handle
  12734.  000Ch "ENOMEM" out of memory
  12735.  000Eh "EFAULT" bad address
  12736.  0016h "EINVAL" invalid argument
  12737.  0018h "EMFILE" too many open files
  12738.  0020h "EPIPE" ??? broken pipe
  12739.  0023h "EWOULDBLOCK" operation cannot be completed at this time
  12740.  0024h "EINPROGRESS" operation now in progress
  12741.  0026h "ENOTSOCK" socket invalid
  12742.  0028h "EMSGSIZE" message too long to send atomically
  12743.  002Ch "ESOCKTNOSUPPORT" socket type not supported
  12744.  002Fh "EAFNOSUPPORT" address family not supp. by protocol fam.
  12745.  0031h "EDOM" argument too large
  12746.  0038h "EISCONN" socket is already connected
  12747.  0039h "ENOTCONN" socket is not connected
  12748.  
  12749. Format of Socket Context Record:
  12750. Offset    Size    Description
  12751.  00h    DWORD    pointer to next Socket Context Record, 0000h:0000h if last
  12752.  04h    WORD    SFT index for socket, 00FFh if not connected, FFFFh if detached
  12753.  06h    WORD    PSP segment of owner or 0000h
  12754.  08h    WORD    mapping context of owning window
  12755.  0Ah  2 BYTEs    ???
  12756.  0Ch    WORD    address family
  12757.  0Eh    WORD    socket type
  12758.  10h    WORD    protocol
  12759.  12h    WORD    socket state
  12760.         0001h created
  12761.         0002h bound
  12762.         0003h listening???
  12763.         0005h connected
  12764.  14h    DWORD    timer object handle
  12765.  18h    DWORD    object handle (mailbox???)
  12766.  1Ch    DWORD    object handle of parent of above object or 0000h:0000h
  12767.  20h    DWORD    pointer to ??? or 0000h
  12768.  24h  6 BYTEs    ???
  12769.  2Ah    WORD    file handle for socket or FFFFh
  12770.  2Ch  2 BYTEs    ???
  12771.  2Eh    WORD    nonzero if socket nonblocking
  12772. ---network connections only---
  12773.  30h  2 BYTEs    ???
  12774.  32h    WORD    ???
  12775.  34h  4 BYTEs    IP address of remote (big-endian)
  12776.  38h  6 BYTEs    ???
  12777. ----------15DE2F-----------------------------
  12778. INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
  12779.     AX = DE2Fh
  12780. Return: BX = status
  12781.         0001h keyboard focus has been given to a direct window since the
  12782.         last call
  12783.         0000h if not
  12784. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12785.     Quarterdeck states that this call will not be available under future
  12786.       versions of DESQview Classic
  12787. ----------15DE30-----------------------------
  12788. INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
  12789.     AX = DE30h
  12790. Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
  12791. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12792.     you must first check the DESQview version to verify that it is 2.50 or
  12793.       greater
  12794. SeeAlso: INT 21/AH=2Bh/CX=4445h
  12795. ----------15E00F-----------------------------
  12796. INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
  12797.     AX = E00Fh
  12798.     ES:BX -> start of 2nd processor's execution
  12799. Return: AL = 0Fh successful
  12800.        = 00h failure    
  12801. SeeAlso: AX=E10Eh,AX=E200h
  12802. ----------15E10E-----------------------------
  12803. INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
  12804.     AX = E10Eh
  12805.     ES:BX -> start of 2nd processor's execution
  12806. Return: AL = 0Fh successful (halted)
  12807.        = 00h failure (not halted)
  12808. SeeAlso: AX=E00Fh,AX=E200h
  12809. ----------15E200-----------------------------
  12810. INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
  12811.     AX = E200h
  12812. Return: AX = 8000h if 2nd processor available
  12813. SeeAlso: AX=E00Fh,AX=E10Eh
  12814. ----------15E4-------------------------------
  12815. INT 15 - ???
  12816.     AH = E4h
  12817.     AL = subfunction
  12818.         21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
  12819.     DL = ???
  12820. Return: ???
  12821. ----------15F200CX454D-----------------------
  12822. INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALISATION CHECK ???
  12823.     AX = F200h
  12824.     CX = 454Dh
  12825. Return: CF clear if hardware already initialised
  12826.         BX = upper RAM areas in use
  12827.         bit 0: C000-C3FF
  12828.         bit 1: C400-C7FF
  12829.         ...
  12830.         bit 11: EC00-EFFF
  12831.     CF set if hardware not initialised yet
  12832. ----------1600-------------------------------
  12833. INT 16 - KEYBOARD - GET KEYSTROKE
  12834.     AH = 00h
  12835. Return: AH = BIOS scan code
  12836.     AL = ASCII character
  12837. Notes:    on extended keyboards, this function discards any extended keystrokes,
  12838.       returning only when a non-extended keystroke is available
  12839.     the BIOS scan code is usually, but not always, the same as the hardware
  12840.       scan code processed by INT 09.  It is the same for ASCII keystrokes
  12841.       and most unshifted special keys (F-keys, arrow keys, etc.), but
  12842.       differs for shifted special keys.
  12843. SeeAlso: AH=01h,AH=05h,AH=10h,AH=20h,INT 18/AH=00h
  12844. ----------1601-------------------------------
  12845. INT 16 - KEYBOARD - CHECK FOR KEYSTROKE
  12846.     AH = 01h
  12847. Return: ZF set if no keystroke available
  12848.     ZF clear if keystroke available
  12849.         AH = BIOS scan code
  12850.         AL = ASCII character
  12851. Note:    if a keystroke is present, it is not removed from the keyboard buffer;
  12852.       however, any extended keystrokes which are not compatible with 83/84-
  12853.       key keyboards are removed in the process of checking whether a
  12854.       non-extended keystroke is available
  12855. SeeAlso: AH=00h,AH=11h,AH=21h,INT 18/AH=01h
  12856. ----------1602-------------------------------
  12857. INT 16 - KEYBOARD - GET SHIFT FLAGS
  12858.     AH = 02h
  12859. Return: AL = shift flags
  12860.         bit 7: Insert active
  12861.         6: CapsLock active
  12862.         5: NumLock active
  12863.         4: ScrollLock active
  12864.         3: Alt key pressed (either Alt on 101/102-key keyboards)
  12865.         2: Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  12866.         1: left shift key pressed
  12867.         0: right shift key pressed
  12868. SeeAlso: AH=12h,AH=22h,INT 18/AH=02h
  12869. ----------1603-------------------------------
  12870. INT 16 - KEYBOARD - SET TYPEMATIC RATE AND DELAY
  12871.     AH = 03h
  12872.     AL = subfunction
  12873.         00h set default delay and rate (PCjr and some PS/2)
  12874.         01h increase delay before repeat (PCjr)
  12875.         02h decrease repeat rate by factor of 2 (PCjr)
  12876.         03h increase delay and decrease repeat rate (PCjr)
  12877.         04h turn off typematic repeat (PCjr and some PS/2)
  12878.         05h set repeat rate and delay (AT,PS)
  12879.         BH = delay value (00h = 250ms to 03h = 1000ms)
  12880.         BL = repeat rate (00h=30/sec to 0Ch=10/sec [def] to 1Fh=2/sec)
  12881.         06h get current typematic rate and delay (newer PS/2s)
  12882.         Return: BL = repeat rate (see above)
  12883.             BH = delay (see above)
  12884. Note:    use INT 16/AH=09h to determine whether some of the subfunctions are
  12885.       supported
  12886. SeeAlso: INT 16/AH=09h
  12887. ----------1604-------------------------------
  12888. INT 16 - KEYBOARD - SET KEYCLICK (PCjr only)
  12889.     AH = 04h
  12890.     AL = keyclick state
  12891.         00h off
  12892.         01h on
  12893. SeeAlso: AH=03h
  12894. ----------1605-------------------------------
  12895. INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
  12896.     AH = 05h
  12897.     CH = scan code
  12898.     CL = ASCII character
  12899. Return: AL = 00h if successful
  12900.          01h if keyboard buffer full
  12901. Note:    under DESQview, the following "keystrokes" invoke the following
  12902.       actions when they are read from the keyboard buffer:
  12903.         38FBh or FB00h    switch to next window (only if main menu
  12904.                 popped up)
  12905.         38FCh or FC00h    pop up DESQview main menu
  12906.         38FEh or FE00h    close the current window
  12907.         38FFh or FF00h    pop up DESQview learn menu
  12908. SeeAlso: AH=00h,AH=71h,AH=FFh,INT 15/AX=DE10h
  12909. ----------1605-------------------------------
  12910. INT 16 - KEYBOARD - SELECT KEYBOARD LAYOUT (PCjr only)
  12911.     AH = 05h
  12912.     AL = function
  12913.         01h set keyboard layout to French
  12914.         02h set keyboard layout to German
  12915.         03h set keyboard layout to Italian
  12916.         04h set keyboard layout to Spanish
  12917.         05h set keyboard layout to UK
  12918.         80h check if function supported
  12919.         Return: AL <> 80h if supported
  12920. Return: ???
  12921. Note:    called by DOS 3.2 KEYBxx.COM
  12922. SeeAlso: AH=92h,AH=A2h
  12923. ----------1609-------------------------------
  12924. INT 16 - KEYBOARD - GET KEYBOARD FUNCTIONALITY
  12925.     AH = 09h
  12926. Return: AL = keyboard functions supported
  12927.         bit 7: reserved
  12928.         bit 6: 
  12929.         bit 5:
  12930.         bit 4: INT 16/AH=0Ah supported
  12931.         bit 3: INT 16/AX=0306h supported
  12932.         bit 2: INT 16/AX=0305h supported
  12933.         bit 1: INT 16/AX=0304h supported
  12934.         bit 0: INT 16/AX=0300h supported
  12935. Note:    this function is only available if bit 6 of the second feature byte
  12936.       returned by INT 15/AH=C0h is set
  12937. SeeAlso: AH=03h,AH=0Ah,INT 15/AH=C0h
  12938. ----------160A-------------------------------
  12939. INT 16 - KEYBOARD - GET KEYBOARD ID
  12940.     AH = 0Ah
  12941. Return: BX = keyboard ID
  12942. Note:    check return value from AH=09h to determine whether this function is
  12943.       supported
  12944. SeeAlso: AH=09h
  12945. ----------1610-------------------------------
  12946. INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (enhanced kbd support only)
  12947.     AH = 10h
  12948. Return: AH = BIOS scan code
  12949.     AL = ASCII character
  12950. Notes:    if no keystroke is available, this function waits until one is placed
  12951.       in the keyboard buffer
  12952.     the BIOS scan code is usually, but not always, the same as the hardware
  12953.       scan code processed by INT 09.  It is the same for ASCII keystrokes
  12954.       and most unshifted special keys (F-keys, arrow keys, etc.), but
  12955.       differs for shifted special keys.
  12956.     unlike AH=00h, this function does not discard extended keystrokes
  12957. SeeAlso: AH=00h,AH=11h,AH=20h
  12958. ----------1611-------------------------------
  12959. INT 16 - KEYBOARD - CHECK FOR ENHANCED KEYSTROKE (enh kbd support only)
  12960.     AH = 11h
  12961. Return: ZF set if no keystroke available
  12962.     ZF clear if keystroke available
  12963.         AH = BIOS scan code
  12964.         AL = ASCII character
  12965. Notes:    if a keystroke is available, it is not removed from the keyboard buffer
  12966.     unlike AH=01h, this function does not discard extended keystrokes
  12967. SeeAlso: AH=01h,AH=10h,AH=21h
  12968. ----------1612-------------------------------
  12969. INT 16 - KEYBOARD - GET EXTENDED SHIFT STATES (enh kbd support only)
  12970.     AH = 12h
  12971. Return: AL = shift flags 1 (same as returned by AH=02h)
  12972.         bit 7: Insert active
  12973.         6: CapsLock active
  12974.         5: NumLock active
  12975.         4: ScrollLock active
  12976.         3: Alt key pressed (either Alt on 101/102-key keyboards)
  12977.         2: Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  12978.         1: left shift key pressed
  12979.         0: right shift key pressed
  12980.     AH = shift flags 2
  12981.         bit 7: SysRq key pressed
  12982.         6: CapsLock pressed
  12983.         5: NumLock pressed
  12984.         4: ScrollLock pressed
  12985.         3: right Alt key pressed
  12986.         2: right Ctrl key pressed
  12987.         1: left Alt key pressed
  12988.         0: left Ctrl key pressed
  12989. Notes:    AL bit 3 set only for left Alt key on many machines
  12990.     AH bits 7 through 4 always clear on a Compaq SLT/286
  12991. SeeAlso: AH=02h,AH=22h,AH=51h
  12992. ----------1620-------------------------------
  12993. INT 16 - KEYBOARD - GET 122-KEY KEYSTROKE???
  12994.     AH = 20h
  12995. Return: ??? see AH=10h
  12996. Note:    use AH=09h to determine whether this function is supported
  12997. SeeAlso: AH=00h,AH=10h,AH=21h
  12998. ----------1621-------------------------------
  12999. INT 16 - KEYBOARD - CHECK FOR 122-KEY KEYSTROKE???
  13000.     AH = 21h
  13001. Return: ??? see AH=11h
  13002. Note:    use AH=09h to determine whether this function is supported
  13003. SeeAlso: AH=01h,AH=11h,AH=20h
  13004. ----------1622-------------------------------
  13005. INT 16 - KEYBOARD - GET 122-KEY SHIFT STATUS???
  13006.     AH = 22h
  13007. Return: ??? see AH=12h
  13008. Note:    use AH=09h to determine whether this function is supported
  13009. SeeAlso: AH=02h,AH=12h
  13010. ----------164252-----------------------------
  13011. INT 16 - TEXTCAP 2.0 - INSTALLATION CHECK
  13012.     AX = 4252h
  13013. Return: AX = 5242h if installed
  13014. Note:    TEXTCAP 2.0 is a heavily modified (by Gisbert W. Selke) version of the
  13015.       PC Magazine utility CAPTURE written by Tom Kihlken
  13016. SeeAlso: AX=4253h,AX=4254h
  13017. ----------164253-----------------------------
  13018. INT 16 - TEXTCAP 2.0 - UNINSTALL
  13019.     AX = 4253h
  13020. Return: AX = segment of resident code
  13021. Notes:    the uninstall code does not check whether interrupt vectors have been
  13022.       chained by other programs
  13023.     the caller must free the main memory block (using the returned segment)
  13024. SeeAlso: AX=4252h,AX=4254h
  13025. ----------164254-----------------------------
  13026. INT 16 - TEXTCAP 2.0 - DUMP TEXT SCREEN TO FILE
  13027.     AX = 4254h
  13028. Return: AX = status
  13029.         4254h if screen dump will be written as soon as disk becomes idle
  13030.         5442h if screen dump written
  13031. SeeAlso: AX=4252h,AX=4253h
  13032. ----------164500-----------------------------
  13033. INT 16 - Shamrock Software EMAIL - GET STATUS
  13034.     AX = 4500h
  13035.     DL = port number (01h = COM1)
  13036.     ES:BX -> 13-byte buffer for ASCIZ name
  13037. Return: AX = 4D00h if EMAIL installed on specified port
  13038.         ES:BX -> "" if no connection
  13039.           -> "*" if connection but caller has not identified name
  13040.           -> name otherwise
  13041.         CX = version (CH = major, CL = minor)
  13042.         DL = privilege level of user (00h = guest)
  13043.         DH = chosen language (00h German, 01h English)
  13044. SeeAlso: AX=4501h,AX=4502h
  13045. ----------164501-----------------------------
  13046. INT 16 - Shamrock Software EMAIL - GET ELAPSED ONLINE TIME AND MAXIMUM TIME
  13047.     AX = 4501h
  13048.     DL = port number (01h = COM1)
  13049. Return: AX = 4D00h if EMAIL installed on specified port
  13050.         BX = maximum connect time in clock ticks
  13051.         CX = maximum connect time for guests (without name) in clock ticks
  13052.         DX = elapsed connect time of current user in clock ticks
  13053. SeeAlso: AX=4500h    
  13054. ----------164502-----------------------------
  13055. INT 16 - Shamrock Software EMAIL - GET CURRENT COMMUNICATIONS PARAMETERS
  13056.     AX = 4502h
  13057.     DL = port number (01h = COM1)
  13058. Return: AX = 4D00h if EMAIL installed on specified port
  13059.         BL = current value of serial port's Line Control Register
  13060.         BH = flags
  13061.         bit 0: ISO code
  13062.             1: pause
  13063.             2: linefeed
  13064.             3: ANSI sequences
  13065.         CX = selected country code (33 = France, 49 = Germany, etc)
  13066.         DX = baudrate divisor (115200/DX = baudrate)
  13067. SeeAlso: AX=4500h
  13068. ----------164503-----------------------------
  13069. INT 16 - Shamrock Software EMAIL - SPECIFY COMMAND-WORD FOR USER FUNCTION
  13070.     AX = 4503h
  13071.     DL = port number (01h = COM1)
  13072.     DH = maximum execution time in clock ticks (00h = 5 seconds)
  13073.     ES:BX -> ASCIZ string with new user command-word
  13074. Return: AX = 4D00h if EMAIL installed on specified port
  13075. Notes:    a single user command (consisting of only uppercase letters and digits)
  13076.       may be defined, and remains valid until it is overwritten or the
  13077.       EMAIL program terminates; the user command must be activated by
  13078.       calling AX=4504h at least once.
  13079.     an existing command word may be redefined with this function
  13080. SeeAlso: AX=4504h,AX=4505h
  13081. ----------164504-----------------------------
  13082. INT 16 - Shamrock Software EMAIL - CHECK FOR USER FUNCTION COMMAND-WORD
  13083.     AX = 4504h
  13084.     DL = port number (01h = COM1)
  13085.     ES:BX -> 80-byte buffer for ASCIZ user input line
  13086. Return: AX = 4D00h if EMAIL installed on specified port
  13087.         DL = flags
  13088.         bit 0: user function supported (always set)
  13089.             1: user entered user-function command word
  13090.         if DL bit 1 set,
  13091.         ES:BX buffer contains line entered by user which begins with
  13092.             the defined command word and has been converted to all
  13093.             caps
  13094. Note:    caller must process the returned commandline and invoke AX=4505h
  13095.       within five seconds with the result of that processing
  13096. SeeAlso: AX=4503h,AX=4505h
  13097. ----------164505-----------------------------
  13098. INT 16 - Shamrock Software EMAIL - SEND RESULT OF USER FUNCTION
  13099.     AX = 4505h
  13100.     DL = port number (01h = COM1)
  13101.     DH = error flag
  13102.         bit 3: set on error
  13103.     ES:BX -> ASCIZ text to return to user, max 1024 bytes
  13104. Return: AH = 4Dh if EMAIL installed on specified port
  13105.     AL = status
  13106.         00h successful
  13107.         02h unable to perform function (timeout, prev call not complete)
  13108.         other error
  13109. Notes:    if the error flag in DH is set, the string is not sent and an error
  13110.       message is generated instead; if this function is not called within
  13111.       five seconds of AX=4504h, EMAIL automatically generates an error
  13112.       message
  13113.     the string is copied into an internal buffer, allowing this function's
  13114.       caller to continue immediately
  13115. SeeAlso: AX=4503h,AX=4504h,INT 17/AX=2400h
  13116. ----------164506-----------------------------
  13117. INT 16 - Shamrock Software EMAIL - MONITOR XMODEM DOWNLOAD
  13118.     AX = 4506h
  13119.     DL = port number (01h = COM1)
  13120.     ES:BX -> 13-byte buffer for ASCIZ filename
  13121. Return: AX = 4D00h if EMAIL installed on specified port
  13122.         DH = Xmodem status
  13123.         00h no XGET command given
  13124.         01h XGET in progress
  13125.         02h XGET completed successfully
  13126.         ES:BX buffer filled with last filename given to XGET command
  13127.         (without path)
  13128. Note:    DH=02h will only be returned once per XGET; subsequent calls will
  13129.       return DH=00h
  13130. SeeAlso: AX=4500h,INT 17/AX=2408h
  13131. ----------165000-----------------------------
  13132. INT 16 - KEYBOARD - AX PC - SET KEYBOARD COUNTRY CODE
  13133.     AX = 5000h
  13134.     BX = country code
  13135.         0001h USA (English), 0051h Japan
  13136. Return: AL = status
  13137.         00h successful
  13138.         01h bad country code
  13139.         02h other error
  13140. SeeAlso: AX=5001h,INT 10/AX=5000h,INT 17/AX=5000h
  13141. ----------165001-----------------------------
  13142. INT 16 - KEYBOARD - AX PC - GET KEYBOARD COUNTRY CODE
  13143.     AX = 5001h
  13144. Return: AL = status
  13145.         00h successful
  13146.         BX = country code
  13147.         02h error
  13148. SeeAlso: AX=5000h,INT 10/AX=5001h,INT 17/AX=5001h
  13149. ----------1651-------------------------------
  13150. INT 16 - KEYBOARD - AX PC - READ SHIFT KEY STATUS
  13151.     AH = 51h
  13152. Return: AL = standard shift key states (see AH=12h)
  13153.     AH = Kana lock (00h off, 01h on)
  13154. SeeAlso: AH=02h,AH=12h,AH=22h
  13155. ----------165500-----------------------------
  13156. INT 16 - Microsoft Word internal - MICROSOFT WORD COOPERATION WITH TSR
  13157.     AX = 5500h
  13158. Return: AX = 4D53h ('MS') if keyboard TSR present
  13159. Notes:    during startup, Microsoft Word tries to communicate with any TSRs
  13160.       that are present through this call.
  13161.     if the return is not 4D53h, Word installs its own INT 09 and INT 16
  13162.       handlers; otherwise it assumes that the TSR will handle the keyboard
  13163. SeeAlso: INT 1A/AX=3601h
  13164. ----------1655FF-----------------------------
  13165. INT 16 - Swap Utilities - ???
  13166.     AX = 55FFh
  13167.     BX >= 0004h
  13168.     CX = function
  13169.         0000h set ??? flag
  13170.         other clear ??? flag
  13171. Note:    present in SWAPSH and SWAPDT v1.77j, distributed with PC Tools 7
  13172. ----------166969BX6968-----------------------
  13173. INT 16 - PC Tools v5.1+ BACKTALK - UNHOOK
  13174.     AX = 6969h
  13175.     BX = 6968h
  13176. Return: resident code unhooked, but not removed from memory
  13177. ----------166969BX6969-----------------------
  13178. INT 16 - PC Tools v5.1+ BACKTALK - INSTALLATION CHECK
  13179.     AX = 6969h
  13180.     BX = 6969h
  13181.     DX = 0000h
  13182. Return: DX nonzero if installed
  13183.         BX = CS of resident code
  13184.         DX = PSP segment of resident code
  13185.         DS:SI -> ASCIZ identification string "CPoint Talk"
  13186. ----------166F00BX0000-----------------------
  13187. INT 16 - HP Vectra - ??? - INSTALLATION CHECK
  13188.     AX = 6F00h
  13189.     BX = 0000h
  13190. Return: BX = 4850h if present
  13191. Note:    called by recent MS Mouse drivers
  13192. ----------166F0D-----------------------------
  13193. INT 16 - HP Vectra - ???
  13194.     AX = 6F0Dh
  13195.     ???
  13196. Return: ???
  13197. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386
  13198. SeeAlso: AX=6F0Eh
  13199. ----------166F0E-----------------------------
  13200. INT 16 - HP Vectra - ???
  13201.     AX = 6F0Eh
  13202.     ???
  13203. Return: ???
  13204. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386
  13205. SeeAlso: AX=6F0Dh
  13206. ----------1670-------------------------------
  13207. INT 16 - FAKEY.COM - INSTALLATION CHECK
  13208.     AH = 70h
  13209. Return: AX = 1954h if installed
  13210. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  13211. ----------1671-------------------------------
  13212. INT 16 - FAKEY.COM - PUSH KEYSTROKES
  13213.     AH = 71h
  13214.     CX = number of keystrokes
  13215.     DS:SI -> array of words containing keystrokes to be returned by AH=00h
  13216. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  13217. SeeAlso: AH=05h,AH=72h
  13218. ----------1672-------------------------------
  13219. INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
  13220.     AH = 72h
  13221. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  13222. SeeAlso: AH=71h
  13223. ----------1673-------------------------------
  13224. INT 16 - FAKEY.COM - PLAY TONES
  13225.     AH = 73h
  13226.     CX = number of tones to play
  13227.     DS:SI -> array of tones (see below)
  13228. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  13229. SeeAlso: INT 15/AX=1019h
  13230.  
  13231. Format of tone array entries:
  13232. Offset    Size    Description
  13233.  00h    WORD    divisor for timer channel 2
  13234.  02h    WORD    duration in clock ticks
  13235. ----------1675-------------------------------
  13236. INT 16 - pcANYWHERE III - SET TICK COUNT FOR SCANNING
  13237.     AH = 75h
  13238.     AL = number of ticks between checks for new screen changes
  13239. ----------1676-------------------------------
  13240. INT 16 - pcANYWHERE III - SET ERROR CHECKING TYPE
  13241.     AH = 76h
  13242.     AL = error checking type
  13243.         00h none
  13244.         01h fast
  13245.         02h slow
  13246. ----------1677-------------------------------
  13247. INT 16 - pcANYWHERE III - LOG OFF
  13248.     AH = 77h
  13249.     AL = mode
  13250.         00h wait for another call
  13251.         01h leave in Memory Resident Mode
  13252.         02h leave in Automatic Mode
  13253.         FFh leave in current operating mode
  13254. ----------167761-----------------------------
  13255. INT 16 - WATCH.COM v2.x-v3.0 - INSTALLATION CHECK
  13256.     AX = 7761h ('wa')
  13257. Return: AX = 5741h ('WA') if installed
  13258. Note:    WATCH.COM is part of the "TSR" package by Kim Kokkonen
  13259. SeeAlso: INT 21/AX=7761h
  13260. ----------167788BX7789-----------------------
  13261. INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
  13262.     AX = 7788h
  13263.     BX = 7789h
  13264.     DS:SI -> signature "PUSHDIR VERSION 1.0"
  13265. Return: AX = 7789h if installed and signature correct
  13266.     BX = 7788h
  13267.     SI destroyed          
  13268. ----------1679-------------------------------
  13269. INT 16 - pcANYWHERE III - CHECK STATUS
  13270.     AH = 79h
  13271. Return: AX = status
  13272.         FFFFh if resident and active
  13273.         FFFEh if resident but not active
  13274.         FFFDh if in Memory Resident mode
  13275.         FFFCh if in Automatic mode
  13276.         other value if not resident
  13277. SeeAlso: AX=7B00h,INT 21/AX=2B44h
  13278. ----------167A-------------------------------
  13279. INT 16 - pcANYWHERE III - CANCEL SESSION
  13280.     AH = 7Ah
  13281. ----------167B00-----------------------------
  13282. INT 16 - pcANYWHERE III - SUSPEND
  13283.     AX = 7B00h
  13284. SeeAlso: AH=79h,AX=7B01h
  13285. ----------167B01-----------------------------
  13286. INT 16 - pcANYWHERE III - RESUME
  13287.     AX = 7B01h
  13288. SeeAlso: AH=79h,AX=7B00h
  13289. ----------167C-------------------------------
  13290. INT 16 - pcANYWHERE III - GET PORT CONFIGURATION
  13291.     AH = 7Ch
  13292. Return: AH = port number
  13293.     AL = baud rate
  13294.         00h = 50 baud
  13295.         01h = 75 baud
  13296.         02h = 110 baud
  13297.         03h = 134.5 baud
  13298.         04h = 150 baud
  13299.         05h = 300 baud
  13300.         06h = 600 baud
  13301.         07h = 1200 baud
  13302.         08h = 1800 baud
  13303.         09h = 2000 baud
  13304.         0Ah = 2400 baud
  13305.         0Bh = 4800 baud
  13306.         0Ch = 7200 baud
  13307.         0Dh = 9600 baud
  13308.         0Eh = 19200 baud
  13309. ----------167D-------------------------------
  13310. INT 16 - pcANYWHERE III - GET/SET TERMINAL PARAMETERS
  13311.     AH = 7Dh
  13312.     AL = subfunction
  13313.         00h set terminal parameters
  13314.         01h get terminal parameters
  13315.         02h get configuration header and terminal parameters
  13316.     DS:CX -> terminal parameter block
  13317. ----------167E-------------------------------
  13318. INT 16 - pcANYWHERE III - COMMUNICATIONS I/O THROUGH PORT
  13319.     AH = 7Eh
  13320.     AL = subfunction
  13321.         01h port input status
  13322.         Return AX = 0 if no characer ready,
  13323.                AX = 1 if character ready
  13324.         02h port input character
  13325.         Return AL = received character
  13326.         03h port output character in CX
  13327.         11h hang up phone
  13328. ----------167F-------------------------------
  13329. INT 16 - pcANYWHERE III - SET KEYBOARD/SCREEN MODE
  13330.     AH = 7Fh
  13331.     AL = subfunction
  13332.         00h enable remote keyboard only
  13333.         01h enable host keyboard only
  13334.         02h enable both keyboards
  13335.         08h display top 24 lines
  13336.         09h display bottom 24 lines
  13337.         10h Hayes modem
  13338.         11h other modem
  13339.         12h direct connect
  13340. ----------1680-------------------------------
  13341. INT 16 - MAKEY.COM - INSTALLATION CHECK
  13342.     AH = 80h
  13343. Return: AX = 1954h if installed
  13344. Note:    MAKEY is a utility by System Enhancement Associates
  13345. ----------168765BX4321-----------------------
  13346. INT 16 - AT.COM version 8/26/87 - API
  13347.     AX = 8765h
  13348.     BX = 4321h
  13349.     CX = ??? or FFFFh
  13350.     if CX = FFFFh
  13351.         DX = number of event to remove or FFFFh
  13352. Return: ES:BX -> event record array
  13353. Note:    AT.COM is a resident scheduler by Bill Frolik
  13354.  
  13355. Format of event record:
  13356. Offset    Size    Description
  13357.  00h    BYTE    in-use flag (00h free, 01h in use, FFh end of array)
  13358.  01h    BYTE    day of date on which to trigger
  13359.  02h    BYTE    month of date on which to trigger
  13360.  03h    BYTE    trigger time, minute
  13361.  04h    BYTE    trigger time, hour
  13362.  05h    WORD    offset of command to be executed
  13363. ----------1692-------------------------------
  13364. INT 16 - ???
  13365.     AH = 92h
  13366. Return: AH <= 80h if ???
  13367. Note:    called by DOS 3.2 KEYBxx.COM and DOS 5.0 KEYB.COM
  13368. SeeAlso: AH=05h"PCjr",AH=A2h
  13369. ----------1699-------------------------------
  13370. INT 16 - SCOUT v5.4 - GET ???
  13371.     AH = 99h
  13372. Return: AX = ABCDh
  13373.     BX:CX -> ??? (appears to be start of PSP for resident portion)
  13374. Note:    Scout is a memory-resident file manager by New-Ware
  13375. SeeAlso: AH=9Eh
  13376. ----------169E-------------------------------
  13377. INT 16 - SCOUT v5.4 - INSTALLATION CHECK
  13378.     AH = 9Eh
  13379. Return: AX = ABCDh if installed
  13380. Note:    Scout is a memory-resident file manager by New-Ware
  13381. SeeAlso: AH=99h
  13382. ----------16A2-------------------------------
  13383. INT 16 - ???
  13384.     AH = A2h
  13385. Return: AH <= 80h if ???
  13386. Note:    this function is called by DOS 5.0 KEYB.COM
  13387. SeeAlso: AH=92h
  13388. ----------16AA-------------------------------
  13389. INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS
  13390.     AH = AAh
  13391.     Various registers set up by high level language.
  13392. Return: Graphics performed
  13393. Note:    PT stands for Paint Tools which is a graphics library for Turbo Pascal,
  13394.       Modula 2 and others from DataBiten in Sweden. The library is
  13395.       installed as a memory resident driver.
  13396. ----------16CA--BX736B-----------------------
  13397. INT 16 - CtrlAlt Associates STACKEY.COM v3.00 - API
  13398.     AH = CAh
  13399.     BX = 736Bh ("sk")
  13400.     CX = 736Bh
  13401.     AL = function
  13402.         00h installation check
  13403.         Return: DX = words available in keyboard buffer
  13404.         01h place keystroke in buffer
  13405.         DX = keystroke (DH = scan code, DL = ASCII character)
  13406.         Return: DX = words available in keyboard buffer
  13407.                 FFFFh on error
  13408.         02h flush STACKEY and BIOS keyboard buffers
  13409. Return: AX = CAFFh if installed
  13410.         BX = segment of resident code
  13411.         CX = STACKEY version (CH = major, CL = minor)
  13412. Note:    STACKEY is a shareware keyboard-input faking TSR
  13413. ----------16CA00BX6570-----------------------
  13414. INT 16 - CtrlAlt Associates EGAPAL.COM v1.00 - INSTALLATION CHECK
  13415.     AX = CA00h
  13416.     BX = 6570h ("ep")
  13417.     CX = 6570h
  13418. Return: AX = CAFFh if installed
  13419.         BX = segment of resident code
  13420.         CX = ??? (0090h)
  13421. Note:    EGAPAL is a TSR supplied with STACKEY which makes EGA palette settings
  13422.       permanent across mode switches
  13423. SeeAlso: AX=CA00h/BX=7670h
  13424. ----------16CA00BX7670-----------------------
  13425. INT 16 - CtrlAlt Associates VGAPAL.COM v1.00 - INSTALLATION CHECK
  13426.     AX = CA00h
  13427.     BX = 7670h ("vp")
  13428.     CX = 7670h
  13429. Return: AX = CAFFh if installed
  13430.         BX = segment of resident code
  13431.         CX = ??? (0090h)
  13432. Note:    VGAPAL is a TSR supplied with STACKEY which makes VGA palette settings
  13433.       permanent across mode switches
  13434. SeeAlso: AX=CA00h/BX=6570h
  13435. ----------16E0E0-----------------------------
  13436. INT 16 - TurboPower TSRs - ALTERNATE INSTALLATION CHECK
  13437.     AX = E0E0h
  13438. Return: AX = 1F1Fh if installed
  13439.         DWORD 0040h:00F0h -> last data block in TSR list (see AX=F0F0h)
  13440. Note:    the returned TSR list provides support for communication among TSRs
  13441.       built with TurboPower's Turbo Professional and Object Professional
  13442.       libraries for Turbo Pascal
  13443. SeeAlso: AX=F0F0h
  13444. ----------16ED--BHED-------------------------
  13445. INT 16 - BORLAND TURBO LIGHTNING - API
  13446.     AH = EDh
  13447.     BH = EDh
  13448.     BL = function
  13449.         00h installation check
  13450.         Return: AX = 5205h
  13451.             CH = major version
  13452.             CL = minor version
  13453.         01h ???
  13454.         02h get resident CS
  13455.         Return: AX = code segment of resident portion
  13456.         03h get resident ???
  13457.         Return: AX = offset of some buffer in resident code seg
  13458.         04h ???
  13459.         05h set ???
  13460.         AL = 0 to 0Ch
  13461.         Return: AX = status
  13462.                 0000h if OK
  13463.                 0001h if out of range.
  13464.         06h ???
  13465.         07h ???
  13466.         08h ???
  13467.         AL = char???
  13468.         CX = ???
  13469.         DX = ???
  13470.         Return: AX = 0, 1 or 2
  13471.         09h ???
  13472.         0Ah ???
  13473.         CX = ???
  13474.         DX = ???
  13475.         Return: AX = ???
  13476.         0Bh ???
  13477.         DS:SI -> ???
  13478.         Return: AX = 0, 40h, 80h
  13479.         0Ch ???
  13480.         DS:SI -> ???
  13481.         Return: AH = 0
  13482.             AL = ???
  13483.         0Dh set ???
  13484.         (sets an internal flag)
  13485.         0Eh ???
  13486.         DS:SI -> ???
  13487.         Return: AX = 0, 1 or 2.
  13488.         0Fh ???
  13489.         10h ???
  13490. Notes:    AX in general returns an error code from most functions.
  13491. ----------16F0-------------------------------
  13492. INT 16 - Compaq 386 - SET CPU SPEED
  13493.     AH = F0h
  13494.     AL = speed
  13495.         00h equivalent to 6 MHz 80286 (COMMON)
  13496.         01h equivalent to 8 MHz 80286 (FAST)
  13497.         02h full 16 MHz (HIGH)
  13498.         03h toggles between 8 MHz-equivalent and speed set by system board
  13499.         switch (AUTO or HIGH)
  13500.         08h full 16 MHz except 8 MHz-equivalent during floppy disk access
  13501.         09h specify speed directly
  13502.         CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
  13503. SeeAlso: AH=F1h,AH=F3h
  13504. ----------16F0F0-----------------------------
  13505. INT 16 - TurboPower TSRs - INSTALLATION CHECK
  13506.     AX = F0F0h
  13507. Return: AX = 0F0Fh if installed
  13508.         ES:DI -> last data block in TSR list
  13509. Note:    the returned TSR list provides support for communication among TSRs
  13510.       built with TurboPower's Turbo Professional and Object Professional
  13511.       libraries for Turbo Pascal
  13512. SeeAlso: AX=E0E0h
  13513.  
  13514. Format of data block:
  13515. Offset    Size    Description
  13516.  00h    DWORD    pointer to program tag (counted ASCII string)
  13517.  04h    WORD    interface version number (0400h)
  13518.  06h    DWORD    pointer to command entry point
  13519.  0Ah    DWORD    pointer to previous data block (0000h:0000h if none)
  13520.  0Eh    DWORD    pointer to next data block (0000h:0000h if none)
  13521. ---swappable TSRs only---
  13522.  12h    DWORD    pointer to swapping data
  13523.  16h    DWORD    pointer to user data
  13524.     more???
  13525. ----------16F1-------------------------------
  13526. INT 16 - Compaq 386 - READ CURRENT CPU SPEED
  13527.     AH = F1h
  13528. Return:    AL = speed code (see AH=F0h)
  13529.          if AL = 09h, CX = speed code
  13530. SeeAlso: AH=F0h,AH=F3h
  13531. ----------16F2-------------------------------
  13532. INT 16 - Compaq 386 - DETERMINE ATTACHED KEYBOARD TYPE
  13533.     AH = F2h
  13534. Return: AL = type
  13535.         00h if 11-bit AT keyboard is in use
  13536.         01h if 9-bit PC keyboard is in use 
  13537. ----------16F3-------------------------------
  13538. INT 16 - Compaq 80286s - SET CPU SPEED LIMIT (OVERRIDE JUMPER)
  13539.     AH = F3h
  13540.     AL = 00h limit is 6 Mhz
  13541.        = 01h limit is 8 Mhz/6 Mhz
  13542. SeeAlso: AH=F0h,AH=F1h
  13543. ----------16F398-----------------------------
  13544. INT 16 U - NORTON GUIDES - INSTALLATION CHECK
  13545.     AX = F398h
  13546. Return: AX = 6A73h ("js")
  13547.     BH = scan code of current hot key
  13548.     BL = ASCII code of current hot key
  13549. Note:    NG.EXE was written by John Socha
  13550. ----------16F400-----------------------------
  13551. INT 16 - Compaq Systempro - CACHE CONTROLLER STATUS
  13552.     AX = F400h
  13553. Return: AH = E2h
  13554.     AL = status
  13555.         00h not present
  13556.         01h enabled
  13557.         02h disabled
  13558. SeeAlso: AX=F401h,AX=F402h
  13559. ----------16F401-----------------------------
  13560. INT 16 - Compaq Systempro - ENABLE CACHE CONTROLLER
  13561.     AX = F401h
  13562. Return: AX = E201h
  13563. SeeAlso: AX=F400h,AX=F402h
  13564. ----------16F402-----------------------------
  13565. INT 16 - Compaq Systempro - DISABLE CACHE CONTROLLER
  13566.     AX = F402h
  13567. Return: AX = E202h
  13568. SeeAlso: AX=F400h,AX=F401h
  13569. ----------16FA00DX5945-----------------------
  13570. INT 16 U - PC Tools v8+ VSAFE, VWATCH - INSTALLATION CHECK???
  13571.     AX = FA00h
  13572.     DX = 5945h
  13573. Return: CF clear
  13574.     DI = 4559h
  13575.     BX = ??? (2F00h or FFFFh) (VSAFE only)
  13576. SeeAlso: INT 13/AH=FAh,INT 21/AH=FAh"VDEFEND",INT 2F/AX=6282h
  13577. ----------16FA01DX5945-----------------------
  13578. INT 16 U - PC Tools v8+ VSAFE, VWATCH - UNINSTALL
  13579.     AX = FA01h
  13580.     DX = 5945h
  13581. Return: CF clear if successful
  13582.     FI = 4559h
  13583. SeeAlso: AX=FA00h
  13584. ----------16FA02DX5945-----------------------
  13585. INT 16 U - PC Tools v8+ VSAFE, VWATCH - ???
  13586.     AX = FA02h
  13587.     DX = 5945h
  13588.     BL = ???
  13589. Return: CF clear
  13590.     DI = 4559h
  13591.     CL = old value of ???
  13592. ----------16FA03DX5945-----------------------
  13593. INT 16 U - PC Tools v8+ VSAFE, VWATCH - ???
  13594.     AX = FA03h
  13595.     DX = 5945h
  13596. Return: CF clear
  13597.     DI = 4559h
  13598.     AX = 0002h
  13599. ----------16FA04DX5945-----------------------
  13600. INT 16 U - PC Tools v8+ VSAFE - GET ???
  13601.     AX = FA04h
  13602.     DX = 5945h
  13603. Return: CF clear
  13604.     DI = 4559h
  13605.     BL = ???
  13606. Note:    this function is a NOP under VWATCH
  13607. SeeAlso: AX=FA05h
  13608. ----------16FA05DX5945-----------------------
  13609. INT 16 U - PC Tools v8+ VSAFE - SET ???
  13610.     AX = FA05h
  13611.     DX = 5945h
  13612.     BL = ???
  13613. Return: CF clear
  13614.     DI = 4559h
  13615. Note:    this function is a NOP under VWATCH
  13616. SeeAlso: AX=FA04h
  13617. ----------16FA06DX5945-----------------------
  13618. INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET ???
  13619.     AX = FA06h
  13620.     DX = 5945h
  13621. Return: CF clear
  13622.     DI = 4559h
  13623.     BL = ???
  13624. SeeAlso: AX=FA07h
  13625. ----------16FA07DX5945-----------------------
  13626. INT 16 U - PC Tools v8+ VSAFE, VWATCH - SET ???
  13627.     AX = FA07h
  13628.     DX = 5945h
  13629.     BL = ???
  13630. Return: CF clear
  13631.     DI = 4559h
  13632. SeeAlso: AX=FA00h,AX=FA06h
  13633. ----------16FE55-----------------------------
  13634. INT 16 U - PC Tools v8+ DATAMON, DRIVEMAP, CPSCHED, CPTASK - ???
  13635.     AX = FE55h
  13636.     CX = ???
  13637.     DX = ???
  13638.     ???
  13639. Return: DX:AX -> ???
  13640. ----------16FEA4-----------------------------
  13641. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - ???
  13642.     AX = FEA4h
  13643.     ???
  13644. Return: ???
  13645. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  13646.       code in DESKTOP
  13647. SeeAlso: AX=FFA4h
  13648. ----------16FEC6-----------------------------
  13649. INT 16 U - PC Tools v7+ CPSCHED - ???
  13650.     AX = FEC6h
  13651.     DL = ???
  13652.     ???
  13653. Return: ???
  13654. ----------16FED3-----------------------------
  13655. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - ???
  13656.     AX = FED3h
  13657.     DS:SI -> 92-byte data record for ???
  13658. Return: ???
  13659. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  13660.       code in DESKTOP
  13661. SeeAlso: AX=FFD3h
  13662. ----------16FEDC-----------------------------
  13663. INT 16 U - PC Tools v7+ CPSCHED - ???
  13664.     AX = FEDCh
  13665.     ???
  13666. Return: ???
  13667. ----------16FEEFCX0000-----------------------
  13668. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - INSTALLATION CHECK
  13669.     AX = FEEFh
  13670.     CX = 0000h
  13671. Return: CX = ABCDh if PC Tools scheduler (CPSCHED or DESKTOP) installed
  13672.         BX = segment of resident portion
  13673. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  13674.       code in DESKTOP
  13675. SeeAlso: AX=FFEFh
  13676. ----------16FEF1-----------------------------
  13677. INT 16 U - PC Tools v7 only CPSCHED/DESKTOP - ALTERNATE INSTALLATION CHECK
  13678.     AX = FEF1h
  13679.     BX = ???
  13680. Return: CX = 5555h if PC Tools scheduler (CPSCHED or DESKTOP) installed
  13681.     DX = 5555h
  13682. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  13683.       code in DESKTOP
  13684. SeeAlso: AX=FFF1h
  13685. ----------16FF-------------------------------
  13686. INT 16 - KEYBOARD - KBUF extensions - ADD KEY TO TAIL OF KEYBOARD BUFFER
  13687.     AH = FFh
  13688.     DX = scan code
  13689. Return: AL = status
  13690.         00h success
  13691.         01h failure
  13692. Note:    KBUF is a keyboard buffer expander by Mark Adler
  13693. SeeAlso: AH=05h
  13694. ----------16FF-------------------------------
  13695. INT 16 - OPTIMA 1024 VGA-Sync - QUERY ZOOM INTERRUPT
  13696.     AH = FFh
  13697. Return: AL = interrupt number to which BIOS keyboard handler has been relocated
  13698.     AL+1 = Zoom interrupt number
  13699.     BX = hotkey
  13700. Note:    The default interrupts are 60h for keyboard and 61h for Zoom interrupt;
  13701.       the default hot key is F10
  13702. SeeAlso: INT 60"OPTIMA"
  13703. ----------16FF70-----------------------------
  13704. INT 16 U - PC Tools v8+ DRIVEMAP - API???
  13705.     AX = FF70h
  13706.     BX = function (0000h-0002h)
  13707.     ???
  13708. Return: ???
  13709. BUG:    this call will branch to random locations on BX=0003h-5CD6h under v8.0
  13710.       due to range-testing the wrong register
  13711. SeeAlso: INT 2F/AH=92h"DRIVEMAP"
  13712. ----------16FF80-----------------------------
  13713. INT 16 U - PC Tools v8+ CPTASK - API
  13714.     AX = FF80h
  13715.     BX = function (0000h-0009h or 4350h ['CP'])
  13716.     ???
  13717. Return: ???
  13718. ----------16FF90-----------------------------
  13719. INT 16 U - PC Tools v8+ DESKTOP - ???
  13720.     AX = FF90h
  13721.     ???
  13722. Return: ???
  13723. Note:    available only when popped up
  13724. ----------16FF91-----------------------------
  13725. INT 16 U - PC Tools v7+ DESKTOP - ???
  13726.     AX = FF91h
  13727.     ???
  13728. Return: AX = 0000h
  13729. Note:    calls AX=FFFDh after ???
  13730. SeeAlso: AX=FF92h,AX=FFFDh
  13731. ----------16FF92-----------------------------
  13732. INT 16 U - PC Tools v7+ DESKTOP - ???
  13733.     AX = FF92h
  13734.     ???
  13735. Return: AX = 0000h
  13736. Note:    like AX=FF91h, but temporarily sets ??? to 3
  13737. SeeAlso: AX=FF91h,AX=FF92h
  13738. ----------16FF93-----------------------------
  13739. INT 16 U - PC Tools v7+ DESKTOP - SET ??? FLAG
  13740.     AX = FF93h
  13741. ----------16FF94-----------------------------
  13742. INT 16 U - PC Tools v7+ DESKTOP - SET ???
  13743.     AX = FF94h
  13744.     CX = ??? (default 0017h)
  13745. ----------16FF95-----------------------------
  13746. INT 16 U - PC Tools v7+ DESKTOP - SET ???
  13747.     AX = FF95h
  13748.     BX = ???
  13749. ----------16FF96-----------------------------
  13750. INT 16 U - PC Tools v7+ DESKTOP - ???
  13751.     AX = FF96h
  13752.     CL = ???
  13753. Return: AX = ???
  13754. ----------16FF97-----------------------------
  13755. INT 16 U - PC Tools v7+ DESKTOP - ???
  13756.     AX = FF97h
  13757.     DS:DX -> buffer for ??? (see below)
  13758. Return: ???
  13759.  
  13760. Format of buffer:
  13761. Offset    Size    Description
  13762.  00h 48 BYTEs    ???
  13763.  30h 128 BYTEs    ???
  13764. ----------16FF98-----------------------------
  13765. INT 16 U - PC Tools v7+ DESKTOP - OPEN \DESK.OVL FILE AND SEEK TO OVERLAY
  13766.     AX = FF98h
  13767.     DX = byte offset in file of overlay header
  13768. Return: BX = file handle for DESK.OVL file
  13769. Desc:    open the DESK.OVL file, seek to the specified offset, read in the
  13770.       overlay header, and seek to the offset specified by the header
  13771.  
  13772. Format of overlay header:
  13773. Offset    Size    Description
  13774.  00h 12 BYTEs    NUL-padded ASCII overlay filename
  13775.  0Ch    DWORD    offset within DESK.OVL file of actual overlay
  13776. ----------16FF99-----------------------------
  13777. INT 16 U - PC Tools v7+ DESKTOP - ???
  13778.     AX = FF99h
  13779.     ???
  13780. Return: ???
  13781. ----------16FF9A-----------------------------
  13782. INT 16 U - PC Tools v7+ DESKTOP - GET NAME OF COLOR SCHEME
  13783.     AX = FF9Ah
  13784. Return: ES:BX -> name of current color scheme
  13785. Note:    available even if not popped up
  13786. ----------16FF9B-----------------------------
  13787. INT 16 U - PC Tools v7+ DESKTOP - UNUSED
  13788.     AX = FF9Bh
  13789. Return: ???
  13790. Note:    sounds triple-length beep
  13791. ----------16FF9C-----------------------------
  13792. INT 16 U - PC Tools v8+ CPTASK - ???
  13793.     AX = FF9Ch
  13794.     BL = ??? (00h,01h)
  13795.     ???
  13796. Return: ???
  13797. Note:    sounds triple-length beep
  13798. ----------16FF9D-----------------------------
  13799. INT 16 U - PC Tools v8+ CPTASK, VSAFE - ???
  13800.     AX = FF9Dh
  13801.     ES:BX -> ??? word
  13802. Return: ???
  13803. Note:    if ES is non-zero, the word pointed at by ES:BX determines whether the
  13804.       ??? flag is cleared (word = 0000h) or set (word is nonzero).    The
  13805.       flag is always cleared if ES=0000h.
  13806. ----------16FF9E-----------------------------
  13807. INT 16 U - PC Tools v7+ DESKTOP - ???
  13808.     AX = FF9Eh
  13809.     DL = ???
  13810.         bit 7: ???
  13811.         bits 6-0: function number??? (00h,01h,other)
  13812.     ???
  13813. Return: ???
  13814. ----------16FFA1-----------------------------
  13815. INT 16 U - PC Tools v7+ DESKTOP - ???
  13816.     AX = FFA1h
  13817.     ???
  13818. Return: ???
  13819. Note:    same as AX=FFA2h, except ??? set to FFh
  13820. SeeAlso: AX=FFA2h
  13821. ----------16FFA2-----------------------------
  13822. INT 16 U - PC Tools v7+ DESKTOP - ???
  13823.     AX = FFA2h
  13824.     ???
  13825. Return: ???
  13826. Note:    calls AX=FFC7h (remove window) and AX=FFFDh
  13827. SeeAlso: AX=FFA1h,AX=FFC7h,AX=FFFDh
  13828. ----------16FFA3BX0000-----------------------
  13829. INT 16 U - PC Tools v7+ DATAMON - INSTALLATION CHECK
  13830.     AX = FFA3h
  13831.     BX = 0000h
  13832.     CX = 0000h
  13833. Return: AX = segment of resident code
  13834.     BX = 5555h
  13835.     CX = 5555h
  13836. ----------16FFA3BX0001-----------------------
  13837. INT 16 U - PC Tools v7+ DATAMON - GET ???
  13838.     AX = FFA3h
  13839.     BX = 0001h
  13840.     CX = 0001h
  13841. Return: AX:BX -> ???
  13842.     CX = BX
  13843. ----------16FFA3BX0002-----------------------
  13844. INT 16 U - PC Tools v7+ DATAMON - GET ???
  13845.     AX = FFA3h
  13846.     BX = 0002h
  13847.     CX = 0002h
  13848. Return: AX = ??? (0 or 1)
  13849.     CX = BX = AX
  13850. ----------16FFA3BX0003-----------------------
  13851. INT 16 U - PC Tools v7+ DATAMON - GET ???
  13852.     AX = FFA3h
  13853.     BX = 0003h
  13854.     CX = 0003h
  13855. Return: AX = ??? (0 or 1)
  13856.     CX = BX = AX
  13857. ----------16FFA3BX0004-----------------------
  13858. INT 16 U - PC Tools v7+ DATAMON - SET ??? FLAG
  13859.     AX = FFA3h
  13860.     BX = 0004h
  13861.     CX = 0004h
  13862. SeeAlso: AX=FFA3h/BX=0005h
  13863. ----------16FFA3BX0005-----------------------
  13864. INT 16 U - PC Tools v7+ DATAMON - CLEAR ??? FLAG
  13865.     AX = FFA3h
  13866.     BX = 0005h
  13867.     CX = 0005h
  13868. SeeAlso: AX=FFA3h/BX=0004h
  13869. ----------16FFA3BX0006-----------------------
  13870. INT 16 U - PC Tools v7+ DATAMON - SET PSP SEGMENT ???
  13871.     AX = FFA3h
  13872.     BX = 0006h
  13873.     CX = 0006h
  13874.     DX = current PSP segment as known to DOS??? or 0000h
  13875. ----------16FFA4-----------------------------
  13876. INT 16 U - PC Tools v7+ DESKTOP - ???
  13877.     AX = FFA4h
  13878. Return: ???
  13879. Notes:    available even when not popped up
  13880.     sets unknown flag if ??? conditions met
  13881. SeeAlso: AX=FEA4h
  13882. ----------16FFA5CX1111-----------------------
  13883. INT 16 - PC-Cache v6+ - INSTALLATION CHECK
  13884.     AX = FFA5h
  13885.     CX = 1111h
  13886. Return: CH = 00h if installed
  13887.         ES:DI -> internal data (see below)
  13888.         CL = cache state
  13889.         01h enabled
  13890.         02h disabled
  13891. SeeAlso: INT 13/AH=A0h,INT 21/AH=2Bh/CX=4358h
  13892.  
  13893. Format of internal data:
  13894. Offset    Size    Description
  13895. -1Ch 20 BYTEs    cached drive list, one byte per drive A: to T:
  13896.         each byte is either blank (20h) or drive letter (41h-54h)
  13897.  -8    BYTE    ???
  13898.  -7    WORD    number of physical transfers (scaled down to 0000h-7FFFh)
  13899.  -5    WORD    number of saved transfers (scaled down to 0000h-7FFFh)
  13900.  -3   3 BYTEs    ???
  13901. ----------16FFA5CXAAAA-----------------------
  13902. INT 16 - PC-Cache v6+ - ENABLE DELAYED WRITES
  13903.     AX = FFA5h
  13904.     CX = AAAAh
  13905. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  13906. SeeAlso: AX=FFA5h/CX=CCCCh
  13907. ----------16FFA5CXCCCC-----------------------
  13908. INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES
  13909.     AX = FFA5h
  13910.     CX = CCCCh
  13911. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  13912. Note:    delayed writes are automatically disabled on EXECing
  13913.       (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??;
  13914.       however, delayed writes are not automatically reenabled upon the
  13915.       program's termination in v6.
  13916. SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh
  13917. ----------16FFA5CXDDDD-----------------------
  13918. INT 16 - PC-Cache v6+ - FLUSH AND DISABLE CACHE
  13919.     AX = FFA5h
  13920.     CX = DDDDh
  13921. SeeAlso: AX=FFA5h/CX=EEEEh,AX=FFA5h/CX=FFFFh
  13922. ----------16FFA5CXEEEE-----------------------
  13923. INT 16 - PC-Cache v6+ - ENABLE CACHE
  13924.     AX = FFA5h
  13925.     CX = EEEEh
  13926. SeeAlso: AX=FFA5h/CX=DDDDh
  13927. ----------16FFA5CXFFFF-----------------------
  13928. INT 16 - PC-Cache v6+ - FLUSH CACHE
  13929.     AX = FFA5h
  13930.     CX = FFFFh
  13931. SeeAlso: AX=FFA5h/CX=CCCCh,AX=FFA5h/CX=DDDDh,INT 13/AH=A1h
  13932. ----------16FFA6-----------------------------
  13933. INT 16 U - PC Tools v6.0+ DESKTOP API - GET ???
  13934.     AX = FFA6h
  13935. Return: DS:SI -> ???
  13936. Note:    available only when popped up
  13937. ----------16FFA7-----------------------------
  13938. INT 16 U - PC Tools v6.0+ DESKTOP API - GET ??? PATH
  13939.     AX = FFA7h
  13940. Return: DS:SI -> ASCIZ path (directory from which PCTools was run???)
  13941. ----------16FFA8-----------------------------
  13942. INT 16 U - PC Tools v6.0+ DESKTOP API - ???
  13943.     AX = FFA8h
  13944.     DS:SI -> three consecutive ASCIZ strings for ??? (max 256 bytes total)
  13945.     ???
  13946. Return: ???
  13947. Notes:    available only when popped up
  13948.     strings copied into internal buffer, among other actions
  13949. ----------16FFA9-----------------------------
  13950. INT 16 U - PC Tools v6.0+ DESKTOP API - GET VERSION STRING
  13951.     AX = FFA9h
  13952. Return: DS:SI -> version string
  13953. ----------16FFAA-----------------------------
  13954. INT 16 U - PC Tools v6.0+ DESKTOP API - ???
  13955.     AX = FFAAh
  13956.     ???
  13957. Return: ???
  13958. Note:    available only when popped up
  13959. ----------16FFAB-----------------------------
  13960. INT 16 U - PC Tools v6.0+ DESKTOP API - GET EDITOR SETTINGS???
  13961.     AX = FFABh
  13962. Return: DS:SI -> editor setting strings???
  13963. ----------16FFAC-----------------------------
  13964. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  13965.     AX = FFACh
  13966.     DL = ???
  13967. Note:    available only when popped up
  13968. ----------16FFAD-----------------------------
  13969. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  13970.     AX = FFADh
  13971.     DL = ???
  13972. ----------16FFAE-----------------------------
  13973. INT 16 U - PC Tools v6.0+ DESKTOP API - GET ???
  13974.     AX = FFAEh
  13975. Return: AL = ???
  13976. ----------16FFAF-----------------------------
  13977. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  13978.     AX = FFAFh
  13979.     DL = ???
  13980. ----------16FFB0-----------------------------
  13981. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  13982.     AX = FFB0h
  13983.     BL = ???
  13984. ----------16FFB1-----------------------------
  13985. INT 16 U - PC Tools v6.0+ DESKTOP API - ???
  13986.     AX = FFB1h
  13987.     ???
  13988. Return: ???
  13989. ----------16FFB2-----------------------------
  13990. INT 16 U - PC Tools v5.5+ DESKTOP API - GET ???
  13991.     AX = FFB2h
  13992. Return: DS:SI -> ???
  13993. ----------16FFB3-----------------------------
  13994. INT 16 U - PC Tools v5.5+ DESKTOP API - ???
  13995.     AX = FFB3h
  13996.     ???
  13997. Return: ???
  13998. Note:    available only when popped up
  13999. ----------16FFB4-----------------------------
  14000. INT 16 U - PC Tools v5.5+ DESKTOP API - SET ??? FLAG
  14001.     AX = FFB4h
  14002. Note:    available only when popped up
  14003. SeeAlso: AX=FFBBh
  14004. ----------16FFB5-----------------------------
  14005. INT 16 U - PC Tools v5.5+ DESKTOP API - GET/SET WINDOW PARAMETERS
  14006.     AX = FFB5h
  14007.     BX = window specifier (000Fh to 0019h) (see below)
  14008.     DX = 0000h get, nonzero = set
  14009.     ES:DI -> window parameter buffer (see below)
  14010. SeeAlso: AX=FFCBh
  14011.  
  14012. Values for window specifier:
  14013.  000Fh    comm/FAX
  14014.  0014h    hotkey selection
  14015.  0015h    ASCII table
  14016.  0016h    system colors menu
  14017.  
  14018. Format of window parameters:
  14019. Offset    Size    Description
  14020.  00h    BYTE    rows in window, not counting frame
  14021.  01h    BYTE    columns in window, not counting frame
  14022.  02h    BYTE    row number of top of window
  14023.  03h    BYTE    2*column number of left of window
  14024.  04h    BYTE    character attribute for ???
  14025.  05h    BYTE    character attribute for background/border
  14026.  06h    BYTE    character attribute for ???
  14027.  07h    DWORD    pointer to ??? on screen
  14028.  0Bh  4 BYTEs    ???
  14029.  0Fh    BYTE    nonzero if window may be resized
  14030. Note:    if running in monochrome mode, character attributes at offsets 04h to
  14031.       06h are stored unchanged, but attributes other than 07h, 0Fh, or 70h
  14032.       are changed to 07h on reading
  14033. ----------16FFB6-----------------------------
  14034. INT 16 U - PC Tools v5.5+ DESKTOP API - GET ???
  14035.     AX = FFB6h
  14036. Return: AH = ???
  14037.     AL = ???
  14038. ----------16FFB7-----------------------------
  14039. INT 16 U - PC Tools v5.5+ DESKTOP API - GET/SET ???
  14040.     AX = FFB7h
  14041.     BX = direction
  14042.         0000h copy to buffer
  14043.         else  copy from buffer
  14044.     DS:SI -> 70-byte buffer with ???
  14045. Return: data copied
  14046. Note:    available only when popped up under v6.0+
  14047. ----------16FFB8-----------------------------
  14048. INT 16 U - PC Tools v5.1+ DESKTOP API - GET/SET???
  14049.     AX = FFB8h
  14050.     BH = subfunction
  14051.         00h get
  14052.         Return: BL = old value of ???
  14053.             CL = old value of ??? (v6.0+)
  14054.             CH = old value of ??? (v6.0+)
  14055.         nonzero set
  14056.         BL = new value for ???
  14057.         CL = new value for ??? (v6.0+)
  14058.         CH = new value for ??? (v6.0+)
  14059.         DH = ???
  14060.         Return: AL = old value replaced by CL (v6.0+)
  14061.             AH = old value replaced by CH (v6.0+)
  14062. ----------16FFB9-----------------------------
  14063. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14064.     AX = FFB9h
  14065.     ???
  14066. Return: AX = ???
  14067.     CX = ???
  14068.     DS:SI -> ???
  14069.     ES:DI -> ???
  14070. ----------16FFBA-----------------------------
  14071. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14072.     AX = FFBAh
  14073.     ???
  14074. Return: AX = ???
  14075. Note:    available only when popped up
  14076. ----------16FFBB-----------------------------
  14077. INT 16 U - PC Tools v5.1+ DESKTOP API - CLEAR ??? FLAG
  14078.     AX = FFBBh
  14079. Note:    available only when popped up
  14080. SeeAlso: AX=FFB4h
  14081. ----------16FFBC-----------------------------
  14082. INT 16 U - PC Tools v5.1+ DESKTOP API - RESTORE ORIGINAL SCREEN???
  14083.     AX = FFBCh
  14084. ----------16FFBD-----------------------------
  14085. INT 16 U - PC Tools v5.1+ DESKTOP API - ??? DATABASE INDEXING MESSAGES
  14086.     AX = FFBDh
  14087.     ???
  14088. Return: ???
  14089. ----------16FFBE-----------------------------
  14090. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14091.     AX = FFBEh
  14092.     ???
  14093. Return: ???
  14094. Note:    available only when popped up
  14095. ----------16FFBF-----------------------------
  14096. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14097.     AX = FFBFh
  14098.     BX = DOS file handle to write on
  14099.     ???
  14100. Return: ???
  14101. Note:    available only when popped up
  14102. ----------16FFC0-----------------------------
  14103. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14104.     AX = FFC0h
  14105.     ???
  14106. Return: AX = 0000h if successful
  14107.     AX = FFFFh on error
  14108. Note:    available only when popped up
  14109. ----------16FFC1-----------------------------
  14110. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14111.     AX = FFC1h
  14112.     BL = ???
  14113.     ES:DI -> data structure (see below)
  14114.     ???
  14115. Return: AX = ???
  14116. Note:    available only when popped up
  14117. SeeAlso: AX=FFC2h,AX=FFC3h
  14118.  
  14119. Format of data structure:
  14120. Offset    Size    Description
  14121.  00h    WORD    ???
  14122.  02h    WORD    ???
  14123.  04h    WORD    ???
  14124.  06h    WORD    ???
  14125.  08h    WORD    ???
  14126.  0Ah    BYTE    ???
  14127.  0Bh    BYTE    ??? (zero/nonzero)
  14128. ---v7.1---
  14129.  0Ch    WORD    ???
  14130.  0Eh    BYTE    ???
  14131.  0Fh    WORD    ???
  14132.  11h    WORD    ???
  14133.     ???
  14134. ----------16FFC2-----------------------------
  14135. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14136.     AX = FFC2h
  14137.     BL = ???
  14138.     ES:DI -> data structure (see AX=FFC1h)
  14139.     ???
  14140. Return: AH = ???
  14141.     CX = ???
  14142.     DH = ???
  14143.     DL = ???
  14144. Note:    available only when popped up
  14145. SeeAlso: AX=FFC1h,AX=FFC3h
  14146. ----------16FFC3-----------------------------
  14147. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14148.     AX = FFC3h
  14149.     BL = ???
  14150.     ES:DI -> data structure (see AX=FFC1h)
  14151.     ???
  14152. Return: AH = ???
  14153.     CX = ???
  14154.     DH = ???
  14155.     DL = ???
  14156. Note:    available only when popped up
  14157. SeeAlso: AX=FFC1h,AX=FFC2h
  14158. ----------16FFC4-----------------------------
  14159. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  14160.     AX = FFC4h
  14161. Return: AL = ???
  14162.     BX = segment of scratch space???
  14163.     CX = segment of stored screen data (section covered by window???)
  14164.     DX = segment of window parameters for ???
  14165.     ES:BP -> ???
  14166. Note:    available only when popped up in versions prior to 6.0
  14167. ----------16FFC5-----------------------------
  14168. INT 16 U - PC Tools v5.1+ DESKTOP API - CHECK WHETHER DESKTOP LOADED RESIDENT
  14169.     AX = FFC5h
  14170. Return: BL = nonzero if loaded resident
  14171.        = 00h if nonresident
  14172. Note:    available only when popped up; should call AX=FFEFh first to ensure
  14173.       that DESKTOP is active
  14174. SeeAlso: AX=FFEFh,AX=FFF3h
  14175. ----------16FFC6-----------------------------
  14176. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  14177.     AX = FFC6h
  14178.     BL = new value for ???
  14179. ----------16FFC7-----------------------------
  14180. INT 16 U - PC Tools v5.1+ DESKTOP API - REMOVE WINDOW
  14181.     AX = FFC7h
  14182.     ???
  14183. Return: ???
  14184. ----------16FFC8-----------------------------
  14185. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  14186.     AX = FFC8h
  14187. Return: DS:SI -> ???
  14188. Note:    valid only while popped up
  14189. ----------16FFC9-----------------------------
  14190. INT 16 U - PC Tools v5.1+ DESKTOP API - COPY DATA TO CLIPBOARD
  14191.     AX = FFC9h
  14192.     DS:SI -> characters to store in clipboard
  14193.     CX = size in bytes
  14194. Return: CF set on error
  14195. Notes:    available only when popped up
  14196.     while copying, bytes of 00h and 0Ah are skipped
  14197. ----------16FFCA-----------------------------
  14198. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  14199.     AX = FFCAh
  14200.     DX = ???
  14201. Return: AX destroyed
  14202. Note:    available only when popped up
  14203. ----------16FFCB-----------------------------
  14204. INT 16 U - PC Tools v5.1+ DESKTOP API - SELECT WINDOW PARAMETERS???
  14205.     AX = FFCBh
  14206.     DX = window specifier???
  14207. Return: AX destroyed
  14208. Note:    available only when popped up
  14209. SeeAlso: AX=FFB5h
  14210. ----------16FFCC-----------------------------
  14211. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY ASCIZ STRING CENTERED IN WINDOW
  14212.     AX = FFCCh
  14213.     DS:SI -> ASCIZ string
  14214. Return: AX = ???
  14215.     CX = ???
  14216.     ES:DI -> address past last character displayed (v5.1/5.5)
  14217.           -> ??? on menu bar (v6.0)
  14218. ----------16FFCD-----------------------------
  14219. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14220.     AX = FFCDh
  14221.     DS:DX -> ???
  14222. Return: ???
  14223. Note:    available only when popped up
  14224. ----------16FFCE-----------------------------
  14225. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ??? DELAYS
  14226.     AX = FFCEh
  14227.     CX = ???
  14228. Return: nothing???
  14229. ----------16FFCF-----------------------------
  14230. INT 16 U - PC Tools v5.1+ DESKTOP API - CLOSE PRINTER/PRINT FILE
  14231.     AX = FFCFh
  14232. Note:    available only when popped up
  14233. ----------16FFD0-----------------------------
  14234. INT 16 U - PC Tools v5.1+ DESKTOP API - PREPARE TO PRINT???
  14235.     AX = FFD0h
  14236.     ???
  14237. Return: ???
  14238. Note:    available only when popped up
  14239. ----------16FFD1-----------------------------
  14240. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY PRINT OPTIONS MENU
  14241.     AX = FFD1h
  14242. Return: BX = number of copies
  14243.     DX = destination
  14244.         00h cancel
  14245.         01h LPT1
  14246.         02h LPT2
  14247.         03h    LPT3
  14248.         04h    COM1
  14249.         05h    COM2
  14250.         06h disk file
  14251. Note:    available only when popped up
  14252. ----------16FFD2-----------------------------
  14253. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14254.     AX = FFD2h
  14255.     BX = ???
  14256. Return: BL = ???
  14257. Note:    available only when popped up
  14258. ----------16FFD3-----------------------------
  14259. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14260.     AX = FFD3h
  14261.     DS:SI -> 92-byte data record for ???
  14262. Return: ???
  14263. SeeAlso: AX=FED3h
  14264. ----------16FFD4BH3C-------------------------
  14265. INT 16 U - PC Tools v5.1+ DESKTOP API - CREATE/OPEN/DELETE FILE
  14266.     AX = FFD4h
  14267.     BH = 3Ch create file (with no attributes)
  14268.          3Dh open file
  14269.          41h delete file
  14270.     BL = access mode
  14271.          00h read only
  14272.          01h write only
  14273.          02h read/write
  14274.     DS:SI -> ASCIZ filename
  14275. Return: BX = file handle
  14276.         0000h on error
  14277. Note:    operation is attempted in (in order) the directory from which the
  14278.       desktop was started/run???, the directory specified with the
  14279.       filename, X:\PCTOOLS\, and X:\
  14280. ----------16FFD5-----------------------------
  14281. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14282.     AX = FFD5h
  14283.     ???
  14284. Return: ???
  14285. Note:    available only when popped up
  14286. ----------16FFD6-----------------------------
  14287. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14288.     AX = FFD6h
  14289.     BX = ???
  14290.     CX = ???
  14291.     DX = offset in ???
  14292.     ???
  14293. Return: ???
  14294. Note:    available only when popped up
  14295. ----------16FFD7-----------------------------
  14296. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14297.     AX = FFD7h
  14298.     ???
  14299. Return: BL = ???
  14300. Note:    available only when popped up
  14301. ----------16FFD8-----------------------------
  14302. INT 16 U - PC Tools v5.1+ DESKTOP API - SAFE CREATE FILE
  14303.     AX = FFD8h
  14304.     DS:BX -> ASCIZ filename
  14305. Return: BX = file handle
  14306.         0000h on error
  14307. Note:    pops up confirmation menu if file already exists
  14308.     only available when popped up???
  14309. ----------16FFD9-----------------------------
  14310. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  14311.     AX = FFD9h
  14312. Return: AX = ???
  14313. Note:    available only when popped up
  14314. ----------16FFDA-----------------------------
  14315. INT 16 U - PC Tools v5.1+ DESKTOP API - GET NAME OF LAST FILE OPENED
  14316.     AX = FFDAh
  14317.     DS:SI -> ??? (v5.1/5.5 only)
  14318. Return: DS:SI -> filename
  14319. ----------16FFDB-----------------------------
  14320. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  14321.     AX = FFDBh
  14322.     BL = ???
  14323. Note:    available only when popped up
  14324. ----------16FFDC-----------------------------
  14325. INT 16 U - PC Tools v5.1+ DESKTOP API - UNHOOK
  14326.     AX = FFDCh
  14327. Return: interrupt vectors 09h, 10h (v6.0+), 16h, 1Ch, and 21h restored to
  14328.       original values
  14329. ----------16FFDDBX0000-----------------------
  14330. INT 16 U - PC Tools v5.1+ PCShell API - INSTALLATION CHECK
  14331.     AX = FFDDh
  14332.     BX = 0000h
  14333. Return: CX = 5555h 
  14334.     DX = 5555h if PCShell installed in resident mode
  14335. ----------16FFDDBX0001-----------------------
  14336. INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  14337.     AX = FFDDh
  14338.     BX = 0001h
  14339. Return: CF clear if request successful (PCShell will pop up)
  14340.     CF set on error
  14341. SeeAlso: AX=FFDDh/BX=0003h
  14342. ----------16FFDDBX0002-----------------------
  14343. INT 16 U - PC Tools v5.1-5.5 PCShell API - GET ???
  14344.     AX = FFDDh
  14345.     BX = 0002h
  14346. Return: AL = 
  14347.         00h ???
  14348.         01h ???
  14349. Note:    PCShell v6.0+ displays the error message "Incorrect PCRUN version",
  14350.       awaits a keystroke, and aborts the current process
  14351. ----------16FFDDBX0003-----------------------
  14352. INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  14353.     AX = FFDDh
  14354.     BX = 0003h
  14355. SeeAlso: AX=FFDDh/BX=0001h
  14356. ----------16FFDDBX0004-----------------------
  14357. INT 16 U - PC Tools v5.1+ PCShell API - GET ???
  14358.     AX = FFDDh
  14359.     BX = 0004h
  14360. Return: CF clear if successful
  14361.         DS:SI -> ???
  14362. ----------16FFDDBX0005-----------------------
  14363. INT 16 U - PC Tools v5.1+ PCShell API - ???
  14364.     AX = FFDDh
  14365.     BX = 0005h
  14366.     ???
  14367. Return: ???
  14368. Note:    resets various variables if certain conditions are met
  14369. ----------16FFDDBX0006-----------------------
  14370. INT 16 U - PC Tools v5.1+ PCShell API - ???
  14371.     AX = FFDDh
  14372.     BX = 0006h
  14373.     ???
  14374. Return: ???
  14375. Note:    resets various variables if certain conditions are met
  14376. ----------16FFDDBX0007-----------------------
  14377. INT 16 U - PC Tools v5.1+ PCShell API - SET ??? FLAG
  14378.     AX = FFDDh
  14379.     BX = 0007h
  14380. Return: CF clear if successful
  14381. SeeAlso: AX=FFDDh/BX=0008h
  14382. ----------16FFDDBX0008-----------------------
  14383. INT 16 U - PC Tools v5.1+ PCShell API - CLEAR ??? FLAG
  14384.     AX = FFDDh
  14385.     BX = 0008h
  14386. Return: CF undefined
  14387. SeeAlso: AX=FFDDh/BX=0007h
  14388. ----------16FFDDBX0009-----------------------
  14389. INT 16 U - PC Tools v6.0+ PCShell API - GET PCRUN PARAMETERS
  14390.     AX = FFDDh
  14391.     BX = 0009h
  14392. Return: CF clear if successful
  14393.         DS:SI -> list of pointers (see below)
  14394.  
  14395. Format of returned pointer list:
  14396. Offset    Size    Description
  14397.  00h    WORD    offset of WORD containing ???
  14398.  02h    WORD    offset of name of program to execute
  14399.  04h    WORD    offset of 80-byte buffer for ???
  14400.  06h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  14401.  08h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  14402. ----------16FFDDBX000A-----------------------
  14403. INT 16 U - PC Tools v6.0+ PCRUN API - INSTALLATION CHECK
  14404.     AX = FFDDh
  14405.     BX = 000Ah
  14406. Return: CX = 5555h if running
  14407.     DX = 5555h
  14408. Note:    also sets a flag
  14409. ----------16FFDDBX000B-----------------------
  14410. INT 16 U - PC Tools v6.0+ PCRUN API - ???
  14411.     AX = FFDDh
  14412.     BX = 000Bh
  14413.     ???
  14414. Return: CX = 5555h if PCRUN active
  14415.     DX = 5555h
  14416. Note:    also clears flag set by AX=FFDDh/BX=000Ah
  14417. ----------16FFDE-----------------------------
  14418. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY POPUP MENU
  14419.     AX = FFDEh
  14420.     DS:DX -> menu description (must be on a paragraph boundary)
  14421. Return: AX = ???
  14422.         AL seems to be the number of the selected button
  14423. Note:    available only when popped up
  14424. SeeAlso: AX=FFEEh
  14425. ----------16FFDF-----------------------------
  14426. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14427.     AX = FFDFh
  14428.     ???
  14429. Return: ???
  14430. ----------16FFE0-----------------------------
  14431. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14432.     AX = FFE0h
  14433.     CX = ???
  14434.     DX = ???
  14435. Note:    available only when popped up
  14436. ----------16FFE1-----------------------------
  14437. INT 16 U - PC Tools v5.1+ DESKTOP API - BEEP
  14438.     AX = FFE1h
  14439. ----------16FFE2-----------------------------
  14440. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14441.     AX = FFE2h
  14442.     DX = ???
  14443. Return: ???
  14444. Note:    available only when popped up
  14445. ----------16FFE3-----------------------------
  14446. INT 16 U - PC Tools v5.1+ DESKTOP API - PRINT CHARACTER
  14447.     AX = FFE3h
  14448.     BL = character to print to currently open printer or print file
  14449. Return: CF set on error
  14450. Note:    available only when popped up
  14451. SeeAlso: INT 17/AH=00h
  14452. ----------16FFE4-----------------------------
  14453. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14454.     AX = FFE4h
  14455.     DX = segment of ???
  14456. Return: ???
  14457. Note:    available only when popped up
  14458. ----------16FFE5-----------------------------
  14459. INT 16 U - PC Tools v5.1+ DESKTOP API - POP UP FILE SELECTION MENU
  14460.     AX = FFE5h
  14461.     DS:SI -> ASCIZ wildcard filespec followed by ASCIZ menu title
  14462.     DX = segment of window parameters???
  14463. Return: AX = DOS file handle for file
  14464.         DS:DX -> filename???
  14465.        = FFFFh if cancelled by user
  14466. Note:    available only when popped up
  14467. SeeAlso: AX=FFDAh
  14468. ----------16FFE6-----------------------------
  14469. INT 16 U - PC Tools v5.1+ DESKTOP API - CHECK FOR AND GET KEYSTROKE
  14470.     AX = FFE6h
  14471. Return: AX = 0000h if no key available
  14472.          else  BIOS keycode
  14473. Notes:    available only when popped up
  14474.     invokes INT 28 idle interrupt before checking for key
  14475. ----------16FFE7-----------------------------
  14476. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14477.     AX = FFE7h
  14478.     BX = segment of ???
  14479. Return: ???
  14480. Note:    available only when popped up
  14481. ----------16FFE8-----------------------------
  14482. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY NUMBER
  14483.     AX = FFE8h
  14484.     CX = number
  14485.     DH = attribute
  14486.     DS:SI -> destination for ASCII number
  14487. Return: DS:SI buffer filled in with alternating characters and attributes
  14488. ----------16FFE9-----------------------------
  14489. INT 16 U - PC Tools v5.1+ DESKTOP API - GET FILE LIST???
  14490.     AX = FFE9h
  14491. Return: BX = segment of file/directory list (14 bytes per file, NUL-padded)
  14492. Note:    available only when popped up
  14493. ----------16FFEA-----------------------------
  14494. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY COUNTED STRING
  14495.     AX = FFEAh
  14496.     DS:SI -> counted string (count byte followed by string)
  14497. Return: ???
  14498. Note:    available only when popped up
  14499. ----------16FFEB-----------------------------
  14500. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14501.     AX = FFEBh
  14502.     ???
  14503. Return: ???
  14504. ----------16FFEC-----------------------------
  14505. INT 16 U - PC Tools v5.1+ DESKTOP API - GET KEY
  14506.     AX = FFECh
  14507.     DS:SI -> FAR routine to ???
  14508.     BX = ???
  14509.     ???
  14510. Return: AX = keystroke
  14511.         FFFFh if F10 pressed to go to menu
  14512. Notes:    available only when popped up
  14513.     invokes INT 28 while waiting for keystroke
  14514.     F10 is hotkey to Desktop menu
  14515. ----------16FFED-----------------------------
  14516. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  14517.     AX = FFEDh
  14518. Return: AX = ???
  14519. Note:    available only when popped up
  14520. ----------16FFEE-----------------------------
  14521. INT 16 U - PC Tools v5.1+ DESKTOP API - DEFINE PULLDOWN MENUS
  14522.     AX = FFEEh
  14523.     DS:SI -> pulldown menu system description (see below)
  14524. Return: AX destroyed
  14525. Notes:    available only when popped up
  14526.     if the accessory does not need any menu items of its own, it should
  14527.       call AX=FFFAh instead
  14528. SeeAlso: AX=FFF7h,AX=FFFAh
  14529.  
  14530. Format of pulldown menu system description:
  14531. Offset    Size    Description
  14532.  00h    WORD    offset of menu bar contents (counted string)
  14533.  02h    WORD    number of items on menu bar
  14534.  04h 10 BYTEs    scan codes for hotkeying to each of up to ten menu items
  14535.  0Eh 10    BYTEs    which character to highlight in each menu item (01h=first)
  14536.  18h    WORD    offset of first menu definition (see below)
  14537.  1Ah    WORD    offset of second menu definition
  14538.     ...
  14539.  
  14540. Format of menu definition:
  14541. Offset    Size    Description
  14542.  00h    WORD    offset of menu contents (see below)
  14543.  02h    WORD    number of entries in menu
  14544.  04h    for each entry:
  14545.         Offset    Size    Description
  14546.          00h    BYTE    scancode of Alt-key to invoke entry
  14547.          01h    BYTE    character to highlight (01h=first, etc)
  14548.          02h    WORD    offset of FAR routine to handle selection
  14549.  
  14550. Format of menu contents:
  14551. Offset    Size    Description
  14552.  00h    BYTE    number of lines in menu
  14553.  01h    BYTE    width of menu
  14554.  02h  N BYTEs    counted strings, one for each line in menu
  14555. ----------16FFEFCX0000-----------------------
  14556. INT 16 U - PC Tools v5.1+ DESKTOP API - INSTALLATION CHECK
  14557.     AX = FFEFh
  14558.     CX = 0000h
  14559. Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
  14560.         BX = segment of resident portion
  14561.         AX = ??? (v5.1/5.5 only)
  14562. SeeAlso: AX=FEEFh,AX=FFC5h,AX=FFF3h
  14563. ----------16FFF0-----------------------------
  14564. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  14565.     AX = FFF0h
  14566.     DX = ???
  14567. Return: AX destroyed
  14568. Note:    available only when popped up
  14569. ----------16FFF1BX0000-----------------------
  14570. INT 16 U - PC Tools v5.1+ DESKTOP API - ALTERNATE INSTALLATION CHECK
  14571.     AX = FFF1h
  14572.     BX = 0000h  leave ??? flag as is
  14573.         nonzero set ??? flag
  14574. Return: CX = 5555h if installed
  14575.     DX = 5555h
  14576. ----------16FFF2-----------------------------
  14577. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY HELP LINE
  14578.     AX = FFF2h
  14579.     DS:SI -> ASCIZ function key label string (each label preceded by '[')
  14580.         or help text
  14581. Return: AX destroyed
  14582. Notes:    available only when popped up
  14583.     if the specified string does not start with '[', it is displayed
  14584.       centered on the bottom line, else the function key labels are shown
  14585. ----------16FFF3-----------------------------
  14586. INT 16 U - PC Tools v5.1+ DESKTOP API - PREPARE TO UNLOAD RESIDENT DESKTOP
  14587.     AX = FFF3h
  14588. Note:    releases any EMS being used; restores video mode, page, and cursor
  14589.       shape; and restores interrupt vectors
  14590. SeeAlso: AX=FFC5h,AX=FFEFh
  14591. ----------16FFF4-----------------------------
  14592. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14593.     AX = FFF4h
  14594.     ???
  14595. Return: ???
  14596. Note:    available only when popped up
  14597. SeeAlso: AX=FFF6h
  14598. ----------16FFF5-----------------------------
  14599. INT 16 U - PC Tools v5.1+ DESKTOP API - GET SCREEN ATTRIBUTE ARRAY
  14600.     AX = FFF5h
  14601. Return: ES:BX -> screen attributes data structure (see below)
  14602.     AL = ??? (v6.0+)
  14603.  
  14604. Format of attribute data structure:
  14605. Offset    Size    Description
  14606.  -1    BYTE    attribute for desktop background
  14607.  00h    BYTE    attribute for normal characters on desktop menu
  14608.  01h    BYTE    attribute for highlighted characters on desktop menu
  14609.  02h  5    BYTEs    ???
  14610.  07h    BYTE    attribute for dialog boxes
  14611.  08h 15 BYTEs    ???
  14612.  17h    BYTE    attribute for message boxes
  14613. ----------16FFF6-----------------------------
  14614. INT 16 U - PC Tools v5.1+ DESKTOP API - INVOKE NOTEPAD EDITOR
  14615.     AX = FFF6h
  14616.     DS = segment of editor buffer structure (see below)
  14617.     BX = ???
  14618.     DX = segment of window parameters structure (see AX=FFB5h)
  14619. Return: ???
  14620. Note:    available only when popped up
  14621. SeeAlso: AX=FFF4h
  14622.  
  14623. Format of editor buffer structure:
  14624. Offset    Size    Description
  14625.  00h    WORD    offset of current cursor position in buffer segment
  14626.  02h  2 BYTEs    ???
  14627.  04h    WORD    offset of beginning of file data in buffer segment
  14628.  06h 10 BYTEs    ???
  14629.  10h  N BYTEs    ASCIZ name of file being edited
  14630. ----------16FFF7-----------------------------
  14631. INT 16 U - PC Tools v5.1+ DESKTOP API - PROCESS MENU BAR ENTRY???
  14632.     AX = FFF7h
  14633.     DS:SI -> ???
  14634.     ???
  14635. Return: ???
  14636. Notes:    available only when popped up
  14637.     performs input processing on the menu bar set up with AX=FFEEh
  14638. SeeAlso: AX=FFEEh,AX=FFFBh
  14639. ----------16FFF8-----------------------------
  14640. INT 16 U - PC Tools v5.1+ DESKTOP API - DRAW EMPTY WINDOW
  14641.     AX = FFF8h
  14642.     DS:0000h -> window parameters structure (see AX=FFB5h)
  14643.     DS:BX -> DWORD to store address of ??? on screen
  14644. Return: ???
  14645. ----------16FFF9-----------------------------
  14646. INT 16 U - PC Tools v5.1+ DESKTOP API - DEFINE SCREEN REFRESH ROUTINE
  14647.     AX = FFF9h
  14648.     ES:BX -> FAR routine to redisplay the utility's window
  14649. Note:    available only when popped up
  14650. ----------16FFFA-----------------------------
  14651. INT 16 U - PC Tools v5.1+ DESKTOP API - DEFINE STANDARD PULLDOWN MENUS
  14652.     AX = FFFAh
  14653. Notes:    available only when popped up
  14654.     adds the "Window" option to the "Desktop" option which is the only one
  14655.       available when no accessories are active.  Unlike AX=FFEEh, no
  14656.       additional menu items are added between "Desktop" and "Window"
  14657. SeeAlso: AX=FFEEh,AX=FFFBh
  14658. ----------16FFFB-----------------------------
  14659. INT 16 U - PC Tools v5.1+ DESKTOP API - PROCESS STANDARD MENU BAR
  14660.     AX = FFFBh
  14661. Return: ???
  14662. Notes:    available only when popped up
  14663.     performs input processing on the standard menu bar set up with AX=FFFAh
  14664. SeeAlso: AX=FFF7h
  14665. ----------16FFFC-----------------------------
  14666. INT 16 U - PC Tools v5.1+ DESKTOP API - GET HOTKEYS AND KEYBOARD VECTOR
  14667.     AX = FFFCh
  14668. Return: ES:BX -> hotkey table (see below)
  14669.     DS:DX = original INT 9 vector
  14670.  
  14671. Format of hotkey table:
  14672. Offset    Size    Description
  14673.  00h  2 BYTEs    scancode/shift state for desktop hotkey
  14674.  02h  2 BYTEs    scancode/shift state for clipboard paste key
  14675.  04h  2 BYTEs    scancode/shift state for clipboard copy key
  14676.  06h  2 BYTEs    scancode/shift state for screen autodial key
  14677. ----------16FFFD-----------------------------
  14678. INT 16 U - PC Tools v5.1+ DESKTOP API - COPY ???
  14679.     AX = FFFDh
  14680. Return: AX destroyed
  14681. Note:    copies 4000 bytes from ??? to ??? under certain circumstances
  14682. SeeAlso: AX=FF91h,AX=FF92h
  14683. ----------16FFFE-----------------------------
  14684. INT 16 U - PC Tools v5.1+ DESKTOP API - SHOW MOUSE CURSOR
  14685.     AX = FFFEh
  14686. SeeAlso: AX=FFFFh,INT 33/AX=0001h
  14687. ----------16FFFF-----------------------------
  14688. INT 16 U - PC Tools v5.1+ DESKTOP API - HIDE MOUSE CURSOR
  14689.     AX = FFFFh
  14690. SeeAlso: AX=FFFEh,INT 33/AX=0002h
  14691. ----------17----DX0ABC-----------------------
  14692. INT 17 - PRINTER - LPTx v5.x INSTALLATION CHECK
  14693.     DX = 0ABCh
  14694. Return: AX = AAAAh
  14695.     DX = BAAAh
  14696.     ES = code segment of resident portion
  14697. ----------17----DX0B90-----------------------
  14698. INT 17 - PRINTER - LPTx v6.x INSTALLATION CHECK
  14699.     DX = 0B90h
  14700. Return: DX = ABBBh
  14701.     ES = code segment of resident portion
  14702. ----------17----DX0B91-----------------------
  14703. INT 17 - PRINTER - LPTx v7.x INSTALLATION CHECK
  14704.     DX = 0B91h
  14705. Return: DX = ABCBh
  14706.     ES = code segment of resident portion
  14707. ----------17----DX0F5F-----------------------
  14708. INT 17 - PRINTER - LPTx v4.x INSTALLATION CHECK
  14709.     DX = 0F5Fh
  14710. Return: AX = AAAAh
  14711.     DX = F555h
  14712.     ES = code segment of resident portion
  14713. ----------1700-------------------------------
  14714. INT 17 - PRINTER - WRITE CHARACTER
  14715.     AH = 00h
  14716.     AL = character to write
  14717.     DX = printer number (00h-02h)
  14718. Return: AH = printer status
  14719.         bit 7: not busy
  14720.         6: acknowledge
  14721.         5: out of paper
  14722.         4: selected
  14723.         3: I/O error
  14724.         2: unused
  14725.         1: unused
  14726.         0: timeout
  14727. SeeAlso: AH=84h"AX",AH=F1h,INT 16/AX=FFE3h,INT 1A/AH=11h"NEC"
  14728. ----------1701-------------------------------
  14729. INT 17 - PRINTER - INITIALIZE PORT
  14730.     AH = 01h
  14731.     DX = printer number (00h-02h)
  14732. Return: AH = printer status (see AH=00h)
  14733. SeeAlso: AH=02h,INT 1A/AH=10h"NEC"
  14734. ----------1702-------------------------------
  14735. INT 17 - PRINTER - GET STATUS
  14736.     AH = 02h
  14737.     DX = printer number (00h-02h)
  14738. Return: AH = printer status (see AH=00h)
  14739. SeeAlso: AH=01h,AH=F2h,INT 1A/AH=12h"NEC"
  14740. ----------1702--DX0000-----------------------
  14741. INT 17 - INSET - INSTALLATION CHECK
  14742.     AH = 02h
  14743.     DX = 0000h
  14744.     CX = 07C3h (1987d)
  14745. Return: CX = 07C2h (1986d) if installed
  14746. Note:    INSET is a text/graphics integration program
  14747. ----------1720-------------------------------
  14748. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER
  14749.     AH = 20h
  14750.     AL = function number
  14751.         00h installation check
  14752.         Return: BX = driver version number (BH=major,BL=minor)
  14753.             CH = ??? (00h)
  14754.             CL = ???
  14755.             DX = ??? (0100h)
  14756.         Note: also enables the remaining functions
  14757.         01h set ??? flag
  14758.         02h get information
  14759.         CL = subfunction
  14760.             00h get printer type
  14761.             Return: ES:DI -> ASCIZ printer name
  14762.             01h get paper size
  14763.             DX = size index
  14764.             Return: ES:DI -> ASCIZ paper size description
  14765.             02h get ???
  14766.             Return: BX = ???
  14767.             03h get printer information???
  14768.             DX = ???
  14769.             ES:BX -> buffer for ??? (min 134 bytes)
  14770.         03h ???
  14771.         ES:BX -> ???
  14772.         04h get ???
  14773.         Return: ES:DI -> ???
  14774.         05h advance printer to next page
  14775.         Note: also clears flag set by function 01h
  14776.         06h advance printer to next page and shut down
  14777.         Note:    also clears flag set by function 01h and disables
  14778.               functions other than 00h
  14779.         07h not implemented, AX returned unchanged
  14780.     BL = printer number???
  14781. Return: AX = status
  14782.         0000h successful
  14783.         0001h invalid printer???
  14784.         0002h ???
  14785.         0003h invalid subfunction
  14786.         0005h driver disabled, must call function 00h first
  14787.         0009h unknown printer error
  14788.         000Bh printer not selected
  14789.         000Ch printer out of paper
  14790.         000Eh error while writing to serial printer
  14791.         000Fh ???
  14792.         0010h invalid function number
  14793.         0011h value out of range
  14794. ----------172400-----------------------------
  14795. INT 17 - Shamrock Software NET.24 v3.11+ - ENABLE/DISABLE API FUNCTIONS
  14796.     AX = 2400h
  14797.     DL = new state
  14798.         00h disabled
  14799.         01h enabled
  14800. Return: DL = 24h if installed
  14801.     DH = minor version number
  14802.     CX = network address of this machine
  14803.     AL = status
  14804.         00h successful
  14805.         01h timeout
  14806.         02h header error
  14807.         03h data error
  14808.         04h busy
  14809.         05h invalid parameters
  14810. SeeAlso: AX=2403h,INT 16/AX=4500h
  14811. ----------172401-----------------------------
  14812. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, NO HANDSHAKE
  14813.     AX = 2401h
  14814.     BL = timeout in clock ticks
  14815. Return: AL = status (see AX=2400h)
  14816.     DX:BX -> receive buffer
  14817. SeeAlso: AX=2402h,AX=2404h,AX=2408h
  14818. ----------172402-----------------------------
  14819. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT BLOCK, NO HANDSHAKE
  14820.     AX = 2402h
  14821.     transmit buffer filled (see AX=2403h)
  14822. Return: AL = status (see AX=2400h)
  14823. SeeAlso: AX=2401h,AX=2403h,AX=2404h,AX=2409h
  14824. ----------172403-----------------------------
  14825. INT 17 - Shamrock Software NET.24 v3.11+ - GET STATUS AND TRANSMISSION BUFFER
  14826.     AX = 2403h
  14827. Return: AL = status (see AX=2400h)
  14828.     CX = number of characters in receive ring buffer
  14829.     DX:BX -> transmit buffer
  14830. SeeAlso: AX=2400h,AX=2402h
  14831. ----------172404-----------------------------
  14832. INT 17 - Shamrock Software NET.24 v3.11+ - SEND ACK BLOCK
  14833.     AX = 2404h
  14834.     BX = target address
  14835. Return: AL = status (see AX=2400h)
  14836. SeeAlso: AX=2402h,AX=2405h
  14837. ----------172405-----------------------------
  14838. INT 17 - Shamrock Software NET.24 v3.11+ - SEND NAK BLOCK
  14839.     AX = 2405h
  14840.     BX = target address
  14841. Return: AL = status (see AX=2400h)
  14842. SeeAlso: AX=2402h,AX=2404h
  14843. ----------172406-----------------------------
  14844. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED RECEIVE
  14845.     AX = 2406h
  14846. Return: AL = status (see AX=2400h)
  14847. SeeAlso: AX=2407h,AX=240Ah
  14848. ----------172407-----------------------------
  14849. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE CHARACTER FROM REMOTE
  14850.     AX = 2407h
  14851. Return: AL = status (see also AX=2400h)
  14852.         06h end of data
  14853.     DL = received character
  14854. SeeAlso: AX=2406h
  14855. ----------172408-----------------------------
  14856. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, WITH HANDSHAKE
  14857.     AX = 2408h
  14858. Return: AL = status (see also AX=2400h)
  14859.         06h end of data
  14860.     CX = number of bytes in receive buffer
  14861.     DX:SI -> receive buffer
  14862. SeeAlso: AX=2401h,AX=2405h,AX=2409h
  14863. ----------172409-----------------------------
  14864. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT COMMAND, WITH HANDSHAKE
  14865.     AX = 2409h
  14866.     BX = target address
  14867.     CX = number of data bytes
  14868.     DL = command code to send
  14869.     DS:SI -> data bytes for command
  14870. Return: AL = status (see also AX=2400h)
  14871.         03h no response
  14872.         06h remote currently unable to perform command
  14873. SeeAlso: AX=2405h,AX=2408h
  14874. ----------17240A-----------------------------
  14875. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED TRANSMIT
  14876.     AX = 240Ah
  14877. Return: AL = status (see AX=2400h)
  14878. SeeAlso: AX=2406h,AX=240Bh,AX=240Ch
  14879. ----------17240B-----------------------------
  14880. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT SINGLE CHARACTER TO REMOTE
  14881.     AX = 240Bh
  14882.     DL = character to send
  14883. Return: AL = status (see also AX=2400h)
  14884.         03h transmission error
  14885.         06h write error
  14886. SeeAlso: AX=2407h,AX=240Ah,AX=240Ch
  14887. ----------17240C-----------------------------
  14888. INT 17 - Shamrock Software NET.24 v3.11+ - END CHARACTER-ORIENTED TRANSMIT
  14889.     AX = 240Ch
  14890. Return: AL = status (see also AX=2400h)
  14891.         03h transmission error
  14892.         06h remote breaks connection
  14893. SeeAlso: AX=240Ah,AX=240Bh
  14894. ----------175000-----------------------------
  14895. INT 17 - AX (Japanese AT) PRINTER - SET PRINTER COUNTRY CODE
  14896.     AX = 5000h
  14897.     BX = country code
  14898.         0001h USA (English), 0051h Japan
  14899. Return: AL = status
  14900.         00h successful
  14901.         01h bad country code
  14902.         02h other error
  14903. SeeAlso: AX=5001h,AH=51h,INT 10/AX=5000h,INT 16/AX=5000h
  14904. ----------175001-----------------------------
  14905. INT 17 - AX (Japanese AT) PRINTER - GET PRINTER COUNTRY CODE
  14906.     AX = 5001h
  14907. Return: AL = status
  14908.         00h successful
  14909.         BX = country code
  14910.         02h error
  14911. SeeAlso: AX=5000h,AH=51h,INT 10/AX=5001h,INT 16/AX=5001h
  14912. ----------1751-------------------------------
  14913. INT 17 - AX (Japanese AT) PRINTER - JIS to Shift-JIS CONVERSION
  14914.     AH = 51h
  14915.     DX = 2-byte JIS code
  14916. Return: DX = shift-JIS value or 0000h on error
  14917. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  14918.       characters to Shift-JIS characters, and the other performs the
  14919.       opposite conversion
  14920. SeeAlso: AX=5000h,AH=52h
  14921. ----------1752-------------------------------
  14922. INT 17 - AX (Japanese AT) PRINTER - Shift-JIS to JIS CONVERSION
  14923.     AH = 52h
  14924.     DX = 2-byte shift-JIS code
  14925. Return: DX = JIS code or 0000h on error
  14926. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  14927.       characters to Shift-JIS characters, and the other performs the
  14928.       opposite conversion
  14929. SeeAlso: AH=51h
  14930. ----------1760-------------------------------
  14931. INT 17 - FLASHUP.COM - INSTALLATION CHECK
  14932.     AH = 60h
  14933. Return: AL = 60h
  14934.     DX = CS of resident code
  14935. Notes:    FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co.
  14936.     FLASHUP also hooks INT 10 and receives commands via INT 10/AH=09h,0Ah
  14937.       consisting of an 80h followed by the actual command
  14938. SeeAlso: INT 10/AH=09h,INT 10/AH=0Ah
  14939. ----------1761-------------------------------
  14940. INT 17 - SPEEDSCR.COM - INSTALLATION CHECK
  14941.     AH = 61h
  14942. Return: AL = 61h
  14943.     DX = CS of resident code
  14944. Note:    SPEEDSCR.COM is by The Software Bottling Co.
  14945. ----------1781-------------------------------
  14946. INT 17 - Alloy NTNX, MW386 - CANCEL JOBS FOR CURRENT USER
  14947.     AH = 81h
  14948.     AL = 00h (NTNX compatibility mode)
  14949.     CL = number of jobs to cancel
  14950. Return: AL = status
  14951.         00h success
  14952.         01h..7Fh warning
  14953.         80h general failure
  14954.         81h host overloaded (NTNX only)
  14955.         82h module busy (NTNX only)
  14956.         83h host busy (NTNX only)
  14957.         84h re-entry flag set
  14958.         85h invalid request
  14959.         86h invalid printer
  14960.         87h invalid process ID
  14961.         89h access denied
  14962.         8Ah option not available for given port type
  14963.         8Bh option not available for given task type
  14964.         91h printer busy
  14965.         C2h file not found
  14966.         C3h path not found
  14967.         C4h file access failure
  14968. Note:    cancels the last CL printouts for the current task
  14969. SeeAlso: AH=82h
  14970. ----------1782-------------------------------
  14971. INT 17 - Alloy NTNX, MW386 - CANCEL ALL JOBS FOR CURRENT USER
  14972.     AH = 82h
  14973.     AL = 00h (NTNX compatibility mode)
  14974. Return: AL = status (see AH=81h)
  14975. SeeAlso: AH=81h
  14976. ----------1783-------------------------------
  14977. INT 17 - Alloy NTNX, MW386 - SET NUMBER OF COPIES
  14978.     AH = 83h
  14979.     AL = mode
  14980.         00h NTNX compatibility
  14981.         CL = number of copies (max 99, default 1)
  14982.         02h MW386 v2+
  14983.         BX = logical device number
  14984.             00h-03h = LPT1-LPT4
  14985.             04h-07h = COM1-COM4
  14986.         CX = number of copies
  14987. Return: AL = status (see AH=81h)
  14988. Note:    in NTNX compatibility mode, this function only affects LPT1
  14989. ----------1784-------------------------------
  14990. INT 17 - Alloy NTNX, MW386 - GENERATE PRINT BREAK
  14991.     AH = 84h
  14992.     AL = mode
  14993.         00h NTNX compatibility
  14994.         02h MW386 v2+
  14995.         BX = logical device number
  14996.             00h-03h = LPT1-LPT4
  14997.             04h-07h = COM1-COM4
  14998. Note:    closes spool file and tells spooler to queue the print job (LPT1 only
  14999.       under MW386 in NTNX compatibility mode)
  15000. ----------1784-------------------------------
  15001. INT 17 - AX (Japanese AT) PRINTER - OUTPUT CHARACTER WITHOUT CONVERSION
  15002.     AH = 84h
  15003.     AL = character
  15004.     DX = printer number
  15005. Return: AH = printer status (see AH=00h)
  15006. SeeAlso: AH=00h,AH=85h
  15007. ----------1785-------------------------------
  15008. INT 17 - AX (Japanese AT) PRINTER - ENABLE/DISABLE CHARACTER CONVERSION
  15009.     AH = 85h
  15010.     AL = new state (00h enabled, 01h disabled)
  15011. SeeAlso: AH=84h"AX"
  15012. ----------1787-------------------------------
  15013. INT 17 - Alloy NTNX - SET INDOS POINTER
  15014.     AH = 87h
  15015.     AL = 00h
  15016.     CX:BX -> buffer for user-written printer drivers
  15017. Return: BX,CX destroyed
  15018. Note:    must be executed before the printer is enabled
  15019. SeeAlso: AH=8Ah
  15020. ----------1788-------------------------------
  15021. INT 17 - Alloy NTNX, MW386 - REMOVE PRINTER FROM SPOOLER
  15022.     AH = 88h
  15023.     AL = mode
  15024.         00h NTNX compatibility
  15025.         DX = NTNX printer number
  15026.             00h host LPT1
  15027.             01h host LPT2
  15028.             02h host LPT3
  15029.             03h host LPT4
  15030.             04h host COM1
  15031.             05h host COM2
  15032.             06h user's logical COM2
  15033.             07h user's terminal AUX port
  15034.             08h user's logical COM1 (MW386 only)
  15035.         01h MW386
  15036.         DX = MW386 printer number
  15037. Return: AH = status (see AH=81h)
  15038. Note:    removes specified printer from the spooler's list of printers
  15039. SeeAlso: AH=89h,AH=8Bh
  15040. ----------1789-------------------------------
  15041. INT 17 - Alloy NTNX, MW386 - ADD PRINTER TO SPOOLER
  15042.     AH = 89h
  15043.     AL = mode
  15044.         00h NTNX compatibility
  15045.         DX = NTNX printer number (see AH=88h)
  15046.         01h MW386
  15047.         DX = MW386 printer number
  15048. Return: AL = status (see AH=81h)
  15049. Note:    the specified printer is added to the spooler's list of available
  15050.       printers
  15051. SeeAlso: AH=88h,AH=8Bh
  15052. ----------178A-------------------------------
  15053. INT 17 - Alloy NTNX - ACTIVATE USER-WRITTEN PRINTER DRIVER
  15054.     AH = 8Ah
  15055.     ???
  15056. SeeAlso: AH=92h
  15057. ----------178B-------------------------------
  15058. INT 17 - Alloy MW386 - GET PHYSICAL DEVICE NUMBER FROM NAME
  15059.     AH = 8Bh
  15060.     DS:DX -> ASCIZ printer name
  15061. Return: AL = status (see also AH=81h)
  15062.         00h successful
  15063.         DX = physical device number
  15064. SeeAlso: AH=89h,AH=8Ch,INT 14/AH=20h"Alloy"
  15065. ----------178C-------------------------------
  15066. INT 17 - Alloy MW386 - GET DEVICE NAME FROM PHYSICAL DEVICE NUMBER
  15067.     AH = 8Ch
  15068.     DX = physical device number
  15069.     ES:DI -> 17-byte buffer for ASCIZ device name
  15070. Return: AL = status (see also AH=81h)
  15071.         00h successful
  15072.         ES:DI buffer filled
  15073. SeeAlso: AH=88h,AH=8Bh
  15074. ----------178D-------------------------------
  15075. INT 17 - Alloy NTNX,MW386 - RESET SPOOLER
  15076.     AH = 8Dh
  15077.     AL = 00h
  15078. Notes:    clears all buffers and resets spooler to boot-up values
  15079.     MW386 supports this function for compatibility only; it is a NOP
  15080. Return: AL = status (see AH=81h)
  15081. ----------178E-------------------------------
  15082. INT 17 - Alloy NTNX - GET INT 28 ENTRY POINT
  15083.     AH = 8Eh
  15084.     AL = 00h
  15085. Return: CX:BX -> INT 28 entry point
  15086. SeeAlso: AH=8Fh
  15087. ----------178F-------------------------------
  15088. INT 17 - Alloy NTNX - GET DOS INTERCEPT ENTRY POINT
  15089.     AH = 8Fh
  15090.     AL = 00h
  15091. Return: CX:BX -> DOS intercept routine
  15092. SeeAlso: AH=8Eh
  15093. ----------1790-------------------------------
  15094. INT 17 - Alloy NTNX, MW386 - SPOOL FILE BY NAME
  15095.     AH = 90h
  15096.     AL = mode
  15097.         00h NTNX compatibility
  15098.         DL = printer code (FFh=current) (NTNX, MW386 v1.x only)
  15099.         DH = number of copies (FFh=current) (NTNX, MW386 v1.x only)
  15100.         02h MW386 v2+
  15101.         BX = logical device number
  15102.             00h-03h = LPT1-LPT4
  15103.             04h-07h = COM1-COM4
  15104.     CX:SI -> ASCIZ pathname
  15105. Return: AL = status (see AH=81h)
  15106. Note:    in mode 00h, the file is always sent to logical LPT1
  15107. SeeAlso: AH=A0h
  15108. ----------1791-------------------------------
  15109. INT 17 - Alloy NTNX, MW386 - GET USER NUMBER AND CURRENT PRINTER
  15110.     AH = 91h
  15111.     AL = mode
  15112.         00h NTNX compatibility
  15113.         Return: CX = user number (00h = host)
  15114.             DX = currently selected printer number (00h-08h)
  15115.         01h MW386
  15116.         Return: CX = user number
  15117.             DX = physical dev number of currently selected printer
  15118.         02h MW386 v2+
  15119.         BX = logical device number
  15120.             00h-03h = LPT1-LPT4
  15121.             04h-07h = COM1-COM4
  15122.         Return: CX = user number
  15123.             DX = physical device number
  15124. Return: AL = status (see AH=81h)
  15125. SeeAlso: AH=8Ch
  15126. ----------1792-------------------------------
  15127. INT 17 - Alloy NTNX - CHECK PRINTER DRIVER
  15128.     AH = 92h
  15129.     AL = 00h
  15130.     CL = 00h
  15131. Return: CL = driver state
  15132.         01h initialized
  15133.         80h not initialized
  15134.     AX = status (see AH=81h)
  15135. SeeAlso: AH=8Ah
  15136. ----------1794-------------------------------
  15137. INT 17 - Alloy NTNX, MW386 - SELECT PRINTER
  15138.     AH = 94h
  15139.     AL = mode
  15140.         00h NTNX compatibility
  15141.         DX = NTNX printer number (see AH=88h)
  15142.         01h MW386
  15143.         DX = MW386 printer number
  15144.         02h MW386 v2+
  15145.         BX = logical printer number
  15146.         DX = MW386 printer number
  15147. Return: AL = status (see AH=81h)
  15148. Note:    modes 00h and 01h affect only logical LPT1
  15149. SeeAlso: AH=8Bh,AH=95h
  15150. ----------1795-------------------------------
  15151. INT 17 - Alloy NTNX, MW386 - GET CURRENT PRINTER
  15152.     AH = 95h
  15153.     AL = mode
  15154.         00h NTNX compatibility
  15155.         Return: DX = NTNX printer number (see AH=88h)
  15156.                 (FFFFh if current printer not compatible with NTNX)
  15157.         01h MW386
  15158.         Return: DX = MW386 printer number
  15159.         02h MW386 v2+
  15160.         BX = logical device number
  15161.             00h-03h = LPT1-LPT4
  15162.             04h-07h = COM1-COM4
  15163.         Return: DX = MW386 printer number (FFFFh = none)
  15164. Return: AL = status (see AH=81h)
  15165. Note:    modes 00h and 01h return the printer number of logical LPT1 only
  15166. SeeAlso: AH=94h
  15167. ----------1796-------------------------------
  15168. INT 17 - Alloy NTNX - SET SERIAL PORT PARAMETERS
  15169.     AH = 96h
  15170.     AL = 00h
  15171. Note:    documentation states that this is a NOP, doing only XOR AX,AX before
  15172.       returning
  15173. SeeAlso: INT 14/AH=24h
  15174. ----------1797-------------------------------
  15175. INT 17 - Alloy NTNX, MW386 - SET DATA DRIVEN PRINT BREAK
  15176.     AH = 97h
  15177.     AL = mode
  15178.         00h NTNX compatibility
  15179.         02h MW386 v2+
  15180.         BX = logical device number
  15181.             00h-03h = LPT1-LPT4
  15182.             04h-07h = COM1-COM4
  15183.     CH,CL,DH = three character break sequence
  15184.     DL = subfunction
  15185.         00h set break string
  15186.         else reset break
  15187. Return: AL = status (see AH=81h)
  15188. Notes:    mode 00h affects only logical LPT1
  15189.     when the break string is encountered, the spool file will be closed and
  15190.       queued for printing automatically
  15191.     the break string is not permanently saved, and will be reset each time
  15192.       MW386 or the user is rebooted
  15193. SeeAlso: AH=9Bh
  15194. ----------1798-------------------------------
  15195. INT 17 - Alloy NTNX,MW386 - RESTART PRINTER
  15196.     AH = 98h
  15197.     AL = 00h
  15198.     DL = printer number (FFh=current)
  15199. Return: AL = status
  15200.         00h successful
  15201.         01h incorrect printer
  15202.         02h task not found
  15203. Note:    MW386 supports this function for compatibility only; it is a NOP
  15204. ----------1799-------------------------------
  15205. INT 17 - Alloy NTNX, MW386 - GET/SET PRINTER MODE
  15206.     AH = 99h
  15207.     AL = mode
  15208.         00h NTNX compatibility
  15209.         DL = NTNX printer number (see AH=88h)
  15210.             (FFh = task's current logical LPT1)
  15211.         DH = mode
  15212.             bit 0: get mode if 1, set mode if 0
  15213.             1: private ("attached")
  15214.             2: direct instead of spooled
  15215.             3-7 reserved (0)
  15216.         01h MW386
  15217.         DX = MW386 printer number
  15218.         CL = mode (as for DH above)
  15219. Return: AL = status (see AH=81h)
  15220.     DH = mode (bits 1 and 2 set as above)
  15221.     DL = printer owner's user number if not spooled
  15222. ----------179A-------------------------------
  15223. INT 17 - Alloy NTNX,MW386 - SET TAB EXPANSION
  15224.     AH = 9Ah
  15225.     AL = mode
  15226.         00h NTNX compatibility
  15227.         DX = NTNX printer number (see AH=88h)
  15228.             (FFFFh = current logical LPT1)
  15229.         01h MW386
  15230.         DX = MW386 printer number
  15231.     CL = tab length (00h = no expansion, 01h-63h = spaces per tab)
  15232. Return: AL = status (see AH=81h)
  15233. Note:    beginning with MW386 v2.0, tab expansion is set on a per-printer basis
  15234.       rather than a per-user basis; NTNX and MW386 v1.x ignore DX
  15235. SeeAlso: AH=A4h
  15236. ----------179B-------------------------------
  15237. INT 17 - Alloy NTNX,MW386 - SET PRINT BREAK TIMEOUT
  15238.     AH = 9Bh
  15239.     AL = mode
  15240.         00h NTNX compatibility
  15241.         CX = timeout value in clock ticks (1/18 sec) (00h = never)
  15242.         01h MW386
  15243.         CX = timeout value in seconds (00h = never)
  15244.         02h MW386 v2+
  15245.         BX = logical device number
  15246.             00h-03h = LPT1-LPT4
  15247.             04h-07h = COM1-COM4
  15248.         CX = timeout value in seconds (00h = never)
  15249. Return: AL = status (see AH=81h)
  15250. Notes:    modes 00h and 01h affect only the current logical LPT1
  15251.     if no data is sent to a printer for the specified amount of time, the
  15252.       spool file will be closed and queued for printing automatically
  15253. SeeAlso: AH=97h
  15254. ----------17A0-------------------------------
  15255. INT 17 - Alloy MW386 - SPOOL COPY OF FILE
  15256.     AH = A0h
  15257.     AL = mode
  15258.         00h NTNX compatibility
  15259.         DX = ??? (NTNX, MW386 v1.x only)
  15260.         02h MW386 v2+
  15261.         BX = logical device number
  15262.             00h-03h = LPT1-LPT4
  15263.             04h-07h = COM1-COM4
  15264.     CX:SI -> ASCIZ pathname
  15265. Return: AL = status (see AH=81h)
  15266. Notes:    makes a copy of the specified file in the spooler's directory, allowing
  15267.       the original file to be modified or deleted while the copy is printed
  15268.     in mode 00h, the file is printed on logical LPT1
  15269. SeeAlso: AH=90h
  15270. ----------17A4-------------------------------
  15271. INT 17 - Alloy MW386 - ENABLE/DISABLE FORM FEED
  15272.     AH = A4h
  15273.     AL = new state
  15274.         00h form feed after end of print job disabled
  15275.         01h form feed enabled
  15276. Return: AL = status (see AH=81h)
  15277. Note:    only affects the current logical LPT1
  15278. SeeAlso: AH=9Ah,AH=A6h,INT 7F/AH=05h"NTNX (Host)"
  15279. ----------17A6-------------------------------
  15280. INT 17 - Alloy MW386 - ENABLE/DISABLE BANNER PAGE
  15281.     AH = A6h
  15282.     AL = new state
  15283.         00h banner page before print job disabled
  15284.         01h banner page enabled
  15285. Return: AL = status (see AH=81h)
  15286. Note:    only affects the current logical LPT1
  15287. SeeAlso: AH=A4h
  15288. ----------17A7-------------------------------
  15289. INT 17 - Alloy MW386 v2+ - GET/SET SPOOL FLAGS
  15290.     AH = A7h
  15291.     AL = spool flags
  15292.         bit 0: banner page enabled (see AH=A4h)
  15293.         1: form feed enabled (see AH=A6h)
  15294.         2-6: reserved (0)
  15295.         7: set flags if 1, get flags if 0
  15296.     BX = logical device number
  15297.         00h-03h = LPT1-LPT4
  15298.         04h-07h = COM1-COM4
  15299. Return: AL = status (see AH=81h)
  15300. Note:    the documentation does not state which register contains the result of
  15301.       a GET
  15302. SeeAlso: AH=A4h,AH=A6h
  15303. ----------17A8-------------------------------
  15304. INT 17 - Alloy MW386 - DEFINE TEMPORARY FILENAME
  15305.     AH = A8h
  15306.     CX:SI -> ASCIZ filename without extension (max 8 chars)
  15307. Return: AL = status (see AH=81h)
  15308. Note:    allows application to specify banner page filename for spool files
  15309.       collected from the application's printer output
  15310. SeeAlso: AH=A9h
  15311. ----------17A9-------------------------------
  15312. INT 17 - Alloy MW386 - CHANGE TEMPORARY SPOOL DRIVE
  15313.     AH = A9h
  15314.     AL = new spool drive (2=C:,3=D:,etc)
  15315. Return: AL = status (see AH=81h)
  15316. Note:    does not remove previous spooling directory since jobs may be pending
  15317. SeeAlso: AH=A8h
  15318. ----------17AA-------------------------------
  15319. INT 17 - Alloy MW386 v2+ - GET REAL-TIME PRINTER STATUS
  15320.     AH = AAh
  15321.     AL = mode
  15322.         00h NTNX
  15323.         DX = NTNX printer number (see AH=88h)
  15324.         01h MW386
  15325.         DX = MW386 printer number
  15326. Return: AH = instantaneous printer status
  15327.         00h printer ready
  15328.         01h not ready
  15329.         12h off line
  15330.         13h out of paper
  15331.         14h general device failure
  15332.         15h device timeout
  15333.         16h bad device number
  15334. ----------17AF-------------------------------
  15335. INT 17 - Alloy MW386 - CHECK SPOOLER
  15336.     AH = AFh
  15337. Return: AX = 55AAh if spooler available
  15338. ----------17C0-------------------------------
  15339. INT 17 - PC Magazine PCSpool - GET CONTROL BLOCK ADDRESS
  15340.     AH = C0h
  15341.     DX = printer port (0-3)
  15342. Return: ES:BX -> control block (see below)
  15343. SeeAlso: AH=C1h
  15344.  
  15345. Format of control block:
  15346. Offset    Size    Description
  15347.  00h    WORD    printer number
  15348.  02h    WORD    address of printer status port
  15349.  04h    WORD    number of first record in queue
  15350.  06h    WORD    number of last record in queue
  15351.  08h    DWORD    characters already printed
  15352.  0Ch    DWORD    number of characters remaining
  15353.  10h    DWORD    pointer to dequeue buffer
  15354.  14h    DWORD    previous count of characters printed
  15355.  18h    DWORD    number of clock ticks taken to print them
  15356.  1Ch    WORD    offset of next character to output
  15357.  1Eh    WORD    offset of next character to print
  15358.  20h    WORD    pointer to spooling queue record
  15359.  22h    BYTE    current spooling status
  15360.  23h    BYTE    current printer status:
  15361.         00h OK
  15362.         01h not ready
  15363.         02h paused with message
  15364.         03h paused
  15365.         04h initializing
  15366.         FEh non-existent port
  15367.         FFh not spooled
  15368.  24h    BYTE    current control record type
  15369.  25h    WORD    observed printer speed
  15370.  27h    WORD    characters to print per service
  15371.  29h    BYTE    01h if disk write needed
  15372.  2Ah    BYTE    01h if queued data should be flushed
  15373.  2Bh    BYTE    01h to update cps status
  15374. ----------17C1--------------------------------
  15375. INT 17 - PC Magazine PCSpool - BUILD PAUSE CONTROL RECORD
  15376.     AH = C1h
  15377.     DX = printer port (0-3)
  15378.     DS:SI -> ASCIIZ string to save for display
  15379. Note:    flushes pending writes
  15380. SeeAlso: AH=C0h,AH=C2h
  15381. ----------17C2-------------------------------
  15382. INT 17 - PC Magazine PCSpool - FLUSH PENDING WRITES
  15383.     AH = C2h
  15384.     DX = printer port (0-3)
  15385. SeeAlso: AH=C3h
  15386. ----------17C3-------------------------------
  15387. INT 17 - PC Magazine PCSpool - CANCEL PRINTER QUEUE (FLUSH ALL QUEUED OUTPUT)
  15388.     AH = C3h
  15389.     DX = printer port (0-3)
  15390. SeeAlso: AH=C2h,AH=C7h
  15391. ----------17C4-------------------------------
  15392. INT 17 - PC Magazine PCSpool - QUERY SPOOLER ACTIVE
  15393.     AH = C4h
  15394. Return: DI = B0BFh
  15395.     SI = segment
  15396. ----------17C5-------------------------------
  15397. INT 17 - PC Magazine PCSpool - JOB SKIP PRINTER QUEUE
  15398.     AH = C5h
  15399.     DX = printer port (0-3)
  15400. Note:    cancels up to the pause record 
  15401. ----------17C6-------------------------------
  15402. INT 17 - PC Magazine PCSpool - CHECK PRINTER QUEUE STATUS
  15403.     AH = C6h
  15404.     DX = printer port (0-3)
  15405. Return: AX = 0 printer not active or at pause
  15406.        = 1 printer busy
  15407. ----------17C7-------------------------------
  15408. INT 17 - PC Magazine PCSpool - CLOSE QUEUE
  15409.     AH = C7h
  15410.     DX = printer port (0-3)
  15411. SeeAlso: AH=C3h
  15412. ----------17CD00-----------------------------
  15413. INT 17 - INSET - EXECUTE COMMAND STRING
  15414.     AX = CD00h
  15415.     DS:DX -> ASCIZ command string (max 80 bytes)
  15416. Return: CX = 07C2h (1986d)
  15417. Note:    user interface menus pop up after last command, unless that command
  15418.     exits INSET
  15419. ----------17CD01-----------------------------
  15420. INT 17 - INSET - GET IMAGE SIZE
  15421.     AX = CD01h
  15422.     DS:DX -> ASCIZ name of image file
  15423. Return: AX = height in 1/720th inch
  15424.     BX = width in 1/720th inch
  15425.     CX = 07C2h (1986d)
  15426. ----------17CD02-----------------------------
  15427. INT 17 - INSET - INITIALIZE
  15428.     AX = CD02h
  15429. Return: CX = 07C2h (1986d)
  15430. Note:    all open files are closed and the printer is reset
  15431. SeeAlso: AX=CD04h
  15432. ----------17CD03-----------------------------
  15433. INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE
  15434.     AX = CD03h
  15435. Return: CX = 07C2h (1986d)
  15436. ----------17CD04-----------------------------
  15437. INT 17 - INSET - INITIALIZE LINKED MODE
  15438.     AX = CD04h
  15439.     ES:SI -> FAR routine for linked mode
  15440. Return: CX = 07C2h
  15441. Note:    calling sequence for linked-mode routine
  15442.     AL = 00h send character in BL to printer
  15443.        = 01h send CX bytes from DS:DX to printer
  15444.        = 02h move print head to horizontal starting position of image
  15445.     return code for linked-mode routine:
  15446.     AX = 0000h success
  15447.        = 0001h failure
  15448. SeeAlso: AX=CD02h,AX=CD08h
  15449. ----------17CD05-----------------------------
  15450. INT 17 - INSET - START MERGING IMAGE INTO TEXT
  15451.     AX = CD05h
  15452.     DS:DX -> ASCIZ name of PIX file
  15453.     CX = left margin of text in 1/720th inch
  15454. Return: AH = printer type
  15455.         00h page-oriented (multiple images may be placed side-by-side)
  15456.         01h line-oriented (use AX=CD06h for vertical paper movement)
  15457.     CX = 07C2h (1986d)
  15458. SeeAlso: AX=CD07h
  15459. ----------17CD06-----------------------------
  15460. INT 17 - INSET - GRAPHICS LINE FEED
  15461.     AX = CD06h
  15462. Return: AH = completion status
  15463.         00h image complete
  15464.         01h image incomplete
  15465.     CX = 07C2h (1986d)
  15466. SeeAlso: AX=CD09h
  15467. ----------17CD07-----------------------------
  15468. INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER
  15469.     AX = CD07h
  15470. Return: CX = 07C2h
  15471. SeeAlso: AX=CD05h
  15472. ----------17CD08-----------------------------
  15473. INT 17 - INSET - CANCEL LINK MODE
  15474.     AX = CD08h
  15475. Return: CX = 07C2h
  15476. SeeAlso: AX=CD04h
  15477. ----------17CD09-----------------------------
  15478. INT 17 - INSET - ALTER TEXT LINE SPACING
  15479.     AX = CD09h
  15480.     CX = line spacing in 1/720th inch
  15481. Return: CX = 07C2h
  15482. Note:    not yet implemented, line spacing is currently fixed at 1/6 inch
  15483. SeeAlso: AX=CD06h
  15484. ----------17CD0A-----------------------------
  15485. INT 17 - INSET - GET SETUP
  15486.     AX = CD0Ah
  15487.     DS:DX -> buffer for IN.SET data
  15488. Return: CX = 07C2h
  15489. ----------17CD0B-----------------------------
  15490. INT 17 - INSET - START GETTING SCALED IMAGE
  15491.     AX = CD0Bh
  15492.     DS:SI -> ASCIZ pathname of .PIX file
  15493.     BX = number of bitplanes
  15494.     CX = number of rows in output bitmap
  15495.     DX = number of columns in output bitmap
  15496. Return: AX = status
  15497.         0000h OK
  15498.         FFFFh error    
  15499. Note:    image is returned in strips by repeated calls to AX=CD0Ch
  15500. ----------17CD0C-----------------------------
  15501. INT 17 - INSET - GET NEXT IMAGE STRIP
  15502.     AX = CD0Ch
  15503. Return:    AX = status
  15504.         0000h OK but not complete
  15505.         0001h OK and image complete
  15506.         FFFFh error
  15507.     DS:SI -> buffer (max 4K) for bit map strip 
  15508.     CX = start row
  15509.     DX = number of rows
  15510.     BX = offset in bytes between bit planes
  15511. Note:    buffer may be overwritten by subsequent calls
  15512. SeeAlso: AX=CD0Bh
  15513. ----------17F0-------------------------------
  15514. INT 17 - NorthNet Jetstream API - INSTALLATION CHECK
  15515.     AH = F0h
  15516.     DX = printer port (0-3)
  15517. Return: AX = 0001h Jetstream present
  15518.          else  non-Jetstream port
  15519. Note:    NorthNet Jetstream is a high-performance DMA-driven parallel card able
  15520.       to drive printers at up to 80000 characters per second
  15521. ----------17F1-------------------------------
  15522. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER
  15523.     AH = F1h
  15524.     CX = data buffer length
  15525.     DX = printer port (0-3)
  15526.     DS:SI -> data buffer
  15527. Return: AX = status
  15528.         0000h printer not ready (see also AH=02h)
  15529.         other printing started
  15530. SeeAlso: AH=00h,AH=F2h,AH=F3h,AH=F5h
  15531. ----------17F2-------------------------------
  15532. INT 17 - NorthNet Jetstream API - GET PRINT PROGRESS STATUS
  15533.     AH = F2h
  15534.     DX = printer port (0-3)
  15535. Return: AX = status
  15536.         0000h prior print request finished
  15537.         other number of characters left to print
  15538. SeeAlso: AH=02h,AH=F1h,AH=F3h
  15539. ----------17F3-------------------------------
  15540. INT 17 - NorthNet Jetstream API - ABORT PRINT OPERATION
  15541.     AH = F3h
  15542.     DX = printer port (0-3)
  15543. Return: AX = number of unprinted characters due to abort
  15544. SeeAlso: AH=F1h,AH=F4h
  15545. ----------17F4-------------------------------
  15546. INT 17 - NorthNet Jetstream API - SET COMPLETION (POST) ADDRESS
  15547.     AH = F4h
  15548.     DX = printer port (0-3)
  15549.     DS:DS -> FAR post address (called with interrupts on)
  15550. SeeAlso: AH=F1h,AH=F3h
  15551. ----------17F5-------------------------------
  15552. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER FROM EXTENDED MEMORY
  15553.     AH = F5h
  15554.     CX = data buffer length
  15555.     DX = printer port (0-3)
  15556.     DS:SI -> data buffer (32-bit physical address)
  15557. Return: AX = status
  15558.         0000h printer not ready (see also AH=02h)
  15559.         other printing started
  15560. SeeAlso: AH=F1h
  15561. ----------18---------------------------------
  15562. INT 18 - START CASSETTE BASIC
  15563. Note:    only PCs produced by IBM contain BASIC in ROM, so the action is
  15564.       unpredicatable on compatibles; this interrupt often reboots the
  15565.       system, and often has no effect at all
  15566. SeeAlso: INT 86"NetBIOS"
  15567. ----------1800-------------------------------
  15568. INT 18 - NEC PC-9800 series - KEYBOARD - GET KEYSTROKE
  15569.     AH = 00h
  15570. Return: AX = keystroke
  15571. SeeAlso: AH=01h,AH=02h,INT 16/AH=00h
  15572. ----------1801-------------------------------
  15573. INT 18 - NEC PC-9800 series - KEYBOARD - CHECK FOR KEYSTROKE
  15574.     AH = 01h
  15575. Return: ZF set if no keystroke available
  15576.     ZF clear if keystroke available
  15577.         AX = keystroke
  15578. SeeAlso: AH=00h,AH=02h,INT 16/AH=01h
  15579. ----------1802-------------------------------
  15580. INT 18 - NEC PC-9800 series - KEYBOARD - GET SHIFT STATUS
  15581.     AH = 02h
  15582. Return: AL = shift flags
  15583. SeeAlso: AH=00h,AH=02h,AH=03h,AH=04h,INT 16/AH=02h
  15584. ----------1803-------------------------------
  15585. INT 18 - NEC PC-9800 series - KEYBOARD - INITIALIZE
  15586.     AH = 03h
  15587.     ???
  15588. Return: ???
  15589. SeeAlso: AH=00h,AH=04h
  15590. ----------1804-------------------------------
  15591. INT 18 - NEC PC-9800 series - KEYBOARD - KEY PRESSED
  15592.     AH = 04h
  15593.     ???
  15594. Return: ???
  15595. Note:    details are not available at this time
  15596. SeeAlso: AH=00h,AH=02h,INT 16/AH=00h,INT 16/AH=01h,INT 16/AH=02h
  15597. ----------18---------------------------------
  15598. INT 18 - NEC PC-9800 series - VIDEO
  15599.     AH = function
  15600.         0Ah set video mode
  15601.         0Bh get video mode
  15602.         0Ch start text screen display
  15603.         0Dh end text screen display
  15604.         0Eh set single display area
  15605.         0Fh set multiple display area
  15606.         10h set cursor shape
  15607.         11h display cursor
  15608.         12h terminate cursor
  15609.         13h set cursor position
  15610.         14h read font patter
  15611.         16h initialize text video RAM
  15612.         1Ah define user character
  15613.     ???
  15614. Return: ???
  15615. Notes:    details are not available at this time
  15616.     text video RAM is located at segments A000h (characters) and A200h
  15617.       (attributes)
  15618. ----------19---------------------------------
  15619. INT 19 - SYSTEM - BOOTSTRAP LOADER
  15620.    Reboot the system without clearing memory or restoring interrupt vectors.
  15621.    Because interrupt vectors are preserved, this interrupt usually causes a
  15622.    system hang if any TSRs have hooked vectors from 00h through 1Ch,
  15623.    particularly INT 08.
  15624.  
  15625.    Usually, the BIOS will try to read sector 1, head 0, track 0 from drive A:
  15626.    to 0000h:7C00h.  If this fails, and a hard disk is installed, the BIOS will
  15627.    read sector 1, head 0, track 0 of the first hard disk.  This sector should
  15628.    contain a master bootstrap loader and a partition table.  After loading the
  15629.    master boot sector at 0000h:7C00h, the master bootstrap loader is given
  15630.    control.  It will scan the partition table for an active partition, and will
  15631.    then load the operating system's bootstrap loader (contained in the first
  15632.    sector of the active partition) and give it control.
  15633.  
  15634.    True IBM PCs issue an INT 18 if neither floppy nor hard disk have a valid
  15635.    boot sector.
  15636.  
  15637. Notes:    to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
  15638.       0040h:0072h and jump to FFFFh:0000h.    For a cold boot equivalent to
  15639.       a reset, store 0000h at 0040h:0072h before jumping.
  15640.     VDISK.SYS hooks this interrupt to allow applications to find out how
  15641.       much extended memory has been used by VDISKs (see below).  DOS 3.3+
  15642.       PRINT hooks INT 19 but does not set up a correct VDISK header block
  15643.       at the beginning of its INT 19 handler segment, thus causing some
  15644.       programs to overwrite extended memory which is already in use.
  15645.     default handler is at F000h:E6F2h for 100% compatible BIOSes
  15646. SeeAlso: INT 14/AH=17h,INT 18
  15647.  
  15648. Format of VDISK header block (at beginning of INT 19 handler's segment):
  15649. Offset    Size    Description
  15650.  00h 18 BYTEs    n/a (for VDISK.SYS, the device driver header)
  15651.  12h 11 BYTEs    signature string "VDISK     Vn.m" for VDISK.SYS version n.m
  15652.  1Dh 15 BYTEs    n/a
  15653.  2Ch  3 BYTEs    linear address of first byte of available extended memory
  15654.  
  15655. Format of hard disk master boot sector:
  15656. Offset    Size    Description
  15657.  00h 446 BYTEs    Master bootstrap loader code
  15658. 1BEh 16 BYTEs    partition record for partition 1 (see below)
  15659. 1CEh 16 BYTEs    partition record for partition 2
  15660. 1DEh 16 BYTEs    partition record for partition 3
  15661. 1EEh 16 BYTEs    partition record for partition 4
  15662. 1FEh    WORD    signature, AA55h indicates valid boot block
  15663.  
  15664. Format of partition record:
  15665. Offset    Size    Description
  15666.  00h    BYTE    boot indicator (80h = active partition)
  15667.  01h    BYTE    partition start head
  15668.  02h    BYTE    partition start sector (bits 0-5)
  15669.  03h    BYTE    partition start track (bits 8,9 in bits 6,7 of sector)
  15670.  04h    BYTE    operating system indicator (see below)
  15671.  05h    BYTE    partition end head
  15672.  06h    BYTE    partition end sector (bits 0-5)
  15673.  07h    BYTE    partition end track (bits 8,9 in bits 6,7 of sector)
  15674.  08h    DWORD    sectors preceding partition
  15675.  0Ch    DWORD    length of partition in sectors
  15676.  
  15677. Values for operating system indicator:
  15678.  00h empty
  15679.  01h DOS 12-bit FAT
  15680.  02h XENIX root file system
  15681.  03h XENIX /usr file system (obsolete)
  15682.  04h DOS 16-bit FAT
  15683.  05h DOS 3.3+ extended partition
  15684.  06h DOS 3.31+ Large File System
  15685.  07h QNX
  15686.  07h OS/2 HPFS
  15687.  07h Advanced Unix
  15688.  08h AIX bootable partition, SplitDrive
  15689.  09h AIX data partition
  15690.  09h Coherent filesystem
  15691.  0Ah OPUS
  15692.  0Ah Coherent swap partition
  15693.  10h OPUS
  15694.  24h NEC MS-DOS 3.x
  15695.  40h VENIX 80286
  15696.  50h Disk Manager, read-only partition
  15697.  51h Disk Manager, read/write partition
  15698.  51h Novell???
  15699.  52h CP/M
  15700.  52h Microport System V/386
  15701.  56h GoldenBow VFeature
  15702.  61h SpeedStor
  15703.  63h Unix SysV/386, 386/ix
  15704.  63h Mach, MtXinu BSD 4.3 on Mach
  15705.  63h GNU HURD
  15706.  64h Novell NetWare
  15707.  75h PC/IX
  15708.  80h Minix v1.1 - 1.4a
  15709.  81h Minix v1.4b+
  15710.  81h Linux
  15711.  82h Linux Swap partition (planned)
  15712.  93h Amoeba file system
  15713.  94h Amoeba bad block table
  15714.  B7h BSDI file system (secondarily swap)
  15715.  B8h BSDI swap partition (secondarily file system)
  15716.  C6h DR-DOS 6.0 LOGIN.EXE-secured partition
  15717.  DBh CP/M, Concurrent CP/M, Concurrent DOS
  15718.  DBh CTOS (Convergent Technologies OS)
  15719.  E1h SpeedStor 12-bit FAT extended partition
  15720.  E4h SpeedStor 16-bit FAT extended partition
  15721.  F2h DOS 3.3+ secondary
  15722.  FEh LANstep
  15723.  FFh Xenix bad block table
  15724. ----------1A00-------------------------------
  15725. INT 1A - TIME - GET SYSTEM TIME
  15726.     AH = 00h
  15727. Return: CX:DX = number of clock ticks since midnight
  15728.     AL = midnight flag, nonzero if midnight passed since time last read
  15729. Notes:    there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
  15730.     IBM and many clone BIOSes set the flag for AL rather than incrementing
  15731.       it, leading to loss of a day if two consecutive midnights pass
  15732.       without a request for the time (e.g. if the system is on but idle)
  15733. SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch
  15734. ----------1A01-------------------------------
  15735. INT 1A - TIME - SET SYSTEM TIME
  15736.     AH = 01h
  15737.     CX:DX = number of clock ticks since midnight
  15738. SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
  15739. ----------1A02-------------------------------
  15740. INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
  15741.     AH = 02h
  15742. Return: CF clear if successful
  15743.         CH = hour (BCD)
  15744.         CL = minutes (BCD)
  15745.         DH = seconds (BCD)    
  15746.         DL = daylight savings flag (00h standard time, 01h daylight time)
  15747.     CF set on error (i.e. clock not running or in middle of update)
  15748. SeeAlso: AH=00h
  15749. ----------1A03-------------------------------
  15750. INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
  15751.     AH = 03h
  15752.     CH = hour (BCD)
  15753.     CL = minutes (BCD)
  15754.     DH = seconds (BCD)
  15755.     DL = daylight savings flag (00h standard time, 01h daylight time)
  15756. SeeAlso: AH=01h
  15757. ----------1A04-------------------------------
  15758. INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
  15759.     AH = 04h
  15760. Return: CF clear if successful
  15761.         CH = century (BCD)
  15762.         CL = year (BCD)
  15763.         DH = month (BCD)
  15764.         DL = day (BCD)
  15765.     CF set on error
  15766. SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah
  15767. ----------1A05-------------------------------
  15768. INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
  15769.     AH = 05h
  15770.     CH = century (BCD)
  15771.     CL = year (BCD)
  15772.     DH = month (BCD)
  15773.     DL = day (BCD)
  15774. SeeAlso: AH=04h,INT 21/AH=2Bh
  15775. ----------1A06-------------------------------
  15776. INT 1A - TIME - SET ALARM (AT,XT286,PS)
  15777.     AH = 06h
  15778.     CH = hour (BCD)
  15779.     CL = minutes (BCD)
  15780.     DH = seconds (BCD)
  15781. Return: CF set on error (alarm already set or clock stopped for update)
  15782.     CF clear if successful
  15783. Note:    the alarm occurs every 24 hours until turned off, invoking INT 4A each
  15784.       time
  15785. SeeAlso: AH=07h,INT 4A
  15786. ----------1A07-------------------------------
  15787. INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
  15788.     AH = 07h
  15789. Return: alarm disabled
  15790. Note:    does not disable the real-time clock's IRQ
  15791. SeeAlso: AH=06h,INT 70
  15792. ----------1A08-------------------------------
  15793. INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
  15794.     AH = 08h
  15795.     CH = hours in BCD
  15796.     CL = minutes in BCD
  15797.     DH = seconds in BCD
  15798. ----------1A09-------------------------------
  15799. INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
  15800.     AH = 09h
  15801. Return: CH = hours in BCD
  15802.     CL = minutes in BCD
  15803.     DH = seconds in BCD
  15804.     DL = alarm status
  15805.         00h alarm not enabled
  15806.         01h alarm enabled but will not power up system
  15807.         02h alarm will power up system
  15808. ----------1A0A-------------------------------
  15809. INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
  15810.     AH = 0Ah
  15811. Return: CF set on error
  15812.     CF clear if successful
  15813.         CX = count of days since Jan 1,1980
  15814. SeeAlso: AH=04h,AH=0Bh
  15815. ----------1A0B-------------------------------
  15816. INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
  15817.     AH = 0Bh
  15818.     CX = count of days since Jan 1,1980
  15819. Return: CF set on error
  15820.     CF clear if successful
  15821. SeeAlso: AH=05h,AH=0Ah
  15822. ----------1A10-------------------------------
  15823. INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE
  15824.     AH = 10h
  15825.     ???
  15826. Return: ???
  15827. SeeAlso: AH=11h,AH=12h,INT 17/AH=01h
  15828. ----------1A11-------------------------------
  15829. INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER
  15830.     AH = 11h
  15831.     ???
  15832. Return: ???
  15833. SeeAlso: AH=10h,AH=12h,INT 17/AH=00h
  15834. ----------1A12-------------------------------
  15835. INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS
  15836.     AH = 12h
  15837.     ???
  15838. Return: ???
  15839. SeeAlso: AH=10h,AH=11h,INT 17/AH=02h
  15840. ----------1A3601-----------------------------
  15841. INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK
  15842.     AX = 3601h
  15843. Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
  15844.         ASCIZ string "WPCORP\0"
  15845. Notes:    WordPerfect 5.0 will call this interrupt at start up to determine if a
  15846.       third party product wants to interface with it.  The third party
  15847.       product must intercept this interrupt and return the address of a
  15848.       keyboard monitor routine.
  15849.     Before checking for keyboard input, and after every key entered by the
  15850.       user, Word Perfect will call the routine whose address was provided
  15851.       in DS:SI with the following parameters:
  15852.         Entry:    AX = key code or 0
  15853.             BX = WordPerfect state flag
  15854.         Exit:    AX = 0 or key code
  15855.             BX = 0 or segment address of buffer with key codes
  15856.     See the "WordPerfect 5.0 Developer's Toolkit" for further information.
  15857. SeeAlso: INT 16/AX=5500h
  15858. ----------1A6108-----------------------------
  15859. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDWITHREPLY" - SEND MSG AND GET REPLY
  15860.     AX = 6108h
  15861.     STACK:    WORD    conversation ID (0000h-0009h)
  15862.         DWORD    pointer to message buffer
  15863.         WORD    length of message
  15864.         DWORD    pointer to reply buffer
  15865.         WORD    length of reply buffer
  15866.         WORD    0000h (use default "Cparams" structure)
  15867. Return: AX = status (see below)
  15868.     STACK unchanged
  15869. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  15870.       which implements the Simple Network Application Protocol
  15871. SeeAlso: AX=6205h
  15872.  
  15873. Values for status:
  15874.  0000h successful
  15875.  F830h "SNAP_ABORTED"
  15876.  FC04h "SNAP_SERVERDIED"
  15877.  FC05h "SNAP_RESEND"
  15878.  FC06h "SNAP_SELECTFAILED"
  15879.  FC07h "SNAP_WRONGVERSION"
  15880.  FC08h "SNAP_INVALIDACK"
  15881.  FC09h "SNAP_TIMEOUT"
  15882.  FC0Ah "SNAP_SERVERREJECT"
  15883.  FC0Bh "SNAP_NOREPLYDUE"
  15884.  FC0Ch "SNAP_NOAUTHENTICATE"/"SNAP_GUARDIAN_ERROR"
  15885.  FC0Dh "SNAP_NOINIT"
  15886.  FC0Eh "SNAP_SOCKETERROR"
  15887.  FC0Fh "SNAP_BUFFERLIMIT"
  15888.  FC10h "SNAP_INVALIDCID"
  15889.  FC11h "SNAP_INVALIDOP"
  15890.  FC12h "SNAP_XMITFAIL"
  15891.  FC13h "SNAP_NOMORERETRIES"
  15892.  FC14h "SNAP_BADPARMS"
  15893.  FC15h "SNAP_NOMEMORY"
  15894.  FC16h "SNAP_NOMORECONVS"
  15895.  FFFFh failed (invalid function/parameter)
  15896. ----------1A6205-----------------------------
  15897. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDNOREPLY" - SEND MSG, DON'T AWAIT REPLY
  15898.     AX = 6205h
  15899.     STACK:    WORD    conversation ID (0000h-0009h)
  15900.         DWORD    pointer to message
  15901.         WORD    length of message
  15902.         WORD    0000h (use default "Cparms" structure)
  15903. Return: AX = status (see AX=6108h)
  15904.     STACK unchanged
  15905. SeeAlso: AX=6108h
  15906. ----------1A6308-----------------------------
  15907. INT 1A - SNAP.EXE 3.2+ - "SNAP_BEGINCONV" - BEGIN CONVERSATION
  15908.     AX = 6308h
  15909.     STACK:    WORD    offset of ASCIZ "guardian"
  15910.         WORD    offset of ASCIZ hostname
  15911.         WORD    offset of ASCIZ server name
  15912.         WORD    offset of ASCIZ userid
  15913.         WORD    offset of ASCIZ password
  15914.         WORD    offset of password length
  15915.         WORD    offset of password type
  15916.         WORD    offset of "Cparms" structure (see below)
  15917. Return: ???
  15918.     STACK unchanged
  15919. Note:    all stacked offsets are within the SNAP data segment (use AX=6A01h
  15920.       to allocate a buffer)
  15921. SeeAlso: AX=6405h,AX=7202h
  15922.  
  15923. Format of Cparms structure:
  15924. Offset    Size    Description
  15925.  00h    WORD    retry delay in seconds
  15926.  02h    WORD    timeout delay in seconds
  15927.  04h    WORD    maximum buffer size
  15928.  06h    WORD    encryption level
  15929. ----------1A6405-----------------------------
  15930. INT 1A - SNAP.EXE 3.2+ - "SNAP_ENDCONV" - END CONVERSATION
  15931.     AX = 6405h
  15932.     STACK:    WORD    conversation ID (0000h-0009h)
  15933.         DWORD    pointer to message buffer
  15934.         WORD    length of message
  15935.         WORD    0000h (use default "Cparms" structure)
  15936. Return: AX = status (see AX=6108h)
  15937.     STACK unchanged
  15938. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  15939.       which implements the Simple Network Application Protocol
  15940. SeeAlso: AX=6308h
  15941. ----------1A6900-----------------------------
  15942. INT 1A - SNAP.EXE 3.2+ - "SNAP_DATASEG" - GET RESIDENT DATA SEGMENT
  15943.     AX = 6900h
  15944. Return: AX = value used for DS by resident code
  15945. SeeAlso: AX=6A01h,AX=6F01h
  15946. ----------1A6A01-----------------------------
  15947. INT 1A - SNAP.EXE 3.2+ - "SNAP_ALLOC" - ALLOCATE BUFFER IN SNAP DATA SEGMENT
  15948.     AX = 6A01h
  15949.     STACK:    WORD    number of bytes to allocate
  15950. Return: AX = offset of allocated buffer or 0000h if out of memory
  15951.     STACK unchanged
  15952. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  15953.       which implements the Simple Network Application Protocol
  15954. SeeAlso: AX=6B01h
  15955. ----------1A6B01-----------------------------
  15956. INT 1A - SNAP.EXE 3.2+ - "SNAP_FREE" - DEALLOCATE BUFFER IN SNAP DATA SEGMENT
  15957.     AX = 6B01h
  15958.     STACK:    WORD    offset within SNAP data segment of previously allocated
  15959.             buffer
  15960. Return:    STACK unchanged
  15961. Note:    this call is a NOP if the specified offset is 0000h
  15962. SeeAlso: AX=6A01h
  15963. ----------1A6C04-----------------------------
  15964. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYTO" - COPY DATA TO RESIDENT SNAP PACKAGE
  15965.     AX = 6C04h
  15966.     STACK:    WORD    offset within SNAP data segment of dest (nonzero)
  15967.         WORD    segment of source buffer
  15968.         WORD    offset of source buffer
  15969.         WORD    number of bytes to copy
  15970. Return: AX = offset of byte after last one copied to destination
  15971.     STACK unchanged
  15972. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  15973.       which implements the Simple Network Application Protocol
  15974. SeeAlso: AX=6D04h
  15975. ----------1A6D04-----------------------------
  15976. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYFROM" - COPY DATA FROM RESIDENT SNAP PACKAGE
  15977.     AX = 6D04h
  15978.     STACK:    WORD    offset within SNAP data segment of source buffer
  15979.         WORD    segment of destination buffer
  15980.         WORD    offset of destination buffer
  15981.         WORD    number of bytes to copy
  15982. Return: AX = offset of byte after last one copied from source
  15983.     buffer filled
  15984.     STACK unchanged
  15985. SeeAlso: AX=6C04h
  15986. ----------1A6E01-----------------------------
  15987. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETDEBUG" - SET ???
  15988.     AX = 6E01h
  15989.     STACK:    WORD    new value for ???
  15990. Return:    AX = old value of ???
  15991.     STACK unchanged
  15992. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  15993.       which implements the Simple Network Application Protocol
  15994. ----------1A6F01-----------------------------
  15995. INT 1A - SNAP.EXE 3.2+ - "SNAP_CHKINSTALL" - INSTALLATION CHECK
  15996.     AX = 6F01h
  15997.     STACK: WORD 0000h
  15998. Return: AX = status
  15999.         0000h SNAP is resident
  16000.         other SNAP not present
  16001.     STACK unchanged
  16002. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  16003.       which implements the Simple Network Application Protocol, and is
  16004.       required by PCVENUS (a network shell).  The combination of SNAP and
  16005.       PCVENUS allows the use of the Andrew File System as one or more
  16006.       networked drives.
  16007. SeeAlso: AX=6900h,AX=7400h
  16008. ----------1A7002-----------------------------
  16009. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETANCHOR"
  16010.     AX = 7002h
  16011.     STACK:    WORD    anchor number (0000h-0009h)
  16012.         WORD    new value for the anchor
  16013. Return: AX = status
  16014.         0000h successful
  16015.         FFFFh failed (top word on stack not in range 00h-09h)
  16016.     STACK unchanged
  16017. SeeAlso: AX=7101h
  16018. ----------1A7101-----------------------------
  16019. INT 1A - SNAP.EXE 3.2+ - "SNAP_GETANCHOR"
  16020.     AX = 7101h
  16021.     STACK:    WORD    anchor number (0000h-0009h)
  16022. Return:    AX = anchor's value
  16023.     STACK unchanged
  16024. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  16025.       which implements the Simple Network Application Protocol
  16026. SeeAlso: AX=7002h
  16027. ----------1A7202-----------------------------
  16028. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETCONVPARMS" - SET CONVERSATION PARAMETERS
  16029.     AX = 7202h
  16030.     STACK:    WORD    conversation ID (0000h-0009h)
  16031.         WORD    offset within resident data segment of "Cparms"
  16032.             structure (see AX=6308h)
  16033. Return:    AX = status???
  16034.     STACK unchanged
  16035. SeeAlso: AX=6308h
  16036. ----------1A7302-----------------------------
  16037. INT 1A - SNAP.EXE 3.2+ - "SNAP_CLIENTVERSION" - ???
  16038.     AX = 7302h
  16039.     STACK:    WORD    conversation ID (0000h-0009h)
  16040.         WORD    offset within resident data segment of ???
  16041. Return:    AX = ???
  16042.     ???
  16043.     STACK unchanged
  16044. SeeAlso: AX=7400h
  16045. ----------1A7400-----------------------------
  16046. INT 1A - SNAP.EXE 3.2+ - "SNAP_VERSION" - GET VERSION
  16047.     AX = 7400h
  16048. Return: AX = version (AH=major, AL=minor)
  16049. Note:    this call is only valid if SNAP is installed
  16050. SeeAlso: AX=7302h,INT 1A/AX=6F01h
  16051. ----------1A75-------------------------------
  16052. INT 1A - SNAP.EXE 3.2+ - "SNAP_NOP" - ???
  16053.     AH = 75h
  16054.     AL = ???
  16055. Return: AX = ??? (0000h)
  16056. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  16057.       which implements the Simple Network Application Protocol
  16058. ----------1A76-------------------------------
  16059. INT 1A - SNAP.EXE 3.2+ - "SNAP_802_5" - ???
  16060.     AH = 76h
  16061.     AL = ???
  16062. Return: AX = ???
  16063. ----------1A77-------------------------------
  16064. INT 1A - SNAP.EXE 3.4 - ???
  16065.     AH = 77h
  16066.     AL = ??? (at least 01h)
  16067.     STACK:    WORD    ???
  16068.         ???
  16069. Return: ???
  16070.     STACK unchanged
  16071. ----------1A7802-----------------------------
  16072. INT 1A - SNAP.EXE 3.4 - ???
  16073.     AX = 7802h
  16074.     STACK:    WORD    ???
  16075.         WORD    ???
  16076. Return: ???
  16077.     STACK unchanged
  16078. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  16079.       which implements the Simple Network Application Protocol
  16080. ----------1A7F-------------------------------
  16081. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  16082.     AH = 7Fh
  16083.     ???
  16084. Return: ???
  16085. SeeAlso: AH=80h,AH=83h,AH=85h
  16086. ----------1A80-------------------------------
  16087. INT 1A - PCjr - SET UP SOUND MULTIPLEXOR
  16088.     AH = 80h
  16089.     AL = 00h source is 8253 channel 2
  16090.          01h source is cassette input
  16091.          02h source is I/O channel "Audio IN"
  16092.          03h source is sound generator chip
  16093. SeeAlso: AH=7Fh,AH=83h
  16094. ----------1A8100-----------------------------
  16095. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND - INSTALLATION CHECK
  16096.     AX = 8100h
  16097. Return: AH > 80h if supported
  16098. ----------1A83-------------------------------
  16099. INT 1A - Tandy 2500, Tandy 1000L series - START PLAYING DIGITAL SOUND
  16100.     AH = 83h
  16101.     AL = volume (0=lowest, 7=highest)
  16102.     CX = number of bytes to play
  16103.     DX = time between sound samples (multiples of 273 nanoseconds)
  16104.     ES:BX -> sound data (array of 8-bit PCM samples)
  16105. Return: ???
  16106. Notes:    this call returns immediately while the sound plays in the
  16107.       background
  16108.     The sound data pointed to by ES:BX probably shouldn't cross a 64k
  16109.       boundary.  The BIOS appears to call INT 15/AX=91FBh when the sound
  16110.       device underflows to allow another INT 1A/AH=83h for seamless
  16111.       playing of long sounds.
  16112. SeeAlso: AH=84h,INT 15/AH=91h
  16113. ----------1A84-------------------------------
  16114. INT 1A - Tandy 2500, Tandy 1000L series - STOP PLAYING DIGITAL SOUND
  16115.     AH = 84h
  16116. Return: ???
  16117. SeeAlso: AH=83h,AH=85h
  16118. ----------1A85-------------------------------
  16119. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  16120.     AH = 85h
  16121.     ???
  16122. Return: ???
  16123. SeeAlso: AH=7Fh,AH=83h
  16124. ----------1AA0-------------------------------
  16125. INT 1A - Disk Spool II v2.07 - INSTALLATION CHECK
  16126.     AH = A0h
  16127. Return: AH = B0h if installed
  16128.         AL = pending INT 1A/AH=D0h subfunction if nonzero???
  16129.         ES = code segment
  16130.         ES:BX -> name of current spool file
  16131.         ES:SI -> current despool file
  16132.         CL = 00h despooler is disabled
  16133.            = 41h despooler is enabled
  16134.         CH = 00h spooler is disabled
  16135.            = 41h spooler is enabled
  16136.         DL = 00h despooler is currently active printing a file
  16137.            = 41h despooler is standing by
  16138.         DH = 00h ???
  16139.            = 41h ???
  16140.         DI = 0000h ???
  16141.          0001h ???
  16142. Note:    Disk Spool II is a shareware disk-based print spooler by Budget
  16143.       Software Company
  16144. SeeAlso: AH=ABh,AH=C0h,AH=D0h
  16145. ----------1AAB-------------------------------
  16146. INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK
  16147.     AH = ABh
  16148. Return:    AH = BAh if installed
  16149.         AL = pending INT 1A/AH=ADh subfunction if nonzero???
  16150.         ES = code segment
  16151.         ES:BX -> name of current spool file
  16152.         ES:SI -> current despool file
  16153.         CL = 00h despooler is disabled
  16154.            = 41h despooler is enabled
  16155.         CH = 00h spooler is disabled
  16156.            = 41h spooler is enabled
  16157.         DL = 00h despooler is currently active printing a file
  16158.            = 41h despooler is standing by
  16159.         DH = 00h ???
  16160.            = 41h ???
  16161.         DI = 0000h ???
  16162.          0001h ???
  16163. Note:    Disk Spool II is a shareware disk-based print spooler by Budget
  16164.       Software Company
  16165. SeeAlso: AH=A0h,AH=ACh,AH=ADh
  16166. ----------1AAC-------------------------------
  16167. INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK
  16168.     AH = ACh
  16169. Return: (see AH=ABh)
  16170. Note:    this function is identical to AH=ABh
  16171. SeeAlso: AH=A0h,AH=ABh,AH=ADh
  16172. ----------1AAD-------------------------------
  16173. INT 1A - Disk Spool II v1.83 - FUNCTION CALLS
  16174.     AH = ADh
  16175.     AL = function code
  16176.         02h enable spooler only
  16177.         03h enable the despooler
  16178.         04h disable the despooler
  16179.         08h inhibit popup menu
  16180.         09h enable popup menu
  16181.         0Ah ???
  16182.         0Bh disable the spooler
  16183.         0Ch start despooler after last successfully printed document???
  16184.         0Dh start despooler at the exact point where it last left off???
  16185.         0Eh pop up the menu
  16186.         0Fh ???
  16187.         11h ???
  16188.         14h ???
  16189.         15h ???
  16190.         16h ???
  16191.         17h ???
  16192.         18h ???
  16193.         19h ???
  16194.         20h clear file pointed to by the despooler???
  16195.         21h    ???
  16196.         22h    ???
  16197.         23h ???
  16198.         30h ???
  16199. Return: AH = 00h if successful
  16200. SeeAlso: AH=ABh
  16201. ----------1AC0-------------------------------
  16202. INT 1A - Disk Spool II v2.07 - ALTERNATE INSTALLATION CHECK
  16203.     AH = C0h
  16204. Return: (see AH=A0h)
  16205. Note:    this call is identical to AH=A0h
  16206. SeeAlso: AH=A0h,AH=ABh,AH=D0h
  16207. ----------1AD0-------------------------------
  16208. INT 1A - Disk Spool II v2.07 - FUNCTION CALLS
  16209.     AH = D0h
  16210.     AL = function code
  16211.         01h enable spooler and despooler
  16212.         02h enable spooler only
  16213.         03h enable despooler at beginning of file
  16214.         04h disable the despooler
  16215.         05h disable the despooler and spooler
  16216.         06h clear the spool file
  16217.         08h inhibit the popup menu
  16218.         09h enable the popup menu
  16219.         0Ah ??? (called by Disk Spool's INT 21 handler)
  16220.         0Bh disable the spooler
  16221.         0Ch start despooler after last successfully printed document
  16222.         0Dh start despooler at the exact point where it last left off
  16223.         0Eh pop up the menu
  16224.         0Fh ???
  16225.         11h start new spool file??? (called by Disk Spool's INT 21 handler
  16226.             when a program terminates)
  16227.         14h ???
  16228.         15h delete despool file and reset ???
  16229.         16h ??? (writes something to unknown file)
  16230.         17h ??? (writes something to despool file, then reads something
  16231.             else and ???)
  16232.         18h ??? (reads something from despool file, and then ???)
  16233.         19h ??? (creates/truncates spool file)
  16234.         20h clear file pointed to by the despooler
  16235.         21h ??? (writes something to unknown file)
  16236.         22h ??? (writes something to spool file if spooler/despooler using
  16237.             same file)
  16238.         23h ??? (opens/creates unknown file, then ???)
  16239.         30h ???
  16240.         31h ???
  16241.         32h beep
  16242.         33h append CRLF to spool file???
  16243.         34h ???
  16244.         35h ???
  16245.         36h ???
  16246.         37h append CRLF to spool file and start a new spool file???
  16247.         38h ???
  16248.         51h ??? (called by Disk Spool's INT 21 handler)
  16249.         52h ??? (called by Disk Spool's INT 21 handler)
  16250.         57h ???
  16251. SeeAlso: AH=A0h,AH=ADh
  16252. ----------1AF7-------------------------------
  16253. INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
  16254.     AH = F7h
  16255. Notes:    RighTime is a TSR by G.T. Becker which continuously adjusts the system
  16256.       time to correct for clock drift
  16257.     any AH value from F0h-F7h or F9h-FEh will perform this function in
  16258.       version 1.1, but F7h is the function called by transient portion
  16259. SeeAlso: AH=F8h,AH=FFh"RighTime"
  16260. ----------1AF8-------------------------------
  16261. INT 1A - RighTime v1.1 - ENABLE
  16262.     AH = F8h
  16263. Notes:    RighTime is a TSR by G.T. Becker which continuously adjusts the system
  16264.       time to correct for clock drift
  16265.     RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
  16266.       TeSseRact program identifier based on its current state: "RighTime"
  16267.       when enabled, "RighTim"F7h when disabled.
  16268. SeeAlso: AH=F7h,AH=FFh"RighTime"
  16269. ----------1AFE-------------------------------
  16270. INT 1A - AT&T 6300 - READ TIME AND DATE
  16271.     AH = FEh
  16272. Return: BX = day count (0 = Jan 1, 1984)
  16273.     CH = hour
  16274.     CL = minute
  16275.     DH = second
  16276.     DL = hundredths
  16277. SeeAlso: AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
  16278. ----------1AFF-------------------------------
  16279. INT 1A - AT&T 6300 - SET TIME AND DATE
  16280.     AH = FFh
  16281.     BX = day count (0 = Jan 1, 1984)
  16282.     CH = hour
  16283.     CL = minute
  16284.     DH = second
  16285.     DL = hundredths
  16286. Return: ???
  16287. SeeAlso: AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
  16288. ----------1AFF-------------------------------
  16289. INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
  16290.     AH = FFh
  16291. Notes:    RighTime is a TSR by G.T. Becker which continuously adjusts the system
  16292.       time to correct for clock drift
  16293.     upon being permanently disabled, RighTime closes the file handle
  16294.       referencing its executable (which is updated with time correction
  16295.       information every two minutes while RighTime is enabled).
  16296. ----------1B---------------------------------
  16297. INT 1B C - KEYBOARD - CONTROL-BREAK HANDLER
  16298. Desc:    this interrupt is automatically called when INT 09 determines that
  16299.       Control-Break has been pressed
  16300. Note:    normally points to a short routine in DOS which sets the Ctrl-C flag,
  16301.       thus invoking INT 23h the next time DOS checks for Ctrl-C.
  16302. SeeAlso: INT 23
  16303. ----------1C---------------------------------
  16304. INT 1C - TIME - SYSTEM TIMER TICK
  16305. Desc:    this interrupt is automatically called on each clock tick by the INT 08
  16306.       handler
  16307. Notes:    this is the preferred interrupt to chain when a program needs to be
  16308.       invoked regularly
  16309.     not available on NEC 9800-series PCs
  16310. SeeAlso: INT 08
  16311. ----------1D---------------------------------
  16312. INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
  16313. Note:    default parameter table at F000h:F0A4h for 100% compatible BIOSes
  16314. SeeAlso: INT 10/AH=00h
  16315.  
  16316. Format of video parameters:
  16317. Offset    Size    Description
  16318.  00h 16 BYTEs    6845 register values for modes 00h and 01h
  16319.  10h 16 BYTEs    6845 register values for modes 02h and 03h
  16320.  20h 16 BYTEs    6845 register values for modes 04h and 05h
  16321.  30h 16 BYTEs    6845 register values for modes 06h and 07h
  16322.  40h    WORD    bytes in video buffer for modes 00h and 01h
  16323.  42h    WORD    bytes in video buffer for modes 02h and 03h
  16324.  44h    WORD    bytes in video buffer for modes 04h and 05h
  16325.  46h    WORD    bytes in video buffer for modes 06h and 07h
  16326.  48h  8 BYTEs    columns on screen for each of modes 00h through 07h
  16327.  50h  8 BYTEs    CRT controller mode bytes for each of modes 00h through 07h
  16328. ----------1E---------------------------------
  16329. INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
  16330. Note:    default parameter table at F000h:EFC7h for 100% compatible BIOSes
  16331. SeeAlso: INT 13/AH=0Fh,INT 41
  16332.  
  16333. Format of diskette parameter table:
  16334. Offset    Size    Description
  16335.  00h    BYTE    first specify byte
  16336.         bits 7-4: step rate
  16337.              3-0: head unload time (0Fh = 240 ms)
  16338.  01h    BYTE    second specify byte
  16339.         bits 7-1: head load time (01h = 4 ms)
  16340.                0: non-DMA mode (always 0)
  16341.  02h    BYTE    delay until motor turned off (in clock ticks)
  16342.  03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
  16343.  04h    BYTE    sectors per track
  16344.  05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
  16345.  06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
  16346.  07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
  16347.  08h    BYTE    format filler byte (default F6h)
  16348.  09h    BYTE    head settle time in milliseconds
  16349.  0Ah    BYTE    motor start time in 1/8 seconds
  16350. ----------1F---------------------------------
  16351. INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  16352.    points at 1024 bytes of graphics data, 8 bytes for each character 80h-FFh
  16353. Note:    graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
  16354.       compatible BIOSes
  16355. SeeAlso: INT 10/AX=5000h,INT 43
  16356. ---------------------------------------------
  16357. Interrupt List, part 3 of 8
  16358. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  16359. ----------20---------------------------------
  16360. INT 20 - Minix - SEND/RECEIVE MESSAGE
  16361.     AX = process ID of other process
  16362.     BX -> message
  16363.     CX = 1 send
  16364.          2 receive
  16365.          3 send&receive
  16366. Note:    the message contains the system call number (numbered as in V7 
  16367.       Unix(tm)) and the call parameters
  16368. ----------20---------------------------------
  16369. INT 20 - DOS 1+ - TERMINATE PROGRAM
  16370.     CS = PSP segment
  16371. Return: never
  16372. Note:    (see INT 21/AH=00h)
  16373. SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
  16374. ---------------------------------------------
  16375. INT 20 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE FIRMWARE DEBUGGER
  16376.     ???
  16377. Return: ???
  16378. SeeAlso: INT 21"COMTROL HOSTESS"
  16379. ---------------------------------------------
  16380. INT 21 - COMTROL HOSTESS i/ISA DEBUGGER - GET SEGMENT FOR CONTROL PROGRAM USE
  16381.     ???
  16382. Return: AX = first segment available for control program use
  16383. SeeAlso: INT 20"COMTROL HOSTESS",INT 22"COMTROL HOSTESS"
  16384. ----------2100-------------------------------
  16385. INT 21 - DOS 1+ - TERMINATE PROGRAM
  16386.     AH = 00h
  16387.     CS = PSP segment
  16388. Notes:    Microsoft recomments using INT 21/AH=4Ch for DOS 2+
  16389.     execution continues at address stored in INT 22 after DOS performs
  16390.       whatever cleanup it needs to do
  16391.     if the PSP is its own parent, the process's memory is not freed; if
  16392.       INT 22 additionally points into the terminating program, the
  16393.       process is effectively NOT terminated
  16394.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16395. SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
  16396. ----------2101-------------------------------
  16397. INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
  16398.     AH = 01h
  16399. Return: AL = character read
  16400. Notes:    ^C/^Break are checked, and INT 23 executed if read
  16401.     character is echoed to standard output
  16402.     standard input is always the keyboard and standard output the screen
  16403.       under DOS 1.x, but they may be redirected under DOS 2+
  16404. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  16405. ----------2102-------------------------------
  16406. INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
  16407.     AH = 02h
  16408.     DL = character to write
  16409. Return: AL = last character output (despite the official docs which state
  16410.         nothing is returned) (at least DOS 3.3-5.0)
  16411. Notes:    ^C/^Break are checked, and INT 23 executed if pressed
  16412.     standard output is always the screen under DOS 1.x, but may be
  16413.       redirected under DOS 2+
  16414.     the last character output will be the character in DL unless DL=09h
  16415.       on entry, in which case AL=20h as tabs are expanded to blanks
  16416. SeeAlso: AH=06h,AH=09h
  16417. ----------2103-------------------------------
  16418. INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX
  16419.     AH = 03h
  16420. Return: AL = character read
  16421. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  16422.     STDAUX is usually the first serial port
  16423. SeeAlso: AH=04h,INT 14/AH=02h,INT E0/CL=03h
  16424. ----------2104-------------------------------
  16425. INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX
  16426.     AH = 04h
  16427.     DL = character to write
  16428. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  16429.     STDAUX is usually the first serial port
  16430.     if STDAUX is busy, this function will wait until it becomes free
  16431. SeeAlso: AH=03h,INT 14/AH=01h,INT E0/CL=04h
  16432. ----------2105-------------------------------
  16433. INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER
  16434.     AH = 05h
  16435.     DL = character to print
  16436. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  16437.     STDPRN is usually the first parallel port, but may be redirected under
  16438.       DOS 2+
  16439.     if the printer is busy, this function will wait
  16440. SeeAlso: INT 17/AH=00h
  16441. ----------2106-------------------------------
  16442. INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT
  16443.     AH = 06h
  16444.     DL = character (except FFh)
  16445. Return: AL = character output (despite official docs which state nothing is
  16446.         returned) (at least DOS 3.3-5.0)
  16447. Notes:    does not check ^C/^Break
  16448.     writes to standard output, which is always the screen under DOS 1.x,
  16449.       but may be redirected under DOS 2+
  16450. SeeAlso: AH=02h,AH=09h
  16451. ----------2106--DLFF-------------------------
  16452. INT 21 - DOS 1+ - DIRECT CONSOLE INPUT
  16453.     AH = 06h
  16454.     DL = FFh
  16455. Return: ZF set if no character available
  16456.     ZF clear if character available
  16457.         AL = character read
  16458. Notes:    ^C/^Break are NOT checked
  16459.     if the returned character is 00h, the user pressed a key with an
  16460.       extended keycode, which will be returned by the next call of this
  16461.       function
  16462.     reads from standard input, which is always the keyboard under DOS 1.x,
  16463.       but may be redirected under DOS 2+
  16464. SeeAlso: AH=0Bh
  16465. ----------2107-------------------------------
  16466. INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO
  16467.     AH = 07h
  16468. Return: AL = character read from standard input
  16469. Notes:    does not check ^C/^Break
  16470.     standard input is always the keyboard under DOS 1.x, but may be
  16471.       redirected under DOS 2+
  16472.     if the interim console flag is set (see AX=6301h), partially-formed
  16473.       double-byte characters may be returned
  16474. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  16475. ----------2108-------------------------------
  16476. INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO
  16477.     AH = 08h
  16478. Return: AL = character read from standard input
  16479. Notes:    ^C/^Break are checked, and INT 23 executed if detected
  16480.     standard input is always the keyboard under DOS 1.x, but may be
  16481.       redirected under DOS 2+
  16482.     if the interim console flag is set (see AX=6301h), partially-formed
  16483.       double-byte characters may be returned
  16484. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
  16485. ----------2109-------------------------------
  16486. INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT
  16487.     AH = 09h
  16488.     DS:DX -> '$'-terminated string
  16489. Return: AL = 24h (the '$' terminating the string, despite official docs which
  16490.         state that nothing is returned) (at least DOS 3.3-5.0)
  16491. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  16492.     standard output is always the screen under DOS 1.x, but may be
  16493.       redirected under DOS 2+
  16494.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  16495. SeeAlso: AH=02h,AH=06h"OUTPUT"
  16496. ----------210A-------------------------------
  16497. INT 21 - DOS 1+ - BUFFERED INPUT
  16498.     AH = 0Ah
  16499.     DS:DX -> buffer (see below)
  16500. Return: buffer filled with user input
  16501. Notes:    ^C/^Break are checked, and INT 23 is called if either detected
  16502.     reads from standard input, which may be redirected under DOS 2+
  16503.     if the maximum buffer size (see below) is set to 00h, this call returns
  16504.       immediately without reading any input
  16505. SeeAlso: AH=0Ch,INT 2F/AX=4810h
  16506.  
  16507. Format of input buffer:
  16508. Offset    Size    Description
  16509.  00h    BYTE    maximum characters buffer can hold
  16510.  01h    BYTE    (input) number of chars from last input which may be recalled
  16511.         (return) number of characters actually read, excluding CR
  16512.  02h  N BYTEs    actual characters read, including the final carriage return
  16513. ----------210A00-----------------------------
  16514. INT 21 - WCED v1.6 - INSTALLATION CHECK
  16515.     AX = 0A00h
  16516.     DS:DX -> 6-byte buffer whose first two bytes must be 00h
  16517. Return: buffer offset 02h-05h filled with "Wced" if installed
  16518. Note:    WCED is a free command-line editor and history utility by Stuart
  16519.       Russell
  16520. SeeAlso: AH=FFh"CED"
  16521. ----------210B-------------------------------
  16522. INT 21 - DOS 1+ - GET STDIN STATUS
  16523.     AH = 0Bh
  16524. Return: AL = 00h if no character available
  16525.        = FFh if character is available
  16526. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  16527.     standard input is always the keyboard under DOS 1.x, but may be
  16528.       redirected under DOS 2+
  16529.     if the interim console flag is set (see AX=6301h), this function
  16530.       returns AL=FFh if a partially-formed double-byte character is
  16531.       available
  16532. SeeAlso: AH=06h"INPUT",AX=4406h
  16533. ----------210B56-----------------------------
  16534. INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
  16535.     AX = 0B56h
  16536. Return: AX = 4952h if resident
  16537. SeeAlso: AX=0D20h
  16538. ----------210C-------------------------------
  16539. INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT
  16540.     AH = 0Ch
  16541.     AL = STDIN input function to execute after flushing buffer
  16542.     other registers as appropriate for the input function
  16543. Return: as appropriate for the specified input function
  16544. Note:    if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
  16545.       no input is attempted
  16546. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  16547. ----------210D-------------------------------
  16548. INT 21 - DOS 1+ - DISK RESET
  16549.     AH = 0Dh
  16550. Notes:    writes all modified disk buffers to disk, but does not update directory
  16551.       information (that is only done when files are closed or a SYNC call
  16552.       is issued)
  16553. SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h
  16554. ----------210D20-----------------------------
  16555. INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
  16556.     AX = 0D20h
  16557. Return: AX = 1971h if resident
  16558. SeeAlso: AX=0B56h,AH=30h/DX=ABCDh
  16559. ----------210E-------------------------------
  16560. INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
  16561.     AH = 0Eh
  16562.     DL = new default drive (00h = A:, 01h = B:, etc)
  16563. Return: AL = number of potentially valid drive letters
  16564. Notes:    under Novell NetWare, the return value is always 32, the number of
  16565.       drives that NetWare supports
  16566.     under DOS 3+, the return value is the greatest of 5, the value of
  16567.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  16568.     on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
  16569.       may be accessed as either A: or B:
  16570.     otherwise, the return value is the highest drive actually present
  16571.     DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
  16572.       and 3+ a maximum of 26 drives
  16573. SeeAlso: AH=19h,AH=3Bh,AH=DBh
  16574. ----------210F-------------------------------
  16575. INT 21 - DOS 1+ - OPEN FILE USING FCB
  16576.     AH = 0Fh
  16577.     DS:DX -> unopened File Control Block (see below)
  16578. Return: AL = status
  16579.         00h successful
  16580.         FFh file not found or access denied
  16581. Notes:    (DOS 3.1+) file opened for read/write in compatibility mode
  16582.     an unopened FCB has the drive, filename, and extension fields filled
  16583.       in and all other bytes cleared
  16584.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16585. SeeAlso: AH=10h,AH=16h,AH=3Dh
  16586.  
  16587. Format of File Control Block:
  16588. Offset    Size    Description
  16589.  -7    BYTE    extended FCB if FFh
  16590.  -6   5 BYTEs    reserved
  16591.  -1    BYTE    file attribute if extended FCB
  16592.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  16593.  01h  8 BYTEs    blank-padded file name 
  16594.  09h  3 BYTEs    blank-padded file extension
  16595.  0Ch    WORD    current block number
  16596.  0Eh    WORD    logical record size
  16597.  10h    DWORD    file size
  16598.  14h    WORD    date of last write (see AX=5700h)
  16599.  16h    WORD    time of last write (see AX=5700h) (DOS 1.1+)
  16600.  18h  8 BYTEs    reserved (see below)
  16601.  20h    BYTE    record within current block
  16602.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  16603.         byte is omitted)
  16604. Note:    to use an extended FCB, you must specify the address of the FFh flag at
  16605.       offset -7, rather than the address of the drive number field
  16606.  
  16607. Format of reserved field for DOS 1.0:
  16608. Offset    Size    Description
  16609.  16h    WORD    location in directory (if high byte = FFh, low byte is device
  16610.         ID)
  16611.  18h    WORD    number of first cluster in file
  16612.  1Ah    WORD    current absolute cluster number on disk
  16613.  1Ch    WORD    current relative cluster number within file
  16614.         (0 = first cluster of file, 1 = second cluster, etc.)
  16615.  1Eh    BYTE    dirty flag (00h = not dirty)
  16616.  1Fh    BYTE    unused
  16617.  
  16618. Format of reserved field for DOS 1.10-1.25:
  16619. Offset    Size    Description
  16620.  18h    BYTE    bit 7: set if logical device
  16621.         bit 6: not dirty
  16622.         bits 5-0: disk number or logical device ID
  16623.  19h    WORD    starting cluster number on disk
  16624.  1Bh    WORD    current absolute cluster number on disk
  16625.  1Dh    WORD    current relative cluster number within file
  16626.  1Fh    BYTE    unused
  16627.  
  16628. Format of reserved field for DOS 2.x:
  16629. Offset    Size    Description
  16630.  18h    BYTE    bit 7: set if logical device
  16631.         bit 6: set if open???
  16632.         bits 5-0: ???
  16633.  19h    WORD    starting cluster number on disk
  16634.  1Bh    WORD    ???
  16635.  1Dh    BYTE    ???
  16636.  1Eh    BYTE    ???
  16637.  1Fh    BYTE    ???
  16638.  
  16639. Format of reserved field for DOS 3.x:
  16640. Offset    Size    Description
  16641.  18h    BYTE    number of system file table entry for file
  16642.  19h    BYTE    attributes
  16643.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  16644.               01 = SHARE.EXE not loaded, character device
  16645.               10 = SHARE.EXE loaded, remote file
  16646.               11 = SHARE.EXE loaded, local file
  16647.         bits 5-0: low six bits of device attribute word
  16648. ---SHARE.EXE loaded, local file (DOS 3.x and 5.0)---
  16649.  1Ah    WORD    starting cluster of file on disk
  16650.  1Ch    WORD    (DOS 3.x) offset within SHARE of sharing record (see AH=52h)
  16651.         (DOS 5.0) unique sequence number of sharing record
  16652.  1Eh    BYTE    file attribute
  16653.  1Fh    BYTE    ???
  16654. ---SHARE.EXE loaded, remote file---
  16655.  1Ah    WORD    number of sector containing directory entry
  16656.  1Ch    WORD    relative cluster within file of last cluster accessed
  16657.  1Eh    BYTE    absolute cluster number of last cluster accessed
  16658.  1Fh    BYTE    ???
  16659. ---SHARE.EXE not loaded---
  16660.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  16661.  1Bh    WORD    starting cluster of file
  16662.  1Dh    WORD    number of sector containing directory entry
  16663.  1Fh    BYTE    number of directory entry within sector
  16664. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  16665.       of the device driver header, then the BYTE at 1Ah is overwritten.
  16666. ----------2110-------------------------------
  16667. INT 21 - DOS 1+ - CLOSE FILE USING FCB
  16668.     AH = 10h
  16669.     DS:DX -> File Control Block (see AH=0Fh)
  16670. Return: AL = status
  16671.         00h successful
  16672.         FFh failed
  16673. Notes:    a successful close forces all disk buffers used by the file to be
  16674.       written and the directory entry to be updated
  16675.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16676. SeeAlso: AH=0Fh,AH=16h,AH=3Eh
  16677. ----------2111-------------------------------
  16678. INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
  16679.     AH = 11h
  16680.     DS:DX -> unopened FCB (see AH=0Fh), may contain '?' wildcards
  16681. Return: AL = status
  16682.         00h successful
  16683.         [DTA] unopened FCB for first matching file
  16684.         FFh no matching filename, or bad FCB
  16685. Notes:    the type of the returned FCB depends on whether the input FCB was a
  16686.       normal or an extended FCB
  16687.     for extended FCBs with search attribute 08h, the volume label (if any)
  16688.       will be returned even if the current directory is not the root dir.
  16689.     DOS 3+ also allows the '*' wildcard
  16690.     the search FCB must not be modified if AH=12h will be used to continue
  16691.       searching; DOS 3.3 has set the following parts of the FCB:
  16692.          0Ch    BYTE    ???
  16693.          0Dh    WORD    directory entry number of matching file
  16694.          0Fh    WORD    cluster number of current directory
  16695.          11h  4 BYTEs    ???
  16696.          15h    BYTE    drive number (1=A:)
  16697.     at least for DOS 3.3, the unopened FCB in the DTA is actually the drive
  16698.       number followed by the file's directory entry
  16699. SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
  16700. ----------2112-------------------------------
  16701. INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
  16702.     AH = 12h
  16703.     DS:DX -> unopened FCB (see AH=0Fh)
  16704. Return: AL = status
  16705.         00h successful
  16706.         [DTA] = unopened FCB
  16707.         FFh no more matching filenames
  16708. Note:    (see AH=11h)
  16709.     assumes that successful FindFirst executed on search FCB before call
  16710. SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
  16711. ----------2113-------------------------------
  16712. INT 21 - DOS 1+ - DELETE FILE USING FCB
  16713.     AH = 13h
  16714.     DS:DX -> unopened FCB (see AH=0Fh), filename filled with template for
  16715.         deletion ('?' wildcards allowed)
  16716. Return: AL = status
  16717.         00h one or more files successfully deleted
  16718.         FFh no matching files or all were read-only or locked
  16719. Notes:    DOS 1.25+ deletes everything in the current directory (including
  16720.       subdirectories) and sets the first byte of the name to 00h (entry
  16721.       never used) instead of E5h if called on an extended FCB with
  16722.       filename '???????????' and bits 0-4 of the attribute set (bits 1 and
  16723.       2 for DOS 1.x).  This may have originally been an optimization to
  16724.       minimize directory searching after a mass deletion (DOS 1.25+ stop
  16725.       the directory search upon encountering a never-used entry), but can
  16726.       corrupt the filesystem under DOS 2+ because subdirectories are
  16727.       removed without deleting the files they contain.
  16728.     currently-open files should not be deleted
  16729. SeeAlso: AH=41h,INT 2F/AX=1113h
  16730. ----------2114-------------------------------
  16731. INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE
  16732.     AH = 14h
  16733.     DS:DX -> opened FCB (see AH=0Fh)
  16734. Return: AL = status
  16735.         00h successful
  16736.         01h end of file (no data)
  16737.         02h segment wrap in DTA
  16738.         03h end of file, partial record read
  16739.     [DTA] = record read from file
  16740. Notes:    reads a record of the size specified in the FCB beginning at the
  16741.       current file position, then updates the current block and current
  16742.       record fields in the FCB
  16743.     if a partial record was read, it is zero-padded to the full size
  16744.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16745. SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh,INT 2F/AX=1108h
  16746. ----------2115-------------------------------
  16747. INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE
  16748.     AH = 15h
  16749.     DS:DX -> opened FCB (see AH=0Fh)
  16750.     [DTA] = record to write
  16751. Return: AL = status
  16752.         00h successful
  16753.         01h disk full
  16754.         02h segment wrap in DTA
  16755. Notes:    writes a record of the size specified in the FCB beginning at the
  16756.       current file position, then updates the current block and current
  16757.       record fields in the FCB
  16758.     if less than a full sector is written, the data is placed in a DOS
  16759.       buffer to be written out at a later time
  16760.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16761. SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
  16762. ----------2116-------------------------------
  16763. INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB
  16764.     AH = 16h
  16765.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  16766. Return: AL = status
  16767.         00h successful
  16768.         FFh directory full or file exists and is read-only or locked
  16769. Notes:    if file already exists, it is truncated to zero length
  16770.     if an extended FCB is used, the file is given the attribute in the
  16771.       FCB; this is how to create a volume label in the disk's root dir
  16772.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16773. SeeAlso: AH=0Fh,AH=10h,AH=3Ch
  16774. ----------2117-------------------------------
  16775. INT 21 - DOS 1+ - RENAME FILE USING FCB
  16776.     AH = 17h
  16777.     DS:DX -> modified FCB (see also AH=0Fh)
  16778.         the old filename ('?' wildcards OK) is in the standard location
  16779.         while the new filename ('?' wildcards OK) is stored in the 11
  16780.         bytes beginning at offset 11h
  16781. Return:    AL = status
  16782.         00h successfully renamed
  16783.         FFh no matching files,file is read-only, or new name already exists
  16784. Note:    subdirectories may be renamed using an extended FCB with the
  16785.       appropriate attribute, as may volume labels
  16786. SeeAlso: AH=0Fh,AH=13h,AH=56h,INT 2F/AX=1111h
  16787. ----------2118-------------------------------
  16788. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  16789.     AH = 18h
  16790. Return: AL = 00h
  16791. Note:    corresponds to the CP/M BDOS function "get bit map of logged drives",
  16792.       which is meaningless under MSDOS
  16793. SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h
  16794. ----------2119-------------------------------
  16795. INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
  16796.     AH = 19h
  16797. Return: AL = drive (00h = A:, 01h = B:, etc)
  16798. SeeAlo: AH=0Eh,AH=47h
  16799. ----------211A-------------------------------
  16800. INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
  16801.     AH = 1Ah
  16802.     DS:DX -> Disk Transfer Area (DTA)
  16803. Notes:    the DTA is set to PSP:0080h when a program is started
  16804.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  16805. SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
  16806. ----------211B-------------------------------
  16807. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE
  16808.     AH = 1Bh
  16809. Return: AL = sectors per cluster (allocation unit)
  16810.     CX = bytes per sector
  16811.     DX = total number of clusters
  16812.     DS:BX -> media ID byte (see below)
  16813. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  16814.       versions return a pointer to a copy of the FAT's ID byte
  16815. SeeAlso: AH=1Ch,AH=36h
  16816.  
  16817. Values for media ID byte:
  16818.  FFh    floppy, double-sided, 8 sectors per track (320K)
  16819.  FEh    floppy, single-sided, 8 sectors per track (160K)
  16820.  FDh    floppy, double-sided, 9 sectors per track (360K)
  16821.  FCh    floppy, single-sided, 9 sectors per track (180K)
  16822.  F9h    floppy, double-sided, 15 sectors per track (1.2M)
  16823.  F8h    hard disk
  16824.  F0h    other
  16825. ----------211C-------------------------------
  16826. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE
  16827.     AH = 1Ch
  16828.     DL = drive (00h = default, 01h = A:, etc)
  16829. Return: AL = sectors per cluster (allocation unit)
  16830.     CX = bytes per sector
  16831.     DX = total number of clusters
  16832.     DS:BX -> media ID byte (see AH=1Bh)
  16833. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  16834.       versions return a pointer to a copy of the FAT's ID byte
  16835. SeeAlso: AH=1Bh,AH=36h
  16836. ----------211D-------------------------------
  16837. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  16838.     AH = 1Dh
  16839. Return: AL = 00h
  16840. Note:    corresponds to the CP/M BDOS function "get bit map of read-only
  16841.       drives", which is meaningless under MSDOS
  16842. SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
  16843. ----------211E-------------------------------
  16844. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  16845.     AH = 1Eh
  16846. Return: AL = 00h
  16847. Note:    corresponds to the CP/M BDOS function "set file attributes" which was
  16848.      meaningless under MSDOS 1.x
  16849. SeeAlso: AH=18h,AH=1Dh,AH=20h
  16850. ----------211F-------------------------------
  16851. INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE
  16852.     AH = 1Fh
  16853. Return: AL = status
  16854.         00h successful
  16855.         DS:BX -> Drive Parameter Block (DPB) (see below for DOS 1.x,
  16856.             AH=32h for DOS 2+)
  16857.         FFh invalid drive
  16858. Note:    this call was undocumented prior to the release of DOS 5.0; however,
  16859.       only the DOS 4+ version of the DPB has been documented
  16860. SeeAlso: AH=32h
  16861.  
  16862. Format of DOS 1.1 and MSDOS 1.25 drive parameter block:
  16863. Offset    Size    Description
  16864.  00h    BYTE    sequential device ID
  16865.  01h    BYTE    logical drive number (0=A:)
  16866.  02h    WORD    bytes per sector
  16867.  04h    BYTE    highest sector number within a cluster
  16868.  05h    BYTE    shift count to convert clusters into sectors
  16869.  06h    WORD    starting sector number of first FAT
  16870.  08h    BYTE    number of copies of FAT
  16871.  09h    WORD    number of directory entries
  16872.  0Bh    WORD    number of first data sector
  16873.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  16874.  0Fh    BYTE    sectors per FAT
  16875.  10h    WORD    starting sector of directory
  16876.  12h    WORD    address of allocation table
  16877. Note:    the DOS 1.0 table is the same except that the first and last fields
  16878.       are missing; see INT 21/AH=32h for the DOS 2+ version
  16879. ----------2120-------------------------------
  16880. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  16881.     AH = 20h
  16882. Return: AL = 00h
  16883. Note:    corresponds to the CP/M BDOS function "get/set default user
  16884.       (sublibrary) number", which is meaningless under MSDOS
  16885. SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
  16886. ----------2121-------------------------------
  16887. INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE
  16888.     AH = 21h
  16889.     DS:DX -> opened FCB (see AH=0Fh)
  16890. Return: AL = status
  16891.         00h successful    
  16892.         01h end of file, no data read
  16893.         02h segment wrap in DTA, no data read
  16894.         03h end of file, partial record read
  16895.     [DTA] = record read from file
  16896. Notes:    the record is read from the current file position as specified by the
  16897.       random record and record size fields of the FCB
  16898.     the file position is not updated after reading the record
  16899.     if a partial record is read, it is zero-padded to the full size
  16900.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16901. SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh
  16902. ----------2122-------------------------------
  16903. INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE
  16904.     AH = 22h
  16905.     DS:DX -> opened FCB (see AH=0Fh)
  16906.     [DTA] = record to write
  16907. Return: AL = status
  16908.         00h successful
  16909.         01h disk full
  16910.         02h segment wrap in DTA
  16911. Notes:    the record is written to the current file position as specified by the
  16912.       random record and record size fields of the FCB
  16913.     the file position is not updated after writing the record
  16914.     if the record is located beyond the end of the file, the file is
  16915.       extended but the intervening data remains uninitialized
  16916.     if the record only partially fills a disk sector, it is copied to a
  16917.       DOS disk buffer to be written out to disk at a later time
  16918.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16919. SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
  16920. ----------2123-------------------------------
  16921. INT 21 - DOS 1+ - GET FILE SIZE FOR FCB
  16922.     AH = 23h
  16923.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  16924. Return: AL = status
  16925.         00h successful (matching file found)
  16926.         FCB random record field filled with size in records, rounded up
  16927.         to next full record
  16928.         FFh failed (no matching file found)
  16929. Note:    not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16930. SeeAlso: AH=42h
  16931. ----------2124-------------------------------
  16932. INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
  16933.     AH = 24h
  16934.     DS:DX -> opened FCB (see AH=0Fh)
  16935. Notes:    computes the random record number corresponding to the current record
  16936.       number and record size, then stores the result in the FCB
  16937.     normally used when switching from sequential to random access
  16938.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16939. SeeAlso: AH=21h,AH=27h,AH=42h
  16940. ----------2125-------------------------------
  16941. INT 21 - DOS 1+ - SET INTERRUPT VECTOR
  16942.     AH = 25h
  16943.     AL = interrupt number
  16944.     DS:DX -> new interrupt handler
  16945. Notes:    this function is preferred over direct modification of the interrupt
  16946.       vector table
  16947.     some DOS extenders place an API on this function, as it is not
  16948.       directly meaningful in protected mode
  16949. SeeAlso: AX=2501h,AH=35h
  16950. ----------212501-----------------------------
  16951. INT 21 P - Phar Lap 386/DOS-Extender - RESET DOS EXTENDER DATA STRUCTURES 
  16952.     AX = 2501h
  16953.     SS = application's original SS or DS (FlashTek X-32VM)
  16954. Return: CF clear if successful
  16955.     CF set on error
  16956.         caller is operating on X-32 stack (FlashTek X-32VM)
  16957. Notes:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  16958.       system calls.     Only available when directly using 386/DOS-Extender or
  16959.       a compatible DOS extender, or when using a product that was created
  16960.       using 386-DOS/Extender or a compatible
  16961.     this function is also supported by FlashTek X-32VM
  16962. SeeAlso: AH=30h"Phar Lap"
  16963. ----------212502-----------------------------
  16964. INT 21 - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  16965.     AX = 2502h
  16966.     CL = interrupt number
  16967. Return:    CF clear
  16968.     ES:EBX = CS:EIP of protected-mode interrupt handler
  16969. Note:    this function is also supported by FlashTek X-32VM
  16970. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
  16971. ----------212503-----------------------------
  16972. INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  16973.     AX = 2503h
  16974.     CL = interrupt number
  16975. Return: CF clear
  16976.     EBX = CS:IP of real-mode interrupt handler
  16977. Note:    this function is also supported by FlashTek X-32VM
  16978. SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
  16979. ----------212504-----------------------------
  16980. INT 21 - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  16981.     AX = 2504h
  16982.     CL = interrupt number
  16983.     DS:EDX = CS:EIP of protected-mode interrupt handler
  16984. Return: CF clear
  16985. Note:    this function is also supported by FlashTek X-32VM
  16986. SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
  16987. ----------212505-----------------------------
  16988. INT 21 - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  16989.     AX = 2505h
  16990.     CL = interrupt number
  16991.     EBX = CS:IP of real-mode interrupt handler
  16992. Return: CF clear
  16993. Note:    this function is also supported by FlashTek X-32VM
  16994. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
  16995. ----------212506-----------------------------
  16996. INT 21 - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CONTRL IN PROT MODE
  16997.     AX = 2506h
  16998.     CL = interrupt number
  16999.     DS:EDX = CS:EIP of protected-mode interrupt handler
  17000. Return: CF clear
  17001. Notes:    this function modifies both the real-mode low-memory interrupt
  17002.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  17003.     interrupts occurring in real mode are resignaled in protected mode
  17004.     this function is also supported by FlashTek X-32VM
  17005. ----------212507-----------------------------
  17006. INT 21 - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  17007.     AX = 2507h
  17008.     CL = interrupt numbern
  17009.     DS:EDX = CS:EIP of protected-mode interrupt handler
  17010.     EBX = CS:IP of real-mode interrupt handler
  17011. Return: CF clear
  17012. Notes:    interrupts are disabled until both vectors have been modified
  17013.     this function is also supported by FlashTek X-32VM
  17014. SeeAlso: AX=2504h,AX=2505h
  17015. ----------212508-----------------------------
  17016. INT 21 - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  17017.     AX = 2508h
  17018.     BX = segment selector
  17019. Return: CF clear if successful
  17020.         ECX = linear base address of segment
  17021.     CF set if invalid segment selector
  17022. Note:    this function is also supported by FlashTek X-32VM
  17023. SeeAlso: AX=2509h
  17024. ----------212509-----------------------------
  17025. INT 21 - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  17026.     AX = 2509h
  17027.     EBX = linear address to convert
  17028. Return: CF clear if successful
  17029.         ECX = physical address (carry flag clear)
  17030.     CF set if linear address not mapped in page tables
  17031. SeeAlso: AX=2508h
  17032. ----------212509-----------------------------
  17033. INT 21 - FlashTek X-32VM - GET SYSTEM SEGMENTS AND SELECTORS
  17034.     AX = 2509h
  17035. Return: CF clear
  17036.     EAX high word = default DS
  17037.     AX = alias for 16-bit data segment
  17038.     BX = real mode code segment
  17039.     EDX high word = selector covering full 4GB address space
  17040.     DX = default SS
  17041.     ESI high word = PSP selector
  17042.     SI = environment selector
  17043. ----------21250A-----------------------------
  17044. INT 21 - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  17045.     AX = 250Ah
  17046.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  17047.          to modify
  17048.     EBX = physical base address of memory to map (multiple of 4K)
  17049.     ECX = number of physical 4K pages to map
  17050. Return: CF clear if successful
  17051.         EAX = 32-bit offset in segment of mapped memory
  17052.     CF set on error
  17053.         EAX = error code
  17054.         08h insufficient memory to create page tables
  17055.         09h invalid segment selector
  17056. SeeAlso: INT 31/AX=0800h
  17057. ----------21250C-----------------------------
  17058. INT 21 - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  17059.     AX = 250Ch
  17060. Return: CF clear
  17061.     AL = base interrupt vector for IRQ0-IRQ7
  17062.     AH = base interrupt vector for IRQ8-IRQ15
  17063.     BL = interrupt vector for BIOS print screen function (Phar Lap only)
  17064. Note:    this function is also supported by FlashTek X-32VM
  17065. SeeAlso: INT 31/AX=0400h,INT 67/AX=DE0Ah
  17066. ----------21250D-----------------------------
  17067. INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  17068.     AX = 250Dh
  17069. Return: CF clear
  17070.     EAX = CS:IP of real-mode callback procedure that will call through
  17071.         from real mode to a protected-mode routine
  17072.     EBX = 32-bit real-mode address of intermode call data buffer
  17073.     ECX = size in bytes of intermode call data buffer
  17074.     ES:EDX = protected-mode address of intermode call data buffer
  17075. Notes:    this function is also supported by FlashTek X-32VM
  17076.     X-32VM guarantees the intermode buffer to be at least 4 KB
  17077. SeeAlso: AX=250Eh
  17078.  
  17079. Call real-mode callback with:
  17080.     STACK:    DWORD    offset to protected-mode code
  17081.         WORD    placeholder for protected-mode CS
  17082.         DWORD    pointer to selector structure (see below)
  17083.             or 0000h:0000h for defaults
  17084.         var    parameters for protected-mode procedure
  17085. Return: via FAR return
  17086.  
  17087. Format of selector structure:
  17088. Offset    Size    Description
  17089.  00h    WORD    protected-mode GS selector
  17090.  02h    WORD    protected-mode FS selector
  17091.  04h    WORD    protected-mode ES selector
  17092.  06h    WORD    protected-mode DS selector
  17093. ----------21250E-----------------------------
  17094. INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  17095.     AX = 250Eh
  17096.     EBX = CS:IP of real-mode procedure to call
  17097.     ECX = number of two-byte words to copy from protected-mode stack
  17098.           to real-mode stack
  17099. Return: CF clear if successful
  17100.         all segment registers unchanged
  17101.         all general registers contain values set by real-mode procedure
  17102.         all other flags set as they were left by real-mode procedure
  17103.         stack unchanged
  17104.     CF set on error
  17105.         EAX = error code
  17106.         01h not enough real-mode stack space
  17107. Note:    this function is also supported by FlashTek X-32VM; under X-32VM, the
  17108.       call will fail if ECX > 0000003Fh
  17109. SeeAlso: AX=250Dh,AX=2510h,AH=E1h"OS/286",INT 31/AX=0301h
  17110. ----------21250F-----------------------------
  17111. INT 21 - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  17112.     AX = 250Fh
  17113.     ES:EBX = 48-bit protected-mode address to convert
  17114. Return: CF clear if successful (address < 1MB)
  17115.         ECX = 32-bit real-mode MS-DOS address
  17116.     CF set on error (address >= 1MB)
  17117.         ECX = linear address
  17118. Note:    this function is also supported by FlashTek X-32VM
  17119. SeeAlso: AX=2510h
  17120. ----------212510-----------------------------
  17121. INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  17122.     AX = 2510h
  17123.     EBX = CS:IP of real-mode procedure to call
  17124.     ECX = number of two-byte words to copy to protected-mode stack to
  17125.           real-mode stack
  17126.     DS:EDX -> pointer to parameter block (see below)
  17127. Return: CF clear if successful
  17128.         all segment registers unchanged,
  17129.         EDX unchanged
  17130.         all other general registers contain values set by real-mode proc
  17131.         all other flags are set as they were left by real-mode procedure
  17132.         real-mode register values are returned in the parameter block
  17133.     CF set on error
  17134.         EAX = error code
  17135.         01h not enough real-mode stack space
  17136. Note:    unlike most of the preceding 25xxh functions, this one is not
  17137.       supported by FlashTek X-32VM
  17138. SeeAlso: AX=250Eh,AX=250Fh
  17139.  
  17140. Format of parameter block:
  17141. Offset    Size    Description
  17142.  00h    WORD    real-mode DS value
  17143.  02h    WORD    real-mode ES value
  17144.  04h    WORD    real-mode FS value
  17145.  06h    WORD    real-mode GS value
  17146.  08h    DWORD    real-mode EAX value
  17147.  0Ch    DWORD    real-mode EBX value
  17148.  10h    DWORD    real-mode ECX value
  17149.  14h    DWORD    real-mode EDX value
  17150. ----------212511-----------------------------
  17151. INT 21 - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  17152.     AX = 2511h
  17153.     DS:EDX -> parameter block (see below)
  17154. Return: all segment registers unchanged
  17155.     EDX unchanged
  17156.     all other registers contain values set by the real-mode int handler
  17157.     the flags are set as they were left by the real-mode interrupt handler
  17158.     real-mode register values are returned in the parameter block
  17159. Note:    this function is also supported by FlashTek X-32VM
  17160. SeeAlso: AX=2503h,AX=2505h,AX=250Eh,AH=E3h"OS/286",INT 31/AX=0300h
  17161.  
  17162. Format of parameter block:
  17163. Offset    Size    Description
  17164.  00h    WORD    interrupt number
  17165.  02h    WORD    real-mode DS value
  17166.  04h    WORD    real-mode ES value
  17167.  06h    WORD    real-mode FS value
  17168.  08h    WORD    real-mode GS value
  17169.  0Ah    DWORD    real-mode EAX value
  17170.  0Eh    DWORD    real-mode EDX value
  17171. Note: all other real-mode values set from protected-mode registers
  17172. ----------212512-----------------------------
  17173. INT 21 - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  17174.     AX = 2512h
  17175.     DS:EDX -> pointer to ASCIIZ program name
  17176.     ES:EBX -> pointer to parameter block (see below)
  17177.     ECX = size in bytes of LDT buffer
  17178. Return: CF clear if successful
  17179.         EAX = number of segment descriptors in LDT
  17180.     CF set on error
  17181.         EAX = error code
  17182.         02h file not found or path invalid
  17183.         05h access denied
  17184.         08h insufficient memory
  17185.         0Ah environment invalid
  17186.         0Bh invalid file format
  17187.         80h LDT too small
  17188.  
  17189. Format of parameter block:
  17190. Offset    Size    Description
  17191. Input:
  17192.  00h    DWORD    32-bit offset of environment string
  17193.  04h    WORD    segment of environment string
  17194.  06h    DWORD    32-bit offset of command-tail string
  17195.  0Ah    WORD    segment of command-tail string
  17196.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  17197.  10h    WORD    segment of LDT buffer
  17198. Output:
  17199.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  17200.  14h    WORD    real/protected mode flag
  17201.         0000h  real mode
  17202.         0001h  protected mode
  17203.  16h    DWORD    initial EIP value
  17204.  1Ah    WORD    initial CS value
  17205.  1Ch    DWORD    initial ESP value
  17206.  20h    WORD    initial SS value
  17207.  22h    WORD    initial DS value
  17208.  24h    WORD    initial ES value
  17209.  26h    WORD    initial FS value
  17210.  28h    WORD    initial GS value
  17211. ----------212513-----------------------------
  17212. INT 21 - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  17213.     AX = 2513h
  17214.     BX = segment selector of descriptor in GDT or LDT
  17215.     CL = access-rights byte for alias descriptor
  17216.     CH = use-type bit (USE16 or USE32) for alias descriptor
  17217. Return: CF clear if successful
  17218.         AX = segment selector for created alias
  17219.     CF set on error
  17220.         EAX = error code
  17221.         08h insufficient memory (can't grow LDT)
  17222.         09h invalid segment selector in BX
  17223. ----------212514-----------------------------
  17224. INT 21 - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  17225.     AX = 2514h
  17226.     BX = segment selector of descriptor in GDT or LDT
  17227.     CL = new access-rights byte 
  17228.     CH = new use-type bit (USE16 or USE32)
  17229. Return: CF clear if successful
  17230.     CF set on error
  17231.         EAX = error code
  17232.         09h invalid selector in BX
  17233. SeeAlso: AX=2515h,INT 31/AX=0009h
  17234. ----------212515-----------------------------
  17235. INT 21 - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  17236.     AX = 2515h
  17237.     BX = segment selector of descriptor in GDT or LDT
  17238. Return: CF clear if successful
  17239.         CL = access-rights byte for segment
  17240.         CH = use-type bit (USE16 or USE32)
  17241.     ECX<16-31> destroyed
  17242.     CF set on error
  17243.         EAX = error code
  17244.         09h invalid segment selector in BX
  17245. SeeAlso: AX=2514h
  17246. ----------212516-----------------------------
  17247. INT 21 - Phar Lap 386/DOS-Extender - FREE ALL MEMORY OWNED BY LDT
  17248.     AX = 2516h
  17249.     ???
  17250. Return: ???
  17251. ----------212517-----------------------------
  17252. INT 21 - Phar Lap 386/DOS-Extender - GET INFO ON DOS DATA BUFFER
  17253.     AX = 2517h
  17254.     ???
  17255. Return: ???
  17256. ----------212518-----------------------------
  17257. INT 21 - Phar Lap 386/DOS-Extender - SPECIFY HANDLER FOR MOVED SEGMENTS
  17258.     AX = 2518h
  17259.     ???
  17260. Return: ???
  17261. ----------212519-----------------------------
  17262. INT 21 - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  17263.     AX = 2519h
  17264. Return: CF clear
  17265.     EAX = error code
  17266.         0000h  no error
  17267.         0001h  out of physical memory
  17268.         0002h  out of swap space (unable to grow swap file)
  17269.         0003h  out of LDT entries and unable to grow LDT
  17270.         0004h  unable to change extended memory allocation mark
  17271.         FFFFFFFFh    paging disabled
  17272. Note:    VMM is the Virtual Memory Manager option
  17273. ----------21251A-----------------------------
  17274. INT 21 - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  17275.     AX = 251Ah
  17276.     EDX = number of 4k pages to lock
  17277.     if BL = 00h
  17278.         ECX = linear address of first page to lock
  17279.     if BL = 01h
  17280.         ES:ECX -> pointer to first page to lock
  17281. Return: CF clear if successful
  17282.     CF set on error
  17283.         EAX = error code
  17284.         08h insufficient memory
  17285.         09h invalid address range
  17286. SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
  17287. ----------21251B-----------------------------
  17288. INT 21 - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  17289.     AX = 251Bh
  17290.     EDX = number of pages to unlock
  17291.     if BL = 00h
  17292.         ECX = linear address of first page to unlock
  17293.     if BL = 01h
  17294.         ES:ECX -> pointer to first page to unlock
  17295. Return: CF clear if successful
  17296.     CF set on error
  17297.         EAX = error code
  17298.         09h invalid address range
  17299. SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
  17300. ----------21251D-----------------------------
  17301. INT 21 - Phar Lap 386/DOS-Extender VMM - READ PAGE-TABLE ENTRY
  17302.     AX = 251Dh
  17303.     ???
  17304. Return: ???
  17305. SeeAlso: AX=251Eh,AX=EB00h,INT 31/AX=0506h
  17306. ----------21251E-----------------------------
  17307. INT 21 - Phar Lap 386/DOS-Extender VMM - WRITE PAGE-TABLE ENTRY
  17308.     AX = 251Eh
  17309.     ???
  17310. Return: ???
  17311. SeeAlso: AX=251Dh,INT 31/AX=0507h
  17312. ----------21251F-----------------------------
  17313. INT 21 - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  17314.     AX = 251Fh
  17315.     ???
  17316. Return: ???
  17317. SeeAlso: AX=251Dh,AX=251Eh
  17318. ----------212520-----------------------------
  17319. INT 21 - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  17320.     AX = 2520h
  17321.     DS:EDX -> pointer to buffer at least 100 bytes in size (see below)
  17322.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  17323. Return: carry flag clear    
  17324.  
  17325. Format of VM stats buffer:
  17326. Offset    Size    Description
  17327.  00h    DWORD    VM status
  17328.         0001h VM subsystem is present
  17329.         0000h VM not present
  17330.  04h    DWORD    "nconvpg" number of conventional memory pages available
  17331.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  17332.  0Ch    DWORD    "nextpg" total number of extended memory pages
  17333.  10h    DWORD    "extlim" extender memory pages limit
  17334.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  17335.  18h    DWORD    "alockpg" number of locked pages owned by application
  17336.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  17337.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  17338.  24h    DWORD    linear address of beginning of application address space
  17339.  28h    DWORD    linear address of end of application address space
  17340.  2Ch    DWORD    number of seconds since last time VM stats were reset
  17341.  30h    DWORD    number of page faults since last time
  17342.  34h    DWORD    number of pages written to swap file since last time
  17343.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  17344.  3Ch    DWORD    number of virtual pages allocated to the application
  17345.  40h    DWORD    size in pages of swap file
  17346.  44h    DWORD    number of system pages allocated with EMS calls
  17347.  48h    DWORD    minimum number of conventional memory pages
  17348.  4Ch    DWORD    maximum size in bytes to which swap file can be increased
  17349.  50h    DWORD    "vmflags" bit 0 = 1 if page fault in progress
  17350.  54h 16 BYTEs    reserved for future expansion (set to zero)
  17351. ----------212521-----------------------------
  17352. INT 21 - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEMORY USAGE
  17353.     AX = 2521h
  17354.     EBX = max 4k pages of physical extended memory which program may use
  17355. Return: CF clear if successful
  17356.        EBX = maximum limit in pages
  17357.        ECX = minimum limit in pages
  17358.     CF set on error
  17359.         EAX = error code
  17360.         08h insufficient memory or -nopage switch used
  17361. SeeAlso: AX=2522h
  17362. ----------212522-----------------------------
  17363. INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY ALTERNATE PAGE-FAULT HANDLER
  17364.     AX = 2522h
  17365.     ???
  17366. Return: ???
  17367. SeeAlso: AX=2523h
  17368. ----------212523-----------------------------
  17369. INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  17370.     AX = 2523h
  17371.     ???
  17372. Return: ???
  17373. SeeAlso: AX=2522h
  17374. ----------212524-----------------------------
  17375. INT 21 - Phar Lap 386/DOS-Extender VMM - INSTALL PAGE-REPLACEMENT HANDLERS
  17376.     AX = 2524h
  17377.     ???
  17378. Return: ???
  17379. ----------212525-----------------------------
  17380. INT 21 - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENTIONAL MEM USAGE
  17381.     AX = 2525h
  17382.     EBX = limit in 4k pages of physical conventional memory which program 
  17383.           may use
  17384. Return: CF clear if successful
  17385.         EBX = maximum limit in pages
  17386.         ECX = minimum limit in pages
  17387.     CF set on error
  17388.         EAX = error code
  17389.         08h insufficient memory or -nopage switch used
  17390. SeeAlso: AX=2521h
  17391. ----------212526-----------------------------
  17392. INT 21 - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  17393.     AX = 2526h
  17394.     ???
  17395. Return: ???
  17396. ----------21252B-----------------------------
  17397. INT 21 - FlashTek X-32VM - VIRTUAL MEMORY MANAGEMENT - PAGE LOCKING
  17398.     AX = 252Bh
  17399.     BH = function
  17400.         05h lock pages
  17401.         06h unlock pages
  17402.     BL = address type
  17403.         00h linear address
  17404.         ECX = linear start address of memory region
  17405.         01h segmented address
  17406.         ES:ECX -> start of memory region
  17407.     EDX = size of memory region in bytes
  17408. Return: CF clear if successful
  17409.     CF set on error
  17410. Note:    if X-32 is not using virtual memory, this function always succeeds
  17411. ----------212532-----------------------------
  17412. INT 21 - FlashTek X-32VM - GET EXCEPTION HANDLER VECTOR
  17413.     AX = 2532h
  17414.     CL = exception number (00h-0Fh)
  17415. Return: CF clear if successful
  17416.         ES:EBX = CS:EIP of current exception handler
  17417.     CF set on error (CL > 0Fh)
  17418. SeeAlso: AX=2533h
  17419. ----------212533-----------------------------
  17420. INT 21 - FlashTek X-32VM - SET EXCEPTION HANDLER VECTOR
  17421.     AX = 2533h
  17422.     CL = exception number (00h-0Fh)
  17423.     DS:EDX = CS:EIP of new exception handler
  17424. Return: CF clear if successful
  17425.     CF set on error (CL > 0Fh)
  17426. SeeAlso: AX=2532h
  17427. ----------2125C0-----------------------------
  17428. INT 21 - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  17429.     AX = 25C0h
  17430.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  17431. Return: CF clear if successful
  17432.         AX = real-mode paragraph address of memory
  17433.     CF set on error
  17434.         AX = error code
  17435.         07h MS-DOS memory control blocks destroyed
  17436.         08h insufficient memory
  17437.         BX = size in paragraphs of largest available memory block
  17438. SeeAlso: AX=25C1h,AX=25C2h
  17439. ----------2125C1-----------------------------
  17440. INT 21 - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  17441.     AX = 25C1h
  17442.     CX = real-mode paragraph address of memory block to free
  17443. Return: CF clear if successful
  17444.         EAX destroyed
  17445.     CF set on error
  17446.         AX = error code
  17447.         07h MS-DOS memory control blocks destroyed
  17448.         09h invalid memory block address in CX
  17449. SeeAlso: AX=25C0h,AX=25C2h
  17450. ----------2125C2-----------------------------
  17451. INT 21 - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  17452.     AX = 25C2h
  17453.     BX = new requested block size in paragraphs
  17454.     CX = real-mode paragraph address of memory block to modify
  17455. Return: CF clear if successful
  17456.         EAX destroyed
  17457.     CF set on error
  17458.         AX = error code
  17459.         07h MS-DOS memory control blocks destroyed
  17460.         08h insufficient memory
  17461.         09h invalid memory block address in CX
  17462.         BX = size in paragraphs of largest available memory block
  17463. SeeAlso: AX=25C0h,AX=25C1h
  17464. ----------2125C3-----------------------------
  17465. INT 21 - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  17466.     AX = 25C3h
  17467.     ES:EBX -> pointer to parameter block (see below)
  17468.     DS:EDX -> pointer to ASCIIZ program filename
  17469. Return: CF clear if successful
  17470.         all registers unchanged
  17471.     CF set on error
  17472.         EAX = error code
  17473.         01h function code in AL is invalid ???
  17474.         02h file not found or path invalid
  17475.         05h access denied
  17476.         08h insufficient memory to load program
  17477.         0Ah environment invalid
  17478.         0Bh invalid file format
  17479.  
  17480. Format of parameter block:
  17481. Offset    Size    Description
  17482.  00h    DWORD    32-bit offset of environment string
  17483.  04h    WORD    segment selector of environment string
  17484.  06h    DWORD    32-bit offset of command-tail string
  17485.  0Ah    WORD    segment selector of command-tail string
  17486. ----------2126-------------------------------
  17487. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  17488.     AH = 26h
  17489.     DX = segment at which to create PSP (see below)
  17490. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  17491.       taken from interrupt vector table
  17492.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  17493.       copy
  17494. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  17495.  
  17496. Format of PSP:
  17497. Offset    Size    Description
  17498.  00h  2 BYTEs    INT 20 instruction for CP/M CALL 0 program termination
  17499.         the CDh 20h here is often used as a signature for a valid PSP
  17500.  02h    WORD    segment of first byte beyond memory allocated to program
  17501.  04h    BYTE    unused filler
  17502.  05h    BYTE    CP/M CALL 5 service request (FAR JMP to 000C0h)
  17503.         BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
  17504.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  17505.  08h  2 BYTEs    remainder of FAR JMP at 05h
  17506.  0Ah    DWORD    stored INT 22 termination address
  17507.  0Eh    DWORD    stored INT 23 control-Break handler address
  17508.  12h    DWORD    DOS 1.1+ stored INT 24 critical error handler address
  17509.  16h    WORD    segment of parent PSP
  17510.  18h 20 BYTEs    DOS 2+ Job File Table, one byte per file handle, FFh = closed
  17511.  2Ch    WORD    DOS 2+ segment of environment for process
  17512.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  17513.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  17514.  34h    DWORD    DOS 3+ pointer to JFT (default PSP:0018h)
  17515.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  17516.         used by SHARE in DOS 3.3
  17517.  3Ch  4 BYTEs    unused by DOS versions <= 5.00
  17518.         reportedly used by Novell NetWare shell 3.x
  17519.  40h  2 BYTEs    DOS 5.0 version to return on INT 21/AH=30h
  17520.  42h  6 BYTEs    unused by DOS versions <= 5.00
  17521.  48h    BYTE    (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
  17522.  49h  7 BYTEs    unused by DOS versions <= 5.00
  17523.  50h  3 BYTEs    DOS 2+ service request (INT 21/RETF instructions)
  17524.  53h  9 BYTEs    unused in DOS versions <= 5.00
  17525.  5Ch 16 BYTEs    first default FCB, filled in from first commandline argument
  17526.         overwrites second FCB if opened
  17527.  6Ch 16 BYTEs    second default FCB, filled in from second commandline argument
  17528.         overwrites beginning of commandline if opened
  17529.  7Ch  4 BYTEs    unused
  17530.  80h 128 BYTEs    commandline / default DTA
  17531.         command tail is BYTE for length of tail, N BYTEs for the tail,
  17532.         followed by a BYTE containing 0Dh
  17533. Notes:    in DOS versions 3.0 and up, the limit on simultaneously open files may
  17534.       be increased by allocating memory for a new open file table, filling
  17535.       it with FFh, copying the first 20 bytes from the default table, and
  17536.       adjusting the pointer and count at 34h and 32h.  However, DOS
  17537.       versions through  at least 3.30 will only copy the first 20 file
  17538.       handles into a child PSP (including the one created on EXEC).
  17539.     network redirectors based on the original MS-Net implementation use
  17540.       values of 80h-FEh in the open file table to indicate remote files;
  17541.       Novell NetWare reportedly also uses values of 80h-FEh
  17542.     MSDOS 5.00 incorrectly fills the FCB fields when loading a program
  17543.       high; the first FCB is empty and the second contains the first
  17544.       parameter
  17545.     some DOS extenders place protected-mode values in various PSP fields
  17546.       such as the "parent" field, which can confuse PSP walkers.  Always
  17547.       check either for the CDh 20h signature or that the suspected PSP is
  17548.       at the beginning of a memory block which owns itself (the preceding
  17549.       paragraph should be a valid MCB with "owner" the same as the
  17550.       suspected PSP).
  17551.  
  17552. Format of environment block:
  17553. Offset    Size    Description
  17554.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  17555.       N BYTEs    second environment variable, ASCIZ string
  17556.     ...
  17557.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  17558.     BYTE    00h
  17559. ---DOS 3+---
  17560.     WORD    number of strings following environment (normally 1)
  17561.       N BYTEs    ASCIZ full pathname of program owning this environment
  17562.         other strings may follow
  17563. ----------2127-------------------------------
  17564. INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE
  17565.     AH = 27h
  17566.     CX = number of records to read
  17567.     DS:DX -> opened FCB (see AH=0Fh)
  17568. Return: AL = status
  17569.         00h successful, all records read
  17570.         01h end of file, no data read
  17571.         02h segment wrap in DTA, no data read
  17572.         03h end of file, partial read
  17573.     [DTA] = records read from file
  17574.     CX = number of records read (return AL = 00h or 03h)
  17575. Notes:    read begins at current file position as specified in FCB; the file
  17576.       position is updated after reading
  17577.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  17578. SeeAlso: AH=21h,AH=28h,AH=3Fh
  17579. ----------2128-------------------------------
  17580. INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE
  17581.     AH = 28h
  17582.     CX = number of records to write
  17583.     DS:DX -> opened FCB (see AH=0Fh)
  17584.     [DTA] = records to write
  17585. Return: AL = status
  17586.         00h successful
  17587.         01h disk full or file read-only
  17588.         02h segment wrap in DTA
  17589.     CX = number of records written
  17590. Notes:    write begins at current file position as specified in FCB; the file
  17591.       position is updated after writing
  17592.     if CX = 0000h on entry, no data is written; instead the file size is
  17593.       adjusted to be the same as the file position specified by the random
  17594.       record and record size fields of the FCB
  17595.     if the data to be written is less than a disk sector, it is copied into
  17596.       a DOS disk buffer, to be written out to disk at a later time
  17597.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  17598. SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h
  17599. ----------2129-------------------------------
  17600. INT 21 - DOS 1+ - PARSE FILENAME INTO FCB
  17601.     AH = 29h
  17602.     AL = parsing options
  17603.         bit 0: skip leading separators
  17604.         bit 1: use existing drive number in FCB if no drive is specified,
  17605.            instead of setting field to zero
  17606.         bit 2: use existing filename in FCB if no base name is specified,
  17607.            instead of filling field with blanks
  17608.         bit 3: use existing extension in FCB if no extension is specified,
  17609.            instead of filling field with blanks
  17610.         bits 4-7: reserved (0)
  17611.     DS:SI -> filename string (both '*' and '?' wildcards OK)
  17612.     ES:DI -> buffer for unopened FCB
  17613. Return: AL = result code
  17614.         00h successful parse, no wildcards encountered
  17615.         01h successful parse, wildcards present
  17616.         FFh failed (invalid drive specifier)
  17617.     DS:SI -> first unparsed character
  17618.     ES:DI buffer filled with unopened FCB (see AH=0Fh)
  17619. Notes:    asterisks expanded to question marks in the FCB
  17620.     all processing stops when a filename terminator is encountered
  17621.     cannot be used with filespecs which include a path (DOS 2+)
  17622. SeeAlso: AH=0Fh,AH=16h,AH=26h
  17623. ----------212A-------------------------------
  17624. INT 21 - DOS 1+ - GET SYSTEM DATE
  17625.     AH = 2Ah
  17626. Return: CX = year (1980-2099)
  17627.     DH = month
  17628.     DL = day
  17629. ---DOS 1.10+---
  17630.     AL = day of week (00h=Sunday)
  17631. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h,INT 1A/AH=04h,INT 2F/AX=120Dh
  17632. ----------212B-------------------------------
  17633. INT 21 - DOS 1+ - SET SYSTEM DATE
  17634.     AH = 2Bh
  17635.     CX = year (1980-2099)
  17636.     DH = month
  17637.     DL = day
  17638. Return: AL = status
  17639.         00h successful
  17640.         FFh invalid date, system date unchanged
  17641. Note:    DOS 3.3+ also sets CMOS clock
  17642. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  17643. ----------212B--CX4149-----------------------
  17644. INT 21 - AI Architects - ??? - INSTALLATION CHECK
  17645.     AH = 2Bh
  17646.     CX = 4149h ('AI')
  17647.     DX = 413Fh ('A?')
  17648. Return: AL <> FFh if installed
  17649. Note:    Borland's TKERNEL makes this call
  17650. ----------212B--CX4358-----------------------
  17651. INT 21 - PC Tools v5.x PC-Cache - INSTALLATION CHECK
  17652.     AH = 2Bh
  17653.     CX = 4358h ('CX')
  17654. Return: AL = FFh if PC-Cache not installed
  17655.     AL = 00h if installed
  17656.         CX = 6378h ('cx')
  17657.         BX = ???
  17658.         DX = ???
  17659. SeeAlso: INT 16/AX=FFA5h/CX=1111h
  17660. ----------212B--CX4445-----------------------
  17661. INT 21 - DESQview - INSTALLATION CHECK
  17662.     AH = 2Bh
  17663.     CX = 4445h ('DE')
  17664.     DX = 5351h ('SQ')
  17665.     AL = subfunction (DV v2.00+)
  17666.         01h get version
  17667.         Return: BX = version (BH = major, BL = minor)
  17668.         Note: early copies of v2.00 return 0002h
  17669.         02h get shadow buffer info, and start shadowing
  17670.         Return: BH = rows in shadow buffer
  17671.             BL = columns in shadow buffer
  17672.             DX = segment of shadow buffer
  17673.         04h get shadow buffer info
  17674.         Return: BH = rows in shadow buffer
  17675.             BL = columns in shadow buffer
  17676.             DX = segment of shadow buffer
  17677.         05h stop shadowing
  17678. Return: AL = FFh if DESQview not installed
  17679. Notes:    in DESQview v1.x, there were no subfunctions; this call only identified
  17680.       whether or not DESQview was loaded.  DESQview v2.52 performs function
  17681.       01h for all subfunction requests 0Ch and higher and appears to ignore
  17682.       all lower-numbered functions not listed here.
  17683.     DESQview versions 2.5x are part of DESQview/X v1.0x.
  17684. BUG:    subfunction 05h does not appear to work correctly in DESQview 2.52
  17685. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
  17686. ----------212B--CX454C-----------------------
  17687. INT 21 - ELRES v1.1 - INSTALLATION CHECK
  17688.     AH = 2Bh
  17689.     CX = 454Ch ('EL')
  17690.     DX = 5253h ('RS')
  17691. Return: ES:BX -> ELRES history structure (see below)
  17692.     DX = DABEh (signature, DAve BEnnett)
  17693. Note:    ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett
  17694.       which stores recent errorlevel values, allows them to be retrieved
  17695.       for use in batch files, and can place them in an environment variable
  17696. SeeAlso: AH=4Bh"ELRES",AH=4Dh
  17697.  
  17698. Format of ELRES history structure:
  17699. Offset    Size    Description
  17700.  00h    WORD    number of return codes which can be stored by following buffer
  17701.  02h    WORD    current position in buffer (treated as a ring)
  17702.  04h  N BYTEs    ELRES buffer
  17703. ----------212B01CX5441-----------------------
  17704. INT 21 - TAME v2.10+ - INSTALLATION CHECK
  17705.     AX = 2B01h
  17706.     CX = 5441h ('TA')
  17707.     DX = 4D45h ('ME')
  17708. ---v2.60---
  17709.     BH = ???
  17710.         00h skip ???, else do
  17711. Return: AL = 02h if installed
  17712.     ES:DX -> data area in TAME-RES (see below)
  17713. Note:    TAME is a shareware program by David G. Thomas which gives up CPU time
  17714.       to other partitions under a multitasker when the current partition's
  17715.       program incessantly polls the keyboard or system time
  17716.  
  17717. Format of TAME 2.10-2.20 data area:
  17718. Offset    Size    Description
  17719.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  17720.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  17721.  02h    DWORD    number of task switches
  17722.  06h    DWORD    number of keyboard polls
  17723.  0Ah    DWORD    number of time polls
  17724.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  17725.  12h    DWORD    original INT 10h
  17726.  16h    DWORD    original INT 14h
  17727.  1Ah    DWORD    original INT 15h
  17728.  1Eh    DWORD    original INT 16h
  17729.  22h    DWORD    original INT 17h
  17730.  26h    DWORD    original INT 21h
  17731.  2Ah    DWORD    original INT 28h
  17732.  2Eh    WORD    offset of TAME INT 10h handler
  17733.  30h    WORD    offset of TAME INT 14h handler
  17734.  32h    WORD    offset of TAME INT 15h handler
  17735.  34h    WORD    offset of TAME INT 16h handler
  17736.  36h    WORD    offset of TAME INT 17h handler
  17737.  38h    WORD    offset of TAME INT 21h handler
  17738.  3Ah    WORD    offset of TAME INT 28h handler
  17739.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  17740.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  17741.  40h    WORD    number of polls remaining before next task switch
  17742.  42h    WORD    /KEYIDLE value
  17743.  44h    BYTE    flags for interrupts already grabbed by TAME
  17744.         bit 0: INT 10h
  17745.             1: INT 14h
  17746.             2: INT 15h
  17747.             3: INT 16h
  17748.             4: INT 17h
  17749.             5: INT 21h
  17750.             6: INT 28h
  17751.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  17752.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  17753.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  17754.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  17755.  49h    BYTE    window or task number for this task
  17756.  4Ah    BYTE    multitasker type ???
  17757.         01h DESQview
  17758.         02h DoubleDOS
  17759.         03h TopView
  17760.         ???
  17761.  4Bh    BYTE    type of task switching selected
  17762.         bit 0: DESQview???
  17763.             1: DoubleDOS???
  17764.             2: TopView???
  17765.             3: KeySwitch
  17766.             4: HLT instruction
  17767.  4Ch    BYTE    ???
  17768.  4Dh    BYTE    flags
  17769.         bit 1: /FREQ instead of /MAX
  17770.  4Eh    BYTE    /FG: value
  17771.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  17772.  50h    BYTE    ???
  17773.  
  17774. Format of TAME 2.30 data area:
  17775. Offset    Size    Description
  17776.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  17777.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  17778.  02h    DWORD    number of task switches
  17779.  06h    DWORD    number of keyboard polls
  17780.  0Ah    DWORD    number of time polls
  17781.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  17782.  12h    DWORD    time of last /CLEAR or TAME-RES load
  17783.  16h    DWORD    time yielded
  17784.  1Ah    DWORD    time spent polling
  17785.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  17786.  22h    DWORD    original INT 10h
  17787.  26h    DWORD    original INT 14h
  17788.  2Ah    DWORD    original INT 15h
  17789.  2Eh    DWORD    original INT 16h
  17790.  32h    DWORD    original INT 17h
  17791.  36h    DWORD    original INT 21h
  17792.  3Ah    DWORD    original INT 28h
  17793.  3Eh    WORD    offset of TAME INT 10h handler
  17794.  40h    WORD    offset of TAME INT 14h handler
  17795.  42h    WORD    offset of TAME INT 15h handler
  17796.  44h    WORD    offset of TAME INT 16h handler
  17797.  46h    WORD    offset of TAME INT 17h handler
  17798.  48h    WORD    offset of TAME INT 21h handler
  17799.  4Ah    WORD    offset of TAME INT 28h handler
  17800.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  17801.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  17802.  50h    WORD    number of polls remaining before next task switch
  17803.  52h    WORD    /KEYIDLE value
  17804.  54h    WORD    /FG: value
  17805.  56h    WORD    task switches left until next FGONLY DESQview API call
  17806.  58h    WORD    multitasker version
  17807.  5Ah    WORD    virtual screen segment
  17808.  5Ch    BYTE    flags for interrupts already grabbed by TAME
  17809.         bit 0: INT 10h
  17810.             1: INT 14h
  17811.             2: INT 15h
  17812.             3: INT 16h
  17813.             4: INT 17h
  17814.             5: INT 21h
  17815.             6: INT 28h
  17816.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  17817.  5Eh    BYTE    window or task number for this task
  17818.  5Fh    BYTE    multitasker type
  17819.         01h DESQview
  17820.         02h DoubleDOS
  17821.         03h TopView
  17822.         04h OmniView
  17823.         05h VM/386
  17824.  60h    BYTE    type of task switching selected (bit flags)
  17825.         bit 0: DESQview
  17826.             1: DoubleDOS
  17827.             2: TopView
  17828.             3: OmniView
  17829.             4: KeySwitch
  17830.             5: HLT instruction
  17831.  61h    BYTE    watch_DOS
  17832.  62h    BYTE    bit flags
  17833.         bit 0: TAME enabled
  17834.             1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick)
  17835.             2: /TIMEPOLL
  17836.             3: /KEYPOLL
  17837.             4: inhibit timer
  17838.             5: enable status monitoring
  17839.  63h    BYTE    old status
  17840.  64h    WORD    signature DA34h
  17841.  
  17842. Format of TAME 2.60 data area:
  17843. Offset    Size    Description
  17844.  00h    BYTE    data structure minor version number (02h in TAME 2.60)
  17845.  01h    BYTE    data structure major version number (0Bh in TAME 2.60)
  17846.  02h    DWORD    number of task switches
  17847.  06h    DWORD    number of keyboard polls
  17848.  0Ah    DWORD    number of time polls
  17849.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  17850.  12h    DWORD    time of last /CLEAR or TAME-RES load
  17851.  16h    DWORD    time yielded
  17852.  1Ah    DWORD    time spent polling
  17853.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  17854.  22h  4 BYTEs    ???
  17855.  26h    DWORD    original INT 10h
  17856.  2Ah    DWORD    original INT 14h
  17857.  2Eh    DWORD    original INT 15h
  17858.  32h    DWORD    original INT 16h
  17859.  36h    DWORD    original INT 17h
  17860.  3Ah    DWORD    original INT 21h
  17861.  3Eh    DWORD    original INT 28h
  17862.  42h    WORD    offset of TAME INT 10h handler
  17863.  44h    WORD    offset of TAME INT 14h handler
  17864.  46h    WORD    offset of TAME INT 15h handler
  17865.  48h    WORD    offset of TAME INT 16h handler
  17866.  4Ah    WORD    offset of TAME INT 17h handler
  17867.  4Ch    WORD    offset of TAME INT 21h handler
  17868.  4Eh    WORD    offset of TAME INT 28h handler
  17869.  50h    WORD    X in /max:X,Y or /freq:X,Y
  17870.  52h    WORD    Y in /max:X,Y or /freq:X,Y
  17871.  54h    WORD    number of polls remaining before next task switch
  17872.  56h    WORD    /KEYIDLE value
  17873.  58h  4 BYTEs    ???
  17874.  5Ch    WORD    X in /boost:X,Y
  17875.  5Eh    WORD    Y in /boost:X,Y
  17876.  60h    WORD    /FG: value
  17877.  62h    WORD    task switches left until next FGONLY DESQview API call
  17878.  64h    WORD    multitasker version ???
  17879.  66h    WORD    virtual screen segment
  17880.  68h    BYTE    flags for interrupts already grabbed by TAME
  17881.         bit 0: INT 10h
  17882.             1: INT 14h
  17883.             2: INT 15h
  17884.             3: INT 16h
  17885.             4: INT 17h
  17886.             5: INT 21h
  17887.             6: INT 28h
  17888.  69h    BYTE    flags for interrupts which may be acted on (same bits as above)
  17889.  6Ah    BYTE    window or task number for this task
  17890.  6Bh    BYTE    multitasker type
  17891.         01h DESQview
  17892.         02h DoubleDOS
  17893.         03h TopView
  17894.         04h OmniView
  17895.         05h VM/386
  17896.  6Ch    BYTE    type of task switching selected (bit flags)
  17897.         bit 0: DESQview
  17898.             1: DoubleDOS
  17899.             2: TopView
  17900.             3: OmniView
  17901.             4: KeySwitch
  17902.             5: HLT instruction
  17903.  6Dh    BYTE    watch_DOS
  17904.  6Eh    BYTE    bit flags
  17905.         bit 0: TAME enabled
  17906.             1: /FREQ instead of /MAX (counts in 50h and 52h per tick)
  17907.             2: /TIMEPOLL
  17908.             3: /KEYPOLL
  17909.             4: inhibit timer
  17910.             5: enable status monitoring
  17911.  6Fh    BYTE    old status
  17912.  70h    WORD    signature DA34h
  17913. ----------212B44BX4D41-----------------------
  17914. INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK
  17915.     AX = 2B44h ('D')
  17916.     BX = 4D41h ('MA')
  17917.     CX = 7063h ('pc')
  17918.     DX = 4157h ('AW')
  17919. Return: AX = 4F4Bh ('OK') if large host resident
  17920.        = 6F6Bh ('ok') if small host resident
  17921.     CX:DX -> API entry point
  17922. SeeAlso: INT 16/AH=79h
  17923.  
  17924. Call API entry point with:
  17925.     AX = 0000h get pcANYWHERE IV version
  17926.         DS:SI -> BYTE buffer for host type code
  17927.         Return: AH = version number
  17928.             AL = revision number
  17929.             DS:DI buffer byte filled with
  17930.             00h full-featured host
  17931.             01h limited-feature LAN host
  17932.             other API may not be supported
  17933.     AX = 0001h initialize operation
  17934.         DS:SI -> initialization request structure (see below)
  17935.         Return: AX = function status (see below)
  17936.     AX = 0002h get status
  17937.         Return: AH = current operating mode (see init req structure below)
  17938.             AL = current connection status
  17939.             bit 0: a physical connection is active
  17940.             bit 1: remove screen updating is active
  17941.             bit 2: connection checking is active
  17942.             bit 3: hot key detection is active
  17943.             bit 4: background file transfer is active
  17944.     AX = 0003h suspend remote screen updates
  17945.         Return: AX = function status (see below)
  17946.     AX = 0004h resume screen updates
  17947.         Return: AX = function status (see below)
  17948.     AX = 0005h end current remote access session
  17949.         DS:SI -> termination request structure (see below)
  17950.         Return: AX = function status (see below)
  17951.     AX = 0006h remove pcANYWHERE IV from memory
  17952.         Return: AX = status
  17953.             0000h successful
  17954.             FFD2h unable to release allocated memory
  17955.             FFD1h unable to release interrupt vectors
  17956.     AX = 8000h read data from communications channel
  17957.         DS:BX -> buffer
  17958.         CX = buffer size
  17959.         Return: AX >= number of characters read/available
  17960.             AX < 0 on error
  17961.     AX = 8001h write data to communications channel
  17962.         DS:BX -> buffer
  17963.         CX = buffer size
  17964.         Return: AX >= number of characters written
  17965.             AX < 0 on error
  17966.     AX = 8002h get connection status
  17967.         Return: AX = status
  17968.             > 0000h if connection active
  17969.             = 0000h if connection lost
  17970.             < 0000h on error
  17971.  
  17972. Format of initialization request structure:
  17973. Offset    Size    Description
  17974.  00h    BYTE    operating mode
  17975.         00h wait for a call
  17976.         01h hot key activates
  17977.         02h incoming call activates
  17978.         03h initiate a call
  17979.  01h  3 BYTEs    user ID to append to config file names
  17980.  04h    WORD    DS-relative pointer to path for config files
  17981.  06h    WORD    DS-relative pointer to path for program files
  17982.  
  17983. Format of termination request structure:
  17984. Offset    Size    Description
  17985.  00h    BYTE    operating mode after termination
  17986.         00h wait for a call
  17987.         01h hot key activates
  17988.         02h incoming call activates
  17989.         80h use current mode
  17990.         FFh remove from memory
  17991.  
  17992. Values for function status:
  17993.  0000h function completed successfully
  17994.  FFF2h unable to establish a connection when operating mode is
  17995.     "Initiate a call"
  17996.  FFF3h modem configuration is invalid (corrupt config)
  17997.  FFF4h modem initialization failed (no modem response)
  17998.  FFF5h the communications device could not be initialized
  17999.  FFF6h the host operator aborted the function
  18000.  FFF7h the communications driver type specified in the configuration file is
  18001.     different than the one loaded when pcANYWHERE IV was initially started
  18002.  FFF9h the configuration file is invalid
  18003.  FFFAh the configuration file could not be found
  18004.  FFFBh no session is active
  18005.  FFFCh a remote access session is active
  18006.  FFFDh the specified operating mode is invalid
  18007. ----------212C-------------------------------
  18008. INT 21 - DOS 1+ - GET SYSTEM TIME
  18009.     AH = 2Ch
  18010. Return: CH = hour
  18011.     CL = minute
  18012.     DH = second
  18013.     DL = 1/100 seconds
  18014. Note:    on most systems, the resolution of the system clock is about 5/100sec,
  18015.       so returned times generally do not increment by 1
  18016.     on some systems, DL may always return 00h
  18017. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
  18018. SeeAlso: INT 2F/AX=120Dh
  18019. ----------212D-------------------------------
  18020. INT 21 - DOS 1+ - SET SYSTEM TIME
  18021.     AH = 2Dh
  18022.     CH = hour
  18023.     CL = minute
  18024.     DH = second
  18025.     DL = 1/100 seconds
  18026. Return: AL = result
  18027.         00h successful
  18028.         FFh invalid time, system time unchanged
  18029. Note:    DOS 3.3+ also sets CMOS clock
  18030. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
  18031. ----------212E--DL00-------------------------
  18032. INT 21 - DOS 1+ - SET VERIFY FLAG
  18033.     AH = 2Eh
  18034.     DL = 00h (DOS 1.x/2.x only)
  18035.     AL = new state of verify flag
  18036.         00h off
  18037.         01h on
  18038. Notes:    default state at system boot is OFF
  18039.     when ON, all disk writes are verified provided the device driver
  18040.       supports read-after-write verification
  18041. SeeAlso: AH=54h
  18042. ----------212F-------------------------------
  18043. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  18044.     AH = 2Fh
  18045. Return: ES:BX -> current DTA
  18046. Note:    under the FlashTek X-32 DOS extender, the pointer is in ES:EBX
  18047. SeeAlso: AH=1Ah
  18048. ----------2130-------------------------------
  18049. INT 21 - DOS 2+ - GET DOS VERSION
  18050.     AH = 30h
  18051. ---DOS 5.0---
  18052.     AL = what to return in BH
  18053.         00h OEM number (as for DOS 2.0-4.0x)
  18054.         01h version flag
  18055. Return: AL = major version number (00h if DOS 1.x)
  18056.     AH = minor version number
  18057.     BL:CX = 24-bit user serial number (most versions do not use this)
  18058. ---if DOS <5 or AL=00h---
  18059.     BH = OEM number
  18060.         00h IBM
  18061.         05h Zenith
  18062.         16h DEC
  18063.         23h Olivetti
  18064.         29h Toshiba
  18065.         4Dh    Hewlett-Packard
  18066.         99h    STARLITE architecture (OEM DOS, NETWORK DOS, SMP DOS)
  18067.         FFh Microsoft, Phoenix
  18068. ---if DOS 5.0 and AL=01h---
  18069.     BH = version flag
  18070.         08h DOS is in ROM
  18071.         10h DOS is in HMA
  18072. Notes:    the OS/2 v1.x Compatibility Box returns major version 0Ah (10)
  18073.     the OS/2 v2.x Compatibility Box returns major version 14h (20)
  18074.     the Windows/NT DOS box returns major version 1Eh (30)
  18075.     DOS 4.01 and 4.02 identify themselves as version 4.00; use
  18076.       INT 21/AH=87h to distinguish between the original European MSDOS 4.00
  18077.       and the later PCDOS 4.0x and MSDOS 4.0x
  18078.     generic MSDOS 3.30, Compaq MSDOS 3.31, and others identify themselves
  18079.       as PC-DOS by returning OEM number 00h
  18080.     the version returned under DOS 4.0x may be modified by entries in
  18081.       the special program list (see AH=52h)
  18082.     the version returned under DOS 5.0 may be modified by SETVER; use
  18083.       AX=3306h to get the true version number
  18084. SeeAlso: AX=3000h/BX=3000h,AX=3306h,AX=4452h,AH=87h,INT 15/AX=4900h
  18085. SeeAlso: INT 2F/AX=122Fh,INT 2F/AX=E002h
  18086. ----------2130-------------------------------
  18087. INT 21 - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK
  18088.     AH = 30h
  18089.     EAX = 00003000h
  18090.     EBX = 50484152h ("PHAR")
  18091. Return: AL = major DOS version
  18092.     AH = minor DOS version
  18093.     EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed
  18094.         BL = ASCII major version number
  18095.     EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed
  18096.         EDX = address of GDA
  18097. SeeAlso: AX=2501h,AX=FF00h,INT 2F/AX=F100h
  18098. ----------2130--DXABCD-----------------------
  18099. INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
  18100.     AH = 30h
  18101.     DX = ABCDh
  18102. Return: DX = DCBAh if installed
  18103. SeeAlso: AX=0D20h,AX=30F1h
  18104. ----------213000BX1234-----------------------
  18105. INT 21 - CTask 2.0+ - INSTALLATION CHECK
  18106.     AX = 3000h
  18107.     BX = 1234h
  18108.     DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
  18109. Return: AL = DOS major version
  18110.     AH = DOS minor version
  18111.     CX:BX -> Ctask global data block
  18112. Notes:    if first eight bytes of returned data block equal eight bytes passed
  18113.       in, CTask is resident
  18114.     CTask is a multitasking kernel for C written by Thomas Wagner
  18115. ----------213000BX3000-----------------------
  18116. INT 21 - PC-MOS/386 v3.0 - INSTALLATION CHECK/GET VERSION
  18117.     AX = 3000h
  18118.     BX = 3000h
  18119.     CX = DX = 3000h
  18120. Return: AX = PC-MOS version
  18121. Program: PC-MOS/386 is a multitasking/multiuser MSDOS-compatible operating
  18122.       system by Software Links, Inc.
  18123. SeeAlso: AH=30h,INT 38/AH=02h,INT 38/AH=10h
  18124. ----------2130F1-----------------------------
  18125. INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
  18126.     AX = 30F1h
  18127. Return: AL = 00h if resident
  18128. SeeAlso: AH=30h/DX=ABCDh,AX=330Fh
  18129. ----------2130FFCX4445-----------------------
  18130. INT 21 - DESQ??? - INSTALLATION CHECK
  18131.     AX = 30FFh
  18132.     CX = 4445h ("DE")
  18133.     DX = 5351h ("SQ")
  18134. Return: BH = 05h if installed
  18135.     ???
  18136. Note:    called by DUBLDISK.COM v2.6; this function is not supported by
  18137.       DESQview, so it may be for DESQview's precursor DESQ.
  18138. SeeAlso: AX=4404h"DUBLDISK"
  18139. ----------2131-------------------------------
  18140. INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
  18141.     AH = 31h
  18142.     AL = return code
  18143.     DX = number of paragraphs to keep resident
  18144. Return: never
  18145. Notes:    the value in DX only affects the memory block containing the PSP;
  18146.       additional memory allocated via AH=48h is not affected
  18147.     the minimum number of paragraphs which will remain resident is 11h
  18148.       for DOS 2.x and 06h for DOS 3+
  18149.     most TSRs can save some memory by releasing their environment block
  18150.       before terminating (see AH=26h,AH=49h)
  18151. SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
  18152. ----------2132-------------------------------
  18153. INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE
  18154.     AH = 32h
  18155.     DL = drive number (00h = default, 01h = A:, etc)
  18156. Return: AL = status
  18157.         00h successful
  18158.         DS:BX -> Drive Parameter Block (DPB) for specified drive
  18159.         FFh invalid or network drive
  18160. Notes:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  18161.       except for the DWORD at offset 12h
  18162.     this call updates the DPB by reading the disk; the DPB may be accessed
  18163.       via the DOS list of lists (see AH=52h) if disk access is not
  18164.       desirable.
  18165.     undocumented prior to the release of DOS 5.0; only the DOS 4+ version
  18166.       of the DPB has been documented, however
  18167. SeeAlso: AH=1Fh,AH=52h
  18168.  
  18169. Format of DOS Drive Parameter Block:
  18170. Offset    Size    Description
  18171.  00h    BYTE    drive number (00h = A:, 01h = B:, etc)
  18172.  01h    BYTE    unit number within device driver
  18173.  02h    WORD    bytes per sector
  18174.  04h    BYTE    highest sector number within a cluster
  18175.  05h    BYTE    shift count to convert clusters into sectors
  18176.  06h    WORD    number of reserved sectors at beginning of drive
  18177.  08h    BYTE    number of FATs
  18178.  09h    WORD    number of root directory entries
  18179.  0Bh    WORD    number of first sector containing user data
  18180.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  18181.         16-bit FAT if greater than 0FF6h, else 12-bit FAT
  18182.  0Fh    BYTE    number of sectors per FAT
  18183.  10h    WORD    sector number of first directory sector
  18184.  12h    DWORD    address of device driver header
  18185.  16h    BYTE    media ID byte
  18186.  17h    BYTE    00h if disk accessed, FFh if not
  18187.  18h    DWORD    pointer to next DPB
  18188. ---DOS 2.x---
  18189.  1Ch    WORD    cluster containing start of current directory, 0000h=root,
  18190.         FFFFh = unknown
  18191.  1Eh 64 BYTEs    ASCIZ pathname of current directory for drive
  18192. ---DOS 3.x---
  18193.  1Ch    WORD    cluster at which to start search for free space when writing
  18194.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  18195. ---DOS 4.0-5.0---
  18196.  0Fh    WORD    number of sectors per FAT
  18197.  11h    WORD    sector number of first directory sector
  18198.  13h    DWORD    address of device driver header
  18199.  17h    BYTE    media ID byte
  18200.  18h    BYTE    00h if disk accessed, FFh if not
  18201.  19h    DWORD    pointer to next DPB
  18202.  1Dh    WORD    cluster at which to start search for free space when writing,
  18203.         usually the last cluster allocated
  18204.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  18205. ----------2133-------------------------------
  18206. INT 21 - DOS 2+ - EXTENDED BREAK CHECKING
  18207.     AH = 33h
  18208.     AL = subfunction
  18209.         00h get current extended break state
  18210.         Return: DL = current state, 00h = off, 01h = on
  18211.         01h set state of extended ^C/^Break checking
  18212.         DL = 00h off, check only on character I/O functions
  18213.              01h on, check on all DOS functions
  18214. Note:    under DOS 3.1+, this function does not use any of the DOS-internal and
  18215.       may thus be called at any time
  18216. SeeAlso: AX=3302h
  18217. ----------213302-----------------------------
  18218. INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  18219.     AX = 3302h
  18220.     DL = new state
  18221.          00h for OFF or 01h for ON
  18222. Return: DL = old state of extended BREAK checking
  18223. Note:    this function does not use any of the DOS-internal stacks and may thus
  18224.       be called at any time; one possible use is modifying Control-Break
  18225.       checking from within an interrupt handler or TSR
  18226. SeeAlso: AH=33h
  18227. ----------213305-----------------------------
  18228. INT 21 - DOS 4+ - GET BOOT DRIVE
  18229.     AX = 3305h
  18230. Return: DL = boot drive (1=A:,...)
  18231. Notes:    fully reentrant
  18232.     NEC 9800-series PCs always call the boot drive A: and assign the other
  18233.       drive letters sequentially to the other drives in the system
  18234. ----------213306-----------------------------
  18235. INT 21 - DOS 5.0 - GET TRUE VERSION NUMBER
  18236.     AX = 3306h
  18237. Return:    BL = major version
  18238.     BH = minor version
  18239.     DL = revision (bits 2-0, all others 0)
  18240.     DH = version flags
  18241.         bit 3: DOS is in ROM
  18242.         bit 4: DOS in in HMA
  18243. Notes:    this function always returns the true version number, unlike AH=30h,
  18244.       whose return value may be changed with SETVER
  18245.     because of the conflict from the CBIS PowerLAN redirector (see next
  18246.       entry), programs should check whether BH is less than 100 (64h)
  18247.       and BL is at least 5 before accepting the returned BX as the true
  18248.       version number; however, even this is not entirely reliable when
  18249.       that redirector is loaded
  18250.     fully reentrant
  18251. BUG:    DR-DOS 5.0 and 6.0 return CF set/AX=0001h for INT 21/AH=33h
  18252.       subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh
  18253.       for invalid subfunctions
  18254. SeeAlso: AH=30h,INT 2F/AX=112Fh
  18255. ----------213306-----------------------------
  18256. INT 21 - CBIS POWERLAN - NETWORK REDIRECTOR - ???
  18257.     AX = 3306h
  18258. Return: AX = 3306h
  18259.     BL = ??? (usually 00h)
  18260.     BH = ??? (usually 00h or FFh)
  18261. Note:    unknown function, is in conflict with DOS 5.0 version call
  18262. SeeAlso: AX=3306h"DOS"
  18263. ----------21330F-----------------------------
  18264. INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
  18265.     AX = 330Fh
  18266. Return: AL = 0Fh if resident (DOS returns AL=FFh)
  18267. SeeAlso: AX=30F1h,AX=33E0h
  18268. ----------2133E0-----------------------------
  18269. INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
  18270.     AX = 33E0h
  18271. Return: AL = E0h if resident (DOS returns AL=FFh)
  18272. SeeAlso: AX=330Fh,AX=357Fh
  18273. ----------2134-------------------------------
  18274. INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
  18275.     AH = 34h
  18276. Return: ES:BX -> one-byte InDOS flag
  18277. Notes:    the value of InDOS is incremented whenever an INT 21 function begins
  18278.       and decremented whenever one completes
  18279.     during an INT 28 call, it is safe to call some INT 21 functions even
  18280.       though InDOS may be 01h instead of zero
  18281.     InDOS alone is not sufficient for determining when it is safe to
  18282.       enter DOS, as the critical error handling decrements InDOS and
  18283.       increments the critical error flag for the duration of the critical
  18284.       error.  Thus, it is possible for InDOS to be zero even if DOS is
  18285.       busy.
  18286.     the critical error flag is the byte immediately following InDOS in
  18287.       DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ (except COMPAQ
  18288.       DOS 3.0, where the critical error flag is located 1AAh bytes BEFORE
  18289.       the critical section flag)
  18290.     For DOS 3.1+, an undocumented call exists to get the address of the
  18291.       critical error flag (see AX=5D06h)
  18292.     this function was undocumented prior to the release of DOS 5.0.
  18293. SeeAlso: AX=5D06h,AX=5D0Bh,INT 15/AX=DE1Fh,INT 28
  18294. ----------2135-------------------------------
  18295. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  18296.     AH = 35h
  18297.     AL = interrupt number
  18298. Return: ES:BX -> current interrupt handler
  18299. SeeAlso: AH=25h,AX=2503h
  18300. ----------213501-----------------------------
  18301. INT 21 P - FlashTek X-32VM - ALLOCATE PROTECTED-MODE SELECTOR
  18302.     AX = 3501h
  18303. Return: CF clear if successful
  18304.         BX = new selector
  18305.     CF set on error (no more selectors available)
  18306. Note:    the new selector will be an expand-up read/write data selector with
  18307.       undefined base and limit
  18308. SeeAlso: AX=3502h,INT 31/AX=0000h
  18309. ----------213502-----------------------------
  18310. INT 21 P - FlashTek X-32VM - DEALLOCATE PROTECTED-MODE SELECTOR
  18311.     AX = 3502h
  18312.     BX = selector
  18313. Return: CF clear if successful
  18314.     CF set on error (invalid selector)
  18315. Note:    only selectors allocated via AX=3501h should be deallocated
  18316. SeeAlso: AX=3501h,INT 31/AX=0001h
  18317. ----------213503-----------------------------
  18318. INT 21 P - FlashTek X-32VM - SET SELECTOR BASE ADDRESS
  18319.     AX = 3503h
  18320.     BX = selector
  18321.     ECX = base address
  18322. Return: CF clear if successful
  18323.     CF set on error (invalid selector)
  18324. SeeAlso: AX=3504h,AX=3505h,INT 31/AX=0007h
  18325. ----------213504-----------------------------
  18326. INT 21 P - FlashTek X-32VM - GET SELECTOR BASE ADDRESS
  18327.     AX = 3504h
  18328.     BX = selector
  18329. Return: CF clear if successful
  18330.         ECX = absolute base address of selector
  18331.     CF set on error (invalid selector)
  18332. SeeAlso: AX=3503h,INT 31/AX=0006h
  18333. ----------213505-----------------------------
  18334. INT 21 P - FlashTek X-32VM - SET SELECTOR LIMIT
  18335.     AX = 3505h
  18336.     BX = selector
  18337.     ECX = desired limit
  18338. Return: CF clear if successful
  18339.         ECX = actual limit set
  18340.     CF set on error (no more selectors available)
  18341. Note:    the limit will be rounded down to nearest 4K boundary if the requested
  18342.       limit is greater than 1MB
  18343. SeeAlso: AX=3503h,INT 31/AX=0008h
  18344. ----------21350A-----------------------------
  18345. INT 21 P - FlashTek X-32VM - PHYSICAL ADDRESS MAPPING
  18346.     AX = 350Ah
  18347.     EBX = absolute physical address
  18348.     ECX = size in bytes of area to map
  18349. Return: CF clear if successful
  18350.     CF set on error (insufficient memory or service refused by DPMI host)
  18351. Notes:    should not make repeated calls for the same physical address
  18352.     there is no provision for unmapping memory
  18353. ----------21350B-----------------------------
  18354. INT 21 P - FlashTek X-32VM - UPDATE AND RETURN AVAILABLE FREE MEMORY
  18355.     AX = 350Bh
  18356.     DS = default selector for DS
  18357. Return: CF clear
  18358.     EAX = maximum amount of memory which can be allocated via AX=350Ch
  18359. SeeAlso: AX=350Ch
  18360. ----------21350C-----------------------------
  18361. INT 21 P - FlashTek X-32VM - ALLOCATE A BLOCK OF MEMORY
  18362.     AX = 350Ch
  18363.     ECX = size of block in bytes
  18364.     DS = default DS
  18365. Return: CF clear if successful
  18366.         EAX = near pointer to new block
  18367.         EDX = new lowest legal value for stack
  18368.     CF set on error (requested size not multiple of 4K)
  18369. SeeAlso: AX=350Bh,AX=350Dh
  18370. ----------21350D-----------------------------
  18371. INT 21 P - FlashTek X-32VM - RESERVE BLOCK OF MEMORY FOR 32-BIT STACK
  18372.     AX = 350Dh
  18373.     EBX = current ESP value
  18374.     ECX = size of block in bytes
  18375.     DS = default DS
  18376. Return: CF clear if successful
  18377.         EBX = new value for ESP
  18378.         EDX = suggested new limit for SS
  18379.     CF set on error
  18380. Note:    this function should only be called once during initialization
  18381. SeeAlso: AX=350Bh,AX=350Ch
  18382. ----------21357F-----------------------------
  18383. INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
  18384.     AX = 357Fh
  18385. Return: DX = FFFFh if installed
  18386. SeeAlso: AX=33E0h,AX=3DFFh
  18387. ----------2136-------------------------------
  18388. INT 21 - DOS 2+ - GET FREE DISK SPACE
  18389.     AH = 36h
  18390.     DL = drive number (00h = default, 01h = A:, etc)
  18391. Return: AX = FFFFh if invalid drive
  18392.     else
  18393.         AX = sectors per cluster
  18394.         BX = number of free clusters
  18395.         CX = bytes per sector
  18396.         DX = total clusters on drive
  18397. Notes:    free space on drive in bytes is AX * BX * CX
  18398.     total space on drive in bytes is AX * CX * DX
  18399.     "lost clusters" are considered to be in use
  18400.     according to Dave Williams' MSDOS reference, the value in DX is
  18401.       incorrect for non-default drives after ASSIGN is run
  18402. SeeAlso: AH=1Bh,AH=1Ch
  18403. ----------213700-----------------------------
  18404. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  18405.     AX = 3700h
  18406. Return: AL = status
  18407.         00h successful
  18408.         DL = current switch character
  18409.         FFh unsupported subfunction
  18410. Desc:    Determine the character which is used to introduce command switches.
  18411.       This setting is ignored by DOS commands in version 4.0 and higher,
  18412.       but is honored by many third-party programs.
  18413. Notes:    documented in some OEM versions of some releases of DOS
  18414.     supported by OS/2 compatibility box
  18415.     always returns DL=2Fh for DOS 5.0
  18416. SeeAlso: AX=3701h
  18417. ----------213701-----------------------------
  18418. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  18419.     AX = 3701h
  18420.     DL = new switch character
  18421. Return: AL = status
  18422.         00h successful
  18423.         FFh unsupported subfunction
  18424. Notes:    documented in some OEM versions of some releases of DOS
  18425.     supported by OS/2 compatibility box
  18426.     ignored by DOS 5.0
  18427. SeeAlso: AX=3700h
  18428. ----------2137-------------------------------
  18429. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  18430.     AH = 37h
  18431.     AL = subfunction
  18432.         02h get availdev flag
  18433.         Return: DL = 00h \DEV\ must precede character device names
  18434.                = nonzero \DEV\ is optional
  18435.         03h set availdev flag
  18436.         DL = 00h    \DEV\ is mandatory
  18437.            = nonzero    \DEV\ is optional
  18438. Return: AL = status
  18439.         00h successful
  18440.         FFh unsupported subfunction
  18441. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  18442.       names without generating an error even if the directory \DEV does
  18443.       not actually exist (other paths generate an error if they do not
  18444.       exist).
  18445.     although DOS 3.3+ accepts these calls, they have no effect, and
  18446.       AL=02h always returns DL=FFh
  18447. ----------2138-------------------------------
  18448. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  18449.     AH = 38h
  18450. --DOS 2.x--
  18451.     AL = 00h get current-country info
  18452.     DS:DX -> buffer for returned info (see below)
  18453. Return: CF set on error
  18454.         AX = error code (02h)
  18455.     CF clear if successful
  18456.         AX = country code (MSDOS 2.11 only)
  18457.         buffer at DS:DX filled
  18458. --DOS 3+--
  18459.     AL = 00h for current country
  18460.     AL = 01h thru 0FEh for specific country with code <255
  18461.     AL = 0FFh for specific country with code >= 255
  18462.        BX = 16-bit country code
  18463.     DS:DX -> buffer for returned info (see below)
  18464. Return:    CF set on error
  18465.         AX = error code (02h)
  18466.     CF clear if successful
  18467.         BX = country code
  18468.         DS:DX buffer filled
  18469. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  18470.  
  18471. Format of PCDOS 2.x country info:
  18472. Offset    Size    Description
  18473.  00h    WORD    date format  0 = USA    mm dd yy
  18474.                  1 = Europe dd mm yy
  18475.                  2 = Japan    yy mm dd
  18476.  02h    BYTE    currency symbol
  18477.  03h    BYTE    00h
  18478.  04h    BYTE    thousands separator char
  18479.  05h    BYTE    00h
  18480.  06h    BYTE    decimal separator char
  18481.  07h    BYTE    00h
  18482.  08h 24 BYTEs    reserved
  18483.  
  18484. Format of MSDOS 2.x,DOS 3+ country info:
  18485. Offset    Size    Description
  18486.  00h    WORD    date format (see above)
  18487.  02h  5 BYTEs    ASCIZ currency symbol string
  18488.  07h  2 BYTEs    ASCIZ thousands separator
  18489.  09h  2 BYTEs    ASCIZ decimal separator
  18490.  0Bh  2 BYTEs    ASCIZ date separator
  18491.  0Dh  2 BYTEs    ASCIZ time separator
  18492.  0Fh    BYTE    currency format
  18493.         bit 2 = set if currency symbol replaces decimal point
  18494.         bit 1 = number of spaces between value and currency symbol
  18495.         bit 0 = 0 if currency symbol precedes value
  18496.             1 if currency symbol follows value
  18497.  10h    BYTE    number of digits after decimal in currency
  18498.  11h    BYTE    time format
  18499.         bit 0 = 0 if 12-hour clock
  18500.             1 if 24-hour clock
  18501.  12h    DWORD    address of case map routine
  18502.         (FAR CALL, AL = character to map to upper case [>= 80h])
  18503.  16h  2 BYTEs    ASCIZ data-list separator
  18504.  18h 10 BYTEs    reserved
  18505.  
  18506. Values for country code:
  18507.  001h    United States
  18508.  002h    Canadian-French
  18509.  003h    Latin America
  18510.  01Fh    Netherlands
  18511.  020h    Belgium
  18512.  021h    France
  18513.  022h    Spain
  18514.  024h    Hungary (not supported by DR-DOS 5.0)
  18515.  026h    Yugoslavia (not supported by DR-DOS 5.0)
  18516.  027h    Italy
  18517.  029h    Switzerland
  18518.  02Ah    Czechoslovakia (not supported by DR-DOS 5.0)
  18519.  02Bh    Austria (DR-DOS 5.0)
  18520.  02Ch    United Kingdom
  18521.  02Dh    Denmark
  18522.  02Eh    Sweden
  18523.  02Fh    Norway
  18524.  030h    Poland (not supported by DR-DOS 5.0)
  18525.  031h    Germany
  18526.  037h    Brazil (not supported by DR-DOS 5.0)
  18527.  03Dh    International English [Australia in DR-DOS 5.0]
  18528.  051h    Japan (DR-DOS 5.0)
  18529.  052h    Korea (DR-DOS 5.0)
  18530.  15Fh    Portugal
  18531.  166h    Finland
  18532.  311h    Middle East (DR-DOS 5.0)
  18533.  3CCh    Israel (DR-DOS 5.0)
  18534. ----------2138-------------------------------
  18535. INT 21 - DOS 3+ - SET COUNTRY CODE
  18536.     AH = 38h
  18537.     AL = 01h thru 0FEh for specific country with code <255
  18538.     AL = FFh for specific country with code >= 255
  18539.        BX = 16-bit country code
  18540.     DX = FFFFh
  18541. Return: CF set on error
  18542.         AX = error code (see AH=59h)
  18543.     CF clear if successful
  18544. Note:    not supported by OS/2
  18545. SeeAlso: INT 2F/AX=1403h
  18546. ----------2139-------------------------------
  18547. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  18548.     AH = 39h
  18549.     DS:DX -> ASCIZ pathname
  18550. Return: CF clear if successful
  18551.         AX destroyed
  18552.     CF set on error
  18553.         AX = error code (03h,05h) (see AH=59h)
  18554. Notes:    all directories in the given path except the last must exist
  18555.     fails if the parent directory is the root and is full
  18556.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  18557.       it is not possible to make that directory the current directory
  18558.       because the path would exceed 64 characters
  18559.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18560. SeeAlso: AH=3Ah,AH=3Bh,AH=E2h/SF=0Ah,INT 2F/AX=1103h
  18561. ----------213A-------------------------------
  18562. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  18563.     AH = 3Ah
  18564.     DS:DX -> ASCIZ pathname of directory to be removed
  18565. Return: CF clear if successful
  18566.         AX destroyed
  18567.     CF set on error
  18568.         AX = error code (03h,05h,06h,10h) (see AH=59h)
  18569. Notes:    directory must be empty (contain only '.' and '..' entries)
  18570.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18571. SeeAlso: AH=39h,AH=3Bh,AH=E2h/SF=0Bh,INT 2F/AX=1101h
  18572. ----------213B-------------------------------
  18573. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  18574.     AH = 3Bh
  18575.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  18576. Return: CF clear if successful
  18577.         AX destroyed
  18578.     CF set on error
  18579.         AX = error code (03h) (see AH=59h)
  18580. Notes:    if new directory name includes a drive letter, the default drive is
  18581.       not changed, only the current directory on that drive
  18582.     changing the current directory also changes the directory in which
  18583.       FCB file calls operate
  18584.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18585. SeeAlso: AH=47h,INT 2F/AX=1105h
  18586. ----------213C-------------------------------
  18587. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  18588.     AH = 3CH
  18589.     CX = file attribute
  18590.         bit 0: read-only
  18591.         1: hidden
  18592.         2: system
  18593.         3: volume label (ignored)
  18594.         4: reserved, must be zero (directory)
  18595.         5: archive bit
  18596.         7: if set, file is shareable under Novell NetWare
  18597.     DS:DX -> ASCIZ filename
  18598. Return: CF clear if successful
  18599.         AX = file handle
  18600.     CF set on error
  18601.         AX = error code (03h,04h,05h) (see AH=59h)
  18602. Notes:    if a file with the given name exists, it is truncated to zero length
  18603.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18604. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h
  18605. ----------213D-------------------------------
  18606. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  18607.     AH = 3Dh
  18608.     AL = access and sharing modes
  18609.         bits 2-0: access mode
  18610.         000 read only
  18611.         001 write only
  18612.         010 read/write
  18613.         bit 3: reserved (0)
  18614.         bits 6-4: sharing mode (DOS 3+)
  18615.         000 compatibility mode
  18616.         001 "DENYALL" prohibit both read and write access by others
  18617.         010 "DENYWRITE" prohibit write access by others
  18618.         011 "DENYREAD" prohibit read access by others
  18619.         100 "DENYNONE" allow full access by others
  18620.         bit 7: inheritance
  18621.         if set, file is private to current process and will not be
  18622.           inherited by child processes
  18623.     DS:DX -> ASCIZ filename
  18624.     CL = attribute mask of files to look for (server call only)
  18625. Return: CF clear if successful
  18626.         AX = file handle
  18627.     CF set on error
  18628.         AX = error code (01h,02h,03h,04h,05h,0Ch) (see AH=59h)
  18629. Notes:    file pointer is set to start of file
  18630.     file handles which are inherited from a parent also inherit sharing
  18631.       and access restrictions
  18632.     files may be opened even if given the hidden or system attributes
  18633.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18634. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1226h
  18635.  
  18636. File sharing behavior:
  18637.       |    Second and subsequent Opens
  18638.  First      |Compat  Deny      Deny     Deny    Deny
  18639.  Open      |       All      Write     Read    None
  18640.       |R W RW R W RW R W RW R W RW R W RW
  18641.  - - - - -| - - - - - - - - - - - - - - - - -
  18642.  Compat    R |Y Y Y  N N N     1 N N    N N N  1 N N
  18643.     W |Y Y Y  N N N     N N N    N N N  N N N
  18644.     RW|Y Y Y  N N N     N N N    N N N  N N N
  18645.  - - - - -|
  18646.  Deny    R |C C C  N N N     N N N    N N N  N N N
  18647.  All    W |C C C  N N N     N N N    N N N  N N N
  18648.     RW|C C C  N N N     N N N    N N N  N N N
  18649.  - - - - -|
  18650.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N 
  18651.  Write    W |C C C  N N N     N N N    Y N N  Y N N 
  18652.     RW|C C C  N N N     N N N    N N N  Y N N
  18653.  - - - - -|
  18654.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  18655.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  18656.     RW|C C C  N N N     N N N    N N N  N Y N
  18657.  - - - - -|
  18658.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  18659.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  18660.     RW|C C C  N N N     N N N    N N N  Y Y Y
  18661. Legend: Y = open succeeds, N = open fails with error code 05h
  18662.     C = open fails, INT 24 generated
  18663.     1 = open succeeds if file read-only, else fails with error code
  18664.     2 = open succeeds if file read-only, else fails with INT 24
  18665. ----------213DFF-----------------------------
  18666. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  18667.     AX = 3DFFh
  18668. Return: AX = 4A44h if resident
  18669. SeeAlso: AX=357Fh,AX=4203h
  18670. ----------213E-------------------------------
  18671. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  18672.     AH = 3Eh
  18673.     BX = file handle
  18674. Return: CF clear if successful
  18675.         AX destroyed
  18676.     CF set on error
  18677.         AX = error code (06h) (see AH=59h)
  18678. Note:    if the file was written to, any pending disk writes are performed, the
  18679.       time and date stamps are set to the current time, and the directory
  18680.       entry is updated
  18681. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  18682. ----------213F-------------------------------
  18683. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  18684.     AH = 3Fh
  18685.     BX = file handle
  18686.     CX = number of bytes to read
  18687.     DS:DX -> buffer for data
  18688. Return: CF clear if successful
  18689.         AX = number of bytes actually read (0 if at EOF before call)
  18690.     CF set on error
  18691.         AX = error code (05h,06h) (see AH=59h)
  18692. Notes:    data is read beginning at current file position, and the file position
  18693.       is updated after a successful read
  18694.     the returned AX may be smaller than the request in CX if a partial
  18695.       read occurred
  18696.     if reading from CON, read stops at first CR
  18697.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18698. SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
  18699. ----------213F-------------------------------
  18700. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  18701.     AH = 3Fh
  18702.     BX = handle for character device "TDHDEBUG"
  18703.     CX = number of bytes to read
  18704.     DS:DX -> buffer for status block (see below)
  18705. Return: CF clear if successful
  18706.         AX = number of bytes actually read
  18707.     CF set on error
  18708.         AX = error code (05h,06h) (see AH=59h)
  18709. SeeAlso: AH=40h"Turbo Debug"
  18710.  
  18711. Format of status block:
  18712. Offset    Size    Description
  18713.  00h    BYTE    status of command
  18714.         00h successful
  18715.         01h invalid handle
  18716.         02h no more breakpoints available
  18717.         03h hardware does not support specified breakpoint type
  18718.         04h previous command prevents execution
  18719.         05h debugger hardware not found
  18720.         06h hardware failure
  18721.         07h invalid command
  18722.         08h driver not initialized yet
  18723.         FEh recursive entry (hardware breakpoint inside hw bp handler)
  18724. ---status for command 01h---
  18725.  01h    WORD    device driver interface version number (currently 1)
  18726.  03h    WORD    device driver software version
  18727.  05h    BYTE    maximum simultaneous hardware breakpoints
  18728.  06h    BYTE    configuration bits
  18729.         bit 0: CPU and DMA accesses are distinct
  18730.             1: can detect DMA transfers
  18731.             2: supports data mask
  18732.             3: hardware pass counter on breakpoints
  18733.             4: can match on data as well as addresses
  18734.  07h    BYTE    supported breakpoint types
  18735.         bit 0: memory read
  18736.             1: memory write
  18737.             2: memory read/write
  18738.             3: I/O read
  18739.             4: I/O write
  18740.             5: I/O read/write
  18741.             6: instruction fetch
  18742.  08h    WORD    supported addressing match modes
  18743.         bit 0: any address
  18744.             1: equal to test value
  18745.             2: not equal
  18746.             3: above test value
  18747.             4: below test value
  18748.             5: below or equal
  18749.             6: above or equal
  18750.             7: within range
  18751.             8: outside range
  18752.  0Ah    WORD    supported data matches
  18753.         bit 0: any data
  18754.             1: equal to test value
  18755.             2: not equal
  18756.             3: above test value
  18757.             4: below test value
  18758.             5: below or equal
  18759.             6: above or equal
  18760.             7: within range
  18761.             8: outside range
  18762.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  18763.  0Dh    WORD    size of onboard memory (in K)
  18764.  0Fh    WORD    maximum number of trace-back events
  18765.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  18766.         supported)
  18767. ---status for command 04h---
  18768.  01h    BYTE    handle to use when referring to the just-set breakpoint
  18769. ----------213F-------------------------------
  18770. INT 21 - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA
  18771.     AH = 3Fh
  18772.     BX = handle for character device "$IPCUST"
  18773.     CX = number of bytes to read
  18774.     DS:DX -> buffer for configuration data (see below)
  18775. Return: CF clear if successful
  18776.         AX = number of bytes actually read
  18777.     CF set on error
  18778.         AX = error code (05h,06h) (see AH=59h)
  18779. Notes:    if less than the entire data is read or written, the next read/write
  18780.       continues where the previous one ended; IOCTL calls AX=4402h and
  18781.       AX=4403h both reset the location at which the next operation starts
  18782.       to zero
  18783.     the data pointer is also reset to zero if the previous read or write
  18784.       reached or exceeded the end of the data, when the current function
  18785.       is read and the previous was write, or vice versa
  18786. SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST"
  18787.  
  18788. Format of configuration data:
  18789. Offset    Size    Description
  18790.  00h 12 BYTEs    IPCUST.SYS device driver header
  18791.  12h    BYTE    ???
  18792.  13h    BYTE    ???
  18793.  14h    WORD    ???
  18794.  16h    BYTE    bit flags
  18795.         bit 0: send BS rather than DEL for BackSpace key
  18796.         bit 1: wrap long lines
  18797.  17h    BYTE    ???
  18798.  18h 64 BYTEs    ASCIZ hostname
  18799.  58h 64 BYTEs    ASCIZ domain name
  18800.         (fully qualified domain name is hostname.domain-name)
  18801.  98h 16 BYTEs    ASCIZ username
  18802.  A8h 64 BYTEs    ASCIZ full name
  18803.  E8h 64 BYTEs    ASCIZ office address
  18804. 128h 32 BYTEs    ASCIZ phone number
  18805. 148h    WORD    offset from GMT in minutes
  18806. 14Ah  4 BYTEs    ASCIZ timezone name
  18807. 14Eh    WORD    number of time servers
  18808. 150h  ? DWORDs    IP addresses for time servers (big-endian)
  18809.     ???
  18810. 164h    WORD    number of old-style name servers
  18811. 166h  3 DWORDs    IP addresses for name servers (big-endian)
  18812. 172h    WORD    number of domain name servers
  18813. 174h  3 DWORDs    IP addresses for domain name servers (big-endian)
  18814. 180h    DWORD    IP address of default gateway (big-endian)
  18815. 184h    DWORD    IP address of log server (big-endian)
  18816. 188h    DWORD    IP address of cookie server (big-endian)
  18817. 18Ch    DWORD    IP address of lpr server (big-endian)
  18818. 190h    DWORD    IP address of imagen print server
  18819. 194h 54 BYTEs    ???
  18820. 1E8h    WORD    TCP default window size in bytes
  18821. 1EAh    WORD    TCP low window size
  18822. 1ECh 64 BYTEs    ASCIZ host tabel filename
  18823. 22Ch  2 BYTEs    ???
  18824. 22Eh 80 BYTEs    ASCIZ mail relay host name
  18825. 27Eh    BYTE    ???
  18826. 27Fh    BYTE    ??? bit flags
  18827. 280h 44 BYTEs    ???
  18828. 2ACh    WORD    ???
  18829. 2AEh 202 BYTEs    ???
  18830. ----------2140-------------------------------
  18831. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  18832.     AH = 40h
  18833.     BX = file handle
  18834.     CX = number of bytes to write
  18835.     DS:DX -> data to write
  18836. Return: CF clear if successful
  18837.         AX = number of bytes actually written
  18838.     CF set on error
  18839.         AX = error code (05h,06h) (see AH=59h)
  18840. Notes:    if CX is zero, no data is written, and the file is truncated or
  18841.       extended to the current position
  18842.     data is written beginning at the current file position, and the file
  18843.       position is updated after a successful write
  18844.     the usual cause for AX < CX on return is a full disk
  18845. BUG:    a write of zero bytes will appear to succeed when it actually failed
  18846.       if the write is extending the file and there is not enough disk
  18847.       space for the expanded file (DOS 5.0); one should therefore check
  18848.       whether the file was in fact extended by seeking to 0 bytes from
  18849.       the end of the file (INT 21/AX=4202h/CX=0/DX=0)
  18850.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18851. SeeAlso: AH=28h,AH=3Fh,AH=93h,INT 2F/AX=1109h
  18852. ----------2140-------------------------------
  18853. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  18854.     AH = 40h
  18855.     BX = handle for character device "TDHDEBUG"
  18856.     CX = number of bytes to write
  18857.     DS:DX -> hardware breakpoint command (see below)
  18858. Return: CF clear if successful
  18859.         AX = number of bytes actually written
  18860.     CF set on error
  18861.         AX = error code (05h,06h) (see AH=59h)
  18862. Note:    results are retrieved by reading from the device
  18863. SeeAlso: AH=3Fh"Turbo Debug"
  18864.  
  18865. Format of hardware breakpoint commands:
  18866. Offset    Size    Description
  18867.  00h    BYTE    command code
  18868.         00h install interrupt vectors
  18869.         01h get hardware capabilities
  18870.         02h enable hardware breakpoints
  18871.         03h disable hardware breakpoints
  18872.         04h set hardware breakpoint
  18873.         05h clear hardware breakpoint
  18874.         06h set I/O base address and reset hardware
  18875.         07h restore interrupt vectors
  18876. ---command code 00h---
  18877.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  18878.         hardware breakpoint; call with CPU state the same as on
  18879.         the breakpoint except for pushing AX and placing an entry
  18880.         code (FFh if breakout button or breakpoint handle) in AH
  18881. ---command code 04h---
  18882.  01h    BYTE    breakpoint type
  18883.         00h memory read
  18884.         01h memory write
  18885.         02h memory read/write
  18886.         03h I/O read
  18887.         04h I/O write
  18888.         05h I/O read/write
  18889.         06h instruction fetch
  18890.  02h    BYTE    address matching mode
  18891.         00h any address
  18892.         01h equal to test value
  18893.         02h different from test value
  18894.         03h above test value
  18895.         04h below test value
  18896.         05h below or equal to test value
  18897.         06h above or equal to test value
  18898.         07h within inclusive range
  18899.         08h outside specified range
  18900.  03h    DWORD    32-bit linear low address
  18901.  07h    DWORD    32-bit linear high address
  18902.  0Bh    WORD    pass count
  18903.  0Dh    BYTE    data size (01h, 02h, or 04h)
  18904.  0Eh    BYTE    source of matched bus cycle
  18905.         01h CPU
  18906.         02h DMA
  18907.         03h either
  18908.  0Fh    BYTE    data-matching mode
  18909.         00h match any
  18910.         01h equal to test value
  18911.         02h different from test value
  18912.         03h above test value
  18913.         04h below test value
  18914.         05h below or equal to test value
  18915.         06h above or equal to test value
  18916.         07h within specified range
  18917.         08h outside specified range
  18918.  10h    DWORD    low data value
  18919.  14h    DWORD    high data value
  18920.  18h    DWORD    data mask specifying which bits of the data are tested
  18921. ---command code 05h---
  18922.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  18923.         04h)
  18924. ---command code 06h---
  18925.  01h    WORD    base address of hardware debugger board
  18926. ----------2140-------------------------------
  18927. INT 21 - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA
  18928.     AH = 40h
  18929.     BX = handle for character device "$IPCUST"
  18930.     CX = number of bytes to write
  18931.     DS:DX -> buffer for configuration data (AH=3Fh"IPCUST")
  18932. Return: CF clear if successful
  18933.         AX = number of bytes actually written
  18934.     CF set on error
  18935.         AX = error code (05h,06h) (see AH=59h)
  18936. Notes:    if less than the entire data is read or written, the next read/write
  18937.       continues where the previous one ended; IOCTL calls AX=4402h and
  18938.       AX=4403h both reset the location at which the next operation starts
  18939.       to zero
  18940.     the data pointer is also reset to zero if the previous read or write
  18941.       reached or exceeded the end of the data, when the current function
  18942.       is read and the previous was write, or vice versa
  18943. SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST"
  18944. ----------214000BX0002-----------------------
  18945. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  18946.     AX = 4000h
  18947.     BX = 0002h
  18948.     CX = 0000h
  18949.     DS:DX = 0000h:0000h
  18950. Return: CF clear if installed
  18951.         AX = CS of resident code
  18952. Note:    FARTBELL is a joke program by Guenther Thiele which makes various
  18953.       noises when programs output a bell
  18954. SeeAlso: AX=4001h
  18955. ----------214001BX0002-----------------------
  18956. INT 21 - FARTBELL.EXE - FORCE NOISE
  18957.     AX = 4001h
  18958.     BX = 0002h
  18959.     CX = 0000h
  18960.     DS:DX = 0000h:0000h
  18961. Note:    FARTBELL is a joke program by Guenther Thiele which makes various
  18962.       noises when programs output a bell
  18963. SeeAlso: AX=4000h
  18964. ----------2141-------------------------------
  18965. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  18966.     AH = 41h
  18967.     DS:DX -> ASCIZ filename (no wildcards, but see below)
  18968.     CL = attribute mask for deletion (server call only, see below)
  18969. Return: CF clear if successful
  18970.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  18971.     CF set on error
  18972.         AX = error code (02h,03h,05h) (see AH=59h)
  18973. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  18974.       the filespec must be canonical (as returned by AH=60h), and only
  18975.       files matching the attribute mask in CL are deleted
  18976.     DOS does not erase the file's data; it merely becomes inaccessible
  18977.       because the FAT chain for the file is cleared
  18978.     deleting a file which is currently open may lead to filesystem
  18979.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  18980.       referencing the deleted file, thus allowing writes to a nonexistant
  18981.       file.
  18982.     under DRDOS and DR Multiuser DOS, this function will fail if the file
  18983.       is currently open
  18984.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18985. SeeAlso: AH=13h,AX=4301h,AX=5D00h,AH=60h,AX=F244h,INT 2F/AX=1113h
  18986. ----------214101DXFFFE-----------------------
  18987. INT 21 - SoftLogic Data Guardian - ???
  18988.     AX = 4101h
  18989.     DX = FFFEh
  18990. Return: AX = 0000h if installed
  18991. Note:    resident code sets several internal variables on this call
  18992. ----------2142-------------------------------
  18993. INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION
  18994.     AH = 42h
  18995.     AL = origin of move
  18996.         00h start of file
  18997.         01h current file position
  18998.         02h end of file
  18999.     BX = file handle
  19000.     CX:DX = offset from origin of new file position
  19001. Return: CF clear if successful
  19002.         DX:AX = new file position in bytes from start of file
  19003.     CF set on error
  19004.         AX = error code (01h,06h) (see AH=59h)
  19005. Notes:    for origins 01h and 02h, the pointer may be positioned before the
  19006.       start of the file; no error is returned in that case, but subsequent
  19007.       attempts at I/O will produce errors
  19008.     if the new position is beyond the current end of file, the file will
  19009.       be extended by the next write (see AH=40h)
  19010. SeeAlso: AH=24h,INT 2F/AX=1228h
  19011. ----------214203-----------------------------
  19012. INT 21 - VIRUS - "Shake" - INSTALLATION CHECK
  19013.     AX = 4203h
  19014. Return: AX = 1234h if resident
  19015. SeeAlso: AX=3DFFh,AX=4243h
  19016. ----------214243-----------------------------
  19017. INT 21 - VIRUS - "Invader" - INSTALLATION CHECK
  19018.     AX = 4243h
  19019. Return: AX = 5678h if resident
  19020. SeeAlso: AX=4203h,AX=4B04h
  19021. ----------214300-----------------------------
  19022. INT 21 - DOS 2+ - GET FILE ATTRIBUTES
  19023.     AX = 4300h
  19024.     DS:DX -> ASCIZ filename
  19025. Return: CF clear if successful
  19026.         CX = attributes (see AX=4301h)
  19027.         AX = CX (DR-DOS 5.0)
  19028.     CF set on error
  19029.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  19030. Note:    under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  19031. SeeAlso: AX=4301h,AX=4310h,AH=B6h,INT 2F/AX=110Fh
  19032. ----------214301-----------------------------
  19033. INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES
  19034.     AX = 4301h
  19035.     CX = new attributes
  19036.         bit 7: shareable (Novell NetWare)
  19037.         6: unused
  19038.         5: archive
  19039.         4: directory
  19040.         3: volume label
  19041.            execute-only (Novell NetWare)
  19042.         2: system
  19043.         1: hidden
  19044.         0: read-only
  19045.     DS:DX -> ASCIZ filename
  19046. Return: CF clear if successful
  19047.         AX destroyed
  19048.     CF set on error
  19049.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  19050. Notes:    will not change volume label or directory attribute bits, but will
  19051.       change the other attribute bits of a directory (the directory
  19052.       bit must be cleared to successfully change the other attributes of a
  19053.       directory, but the directory will not be changed to a normal file as
  19054.       a result)
  19055.     MSDOS 4.01 reportedly closes the file if it is currently open
  19056.     for security reasons, the Novell NetWare execute-only bit can never
  19057.       be cleared; the file must be deleted and recreated
  19058.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  19059. SeeAlso: AX=4300h,AX=4311h,INT 2F/AX=110Eh
  19060. ----------214302-----------------------------
  19061. INT 21 - DR-DOS 3.41+ internal - GET ACCESS RIGHTS
  19062.     AX = 4302h
  19063.     DS:DX -> ASCIZ pathname
  19064. Return: CF clear if successful
  19065.         CX = access rights
  19066.         bit 0 owner delete requires password
  19067.         bit 1 owner execution requires password (FlexOS)
  19068.         bit 2 owner write requires password
  19069.         bit 3 owner read requires password
  19070.         bit 4 group delete requires password
  19071.         bit 5 group execution requires password (FlexOS)
  19072.         bit 6 group write requires password
  19073.         bit 7 group read requires password
  19074.         bit 8 world delete requires password
  19075.         bit 9 world execution requires password (FlexOS)
  19076.         bit 10 world write requires password
  19077.         bit 11 world read requires password
  19078.         AX = CX (DR-DOS 5.0)
  19079.     CF set on error
  19080.         AX = error code
  19081. Desc:    Determine which operations the calling program may perform on a
  19082.       specified file without being required to provide a password.
  19083. Notes:    this protection scheme has been coordinated on all current Digital
  19084.       Research/Novell operating systems (DR-DOS 3.41+, DRMDOS 5.x, and
  19085.       FlexOS 2+)
  19086.     only FlexOS actually uses the "execution" bits; DR-DOS 3.41+ treats
  19087.       them as "read" bits.
  19088.     DR-DOS 3.41-5.x only use bits 0-3.  Only DR-DOS 6.0 using a
  19089.       DRMDOS 5.x security system allowing for users and groups uses bits
  19090.       4-11.
  19091. SeeAlso: AX=4303h
  19092. ----------214303-----------------------------
  19093. INT 21 - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
  19094.     AX = 4303h
  19095.     CX = access rights
  19096.          bits 11-0: access rights (see AX=4302h)
  19097.          bit 15: new password is to be set
  19098.     DS:DX -> ASCIZ pathname
  19099.     [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
  19100. Return: CF clear if successful
  19101.     CF set on error
  19102.         AX = error code
  19103. Note:    if the file is already protected, the old password must be added after
  19104.       the pathname, separated by a ";"
  19105. SeeAlso: AX=4302h,AX=4454h
  19106. ----------214304-----------------------------
  19107. INT 21 - DR-DOS 5.0 internal - GET ???
  19108.     AX = 4304h
  19109.     ???
  19110. Return: CF clear if successful
  19111.         CX = AX = ???
  19112.     CF set on error
  19113.         AX = error code (see AH=59h)
  19114. SeeAlso: AX=4305h
  19115. ----------214305-----------------------------
  19116. INT 21 - DR-DOS 5.0 internal - SET ???
  19117.     AX = 4305h
  19118.     ???
  19119. Return: CF clear if successful
  19120.     CF set on error
  19121.         AX = error code (see AH=59h)
  19122. SeeAlso: AX=4304h
  19123. ----------214310-----------------------------
  19124. INT 21 - Banyan VINES 2.1+ - GET EXTENDED FILE ATTRIBUTES
  19125.     AX = 4310h
  19126.     DS:DX -> ASCIZ filename
  19127. Return: CF clear if successful
  19128.         CH = attributes (see AX=4311h)
  19129.     CF set on error
  19130.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  19131. Note:    the filename may be a directory but must be on a VINES file service
  19132. SeeAlso: AX=4300h,AX=4311h,AH=B6h,INT 2F/AX=110Fh
  19133. ----------214311-----------------------------
  19134. INT 21 - Banyan VINES 2.1+ - SET EXTENDED FILE ATTRIBUTES
  19135.     AX = 4311h
  19136.     CH = new attributes
  19137.         bit 7: unused
  19138.         bit 6: shareable
  19139.         bit 5: execute-only
  19140.         bits 4-0: unused
  19141.     DS:DX -> ASCIZ filename
  19142. Return: CF clear if successful
  19143.     CF set on error
  19144.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  19145. Note:    the filename may be a directory but must be on a VINES file service
  19146. SeeAlso: AX=4301h,AX=4310h,INT 2F/AX=110Eh
  19147. ----------214400-----------------------------
  19148. INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
  19149.     AX = 4400h
  19150.     BX = handle
  19151. Return: CF clear if successful
  19152.         DX = device information word
  19153.         character device
  19154.           14: device driver can process IOCTL requests (see AX=4402h)
  19155.           13: output until busy supported
  19156.           11: driver supports OPEN/CLOSE calls
  19157.            7: set (indicates device)
  19158.            6: EOF on input
  19159.            5: raw (binary) mode
  19160.            4: device is special (uses INT 29)
  19161.            3: clock device
  19162.            2: NUL device
  19163.            1: standard output
  19164.            0: standard input
  19165.         disk file
  19166.           15: file is remote (DOS 3+)
  19167.           14: don't set file date/time on closing (DOS 3+)
  19168.           11: media not removable
  19169.            8: (DOS 4+) generate INT 24 if no disk space on write
  19170.            7: clear (indicates file)
  19171.            6: file has not been written
  19172.          5-0: drive number (0 = A:)
  19173.         AX destroyed
  19174.     CF set on error
  19175.         AX = error code (01h,05h,06h) (see AH=59h)
  19176. Note:    value in DH corresponds to high byte of device driver's attribute word
  19177.       if handle refers to a character device
  19178. SeeAlso: AX=4401h,INT 2F/AX=122Bh
  19179. ----------214401-----------------------------
  19180. INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
  19181.     AX = 4401h
  19182.     BX = handle (must refer to character device)
  19183.     DX = device information word (see AX=4400h)
  19184.         (DH must be zero)
  19185. Return: CF clear if successful
  19186.     CF set on error
  19187.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19188. SeeAlso: AX=4400h,INT 2F/AX=122Bh
  19189. ----------214402-----------------------------
  19190. INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL
  19191.     AX = 4402h
  19192.     BX = file handle referencing character device
  19193.     CX = number of bytes to read
  19194.     DS:DX -> buffer
  19195. Return: CF clear if successful
  19196.         AX = number of bytes actually read
  19197.     CF set on error
  19198.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19199. Note:    format of data is driver-specific (see below for some specific cases)
  19200. SeeAlso: AX=4400h,AX=4403h,AX=4404h,INT 2F/AX=122Bh
  19201. ----------214402-----------------------------
  19202. INT 21 - Network Driver Interface Spec 2.0.1 - PROTOCOL MANAGER
  19203.     AX = 4402h
  19204.     BX = file handle for device "PROTMAN$"
  19205.     DS:DX -> request block (see below)
  19206.     CX = 000Eh (size of request block)
  19207.  
  19208. Format of request block for GetProtocolManagerInfo:
  19209. Offset    Size    Description
  19210.  00h    WORD    01h
  19211.  02h    WORD    returned status (see below)
  19212.  04h    DWORD    returned pointer to structure representing parsed user config
  19213.  08h    DWORD    unused
  19214.  0Ch    WORD    returned BCD version of NDIS on which Protocol Manager is based
  19215.  
  19216. Format of request block for RegisterModule:
  19217. Offset    Size    Description
  19218.  00h    WORD    02h
  19219.  02h    WORD    returned status (see below)
  19220.  04h    DWORD    pointer to module's common characteristics table (see below)
  19221.  08h    DWORD    pointer to list of modules to which the module is to be bound
  19222.  0Ch    WORD    unused
  19223.  
  19224. Format of request block for BindAndStart:
  19225. Offset    Size    Description
  19226.  00h    WORD    03h
  19227.  02h    WORD    returned status (see below)
  19228.  04h    DWORD    caller's virtual address in FailingModules structure
  19229.  08h    DWORD    unused
  19230.  0Ch    WORD    unused
  19231.  
  19232. Format of request block for GetProtocolManagerLinkage:
  19233. Offset    Size    Description
  19234.  00h    WORD    04h
  19235.  02h    WORD    returned status (see below)
  19236.  04h    DWORD    returned dispatch point
  19237.  08h    DWORD    unused
  19238.  0Ch    WORD    returned protocol manager DS
  19239. Note:    the dispatch point may be called as follows instead of using this IOCTL
  19240.     STACK: WORD  protocol manager DS
  19241.            DWORD pointer to request block
  19242.     Return: AX = returned status
  19243.         STACK popped
  19244.  
  19245. Format of request block for GetProtocolIniPath:
  19246. Offset    Size    Description
  19247.  00h    WORD    05h
  19248.  02h    WORD    returned status (see below)
  19249.  04h    DWORD    pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
  19250.  08h    DWORD    unused
  19251.  0Ch    WORD    buffer length
  19252.  
  19253. Format of request block for RegisterProtocolManagerInfo:
  19254. Offset    Size    Description
  19255.  00h    WORD    06h
  19256.  02h    WORD    returned status (see below)
  19257.  04h    DWORD    pointer to structure containing parsed user config file
  19258.  08h    DWORD    unused
  19259.  0Ch    WORD    length of structure
  19260.  
  19261. Format of request block for InitAndRegister:
  19262. Offset    Size    Description
  19263.  00h    WORD    07h
  19264.  02h    WORD    returned status (see below)
  19265.  04h    DWORD    unused
  19266.  08h    DWORD    poitner to ASCIZ name of the module to be prebind initialized
  19267.  0Ch    WORD    unused
  19268.  
  19269. Format of request block for UnbindAndStop:
  19270. Offset    Size    Description
  19271.  00h    WORD    08h
  19272.  02h    WORD    returned status (see below)
  19273.  04h    DWORD    failing modules as for BindAndStart
  19274.  08h    DWORD    if not 0000h:0000h, pointer to ASCIZ name of module to unbind
  19275.         if 0000h:0000h, terminate a set of previously dynamically
  19276.           bound protocol modules
  19277.  0Ch    WORD    unused
  19278.  
  19279. Format of request block for BindStatus:
  19280. Offset    Size    Description
  19281.  00h    WORD    09h
  19282.  02h    WORD    returned status (see below)
  19283.  04h    DWORD    must be 0000h:0000h
  19284.         on return, points to root tree
  19285.  08h    DWORD    0000h:0000h
  19286.  0Ch    WORD    unused under DOS
  19287.  
  19288. Format of request block for RegisterStatus:
  19289. Offset    Size    Description
  19290.  00h    WORD    0Ah
  19291.  02h    WORD    returned status (0000h, 0008h, 002Ch) (see below)
  19292.  04h    DWORD    0000h:0000h
  19293.  08h    DWORD    pointer to 16-byte ASCIZ module name
  19294.  0Ch    WORD    0000h
  19295. Note:    not supported by the 10NET v5.0 PROTMAN$ driver
  19296.  
  19297. Values of status code:
  19298.  0000h success
  19299.  0001h wait for release--protocol has retained control of the data buffer
  19300.  0002h request queued
  19301.  0003h frame not recognized
  19302.  0004h frame rejected
  19303.  0005h frame should be forwarded
  19304.  0006h out of resource
  19305.  0007h invalid parameter
  19306.  0008h invalid function
  19307.  0009h not supported
  19308.  000Ah hardware error
  19309.  000Bh transmit error
  19310.  000Ch unrecognized destination
  19311.  000Dh buffer too small
  19312.  0020h already started
  19313.  0021h binding incomplete
  19314.  0022h driver not initialized
  19315.  0023h hardware not found
  19316.  0024h hardware failure
  19317.  0025h configuration failure
  19318.  0026h interrupt conflict
  19319.  0027h MAC incompatible
  19320.  0028h initialization failed
  19321.  0029h no binding
  19322.  002Ah network may be disconnected
  19323.  002Bh incompatible OS version
  19324.  002Ch already registered
  19325.  002Dh path not found
  19326.  002Eh insufficient memory
  19327.  002Fh info not found
  19328.  00FFh general failure
  19329.  F000h-FFFFh reserved for vendor-specific codes, treated as general failure
  19330.  
  19331. Format of common characteristics table:
  19332. Offset    Size    Description
  19333.  00h    WORD    size of table in bytes
  19334.  02h    BYTE    NDIS major version
  19335.  03h    BYTE    NDIS minor version
  19336.  04h    WORD    reserved
  19337.  06h    BYTE    module major version
  19338.  07h    BYTE    module minor version
  19339.  08h    DWORD    module function flag bits
  19340.         bit 0: binding at upper boundary supported
  19341.         bit 1: binding at lower boundary supported
  19342.         bit 2: dynamically bound
  19343.         bits 3-31 reserved, must be 0
  19344.  0Ch 16 BYTEs    ASCIZ module name
  19345.  1Ch    BYTE    upper boundary protocol level
  19346.         01h Media Access Control
  19347.         02h Data link
  19348.         03h network
  19349.         04h transport
  19350.         05h session
  19351.         FFh not specified
  19352.  1Dh    BYTE    upper boundary interface type
  19353.         for MACs: 1 = MAC
  19354.         for data links and transports: to be defined
  19355.         for session: 1 = NCB
  19356.         any level: 0 = private (ISV-defined)
  19357.  1Eh    BYTE    lower boundary protocol level
  19358.         00h physical
  19359.         01h Media Access Control
  19360.         02h Data link
  19361.         03h network
  19362.         04h transport
  19363.         05h session
  19364.         FFh not specified
  19365.  1Fh    BYTE    lower boundary interface type
  19366.         same as offset 1Dh
  19367.  20h    WORD    module ID filled in by protocol manager
  19368.  22h    WORD    module DS
  19369.  24h    DWORD    system request entry point
  19370.  28h    DWORD    pointer to service-specific characteristics
  19371.         0000h:0000h if none
  19372.  2Ch    DWORD    pointer to service-specific status
  19373.         0000h:0000h if none
  19374.  30h    DWORD    pointer to upper dispatch table (see below)
  19375.         0000h:0000h if none
  19376.  34h    DWORD    pointer to lower dispatch table (see below)
  19377.         0000h:0000h if none
  19378.  38h    DWORD    reserved, must be 0
  19379.  3Ch    DWORD    reserved, must be 0
  19380. Note:    for compatibility with NDIS 1.x.x, a major version of 00h is
  19381.       interpreted as 01h
  19382.  
  19383. Format of MAC Service-Specific Characteristics Table:
  19384. Offset    Size    Description
  19385.  00h    WORD    length of table in bytes
  19386.  02h 16 BYTEs    ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX",
  19387.         "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC",
  19388.         "HDLC", or "ISDN"
  19389.  12h    WORD    length of station addresses in bytes
  19390.  14h 16 BYTEs    permanent station address
  19391.  24h 16 BYTEs    current station address
  19392.  34h    DWORD    current functional adapter address (00000000h if none)
  19393.  38h    DWORD    pointer to multicast address list
  19394.  3Ch    DWORD    link speed in bits/sec
  19395.  40h    DWORD    service flags
  19396.         bit 0: supports broadcast
  19397.             1: supports multicast
  19398.             2: supports functional/group addressing
  19399.             3: supports promiscuous mode
  19400.             4: station address software settable
  19401.             5: statistics always current
  19402.             6: supports InitiateDiagnostics
  19403.             7: supports loopback
  19404.             8: MAC does primarily ReceiveChain indications instead of
  19405.                ReceiveLookahead indications
  19406.             9: supports IBM source routing
  19407.            10: supports MAC reset
  19408.            11: supports Open/Close adapter
  19409.            12: supports interrupt request
  19410.            13: supports source routing bridge
  19411.            14: supports GDT virtual addresses (OS/2 version)
  19412.            15: multiple TransferDatas allowed durign a single
  19413.                indication
  19414.            16: MAC normally sets FrameSize = 0 in ReceiveLookahead
  19415.            17-31: reserved, must be 0
  19416.  44h    WORD    maximum frame size which may be both sent and received
  19417.  46h    DWORD    total transmit buffer capacity in bytes
  19418.  4Ah    WORD    transmit buffer allocation block size in bytes
  19419.  4Ch    DWORD    total receive buffer capacity in bytes
  19420.  50h    WORD    receive buffer allocation block size in bytes
  19421.  52h  3 BYTEs    IEEE vendor code
  19422.  55h    BYTE    vendor adapter code
  19423.  56h    DWORD    pointer to ASCIZ vendor adapter description
  19424.  5Ah    WORD    IRQ used by adapter
  19425.  5Ch    WORD    transmit queue depth
  19426.  5Eh    WORD    maximum supported number of data blocks in buffer descriptors
  19427.  60h  N BYTEs    vendor-specific info
  19428.  
  19429. Format of NetBIOS Service-Specific Characteristics Table
  19430. Offset    Size    Description
  19431.  00h    WORD    length of table in bytes
  19432.  02h 16 BYTEs    ASCIZ type name of NetBIOS module
  19433.  12h    WORD    NetBIOS module code
  19434.  14h  N BYTEs    vendor-specific info
  19435.  
  19436. Format of MAC Service-Specific Status Table:
  19437. Offset    Size    Description
  19438.  00h    WORD    length of table in bytes
  19439.  02h    DWORD    seconds since 0:00 1/1/70 when diagnostics last run
  19440.         (FFFFFFFFh = never)
  19441.  06h    DWORD    MAC status bits
  19442.         bits 0-2: 000 hardware not installed
  19443.               001 hardware failed startup diagnostics
  19444.               010 hardware configuration problem
  19445.               011 hardware fault
  19446.               100 operating marginally due to soft faults
  19447.               101 reserved
  19448.               110 reserved
  19449.               111 hardware fully operational
  19450.         bit 3:      MAC bound
  19451.             4:      MAC open
  19452.             5:      diagnostics in progress
  19453.             6-31: reserved
  19454.  0Ah    WORD    current packet filter flags
  19455.         bit 0: directed/multicast or group/functional
  19456.             1: broadcast
  19457.             2: promiscuous
  19458.             3: all source routing
  19459.             4-15: reserved, must be zero
  19460.  0Ch    DWORD    pointer to media-specific status table or 0000h:0000h
  19461.  10h    DWORD    seconds past 0:00 1/1/70 of last ClearStatistics
  19462.  14h    DWORD    total frames received (FFFFFFFFh = not counted)
  19463.  18h    DWORD    frames with CRC error (FFFFFFFFh = not counted)
  19464.  1Ch    DWORD    total bytes received (FFFFFFFFh = not counted)
  19465.  20h    DWORD    frames discarded--no buffer space (FFFFFFFFh = not counted)
  19466.  24h    DWORD    multicast frames received (FFFFFFFFh = not counted)
  19467.  28h    DWORD    broadcast frames received (FFFFFFFFh = not counted)
  19468.  2Ch    DWORD    frames with errors (FFFFFFFFh = not counted)
  19469.  30h    DWORD    overly large frames (FFFFFFFFh = not counted)
  19470.  34h    DWORD    frames less than minimum size (FFFFFFFFh = not counted)
  19471.  38h    DWORD    multicast bytes received (FFFFFFFFh = not counted)
  19472.  3Ch    DWORD    broadcast bytes received (FFFFFFFFh = not counted)
  19473.  40h    DWORD    frames discarded--hardware error (FFFFFFFFh = not counted)
  19474.  44h    DWORD    total frames transmitted (FFFFFFFFh = not counted)
  19475.  48h    DWORD    total bytes transmitted (FFFFFFFFh = not counted)
  19476.  4Ch    DWORD    multicast frames transmitted (FFFFFFFFh = not counted)
  19477.  50h    DWORD    broadcast frames transmitted (FFFFFFFFh = not counted)
  19478.  54h    DWORD    broadcast bytes transmitted (FFFFFFFFh = not counted)
  19479.  58h    DWORD    multicast bytes transmitted (FFFFFFFFh = not counted)
  19480.  5Ch    DWORD    frames not transmitted--timeout (FFFFFFFFh = not counted)
  19481.  60h    DWORD    frames not transmitted--hardware error (FFFFFFFFh = not countd)
  19482.  64h  N BYTEs    vendor-specific info
  19483. ----------214402-----------------------------
  19484. INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
  19485.     AX = 4402h
  19486.     BX = handle for character device "GDMS"
  19487.     CX = number of bytes to read (>= 4)
  19488.     DS:DX -> buffer (see below)
  19489. Return: CF set on error
  19490.         AX = error code (see AH=59h)
  19491.     CF clear if successful
  19492.         AX = number of bytes read
  19493.  
  19494. Format of returned data:
  19495. Offset    Size    Description
  19496.  00h  4 BYTEs    ???
  19497.  04h    DWORD    pointer to ???
  19498.  08h  4 BYTEs    ???
  19499. ----------214402-----------------------------
  19500. INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE
  19501.     AX = 4402h
  19502.     BX = handle for device "LA$TBYTE"
  19503.     CX = 0004h
  19504.     DS:DX -> DWORD to hold address of 39-byte table of ???
  19505. Return: CF set on error
  19506.         AX = error code (see AH=59h)
  19507.     CF clear if successful
  19508.         AX = number of bytes read
  19509. Note:    LASTBYTE.SYS is part of "The Last Byte" by Key Software Products
  19510. SeeAlso: AX=4402h"HIGHUMM"
  19511. ----------214402-----------------------------
  19512. INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS
  19513.     AX = 4402h
  19514.     BX = handle for device "KSP$UMM"
  19515.     CX = 0004h
  19516.     DS:DX -> DWORD to hold entry point
  19517. Return: CF set on error
  19518.         AX = error code (see AH=59h)
  19519.     CF clear if successful
  19520.         AX = number of bytes read
  19521. Note:    HIGHUMM.SYS is part of "The Last Byte" by Key Software Products
  19522. SeeAlso: AX=4402h"LASTBYTE"
  19523.  
  19524. Call HIGHUMM.SYS entry point with:
  19525.     AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h)
  19526.         DX = size in paragraphs
  19527.         Return: BX = segment number (if successful)
  19528.             DX = size of requested block/size of largest block
  19529.     AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h)
  19530.         DX = segment number of UMB
  19531.     AH = 02h request a bank-switched memory block
  19532.         DX = size in paragraphs
  19533.         Return: BX = segment number (if successful)
  19534.             DX = size of requested block/size of largest block
  19535.     AH = 03h release a bank-switched memory block
  19536.         DX = segment number
  19537.     AH = 04h transfer data to/from high memory
  19538.         DS:SI -> source
  19539.         ES:DI -> destination
  19540.         CX = length in bytes
  19541.         Note: enables bank-switched memory, does the copy, then disables
  19542.         bank-switched memory
  19543.     AH = 05h get a word from bank-switched memory
  19544.         ES:DI -> word to read
  19545.         Return: DX = word
  19546.     AH = 06h put a word to bank-switched memory
  19547.         ES:DI -> word to write
  19548.         DX = word
  19549.     AH = 07h put a byte to bank-switched memory
  19550.         ES:DI -> byte to write
  19551.         DL = byte
  19552.     AH = 08h enable bank-switched memory
  19553.         DS:SI -> 6-byte status save area
  19554.     AH = 09h disable bank-switched memory
  19555.         DS:SI -> 6-byte save area from enable call (AH=08h)
  19556.     AH = 0Ah assign name to UMB or high bank-switched block
  19557.         DX = segment number
  19558.         DS:SI -> 8-byte blank-padded name
  19559.     AH = 0Bh locate UMB block by name
  19560.         DS:SI -> 8-byte blank-padded name
  19561.         Return: BX = segment number (if successful)
  19562.             DX = size of block
  19563.     AH = 0Ch locate bank-switched block by name
  19564.         DS:SI -> 8-byte blank-padded name
  19565.         Return: BX = segment number (if successful)
  19566.             DX = size of block
  19567. Return: AX = status code
  19568.         0001h successful
  19569.         0000h failed
  19570.         BL = error code
  19571.             80h not implemented
  19572.             B0h insufficient memory, smaller block available
  19573.             B1h insufficient memory, no blocks available
  19574.             B2h invalid segment number
  19575. Note:    only functions 00h and 01h are always available; the remaining
  19576.       functions are only enabled if the proper commandline switch is given
  19577. ----------214402-----------------------------
  19578. INT 21 - SMARTDRV.SYS - IOCTL - GET CACHE STATUS
  19579.     AX = 4402h
  19580.     BX = file handle for device "SMARTAAR"
  19581.     CX = number of bytes to read (min 28h)
  19582.     DS:DX -> buffer for status record (see below)
  19583. Return: CF clear if successful
  19584.         AX = number of bytes actually read
  19585.     CF set on error
  19586.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19587. SeeAlso: AX=4403h"SMARTDRV",INT 2F/AX=4A10h
  19588.  
  19589. Format of SMARTDRV status record:
  19590. Offset    Size    Description
  19591.  00h    BYTE    write-through flag (always 01h)
  19592.  01h    BYTE    writes should be buffered (always 00h)
  19593.  02h    BYTE    cache enabled if 01h
  19594.  03h    BYTE    driver type (01h extended memory, 02h expanded)
  19595.  04h    WORD    clock ticks between cache flushes (currently unused)
  19596.  06h    BYTE    cache contains locked tracks if nonzero
  19597.  07h    BYTE    flush cache on INT 19 reboot if nonzero
  19598.  08h    BYTE    cache full track writes if nonzero
  19599.  09h    BYTE    double buffering (for VDS) state (00h off, 01h on, 02h dynamic)
  19600.  0Ah    DWORD    original INT 13 vector
  19601.  0Eh    BYTE    minor version number
  19602.  0Fh    BYTE    major version number
  19603.  10h    WORD    unused
  19604.  12h    WORD    sectors read            \
  19605.  14h    WORD    sectors already in cache     > may be scaled rather than
  19606.  16h    WORD    sectors already in track buffer /  absolute counts
  19607.  18h    BYTE    cache hit rate in percent
  19608.  19h    BYTE    track buffer hit rate in percent
  19609.  1Ah    WORD    total tracks in cache
  19610.  1Ch    WORD    number of tracks in use
  19611.  1Eh    WORD    number of locked tracks
  19612.  20h    WORD    number of dirty tracks
  19613.  22h    WORD    current cache size in 16K pages
  19614.  24h    WORD    original (maximum) cache size in 16K pages
  19615.  26h    WORD    minimum cache size in 16K pages
  19616.  28h    DWORD    pointer to byte flag to increment for locking cache contents
  19617. ----------214402-----------------------------
  19618. INT 21 - CD-ROM device driver - IOCTL INPUT
  19619.     AX = 4402h
  19620.     BX = file handle referencing character device for CD-ROM driver
  19621.     CX = number of bytes to read
  19622.     DS:DX -> control block (see below)
  19623. Return: CF clear if successful
  19624.         AX = number of bytes actually read
  19625.     CF set on error
  19626.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19627. Note:    the data returned depends on the first byte of the control block; the
  19628.       remainder of the control block is filled by the driver
  19629. SeeAlso: AX=4403h"CD-ROM",INT 2F/AX=0802h
  19630.  
  19631. Format of control block:
  19632. Offset    Size    Description
  19633.  00h    BYTE    data being requested
  19634.         00h device driver header address
  19635.         01h drive head location
  19636.         02h reserved
  19637.         03h error statistics
  19638.         04h audio channel info
  19639.         05h raw drive bytes (uninterpreted and device-specific)
  19640.         06h device status
  19641.         07h sector size
  19642.         08h volume size
  19643.         09h media change status
  19644.         0Ah audio disk info
  19645.         0Bh audio track info
  19646.         0Ch audio Q-Channel info
  19647.         0Dh audio sub-channel info
  19648.         0Eh UPC code
  19649. ---function 00h---
  19650.  01h    DWORD    device driver header address (see also AH=52h)
  19651. ---function 01h---
  19652.  01h    BYTE    addressing mode
  19653.         00h HSG
  19654.         01h Red Book
  19655.  02h    DWORD    current location of drive's head
  19656.         logical sector number in HSG mode
  19657.         frame/second/minute/unused in Red Book mode
  19658.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  19659. ---function 03h---
  19660.  01h  N BYTEs    undefined as of 5 Aug 88 specification
  19661. ---function 04h---
  19662.  01h    BYTE    input channel (0-3) for output channel 0
  19663.  02h    BYTE    volume for output channel 0
  19664.  03h    BYTE    input channel (0-3) for output channel 1
  19665.  04h    BYTE    volume for output channel 1
  19666.  05h    BYTE    input channel (0-3) for output channel 2
  19667.  06h    BYTE    volume for output channel 2
  19668.  07h    BYTE    input channel (0-3) for output channel 3
  19669.  08h    BYTE    volume for output channel 3
  19670. Notes:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  19671.       right prime; a volume of 00h is off
  19672.     the default setting is for each input channel to be assigned to the
  19673.       same-numbered output channel at full (FFh) volume
  19674. ---function 05h---
  19675.  01h    BYTE    number of bytes read
  19676.  02h 128 BYTEs    buffer for drive bytes
  19677. ---function 06h---
  19678.  01h    DWORD    device parameters
  19679.         bit 0: door open
  19680.             1: door unlocked
  19681.             2: supports raw reading in addition to cooked
  19682.             3: writable
  19683.             4: can play audio/video tracks
  19684.             5: supports interleaving
  19685.             6: reserved
  19686.             7: supports prefetch requests
  19687.             8: supports audio channel control
  19688.             9: supports Red Book addressing in addition to HSG
  19689.            10: audio is playing
  19690. ---function 07h---
  19691.  01h    BYTE    read mode
  19692.         00h cooked
  19693.         01h raw
  19694.  02h    WORD    sector size in bytes
  19695. ---function 08h---
  19696.  01h    DWORD    volume size in sectors
  19697. ---function 09h---
  19698.  01h    BYTE    media change status
  19699.         00h don't know
  19700.         01h media unchanged
  19701.         FFh media has been changed
  19702. ---function 0Ah---
  19703.  01h    BYTE    lowest audio track number
  19704.  02h    BYTE    highest audio track number
  19705.  03h    DWORD    start address of lead-out track (Red Book format)
  19706. --function 0Bh---
  19707.  01h    BYTE    track number (set by caller)
  19708.  02h    DWORD    starting point of track (Red Book format)
  19709.  06h    BYTE    track control info
  19710.         bits 15,14,12: track type (notice: bits not contiguous!)
  19711.             000 two audio channels, no pre-emphasis
  19712.             001 two audio channels with pre-emphasis
  19713.             010 data track
  19714.             100 four audio channels, no pre-emphasis
  19715.             101 four audio channels with pre-emphasis
  19716.             other reserved
  19717.         bit 13: digital copy permitted
  19718. ---function 0Ch---
  19719.  01h    BYTE    CONTROL and ADR byte (as received from drive)
  19720.  02h    BYTE    track number
  19721.  03h    BYTE    point or index
  19722.  04h    BYTE    minute    \
  19723.  05h    BYTE    second     > running time within track
  19724.  06h    BYTE    frame    /
  19725.  07h    BYTE    zero
  19726.  08h    BYTE    "AMIN" or "PMIN"     \
  19727.  09h    BYTE    "ASEC" or "PSEC"      > running time on disk
  19728.  0Ah    BYTE    "AFRAME" or "PFRAME" /
  19729. ---function 0Dh---
  19730.  01h    DWORD    starting frame address (Red Book format)
  19731.  05h    DWORD    transfer address
  19732.  09h    DWORD    number of sectors to read
  19733. Note:    copies 96 bytes of sub-channel info per sector into buffer
  19734. ---function 0Eh---
  19735.  01h    BYTE    CONTROL and ADR byte
  19736.  02h  7 BYTEs    UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0)
  19737.  09h    BYTE    zero
  19738.  0Ah    BYTE    "AFRAME"
  19739. ----------214402-----------------------------
  19740. INT 21 U - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT
  19741.     AX = 4402h
  19742.     BX = file handle for device "QEMM386$"
  19743.     CX = 0004h
  19744.     DS:DX -> DWORD buffer for API entry point
  19745. Return: CF clear if successful
  19746.         buffer filled (see INT 67/AH=3Fh for entry point parameters)
  19747.     CF set on error
  19748.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19749. SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  19750. ----------214402-----------------------------
  19751. INT 21 U - Quarterdeck - QEMM-386 v6+ - GET ???
  19752.     AX = 4402h
  19753.     BX = file handle for device "EMMXXXX0"
  19754.     CX = 0006h (size of buffer in bytes)
  19755.     DS:DX -> buffer for ???
  19756.         first byte must be 01h on entry
  19757. Return: CF clear if successful
  19758.         buffer filled (see INT 67/AH=3Fh function 1B00h)
  19759.     CF set on error
  19760.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19761. Note:    this call always returns an error if Windows3 support has been disabled
  19762.       with the NW3 switch to QEMM386.SYS
  19763. SeeAlso: INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  19764. ----------214402-----------------------------
  19765. INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
  19766.     AX = 4402h
  19767.     BX = file handle for device "HOOKROM$"
  19768.     CX = 0004h
  19769.     DS:DX -> DWORD buffer for address of hooked vector table (see below)
  19770. Return: CF clear if successful
  19771.         DS:DX buffer filled
  19772.     CF set on error
  19773.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19774. SeeAlso: AX=4402h"QEMM"
  19775.  
  19776. Format of hooked vector table entry:
  19777. Offset    Size    Description
  19778.  00h  5 BYTEs    FAR jump to actual interrupt handler
  19779.         (end of table if first byte is not EAh)
  19780.  05h    BYTE    interrupt vector number
  19781. ----------214402-----------------------------
  19782. INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE
  19783.     AX = 4402h
  19784.     BX = file handle for device "SCSIMGR$"
  19785.     CX = 0004h
  19786.     DS:DX -> buffer for function address
  19787. Return: CF clear if successful
  19788.         AX = 0004h
  19789.     CF set on error
  19790.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19791. Note:    the function address is called with the address of a SCSI Request
  19792.       Block on the stack and the caller must clean up the stack
  19793. SeeAlso: AX=440Ch"ASPITAPE",INT 11/AH=FFh"WD7000"
  19794.  
  19795. Format of SCSI Request Block (64 bytes):
  19796. Offset    Size    Description
  19797.  00h    BYTE    request number
  19798.         00h "HA_INQ"     host adapter inquiry
  19799.         01h "GET_TYPE"     get device type
  19800.         02h "EXEC_SIO"     execute SCSI I/O
  19801.         03h "ABORT_SRB"     abort SRB
  19802.         04h "RESET_DEV"     reset SCSI device
  19803.         05h "SET_HAPRMS" set host adapter parameters
  19804.  01h    BYTE    request status
  19805.         00h not done yet
  19806.         02h aborted
  19807.         04h SCSI I/O error
  19808.         80h invalid
  19809.         81h no adapter
  19810.         82h no device attached
  19811.         else status
  19812.  02h    BYTE    host adapter ID
  19813.  03h    BYTE    request flags
  19814.         bit 3: ???
  19815.  04h    DWORD    reserved
  19816. ---request 00h---
  19817.  08h    BYTE    (returned) number of host adapters
  19818.  09h    BYTE    (returned) target adapter ID
  19819.  0Ah 16 BYTEs    (returned) manager ID
  19820.  1Ah 16 BYTEs    (returned) adapter ID
  19821.  2Ah 16 BYTEs    (returned) parameters
  19822. ---request 01h---
  19823.  08h    BYTE    target ID
  19824.  09h    BYTE    logical unit number
  19825.  0Ah    BYTE    (returned) device type
  19826.         01h streamer
  19827. ---request 02h---
  19828.  08h    BYTE    target ID
  19829.  09h    BYTE    logical unit number
  19830.  0Ah    DWORD    data allocation length
  19831.  0Eh    BYTE    sense allocation length
  19832.  0Fh    DWORD    data buffer pointer
  19833.  13h    DWORD    next request pointer (for linking)
  19834.  17h    BYTE    CDB length
  19835.  18h    BYTE    (returned) host adapter status
  19836.         11h select timeout
  19837.         12h data overrun
  19838.         13h bus error
  19839.         14h bus failure
  19840.  19h    BYTE    (returned) target status
  19841.         02h sense data stored in SRB
  19842.         08h target busy
  19843.         18h reservation error
  19844.  1Ah    DWORD    post routine address
  19845.  1Eh    WORD    real mode Post DS
  19846.  20h    DWORD    SRB pointer
  19847.  24h    WORD    reserved
  19848.  26h    DWORD    SRB physical address
  19849.  2Ah 22 BYTEs    SCSIMGR$ workspace
  19850.  40h  N BYTEs    CCB (20-24 bytes)
  19851. ---request 04h---
  19852.  08h    BYTE    target ID
  19853.  09h    BYTE    logical unit number
  19854.  0Ah 14 BYTEs    reserved
  19855.  18h    BYTE    (returned) host adapter status (see above)
  19856.  19h    BYTE    (returned) target status (see above)
  19857.  1Ah    DWORD    post routine address
  19858.  1Eh 34 BYTEs    workspace
  19859.  
  19860. Format of CCB:
  19861. Offset    Size    Description
  19862.  00h    BYTE    command code
  19863.         01h rewind
  19864.         05h get block size limits
  19865.         08h read
  19866.         0Ah write
  19867.         10h write file marks
  19868.         11h SCSI Space (set position?)
  19869.         12h SCSI Inquire
  19870.         19h erase
  19871.         1Bh load/unload media
  19872.  01h    BYTE    flags
  19873.         bits 4-0: vary by function
  19874.         bits 7-5: logical unit number
  19875.  02h    BYTE    "adr_1"
  19876.  03h    BYTE    "adr_0"
  19877.  04h    BYTE    length
  19878.  05h    BYTE    control
  19879.     ...
  19880.  06h/0Ah 14 BYTEs buffer for sense data
  19881. ----------214402-----------------------------
  19882. INT 21 U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE
  19883.     AX = 4402h
  19884.     BX = file handle for device "386MAX$$"
  19885.     CX = 005Ah
  19886.     DS:DX -> 386MAX state buffer (see below)
  19887. Return: CF clear if successful
  19888.         buffer filled
  19889.         AX = number of bytes actually copied
  19890.     CF set on error
  19891.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19892. Notes:    the buffer must be one byte larger than the value given in CX; if the
  19893.       value is less than 5Ah, only a partial state record will be returned
  19894.     the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 ("386MAX$$"
  19895.       did not exist yet, use "QMMXXXX0" and then "EMMXXXX0" instead) and
  19896.       56h bytes for v5.11.
  19897.     to invoke 386MAX API functions, push DX onto the stack, load DX with
  19898.       the word at offset 25h in the returned state, load all other
  19899.       registers as needed for the desired function, and execute an
  19900.       OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return
  19901.       if it is not otherwise modified by the API function.
  19902. SeeAlso: AX=4403h"386MAX",INT 67/AH=3Fh
  19903.  
  19904. Format of 386MAX v6.01 state:
  19905. Offset    Size    Description
  19906.  00h    BYTE    version number of state structure (must be set on entry;
  19907.           v6.01 returns an error if not 03h)
  19908.  01h  6 BYTEs    signature "386MAX"
  19909.  07h  4 BYTEs    version string "N;NN" (i.e. "6;01" for v6.01)
  19910.  0Bh    WORD    segment of low-memory portion of 386MAX.SYS
  19911.  0Dh  2 BYTEs    ???
  19912.  0Fh    WORD    segment of ??? memory block or 0000h
  19913.  11h    WORD    bit flags
  19914.         bit 1: ???
  19915.         bit 2: ???
  19916.         bit 3: ??? (cleared by calling INT 67 functions)
  19917.         bit 5: ???
  19918.         bit 6: 386MAX active???
  19919.         bit 7: 386MAX is providing EMS services
  19920.         bit 8: ???
  19921.         bit 9: ??? (see INT 15/AX=2402h)
  19922.         bit 10: ???
  19923.         bit 11: ???
  19924.         bit 12: ???
  19925.         bit 13: QPMS has been used
  19926.         bit 14: ???
  19927.         bit 15: ???
  19928.  13h    WORD    starting address of video memory in K
  19929.  15h  8 BYTEs    ???
  19930.  1Dh    WORD    KBytes extended memory used by 386MAX
  19931.  1Fh  2 BYTEs    ???
  19932.  21h    WORD    ???
  19933.  23h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions
  19934.  25h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX API functions
  19935.  27h    WORD    ???
  19936.  29h  2 BYTEs    ???
  19937.  2Bh    DWORD    ???
  19938.  2Fh  4 BYTEs    ???
  19939.  33h    WORD    system configuration??? flags
  19940.         bit 1: ROM compressed???
  19941.         bit 3: ???
  19942.         bit 5: 386MAX loaded into high memory
  19943.         bit 11: PC/XT (thus only single 8259 interrupt controller
  19944.                 present, DMA only in 1st megabyte, etc)
  19945.  35h    WORD    ??? bit flags
  19946.  37h  4 BYTEs    ???
  19947.  3Bh    WORD    segment of first MCB in high memory chain???
  19948.  3Dh    WORD    flags
  19949.         bit 2: no DPMI services
  19950.         bit 11: don't backfill holes in video memory area
  19951.         bit 12: don't backfill below video memory???
  19952.  3Fh    WORD    flags
  19953.         bit 7: ???
  19954.  41h    WORD    flags
  19955.         bit 0: Windows3 support enabled
  19956.         bit 8: ???
  19957.  43h  2 BYTEs    ???
  19958.  45h    WORD    amount of memory to report available on INT 15/AH=88h
  19959.  47h  4 BYTEs    ???
  19960.  4Bh    WORD    ???
  19961.  4Dh  2 BYTEs    ???
  19962.  4Fh    WORD    ???
  19963.  51h    WORD    bit flags
  19964.         bit 12: ???
  19965.  53h    DWORD    old INT 21h
  19966.  57h    DWORD    pointer to 386MAX's EMS (INT 67h) handler
  19967.  
  19968. Format of high memory info record:
  19969. Offset    Size    Description
  19970.  00h    WORD    segment address of memory region
  19971.  02h    WORD    size of memory region in paragraphs
  19972.  04h    BYTE    type or flags???
  19973.         00h if locked out
  19974.         02h if EMS page frame
  19975.         04h if high RAM
  19976.         42h if ROM
  19977.  05h    BYTE    ???
  19978.  
  19979. Format of ROM shadowing record:
  19980. Offset    Size    Description
  19981.  00h    WORD    segment of ROM???
  19982.  02h    WORD    segment of ROM???
  19983.  04h  2 BYTEs    ???
  19984.  06h    WORD    size of shadowed ROM in paragraphs
  19985.  08h  4 BYTEs    ???
  19986.  
  19987. Values for memory type:
  19988.  00h unused by EMS
  19989.  01h DOS
  19990.  04h page frame overlapping ROM???
  19991.  80h high memory
  19992.  84h page frame???
  19993.  87h video ROM???
  19994. Note:    the type may be 00h (unused) if the 16K page is split among different
  19995.       uses (such as ROM and high RAM)
  19996.  
  19997. Call 386MAX API (via OUT DX,AL) with:
  19998.     STACK: WORD value for DX
  19999.     AH = 01h get high memory information
  20000.         ES:DI -> buffer for array of high memory info records
  20001.             (see above)
  20002.         Return: CX = number of records placed in buffer
  20003.     AH = 02h get shadowed ROM info???
  20004.         ES:DI -> buffer for array of ROM shadowing records (see above)
  20005.         Return: CX = number of records placed in buffer
  20006.     AH = 03h get 386MAX state
  20007.         ES:DI -> 90-byte buffer for state (see above)
  20008.         Return: AH = 00h (successful)
  20009.             buffer filled
  20010.         Note:    unlike INT 21/AX=4402h"386MAX", this function omits
  20011.               the first byte specifying the state buffer version
  20012.     AH = 04h get memory types???
  20013.         ES:DI -> buffer for memory type info (array of bytes, one per
  20014.             16K page) (see above)
  20015.         Return:    CX = number of bytes placed in buffer
  20016.     AH = 05h get ???
  20017.         AL = subfunction
  20018.             00h invoke INT 15/AX=2401h first
  20019.             01h don't invoke INT 15/AX=2401h first
  20020.         CX = number of bytes to copy (0000h for default)
  20021.         SI = ???
  20022.         ES:DI -> buffer for ???
  20023.         Return: CX = number of bytes actually copied
  20024.             ???
  20025.     AH = 06h get memory speed info
  20026.         ES:DI -> buffer for memory speed records (see below)
  20027.         Return: AH = 00h (successful)
  20028.             CX = number of bytes placed in buffer
  20029.         Note:    this function can take over a second to execute
  20030.     AH = 07h ???
  20031.         ???
  20032.         Return:    ???
  20033.     AH = 08h ???
  20034.         AL = ??? (00h or nonzero)
  20035.     AH = 09h toggle ??? flags
  20036.         BX = bitmask of bits of ??? flags (word at state+11h) to toggle
  20037.         Return: AH = 00h (successful)
  20038.         Note: invokes INT 15/AX=2401h first
  20039.     AH = 0Ah toggle ??? flags
  20040.         BX = bitmask of bits of ??? (word at state+33h) to toggle
  20041.         Return: AH = 00h (successful)
  20042.         Notes:    invokes INT 15/AX=2401h first
  20043.             does ??? if bit 3 on after specified bits are toggled
  20044.     AH = 0Bh toggle ??? flags
  20045.         BX = bitmask of bits of ??? (word at state+35h) to toggle
  20046.         Return: AH = 00h (successful)
  20047.         Note: invokes INT 15/AX=2401h first
  20048.     AH = 0Ch toggle ??? flags
  20049.         BX = bitmask of bits of ??? (word at state+41h) to toggle
  20050.         Return: AH = 00h (successful)
  20051.         Note: invokes INT 15/AX=2401h first
  20052.     AH = 0Dh specify 386MAX high-memory location
  20053.         BX = segment address of high-memory real-mode portion of 386MAX
  20054.         ???
  20055.         Return: AH = status (00h successful)
  20056.             ???
  20057.     AH = 0Eh CRT controller register virtualization
  20058.         AL = subfunction
  20059.             00h allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h
  20060.             01h trap accesses to CRTC I/O ports
  20061.     AH = 0Fh reboot system
  20062.         Return: never
  20063.     AH = 11h get high memory information
  20064.         ES:DI -> 96-byte buffer for high memory info
  20065.         Return: AH = 00h (successful)
  20066.             ES:DI buffer filled
  20067.         Notes:    each byte in buffer contains bit flags for a 4K page in
  20068.               the A000h-FFFFh region
  20069.                 bit 0: ???
  20070.                 bit 1: physical address same as linear address
  20071.                 bit 2: EMS page frame
  20072.                 bit 6: ???
  20073.             this function can take over a second to execute
  20074.     AH = 12h ???
  20075.         AL = subfunction
  20076.             00h ???
  20077.             01h ???
  20078.         ???
  20079.         Return: AH = 00h (successful) if AL=00h or 01h
  20080.             AH = 8Fh otherwise
  20081.     AH = 13h page protection???
  20082.         AL = subfunction
  20083.             00h set all ??? 4K pages to read-only???
  20084.             01h set all ??? 4K pages to read-write???
  20085.         ???
  20086.         Return: AH = 00h (successful) if AL=00h or 01h
  20087.             AH = 8Fh otherwise
  20088.     AH = 15h ???
  20089.         ???
  20090.         Return: ???
  20091.     AH = 16h get 386MAX memory usage screen
  20092.         ES:DI -> buffer for memory info display
  20093.         CX = size of buffer in bytes
  20094.         Return:    ES:DI buffer filled with '$'-terminated string (if
  20095.                 large enough to hold entire usage screen)
  20096.     AH = 17h Windows 3 startup/termination
  20097.         AL = subfunction
  20098.             00h Windows3 initializing
  20099.             DX (on stack) = Windows startup flags
  20100.             DI = Windows version number (major in upper byte)
  20101.             ES:BX = 0000h:0000h
  20102.             DS:SI = 0000h:0000h
  20103.             Return: CX = 0000h if OK for Windows to load
  20104.                    <> 0 if Windows should not load
  20105.                 ES:BX -> startup info structure
  20106.                 DS:SI -> Virtual86 mode enable/disable callback
  20107.             01h Windows3 terminating
  20108.             ES:BX -> ???
  20109.             DX (on stack) = Windows exit flags
  20110.             Return: ???
  20111.     AH = 18h QPMS (Qualitas Protected Memory Services)
  20112.         AL = subfunction
  20113.             00h get QPMS configuration
  20114.             Return: BX = starting segment of QPMS memory window
  20115.                 CX = number of 4K pages reserved for QPMS???
  20116.                 DX = number of 4K pages in QPMS window???
  20117.             01h map QPMS memory page???
  20118.             BX = 4K page number within memory reserved for QPMS???
  20119.             CL = 4K page number within QPMS memory window???
  20120.             02h mark all QPMS memory read-only
  20121.             03h mark all QPMS memory read-write
  20122.         Return: AH = status (00h,8Ah,8Bh,8Fh)
  20123.     AH = 19h get linear address for physical address
  20124.         EDX = physical address (low word on stack)
  20125.         Return: AH = status
  20126.                 00h successful
  20127.                 EDX = linear address at which physical address
  20128.                     may be accessed
  20129.                 8Bh physical address currently not addressable
  20130.         Note: calls INT 15/AX=2401h first
  20131.     AH = 1Ah set page table entry???
  20132.         EDX = new page table entry??? (low word on stack)
  20133.         ESI = linear address of page???
  20134.         Return: AH = status (00h,8Bh)
  20135.         Note: calls INT 15/AX=2401h first
  20136.     AH = 1Bh get ???
  20137.         Return: AH = status
  20138.             BX = ???
  20139.             CX = ???
  20140.             EDX = physical address of ???
  20141.     AH = 1Ch get original interrupt vector
  20142.         AL = interrupt vector (00h-7Fh)
  20143.         Return: AH = 00h (successful)
  20144.             EDX = original vector before 386MAX loaded (segment in
  20145.                 high word, offset in low word)
  20146.         Note:    no range checking is performed; requests for INTs 80h-
  20147.               FFh will return random values
  20148.     AH = 1Dh display string???
  20149.         SI = ???
  20150.         Return: AH = 00h (successful)
  20151.             ???
  20152.     AH = 1Eh ???
  20153.         ES:DI -> ???
  20154.         ???
  20155.         Return: ???
  20156.     AH = 1Fh ???
  20157.         ???
  20158.         Return: AX = 0000h if successful
  20159.             BX = ??? (0001h for 386MAX v6.01)
  20160.             CL = ???
  20161.             DL = ??? (5Ah for 386MAX v6.01)
  20162.             DH = ??? (00h for 386MAX v6.01)
  20163.             SI = ???
  20164.             ES???:DI -> ???
  20165.     AH = 40h-5Dh EMS services (see INT 67/AH=40h etc)
  20166.     AH = DEh VCPI services (see INT 67/AX=DE00h etc)
  20167. Return: AH = status (as for EMS INT 67 calls)
  20168.         00h successful
  20169.         80h internal error
  20170.         81h hardware malfunction
  20171.         83h invalid handle
  20172.         84h    undefined function
  20173.         8Ah invalid logical page nuber
  20174.         8Bh illegal physical page number
  20175.         8Fh undefined subfunction
  20176.         A4h access denied
  20177.         etc.
  20178.     STACK popped (value placed in DX if no specific return value for DX)
  20179.  
  20180. Format of memory speed record:
  20181. Offset    Size    Description
  20182.  00h    DWORD    page table entry for 4K page
  20183.  04h    WORD    number of microticks (840ns units) required for REP LODSD of
  20184.         entire 4K page
  20185. ----------214402-----------------------------
  20186. INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO
  20187.     AX = 4402h
  20188.     BX = file handle for device "PGS1600$"
  20189.     CX = 0018h (size of buffer)
  20190.     DS:DX -> configuration buffer (see below)
  20191. Return: CF clear if successful
  20192.         buffer filled
  20193.         AX = number of bytes actually copied
  20194.     CF set on error
  20195.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20196. Note:    PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  20197.       display adapter, which provides a 1600x1200 monochrome display as
  20198.       well as one of two emulations, MDA or CGA.
  20199. SeeAlso: AX=4403h"PGS1600"
  20200.  
  20201. Format of configuration information:
  20202. Offset    Size    Description
  20203.  00h    WORD    version (high byte = major, low byte = minor)
  20204.  02h    WORD    board initialisation mode
  20205.  04h    WORD    board I/O address
  20206.         03D0h CGA emulation
  20207.         03B0h MDA emulation
  20208.         0390h no emulation
  20209.         0350h no emulation, alternate
  20210.  06h    WORD    emulation buffer segment
  20211.         B800h    CGA emulation
  20212.         B000h    MDA emulation
  20213.         0000h    no emulation
  20214.  08h    WORD    PG1600 graphics buffer segment
  20215.  0Ah    WORD    number of bytes between consecutive graphic rows
  20216.  0Ch    WORD    horizontal pixel size
  20217.  0Eh    WORD    vertical pixel size
  20218.  10h    WORD    horizontal dots per inch
  20219.  12h    WORD    vertical dots per inch
  20220.  14h    WORD    graphics buffer bits per pixel
  20221.  16h    WORD    monitor bits per pixel
  20222. ----------214402-----------------------------
  20223. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  20224.     AX = 4402h
  20225.     BX = file handle referencing device "$IPCUST"
  20226.     CX, DS:DX ignored
  20227. Return: CF clear if successful
  20228.         AX destroyed
  20229.     CF set on error
  20230.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20231. Note:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  20232.       version 2.05.     If less than the entire data is read or written,
  20233.       the next read/write continues where the previous one ended; this
  20234.       call and AX=4403h both reset the location at which the next
  20235.       operation starts to zero
  20236. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4403h"IPCUST"
  20237. ----------214402-----------------------------
  20238. INT 21 - 10NET v5.0 - 10BEUI.DOS - API
  20239.     AX = 4402h
  20240.     BX = file handle referencing device "10BEUI$"
  20241.     DS:DX -> parameter record (see below)
  20242.     CX ignored
  20243. Return: CF clear if successful
  20244.         AX destroyed
  20245.     CF set on error
  20246.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20247. SeeAlso: AX=4402h"10MEMMGR",INT 6F/AH=00h"10NET"
  20248.  
  20249. Format of parameter record:
  20250. Offset    Size    Description
  20251.  00h    WORD    000Ah (function number???)
  20252.  02h    WORD    ???
  20253.  04h    DWORD    pointer to buffer for ???
  20254.  08h  4 BYTEs    ???
  20255.  0Ch    WORD    transfer size
  20256. ----------214402-----------------------------
  20257. INT 21 - 10NET v5.0 - 10MEMMGR.SYS - API
  20258.     AX = 4402h
  20259.     BX = file handle referencing device "MEMMGR0$"
  20260.     DS:DX -> 6-byte buffer for interface info (see below)
  20261.     CX ignored
  20262. Return: CF clear if successful
  20263.         AX destroyed
  20264.     CF set on error
  20265.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20266. SeeAlso: AX=4402h"10BEUI",INT 6F/AH=00h"10NET"
  20267.  
  20268. Format of interface info:
  20269. Offset    Size    Description
  20270.  00h    DWORD    address of entry point (see below)
  20271.  04h    WORD    version (0500h for v5.00)
  20272.  
  20273. Call entry point with:
  20274.     AL = 01h ???
  20275.         BX = ???
  20276.         Return: CF clear if successful
  20277.             CF set on error
  20278.             AX = error code
  20279.     AL = 02h ???
  20280.         ???
  20281.     AL = 03h ???
  20282.         ???
  20283.     AL = 04h set/restore memory allocation strategy
  20284.         BX = subfunction
  20285.         0000h set strategy
  20286.         0001h restore strategy
  20287.         Return: CF clear if successful
  20288.             CF set on error (if function disabled)
  20289.             various registers destroyed
  20290.     AL = other
  20291.         Return: CF set
  20292.             AX = 0000h
  20293.             BL = 01h
  20294. ----------214403-----------------------------
  20295. INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL
  20296.     AX = 4403h
  20297.     BX = file handle referencing character device
  20298.     CX = number of bytes to write
  20299.     DS:DX -> data to write
  20300. Return: CF clear if successful
  20301.         AX = number of bytes actually written
  20302.     CF set on error
  20303.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20304. Notes:    format of data is driver-specific (see below for some specific cases)
  20305.     if the file handle refers to "4DOSSTAK", the 4DOS (v2.x-3.03)
  20306.       KEYSTACK.SYS driver will push the specified characters on the
  20307.       keyboard stack; similarly for "NDOSSTAK", the NDOS KEYSTACK.SYS
  20308.       driver will push the characters onto the keyboard stack
  20309. SeeAlso: AX=4400h,AX=4402h,AX=4405h,INT 2F/AX=122Bh,INT 2F/AX=D44Dh
  20310. SeeAlso: INT 2F/AX=D44Fh
  20311. ----------214403-----------------------------
  20312. INT 21 - SMARTDRV.SYS - IOCTL - CACHE CONTROL
  20313.     AX = 4403h
  20314.     BX = handle for device "SMARTAAR"
  20315.     CX = number of bytes to write
  20316.     DS:DX -> SMARTDRV control block (see below)
  20317. Return: CF clear if successful
  20318.         AX = number of bytes actually written
  20319.            = 0000h if control block too small for given command
  20320.     CF set on error
  20321.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20322. SeeAlso: AX=4402h"SMARTDRV",INT 2F/AX=4A10h
  20323.  
  20324. Format of SMARTDRV control block:
  20325. Offset    Size    Description
  20326.  00h    BYTE    function code
  20327.         00h flush cache
  20328.         01h flush and discard cache
  20329.         02h disable caching (flushes and discards cache first)
  20330.         03h enable caching
  20331.         04h control write caching
  20332.         05h set flushing tick count
  20333.         06h lock cache contents
  20334.         07h unlock cache contents
  20335.         08h set flush-on-reboot flag
  20336.         09h unused
  20337.         0Ah control full-track caching
  20338.         0Bh reduce cache size
  20339.         0Ch increase cache size
  20340.         0Dh set INT 13 chain address
  20341. ---function 04h---
  20342.  01h    BYTE    write caching control action
  20343.         00h turn off write-through
  20344.         01h turn on write-through
  20345.         02h turn off write buffering (also flushes cache)
  20346.         03h turn on write buffering (also flushes cache)
  20347. ---function 05h---
  20348.  01h    WORD    number of timer ticks between cache flushes
  20349. ---function 08h---
  20350.  01h    BYTE    new flush-on-reboot flag (00h off, 01h on)
  20351. ---function 0Ah---
  20352.  01h    BYTE    full-track writes are
  20353.         00h not cached
  20354.         01h cached
  20355. ---functions 0Bh,0Ch---
  20356.  01h    WORD    number of 16K pages by which to increase/reduce cache size
  20357. ---function 0Dh---
  20358.  01h    DWORD    new address to which to chain on INT 13
  20359. Note:    the previous address is not preserved
  20360. ----------214403-----------------------------
  20361. INT 21 - CD-ROM device driver - IOCTL OUTPUT
  20362.     AX = 4403h
  20363.     BX = file handle referencing character device for CD-ROM driver
  20364.     CX = number of bytes to write
  20365.     DS:DX -> control block (see below)
  20366. Return: CF clear if successful
  20367.         AX = number of bytes actually written
  20368.     CF set on error
  20369.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20370. SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h
  20371.  
  20372. Format of control block:
  20373. Offset    Size    Description
  20374.  00h    BYTE    function code
  20375.         00h eject disk
  20376.         01h lock/unlock door
  20377.         02h reset drive
  20378.         03h control audio channel
  20379.         04h write device control string
  20380.         05h close tray
  20381. ---functions 00h,02h,05h---
  20382.  no further fields
  20383. ---function 01h---
  20384.  01h    BYTE    lock function
  20385.         00h unlock door
  20386.         01h lock door
  20387. ---function 03h---
  20388.  01h    BYTE    input channel (0-3) for output channel 0
  20389.  02h    BYTE    volume for output channel 0
  20390.  03h    BYTE    input channel (0-3) for output channel 1
  20391.  04h    BYTE    volume for output channel 1
  20392.  05h    BYTE    input channel (0-3) for output channel 2
  20393.  06h    BYTE    volume for output channel 2
  20394.  07h    BYTE    input channel (0-3) for output channel 3
  20395.  08h    BYTE    volume for output channel 3
  20396. Note:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  20397.       right prime; a volume of 00h is off
  20398. ---function 04h---
  20399.  01h  N BYTEs    bytes to send directly to the CD-ROM drive without
  20400.         interpretation
  20401. ----------214403-----------------------------
  20402. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  20403.     AX = 4403h
  20404.     BX = handle for device "SCSITAPE"
  20405.     CX = number of bytes to write
  20406.     DS:DX -> SCSITAPE control block (see below)
  20407. Return: CF clear if successful
  20408.         AX = number of bytes actually written
  20409.     CF set on error
  20410.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20411. SeeAlso: AX=4405h"ST-01",INT 78/AH=10h
  20412.  
  20413. Format of SCSITAPE control block:
  20414. Offset    Size    Description
  20415.  00h    WORD    command type
  20416.         'F' Format (argument 1 = interleave, argument 2 = format type)
  20417.         'E' Erase
  20418.         'R' Rewind
  20419.         'L' Load
  20420.         'N' No Load
  20421.         'S' Space (argument 1 = count, argument 2 = type)
  20422.         'M' File Mark (argument 1 = count)
  20423.         'A' Reassign 
  20424.  02h    WORD    argument 1
  20425.  04h    WORD    argument 2
  20426.  06h    WORD    segment of command buffer
  20427.  08h    WORD    offset of command buffer
  20428.  0Ah    WORD    length of command buffer
  20429. ----------214403-----------------------------
  20430. INT 21 U - AI Architects - OS/x86??? - API
  20431.     AX = 4403h
  20432.     BX = handle for device "AIA_OS"
  20433.     CX = number of bytes to write (ignored)
  20434.     DS:DX -> 12-byte buffer, first byte is command:
  20435.             81h installation check
  20436.             82h get API entry point
  20437.             84h uninstall
  20438. Return: CF clear if successful
  20439.         AX = number of bytes actually written
  20440.     CF set on error
  20441.         AX = error code (01h,05h,06h,0Ch,0Dh) (see AH=59h)
  20442. Notes:    these functions are only available if the DOS extender was loaded as a
  20443.       device driver in CONFIG.SYS
  20444.     called by TKERNEL (a licensed version of AI Architects/Ergo OS/x86)
  20445. SeeAlso: INT 2F/AX=FBA1h/BX=0081h,INT 2F/AX=FBA1h/BX=0082h
  20446.  
  20447. Format of buffer on return:
  20448. Offset    Size    Description
  20449.  00h  4 BYTEs    signature "IABH"
  20450. ---if func 81h---
  20451.  (no additional fields)
  20452. ---if func 82h---
  20453.  04h    DWORD    pointer to API entry point (see INT 2F/AX=FBA1h/BX=0082h)
  20454. ---if func 84h---
  20455.  04h    WORD    success indicator
  20456.  06h    WORD    segment of ???
  20457.  08h    WORD    segment of ??? memory block to free if nonzero
  20458.  0Ah    WORD    segment of ??? memory block to free if nonzero
  20459. ----------214403-----------------------------
  20460. INT 21 U - Qualitas 386MAX v6.01 - SET STATE
  20461.     AX = 4403h
  20462.     BX = handle for device "386MAX$$"
  20463.     CX = number of bytes to copy (up to 5Ah)
  20464.     DS:DX -> 386MAX state buffer (see AX=4402h"386MAX")
  20465. Return: CF clear if successful
  20466.         AX = number of bytes actually written
  20467.     CF set on error
  20468.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20469. Note:    the first byte of the buffer must be either 01h, 02h, or 03h
  20470.       (specifying the version of the state record) and the buffer must
  20471.       contain CX bytes AFTER the initial byte
  20472. SeeAlso: AX=4402h"386MAX"
  20473. ----------214403-----------------------------
  20474. INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION???
  20475.     AX = 4403h
  20476.     BX = file handle for device "PGS1600$"
  20477.     CX = 0018h (size of buffer)
  20478.     DS:DX -> configuration buffer (see AX=4402h"PGS1600")
  20479. Return: CF clear if successful
  20480.         AX = number of bytes actually written
  20481.     CF set on error
  20482.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20483. Note:    PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  20484.       display adapter, which provides a 1600x1200 monochrome display as
  20485.       well as one of two emulations, MDA or CGA.
  20486. SeeAlso: AX=4402h"PGS1600"
  20487. ----------214403-----------------------------
  20488. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  20489.     AX = 4403h
  20490.     BX = file handle referencing device "$IPCUST"
  20491.     CX, DS:DX ignored
  20492. Return: CF clear if successful
  20493.         AX destroyed
  20494.     CF set on error
  20495.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20496. Note:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  20497.       version 2.05.     If less than the entire data is read or written,
  20498.       the next read/write continues where the previous one ended; this
  20499.       call and AX=4402h both reset the location at which the next
  20500.       operation starts to zero
  20501. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4402h"IPCUST"
  20502. ----------214404-----------------------------
  20503. INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL
  20504.     AX = 4404h
  20505.     BL = drive number (00h = default, 01h = A:, etc.)
  20506.     CX = number of bytes to read
  20507.     DS:DX -> buffer
  20508. Return: CF clear if successful
  20509.         AX = number of bytes actually read
  20510.     CF set on error
  20511.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20512. Note:    format of data is driver-specific
  20513. SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh
  20514. ----------214404CX0004-----------------------
  20515. INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER
  20516.     AX = 4404h
  20517.     CX = 0004h
  20518.     BL = drive number (00h = default, 01h = A:, etc.)
  20519.     DS:DX -> DWORD buffer to receive device driver address
  20520. Note:    In addition to returning the address of the Stacker device driver,
  20521.       this call also sets the volume number at offset 3Eh in the device
  20522.       driver (see INT 25/AX=CDCDh)
  20523. SeeAlso: INT 25/AX=CDCDh
  20524. ----------214404-----------------------------
  20525. INT 21 - Stacker - GET STACVOL FILE SECTORS
  20526.     AX = 4404h
  20527.     BL = drive number (0 is current drive)
  20528.     CX = byte count (i.e., 200h = 1 sector)
  20529.     DS:DX -> buffer (see below)
  20530. Return:    Data Buffer contains the number of sectors requested from the
  20531.       STACVOL physical file for the drive specified.
  20532.  
  20533. Format of stacker buffer:
  20534. Offset    Size    Description
  20535.  00h    WORD    01CDh
  20536.  02h    WORD    sector count
  20537.  04h    DWORD    number of starting sector
  20538.  08h    DWORD    far pointer to Data Buffer
  20539. ----------214404-----------------------------
  20540. INT 21 - DUBLDISK.SYS v2.6 - GET INFO
  20541.     AX = 4404h
  20542.     BL = drive number of DoubleDisk drive (00h = default, 01h = A:, etc.)
  20543.     CX = number of bytes (000Ah-0014h, call ignored otherwise)
  20544.     DS:DX -> data record (see below)
  20545. Return: CF clear if successful
  20546.         AX = number of bytes read
  20547.     CF set on error
  20548.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20549. Program: DUBLDISK.SYS is the device driver portion of DoubleDisk, a disk
  20550.       expander by Vertisoft Systems, Inc.
  20551. Note:    the installation check consists of scanning memory for the signature
  20552.       "FAT 2.6  byte:", which is immediately followed by a data table
  20553. SeeAlso: AX=440Dh
  20554.  
  20555. Format of data record:
  20556. Offset    Size    Description
  20557.  00h    WORD    (call) signature 4444h
  20558.  02h    BYTE    (call) function
  20559.             00h ???
  20560.             01h ???
  20561. ---function 00h---
  20562.  02h    BYTE    (return) ???
  20563.  03h    BYTE    (return) ???
  20564. ---function 01h---
  20565.  02h    WORD    (return) 4444h
  20566.  04h    WORD    allocation unit size???
  20567.  06h    WORD    ???
  20568.  08h    WORD    ???
  20569.  0Ah    BYTE    ???
  20570.  
  20571. Format of signature data table:
  20572. Offset    Size    Description
  20573.  00h  5 BYTEs    ???
  20574.  05h    BYTE    first drive number
  20575.  06h    BYTE    number of drives
  20576.  07h    ???
  20577. ----------214405-----------------------------
  20578. INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL
  20579.     AX = 4405h
  20580.     BL = drive number (00h = default, 01h = A:, etc)
  20581.     CX = number of bytes to write
  20582.     DS:DX -> data to write
  20583. Return: CF clear if successful
  20584.         AX = number of bytes actually written
  20585.     CF set on error
  20586.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20587. Note:    format of data is driver-specific
  20588. SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh
  20589. ----------214405-----------------------------
  20590. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  20591.     AX = 4405h
  20592.     BX = drive number (00h = default, 01h = A:, etc)
  20593.     CX = number of bytes to write
  20594.     DS:DX -> SCSIDISK control block (see AX=4403h"ST-01")
  20595. Return: CF clear if successful
  20596.         AX = number of bytes actually written
  20597.     CF set on error
  20598.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20599. SeeAlso: AX=4403h"ST-01"
  20600. ----------214406-----------------------------
  20601. INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
  20602.     AX = 4406h
  20603.     BX = file handle
  20604. Return: CF clear if successful
  20605.         AL = input status
  20606.         00h not ready (device) or at EOF (file)
  20607.         FFh ready
  20608.     CF set on error
  20609.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20610. Note:    files may not register as being at EOF if positioned there by AH=42h
  20611. SeeAlso: AX=4407h,INT 2F/AX=122Bh
  20612. ----------214407-----------------------------
  20613. INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
  20614.     AX = 4407h
  20615.     BX = file handle
  20616. Return: CF clear if successful
  20617.         AL = input status
  20618.         00h not ready
  20619.         FFh ready
  20620.     CF set on error
  20621.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20622. Note:    for DOS 2+, files are always ready for output, even if the disk is
  20623.       full or no media is in the drive
  20624. SeeAlso: AX=4406h,INT 2F/AX=122Bh
  20625. ----------214408-----------------------------
  20626. INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE
  20627.     AX = 4408h
  20628.     BL = drive number (00h = default, 01h = A:, etc)
  20629. Return: CF clear if successful
  20630.         AX = 0000h if removable
  20631.            = 0001h if fixed
  20632.     CF set on error
  20633.         AX = error code (01h,0Fh) (see AH=59h)
  20634. SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh
  20635. ----------214409-----------------------------
  20636. INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE
  20637.     AX = 4409h
  20638.     BL = drive number (00h = default, 01h = A:, etc)
  20639. Return: CF clear if successful
  20640.         DX = device attribute word
  20641.         bit 15: drive is SUBSTituted
  20642.         bit 12: drive is remote
  20643.         bit  9: direct I/O not allowed
  20644.     CF set on error
  20645.         AX = error code (01h,0Fh) (see AH=59h)
  20646. Note:    on local drives, DX bits not listed above are the attribute word from
  20647.       the device driver header (see AH=52h); for remote drives, the other
  20648.       bits appear to be undefined
  20649. SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh
  20650. ----------21440A-----------------------------
  20651. INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE
  20652.     AX = 440Ah
  20653.     BX = handle
  20654. Return: CF clear if successful
  20655.         DX = attribute word (as stored in SFT)
  20656.         bit 15: set if remote
  20657.         bit 14: date/time not set on close
  20658.     CF set on error
  20659.         AX = error code (01h,06h) (see AH=59h)
  20660. Note:    if file is remote, Novell Advanced NetWare 2.0 returns the number of
  20661.       the file server on which the handle is located in CX
  20662. SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh
  20663. ----------21440B-----------------------------
  20664. INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT
  20665.     AX = 440Bh
  20666.     CX = pause between retries (default 1)
  20667.     DX = number of retries (default 3)
  20668. Return: CF clear if successful
  20669.     CF set on error
  20670.         AX = error code (01h) (see AH=59h)
  20671. Notes:    delay is dependent on processor speed (value in CX specifies number of
  20672.       64K-iteration empty loops to execute)
  20673.     if DX=0000h on entry, the retry count is left unchanged
  20674. SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh
  20675. ----------21440C-----------------------------
  20676. INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
  20677.     AX = 440Ch
  20678.     BX = device handle
  20679.     CH = category code
  20680.         00h unknown (DOS 3.3+)
  20681.         01h COMn: (DOS 3.3+)
  20682.         03h CON (DOS 3.3+)
  20683.         05h LPTn:
  20684.         9Eh Media Access Control driver (STARLITE)
  20685.         00h-7Fh reserved for Microsoft
  20686.         80h-FFh reserved for OEM/user-defined
  20687.     CL = function
  20688.         00h MAC driver Bind (STARLITE)
  20689.         45h set iteration count
  20690.         4Ah select code page
  20691.         4Ch start code-page preparation
  20692.         4Dh end code-page preparation
  20693.         5Fh set display information (DOS 4.0)
  20694.         65h get iteration count
  20695.         6Ah query selected code page
  20696.         6Bh query prepare list
  20697.         7Fh get display information (DOS 4.0)
  20698.     DS:DX -> (DOS) parameter block (see below)
  20699.     SI = parameter to pass to driver (European MSDOS 4.0, OS/2 comp box)
  20700.     DI = parameter to pass to driver (European MSDOS 4.0, OS/2 comp box)
  20701. Return: CF set on error
  20702.         AX = error code (see AH=59h)
  20703.     CF clear if successful
  20704.         DS:DX -> iteration count if CL=65h
  20705.         SI = returned value (European MSDOS 4.0, OS/2 comp box)
  20706.         DI = returned value (European MSDOS 4.0, OS/2 comp box)
  20707.     DS:DX -> (OS/2 comp box) data block
  20708. Note:    bit assignments for function code in CL:
  20709.         bit 7: set to ignore if unsupported, clear to return error
  20710.         bit 6: set if passed to driver, clear if intercepted by DOS
  20711.         bit 5: set if queries data from device, clear if sends command
  20712.         bits 4-0: subfunction
  20713. SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=1A01h
  20714.  
  20715. Format of parameter block for function 00h:
  20716. Offset    Size    Description
  20717.  00h  8 BYTEs    ASCIZ signature "STARMAC"
  20718.  08h    WORD    version
  20719.  0Ah    WORD    flags
  20720.         bit 0: media requires connect or listen request before use
  20721.         bit 1: network is a LAN (broadcast/multicast supported)
  20722.         bit 2: point-to-point network
  20723.  0Ch    WORD    handle for use with MAC driver's private interface (filled in
  20724.         by MAC driver)
  20725.  0Eh    WORD    context
  20726.  10h    WORD    approximate speed in KB/sec (filled in by MAC driver)
  20727.  12h    WORD    approximate cost in cents per hour (filled in by MAC driver)
  20728.  14h    WORD    maximum packet size in bytes (filled in by MAC driver)
  20729.  16h    WORD    addressing format (filled in by MAC driver)
  20730.         0000h general addressing
  20731.         0001h Ethernet addressing
  20732.         0002h Token Ring addressing
  20733.         0003h Token Bus addressing
  20734.  18h    DWORD    Send entry point (filled in by MAC driver)
  20735.  1Ch    DWORD    RegisterEventHandler entry point (filled in by MAC driver)
  20736.  20h    DWORD    SetPacketFilter entry point (filled in by MAC driver)
  20737.  24h    DWORD    UnBind entry point (filled in by MAC driver)
  20738.  
  20739. Format of parameter block for function 45h:
  20740. Offset    Size    Description
  20741.  00h    WORD    number of times output is attempted before driver assumes
  20742.         device is busy
  20743.  
  20744. Format of parameter block for functions 4Ah and 6Ah:
  20745. Offset    Size    Description
  20746.  00h    WORD    length of data
  20747.  02h    WORD    code page ID
  20748.  04h 2N BYTEs    DCBS (double byte character set) lead byte range
  20749.           start/end for each of N ranges (DOS 4.0)
  20750.     WORD    0000h  end of data (DOS 4.0)
  20751.  
  20752. Format of parameter block for function 4Dh:
  20753. Offset    Size    Description
  20754.  00h    WORD    length of data
  20755.  02h    WORD    code page ID
  20756.  
  20757. Format of parameter block for function 4Ch:
  20758. Offset    Size    Description
  20759.  00h    WORD    flags
  20760.         DISPLAY.SYS = 0000h
  20761.         PRINTER.SYS bit 0 clear to prepare downloaded font, set to
  20762.             prepare cartridge selection
  20763.  02h    WORD    length of remainder of parameter block
  20764.  04h    WORD    number of code pages following
  20765.  06h  N WORDs    code page 1,...,N
  20766.  
  20767. Format of parameter block for functions 5Fh and 7Fh:
  20768. Offset    Size    Description
  20769.  00h    BYTE    level (0 for DOS 4.x and 5.0)
  20770.  01h    BYTE    reserved (0)
  20771.  02h    WORD    length of following data (14)
  20772.  04h    WORD    control flags
  20773.           bit 0 set for blink, clear for intensity
  20774.           bits 1 to 15 reserved
  20775.  06h    BYTE    mode type (1=text, 2=graphics)
  20776.  07h    BYTE    reserved (0)
  20777.  08h    WORD    colors
  20778.            0 = monochrome
  20779.            else N bits per pixel
  20780.  0Ah    WORD    pixel columns
  20781.  0Ch    WORD    pixel rows
  20782.  0Eh    WORD    character columns
  20783.  10h    WORD    character rows
  20784.  
  20785. Format of parameter block for function 6Bh:
  20786. Offset    Size    Description
  20787.  00h    WORD    length of following data
  20788.  02h    WORD    number of hardware code pages
  20789.  04h  N WORDs    hardware code pages 1,...,N
  20790.     WORD    number of prepared code pages
  20791.       N WORDs    prepared code pages 1,...,N
  20792. ----------21440C-----------------------------
  20793. INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE
  20794.     AX = 440Ch
  20795.     BX = device handle
  20796.     CH = category code
  20797.         07h tape (ASPITAPE.SYS)
  20798.     CL = function
  20799.         01h "mtop" - perform tape operation
  20800.         02h "mtget" - get tape status
  20801.         03h ignore end-of-tape errors
  20802.         04h enable end-of-tape errors
  20803.     DS:DX -> parameter block (see below)
  20804. Return: CF set on error
  20805.         AX = error code (see AH=59h)
  20806.     CF clear if successful
  20807.         DS:DX -> data block
  20808. Notes:    This device driver is a simple DOS interface to the Adaptec Advanced
  20809.       SCSI Programming Interface (ASPI).  It provides the following device
  20810.       names as access to the SCSI tape, 'RMTx' (rewind on close) and
  20811.       'NRMTx' (NO rewind on close) where x can go from 0 to 3.  There may
  20812.       also be the following names 'MTx' and 'NMTx' which default to 1024
  20813.       byte blocks.    The names may also have a '$' appended to try and make
  20814.       them unique from file names of 'RMT0' etc.
  20815.     once opend these devices must be put into RAW mode
  20816. SeeAlso: AX=4402h"ASPI"
  20817.  
  20818. Format of mtop parameter block:
  20819. Offset    Size    Description
  20820.  00h    WORD    operation code
  20821.         00h "MTWEOF" - write an end-of-file record
  20822.         01h "MTFSF" - forward space file
  20823.         02h "MTBSF" - backward space file
  20824.         03h "MTFSR" - forward space record
  20825.         04h "MTBSR" - backward space record
  20826.         05h "MTREW" - rewind
  20827.         06h "MTOFFL" - rewind and unload
  20828.         07h "MTNOP" - perform TEST UNIT READY
  20829.  02h    DWORD    repetition count
  20830.  
  20831. Format of mtget parameter block:
  20832. Offset    Size    Description
  20833.  00h    BYTE    ASPI host ID
  20834.  01h    BYTE    SCSI target ID
  20835.  02h    BYTE    SCSI logical unit number
  20836.  03h    BYTE    device parameters
  20837.         bit 0: drive must use fixed-block read and write
  20838.         bit 7: drive is an ASPI device
  20839.  04h    BYTE    current device state
  20840.         bit 0: device currently opened in buffered mode
  20841.         bit 1: drive currently opened in nonbuffered mode
  20842.         bit 2: rewind drive on last close
  20843.         bit 3: drive has been written on
  20844.         bit 4: drive has been read from
  20845.         bit 5: next read will return 0 bytes
  20846.         bit 6: EOM will resemble EOF
  20847.         bit 7: drive may be busy rewinding
  20848.  05h    BYTE    unit number within driver
  20849.  06h    WORD    fixed block blocksize
  20850.  08h    BYTE    last SCSI status
  20851.  09h    BYTE    last SCSI sense key
  20852.  0Ah    WORD    last SCSI opcode (packed)
  20853.         bits 0-7: SCSI operation (SCSI packet byte 0)
  20854.         bits 8-10: SCSI flags (SCSI packet byte 1)
  20855.         bits 11-12: ASPI "Direction Bits" (ASPI SRB byte 3)
  20856.  0Ch    WORD    residual bytes from SCSI opcode
  20857. ----------21440D-----------------------------
  20858. INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
  20859.     AX = 440Dh
  20860.     BL = drive number (00h=default,01h=A:,etc)
  20861.     CH = category code
  20862.         08h disk drive
  20863.         00h-7Fh reserved for Microsoft
  20864.         80h-FFh reserved for OEM/user-defined
  20865.     CL = function
  20866.         40h set device parameters
  20867.         41h write logical device track
  20868.         42h format and verify logical device track
  20869.         46h (DOS 4+) set volume serial number (see also AH=69h)
  20870.         47h (DOS 4+) set access flag
  20871.         60h get device parameters
  20872.         61h read logical device track
  20873.         62h verify logical device track
  20874.         66h (DOS 4+) get volume serial number (see also AH=69h)
  20875.         67h (DOS 4+) get access flag
  20876.         68h (DOS 5+) sense media type
  20877.     DS:DX -> (DOS) parameter block (see below)
  20878.     SI:DI -> (OS/2 comp box) parameter block (see below)
  20879. Return: CF set on error
  20880.         AX = error code (01h,02h) (see AH=59h)
  20881.     CF clear if successful
  20882.         DS:DX -> data block if CL=60h or CL=61h
  20883. Notes:    DOS 4.01 seems to ignore the high byte of the number of directory
  20884.       entries in the BPB for diskettes.
  20885.     functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5.0
  20886.     the DUBLDISK.SYS v2.6 driver only supports minor codes 60h and 67h
  20887. SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh
  20888.  
  20889. Format of parameter block for functions 40h, 60h:
  20890. Offset    Size    Description
  20891.  00h    BYTE    special functions
  20892.         bit 0 set if function to use current BPB, clear if Device
  20893.             BIOS Parameter Block field contains new default BPB
  20894.         bit 1 set if function to use track layout fields only
  20895.             must be clear if CL=60h
  20896.         bit 2 set if all sectors in track same size (should be set)
  20897.         bits 3-7 reserved
  20898.  01h    BYTE    device type
  20899.         00h  320K/360K disk
  20900.         01h  1.2M disk
  20901.         02h  720K disk
  20902.         03h  single-density 8-inch disk
  20903.         04h  double-density 8-inch disk
  20904.         05h  fixed disk
  20905.         06h  tape drive
  20906.         07h  (DOS 3.3+) 1.44M floppy
  20907.         08h  read/write optical disk
  20908.         09h  (DOS 5.0) 2.88M floppy
  20909.         0Ah  other type of block device
  20910.  02h    WORD    device attributes
  20911.         bit 0 set if nonremovable medium
  20912.         bit 1 set if door lock ("changeline") supported
  20913.         bits 2-15 reserved
  20914.  04h    WORD    number of cylinders
  20915.  06h    BYTE    media type
  20916.         for 1.2M drive
  20917.             00h 1.2M disk (default)
  20918.             01h 320K/360K disk
  20919.         F8h for DUBLDISK.SYS v2.6 expanded drives
  20920.         always 00h for other drive types
  20921.  07h 31 BYTEs    device BPB (see AH=53h), bytes after BPB offset 1Eh omitted
  20922.  26h    WORD    number of sectors per track (start of track layout field)
  20923.         not used by function 60h
  20924.  28h  N word pairs: number,size of each sector in track
  20925.  
  20926. Format of parameter block for functions 41h, 61h:
  20927. Offset    Size    Description
  20928.  00h    BYTE    special functions (reserved, must be zero)
  20929.  01h    WORD    number of disk head
  20930.  03h    WORD    number of disk cylinder
  20931.  05h    WORD    number of first sector to read/write
  20932.  07h    WORD    number of sectors
  20933.  09h    DWORD    transfer address
  20934.  
  20935. Format of parameter block for functions 42h, 62h:
  20936. Offset    Size    Description
  20937.  00h    BYTE    reserved, must be zero (DOS <3.2)
  20938.           bit 0=0: format/verify track
  20939.             1: format status call (DOS 3.2+)
  20940.           bits 1-7 reserved, must be zero
  20941.         on return (DOS 4.x):
  20942.           bit 0: set if specified tracks, sectors/track supported
  20943.           bit 1: set if function not supported by BIOS
  20944.           bit 2: set if specified tracks, sectors/track not supported
  20945.           bit 3: set if no disk in drive
  20946.  01h    WORD    number of disk head
  20947.  03h    WORD    number of disk cylinder
  20948.  
  20949. Format of parameter block for functions 46h, 66h:
  20950. Offset    Size    Description
  20951.  00h    WORD    (call) info level (should be 0000h)  !!!
  20952.  02h    DWORD    disk serial number (binary)
  20953.  06h 11 BYTEs    volume label or "NO NAME    "
  20954.  11h  8 BYTEs    filesystem type "FAT12     " or "FAT16   " (CL=66h only)
  20955.  
  20956. Format of parameter block for functions 47h, 67h:
  20957. Offset    Size    Description
  20958.  00h    BYTE    special-function field (must be zero)
  20959.  01h    BYTE    disk-access flag, nonzero if access allowed by driver
  20960.  
  20961. Format of parameter block for function 68h:
  20962. Offset    Size    Description
  20963.  00h    BYTE    01h for default media type, 00h for any other media type
  20964.  01h    BYTE    02h for 720K, 07h for 1.44M, 09h for 2.88M
  20965. ----------21440E-----------------------------
  20966. INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
  20967.     AX = 440Eh
  20968.     BL = drive number (00h=default,01h=A:,etc)
  20969. Return: CF set on error
  20970.         AX = error code (01h,0Fh) (see AH=59h)
  20971.     CF clear if successful
  20972.         AL = 00h block device has only one logical drive assigned
  20973.          1..26 the last letter used to reference the drive (1=A:,etc)
  20974. SeeAlso: AX=440Fh,INT 2F/AX=122Bh
  20975. ----------21440F-----------------------------
  20976. INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
  20977.     AX = 440Fh
  20978.     BL = physical drive number (00h=default,01h=A:,etc))
  20979. Return: CF set on error
  20980.         AX = error code (01h,0Fh) (see AH=59h)
  20981.     CF clear if successful
  20982.         drive now responds to next logical drive number
  20983. Note:    maps logical drives to physical drives, similar to DOS's treatment of
  20984.       a single physical floppy drive as both A: and B:
  20985. SeeAlso: AX=440Eh,INT 2F/AX=122Bh
  20986. ----------214410-----------------------------
  20987. INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE)
  20988.     AX = 4410h
  20989.     BX = handle for device
  20990.     CH = category code (see AX=440Ch)
  20991.     CL = function code
  20992. Return: CF clear if successful
  20993.         AX = 0000h    specified IOCTL function is supported
  20994.     CF set on error
  20995.         AL = 01h    IOCTL capability not available
  20996. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  20997.       standard DOS 3.2 set may use this call first to see whether a
  20998.       particular call is supported
  20999. SeeAlso: AX=440Ch,AX=440Dh,AX=4411h
  21000. ----------214410BXFFFF-----------------------
  21001. INT 21 U - NewSpace - ENABLE DRIVER
  21002.     AX = 4410h
  21003.     BX = FFFFh
  21004. Notes:    NewSpace is a TSR by Isogon Corporation which automatically compresses
  21005.       all files as they are written and decompresses them as they are read
  21006.     compressed files are not accessible unless the driver is enabled
  21007. SeeAlso: AX=4411h/BX=FFFFh
  21008. ----------214411-----------------------------
  21009. INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE)
  21010.     AX = 4411h
  21011.     BL = drive number
  21012.     CH = category code (see AX=440Dh)
  21013.     CL = function code
  21014. Return: CF clear if successful
  21015.         AX = 0000h    specified IOCTL function is supported
  21016.     CF set on error
  21017.         AL = 01h    IOCTL capability not available
  21018. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  21019.       standard DOS 3.2 set may use this call first to see whether a
  21020.       particular call is supported
  21021. SeeAlso: AX=440Ch,AX=440Dh,AX=4410h
  21022. ----------214411BXFFFF-----------------------
  21023. INT 21 U - NewSpace - DISABLE DRIVER
  21024.     AX = 4411h
  21025.     BX = FFFFh
  21026. Notes:    NewSpace is a TSR by Isogon Corporation which automatically compresses
  21027.       all files as they are written and decompresses them as they are read
  21028.     compressed files are not accessible unless the driver is enabled
  21029. SeeAlso: AX=4410h/BX=FFFFh
  21030. ----------214412-----------------------------
  21031. INT 21 - DR-DOS 5+ - DETERMINE DOS TYPE
  21032.     AX = 4412h
  21033.     CF set
  21034. Return: CF set if not DR-DOS
  21035.         AX = error code (see AH=59h)
  21036.     CF clear if DR-DOS
  21037.         DX = AX = version code
  21038.         1060h = ???
  21039.         1063h = DR-DOS 3.41 ???
  21040.         1065h = DR-DOS 5.0
  21041.         1067h = DR-DOS 6.0
  21042. Note:    this call is identical to AX=4452h
  21043. SeeAlso: AX=4452h
  21044. ----------214412BXFFFF-----------------------
  21045. INT 21 U - NewSpace - INSTALLATION CHECK???
  21046.     AX = 4412h
  21047.     BX = FFFFh
  21048. Return: AX = PSP segment of NewRes (resident driver for NewSpace)
  21049.     BX:DX -> ???
  21050.     CX = ???
  21051. SeeAlso: AX=4411h/BX=FFFFh
  21052. ----------214413BXFFFF-----------------------
  21053. INT 21 U - NewSpace - GET ???
  21054.     AX = 4413h
  21055.     BX = FFFFh
  21056. Return: AX = code segment of NewRes (resident driver for NewSpace)
  21057.     BX = offset of ???
  21058. SeeAlso: AX=4412h/BX=FFFFh
  21059. ----------214414-----------------------------
  21060. INT 21 U - DR-DOS 5.0 - SET GLOBAL PASSWORD
  21061.     AX = 4414h
  21062.     DS:DX -> password string (blank-padded to 8 characters)
  21063. Desc:    Specify the master password for accessing files.
  21064. Note:    this call is identical to AX=4454h
  21065. SeeAlso: AX=4454h
  21066. ----------214414BXFFFF-----------------------
  21067. INT 21 U - NewSpace - DEBUGGING DUMP
  21068.     AX = 4414h
  21069.     BX = FFFFh
  21070. Return:    debugging dump written to X:\NEWSPACE.SMP
  21071. SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh
  21072. ----------2144-------------------------------
  21073. INT 21 U - DR-DOS 5.0 - HISTORY BUFFER, SHARE, AND HILOAD CONTROL
  21074.     AH = 44h
  21075.     AL = 16h to 18h
  21076. Note:    these subfunctions are identical to AX=4456h to 4458h
  21077. SeeAlso: AX=4456h,AX=4457h,AX=4458h
  21078. ----------214451-----------------------------
  21079. INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
  21080.     AX = 4451h
  21081. Return: CF set if not Concurrent DOS
  21082.         AX = error code (see AH=59h)
  21083.     CF clear if successful
  21084.         AH = single-tasking/multitasking nature
  21085.         10h single-tasking
  21086.             AL = operating system version ID (see AX=4452h)
  21087.         14h multitasking
  21088.             AL = operating system version ID
  21089.             32h Concurrent PC DOS 3.2
  21090.             41h Concurrent DOS 4.1
  21091.             50h Concurrent DOS/XM 5.0 or Concurrent DOS/386 1.1
  21092.             60h Concurrent DOS/XM 6.0 or Concurrent DOS/386 2.0
  21093.             62h Concurrent DOS/XM 6.2 or Concurrent DOS/386 3.0
  21094.             66h DR Multiuser DOS 5.1
  21095. Notes:    as of Concurrent DOS/XM 5.0 (possibly earlier), the version is stored
  21096.       in the environment variable VER
  21097.     use this function if you are looking for multitasking capabilities,
  21098.       AX=4452h for single-tasking
  21099.     this function should never return the single-tasking values
  21100. SeeAlso: AX=4452h,AX=4459h
  21101. ----------214452-----------------------------
  21102. INT 21 - DR-DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION
  21103.     AX = 4452h
  21104.     CF set
  21105. Return: CF set if not DR-DOS
  21106.         AX = error code (see AH=59h)
  21107.     CF clear if DR-DOS
  21108.         DX = AX = version code
  21109.         AH = single-tasking/multitasking
  21110.         10h single-tasking
  21111.             AL = operating system version ID
  21112.             60h DOS Plus
  21113.             63h DR-DOS 3.41
  21114.             64h DR-DOS 3.42
  21115.             65h DR-DOS 5.00
  21116.             67h DR-DOS 6.00
  21117.         14h multitasking
  21118.             AL = operating system version ID (see AX=4451h)
  21119. Notes:    the DR-DOS version is stored in the environment variable VER
  21120.     use this function if looking for single-tasking capabilities, AX=4451h
  21121.       if looking for multitasking; this call should never return multi-
  21122.       tasking values
  21123. SeeAlso: AX=4412h,AX=4451h,AX=4459h
  21124. ----------214454-----------------------------
  21125. INT 21 U - DR-DOS 3.41+ - SET GLOBAL PASSWORD
  21126.     AX = 4454h
  21127.     DS:DX -> password string (blank-padded to 8 characters)
  21128. Desc:    Specify the master password for accessing files.
  21129. SeeAlso: AX=4303h,AX=4414h
  21130. ----------214456-----------------------------
  21131. INT 21 U - DR-DOS 5.0+ - HISTORY BUFFER CONTROL
  21132.     AX = 4456h
  21133.     DL = flag
  21134.         bit 0: 1 = command history buffers
  21135.            0 = set to application
  21136. Return: AL = ??? (20h if DL bit 0 set, A0h if clear (DR-DOS 6.0))
  21137. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0
  21138. ----------214457-----------------------------
  21139. INT 21 U - DR-DOS 5.0+ - SHARE/HILOAD CONTROL
  21140.     AX = 4457h
  21141.     DH = subfunction
  21142.         00h enable/disable SHARE
  21143.         DL = 00h disable
  21144.            = 01h enable
  21145.            else Return: AX = ???
  21146.         01h get HILOAD status
  21147.         Return: AX = status
  21148.                 0000h off
  21149.                 0001h on
  21150.         02h set HILOAD status
  21151.         DL = new state (00h off, 01h on)
  21152.         Return: AX = ???
  21153.         other
  21154.         Return: AX = ???
  21155. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0
  21156. SeeAlso: AX=4457h/DX=FFFFh
  21157. ----------214457DXFFFF-----------------------
  21158. INT 21 U - DR-DOS 6.0 - GET SHARE STATUS
  21159.     AX = 4457h
  21160.     DX = FFFFh
  21161. Return: AX = SHARE status
  21162. SeeAlso: INT 2F/AX=1000h
  21163. ----------214458-----------------------------
  21164. INT 21 U - DR-DOS 5.0+ internal - GET POINTER TO TABLE OF ???
  21165.     AX = 4458h
  21166. Return: ES:BX -> internal table (see below)
  21167.     AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0)
  21168. SeeAlso: AX=4452h
  21169.  
  21170. Format of internal table:
  21171. Offset    Size    Description
  21172.  00h    DWORD    pointer to ???
  21173.  04h  7 BYTEs    ???
  21174.  0Bh    WORD    K of extended memory at startup
  21175.  0Dh    BYTE    number of far jump entry points
  21176.  0Eh    WORD    segment containing far jumps to DR-DOS entry points (see below)
  21177. ---DR-DOS 6.0---
  21178.  10h    WORD    (only if kernel loaded in HMA) offset in HMA of first free HMA
  21179.         memory block (see below) or 0000h if none; segment is FFFFh
  21180.  12h    WORD    pointer to segment of environment variables set in CONFIG,
  21181.         or 0000h if already used
  21182.  14h    WORD    (only if kernel loaded in HMA) offset in HMA of first used HMA
  21183.         memory block (see below) or 0000h if none; segment is FFFFh
  21184. Note:    the segment used for the DR-DOS 6.0 CONFIG environment variables
  21185.       (excluding COMSPEC, VER and OS) is only useful for programs/drivers
  21186.       called from CONFIG.SYS. The word is set to zero later and the area
  21187.       lost.
  21188.  
  21189. Format of jump table for DR-DOS 5.0-6.0:
  21190. Offset    Size    Description
  21191.  00h  5 BYTEs    far jump to entry point corresponding to CP/M CALL 5
  21192.  05h  5 BYTEs    far jump to entry point corresponding to INT 20
  21193.  0Ah  5 BYTEs    far jump to entry point corresponding to INT 21
  21194.  0Fh  5 BYTEs    far jump to entry point corresponding to ???
  21195.  14h  5 BYTEs    far jump to entry point corresponding to ???
  21196.  19h  5 BYTEs    far jump to entry point corresponding to ???
  21197.  1Eh  5 BYTEs    far jump to entry point corresponding to ???
  21198.  23h  5 BYTEs    far jump to entry point corresponding to ???
  21199.  28h  5 BYTEs    far jump to entry point corresponding to ???
  21200.  2Dh  5 BYTEs    far jump to entry point corresponding to ???
  21201.  32h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  21202.  37h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  21203.  3Ch  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  21204.  41h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  21205.  46h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  21206.  4Bh  5 BYTEs    far jump to entry point corresponding to ???
  21207.  
  21208. Format of HMA Memory Block (DR-DOS 6.0 kernel loaded in HMA):
  21209. Offset    Size    Description
  21210.  00h    WORD    offset of next HMA Memory Block (0000h if last block)
  21211.  02h    WORD    size of this block in bytes (at least 10h)
  21212.  04h    BYTE    type of HMA Memory Block (interpreted by MEM)
  21213.         00h system
  21214.         01h KEYB
  21215.         02h NLSFUNC
  21216.         03h SHARE
  21217.         04h TaskMAX
  21218.         05h COMMAND
  21219.  05h    var    TSR (or system) code and data. DR-DOS TSR's, such as KEYB,
  21220.         hooks interrupts using segment FFFEh instead FFFFh.
  21221. ----------214459-----------------------------
  21222. INT 21 - DR MultiUser DOS 5.0 - API
  21223.     AX = 4459h
  21224.     CL = function (see INT E0"CP/M")
  21225.     DS,DX = parameters
  21226. Notes:    DR-DOS 5.0 returns CF set and AX=0001h
  21227.     this API is also available on INT E0
  21228. SeeAlso: AX=4452h,INT E0"CP/M"
  21229. ----------2144FFBXFFFF-----------------------
  21230. INT 21 U - NewSpace - ???
  21231.     AX = 44FFh
  21232.     BX = FFFFh
  21233.     DX = ???
  21234. Note:    NewSpace is a TSR by Isogon Corporation which automatically compresses
  21235.       all files as they are written and decompresses them as they are read
  21236. SeeAlso: AX=4414h/BX=FFFFh
  21237. ----------2145-------------------------------
  21238. INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE
  21239.     AH = 45h
  21240.     BX = file handle
  21241. Return: CF clear if successful
  21242.         AX = new handle
  21243.     CF set on error
  21244.         AX = error code (04h,06h) (see AH=59h)
  21245. Notes:    moving file pointer for either handle will also move it for the other,
  21246.       because both will refer to the same system file table
  21247.     for DOS versions prior to 3.3, file writes may be forced to disk by
  21248.       duplicating the file handle and closing the duplicate
  21249. SeeAlso: AH=3Dh,AH=46h
  21250. ----------2146-------------------------------
  21251. INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE
  21252.     AH = 46h
  21253.     BX = file handle
  21254.     CX = file handle to become duplicate of first handle
  21255. Return: CF clear if successful
  21256.     CF set on error
  21257.         AX = error code (04h,06h) (see AH=59h)
  21258. Notes:    closes file with handle CX if it is still open
  21259.     DOS 3.30 hangs if BX=CX on entry
  21260.     moving file pointer for either handle will also move it for the other,
  21261.       because both will refer to the same system file table
  21262. SeeAlso: AH=3Dh,AH=45h
  21263. ----------2147-------------------------------
  21264. INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
  21265.     AH = 47h
  21266.     DL = drive number (00h = default, 01h = A:, etc)
  21267.     DS:SI -> 64-byte buffer for ASCIZ pathname
  21268. Return: CF clear if successful
  21269.         AX = 0100h (undocumented)
  21270.     CF set on error
  21271.         AX = error code (0Fh) (see AH=59h)
  21272. Notes:    the returned path does not include a drive or the initial backslash
  21273.     many Microsoft products for Windows rely on AX being 0100h on success
  21274.     under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
  21275. SeeAlso: AH=19h,AH=3Bh,INT 15/AX=DE25h
  21276. ----------2148-------------------------------
  21277. INT 21 - DOS 2+ - ALLOCATE MEMORY
  21278.     AH = 48h
  21279.     BX = number of paragraphs to allocate
  21280. Return: CF clear if successful
  21281.         AX = segment of allocated block
  21282.     CF set on error
  21283.         AX = error code (07h,08h) (see AH=59h)
  21284.         BX = size of largest available block
  21285. Notes:    DOS 2.1-5.0 coalesces free blocks while scanning for a block to
  21286.       allocate
  21287.     .COM programs are initially allocated the largest available memory
  21288.       block, and should free some memory with AH=49h before attempting any
  21289.       allocations
  21290.     under the FlashTek X-32 DOS extender, EBX contains a protected-mode
  21291.       near pointer to the allocated block on a successful return
  21292. SeeAlso: AH=49h,AH=4Ah,AH=58h,AH=83h
  21293. ----------2149-------------------------------
  21294. INT 21 - DOS 2+ - FREE MEMORY
  21295.     AH = 49h
  21296.     ES = segment of block to free
  21297. Return: CF clear if successful
  21298.     CF set on error
  21299.         AX = error code (07h,09h) (see AH=59h)
  21300. Notes:    apparently never returns an error 07h, despite official docs; DOS 3.30
  21301.       code contains only an error 09h exit
  21302.     DOS 2.1-5.0 does not coalesce adjacent free blocks when a block is
  21303.       freed, only when a block is allocated or resized
  21304. SeeAlso: AH=48h,AH=4Ah
  21305. ----------214A-------------------------------
  21306. INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
  21307.     AH = 4Ah
  21308.     BX = new size in paragraphs
  21309.     ES = segment of block to resize
  21310. Return: CF clear if successful
  21311.     CF set on error
  21312.         AX = error code (07h,08h,09h) (see AH=59h)
  21313.         BX = maximum paragraphs available for specified memory block
  21314. Notes:    under DOS 2.1-5.0, if there is insufficient memory to expand the block
  21315.       as much as requested, the block will be made as large as possible
  21316.     DOS 2.1-5.0 coalesces any free blocks immediately following the block
  21317.       to be resized
  21318. SeeAlso: AH=48h,AH=49h,AH=83h
  21319. ----------214B-------------------------------
  21320. INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
  21321.     AH = 4Bh
  21322.     AL = type of load
  21323.         00h load and execute
  21324.         01h load but do not execute
  21325.         03h load overlay
  21326.         04h load and execute in background (European MSDOS 4.0 only)
  21327.         "Exec & Go" (see also AH=80h)
  21328.     DS:DX -> ASCIZ program name (must include extension)
  21329.     ES:BX -> parameter block (see below)
  21330.     CX = mode (subfunction 04h only)
  21331.         0000h child placed in zombie mode after termination
  21332.         0001h child's return code discarded on termination
  21333. Return: CF clear if successful
  21334.         BX,DX destroyed
  21335.         if subfunction 01h, process ID set to new program's PSP; get with
  21336.         INT 21/AH=62h
  21337.     CF set on error
  21338.         AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see AH=59h)
  21339. Notes:    DOS 2.x destroys all registers, including SS:SP
  21340.     for functions 00h and 01h, the calling process must ensure that there
  21341.       is enough unallocated memory available; if necessary, by releasing
  21342.       memory with AH=49h or AH=4Ah
  21343.     for function 01h, the AX value to be passed to the child program is put
  21344.       on top of the child's stack
  21345.     for function 03h, DOS assumes that the overlay is being loaded into
  21346.       memory allocated by the caller
  21347.     function 01h was undocumented prior to the release of DOS 5.0
  21348.     some versions (such as DR-DOS 6.0) check the parameters and parameter
  21349.       block and return an error if an invalid value (such as an offset of
  21350.       FFFFh) is found
  21351.     background programs under European MSDOS 4.0 must use the new
  21352.       executable format
  21353.     new executables begin running with the following register values
  21354.         AX = environment segment
  21355.         BX = offset of command tail in environment segment
  21356.         CX = size of automatic data segment (0000h = 64K)
  21357.         ES,BP = 0000h
  21358.         DS = automatic data segment
  21359.         SS:SP = initial stack
  21360.       the command tail corresponds to an old executable's PSP:0081h and
  21361.       following, except that the 0Dh is turned into a NUL (00h); new
  21362.       format executables have no PSP
  21363.     under the FlashTek X-32 DOS extender, only function 00h is supported
  21364.       and the pointers are passed in DS:EDX and ES:EBX
  21365. BUGS:    DOS 2.00 assumes that DS points at the current program's PSP
  21366.     Load Overlay (subfunction 03h) loads up to 512 bytes too many if the
  21367.       file contains additional data after the actual overlay
  21368. SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h"OS/2",AH=8Ah,INT 2E
  21369.  
  21370. Format of EXEC parameter block for AL=00h,01h,04h:
  21371. Offset    Size    Description
  21372.  00h    WORD    segment of environment to copy for child process (copy caller's
  21373.         environment if 0000h)
  21374.  02h    DWORD    pointer to command tail to be copied into child's PSP
  21375.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  21376.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  21377.  0Eh    DWORD    (AL=01h) will hold subprogram's initial SS:SP on return
  21378.  12h    DWORD    (AL=01h) will hold entry point (CS:IP) on return
  21379.  
  21380. Format of EXEC parameter block for AL=03h:
  21381. Offset    Size    Description
  21382.  00h    WORD    segment at which to load overlay
  21383.  02h    WORD    relocation factor to apply to overlay if in .EXE format
  21384.  
  21385. Format of EXEC parameter block for FlashTek X-32:
  21386. Offset    Size    Description
  21387.  00h    PWORD    48-bit far pointer to environment string
  21388.  06h    PWORD    48-bit far pointer to command tail string
  21389.  
  21390. Format of .EXE file header:
  21391. Offset    Size    Description
  21392.  00h  2 BYTEs    .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
  21393.  02h    WORD    number of bytes in last 512-byte page of executable
  21394.  04h    WORD    total number of 512-byte pages in executable (includes any
  21395.         partial last page)
  21396.  06h    WORD    number of relocation entries
  21397.  08h    WORD    header size in paragraphs
  21398.  0Ah    WORD    minimum paragraphs of memory to allocation in addition to
  21399.         executable's size
  21400.  0Ch    WORD    maximum paragraphs to allocate in addition to executable's size
  21401.  0Eh    WORD    initial SS relative to start of executable
  21402.  10h    WORD    initial SP
  21403.  12h    WORD    checksum (one's complement of sum of all words in executable)
  21404.  14h    DWORD    initial CS:IP relative to start of executable
  21405.  18h    WORD    offset within header of relocation table (40h for New EXE)
  21406.  1Ah    WORD    overlay number (normally 0000h = main program)
  21407. ---new executable---
  21408.  1Ch  4 BYTEs    ???
  21409.  20h    WORD    behavior bits
  21410.  22h 26    BYTEs    reserved for additional behavior info
  21411.  3Ch    DWORD    offset of new executable header within disk file
  21412. ---Borland TLINK---
  21413.  1Ch  2 BYTEs    ??? (apparently always 01h 00h)
  21414.  1Eh    BYTE    signature FBh
  21415.  1Fh    BYTE    TLINK version (major in high nybble, minor in low nybble)
  21416.  20h  2 BYTEs    ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
  21417. ---ARJ self-extracting archive---
  21418.  1Ch  4 BYTEs    signature "RJSX" (older versions, new signature is "aRJsfX" in
  21419.         the first 1000 bytes of the file)
  21420. ---LZEXE 0.90 compressed executable---
  21421.  1Ch  4 BYTEs    signature "LZ09"
  21422. ---LZEXE 0.91 compressed executable---
  21423.  1Ch  4 BYTEs    signature "LZ91"
  21424. ---PKLITE compressed executable---
  21425.  1Ch    BYTE    minor version number
  21426.  1Dh    BYTE    (low nybble) major version
  21427.         (high nybble) 01h if extra compression
  21428.  1Eh  6 BYTEs    signature "PKLITE" (followed by copyright message)
  21429. ---LHarc 1.x self-extracting archive---
  21430.  1Ch  4 BYTEs    unused???
  21431.  20h  3 BYTEs    jump to start of extraction code
  21432.  23h  2 BYTEs    ???
  21433.  25h 12 BYTEs    signature "LHarc's SFX "
  21434. ---LHA 2.x self-extracting archive---
  21435.  1Ch  8 BYTEs    ???
  21436.  24h 10 BYTEs    signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13)
  21437. ---TopSpeed C 3.0 CRUNCH compressed file---
  21438.  1Ch    DWORD    018A0001h
  21439.  20h    WORD    1565h
  21440. ---PKARCK 3.5 self-extracting archive---
  21441.  1Ch    DWORD    00020001h
  21442.  20h    WORD    0700h
  21443. ---BSA (Soviet archiver) self-extracting archive---
  21444.  1Ch    WORD    000Fh
  21445.  1Eh    BYTE    A7h
  21446. ---LARC self-extracting archive---
  21447.  1Ch  4 BYTEs    ???
  21448.  20h 11 BYTEs    "SFX by LARC "
  21449. ---LH self-extracting archive---
  21450.  1Ch  8 BYTEs    ???
  21451.  24h  8 BYTEs    "LH's SFX "
  21452. ---other linkers---
  21453.  1Ch    var    optional information
  21454. ---
  21455.   N   N DWORDs    relocation items
  21456. Notes:    if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
  21457.       versions of the MS linker set it that way
  21458.     if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
  21459.       program is loaded as high in memory as possible
  21460.     the maximum allocation is set to FFFFh by default
  21461.  
  21462. Format of new executable header:
  21463. Offset    Size    Description
  21464.  00h  2 BYTEs    "NE" (4Eh 45h) signature
  21465.  02h  2 BYTEs    linker version (major, then minor)
  21466.  04h    WORD    offset from start of this header to entry table (see below)
  21467.  06h    WORD    length of entry table in bytes
  21468.  08h    DWORD    file load CRC (0 in Borland's TPW)
  21469.  0Ch    BYTE    program flags
  21470.         bits 0-1 DGROUP type
  21471.           0 = none
  21472.           1 = single shared
  21473.           2 = multiple (unshared)
  21474.           3 = (null)
  21475.         bit 2:    global initialization
  21476.         bit 3:    protected mode only
  21477.         bit 4:    8086 instructions
  21478.         bit 5:    80286 instructions
  21479.         bit 6:    80386 instructions
  21480.         bit 7:    80x87 instructions
  21481.  0Dh    BYTE    application flags
  21482.         bits 0-2: application type
  21483.             001 full screen (not aware of Windows/P.M. API)
  21484.             010 compatible with Windows/P.M. API
  21485.             011 uses Windows/P.M. API
  21486.         bit 3: is a Family Application (OS/2)
  21487.         bit 5: 0=executable, 1=errors in image
  21488.         bit 6: non-conforming program (valid stack is not maintained)
  21489.         bit 7: DLL or driver rather than application
  21490.             (SS:SP info invalid, CS:IP points at FAR init routine 
  21491.              called with AX=module handle which returns AX=0000h
  21492.              on failure, AX nonzero on successful initialization)
  21493.  0Eh    WORD    auto data segment index
  21494.  10h    WORD    initial local heap size
  21495.  12h    WORD    initial stack size (added to data seg, 0000h if SS != DS)
  21496.  14h    DWORD    program entry point (CS:IP), "CS" is index into segment table
  21497.  18h    DWORD    initial stack pointer (SS:SP), "SS" is segment index
  21498.         if SS=automatic data segment and SP=0000h, the stack pointer is
  21499.           set to the top of the automatic data segment, just below the
  21500.           local heap
  21501.  1Ch    WORD    segment count
  21502.  1Eh    WORD    module reference count
  21503.  20h    WORD    length of nonresident names table in bytes
  21504.  22h    WORD    offset from start of this header to segment table (see below)
  21505.  24h    WORD    offset from start of this header to resource table
  21506.  26h    WORD    offset from start of this header to resident names table
  21507.  28h    WORD    offset from start of this header to module reference table
  21508.  2Ah    WORD    offset from start of this header to imported names table
  21509.         (array of counted strings, terminated with a string of length
  21510.          00h)
  21511.  2Ch    DWORD    offset from start of file to nonresident names table
  21512.  30h    WORD    count of moveable entry point listed in entry table
  21513.  32h    WORD    file alignment size shift count
  21514.         0 is equivalent to 9 (default 512-byte pages)
  21515.  34h    WORD    number of resource table entries
  21516.  36h    BYTE    target operating system
  21517.         00h unknown
  21518.         01h OS/2
  21519.         02h Windows
  21520.         03h European MSDOS 4.x
  21521.         04h Windows 386
  21522.         05h BOSS (Borland Operating System Services)
  21523.  37h    BYTE    other EXE flags
  21524.         bit 0: supports long filenames
  21525.         bit 1: 2.X protected mode
  21526.         bit 2: 2.X proportional font
  21527.         bit 3: gangload area
  21528.  38h    WORD    offset to return thunks or start of gangload area
  21529.  3Ah    WORD    offset to segment reference thunks or length of gangload area
  21530.  3Ch    WORD    minimum code swap area size
  21531.  3Eh  2 BYTEs    expected Windows version (minor version first)
  21532.  
  21533. Format of Codeview trailer (at end of executable):
  21534. Offset    Size    Description
  21535.  00h    WORD    signature 4E42h ('NB')
  21536.  02h    WORD    Microsoft debug info version number
  21537.  04h    DWORD    Codeview header offset
  21538.  
  21539. Format of new executable segment table record:
  21540.  00h    WORD    offset in file (shift left by alignment shift to get byte offs)
  21541.  02h    WORD    length of image in file (0000h = 64K)
  21542.  04h    WORD    attributes
  21543.         bit 0: data segment rather than code segment
  21544.         bit 1: unused???
  21545.         bit 2: real mode
  21546.         bit 3: iterated
  21547.         bit 4: movable
  21548.         bit 5: sharable
  21549.         bit 6: preloaded rather than demand-loaded
  21550.         bit 7: execute-only (code) or read-only (data)
  21551.         bit 8: relocations (directly following code for this segment)
  21552.         bit 9: debug info present
  21553.         bits 10,11: 80286 DPL bits
  21554.         bit 12:        discardable
  21555.         bits 13-15: discard priority
  21556.  06h    WORD    number of bytes to allocate for segment (0000h = 64K)
  21557. Note:    the first segment table entry is entry number 1
  21558.  
  21559. Format of new executable entry table item (list):
  21560. Offset    Size    Description
  21561.  00h    BYTE    number of entry points (00h if end of entry table list)
  21562.  01h    BYTE    segment number (00h if end of entry table list)
  21563.  02h 3N BYTEs    entry records
  21564.         Offset    Size    Description
  21565.          00h    BYTE    flags
  21566.                 bit 0: exported
  21567.                 bit 1: single data
  21568.                 bits 2-7: unused???
  21569.          01h    WORD    offset within segment
  21570.  
  21571. Format of new executable relocation data (immediately follows segment image):
  21572. Offset    Size    Description
  21573.  00h    WORD    number of relocation items
  21574.  02h 8N BYTEs    relocation items
  21575.         Offset    Size    Description
  21576.          00h    BYTE    relocation type
  21577.                 00h LOBYTE
  21578.                 02h BASE
  21579.                 03h PTR
  21580.                 05h OFFS
  21581.                 0Bh PTR48
  21582.                 0Dh OFFS32
  21583.          01h    BYTE    flags
  21584.                 bit 2: additive
  21585.          02h    WORD    offset within segment
  21586.          04h    WORD    target address segment
  21587.          06h    WORD    target address offset
  21588.          
  21589. Format of new executable resource data:
  21590. Offset    Size    Description
  21591.  00h    WORD    alignment shift count for resource data
  21592.  02h  N RECORDs resources
  21593.     Format of resource record:
  21594.     Offset    Size    Description
  21595.      00h    WORD    type ID
  21596.             0000h if end of resource records
  21597.             >= 8000h if integer type
  21598.             else offset from start of resource table to type string
  21599.      02h    WORD    number of resources of this type
  21600.      04h    DWORD    reserved for runtime use
  21601.      08h  N Resources (see below)
  21602. Note:    resource type and name strings are stored immediately following the
  21603.       resource table, and are not null-terminated
  21604.  
  21605. Format of new executable resource entry:
  21606. Offset    Size    Description
  21607.  00h    WORD    offset in alignment units from start of file to contents of
  21608.         the resource data
  21609.  02h    WORD    length of resource image in bytes
  21610.  04h    WORD    flags
  21611.         bit 4: moveable
  21612.         bit 5: shareable
  21613.         bit 6: preloaded
  21614.  06h    WORD    resource ID
  21615.         >= 8000h if integer resource
  21616.         else offset from start of resource table to resource string
  21617.  08h    DWORD    reserved for runtime use
  21618. Notes:    resource type and name strings are stored immediately following the
  21619.       resource table, and are not null-terminated
  21620.     strings are counted strings, with a string of length 0 indicating the
  21621.       end of the resource table
  21622.  
  21623. Format of new executable module reference table [one bundle of entries]:
  21624. Offset    Size    Description
  21625.  00h    BYTE    number of records in this bundle (00h if end of table)
  21626.  01h    BYTE    segment indicator
  21627.         00h unused
  21628.         FFh movable segment, segment number is in entry
  21629.         else segment number of fixed segment
  21630.  02h  N RECORDs
  21631.     Format of segment record
  21632.     Offset    Size    Description
  21633.      00h    BYTE    flags
  21634.             bit 0: entry is exported
  21635.             bit 1: entry uses global (shared) data
  21636.             bits 7-3: number of parameter words
  21637.     ---fixed segment---
  21638.      01h    WORD    offset
  21639.     ---moveable segment---
  21640.      01h  2 BYTEs    INT 3F instruction (CDh 3Fh)
  21641.      03h    BYTE    segment number
  21642.      05h    WORD    offset
  21643. Note:    table entries are numbered starting from 1
  21644.  
  21645. Format of new executable resident/nonresident name table entry:
  21646. Offset    Size    Description
  21647.  00h    BYTE    length of string (00h if end of table)
  21648.  01h  N BYTEs    ASCII text of string
  21649.  N+1    WORD    ordinal number (index into entry table)
  21650. Notes:    the first string in the resident name table is the module name; the
  21651.       first entry in the nonresident name table is the module description
  21652.     the strings are case-sensitive; if the executable was linked with
  21653.       /IGNORECASE, all strings are in uppercase
  21654.  
  21655. Format of Linear Executable (enhanced mode executable) header:
  21656. Offset    Size    Description
  21657.  00h  2 BYTEs    "LE" (4Ch 45h) signature
  21658.  02h    BYTE    byte order (00h = little-endian, nonzero = big-endian)
  21659.  03h    BYTE    word order (00h = little-endian, nonzero = big-endian)
  21660.  04h    DWORD    executable format level
  21661.  08h    WORD    CPU type (see also INT 15/AH=C9h)
  21662.         01h Intel 80286 or upwardly compatible
  21663.         02h Intel 80386 or upwardly compatible            
  21664.         03h Intel 80486 or upwardly compatible            
  21665.         04h Intel 80586 or upwardly compatible
  21666.         20h Intel i860 (N10) or compatible
  21667.         21h Intel "N11" or compatible
  21668.         40h MIPS Mark I (R2000, R3000) or compatible
  21669.         41h MIPS Mark II (R6000) or compatible
  21670.         42h MIPS Mark III (R4000) or compatible
  21671.  0Ah    WORD    target operating system
  21672.         01h OS/2
  21673.         02h Windows
  21674.         03h European DOS 4.0
  21675.         04h Windows 386
  21676.  0Ch    DWORD    module version
  21677.  10h    DWORD    module type
  21678.         bit 2: initialization (only for DLLs)
  21679.             0 = global
  21680.             1 = per-process
  21681.         bit 4: no internal fixups in executable image
  21682.         bit 5: no external fixups in executable image
  21683.         bits 8,9,10:
  21684.             0 = unknown
  21685.             1 = incompatible with PM windowing \
  21686.             2 = compatible with PM windowing    > (only for
  21687.             3 = uses PM windowing API       /    programs)
  21688.         bit 13: module not loadable (only for programs)
  21689.         bit 15: module is DLL rather than program
  21690.  14h    DWORD    number of memory pages
  21691.  18h    Initial CS:EIP
  21692.     DWORD    object number
  21693.     DWORD    offset
  21694.  20h    Initial SS:ESP
  21695.     DWORD    object number
  21696.     DWORD    offset
  21697.  28h    DWORD    memory page size
  21698.  2Ch    DWORD    bytes on last page
  21699.  30h    DWORD    fixup section size
  21700.  34h    DWORD    fixup section checksum
  21701.  38h    DWORD    loader section size
  21702.  3Ch    DWORD    loader section checksum
  21703.  40h    DWORD    offset of object table (see below)
  21704.  44h    DWORD    object table entries
  21705.  48h    DWORD    object page map table offset
  21706.  4CH    DWORD    object iterate data map offset
  21707.  50h    DWORD    resource table offset
  21708.  54h    DWORD    resource table entries
  21709.  58h    DWORD    resident names table offset
  21710.  5Ch    DWORD    entry table offset
  21711.  60h    DWORD    module directives table offset
  21712.  64h    DWORD    Module Directives entries
  21713.  68h    DWORD    Fixup page table offset
  21714.  6Ch    DWORD    Fixup record table offset
  21715.  70h    DWORD    imported modules name table offset
  21716.  74h    DWORD    imported modules count
  21717.  78h    DWORD    imported procedures name table offset
  21718.  7Ch    DWORD    per-page checksum table offset
  21719.  80h    DWORD    data pages offset
  21720.  84h    DWORD    preload page count
  21721.  88h    DWORD    non-resident names table offset
  21722.  8Ch    DWORD    non-resident names table length
  21723.  90h    DWORD    non-resident names checksum
  21724.  94h    DWORD    automatic data object
  21725.  98h    DWORD    debug information offset
  21726.  9Ch    DWORD    debug information length
  21727.  A0h    DWORD    preload instance pages number
  21728.  A4h    DWORD    demand instance pages number
  21729.  A8h    DWORD    extra heap allocation
  21730.  ACh 20 BYTEs    reserved
  21731.  C0h    WORD    device ID (MS-Windows VxD only)
  21732.  C2h    WORD    DDK version (MS-Windows VxD only)
  21733. Note:    used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
  21734.  
  21735. Format of object table entry:
  21736. Offset    Size    Description
  21737.  00h    DWORD    virtual size in bytes
  21738.  04h    DWORD    relocation base address
  21739.  08h    DWORD    object flags
  21740.         bit 0: readable
  21741.         bit 1: writable
  21742.         bit 2: executable
  21743.         bit 3: resource
  21744.         bit 4: discardable
  21745.         bit 5: shared
  21746.         bit 6: preloaded
  21747.         bit 7: invalid
  21748.         bit 8-9: type
  21749.             00 normal
  21750.             01 zero-filled
  21751.             10 resident
  21752.             11 resident/contiguous
  21753.         bit 10: "RESIDENT/LONG_LOCKABLE"
  21754.         bit 11: reserved
  21755.         bit 12: "16:16_ALIAS"
  21756.         bit 13: "BIG" (Huge: 32-bit)
  21757.         bit 14: conforming
  21758.         bit 15: "OBJECT_I/O_PRIVILEGE_LEVEL"
  21759.         bits 16-31: reserved
  21760.  0Ch    DWORD    page map index
  21761.  10h    DWORD    page map entries
  21762.  14h  4 BYTEs    reserved??? (apparently always zeros)
  21763.  
  21764. Format of object page map table entry:
  21765. Offset    Size    Description
  21766.  00h    BYTE    ??? (usually 00h)
  21767.  01h    WORD    index to fixup table (big-endian)
  21768.         0000h if no relocation info
  21769.  03h    BYTE    type (00h hard copy in file, 03h some relocation needed)
  21770.  
  21771. Format of resident names table entry:
  21772. Offset    Size    Description
  21773.  00h    BYTE    length of name
  21774.  01h  N BYTEs    name
  21775.  N+1  3 BYTEs    ???
  21776.  
  21777. Format of linear executable entry table:
  21778. Offset    Size    Description
  21779.  00h    BYTE    number of entries in table
  21780.  01h 10 BYTEs per entry
  21781.         Offset    Size    Description
  21782.          00h    BYTE    bit flags
  21783.                 bit 0: non-empty bundle
  21784.                 bit 1: 32-bit entry
  21785.          01h    WORD    object number
  21786.          03h    BYTE    entry type flags
  21787.                 bit 0: exported
  21788.                 bit 1: uses single data rather than instance
  21789.                 bit 2: reserved
  21790.                 bits 3-7: number of stack parameters
  21791.          04h    DWORD    offset of entry point
  21792.          08h  2 BYTEs    ???
  21793. Note:    empty bundles (bit flags at 00h = 00h) are used to skip unused indices,
  21794.       and do not contain the remaining nine bytes
  21795.  
  21796. Format of linear executable fixup record:
  21797. Offset    Size    Description
  21798.  00h    BYTE    type
  21799.         bits 7-4: modifier (0001 single, 0011 multiple)
  21800.         bits 3-0: type
  21801.             0000 byte offset
  21802.             0010 word segment
  21803.             0011 16-bit far pointer (DWORD)
  21804.             0101 16-bit offset
  21805.             0110 32-bit far pointer (PWORD)
  21806.             0111 32-bit offset
  21807.             1000 near call or jump, WORD/DWORD based on seg attrib
  21808.  01h    BYTE    fixup type
  21809.         bit 7:    ordinal is BYTE rather than WORD
  21810.         bit 5:    addition with DWORD rather than WORD
  21811.         bit 4:    reloation info has size with new two bytes at end
  21812.         bit 2:    set of add to destination, clear to replace destination
  21813.         bits 1-0: type
  21814.             00 internal fixup
  21815.             01 external fixup, imported by ordinal
  21816.             10 external fixup, imported by name
  21817. ---if single type---
  21818.  02h    WORD    offset within page
  21819.  04h    relocation information
  21820.     ---internal fixup---
  21821.     BYTE    object number
  21822.     ---external,ordinal---
  21823.     BYTE    one-based module number in Import Module table
  21824.     BYTE/WORD ordinal number
  21825.     WORD/DWORD value to add (only present if modifier bit 4 set)
  21826.     ---external,name---
  21827.     BYTE    one-based module number in Import Module table
  21828.     WORD    offset in Import Procedure names
  21829.     WORD/DWORD value to add (only present if modifier bit 4 set)
  21830. ---if multiple type---
  21831.  02h    BYTE    number of items
  21832.  03h    var    relocation info as for "single" type (see above)
  21833.       N WORDs    offsets of items to relocate
  21834.  
  21835. Format of Borland debugging information header (following load image):
  21836. Offset    Size    Description
  21837.  00h    WORD    signature 52FBh
  21838.  02h    WORD    version ID
  21839.  04h    DWORD    size of name pool in bytes
  21840.  08h    WORD    number of names in namem pool
  21841.  0Ah    WORD    number of type entries
  21842.  0Ch    WORD    number of structure members
  21843.  0Eh    WORD    number of symbols
  21844.  10h    WORD    number of global symbols
  21845.  12h    WORD    number of modules
  21846.  14h    WORD    number of locals (optional)
  21847.  16h    WORD    number of scopes in table
  21848.  18h    WORD    number of line-number entries
  21849.  1Ah    WORD    number of include files
  21850.  1Ch    WORD    number of segment records
  21851.  1Eh    WORD    number of segment/file correlations
  21852.  20h    DWORD    size of load image after removing uninitialized data and debug
  21853.         info
  21854.  24h    DWORD    debugger hook; pointer into debugged program whose meaning
  21855.         depends on program flags
  21856.  28h    BYTE    program flags
  21857.         bit 0: case-sensitive link
  21858.         bit 1: pascal overlay program
  21859.  29h    WORD    no longer used
  21860.  2Bh    WORD    size of data pool in bytes
  21861.  2Dh    BYTE    padding
  21862.  2Eh    WORD    size of following header extension (currently 00h, 10h, or 20h)
  21863.  30h    WORD    number of classes
  21864.  32h    WORD    number of parents
  21865.  34h    WORD    number of global classes (currently unused)
  21866.  36h    WORD    number of overloads (currently unused)
  21867.  38h    WORD    number of scope classes
  21868.  3Ah    WORD    number of module classes
  21869.  3Ch    WORD    number of coverage offsets
  21870.  3Eh    DWORD    offset relative to symbol base of name pool
  21871.  42h    WORD    number of browser information records
  21872.  44h    WORD    number of optimized symbol records
  21873.  46h    WORD    debugging flags
  21874.  48h  8 BYTEs    padding
  21875. Note:    additional information on the Borland debugging info may be found in
  21876.       Borland's Open Architecture Handbook
  21877. ----------214B-------------------------------
  21878. INT 21 - ELRES v1.0 only - INSTALLATION CHECK
  21879.     AH = 4Bh
  21880.     DS:DX = 0000h:0000h
  21881. Return: ES:BX -> ELRES history structure (see AH=2Bh/CX=454Ch)
  21882.     DX = DABEh (signature, DAve BEnnett)
  21883. Note:    ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett
  21884. SeeAlso: AH=2Bh/CX=454Ch
  21885. ----------214B04-----------------------------
  21886. INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK
  21887.     AX = 4B04h
  21888. Return: CF clear if "MG" resident
  21889.     AX = 044Bh if "699"/"Thirteen Minutes" resident
  21890. SeeAlso: AX=4243h,AX=4B25h
  21891. ----------214B05-----------------------------
  21892. INT 21 - DOS 5.0 - SET EXECUTION STATE
  21893.     AX = 4B05h
  21894.     DS:DX -> execution state structure (see below)
  21895. Return: CF clear if successful
  21896.         AX = 0000h
  21897.     CF set on error
  21898.         AX = error code (see AH=59h)
  21899. Note:    used by programs which intercept AX=4B00h to prepare new programs for
  21900.       execution (including setting the DOS version number).     No DOS, BIOS
  21901.       or other software interrupt may be called after return from this call
  21902.       before commencement of the child process.  If DOS is running in the
  21903.       HMA, A20 is turned off on return from this call.
  21904. SeeAlso: AH=4Bh
  21905.  
  21906. Format of execution state structure:
  21907. Offset    Size    Description
  21908.  00h    WORD    reserved (00h)
  21909.  02h    WORD    type flags
  21910.         bit 0: program is an .EXE
  21911.             1: program is an overlay
  21912.  04h    DWORD    pointer to ASCIZ name of program file
  21913.  08h    WORD    PSP segment of new program
  21914.  0Ah    DWORD    starting CS:IP of new program
  21915.  0Eh    DWORD    program size including PSP
  21916. ----------214B25-----------------------------
  21917. INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK
  21918.     AX = 4B25h
  21919. Return: DI = 1234h if resident
  21920. SeeAlso: AX=4B04h,AX=4B40h
  21921. ----------214B40-----------------------------
  21922. INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK
  21923.     AX = 4B40h
  21924. Return: AX = 5678h if resident
  21925. SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
  21926. ----------214B41-----------------------------
  21927. INT 21 - VIRUS - "Plastique"/"AntiCad" - ???
  21928.     AX = 4B41h
  21929.     ???
  21930. Return: ???
  21931. SeeAlso: AX=4B40h
  21932. ----------214B4A-----------------------------
  21933. INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK
  21934.     AX = 4B4Ah
  21935. Return: AL = 57h if resident
  21936. SeeAlso: AX=4B40h,AX=4B4Bh
  21937. ----------214B4B-----------------------------
  21938. INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK
  21939.     AX = 4B4Bh
  21940. Return: CF clear if resident
  21941. SeeAlso: AX=4B4Ah,AX=4B4Dh
  21942. ----------214B4D-----------------------------
  21943. INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK
  21944.     AX = 4B4Dh
  21945. Return: CF clear if resident
  21946. SeeAlso: AX=4B4Ah,AX=4B50h
  21947. ----------214B50-----------------------------
  21948. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK
  21949.     AX = 4B50h
  21950. Return: AX = 1234h if resident
  21951. SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
  21952. ----------214B53-----------------------------
  21953. INT 21 - VIRUS - "Horse" - INSTALLATION CHECK
  21954.     AX = 4B53h
  21955. Return: CF clear if resident
  21956. SeeAlso: AX=4B50h,AX=4B55h
  21957. ----------214B55-----------------------------
  21958. INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK
  21959.     AX = 4B55h
  21960. Return: AX = 1231h if resident
  21961. SeeAlso: AX=4B53h,AX=4B59h
  21962. ----------214B59-----------------------------
  21963. INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK
  21964.     AX = 4B59h
  21965. Return: CF clear if resident
  21966. SeeAlso: AX=4B50h,AX=4B5Eh
  21967. ----------214B5E-----------------------------
  21968. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  21969.     AX = 4B5Eh
  21970. Return: CF clear if resident
  21971. SeeAlso: AX=4B59h,AX=4B87h
  21972. ----------214B60-----------------------------
  21973. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???
  21974.     AX = 4B60h
  21975.     ???
  21976. Return: ???
  21977. SeeAlso: AX=4B50h
  21978. ----------214B87-----------------------------
  21979. INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK
  21980.     AX = 4B87h
  21981. Return: AX = 6663h if resident
  21982. SeeAlso: AX=4B5Eh,AX=4B95h
  21983. ----------214B95-----------------------------
  21984. INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK
  21985.     AX = 4B95h
  21986. Return: AX = 1973h if resident
  21987. SeeAlso: AX=4B87h,AX=4BA7h
  21988. ----------214BA7-----------------------------
  21989. INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK
  21990.     AX = 4BA7h
  21991. Return: AX = B459h if resident
  21992. SeeAlso: AX=4B95h,AX=4BAAh
  21993. ----------214BAA-----------------------------
  21994. INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK
  21995.     AX = 4BAAh
  21996. Return: CF clear if resident
  21997. SeeAlso: AX=4BA7h,AX=4BAFh
  21998. ----------214BAF-----------------------------
  21999. INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK
  22000.     AX = 4BAFh
  22001. Return: AL = AFh if "Magnitogorsk" resident
  22002.     AL = FAh if "948"/"Screenplus1" resident
  22003. SeeAlso: AX=4BAAh,AX=4BDDh
  22004. ----------214BDD-----------------------------
  22005. INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK
  22006.     AX = 4BDDh
  22007. Return: AX = 1234h
  22008. SeeAlso: AX=4BAFh,AX=4BFEh
  22009. ----------214BEE-----------------------------
  22010. INT 21 - F-DRIVER.SYS v1.14+ - GRAB INT 21
  22011.     AX = 4BEEh
  22012. Return: AX = 1234h if grab successful
  22013.        = 2345h if failed (INT 21 grabbed previously)
  22014. Notes:    F-DRIVER.SYS is part of the F-PROT virus/trojan protection package by
  22015.       Fridrik Skulason
  22016.     when called the first time, this function moves the INT 21 monitoring
  22017.       code from its original location in the INT 21 chain to be the first
  22018.       thing called by INT 21.  This is the mechanism used by F-NET.
  22019. SeeAlso: INT 2F/AX=4653h
  22020. ----------214BF0-----------------------------
  22021. INT 21 - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK
  22022.     AX = 4BF0h
  22023. Return: CF clear if installed
  22024.         AX = 899Dh
  22025. Note:    DIET is an executable-compression program
  22026. SeeAlso: AX=4BF1h
  22027. ----------214BF1-----------------------------
  22028. INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???
  22029.     AX = 4BF1h
  22030. Return: ???
  22031. SeeAlso: AX=4BF0h
  22032. ----------214BFE-----------------------------
  22033. INT 21 - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK
  22034.     AX = 4BFEh
  22035. Return: AX = 1234h if "Hitchcock" resident
  22036.     AX = ABCDh if "1193"/"Copyright" resident
  22037.     DI = 55BBh if "Dark Avenger-1028" resident
  22038. SeeAlso: AX=4BDDh,AX=4BFFh"Justice"
  22039. ----------214BFF-----------------------------
  22040. INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK
  22041.     AX = 4BFFh
  22042. Return: BL = FFh if "USSR-707" resident
  22043.     DI = 55AAh if "Justice" resident
  22044.     CF clear if "Europe 92" resident
  22045. SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h
  22046. ----------214BFFSI0000-----------------------
  22047. INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK
  22048.     AX = 4BFFh
  22049.     SI = 0000h
  22050.     DI = 0000h
  22051. Return: DI = 55AAh if installed
  22052. SeeAlso: AX=4BFFh"Justice",AX=5252h
  22053. ----------214C-------------------------------
  22054. INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
  22055.     AH = 4Ch
  22056.     AL = return code
  22057. Return: never returns
  22058. Notes:    unless the process is its own parent (see AH=26h, offset 16h in PSP),
  22059.       all open files are closed and all memory belonging to the process
  22060.       is freed
  22061.     all network file locks should be removed before calling this function
  22062. SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 15/AH=12h/BH=02h,INT 20,INT 22
  22063. SeeAlso: INT 60/DI=0601h
  22064. ----------214D-------------------------------
  22065. INT 21 - DOS 2+ - GET RETURN CODE
  22066.     AH = 4Dh
  22067. Return: AH = termination type
  22068.         00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch)
  22069.         01h control-C abort
  22070.         02h critical error abort
  22071.         03h terminate and stay resident (INT 21/AH=31h or INT 27)
  22072.     AL = return code
  22073. Notes:    the word in which DOS stores the return code is cleared after being
  22074.       read by this function, so the return code can only be retrieved once
  22075.     this call should not be used if the child was started with AX=4B04h;
  22076.       use AH=8Ah instead
  22077.     the following sequence will close a Virtual DOS Machine under OS/2 2.0:
  22078.       MOV    AH,4Dh
  22079.       INT    21h
  22080.       HLT
  22081.       DB    02h,0FDh
  22082.       This sequence is the only way to close a specific VDM which was
  22083.       booted from floppy or a disk image.
  22084. SeeAlso: AH=4Bh,AH=4Ch,AH=8Ah
  22085. ----------214E-------------------------------
  22086. INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
  22087.     AH = 4Eh
  22088.     AL = special flag for use by APPEND (see note below)
  22089.     CX = file attribute mask (see AX=4301h) (bits 0 and 5 ignored)
  22090.     DS:DX -> ASCIZ file specification (may include path and wildcards)
  22091. Return: CF clear if successful
  22092.         [DTA] = FindFirst data block (see below)
  22093.     CF set on error
  22094.         AX = error code (02h,03h,12h) (see AH=59h)
  22095. Notes:    for search attributes other than 08h, all files with at MOST the
  22096.       specified combination of hidden, system, and directory attributes
  22097.       will be returned.  Under DOS 2.x, searching for attribute 08h
  22098.       (volume label) will also return normal files, while under DOS 3+
  22099.       only the volume label (if any) will be returned.
  22100.     this call also returns successfully if given the name of a character
  22101.       device without wildcards.  DOS 2.x returns attribute 00h, size 0,
  22102.       and the current date and time.  DOS 3+ returns attribute 40h and the
  22103.       current date and time.
  22104.     immediately after an INT 2F/AX=B711h (APPEND return found name), the
  22105.       name at DS:DX will be overwritten; if AL=00h on entry, the actual
  22106.       found pathname will be stored, otherwise, the actual found path
  22107.       will be prepended to the original filespec without a path.
  22108.     under LANtastic, this call may be used to obtain a list of a server's
  22109.       shared resources by searching for "\\SERVER\*.*"; a list of printer
  22110.       resources may be obtained by searching for "\\SERVER\@*.*"
  22111.     under the FlashTek X-32 DOS extender, the filespec pointer is in DS:EDX
  22112. BUG:    under DOS 3.x and 4.x, the second and subsequent calls to this function
  22113.       with a character device name (no wildcards) and search attributes
  22114.       which include the volume-label bit (08h) will fail unless there is
  22115.       an intervening DOS call which implicitly or explicity performs a
  22116.       directory search without the volume-label bit.  Such implicit
  22117.       searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
  22118.       (AH=41h), and RENAME (AH=56h)
  22119. SeeAlso: AH=11h,AH=4Fh,AX=4301h,INT 2F/AX=111Bh,INT 2F/AX=B711h
  22120.  
  22121. Format of FindFirst data block:
  22122. Offset    Size    Description
  22123. ---PCDOS 3.10, PCDOS 4.01, MSDOS 3.2/3.3/5.0---
  22124.  00h    BYTE    drive letter (bits 0-6), remote if bit 7 set
  22125.  01h 11 BYTEs    search template
  22126.  0Ch    BYTE    search attributes
  22127. ---DOS 2.x (and some DOS 3.x???)---
  22128.  00h    BYTE    search attributes
  22129.  01h    BYTE    drive letter
  22130.  02h 11 BYTEs    search template
  22131. ---WILDUNIX.COM---
  22132.  00h 12 BYTEs    15-character wildcard search pattern and drive letter (packed)
  22133.  0Ch    BYTE    search attributes
  22134. ---DOS 2.x and most 3.x---
  22135.  0Dh    WORD    entry count within directory
  22136.  0Fh    DWORD    pointer to DTA???
  22137.  13h    WORD    cluster number of start of parent directory
  22138. ---PCDOS 4.01, MSDOS 3.2/3.3/5.0---
  22139.  0Dh    WORD    entry count within directory
  22140.  0Fh    WORD    cluster number of start of parent directory
  22141.  11h  4 BYTEs    reserved
  22142. ---all versions, documented fields---
  22143.  15h    BYTE    attribute of file found
  22144.  16h    WORD    file time
  22145.             bits 11-15: hour
  22146.             bits 5-10:    minute
  22147.             bits 0-4:    seconds/2
  22148.  18h    WORD    file date
  22149.             bits 9-15:    year-1980
  22150.             bits 5-8:    month
  22151.             bits 0-4:    day
  22152.  1Ah    DWORD    file size
  22153.  1Eh 13 BYTEs    ASCIZ filename+extension
  22154. ----------214E-------------------------------
  22155. INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
  22156.     AH = 4Eh
  22157.     DS:DX = 0000h:0000h
  22158. Return:    AH = 99h if installed
  22159. Note:    WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
  22160.       Hosgood and Terry Barnaby
  22161. ----------214F-------------------------------
  22162. INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
  22163.     AH = 4Fh
  22164.     [DTA] = data block from previous FindFirst or FindNext call
  22165. Return: CF clear if successful
  22166.     CF set on error
  22167.         AX = error code (12h) (see AH=59h)
  22168. SeeAlso: AH=12h,AH=4Eh
  22169. ----------2150-------------------------------
  22170. INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS)
  22171.     AH = 50h
  22172.     BX = segment of PSP for new process
  22173. Notes:    DOS uses the current PSP address to determine which processes own files
  22174.       and memory; it corresponds to process identifiers used by other OSs
  22175.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  22176.       handler without setting the Critical Error flag
  22177.     under DOS 3+, this function does not use any of the DOS-internal stacks
  22178.       and may thus be called at any time, even during another INT 21h call
  22179.     some Microsoft applications use segments of 0000h and FFFFh; although
  22180.       one should only call this function with valid PSP addresses, any
  22181.       program hooking it should be prepared to handle invalid addresses
  22182.     supported by OS/2 compatibility box
  22183.     this call was undocumented prior to the release of DOS 5.0
  22184. SeeAlso: AH=26h,AH=51h,AH=62h
  22185. ----------2151-------------------------------
  22186. INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS)
  22187.     AH = 51h
  22188. Return: BX = segment of PSP for current process
  22189. Notes:    DOS uses the current PSP address to determine which processes own files
  22190.       and memory; it corresponds to process identifiers used by other OSs
  22191.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  22192.       handler without setting the Critical Error flag
  22193.     under DOS 3+, this function does not use any of the DOS-internal stacks
  22194.       and may thus be called at any time, even during another INT 21h call
  22195.     supported by OS/2 compatibility box
  22196.     identical to the documented AH=62h
  22197.     undocumented for DOS 2.x-4.x, but newly documented for 5.0.
  22198. SeeAlso: AH=26h,AH=50h,AH=62h
  22199. ----------2152-------------------------------
  22200. INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
  22201.     AH = 52h
  22202. Return: ES:BX -> DOS list of lists
  22203. Note:    partially supported by OS/2 v1.1 compatibility box (however, most
  22204.       pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
  22205.       pointer is FFFFh:FFFFh).
  22206.  
  22207. Format of List of Lists:
  22208. Offset    Size    Description
  22209.  -12    WORD    (DOS 3.1+) sharing retry count (see AX=440Bh)
  22210.  -10    WORD    (DOS 3.1+) sharing retry delay (see AX=440Bh)
  22211.  -8    DWORD    (DOS 3+) pointer to current disk buffer
  22212.  -4    WORD    (DOS 3+) pointer in DOS code segment of unread CON input
  22213.         when CON is read via a handle, DOS reads an entire line,
  22214.           and returns the requested portion, buffering the rest
  22215.           for the next read.  0000h indicates no unread input
  22216.  -2    WORD    segment of first memory control block
  22217.  00h    DWORD    pointer to first Drive Parameter Block (see AH=32h)
  22218.  04h    DWORD    pointer to first System File Table (see below)
  22219.  08h    DWORD    pointer to active CLOCK$ device's header
  22220.  0Ch    DWORD    pointer to active CON device's header
  22221. ---DOS 2.x---
  22222.  10h    BYTE    number of logical drives in system
  22223.  11h    WORD    maximum bytes/block of any block device
  22224.  13h    DWORD    pointer to first disk buffer (see below)
  22225.  17h 18 BYTEs    actual NUL device driver header (not a pointer!)
  22226.         NUL is always the first device on DOS's linked list of device 
  22227.         drivers. (see below)
  22228. ---DOS 3.0---
  22229.  10h    BYTE    number of block devices
  22230.  11h    WORD    maximum bytes/block of any block device
  22231.  13h    DWORD    pointer to first disk buffer (see below)
  22232.  17h    DWORD    pointer to array of current directory structures (see below)
  22233.  1Bh    BYTE    value of LASTDRIVE command in CONFIG.SYS (default 5)
  22234.  1Ch    DWORD    pointer to STRING= workspace area
  22235.  20h    WORD    size of STRING area (the x in STRING=x from CONFIG.SYS)
  22236.  22h    DWORD    pointer to FCB table
  22237.  26h    WORD    the y in FCBS=x,y from CONFIG.SYS
  22238.  28h 18 BYTEs    actual NUL device driver header (not a pointer!)
  22239.         NUL is always the first device on DOS's linked list of device 
  22240.         drivers. (see below)
  22241. ---DOS 3.1-3.3---
  22242.  10h    WORD    maximum bytes per sector of any block device
  22243.  12h    DWORD    pointer to first disk buffer in buffer chain (see below)
  22244.  16h    DWORD    pointer to array of current directory structures (see below)
  22245.  1Ah    DWORD    pointer to system FCB tables (see below)
  22246.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  22247.  20h    BYTE    number of block devices installed
  22248.  21h    BYTE    number of available drive letters (largest of 5, installed
  22249.         block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  22250.         current directory structure array.
  22251.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  22252.         NUL is always the first device on DOS's linked list of device
  22253.         drivers. (see below)
  22254.  34h    BYTE    number of JOIN'ed drives
  22255. ---DOS 4.x---
  22256.  10h    WORD    maximum bytes per sector of any block device
  22257.  12h    DWORD    pointer to disk buffer info record (see below)
  22258.  16h    DWORD    pointer to array of current directory structures (see below)
  22259.  1Ah    DWORD    pointer to system FCB tables (see below)
  22260.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  22261.         (always 00h for DOS 5.0)
  22262.  20h    BYTE    number of block devices installed
  22263.  21h    BYTE    number of available drive letters (largest of 5, installed
  22264.         block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  22265.         current directory structure array.
  22266.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  22267.         NUL is always the first device on DOS's linked list of device
  22268.         drivers. (see below)
  22269.  34h    BYTE    number of JOIN'ed drives???
  22270.  35h    WORD    pointer within IBMDOS code segment to list of special program
  22271.         names (see below)
  22272.         (always 0000h for DOS 5.0)
  22273.  37h    DWORD    pointer to FAR routine for resident IFS utility functions
  22274.         (see below)
  22275.         may be called by any IFS driver which does not wish to
  22276.         service functions 20h or 24h-28h itself
  22277.  3Bh    DWORD    pointer to chain of IFS (installable file system) drivers
  22278.  3Fh    WORD    the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
  22279.  41h    WORD    the y in BUFFERS x,y
  22280.  43h    BYTE    boot drive (1=A:)
  22281.  44h    BYTE    01h if 80386+, 00h otherwise???
  22282.  45h    WORD    extended memory size in K
  22283. ---DOS 5.0---
  22284.  10h 39 BYTEs    as for DOS 4.x (see above)
  22285.  37h    DWORD    pointer to SETVER program list or 0000h:0000h
  22286.  3Bh    WORD    ??? pointer to function in DOS CS
  22287.  3Dh    WORD    ??? apparently 0000h if DOS loaded low, PSP of most-recently
  22288.         EXECed program if DOS in HMA
  22289.  3Fh  8 BYTEs    as for DOS 4.x (see above)
  22290.  
  22291. Format of memory control block (see also below):
  22292. Offset    Size    Description
  22293.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  22294.  01h    WORD    PSP segment of owner or
  22295.         0000h if free
  22296.         0006h if DR-DOS XMS UMB
  22297.         0007h if DR-DOS excluded upper memory ("hole")
  22298.         0008h if belongs to DOS
  22299.         FFFAh if 386MAX UMB control block
  22300.         FFFDh if 386MAX locked-out memory
  22301.         FFFEh if 386MAX UMB (immediately follows its control block)
  22302.  03h    WORD    size of memory block in paragraphs
  22303.  05h  3 BYTEs    unused
  22304. ---DOS 2.x,3.x---
  22305.  08h  8 BYTEs    unused
  22306. ---DOS 4+ ---
  22307.  08h  8 BYTEs    ASCII program name if PSP memory block or DR-DOS UMB,
  22308.           else garbage
  22309.         null-terminated if less than 8 characters
  22310. Notes:    the next MCB is at segment (current + size + 1)
  22311.     under DOS 3.1+, the first memory block is the DOS data segment,
  22312.       containing installable drivers, buffers, etc.     Under DOS 4+ it is
  22313.       divided into subsegments, each with its own memory control block
  22314.       (see below), the first of which is at offset 0000h.
  22315.     for DOS 5.0, blocks owned by DOS may have either "SC" or "SD" in bytes
  22316.       08h and 09h.    "SC" is system code or locked-out inter-UMB memory,
  22317.       "SD" is system data, device drivers, etc.
  22318.     Some versions of DR-DOS use only seven characters of the program name,
  22319.       placing a NUL in the eighth byte.
  22320.  
  22321. Format of MSDOS 5.0 UMB control block:
  22322. Offset    Size    Description
  22323.  00h    BYTE    type: 5Ah if last block in chain, 4Dh otherwise
  22324.  01h    WORD    first available paragraph in UMB if control block at start
  22325.         of UMB, 000Ah if control block at end of UMB
  22326.  03h    WORD    length in paragraphs of following UMB or locked-out region
  22327.  05h  3 BYTEs    unused
  22328.  08h  8 BYTEs    block type name: "UMB" if start block, "SM" if end block in UMB
  22329.  
  22330. Format of STARLITE (General Software's Embedded DOS) memory control block:
  22331. Offset    Size    Description
  22332.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  22333.  01h    WORD    PSP segment of owner, 0000h if free, 0008h if belongs to DOS
  22334.  03h    WORD    size of memory block in paragraphs
  22335.  05h    BYTE    unused
  22336.  06h    WORD    segment address of next memory control block (0000h if last)
  22337.  08h    WORD    segment address of previous memory control block or 0000h
  22338.  0Ah  6 BYTEs    reserved
  22339.  
  22340. Format of DOS 4.x data segment subsegment control blocks:
  22341. Offset    Size    Description
  22342.  00h    BYTE    subsegment type (blocks typically appear in this order)
  22343.         "D"  device driver
  22344.         "E"  device driver appendage
  22345.         "I"  IFS (Installable File System) driver
  22346.         "F"  FILES=  control block storage area (for FILES>5)
  22347.         "X"  FCBS=   control block storage area, if present
  22348.         "C"  BUFFERS EMS workspace area (if BUFFERS /X option used)
  22349.         "B"  BUFFERS=  storage area
  22350.         "L"  LASTDRIVE=     current directory structure array storage area
  22351.         "S"  STACKS=  code and data area, if present (see below)
  22352.         "T"  INSTALL= transient code
  22353.  01h    WORD    paragraph of subsegment start (usually the next paragraph)
  22354.  03h    WORD    size of subsegment in paragraphs
  22355.  05h  3 BYTEs    unused
  22356.  08h  8 BYTEs    for types "D" and "I", base name of file from which the driver
  22357.           was loaded (unused for other types)
  22358.  
  22359. Format of data at start of STACKS code segment (if present):
  22360. Offset    Size    Description
  22361.  00h    WORD    ???
  22362.  02h    WORD    number of stacks (the x in STACKS=x,y)
  22363.  04h    WORD    size of stack control block array (should be 8*x)
  22364.  06h    WORD    size of each stack (the y in STACKS=x,y)
  22365.  08h    DWORD    pointer to STACKS data segment
  22366.  0Ch    WORD    offset in STACKS data segment of stack control block array
  22367.  0Eh    WORD    offset in STACKS data segment of last element of that array
  22368.  10h    WORD    offset in STACKS data segment of the entry in that array for
  22369.         the next stack to be allocated (initially same as value in 0Eh
  22370.         and works its way down in steps of 8 to the value in 0Ch as
  22371.         hardware interrupts pre-empt each other)
  22372. Note:    the STACKS code segment data may, if present, be located as follows:
  22373.     DOS 3.2:    The code segment data is at a paragraph boundary fairly early
  22374.         in the IBMBIO segment (seen at 0070:0190h)
  22375.     DOS 3.3:    The code segment is at a paragraph boundary in the DOS data
  22376.         segment, which may be determined by inspecting the segment
  22377.         pointers of the vectors for those of interrupts 02h, 08h-0Eh,
  22378.         70h, 72-77h which have not been redirected by device drivers or
  22379.         TSRs.
  22380.     DOS 4.x:    Identified by sub-segment control block type "S" within the DOS
  22381.         data segment.
  22382.  
  22383. Format of array elements in STACKS data segment:
  22384. Offset    Size    Description
  22385.  00h    BYTE    status: 00h=free, 01h=in use, 03h=corrupted by overflow of
  22386.         higher stack.
  22387.  01h    BYTE    not used
  22388.  02h    WORD    previous SP
  22389.  04h    WORD    previous SS
  22390.  06h    WORD    ptr to word at top of stack (new value for SP). The word at the
  22391.         top of the stack is preset to point back to this control block.
  22392.  
  22393. SHARE.EXE hooks (DOS 3.1-5.00):
  22394. (offsets from first system file table--pointed at by ListOfLists+04h)
  22395. Offset    Size    Description
  22396. -3Ch    DWORD    pointer to FAR routine for ???
  22397.         Note: not called by MSDOS 3.3, set to 0000h:0000h by SHARE 3.3
  22398. -38h    DWORD    pointer to FAR routine called on opening file
  22399.         on call, internal DOS location points at filename(see AX=5D06h)
  22400.         Return: CF clear if successful
  22401.             CF set on error
  22402.                 AX = DOS error code (24h) (see AH=59h)
  22403.         Note: SHARE assumes DS=SS=DOS DS, direct-accesses DOS internals
  22404.             to get name of file just opened
  22405. -34h    DWORD    pointer to FAR routine called on closing file
  22406.         ES:DI -> system file table
  22407.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22408.             does something to every lock record for file
  22409. -30h    DWORD    pointer to FAR routine to close all files for given computer
  22410.         (called by AX=5D03h)
  22411.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22412. -2Ch    DWORD    pointer to FAR routine to close all files for given process
  22413.         (called by AX=5D04h)
  22414.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22415. -28h    DWORD    pointer to FAR routine to close file by name
  22416.         (called by AX=5D02h)
  22417.         DS:SI -> DOS parameter list (see AX=5D00h)
  22418.            DPL's DS:DX -> name of file to close
  22419.         Return: CF clear if successful
  22420.             CF set on error
  22421.                 AX = DOS error code (03h) (see AH=59h)
  22422.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22423. -24h    DWORD    pointer to FAR routine to lock region of file
  22424.         call with BX = file handle
  22425.               CX:DX = starting offset
  22426.               SI:AX = size
  22427.         Return: CF set on error
  22428.                 AL = DOS error code (21h) (see AH=59h)
  22429.         Note: not called if file is marked as remote
  22430.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22431. -20h    DWORD    pointer to FAR routine to unlock region of file
  22432.         call with BX = file handle
  22433.               CX:DX = starting offset
  22434.               SI:AX = size
  22435.         Return: CF set on error
  22436.                 AL = DOS error code (21h) (see AH=59h)
  22437.         Note: not called if file is marked as remote
  22438.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22439. -1Ch    DWORD    pointer to FAR routine to check if file region is locked
  22440.         call with ES:DI -> system file table entry for file
  22441.             CX = length of region from current position in file
  22442.         Return: CF set if any portion of region locked
  22443.                 AX = 0021h
  22444.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22445. -18h    DWORD    pointer to FAR routine to get open file list entry
  22446.         (called by AX=5D05h)
  22447.         call with DS:SI -> DOS parameter list (see AX=5D00h)
  22448.             DPL's BX = index of sharing record
  22449.             DPL's CX = index of SFT in SFT chain of sharing rec
  22450.         Return: CF set on error or not loaded
  22451.                 AX = DOS error code (12h) (see AH=59h)
  22452.             CF clear if successful
  22453.                 ES:DI -> filename
  22454.                 CX = number of locks owned by specified SFT
  22455.                 BX = network machine number
  22456.                 DX destroyed
  22457.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22458. -14h    DWORD    pointer to FAR routine for updating FCB from SFT???
  22459.         call with DS:SI -> unopened FCB
  22460.               ES:DI -> system file table entry
  22461.         Return: BL = C0h???
  22462.         Note: copies following fields from SFT to FCB:
  22463.            starting cluster of file      0Bh     1Ah
  22464.            sharing record offset      33h     1Ch
  22465.            file attribute          04h     1Eh
  22466. -10h    DWORD    pointer to FAR routine to get first cluster of FCB file ???
  22467.         call with ES:DI -> system file table entry
  22468.               DS:SI -> FCB
  22469.         Return: CF set if SFT closed or sharing record offsets
  22470.                 mismatched
  22471.             CF clear if successful
  22472.                 BX = starting cluster number from FCB
  22473. -0Ch    DWORD    pointer to FAR routine to close file if duplicate for process
  22474.         DS:SI -> system file table
  22475.         Return: AX = number of handle in JFT which already uses SFT
  22476.         Note: called during open/create of a file
  22477.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22478.         Note: if SFT was opened with inheritance enabled and sharing
  22479.             mode 111, does something to all other SFTs owned by
  22480.             same process which have the same file open mode and
  22481.             sharing record
  22482. -08h    DWORD    pointer to FAR routine for ???
  22483.         Note: SHARE assumes SS=DS=DOS DS, direct-accesses DOS internals
  22484.         Note: closes various handles referring to file most-recently
  22485.             opened
  22486. -04h    DWORD    pointer to FAR routine to update directory info in related SFT
  22487.           entries
  22488.         call with ES:DI -> system file table entry for file (see below)
  22489.               AX = subfunction (apply to each related SFT)
  22490.                 00h: update time stamp (offset 0Dh) and date
  22491.                      stamp (offset 0Fh)
  22492.                 01h: update file size (offset 11h) and starting
  22493.                      cluster (offset 0Bh).  Sets last-accessed
  22494.                      cluster fields to start of file if file
  22495.                      never accessed
  22496.                 02h: as function 01h, but last-accessed fields
  22497.                      always changed
  22498.                 03h: do both functions 00h and 02h
  22499.         Note: follows ptr at offset 2Bh in system file table entries
  22500.         Note: NOP if opened with no-inherit or via FCB
  22501.  
  22502. Format of sharing record:
  22503. Offset    Size    Description
  22504.  00h    BYTE    flag
  22505.         00h free block
  22506.         01h allocated block
  22507.         FFh end marker
  22508.  01h    WORD    size of block
  22509.  03h    BYTE    checksum of pathname (including NUL)
  22510.         if sum of ASCII values is N, checksum is (N/256 + N%256)
  22511.  04h    WORD    offset in SHARE's DS of lock record (see below)
  22512.  06h    DWORD    pointer to start of system file table chain for file
  22513.  0Ah    WORD    unique sequence number
  22514.  0Ch    var    ASCIZ full pathname
  22515.  
  22516. Format of SHARE.EXE lock record:
  22517. Offset    Size    Description
  22518.  00h    WORD    offset in SHARE's DS of next lock table in list
  22519.  02h    DWORD    offset in file of start of locked region
  22520.  06h    DWORD    offset in file of end of locked region
  22521.  0Ah    DWORD    pointer to System File Table entry for this file
  22522.  0Eh    WORD    PSP segment of lock's owner
  22523.  
  22524. Format of DOS 2.x system file tables:
  22525. Offset    Size    Description
  22526.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  22527.  04h    WORD    number of files in this table
  22528.  06h  28h bytes per file
  22529.     Offset    Size    Description
  22530.      00h    BYTE    number of file handles referring to this file
  22531.      01h    BYTE    file open mode (see AH=3Dh)
  22532.      02h    BYTE    file attribute
  22533.      03h    BYTE    drive (0 = character device, 1 = A, 2 = B, etc)
  22534.      04h 11 BYTEs    filename in FCB format (no path,no period,blank-padded)
  22535.      0Fh    WORD    ???
  22536.      11h    WORD    ???
  22537.      13h    DWORD    file size???
  22538.      17h    WORD    file date in packed format (see AX=5700h)
  22539.      19h    WORD    file time in packed format (see AX=5700h)
  22540.      1Bh    BYTE    device attribute (see AX=4400h)
  22541.     ---character device---
  22542.      1Ch    DWORD    pointer to device driver
  22543.     ---block device---
  22544.      1Ch    WORD    starting cluster of file
  22545.      1Eh    WORD    relative cluster in file of last cluster accessed
  22546.     ------
  22547.      20h    WORD    absolute cluster number of current cluster
  22548.      22h    WORD    ???
  22549.      24h    DWORD    current file position???
  22550.  
  22551. Format of DOS 3.0 system file tables and FCB tables:
  22552. Offset    Size    Description
  22553.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  22554.  04h    WORD    number of files in this table
  22555.  06h  38h bytes per file
  22556.     Offset    Size    Description
  22557.      00h-1Eh as for DOS 3.1+ (see below)
  22558.      1Fh    WORD    byte offset of directory entry within sector
  22559.      21h 11 BYTES    filename in FCB format (no path/period, blank-padded)
  22560.      2Ch    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  22561.      30h    WORD    (SHARE.EXE) ??? network machine number
  22562.      32h    WORD    PSP segment of file's owner (first three entries for
  22563.             AUX/CON/PRN contain segment of IO.SYS startup code)
  22564.      34h    WORD    (SHARE.EXE) offset in SHARE code seg of share record
  22565.      36h    WORD    ??? apparently always 0000h
  22566.  
  22567. Format of DOS 3.1-3.3x system file tables and FCB tables:
  22568. Offset    Size    Description
  22569.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  22570.  04h    WORD    number of files in this table
  22571.  06h  35h bytes per file
  22572.     Offset    Size    Description
  22573.      00h    WORD    number of file handles referring to this file
  22574.      02h    WORD    file open mode (see AH=3Dh)
  22575.             bit 15 set if this file opened via FCB
  22576.      04h    BYTE    file attribute (see AX=4301h)
  22577.      05h    WORD    device info word (see AX=4400h)
  22578.             bit 15 set if remote file
  22579.             bit 14 set means do not set file date/time on closing
  22580.             bit 12 set means don't inherit on EXEC
  22581.             bits 5-0 drive number for disk files
  22582.      07h    DWORD    pointer to device driver header if character device
  22583.             else pointer to DOS Drive Parameter Block (see AH=32h)
  22584.      0Bh    WORD    starting cluster of file
  22585.      0Dh    WORD    file time in packed format (see AX=5700h)
  22586.      0Fh    WORD    file date in packed format (see AX=5700h)
  22587.      11h    DWORD    file size
  22588.     ---system file table---
  22589.      15h    DWORD    current offset in file (may be larger than size of
  22590.             file; INT 21/AH=42h does not check new position)
  22591.     ---FCB table---
  22592.      15h    WORD    counter for last I/O to FCB
  22593.      17h    WORD    counter for last open of FCB
  22594.             (these are separate to determine the times of the
  22595.             latest I/O and open)
  22596.     ---
  22597.      19h    WORD    relative cluster within file of last cluster accessed
  22598.      1Bh    WORD    absolute cluster number of last cluster accessed
  22599.             0000h if file never read or written???
  22600.      1Dh    WORD    number of sector containing directory entry
  22601.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  22602.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  22603.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  22604.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  22605.      31h    WORD    PSP segment of file's owner (see AH=26h) (first three
  22606.             entries for AUX/CON/PRN contain segment of IO.SYS
  22607.             startup code)
  22608.      33h    WORD    offset within SHARE.EXE code segment of 
  22609.             sharing record (see above)  0000h = none
  22610.  
  22611. Format of DOS 4.0-5.0 system file tables and FCB tables:
  22612. Offset    Size    Description
  22613.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  22614.  04h    WORD    number of files in this table
  22615.  06h  3Bh bytes per file
  22616.     Offset    Size    Description
  22617.      00h    WORD    number of file handles referring to this file
  22618.      02h    WORD    file open mode (see AH=3Dh)
  22619.             bit 15 set if this file opened via FCB
  22620.      04h    BYTE    file attribute (see AX=4301h)
  22621.      05h    WORD    device info word (see AX=4400h)
  22622.             bit 15 set if remote file
  22623.             bit 14 set means do not set file date/time on closing
  22624.             bit 13 set if named pipe
  22625.             bit 12 set if no inherit
  22626.             bit 11 set if network spooler
  22627.      07h    DWORD    pointer to device driver header if character device
  22628.             else pointer to DOS Drive Parameter Block (see AH=32h)
  22629.             or REDIR data
  22630.      0Bh    WORD    starting cluster of file
  22631.      0Dh    WORD    file time in packed format (see AX=5700h)
  22632.      0Fh    WORD    file date in packed format (see AX=5700h)
  22633.      11h    DWORD    file size
  22634.      15h    DWORD    current offset in file
  22635.     ---local file---
  22636.      19h    WORD    relative cluster within file of last cluster accessed
  22637.      1Bh    DWORD    number of sector containing directory entry
  22638.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  22639.     ---network redirector---
  22640.      19h    DWORD    pointer to REDIRIFS record
  22641.      1Dh  3 BYTEs    ???
  22642.     ------
  22643.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  22644.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  22645.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  22646.      31h    WORD    PSP segment of file's owner (see AH=26h) (first three
  22647.             entries for AUX/CON/PRN contain segment of IO.SYS
  22648.             startup code)
  22649.      33h    WORD    offset within SHARE.EXE code segment of 
  22650.             sharing record (see above)  0000h = none
  22651.      35h    WORD    (local) absolute cluster number of last clustr accessed
  22652.             (redirector) ???
  22653.      37h    DWORD    pointer to IFS driver for file, 0000000h if native DOS
  22654.  
  22655. Format of current directory structure (CDS) (array, LASTDRIVE entries):
  22656. Offset    Size    Description
  22657.  00h 67 BYTEs    ASCIZ path in form X:\PATH (local) or \\MACH\PATH (network)
  22658.  43h    WORD    drive attributes (see also note below and AX=5F07h)
  22659.         bit 15: uses network redirector     \ invalid if 00, installable
  22660.             14: physical drive         / file system if 11
  22661.             13: JOIN'ed      \ path above is true path that would be
  22662.             12: SUBST'ed  / needed if not under SUBST or JOIN
  22663.  45h    DWORD    pointer to Drive Parameter Block for drive (see AH=32h)
  22664. ---local drives---
  22665.  49h    WORD    starting cluster of current directory
  22666.         0000h = root, FFFFh = never accessed
  22667.  4Bh    WORD    ??? seems to be FFFFh always
  22668.  4Dh    WORD    ??? seems to be FFFFh always
  22669. ---network drives---
  22670.  49h    DWORD    pointer to redirector or REDIRIFS record, or FFFFh:FFFFh
  22671.  4Dh    WORD    stored user data from INT 21/AX=5F03h???
  22672. ------
  22673.  4Fh    WORD    offset in current directory path of backslash corresponding to
  22674.           root directory for drive
  22675.         this value specifies how many characters to hide from the
  22676.           "CHDIR" and "GETDIR" calls; normally set to 2 to hide the
  22677.           drive letter and colon, SUBST, JOIN, and networks change it
  22678.           so that only the appropriate portion of the true path is
  22679.           visible to the user
  22680. ---DOS 4.x---
  22681.  51h    BYTE    ??? used by network
  22682.  52h    DWORD    pointer to IFS driver for this drive, 00000000h if native DOS
  22683.  56h    WORD    ???
  22684. Notes:    the path for invalid drives is normally set to X:\, but may be empty
  22685.       after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions
  22686.     normally, only one of bits 13&12 may be set together with bit 14, but
  22687.       DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
  22688.       0001 SUBST, 0101 ASSIGN
  22689.  
  22690. Format of DR-DOS 5.0-6.0 current directory structure entry (array):
  22691. Offset    Size    Description
  22692.  00h 67 BYTEs    ASCIZ pathname of actual root directory for this logical drive
  22693.  43h    WORD    drive attributes
  22694.         1000h SUBSTed drive
  22695.         3000h??? JOINed drive
  22696.         4000h physical drive
  22697.         5000h ASSIGNed drive
  22698.         7000h JOINed drive
  22699.         8000h network drive
  22700.  45h    BYTE    physical drive number (0=A:) if this logical drive is valid
  22701.  46h    BYTE    ??? apparently flags for JOIN and ASSIGN
  22702.  47h    WORD    cluster number of start of parent directory (0000h = root)
  22703.  49h    WORD    entry number of current directory in parent directory
  22704.  4Bh    WORD    cluster number of start of current directory
  22705.  4Dh  2 BYTEs    used for media change detection (details not available)
  22706.  4Fh    WORD    cluster number of SUBST/JOIN "root" directory
  22707.         0000h if physical root directory
  22708.  
  22709. Format of device driver header:
  22710. Offset    Size    Description
  22711.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  22712.  04h    WORD    device attributes
  22713.         Character device:
  22714.            bit 15 set
  22715.            bit 14 IOCTL supported (see AH=44h)
  22716.            bit 13 (DOS 3+) output until busy supported
  22717.            bit 12 reserved
  22718.            bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  22719.            bits 10-8 reserved
  22720.            bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
  22721.                 (see AX=4410h,AX=4411h)
  22722.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  22723.                 (see AX=440Ch,AX=440Dh)
  22724.            bit 5  reserved
  22725.            bit 4  device is special (use INT 29 "fast console output")
  22726.            bit 3  device is CLOCK$ (all reads/writes use transfer
  22727.                 record described below)
  22728.            bit 2  device is NUL
  22729.            bit 1  device is standard output
  22730.            bit 0  device is standard input
  22731.         Block device:
  22732.            bit 15 clear
  22733.            bit 14 IOCTL supported
  22734.            bit 13 non-IBM format
  22735.            bit 12 reserved
  22736.            bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  22737.            bit 10 reserved
  22738.            bit 9  direct I/O not allowed???
  22739.               (set by DOS 3.3 DRIVER.SYS for "new" drives)
  22740.            bit 8  ??? set by DOS 3.3 DRIVER.SYS for "new" drives
  22741.            bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
  22742.                 (see AX=4410h,AX=4411h)
  22743.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  22744.                 implies support for commands 17h and 18h
  22745.                 (see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh)
  22746.            bits 5-2 reserved
  22747.            bit 1   driver supports 32-bit sector addressing
  22748.            bit 0   reserved
  22749.         Note: for European MSDOS 4.0, bit 11 also indicates that bits
  22750.             8-6 contain a version code (000 = DOS 3.0,3.1;
  22751.             001 = DOS 3.2, 010 = European DOS 4.0)
  22752.  06h    WORD    device strategy entry point
  22753.         call with ES:BX -> request header (see INT 2F/AX=0802h)
  22754.  08h    WORD    device interrupt entry point
  22755. ---character device---
  22756.  0Ah  8 BYTEs    blank-padded character device name
  22757. ---block device---
  22758.  0Ah    BYTE    number of subunits (drives) supported by driver
  22759.  0Bh  7 BYTEs    unused
  22760. ---
  22761.  12h    WORD    (CD-ROM driver) reserved, must be 0000h
  22762.  14h    BYTE    (CD-ROM driver) drive letter (must initially be 00h)
  22763.  15h    BYTE    (CD-ROM driver) number of units
  22764.  16h  6 BYTEs    (CD-ROM driver) signature 'MSCDnn' where 'nn' is version 
  22765.             (currently '00')
  22766.  
  22767. Format of CLOCK$ transfer record:
  22768. Offset    Size    Description
  22769.  00h    WORD    number of days since 1-Jan-1980
  22770.  02h    BYTE    minutes
  22771.  03h    BYTE    hours
  22772.  04h    BYTE    hundredths of second
  22773.  05h    BYTE    seconds
  22774.  
  22775. Format of DOS 2.x disk buffer:
  22776. Offset    Size    Description
  22777.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  22778.         least-recently used buffer is first in chain
  22779.  04h    BYTE    drive (0=A, 1=B, etc), FFh if not in use
  22780.  05h  3 BYTEs    unused??? (seems always to be 00h 00h 01h)
  22781.  08h    WORD    logical sector number
  22782.  0Ah    BYTE    number of copies to write (1 for non-FAT sectors)
  22783.  0Bh    BYTE    sector offset between copies if multiple copies to be written
  22784.  0Ch    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  22785.  10h        buffered data
  22786.  
  22787. Format of DOS 3.x disk buffer:
  22788. Offset    Size    Description
  22789.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  22790.         least-recently used buffer is first in chain
  22791.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  22792.  05h    BYTE    flags
  22793.         bit 7: ???
  22794.         bit 6: buffer dirty
  22795.         bit 5: buffer has been referenced
  22796.         bit 4: ???
  22797.         bit 3: sector in data area
  22798.         bit 2: sector in a directory, either root or subdirectory
  22799.         bit 1: sector in FAT
  22800.         bit 0: boot sector??? (guess)
  22801.  06h    WORD    logical sector number
  22802.  08h    BYTE    number of copies to write (1 for non-FAT sectors)
  22803.  09h    BYTE    sector offset between copies if multiple copies to be written
  22804.  0Ah    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  22805.  0Eh    WORD    unused??? (almost always 0)
  22806.  10h        buffered data
  22807.  
  22808. Format of DOS 4.00 (pre UR 25066) disk buffer info:
  22809. Offset    Size    Description
  22810.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  22811.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  22812.  06h    DWORD    pointer to lookahead buffer, zero if not present
  22813.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  22814.  0Ch    BYTE    00h if buffers in EMS (/X), FFh if not
  22815.  0Dh    WORD    EMS handle for buffers, zero if not in EMS
  22816.  0Fh    WORD    EMS physical page number used for buffers (usually 255)
  22817.  11h    WORD    ??? seems always to be 0001h
  22818.  13h    WORD    segment of EMS physical page frame
  22819.  15h    WORD    ??? seems always to be zero
  22820.  17h  4 WORDs    EMS partial page mapping information???
  22821.  
  22822. Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
  22823. Offset    Size    Description
  22824.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  22825.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  22826.  06h    DWORD    pointer to lookahead buffer, zero if not present
  22827.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  22828.  0Ch    BYTE    01h, possibly to distinguish from pre-UR 25066 format
  22829.  0Dh    WORD    ??? EMS segment for BUFFERS (only with /XD)
  22830.  0Fh    WORD    ??? EMS physical page number of EMS seg above (only with /XD)
  22831.  11h    WORD    ??? EMS segment for ??? (only with /XD)
  22832.  13h    WORD    ??? EMS physical page number of above (only with /XD)
  22833.  15h    BYTE    ??? number of EMS page frames present (only with /XD)
  22834.  16h    WORD    segment of one-sector workspace buffer allocated in main memory
  22835.           if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
  22836.           into EMS
  22837.  18h    WORD    EMS handle for buffers, zero if not in EMS
  22838.  1Ah    WORD    EMS physical page number used for buffers (usually 255)
  22839.  1Ch    WORD    ??? appears always to be 0001h
  22840.  1Eh    WORD    segment of EMS physical page frame
  22841.  20h    WORD    ??? appears always to be zero
  22842.  22h    BYTE    00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
  22843.  
  22844. Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
  22845. Offset    Size    Description
  22846.  00h    WORD    EMS logical page number in which chain is resident, -1 if not
  22847.         in EMS
  22848.  02h    DWORD    pointer to least recently used buffer header.  All buffers on
  22849.         this chain are in the same segment.
  22850.  06h    BYTE    number of dirty buffers on this chain
  22851.  07h    BYTE    reserved (00h)
  22852. Notes:    buffered disk sectors are assigned to chain N where N is the sector's
  22853.       address modulo NDBCH,     0 <= N <= NDBCH-1
  22854.     each chain resides completely within one EMS page
  22855.     this structure is in main memory even if buffers are in EMS
  22856.  
  22857. Format of DOS 4.0-5.0 disk buffer:
  22858. Offset    Size    Description
  22859.  00h    WORD    forward ptr, offset only, to next least recently used buffer
  22860.  02h    WORD    backward ptr, offset only
  22861.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  22862.  05h    BYTE    flags
  22863.         bit 7: remote buffer
  22864.         bit 6: buffer dirty
  22865.         bit 5: buffer has been referenced
  22866.         bit 4: search data buffer (only valid if remote buffer)
  22867.         bit 3: sector in data area
  22868.         bit 2: sector in a directory, either root or subdirectory
  22869.         bit 1: sector in FAT
  22870.         bit 0: reserved
  22871.  06h    DWORD    logical sector number
  22872.  0Ah    BYTE    number of copies to write
  22873.         for FAT sectors, same as number of FATs
  22874.         for data and directory sectors, usually 1
  22875.  0Bh    WORD    offset in sectors between copies to write for FAT sectors
  22876.  0Dh    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  22877.  11h    WORD    buffer use count if remote buffer (see flags above)
  22878.  13h    BYTE    reserved
  22879.  14h        buffered data
  22880. Note:    for DOS 4.x, all buffered sectors which have the same hash value
  22881.       (computed as the sum of high and low words of the logical sector
  22882.       number divided by NDBCH) are on the same doubly-linked circular
  22883.       chain; for DOS 5.0, only a single circular chain exists.
  22884.     the links consist of offset addresses only, the segment being the same
  22885.       for all buffers in the chain.
  22886.  
  22887. Format of DOS 5.0 disk buffer info:
  22888. Offset    Size    Description
  22889.  00h    DWORD    pointer to least-recently-used buffer header (may be in HMA)
  22890.         (see above)
  22891.  04h    WORD    0000h (DOS 5 does not hash disk buffers, so offset 00h points
  22892.             directly at the only buffer chain)
  22893.  06h    DWORD    pointer to lookahead buffer, zero if not present
  22894.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  22895.  0Ch    BYTE    buffer location
  22896.         00h base memory, no workspace buffer
  22897.         01h HMA, workspace buffer in base memory
  22898.  0Dh    DWORD    pointer to one-segment workspace buffer in base memory
  22899.  11h  3 BYTEs    unused???
  22900.  14h    WORD    ???
  22901.  16h    BYTE    ??? apparently always 00h
  22902.  17h    BYTE    ??? apparently always FFh
  22903.  18h    BYTE    ??? apparently always 00h
  22904.  19h    BYTE    ??? apparently always 00h
  22905.  1Ah    WORD    ??? segment within HIMEM.SYS area when buffers are in HMA and
  22906.           UMBs are enabled???, else 0000h
  22907.  1Ch    BYTE    bit 0 set iff UMB MCB chain linked to normal MCB chain
  22908.  1Dh    WORD    ???
  22909.  1Fh    WORD    segment of first MCB in upper memory blocks or FFFFh if DOS
  22910.         memory chain in base 640K only (first UMB MCB usually at 9FFFh,
  22911.         locking out video memory with a DOS-owned memory block)
  22912.  21h    WORD    paragraph of start of most recent MCB chain search
  22913.  
  22914. Format of IFS driver list:
  22915. Offset    Size    Description
  22916.  00h    DWORD    pointer to next driver header
  22917.  04h  8 BYTEs    IFS driver name (blank padded), as used by FILESYS command
  22918.  0Ch  4 BYTEs    ???
  22919.  10h    DWORD    pointer to IFS utility function entry point (see below)
  22920.         call with ES:BX -> IFS request (see below)
  22921.  14h    WORD    offset in header's segment of driver entry point
  22922.     ???
  22923.  
  22924. Call IFS utility function entry point with:
  22925.     AH = 20h miscellaneous functions
  22926.         AL = 00h get date
  22927.         Return: CX = year
  22928.             DH = month
  22929.             DL = day
  22930.         AL = 01h get process ID and computer ID
  22931.         Return: BX = current PSP segment
  22932.             DX = active network machine number
  22933.         AL = 05h get file system info
  22934.         ES:DI -> 16-byte info buffer
  22935.         Return: buffer filled
  22936.             Offset    Size    Description
  22937.              00h  2 BYTEs    unused
  22938.              02h    WORD    number of SFTs (actually counts only
  22939.                     the first two file table arrays)
  22940.              04h    WORD    number of FCB table entries
  22941.              06h    WORD    number of proctected FCBs
  22942.              08h  6 BYTEs    unused
  22943.              0Eh    WORD    largest sector size supported
  22944.         AL = 06h get machine name
  22945.         ES:DI -> 18-byte buffer for name
  22946.         Return: buffer filled with name starting at offset 02h
  22947.         AL = 08h get sharing retry count
  22948.         Return: BX = sharing retry count
  22949.         AL = other
  22950.         Return: CF set
  22951.     AH = 21h get redirection state
  22952.         BH = type (03h disk, 04h printer)
  22953.         Return: BH = state (00h off, 01h on)
  22954.     AH = 22h ??? some sort of time calculation
  22955.         AL = 00h ???
  22956.             nonzero ???
  22957.     AH = 23h ??? some sort of time calculation
  22958.     AH = 24h compare filenames
  22959.         DS:SI -> first ASCIZ filename
  22960.         ES:DI -> second ASCIZ filename
  22961.         Return: ZF set if files are same ignoring case and / vs \
  22962.     AH = 25h normalize filename
  22963.         DS:SI -> ASCIZ filename
  22964.         ES:DI -> buffer for result
  22965.         Return: filename uppercased, forward slashes changed to backslashes
  22966.     AH = 26h get DOS stack
  22967.         Return: DS:SI -> top of stack
  22968.             CX = size of stack in bytes
  22969.     AH = 27h increment InDOS flag
  22970.     AH = 28h decrement InDOS flag
  22971. Note:    IFS drivers which do not wish to implement functions 20h or 24h-28h may
  22972.       pass them on to the default handler pointed at by [LoL+37h]
  22973.  
  22974. Format of IFS request block:
  22975. Offset    Size    Description
  22976.  00h    WORD    total size in bytes of request
  22977.  02h    BYTE    class of request
  22978.         02h ???
  22979.         03h redirection
  22980.         04h ???
  22981.         05h file access
  22982.         06h convert error code to string
  22983.         07h ???
  22984.  03h    WORD    returned DOS error code
  22985.  05h    BYTE    IFS driver exit status
  22986.         00h success
  22987.         01h ???
  22988.         02h ???
  22989.         03h ???
  22990.         04h ???
  22991.         FFh internal failure
  22992.  06h 16 BYTEs    ???
  22993. ---request class 02h---
  22994.  16h    BYTE    function code
  22995.         04h ???
  22996.  17h    BYTE    unused???
  22997.  18h    DWORD    pointer to ???
  22998.  1Ch    DWORD    pointer to ???
  22999.  20h  2 BYTEs    ???
  23000. ---request class 03h---
  23001.  16h    BYTE    function code
  23002.  17h    BYTE    ???
  23003.  18h    DWORD    pointer to ???
  23004.  1Ch    DWORD    pointer to ???
  23005.  22h    WORD    returned ???
  23006.  24h    WORD    returned ???
  23007.  26h    WORD    returned ???
  23008.  28h    BYTE    returned ???
  23009.  29h    BYTE    unused???
  23010. ---request class 04h---
  23011.  16h    DWORD    pointer to ???
  23012.  1Ah    DWORD    pointer to ???
  23013. ---request class 05h---
  23014.  16h    BYTE    function code
  23015.         01h flush disk buffers
  23016.         02h get disk space
  23017.         03h MKDIR
  23018.         04h RMDIR
  23019.         05h CHDIR
  23020.         06h delete file
  23021.         07h rename file
  23022.         08h search directory
  23023.         09h file open/create
  23024.         0Ah LSEEK
  23025.         0Bh read from file
  23026.         0Ch write to file
  23027.         0Dh lock region of file
  23028.         0Eh commit/close file
  23029.         0Fh get/set file attributes
  23030.         10h printer control
  23031.         11h ???
  23032.         12h process termination
  23033.         13h ???
  23034.     ---class 05h function 01h---
  23035.      17h  7    BYTEs    ???
  23036.      1Eh    DWORD    pointer to ???
  23037.      22h  4 BYTEs    ???
  23038.      26h    BYTE    ???
  23039.      27h    BYTE    ???
  23040.     ---class 05h function 02h---
  23041.      17h  7 BYTEs    ???
  23042.      1Eh    DWORD    pointer to ???
  23043.      22h  4 BYTEs    ???
  23044.      26h    WORD    returned total clusters
  23045.      28h    WORD    returned sectors per cluster
  23046.      2Ah    WORD    returned bytes per sector
  23047.      2Ch    WORD    returned available clusters
  23048.      2Eh    BYTE    returned ???
  23049.      2Fh    BYTE    ???
  23050.     ---class 05h functions 03h,04h,05h---
  23051.      17h  7 BYTEs    ???
  23052.      1Eh    DWORD    pointer to ???
  23053.      22h  4 BYTEs    ???
  23054.      26h    DWORD    pointer to directory name
  23055.     ---class 05h function 06h---
  23056.      17h  7 BYTEs    ???
  23057.      1Eh    DWORD    pointer to ???
  23058.      22h  4 BYTEs    ???
  23059.      26h    WORD    attribute mask
  23060.      28h    DWORD    pointer to filename
  23061.     ---class 05h function 07h---
  23062.      17h  7 BYTEs    ???
  23063.      1Eh    DWORD    pointer to ???
  23064.      22h  4 BYTEs    ???
  23065.      26h    WORD    attribute mask
  23066.      28h    DWORD    pointer to source filespec
  23067.      2Ch    DWORD    pointer to destination filespec
  23068.     ---class 05h function 08h---
  23069.      17h  7 BYTEs    ???
  23070.      1Eh    DWORD    pointer to ???
  23071.      22h  4 BYTEs    ???
  23072.      26h    BYTE    00h FINDFIRST
  23073.             01h FINDNEXT
  23074.      28h    DWORD    pointer to FindFirst search data + 01h if FINDNEXT
  23075.      2Ch    WORD    search attribute if FINDFIRST
  23076.      2Eh    DWORD    pointer to filespec if FINDFIRST
  23077.     ---class 05h function 09h---
  23078.      17h  7 BYTEs    ???
  23079.      1Eh    DWORD    pointer to ???
  23080.      22h    DWORD    pointer to IFS open file structure (see below)
  23081.      26h    WORD    ???  \ together, specify open vs. create, whether or
  23082.      28h    WORD    ???  / not to truncate
  23083.      2Ah  4 BYTEs    ???
  23084.      2Eh    DWORD    pointer to filename
  23085.      32h  4 BYTEs    ???
  23086.      36h    WORD    file attributes on call
  23087.             returned ???
  23088.      38h    WORD    returned ???
  23089.     ---class 05h function 0Ah---
  23090.      17h  7 BYTEs    ???
  23091.      1Eh    DWORD    pointer to ???
  23092.      22h    DWORD    pointer to IFS open file structure (see below)
  23093.      26h    BYTE    seek type (02h = from end)
  23094.      28h    DWORD    offset on call
  23095.             returned new absolute position
  23096.     ---class 05h functions 0Bh,0Ch---
  23097.      17h  7 BYTEs    ???
  23098.      1Eh    DWORD    pointer to ???
  23099.      22h    DWORD    pointer to IFS open file structure (see below)
  23100.      28h    WORD    number of bytes to transfer
  23101.             returned bytes actually transferred
  23102.      2Ah    DWORD    transfer address
  23103.     ---class 05h function 0Dh---
  23104.      17h  7 BYTEs    ???
  23105.      1Eh    DWORD    pointer to ???
  23106.      22h    DWORD    pointer to IFS open file structure (see below)
  23107.      26h    BYTE    file handle???
  23108.      27h    BYTE    unused???
  23109.      28h    WORD    ???
  23110.      2Ah    WORD    ???
  23111.      2Ch    WORD    ???
  23112.      2Eh    WORD    ???
  23113.     ---class 05h function 0Eh---
  23114.      17h  7 BYTEs    ???
  23115.      1Eh    DWORD    pointer to ???
  23116.      22h    DWORD    pointer to IFS open file structure (see below)
  23117.      26h    BYTE    00h commit file
  23118.             01h close file
  23119.      27h    BYTE    unused???
  23120.     ---class 05h function 0Fh---
  23121.      17h  7 BYTEs    ???
  23122.      1Eh    DWORD    pointer to ???
  23123.      22h  4 BYTEs    ???
  23124.      26h    BYTE    02h GET attributes
  23125.             03h PUT attributes
  23126.      27h    BYTE    unused???
  23127.      28h 12 BYTEs    ???
  23128.      34h    WORD    search attributes???
  23129.      36h    DWORD    pointer to filename
  23130.      3Ah    WORD    (GET) returned ??? 
  23131.      3Ch    WORD    (GET) returned ???
  23132.      3Eh    WORD    (GET) returned ???
  23133.      40h    WORD    (GET) returned ???
  23134.      42h    WORD    (PUT) new attributes
  23135.             (GET) returned attributes
  23136.     ---class 05h function 10h---
  23137.      17h  7 BYTEs    ???
  23138.      1Eh    DWORD    pointer to ???
  23139.      22h    DWORD    pointer to IFS open file structure (see below)
  23140.      26h    WORD    ???
  23141.      28h    DWORD    pointer to ???
  23142.      2Ch    WORD    ???
  23143.      2Eh    BYTE    ???
  23144.      2Fh    BYTE    subfunction
  23145.             01h get printer setup
  23146.             03h ???
  23147.             04h ???
  23148.             05h ???
  23149.             06h ???
  23150.             07h ???
  23151.             21h set printer setup
  23152.     ---class 05h function 11h---
  23153.      17h  7 BYTEs    ???
  23154.      1Eh    DWORD    pointer to ???
  23155.      22h    DWORD    pointer to IFS open file structure (see below)
  23156.      26h    BYTE    subfunction
  23157.      27h    BYTE    unused???
  23158.      28h    WORD    ???
  23159.      2Ah    WORD    ???
  23160.      2Ch    WORD    ???
  23161.      2Eh    BYTE    ???
  23162.      2Fh    BYTE    ???
  23163.     ---class 05h function 12h---
  23164.      17h 15 BYTEs    unused???
  23165.      26h    WORD    PSP segment
  23166.      28h    BYTE    type of process termination
  23167.      29h    BYTE    unused???
  23168.     ---class 05h function 13h---
  23169.      17h 15 BYTEs    unused???
  23170.      26h    WORD    PSP segment
  23171. ---request class 06h---
  23172.  16h    DWORD    returned pointer to string corresponding to error code at 03h
  23173.  1Ah    BYTE    returned ???
  23174.  1Bh    BYTE    unused
  23175. ---request class 07h---
  23176.  16h    DWORD    pointer to IFS open file structure (see below)
  23177.  1Ah    BYTE    ???
  23178.  1Bh    BYTE    unused???
  23179.  
  23180. Format of IFS open file structure:
  23181. Offset    Size    Description
  23182.  00h    WORD    ???
  23183.  02h    WORD    device info word
  23184.  04h    WORD    file open mode
  23185.  06h    WORD    ???
  23186.  08h    WORD    file attributes
  23187.  0Ah    WORD    owner's network machine number
  23188.  0Ch    WORD    owner's PSP segment
  23189.  0Eh    DWORD    file size
  23190.  12h    DWORD    current offset in file
  23191.  16h    WORD    file time
  23192.  18h    WORD    file date
  23193.  1Ah 11 BYTEs    filename in FCB format
  23194.  25h    WORD    ???
  23195.  27h    WORD    hash value of SFT address
  23196.         (low word of linear address + segment&F000h)
  23197.  29h  3 WORDs    network info from SFT
  23198.  2Fh    WORD    ???
  23199.  
  23200. Format of one item in DOS 4+ list of special program names:
  23201. Offset    Size    Description
  23202.  00h    BYTE    length of name (00h = end of list)
  23203.  01h  N BYTEs    name in format name.ext
  23204.  N    2 BYTEs    DOS version to return for program (major,minor)
  23205.         (see AH=30h,INT 2F/AX=122Fh)
  23206. ---DOS 4 only---
  23207.  N+2    BYTE    number of times to return fake version number (FFh = always)
  23208. Note:    if the name of the executable for the program making the DOS "get
  23209.       version" call matches one of the names in this list, DOS returns the
  23210.       specified version rather than the true version number
  23211. ----------215252-----------------------------
  23212. INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK
  23213.     AX = 5252h
  23214. Return: BX = FFEEh if resident
  23215. SeeAlso: AX=4BFFh"Cascade",AX=58CCh
  23216. ----------2153-------------------------------
  23217. INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
  23218.     AH = 53h
  23219.     DS:SI -> BIOS Parameter Block (see below)
  23220.     ES:BP -> buffer for Drive Parameter Block (see AH=32h for format)
  23221. Return: ES:BP buffer filled
  23222. Note:    for DOS 3+, the cluster at which to start searching is set to 0000h
  23223.       and the number of free clusters is set to FFFFh (unknown)
  23224.  
  23225. Format of BIOS Parameter Block:
  23226. Offset    Size    Description
  23227.  00h    WORD    number of bytes per sector
  23228.  02h    BYTE    number of sectors per cluster
  23229.  03h    WORD    number of reserved sectors at start of disk
  23230.  05h    BYTE    number of FATs
  23231.  06h    WORD    number of entries in root directory
  23232.  08h    WORD    total number of sectors
  23233.         for DOS 4+, set to zero if partition >32M, then set DWORD at
  23234.           15h to actual number of sectors
  23235.  0Ah    BYTE    media ID byte
  23236.  0Bh    WORD    number of sectors per FAT
  23237. ---DOS 3+---
  23238.  0Dh    WORD    number of sectors per track
  23239.  0Fh    WORD    number of heads
  23240.  11h    DWORD    number of hidden sectors
  23241.  15h 11 BYTEs    reserved    
  23242. ---DOS 4+ ---
  23243.  15h    DWORD    total number of sectors if word at 08h contains zero
  23244.  19h  6 BYTEs    ???
  23245.  1Fh    WORD    number of cylinders
  23246.  21h    BYTE    device type
  23247.  22h    WORD    device attributes (removable or not, etc)
  23248. ---European MSDOS 4.00---
  23249.  15h    DWORD    total number of sectors if word at 08h contains zero
  23250.         (however, this DOS does not actually implement >32M partitions)
  23251. ----------2154-------------------------------
  23252. INT 21 - DOS 2+ - GET VERIFY FLAG
  23253.     AH = 54h
  23254. Return: AL = verify flag
  23255.         00h off
  23256.         01h on (all disk writes verified after writing)
  23257. SeeAlso: AH=2Eh
  23258. ----------2155-------------------------------
  23259. INT 21 - DOS 2+ internal - CREATE CHILD PSP
  23260.     AH = 55h
  23261.     DX = segment at which to create new PSP
  23262.     SI = (DOS 3+) value to place in memory size field at DX:[0002h]
  23263. Return: CF clear if successful
  23264.  
  23265. Notes:    creates a "child" PSP rather than making an exact copy of the current
  23266.       PSP; the new PSP's parent pointer is set to the current PSP and the
  23267.       reference count for each inherited file is incremented
  23268.     (DOS 2+) sets current PSP to DX
  23269.     (DOS 3+) marks "no inherit" file handles as closed in child PSP
  23270. SeeAlso: AH=26h,AH=50h
  23271. ----------2156-------------------------------
  23272. INT 21 - DOS 2+ - "RENAME" - RENAME FILE
  23273.     AH = 56h
  23274.     DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
  23275.     ES:DI -> ASCIZ new filename (no wildcards)
  23276.     CL = attribute mask (server call only, see below)
  23277. Return: CF clear if successful
  23278.     CF set on error
  23279.         AX = error code (02h,03h,05h,11h) (see AH=59h)
  23280. Notes:    allows move between directories on same logical volume
  23281.     does not set the archive attribute (see AX=4300h), which results in
  23282.       incremental backups not backing up the file under its new name
  23283.     open files should not be renamed
  23284.     (DOS 3+) allows renaming of directories
  23285.     (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  23286.       error 12h (no more files) is returned on success, and both source and
  23287.       destination specs must be canonical (as returned by AH=60h).
  23288.       Wildcards in the destination are replaced by the corresponding char
  23289.       of each source file being renamed.  Under DOS 3.x, the call will fail
  23290.       if the destination wildcard is *.* or equivalent.  When invoked via
  23291.       AX=5D00h, only those files matching the attribute mask in CL are
  23292.       renamed.
  23293.     under the FlashTek X-32 DOS extender, the old-name pointer is in DS:EDX
  23294.       and the new-name pointer is in ES:EDI (DS must equal ES)
  23295. SeeAlso: AH=17h,AX=4301h,AH=60h,AX=5D00h
  23296. ----------215700-----------------------------
  23297. INT 21 - DOS 2+ - GET FILE'S DATE AND TIME
  23298.     AX = 5700h
  23299.     BX = file handle
  23300. Return: CF clear if successful
  23301.         CX = file's time
  23302.         bits 15-11: hours (0-23)
  23303.              10-5:  minutes
  23304.               4-0:  seconds/2
  23305.         DX = file's date
  23306.         bits 15-9: year - 1980
  23307.               8-5: month
  23308.               4-0: day
  23309.     CF set on error
  23310.         AX = error code (01h,06h) (see AH=59h)
  23311. SeeAlso: AX=5701h
  23312. ----------215701-----------------------------
  23313. INT 21 - DOS 2+ - SET FILE'S DATE AND TIME
  23314.     AX = 5701h
  23315.     BX = file handle
  23316.     CX = new time (see AX=5700h)
  23317.     DX = new date (see AX=5700h)
  23318. Return: CF clear if successful
  23319.     CF set on error
  23320.         AX = error code (01h,06h) (see AH=59h)
  23321. SeeAlso: AX=5700h
  23322. ----------215702-----------------------------
  23323. INT 21 - DOS 4.x only - GET ???
  23324.     AX = 5702h
  23325.     BX = ??? (0000h through 0004h)
  23326.     DS:SI -> ???
  23327.     ES:DI -> result buffer
  23328.     CX = size of result buffer
  23329. Return: CX = size of returned data
  23330. SeeAlso: AX=5703h,AX=5704h
  23331. ----------215703-----------------------------
  23332. INT 21 - DOS 4.x only - GET ???
  23333.     AX = 5703h
  23334.     BX = file handle (only 0000h through 0004h valid)
  23335.     DS:SI -> ??? passed through to INT 2F/AX=112Dh
  23336.     ES:DI -> result buffer
  23337.     CX = size of result buffer
  23338. Return: CX = size of returned data
  23339.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  23340. SeeAlso: AX=5702h,AX=5704h,INT 2F/AX=112Dh
  23341. ----------215704-----------------------------
  23342. INT 21 - DOS 4.x only - TRUNCATE OPEN FILE TO ZERO LENGTH
  23343.     AX = 5704h
  23344.     BX = file handle (only 0000h through 0004h valid)
  23345.     DS:SI -> ??? passed through to INT 2F/AX=112Dh
  23346.     ES:DI -> result buffer
  23347.     CX = size of result buffer
  23348. Return: CX = size of returned data
  23349.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  23350. SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh
  23351. ----------2158-------------------------------
  23352. INT 21 - DOS 3+ - GET OR SET MEMORY ALLOCATION STRATEGY
  23353.     AH = 58h
  23354.     AL = subfunction
  23355.         00h get allocation strategy
  23356.         Return: AX = current strategy
  23357.                 00h low memory first fit
  23358.                 01h low memory best fit
  23359.                 02h low memory last fit
  23360.              ---DOS 5.0---
  23361.                 40h high memory first fit
  23362.                 41h high memory best fit
  23363.                 42h high memory last fit
  23364.                 80h first fit, try high then low memory
  23365.                 81h best fit, try high then low memory
  23366.                 82h last fit, try high then low memory
  23367.         01h set allocation strategy
  23368.         BL = new allocation strategy (see above)
  23369.         BH = 00h (DOS 5.0)
  23370. Return: CF clear if successful
  23371.     CF set on error
  23372.         AX = error code (01h) (see AH=59h)
  23373. Notes:    the Set subfunction accepts any value in BL for DOS 3.x and 4.x;
  23374.       2 or greater means last fit
  23375.     the Get subfunction returns the last value set
  23376.     a program which changes the allocation strategy should restore it
  23377.       before terminating
  23378.     Toshiba MSDOS 2.11 supports subfunctions 00h and 01h
  23379.     DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h
  23380. SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h,INT 67/AH=3Fh
  23381. ----------2158-------------------------------
  23382. INT 21 - DOS 5.0 - GET OR SET UMB LINK STATE
  23383.     AH = 58h
  23384.     AL = subfunction
  23385.         02h get UMB link state
  23386.         Return: AL = 00h UMBs not part of DOS memory chain
  23387.                = 01h UMBs in DOS memory chain
  23388.         03h set UMB link state
  23389.         BX = 0000h remove UMBs from DOS memory chain
  23390.            = 0001h add UMBs to DOS memory chain
  23391. Return: CF clear if successful
  23392.     CF set on error
  23393.         AX = error code (01h) (see AH=59h)
  23394. Note:    a program which changes the UMB link state should restore it before
  23395.       terminating
  23396. ----------2158CC-----------------------------
  23397. INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
  23398.     AX = 58CCh
  23399. Return: CF clear if resident
  23400. SeeAlso: AX=5252h,AX=6969h
  23401. ----------2159--BX0000-----------------------
  23402. INT 21 - DOS 3+ - GET EXTENDED ERROR INFORMATION
  23403.     AH = 59h
  23404.     BX = 0000h
  23405. Return: AX = extended error code (see below)
  23406.     BH = error class (see below)
  23407.     BL = recommended action (see below)
  23408.     CH = error locus (see below)
  23409.     ES:DI may be pointer (see error code list below)
  23410.     CL, DX, SI, BP, and DS destroyed
  23411. Notes:    functions available under DOS 2.x map the true DOS 3+ error code into
  23412.       one supported under DOS 2.x
  23413.     you should call this function to retrieve the true error code when an
  23414.       FCB or DOS 2.x call returns an error
  23415. SeeAlso: AX=5D0Ah,INT 2F/AX=122Dh
  23416.  
  23417. Values for extended error code:
  23418.     00h no error
  23419.     01h function number invalid
  23420.     02h file not found
  23421.     03h path not found
  23422.     04h too many open files (no handles available)
  23423.     05h access denied
  23424.     06h invalid handle
  23425.     07h memory control block destroyed
  23426.     08h insufficient memory
  23427.     09h memory block address invalid
  23428.     0Ah environment invalid (usually >32K in length)
  23429.     0Bh format invalid
  23430.     0Ch access code invalid
  23431.     0Dh data invalid
  23432.     0Eh reserved
  23433.     0Fh invalid drive
  23434.     10h attempted to remove current directory
  23435.     11h not same device
  23436.     12h no more files
  23437. ---DOS 3+---
  23438.     13h disk write-protected
  23439.     14h unknown unit
  23440.     15h drive not ready
  23441.     16h unknown command
  23442.     17h data error (CRC)
  23443.     18h bad request structure length
  23444.     19h seek error
  23445.     1Ah unknown media type (non-DOS disk)
  23446.     1Bh sector not found
  23447.     1Ch printer out of paper
  23448.     1Dh write fault
  23449.     1Eh read fault
  23450.     1Fh general failure
  23451.     20h sharing violation
  23452.     21h lock violation
  23453.     22h disk change invalid
  23454.         ES:DI -> ASCIZ volume label of required disk
  23455.     23h FCB unavailable
  23456.     24h sharing buffer overflow
  23457.     25h (DOS 4+) code page mismatch
  23458.     26h (DOS 4+) cannot complete file operation (out of input)
  23459.     27h (DOS 4+) insufficient disk space
  23460.     28h-31h reserved
  23461.     32h network request not supported
  23462.     33h remote computer not listening
  23463.     34h duplicate name on network
  23464.     35h network name not found
  23465.     36h network busy
  23466.     37h network device no longer exists
  23467.     38h network BIOS command limit exceeded
  23468.     39h network adapter hardware error
  23469.     3Ah incorrect response from network
  23470.     3Bh unexpected network error
  23471.     3Ch incompatible remote adapter
  23472.     3Dh print queue full
  23473.     3Eh queue not full
  23474.     3Fh not enough space to print file
  23475.     40h network name was deleted
  23476.     41h network: Access denied
  23477.     42h network device type incorrect
  23478.     43h network name not found
  23479.     44h network name limit exceeded
  23480.     45h network BIOS session limit exceeded
  23481.     46h temporarily paused
  23482.     47h network request not accepted
  23483.     48h network print/disk redirection paused
  23484.     49h (LANtastic) invalid network version
  23485.     4Ah (LANtastic) account expired
  23486.     4Bh (LANtastic) password expired
  23487.     4Ch (LANtastic) login attempt invalid at this time
  23488.     4Dh (LANtastic v3+) disk limit exceeded on network node
  23489.     4Eh (LANtastic v3+) not logged in to network node
  23490.     4Fh reserved
  23491.     50h file exists
  23492.     51h reserved
  23493.     52h cannot make directory
  23494.     53h fail on INT 24h
  23495.     54h (DOS 3.3+) too many redirections
  23496.     55h (DOS 3.3+) duplicate redirection
  23497.     56h (DOS 3.3+) invalid password
  23498.     57h (DOS 3.3+) invalid parameter
  23499.     58h (DOS 3.3+) network write fault
  23500.     59h (DOS 4+) function not supported on network
  23501.     5Ah (DOS 4+) required system component not installed
  23502.  
  23503. Values for Error Class:
  23504.     01h out of resource (storage space or I/O channels)
  23505.     02h temporary situation (file or record lock)
  23506.     03h authorization (denied access)
  23507.     04h internal (system software bug)
  23508.     05h hardware failure
  23509.     06h system failure (configuration file missing or incorrect)
  23510.     07h application program error
  23511.     08h not found
  23512.     09h bad format
  23513.     0Ah locked
  23514.     0Bh media error
  23515.     0Ch already exists
  23516.     0Dh unknown
  23517.  
  23518. Values for Suggested Action:
  23519.     01h retry
  23520.     02h delayed retry
  23521.     03h prompt user to reenter input
  23522.     04h abort after cleanup
  23523.     05h immediate abort
  23524.     06h ignore
  23525.     07h retry after user intervention
  23526.  
  23527. Values for Error Locus:
  23528.     01h unknown or not appropriate
  23529.     02h block device (disk error)
  23530.     03h network related
  23531.     04h serial device (timeout)
  23532.     05h memory related
  23533. ----------2159--BX0001-----------------------
  23534. INT 21 - European MSDOS 4.0 - GET HARD ERROR INFORMATION
  23535.     AH = 59h
  23536.     BX = 0001h
  23537. Return: ES:DI -> hard error information packet (see below) for most recent
  23538.         hard (critical) error
  23539. SeeAlso: AH=95h,INT 24
  23540.  
  23541. Format of hard error information packet:
  23542. Offset    Size    Description
  23543.  00h    WORD    contents of AX at system entry
  23544.  02h    WORD    Process ID which encountered error
  23545.  04h    WORD    contents of AX at time of error
  23546.  06h    BYTE    error type
  23547.         00h physical I/O error
  23548.         01h disk change request
  23549.         02h file sharing violation
  23550.         03h FCB problem
  23551.         04h file locking violation
  23552.         05h bad FAT
  23553.         06h network detected error
  23554.  07h    BYTE    INT 24 error code
  23555.  08h    WORD    extended error code (see AH=59h/BX=0000h)
  23556.  0Ah    DWORD    pointer to associated device
  23557. ----------215A-------------------------------
  23558. INT 21 - DOS 3+ - CREATE TEMPORARY FILE
  23559.     AH = 5Ah
  23560.     CX = file attribute (see AX=4301h)
  23561.     DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the
  23562.         generated filename
  23563. Return: CF clear if successful
  23564.         AX = file handle opened for read/write in compatibility mode
  23565.         DS:DX pathname extended with generated name for temporary file
  23566.     CF set on error
  23567.         AX = error code (03h,04h,05h) (see AH=59h)
  23568. Notes:    creates a file with a unique name which must be explicitly deleted
  23569.     COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
  23570.       wraps around to the end of the segment
  23571.     under the FlashTek X-32 DOS extender, the path pointer is in DS:EDX
  23572. SeeAlso: AH=3Ch,AH=5Bh
  23573. ----------215B-------------------------------
  23574. INT 21 - DOS 3+ - CREATE NEW FILE
  23575.     AH = 5Bh
  23576.     CX = file attribute (see AX=4301h)
  23577.     DS:DX -> ASCIZ filename
  23578. Return: CF clear if successful
  23579.         AX = file handle opened for read/write in compatibility mode
  23580.     CF set on error
  23581.         AX = error code (03h,04h,05h,50h) (see AH=59h)
  23582. Notes:    unlike AH=3Ch, this function will fail if the specified file exists
  23583.       rather than truncating it; this permits its use in creating semaphore
  23584.       files because it is an atomic "test and set" operation
  23585.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  23586. SeeAlso: AH=3Ch,AH=5Ah
  23587. ----------215C-------------------------------
  23588. INT 21 - DOS 3+ - "FLOCK" - RECORD LOCKING
  23589.     AH = 5Ch
  23590.     AL = subfunction
  23591.         00h lock region of file
  23592.         01h unlock region of file
  23593.     BX = file handle
  23594.     CX:DX = start offset of region within file
  23595.     SI:DI = length of region in bytes
  23596. Return: CF clear if successful
  23597.     CF set on error
  23598.         AX = error code (01h,06h,21h,24h) (see AH=59h)
  23599. Notes:    error returned unless SHARE or network installed
  23600.     an unlock call must specify the same region as some prior lock call
  23601.     locked regions become entirely inaccessible to other processes
  23602.     duplicate handles created with AH=45h or AH=46h inherit locks, but
  23603.       handles inherited by child processes (see AH=4Bh) do not
  23604. SeeAlso: AX=440Bh,AH=BCh,AH=BEh,INT 2F/AX=110Ah,INT 2F/AX=110Bh
  23605. ----------215D00-----------------------------
  23606. INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL
  23607.     AX = 5D00h
  23608.     DS:DX -> DOS parameter list (see below)
  23609.     DPL contains all register values for a call to INT 21h
  23610. Return: as appropriate for function being called
  23611. Notes:    does not check AH.  Out of range values will crash the system
  23612.     executes using specified computer ID and process ID
  23613.     sharing delay loops skipped
  23614.     a special sharing mode is enabled
  23615.     wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h)
  23616.     an extra file attribute parameter is enabled for OPEN (AH=3Dh),
  23617.       DELETE (AH=41h), and RENAME (AH=56h)
  23618.     functions which take filenames require canonical names (as returned
  23619.       by AH=60h); this is apparently to prevent multi-hop file forwarding
  23620. SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h
  23621.  
  23622. Format of DOS parameter list:
  23623. Offset    Size    Description
  23624.  00h    WORD    AX 
  23625.  02h    WORD    BX
  23626.  04h    WORD    CX
  23627.  06h    WORD    DX
  23628.  08h    WORD    SI
  23629.  0Ah    WORD    DI
  23630.  0Ch    WORD    DS
  23631.  0Eh    WORD    ES
  23632.  10h    WORD    reserved (0)
  23633.  12h    WORD    computer ID (0 = current system)
  23634.  14h    WORD    process ID (PSP segment on specified computer)
  23635. ----------215D01-----------------------------
  23636. INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
  23637.     AX = 5D01h
  23638.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  23639.         process ID fields used
  23640. Return: CF set on error
  23641.         AX = error code (see AH=59h)
  23642.     CF clear if successful
  23643. Notes:    flushes buffers and updates directory entries for each file which has
  23644.       been written to; if remote file, calls INT 2F/AX=1107h
  23645.     the computer ID and process ID are stored but ignored under DOS 3.3
  23646. SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h
  23647. ----------215D02-----------------------------
  23648. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
  23649.     AX = 5D02h
  23650.     DS:DX -> DOS parameter list (see AX=5D00h), only fields DX, DS,
  23651.         computer ID, and process ID used
  23652.     DPL's DS:DX -> ASCIZ name of file to close
  23653. Return: CF set on error
  23654.         AX = error code (see AH=59h)
  23655.     CF clear if successful
  23656. Notes:    error unless SHARE is loaded (calls [SysFileTable-28h]) (see AH=52h)
  23657.     name must be canonical fully-qualified, such as returned by AH=60h
  23658. SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h
  23659. ----------215D03-----------------------------
  23660. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
  23661.     AX = 5D03h
  23662.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID used
  23663. Return: CF set on error
  23664.         AX = error code (see AH=59h)
  23665.     CF clear if successful
  23666. Note:    error unless SHARE is loaded (calls [SysFileTable-30h]) (see AH=52h)
  23667. SeeAlso: AX=5D02h,AX=5D04h
  23668. ----------215D04-----------------------------
  23669. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
  23670.     AX = 5D04h
  23671.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  23672.         process ID fields used
  23673. Return: CF set on error
  23674.         AX = error code (see AH=59h)
  23675.     CF clear if successful
  23676. Note:    error unless SHARE is loaded (calls [SysFileTable-2Ch]) (see AH=52h)
  23677. SeeAlso: AX=5D02h,AX=5D03h,INT 2F/AX=111Dh
  23678. ----------215D05-----------------------------
  23679. INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
  23680.     AX = 5D05h
  23681.     DS:DX -> DOS parameter list (see AX=5D00h)
  23682.     DPL's BX = index of sharing record (see AH=52h)
  23683.     DPL's CX = index of SFT in sharing record's SFT list
  23684. Return: CF clear if successful
  23685.         ES:DI -> ASCIZ filename
  23686.         BX = network machine number of SFT's owner
  23687.         CX = number of locks held by SFT's owner
  23688.     CF set if either index out of range
  23689.         AX = 0012h (no more files)
  23690. Notes:    error unless SHARE is loaded (calls [SysFileTable-18h]) (see AH=52h)
  23691.     names are always canonical fully-qualified, such as returned by AH=60h
  23692. SeeAlso: AH=5Ch,AH=60h 
  23693. ----------215D06-----------------------------
  23694. INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
  23695.     AX = 5D06h
  23696. Return: CF set on error
  23697.        AX = error code (see AH=59h)
  23698.     CF clear if successful
  23699.         DS:SI -> nonreentrant data area (includes all three DOS stacks)
  23700.         (critical error flag is first byte)
  23701.         CX = size in bytes of area which must be swapped while in DOS
  23702.         DX = size in bytes of area which must always be swapped
  23703. Notes:    the Critical Error flag is used in conjunction with the InDOS flag
  23704.       (see AH=34h) to determine when it is safe to enter DOS from a TSR
  23705.     setting CritErr flag allows use of functions 50h/51h from INT 28h under
  23706.       DOS 2.x by forcing use of correct stack
  23707.     swapping the data area allows reentering DOS unless DOS is in a
  23708.       critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
  23709.     under DOS 4.0, AX=5D0Bh should be used instead of this function
  23710. SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  23711.  
  23712. Format of DOS 3.10-3.30 Swappable Data Area:
  23713. Offset    Size    Description
  23714.  00h    BYTE    critical error flag
  23715.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  23716.  02h    BYTE    drive on which current critical error occurred, or FFh
  23717.  03h    BYTE    locus of last error
  23718.  04h    WORD    extended error code of last error
  23719.  06h    BYTE    suggested action for last error
  23720.  07h    BYTE    class of last error
  23721.  08h    DWORD    ES:DI pointer for last error
  23722.  0Ch    DWORD    current DTA
  23723.  10h    WORD    current PSP
  23724.  12h    WORD    stores SP across an INT 23
  23725.  14h    WORD    return code from last process termination (zerod after reading
  23726.         with AH=4Dh)
  23727.  16h    BYTE    current drive
  23728.  17h    BYTE    extended break flag
  23729. ---remainder need only be swapped if in DOS---
  23730.  18h    WORD    value of AX on call to INT 21
  23731.  1Ah    WORD    PSP segment for sharing/network
  23732.  1Ch    WORD    network machine number for sharing/network (0000h = us)
  23733.  1Eh    WORD    first usable memory block found when allocating memory
  23734.  20h    WORD    best usable memory block found when allocating memory
  23735.  22h    WORD    last usable memory block found when allocating memory
  23736.  24h    WORD    memory size in paragraphs (used only during initialization)
  23737.  26h    WORD    ???
  23738.  28h    BYTE    INT 24 returned Fail
  23739.  29h    BYTE    bit flags for allowable actions on INT 24
  23740.  2Ah    BYTE    ??? flag
  23741.  2Bh    BYTE    FFh if Ctrl-Break termination, 00h otherwise
  23742.  2Ch    BYTE    ??? flag of some kind
  23743.  2Dh    BYTE    ??? (doesn't seem to be referenced)
  23744.  2Eh    BYTE    day of month
  23745.  2Fh    BYTE    month
  23746.  30h    WORD    year - 1980
  23747.  32h    WORD    number of days since 1-1-1980
  23748.  34h    BYTE    day of week (0 = Sunday)
  23749.  35h    BYTE    working SFT pointer at SDA+2AAh is valid ???
  23750.  36h    BYTE    safe to call INT 28 if nonzero
  23751.  37h    BYTE    flag: if nonzero, INT 24 abort turned into INT 24 fail
  23752.         (set only during process termination)
  23753.  38h 26 BYTEs    device driver request header (see INT 2F/AX=0802h)
  23754.  52h    DWORD    pointer to device driver entry point (used in calling driver)
  23755.  56h 22 BYTEs    device driver request header
  23756.  6Ch 22 BYTEs    device driver request header
  23757.  82h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  23758.  83h    BYTE    ??? apparently not referenced by kernel
  23759.  84h  3 BYTEs    24-bit user number (see AH=30h)
  23760.  87h    BYTE    OEM number (see AH=30h)
  23761.  88h  2 BYTEs    ???
  23762.  8Ah  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  23763.  90h    BYTE    ??? buffer for single-byte I/O functions
  23764.  91h    BYTE    ??? apparently not referenced by kernel
  23765.  92h 128 BYTEs    buffer for filename
  23766. 112h 128 BYTEs    buffer for filename
  23767. 192h 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  23768. 1A7h 32 BYTEs    directory entry for found file
  23769. 1C7h 81 BYTEs    copy of current directory structure for drive being accessed
  23770. 218h 11 BYTEs    FCB-format filename for device name comparison
  23771. 223h    BYTE    unused???
  23772. 224h 11 BYTEs    wildcard destination specification for rename (FCB format)
  23773. 22Fh  2 BYTEs    ???
  23774. 231h    WORD    ???
  23775. 233h  5 BYTEs    ???
  23776. 238h    BYTE    extended FCB file attribute
  23777. 239h    BYTE    type of FCB (00h regular, FFh extended)
  23778. 23Ah    BYTE    directory search attributes
  23779. 23Bh    BYTE    file open mode???
  23780. 23Ch    BYTE    ??? flag bits 0 and 4
  23781. 23Dh    BYTE    ??? flag or counter
  23782. 23Eh    BYTE    ??? flag
  23783. 23Fh    BYTE    flag indicating how DOS function was invoked
  23784.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  23785. 240h    BYTE    ???
  23786. 241h    BYTE    ??? flag
  23787. 242h    BYTE    flag: 00h if read, 01h if write
  23788. 243h    BYTE    drive number for ???
  23789. 244h    BYTE    ???
  23790. 245h    BYTE    ??? flag or counter
  23791. 246h    BYTE    line edit (AH=0Ah) insert mode flag (nonzero = on)
  23792. 247h    BYTE    canonicalized filename referred to existing file/dir if FFh
  23793. 248h    BYTE    ??? flag or counter
  23794. 249h    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  23795. 24Ah    BYTE    ??? flag
  23796. 24Bh    BYTE    value with which to replace first byte of deleted file's name
  23797.         (normally E5h, but 00h as described under INT 21/AH=13h)
  23798. 24Ch    DWORD    pointer to Drive Parameter Block for critical error invocation
  23799. 250h    DWORD    pointer to stack frame containing user registers on INT 21
  23800. 254h    WORD    stores SP across INT 24
  23801. 256h    DWORD    pointer to DOS Drive Parameter Block for ???
  23802. 25Ah    WORD    ???
  23803. 25Ch    WORD    ??? temp
  23804. 25Eh    WORD    ??? flag (only low byte referenced)
  23805. 260h    WORD    ??? temp
  23806. 262h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  23807. 263h    BYTE    ??? (doesn't seem to be referenced)
  23808. 264h    DWORD    pointer to device header
  23809. 268h    DWORD    pointer to current SFT
  23810. 26Ch    DWORD    pointer to current directory structure for drive being accessed
  23811. 270h    DWORD    pointer to caller's FCB
  23812. 274h    WORD    number of SFT to which file being opened will refer
  23813. 276h    WORD    temporary storage for file handle
  23814. 278h    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  23815. 27Ch    WORD    offset in DOS DS of first filename argument
  23816. 27Eh    WORD    offset in DOS DS of second filename argument
  23817. 280h    WORD    offset of last component in pathname or FFFFh
  23818. 282h    WORD    ??? offset of transfer address???
  23819. 284h    WORD    ??? relative cluster within file being accessed ???
  23820. 286h    WORD    ??? absolute cluster number being accessed ???
  23821. 288h    WORD    ??? current sector number
  23822. 28Ah    WORD    ??? current cluster number
  23823. 28Ch    WORD    ??? current offset in file DIV bytes per sector
  23824. 28Eh  2 BYTEs    ??? 
  23825. 290h    WORD    ??? current offset in file MOD bytes per sector
  23826. 292h    DWORD    current offset in file
  23827. 296h    WORD    ???
  23828. 298h    WORD    ???
  23829. 29Ah    WORD    ???
  23830. 29Ch    WORD    ???
  23831. 29Eh    WORD    ???
  23832. 2A0h    WORD    ???
  23833. 2A2h    DWORD    number of bytes appended to file
  23834. 2A6h    DWORD    pointer to ??? disk buffer
  23835. 2AAh    DWORD    pointer to working SFT
  23836. 2AEh    WORD    used by INT 21 dispatcher to store caller's BX
  23837. 2B0h    WORD    used by INT 21 dispatcher to store caller's DS
  23838. 2B2h    WORD    temporary storage while saving/restoring caller's registers
  23839. 2B4h    DWORD    pointer to prev call frame (offset 250h) if INT 21 reentered
  23840.         also switched to for duration of INT 24
  23841. 2B8h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  23842.         (see AH=4Eh)
  23843. 2CDh 32 BYTEs    directory entry for file being renamed
  23844. 2EDh 331 BYTEs    critical error stack
  23845.    403h     35 BYTEs scratch SFT
  23846. 438h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  23847. 5B8h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  23848. ---DOS 3.2,3.3 only---
  23849. 738h    BYTE    device driver lookahead flag (see AH=64h)
  23850. 739h    BYTE    ??? looks like a drive number
  23851. 73Ah    BYTE    ??? flag of some kind
  23852. 73Ah    BYTE    ???
  23853. ----------215D07-----------------------------
  23854. INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
  23855.     AX = 5D07h
  23856. Return: DL = mode
  23857.         00h redirected output is combined
  23858.         01h redirected output in separate print jobs
  23859. SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h
  23860. ----------215D08-----------------------------
  23861. INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
  23862.     AX = 5D08h
  23863.     DL = mode
  23864.         00h redirected output is combined
  23865.         01h redirected output placed in separate jobs, start new print job
  23866.         now
  23867. SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h
  23868. ----------215D09-----------------------------
  23869. INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
  23870.     AX = 5D09h
  23871. Note:    forces redirected printer output to be printed, and starts a new print
  23872.       job
  23873. SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h
  23874. ----------215D0A-----------------------------
  23875. INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
  23876.     AX = 5D0Ah
  23877.     DS:DX -> 11-word DOS parameter list (see AX=5D00h)
  23878. Return: nothing.  next call to AH=59h will return values from fields AX,BX,CX,
  23879.       DX,DI, and ES in corresponding registers
  23880. Note:    documented for DOS 5+, but undocumented in earlier versions
  23881. SeeAlso: AH=59h
  23882. ----------215D0B-----------------------------
  23883. INT 21 U - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS
  23884.     AX = 5D0Bh
  23885. Return: CF set on error
  23886.         AX = error code (see AH=59h)
  23887.     CF clear if successful
  23888.         DS:SI -> swappable data area list (see below)
  23889. Note:    copying and restoring the swappable data areas allows DOS to be
  23890.       reentered unless it is in a critical section delimited by calls to
  23891.       INT 2A/AH=80h and INT 2A/AH=81h,82h
  23892. SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  23893.  
  23894. Format of DOS 4.x swappable data area list:
  23895. Offset    Size    Description
  23896.  00h    WORD    count of data areas
  23897.  02h  N BYTEs    "count" copies of data area record
  23898.         Offset    Size    Description
  23899.          00h    DWORD    address
  23900.          04h    WORD    length and type
  23901.                 bit 15 set if swap always, clear if swap in DOS
  23902.                 bits 14-0: length in bytes
  23903.  
  23904. Format of DOS 4.0-5.0 swappable data area:
  23905. Offset    Size    Description
  23906.  00h    BYTE    critical error flag
  23907.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  23908.  02h    BYTE    drive on which current critical error occurred or FFh
  23909.  03h    BYTE    locus of last error
  23910.  04h    WORD    extended error code of last error
  23911.  06h    BYTE    suggested action for last error
  23912.  07h    BYTE    class of last error
  23913.  08h    DWORD    ES:DI pointer for last error
  23914.  0Ch    DWORD    current DTA
  23915.  10h    WORD    current PSP
  23916.  12h    WORD    stores SP across an INT 23
  23917.  14h    WORD    return code from last process termination (zerod after reading
  23918.         with AH=4Dh)
  23919.  16h    BYTE    current drive
  23920.  17h    BYTE    extended break flag
  23921.  18h  2 BYTEs    ???
  23922. ---remainder need only be swapped if in DOS---
  23923.  1Ah    WORD    value of AX on call to INT 21
  23924.  1Ch    WORD    PSP segment for sharing/network
  23925.  1Eh    WORD    network machine number for sharing/network (0000h = us)
  23926.  20h    WORD    first usable memory block found when allocating memory
  23927.  22h    WORD    best usable memory block found when allocating memory
  23928.  24h    WORD    last usable memory block found when allocating memory
  23929.  26h    WORD    memory size in paragraphs (used only during initialization)
  23930.  28h    WORD    ???
  23931.  2Ah    BYTE    ???
  23932.  2Bh    BYTE    ???
  23933.  2Ch    BYTE    ???
  23934.  2Dh    BYTE    ???
  23935.  2Eh    BYTE    ???
  23936.  2Fh    BYTE    ??? (doesn't seem to be referenced)
  23937.  30h    BYTE    day of month
  23938.  31h    BYTE    month
  23939.  32h    WORD    year - 1980
  23940.  34h    WORD    number of days since 1-1-1980
  23941.  36h    BYTE    day of week (0 = Sunday)
  23942.  37h    BYTE    ???
  23943.  38h    BYTE    ???
  23944.  39h    BYTE    ???
  23945.  3Ah 30 BYTEs    device driver request header (see INT 2F/AX=0802h)
  23946.  58h    DWORD    pointer to device driver entry point (used in calling driver)
  23947.  5Ch 22 BYTEs    device driver request header
  23948.  72h 30 BYTEs    device driver request header
  23949.  90h  6    BYTEs    ???
  23950.  96h  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  23951.  9Ch  2 BYTEs    ???
  23952.  9Eh 128 BYTEs    buffer for filename
  23953. 11Eh 128 BYTEs    buffer for filename
  23954. 19Eh 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  23955. 1B3h 32 BYTEs    directory entry for found file
  23956. 1D3h 88 BYTEs    copy of current directory structure for drive being accessed
  23957. 22Bh 11 BYTEs    FCB-format filename for device name comparison
  23958. 236h    BYTE    ???
  23959. 237h 11 BYTEs    wildcard destination specification for rename (FCB format)
  23960. 242h  2 BYTEs    ???
  23961. 244h    WORD    ???
  23962. 246h  5 BYTEs    ???
  23963. 24Bh    BYTE    extended FCB file attributes
  23964. 24Ch    BYTE    type of FCB (00h regular, FFh extended)
  23965. 24Dh    BYTE    directory search attributes
  23966. 24Eh    BYTE    file open mode
  23967. 24Fh    BYTE    ??? flag bits
  23968. 250h    BYTE    ??? flag or counter
  23969. 251h    BYTE    ??? flag
  23970. 252h    BYTE    flag indicating how DOS function was invoked
  23971.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  23972. 253h    BYTE    ???
  23973. 254h    BYTE    ???
  23974. 255h    BYTE    ???
  23975. 256h    BYTE    ???
  23976. 257h    BYTE    ???
  23977. 258h    BYTE    ???
  23978. 259h    BYTE    ???
  23979. 25Ah    BYTE    canonicalized filename referred to existing file/dir if FFh
  23980. 25Bh    BYTE    ???
  23981. 25Ch    BYTE    type of process termination (00h-03h)
  23982. 25Dh    BYTE    ???
  23983. 25Eh    BYTE    ???
  23984. 25Fh    BYTE    ???
  23985. 260h    DWORD    pointer to Drive Parameter Block for critical error invocation
  23986. 264h    DWORD    pointer to stack frame containing user registers on INT 21
  23987. 268h    WORD    stores SP???
  23988. 26Ah    DWORD    pointer to DOS Drive Parameter Block for ???
  23989. 26Eh    WORD    segment of disk buffer
  23990. 270h    WORD    ???
  23991. 272h    WORD    ???
  23992. 274h    WORD    ???
  23993. 276h    WORD    ???
  23994. 278h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  23995. 279h    BYTE    ??? (doesn't seem to be referenced)
  23996. 27Ah    DWORD    pointer to ???
  23997. 27Eh    DWORD    pointer to current SFT
  23998. 282h    DWORD    pointer to current directory structure for drive being accessed
  23999. 286h    DWORD    pointer to caller's FCB
  24000. 28Ah    WORD    SFT index to which file being opened will refer
  24001. 28Ch    WORD    temporary storage for file handle
  24002. 28Eh    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  24003. 292h    WORD    offset in DOS DS of first filename argument
  24004. 294h    WORD    offset in DOS DS of second filename argument
  24005. 296h    WORD    ???
  24006. 298h    WORD    ???
  24007. 29Ah    WORD    ???
  24008. 29Ch    WORD    ???
  24009. 29Eh    WORD    ???
  24010. 2A0h    WORD    ???
  24011. 2A2h    WORD    ??? directory cluster number???
  24012. 2A4h    DWORD    ???
  24013. 2A8h    DWORD    ???
  24014. 2ACh    WORD    ???
  24015. 2AEh    DWORD    offset in file???
  24016. 2B2h    WORD    ???
  24017. 2B4h    WORD    bytes in partial sector
  24018. 2B6h    WORD    number of sectors
  24019. 2B8h    WORD    ???
  24020. 2BAh    WORD    ???
  24021. 2BCh    WORD    ???
  24022. 2BEh    DWORD    number of bytes appended to file
  24023. 2C2h    DWORD    pointer to ??? disk buffer
  24024. 2C6h    DWORD    pointer to ??? SFT
  24025. 2CAh    WORD    used by INT 21 dispatcher to store caller's BX
  24026. 2CCh    WORD    used by INT 21 dispatcher to store caller's DS
  24027. 2CEh    WORD    temporary storage while saving/restoring caller's registers
  24028. 2D0h    DWORD    pointer to prev call frame (offset 264h) if INT 21 reentered
  24029.         also switched to for duration of INT 24
  24030. 2D4h    WORD    open mode/action for INT 21/AX=6C00h
  24031. 2D6h    BYTE    ??? (set to 00h by INT 21h dispatcher, 02h when a read is
  24032.         performed, and 01h or 03h by INT 21/AX=6C00h)
  24033. 2D7h    WORD    ??? apparently unused
  24034. 2D9h    DWORD    stored ES:DI for AX=6C00h
  24035. 2DDh    WORD    extended file open action code (see AX=6C00h)
  24036. 2DFh    WORD    extended file open attributes (see AX=6C00h)
  24037. 2E1h    WORD    extended file open file mode (see AX=6C00h)
  24038. 2E3h    DWORD    pointer to filename to open (see AX=6C00h)
  24039. 2E7h    WORD    ???
  24040. 2E9h    WORD    ???
  24041. 2EBh    BYTE    ???
  24042. 2ECh    WORD    stores DS during call to [List-of-Lists + 37h]
  24043. 2EEh    WORD    ???
  24044. 2F0h    BYTE    ???
  24045. 2F1h    WORD    ??? bit flags
  24046. 2F3h    DWORD    pointer to user-supplied filename
  24047. 2F7h    DWORD    pointer to ???
  24048. 2FBh    WORD    stores SS during call to [List-of-Lists + 37h]
  24049. 2FDh    WORD    stores SP during call to [List-of-Lists + 37h]
  24050. 2FFh    BYTE    flag, nonzero if stack switched in calling [List-of-Lists+37h]
  24051. 300h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  24052.         (see AH=4Eh)
  24053. 315h 32 BYTEs    directory entry for file being renamed
  24054. 335h 331 BYTEs    critical error stack
  24055. 480h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  24056. 600h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  24057. 780h    BYTE    device driver lookahead flag (see AH=64h)
  24058. 781h    BYTE    ??? looks like a drive number
  24059. 782h    BYTE    ??? flag of some kind
  24060. 783h    BYTE    ???
  24061. 784h    WORD    ???
  24062. 786h    WORD    ???
  24063. 788h    WORD    ???
  24064. 78Ah    WORD    ???
  24065. ----------215E00-----------------------------
  24066. INT 21 - DOS 3.1+ network - GET MACHINE NAME
  24067.     AX = 5E00h
  24068.     DS:DX -> 16-byte buffer for ASCIZ machine name
  24069. Return: CF clear if successful
  24070.         CH = validity
  24071.         00h name invalid
  24072.         nonzero valid
  24073.             CL = NetBIOS number for machine name
  24074.             DS:DX buffer filled with blank-paded name
  24075.     CF set on error
  24076.         AX = error code (01h) (see AH=59h)
  24077. Note:    supported by OS/2 v1.3+ compatibility box, PC-NFS
  24078. SeeAlso: AX=5E01h
  24079. ----------215E01CH00-------------------------
  24080. INT 21 - DOS 3.1+ network - SET MACHINE NAME
  24081.     AX = 5E01h
  24082.     CH = 00h undefine name (make it invalid)
  24083.        <> 0     define name
  24084.     CL = name number
  24085.     DS:DX -> 15-character blank-padded ASCIZ name
  24086. SeeAlso: AX=5E00h
  24087. ----------215E02-----------------------------
  24088. INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING
  24089.     AX = 5E02h
  24090.     BX = redirection list index (see AX=5F02h)
  24091.     CX = length of setup string
  24092.     DS:SI -> setup string
  24093. Return: CF clear if successful
  24094.     CF set on error
  24095.         AX = error code (01h) (see AH=59h)
  24096. SeeAlso: AX=5E03h,INT 2F/AX=111Fh
  24097. ----------215E03-----------------------------
  24098. INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING
  24099.     AX = 5E03h
  24100.     BX = redirection list index (see AX=5F02h)
  24101.     ES:DI -> 64-byte buffer for setup string
  24102. Return: CF clear if successful
  24103.         CX = length of setup string
  24104.         ES:DI buffer filled
  24105.     CF set on error
  24106.         AX = error code (01h) (see AH=59h)
  24107. SeeAlso: AX=5E02h,INT 2F/AX=111Fh
  24108. ----------215E04-----------------------------
  24109. INT 21 - DOS 3.1+ network - SET PRINTER MODE
  24110.     AX = 5E04h
  24111.     BX = redirection list index (see AX=5F02h)
  24112.     DX = mode
  24113.         bit 0: set if binary, clear if text (tabs expanded to blanks)
  24114. Return: CF set on error
  24115.         AX = error code (see AH=59h)
  24116.     CF clear if successful
  24117. Note:    calls INT 2F/AX=111Fh with 5E04h on stack
  24118. SeeAlso: AX=5E05h,INT 2F/AX=111Fh
  24119. ----------215E05-----------------------------
  24120. INT 21 - DOS 3.1+ network - GET PRINTER MODE
  24121.     AX = 5E05h
  24122.     BX = redirection list index (see AX=5F02h)
  24123. Return: CF set on error
  24124.         AX = error code (see AH=59h)
  24125.     CF clear if successful
  24126.         DX = printer mode (see AX=5E04h)
  24127. Note:    calls INT 2F/AX=111Fh with 5E05h on stack
  24128. SeeAlso: AX=5E04h,INT 2F/AX=111Fh
  24129. ----------215F00-----------------------------
  24130. INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
  24131.     AX = 5F00h
  24132.     BL = redirection type
  24133.         03h printer
  24134.         04h disk drive
  24135. Return: CF set on error
  24136.         AX = error code (see AH=59h)
  24137.     CF clear if successful
  24138.         BH = redirection state
  24139.         00h off
  24140.         01h on
  24141. Note:    calls INT 2F/AX=111Eh with AX on top of the stack
  24142. SeeAlso: AX=5F01h,INT 2F/AX=111Eh
  24143. ----------215F01-----------------------------
  24144. INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
  24145.     AX = 5F01h
  24146.     BL = redirection type
  24147.         03h printer
  24148.         04h disk drive
  24149.     BH = redirection state
  24150.         00h off
  24151.         01h on
  24152. Return: CF set on error
  24153.         AX = error code (see AH=59h)
  24154.     CF clear if successful
  24155. Notes:    when redirection is off, the local device (if any) rather than the
  24156.       remote device is used
  24157.     calls INT 2F/AX=111Eh with AX on top of the stack
  24158. SeeAlso: AX=5F00h,INT 2F/AX=111Eh
  24159. ----------215F02-----------------------------
  24160. INT 21 - DOS 3.1+ network, Banyan VINES, PC-NFS - GET REDIRECTION LIST ENTRY
  24161.     AX = 5F02h
  24162.     BX = redirection list index
  24163.     CX = 0000h (LANtastic)
  24164.     DS:SI -> 16-byte buffer for ASCIZ device name
  24165.     ES:DI -> 128-byte buffer for ASCIZ network name
  24166. Return: CF clear if successful
  24167.         BH = device status
  24168.         00h valid
  24169.         01h invalid
  24170.         BL = device type
  24171.         03h printer
  24172.         04h disk drive
  24173.         CX = user data previously set with AX=5F03h
  24174.         DS:SI and ES:DI buffers filled
  24175.         DX,BP destroyed
  24176.     CF set on error
  24177.         AX = error code (01h,12h) (see AH=59h)
  24178. Notes:    this function is passed through to INT 2F/AX=111Eh
  24179.     error code 12h is returned if BX is greater than the size of the list
  24180.     also supported by Banyan VINES, PC-NFS, and LANtastic
  24181. SeeAlso: AX=5F03h,INT 2F/AX=111Eh
  24182. ----------215F03-----------------------------
  24183. INT 21 - DOS 3.1+ network, Banyan VINES, LANtastic - REDIRECT DEVICE
  24184.     AX = 5F03h
  24185.     BL = device type
  24186.         03h printer
  24187.         04h disk drive
  24188.     CX = user data to save
  24189.         0000h for LANtastic
  24190.     DS:SI -> ASCIZ local device name (16 bytes max)
  24191.     ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total)
  24192. Return: CF clear if successful
  24193.     CF set on error
  24194.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
  24195. Notes:    if device type is disk drive, DS:SI must point at either a null string
  24196.       or a string consisting the drive letter followed by a colon; if a
  24197.       null string, the network attempts to access the destination without
  24198.       redirecting a local drive
  24199.     calls INT 2F/AX=111Eh with AX on top of the stack
  24200. SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh
  24201. ----------215F04-----------------------------
  24202. INT 21 - DOS 3.1+ network, Banyan VINES, LANtastic - CANCEL REDIRECTION
  24203.     AX = 5F04h
  24204.     DS:SI -> ASCIZ device name or path
  24205. Return: CF clear if successful
  24206.     CF set on error
  24207.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
  24208. Notes:    the DS:SI string must be either a local device name, a drive letter
  24209.       followed by a colon, or a network directory beginning with two
  24210.       backslashes
  24211.     calls INT 2F/AX=111Eh with AX on top of the stack
  24212. SeeAlso: AX=5F03h,INT 2F/AX=111Eh
  24213. ----------215F05-----------------------------
  24214. INT 21 - DOS 4.x + Microsoft Networks - GET REDIRECTION LIST EXTENDED ENTRY
  24215.     AX = 5F05h
  24216.     BX = redirection list index
  24217.     DS:SI -> buffer for ASCIZ source device name
  24218.     ES:DI -> buffer for destination ASCIZ network path
  24219. Return: CF set on error
  24220.         AX = error code (see AH=59h)
  24221.     CF clear if successful
  24222.         BH = device status flag (bit 0 clear if valid)
  24223.         BL = device type (03h if printer, 04h if drive)
  24224.         CX = stored parameter value (user data)
  24225.         BP = NETBIOS local session number
  24226.         DS:SI buffer filled
  24227.         ES:DI buffer filled
  24228. Notes:    the local session number allows sharing the redirector's session number
  24229.     if an error is caused on the NETBIOS LSN, the redirector may be unable
  24230.       to correctly recover from errors
  24231.     calls INT 2F/AX=111Eh with AX on top of the stack
  24232. SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh
  24233. ----------215F05-----------------------------
  24234. INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
  24235.     AX = 5F05h
  24236.     DL = drive number (0=A:)
  24237.     DS:SI -> ASCIZ name of the object to map the drive to
  24238. Return: CF set on error
  24239.         AX = error code (see AH=59h)
  24240.     CF clear if successful
  24241. SeeAlso: AX=5F06h"STARLITE"
  24242. ----------215F06-----------------------------
  24243. INT 21 U - Network - GET REDIRECTION LIST???
  24244.     AX = 5F06h
  24245.     ???
  24246. Return: ???
  24247. Notes:    appears to be similar to AX=5F02h and AX=5F05h
  24248.     calls INT 2F/AX=111Eh with AX on top of the stack
  24249. SeeAlso: AX=5F05h"DOS",INT 2F/AX=111Eh
  24250. ----------215F06-----------------------------
  24251. INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
  24252.     AX = 5F06h
  24253.     DL = drive to be unmapped (0=A:)
  24254. Return: CF set on error
  24255.         AX = error code (see AH=59h)
  24256.     CF clear if successful
  24257. SeeAlso: AX=5F05h"STARLITE"
  24258. ----------215F07-----------------------------
  24259. INT 21 - DOS 5.0 - ENABLE DRIVE
  24260.     AX = 5F07h
  24261.     DL = drive number (0=A:)
  24262. Return: CF clear if successful
  24263.     CF set on error
  24264.         AX = error code (0Fh) (see AH=59h)
  24265. Note:    simply sets the "valid" bit in the drive's CDS
  24266. SeeAlso: AH=52h,AX=5F08h"DOS"
  24267. ----------215F07-----------------------------
  24268. INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
  24269.     AX = 5F07h
  24270.     DS:SI -> ASCIZ name of object to offer to network
  24271.     ES:DI -> ASCIZ name under which object will be known on the network
  24272.         MUST begin with three slashes
  24273. Return: CF set on error
  24274.         AX = error code (see AH=59h)
  24275.     CF clear if successful
  24276. SeeAlso: AX=5F08h"STARLITE"
  24277. ----------215F08-----------------------------
  24278. INT 21 - DOS 5.0 - DISABLE DRIVE
  24279.     AX = 5F08h
  24280.     DL = drive number (0=A:)
  24281. Return: CF clear if successful
  24282.     CF set on error
  24283.         AX = error code (0Fh) (see AH=59h)
  24284. Note:    simply clears the "valid" bit in the drive's CDS
  24285. SeeAlso: AH=52h,AX=5F07h"DOS"
  24286. ----------215F08-----------------------------
  24287. INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
  24288.     AX = 5F08h
  24289.     DS:SI -> ASCIZ network name (not local name) of object to unshare
  24290. Return: CF set on error
  24291.         AX = error code (see AH=59h)
  24292.     CF clear if successful
  24293. SeeAlso: AX=5F07h"STARLITE"
  24294. ----------215F09-----------------------------
  24295. INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
  24296.     AX = 5F09h
  24297.     DS:DX -> ASCIZ name of the device driver to attach to
  24298. Return: CF set on error
  24299.         AX = error code (see AH=59h)
  24300.     CF clear if successful
  24301. Note:    the STARLITE distributed file system can attach to multiple networks
  24302.       simultaneously
  24303. SeeAlso: AX=5F0Ah
  24304. ----------215F0A-----------------------------
  24305. INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
  24306.     AX = 5F0Ah
  24307.     DS:DX -> ASCIZ name of device driver to detach from
  24308. Return: CF set on error
  24309.         AX = error code (see AH=59h)
  24310.     CF clear if successful
  24311. SeeAlso: AX=5F09h
  24312. ----------215F32-----------------------------
  24313. INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPipeInfo
  24314.     AX = 5F32h
  24315.     ???
  24316. Return: ???
  24317. Note:    supported by Novell DOS Named Pipe Extender
  24318. SeeAlso: AX=5F33h,AX=5F34h
  24319. ----------215F33-----------------------------
  24320. INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPHandState
  24321.     AX = 5F33h
  24322.     ???
  24323. Return: ???
  24324. Note:    supported by Novell DOS Named Pipe Extender
  24325. SeeAlso: AX=5F32h,AX=5F34h
  24326. ----------215F34-----------------------------
  24327. INT 21 - LAN Manager Enhanced DOS API local interface - DosSetNmPHandState
  24328.     AX = 5F34h
  24329.     ???
  24330. Return: ???
  24331. Note:    supported by Novell DOS Named Pipe Extender
  24332. SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h
  24333. ----------215F35-----------------------------
  24334. INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekNmPipe
  24335.     AX = 5F35h
  24336.     ???
  24337. Note:    supported by Novell DOS Named Pipe Extender
  24338. Return: ???
  24339. SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h
  24340. ----------215F36-----------------------------
  24341. INT 21 - LAN Manager Enhanced DOS API local interface - DosTransactNmPipe
  24342.     AX = 5F36h
  24343.     ???
  24344. Return: ???
  24345. Note:    supported by Novell DOS Named Pipe Extender
  24346. SeeAlso: AX=5F34h,AX=5F37h
  24347. ----------215F37-----------------------------
  24348. INT 21 - LAN Manager Enhanced DOS API local interface - DosCallNmPipe
  24349.     AX = 5F37h
  24350.     ???
  24351. Return: ???
  24352. Note:    supported by Novell DOS Named Pipe Extender
  24353. SeeAlso: AX=5F36h,AX=5F38h
  24354. ----------215F38-----------------------------
  24355. INT 21 - LAN Manager Enhanced DOS API local interface - DosWaitNmPipe
  24356.     AX = 5F38h
  24357.     ???
  24358. Return: ???
  24359. Note:    supported by Novell DOS Named Pipe Extender
  24360. SeeAlso: AX=5F37h,AX=5F39h
  24361. ----------215F39-----------------------------
  24362. INT 21 - LAN Manager Enhanced DOS API local interface - DosRawReadNmPipe
  24363.     AX = 5F39h
  24364.     ???
  24365. Return: ???
  24366. Note:    supported by Novell DOS Named Pipe Extender
  24367. SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h
  24368. ----------215F3A-----------------------------
  24369. INT 21 - LAN Manager Enhanced DOS API local interface - DosRawWriteNmPipe
  24370.     AX = 5F3Ah
  24371.     ???
  24372. Return: ???
  24373. Note:    supported by Novell DOS Named Pipe Extender
  24374. SeeAlso: AX=5F3Bh,INT 2F/AX=118Fh
  24375. ----------215F3B-----------------------------
  24376. INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleSetInfo
  24377.     AX = 5F3Bh
  24378.     ???
  24379. Return: ???
  24380. SeeAlso: AX=5F3Ch
  24381. ----------215F3C-----------------------------
  24382. INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleGetInfo
  24383.     AX = 5F3Ch
  24384.     ???
  24385. Return: ???
  24386. SeeAlso: AX=5F3Bh
  24387. ----------215F40-----------------------------
  24388. INT 21 - LAN Manager Enhanced DOS API local interface - NetMessageBufferSend
  24389.     AX = 5F40h
  24390.     ???
  24391. Return: ???
  24392. ----------215F42-----------------------------
  24393. INT 21 - LAN Manager Enhanced DOS API local interface - NetServiceControl
  24394.     AX = 5F42h
  24395.     ???
  24396. Return: ???
  24397. ----------215F44-----------------------------
  24398. INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaGetInfo
  24399.     AX = 5F44h
  24400.     ???
  24401. Return: ???
  24402. SeeAlso: AX=5F45h,AX=5F49h
  24403. ----------215F45-----------------------------
  24404. INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaSetInfo
  24405.     AX = 5F45h
  24406.     ???
  24407. Return: ???
  24408. SeeAlso: AX=5F44h
  24409. ----------215F46-----------------------------
  24410. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseEnum
  24411.     AX = 5F46h
  24412.     ???
  24413. Return: ???
  24414. SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch
  24415. ----------215F47-----------------------------
  24416. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseAdd
  24417.     AX = 5F47h
  24418.     ???
  24419. Return: ???
  24420. SeeAlso: AX=5F46h,AX=5F48h
  24421. ----------215F48-----------------------------
  24422. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseDel
  24423.     AX = 5F48h
  24424.     ???
  24425. Return: ???
  24426. SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h
  24427. ----------215F49-----------------------------
  24428. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseGetInfo
  24429.     AX = 5F49h
  24430.     ???
  24431. Return: ???
  24432. SeeAlso: AX=5F44h,AX=5F47h
  24433. ----------215F4A-----------------------------
  24434. INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteCopy
  24435.     AX = 5F4Ah
  24436.     ???
  24437. Return: ???
  24438. SeeAlso: AX=5F4Bh
  24439. ----------215F4B-----------------------------
  24440. INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteMove
  24441.     AX = 5F4Bh
  24442.     ???
  24443. Return: ???
  24444. SeeAlso: AX=5F4Ah
  24445. ----------215F4C-----------------------------
  24446. INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum
  24447.     AX = 5F4Ch
  24448.     ???
  24449. Return: ???
  24450. Note:    supported by Novell DOS Named Pipe Extender
  24451. SeeAlso: AX=5F53h
  24452. ----------215F4D-----------------------------
  24453. INT 21 - LAN Manager Enhanced DOS API local interface - DosMakeMailslot
  24454.     AX = 5F4Dh
  24455.     ???
  24456. Return: ???
  24457. SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h
  24458. ----------215F4E-----------------------------
  24459. INT 21 - LAN Manager Enhanced DOS API local interface - DosDeleteMailslot
  24460.     AX = 5F4Eh
  24461.     ???
  24462. Return: ???
  24463. SeeAlso: AX=5F4Dh,AX=5F4Fh
  24464. ----------215F4F-----------------------------
  24465. INT 21 - LAN Manager Enhanced DOS API local interface - DosMailslotInfo
  24466.     AX = 5F4Fh
  24467.     ???
  24468. Return: ???
  24469. SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h
  24470. ----------215F50-----------------------------
  24471. INT 21 - LAN Manager Enhanced DOS API local interface - DosReadMailslot
  24472.     AX = 5F50h
  24473.     ???
  24474. Return: ???
  24475. SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h
  24476. ----------215F51-----------------------------
  24477. INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekMailslot
  24478.     AX = 5F51h
  24479.     ???
  24480. Return: ???
  24481. SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h
  24482. ----------215F52-----------------------------
  24483. INT 21 - LAN Manager Enhanced DOS API local interface - DosWriteMailslot
  24484.     AX = 5F52h
  24485.     ???
  24486. Return: ???
  24487. SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h
  24488. ----------215F53-----------------------------
  24489. INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum2
  24490.     AX = 5F53h
  24491.     ???
  24492. Return: ???
  24493. SeeAlso: AX=5F4Ch
  24494. ----------215F80-----------------------------
  24495. INT 21 - LANtastic - GET LOGIN ENTRY
  24496.     AX = 5F80h
  24497.     BX = login entry index (0-based)
  24498.     ES:DI -> 16-byte buffer for machine name
  24499. Return: CF clear if successful
  24500.         buffer filled with machine name ("\\" prefix removed)
  24501.         DL = adapter number (v3+)
  24502.     CF set on error
  24503.         AX = error code
  24504. Note:    the login entry index corresponds to the value BX used in AX=5F83h
  24505. SeeAlso: AX=5F83h
  24506. ----------215F81-----------------------------
  24507. INT 21 - LANtastic - LOGIN TO SERVER
  24508.     AX = 5F81h
  24509.     ES:DI -> ASCIZ login path followed immediately by ASCIZ password
  24510.     BL = adapter number
  24511.         FFh try all valid adapters
  24512.         00h-07h try only specified adapter
  24513. Return: CF clear if successful
  24514.     CF set on error
  24515.         AX = error code
  24516. Notes:    login path is of form "\\machine\username"
  24517.     if no password is used, the string at ES:DI must be terminated with
  24518.       three NULs for compatibility with LANtastic v3.0.
  24519. SeeAlso: AX=5F82h,AX=5F84h
  24520. ----------215F82-----------------------------
  24521. INT 21 - LANtastic - LOGOUT FROM SERVER
  24522.     AX = 5F82h
  24523.     ES:DI -> ASCIZ server name (in form "\\machine")
  24524. Return: CF clear if successful
  24525.     CF set on error
  24526.         AX = error code
  24527. SeeAlso: AX=5F81h,AX=5F88h,AX=5FCBh
  24528. ----------215F83-----------------------------
  24529. INT 21 - LANtastic - GET USERNAME ENTRY
  24530.     AX = 5F83h
  24531.     BX = login entry index (0-based)
  24532.     ES:DI -> 16-byte buffer for username currently logged into
  24533. Return: CF clear if successful
  24534.         DL = adapter number (v3+)
  24535.     CF set on error
  24536.         AX = error code
  24537. Note:    the login entry index corresponds to the value BX used in AX=5F80h
  24538. SeeAlso: AX=5F80h
  24539. ----------215F84-----------------------------
  24540. INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
  24541.     AX = 5F84h
  24542.     BX = server index not currently logged into
  24543.     ES:DI -> 16-byte buffer for server name which is available for logging
  24544.         in to ("\\" prefix omitted)
  24545. Return: CF clear if successful
  24546.         DL = adapter number to non-logged in server is on
  24547.     CF set on error
  24548.         AX = error code
  24549. SeeAlso: AX=5F81h
  24550. ----------215F85-----------------------------
  24551. INT 21 - LANtastic - CHANGE PASSWORD
  24552.     AX = 5F85h
  24553.     ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
  24554. Return: CF clear if successful
  24555.     CF set on error
  24556.         AX = error code
  24557. Notes:    must be logged into the named machine
  24558.     this function is illegal for group accounts
  24559. ----------215F86-----------------------------
  24560. INT 21 - LANtastic - DISABLE ACCOUNT
  24561.     AX = 5F86h
  24562.     ES:DI -> ASCIZ machine name and password in form "\\machine\password"
  24563. Return: CF clear if successful
  24564.     CF set on error
  24565.         AX = error code
  24566. Note:    must be logged into the named machine and concurrent logins set to 1
  24567.       by NET_MGR.  Requires system manager to re-enable account.
  24568. ----------215F87-----------------------------
  24569. INT 21 - LANtastic v3+ - GET ACCOUNT
  24570.     AX = 5F87h
  24571.     DS:SI -> 128-byte buffer for account information (see below)
  24572.     ES:DI -> ASCIZ machine name in form "\\machine"
  24573. Return:    CF clear if successful
  24574.     CF set on error
  24575.         AX = error code
  24576.     BX destroyed
  24577. Note:    must be logged into the specified machine
  24578.  
  24579. Format of user account structure:
  24580. Offset    Size    Description
  24581.  00h 16 BYTEs    blank-padded username (zero-padded for v4.x)
  24582.  10h 16 BYTEs    reserved (00h)
  24583.  20h 32 BYTEs    user description
  24584.  40h    BYTE    privilege bits
  24585.         bit 7: bypass access control lists
  24586.             6: bypass queue protection
  24587.             5: treat as local process
  24588.             4: bypass mail protection
  24589.             3: allow audit entry creation
  24590.             2: system manager
  24591.             0: user cannot change password
  24592.  41h    BYTE    maximum concurrent users
  24593.  42h 42 BYTEs    bit map for disallowed half hours, beginning on Sunday
  24594.         (bit set if half-hour not an allowed time)
  24595.  6Ch    WORD    internal (0002h)
  24596.  6Eh  2 WORDs    last login time
  24597.  72h  2 WORDs    account expiration date (MSDOS-format year/month:day)
  24598.  76h  2 WORDs    password expiration date (0 = none)
  24599.  7Ah    BYTE    number of days to extend password after change (1-31)
  24600.         00h if no extension required
  24601. ---v3.x---
  24602.  7Bh  5 BYTEs    reserved
  24603. ---v4.x---
  24604.  7Bh    BYTE    storage for first letter of user name when deleted (first
  24605.         character is changed to 00h when deleting account)
  24606.  7Ch    BYTE    extended privileges
  24607.  7Dh  3 BYTEs    reserved
  24608. ----------215F88-----------------------------
  24609. INT 21 - LANtastic v4.0+ - LOGOUT FROM ALL SERVERS
  24610.     AX = 5F88h
  24611. Return:    CF clear if successful
  24612.     CF set on error
  24613.         AX = error code
  24614. SeeAlso: AX=5F82h
  24615. ----------215F97-----------------------------
  24616. INT 21 - LANtastic - COPY FILE
  24617.     AX = 5F97h
  24618.     CX:DX = number of bytes to copy (FFFFFFFFh = entire file)
  24619.     SI = source file handle
  24620.     DI = destination file handle
  24621. Return: CF clear if successful
  24622.         DX:AX = number of bytes copied
  24623.     CF set on error
  24624.         AX = error code
  24625. Note:    copy is performed by server
  24626. ----------215F98-----------------------------
  24627. INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
  24628.     AX = 5F98h
  24629.     DS:SI -> message buffer (see below)
  24630. Return: CF clear if successful
  24631.     CF set on error
  24632.         AX = error code
  24633. Note:    v4.1- return no errors
  24634. SeeAlso: AX=5F99h
  24635.  
  24636. Format of message buffer:
  24637. Offset    Size    Description
  24638.  00h    BYTE    reserved
  24639.  01h    BYTE    message type
  24640.         00h general 
  24641.         01h server warning
  24642.         02h-7Fh reserved
  24643.         80h-FFh user-defined
  24644.  02h 16 BYTEs    ASCIZ destination machine name
  24645.  12h 16 BYTEs    ASCIZ server name which user must be logged into
  24646.  22h 16 BYTEs    ASCIZ user name
  24647.  32h 16 BYTEs    ASCIZ originating machine name (filled in when received)
  24648.  42h 80 BYTEs    message text
  24649. ----------215F99-----------------------------
  24650. INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
  24651.     AX = 5F99h
  24652.     ES:DI -> messsage buffer (see AX=5F98h for format)
  24653. Return: CF clear if successful
  24654.     CF set on error
  24655.         AX = error code
  24656. SeeAlso: AX=5F98h
  24657. ----------215F9A-----------------------------
  24658. INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS
  24659.     AX = 5F9Ah
  24660. Return: CF clear if successful
  24661.         DL = bits describing processing for received unsolicited messages
  24662.         bit 0: beep before message is delivered
  24663.             1: deliver message to message service
  24664.             2: pop up message automatically (v3+)
  24665.     CF set on error
  24666.         AX = error code
  24667. SeeAlso: AX=5F9Bh,AX=5F9Ch,AX=5F9Dh
  24668. ----------215F9B-----------------------------
  24669. INT 21 - LANtastic - SET MESSAGE PROCESSING FLAG
  24670.     AX = 5F9Bh
  24671.     DL = bits describing processing for received unsolicited messages
  24672.          (see AX=5F9Ah)
  24673. Return: CF clear if successful
  24674.     CF set on error
  24675.         AX = error code
  24676. SeeAlso: AX=5F9Ah,AX=5F9Eh
  24677. ----------215F9C-----------------------------
  24678. INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
  24679.     AX = 5F9Ch
  24680.     CX = time to leave on screen in clock ticks
  24681.     DH = 0-based screen line on which to place message
  24682. Return:    CF clear if successful
  24683.     CF set on error
  24684.         AX = error code (0Bh)
  24685. Notes:    the original screen contents are restored when the message is removed
  24686.     the message will not appear, and an error will be returned, if the
  24687.       screen is in a graphics mode
  24688. SeeAlso: AX=5F9Ah
  24689. ----------215F9D-----------------------------
  24690. INT 21 - LANtastic v4.1+ - GET REDIRECTOR CONTROL BITS
  24691.     AX = 5F9Dh
  24692. Return:    DL = redirector control bits
  24693.         bit 7: set to notify on print job completion
  24694. SeeAlso: AX=5F9Ah,AX=5F9Eh
  24695. ----------215F9E-----------------------------
  24696. INT 21 - LANtastic v4.1+ - SET REDIRECTOR CONTROL BITS
  24697.     AX = 5F9Eh
  24698.     DL = redirector control bits (see AH = 5F9Dh)
  24699. Return: nothing
  24700. SeeAlso: AX=5F9Bh,AX=5F9Dh
  24701. ----------215FA0-----------------------------
  24702. INT 21 - LANtastic - GET QUEUE ENTRY
  24703.     AX = 5FA0h
  24704.     BX = queue entry index (0000h is first entry)
  24705.     DS:SI -> buffer for queue entry (see below)
  24706.     ES:DI -> ASCIZ server name in form "\\name"
  24707. Return: CF clear if successful
  24708.     CF set on error
  24709.         AX = error code
  24710.     BX = entry index for next queue entry (BX-1 is current index)
  24711. SeeAlso: AX=5FA1h,AX=5FA2h
  24712.  
  24713. Format of queue entry:
  24714. Offset    Size    Description
  24715.  00h    BYTE    status of entry
  24716.         00h empty
  24717.         01h being updated
  24718.         02h being held
  24719.         03h waiting for despool
  24720.         04h being despooled
  24721.         05h canceled
  24722.         06h spooled file could not be accessed
  24723.         07h destination could not be accessed
  24724.         08h rush job
  24725.  01h    DWORD    size of spooled file
  24726.  05h    BYTE    type of entry
  24727.         00h printer queue file
  24728.         01h message
  24729.         02h local file
  24730.         03h remote file
  24731.         04h to remote modem
  24732.         05h batch processor file
  24733.  06h    BYTE    output control
  24734.         bit 6: don't delete (for mail)
  24735.         bit 5: mail file contains voice mail (v3+)
  24736.         bit 4: mail message has been read
  24737.         bit 3: response has been requested for this mail
  24738.  07h    WORD    number of copies
  24739.  09h    DWORD    sequence number of queue entry
  24740.  0Dh 48 BYTEs    pathname of spooled file
  24741.  3Dh 16 BYTEs    user who spooled file
  24742.  4Dh 16 BYTEs    name of machine from which file was spooled
  24743.  5Dh    WORD    date file was spooled (see AX=5700h)
  24744.  5Fh    WORD    time file was spooled (see AX=5700h)
  24745.  61h 17 BYTEs    ASCIZ destination device or user name
  24746.  72h 48 BYTEs    comment field
  24747. ----------215FA1-----------------------------
  24748. INT 21 - LANtastic - SET QUEUE ENTRY
  24749.     AX = 5FA1h
  24750.     BX = handle of opened queue entry
  24751.     DS:SI -> queue entry (see AX=5FA0h)
  24752. Return: CF clear if successful
  24753.     CF set on error
  24754.         AX = error code
  24755. Notes:    the only queue entry fields which may be changed are output control,
  24756.       number of copies, destination device, and comment
  24757.     the handle in BX is that from a create or open (INT 21/AH=3Ch,3Dh)
  24758.       call on the file "\\server\\@MAIL" or "\\server\@name" (for
  24759.       printer queue entries)
  24760. SeeAlso: AX=5FA0h,AX=5FA2h,AX=5FA9h
  24761. ----------215FA2-----------------------------
  24762. INT 21 - LANtastic - CONTROL QUEUE
  24763.     AX = 5FA2h
  24764.     BL = control command
  24765.         00h start despooling (privileged)
  24766.         01h halt despooling (privileged)
  24767.         02h halt despooling at end of job (privileged)
  24768.         03h pause despooler at end of job (privileged)
  24769.         04h print single job (privileged)
  24770.         05h restart current job (privileged)
  24771.         06h cancel the current job
  24772.         07h hold queue entry
  24773.         08h release a held queue entry
  24774.         09h make queue entry a rushed job (privileged)
  24775.     CX:DX = sequence number to control (commands 06h-09h)
  24776.     DX = physical printer number (commands 00h-05h)
  24777.         00h-02h LPT1-LPT3
  24778.         03h,04h COM1,COM2
  24779.         other    all printers
  24780.     ES:DI -> ASCIZ server name in form "\\machine"
  24781. Return: CF clear if successful
  24782.     CF set on error
  24783.         AX = error code
  24784. ----------215FA3-----------------------------
  24785. INT 21 - LANtastic v3+ - GET PRINTER STATUS
  24786.     AX = 5FA3h
  24787.     BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2)
  24788.     DS:SI -> buffer for printer status (see below)
  24789.     ES:DI -> ASCIZ server name in form "\\machine"
  24790. Return: CF clear if successful
  24791.     CF set on error
  24792.         AX = error code
  24793.     BX = next physical printer number
  24794. Note:    you must be logged in to the specified server
  24795.  
  24796. Format of printer status:
  24797. Offset    Size    Description
  24798.  00h    BYTE    printer state
  24799.         bit 7: printer paused
  24800.         bits 0-6: 0 printer disabled
  24801.               1 will stop at end of job
  24802.               2 print multiple jobs
  24803.  01h    WORD    queue index of print job being despooled
  24804.         FFFFh if not despooling--ignore all following fields
  24805.  03h    WORD    actual characters per second being output
  24806.  05h    DWORD    number of characters actually output so far
  24807.  09h    DWORD    number of bytes read from spooled file so far
  24808.  0Dh    WORD    copies remaining to print
  24809. ----------215FA4-----------------------------
  24810. INT 21 - LANtastic v3+ - GET STREAM INFO
  24811.     AX = 5FA4h
  24812.     BX = 0-based stream index number
  24813.     DS:SI -> buffer for stream information (see below)
  24814.     ES:DI -> ASCIZ machine name in form "\\machine"
  24815. Return: CF clear if successful
  24816.     CF set on error
  24817.         AX = error code
  24818.     BX = next stream number
  24819. SeeAlso: AX=5FA5h
  24820.  
  24821. Format of stream information:
  24822. Offset    Size    Description
  24823.  00h    BYTE    queueing of jobs for logical printer (0=disabled,other=enabled)
  24824.  01h 11 BYTEs    logical printer resource template (may contain ? wildcards)
  24825. ----------215FA5-----------------------------
  24826. INT 21 - LANtastic v3+ - SET STREAM INFO
  24827.     AX = 5FA5h
  24828.     BX = 0-based stream index number
  24829.     DS:SI -> buffer containing stream information (see AX=5FA4h)
  24830.     ES:DI -> ASCIZ machine name in form "\\machine"
  24831. Return: CF clear if successful
  24832.     CF set on error
  24833.         AX = error code
  24834. SeeAlso: AX=5FA4h
  24835. ----------215FA7-----------------------------
  24836. INT 21 - LANtastic - CREATE USER AUDIT ENTRY
  24837.     AX = 5FA7h
  24838.     DS:DX -> ASCIZ reason code (max 8 bytes)
  24839.     DS:SI -> ASCIZ variable reason string (max 128 bytes)
  24840.     ES:DI -> ASCIZ machine name in form "\\machine"
  24841. Return: CF clear if successful
  24842.     CF set on error
  24843.         AX = error code
  24844. Note:    you must be logged in to the specified server and have the "U"
  24845.       privilege to execute this call
  24846. ----------215FA9-----------------------------
  24847. INT 21 - LANtastic v4.1+ - SET EXTENDED QUEUE ENTRY
  24848.     AX = 5FA9h
  24849.     BX = handle of opened queue entry
  24850.     DS:SI -> queue entry (see AX=5FA0h)
  24851. Return: CF clear if successful
  24852.     CF set on error
  24853.         AX = error code
  24854. Note:    functions exactly the same as AX=5FA1h except the spooled filename is
  24855.       also set.  This call supports    direct despooling.
  24856. SeeAlso: AX=5FA1h
  24857. ----------215FB0-----------------------------
  24858. INT 21 - LANtastic - GET ACTIVE USER INFORMATION
  24859.     AX = 5FB0h
  24860.     BX = server login entry index
  24861.     DS:SI -> buffer for active user entry (see below)
  24862.     ES:DI -> ASCIZ machine name in form "\\server"
  24863. Return: CF clear if successful
  24864.     CF set on error
  24865.         AX = error code
  24866.     BX = next login index
  24867.  
  24868. Format of active user entry:
  24869. Offset    Size    Description
  24870.  00h    WORD    virtual circuit number
  24871.  02h    BYTE    login state
  24872.         bit 0: fully logged in
  24873.             1: remote program load login
  24874.             2: user has system manager privileges
  24875.             3: user can create audit entries
  24876.             4: bypass mail protection
  24877.             5: treat as local process
  24878.             6: bypass queue protection
  24879.             7: bypass access control lists
  24880.  03h    BYTE    last command issued (see below)
  24881.  04h  5 BYTEs    number of I/O bytes (40-bit unsigned number)
  24882.  09h  3 BYTEs    number of server requests (24-bit unsigned)
  24883.  0Ch 16 BYTEs    name of user who is logged in
  24884.  1Ch 16 BYTEs    name of remote logged in machine
  24885.  2Ch    BYTE    extended privileges (v4+???)
  24886.         bit 0: user cannot change his password
  24887.  2Dh    WORD    time left in minutes (0000h = unlimited) (v4+???)
  24888.  
  24889. Values for last command:
  24890.  00h    login
  24891.  01h    process termination
  24892.  02h    open file
  24893.  03h    close file
  24894.  04h    create file
  24895.  05h    create new file
  24896.  06h    create unique file
  24897.  07h    commit data to disk
  24898.  08h    read file
  24899.  09h    write file
  24900.  0Ah    delete file
  24901.  0Bh    set file attributes
  24902.  0Ch    lock byte range
  24903.  0Dh    unlock byte range
  24904.  0Eh    create subdirectory
  24905.  0Fh    remove subdirectory
  24906.  10h    rename file
  24907.  11h    find first matching file
  24908.  12h    find next matching file
  24909.  13h    get disk free space
  24910.  14h    get a queue entry
  24911.  15h    set a queue entry
  24912.  16h    control the queue
  24913.  17h    return login information
  24914.  18h    return link description
  24915.  19h    seek on file
  24916.  1Ah    get server's time
  24917.  1Bh    create audit entry
  24918.  1Ch    open file in multitude of modes
  24919.  1Dh    change password
  24920.  1Eh    disable account
  24921.  1Fh    local server file copy
  24922. ---v3+---
  24923.  20h    get username from account file
  24924.  21h    translate server's logical path
  24925.  22h    make indirect file
  24926.  23h    get indirect file contents
  24927.  24h    get physical printer status
  24928.  25h    get logical print stream info
  24929.  26h    set logical print stream info
  24930.  27h    get user's account record
  24931. ---v4+---
  24932.  28h    request server shutdown
  24933.  29h    cancel server shutdown
  24934.  2Ah    stuff server's keyboard
  24935.  2Bh    write then commit data to disk
  24936.  2Ch    set extended queue entry
  24937.  2Dh    terminate user from server
  24938.  2Eh    enable/disable logins
  24939.  2Fh    flush server caches
  24940.  30h    change username
  24941.  31h    get extended queue entry
  24942.     (same as get queue, but can return named fields blanked)
  24943. ----------215FB1-----------------------------
  24944. INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
  24945.     AX = 5FB1h
  24946.     DS:SI -> 64-byte buffer for link description
  24947.     ES:DI -> ASCIZ machine and shared directory name in form
  24948.          "\\machine\shared-resource"
  24949. Return: CF clear if successful
  24950.         CX = access control list privilege bits for requesting user
  24951.         bit 4: (I) allow expansion of indirect files
  24952.             5: (A) allow attribute changing
  24953.             6: (P) allow physical access to device
  24954.             7: (E) allow program execution
  24955.             8: (N) allow file renaming
  24956.             9: (K) allow directory deletion
  24957.            10: (D) allow file deletion
  24958.            11: (L) allow file/directory lookups
  24959.            12: (M) allow directory creation
  24960.            13: (C) allow file creation
  24961.            14: (W) allow open for write and writing
  24962.            15: (R) allow open for read and reading
  24963.     CF set on error
  24964.         AX = error code
  24965. ----------215FB2-----------------------------
  24966. INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
  24967.     AX = 5FB2h
  24968.     BX = username entry index (0 for first)
  24969.     DS:SI -> 16-byte buffer for username
  24970.     ES:DI -> ASCIZ server name in form "\\machine"
  24971. Return: CF clear if successful
  24972.     CF set on error
  24973.         AX = error code
  24974.     BX = next queue entry index
  24975. ----------215FB3-----------------------------
  24976. INT 21 - LANtastic v3+ - TRANSLATE PATH
  24977.     AX = 5FB3h
  24978.     DS:SI -> 128-byte buffer for ASCIZ result
  24979.     ES:DI -> full ASCIZ path, including server name
  24980.     DX = types of translation to be performed
  24981.         bit 0: expand last component as indirect file
  24982.         1: return actual path relative to server's physical disk
  24983. Return: CF clear if successful
  24984.     CF set on error
  24985.         AX = error code
  24986. Note:    always expands any indirect files along the path
  24987. SeeALso: AX=5FB4h
  24988. ----------215FB4-----------------------------
  24989. INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
  24990.     AX = 5FB4h
  24991.     DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file
  24992.     ES:DI -> full ASCIZ path of indirect file to create, incl machine name
  24993. Return: CF clear if successful
  24994.     CF set on error
  24995.         AX = error code
  24996. Note:    the contents of the indirect file may be any valid server-relative path
  24997. ----------215FB5-----------------------------
  24998. INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
  24999.     AX = 5FB5h
  25000.     DS:SI -> 128-byte buffer for ASCIZ indirect file contents
  25001.     ES:DI -> full ASCIZ path of indirect file
  25002. Return: CF clear if successful
  25003.     CF set on error
  25004.         AX = error code
  25005. ----------215FB6-----------------------------
  25006. INT 21 - LANtastic v4.1+ - SET AUTO-LOGIN DEFAULTS
  25007.     AX = 5FB6h
  25008.     ES:DI -> pointer to ASCIZ default user name, immediately followed by
  25009.         ASCIZ password
  25010.     BL = adapter number to use for default login attempt
  25011.         FFh try all valid adapters
  25012.         00h-05h try adapter 0-5 explicitly
  25013. Return: CF clear if successful
  25014.     CF set on error
  25015.         AX = error code
  25016. Notes:    call with ES:DI -> two nulls to disable auto-login
  25017. SeeAlso: AX=5FB7h
  25018. ----------215FB7-----------------------------
  25019. INT 21 - LANtastic v4.1+ - GET AUTO-LOGIN DEFAULTS
  25020.     AX = 5FB7h
  25021.     ES:DI -> pointer to 16-byte buffer to store ASCIZ auto-login user name
  25022. Return: CF clear if successful
  25023.         DL = adapter number used for default login attempt
  25024.         FFh all valid adapters will be tried
  25025.         00h-05h specified adapter will be tried explicitly
  25026.     CF set on error
  25027.         AX = error code
  25028. SeeAlso: AX=5F81h,AX=5FB6h
  25029. ----------215FC0-----------------------------
  25030. INT 21 - LANtastic - GET TIME FROM SERVER
  25031.     AX = 5FC0h
  25032.     DS:SI -> time block (see below)
  25033.     ES:DI -> ASCIZ server name to get time from
  25034. Return: CF clear if successful
  25035.     CF set on error
  25036.         AX = error code
  25037.  
  25038. Format of time block:
  25039. Offset    Size    Description
  25040.  00h    WORD    year
  25041.  02h    BYTE    day
  25042.  03h    BYTE    month
  25043.  04h    BYTE    minutes
  25044.  05h    BYTE    hour
  25045.  06h    BYTE    hundredths of second
  25046.  07h    BYTE    second
  25047. ----------215FC8-----------------------------
  25048. INT 21 - LANtastic v4.0+ - SCHEDULE SERVER SHUTDOWN
  25049.     AX = 5FC8h
  25050.     ES:DI -> ASCIZ server name in form "\\machine"
  25051.     DS:SI -> ASCIZ reason string (80 characters)
  25052.     CX = number of minutes until shutdown (0 = immediate)
  25053.     DX = option flags (see below)
  25054.         bit 0: auto reboot
  25055.         1: do not notify users
  25056.         2: halt after shutdown
  25057.         3: shutdown due to power fail (used by UPS)
  25058.         bits 4-7: reserved
  25059.         bits 8-14: user definable
  25060.         bit 15: reserved
  25061. Return: CF clear if successful
  25062.     CF set on error
  25063.         AX = error code
  25064. SeeAlso: AH=5FC9h
  25065. ----------215FC9-----------------------------
  25066. INT 21 - LANtastic v4.0+ - CANCEL SERVER SHUTDOWN
  25067.     AX = 5FC9h
  25068.     ES:DI -> ASCIZ server name in form "\\machine"
  25069. Return: CF clear if successful
  25070.     CF set on error
  25071.         AX = error code
  25072. Note:    you must have the "S" privilege to use this call
  25073. SeeAlso: AH=5FC8h
  25074. ----------215FCA-----------------------------
  25075. INT 21 - LANtastic v4.0+ - STUFF SERVER KEYBOARD BUFFER
  25076.     AX = 5FCAh
  25077.     ES:DI -> ASCIZ server name in form "\\machine"
  25078.     DS:SI -> ASCIZ string to stuff (128 bytes)
  25079. Return: CF clear if successful
  25080.     CF set on error
  25081.         AX = error code
  25082. Note:    you must have the "S" privilege to use this call
  25083.     maximum number of characters that can be stuffed is determined by the
  25084.       server's RUN BUFFER SIZE.
  25085. ----------215FCB-----------------------------
  25086. INT 21 - LANtastic v4.1+ - TERMINATE USER
  25087.     AX = 5FCBh
  25088.     ES:DI -> ASCIZ server name in form "\\machine"
  25089.     DS:SI -> blank-padded username.     A null char = wildcard.
  25090.     DS:DX -> blank-padded machine name.  A null char = wildcard.
  25091.     CX = minutes until termination (0 = immediate)
  25092. Return: CF clear if successful
  25093.     CF set on error
  25094.         AX = error code
  25095. Note:    you must have the "S" privilege to use this call
  25096.     you cannot log yourself out using this call
  25097. SeeAlso: AX=5F82h
  25098. ----------215FCC-----------------------------
  25099. INT 21 - LANtastic v4.1+ - GET/SET SERVER CONTROL BITS
  25100.     AX = 5FCCh
  25101.     ES:DI -> ASCIZ server name in form "\\machine"
  25102.     CX = bit values (value of bits you want to set)     See below.
  25103.     DX = bit mask (bits you are interested in, 0 = get only)  See 
  25104. below.
  25105. Return: CF clear if successful
  25106.         CX = control bits after call
  25107.         bit 0: disable logins
  25108.     CF set on error
  25109.         AX = error code
  25110. Note:    you must have the "S" privilege to SET, anyone can GET.
  25111. ----------215FCD-----------------------------
  25112. INT 21 - LANtastic v4.1+ - FLUSH SERVER CACHES
  25113.     AX = 5FCDh
  25114.     ES:DI -> ASCIZ server name in form "\\machine"
  25115. Return: CF clear if successful
  25116.     CF set on error
  25117.         AX = error code
  25118. Note:    you must have the "S" privilege to use this call.
  25119. ----------215FD0-----------------------------
  25120. INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
  25121.     AX = 5FD0h
  25122. Return: CF clear if successful
  25123.         CX = redirected printer timeout in clock ticks of 55ms
  25124.         0000h if timeout disabled
  25125.     CF set on error
  25126.         AX = error code
  25127. SeeAlso: AX=5FD1h
  25128. ----------215FD1-----------------------------
  25129. INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
  25130.     AX = 5FD1h
  25131.     CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
  25132. Return: CF clear if successful
  25133.     CF set on error
  25134.         AX = error code
  25135. SeeAlso: AX=5FD0h
  25136. ----------215FE0-----------------------------
  25137. INT 21 C - LANtastic - GET DOS SERVICE VECTOR
  25138.     AX = 5FE0h
  25139. Return: CF clear if successful
  25140.         ES:BX -> current FAR service routine
  25141.     CF set on error
  25142.         AX = error code
  25143. Note:    the service routine is called by the LANtastic redirector whenever DOS
  25144.       may safely be called, permitting external TSRs and drivers to hook
  25145.       into LANtastic's DOS busy flag checking
  25146. SeeAlso: AX=5FE1h,INT 28,INT 2A/AH=84h
  25147. ----------215FE1-----------------------------
  25148. INT 21 - LANtastic - SET DOS SERVICE VECTOR
  25149.     AX = 5FE1h
  25150.     ES:BX -> FAR routine to call when DOS services are available
  25151. Return: CF clear if successful
  25152.     CF set on error
  25153.         AX = error code
  25154. Note:    new handler must chain to previous handler as its first action
  25155. SeeAlso: AX=5FE0h
  25156. ----------215FE2-----------------------------
  25157. INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
  25158.     AX = 5FE2h
  25159. Return: CF clear if successful
  25160.         ES:BX -> current FAR message service routine
  25161.     CF set on error
  25162.         AX = error code
  25163. SeeAlso: AX=5FE3h
  25164. ----------215FE3-----------------------------
  25165. INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
  25166.     AX = 5FE3h
  25167.     ES:BX -> FAR routine for processing network messages
  25168. Return: CF clear if successful
  25169.     CF set on error
  25170.         AX = error code
  25171. Notes:    handler must chain to previous handler as its first action
  25172.     on invocation, ES:BX -> just-received message
  25173. SeeAlso: AX=5FE2h
  25174. ----------2160-------------------------------
  25175. INT 21 - DOS 3.0+ - CANONICALIZE FILENAME OR PATH
  25176.     AH = 60h
  25177.     DS:SI -> ASCIZ filename or path
  25178.     ES:DI -> 128-byte buffer for canonicalized name
  25179. Return: CF set on error
  25180.         AX = error code
  25181.         02h invalid component in directory path or drive letter only
  25182.         03h malformed path or invalid drive letter
  25183.         ES:DI buffer unchanged
  25184.     CF clear if successful
  25185.         AH = 00h
  25186.         AL = destroyed (00h or 5Ch or last char of current dir on drive)
  25187.         buffer filled with qualified name of form D:\PATH\FILE.EXT or
  25188.           \\MACHINE\PATH\FILE.EXT
  25189. Notes:    the input path need not actually exist
  25190.     letters are uppercased, forward slashes converted to backslashes,
  25191.       asterisks converted to appropriate number of question marks, and
  25192.       file and directory names are truncated to 8.3 if necessary.
  25193.     '.' and '..' in the path are resolved
  25194.     filespecs on local drives always start with "d:", those on network
  25195.       drives always start with "\\"
  25196.     if path string is on a JOINed drive, the returned name is the one that
  25197.       would be needed if the drive were not JOINed; similarly for a
  25198.       SUBSTed, ASSIGNed, or network drive letter.    Because of this, it is
  25199.       possible to get a qualified name that is not legal under the current
  25200.       combination of SUBSTs, ASSIGNs, JOINs, and network redirections
  25201.     under DOS 3.3 through 5.00, a device name is translated differently if
  25202.       the device name does not have an explicit directory or the directory
  25203.       is \DEV (relative directory DEV from the root directory works
  25204.       correctly).  In these cases, the returned string consists of the
  25205.       unchanged device name and extension appended to the string X:/
  25206.       (forward slash instead of backward slash as in all other cases) where
  25207.       X is the default or explicit drive letter.
  25208.     functions which take pathnames require canonical paths if invoked via
  25209.       INT 21/AX=5D00h
  25210.     supported by OS/2 v1.1 compatibility box
  25211.     NetWare 2.1x does not support characters with the high bit set; early
  25212.       versions of NetWare 386 support such characters except in this call.
  25213.       In addition, NetWare returns error code 3 for the path "X:\"; one
  25214.       should use "X:\." instead.
  25215.     for DOS 3.3-5.0, the input and output buffers may be the same, as the
  25216.       canonicalized name is built in an internal buffer and copied to the
  25217.       specified output buffer as the very last step
  25218.     for DR DOS 6.0, this function is not automatically called when on a
  25219.       network.  Device drivers reportedly cannot make this call from their
  25220.       INIT function.  Using the same pointer for both input and output
  25221.       buffers is not supported in the April 1992 and earlier versions of
  25222.       DR DOS
  25223. SeeAlso: INT 2F/AX=1123h,INT 2F/AX=1221h
  25224. ----------2161-------------------------------
  25225. INT 21 - DOS 3+ - UNUSED
  25226.     AH = 61h
  25227. Return: AL = 00h
  25228. Note:    this function does nothing and returns immediately
  25229. ----------2162-------------------------------
  25230. INT 21 - DOS 3+ - GET CURRENT PSP ADDRESS
  25231.     AH = 62h
  25232. Return: BX = segment of PSP for current process
  25233. Notes:    under DOS 3+, this function does not use any of the DOS-internal stacks
  25234.       and may thus be called at any time, even during another INT 21h call
  25235.     the current PSP is not necessarily the caller's PSP
  25236.     identical to the undocumented AH=51h
  25237. SeeAlso: AH=50h,AH=51h
  25238. ----------216300-----------------------------
  25239. INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS
  25240.     AX = 6300h
  25241. Return: CF clear if successful
  25242.         DS:SI -> lead byte table (see below)
  25243.     CF set on error
  25244.         AX = error code (01h) (see AH=59h)
  25245. Notes:    does not preserve any registers other than SS:SP
  25246.     the US version of MSDOS 3.30 treats this as an unused function,
  25247.       setting AL=00h and returning immediately
  25248. SeeAlso: AX=6301h,AH=07h,AH=08h,AH=0Bh
  25249.  
  25250. Format of lead byte table entry:
  25251. Offset    Size    Description
  25252.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  25253.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  25254.     ...
  25255.   N   2 BYTEs    00h,00h end flag
  25256. ----------216300-----------------------------
  25257. INT 21 - Far East DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD TABLE
  25258.     AX = 6300h
  25259. Return: AL = error code
  25260.         00h successful
  25261.         DS:SI -> DBCS table (see below)
  25262.         all other registers except CS:IP and SS:SP destroyed
  25263.         FFh not supported
  25264. Notes:    probably identical to AH=63h/AL=00h for DOS 2.25
  25265.     the US version of MSDOS 3.30 treats this as an unused function,
  25266.       setting AL=00h and returning immediately
  25267.     the US version of DOS 4.0+ accepts this function, but returns an empty
  25268.       list
  25269. SeeAlso: AX=6300h"DOS 2.25"
  25270.  
  25271. Format of DBCS table:
  25272. Offset    Size    Description
  25273.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  25274.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  25275.     ...
  25276.   N   2 BYTEs    00h,00h end flag
  25277. ----------216301-----------------------------
  25278. INT 21 - DOS 2.25, Far East DOS 3.2+ - SET KOREAN (HANGUL) INPUT MODE
  25279.     AX = 6301h
  25280.     DL = new mode
  25281.         00h return only full characters on DOS keyboard input functions
  25282.         01h    return partially-formed characters also
  25283. Return: AL = status
  25284.         00h successful
  25285.         FFh invalid mode
  25286. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6302h
  25287. ----------216302-----------------------------
  25288. INT 21 - DOS 2.25, Far East DOS 3.2+ - GET KOREAN (HANGUL) INPUT MODE
  25289.     AX = 6302h
  25290. Return: AL = status
  25291.         00h successful
  25292.         DL = current input mode
  25293.             00h return only full characters
  25294.             01h return partial characters
  25295.         FFh not supported
  25296. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6301h
  25297. ----------2164-------------------------------
  25298. INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG
  25299.     AH = 64h
  25300.     AL = flag
  25301.         00h (default) call device driver function 5 (non-dest read)
  25302.             before INT 21/AH=01h,08h,0Ah
  25303.         nonzero don't call driver function 5
  25304. Return: nothing
  25305. Notes:    called by DOS 3.3+ PRINT.COM
  25306.     does not use any of the DOS-internal stacks and is thus fully
  25307.       reentrant
  25308. SeeAlso: AH=01h,AH=08h,AH=0Ah,AX=5D06h
  25309. ----------2164--BX0000-----------------------
  25310. INT 21 - OS/2 v2.0 Virtual DOS Machine - GET/SET TASK TITLE
  25311.     AH = 64h
  25312.     BX = 0000h
  25313.     CX = 636Ch
  25314.     DX = function
  25315.         0000h enable automatic title switch on INT 21/AH=4Bh
  25316.         0001h set session title
  25317.         ES:DI -> new ASCIZ title or "" to restore original title
  25318.         0002h get session title
  25319.         ES:DI -> buffer for current title
  25320.         Return: buffer filled (single 00h if title never changed)
  25321. SeeAlso: INT 15/AH=12h/BH=05h,INT 21/AH=4Bh
  25322. ----------2165-------------------------------
  25323. INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
  25324.     AH = 65h
  25325.     AL = info ID
  25326.         01h get general internationalization info
  25327.         02h get pointer to uppercase table
  25328.         04h get pointer to filename uppercase table
  25329.         05h get pointer to filename terminator table
  25330.         06h get pointer to collating sequence table
  25331.         07h (DOS 4+) get pointer to Double-Byte Character Set table
  25332.     BX = code page (-1=global code page)
  25333.     DX = country ID (-1=current country)
  25334.     ES:DI -> country information buffer (see below)
  25335.     CX = size of buffer (>= 5)
  25336. Return: CF set on error
  25337.         AX = error code (see AH=59h)
  25338.     CF clear if succesful
  25339.         CX = size of country information returned
  25340.         ES:DI -> country information
  25341. Notes:    AL=05h appears to return same info for all countries and codepages; it
  25342.       has been documented for DOS 5.0, but was undocumented in ealier
  25343.       versions
  25344.     NLSFUNC must be installed to get info for countries other than the
  25345.       default
  25346.     subfunctions 02h and 04h are identical under OS/2
  25347. SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h
  25348.  
  25349. Format of country information:
  25350. Offset    Size    Description
  25351.  00h    BYTE    info ID
  25352. ---if info ID = 01h---
  25353.  01h    WORD    size
  25354.  03h    WORD    country ID
  25355.  05h    WORD    code page
  25356.  07h 34 BYTEs    country-dependent info (see AH=38h)
  25357. ---if info ID = 02h---
  25358.  01h    DWORD    pointer to uppercase table (see below)
  25359. ---if info ID = 04h---
  25360.  01h    DWORD    pointer to filename uppercase table (see below)
  25361. ---if info ID = 05h---
  25362.  01h    DWORD    pointer to filename character table (see below)
  25363. ---if info ID = 06h---
  25364.  01h    DWORD    pointer to collating table (see below)
  25365. ---if info ID = 07h (DOS 4+)---
  25366.  01h    DWORD    pointer to DBCS lead byte table (see below)
  25367.  
  25368. Format of uppercase table:
  25369. Offset    Size    Description
  25370.  00h    WORD    table size
  25371.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  25372.  
  25373. Format of collating table:
  25374. Offset    Size    Description
  25375.  00h    WORD    table size
  25376.  02h 256 BYTEs    values used to sort characters 00h to FFh
  25377.  
  25378. Format of filename terminator table:
  25379. Offset    Size    Description
  25380.  00h    WORD    table size (not counting this word)
  25381.  02h    BYTE    ??? (01h for MSDOS 3.30-5.00)
  25382.  03h    BYTE    lowest permissible character value for filename
  25383.  04h    BYTE    highest permissible character value for filename
  25384.  05h    BYTE    ??? (00h for MSDOS 3.30-5.00)
  25385.  06h    BYTE    first excluded character in range \ all characters in this
  25386.  07h    BYTE    last excluded character in range  / range are illegal
  25387.  08h    BYTE    ??? (02h for MSDOS 3.30-5.00)
  25388.  09h    BYTE    number of illegal (terminator) characters
  25389.  0Ah  N BYTES    characters which terminate a filename:    ."/\[]:|<>+=;,
  25390. Note:    partially documented for DOS 5.0, but undocumented for earlier versions
  25391.  
  25392. Format of filename uppercase table:
  25393. Offset    Size    Description
  25394.  00h    WORD    table size
  25395.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  25396.  
  25397. Format of DBCS lead byte table:
  25398. Offset    Size    Description
  25399.  00h    WORD    length
  25400.  02h 2N BYTEs    start/end for N lead byte ranges
  25401.     WORD    0000h    (end of table)
  25402. ----------2165-------------------------------
  25403. INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
  25404.     AH = 65h
  25405.     AL = function
  25406.         20h capitalize character
  25407.         DL = character to capitalize
  25408.         Return: DL = capitalized character
  25409.         21h capitalize string
  25410.         DS:DX -> string to capitalize
  25411.         CX = length of string
  25412.         22h capitalize ASCIZ string
  25413.         DS:DX -> ASCIZ string to capitalize
  25414. Return: CF set on error
  25415.         AX = error code (see AH=59h)
  25416.     CF clear if successful
  25417. Note:    these calls have been documented for DOS 5+, but were undocumented in
  25418.       DOS 4.x.
  25419. ----------216523-----------------------------
  25420. INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
  25421.     AX = 6523h
  25422.     DL = character
  25423.     DH = second character of double-byte character (if applicable)
  25424. Return: CF set on error
  25425.     CF clear if successful
  25426.         AX = type
  25427.         00h no
  25428.         01h yes
  25429.         02h neither yes nor no
  25430. ----------2165-------------------------------
  25431. INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
  25432.     AH = 65h
  25433.     AL = function
  25434.         A0h capitalize filename character
  25435.         DL = character to capitalize
  25436.         Return: DL = capitalized character
  25437.         A1h capitalize counted filename string
  25438.         DS:DX -> filename string to capitalize
  25439.         CX = length of string
  25440.         A2h capitalize ASCIZ filename
  25441.         DS:DX -> ASCIZ filename to capitalize
  25442. Return: CF set on error
  25443.         AX = error code (see AH=59h)
  25444.     CF clear if successful
  25445. Note:    nonfunctional in DOS 4.00 through 5.00 due to a bug (the code sets a
  25446.       pointer depending on the high bit of AL, but doesn't clear the
  25447.       bit before branching by function number).
  25448. ----------216601-----------------------------
  25449. INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
  25450.     AX = 6601h
  25451. Return: CF set on error
  25452.         AX = error code (see AH=59h)
  25453.     CF clear if successful
  25454.         BX = active code page (see AX=6602h)
  25455.         DX = system code page
  25456. SeeAlso: AX=6602h
  25457. ----------216602-----------------------------
  25458. INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
  25459.     AX = 6602h
  25460.     BX = active code page
  25461.         437 US
  25462.         850 Multilingual
  25463.         852 Slavic/Latin II (DOS 5+)
  25464.         857 Turkish
  25465.         860 Portugal
  25466.         861    Iceland
  25467.         863 Canada (French)
  25468.         865 Norway/Denmark
  25469.     DX = system code page (active page at boot time)
  25470. Return: CF set on error
  25471.         AX = error code (see AH=59h)
  25472.     CF clear if successful
  25473. SeeAlso: AX=6601h
  25474. ----------2167-------------------------------
  25475. INT 21 - DOS 3.3+ - SET HANDLE COUNT
  25476.     AH = 67h
  25477.     BX = size of new file handle table for process
  25478. Return: CF clear if successful
  25479.     CF set on error
  25480.         AX = error code (see AH=59h)
  25481. Desc:    adjust the size of the per-process open file table, thus raising or
  25482.       lowering the limit on the number of files the caller can open
  25483.       simultaneously
  25484. Notes:    if BX <= 20, no action is taken if the handle limit has not yet been
  25485.       increased, and the table is copied back into the PSP if the limit
  25486.       is currently > 20 handles
  25487.     for file handle tables of > 20 handles, DOS 3.30 never reuses the
  25488.       same memory block, even if the limit is being reduced; this can lead
  25489.       to memory fragmentation as a new block is allocated and the existing
  25490.       one freed
  25491.     only the first 20 handles are copied to child processes in DOS 3.3
  25492. BUG:    the original release of DOS 3.30 allocates a full 64K for the handle
  25493.       table on requests for an even number of handles
  25494. SeeAlso: AH=26h,AH=86h
  25495. ----------2168-------------------------------
  25496. INT 21 - DOS 3.3+ - "FFLUSH" - COMMIT FILE
  25497.     AH = 68h
  25498.     BX = file handle
  25499. Return: CF clear if successful
  25500.         all data still in DOS disk buffers is written to disk immediately,
  25501.           and the file's directory entry is updated
  25502.     CF set on error
  25503.         AX = error code (see AH=59h)
  25504. SeeAlso: AX=5D01h,AH=6Ah,INT 2F/AX=1107h
  25505. ----------2169-------------------------------
  25506. INT 21 U - DOS 4+ internal - GET/SET DISK SERIAL NUMBER
  25507.     AH = 69h
  25508.     AL = subfunction
  25509.         00h    get serial number
  25510.         01h set serial number
  25511.     BL = drive (0=default, 1=A, 2=B, etc)
  25512.     DS:DX -> disk info (see below)
  25513. Return: CF set on error
  25514.         AX = error code (see AH=59h)
  25515.     CF clear if successful
  25516.         AX destroyed
  25517.         (AL = 00h) buffer filled with appropriate values from extended BPB
  25518.         (AL = 01h) extended BPB on disk set to values from buffer
  25519. Notes:    does not generate a critical error; all errors are returned in AX
  25520.     error 0005h given if no extended BPB on disk
  25521.     does not work on network drives (error 0001h)
  25522.     buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
  25523.       extended BPB on disk
  25524.     this function is supported under Novell NetWare versions 2.0A through
  25525.       3.11; the returned serial number is the one a DIR would display,
  25526.       the volume label is the NetWare volume label, and the file system
  25527.       is set to "FAT16".
  25528.     the serial number is computed from the current date and time when the
  25529.       disk is created; the first part is the sum of the seconds/hundredths
  25530.       and month/day, the second part is the sum of the hours/minutes and
  25531.       year
  25532.     the volume label which is read or set is the one stored in the extended
  25533.       BPB on disks formatted with DOS 4.0+, rather than the special root
  25534.       directory entry used by the DIR command in COMMAND.COM (use AH=11h
  25535.       to find that volume label)
  25536. SeeAlso: AX=440Dh
  25537.  
  25538. Format of disk info:
  25539. Offset    Size    Description
  25540.  00h    WORD    info level (zero)
  25541.  02h    DWORD    disk serial number (binary)
  25542.  06h 11 BYTEs    volume label or "NO NAME    " if none present
  25543.  11h  8 BYTEs    (AL=00h only) filesystem type--string "FAT12   " or "FAT16   "
  25544. ----------2169-------------------------------
  25545. INT 21 - DR-DOS 5.0 - NULL FUNCTION
  25546.     AH = 69h
  25547. Return: AL = 00h
  25548. SeeAlso: AH=18h
  25549. ----------216969-----------------------------
  25550. INT 21 - VIRUS - "Rape-747" - INSTALLATION CHECK
  25551.     AX = 6969h
  25552. Return: AX = 0666h if resident
  25553. SeeAlso: AX=58CCh,AH=76h"VIRUS"
  25554. ----------216A-------------------------------
  25555. INT 21 U - DOS 4+ - COMMIT FILE
  25556.     AH = 6Ah
  25557.     BX = file handle
  25558. Return: CF clear if successful
  25559.         AH = 68h
  25560.     CF set on error
  25561.         AX = error code (06h) (see AH=59h)
  25562. Note:    identical to AH=68h in DOS 5.0; not known whether this is the case in
  25563.       DOS 4.x
  25564. SeeAlso: AH=68h
  25565. ----------216B-------------------------------
  25566. INT 21 U - DOS 4.0 internal - ???
  25567.     AH = 6Bh
  25568.     AL = subfunction
  25569.         00h ???
  25570.         DS:SI -> Current Directory Structure???
  25571.         CL = drive (1=A:)
  25572.         01h ???
  25573.         DS:SI -> ???
  25574.         CL = file handle???
  25575.         02h ???
  25576.         DS:SI -> Current Directory Structure???
  25577.         DI = ???
  25578.         CX = drive (1=A:)
  25579. Return: CF set on error
  25580.         AX = error code (see INT 21/AH=59h)
  25581.     CF clear if successful
  25582. Note:    passed through to INT 2F/AX=112Fh with AX on top of stack
  25583. SeeAlso: AH=6Bh"DOS 5",INT 2F/AX=112Fh
  25584. ----------216B-------------------------------
  25585. INT 21 U - DOS 5.0 - NULL FUNCTION
  25586.     AH = 6Bh
  25587. Return: AL = 00h
  25588. Note:    this function does nothing and returns immediately
  25589. SeeAlso: AH=6Bh"DOS 4"
  25590. ----------216C00-----------------------------
  25591. INT 21 - DOS 4+ - EXTENDED OPEN/CREATE
  25592.     AX = 6C00h
  25593.     BL = open mode as in AL for normal open (INT 21/AH=3Dh)
  25594.         bit 7: inheritance
  25595.         bits 4-6: sharing mode
  25596.         bit 3 reserved
  25597.         bits 0-2: access mode
  25598.     BH = flags
  25599.         bit 6 = auto commit on every write
  25600.         bit 5 = return error rather than doing INT 24h
  25601.     CX = create attribute
  25602.         bits 6-15 reserved
  25603.         bit 5: archive
  25604.         bit 4: reserved
  25605.         bit 3: volume label
  25606.         bit 2: system
  25607.         bit 1: hidden
  25608.         bit 0: readonly
  25609.     DL = action if file exists/does not exists
  25610.         bits 7-4 action if file does not exist
  25611.             0000 fail
  25612.             0001 create
  25613.         bits 3-0 action if file exists
  25614.             0000 fail
  25615.             0001 open
  25616.             0010 replace/open
  25617.     DH = 00h (reserved)
  25618.     DS:SI -> ASCIZ file name
  25619. Return: CF set on error
  25620.        AX = error code (see AH=59h)
  25621.     CF clear if successful
  25622.        AX = file handle
  25623.        CX = 1 file opened
  25624.         2 file created
  25625.         3 file replaced
  25626. Note:    the PC LAN Program only supports DL=01h, DL=10h/sharing=compatibility,
  25627.       and DL=12h
  25628. SeeAlso: AH=3Ch,AH=3Dh
  25629. ----------217070BX6060-----------------------
  25630. INT 21 - PCW Weather Card interface - GET DATA SEGMENT
  25631.     AX = 7070h
  25632.     BX = 6060h
  25633.     CX = 7070h
  25634.     DX = 7070h
  25635.     SX = 7070h
  25636.     DX = 7070h
  25637. Return: AX = segment of data structure
  25638. Notes:    the data structure is at offset 516 from this segment.
  25639.     the update byte is at offset 514 from this segment.  Updates are
  25640.       once per second while this byte is nonzero and it is decremented
  25641.       once per second.  While this byte is 0 updates are once per minute.
  25642. SeeAlso: AX=7070h/BX=7070h
  25643.  
  25644. Format of data structure:
  25645. Offset    Type    Description
  25646.  00h    WORD    hour
  25647.  02h    WORD    minute
  25648.  04h    WORD    second
  25649.  06h    WORD    day
  25650.  08h    WORD    month
  25651.  0Ah    WORD    year
  25652.  0Ch    WORD    ???
  25653.  0Eh    WORD    relative barometric pressure (in 1/100 inches)
  25654.  10h    WORD    ???
  25655.  12h    WORD    ???
  25656.  14h    WORD    temperature 1 (in 1/10 degrees F)
  25657.  16h    WORD    temperature 1 lowest (in 1/10 degrees F)
  25658.  18h    WORD    temperature 1 highest (in 1/10 degrees F)
  25659.  1Ah    WORD    temperature 2 (in 1/10 degrees F)
  25660.  1Ch    WORD    temperature 2 lowest (in 1/10 degrees F)
  25661.  1Eh    WORD    temperature 2 highest (in 1/10 degrees F)
  25662.  20h    WORD    wind speed (in MPH)
  25663.  22h    WORD    average of 60 wind speed samples (in MPH)
  25664.  24h    WORD    highest wind speed (in MPH)
  25665.  26h    WORD    wind chill factor  (in 1/10 degrees F)
  25666.  28h    WORD    lowest wind chill factor (in 1/10 degrees F)
  25667.  2Ah    WORD    ???
  25668.  2Ch    WORD    wind direction (in degrees)
  25669.  2Eh    WORD    accumulated daily rainfall (in 1/10 inches)
  25670.  30h    WORD    accumulated annual rainfall (in 1/10 inches)
  25671. ----------217070BX7070-----------------------
  25672. INT 21 - PCW Weather Card interface - INSTALLATION CHECK
  25673.     AX = 7070h
  25674.     BX = 7070h
  25675.     CX = 7070h
  25676.     DX = 7070h
  25677.     SX = 7070h
  25678.     DX = 7070h
  25679. Return: AX = 0070h
  25680.     BX = 0070h
  25681.     CX = 0070h
  25682.     DX = 0070h
  25683.     SX = 0070h
  25684.     DX = 0070h
  25685. SeeAlso: AX=7070h/BX=6060h,AX=8080h
  25686. ----------2176-------------------------------
  25687. INT 21 - VIRUS - "Klaeren"/"Hate" - INSTALLATION CHECK
  25688.     AH = 76h
  25689. Return: AL = 48h if resident
  25690. SeeAlso: AX=6969h,AX=7700h"VIRUS"
  25691. ----------217761-----------------------------
  25692. INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK
  25693.     AX = 7761h ('wa')
  25694. Return: AX = 6177h
  25695. Note:    WATCH.COM is part of the "TSR" package by TurboPower Software
  25696. SeeAlso: INT 16/AX=7761h
  25697. ----------217700-----------------------------
  25698. INT 21 - VIRUS - "Growing Block" - INSTALLATION CHECK
  25699.     AX = 7700h
  25700. Return: AX = 0920h if resident
  25701. SeeAlso: AH=76h,AH=7Fh
  25702. ----------217F-------------------------------
  25703. INT 21 - VIRUS - "Squeaker" - INSTALLATION CHECK
  25704.     AH = 7Fh
  25705. Return: AH = 80h if resident
  25706. SeeAlso: AX=7700h,AH=83h"VIRUS"
  25707. ---------------------------------------------
  25708. Interrupt List, part 4 of 8
  25709. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  25710. ----------2180-------------------------------
  25711. INT 21 - European MSDOS 4.0 - "AEXEC" - EXECUTE PROGRAM IN BACKGROUND
  25712.     AH = 80h
  25713.     CX = mode
  25714.         0000h place child in zombie mode on exit to preserve exit code
  25715.         0001h discard child process and exit code on termination
  25716.     DS:DX -> ASCIZ full program name
  25717.     ES:BX -> parameter block (as for AX=4B00h)
  25718. Return: CF clear if successful
  25719.         AX = Command Subgroup ID (CSID)
  25720.     CF set on error
  25721.         AX = error code (see AH=59h)
  25722. Desc:    asynchronously execute a program, creating a new process for it
  25723. Notes:    this function is called by the DETACH command
  25724.     there is a system-wide limit of 32 processes
  25725.     the CSID is used to identify all processes that have been spawned by
  25726.       a given process, whether directly or indirectly
  25727.     programs to be run in the background must use the new executable format
  25728.       (see AH=4Bh)
  25729.     background processes may only perform asynchronous (background) EXECs,
  25730.       either this function or AX=4B04h
  25731.     background processes may execute INT 11, INT 12, INT 21, INT 2A, and
  25732.       INT 2F at any time; they may execute INT 10 and INT 16 only while
  25733.       they have opened a popup screen via INT 2F/AX=1401h; no other
  25734.       interrupts may be executed from the background
  25735.     background processes may not use drive B: or overlay their code
  25736.       segments
  25737. SeeAlso: AH=4Bh,AX=8700h,INT 2F/AX=1400h"POPUP"
  25738. ----------218080-----------------------------
  25739. INT 21 - PCW Weather Card interface - UNINSTALL PCW.COM AND FREE MEMORY
  25740.     AX = 8080h
  25741. Return: ???
  25742. SeeAlso: AX=7070h/BX=7070h
  25743. ----------2181-------------------------------
  25744. INT 21 - European MSDOS 4.0 - "FREEZE" - STOP A PROCESS
  25745.     AH = 81h
  25746.     BX = flag (00h freeze command subtree, 01h only specified process)
  25747.     CX = Process ID of head of command subtree
  25748. Return: CF clear if successful
  25749.     CF set on error
  25750.         AX = error code (no such process)
  25751. Desc:    temporarily suspend a process or a process and all of its children
  25752. Note:    if BX=0001h, this call will not return until the process is actually
  25753.       frozen, which may not be until after it unblocks from an I/O
  25754.       operation
  25755. SeeAlso: AH=82h,AH=89h,AX=8E00h,INT 15/AX=101Dh
  25756. ----------2182-------------------------------
  25757. INT 21 - European MSDOS 4.0 - "RESUME" - RESTART A PROCESS
  25758.     AH = 82h
  25759.     BX = flag (00h resume command subtree, 01h only specified process)
  25760.     CX = Process ID of head of command subtree
  25761. Return: CF clear if successful
  25762.     CF set on error
  25763.         AX = error code (no such process)
  25764. Desc:    restart a previously-suspended process or a process and all of its
  25765.       children
  25766. SeeAlso: AX=81h,INT 15/AX=101Eh
  25767. ----------2183-------------------------------
  25768. INT 21 - European MSDOS 4.0 - "PARTITION" - GET/SET FOREGROUND PARTITION SIZE
  25769.     AH = 83h
  25770.     AL = function
  25771.         00h get size
  25772.         01h set new size
  25773.         BX = new size in paragraphs
  25774. Return: CF clear if successful
  25775.         BX = current size (function 00h) or old size (function 01h)
  25776.     CF set on error
  25777.         AX = error code (01h,07h,0Dh)(see AH=59h)
  25778. Desc:    specify or determine how much memory may be allocated by the foreground
  25779.       process
  25780. Note:    if the partition size is set to 0000h, no partition management is done
  25781.       and all memory allocation is compatible with DOS 3.2.
  25782.     the partition size can be changed regardless of what use is being made
  25783.       of the changed memory; subsequent allocations will follow the
  25784.       partition rules (foreground processes may allocate only foreground
  25785.       memory; background processes allocate background memory first, then
  25786.       foreground memory)
  25787. SeeAlso: AH=48h,AH=4Ah
  25788. ----------2183-------------------------------
  25789. INT 21 - VIRUS - "SVC" - INSTALLATION CHECK
  25790.     AH = 83h
  25791. Return: DX = 1990h if resident
  25792. SeeAlso: AH=76h,AH=84h"VIRUS"
  25793. ----------2184-------------------------------
  25794. INT 21 - VIRUS - "SVC 5.0" or "SVC 6.0" - INSTALLATION CHECK
  25795.     AH = 84h
  25796. Return: DX = 1990h if resident
  25797.         BH = version number (major in high nybble, minor in low)
  25798. SeeAlso: AH=83h"VIRUS",AH=89h"VIRUS"
  25799. ----------218400-----------------------------
  25800. INT 21 - European MSDOS 4.0 - "CREATMEM" - CREATE A SHARED MEMORY AREA
  25801.     AX = 8400h
  25802.     BX = size in bytes (0000h = 65536)
  25803.     CX = flags
  25804.         bit 6: zero-initialize segment
  25805.     DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
  25806. Return: CF clear if successful
  25807.         AX = segment address of shared memory global object
  25808.     CF set on error
  25809.         AX = error code (06h,08h) (see AH=59h)
  25810. Desc:    create an area of memory which may be accessed by multiple processes
  25811. Notes:    shared memory objects are created as special files (thus the
  25812.       restriction on the name)
  25813.     on successful creation, the reference count is set to 1
  25814. SeeAlso: AX=8401h,AX=8402h,INT 15/AX=DE19h
  25815. ----------218401-----------------------------
  25816. INT 21 - European MSDOS 4.0 - "GETMEM" - OBTAIN ACCESS TO SHARED MEMORY AREA
  25817.     AX = 8401h
  25818.     CX = flags
  25819.         bit 7: writable segment (ignored by MSDOS 4.0)
  25820.     DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
  25821. Return: CF clear if successful
  25822.         AX = segment address of shared memory global object
  25823.         CX = size in bytes
  25824.     CF set on error
  25825.         AX = error code (invalid name)
  25826. Desc:    get address of a previously-created area of memory which may be
  25827.       accessed by multiple processes    
  25828. Note:    this call increments the reference count for the shared memory area
  25829. SeeAlso: AX=8400h,AX=8402h
  25830. ----------218402-----------------------------
  25831. INT 21 - European MSDOS 4.0 - "RELEASEMEM" - FREE SHARED MEMORY AREA
  25832.     AX = 8402h
  25833.     BX = handle (segment address of shared memory object)
  25834. Return: CF clear if successful
  25835.     CF set on error
  25836.         AX = error code (no such name)
  25837. Desc:    indicate that the specified area of shared memory will no longer be
  25838.       used by the caller
  25839. Note:    the reference count is decremented and the shared memory area is
  25840.       deallocated if the new reference count is zero
  25841. SeeAlso: AX=8400h,AX=8401h,INT 15/AX=DE19h
  25842. ----------2185-------------------------------
  25843. INT 21 U - European MSDOS 4.0 - ???
  25844.     AH = 85h
  25845.     ???
  25846. Return: ???
  25847. ----------2186-------------------------------
  25848. INT 21 - European MSDOS 4.0 - "SETFILETABLE" - INSTALL NEW FILE HANDLE TABLE
  25849.     AH = 86h
  25850.     BX = total number of file handles in new table
  25851. Return: CF clear if successful
  25852.     CF set on error
  25853.         AX = error code (06h,08h) (see AH=59h)
  25854. Desc:    adjust the size of the per-process open file table, thus raising or
  25855.       lowering the limit on the number of files the caller can open
  25856.       simultaneously
  25857. Notes:    any currently-open files are copied to the new table
  25858.     if the table is increased beyond the default 20 handles, only the
  25859.       first 20 will be inherited by child processes
  25860.     error 06h is returned if the requested number of handles exceeds
  25861.       system limits or would require closing currently-open files
  25862. SeeAlso: AH=26h,AH=67h
  25863. ----------2187-------------------------------
  25864. INT 21 - European MSDOS 4.0 - "GETPID" - GET PROCESS IDENTIFIER
  25865.     AH = 87h
  25866. Return: AX = PID
  25867.     BX = parent process's PID
  25868.     CX = Command Subgroup ID (CSID)
  25869. Desc:    determine an identifier by which to access the calling process
  25870. Notes:    called by MS C v5.1 getpid() function
  25871.     this function apparently must return AX=0001h for INT 21/AH=80h to
  25872.       succeed
  25873.     one possible check for European MSDOS 4.0 is to issue this call with
  25874.       AL=00h and check whether AL is nonzero on return
  25875. SeeAlso: AH=30h,AH=62h,AH=80h
  25876. ----------2188-------------------------------
  25877. INT 21 U - European MSDOS 4.0 - ???
  25878.     AH = 88h
  25879.     ???
  25880. Return: ???
  25881. ----------2189-------------------------------
  25882. INT 21 - European MSDOS 4.0 - SLEEP
  25883.     AH = 89h
  25884.     CX = time in milliseconds or 0000h to give up time slice
  25885. Return: CF clear if successful
  25886.         CX = 0000h
  25887.     CF set on error
  25888.         AX = error code (interrupted system call)
  25889.         CX = sleep time remaining
  25890. Desc:    suspend the calling process for the specified duration
  25891. Notes:    the sleep interval is rounded up to the next higher increment of the
  25892.       scheduler clock, and may be extended further if other processes are
  25893.       running
  25894.     this call may be interrupted by signals (see AH=8Dh)
  25895.     reportedly called by Microsoft C 4.0 startup code
  25896.     background processes have higher priority than the foreground process,
  25897.       and should thus periodically yield the CPU
  25898. SeeAlso: AH=81h,INT 15/AX=1000h,INT 2F/AX=1680h,INT 7A/BX=000Ah
  25899. ----------2189-------------------------------
  25900. INT 21 - VIRUS - "Vriest" - INSTALLATION CHECK
  25901.     AH = 89h
  25902. Return: AX = 0123h if resident
  25903. SeeAlso: AH=84h"VIRUS",AH=90h"VIRUS"
  25904. ----------218A-------------------------------
  25905. INT 21 - European MSDOS 4.0 - "CWAIT" - WAIT FOR CHILD TO TERMINATE
  25906.     AH = 8Ah
  25907.     BL = range (00h command subtree, 01h any child)
  25908.     BH = suspend flag
  25909.         00h suspend if children exist but none are dead
  25910.         01h return if no dead children
  25911.     CX = Process ID of head of command subtree
  25912. Return: CF clear if successful
  25913.         AH = termination type
  25914.         00h normal termination
  25915.         01h aborted by Control-C
  25916.         02h aborted by I/O error
  25917.         03h terminate and stay resident
  25918.         04h aborted by signal
  25919.         05h aborted by program error
  25920.         AL = return code from child or aborting signal
  25921.         BX = PID of child (0000h if no dead children)
  25922.     CF set on error
  25923.         AX = error code (no child,interrupted system call)
  25924. Desc:    get return code from an asynchronously-executed child program,
  25925.       optionally waiting if no return code is available
  25926. SeeAlso: AH=4Bh,AH=4Dh,AH=80h,AH=8Dh
  25927. ----------218B-------------------------------
  25928. INT 21 U - European MSDOS 4.0 - ???
  25929.     AH = 8Bh
  25930.     ???
  25931. Return: ???
  25932. ----------218C-------------------------------
  25933. INT 21 - European MSDOS 4.0 - SET SIGNAL HANDLER
  25934.     AH = 8Ch
  25935.     AL = signal number (see below)
  25936.     BL = action (see below)
  25937.     DS:DX -> signal handler
  25938. Return: CF clear if successful
  25939.         AL = previous action
  25940.         ES:BX -> previous signal handler
  25941.     CF set on error
  25942.         AX = error code (01h,invalid SigNumber or Action) (see AH=59h)
  25943. Desc:    set the routine which will be invoked on a number of exceptional
  25944.       conditions
  25945. Note:    all signals will be sent to the most recently installed handler
  25946. SeeAlso: AH=8Dh
  25947.  
  25948. Values for signal number:
  25949.  01h    SIGINTR        Control-C or user defined interrupt key
  25950.  08h    SIGTERM        program termination
  25951.  09h    SIGPIPE        broken pipe
  25952.  0Dh    SIGUSER1    reserved for user definition
  25953.  0Eh    SIGUSER2    reserved for user definition
  25954.  
  25955. Values for signal action:
  25956.  00h    SIG_DFL        terminate process on receipt
  25957.  01h    SIG_IGN        ignore signal
  25958.  02h    SIG_GET        signal is accepted
  25959.  03h    SIG_ERR        sender gets error
  25960.  04h    SIG_ACK        acknowledge received signal and clear it, but don't
  25961.             change current setting
  25962.  
  25963. Signal handler is called with:
  25964.     AL = signal number
  25965.     AH = signal argument
  25966. Return: RETF, CF set: terminate process
  25967.     RETF, CF clear, ZF set: abort any interrupted system call with an error
  25968.     RETF, CF clear, ZF clear: restart any interrupted system call
  25969.     IRET: restart any interrupted system call
  25970. Note:    the signal handler may also perform a nonlocal GOTO by resetting the
  25971.       stack pointer and jumping; before doing so, it should dismiss the
  25972.       signal by calling this function with BL=04h
  25973. ----------218D-------------------------------
  25974. INT 21 - European MSDOS 4.0 - SEND SIGNAL
  25975.     AH = 8Dh
  25976.     AL = signal number (see AH=8Ch)
  25977.     BH = signal argument
  25978.     BL = action
  25979.         00h send to entire command subtree
  25980.         01h send only to specified process
  25981.     DX = Process ID
  25982. Return: CF clear if successful
  25983.     CF set on error
  25984.         AX = error code (01h,06h)(see AH=59h)
  25985. Desc:    invoke the exceptional-condition handler for the specified process
  25986. Note:    error 06h may be returned if one or more of the affected processes
  25987.       have an error handler for the signal
  25988. SeeAlso: AH=8Ch
  25989. ----------218E00-----------------------------
  25990. INT 21 - European MSDOS 4.0 - "SETPRI" - GET/SET PROCESS PRIORITY
  25991.     AX = 8E00h
  25992.     BH = 00h
  25993.     BL = action
  25994.         00h set priority for command subtree
  25995.         01h set priority for specified process only
  25996.     CX = Process ID
  25997.     DH = 00h
  25998.     DL = change in priority (00h to get priority)
  25999. Return: CF clear if successful
  26000.         DL = process priority
  26001.         DH destroyed
  26002.     CF set on error
  26003.         AX = error code (01h,no such process)(see AH=59h)
  26004. Desc:    specify or determine the execution priority of the specified process
  26005.       or the process and all of its children
  26006. SeeAlso: AH=81h
  26007. ----------218F-------------------------------
  26008. INT 21 U - European MSDOS 4.0 - ???
  26009.     AH = 8Fh
  26010.     ???
  26011. Return: ???
  26012. ----------2190-------------------------------
  26013. INT 21 U - European MSDOS 4.0 - ???
  26014.     AH = 90h
  26015.     ???
  26016. Return: ???
  26017. ----------2190-------------------------------
  26018. INT 21 - VIRUS - "Carioca" - INSTALLATION CHECK
  26019.     AH = 90h
  26020. Return: AH = 01h if resident
  26021. SeeAlso: AH=89h"VIRUS",AX=9753h"VIRUS"
  26022. ----------2191-------------------------------
  26023. INT 21 U - European MSDOS 4.0 - ???
  26024.     AH = 91h
  26025.     ???
  26026. Return: ???
  26027. ----------2192-------------------------------
  26028. INT 21 U - European MSDOS 4.0 - ???
  26029.     AH = 92h
  26030.     ???
  26031. Return: ???
  26032. ----------2193-------------------------------
  26033. INT 21 - European MSDOS 4.0 - "PIPE" - CREATE A NEW PIPE
  26034.     AH = 93h
  26035.     CX = size in bytes
  26036. Return: CF clear if successful
  26037.         AX = read handle
  26038.         BX = write handle
  26039.     CF set on error
  26040.         AX = error code (08h) (see AH=59h)
  26041. Desc:    create a communications channel which may be used for interprocess
  26042.       data and command exchanges
  26043. SeeAlso: AH=3Ch,AH=3Fh,AH=40h,AH=84h
  26044. ----------2194-------------------------------
  26045. INT 21 U - European MSDOS 4.0 - ???
  26046.     AH = 94h
  26047.     ???
  26048. Return: ???
  26049. ----------2195-------------------------------
  26050. INT 21 - European MSDOS 4.0 - HARD ERROR PROCESSING
  26051.     AH = 95h
  26052.     AL = new state
  26053.        00h enabled
  26054.        01h disabled, automatically fail hard errors
  26055. Return: AX = previous setting
  26056. Desc:    specify whether hard (critical) errors should automatically fail the
  26057.       system call or invoke an INT 24
  26058. SeeAlso: INT 24
  26059. ----------2196-------------------------------
  26060. INT 21 U - European MSDOS 4.0 - ???
  26061.     AH = 96h
  26062.     ???
  26063. Return: ???
  26064. ----------2197-------------------------------
  26065. INT 21 U - European MSDOS 4.0 - ???
  26066.     AH = 97h
  26067.     ???
  26068. Return: ???
  26069. ----------219753-----------------------------
  26070. INT 21 - VIRUS - "Nina" - INSTALLATION CHECK
  26071.     AX = 9753h
  26072. Return: never (executes original program) if virus resident
  26073. SeeAlso: AH=90h"VIRUS",AX=A1D5h"VIRUS"
  26074. ----------2198-------------------------------
  26075. INT 21 U - European MSDOS 4.0 - ???
  26076.     AH = 98h
  26077.     ???
  26078. Return: ???
  26079. ----------2199-------------------------------
  26080. INT 21 u - European MSDOS 4.0 - "PBLOCK" - BLOCK A PROCESS
  26081.     AH = 99h
  26082.     DS:BX -> memory location to block on
  26083.     CX = timeout in milliseconds
  26084.     DH = nonzero if interruptible
  26085. Return: CF clear if awakened by event
  26086.         AX = 0000h
  26087.     CF set if unusual wakeup
  26088.         ZF set if timeout, clear if interrupted by signal
  26089.         AX = nonzero
  26090. Desc:    suspend calling process until another process sends a "restart" signal
  26091.       or a timeout occurs
  26092. SeeAlso: AH=9Ah,INT 2F/AX=0802h
  26093. ----------219A-------------------------------
  26094. INT 21 u - European MSDOS 4.0 - "PRUN" - UNBLOCK A PROCESS
  26095.     AH = 9Ah
  26096.     DS:BX -> memory location processes may have blocked on
  26097. Return: AX = number of processes awakened
  26098.     ZF set if no processes awakened
  26099. Desc:    restart all processes waiting for the specified "restart" signal
  26100. SeeAlso: AH=99h,INT 2F/AX=0802h
  26101. ----------21A0-------------------------------
  26102. INT 21 - Attachmate Extra - GET 3270 DISPLAY STATE
  26103.     AH = A0h
  26104. Return: AL = display status
  26105.         bit     7  : 0=windowed, 1=enlarged
  26106.         bits 6-3: current screen profile number 0-9
  26107.         bits 2-0: active window number
  26108.             0=PC, 1-4=host B-E, 5-6=notepad F-G
  26109.     BX = host window status
  26110.         bit 15:  reserved
  26111.         bit 14:  0=host E window installed, 1=not
  26112.         bit 13:  0=host E terminal on, 1=off
  26113.         bit 12:  0=host E window displayed, 1=not
  26114.         bit 11:  reserved
  26115.         bit 10:  0=host D window installed, 1=not
  26116.         bit     9:  0=host D terminal on, 1=off
  26117.         bit     8:  0=host D window displayed, 1=not
  26118.         bit     7:  reserved
  26119.         bit     6:  0=host C window installed, 1=not
  26120.         bit     5:  0=host C terminal on, 1=off
  26121.         bit     4:  0=host C window displayed, 1=not
  26122.         bit     3:  reserved
  26123.         bit     2:  0=host B window installed, 1=not
  26124.         bit     1:  0=host B terminal on, 1=off
  26125.         bit     0:  0=host B window displayed, 1=not
  26126. Note:    Attachmate Extra is a 3270 emulator by Attachmate Corporation
  26127. SeeAlso: AH=A1h
  26128. ----------21A1-------------------------------
  26129. INT 21 - Attachmate Extra - SET 3270 DISPLAY STATE
  26130.     AH = A1h
  26131.     AL = set status byte
  26132.         bit     7  : 0=windowed, 1=enlarged
  26133.         bits 6-3: current screen profile number 0-9
  26134.         bits 2-0: active window number
  26135.             0=PC, 1-4=host B-E, 5-6=notepad F-G
  26136. SeeAlso: AH=A0h,AH=A2h
  26137. ----------21A1D5-----------------------------
  26138. INT 21 - VIRUS - "789"/"Filehider" - INSTALLATION CHECK
  26139.     AX = A1D5h
  26140. Return: AX = 900Dh if resident
  26141. SeeAlso: AX=9753h,AX=A55Ah
  26142. ----------21A2-------------------------------
  26143. INT 21 - Attachmate Extra - SET HOST WINDOW STATE
  26144.     AH = A2h
  26145.     AL = set status byte
  26146.         bit     7  : 0=power off, 1=power on
  26147.         bit     6  : 0=not installed, 1=installed
  26148.         bits 5-3: reserved
  26149.         bits 2-0: window number 1-4=host B-E
  26150. SeeAlso: AH=A1h
  26151. ----------21A3-------------------------------
  26152. INT 21 - Attachmate Extra - SEND KEYSTROKES TO HOST WINDOW
  26153.     AH = A3h
  26154.     AL = window number (1-4=host B-E)
  26155.     CX = 0001h
  26156.     DS:BX -> keystroke buffer
  26157.     DL = zero if keystroke buffer contains host function code,
  26158.          non-zero if keystroke buffer contains ASCII character
  26159. Return: CX = zero if character sent, non-zero if not
  26160.     BX incremented if CX=0
  26161.  
  26162. Values for host function code:
  26163.     00h=reserved    10h=PF16    20h=Clear    30h=SysRq
  26164.     01h=PF1        11h=PF17    21h=Print    31h=ErInp
  26165.     02h=PF2        12h=PF18    22h=Left    32h=ErEof
  26166.     03h=PF3        13h=PF19    23h=Right    33h=Ident
  26167.     04h=PF4        14h=PF20    24h=Up        34h=Test
  26168.     05h=PF5        15h=PF21    25h=Down    35h=Reset
  26169.     06h=PF6        16h=PF22    26h=Home    36h=DevCncl
  26170.     07h=PF7        17h=PF23    27h=Fast Left    37h=Dup
  26171.     08h=PF8        18h=PF24    28h=Fast Right    38h=FldMark
  26172.     09h=PF9        19h=Alt on    29h=Bksp    39h=Enter
  26173.     0Ah=PF10    1Ah=Alt off    2Ah=Insert    3Ah=CrSel
  26174.     0Bh=PF11    1Bh=Shift on    2Bh=Delete
  26175.     0Ch=PF12    1Ch=Shift off    2Ch=Backtab
  26176.     0Dh=PF13    1Dh=PA1        2Dh=Tab
  26177.     0Eh=PF14    1Eh=PA2        2Eh=Newline
  26178.     0Fh=PF15    1Fh=PA3        2Fh=Attn
  26179. ----------21A4-------------------------------
  26180. INT 21 - Attachmate Extra - GET HOST WINDOW BUFFER ADDRESS
  26181.     AH = A4h
  26182.     AL = window number (1-4=host B-E)
  26183. Return: DS:BX -> 3270 display buffer
  26184. SeeAlso: AH=A5h,AH=B8h
  26185. ----------21A5-------------------------------
  26186. INT 21 - Attachmate Extra - GET HOST WINDOW CURSOR POSITION
  26187.     AH = A5h
  26188.     AL = window number (1-4=host B-E)
  26189. Return: BX = cursor position (80 * row + column, where 0:0 is upper left)
  26190. Note:    if the host window is configured with the Extended Attribute (EAB)
  26191.       feature, multiply the cursor position by 2 to obtain the byte offset
  26192.       into the display buffer
  26193. SeeAlso: AH=A4h
  26194. ----------21A55A-----------------------------
  26195. INT 21 - VIRUS - "Eddie-2" - INSTALLATION CHECK
  26196.     AX = A55Ah
  26197. Return: AX = 5AA5h if resident
  26198. SeeAlso: AX=A1D5h,AX=AA00h
  26199. ----------21AA00-----------------------------
  26200. INT 21 - VIRUS - "Blinker" - INSTALLATION CHECK
  26201.     AX = AA00h
  26202. Return: AX = 00AAh if resident
  26203. SeeAlso: AX=A55Ah,AX=AA03h
  26204. ----------21AA03-----------------------------
  26205. INT 21 - VIRUS - "Backtime" - INSTALLATION CHECK
  26206.     AX = AA03h
  26207. Return: AX = 03AAh if resident
  26208. SeeAlso: AX=AA00h,AH=ABh
  26209. ----------21AB-------------------------------
  26210. INT 21 - VIRUS - "600" or "Voronezh"-family - INSTALLATION CHECK
  26211.     AH = ABh
  26212. Return: AX = 5555h if resident
  26213. SeeAlso: AX=AA03h,AX=BBBBh"VIRUS"
  26214. ----------21AF-------------------------------
  26215. INT 21 - Attachmate Extra - GET TRANSLATE TABLE ADDRESS
  26216.     AH = AFh
  26217. Return: DS:BX -> translate tables (see below)
  26218.  
  26219. Format of translate tables:
  26220. Offset    Size    Description
  26221.  00h 256 BYTEs    ASCII to 3270 buffer code translate table
  26222. 100h 256 BYTEs    3270 buffer code to ASCII translate table
  26223. 200h 256 BYTEs    3270 buffer code to EBCDIC translate table
  26224. 300h 256 BYTEs    EBCDIC to 3270 buffer code translate table
  26225. ----------21B5-------------------------------
  26226. INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL
  26227.     AH = B5h
  26228.     AL = subfunction
  26229.         03h get task mode
  26230.         Return: AH = 00h
  26231.             AL = current task mode byte
  26232.         04h get task mode pointer
  26233.         Return: ES:BX -> task mode byte
  26234. Notes:    the task mode byte specifies how task cleanup should be performed, but
  26235.       is declared to be version-dependent
  26236.     allows a program to disable the automatic cleanup for programs managing
  26237.       task swapping, etc.
  26238.  
  26239. Values for task mode byte in version 3.01:
  26240.  00h-03h reserved
  26241.  04h     no task cleanup
  26242. ----------21B6-------------------------------
  26243. INT 21 - Novell NetWare - FILE SERVICES - EXTENDED FILE ATTRIBUTES
  26244.     AH = B6h
  26245.     AL = subfunction
  26246.         00h get extended file attributes
  26247.         01h set extended file attributes
  26248.         CL = extended file attributes (see below)
  26249.     DS:DX -> ASCIZ pathname (max 255 bytes)
  26250. Return: CF set on error
  26251.         AL = error code
  26252.         8Ch caller lacks privileges
  26253.         FEh not permitted to search directory
  26254.         FFh file not found
  26255.     CF clear if successful
  26256.         AL = 00h (success)
  26257.         CL = current extended file attributes (see below)
  26258. Note:    this function is supported by Advanced NetWare 2.1+
  26259. SeeAlso: AX=4300h,AH=E3h/SF=0Fh
  26260.  
  26261. Bitmask of extended file attributes:
  26262.  bits 2-0: search mode (executables only)
  26263.     000 none (use shell's default search)
  26264.     001 search on all opens without path
  26265.     010 do not search
  26266.     011 search on read-only opens without path
  26267.     100 reserved
  26268.     101 search on all opens
  26269.     110 reserved
  26270.     111 search on all read-only opens
  26271.  bit 3: reserved
  26272.  bit 4: transactions on file tracked
  26273.  bit 5: file's FAT indexed
  26274.  bit 6: read audit (to be implemented)
  26275.  bit 7: write audit (to be implemented)
  26276. ----------21B8-------------------------------
  26277. INT 21 - Attachmate Extra - DISABLE HOST BUFFER UPDATES
  26278.     AH = B8h
  26279.     AL = window number (1-4=host B-E)
  26280.     DL = 01h
  26281. Notes:    only valid in CUT mode
  26282.     next AID keystroke (eg Enter) enables host buffer updates
  26283. SeeAlso: AH=A4h
  26284. ----------21B800-----------------------------
  26285. INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT CAPTURE FLAGS
  26286.     AX = B800h
  26287.     CX = size of reply buffer (01h-3Fh)
  26288.     ES:BX -> reply buffer for capture flags table (see below)
  26289. Return: AL = status
  26290.         00h successful
  26291. Note:    this function is supported by Advanced NetWare 2.0+
  26292. SeeAlso: AX=B801h,AX=B802h,AH=DFh/DL=00h,AH=DFh/DL=04h
  26293.  
  26294. Format of capture flags table:
  26295. Offset    Size    Description
  26296.  00h    BYTE    status (used internally, should be set to 00h)
  26297.  01h    BYTE    print flags
  26298.         bit 2: print capture file if interrupted by loss of connection
  26299.             3: no automatic form feed after print job
  26300.             6: printing control sequences interpreted by print service
  26301.             7: print banner page before capture file
  26302.  02h    BYTE    tab size (01h-12h, default 08h)
  26303.  03h    BYTE    printer number on server (00h-04h, default 00h)
  26304.  04h    BYTE    number of copies to print (00h-FFh, default 01h)
  26305.  05h    BYTE    form type required in printer (default 00h)
  26306.  06h    BYTE    reserved
  26307.  07h 13 BYTEs    text to be placed on banner page
  26308.  14h    BYTE    reserved
  26309.  15h    BYTE    default local printer (00h = LPT1)
  26310.  16h    WORD    timeout in clock ticks for flushing capture file on inactivity
  26311.         (big-endian)
  26312.         0000h = never timeout
  26313.  18h    BYTE    flush capture file on LPT close if nonzero
  26314.  19h    WORD    maximum lines per page (big-endian)
  26315.  1Bh    WORD    maximum characters per line (big-endian)
  26316.  1Dh 13 BYTEs    name of form required in printer
  26317.  2Ah    BYTE    LPT capture flag
  26318.         00h inactive, FFh LPT device is being captured
  26319.  2Bh    BYTE    file capture flag
  26320.         00h if no file specified, FFh if capturing to file
  26321.  2Ch    BYTE    timing out (00h if no timeout in effect, FFh if timeout counter
  26322.         running)
  26323.  2Dh    DWORD    address of printer setup string (big-endian)
  26324.  31h    DWORD    address of printer reset string (big-endian)
  26325.  35h    BYTE    target connection ID
  26326.  36h    BYTE    capture in progress if FFh
  26327.  37h    BYTE    job queued for printing if FFh
  26328.  38h    BYTE    print job valid if FFh
  26329.  39h    DWORD    bindery object ID of print queue if previous byte FFh
  26330.  3Dh    WORD    print job number (1-999) `````(big-endian)
  26331. ----------21B801-----------------------------
  26332. INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT CAPTURE FLAGS
  26333.     AX = B801h
  26334.     CX = size of buffer (01h-3Fh)
  26335.     ES:BX -> buffer containing capture flags table (see below)
  26336. Return: AL = status
  26337.         00h successful
  26338. Note:    this function is supported by Advanced NetWare 2.0+
  26339. SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
  26340. ----------21B802-----------------------------
  26341. INT 21 - Novell NetWare - PRINT SERVICES - GET SPECIFIC CAPTURE FLAGS
  26342.     AX = B802h
  26343.     CX = size of reply buffer (01h-3Fh)
  26344.     DH = LPT port (00h-02h)
  26345.     ES:BX -> reply buffer for capture flags table (see AX=B800h)
  26346. Return: AL = status
  26347.         00h successful
  26348. Note:    this function is supported by Advanced NetWare 2.1+
  26349. SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
  26350. ----------21B803-----------------------------
  26351. INT 21 - Novell NetWare - PRINT SERVICES - SET SPECIFIC CAPTURE FLAGS
  26352.     AX = B803h
  26353.     CX = size of buffer (01h-3Fh)
  26354.     DH = LPT port (00h-02h)
  26355.     ES:BX -> buffer containing capture flags table (see below)
  26356. Return: AL = status
  26357.         00h successful
  26358. Note:    this function is supported by Advanced NetWare 2.1+
  26359. SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
  26360. ----------21B804-----------------------------
  26361. INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT LOCAL PRINTER
  26362.     AX = B804h
  26363. Return: DH = default LPT port (00h-02h)
  26364. Note:    this function is supported by Advanced NetWare 2.1+
  26365. SeeAlso: AX=B800h,AX=B805h,AH=DFh/DL=00h
  26366. ----------21B805-----------------------------
  26367. INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT LOCAL PRINTER
  26368.     AX = B805h
  26369.     DH = new default LPT port (00h-02h)
  26370. Return: AL = status
  26371.         00h successful
  26372. Note:    this function is supported by Advanced NetWare 2.1+
  26373. SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=00h
  26374. ----------21B806-----------------------------
  26375. INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT QUEUE
  26376.     AX = B806h
  26377.     DH = LPT port (00h-02h)
  26378.     BX:CX = print queue's object ID
  26379. Return: AL = status
  26380.         00h successful
  26381.         FFh job already set
  26382. Desc:    specify the print queue on which a print job is to be placed the next
  26383.       time a capture is started on the given printer port
  26384. Note:    this function is supported by Advanced NetWare 2.1+
  26385. SeeAlso: AX=B801h,AX=B807h,AX=E009h
  26386. ----------21B807-----------------------------
  26387. INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT JOB
  26388.     AX = B807h
  26389.     DH = LPT port (00h-02h)
  26390.     BX = job number (see AH=E3h/SF=68h)
  26391.     SI:DI:CX = NetWare file handle (see AH=E3h/SF=68h)
  26392. Return: AL = status
  26393.         00h successful
  26394.         FFh job already queued
  26395. Desc:    specify the capture file and print job to be used for subsequent
  26396.       output to the given printer port
  26397. Note:    this function is supported by Advanced NetWare 2.1+
  26398. SeeAlso: AX=B801h,AX=B806h,AX=E009h,AH=E3h/SF=68h
  26399. ----------21B808-----------------------------
  26400. INT 21 - Novell NetWare - PRINT SERVICES - GET BANNER USER NAME
  26401.     AX = B808h
  26402.     ES:BX -> 12-byte buffer for user name
  26403. Return: AL = status
  26404.         00h successful
  26405. Desc:    get the user name which is printed on the banner page
  26406. Notes:    this function is supported by Advanced NetWare 2.1+
  26407.     the default name is the login name of the user
  26408. SeeAlso: AX=B809h
  26409. ----------21B809-----------------------------
  26410. INT 21 - Novell NetWare - PRINT SERVICES - GET BANNER USER NAME
  26411.     AX = B809h
  26412.     ES:BX -> 12-byte buffer containing user name
  26413. Return: AL = status
  26414.         00h successful
  26415. Desc:    specify the user name which is printed on the banner page
  26416. Notes:    this function is supported by Advanced NetWare 2.1+
  26417.     the default name is the login name of the user
  26418. SeeAlso: AX=B808h
  26419. ----------21BB-------------------------------
  26420. INT 21 - Novell NetWare - WORKSTATION - SET END OF JOB STATUS
  26421.     AH = BBh
  26422.     AL = new EOJ flag
  26423.         00h disable EOJs
  26424.         01h enable EOJs
  26425. Return: AL = old EOJ flag
  26426. Desc:    specify whether the network shell should automatically generate an
  26427.       End of Job call when the root command processor regains control
  26428. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  26429.       Alloy NTNX
  26430. SeeAlso: AH=D6h
  26431. ----------21BBBB-----------------------------
  26432. INT 21 - VIRUS - "Hey You" - INSTALLATION CHECK
  26433.     AX = BBBBh
  26434. Return: AX = 6969h
  26435. SeeAlso: AH=ABh"VIRUS",AH=BEh"VIRUS"
  26436. ----------21BC-------------------------------
  26437. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOG PHYSICAL RECORD
  26438.     AH = BCh
  26439.     AL = flags
  26440.         bit 0: lock as well as log record
  26441.         1: non-exclusive lock
  26442.     BX = file handle
  26443.     CX:DX = starting offset in file
  26444.     SI:DI = length of region to lock
  26445.     BP = timeout in timer ticks (1/18 sec)
  26446.         0000h = don't wait if already locked
  26447. Return: AL = status
  26448.         00h successful
  26449.         96h no dynamic memory for file
  26450.         FEh timed out
  26451.         FFh failed
  26452. Desc:    add the specified physical record to the log table, optionally locking
  26453.       it
  26454. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26455.       Alloy NTNX
  26456. SeeAlso: AH=5Ch,AH=BDh,AH=BEh,AH=BFh,AH=C2h,AH=D0h
  26457. ----------21BD-------------------------------
  26458. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE PHYSICAL RECORD
  26459.     AH = BDh
  26460.     BX = file handle
  26461.     CX:DX = starting offset in file
  26462.     SI:DI = length of record
  26463. Return: AL = status
  26464.         00h successful
  26465.         FFh record not locked
  26466. Desc:    unlock the specified physical record but do not remove it from log
  26467.       table
  26468. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26469.       Alloy NTNX
  26470. SeeAlso: AH=BCh,AH=BEh"NetWare",AH=C0h,AH=C3h,AH=D2h
  26471. ----------21BE-------------------------------
  26472. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR PHYSICAL RECORD
  26473.     AH = BEh
  26474.     BX = file handle
  26475.     CX:DX = starting offset within file
  26476.     SI:DI = record length in bytes
  26477. Return: AL = status
  26478.         00h successful
  26479.         FFh specified record not locked
  26480. Desc:    unlock the physical record and remove it from the log table
  26481. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26482.       Alloy NTNX
  26483. SeeAlso: AH=5Ch,AH=BCh,AH=BDh,AH=C1h,AH=C4h,AH=D4h
  26484. ----------21BE-------------------------------
  26485. INT 21 - VIRUS - "Datalock" - INSTALLATION CHECK
  26486.     AH = BEh
  26487. Return: AX = 1234h if resident
  26488. SeeAlso: AX=BBBBh,AX=BE00h
  26489. ----------21BE00-----------------------------
  26490. INT 21 - VIRUS - "USSR-1049" - INSTALLATION CHECK
  26491.     AX = BE00h
  26492.     CF set
  26493. Return: CF clear if resident
  26494. SeeAlso: AH=BEh"VIRUS",AH=C0h"VIRUS"
  26495. ----------21BF-------------------------------
  26496. INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK RECORD (FCB)
  26497.     AH = BFh
  26498.     AL = flags
  26499.         bit 0: lock as well as log record
  26500.         1: non-exclusive lock
  26501.     DS:DX -> opened FCB (see AH=0Fh)
  26502.     BX:CX = offset
  26503.     BP = lock timeout in timer ticks (1/18 sec)
  26504.     SI:DI = length
  26505. Return: AL = error code (see AH=BCh)
  26506. SeeAlso: AH=BCh,AH=C0h"NetWare",AH=C2h"NetWare"
  26507. ----------21C0-------------------------------
  26508. INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE RECORD (FCB)
  26509.     AH = C0h
  26510.     DS:DX -> FCB (see AH=0Fh)
  26511.     BX:CX = offset
  26512. Return: AL = error code (see AH=BCh)
  26513. Note:    unlocks record but does not remove it from log table
  26514. SeeAlso: AH=BDh,AH=BFh,AH=C1h"NetWare",AH=C3h
  26515. ----------21C0-------------------------------
  26516. INT 21 - VIRUS - "Slow"/"Zerotime", "Solano" - INSTALLATION CHECK
  26517.     AH = C0h
  26518. Return: AX = 0300h if "Slow"/"Zerotime" resident
  26519.     AX = 1234h if "Solano" resident
  26520. SeeAlso: AX=BE00h,AH=C1h"VIRUS",AX=C301h"VIRUS"
  26521. ----------21C1-------------------------------
  26522. INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR RECORD (FCB)
  26523.     AH = C1h
  26524.     DS:DX -> opened FCB (see AH=0Fh)
  26525.     BX:CX = offset
  26526. Return: AL = error code (see AH=BCh)
  26527. Note:    unlocks record and removes it from log table
  26528. SeeAlso: AH=BEh,AH=C0h"NetWare",AH=C4h
  26529. ----------21C1-------------------------------
  26530. INT 21 - VIRUS - "Solano" - ???
  26531.     AH = C1h
  26532.     ???
  26533. Return: ???
  26534. SeeAlso: AH=C0h"VIRUS"
  26535. ----------21C2-------------------------------
  26536. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOCK PHYSICAL RECORD SET
  26537.     AH = C2h
  26538.     AL = flags
  26539.         bit 1: non-exclusive lock
  26540.     BP = lock timeout in timer ticks (1/18 sec) 0000h = no wait
  26541. Return: AL = status
  26542.         00h successful
  26543.         FEh timed out
  26544.         FFh failed
  26545. Desc:    attempt to lock all physical records listed in the log table
  26546. Notes:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26547.       Alloy NTNX
  26548.     status FFh will be retuend if one or more physical records have been
  26549.       exclusively locked by another process
  26550. SeeAlso: AH=BFh,AH=C3h,AH=D1h
  26551. ----------21C2-------------------------------
  26552. INT 21 - VIRUS - "Scott's Valley" - ???
  26553.     AH = C2h
  26554.     ???
  26555. Return: ???
  26556. SeeAlso: AH=C0h"VIRUS"
  26557. ----------21C3-------------------------------
  26558. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE PHYSICAL RECRD SET
  26559.     AH = C3h
  26560. Desc:    unlock all currently-locked physical records in the log table, but do
  26561.       not remove them from the table
  26562. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26563.       Alloy NTNX
  26564. SeeAlso: AH=BDh,AH=C0h,AH=C2h"NetWare",AH=C4h,AH=D3h
  26565. ----------21C301DXF1F1-----------------------
  26566. INT 21 - VIRUS - "905"/"Backfont" - INSTALLATION CHECK
  26567.     AX = C301h
  26568.     DX = F1F1h
  26569. Return: DX = 0E0Eh if resident
  26570. SeeAlso: AH=C0h"VIRUS",AX=C500h"VIRUS"
  26571. ----------21C4-------------------------------
  26572. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR PHYSICAL RECORD SET
  26573.     AH = C4h
  26574. Desc:    unlock all physical records in the log table and remove them from the
  26575.       log table
  26576. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26577.       Alloy NTNX
  26578. SeeAlso: AH=BEh,AH=C1h,AH=D5h
  26579. ----------21C500-----------------------------
  26580. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - OPEN SEMAPHORE
  26581.     AX = C500h
  26582.     DS:DX -> semaphore name (counted string, max 127 bytes)
  26583.     CL = initial value for semaphore
  26584. Return: AL = status
  26585.         00h successful
  26586.         BL = number of processes having semaphore open
  26587.         CX:DX = semaphore handle
  26588.         FEh invalid name length
  26589.         FFh invalid semaphore value
  26590. Notes:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26591.       Alloy NTNX
  26592.     the semaphore's value is incremented by AX=C503h and decremented by
  26593.       AX=C502h
  26594. SeeAlso: AX=C501h,AX=C502h,AX=C503h,AX=C504h
  26595. ----------21C500-----------------------------
  26596. INT 21 - VIRUS - "Sverdlov" - INSTALLATION CHECK
  26597.     AX = C500h
  26598. Return: AX = 6731h if resident
  26599. SeeAlso: AX=C301h"VIRUS",AH=C6h"VIRUS"
  26600. ----------21C501-----------------------------
  26601. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - EXAMINE SEMAPHORE
  26602.     AX = C501h
  26603.     CX:DX = semaphore handle
  26604. Return: AL = status
  26605.         00h successful
  26606.         CX = semaphore value (-127 to 127)
  26607.         DL = count of processes which have the semaphore open
  26608.         FFh invalid handle
  26609. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26610.       Alloy NTNX
  26611. SeeAlso: AX=C500h"NetWare",AX=C502h,AX=C504h
  26612. ----------21C502-----------------------------
  26613. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - WAIT ON SEMAPHORE
  26614.     AX = C502h
  26615.     CX:DX = semaphore handle
  26616.     BP = timeout limit in timer ticks (1/18 sec)
  26617.         0000h return immediately if semaphore already zero or negative
  26618. Return: AL = status
  26619.         00h successful
  26620.         FEh timeout
  26621.         FFh invalid handle
  26622. Desc:    decrement the semaphore's value, optionally waiting until its value
  26623.       becomes positive before decrementing
  26624. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26625.       Alloy NTNX
  26626. SeeAlso: AX=C500h"NetWare",AX=C501h,AX=C503h
  26627. ----------21C503-----------------------------
  26628. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - SIGNAL SEMAPHORE
  26629.     AX = C503h
  26630.     CX:DX = semaphore handle
  26631. Return: AL = status
  26632.         00h successful
  26633.         01h semaphore value overflowed
  26634.         FFh invalid handle
  26635. Desc:    increment the semaphore's value and signal the first process (if any)
  26636.       in the queue waiting on the semaphore
  26637. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26638.       Alloy NTNX
  26639. SeeAlso: AX=C500h"NetWare",AX=C502h
  26640. ----------21C504-----------------------------
  26641. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLOSE SEMAPHORE
  26642.     AX = C504h
  26643.     CX:DX = semaphore handle
  26644. Return: AL = status
  26645.         00h successful
  26646.         FFh invalid handle
  26647. Desc:    decrement the semaphore's open count, and delete the semaphore if the
  26648.       count reaches zero
  26649. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26650.       Alloy NTNX
  26651. SeeAlso: AX=C500h"NetWare",AX=C501h
  26652. ----------21C6-------------------------------
  26653. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - GET OR SET LOCK MODE
  26654.     AH = C6h
  26655.     AL = subfunction
  26656.         00h set old "compatibility" mode (default)
  26657.         01h set new extended locks mode 
  26658.         02h get lock mode
  26659. Return: AL = current lock mode
  26660. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26661.       Alloy NTNX
  26662.     the locking mode should be 01h for NetWare 4.61+ and Advanced
  26663.       NetWare 1.0+ locking calls, and 00h for all older calls
  26664. SeeAlso: AH=BCh,AH=C4h,AH=D0h
  26665. ----------21C6-------------------------------
  26666. INT 21 - VIRUS - "Socha" - INSTALLATION CHECK
  26667.     AH = C6h
  26668. Return: AL = 55h if resident
  26669. SeeAlso: AX=C500h"VIRUS",AX=C603h
  26670. ----------21C603-----------------------------
  26671. INT 21 - VIRUS - "Yankee" or "MLTI" - INSTALLATION CHECK
  26672.     AX = C603h
  26673.     CF set
  26674. Return: CF clear if resident
  26675. SeeAlso: AX=C500h"VIRUS",AX=C700h"VIRUS"
  26676. ----------21C700-----------------------------
  26677. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - BEGIN TRANSACTION
  26678.     AX = C700h
  26679. Return: CF clear if successful
  26680.         AL = 00h
  26681.     CF set on error
  26682.         AL = error code
  26683.         96h out of memory
  26684.         FEh implicit transaction already active, converted to explicit
  26685.         FFh explicit transaction already active
  26686. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26687. SeeAlso: AX=C701h,AX=C702h,AX=C703h
  26688. ----------21C700-----------------------------
  26689. INT 21 - VIRUS - "MH-757" - INSTALLATION CHECK
  26690.     AX = C700h
  26691. Return: AL = 07h if resident
  26692. SeeAlso: AX=C603h"VIRUS",AH=CBh"VIRUS"
  26693. ----------21C701-----------------------------
  26694. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - END TRANSACTION
  26695.     AX = C701h
  26696. Return: AL = status
  26697.         00h successful
  26698.         CX:DX = transaction number
  26699.         FDh transaction tracking disabled
  26700.         FEh transaction ended records locked
  26701.         FFh no explicit transaction active
  26702.     CF clear except when AL=FFh
  26703. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26704. SeeAlso: AX=C700h"NetWare",AX=C703h
  26705. ----------21C702-----------------------------
  26706. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - INSTALLATION CHECK
  26707.     AX = C702h
  26708. Return: AL = status
  26709.         00h not available
  26710.         01h available
  26711.         FDh available but disabled
  26712. Desc:    determine whether the default file server supports TTS
  26713. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26714. ----------21C703-----------------------------
  26715. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - ABORT TRANSACTION
  26716.     AX = C703h
  26717. Return: CF clear if successful
  26718.         AL = 00h
  26719.     CF set on error
  26720.         AL = error code
  26721.         FDh transaction tracking disabled, no backout
  26722.         FEh transaction ended records locked
  26723.         FFh no explicit transaction active
  26724. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26725. SeeAlso: AX=C700h"NetWare",AX=C701h,AX=C704h
  26726. ----------21C704-----------------------------
  26727. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - TRANSACTION STATUS
  26728.     AX = C704h
  26729.     CX:DX = transaction number (see AX=C701h)
  26730. Return: AL = status
  26731.         00h successful
  26732.         FFh not yet written to disk
  26733. Desc:    verify that a transaction has actually been written to disk
  26734. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26735.     transactions are written to disk in the order in which they are ended,
  26736.       but it may take as much as five seconds for the data to be written
  26737. SeeAlso: AX=C700h"NetWare",AX=C701h,AX=C703h
  26738. ----------21C705-----------------------------
  26739. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - GET APPLICTN THRESHOLDS
  26740.     AX = C705h
  26741. Return: AL = status
  26742.         00h successful
  26743.     CL = maximum logical record locks (default 0)
  26744.     CH = maximum physical record locks (default 0)
  26745. Desc:    get the per-application limits on record locks allowed before an
  26746.       implicit transaction is begun
  26747. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26748.     if either limit is FFh, implicit transactions are disabled for the
  26749.       corresponding lock type
  26750. SeeAlso: AX=C706h,AX=C707h
  26751. ----------21C706-----------------------------
  26752. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - SET APPLICTN THRESHOLDS
  26753.     AX = C706h
  26754.     CL = maximum logical record locks (default 0)
  26755.     CH = maximum physical record locks (default 0)
  26756. Return: AL = status
  26757.         00h successful
  26758. Desc:    specify the per-application limits on record locks allowed before an
  26759.       implicit transaction is begun
  26760. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26761.     if either limit is set to FFh, implicit transactions are disabled for
  26762.       the corresponding lock type
  26763. SeeAlso: AX=C705h,AX=C708h
  26764. ----------21C707-----------------------------
  26765. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - GET WORKSTN THRESHOLDS
  26766.     AX = C707h
  26767. Return: AL = status
  26768.         00h successful
  26769.     CL = maximum logical record locks (default 0)
  26770.     CH = maximum physical record locks (default 0)
  26771. Desc:    get the per-workstation limits on record locks allowed before an
  26772.       implicit transaction is begun
  26773. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26774.     if either limit is FFh, implicit transactions are disabled for the
  26775.       corresponding lock type
  26776. SeeAlso: AX=C705h,AX=C708h
  26777. ----------21C708-----------------------------
  26778. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - SET WORKSTN THRESHOLDS
  26779.     AX = C708h
  26780.     CL = maximum logical record locks (default 0)
  26781.     CH = maximum physical record locks (default 0)
  26782. Return: AL = status
  26783.         00h successful
  26784. Desc:    specify the per-workstation limits on record locks allowed before an
  26785.       implicit transaction is begun
  26786. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26787.     if either limit is set to FFh, implicit transactions are disabled for
  26788.       the corresponding lock type
  26789. SeeAlso: AX=C706h,AX=C707h
  26790. ----------21C8-------------------------------
  26791. INT 21 - Novell NetWare 4.0 - BEGIN LOGICAL FILE LOCKING
  26792.     AH = C8h
  26793.     if function C6h lock mode 00h:
  26794.         DL = mode
  26795.         00h no wait
  26796.         01h wait
  26797.     if function C6h lock mode 01h:
  26798.         BP = timeout in timer ticks (1/18 sec)
  26799. Return: AL = error code
  26800. SeeAlso: AH=C9h
  26801. ----------21C9-------------------------------
  26802. INT 21 - Novell NetWare 4.0 - END LOGICAL FILE LOCKING
  26803.     AH = C9h
  26804. Return: AL = error code
  26805. SeeAlso: AH=C8h
  26806. ----------21CA-------------------------------
  26807. INT 21 - Novell NetWare 4.0, Alloy NTNX - LOG/LOCK PERSONAL FILE (FCB)
  26808.     AH = CAh
  26809.     DS:DX -> FCB (see AH=0Fh)
  26810.     if function C6h lock mode 01h:
  26811.         AL = log and lock flag
  26812.         00h log file only
  26813.         01h lock as well as log file
  26814.         BP = lock timeout in timer ticks (1/18 sec)
  26815. Return: AL = error code
  26816.         00h successful
  26817.         96h no dynamic memory for file
  26818.         FEh timeout
  26819.         FFh failed
  26820. SeeAlso: AH=CBh
  26821. ----------21CA15-----------------------------
  26822. INT 21 - VIRUS - "Piter" - ???
  26823.     AX = CA15h
  26824.     ???
  26825. Return: ???
  26826. SeeAlso: AH=CCh"VIRUS"
  26827. ----------21CB-------------------------------
  26828. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOCK FILE SET
  26829.     AH = CBh
  26830.     if function C6h lock mode 00h:
  26831.         DL = mode
  26832.         00h no wait
  26833.         01h wait
  26834.     if function C6h lock mode 01h:
  26835.         BP = lock timeout in timer ticks (1/18 sec) 0000h = no wait
  26836. Return: AL = status
  26837.         00h successful
  26838.         FEh timed out
  26839.         FFh failed
  26840. Desc:    attempt to lock all files listed in the log table
  26841. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  26842.       Alloy NTNX
  26843.     status FFh will be returned if one or more of the files have already
  26844.       been exclusively locked by another process
  26845. SeeAlso: AH=CAh,AH=CDh,AH=D1h,AH=EBh
  26846. ----------21CB-------------------------------
  26847. INT 21 - VIRUS - "Milous" - INSTALLATION CHECK
  26848.     AH = CBh
  26849. Return: AL = 07h if resident
  26850. SeeAlso: AX=C700h"VIRUS",AX=CB02h
  26851. ----------21CB02-----------------------------
  26852. INT 21 - VIRUS - "Witcode" - INSTALLATION CHECK
  26853.     AX = CB02h
  26854. Return: AX = 02CBh if resident
  26855. SeeAlso: AH=CBh"VIRUS",AH=CCh"VIRUS"
  26856. ----------21CC-------------------------------
  26857. INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE (FCB)
  26858.     AH = CCh
  26859.     DS:DX -> FCB (see AH=0Fh)
  26860. Return: none
  26861. Note:    unlocks file, but does not remove it from the log table or close it
  26862. SeeAlso: AH=CAh,AH=CDh
  26863. ----------21CC-------------------------------
  26864. INT 21 - VIRUS - "Westwood" - INSTALLATION CHECK
  26865.     AH = CCh
  26866. Return: AX = 0700h if resident
  26867. SeeAlso: AX=CB02h,AH=CDh"VIRUS",AX=D000h"VIRUS"
  26868. ----------21CD-------------------------------
  26869. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE FILE SET
  26870.     AH = CDh
  26871. Return: none
  26872. Desc:    unlock all files listed in the log table, but don't remove them from
  26873.       the table
  26874. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  26875.       Alloy NTNX
  26876. SeeAlso: AH=CBh,AH=CCh,AH=CFh,AH=D3h
  26877. ----------21CD-------------------------------
  26878. INT 21 - VIRUS - "Westwood" - ???
  26879.     AH = CDh
  26880.     ???
  26881. Return: ???
  26882. SeeAlso: AH=CCh"VIRUS"
  26883. ----------21CE-------------------------------
  26884. INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE (FCB)
  26885.     AH = CEh
  26886.     DS:DX -> FCB (see AH=0Fh)
  26887. Return: AL = error code
  26888. Note:    unlocks file and removes it from log table, then closes all opened and
  26889.       logged occurrences
  26890. SeeAlso: AH=CAh,AH=CFh,AH=EDh"NetWare"
  26891. ----------21CF-------------------------------
  26892. INT 21 - LANstep - ???
  26893.     AH = CFh
  26894.     ???
  26895. Return: ???
  26896. Note:    LANstep is a redesign of the Waterloo Microsystems PORT network
  26897. ----------21CF-------------------------------
  26898. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR FILE SET
  26899.     AH = CFh
  26900. Return: AL = 00h
  26901. Desc:    unlock and remove all files from log table
  26902. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  26903.       Alloy NTNX
  26904. SeeAlso: AH=CAh,AH=CEh,AH=EBh"NetWare"
  26905. ----------21D0-------------------------------
  26906. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOG LOGICAL RECORD
  26907.     AH = D0h
  26908.     DS:DX -> record string (counted string, max 99 data bytes)
  26909.     if function C6h lock mode 01h: (Novell, NTNX only)
  26910.         AL = flags
  26911.         bit 0: lock as well as log the record
  26912.         bit 1: non-exclusive lock
  26913.         BP = lock timeout in timer ticks (1/18 sec)
  26914. Return: AL = status
  26915.         00h successful
  26916.         96h no dynamic memory for file
  26917.         FEh timed out
  26918.         FFh unsuccessful
  26919. Desc:    add the specified logical record name to the log table, and optionally
  26920.       lock the record
  26921. Notes:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+,
  26922.       Banyan VINES, and Alloy NTNX
  26923.     locks on logical record names are advisory and may be ignored by other
  26924.       applications
  26925. SeeAlso: AH=BCh,AH=D1h,AH=D2h,AH=D4h,AH=EBh
  26926. ----------21D000-----------------------------
  26927. INT 21 - VIRUS - "Fellowship" - INSTALLATION CHECK
  26928.     AX = D000h
  26929. Return: BX = 1234h if resident
  26930. SeeAlso: AH=CCh"VIRUS",AH=D5h"VIRUS",AX=D5AAh
  26931. ----------21D1-------------------------------
  26932. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOCK LOGICAL RECORD SET
  26933.     AH = D1h
  26934.     AL = lock type (00h exclusive, 01h shareable)
  26935.     if function C6h lock mode 00h:
  26936.         DL = mode
  26937.         00h no wait
  26938.         01h wait
  26939.     if function C6h lock mode 01h: (Novell only)
  26940.        BP = lock timeout in timer ticks (1/18 sec) 0000h = no wait
  26941.         0000h no wait
  26942. Return: AL = status (see AH=CBh)
  26943. Desc:    attempt to lock all logical record names listed in the log table
  26944. Notes:    this function is supported by NetWare 4.6+, Advanced Netware 1.0+,
  26945.       Banyan VINES, and Alloy NTNX
  26946.     status FFh will be returned if one or more logical records have been
  26947.       exclusively locked by another process
  26948.     locks on logical record names are advisory and may be ignored by other
  26949.       applications
  26950. SeeAlso: AH=C2h,AH=CBh,AH=D0h,AH=D3h,AH=D5h
  26951. ----------21D2-------------------------------
  26952. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE LOGICAL RECORD
  26953.     AH = D2h
  26954.     DS:DX -> semaphore identifier (counted string up to 99 chars long)
  26955. Return: AL = status
  26956.         00h successful
  26957.         FFh no such record
  26958. Desc:    unlock the logical record name but do not remove it from the log table
  26959. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  26960.       Banyan VINES, and Alloy NTNX
  26961.     locks on logical record names are advisory and may be ignored by other
  26962.       applications
  26963. SeeAlso: AH=BDh,AH=D0h,AH=D3h,AH=D4h
  26964. ----------21D3-------------------------------
  26965. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE LOGICAL RECORD SET
  26966.     AH = D3h
  26967. Desc:    unlock all currently-locked logical record names in the log table, but
  26968.       do not remove them from the table
  26969. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  26970.       Banyan VINES, and Alloy NTNX
  26971.     locks on logical record names are advisory and may be ignored by other
  26972.       applications
  26973. SeeAlso: AH=C3h,AH=CDh,AH=D1h,AH=D2h,AH=D5h
  26974. ----------21D4-------------------------------
  26975. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR LOGICAL RECORD
  26976.     AH = D4h
  26977.     DS:DX -> logical record name (counted string up to 99 chars long)
  26978. Return: AL = status
  26979.         00h successful
  26980.         FFh no such record name
  26981. Desc:    unlock and remove the logical record name from the log table
  26982. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  26983.       Banyan VINES, and Alloy NTNX
  26984.     locks on logical record names are advisory and may be ignored by other
  26985.       applications
  26986. SeeAlso: AH=BEh,AH=D0h,AH=D2h,AH=D5h
  26987. ----------21D5-------------------------------
  26988. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR LOGICAL RECORD SET
  26989.     AH = D5h
  26990. Return: AL = error code (see AH=D4h)
  26991. Desc:    unlock and remove all logical record name from the log table
  26992. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  26993.       Banyan VINES, and Alloy NTNX
  26994.     locks on logical record names are advisory and may be ignored by other
  26995.       applications
  26996. SeeAlso: AH=D1h,AH=D3h,AH=D4h
  26997. ----------21D5-------------------------------
  26998. INT 21 - VIRUS - "Carfield" - ???
  26999.     AH = D5h
  27000.     ???
  27001. Return: ???
  27002. SeeAlso: AX=D5AAh,AH=F3h"Carfield"
  27003. ----------21D5AA-----------------------------
  27004. INT 21 - VIRUS - "Diamond-A", "Diamond-B" - INSTALLATION CHECK
  27005.     AX = D5AAh
  27006. Return: AX = 2A55h if "Diamond-A" resident
  27007.     AX = 2A03h if "Diamond-B"-family virus resident
  27008. SeeAlso: AX=D000h,AH=D5h"VIRUS",AX=D5AAh/BP=DEAAh
  27009. ----------21D5AABPDEAA-----------------------
  27010. INT 21 - VIRUS - "Dir" - INSTALLATION CHECK
  27011.     AX = D5AAh
  27012.     BP = DEAAh
  27013. Return: SI = 4321h if resident
  27014. SeeAlso: AX=D5AAh,AX=DADAh"VIRUS"
  27015. ----------21D6-------------------------------
  27016. INT 21 - Novell NetWare - WORKSTATION - END OF JOB
  27017.     AH = D6h
  27018.     BX = job flag (0000h current job, FFFFh all processes on workstation)
  27019. Return: AL = error code
  27020. Desc:    unlocks and clears all locked or logged files and records held by the
  27021.       process(es), closes all files, resets error and lock modes, and
  27022.       releases all network resources
  27023. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27024.       Alloy NTNX
  27025. SeeAlso: AH=BBh,AH=D7h
  27026. ----------21D7-------------------------------
  27027. INT 21 - Novell NetWare - CONNECTION SERVICES - SYSTEM LOGOUT
  27028.     AH = D7h
  27029. Return: AL = error code
  27030. Desc:    this function closes the caller's open files, logs it out from all
  27031.       file servers, detaches the workstation from all non-default file
  27032.       servers, and maps a drive to the default server's SYS:LOGIN directory
  27033. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27034.       Alloy NTNX
  27035. SeeAlso: AH=D6h,AH=E3h/SF=14h,AH=F1h
  27036. ----------21D8-------------------------------
  27037. INT 21 - Novell NetWare, Banyan VINES - ALLOCATE RESOURCE
  27038.     AH = D8h
  27039.     DL = resource number
  27040. Return: AL = status
  27041.         00h successful
  27042.         FFh unsucessful
  27043. SeeAlso: AH=D9h
  27044. ----------21D9-------------------------------
  27045. INT 21 - Novell NetWare, Banyan VINES - DEALLOCATE RESOURCE
  27046.     AH = D9h
  27047.     DL = resource number
  27048. Return:    AL = status (see AH=D8h)
  27049. SeeAlso: AH=D8h
  27050. ----------21DA-------------------------------
  27051. INT 21 - Novell NetWare - DIRECTORY SERVICES - GET VOLUME INFO WITH NUMBER
  27052.     AH = DAh
  27053.     DL = volume number
  27054.     ES:DI -> reply buffer (see below)
  27055. Return: AL = 00h
  27056. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27057. SeeAlso: AH=36h,AH=E2h/SF=15h,AH=E3h/SF=E9h
  27058.  
  27059. Format of reply buffer:
  27060. Offset    Size    Description
  27061.  00h    WORD    sectors/block
  27062.  02h    WORD    total blocks on volume
  27063.  04h    WORD    unused blocks
  27064.  06h    WORD    total directory entries
  27065.  08h    WORD    unused directory entries
  27066.  0Ah 16 BYTEs    volume name, null padded
  27067.  1Ah    WORD    removable flag, 0000h = not removable
  27068. Note:    all words are big-endian
  27069. ----------21DADA-----------------------------
  27070. INT 21 - VIRUS - "Gotcha" - INSTALLATION CHECK
  27071.     AX = DADAh
  27072. Return: AH = A5h
  27073. SeeAlso: AX=D5AAh,AH=DAFEh"VIRUS"
  27074. ----------21DAFE-----------------------------
  27075. INT 21 - VIRUS - "Plovdiv 1.3" - INSTALLATION CHECK
  27076.     AX = DAFEh
  27077. Return: AX = 1234h if resident
  27078. SeeAlso: AX=DADAh,AH=DDh"VIRUS",AH=DEh"VIRUS"
  27079. ----------21DB-------------------------------
  27080. INT 21 - Novell NetWare - WORKSTATION - GET NUMBER OF LOCAL DRIVES
  27081.     AH = DBh
  27082. Return: AL = number of local disks as set by LASTDRIVE in CONFIG.SYS
  27083. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27084.       Alloy NTNX
  27085. SeeAlso: AH=0Eh
  27086. ----------21DC-------------------------------
  27087. INT 21 - Novell NetWare - CONNECTION SERVICES - GET CONNECTION NUMBER
  27088.     AH = DCh
  27089. Return: AL = logical connection number
  27090.         00h if NetWare not loaded or this machine is a non-dedicated server
  27091.     CX = station number in ASCII (CL = first digit)
  27092. Notes:    this function is supported by NetWare 4.0+, Banyan VINES, and Alloy
  27093.       NTNX
  27094.     station number only unique for those PCs connected to same semaphore
  27095.       service
  27096. ----------21DC-------------------------------
  27097. INT 21 - PCMag PCMANAGE/DCOMPRES - TURN ON/OFF
  27098.     AH = DCh
  27099.     DX = state
  27100.         0000h turn on
  27101.         0001h turn off
  27102. SeeAlso: AX=FEDCh
  27103. ----------21DD-------------------------------
  27104. INT 21 - Novell NetWare - WORKSTATION - SET NetWare ERROR MODE
  27105.     AH = DDh
  27106.     DL = error mode
  27107.         00h invoke INT 24 on critical I/O errors (default)
  27108.         01h return NetWare extended error code in AL
  27109.         02h return error code in AL, mapped to standard DOS error codes
  27110. Return: AL = previous error mode
  27111. Note:    this function is supported by Advanced NetWare 2.0+
  27112. SeeAlso: INT 24
  27113. ----------21DD-------------------------------
  27114. INT 21 - VIRUS - "Jerusalem"-family - RELOCATE VIRUS???
  27115.     AH = DDh
  27116.     CX = number of bytes to copy
  27117.     DS:SI -> source of copy
  27118.     ES:DI -> destination of copy
  27119. Return: does not return normally; return address is caller's CS:0100h with
  27120.       AX = ???
  27121. SeeAlso: AH=E0h"VIRUS",AH=EEh"VIRUS"
  27122. ----------21DE-------------------------------
  27123. INT 21 - VIRUS - "Durban" - INSTALLATION CHECK
  27124.     AH = DEh
  27125. Return: AH = DFh if resident
  27126. SeeAlso: AX=DAFEh,AX=DEDEh"VIRUS"
  27127. ----------21DE-------------------------------
  27128. INT 21 - VIRUS - "April 1st EXE" - ???
  27129.     AH = DEh
  27130.     ???
  27131. Return: ???
  27132. ----------21DE-------------------------------
  27133. INT 21 - Novell NetWare - MESSAGE SERVICES - SET BROADCAST MODE
  27134.     AH = DEh
  27135.     DL = broadcast mode
  27136.         00h receive server and workstation broadcasts (default)
  27137.         01h receive server broadcasts, discard user messages
  27138.         02h store server broadcasts for retrieval
  27139.         03h store all broadcasts for retrieval
  27140. Return: AL = new broadcast mode
  27141. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27142. ----------21DE--DL04-------------------------
  27143. INT 21 - Novell NetWare - MESSAGE SERVICES - GET BROADCAST MODE
  27144.     AH = DEh
  27145.     DL = 04h
  27146. Return: AL = current broadcast mode
  27147.         00h receive server and workstation broadcasts (default)
  27148.         01h receive server broadcasts, discard user message
  27149.         02h store server broadcasts for retrieval
  27150.         03h store all broadcasts for retrieval
  27151. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27152. ----------21DE-------------------------------
  27153. INT 21 - Novell NetWare 4.0 - SHELL TIMER INTERRUPT CHECKS
  27154.     AH = DEh
  27155.     DL = function
  27156.         05h disable shell timer interrupt checks
  27157.         06h enable shell timer interrupt checks
  27158. Return: ???
  27159. ----------21DEDE-----------------------------
  27160. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  27161.     AX = DEDEh
  27162. Return: AH = 41h if resident
  27163. SeeAlso: AH=DEh"VIRUS",AH=E0h"VIRUS"
  27164. ----------21DF--DL00-------------------------
  27165. INT 21 - Novell NetWare - PRINT SERVICES - START LPT CAPTURE
  27166.     AH = DFh
  27167.     DL = 00h
  27168. Return: AL = status
  27169.         00h successful
  27170. Desc:    this function redirects the default LPT to a capture file on the file
  27171.       server
  27172. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27173.       Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
  27174.     a print job is queued when the first character of output is captured
  27175. SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=01h,AH=DFh/DL=02h,AH=DFh/DL=03h
  27176. SeeAlso: AH=DFh/DL=04h,AX=F003h
  27177. ----------21DF--DL01-------------------------
  27178. INT 21 - Novell NetWare - PRINT SERVICES - END LPT CAPTURE
  27179.     AH = DFh
  27180.     DL = 01h
  27181. Return: AL = status
  27182.         00h successful
  27183. Desc:    stop redirecting the default LPT, close the capture file, and release
  27184.       the job in the print queue for printing
  27185. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27186.       Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
  27187.     after this call, the default LPT defaults to local printing
  27188. SeeAlso: AH=DFh/DL=00h,AH=DFh/DL=02h,AH=DFh/DL=03h,AH=DFh/DL=05h
  27189. ----------21DF--DL02-------------------------
  27190. INT 21 - Novell NetWare - PRINT SERVICES - CANCEL LPT CAPTURE
  27191.     AH = DFh
  27192.     DL = 02h
  27193. Return: AL = status
  27194.         00h successful
  27195. Desc:    this function ends the capture of the default LPT, removes the job from
  27196.       the print queue, and deletes the capture file unless it is a
  27197.       permanent capture file
  27198. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27199.       Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
  27200.     after this call, the default LPT defaults to local printing
  27201. SeeAlso: AH=DFh/DL=00h,AH=DFh/DL=06h
  27202. ----------21DF--DL02-------------------------
  27203. INT 21 - Novell NetWare - PRINT SERVICES - FLUSH LPT CAPTURE
  27204.     AH = DFh
  27205.     DL = 03h
  27206. Return: AL = status
  27207.         00h successful
  27208. Desc:    this function closes the current capture file for the default LPT
  27209.       and starts printing it if it is not a permanent capture file
  27210. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27211.       Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
  27212.     if more data is sent to the LPT port after this call, a new capture
  27213.       file will be opeend
  27214. SeeAlso: AH=DFh/DL=00h,AH=DFh/DL=01h,AH=DFh/DL=02h,AH=DFh/DL=07h
  27215. ----------21DF--DL04-------------------------
  27216. INT 21 - Novell NetWare - PRINT SERVICES - START SPECIFIC LPT CAPTURE
  27217.     AH = DFh
  27218.     DL = 04h
  27219.     DH = LPT port (00h-02h)
  27220. Return: AL = status
  27221.         00h successful
  27222. Desc:    this function redirects the specified LPT to a capture file on the file
  27223.       server
  27224. Notes:    this function is supported by Advanced NetWare 2.1+
  27225.     a print job is queued when the first character of output is captured
  27226. SeeAlso: AX=B800h,AH=DFh/DL=00h,AH=DFh/DL=05h,AH=DFh/DL=06h,AH=DFh/DL=07h
  27227. SeeAlso: AX=F003h
  27228. ----------21DF--DL05-------------------------
  27229. INT 21 - Novell NetWare - PRINT SERVICES - END SPECIFIC LPT CAPTURE
  27230.     AH = DFh
  27231.     DL = 05h
  27232.     DH = LPT port (00h-02h)
  27233. Return: AL = status
  27234.         00h successful
  27235. Desc:    stop redirecting the specified LPT, close the capture file, and release
  27236.       the job in the print queue for printing
  27237. Notes:    this function is supported by Advanced NetWare 2.1+
  27238.     after this call, the specified LPT defaults to local printing
  27239. SeeAlso: AH=DFh/DL=01h,AH=DFh/DL=04h,AH=DFh/DL=06h,AH=DFh/DL=07h
  27240. ----------21DF--DL06-------------------------
  27241. INT 21 - Novell NetWare - PRINT SERVICES - CANCEL SPECIFIC LPT CAPTURE
  27242.     AH = DFh
  27243.     DL = 06h
  27244.     DH = LPT port (00h-02h)
  27245. Return: AL = status
  27246.         00h successful
  27247. Desc:    this function ends the capture of the specified LPT, removes the job
  27248.       from the print queue, and deletes the capture file unless it is a
  27249.       permanent capture file
  27250. Notes:    this function is supported by Advanced NetWare 2.1+
  27251.     after this call, the specified LPT defaults to local printing
  27252. SeeAlso: AH=DFh/DL=02h,AH=DFh/DL=04h,AH=DFh/DL=05h,AH=DFh/DL=07h
  27253. ----------21DF--DL07-------------------------
  27254. INT 21 - Novell NetWare - PRINT SERVICES - FLUSH SPECIFIC LPT CAPTURE
  27255.     AH = DFh
  27256.     DL = 07h
  27257.     DH = LPT port (00h-02h)
  27258. Return: AL = status
  27259.         00h successful
  27260. Desc:    this function closes the current capture file for the specified LPT
  27261.       and starts printing it if it is not a permanent capture file
  27262. Notes:    this function is supported by Advanced NetWare 2.1+
  27263.     if more data is sent to the LPT port after this call, a new capture
  27264.       file will be opeend
  27265. SeeAlso: AH=DFh/DL=03h,AH=DFh/DL=04h,AH=DFh/DL=05h,AH=DFh/DL=06h
  27266. ----------21E0-------------------------------
  27267. INT 21 - Digital Research DOS Plus - CALL BDOS
  27268.     AH = E0h
  27269.     CL = BDOS function number (see INT E0"CP/M")
  27270.     other registers as appropriate for function
  27271. Return: as appropriate for function
  27272. SeeAlso: AX=4459h,INT E0"CP/M"
  27273. ----------21E0-------------------------------
  27274. INT 21 - OS/286, OS/386 - INITIALIZE REAL PROCEDURE
  27275.     AH = E0h
  27276.     ???
  27277. Return: ???
  27278. SeeAlso: AH=E1h"OS/286"
  27279. ----------21E0-------------------------------
  27280. INT 21 - DoubleDOS - MENU CONTROL
  27281.     AH = E0h
  27282.     AL = subfunction
  27283.         01h exchange tasks
  27284.         73h resume invisible job if suspended
  27285.         74h kill other job
  27286.         75h suspend invisible job
  27287. Note:    identical to AH=F0h
  27288. SeeAlso: AH=F0h"DoubleDOS"
  27289. ----------21E0-------------------------------
  27290. INT 21 - VIRUS - "Jerusalem", "Armagedon" - INSTALLATION CHECK
  27291.     AH = E0h
  27292. Return: AX = 0300h if "Jerusalem" resident
  27293.     AX = DADAh if "Armagedon" resident
  27294. SeeAlso: AH=DEh"VIRUS",AX=DEDEh"VIRUS",AX=E00Fh
  27295. ----------21E0-------------------------------
  27296. INT 21 - Novell NetWare 4.0, Alloy NTNX - PRINT SPOOLING
  27297.     AH = E0h
  27298.     DS:SI -> request buffer
  27299.     ES:DI -> reply buffer
  27300.     subfunction in third byte of request buffer
  27301.         00h spool data to a capture file
  27302.         01h close and queue capture file
  27303.         02h set spool flags
  27304.         03h spool existing file
  27305.         04h get spool queue entry
  27306.         05h remove entry from spool queue
  27307. Return: AL = status
  27308. ----------21E0--SF06-------------------------
  27309. INT 21 - Novell NetWare - PRINT SERVICES - GET PRINTER STATUS
  27310.     AH = E0h subfn 06h
  27311.     DS:SI -> request buffer (see below)
  27312.     ES:DI -> reply buffer (see below)
  27313. Return: AL = status
  27314.         00h successful
  27315.         FFh no such printer
  27316. Desc:    get current state of specified printer attached to the server
  27317. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27318.       Alloy NTNX
  27319.  
  27320. Format of request buffer:
  27321. Offset    Size    Description
  27322.  00h    WORD    0002h (length of following data)
  27323.  02h    BYTE    06h (subfunction "Get Printer Status")
  27324.  03h    BYTE    printer number (00h-04h)
  27325.  
  27326. Format of reply buffer:
  27327. Offset    Size    Description
  27328.  00h    WORD    (call) 0004h (size of following results buffer)
  27329.  02h    BYTE    flag: 00h printer active, FFh printer halted
  27330.  03h    BYTE    flag: 00h printer online, 01h printer offline
  27331.  04h    BYTE    current form type
  27332.  05h    BYTE    target printer number (00h-04h)
  27333.         same as number in request buffer unless rerouted by server
  27334.         console
  27335. ----------21E0--SF09-------------------------
  27336. INT 21 - Novell NetWare - PRINT SERVICES - SPECIFY CAPTURE FILE
  27337.     AH = E0h subfn 09h
  27338.     DS:SI -> request buffer (see below)
  27339.     ES:DI -> reply buffer (see below)
  27340. Return: AL = status
  27341.         00h successful
  27342.         9Ch invalid path
  27343. Desc:    create a permanent capture file for the next print capture to be
  27344.       started
  27345. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27346.       Alloy NTNX
  27347.     the caller must have read, write, and create rights for the directory
  27348.       containing the capture file
  27349.  
  27350. Format of request buffer:
  27351. Offset    Size    Description
  27352.  00h    WORD    length of following data (max 102h)
  27353.  02h    BYTE    09h (subfunction "Specify Capture File")
  27354.  03h    BYTE    directory handle or 00h
  27355.  04h    BYTE    length of filename
  27356.  05h  N BYTEs    name of capture file
  27357.  
  27358. Format of reply buffer:
  27359. Offset    Size    Description
  27360.  00h    WORD    (call) 0000h (no results returned)
  27361. ----------21E00F-----------------------------
  27362. INT 21 - VIRUS - "8-tunes" - INSTALLATION CHECK
  27363.     AX = E00Fh
  27364. Return: AX = 4C31h if resident
  27365. SeeAlso: AH=E0h"VIRUS",AH=E1h"VIRUS"
  27366. ----------21E1-------------------------------
  27367. INT 21 - OS/286, OS/386 - ISSUE REAL PROCEDURE CALL
  27368.     AH = E1h
  27369.     ???
  27370. Return: ???
  27371. Note:    protected mode only???
  27372. SeeAlso: AH=E0h"OS/286",AH=E2h"OS/286",AH=E3h"OS/286",AX=250Eh,INT 31/AX=0301h
  27373. ----------21E1-------------------------------
  27374. INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB
  27375.     AH = E1h
  27376. SeeAlso: AH=E2h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS"
  27377. SeeAlso: AH=F1h"DoubleDOS"
  27378. ----------21E1-------------------------------
  27379. INT 21 - VIRUS - "Mendoza", "Fu Manchu" - INSTALLATION CHECK
  27380.     AH = E1h
  27381. Return: AX = 0300h if "Mendoza" resident
  27382.     AX = 0400h if "Fu Manchu" resident
  27383. SeeAlso: AX=E00Fh,AH=E4h"VIRUS"
  27384. ----------21E1--SF00-------------------------
  27385. INT 21 - Novell NetWare - MESSAGE SERVICES - SEND BROADCAST MESSAGE
  27386.     AH = E1h subfn 00h
  27387.     DS:SI -> request buffer (see below)
  27388.     ES:DI -> reply buffer (see below)
  27389. Return: AL = status
  27390.         00h successful
  27391.         FEh I/O error or out of dynamic workspace
  27392. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27393. SeeAlso: AH=DEh"NetWare",AH=DEh/DL=04h,AH=E1h/SF=01h,AH=E1h/SF=04h
  27394. SeeAlso: AH=E1h/SF=09h
  27395.  
  27396. Format of request buffer:
  27397. Offset    Size    Description
  27398.  00h    WORD    length of following data (max 9Eh)
  27399.  02h    BYTE    00h (subfunction "Send Broadcast Message")
  27400.  03h    BYTE    number of connections (01h-64h)
  27401.  04h  N BYTEs    list of connections to receive broadcast message
  27402.     BYTE    length of message (01h-37h)
  27403.       N BYTEs    broadcast message (no control characters or characters > 7Eh)
  27404.  
  27405. Format of reply buffer:
  27406. Offset    Size    Description
  27407.  00h    WORD    (call) size of following results buffer (max 65h)
  27408.  02h    BYTE    number of connections
  27409.  03h  N BYTEs    list of per-connection results
  27410.         00h successful
  27411.         FCh message rejected due to lack of buffer space
  27412.         FDh invalid connection number
  27413.         FFh blocked (see also AH=E1h/SF=02h)
  27414. ----------21E1--SF01-------------------------
  27415. INT 21 - Novell NetWare - MESSAGE SERVICES - GET BROADCAST MESSAGE
  27416.     AH = E1h subfn 01h
  27417.     DS:SI -> request buffer (see below)
  27418.     ES:DI -> reply buffer (see below)
  27419. Return: AL = status
  27420.         00h successful
  27421.         FCh full message queue
  27422.         FEh out of dynamic workspace
  27423. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27424. SeeAlso: AH=DEh/DL=04h,AH=E1h/SF=00h,AH=E1h/SF=05h,AH=E1h/SF=09h
  27425.  
  27426. Format of request buffer:
  27427. Offset    Size    Description
  27428.  00h    WORD    0001h (length of following data)
  27429.  02h    BYTE    01h (subfunction "Get Broadcast Message")
  27430.  
  27431. Format of reply buffer:
  27432. Offset    Size    Description
  27433.  00h    WORD    (call) size of following results buffer (max 38h)
  27434.  02h    BYTE    length of message (00h-37h)
  27435.         00h if no broadcast messages pending
  27436.  03h  N BYTEs    message (no control characters or characters > 7Eh)
  27437. ----------21E1-------------------------------
  27438. INT 21 - Novell NetWare - MESSAGE SERVICES - ENABLE/DISABLE BROADCAST MESSAGES
  27439.     AH = E1h
  27440.     DS:SI -> request buffer (see below)
  27441.     ES:DI -> reply buffer
  27442. Return: AL = error code
  27443. Note:    these functions are supported by NetWare 4.0+ but are not listed in
  27444.       _NetWare_System_Calls--DOS_; they may be obsolete
  27445. SeeAlso: AH=E1h/SF=00h,AH=E1h/SF=04h,AH=E1h/SF=09h
  27446.  
  27447. Format of request buffer:
  27448. Offset    Size    Description
  27449.  00h    WORD    length of following data (max 9Eh)
  27450.  02h    BYTE    subfunction
  27451.         02h disable station broadcasts
  27452.         03h enable station broadcasts
  27453.  03h    ???
  27454.  
  27455. Format of reply buffer:
  27456. Offset    Size    Description
  27457.  00h    WORD    (call) size of following results buffer
  27458.  02h    ???
  27459. ----------21E1--SF04-------------------------
  27460. INT 21 - Novell NetWare - MESSAGE SERVICES - SEND PERSONAL MESSAGE
  27461.     AH = E1h subfn 04h
  27462.     DS:SI -> request buffer (see below)
  27463.     ES:DI -> reply buffer (see below)
  27464. Return: AL = status
  27465.         00h successful
  27466.         FEh I/O error or out of dynamic workspace
  27467. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27468.     message pipes use CPU time on the file server; IPX, SPX, or NetBIOS
  27469.       connections should be used for peer-to-peer communications as these
  27470.       protocols do not use file server time
  27471. SeeAlso: AH=E1h/SF=00h,AH=E1h/SF=05h,AH=E1h/SF=06h,AH=E1h/SF=08h
  27472.  
  27473. Format of request buffer:
  27474. Offset    Size    Description
  27475.  00h    WORD    length of following data (max E5h)
  27476.  02h    BYTE    04h (subfunction "Send Personal Message")
  27477.  03h    BYTE    number of connections (01h-64h)
  27478.  04h  N BYTEs    list of connections to receive broadcast message
  27479.     BYTE    length of message (01h-7Eh)
  27480.       N BYTEs    message (no control characters or characters > 7Eh)
  27481.  
  27482. Format of reply buffer:
  27483. Offset    Size    Description
  27484.  00h    WORD    (call) size of following results buffer (max 65h)
  27485.  02h    BYTE    number of connections
  27486.  03h  N BYTEs    list of per-connection results
  27487.         00h successful
  27488.         FCh message rejected because queue is full (contains 6 msgs)
  27489.         FDh incomplete pipe
  27490.         FFh failed
  27491. ----------21E1--SF05-------------------------
  27492. INT 21 - Novell NetWare - MESSAGE SERVICES - GET PERSONAL MESSAGE
  27493.     AH = E1h subfn 05h
  27494.     DS:SI -> request buffer (see below)
  27495.     ES:DI -> reply buffer (see below)
  27496. Return: AL = status
  27497.         00h successful
  27498.         FEh out of dynamic workspace
  27499. Desc:    return the oldest message in the default file server's message queue
  27500.       for the calling workstation
  27501. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27502. SeeAlso: AH=E1h/SF=01h,AH=E1h/SF=04h,AH=E1h/SF=06h,AH=E1h/SF=08h
  27503.  
  27504. Format of request buffer:
  27505. Offset    Size    Description
  27506.  00h    WORD    0001h (length of following data)
  27507.  02h    BYTE    05h (subfunction "Get Personal Message")
  27508.  
  27509. Format of reply buffer:
  27510. Offset    Size    Description
  27511.  00h    WORD    (call) size of following results buffer (max 80h)
  27512.  02h    BYTE    connection number of sending station
  27513.  03h    BYTE    length of message (00h-7Eh)
  27514.         00h if no personal messages pending
  27515.  04h  N BYTEs    message (no control characters or characters > 7Eh)
  27516. ----------21E1--SF06-------------------------
  27517. INT 21 - Novell NetWare - MESSAGE SERVICES - OPEN MESSAGE PIPE
  27518.     AH = E1h subfn 06h
  27519.     DS:SI -> request buffer (see below)
  27520.     ES:DI -> reply buffer (see below)
  27521. Return: AL = status
  27522.         00h successful
  27523.         FEh out of dynamic workspace
  27524. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27525. SeeAlso: AH=E1h/SF=04h,AH=E1h/SF=07h,AH=E1h/SF=08h
  27526.  
  27527. Format of request buffer:
  27528. Offset    Size    Description
  27529.  00h    WORD    length of following data (max 66h)
  27530.  02h    BYTE    06h (subfunction "Open Message Pipe")
  27531.  03h    BYTE    number of pipes to open (01h-64h)
  27532.  04h  N BYTEs    list of connection numbers
  27533.  
  27534. Format of reply buffer:
  27535. Offset    Size    Description
  27536.  00h    WORD    (call) size of following results buffer (max 65h)
  27537.  02h    BYTE    number of connections
  27538.  03h  N BYTEs    list of results
  27539.         00h successful
  27540.         FEh incomplete (target half not yet created)
  27541.         FFh failed
  27542. ----------21E1--SF07-------------------------
  27543. INT 21 - Novell NetWare - MESSAGE SERVICES - CLOSE MESSAGE PIPE
  27544.     AH = E1h subfn 07h
  27545.     DS:SI -> request buffer (see below)
  27546.     ES:DI -> reply buffer (see below)
  27547. Return: AL = status
  27548.         00h successful
  27549.         FCh full message queue
  27550.         FEh out of dynamic workspace
  27551. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27552. SeeAlso: AH=E1h/SF=05h,AH=E1h/SF=06h,AH=E1h/SF=08h
  27553.  
  27554. Format of request buffer:
  27555. Offset    Size    Description
  27556.  00h    WORD    length of following data (max 66h)
  27557.  02h    BYTE    07h (subfunction "Close Message Pipe")
  27558.  03h    BYTE    number of pipes to close (01h-64h)
  27559.  04h  N BYTEs    list of connection numbers
  27560.  
  27561. Format of reply buffer:
  27562. Offset    Size    Description
  27563.  00h    WORD    (call) size of following results buffer (max 65h)
  27564.  02h    BYTE    number of connections
  27565.  03h  N BYTEs    list of results
  27566.         00h successful
  27567.         FDh failed
  27568.         FFh no such pipe
  27569. ----------21E1--SF08-------------------------
  27570. INT 21 - Novell NetWare - MESSAGE SERVICES - CHECK PIPE STATUS
  27571.     AH = E1h subfn 08h
  27572.     DS:SI -> request buffer (see below)
  27573.     ES:DI -> reply buffer (see below)
  27574. Return: AL = status
  27575.         00h successful
  27576.         FCh full message queue
  27577.         FEh out of dynamic workspace
  27578. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27579. SeeAlso: AH=E1h/SF=05h,AH=E1h/SF=06h,AH=E1h/SF=07h
  27580.  
  27581. Format of request buffer:
  27582. Offset    Size    Description
  27583.  00h    WORD    length of following data (max 66h)
  27584.  02h    BYTE    08h (subfunction "Check Pipe Status")
  27585.  03h    BYTE    number of pipes to monitor (01h-64h)
  27586.  04h  N BYTEs    list of connection numbers
  27587.  
  27588. Format of reply buffer:
  27589. Offset    Size    Description
  27590.  00h    WORD    (call) size of following results buffer (max 65h)
  27591.  02h    BYTE    number of connections
  27592.  03h  N BYTEs    list of pipe statuses
  27593.         00h open
  27594.         FEh incomplete
  27595.         FFh closed
  27596. ----------21E1--SF09-------------------------
  27597. INT 21 - Novell NetWare - MESSAGE SERVICES - BROADCAST TO CONSOLE
  27598.     AH = E1h subfn 09h
  27599.     DS:SI -> request buffer (see below)
  27600.     ES:DI -> reply buffer (see below)
  27601. Return: AL = status
  27602.         00h successful
  27603.         FCh full message queue
  27604.         FEh out of dynamic workspace
  27605. Desc:    send a one-line message to the system console on the default file
  27606.       server
  27607. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27608. SeeAlso: AH=DEh/DL=04h,AH=E1h/SF=00h,AH=E1h/SF=01h,AH=E3h/SF=D1h
  27609.  
  27610. Format of request buffer:
  27611. Offset    Size    Description
  27612.  00h    WORD    length of following data (max 3Eh)
  27613.  02h    BYTE    09h (subfunction "Broadcast to Console")
  27614.  03h    BYTE    length of message (01h-3Ch)
  27615.  04h  N BYTEs    message (no control characters or characters > 7Eh)
  27616.  
  27617. Format of reply buffer:
  27618. Offset    Size    Description
  27619.  00h    WORD    (call) 0000h (no results returned)
  27620. ----------21E2-------------------------------
  27621. INT 21 - OS/286, OS/386 - SET REAL PROCEDURE SIGNAL HANDLER
  27622.     AH = E2h
  27623.     ???
  27624. Return: ???
  27625. SeeAlso: AH=E0h"OS/286",AH=E1h"OS/286",AH=E6h"OS/286"
  27626. ----------21E2-------------------------------
  27627. INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB
  27628.     AH = E2h
  27629.     AL = character
  27630. Return: AL = 00h successful
  27631.          01h buffer full (128 characters)
  27632. SeeAlso: AH=E1h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS"
  27633. SeeAlso: AH=F2h"DoubleDOS"
  27634. ----------21E2--SF00-------------------------
  27635. INT 21 - Novell NetWare - DIRECTORY SERVICES - SET DIRECTORY HANDLE
  27636.     AH = E2h subfn 00h
  27637.     DS:SI -> request buffer (see below)
  27638.     ES:DI -> reply buffer (see below)
  27639. Return: AL = status (00h,98h,9Bh,9Ch) (see below)
  27640. Desc:    set the target handle to reference the directory specified by the
  27641.       source handle and the source path; both handles must refer to the
  27642.       same file server
  27643. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27644.       Alloy NTNX
  27645.     the target handle is not changed if this function fails
  27646. SeeAlso: AH=E2h/SF=01h,AH=E2h/SF=12h,AH=E2h/SF=13h
  27647.  
  27648. Values for status:
  27649.  00h    successful
  27650.  84h    not permitted to create
  27651.  8Ah    not permitted to delete
  27652.  8Bh    not permitted to rename
  27653.  8Ch    not permitted to modify
  27654.  98h    nonexistent volume
  27655.  9Bh    invalid directory handle
  27656.  9Ch    invalid path
  27657.  9Eh    invalid filename
  27658.  9Fh    directory currently in use
  27659.  A0h    directory not empty
  27660.  FCh    no such bindery object
  27661.  
  27662. Format of request buffer:
  27663. Offset    Size    Description
  27664.  00h    WORD    length of following data (max 103h)
  27665.  02h    BYTE    00h (subfunction "Set Directory Handle")
  27666.  03h    BYTE    directory handle of target
  27667.  04h    BYTE    directory handle of source
  27668.  05h    BYTE    length of source directory path (01h-FFh)
  27669.  06h  N BYTEs    source directory path
  27670.  
  27671. Format of reply buffer:
  27672. Offset    Size    Description
  27673.  00h    WORD    (call) 0000h (no results returned)
  27674. ----------21E2--SF01-------------------------
  27675. INT 21 - Novell NetWare - DIRECTORY SERVICES - GET DIRECTORY PATH
  27676.     AH = E2h subfn 01h
  27677.     DS:SI -> request buffer (see below)
  27678.     ES:DI -> reply buffer (see below)
  27679. Return: AL = status (00h,9Bh) (see AH=E2h/SF=00h)
  27680. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27681.       Alloy NTNX
  27682. SeeAlso: AH=E2h/SF=02h,AH=E2h/SF=03h,AH=E2h/SF=1Ah,AH=E9h
  27683.  
  27684. Format of request buffer:
  27685. Offset    Size    Description
  27686.  00h    WORD    0002h (length of following data)
  27687.  02h    BYTE    01h (subfunction "Get Directory Path")
  27688.  03h    BYTE    directory handle
  27689.  
  27690. Format of reply buffer:
  27691. Offset    Size    Description
  27692.  00h    WORD    (call) length of following data buffer
  27693.  02h    BYTE    length of directory path (01h-FFh)
  27694.  03h  N BYTEs    full directory path including volume
  27695. ----------21E2--SF02-------------------------
  27696. INT 21 - Novell NetWare - DIRECTORY SERVICES - SCAN DIRECTORY INFORMATION
  27697.     AH = E2h subfn 02h
  27698.     DS:SI -> request buffer (see below)
  27699.     ES:DI -> reply buffer (see below)
  27700. Return: AL = status (00h,98h,9Bh,9Ch) (see AH=E2h/SF=00h)
  27701. Desc:    get information about the first or next subdirectory of the specified
  27702.       directory
  27703. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27704.       Alloy NTNX
  27705. SeeAlso: AH=E2h/SF=01h,AH=E2h/SF=03h,AH=E2h/SF=19h
  27706.  
  27707. Format of request buffer:
  27708. Offset    Size    Description
  27709.  00h    WORD    length of following data (max 104h)
  27710.  02h    BYTE    02h (subfunction "Scan Directory Information")
  27711.  03h    BYTE    directory handle
  27712.  04h    WORD    subdirectory number (big-endian)
  27713.         0000h for first call, returned subdir number + 1 on next call
  27714.  06h    BYTE    length of directory path
  27715.  07h  N BYTEs    directory path
  27716.  
  27717. Format of reply buffer:
  27718. Offset    Size    Description
  27719.  00h    WORD    (call) 001Ch (length of following data buffer)
  27720.  02h 16 BYTEs    subdirectory name
  27721.  12h    DWORD    date and time of creation (big-endian) (see below)
  27722.  16h    DWORD    object ID of owner (bid-endian)
  27723.  1Ah    BYTE    maximum directory rights (see AH=E2h/SF=03h)
  27724.  1Bh    BYTE    unused
  27725.  1Ch    WORD    subdirectory number (big-endian)
  27726.  
  27727. Bitmask of date and time:
  27728.  bits 31-25: year-1980
  27729.  bits 24-21: month
  27730.  bits 20-16: day
  27731.  bits 15-11: hour
  27732.  bits 10-5: minute
  27733.  bits 4-0: second
  27734. ----------21E2--SF03-------------------------
  27735. INT 21 - Novell NetWare - DIRECTORY SERVICES - GET EFFECTIVE DIRECTORY RIGHTS
  27736.     AH = E2h subfn 03h
  27737.     DS:SI -> request buffer (see below)
  27738.     ES:DI -> reply buffer (see below)
  27739. Return: AL = status (00h,98h,9Bh) (see AH=E2h/SF=00h)
  27740. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27741.       Alloy NTNX
  27742. SeeAlso: AH=E2h/SF=01h,AH=E2h/SF=02h
  27743.  
  27744. Format of request buffer:
  27745. Offset    Size    Description
  27746.  00h    WORD    length of following data (max 102h)
  27747.  02h    BYTE    03h (subfunction "Get Effective Directory Rights")
  27748.  03h    BYTE    directory handle
  27749.  04h    BYTE    length of directory path (00h-FFh)
  27750.  05h  N BYTEs    directory path
  27751.  
  27752. Format of reply buffer:
  27753. Offset    Size    Description
  27754.  00h    WORD    (call) 0001h (length of following data buffer)
  27755.  02h    BYTE    effective directory rights (see below)
  27756.  
  27757. Bitmask of directory rights:
  27758.  bit 0: reading allowed
  27759.  bit 1: writing allowed
  27760.  bit 2: opens allowed
  27761.  bit 3: file creation allowed
  27762.  bit 4: deletion allowed
  27763.  bit 5: "parental" may create/delete subdirectories and
  27764.     grant/revoke trustee rights
  27765.  bit 6: directory search allowed
  27766.  bit 7: file attributes may be changed
  27767. ----------21E2--SF04-------------------------
  27768. INT 21 - Novell NetWare - DIRECTORY SERVICES - MODIFY MAXIMUM RIGHTS MASK
  27769.     AH = E2h subfn 04h
  27770.     DS:SI -> request buffer (see below)
  27771.     ES:DI -> reply buffer (see below)
  27772. Return: AL = status (00h,8Ch,98h,9Ch) (see AH=E2h/SF=00h)
  27773. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27774.       Alloy NTNX
  27775. SeeAlso: AH=E2h/SF=03h,AH=E2h/SF=0Ah,AH=E2h/SF=0Dh
  27776.  
  27777. Format of request buffer:
  27778. Offset    Size    Description
  27779.  00h    WORD    length of following data (max 104h)
  27780.  02h    BYTE    04h (subfunction "Modify Maximum Rights Mask")
  27781.  03h    BYTE    directory handle
  27782.  04h    BYTE    rights to grant (see AH=E2h/SF=03h)
  27783.  05h    BYTE    rights to revoke (see AH=E2h/SF=03h)
  27784.  06h    BYTE    length of directory path (00h-FFh)
  27785.  07h  N BYTEs    directory path
  27786. Note:    the rights specified at offset 05h are revoked first, and then the
  27787.       rights specified at offset 04h are added to the resulting rights
  27788.       mask
  27789.  
  27790. Format of reply buffer:
  27791. Offset    Size    Description
  27792.  00h    WORD    (call) 0000h (no results returned)
  27793. ----------21E2--SF05-------------------------
  27794. INT 21 - Novell NetWare - DIRECTORY SERVICES - GET VOLUME NUMBER
  27795.     AH = E2h subfn 05h
  27796.     DS:SI -> request buffer (see below)
  27797.     ES:DI -> reply buffer (see below)
  27798. Return: AL = status (00h,98h) (see AH=E2h/SF=00h)
  27799. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27800.       Alloy NTNX
  27801. SeeAlso: AH=DAh,AH=E2h/SF=02h,AH=E2h/SF=05h,AH=E2h/SF=15h,AH=E3h/SF=E9h
  27802.  
  27803. Format of request buffer:
  27804. Offset    Size    Description
  27805.  00h    WORD    length of following data (max 12h)
  27806.  02h    BYTE    05h (subfunction "Get Volume Number")
  27807.  03h    BYTE    length of volume name (01h-10h)
  27808.  04h  N BYTEs    volume name
  27809.  
  27810. Format of reply buffer:
  27811. Offset    Size    Description
  27812.  00h    WORD    (call) 0001h (length of following results buffer)
  27813.  02h    BYTE    volume number
  27814. ----------21E2--SF06-------------------------
  27815. INT 21 - Novell NetWare - DIRECTORY SERVICES - GET VOLUME NAME
  27816.     AH = E2h subfn 06h
  27817.     DS:SI -> request buffer (see below)
  27818.     ES:DI -> reply buffer (see below)
  27819. Return: AL = status (00h,98h) (see AH=E2h/SF=00h)
  27820. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27821.       Alloy NTNX
  27822. SeeAlso: AH=DAh,AH=E2h/SF=02h,AH=E2h/SF=05h,AH=E2h/SF=15h,AH=E2h/SF=1Ah
  27823. SeeAlso: AH=E3h/SF=E9h
  27824.  
  27825. Format of request buffer:
  27826. Offset    Size    Description
  27827.  00h    WORD    0002h (length of following data)
  27828.  02h    BYTE    06h (subfunction "Get Volume Name")
  27829.  03h    BYTE    volume number
  27830.  
  27831. Format of reply buffer:
  27832. Offset    Size    Description
  27833.  00h    WORD    (call) 0011h (length of following results buffer)
  27834.  02h    BYTE    length of volume name
  27835.  03h 16 BYTEs    NUL-padded volume name
  27836. ----------21E2--SF0A-------------------------
  27837. INT 21 - Novell NetWare - DIRECTORY SERVICES - CREATE DIRECTORY
  27838.     AH = E2h subfn 0Ah
  27839.     DS:SI -> request buffer (see below)
  27840.     ES:DI -> reply buffer (see below)
  27841. Return: AL = status (00h,84h,98h,FCh) (see AH=E2h/SF=00h)
  27842. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27843.       Alloy NTNX
  27844. SeeAlso: AH=39h,AH=E2h/SF=0Bh,AH=E2h/SF=0Fh
  27845.  
  27846. Format of request buffer:
  27847. Offset    Size    Description
  27848.  00h    WORD    length of following data (max 103h)
  27849.  02h    BYTE    0Ah (subfunction "Create Directory")
  27850.  03h    BYTE    directory handle
  27851.  04h    BYTE    maximum directory rights (see AH=E2h/SF=01h)
  27852.  05h    BYTE    length of directory path (00h-FFh)
  27853.  06h  N BYTEs    directory path
  27854.  
  27855. Format of reply buffer:
  27856. Offset    Size    Description
  27857.  00h    WORD    (call) 0000h (no data returned)
  27858. ----------21E2--SF0B-------------------------
  27859. INT 21 - Novell NetWare - DIRECTORY SERVICES - DELETE DIRECTORY
  27860.     AH = E2h subfn 0Bh
  27861.     DS:SI -> request buffer (see below)
  27862.     ES:DI -> reply buffer (see below)
  27863. Return: AL = status (00h,8Ah,98h,9Bh,9Ch,9Fh,A0h) (see AH=E2h/SF=00h)
  27864. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27865.       Alloy NTNX
  27866. SeeAlso: AH=3Ah,AH=E2h/SF=0Ah,AH=E2h/SF=0Fh
  27867.  
  27868. Format of request buffer:
  27869. Offset    Size    Description
  27870.  00h    WORD    length of following data (max 103h)
  27871.  02h    BYTE    0Bh (subfunction "Delete Directory")
  27872.  03h    BYTE    directory handle
  27873.  04h    BYTE    unused
  27874.  05h    BYTE    length of directory path (00h-FFh)
  27875.  06h  N BYTEs    directory path
  27876.  
  27877. Format of reply buffer:
  27878. Offset    Size    Description
  27879.  00h    WORD    (call) 0000h (no data returned)
  27880. ----------21E2--SF0C-------------------------
  27881. INT 21 - Novell NetWare - DIRECTORY SERVICES - SCAN DIRECTORY FOR TRUSTEES
  27882.     AH = E2h subfn 0Ch
  27883.     DS:SI -> request buffer (see below)
  27884.     ES:DI -> reply buffer (see below)
  27885. Return: AL = status
  27886.         00h successful
  27887.         9Ch no more trustees
  27888. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  27889. SeeAlso: AH=E2h/SF=0Dh,AH=E2h/SF=0Eh,AH=E3h/SF=47h
  27890.  
  27891. Format of request buffer:
  27892. Offset    Size    Description
  27893.  00h    WORD    length of following data (max 103h)
  27894.  02h    BYTE    0Ch (subfunction "Scan Directory For Trustees")
  27895.  03h    BYTE    directory handle
  27896.  04h    BYTE    sequence number
  27897.         00h on first call, increment for each subsequent call
  27898.  05h    BYTE    length of directory path (00h-FFh)
  27899.  06h  N BYTEs    directory path
  27900.  
  27901. Format of reply buffer:
  27902. Offset    Size    Description
  27903.  00h    WORD    (call) 0031h (length of following results buffer)
  27904.  02h 16 BYTEs    directory name
  27905.  12h  4 BYTEs    date and time of creation
  27906.  16h    DWORD    object ID of owner (big-endian)
  27907.  1Ah  5 DWORDs    object IDs of Trustees 0 through 4 (big-endian)
  27908.         00000000h = end of group
  27909.  2Eh  5 BYTEs    directory rights for Trustees 0 through 4 (see AH=E2h/SF=03h)
  27910. ----------21E2--SF0D-------------------------
  27911. INT 21 - Novell NetWare - DIRECTORY SERVICES - ADD TRUSTEE TO DIRECTORY
  27912.     AH = E2h subfn 0Dh
  27913.     DS:SI -> request buffer (see below)
  27914.     ES:DI -> reply buffer (see below)
  27915. Return: AL = status (00h,8Ch,FCh) (see AH=E2h/SF=00h)
  27916. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27917.       Alloy NTNX
  27918. SeeAlso: AH=E2h/SF=0Ch,AH=E2h/SF=0Eh,AH=E3h/SF=47h
  27919.  
  27920. Format of request buffer:
  27921. Offset    Size    Description
  27922.  00h    WORD    length of following data (max 107h)
  27923.  02h    BYTE    0Dh (subfunction "Add Trustee To Directory")
  27924.  03h    BYTE    directory handle
  27925.  04h    DWORD    object ID of trustee (big-endian)
  27926.  08h    BYTE    trustee directory rights (see AH=E2h/SF=01h)
  27927.  09h    BYTE    length of directory path (00h-FFh)
  27928.  0Ah  N BYTEs    directory path
  27929.  
  27930. Format of reply buffer:
  27931. Offset    Size    Description
  27932.  00h    WORD    (call) 0000h (no data returned)
  27933. ----------21E2--SF0E-------------------------
  27934. INT 21 - Novell NetWare - DIRECTORY SERVICES - DELETE TRUSTEE FROM DIRECTORY
  27935.     AH = E2h subfn 0Eh
  27936.     DS:SI -> request buffer (see below)
  27937.     ES:DI -> reply buffer (see below)
  27938. Return: AL = status (00h,98h,9Bh,9Ch) (see AH=E2h/SF=00h)
  27939. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27940.       Alloy NTNX
  27941. SeeAlso: AH=E2h/SF=0Ch,AH=E2h/SF=0Dh
  27942.  
  27943. Format of request buffer:
  27944. Offset    Size    Description
  27945.  00h    WORD    length of following data (max 107h)
  27946.  02h    BYTE    0Eh (subfunction "Delete Trustee From Directory")
  27947.  03h    BYTE    directory handle
  27948.  04h    DWORD    object ID of trustee (big-endian)
  27949.  08h    BYTE    unused
  27950.  09h    BYTE    length of directory path (00h-FFh)
  27951.  0Ah  N BYTEs    directory path
  27952.  
  27953. Format of reply buffer:
  27954. Offset    Size    Description
  27955.  00h    WORD    (call) 0000h (no data returned)
  27956. ----------21E2--SF0F-------------------------
  27957. INT 21 - Novell NetWare - DIRECTORY SERVICES - RENAME DIRECTORY
  27958.     AH = E2h subfn 0Fh
  27959.     DS:SI -> request buffer (see below)
  27960.     ES:DI -> reply buffer (see below)
  27961. Return: AL = status (00h,8Bh,9Bh,9Ch,9Eh) (see AH=E2h/SF=00h)
  27962. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27963.       Alloy NTNX
  27964.     directories SYS:LOGIN, SYS:MAIL, and SYS:PUBLIC must not be renamed
  27965. SeeAlso: AH=56h,AH=E2h/SF=0Ah,AH=E2h/SF=0Bh
  27966.  
  27967. Format of request buffer:
  27968. Offset    Size    Description
  27969.  00h    WORD    length of following data (max 111h)
  27970.  02h    BYTE    0Fh (subfunction "Rename Directory")
  27971.  03h    BYTE    directory handle
  27972.  04h    BYTE    length of directory path (00h-FFh)
  27973.  05h  N BYTEs    directory path
  27974.     BYTE    length of new directory name (01h-0Eh)
  27975.       N BYTEs    new directory name
  27976.  
  27977. Format of reply buffer:
  27978. Offset    Size    Description
  27979.  00h    WORD    (call) 0000h (no data returned)
  27980. ----------21E2--SF10-------------------------
  27981. INT 21 - Novell NetWare - FILE SERVICES - PURGE ERASED FILES
  27982.     AH = E2h subfn 10h
  27983.     DS:SI -> request buffer (see below)
  27984.     ES:DI -> reply buffer (see below)
  27985. Return: AL = status
  27986.         00h successful
  27987.         C6h no console rights
  27988. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27989.       Alloy NTNX
  27990.     purges files marked for deletion on the file server by the calling
  27991.       workstation
  27992. SeeAlso: AH=13h,AH=41h,AH=E2h/SF=11h,AH=E3h/SF=CEh,AX=F244h
  27993.  
  27994. Format of request buffer:
  27995. Offset    Size    Description
  27996.  00h    WORD    0001h (length of following data)
  27997.  02h    BYTE    10h (subfunction "Purge Erased Files")
  27998.  
  27999. Format of reply buffer:
  28000. Offset    Size    Description
  28001.  00h    WORD    (call) 0000h (no results returned)
  28002. ----------21E2--SF11-------------------------
  28003. INT 21 - Novell NetWare - FILE SERVICES - RESTORE ERASED FILE
  28004.     AH = E2h subfn 11h
  28005.     DS:SI -> request buffer (see below)
  28006.     ES:DI -> reply buffer (see below)
  28007. Return: AL = status
  28008.         00h successful
  28009.         98h nonexistent volume
  28010.         FFh no more erased files
  28011. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  28012.       Alloy NTNX
  28013.     restores one file marked for deletion which has not yet been purged
  28014. SeeAlso: AH=13h,AH=41h,AH=E2h/SF=10h,AH=E3h/SF=CEh,AX=F244h
  28015.  
  28016. Format of request buffer:
  28017. Offset    Size    Description
  28018.  00h    WORD    length of following data (max 13h)
  28019.  02h    BYTE    11h (subfunction "Restore Erased File")
  28020.  03h    BYTE    directory handle or 00h
  28021.  04h    BYTE    length of volume name
  28022.  05h  N BYTEs    volume name (including colon)
  28023. Note:    if both a directory handle and a volume name are specified, the volume
  28024.       name overrides the handle
  28025.  
  28026. Format of reply buffer:
  28027. Offset    Size    Description
  28028.  00h    WORD    (call) 001Eh (size of following results buffer)
  28029.  02h 15 BYTEs    ASCIZ name of erased file
  28030.  11h 15 BYTEs    ASCIZ name under which file was restored
  28031. ----------21E2--SF12-------------------------
  28032. INT 21 - Novell NetWare - DIRECTORY SERVICES - ALLOC PERMANENT DIRECTORY HANDLE
  28033.     AH = E2h subfn 12h
  28034.     DS:SI -> request buffer (see below)
  28035.     ES:DI -> reply buffer (see below)
  28036. Return: AL = status (00h,98h,9Ch) (see AH=E2h/SF=00h)
  28037. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  28038.       Alloy NTNX
  28039. SeeAlso: AH=E2h/SF=00h,AH=E2h/SF=13h,AH=E2h/SF=14h
  28040.  
  28041. Format of request buffer:
  28042. Offset    Size    Description
  28043.  00h    WORD    length of following data (max 103h)
  28044.  02h    BYTE    12h (subfunction "Alloc Permanent Directory Handle")
  28045.  03h    BYTE    directory handle
  28046.  04h    BYTE    drive ('A'-'Z')
  28047.  05h    BYTE    length of directory path
  28048.  06h  N BYTEs    directory path
  28049.  
  28050. Format of reply buffer:
  28051. Offset    Size    Description
  28052.  00h    WORD    (call) 0002h (size of following results buffer)
  28053.  02h    BYTE    new directory handle
  28054.  03h    BYTE    effective directory rights (see AH=E2h/SF=01h)
  28055. ----------21E2--SF13-------------------------
  28056. INT 21 - Novell NetWare - DIRECTORY SERVICES - ALLOC TEMPORARY DIRECTORY HANDLE
  28057.     AH = E2h subfn 13h
  28058.     DS:SI -> request buffer (see below)
  28059.     ES:DI -> reply buffer (see AH=E2h/SF=12h)
  28060. Return: AL = status (00h,98h,9Ch) (see AH=E2h/SF=00h)
  28061. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  28062.       Alloy NTNX
  28063.     this call is the same as AH=E2h/SF=12h except that the directory handle
  28064.       will be automatically deallocated when the calling application
  28065.       executes an End of Job call (AH=D6h) or terminates
  28066. SeeAlso: AH=D6h,AH=E2h/SF=00h,AH=E2h/SF=12h,AH=E2h/SF=14h,AH=E2h/SF=16h
  28067.  
  28068. Format of request buffer:
  28069. Offset    Size    Description
  28070.  00h    WORD    length of following data (max 103h)
  28071.  02h    BYTE    13h (subfunction "Alloc Temporary Directory Handle")
  28072.  03h    BYTE    directory handle
  28073.  04h    BYTE    drive ('A'-'Z')
  28074.  05h    BYTE    length of directory path
  28075.  06h  N BYTEs    directory path
  28076. ----------21E2--SF14-------------------------
  28077. INT 21 - Novell NetWare - DIRECTORY SERVICES - DEALLOCATE DIRECTORY HANDLE
  28078.     AH = E2h subfn 14h
  28079.     DS:SI -> request buffer (see below)
  28080.     ES:DI -> reply buffer (see below)
  28081. Return: AL = status (00h,9Bh) (see AH=E2h/SF=00h)
  28082. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  28083.       Alloy NTNX
  28084. SeeAlso: AH=E2h/SF=12h,AH=E2h/SF=13h
  28085.  
  28086. Format of request buffer:
  28087. Offset    Size    Description
  28088.  00h    WORD    0002h (length of following data)
  28089.  02h    BYTE    14h (subfunction "Deallocate Directory Handle")
  28090.  03h    BYTE    directory handle
  28091.  
  28092. Format of reply buffer:
  28093. Offset    Size    Description
  28094.  00h    WORD    (call) 0000h (no returned data)
  28095. ----------21E2--SF15-------------------------
  28096. INT 21 - Novell NetWare - DIRECTORY SERVICES - GET VOLUME INFO WITH HANDLE
  28097.     AH = E2h subfn 15h
  28098.     DS:SI -> request buffer (see below)
  28099.     ES:DI -> reply buffer (see below)
  28100. Return: AL = status
  28101.         00h successful
  28102. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  28103.       Alloy NTNX
  28104. SeeAlso: AH=DAh,AH=E2h/SF=02h,AH=E2h/SF=06h,AH=E2h/SF=19h,AH=E3h/SF=E9h
  28105.  
  28106. Format of request buffer:
  28107. Offset    Size    Description
  28108.  00h    WORD    0002h (length of following data)
  28109.  02h    BYTE    15h (subfunction "Get Volume Info With Handle")
  28110.  03h    BYTE    directory handle
  28111.  
  28112. Format of reply buffer:
  28113. Offset    Size    Description
  28114.  00h    WORD    (call) 001Ch (length of following results buffer)
  28115.  02h    WORD    sectors per block (big-endian)
  28116.  04h    WORD    total blocks on volume (big-endian)
  28117.  06h    WORD    blocks available on volume (big-endian)
  28118.  08h    WORD    total directory slots  (big-endian)
  28119.  0Ah    WORD    directory slots available (big-endian)
  28120.  0Ch 16 BYTEs    NUL-padded volume name
  28121.  1Ch    WORD    flag: volume removable if nonzero (big-endian)
  28122. ----------21E2--SF16-------------------------
  28123. INT 21 u - Novell NetWare - DIRECTORY SERVICES - ALLOC SPECIAL TEMP DIR HANDLE
  28124.     AH = E2h subfn 16h
  28125.     DS:SI -> request buffer (see below)
  28126.     ES:DI -> reply buffer
  28127. Return: AL = status
  28128. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX,
  28129.       but is not described in _NetWare_System_Calls--DOS_
  28130. SeeAlso: AH=E2h/SF=13h,AH=E2h/SF=14h
  28131.  
  28132. Format of request buffer:
  28133. Offset    Size    Description
  28134.  00h    WORD    length of following data
  28135.  02h    BYTE    16h (subfunction "Allocate Special Temporary Directory Handle")
  28136.     ???
  28137. ----------21E2--SF17-------------------------
  28138. INT 21 - Novell NetWare - DIRECTORY SERVICES - SAVE DIRECTORY HANDLE
  28139.     AH = E2h subfn 17h
  28140.     DS:SI -> request buffer (see below)
  28141.     ES:DI -> reply buffer (see below)
  28142. Return: AL = status
  28143.         00h successful
  28144.         else network error code
  28145. Note:    this function is supported by Advanced NetWare 2.0+ and Alloy NTNX
  28146. SeeAlso: AH=E2h/SF=12h,AH=E2h/SF=17h
  28147.  
  28148. Format of request buffer:
  28149. Offset    Size    Description
  28150.  00h    WORD    0002h (length of following data)
  28151.  02h    BYTE    18h (subfunction "Restore Directory Handle")
  28152.  03h    BYTE    directory handle
  28153.  
  28154. Format of reply buffer:
  28155. Offset    Size    Description
  28156.  00h    WORD    (call) 0010h (length of following results buffer)
  28157.  02h 16    BYTEs    save buffer
  28158. ----------21E2--SF18-------------------------
  28159. INT 21 - Novell NetWare - DIRECTORY SERVICES - RESTORE DIRECTORY HANDLE
  28160.     AH = E2h subfn 18h
  28161.     DS:SI -> request buffer (see below)
  28162.     ES:DI -> reply buffer (see below)
  28163. Return: AL = status
  28164.         00h successful
  28165.         else network error code
  28166. Desc:    restore a previously saved directory handle to reproduce an executing
  28167.       environment, possibly on a different execution site
  28168. Note:    this function is supported by Advanced NetWare 2.0+ and Alloy NTNX
  28169. SeeAlso: AH=E2h/SF=12h,AH=E2h/SF=17h
  28170.  
  28171. Format of request buffer:
  28172. Offset    Size    Description
  28173.  00h    WORD    0011h (length of following data)
  28174.  02h    BYTE    18h (subfunction "Restore Directory Handle")
  28175.  03h 16 BYTEs    save buffer
  28176.  
  28177. Format of reply buffer:
  28178. Offset    Size    Description
  28179.  00h    WORD    (call) 0002h (length of following results buffer)
  28180.  02h    BYTE    new directory handle
  28181.  03h    BYTE    effective rights (see AH=E2h/SF=03h)
  28182. ----------21E2--SF19-------------------------
  28183. INT 21 - Novell NetWare - DIRECTORY SERVICES - SET DIRECTORY INFORMATION
  28184.     AH = E2h subfn 19h
  28185.     DS:SI -> request buffer (see below)
  28186.     ES:DI -> reply buffer (see below)
  28187. Return: AL = status (00h,9Bh,9Ch) (see AH=E2h/SF=00h)
  28188. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28189. SeeAlso: AH=E2h/SF=02h,AH=E2h/SF=0Fh
  28190.  
  28191. Format of request buffer:
  28192. Offset    Size    Description
  28193.  00h    WORD    length of following data (max 10Bh)
  28194.  02h    BYTE    19h (subfunction "Set Directory Information")
  28195.  03h    BYTE    directory handle
  28196.  04h    DWORD    date and time of creation (big-endian)
  28197.  08h    DWORD    object ID of owner (big-endian)
  28198.  0Ch    BYTE    maximum directory rightes (see AH=E2h/SF=03h)
  28199.  0Dh    BYTE    length of directory path
  28200.  0Eh  N BYTEs    directory path
  28201.  
  28202. Format of reply buffer:
  28203. Offset    Size    Description
  28204.  00h    WORD    (call) 0000h (no results returned)
  28205. ----------21E2--SF1A-------------------------
  28206. INT 21 - Novell NetWare - FILE SERVER - GET PATH FROM DIRECTORY ENTRY
  28207.     AH = E2h subfn 1Ah
  28208.     DS:SI -> request buffer (see below)
  28209.     ES:DI -> reply buffer (see below)
  28210. Return: AL = status
  28211.         00h successful
  28212. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  28213.       Alloy NTNX
  28214. SeeAlso: AH=E2h/SF=01h,AH=E2h/SF=06h,AH=E3h/SF=D7h
  28215.  
  28216. Format of request buffer:
  28217. Offset    Size    Description
  28218.  00h    WORD    0004h (length of following data)
  28219.  02h    BYTE    1Ah (subfunction "Get Path From Directory Entry")
  28220.  03h    BYTE    volume number (00h-1Fh)
  28221.  04h    WORD    directory entry number (big-endian)
  28222.  
  28223. Format of reply buffer:
  28224. Offset    Size    Description
  28225.  00h    WORD    (call) size of following results record (max 200h)
  28226.  02h 256 BYTEs    path
  28227. ----------21E3-------------------------------
  28228. INT 21 - OS/286, OS/386 - ISSUE REAL INTERRUPT
  28229.     AH = E3h
  28230.     AL = interrupt number
  28231.     ???
  28232. Return: ???
  28233. Note:    protected mode only???
  28234. SeeAlso: AH=E1h"OS/286",INT 31/AX=0300h
  28235. ----------21E3-------------------------------
  28236. INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB
  28237.     AH = E3h
  28238.     AL = character
  28239. Return: AL = 00h successful
  28240.          01h buffer full (128 characters)
  28241. SeeAlso: AH=E1h"DoubleDOS",AH=E2h"DoubleDOS",AH=E8h"DoubleDOS"
  28242. SeeAlso: AH=F3h"DoubleDOS"
  28243. ----------21E3-------------------------------
  28244. INT 21 - Novell NetWare - CONNECTION CONTROL
  28245.     AH = E3h
  28246.     DS:SI -> request buffer (see below)
  28247.     ES:DI -> reply buffer (see below)
  28248. Return: AL = status
  28249.         00h successful
  28250.         else error code
  28251. Note:    supported by NetWare 4.0+, Advanced NetWare 1.0+, and Alloy NTNX
  28252. SeeAlso: AH=E3h/SF=0Ah,AH=E3h/SF=32h,AH=E3h/SF=64h,AH=E3h/SF=C8h
  28253.  
  28254. Format of request buffer:
  28255. Offset    Size    Description
  28256.  00h    WORD    length of following data
  28257.  02h    BYTE    subfunction number
  28258.         00h login
  28259.         01h change password
  28260.         02h map user to station set
  28261.         03h map object to number
  28262.         04h map number to object
  28263.         05h get station's logged information
  28264.         06h get station's root mask (obsolete)
  28265.         07h map group name to number
  28266.         08h map number to group name
  28267.         09h get memberset M of group G
  28268.     var    depends on subfunction
  28269. Notes:    the above subfunctions are not described in _NetWare_System_Calls--DOS_
  28270.     see separate entries below for other subfunctions
  28271.  
  28272. Format of reply buffer:
  28273. Offset    Size    Description
  28274.  00h    WORD    (call) length of following buffer space for results
  28275.     var    depends on subfunction
  28276.  
  28277. Format of object property:
  28278. Offset    Size    Description
  28279.  00h 1-16 BYTEs    property name
  28280.   N    BYTE    flags
  28281.         bit 0: property is dynamic
  28282.         bit 1: property is a set rather than an item
  28283.  N+1    BYTE    security levels (see below)
  28284.     ???
  28285.  
  28286. Names of well-known properties:
  28287.  ACCOUNT_BALANCE
  28288.  ACCOUNT_SERVERS
  28289.  GROUP_MEMBERS
  28290.  GROUPS_I'M_IN
  28291.  IDENTIFICATION        user's name
  28292.  LOGIN_CONTROL
  28293.  NET_ADDRESS
  28294.  OPERATORS
  28295.  PASSWORD
  28296.  SECURITY_EQUALS
  28297.  
  28298. Values for security levels:
  28299.  00h    "anyone" everyone may access
  28300.  01h    "logged" only logged-in clients may access
  28301.  02h    "object" only clients logged-in with object's name, type, and password
  28302.  03h    "supervisor" only clients logged-in with supervisor privileges
  28303.  04h    "NetWare" only NetWare may access
  28304. Note:    the above values are stored in a nybble; the high half-byte is write
  28305.       access and the low half-byte is read access
  28306.  
  28307. Values for object type:
  28308.  0000h    unknown
  28309.  0001h    user
  28310.  0002h    user group
  28311.  0003h    print queue
  28312.  0004h    file server
  28313.  0005h    job server
  28314.  0006h    gateway
  28315.  0007h    print server
  28316.  0008h    archive queue
  28317.  0009h    archive server
  28318.  000Ah    job queue
  28319.  000Bh    administration
  28320.  0026h    remote bridge server
  28321.  0047h    advertising print server
  28322.  0048h-8000h reserved
  28323.  FFFFh    wild (used only for finding objects)
  28324. ----------21E3--SF0A-------------------------
  28325. INT 21 - Novell NetWare - CONNECTION SERVICES - ENTER LOGIN AREA
  28326.     AH = E3h subfn 0Ah
  28327.     DS:SI -> request buffer (see below)
  28328.     ES:DI -> reply buffer (see below)
  28329. Return: AL = status
  28330.         00h successful
  28331. Desc:    change the login directory for the calling workstation
  28332. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  28333.       Alloy NTNX
  28334. SeeAlso: AH=D7h,AH=E3h/SF=14h
  28335.  
  28336. Format of request buffer:
  28337. Offset    Size    Description
  28338.  00h    WORD    length of following data (max 102h)
  28339.  02h    BYTE    0Ah (subfunction "Enter Login Area")
  28340.  03h    BYTE    number of local drives
  28341.  04h    BYTE    length of subdirectory name (00h-FFh)
  28342.  05h  N BYTEs    name of subdirectory under SYS:LOGIN where to find the login
  28343.         utility
  28344.  
  28345. Format of reply buffer:
  28346. Offset    Size    Description
  28347.  00h    WORD    (call) 0000h (no data returned)
  28348. ----------21E3--SF0D-------------------------
  28349. INT 21 - Novell NetWare - MESSAGE SERVICES - LOG NETWORK MESSAGE
  28350.     AH = E3h subfn 0Dh
  28351.     DS:SI -> request buffer (see below)
  28352.     ES:DI -> reply buffer (see below)
  28353. Return: AL = status
  28354.         00h successful
  28355. Desc:    append a line to the default file server's NET$LOG.MSG file
  28356. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  28357.       Alloy NTNX
  28358. SeeAlso: AH=E1h/SF=09h
  28359.  
  28360. Format of request buffer:
  28361. Offset    Size    Description
  28362.  00h    WORD    length of following data (max 52h)
  28363.  02h    BYTE    0Dh (subfunction "Log Network Message")
  28364.  03h    BYTE    length of message (01h-50h)
  28365.  04h  N BYTEs    message (no control characters or characters > 7Eh)
  28366. ----------21E3--SF0E-------------------------
  28367. INT 21 - Novell NetWare - FILE SERVER - GET DISK UTILIZATION
  28368.     AH = E3h subfn 0Eh
  28369.     DS:SI -> request buffer (see below)
  28370.     ES:DI -> reply buffer (see below)
  28371. Return: AL = status
  28372.         00h successful
  28373.         98h nonexistent volume
  28374.         F2h not permitted to read object
  28375. Notes:    this function is supported by Advanced NetWare 2.1+
  28376.     the caller must have bindery object read privileges
  28377. SeeAlso: AH=E3h/SF=11h,AH=E3h/SF=D6h,AH=E3h/SF=D9h,AH=E3h/SF=E6h,AH=E3h/SF=E9h
  28378.  
  28379. Format of request buffer:
  28380. Offset    Size    Description
  28381.  00h    WORD    0005h (length of following data)
  28382.  02h    BYTE    0Eh (subfunction "Get Disk Utilization")
  28383.  03h    BYTE    volume number (00h-1Fh)
  28384.  04h    DWORD    object ID (big-endian)
  28385.  
  28386. Format of reply buffer:
  28387. Offset    Size    Description
  28388.  00h    WORD    (call) 000Bh (size of following results buffer)
  28389.  02h    BYTE    volume number (00h-1Fh)
  28390.  03h    DWORD    object ID (big-endian)
  28391.  07h    WORD    directories used by object (big-endian)
  28392.  09h    WORD    files created by object (big-endian)
  28393.  0Bh    WORD    disk blocks used by object-created files (big-endian)
  28394. ----------21E3--SF0F-------------------------
  28395. INT 21 - Novell NetWare - FILE SERVICES - SCAN FILE INFORMATION
  28396.     AH = E3h subfn 0Fh
  28397.     DS:SI -> request buffer (see below)
  28398.     ES:DI -> reply buffer (see below)
  28399. Return: AL = status
  28400.         00h successful
  28401.         89h not permitted to search directory
  28402.         FFh no more matching files
  28403. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28404. SeeAlso: AH=B6h,AH=E3h/SF=10h
  28405.  
  28406. Format of request buffer:
  28407. Offset    Size    Description
  28408.  00h    WORD    length of following data (max 105h)
  28409.  02h    BYTE    0Fh (subfunction "Scan File Information")
  28410.  03h    WORD    sequence number (big-endian)
  28411.         FFFFh on first call
  28412.  05h    BYTE    directory handle or 00h
  28413.  06h    BYTE    search attributes (see AX=4301h)
  28414.  07h    BYTE    length of filespec
  28415.  08h  N BYTEs    ASCIZ uppercase filespec
  28416.  
  28417. Format of reply buffer:
  28418. Offset    Size    Description
  28419.  00h    WORD    (call) 005Eh (size of following results buffer)
  28420.  02h    WORD    next sequence number (place in request buffer for next call)
  28421.  04h 15 BYTEs    ASCIZ filename
  28422.  13h    BYTE    file attributes (see AX=4301h for format)
  28423.  14h    BYTE    extended file attributes (see AH=B6h for format)
  28424.  15h    DWORD    file size in bytes (big-endian)
  28425.  19h    WORD    file's creation date (big-endian) (see AX=5700h for format)
  28426.  1Bh    WORD    date of last access (big-endian) (see AX=5700h for format)
  28427.  1Dh    DWORD    date and time of last update (big-endian) (see AH=E2h/SF=02h)
  28428.  21h    DWORD    object ID of owner (big-endian)
  28429.  25h    DWORD    date and time last archived (big-endian) (see AH=E2h/SF=02h)
  28430.  29h 55 BYTEs    reserved
  28431. ----------21E3--SF10-------------------------
  28432. INT 21 - Novell NetWare - FILE SERVICES - SET FILE INFORMATION
  28433.     AH = E3h subfn 10h
  28434.     DS:SI -> request buffer (see below)
  28435.     ES:DI -> reply buffer (see below)
  28436. Return: AL = status
  28437.         00h successful
  28438. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28439.     the caller must have modify privileges on the directory containing the
  28440.       file
  28441. SeeAlso: AH=B6h,AH=E3h/SF=0Fh
  28442.  
  28443. Format of request buffer:
  28444. Offset    Size    Description
  28445.  00h    WORD    length of following data (max 151h)
  28446.  02h    BYTE    10h (subfunction "Set File Information")
  28447.  03h    BYTE    file attributes (see AX=4301h for format)
  28448.  04h    BYTE    extended file attributes (see AH=B6h for format)
  28449.  05h  4 BYTEs    reserved
  28450.  09h    WORD    file's creation date (big-endian) (see AX=5700h for format) 
  28451.  0Bh    WORD    date of last access (big-endian) (see AX=5700h for format)
  28452.  0Dh    DWORD    date and time of last update (big-endian) (see AH=E2h/SF=02h)
  28453.  11h    DWORD    object ID of owner (big-endian)
  28454.  15h    DWORD    date and time last archived (big-endian) (see AH=E2h/SF=02h)
  28455.  19h 56 BYTEs    reserved
  28456.  51h    BYTE    directory handle or 00h
  28457.  52h    BYTE    search attributes (see AX=4301h for format)
  28458.  53h    BYTE    length of filename
  28459.  54h  N BYTEs    filename
  28460. Format of reply buffer:
  28461. Offset    Size    Description
  28462.  00h    WORD    (call) 0000h (no results returned)
  28463. ----------21E3--SF11-------------------------
  28464. INT 21 - Novell NetWare - FILE SERVER - GET FILE SERVER INFORMATION
  28465.     AH = E3h subfn 11h
  28466.     DS:SI -> request buffer (see below)
  28467.     ES:DI -> reply buffer (see below)
  28468. Return: AL = status
  28469.         00h successful
  28470. Note:    this function is supported by Advanced NetWare 2.1+
  28471. SeeAlso: AH=E3h/SF=0Eh,AH=E3h/SF=CDh,AH=E3h/SF=D3h,AH=E3h/SF=E7h,AH=E7h
  28472.  
  28473. Format of request buffer:
  28474. Offset    Size    Description
  28475.  00h    WORD    0001h (length of following data)
  28476.  02h    BYTE    11h (subfunction "Get File Server Information")
  28477.  
  28478. Format of reply buffer:
  28479. Offset    Size    Description
  28480.  00h    WORD    (call) 0080h (size of following results buffer)
  28481.  02h 48 BYTEs    server's name
  28482.  32h    BYTE    NetWare version
  28483.  33h    BYTE    NetWare subversion (0-99)
  28484.  34h    WORD    number of connections supported (big-endian)
  28485.  36h    WORD    number of connections in use (big-endian)
  28486.  38h    WORD    maximum connected volumes (big-endian)
  28487. ---Advanced NetWare 2.1+ ---
  28488.  3Ah    BYTE    operating system revision number
  28489.  3Bh    BYTE    fault tolerance (SFT) level
  28490.  3Ch    BYTE    TTS level
  28491.  3Dh    WORD    maximum simultaneously-used connections (big-endian)
  28492.  3Fh    BYTE    accounting version
  28493.  40h    BYTE    VAP version
  28494.  41h    BYTE    queueing version
  28495.  42h    BYTE    print server version
  28496.  43h    BYTE    virtual console version
  28497.  44h    BYTE    security restrictions level
  28498.  45h    BYTE    internetwork bridge version
  28499.  46h 60 BYTEs    reserved
  28500. ----------21E3--SF13-------------------------
  28501. INT 21 - Novell NetWare - CONNECTION SERVICES - GET INTERNET ADDRESS
  28502.     AH = E3h subfn 13h
  28503.     DS:SI -> request buffer (see below)
  28504.     ES:DI -> reply buffer (see below)
  28505. Return: AL = status
  28506.         00h successful
  28507. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28508. SeeAlso: AH=DCh"NetWare",AH=E3h/SF=16h,AH=EEh"NetWare"
  28509.  
  28510. Format of request buffer:
  28511. Offset    Size    Description
  28512.  00h    WORD    0002h (length of following data)
  28513.  02h    BYTE    13h (subfunction "Get Internet Address")
  28514.  03h    BYTE    logical connection number (01h-64h)
  28515.  
  28516. Format of reply buffer:
  28517. Offset    Size    Description
  28518.  00h    WORD    (call) 000Ch (length of following results buffer)
  28519.  02h  4 BYTEs    network number
  28520.  06h  6 BYTEs    physical node address
  28521.  0Ch  2 BYTEs    socket number
  28522. ----------21E3--SF14-------------------------
  28523. INT 21 - Novell NetWare - CONNECTION SERVICES - LOGIN TO FILE SERVER
  28524.     AH = E3h subfn 14h
  28525.     DS:SI -> request buffer (see below)
  28526.     ES:DI -> reply buffer (see below)
  28527. Return: AL = status
  28528.         00h successful
  28529. Desc:    this function retrieves a list indicating the connection numbers under
  28530.       which a bindery object is logged into the default file server
  28531. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28532. SeeAlso: AH=D7h"NetWare",AH=F1h"NetWare"
  28533.  
  28534. Format of request buffer:
  28535. Offset    Size    Description
  28536.  00h    WORD    length of following data (max B3h)
  28537.  02h    BYTE    14h (subfunction "Login To File Server")
  28538.  03h    WORD    type of object (big-endian)
  28539.  05h    BYTE    length of object's name (01h-2Fh)
  28540.  06h  N BYTEs    object's name
  28541.     BYTE    length of password
  28542.       N BYTEs    password
  28543.  
  28544. Format of reply buffer:
  28545. Offset    Size    Description
  28546.  00h    WORD    (call) 0000h (no data returned)
  28547. ----------21E3--SF15-------------------------
  28548. INT 21 - Novell NetWare - CONNECTION SERVICES - GET OBJECT CONNECTION NUMBERS
  28549.     AH = E3h subfn 15h
  28550.     DS:SI -> request buffer (see below)
  28551.     ES:DI -> reply buffer (see below)
  28552. Return: AL = status
  28553.         00h successful
  28554. Desc:    this function retrieves a list indicating the connection numbers under
  28555.       which a bindery object is logged into the default file server
  28556. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28557. SeeAlso: AH=DCh"NetWare",AH=E3h/SF=16h
  28558.  
  28559. Format of request buffer:
  28560. Offset    Size    Description
  28561.  00h    WORD    length of following data (max 33h)
  28562.  02h    BYTE    15h (subfunction "Get Object Connection Numbers")
  28563.  03h    WORD    type of object (big-endian)
  28564.  05h    BYTE    length of object's name (01h-2Fh)
  28565.  06h  N BYTEs    object's name
  28566.  
  28567. Format of reply buffer:
  28568. Offset    Size    Description
  28569.  00h    WORD    (call) length of following results buffer (max 65h)
  28570.  02h    BYTE    number of connections
  28571.  03h  N BYTEs    connection list
  28572. ----------21E3--SF16-------------------------
  28573. INT 21 - Novell NetWare - CONNECTION SERVICES - GET CONNECTION INFORMATION
  28574.     AH = E3h subfn 16h
  28575.     DS:SI -> request buffer (see below)
  28576.     ES:DI -> reply buffer (see below)
  28577. Return: AL = status
  28578.         00h successful
  28579. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28580. SeeAlso: AH=D7h,AH=DCh"NetWare",AH=E3h/SF=14h
  28581.  
  28582. Format of request buffer:
  28583. Offset    Size    Description
  28584.  00h    WORD    0002h (length of following data)
  28585.  02h    BYTE    16h (subfunction "Get Connection Information")
  28586.  03h    BYTE    logical connection number (01h-64h)
  28587.  
  28588. Format of reply buffer:
  28589. Offset    Size    Description
  28590.  00h    WORD    (call) 003Dh (length of following results buffer)
  28591.  02h    DWORD    object ID for object logged in on the connection (big-endian)
  28592.         00000000h if no object logged in
  28593.  06h    WORD    type of object (big-endian)
  28594.  08h 48 BYTEs    name of object
  28595.  38h  7 BYTEs    login time (see below)
  28596.  
  28597. Format of login time:
  28598. Offset    Size    Description
  28599.  00h    BYTE    year (80-99 = 1980-1999, 00-79 = 2000-2079)
  28600.  01h    BYTE    month (1-12)
  28601.  02h    BYTE    day (1-31)
  28602.  03h    BYTE    hour (0-23)
  28603.  04h    BYTE    minute (0-59)
  28604.  05h    BYTE    second (0-59)
  28605.  06h    BYTE    day of week (0 = Sunday)
  28606. ----------21E3--SF32-------------------------
  28607. INT 21 - Novell NetWare - BINDERY SERVICES - CREATE BINDERY OBJECT
  28608.     AH = E3h subfn 32h
  28609.     DS:SI -> request buffer (see below)
  28610.     ES:DI -> reply buffer (see below)
  28611. Return: AL = status
  28612.         00h successful
  28613.         96h server out of memory
  28614.         EEh    object already exists
  28615.         EFh invalid name
  28616.         F1h invalid bindery security level
  28617.         F5h not permitted to create objects
  28618.         FEh    server bindery locked
  28619.         FFh    bindery failure
  28620. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28621. SeeAlso: AH=E3h/SF=33h,AH=E3h/SF=34h,AH=E3h/SF=38h,AH=E3h/SF=39h
  28622.  
  28623. Format of request buffer:
  28624. Offset    Size    Description
  28625.  00h    WORD    length of following data (max 35h)
  28626.  02h    BYTE    32h (subfunction "Create Bindery Object")
  28627.  03h    BYTE    object flag
  28628.         00h static
  28629.         01h dynamic
  28630.  04h    BYTE    object security levels
  28631.  05h    WORD    type of object (big-endian)
  28632.  07h    BYTE    length of object's name
  28633.  08h  N BYTEs    object's name
  28634.  
  28635. Format of reply buffer:
  28636. Offset    Size    Description
  28637.  00h    WORD    0000h (no data returned)
  28638. ----------21E3--SF33-------------------------
  28639. INT 21 - Novell NetWare - BINDERY SERVICES - DELETE BINDERY OBJECT
  28640.     AH = E3h subfn 33h
  28641.     DS:SI -> request buffer (see below)
  28642.     ES:DI -> reply buffer (see below)
  28643. Return: AL = status
  28644.         00h successful
  28645.         96h server out of memory
  28646.         EFh invalid name
  28647.         F0h wildcard not allowed
  28648.         F4h not permitted to delete objects
  28649.         FCh no such object
  28650.         FEh    server bindery locked
  28651.         FFh    bindery failure
  28652. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28653. SeeAlso: AH=E3h/SF=32h,AH=E3h/SF=34h
  28654.  
  28655. Format of request buffer:
  28656. Offset    Size    Description
  28657.  00h    WORD    length of following data (max 33h)
  28658.  02h    BYTE    33h (subfunction "Delete Bindery Object")
  28659.  03h    WORD    type of object (big-endian)
  28660.  05h    BYTE    length of object's name (01h-2Fh)
  28661.  06h  N BYTEs    object's name
  28662.  
  28663. Format of reply buffer:
  28664. Offset    Size    Description
  28665.  00h    WORD    (call) 0000h (no data returned)
  28666. ----------21E3--SF34-------------------------
  28667. INT 21 - Novell NetWare - BINDERY SERVICES - RENAME BINDERY OBJECT
  28668.     AH = E3h subfn 34h
  28669.     DS:SI -> request buffer (see below)
  28670.     ES:DI -> reply buffer (see below)
  28671. Return: AL = status
  28672.         00h successful
  28673.         96h server out of memory
  28674.         EFh invalid name
  28675.         F0h wildcard not allowed
  28676.         F3h not permitted to rename object
  28677.         FCh no such object
  28678.         FEh    server bindery locked
  28679.         FFh    bindery failure
  28680. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28681. SeeAlso: AH=E3h/SF=32h,AH=E3h/SF=33h
  28682.  
  28683. Format of request buffer:
  28684. Offset    Size    Description
  28685.  00h    WORD    length of following data (max 63h)
  28686.  02h    BYTE    34h (subfunction "Rename Bindery Object")
  28687.  03h    WORD    type of object (big-endian)
  28688.  05h    BYTE    length of object's name (01h-2Fh)
  28689.  06h  N BYTEs    object's name
  28690.     BYTE    length of new name (01h-2Fh)
  28691.       N BYTEs    new name
  28692.  
  28693. Format of reply buffer:
  28694. Offset    Size    Description
  28695.  00h    WORD    (call) 0000h (no data returned)
  28696. ----------21E3--SF35-------------------------
  28697. INT 21 - Novell NetWare - BINDERY SERVICES - GET BINDERY OBJECT ID
  28698.     AH = E3h subfn 35h
  28699.     DS:SI -> request buffer (see below)
  28700.     ES:DI -> reply buffer (see below)
  28701. Return: AL = status
  28702.         00h successful
  28703.         96h server out of memory
  28704.         FCh no such object
  28705.         FEh    server bindery locked
  28706.         FFh    bindery failure
  28707. Notes:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28708.     the requesting workstation must be logged into the file server with
  28709.       read access to the bindery object
  28710. SeeAlso: AH=E3h/SF=36h,AH=E3h/SF=44h
  28711.  
  28712. Format of request buffer:
  28713. Offset    Size    Description
  28714.  00h    WORD    length of following data (max 33h)
  28715.  02h    BYTE    35h (subfunction "Get Bindery Object ID")
  28716.  03h    WORD    type of object (big-endian)
  28717.  05h    BYTE    length of object's name
  28718.  06h  N BYTEs    object's name
  28719.  
  28720. Format of reply buffer:
  28721. Offset    Size    Description
  28722.  00h    WORD    (call) 0036h (length of following buffer space)
  28723.  02h    DWORD    object ID (big-endian)
  28724.  06h    WORD    type of object (big-endian)
  28725.  08h 48 BYTEs    object name
  28726. ----------21E3--SF36-------------------------
  28727. INT 21 - Novell NetWare - BINDERY SERVICES - GET BINDERY OBJECT NAME
  28728.     AH = E3h subfn 36h
  28729.     DS:SI -> request buffer (see below)
  28730.     ES:DI -> reply buffer (see below)
  28731. Return: AL = status
  28732.         00h successful
  28733.         96h server out of memory
  28734.         EFh invalid name
  28735.         F0h    wildcard not allowed
  28736.         FCh no such object
  28737.         FEh    server bindery locked
  28738.         FFh    bindery failure
  28739. Notes:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28740.     the requesting workstation must be logged into the file server with
  28741.       read access to the bindery object
  28742. SeeAlso: AH=E3h/SF=35h,AH=E3h/SF=44h
  28743.  
  28744. Format of request buffer:
  28745. Offset    Size    Description
  28746.  00h    WORD    0005h (length of following data)
  28747.  02h    BYTE    36h (subfunction "Get Bindery Object Name")
  28748.  03h    DWORD    object ID (big-endian)
  28749.  
  28750. Format of reply buffer:
  28751. Offset    Size    Description
  28752.  00h    WORD    (call) 0036h (length of following buffer space)
  28753.  02h    DWORD    object ID (big-endian)
  28754.  06h    WORD    type of object (big-endian)
  28755.  08h 48 BYTEs    object name
  28756. ----------21E3--SF37-------------------------
  28757. INT 21 - Novell NetWare - BINDERY SERVICES - SCAN BINDERY OBJECT
  28758.     AH = E3h subfn 37h
  28759.     DS:SI -> request buffer (see below)
  28760.     ES:DI -> reply buffer (see below)
  28761. Return: AL = status
  28762.         00h successful
  28763.         96h server out of memory
  28764.         EFh invalid name
  28765.         FCh no such object
  28766.         FEh    server bindery locked
  28767.         FFh    bindery failure
  28768. Notes:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28769.     the requesting workstation must be logged into the file server with
  28770.       read access to the bindery object
  28771. SeeAlso: AH=E3h/SF=32h,AH=E3h/SF=33h,AH=E3h/SF=38h,AH=E3h/SF=3Ch
  28772.  
  28773. Format of request buffer:
  28774. Offset    Size    Description
  28775.  00h    WORD    length of following data (max 37h)
  28776.  02h    BYTE    37h (subfunction "Scan Bindery Object")
  28777.  03h    DWORD    last object ID (big-endian)
  28778.  07h    WORD    type of object (big-endian)
  28779.  09h    BYTE    length of object's name
  28780.  0Ah  N BYTEs    object's name
  28781.  
  28782. Format of reply buffer:
  28783. Offset    Size    Description
  28784.  00h    WORD    (call) 0039h (length of following buffer space)
  28785.  02h    DWORD    object ID (big-endian)
  28786.         FFFFFFFFh for first call
  28787.  06h    WORD    type of object (big-endian)
  28788.  08h    BYTE    length of object's name (01h-2Fh)
  28789.  09h  N BYTEs    object name
  28790.     BYTE    object flag (00h static, 01h dynamic)
  28791.     BYTE    object's security levels
  28792.     BYTE    object properties flag (00h no, FFh yes)
  28793. ----------21E3--SF38-------------------------
  28794. INT 21 - Novell NetWare - BINDERY SERVICES - CHANGE BINDERY OBJECT SECURITY
  28795.     AH = E3h subfn 38h
  28796.     DS:SI -> request buffer (see below)
  28797.     ES:DI -> reply buffer (see below)
  28798. Return: AL = status
  28799.         00h successful
  28800.         96h server out of memory
  28801.         F0h    wildcard not allowed
  28802.         F1h invalid bindery security level
  28803.         FBh    no such property
  28804.         FCh    no such object
  28805.         FEh    server bindery locked
  28806.         FFh    bindery failure
  28807. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28808. SeeAlso: AH=E3h/SF=32h,AH=E3h/SF=3Bh
  28809.  
  28810. Format of request buffer:
  28811. Offset    Size    Description
  28812.  00h    WORD    length of following data (max 34h)
  28813.  02h    BYTE    38h (subfunction "Change Bindery Object Security")
  28814.  03h    BYTE    new security levels
  28815.  04h    WORD    type of object (big-endian)
  28816.  06h    BYTE    length of object's name (01h-2Fh)
  28817.  07h  N BYTEs    object name
  28818.  
  28819. Format of reply buffer:
  28820. Offset    Size    Description
  28821.  00h    WORD    (call) 0000h (no data returned)
  28822. ----------21E3--SF39-------------------------
  28823. INT 21 - Novell NetWare - BINDERY SERVICES - CREATE PROPERTY
  28824.     AH = E3h subfn 39h
  28825.     DS:SI -> request buffer (see below)
  28826.     ES:DI -> reply buffer (see below)
  28827. Return: AL = status
  28828.         00h successful
  28829.         96h server out of memory
  28830.         EDh    property already exists
  28831.         EFh invalid name
  28832.         F0h wildcard not allowed
  28833.         F1h invalid bindery security level
  28834.         F7h not permitted to create properties
  28835.         FCh no such object
  28836.         FEh    server bindery locked
  28837.         FFh    bindery failure
  28838. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28839. SeeAlso: AH=E3h/SF=32h,AH=E3h/SF=3Bh
  28840.  
  28841. Format of request buffer:
  28842. Offset    Size    Description
  28843.  00h    WORD    length of following data (max 45h)
  28844.  02h    BYTE    39h (subfunction "Create Property")
  28845.  03h    WORD    type of object (big-endian)
  28846.  05h    BYTE    length of object's name (01h-2Fh)
  28847.  06h  N BYTEs    object's name
  28848.     BYTE    property flags
  28849.     BYTE    property security levels
  28850.     BYTE    length of property's name (01h-0Fh)
  28851.       N BYTEs    property's name
  28852.  
  28853. Format of reply buffer:
  28854. Offset    Size    Description
  28855.  00h    WORD    (call) 0000h (no data returned)
  28856. ----------21E3--SF3A-------------------------
  28857. INT 21 - Novell NetWare - BINDERY SERVICES - DELETE PROPERTY
  28858.     AH = E3h subfn 3Ah
  28859.     DS:SI -> request buffer (see below)
  28860.     ES:DI -> reply buffer (see below)
  28861. Return: AL = status
  28862.         00h successful
  28863.         96h server out of memory
  28864.         F0h wildcard not allowed
  28865.         F1h invalid bindery security level
  28866.         F6h not permitted to delete properties
  28867.         FBh no such property
  28868.         FCh no such object
  28869.         FEh    server bindery locked
  28870.         FFh    bindery failure
  28871. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28872. SeeAlso: AH=E3h/SF=32h,AH=E3h/SF=39h
  28873.  
  28874. Format of request buffer:
  28875. Offset    Size    Description
  28876.  00h    WORD    length of following data (max 43h)
  28877.  02h    BYTE    3Ah (subfunction "Delete Property")
  28878.  03h    WORD    type of object (big-endian)
  28879.  05h    BYTE    length of object's name (01h-2Fh)
  28880.  06h  N BYTEs    object's name
  28881.     BYTE    length of property's name (01h-0Fh)
  28882.       N BYTEs    property's name
  28883.  
  28884. Format of reply buffer:
  28885. Offset    Size    Description
  28886.  00h    WORD    (call) 0000h (no data returned)
  28887. ----------21E3--SF3B-------------------------
  28888. INT 21 - Novell NetWare - BINDERY SERVICES - CHANGE PROPERTY SECURITY
  28889.     AH = E3h subfn 3Bh
  28890.     DS:SI -> request buffer (see below)
  28891.     ES:DI -> reply buffer (see below)
  28892. Return: AL = status
  28893.         00h successful
  28894.         96h server out of memory
  28895.         F0h    wildcard not allowed
  28896.         F1h invalid bindery security level
  28897.         FBh    no such property
  28898.         FCh    no such object
  28899.         FEh    server bindery locked
  28900.         FFh    bindery failure
  28901. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28902. SeeAlso: AH=E3h/SF=38h
  28903.  
  28904. Format of request buffer:
  28905. Offset    Size    Description
  28906.  00h    WORD    length of following data (max 44h)
  28907.  02h    BYTE    3Bh (subfunction "Change Property Security")
  28908.  03h    WORD    type of object (big-endian)
  28909.  05h    BYTE    length of object's name (01h-2Fh)
  28910.  06h  N BYTEs    object name
  28911.     BYTE    new property security levels
  28912.     BYTE    length of property's name
  28913.       N BYTEs    property name
  28914.  
  28915. Format of reply buffer:
  28916. Offset    Size    Description
  28917.  00h    WORD    (call) 0000h (no data returned)
  28918. ----------21E3--SF3C-------------------------
  28919. INT 21 - Novell NetWare - BINDERY SERVICES - SCAN PROPERTY
  28920.     AH = E3h subfn 3Ch
  28921.     DS:SI -> request buffer (see below)
  28922.     ES:DI -> reply buffer (see below)
  28923. Return: AL = status
  28924.         00h successful
  28925.         96h server out of memory
  28926.         F0h    wildcard not allowed
  28927.         F1h invalid bindery security level
  28928.         FBh    no such property
  28929.         FCh    no such object
  28930.         FEh    server bindery locked
  28931.         FFh    bindery failure
  28932. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28933. SeeAlso: AH=E3h/SF=37h,AH=E3h/SF=3Bh
  28934.  
  28935. Format of request buffer:
  28936. Offset    Size    Description
  28937.  00h    WORD    length of following data (max 47h)
  28938.  02h    BYTE    3Ch (subfunction "Scan Property")
  28939.  03h    WORD    type of object (big-endian)
  28940.  05h    BYTE    length of object's name (01h-2Fh)
  28941.  06h  N BYTEs    object name
  28942.     DWORD    sequence number (big-endian)
  28943.         FFFFFFFFh for first call
  28944.     BYTE    length of property's name (01h-0Fh)
  28945.       N BYTEs    property's name
  28946.  
  28947. Format of reply buffer:
  28948. Offset    Size    Description
  28949.  00h    WORD    (call) 0018h (length of following results buffer)
  28950.  02h 16 BYTEs    property name
  28951.  12h    BYTE    property flags
  28952.  13h    BYTE    property security levels
  28953.  14h    DWORD    sequence number (big-endian)
  28954.  18h    BYTE    property value flag (00h no, FFh yes)
  28955.  19h    BYTE    more properties (00h no, FFh yes)
  28956. ----------21E3--SF3D-------------------------
  28957. INT 21 - Novell NetWare - BINDERY SERVICES - READ PROPERTY VALUE
  28958.     AH = E3h subfn 3Dh
  28959.     DS:SI -> request buffer (see below)
  28960.     ES:DI -> reply buffer (see below)
  28961. Return: AL = status
  28962.         00h successful
  28963.         96h server out of memory
  28964.         ECh no such segment
  28965.         F0h    wildcard not allowed
  28966.         F1h invalid bindery security level
  28967.         F9h not permitted to read property
  28968.         FBh    no such property
  28969.         FCh    no such object
  28970.         FEh    server bindery locked
  28971.         FFh    bindery failure
  28972. Desc:    retrieve one 128-byte segment of the specified property's value
  28973. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  28974. SeeAlso: AH=E3h/SF=39h,AH=E3h/SF=3Ch,AH=E3h/SF=3Eh
  28975.  
  28976. Format of request buffer:
  28977. Offset    Size    Description
  28978.  00h    WORD    length of following data (max 44h)
  28979.  02h    BYTE    3Dh (subfunction "Read Property Value")
  28980.  03h    WORD    type of object (big-endian)
  28981.  05h    BYTE    length of object's name (01h-2Fh)
  28982.  06h  N BYTEs    object name
  28983.     BYTE    segment number (01h on first call, increment until done)
  28984.     BYTE    length of property's name (01h-0Fh)
  28985.       N BYTEs    property name
  28986.  
  28987. Format of reply buffer:
  28988. Offset    Size    Description
  28989.  00h    WORD    (call) 0082h (length of following results buffer)
  28990.  02h 128 BYTEs    property's value
  28991.  82h    BYTE    more segments (00h no, FFh yes)
  28992.  83h    BYTE    property's flags
  28993. ----------21E3--SF3E-------------------------
  28994. INT 21 - Novell NetWare - BINDERY SERVICES - WRITE PROPERTY VALUE
  28995.     AH = E3h subfn 3Eh
  28996.     DS:SI -> request buffer (see below)
  28997.     ES:DI -> reply buffer (see below)
  28998. Return: AL = status
  28999.         00h successful
  29000.         96h server out of memory
  29001.         E8h not item property
  29002.         ECh no such segment
  29003.         F0h    wildcard not allowed
  29004.         F1h invalid bindery security level
  29005.         F8h not permitted to write property
  29006.         FBh    no such property
  29007.         FCh    no such object
  29008.         FEh    server bindery locked
  29009.         FFh    bindery failure
  29010. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  29011. SeeAlso: AH=E3h/SF=39h,AH=E3h/SF=3Ch,AH=E3h/SF=3Eh
  29012.  
  29013. Format of request buffer:
  29014. Offset    Size    Description
  29015.  00h    WORD    length of following data (max C5h)
  29016.  02h    BYTE    3Eh (subfunction "Write Property Value")
  29017.  03h    WORD    type of object (big-endian)
  29018.  05h    BYTE    length of object's name (01h-2Fh)
  29019.  06h  N BYTEs    object name
  29020.     BYTE    segment number (01h on first call, increment until done)
  29021.     BYTE    erase remaining segments (00h no, FFh yes)
  29022.     BYTE    length of property's name (01h-0Fh)
  29023.       N BYTEs    property name
  29024.     128 BYTEs    property value segment
  29025.  
  29026. Format of reply buffer:
  29027. Offset    Size    Description
  29028.  00h    WORD    (call) 0000h (no data returned)
  29029. ----------21E3--SF3F-------------------------
  29030. INT 21 - Novell NetWare - BINDERY SERVICES - VERIFY BINDERY OBJECT PASSWORD
  29031.     AH = E3h subfn 3Fh
  29032.     DS:SI -> request buffer (see below)
  29033.     ES:DI -> reply buffer (see below)
  29034. Return: AL = status
  29035.         00h successful
  29036.         96h server out of memory
  29037.         F0h    wildcard not allowed
  29038.         FBh    no such property
  29039.         FCh    no such object
  29040.         FEh    server bindery locked
  29041.         FFh    bindery failure: no such object, bad password
  29042. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  29043. SeeAlso: AH=E3h/SF=40h
  29044.  
  29045. Format of request buffer:
  29046. Offset    Size    Description
  29047.  00h    WORD    length of following data (max 133h)
  29048.  02h    BYTE    3Fh (subfunction "Verify Bindery Object Password")
  29049.  03h    WORD    type of object (big-endian)
  29050.  05h    BYTE    length of object's name (01h-2Fh)
  29051.  06h  N BYTEs    object name
  29052.     BYTE    length of password (00h-7Fh)
  29053.       N BYTEs    password
  29054.  
  29055. Format of reply buffer:
  29056. Offset    Size    Description
  29057.  00h    WORD    (call) 0000h (no data returned)
  29058. ----------21E3--SF40-------------------------
  29059. INT 21 - Novell NetWare - BINDERY SERVICES - CHANGE BINDERY OBJECT PASSWORD
  29060.     AH = E3h subfn 40h
  29061.     DS:SI -> request buffer (see below)
  29062.     ES:DI -> reply buffer (see below)
  29063. Return: AL = status
  29064.         00h successful
  29065.         96h server out of memory
  29066.         F0h    wildcard not allowed
  29067.         FBh    no such property
  29068.         FCh    no such object
  29069.         FEh    server bindery locked
  29070.         FFh    bindery failure: no such object, no password for object, or
  29071.             invalid old password
  29072. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  29073. SeeAlso: AH=E3h/SF=3Fh,AH=E3h/SF=41h
  29074.  
  29075. Format of request buffer:
  29076. Offset    Size    Description
  29077.  00h    WORD    length of following data (max 133h)
  29078.  02h    BYTE    40h (subfunction "Change Bindery Object Password")
  29079.  03h    WORD    type of object (big-endian)
  29080.  05h    BYTE    length of object's name (01h-2Fh)
  29081.  06h  N BYTEs    object name
  29082.     BYTE    length of old password (00h-7Fh)
  29083.       N BYTEs    old password
  29084.     BYTE    length of new password (00h-7Fh)
  29085.       N BYTEs    new password
  29086.  
  29087. Format of reply buffer:
  29088. Offset    Size    Description
  29089.  00h    WORD    (call) 0000h (no data returned)
  29090. ----------21E3--SF41-------------------------
  29091. INT 21 - Novell NetWare - BINDERY SERVICES - ADD BINDERY OBJECT TO SET
  29092.     AH = E3h subfn 41h
  29093.     DS:SI -> request buffer (see below)
  29094.     ES:DI -> reply buffer (see below)
  29095. Return: AL = status
  29096.         00h successful
  29097.         96h server out of memory
  29098.         E9h    member already exists
  29099.         EBh    not a group property
  29100.         F0h    wildcard not allowed
  29101.         F8h    can't write property
  29102.         FBh    no such property
  29103.         FCh    no such object
  29104.         FEh    server bindery locked
  29105.         FFh    bindery failure
  29106. Desc:    add the specified object to a set property
  29107. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  29108. SeeAlso: AH=E3h/SF=40h,AH=E3h/SF=42h,AH=E3h/SF=43h
  29109.  
  29110. Format of request buffer:
  29111. Offset    Size    Description
  29112.  00h    WORD    length of following data (max 75h)
  29113.  02h    BYTE    41h (subfunction "Add Bindery Object to Set")
  29114.  03h    WORD    type of object (big-endian)
  29115.  05h    BYTE    length of object's name
  29116.  06h  N BYTEs    object name
  29117.     BYTE    length of property name (01h-0Fh)
  29118.       N BYTEs    property name
  29119.     WORD    type of member object (big-endian)
  29120.     BYTE    length of member object's name
  29121.       N BYTEs    member object's name
  29122.  
  29123. Format of reply buffer:
  29124. Offset    Size    Description
  29125.  00h    WORD    (call) 0000h (no data returned)
  29126. ----------21E3--SF42-------------------------
  29127. INT 21 - Novell NetWare - BINDERY SERVICES - DELETE BINDERY OBJECT FROM SET
  29128.     AH = E3h subfn 42h
  29129.     DS:SI -> request buffer (see below)
  29130.     ES:DI -> reply buffer (see below)
  29131. Return: AL = status
  29132.         00h successful
  29133.         96h server out of memory
  29134.         EAh    member does not exist
  29135.         EBh    not a group property
  29136.         F0h    wildcard not allowed
  29137.         F8h    can't write property
  29138.         FBh    no such property
  29139.         FCh    no such object
  29140.         FEh    server bindery locked
  29141.         FFh    bindery failure
  29142. Desc:    delete the specified object from a set property
  29143. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  29144. SeeAlso: AH=E3h/SF=40h,AH=E3h/SF=42h,AH=E3h/SF=43h
  29145.  
  29146. Format of request buffer:
  29147. Offset    Size    Description
  29148.  00h    WORD    length of following data (max 75h)
  29149.  02h    BYTE    42h (subfunction "Delete Bindery Object from Set")
  29150.  03h    WORD    type of object (big-endian)
  29151.  05h    BYTE    length of object's name
  29152.  06h  N BYTEs    object name
  29153.     BYTE    length of property name (01h-0Fh)
  29154.       N BYTEs    property name
  29155.     WORD    type of member object (big-endian)
  29156.     BYTE    length of member object's name
  29157.       N BYTEs    member object's name
  29158.  
  29159. Format of reply buffer:
  29160. Offset    Size    Description
  29161.  00h    WORD    (call) 0000h (no data returned)
  29162. ----------21E3--SF43-------------------------
  29163. INT 21 - Novell NetWare - BINDERY SERVICES - IS BINDERY OBJECT IN SET
  29164.     AH = E3h subfn 43h
  29165.     DS:SI -> request buffer (see below)
  29166.     ES:DI -> reply buffer (see below)
  29167. Return: AL = status
  29168.         00h successful
  29169.         96h server out of memory
  29170.         EAh member does not exist
  29171.         EBh not a group property
  29172.         F0h    wildcard not allowed
  29173.         F9h not permitted to read property
  29174.         FBh no such property
  29175.         FCh no such object
  29176.         FEh    server bindery locked
  29177.         FFh    bindery failure
  29178. Notes:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  29179.     the caller must have read access to the property
  29180. SeeAlso: AH=E3h/SF=41h,AH=E3h/SF=42h
  29181.  
  29182. Format of request buffer:
  29183. Offset    Size    Description
  29184.  00h    WORD    length of following data (max 75h)
  29185.  02h    BYTE    43h (subfunction "Is Bindery Object In Set")
  29186.  03h    WORD    type of object (big-endian)
  29187.  05h    BYTE    length of object's name
  29188.  06h  N BYTEs    object's name
  29189.     BYTE    length of property's name
  29190.       N BYTEs    property's name
  29191.     WORD    type of member object (big-endian)
  29192.     BYTE    length of member object's name
  29193.       N BYTEs    member object's name
  29194.  
  29195. Format of reply buffer:
  29196. Offset    Size    Description
  29197.  00h    WORD    (call) 0000h (no data returned)
  29198. ----------21E3--SF44-------------------------
  29199. INT 21 - Novell NetWare - BINDERY SERVICES - CLOSE BINDERY
  29200.     AH = E3h subfn 44h
  29201.     DS:SI -> request buffer (see below)
  29202.     ES:DI -> reply buffer (see below)
  29203. Return: AL = status
  29204.         00h successful
  29205. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  29206. SeeAlso: AH=E3h/SF=45h
  29207.  
  29208. Format of request buffer:
  29209. Offset    Size    Description
  29210.  00h    WORD    0001h (length of following data)
  29211.  02h    BYTE    44h (subfunction "Close Bindery")
  29212.  
  29213. Format of reply buffer:
  29214. Offset    Size    Description
  29215.  00h    WORD    (call) 0000h (no data returned)
  29216. ----------21E3--SF45-------------------------
  29217. INT 21 - Novell NetWare - BINDERY SERVICES - OPEN BINDERY
  29218.     AH = E3h subfn 45h
  29219.     DS:SI -> request buffer (see below)
  29220.     ES:DI -> reply buffer (see below)
  29221. Return: AL = status
  29222.         00h successful
  29223. Notes:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  29224.     the bindery may only be opened by the supervisor or an object with
  29225.       equivalent privileges
  29226. SeeAlso: AH=E3h/SF=44h
  29227.  
  29228. Format of request buffer:
  29229. Offset    Size    Description
  29230.  00h    WORD    0001h (length of following data)
  29231.  02h    BYTE    45h (subfunction "Open Bindery")
  29232.  
  29233. Format of reply buffer:
  29234. Offset    Size    Description
  29235.  00h    WORD    (call) 0000h (no data returned)
  29236. ----------21E3--SF46-------------------------
  29237. INT 21 - Novell NetWare - BINDERY SERVICES - GET BINDERY ACCESS LEVEL
  29238.     AH = E3h subfn 46h
  29239.     DS:SI -> request buffer (see below)
  29240.     ES:DI -> reply buffer (see below)
  29241. Return: AL = status
  29242.         00h successful
  29243. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  29244.  
  29245. Format of request buffer:
  29246. Offset    Size    Description
  29247.  00h    WORD    0001h (length of following data)
  29248.  02h    BYTE    46h (subfunction "Get Bindery Access Level")
  29249.  
  29250. Format of reply buffer:
  29251. Offset    Size    Description
  29252.  00h    WORD    0005h (length of following buffer)
  29253.  02h    BYTE    security levels
  29254.  03h    DWORD    object ID (big-endian)
  29255. ----------21E3--SF47-------------------------
  29256. INT 21 - Novell NetWare - DIRECTORY SERVICES - SCAN BINDERY OBJ TRUSTEE PATHS
  29257.     AH = E3h subfn 47h
  29258.     DS:SI -> request buffer (see below)
  29259.     ES:DI -> reply buffer (see below)
  29260. Return: AL = status
  29261.         00h successful
  29262.         96h server out of memory
  29263.         F0h wildcard not allowed
  29264.         F1h invalid bindery security level
  29265.         FCh no such object
  29266.         FEh server bindery locked
  29267.         FFh bindery failure
  29268. Desc:    iterate through the directories to which an object is a trustee
  29269. Note:    this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
  29270. SeeAlso: AH=E2h/SF=0Ch,AH=E2h/SF=0Dh,AH=E2h/SF=0Eh
  29271.  
  29272. Format of request buffer:
  29273. Offset    Size    Description
  29274.  00h    WORD    0008h (length of following data)
  29275.  02h    BYTE    47h (subfunction "Scan Bindery Object Trustee Paths")
  29276.  03h    BYTE    volume number (00h-1Fh)
  29277.  04h    WORD    last sequence number (big-endian)
  29278.         00h on first call
  29279.  06h    DWORD    object ID (big-endian)
  29280.  
  29281. Format of reply buffer:
  29282. Offset    Size    Description
  29283.  00h    WORD    (call) length of following results buffer (max 107h)
  29284.  02h    WORD    next sequence number (big-endian)
  29285.  04h    DWORD    object ID (big-endian)
  29286.  08h    BYTE    trustee directory rights (see AH=E2h/SF=03h)
  29287.  09h    BYTE    length fo trustee path
  29288.  0Ah  N BYTEs    trustee path
  29289. ----------21E3--SF64-------------------------
  29290. INT 21 - Novell NetWare - QUEUE SERVICES - CREATE QUEUE
  29291.     AH = E3h subfn 64h
  29292.     DS:SI -> request buffer (see below)
  29293.     ES:DI -> reply buffer (see below)
  29294. Return: AL = status (00h,96h,99h,9Bh,9Ch,EDh-F1h,F5h,F7h,FCh,FEh,FFh)
  29295.         (see below)
  29296. Notes:    this function is supported by Advanced NetWare 2.1+
  29297.     caller must be on a workstation with supervisor privileges
  29298. SeeAlso: AH=E3h/SF=65h,AH=E3h/SF=66h,AH=E3h/SF=68h,AH=E3h/SF=6Bh
  29299.  
  29300. Values for status:
  29301.  00h    successful
  29302.  96h    server out of memory
  29303.  99h    directory full
  29304.  9Bh    invalid directory handle
  29305.  9Ch    invalid path
  29306.  D0h    queue error
  29307.  D1h    no such queue
  29308.  D2h    no server for queue
  29309.  D3h    no queue rights
  29310.  D4h    queue full
  29311.  D5h    no queue job
  29312.  D6h    no job rights
  29313.  D7h    queue servicing error
  29314.  D9h    station is not a server
  29315.  DAh    queue halted
  29316.  DBh    too many queue servers
  29317.  EDh    property already exists
  29318.  EEh    object already exists
  29319.  EFh    invalid name
  29320.  F0h    wildcard not allowed
  29321.  F1h    invalid bindery security level
  29322.  F5h    not permitted to create object
  29323.  F7h    not permitted to create property
  29324.  FCh    no such object
  29325.  FEh    server bindery locked
  29326.  FFh    bindery failure
  29327.  
  29328. Format of request buffer:
  29329. Offset    Size    Description
  29330.  00h    WORD    length of following data (max ABh)
  29331.  02h    BYTE    64h (subfunction "Create Queue")
  29332.  03h    WORD    queue type (big-endian)
  29333.  05h    BYTE    length of queue's name (01h-2Fh)
  29334.  06h  N BYTEs    queue's name
  29335.     BYTE    directory handle or 00h
  29336.     BYTE    length of path name (01h-76h)
  29337.       N BYTEs    path name of directory in which to create queue subdirectory
  29338.  
  29339. Format of reply buffer:
  29340. Offset    Size    Description
  29341.  00h    WORD    (call) 0004h (size of following results buffer)
  29342.  02h    DWORD    object ID of queue (big-endian)
  29343. ----------21E3--SF65-------------------------
  29344. INT 21 - Novell NetWare - QUEUE SERVICES - DESTROY QUEUE
  29345.     AH = E3h subfn 65h
  29346.     DS:SI -> request buffer (see below)
  29347.     ES:DI -> reply buffer (see below)
  29348. Return: AL = status (00h,96h,9Ch,D0h,D1h,FFh) (see also AH=E3h/SF=64h)
  29349.         FFh hardware failure
  29350. Desc:    abort all active jobs, detach all job servers, remove all job entries,
  29351.       delete all job files, remove the queue object and its properties
  29352.       from the bindery, and delete the queue's subdirectory
  29353. Notes:    this function is supported by Advanced NetWare 2.1+
  29354.     caller must have SUPERVISOR privileges
  29355. SeeAlso: AH=E3h/SF=64h,AH=E3h/SF=66h,AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=70h
  29356.  
  29357. Format of request buffer:
  29358. Offset    Size    Description
  29359.  00h    WORD    0005h (length of following data)
  29360.  02h    BYTE    65h (subfunction "Destroy Queue")
  29361.  03h    DWORD    object ID of queue (big-endian)
  29362.  
  29363. Format of reply buffer:
  29364. Offset    Size    Description
  29365.  00h    WORD    (call) 0000h (no results returned)
  29366. ----------21E3--SF66-------------------------
  29367. INT 21 - Novell NetWare - QUEUE SERVICES - READ QUEUE CURRENT STATUS
  29368.     AH = E3h subfn 66h
  29369.     DS:SI -> request buffer (see below)
  29370.     ES:DI -> reply buffer (see below)
  29371. Return: AL = status (00h,96h,9Ch,D1h-D3h,F1h,FCh,FEh,FFh) (see AH=E3h/SF=64h)
  29372. Notes:    this function is supported by Advanced NetWare 2.1+
  29373.     caller must be on a workstation which is security-equivalent to a
  29374.       member of the queue's Q_USERS or Q_OPERATORS properties
  29375. SeeAlso: AH=E3h/SF=64h,AH=E3h/SF=67h,AH=E3h/SF=6Fh,AH=E3h/SF=76h
  29376.  
  29377. Format of request buffer:
  29378. Offset    Size    Description
  29379.  00h    WORD    0005h (length of following data)
  29380.  02h    BYTE    66h (subfunction "Read Queue Current Status")
  29381.  03h    DWORD    object ID of queue (big-endian)
  29382.  
  29383. Format of reply buffer:
  29384. Offset    Size    Description
  29385.  00h    WORD    (call) 0085h (size of following results)
  29386.  02h    DWORD    object ID of queue (big-endian)
  29387.  06h    BYTE    status of queue
  29388.         bit 0: operator disabled addition of new jobs
  29389.         bit 1: operator refuses additional job servers attaching
  29390.         bit 2: operator disabled job servicing
  29391.  07h    BYTE    number of jobs in queue (00h-FAh)
  29392.  08h    BYTE    number of servers attached to queue (00h-19h)
  29393.  09h 25 DWORDs    list of object IDs of attached servers
  29394.  6Dh 25 BYTEs    list of attached servers' stations
  29395.  86h    BYTE    (call) maximum number of servers to return
  29396. ----------21E3--SF67-------------------------
  29397. INT 21 - Novell NetWare - QUEUE SERVICES - SET QUEUE CURRENT STATUS
  29398.     AH = E3h subfn 67h
  29399.     DS:SI -> request buffer (see below)
  29400.     ES:DI -> reply buffer (see below)
  29401. Return: AL = status (00h,96h,9Ch,D0h,D1h,D3h,FEh,FFh) (see AH=E3h/SF=64h)
  29402. Notes:    this function is supported by Advanced NetWare 2.1+
  29403.     caller must have operator privileges
  29404. SeeAlso: AH=E3h/SF=64h,AH=E3h/SF=66h,AH=E3h/SF=6Fh,AH=E3h/SF=76h
  29405.  
  29406. Format of request buffer:
  29407. Offset    Size    Description
  29408.  00h    WORD    0006h (length of following data)
  29409.  02h    BYTE    67h (subfunction "Set Queue Current Status")
  29410.  03h    DWORD    object ID of queue (big-endian)
  29411.  07h    BYTE    queue status
  29412.         bit 0: operator disabled addition of new jobs
  29413.         bit 1: operator refuses additional job servers attaching
  29414.         bit 2: operator disabled job servicing
  29415.  
  29416. Format of reply buffer:
  29417. Offset    Size    Description
  29418.  00h    WORD    (call) 0000h (no results returned)
  29419. ----------21E3--SF68-------------------------
  29420. INT 21 - Novell NetWare - QUEUE SERVICES - CREATE QUEUE JOB AND FILE
  29421.     AH = E3h subfn 68h
  29422.     DS:SI -> request buffer (see below)
  29423.     ES:DI -> reply buffer (see below)
  29424. Return: AL = status (00h,96h,99h,9Ch,D0h-D4h,DAh,EDh,EFh-F1h,F7h,FCh,FEh,FFh)
  29425.         (see AH=E3h/SF=64h)
  29426. Notes:    this function is supported by Advanced NetWare 2.1+
  29427.     caller must be on a workstation which is security-equivalent to a
  29428.       member of the queue's Q_USER property
  29429. SeeAlso: AH=E3h/SF=69h,AH=E3h/SF=6Ah,AH=E3h/SF=6Eh
  29430.  
  29431. Format of request buffer:
  29432. Offset    Size    Description
  29433.  00h    WORD    0107h (length of following data)
  29434.  02h    BYTE    68h (subfunction "Close File and Start Queue Job")
  29435.  03h    DWORD    object ID of queue (big-endian)
  29436.  07h    BYTE    client station
  29437.  08h    BYTE    client task number
  29438.  09h    DWORD    object ID of client (big-endian)
  29439.  0Dh    DWORD    object ID of target server (big-endian)
  29440.         FFFFFFFh if any server acceptable
  29441.  11h  6 BYTEs    target execution time (year,month,day,hour,minute,second)
  29442.         FFFFFFFFFFFFh to execute as soon as possible
  29443.  17h  6 BYTEs    job entry time (year,month,day,hour,minute,second)
  29444.  1Dh    WORD    job number (big-endian)
  29445.  1Fh    WORD    job type (big-endian)
  29446.  21h    BYTE    job position
  29447.  22h    BYTE    job control flags
  29448.  23h 14 BYTEs    ASCIZ job file name
  29449.  31h  6 BYTEs    job file handle
  29450.  37h    BYTE    server station
  29451.  38h    BYTE    server task number
  29452.  39h    DWORD    object ID of server (big-endian)
  29453.  3Dh 50 BYTEs    ASCIZ job description string
  29454.  6Fh 152 BYTEs    client record area
  29455.  
  29456. Format of reply buffer:
  29457. Offset    Size    Description
  29458.  00h    WORD    (call) 0036h (size of following results buffer)
  29459.  02h    BYTE    client station
  29460.  03h    BYTE    client task number
  29461.  04h    DWORD    object ID of client (big-endian)
  29462.  08h    DWORD    object ID of target server (big-endian)
  29463.  0Ch  6 BYTEs    target execution time (year,month,day,hour,minute,second)
  29464.  12h  6 BYTEs    job entry time (year,month,day,hour,minute,second)
  29465.  18h    WORD    job number (big-endian)
  29466.  1Ah    WORD    job type (big-endian)
  29467.  1Ch    BYTE    job position
  29468.  1Dh    BYTE    job control flags
  29469.  1Eh 14 BYTEs    ASCIZ job file name
  29470.  2Ch  6 BYTEs    job file handle
  29471.  32h    BYTE    server station
  29472.  33h    BYTE    server task number
  29473.  34h    DWORD    object ID of server or 00000000h (big-endian)
  29474. ----------21E3--SF69-------------------------
  29475. INT 21 - Novell NetWare - QUEUE SERVICES - CLOSE FILE AND START QUEUE JOB
  29476.     AH = E3h subfn 69h
  29477.     DS:SI -> request buffer (see below)
  29478.     ES:DI -> reply buffer (see below)
  29479. Return: AL = status (00h,96h,D0h,D1h,D3h,D5h,D6h,FEh,FFh) (see AH=E3h/SF=64h)
  29480. Notes:    this function is supported by Advanced NetWare 2.1+
  29481.     caller must be on the workstation which created the job
  29482. SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=6Eh
  29483.  
  29484. Format of request buffer:
  29485. Offset    Size    Description
  29486.  00h    WORD    0007h (length of following data)
  29487.  02h    BYTE    69h (subfunction "Close File and Start Queue Job")
  29488.  03h    DWORD    object ID of queue (big-endian)
  29489.  07h    WORD    job number (big-endian)
  29490.  
  29491. Format of reply buffer:
  29492. Offset    Size    Description
  29493.  00h    WORD    (call) 0000h (no results returned)
  29494. ----------21E3--SF6A-------------------------
  29495. INT 21 - Novell NetWare - QUEUE SERVICES - REMOVE JOB FROM QUEUE
  29496.     AH = E3h subfn 6Ah
  29497.     DS:SI -> request buffer (see below)
  29498.     ES:DI -> reply buffer (see below)
  29499. Return: AL = status (00h,96h,D0h,D1h,D5h,D6h,FEh,FFh) (see AH=E3h/SF=64h)
  29500. Notes:    this function is supported by Advanced NetWare 2.1+
  29501.     caller must have created the job or be an operator
  29502. SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=6Eh
  29503.  
  29504. Format of request buffer:
  29505. Offset    Size    Description
  29506.  00h    WORD    0007h (length of following data)
  29507.  02h    BYTE    6Ah (subfunction "Remove Job From Queue")
  29508.  03h    DWORD    object ID of queue (big-endian)
  29509.  07h    WORD    job number (big-endian)
  29510.  
  29511. Format of reply buffer:
  29512. Offset    Size    Description
  29513.  00h    WORD    (call) 0000h (no results returned)
  29514. ----------21E3--SF6B-------------------------
  29515. INT 21 - Novell NetWare - QUEUE SERVICES - GET QUEUE JOB LIST
  29516.     AH = E3h subfn 6Bh
  29517.     DS:SI -> request buffer (see below)
  29518.     ES:DI -> reply buffer (see below)
  29519. Return: AL = status (00h,96h,9Ch,D0h-D3h,FCh,FEh,FFh) (see AH=E3h/SF=64h)
  29520. Notes:    this function is supported by Advanced NetWare 2.1+
  29521.     caller must be on a workstation which is security-equivalent to a
  29522.       member of the Q_USERS or Q_OPERATORS properties
  29523. SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=6Eh
  29524.  
  29525. Format of request buffer:
  29526. Offset    Size    Description
  29527.  00h    WORD    0005h (length of following data)
  29528.  02h    BYTE    6Bh (subfunction "Get Queue Job List")
  29529.  03h    DWORD    object ID of queue (big-endian)
  29530.  
  29531. Format of reply buffer:
  29532. Offset    Size    Description
  29533.  00h    WORD    (call) size of following results buffer (max 1F6h)
  29534.  02h    WORD    job count (big-endian)
  29535.  04h  N WORDs    list of job numbers by position in queue (big-endian)
  29536.     WORD    maximum job numbers
  29537. ----------21E3--SF6C-------------------------
  29538. INT 21 - Novell NetWare - QUEUE SERVICES - READ QUEUE JOB ENTRY
  29539.     AH = E3h subfn 6Ch
  29540.     DS:SI -> request buffer (see below)
  29541.     ES:DI -> reply buffer (see below)
  29542. Return: AL = status (00h,96h,D0h-D3h,D5h,FCh,FEh,FFh) (see AH=E3h/SF=64h)
  29543. Notes:    this function is supported by Advanced NetWare 2.1+
  29544.     caller must be on a workstation which is security-equivalent to a
  29545.       member of the Q_USERS, Q_OPERATORS, or Q_SERVERS properties
  29546. SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=6Eh
  29547.  
  29548. Format of request buffer:
  29549. Offset    Size    Description
  29550.  00h    WORD    0007h (length of following data)
  29551.  02h    BYTE    6Ch (subfunction "Read Queue Job Entry")
  29552.  03h    DWORD    object ID of queue (big-endian)
  29553.  07h    WORD    job number (big-endian)
  29554.  
  29555. Format of reply buffer:
  29556. Offset    Size    Description
  29557.  00h    WORD    (call) 0100h (size of following results)
  29558.  02h    BYTE    client station number
  29559.  03h    BYTE    client task number
  29560.  04h    DWORD    object ID of client
  29561.  08h    DWORD    object ID of target server (big-endian)
  29562.         FFFFFFFFh if any server acceptable
  29563.  0Ch  6 BYTEs    target execution time (year,month,day,hour,minute,second)
  29564.         FFFFFFFFFFFFh if serviced as soon as possible
  29565.  12h  6 BYTEs    job entry time (year,month,day,hour,minute,second)
  29566.  18h    WORD    job number (big-endian)
  29567.  1Ah    WORD    job type (big-endian)
  29568.  1Ch    BYTE    job position
  29569.  1Dh    BYTE    job control flags
  29570.         bit 3: job will be serviced automatically if connection broken
  29571.         bit 4: job remains in queue after server aborts job
  29572.         bit 5: client has not filled associated job file
  29573.         bit 6: User Hold--job advances, but cannot be serviced until
  29574.             this bit is cleared by user or operator
  29575.         bit 7: Operator Hold--job advances, but cannot be serviced
  29576.             until this bit is cleared by an operator
  29577.  1Eh 14 BYTEs    ASCIZ job filename
  29578.  2Ch  6 BYTEs    job file handle
  29579.  32h    BYTE    server station
  29580.  33h    BYTE    server task number
  29581.  34h    DWORD    object ID of server
  29582.  38h 50 BYTEs    ASCIZ job description string
  29583.  6Ah 152 BYTEs    client record area
  29584. ----------21E3--SF6D-------------------------
  29585. INT 21 - Novell NetWare - QUEUE SERVICES - CHANGE QUEUE JOB ENTRY
  29586.     AH = E3h subfn 6Dh
  29587.     DS:SI -> request buffer (see below)
  29588.     ES:DI -> reply buffer (see below)
  29589. Return: AL = status (00h,96h,D0h,D1h,D5h,D7h,FEh,FFh) (see AH=E3h/SF=64h)
  29590. Notes:    this function is supported by Advanced NetWare 2.1+
  29591.     caller must be an operator or the user who created the job
  29592. SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=6Ch,AH=E3h/SF=6Eh
  29593.  
  29594. Format of request buffer:
  29595. Offset    Size    Description
  29596.  00h    WORD    0105h (length of following data)
  29597.  02h    BYTE    6Dh (subfunction "Change Queue Job Entry")
  29598.  03h    DWORD    object ID of queue (big-endian)
  29599.  07h    BYTE    client station number
  29600.  08h    BYTE    client task number
  29601.  09h    DWORD    object ID of client
  29602.  0Dh    DWORD    object ID of target server (big-endian)
  29603.  11h  6 BYTEs    target execution time (year,month,day,hour,minute,second)
  29604.  17h  6 BYTEs    job entry time (year,month,day,hour,minute,second)
  29605.  1Dh    WORD    job number (big-endian)
  29606.  1Fh    WORD    job type (big-endian)
  29607.  21h    BYTE    job position
  29608.  22h    BYTE    job control flags
  29609.         bit 3: job will be serviced automatically if connection broken
  29610.         bit 4: job remains in queue after server aborts job
  29611.         bit 5: client has not filled associated job file
  29612.         bit 6: User Hold--job advances, but cannot be serviced until
  29613.             this bit is cleared by user or operator
  29614.         bit 7: Operator Hold--job advances, but cannot be serviced
  29615.             until this bit is cleared by an operator
  29616.  23h 14 BYTEs    ASCIZ job filename
  29617.  31h  6 BYTEs    job file handle
  29618.  37h    BYTE    server station
  29619.  38h    BYTE    server task number
  29620.  39h    DWORD    object ID of server
  29621.  3Dh 50 BYTEs    ASCIZ job description string
  29622.  6Fh 152 BYTEs    client record area
  29623.  
  29624. Format of reply buffer:
  29625. Offset    Size    Description
  29626.  00h    WORD    (call) 0000h (no results returned)
  29627. ----------21E3--SF6E-------------------------
  29628. INT 21 - Novell NetWare - QUEUE SERVICES - CHANGE QUEUE JOB POSITION
  29629.     AH = E3h subfn 6Eh
  29630.     DS:SI -> request buffer (see below)
  29631.     ES:DI -> reply buffer (see below)
  29632. Return: AL = status (00h,96h,D0h,D1h,D5h,D6h,FEh,FFh) (see AH=E3h/SF=64h)
  29633. Notes:    this function is supported by Advanced NetWare 2.1+
  29634.     caller must be an operator
  29635.     if the specified position is greater than the number of jobs in the
  29636.       queue, the job is placed at the end of the queue
  29637. SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=6Ch,AH=E3h/SF=6Dh
  29638.  
  29639. Format of request buffer:
  29640. Offset    Size    Description
  29641.  00h    WORD    0008h (length of following data)
  29642.  02h    BYTE    6Eh (subfunction "Change Queue Job Position")
  29643.  03h    DWORD    object ID of queue (big-endian)
  29644.  07h    WORD    job number (big-endian)
  29645.  09h    BYTE    new position in queue (01h-FAh)
  29646.  
  29647. Format of reply buffer:
  29648. Offset    Size    Description
  29649.  00h    WORD    (call) 0000h (no results returned)
  29650. ----------21E3--SF6F-------------------------
  29651. INT 21 - Novell NetWare - QUEUE SERVICES - ATTACH QUEUE SERVER TO QUEUE
  29652.     AH = E3h subfn 6Fh
  29653.     DS:SI -> request buffer (see below)
  29654.     ES:DI -> reply buffer (see below)
  29655. Return: AL = status (00h,96h,9Ch,D0h,D1h,D3h,DAh,DBh,FEh,FFh)
  29656.         (see also AH=E3h/SF=64h)
  29657.         FFh bindery failure, or no such property, or no such member
  29658. Desc:    attach the calling job server to the specified queue
  29659. Notes:    this function is supported by Advanced NetWare 2.1+
  29660.     a queue may have up to 25 job servers attached
  29661.     the calling workstation must be security-equivalent to a member of the
  29662.       queue's Q_SERVERS property
  29663. SeeAlso: AH=E3h/SF=70h,AH=E3h/SF=71h,AH=E3h/SF=72h,AH=E3h/SF=73h,AH=E3h/SF=76h
  29664.  
  29665. Format of request buffer:
  29666. Offset    Size    Description
  29667.  00h    WORD    0005h (length of following data)
  29668.  02h    BYTE    6Fh (subfunction "Attach Queue Server To Queue")
  29669.  03h    DWORD    object ID of queue (big-endian)
  29670.  
  29671. Format of reply buffer:
  29672. Offset    Size    Description
  29673.  00h    WORD    (call) 0000h (no results returned)
  29674. ----------21E3--SF70-------------------------
  29675. INT 21 - Novell NetWare - QUEUE SERVICES - DETACH QUEUE SERVER FROM QUEUE
  29676.     AH = E3h subfn 70h
  29677.     DS:SI -> request buffer (see below)
  29678.     ES:DI -> reply buffer (see below)
  29679. Return: AL = status (00h,96h,9Ch,D0h,D1h,D2h,FEh,FFh) (see AH=E3h/SF=64h)
  29680. Desc:    remove the calling job server from the specified queue's list of
  29681.       servers
  29682. Notes:    this function is supported by Advanced NetWare 2.1+
  29683.     the caller must have previously attached itself to the queue
  29684. SeeAlso: AH=E3h/SF=6Fh,AH=E3h/SF=72h,AH=E3h/SF=73h,AH=E3h/SF=76h
  29685.  
  29686. Format of request buffer:
  29687. Offset    Size    Description
  29688.  00h    WORD    0005h (length of following data)
  29689.  02h    BYTE    70h (subfunction "Detach Queue Server From Queue")
  29690.  03h    DWORD    object ID of queue (big-endian)
  29691.  
  29692. Format of reply buffer:
  29693. Offset    Size    Description
  29694.  00h    WORD    (call) 0000h (no results returned)
  29695. ----------21E3--SF71-------------------------
  29696. INT 21 - Novell NetWare - QUEUE SERVICES - SERVICE QUEUE JOB AND OPEN FILE
  29697.     AH = E3h subfn 71h
  29698.     DS:SI -> request buffer (see below)
  29699.     ES:DI -> reply buffer (see AH=E3h/SF=68h)
  29700. Return: AL = status (00h,96h,9Ch,D0h,D1h,D3h,D5h,D9h,DAh,FEh,FFh)
  29701.         (see AH=E3h/SF=64h)
  29702. Notes:    this function is supported by Advanced NetWare 2.1+
  29703.     the caller must be on a workstation which is security-equivalent to a
  29704.       member of the queue's Q_USERS, Q_OPERATORS, or Q_SERVERS properties
  29705. SeeAlso: AH=E3h/SF=6Fh,AH=E3h/SF=72h,AH=E3h/SF=73h,AH=E3h/SF=76h
  29706.  
  29707. Format of request buffer:
  29708. Offset    Size    Description
  29709.  00h    WORD    0007h (length of following data)
  29710.  02h    BYTE    71h (subfunction "Service Queue Job and Open File")
  29711.  03h    DWORD    object ID of queue (big-endian)
  29712.  07h    WORD    target job type (big-endian)
  29713.         FFFFh any
  29714. ----------21E3--SF72-------------------------
  29715. INT 21 - Novell NetWare - QUEUE SERVICES - FINISH SERVICING QUEUE JOB AND FILE
  29716.     AH = E3h subfn 72h
  29717.     DS:SI -> request buffer (see below)
  29718.     ES:DI -> reply buffer (see below)
  29719. Return: AL = status (00h,96h,D0h,D1h,D6h) (see AH=E3h/SF=64h)
  29720. Desc:    inform the Queue Management System (QMS) that the queue server has
  29721.       completed a job
  29722. Notes:    this function is supported by Advanced NetWare 2.1+
  29723.     the caller must be a job server which has previously obtained a job
  29724.       for servicing
  29725. SeeAlso: AH=E3h/SF=6Fh,AH=E3h/SF=71h,AH=E3h/SF=73h,AH=E3h/SF=76h
  29726.  
  29727. Format of request buffer:
  29728. Offset    Size    Description
  29729.  00h    WORD    000Bh (length of following data)
  29730.  02h    BYTE    72h (subfunction "Finish Servicing Queue Job and File")
  29731.  03h    DWORD    object ID of queue (big-endian)
  29732.  07h    WORD    job number (big-endian)
  29733.  09h    DWORD    charge (big-endian)
  29734.  
  29735. Format of reply buffer:
  29736. Offset    Size    Description
  29737.  00h    WORD    (call) 0000h (no results returned)
  29738. ----------21E3--SF73-------------------------
  29739. INT 21 - Novell NetWare - QUEUE SERVICES - ABORT SERVICING QUEUE JOB AND FILE
  29740.     AH = E3h subfn 73h
  29741.     DS:SI -> request buffer (see below)
  29742.     ES:DI -> reply buffer (see below)
  29743. Return: AL = status (00h,96h,D0h,D1h,D6h,D9h) (see AH=E3h/SF=64h)
  29744. Desc:    inform the Queue Management System (QMS) that the queue server is
  29745.       unable to service a previously-accepted job
  29746. Note:    this function is supported by Advanced NetWare 2.1+
  29747. SeeAlso: AH=E3h/SF=6Fh,AH=E3h/SF=71h,AH=E3h/SF=72h,AH=E3h/SF=76h
  29748.  
  29749. Format of request buffer:
  29750. Offset    Size    Description
  29751.  00h    WORD    0007h (length of following data)
  29752.  02h    BYTE    73h (subfunction "Abort Servicing Queue Job and File")
  29753.  03h    DWORD    object ID of queue (big-endian)
  29754.  07h    WORD    job number (big-endian)
  29755.  
  29756. Format of reply buffer:
  29757. Offset    Size    Description
  29758.  00h    WORD    (call) 0000h (no results returned)
  29759. ----------21E3--SF74-------------------------
  29760. INT 21 - Novell NetWare - QUEUE SERVICES - CHANGE TO CLIENT RIGHTS
  29761.     AH = E3h subfn 74h
  29762.     DS:SI -> request buffer (see below)
  29763.     ES:DI -> reply buffer (see below)
  29764. Return: AL = status (00h,96h,D0h,D1h,D5h,D9h) (see AH=E3h/SF=64h)
  29765. Desc:    temporarily assume the login identity of the client submitting the
  29766.       job being serviced
  29767. Notes:    this function is supported by Advanced NetWare 2.1+
  29768.     caller must be a job server which has obtained a job for servicing
  29769. SeeAlso: AH=E3h/SF=75h
  29770.  
  29771. Format of request buffer:
  29772. Offset    Size    Description
  29773.  00h    WORD    0007h (length of following data)
  29774.  02h    BYTE    74h (subfunction "Change To Client Rights")
  29775.  03h    DWORD    object ID of queue (big-endian)
  29776.  07h    WORD    job number (big-endian)
  29777.  
  29778. Format of reply buffer:
  29779. Offset    Size    Description
  29780.  00h    WORD    (call) 0000h (no results returned)
  29781. ----------21E3--SF75-------------------------
  29782. INT 21 - Novell NetWare - QUEUE SERVICES - RESTORE QUEUE SERVER RIGHTS
  29783.     AH = E3h subfn 75h
  29784.     DS:SI -> request buffer (see below)
  29785.     ES:DI -> reply buffer (see below)
  29786. Return: AL = status (00h,96h,9Ch,D0h,D1h,D3h,D5h,D9h,DAh,FEh,FFh)
  29787.         (see AH=E3h/SF=64h)
  29788. Desc:    restore server's own identity after assuming the login identity of the
  29789.       client submitting the job being serviced
  29790. Notes:    this function is supported by Advanced NetWare 2.1+
  29791.     caller must be a job server which has previously changed its identity
  29792. SeeAlso: AH=E3h/SF=74h
  29793.  
  29794. Format of request buffer:
  29795. Offset    Size    Description
  29796.  00h    WORD    0001h (length of following data)
  29797.  02h    BYTE    75h (subfunction "Change To Client Rights")
  29798.  
  29799. Format of reply buffer:
  29800. Offset    Size    Description
  29801.  00h    WORD    (call) 0000h (no results returned)
  29802. ----------21E3--SF76-------------------------
  29803. INT 21 - Novell NetWare - QUEUE SERVICES - READ QUEUE SERVER CURRENT STATUS
  29804.     AH = E3h subfn 76h
  29805.     DS:SI -> request buffer (see below)
  29806.     ES:DI -> reply buffer (see below)
  29807. Return: AL = status (00h,96h,9Ch,D1h-D3h,F1h,FCh,FEh,FFh) (see AH=E3h/SF=64h)
  29808. Notes:    this function is supported by Advanced NetWare 2.1+
  29809.     caller must be on a workstation which is security-equivalent to a
  29810.       member of the Q_USERS or Q_OPERATORS properties
  29811. SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ch,AH=E3h/SF=6Fh,AH=E3h/SF=77h,AH=E3h/SF=78h
  29812.  
  29813. Format of request buffer:
  29814. Offset    Size    Description
  29815.  00h    WORD    000Ah (length of following data)
  29816.  02h    BYTE    76h (subfunction "Read Queue Server Current Status")
  29817.  03h    DWORD    object ID of queue (big-endian)
  29818.  07h    DWORD    object ID of server (big-endian)
  29819.  0Bh    BYTE    server station
  29820.  
  29821. Format of reply buffer:
  29822. Offset    Size    Description
  29823.  00h    WORD    (call) 0040h (size of following results)
  29824.  02h 64 BYTEs    server status record (format depends on server)
  29825.         first four bytes should contain estimated "price" for an
  29826.         average job
  29827. ----------21E3--SF76-------------------------
  29828. INT 21 - Novell NetWare - QUEUE SERVICES - READ QUEUE SERVER CURRENT STATUS
  29829.     AH = E3h subfn 76h
  29830.     DS:SI -> request buffer (see below)
  29831.     ES:DI -> reply buffer (see below)
  29832. Return: AL = status (00h,96h,9Ch,D0h,D1h,FEh,FFh) (see AH=E3h/SF=64h)
  29833. Notes:    this function is supported by Advanced NetWare 2.1+
  29834.     caller must be a job server which has attached itself to the queue
  29835. SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ch,AH=E3h/SF=6Fh,AH=E3h/SF=76h,AH=E3h/SF=78h
  29836.  
  29837. Format of request buffer:
  29838. Offset    Size    Description
  29839.  00h    WORD    0045h (length of following data)
  29840.  02h    BYTE    77h (subfunction "Set Queue Server Current Status")
  29841.  03h    DWORD    object ID of queue (big-endian)
  29842.  02h 64 BYTEs    server status record (format depends on server)
  29843.         first four bytes should contain estimated "price" for an
  29844.         average job
  29845.  
  29846. Format of reply buffer:
  29847. Offset    Size    Description
  29848.  00h    WORD    (call) 0000h (no results returned)
  29849. ----------21E3--SF78-------------------------
  29850. INT 21 - Novell NetWare - QUEUE SERVICES - GET QUEUE JOB'S FILE SIZE
  29851.     AH = E3h subfn 78h
  29852.     DS:SI -> request buffer (see below)
  29853.     ES:DI -> reply buffer (see below)
  29854. Return: AL = status (see also AH=E3h/SF=64h)
  29855.         00h successful
  29856. Notes:    this function is supported by Advanced NetWare 2.1+
  29857.     caller must be on a workstation which is security-equivalent to a
  29858.       member of the queue's Q_USERS, Q_OPERATORS, or Q_SERVERS properties
  29859. SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ch,AH=E3h/SF=71h
  29860.  
  29861. Format of request buffer:
  29862. Offset    Size    Description
  29863.  00h    WORD    0007h (length of following data)
  29864.  02h    BYTE    78h (subfunction "Get Queue Job's File Size")
  29865.  03h    DWORD    object ID of queue (big-endian)
  29866.  07h    WORD    job number (big-endian)
  29867.  
  29868. Format of reply buffer:
  29869. Offset    Size    Description
  29870.  00h    WORD    (call) 000Ah (size of following results)
  29871.  02h    DWORD    object ID of queue (big-endian)
  29872.  06h    WORD    job number (big-endian)
  29873.  08h    DWORD    size of job file in bytes (big-endian)
  29874. ----------21E3--SF96-------------------------
  29875. INT 21 - Novell NetWare - ACCOUNTING SERVICES - GET ACCOUNT STATUS
  29876.     AH = E3h subfn 96h
  29877.     DS:SI -> request buffer (see below)
  29878.     ES:DI -> reply buffer (see below)
  29879. Return: AL = status
  29880.         00h successful
  29881.         C0h    no account privileges
  29882.         C1h    no account balance
  29883. Note:    this function is supported by Advanced NetWare 2.1+
  29884. SeeAlso: AH=E3h/SF=97h,AH=E3h/SF=98h,AH=E3h/SF=99h
  29885.  
  29886. Format of request buffer:
  29887. Offset    Size    Description
  29888.  00h    WORD    length of following data (max 33h)
  29889.  02h    BYTE    96h (subfunction "Get Account Status")
  29890.  03h    WORD    type of bindery object (big-endian)
  29891.  05h    BYTE    length of object name (01h to 2Fh)
  29892.  06h  N BYTEs    object name
  29893.  
  29894. Format of reply buffer:
  29895. Offset    Size    Description
  29896.  00h    WORD    (call) length of following buffer space
  29897.  02h    DWORD    account balance (big-endian)
  29898.  06h    DWORD    credit limit (big-endian)
  29899.         signed number indicating lowest allowable account balance
  29900.  0Ah 120 BYTEs    reserved
  29901.  82h    DWORD    object ID, server 1 (big-endian)
  29902.  86h    DWORD    hold amount, server 1 (big-endian)
  29903.     ...
  29904.  F8h    DWORD    object ID, server 16 (big-endian)
  29905.  FCh    DWORD    hold amount, server 16 (big-endian)
  29906. Note:    the reply buffer lists the servers which have placed holds on a portion
  29907.       of the account balance, and the amount reserved by each
  29908. ----------21E3--SF97-------------------------
  29909. INT 21 - Novell NetWare - ACCOUNTING SERVICES - SUBMIT ACCOUNT CHARGE
  29910.     AH = E3h subfn 97h
  29911.     DS:SI -> request buffer (see below)
  29912.     ES:DI -> reply buffer (see below)
  29913. Return: AL = status
  29914.         00h successful
  29915.         C0h    no account privileges
  29916.         C1h    no account balance
  29917.         C2h credit limit exceeded
  29918. Note:    this function is supported by Advanced NetWare 2.1+
  29919. SeeAlso: AH=E3h/SF=96h,AH=E3h/SF=98h
  29920.  
  29921. Format of request buffer:
  29922. Offset    Size    Description
  29923.  00h    WORD    length of following data (max 13Fh)
  29924.  02h    BYTE    97h (subfunction "Submit Account Charge")
  29925.  03h    WORD    service type (big-endian)
  29926.  05h    DWORD    amount to be charged to account (big-endian)
  29927.  09h    DWORD    amount of prior hold to be cancelled (big-endian)
  29928.  0Dh    WORD    type of bindery object (big-endian)
  29929.  0Fh    WORD    type of comment (big-endian)
  29930.         8000h-FFFFh reserved for experimental use
  29931.  11h    BYTE    length of object's name
  29932.  12h  N BYTEs    object name
  29933.     BYTE    length of comment
  29934.       N BYTEs    comment
  29935.  
  29936. Format of reply buffer:
  29937. Offset    Size    Description
  29938.  00h    WORD    0000h (no data returned)
  29939. ----------21E3--SF98-------------------------
  29940. INT 21 - Novell NetWare - ACCOUNTING SERVICES - SUBMIT ACCOUNT HOLD
  29941.     AH = E3h subfn 98h
  29942.     DS:SI -> request buffer (see below)
  29943.     ES:DI -> reply buffer (see below)
  29944. Return: AL = status
  29945.         00h successful
  29946.         C0h    no account privileges
  29947.         C1h    no account balance
  29948.         C2h credit limit exceeded
  29949.         C3h too many holds on account
  29950. Note:    this function is supported by Advanced NetWare 2.1+
  29951. SeeAlso: AH=E3h/SF=96h,AH=E3h/SF=97h
  29952.  
  29953. Format of request buffer:
  29954. Offset    Size    Description
  29955.  00h    WORD    length of following data (max 37h)
  29956.  02h    BYTE    98h (subfunction "Submit Account Hold")
  29957.  03h    DWORD    amount of account balance to reserve (big-endian)
  29958.  07h    WORD    type of bindery object
  29959.  09h    BYTE    length of object's name
  29960.  0Ah  N BYTEs    object name
  29961.  
  29962. Format of reply buffer:
  29963. Offset    Size    Description
  29964.  00h    WORD    0000h (no data returned)
  29965. ----------21E3--SF99-------------------------
  29966. INT 21 - Novell NetWare - ACCOUNTING SERVICES - SUBMIT ACCOUNT NOTE
  29967.     AH = E3h subfn 99h
  29968.     DS:SI -> request buffer (see below)
  29969.     ES:DI -> reply buffer (see below)
  29970. Return: AL = status
  29971.         00h successful
  29972.         C0h    no account privileges
  29973. Note:    this function is supported by Advanced NetWare 2.1+
  29974. SeeAlso: AH=E3h/SF=96h
  29975.  
  29976. Format of request buffer:
  29977. Offset    Size    Description
  29978.  00h    WORD    length of following data (max 137h)
  29979.  02h    BYTE    99h (subfunction "Submit Account Note")
  29980.  03h    WORD    type of service (big-endian)
  29981.  05h    WORD    type of bindery object (big-endian)
  29982.  07h    WORD    type of comment (big-endian)
  29983.         8000h-FFFFh reserved for experimental use
  29984.  09h    BYTE    length of object's name
  29985.  0Ah  N BYTEs    object name
  29986.     BYTE    length of comment
  29987.       N BYTEs    comment
  29988.  
  29989. Format of reply buffer:
  29990. Offset    Size    Description
  29991.  00h    WORD    0000h (no data returned)
  29992. ----------21E3--SFC8-------------------------
  29993. INT 21 - Novell NetWare - FILE SERVER - CHECK CONSOLE PRIVILEGES
  29994.     AH = E3h subfn C8h
  29995.     DS:SI -> request buffer (see below)
  29996.     ES:DI -> reply buffer (see below)
  29997. Return: AL = status
  29998.         00h successful
  29999.         C6h no console rights
  30000. Desc:    determine whether the caller is a console operator
  30001. Notes:    this function is supported by Advanced NetWare 2.1+
  30002.     NetWare determines console privileges by checking the file server's
  30003.       OPERATOR property for the caller's object ID
  30004. SeeAlso: AH=E3h/SF=C9h,AH=E3h/SF=D1h
  30005.  
  30006. Format of request buffer:
  30007. Offset    Size    Description
  30008.  00h    WORD    0001h (length of following data)
  30009.  02h    BYTE    C8h (subfunction "Check Console Privileges")
  30010.  
  30011. Format of reply buffer:
  30012. Offset    Size    Description
  30013.  00h    WORD    (call) 0000h (no results returned)
  30014. ----------21E3--SFC9-------------------------
  30015. INT 21 - Novell NetWare - FILE SERVER - GET FILE SERVER DESCRIPTION STRINGS
  30016.     AH = E3h subfn C9h
  30017.     DS:SI -> request buffer (see below)
  30018.     ES:DI -> reply buffer (see below)
  30019. Return: AL = status
  30020.         00h successful
  30021. Notes:    this function is supported by Advanced NetWare 2.1+
  30022.     the calling workstation must be attached to the file server
  30023. SeeAlso: AH=E3h/SF=11h,AH=E3h/SF=CDh,AH=E3h/SF=E8h
  30024.  
  30025. Format of request buffer:
  30026. Offset    Size    Description
  30027.  00h    WORD    0001h (length of following data)
  30028.  02h    BYTE    C9h (subfunction "Get File Server Description Strings")
  30029.  
  30030. Format of reply buffer:
  30031. Offset    Size    Description
  30032.  00h    WORD    (call) 0200h (size of following results buffer)
  30033.  02h    var    ASCIZ name of company distributing this copy of NetWare
  30034.     var    ASCIZ version and revision
  30035.       9 BYTEs    ASCIZ revision date (mm/dd/yy)
  30036.     var    ASCIZ copyright notice
  30037. ----------21E3--SFCA-------------------------
  30038. INT 21 - Novell NetWare - FILE SERVER - SET FILE SERVER DATE AND TIME
  30039.     AH = E3h subfn CAh
  30040.     DS:SI -> request buffer (see below)
  30041.     ES:DI -> reply buffer (see below)
  30042. Return: AL = status
  30043.         00h successful
  30044.         C6h no console rights
  30045. Notes:    this function is supported by Advanced NetWare 2.1+
  30046.     the calling workstation must have console operator privileges
  30047. SeeAlso: AH=2Bh,AH=2Dh,AH=E3h/SF=C8h,AH=E7h
  30048.  
  30049. Format of request buffer:
  30050. Offset    Size    Description
  30051.  00h    WORD    0007h (length of following data)
  30052.  02h    BYTE    CAh (subfunction "Set File Server Date And Time")
  30053.  03h    BYTE    year (00-79 = 2000-2079, 80-99 = 1980-1999)
  30054.  04h    BYTE    month (1-12)
  30055.  05h    BYTE    day (1-31)
  30056.  06h    BYTE    hour (0-23)
  30057.  07h    BYTE    minute
  30058.  08h    BYTR    second
  30059.  
  30060. Format of reply buffer:
  30061. Offset    Size    Description
  30062.  00h    WORD    (call) 0000h (no results returned)
  30063. ----------21E3--SFCB-------------------------
  30064. INT 21 - Novell NetWare - FILE SERVER - DISABLE FILE SERVER LOGIN
  30065.     AH = E3h subfn CBh
  30066.     DS:SI -> request buffer (see below)
  30067.     ES:DI -> reply buffer (see below)
  30068. Return: AL = status
  30069.         00h successful
  30070.         C6h no console rights
  30071. Notes:    this function is supported by Advanced NetWare 2.1+
  30072.     the calling workstation must have console operator privileges
  30073. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=CCh,AH=E3h/SF=D3h
  30074.  
  30075. Format of request buffer:
  30076. Offset    Size    Description
  30077.  00h    WORD    0001h (length of following data)
  30078.  02h    BYTE    CBh (subfunction "Disable File Server Login")
  30079.  
  30080. Format of reply buffer:
  30081. Offset    Size    Description
  30082.  00h    WORD    (call) 0000h (no results returned)
  30083. ----------21E3--SFCC-------------------------
  30084. INT 21 - Novell NetWare - FILE SERVER - ENABLE FILE SERVER LOGIN
  30085.     AH = E3h subfn CCh
  30086.     DS:SI -> request buffer (see below)
  30087.     ES:DI -> reply buffer (see below)
  30088. Return: AL = status
  30089.         00h successful
  30090.         C6h no console rights
  30091. Notes:    this function is supported by Advanced NetWare 2.1+
  30092.     the calling workstation must have console operator privileges
  30093. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=CBh
  30094.  
  30095. Format of request buffer:
  30096. Offset    Size    Description
  30097.  00h    WORD    0001h (length of following data)
  30098.  02h    BYTE    CCh (subfunction "Enable File Server Login")
  30099.  
  30100. Format of reply buffer:
  30101. Offset    Size    Description
  30102.  00h    WORD    (call) 0000h (no results returned)
  30103. ----------21E3--SFCD-------------------------
  30104. INT 21 - Novell NetWare - FILE SERVER - GET FILE SERVER LOGIN STATUS
  30105.     AH = E3h subfn CDh
  30106.     DS:SI -> request buffer (see below)
  30107.     ES:DI -> reply buffer (see below)
  30108. Return: AL = status
  30109.         00h successful
  30110.         C6h no console rights
  30111. Notes:    this function is supported by Advanced NetWare 2.1+
  30112.     the calling workstation must have console operator privileges
  30113. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=CBh,AH=E3h/SF=CCh
  30114.  
  30115. Format of request buffer:
  30116. Offset    Size    Description
  30117.  00h    WORD    0001h (length of following data)
  30118.  02h    BYTE    CDh (subfunction "Get File Server Login Status")
  30119.  
  30120. Format of reply buffer:
  30121. Offset    Size    Description
  30122.  00h    WORD    (call) 0001h (size of following results buffer)
  30123.  02h    BYTE    login state (00h disabled, 01h enabled)
  30124. ----------21E3--SFCE-------------------------
  30125. INT 21 - Novell NetWare - FILE SERVICES - PURGE ALL ERASED FILES
  30126.     AH = E3h subfn CEh
  30127.     DS:SI -> request buffer (see below)
  30128.     ES:DI -> reply buffer (see below)
  30129. Return: AL = status
  30130.         00h successful
  30131.         C6h no console rights
  30132. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  30133.       Alloy NTNX
  30134.     all files marked for deletion on the file server are purged, regardless
  30135.       of which workstation actually erased them
  30136.     the calling workstation must have console operator privileges
  30137. SeeAlso: AH=13h,AH=E2h/SF=10h,AH=E3h/SF=C8h,AX=F244h
  30138.  
  30139. Format of request buffer:
  30140. Offset    Size    Description
  30141.  00h    WORD    0001h (length of following data)
  30142.  02h    BYTE    CEh (subfunction "Purge All Erased Files")
  30143.  
  30144. Format of reply buffer:
  30145. Offset    Size    Description
  30146.  00h    WORD    (call) 0000h (no results returned)
  30147. ----------21E3--SFCF-------------------------
  30148. INT 21 - Novell NetWare - FILE SERVER - DISABLE TRANSACTION TRACKING
  30149.     AH = E3h subfn CFh
  30150.     DS:SI -> request buffer (see below)
  30151.     ES:DI -> reply buffer (see below)
  30152. Return: AL = status
  30153.         00h successful
  30154.         C6h no console rights
  30155. Notes:    this function is supported by Advanced NetWare 2.1+
  30156.     the calling workstation must have console operator privileges
  30157. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=D0h
  30158.  
  30159. Format of request buffer:
  30160. Offset    Size    Description
  30161.  00h    WORD    0001h (length of following data)
  30162.  02h    BYTE    CFh (subfunction "Disable Transaction Tracking")
  30163.  
  30164. Format of reply buffer:
  30165. Offset    Size    Description
  30166.  00h    WORD    (call) 0000h (no results returned)
  30167. ----------21E3--SFD0-------------------------
  30168. INT 21 - Novell NetWare - FILE SERVER - ENABLE TRANSACTION TRACKING
  30169.     AH = E3h subfn D0h
  30170.     DS:SI -> request buffer (see below)
  30171.     ES:DI -> reply buffer (see below)
  30172. Return: AL = status
  30173.         00h successful
  30174.         C6h no console rights
  30175. Desc:    restart transaction tracking after being stopped either explicitly by
  30176.       AH=E3h/SF=CFh or automatically due to a full transaction volume
  30177. Notes:    this function is supported by Advanced NetWare 2.1+
  30178.     the calling workstation must have console operator privileges
  30179. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=CFh
  30180.  
  30181. Format of request buffer:
  30182. Offset    Size    Description
  30183.  00h    WORD    0001h (length of following data)
  30184.  02h    BYTE    D0h (subfunction "Enable Transaction Tracking")
  30185.  
  30186. Format of reply buffer:
  30187. Offset    Size    Description
  30188.  00h    WORD    (call) 0000h (no results returned)
  30189. ----------21E3--SFD1-------------------------
  30190. INT 21 - Novell NetWare - FILE SERVER - SEND CONSOLE BROADCAST
  30191.     AH = E3h subfn D1h
  30192.     DS:SI -> request buffer (see below)
  30193.     ES:DI -> reply buffer (see below)
  30194. Return: AL = status
  30195.         00h successful
  30196.         C6h no console rights
  30197. Notes:    this function is supported by Advanced NetWare 2.1+
  30198.     the calling workstation must have console operator privileges
  30199.     the broadcast message will not be received by workstations which have
  30200.       disabled broadcasts with AH=E1h/SF=02h
  30201. SeeAlso: AH=E1h/SF=02h,AH=E1h/SF=09h,AH=E3h/SF=C8h,AH=E3h/SF=D3h
  30202.  
  30203. Format of request buffer:
  30204. Offset    Size    Description
  30205.  00h    WORD    length of following data (max A2h)
  30206.  02h    BYTE    D1h (subfunction "Send Console Broadcast")
  30207.  03h    BYTE    number of connections to receive message 
  30208.         00h = all, else specific list below
  30209.  04h  N BYTEs    connection list
  30210.     BYTE    length of message (max 3Ch)
  30211.       N BYTEs    message
  30212.  
  30213. Format of reply buffer:
  30214. Offset    Size    Description
  30215.  00h    WORD    (call) 0000h (no results returned)
  30216. ----------21E3--SFD2-------------------------
  30217. INT 21 - Novell NetWare - FILE SERVER - CLEAR CONNECTION NUMBER
  30218.     AH = E3h subfn D2h
  30219.     DS:SI -> request buffer (see below)
  30220.     ES:DI -> reply buffer (see below)
  30221. Return: AL = status
  30222.         00h successful
  30223.         C6h no console rights
  30224. Desc:    close the open files and release all file locks for a connection,
  30225.       abort transactions if a TTS file server, and detach from the file
  30226.       server
  30227. Notes:    this function is supported by Advanced NetWare 2.1+
  30228.     the caller must have SUPERVISOR privileges
  30229. SeeAlso: AH=E3h/SF=C9h,AH=E3h/SF=D1h
  30230.  
  30231. Format of request buffer:
  30232. Offset    Size    Description
  30233.  00h    WORD    0002h (length of following data)
  30234.  02h    BYTE    D2h (subfunction "Clear Connection Number")
  30235.  03h    BYTE    connection number
  30236.  
  30237. Format of reply buffer:
  30238. Offset    Size    Description
  30239.  00h    WORD    (call) 0000h (no results returned)
  30240. ----------21E3--SFD3-------------------------
  30241. INT 21 - Novell NetWare - FILE SERVER - DOWN FILE SERVER
  30242.     AH = E3h subfn D3h
  30243.     DS:SI -> request buffer (see below)
  30244.     ES:DI -> reply buffer (see below)
  30245. Return: AL = status
  30246.         00h successful
  30247.         C6h no console rights
  30248.         FFh files open
  30249. Desc:    take down the file server
  30250. Notes:    this function is supported by Advanced NetWare 2.1+
  30251.     the calling workstation must have SUPERVISOR privileges
  30252. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=CBh,AH=E3h/SF=CFh,AH=E3h/SF=D1h
  30253.  
  30254. Format of request buffer:
  30255. Offset    Size    Description
  30256.  00h    WORD    0002h (length of following data)
  30257.  02h    BYTE    D3h (subfunction "Down File Server")
  30258.  03h    BYTE    flag: force down even if files open if nonzero
  30259.  
  30260. Format of reply buffer:
  30261. Offset    Size    Description
  30262.  00h    WORD    (call) 0000h (no results returned)
  30263. ----------21E3--SFD4-------------------------
  30264. INT 21 - Novell NetWare - FILE SERVER - GET FILE SYSTEM STATISTICS
  30265.     AH = E3h subfn D4h
  30266.     DS:SI -> request buffer (see below)
  30267.     ES:DI -> reply buffer (see below)
  30268. Return: AL = status
  30269.         00h successful
  30270.         C6h no console rights
  30271. Notes:    this function is supported by Advanced NetWare 2.1+
  30272.     the calling workstation must have console operator privileges
  30273. SeeAlso: AH=E3h/SF=0Eh,AH=E3h/SF=C8h,AH=E3h/SF=D9h,AH=E3h/SF=E7h,AH=E3h/SF=E8h
  30274.  
  30275. Format of request buffer:
  30276. Offset    Size    Description
  30277.  00h    WORD    0001h (length of following data)
  30278.  02h    BYTE    D4h (subfunction "Get File System Statistics")
  30279.  
  30280. Format of reply buffer:
  30281. Offset    Size    Description
  30282.  00h    WORD    (call) 0028h (size of following results buffer)
  30283.  02h    DWORD    clock ticks since system started
  30284.  06h    WORD    maximum open files set by configuration
  30285.  08h    WORD    maximum files open concurrently
  30286.  0Ah    WORD    current number of open files
  30287.  0Ch    DWORD    total files opened
  30288.  10h    DWORD    total file read requests
  30289.  14h    DWORD    total file write requests
  30290.  18h    WORD    current changed FATs
  30291.  1Ah    WORD    total changed FATs
  30292.  1Ch    WORD    number of FAT write errors
  30293.  1Eh    WORD    number of fatal FAT write errors
  30294.  20h    WORD    number of FAT scan errors
  30295.  22h    WORD    maximum concurrently-indexed files
  30296.  24h    WORD    current number of indexed files
  30297.  26h    WORD    number of attached indexed files
  30298.  28h    WORD    number of indexed files available
  30299. Note:    all fields except the first are big-endian
  30300. ----------21E3--SFD5-------------------------
  30301. INT 21 - Novell NetWare - FILE SERVER - GET TRANSACTION TRACKING STATISTICS
  30302.     AH = E3h subfn D5h
  30303.     DS:SI -> request buffer (see below)
  30304.     ES:DI -> reply buffer (see below)
  30305. Return: AL = status
  30306.         00h successful
  30307.         C6h no console rights
  30308. Notes:    this function is supported by Advanced NetWare 2.1+
  30309.     the calling workstation must have console operator privileges
  30310. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=CFh,AH=E3h/SF=D0h,AH=E3h/SF=E8h
  30311.  
  30312. Format of request buffer:
  30313. Offset    Size    Description
  30314.  00h    WORD    0001h (length of following data)
  30315.  02h    BYTE    D5h (subfunction "TTS Get Statistics")
  30316.  
  30317. Format of reply buffer:
  30318. Offset    Size    Description
  30319.  00h    WORD    (call) length of following results buffer (max 1BCh)
  30320.  02h    DWORD    clock ticks since system started (big-endian)
  30321.  06h    BYTE    transaction tracking supported if nonzero
  30322.         (all following fields are invalid if zero)
  30323.  07h    BYTE    transaction tracking enabled
  30324.  08h    WORD    transaction volume number (big-endian)
  30325.  0Ah    WORD    maximum simultaneous transactions configured (big-endian)
  30326.  0Ch    WORD    maximum simultaneous transactions since startup (big-endian)
  30327.  0Eh    WORD    current transactions in progress (big-endian)
  30328.  10h    DWORD    total transactions performed (big-endian)
  30329.  14h    DWORD    total write transactions (big-endian)
  30330.  18h    DWORD    total transactions backed out (big-endian)
  30331.  1Ch    WORD    number of unfilled backout requests (big-endian)
  30332.  1Eh    WORD    disk blocks used for transaction tracking (big-endian)
  30333.  20h    DWORD    blocks allocated for tracked-file FATs (big-endian)
  30334.  24h    DWORD    number of file size changes during a transaction (big-endian)
  30335.  28h    DWORD    number of file truncations during a transaction (big-endian)
  30336.  2Ch    BYTE    number of records following
  30337.  2Dh    Active Transaction Records [array]
  30338.     Offset    Size    Description
  30339.      00h    BYTE    logical connection number
  30340.      01h    BYTE    task number
  30341. ----------21E3--SFD6-------------------------
  30342. INT 21 - Novell NetWare - FILE SERVER - GET DISK CACHE STATISTICS
  30343.     AH = E3h subfn D6h
  30344.     DS:SI -> request buffer (see below)
  30345.     ES:DI -> reply buffer (see below)
  30346. Return: AL = status
  30347.         00h successful
  30348.         C6h no console rights
  30349. Notes:    this function is supported by Advanced NetWare 2.1+
  30350.     the calling workstation must have console operator privileges
  30351. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=D5h,AH=E3h/SF=D8h,AH=E3h/SF=D9h,AH=E3h/SF=E6h
  30352.  
  30353. Format of request buffer:
  30354. Offset    Size    Description
  30355.  00h    WORD    0001h (length of following data)
  30356.  02h    BYTE    D6h (subfunction "Get Disk Cache Statistics")
  30357.  
  30358. Format of reply buffer:
  30359. Offset    Size    Description
  30360.  00h    WORD    (call) 004Eh (length of following results buffer)
  30361.  02h    DWORD    clock ticks since system started (big-endian)
  30362.  06h    WORD    number of cache buffers (big-endian)
  30363.  08h    WORD    size of cache buffer in bytes (big-endian)
  30364.  0Ah    WORD    number of dirty cache buffers (big-endian)
  30365.  0Ch    DWORD    number of cache read requests (big-endian)
  30366.  10h    DWORD    number of cache write requests (big-endian)
  30367.  14h    DWORD    number of cache hits (big-endian)
  30368.  18h    DWORD    number of cache misses (big-endian)
  30369.  1Ch    DWORD    number of physical read requests (big-endian)
  30370.  20h    DWORD    number of physical write requests (big-endian)
  30371.  24h    WORD    number of physical read errors (big-endian)
  30372.  26h    WORD    number of physical write errors (big-endian)
  30373.  28h    DWORD    cache get requests (big-endian)
  30374.  2Ch    DWORD    cache full write requests (big-endian)
  30375.  30h    DWORD    cache partial write requests (big-endian)
  30376.  34h    DWORD    background dirty writes (big-endian)
  30377.  38h    DWORD    background aged writes (big-endian)
  30378.  3Ch    DWORD    total cache writes (big-endian)
  30379.  40h    DWORD    number of cache allocations (big-endian)
  30380.  44h    WORD    thrashing count (big-endian)
  30381.  46h    WORD    number of times LRU block was dirty (big-endian)
  30382.  48h    WORD    number of reads on cache blocks not yet filled by writes
  30383.         (big-endian)
  30384.  4Ah    WORD    number of times a fragmented write occurred (big-endian)
  30385.  4Ch    WORD    number of cache hits on unavailable block (big-endian)
  30386.  4Eh    WORD    number of times a cache block was scrapped (big-endian)
  30387. ----------21E3--SFD7-------------------------
  30388. INT 21 - Novell NetWare - FILE SERVER - GET DRIVE MAPPING TABLE
  30389.     AH = E3h subfn D7h
  30390.     DS:SI -> request buffer (see below)
  30391.     ES:DI -> reply buffer (see below)
  30392. Return: AL = status
  30393.         00h successful
  30394.         C6h no console rights
  30395. Notes:    this function is supported by Advanced NetWare 2.1+
  30396.     the calling workstation must have console operator privileges
  30397. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=D6h,AH=E3h/SF=D9h,AH=E3h/SF=E6h,AH=E3h/SF=E9h
  30398.  
  30399. Format of request buffer:
  30400. Offset    Size    Description
  30401.  00h    WORD    0001h (length of following data)
  30402.  02h    BYTE    D7h (subfunction "Get Drive Mapping Table")
  30403.  
  30404. Format of reply buffer:
  30405. Offset    Size    Description
  30406.  00h    WORD    (call) 00ECh (length of following results buffer)
  30407.  02h    DWORD    clock tick elapsed since system started (big-endian)
  30408.  06h    BYTE    fault tolerance (SFT) level
  30409.  07h    BYTE    number of logical drives attached to server
  30410.  08h    BYTE    number of physical drives attached to server
  30411.  09h  5 BYTEs    disk channel types (00h none, 01h XT, 02h AT, 03h SCSI, 
  30412.         04h disk coprocessor drive, 32h-FFh value-added drive types)
  30413.  0Eh    WORD    number of outstanding controller commands (big-endian)
  30414.  10h 32 BYTEs    drive mapping table (FFh = no such drive)
  30415.  30h 32 BYTEs    drive mirror table (secondary physical drive, FFh = none)
  30416.  50h 32 BYTEs    dead mirror table (last drive mapped to, FFh if never mirrored)
  30417.  70h    BYTE    physical drive being remirrored (FFh = none)
  30418.  71h    BYTE    reserved
  30419.  72h    DWORD    remirrored block (big-endian)
  30420.  76h 60 BYTEs    SFT error table (internal error counters)
  30421. ----------21E3--SFD8-------------------------
  30422. INT 21 - Novell NetWare - FILE SERVER - GET PHYSICAL DISK STATISTICS
  30423.     AH = E3h subfn D8h
  30424.     DS:SI -> request buffer (see below)
  30425.     ES:DI -> reply buffer (see below)
  30426. Return: AL = status
  30427.         00h successful
  30428.         C6h no console rights
  30429. Notes:    this function is supported by Advanced NetWare 2.1+
  30430.     the calling workstation must have console operator privileges
  30431. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=D9h,AH=E3h/SF=E9h
  30432.  
  30433. Format of request buffer:
  30434. Offset    Size    Description
  30435.  00h    WORD    0002h (length of following data)
  30436.  02h    BYTE    D8h (subfunction "Get Physical Disk Statistics")
  30437.  03h    BYTE    physical disk number
  30438.  
  30439. Format of reply buffer:
  30440. Offset    Size    Description
  30441.  00h    WORD    (call) 005Dh (size of following results record)
  30442.  02h    DWORD    clock ticks since system started (big-endian)
  30443.  06h    BYTE    physical disk channel
  30444.  07h    BYTE    flag: drive removable if nonzero
  30445.  08h    BYTE    physical drive type
  30446.  09h    BYTE    drive number within controller
  30447.  0Ah    BYTE    controller number
  30448.  0Bh    BYTE    controller type
  30449.  0Ch    DWORD    size of drive in 4K disk blocks (big-endian)
  30450.  10h    WORD    number of cylinders on drive (big-endian)
  30451.  12h    BYTE    number of heads
  30452.  13h    BYTE    number of sectors per track
  30453.  14h 64 BYTEs    ASCIZ drive make and model
  30454.  54h    WORD    number of I/O errors (big-endian)
  30455.  56h    DWORD    start of Hot Fix table (big-endian)
  30456.  5Ah    WORD    size of Hot Fix table (big-endian)
  30457.  5Ch    WORD    number of Hot Fix blocks available (big-endian)
  30458.  5Eh    BYTE    flag: Hot Fix disabled if nonzero
  30459. ----------21E3--SFD9-------------------------
  30460. INT 21 - Novell NetWare - FILE SERVER - GET DISK CHANNEL STATISTICS
  30461.     AH = E3h subfn D9h
  30462.     DS:SI -> request buffer (see below)
  30463.     ES:DI -> reply buffer (see below)
  30464. Return: AL = status
  30465.         00h successful
  30466.         C6h no console rights
  30467. Notes:    this function is supported by Advanced NetWare 2.1+
  30468.     the calling workstation must have console operator privileges
  30469. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=D8h,AH=E3h/SF=E6h,AH=E3h/SF=E9h
  30470.  
  30471. Format of request buffer:
  30472. Offset    Size    Description
  30473.  00h    WORD    0002h (length of following data)
  30474.  02h    BYTE    D9h (subfunction "Get Disk Channel Statistics")
  30475.  03h    BYTE    channel number
  30476.  
  30477. Format of reply buffer:
  30478. Offset    Size    Description
  30479.  00h    WORD    (call) 00A8h (size of following results record)
  30480.  02h    DWORD    clock ticks since system started (big-endian)
  30481.  06h    WORD    channel run state (big-endian)
  30482.         00h running
  30483.         01h being stopped
  30484.         02h stopped
  30485.         03h nonfunctional
  30486.  08h    WORD    channel synchronization state (big-endian)
  30487.         00h not in use
  30488.         02h used by NetWare, no other requests
  30489.         04h used by NetWare, other requests
  30490.         06h in use, not needed by NetWare
  30491.         08h in use, needed by NetWare
  30492.         0Ah channel released, NetWare should use it
  30493.  0Ah    BYTE    driver type
  30494.  0Bh    BYTE    major version of driver
  30495.  0Ch    BYTE    minor version of driver
  30496.  0Dh 65 BYTEs    ASCIZ driver description
  30497.  4Eh    WORD    first I/O address used (big-endian)
  30498.  50h    WORD    length of first I/O address (big-endian)
  30499.  52h    WORD    second I/O address used (big-endian)
  30500.  54h    WORD    length of second I/O address (big-endian)
  30501.  56h  3 BYTEs    first shared memory address
  30502.  59h  2 BYTEs    length of first shared memory address
  30503.  5Bh  3 BYTEs    second shared memory address
  30504.  5Eh  2 BYTEs    length of second shared memory address
  30505.  60h    BYTE    first interrupt number in-use flag
  30506.  61h    BYTE    first interrupt number used
  30507.  62h    BYTE    second interrupt number in-use flag
  30508.  63h    BYTE    second interrupt number used
  30509.  64h    BYTE    first DMA channel in-use flag
  30510.  65h    BYTE    first DMA channel used
  30511.  66h    BYTE    second DMA channel in-use flag
  30512.  67h    BYTE    second DMA channel used
  30513.  68h    BYTE    flags
  30514.  69h    BYTE    reserved
  30515.  6Ah 80 BYTEs    ASCIZ configuration description
  30516. ----------21E3--SFDA-------------------------
  30517. INT 21 - Novell NetWare - FILE SERVER - GET CONNECTION'S TASK INFORMATION
  30518.     AH = E3h subfn DAh
  30519.     DS:SI -> request buffer (see below)
  30520.     ES:DI -> reply buffer (see below)
  30521. Return: AL = status
  30522.         00h successful
  30523.         C6h no console rights
  30524. Notes:    this function is supported by Advanced NetWare 2.1+
  30525.     the calling workstation must have console operator privileges
  30526. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DBh,AH=E3h/SF=DFh,AH=E3h/SF=E1h,AH=E3h/SF=E5h
  30527.  
  30528. Format of request buffer:
  30529. Offset    Size    Description
  30530.  00h    WORD    0003h (length of following data)
  30531.  02h    BYTE    DAh (subfunction "Get Connection's Task Information")
  30532.  03h    WORD    logical connection number (big-endian)
  30533.  
  30534. Format of reply buffer:
  30535. Offset    Size    Description
  30536.  00h    WORD    (call) size of following results record (max 1FEh)
  30537.  02h    BYTE    lock status of connection
  30538.         00h no locks
  30539.         01h waiting on physical record lock
  30540.         02h waiting on file lock
  30541.         03h waiting on logical record lock
  30542.         04h waiting on semaphore
  30543.  03h    var    Lock Status Information (see below)
  30544.  N    BYTE    number of records following
  30545.  N+1    Active Task Information Records [array]
  30546.     Offset    Size    Description
  30547.      00h    BYTE    task number (01h-FFh)
  30548.      01h    BYTE    task state
  30549.             01h in TTS explicit transaction
  30550.             02h in TTS implicit transaction
  30551.             04h shared fileset lock active
  30552.  
  30553. Format of Lock Status Information:
  30554. Offset    Size    Description
  30555. ---lock status 00h---
  30556.  no fields
  30557. ---lock status 01h---
  30558.  00h    BYTE    number of waiting task
  30559.  01h    DWORD    start address
  30560.  05h    DWORD    end address
  30561.  09h    BYTE    volume number
  30562.  0Ah    WORD    directory entry number
  30563.  0Ch 14 BYTEs    ASCIZ filename
  30564. ---lock status 02h---
  30565.  00h    BYTE    number of waiting task
  30566.  01h    BYTE    volume number
  30567.  02h    WORD    directory entry number
  30568.  04h 14 BYTEs    ASCIZ filename
  30569. ---lock status 03h---
  30570.  00h    BYTE    number of waiting task
  30571.  01h    BYTE    length of record name
  30572.  02h  N BYTEs    ASCIZ record name
  30573. ---lock status 04h---
  30574.  00h    BYTE    number of waiting task
  30575.  01h    BYTE    length of semaphore's name
  30576.  02h  N BYTEs    ASCIZ semaphore name
  30577. ----------21E3--SFDB-------------------------
  30578. INT 21 - Novell NetWare - FILE SERVER - GET CONNECTION'S OPEN FILES
  30579.     AH = E3h subfn DBh
  30580.     DS:SI -> request buffer (see below)
  30581.     ES:DI -> reply buffer (see below)
  30582. Return: AL = status
  30583.         00h successful
  30584.         C6h no console rights
  30585. Notes:    this function is supported by Advanced NetWare 2.1+
  30586.     the calling workstation must have console operator privileges
  30587. SeeAlso: AH=E2h/SF=1Ah,AH=E3h/SF=C8h,AH=E3h/SF=DAh,AH=E3h/SF=DCh,AH=E3h/SF=DFh
  30588. SeeAlso: AH=E3h/SF=E1h
  30589.  
  30590. Format of request buffer:
  30591. Offset    Size    Description
  30592.  00h    WORD    0005h (length of following data)
  30593.  02h    BYTE    DBh (subfunction "Get Connection's Open Files")
  30594.  03h    WORD    logical connection number (big-endian)
  30595.  05h    WORD    last record seen (big-endian)
  30596.         0000h on first call
  30597.  
  30598. Format of reply buffer:
  30599. Offset    Size    Description
  30600.  00h    WORD    (call) size of following results record (max 1FEh)
  30601.  02h    WORD    next request record (place in "last record" field on next call)
  30602.         0000h if no more records
  30603.  04h    BYTE    number of records following
  30604.  05h    File Information Records [array]
  30605.     Offset    Size    Description
  30606.      00h    BYTE    task number
  30607.      01h    BYTE    lock flags (see below)
  30608.      02h    BYTE    access flags (see below)
  30609.      03h    BYTE    lock type
  30610.             00h no lock
  30611.             FEh file lock
  30612.             FFh locked by Begin Share File Set
  30613.      04h    BYTE    volume number (00h-1Fh)
  30614.      05h    WORD    directory entry (big-endian)
  30615.      07h 14 BYTEs    ASCIZ filename
  30616.  
  30617. Bitmask of lock flags:
  30618.  bit 0: file is locked
  30619.  bit 1: file opened Shareable
  30620.  bit 2: logged
  30621.  bit 3: file opened Normal
  30622.  bit 6: TTS holding lock
  30623.  bit 7: Transaction Flag set on file
  30624.  
  30625. Bitmask of access flags:
  30626.  bit 0: file open for reading by calling station
  30627.  bit 1: file open for writing by calling station
  30628.  bit 2: deny reads by other stations
  30629.  bit 3: deny writes by other stations
  30630.  bit 4: file detached
  30631.  bit 5: TTS Holding Detach
  30632.  bit 6: TTS Holding Open
  30633. ----------21E3--SFDC-------------------------
  30634. INT 21 - Novell NetWare - FILE SERVER - GET CONNECTIONS USING A FILE
  30635.     AH = E3h subfn DCh
  30636.     DS:SI -> request buffer (see below)
  30637.     ES:DI -> reply buffer (see below)
  30638. Return: AL = status
  30639.         00h successful
  30640.         C6h no console rights
  30641. Notes:    this function is supported by Advanced NetWare 2.1+
  30642.     the calling workstation must have console operator privileges
  30643. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DAh,AH=E3h/SF=DBh,AH=E3h/SF=DFh,AH=E3h/SF=E1h
  30644.  
  30645. Format of request buffer:
  30646. Offset    Size    Description
  30647.  00h    WORD    length of following data (max 104h)
  30648.  02h    BYTE    DCh (subfunction "Get Connections Using a File")
  30649.  03h    WORD    last record (big-endian)
  30650.         0000h on first call
  30651.  05h    BYTE    directory handle
  30652.  06h    BYTE    length of file path
  30653.  07h  N BYTEs    ASCIZ file path
  30654.  
  30655. Format of reply buffer:
  30656. Offset    Size    Description
  30657.  00h    WORD    (call) size of following results record (max 1FEh)
  30658.  02h    WORD    count of tasks which have opened or logged file (big-endian)
  30659.  04h    WORD    count of tasks which have opened file (big-endian)
  30660.  06h    WORD    count of opens for reading (big-endian)
  30661.  08h    WORD    count of opens for writing (big-endian)
  30662.  0Ah    WORD    deny read count (big-endian)
  30663.  0Ch    WORD    deny write count (big-endian)
  30664.  0Eh    WORD    next request record (place in "last record" field on next call)
  30665.         0000h if no more records
  30666.  10h    BYTE    locked flag
  30667.         00h not locked exclusively
  30668.         else locked exclusively
  30669.  11h    BYTE    number of records following
  30670.  12h    File Usage Information Records [array]
  30671.     Offset    Size    Description
  30672.      00h    WORD    logical connection number (big-endian)
  30673.      02h    BYTE    task number
  30674.      03h    BYTE    lock flags (see AH=E3h/SF=DBh)
  30675.      04h    BYTE    access flags (see AH=E3h/SF=DBh)
  30676.      05h    BYTE    lock type
  30677.             00h no lock
  30678.             FEh file lock
  30679.             FFh locked by Begin Share File Set
  30680. ----------21E3--SFDD-------------------------
  30681. INT 21 - Novell NetWare - FILE SERVER - GET PHYSICAL RECORD LOCKS BY CONN&FILE
  30682.     AH = E3h subfn DDh
  30683.     DS:SI -> request buffer (see below)
  30684.     ES:DI -> reply buffer (see below)
  30685. Return: AL = status
  30686.         00h successful
  30687.         C6h no console rights
  30688.         FFh file not open
  30689. Notes:    this function is supported by Advanced NetWare 2.1+
  30690.     the calling workstation must have console operator privileges
  30691. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DEh,AH=E3h/SF=DFh
  30692.  
  30693. Format of request buffer:
  30694. Offset    Size    Description
  30695.  00h    WORD    0016h (length of following data)
  30696.  02h    BYTE    DDh (subfunction "Get Physical Record Locks by Connection and
  30697.             File")
  30698.  03h    WORD    logical connection number (big-endian)
  30699.  05h    WORD    last record seen (big-endian)
  30700.         0000h on first call
  30701.  07h    BYTE    volume number (00h-1Fh)
  30702.  08h    WORD    directory handle (big-endian)
  30703.  0Ah 14 BYTEs    ASCIZ filename
  30704.  
  30705. Format of reply buffer:
  30706. Offset    Size    Description
  30707.  00h    WORD    (call) size of following results record (max 1FEh)
  30708.  02h    WORD    next request record (place in "last record" on next call)
  30709.         0000h if no more records
  30710.  04h    BYTE    number of physical record locks
  30711.  05h    BYTE    number of records following
  30712.  06h    Physical Record Lock Info [array]
  30713.     Offset    Size    Description
  30714.      00h    BYTE    task number
  30715.      01h    BYTE    lock status (see below)
  30716.      02h    DWORD    starting offset of record in file (big-endian)
  30717.      06h    DWORD    ending offset of record in file (big-endian)
  30718.  
  30719. Bitmask of lock status:
  30720.  bit 0: exclusive lock
  30721.  bit 1: shareable lock
  30722.  bit 2: logged
  30723.  bit 6: lock held by TTS
  30724. ----------21E3--SFDE-------------------------
  30725. INT 21 - Novell NetWare - FILE SERVER - GET PHYSICAL RECORD LOCKS BY FILE
  30726.     AH = E3h subfn DEh
  30727.     DS:SI -> request buffer (see below)
  30728.     ES:DI -> reply buffer (see below)
  30729. Return: AL = status
  30730.         00h successful
  30731.         C6h no console rights
  30732.         FFh file not open
  30733. Notes:    this function is supported by Advanced NetWare 2.1+
  30734.     the calling workstation must have console operator privileges
  30735. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DDh,AH=E3h/SF=DFh
  30736.  
  30737. Format of request buffer:
  30738. Offset    Size    Description
  30739.  00h    WORD    length of following data (max 104h)
  30740.  02h    BYTE    DEh (subfunction "Get Physical Record Locks by File")
  30741.  03h    WORD    last record seen (big-endian)
  30742.         0000h on first call
  30743.  05h    BYTE    directory handle
  30744.  06h    BYTE    length of filename
  30745.  07h  N BYTEs    ASCIZ filename
  30746.  
  30747. Format of reply buffer:
  30748. Offset    Size    Description
  30749.  00h    WORD    (call) size of following results record (max 1FEh)
  30750.  02h    WORD    next request record (place in "last record" on next call)
  30751.         0000h if no more records
  30752.  04h    BYTE    number of physical record locks
  30753.  05h    BYTE    number of records following
  30754.  06h    Physical Record Lock Info [array]
  30755.     Offset    Size    Description
  30756.      00h    WORD    number of tasks logging record (big-endian)
  30757.      02h    WORD    number of tasks with shareable lock (big-endian)
  30758.      04h    DWORD    starting offset of record in file (big-endian)
  30759.      08h    DWORD    ending offset of record in file (big-endian)
  30760.      0Ch    WORD    logical connection number (big-endian)
  30761.      0Eh    BYTE    task number
  30762.      0Fh    BYTE    lock type
  30763.             00h none
  30764.             FEh file lock
  30765.             FFh Begin Share File Set lock
  30766. ----------21E3--SFDF-------------------------
  30767. INT 21 - Novell NetWare - FILE SERVER - GET LOGICAL RECORDS BY CONNECTION
  30768.     AH = E3h subfn DFh
  30769.     DS:SI -> request buffer (see below)
  30770.     ES:DI -> reply buffer (see below)
  30771. Return: AL = status
  30772.         00h successful
  30773.         C6h no console rights
  30774. Notes:    this function is supported by Advanced NetWare 2.1+
  30775.     the calling workstation must have console operator privileges
  30776. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DDh,AH=E3h/SF=E0h,AH=E3h/SF=E2h
  30777.  
  30778. Format of request buffer:
  30779. Offset    Size    Description
  30780.  00h    WORD    0005h (length of following data)
  30781.  02h    BYTE    DFh (subfunction "Get Logical Records By Connection")
  30782.  03h    WORD    logical connection number (big-endian)
  30783.  05h    WORD    last record seen (big-endian)
  30784.         0000h on first call
  30785.  
  30786. Format of reply buffer:
  30787. Offset    Size    Description
  30788.  00h    WORD    (call) size of following results record (max 1FEh)
  30789.  02h    WORD    next request record (place in "last record" field on next call)
  30790.         0000h if no more locked records
  30791.  09h    BYTE    number of records following
  30792.  0Ah    Logical Lock Information Records [list]
  30793.     Offset    Size    Description
  30794.      00h    BYTE    task number
  30795.      01h    BYTE    lock status (see AH=E3h/SF=DDh)
  30796.      02h    BYTE    length of logical lock's name
  30797.      03h  N BYTEs    logical lock's name
  30798. ----------21E3--SFE0-------------------------
  30799. INT 21 - Novell NetWare - FILE SERVER - GET LOGICAL RECORD INFORMATION
  30800.     AH = E3h subfn E0h
  30801.     DS:SI -> request buffer (see below)
  30802.     ES:DI -> reply buffer (see below)
  30803. Return: AL = status
  30804.         00h successful
  30805.         C6h no console rights
  30806. Notes:    this function is supported by Advanced NetWare 2.1+
  30807.     the calling workstation must have console operator privileges
  30808. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DDh,AH=E3h/SF=DFh,AH=E3h/SF=E2h
  30809.  
  30810. Format of request buffer:
  30811. Offset    Size    Description
  30812.  00h    WORD    length of following data (max 67h)
  30813.  02h    BYTE    E0h (subfunction "Get Logical Record Information")
  30814.  03h    WORD    last record seen (big-endian)
  30815.         0000h on first call
  30816.  05h    BYTE    length of logical record's name
  30817.  06h  N BYTEs    logical record's name
  30818.  
  30819. Format of reply buffer:
  30820. Offset    Size    Description
  30821.  00h    WORD    (call) size of following results record (max 200h)
  30822.  02h    WORD    number of logical connections logging the record (big-endian)
  30823.  04h    WORD    number of logical connections with shareable lock (big-endian)
  30824.  06h    WORD    next request record (place in "last record" field on next call)
  30825.  08h    BYTE    locked exclusively if nonzero
  30826.  09h    BYTE    number of records following
  30827.  0Ah    Task Information Records [array]
  30828.     Offset    Size    Description
  30829.      00h    WORD    logical connection number (big-endian)
  30830.      02h    BYTE    task number
  30831.      03h    BYTE    lock status (see AH=E3h/SF=DFh)
  30832. ----------21E3--SFE1-------------------------
  30833. INT 21 - Novell NetWare - FILE SERVER - GET CONNECTION'S SEMAPHORES
  30834.     AH = E3h subfn E1h
  30835.     DS:SI -> request buffer (see below)
  30836.     ES:DI -> reply buffer (see below)
  30837. Return: AL = status
  30838.         00h successful
  30839.         C6h no console rights
  30840. Notes:    this function is supported by Advanced NetWare 2.1+
  30841.     the calling workstation must have console operator privileges
  30842. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DBh,AH=E3h/SF=DFh,AH=E3h/SF=E2h
  30843.  
  30844. Format of request buffer:
  30845. Offset    Size    Description
  30846.  00h    WORD    0005h (length of following data)
  30847.  02h    BYTE    E1h (subfunction "Get Connection's Semaphores")
  30848.  03h    WORD    logical connection number (big-endian)
  30849.  05h    WORD    last record seen (big-endian)
  30850.         0000h on first call
  30851.  
  30852. Format of reply buffer:
  30853. Offset    Size    Description
  30854.  00h    WORD    (call) size of following results record (max 1FEh)
  30855.  02h    WORD    next request record (place in "last record" field on next call)
  30856.  04h    BYTE    number of records following
  30857.  05h    Semaphore Information Records [array]
  30858.     Offset    Size    Description
  30859.      00h    WORD    open count (big-endian)
  30860.      02h    BYTE    semaphore value (-128 to 127)
  30861.      03h    BYTE    task number
  30862.      04h    BYTE    lock type
  30863.      05h    BYTE    length of semaphore's name
  30864.      06h  N BYTEs    semaphore's name
  30865.          14 BYTEs    filename
  30866. ----------21E3--SFE2-------------------------
  30867. INT 21 - Novell NetWare - FILE SERVER - GET SEMAPHORE INFORMATION
  30868.     AH = E3h subfn E2h
  30869.     DS:SI -> request buffer (see below)
  30870.     ES:DI -> reply buffer (see below)
  30871. Return: AL = status
  30872.         00h successful
  30873.         C6h no console rights
  30874. Notes:    this function is supported by Advanced NetWare 2.1+
  30875.     the calling workstation must have console operator privileges
  30876. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=E1h
  30877.  
  30878. Format of request buffer:
  30879. Offset    Size    Description
  30880.  00h    WORD    length of following data (max 83h)
  30881.  02h    BYTE    E2h (subfunction "Get LAN Driver's Configuration Information")
  30882.  03h    WORD    last record seen (big-endian)
  30883.         0000h on first call
  30884.  05h    BYTE    length of semaphore's name (01h-7Fh)
  30885.  06h  N BYTEs    semaphore's name
  30886.  
  30887. Format of reply buffer:
  30888. Offset    Size    Description
  30889.  00h    WORD    (call) size of following results buffer (max 1FEh)
  30890.  02h    WORD    next request record (place in "last record" on next call)
  30891.         0000h if no more
  30892.  04h    WORD    number of logical connections opening semaphore (big-endian)
  30893.  06h    BYTE    semaphore value (-127 to 128)
  30894.  07h    BYTE    number of records following
  30895.  08h    Semaphore Information [array]
  30896.     Offset    Size    Description
  30897.      00h    WORD    logical connection number (big-endian)
  30898.      02h    BYTE    task number
  30899. ----------21E3--SFE3-------------------------
  30900. INT 21 - Novell NetWare - FILE SERVER - GET LAN DRIVER'S CONFIGURATION INFO
  30901.     AH = E3h subfn E3h
  30902.     DS:SI -> request buffer (see below)
  30903.     ES:DI -> reply buffer (see below)
  30904. Return: AL = status
  30905.         00h successful
  30906.         C6h no console rights
  30907. Notes:    this function is supported by Advanced NetWare 2.1+
  30908.     the calling workstation must have console operator privileges
  30909. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=E7h,AH=E3h/SF=E8h
  30910.  
  30911. Format of request buffer:
  30912. Offset    Size    Description
  30913.  00h    WORD    0002h (length of following data)
  30914.  02h    BYTE    E3h (subfunction "Get LAN Driver's Configuration Information")
  30915.  03h    BYTE    LAN board (00h-03h)
  30916.  
  30917. Format of reply buffer:
  30918. Offset    Size    Description
  30919.  00h    WORD    (call) 00ACh (size of following results buffer)
  30920.  02h  4 BYTEs    network number
  30921.  06h  6 BYTEs    node number
  30922.  0Ch    BYTE    LAN driver installed (00h no--remaining fields invalid)
  30923.  0Dh    BYTE    option number selected at configuration time
  30924.  0Eh 160 BYTEs    configuration text
  30925.         ASCIZ hardware type
  30926.         ASCIZ hardware settings
  30927. ----------21E3--SFE5-------------------------
  30928. INT 21 - Novell NetWare - FILE SERVER - GET CONNECTION'S USAGE STATISTICS
  30929.     AH = E3h subfn E5h
  30930.     DS:SI -> request buffer (see below)
  30931.     ES:DI -> reply buffer (see below)
  30932. Return: AL = status
  30933.         00h successful
  30934.         C6h no console rights
  30935. Notes:    this function is supported by Advanced NetWare 2.1+
  30936.     one must have console operator privileges to get statistics for logical
  30937.       connections other than one's own
  30938. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DAh,AH=E3h/SF=DBh,AH=E3h/SF=E1h
  30939.  
  30940. Format of request buffer:
  30941. Offset    Size    Description
  30942.  00h    WORD    0003h (length of following data)
  30943.  02h    BYTE    E5h (subfunction "Get Connection's Usage Statistics")
  30944.  03h    WORD    logical connection number (big-endian)
  30945.  
  30946. Format of reply buffer:
  30947. Offset    Size    Description
  30948.  00h    WORD    (call) 0014h (size of following results record)
  30949.  02h    DWORD    clock ticks since server started (big-endian)
  30950.  06h  6 BYTEs    bytes read
  30951.  0Ch  6 BYTEs    bytes written
  30952.  12h    DWORD    total request packets (big-endian)
  30953. ----------21E3--SFE6-------------------------
  30954. INT 21 - Novell NetWare - FILE SERVER - GET BINDERY OBJECT DISK SPACE LEFT
  30955.     AH = E3h subfn E6h
  30956.     DS:SI -> request buffer (see below)
  30957.     ES:DI -> reply buffer (see below)
  30958. Return: AL = status
  30959.         00h successful
  30960.         C6h no console rights
  30961. Notes:    this function is supported by Advanced NetWare 2.1+
  30962.     one must have console operator privileges to get the free space for
  30963.       other bindery objects
  30964. SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=E8h,AH=E3h/SF=E9h
  30965.  
  30966. Format of request buffer:
  30967. Offset    Size    Description
  30968.  00h    WORD    0005h (length of following data)
  30969.  02h    BYTE    E6h (subfunction "Get Bindery Object Disk Space Left")
  30970.  03h    DWORD    object ID (big-endian)
  30971.  
  30972. Format of reply buffer:
  30973. Offset    Size    Description
  30974.  00h    WORD    (call) 000Fh (size of following results buffer)
  30975.  02h    DWORD    clock ticks elapsed since server started (big-endian)
  30976.  06h    DWORD    object ID (big-endian)
  30977.  0Ah    DWORD    4K disk blocks available to user (big-endian)
  30978.  0Eh    BYTE    restrictions
  30979.         00h enforced
  30980.         FFh not enforced
  30981. ----------21E3--SFE7-------------------------
  30982. INT 21 - Novell NetWare - FILE SERVER - GET FILE SERVER LAN I/O STATISTICS
  30983.     AH = E3h subfn E7h
  30984.     DS:SI -> request buffer (see below)
  30985.     ES:DI -> reply buffer (see below)
  30986. Return: AL = status
  30987.         00h successful
  30988. Note:    this function is supported by Advanced NetWare 2.1+
  30989. SeeAlso: AH=E3h/SF=0Eh,AH=E3h/SF=11h,AH=E3h/SF=D3h,AH=E3h/SF=E8h,AH=E7h
  30990.  
  30991. Format of request buffer:
  30992. Offset    Size    Description
  30993.  00h    WORD    0001h (length of following data)
  30994.  02h    BYTE    E7h (subfunction "Get File Server LAN I/O Statistics")
  30995.  
  30996. Format of reply buffer:
  30997. Offset    Size    Description
  30998.  00h    WORD    (call) 0042h (size of following results buffer)
  30999.  02h    DWORD    clock ticks since system started
  31000.  06h    WORD    total routing buffers
  31001.  08h    WORD    maximum routing buffers used
  31002.  0Ah    WORD    current routing buffers used
  31003.  0Ch    DWORD    total file service packets
  31004.  10h    WORD    number of file service packets buffered
  31005.  12h    WORD    number of invalid connection packets
  31006.  14h    WORD    packets with bad logical connection numbers
  31007.  16h    WORD    number of packets received during processing
  31008.  18h    WORD    number of requests reprocessed
  31009.  1Ah    WORD    packets with bad sequence numbers
  31010.  1Ch    WORD    number of duplicate replies sent
  31011.  1Eh    WORD    number of acknowledgements sent
  31012.  20h    WORD    number of packets with bad request types
  31013.  22h    WORD    requests to attach to ws for which a request is being processed
  31014.  24h    WORD    requests to attach from ws which is already attaching
  31015.  26h    WORD    number of forged detach requests
  31016.  28h    WORD    detach requests with bad connection number
  31017.  2Ah    WORD    requests to detach from ws for which requests pending
  31018.  2Ch    WORD    number of cancelled replies
  31019.  2Eh    WORD    packets discarded due to excessive hop count
  31020.  30h    WORD    packets discarded due to unknown net
  31021.  32h    WORD    incoming packets discarded for lack of DGroup buffer
  31022.  34h    WORD    outgoing packets discarded due to lack of buffer
  31023.  36h    WORD    received packets destined for B,C, or D side drivers
  31024.  38h    DWORD    number of NetBIOS packets propagated through net
  31025.  3Ch    DWORD    total number of non-file-service packets
  31026.  40h    DWORD    total number of routed packets
  31027. Note:    all fields except the first are big-endian
  31028. ----------21E3--SFE8-------------------------
  31029. INT 21 - Novell NetWare - FILE SERVER - GET FILE SERVER MISC INFORMATION
  31030.     AH = E3h subfn E8h
  31031.     DS:SI -> request buffer (see below)
  31032.     ES:DI -> reply buffer (see below)
  31033. Return: AL = status
  31034.         00h successful
  31035.         C6h no console rights
  31036. Note:    this function is supported by Advanced NetWare 2.1+
  31037. SeeAlso: AH=E3h/SF=0Eh,AH=E3h/SF=11h,AH=E3h/SF=CDh,AH=E3h/SF=E7h
  31038.  
  31039. Format of request buffer:
  31040. Offset    Size    Description
  31041.  00h    WORD    0001h (length of following data)
  31042.  02h    BYTE    E8h (subfunction "Get File Server Misc Information")
  31043.  
  31044. Format of reply buffer:
  31045. Offset    Size    Description
  31046.  00h    WORD    (call) size of following results buffer (max 0048h)
  31047.  02h    DWORD    clock ticks since system started
  31048.  06h    BYTE    CPU type
  31049.         00h Motorola 68000
  31050.         01h Intel 8086, 8088, or V20
  31051.         02h Intel 80286+
  31052.  07h    BYTE    reserved
  31053.  08h    BYTE    number of service processes in server
  31054.  09h    BYTE    server utilization in percent
  31055.  0Ah    WORD    maximum bindery objects set by configuration (big-endian)
  31056.         0000h = unlimited
  31057.  0Ch    WORD    maximum number of bindery objects used (big-endian)
  31058.  0Eh    WORD    current number of bindery objects in use (big-endian)
  31059.  10h    WORD    total server memory in K (big-endian)
  31060.  12h    WORD    wasted server memory in K (big-endian)
  31061.         normally 0000h
  31062.  14h    WORD    number of records following (01h-03h)
  31063.  16h    Dynamic Memory Information [array]
  31064.     Offset    Size    Description
  31065.      00h    DWORD    total dynamic space (big-endian)
  31066.      04h    DWORD    maximum dynamic space used (big-endian)
  31067.      08h    DWORD    current dynamic space usage (big-endian)
  31068. ----------21E3--SFE9-------------------------
  31069. INT 21 - Novell NetWare - DIRECTORY SERVICES - GET VOLUME INFORMATION
  31070.     AH = E3h subfn E9h
  31071.     DS:SI -> request buffer (see below)
  31072.     ES:DI -> reply buffer (see below)
  31073. Return: AL = status
  31074.         00h successful
  31075. Notes:    this function is supported by Advanced NetWare 2.1+
  31076. SeeAlso: AH=DAh,AH=E2h/SF=15h
  31077.  
  31078. Format of request buffer:
  31079. Offset    Size    Description
  31080.  00h    WORD    0002h (length of following data)
  31081.  02h    BYTE    E9h (subfunction "Get Volume Information")
  31082.  03h    BYTE    directory handle
  31083.  
  31084. Format of reply buffer:
  31085. Offset    Size    Description
  31086.  00h    WORD    (call) 0028h (length of following results buffer)
  31087.  02h    DWORD    elapsed system time (big-endian)
  31088.  06h    BYTE    volume number
  31089.  07h    BYTE    logical drive number
  31090.  08h    WORD    sectors per block (big-endian)
  31091.  0Ah    WORD    starting block (big-endian)
  31092.  0Ch    WORD    total blocks on volume (big-endian)
  31093.  0Eh    WORD    blocks available on volume (big-endian)
  31094.  10h    WORD    total directory slots (big-endian)
  31095.  12h    WORD    directory slots available (big-endian)
  31096.  14h    WORD    maximum directory entries actually used (big-endian)
  31097.  16h    BYTE    flag: volume hashed if nonzero
  31098.  17h    BYTE    flag: volume cached if nonzero
  31099.  18h    BYTE    flag: volume removable if nonzero
  31100.  19h    BYTE    flag: volume mounted if nonzero
  31101.  1Ah 16 BYTEs    NUL-padded volume name
  31102. ----------21E4-------------------------------
  31103. INT 21 - Novell NetWare 4.0 - SET FILE ATTRIBUTES (FCB)
  31104.     AH = E4h
  31105.     CL = file attributes
  31106.         bit 0: read only
  31107.         1: hidden
  31108.         2: system
  31109.         7: shareable
  31110.     DX:DX -> FCB (see AH=0Fh)
  31111. Return: AL = error code
  31112. SeeAlso: AX=4301h
  31113. ----------21E4-------------------------------
  31114. INT 21 - VIRUS - "Anarkia" - INSTALLATION CHECK
  31115.     AH = E4h
  31116. Return: AH = 04h if resident
  31117. SeeAlso: AH=E1h"VIRUS",AH=E7h"VIRUS"
  31118. ----------21E400-----------------------------
  31119. INT 21 - DoubleDOS - INSTALLATION CHECK/PROGRAM STATUS
  31120.     AX = E400h
  31121. Return: AL = 00h if DoubleDOS not present
  31122.        = 01h if running in visible DoubleDOS partition
  31123.        = 02h if running in the invisible DoubleDOS partition
  31124. SeeAlso: AH=E5h"DoubleDOS",AX=F400h
  31125. ----------21E400-----------------------------
  31126. INT 21 - OS/286, OS/386 - CHAIN TO REAL-MODE HANDLER
  31127.     AX = E400h
  31128.     ???
  31129. Return: ???
  31130. Note:    protected mode only???
  31131. ----------21E402-----------------------------
  31132. INT 21 - OS/286, OS/386 - SET PROTECTED-MODE TASK GATE
  31133.     AX = E402h
  31134.     ???
  31135. Return: ???
  31136. Note:    protected mode only???
  31137. SeeAlso: AX=E403h
  31138. ----------21E403-----------------------------
  31139. INT 21 - OS/286, OS/386 - REMOVE PROTECTED-MODE TASK GATE
  31140.     AX = E403h
  31141.     ???
  31142. Return: ???
  31143. Note:    protected mode only???
  31144. SeeAlso: AX=E402h
  31145. ----------21E5-------------------------------
  31146. INT 21 - Novell NetWare 4.0 - UPDATE FILE SIZE (FCB)
  31147.     AH = E5h
  31148.     DS:DX -> FCB (see AH=0Fh)
  31149. Return: AL = error code
  31150. ----------21E5-------------------------------
  31151. INT 21 - DoubleDOS - OTHER PROGRAM STATUS
  31152.     AH = E5h
  31153. Return: AL = 00h no program in other partition
  31154.        = 01h program in other partition is running
  31155.        = 02h program in other partition is suspended
  31156. SeeAlso: AX=E400h"DoubleDOS",AH=F5h"DoubleDOS"
  31157. ----------21E500-----------------------------
  31158. INT 21 - OS/286, OS/386 - HEAP MANAGEMENT STRATEGY
  31159.     AX = E500h
  31160.     ???
  31161. Return: ???
  31162. SeeAlso: AX=E501h
  31163. ----------21E501-----------------------------
  31164. INT 21 - OS/286, OS/386 - FORCE HEAP COMPACTION
  31165.     AX = E501h
  31166.     ???
  31167. Return: ???
  31168. SeeAlso: AX=E500h
  31169. ----------21E6-------------------------------
  31170. INT 21 - Novell NetWare 4.0 - COPY FILE TO FILE (FCB)
  31171.     AH = E6h
  31172.     CX:DX = number of bytes to copy
  31173.     DS:SI -> source FCB
  31174.     ES:DI -> destination FCB
  31175. Return: AL = error code
  31176. ----------21E6-------------------------------
  31177. INT 21 P - OS/286, OS/386 - ISSUE REAL PROCEDURE SIGNAL FROM PROTECTED MODE
  31178.     AH = E6h
  31179.     ???
  31180. Return: ???
  31181. SeeAlso: AH=E2h"OS/286"
  31182. ----------21E7-------------------------------
  31183. INT 21 - Novell NetWare - FILE SERVER - GET FILE SERVER DATE AND TIME
  31184.     AH = E7h
  31185.     DS:DX -> date/time buffer (see below)
  31186. Return: AL = error code
  31187.         00h successful
  31188.         FFh unsuccessful
  31189. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  31190.       Alloy NTNX, and Banyan VINES
  31191. SeeAlso: AH=2Ah,AH=2Ch,AH=E3h/SF=CAh
  31192.  
  31193. Format of date/time buffer:
  31194. Offset    Size    Description
  31195.  00h    BYTE    year (80-99 = 1980-1999, 0-79 = 2000-2079)
  31196.  01h    BYTE    month (1=Jan)
  31197.  02h    BYTE    day
  31198.  03h    BYTE    hours
  31199.  04h    BYTE    minutes
  31200.  05h    BYTE    seconds
  31201.  06h    BYTE    day of week (0 = Sunday) (Novell and NTNX only)
  31202. ----------21E7-------------------------------
  31203. INT 21 - OS/286, OS/386 - CREATE CODE SEGMENT
  31204.     AH = E7h
  31205.     ???
  31206. Return: ???
  31207. SeeAlso: AH=E8h"OS/286",AH=E9h"OS/286",AH=EAh"OS/286"
  31208. ----------21E7-------------------------------
  31209. INT 21 - VIRUS - "Spyer"/"Kiev" - INSTALLATION CHECK
  31210.     AH = E7h
  31211. Return: AH = 78h if resident
  31212. SeeAlso: AH=E4h"VIRUS",AX=EC59h
  31213. ----------21E8-------------------------------
  31214. INT 21 - Novell NetWare 4.6, Alloy NTNX - SET FCB RE-OPEN MODE
  31215.     AH = E8h
  31216.     DL = mode
  31217.         00h no automatic re-open
  31218.         01h auto re-open
  31219. Return: AL = error code
  31220. ----------21E8-------------------------------
  31221. INT 21 - OS/286, OS/386 - SEGMENT CREATION
  31222.     AH = E8h
  31223.     AL = type
  31224.         00h data segment
  31225.         01h data window/alias
  31226.         02h real segment
  31227.         03h real window/alias
  31228.         06h shareable segment
  31229.     ???
  31230. Return: ???
  31231. SeeAlso: AH=E7h"OS/286",AH=E9h"OS/286"
  31232. ----------21E8-------------------------------
  31233. INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS
  31234.     AH = E8h
  31235.     AL = 00h set flags for this program
  31236.        = 01h set flags for other program
  31237.     DX = keyboard control flags (bit set enables, cleared disables
  31238.         bit 0: menu
  31239.         bit 1: exchange
  31240.         bit 2: entire keyboard enable/disable
  31241.         bit 3: Ctrl-C
  31242.         bit 4: Ctrl-PrtSc
  31243.         bit 5: Alt/Erase
  31244.         bit 6: Ctrl-Break
  31245.         bit 7: Ctrl-NumLock
  31246.         bit 8: shift-PrtSc
  31247.         bit 9-13: undefined
  31248.         bit 14: cancel key (clear keyboard buffer)
  31249.         bit 15: suspend key
  31250. Return: DX = previous flags
  31251. Notes:    disabling Ctrl-PrtSc will allow the program to intercept the keystroke;
  31252.       disabling any of the other keystrokes disables them completely
  31253.     identical to AH=F8h
  31254. SeeAlso: AH=E1h"DoubleDOS",AH=E2h"DoubleDOS",AH=E3h"DoubleDOS"
  31255. SeeAlso: AH=F8h"DoubleDOS"
  31256. ----------21E9-------------------------------
  31257. INT 21 P - OS/286, OS/386 - CHANGE SEGMENTS
  31258.     AH = E9h
  31259.     AL = function
  31260.         01h change code segment parameters
  31261.         02h    change data segment parameters
  31262.         05h adjust segment limit
  31263.         06h change segment base address
  31264.     ???
  31265. Return: ???
  31266. SeeAlso: AH=E7h"OS/286",AH=E8h"OS/286",AH=EAh"OS/286",AH=EDh"OS/286"
  31267. SeeAlso: INT 31/AX=0007h,INT 31/AX=0008h
  31268. ----------21E9-------------------------------
  31269. INT 21 - DoubleDOS - SET TIMESHARING PRIORITY
  31270.     AH = E9h
  31271.     AL = 00h visible program gets 70%, invisible gets 30% (default)
  31272.        = 01h visible program gets 50%, invisible gets 50%
  31273.        = 02h visible program gets 30%, invisible gets 70%
  31274.        = 03h Top program gets 70%, bottom program gets 30%
  31275.        = 04h Top program gets 30%, bottom program gets 70%
  31276.        = 05h get current priority
  31277.         Return: AL = priority setting
  31278. Note:    identical to AH=F9h
  31279. SeeAlso: AH=EAh"DoubleDOS",AH=EBh"DoubleDOS",AH=F9h"DoubleDOS"
  31280. ----------21E900-----------------------------
  31281. INT 21 - Novell NetWare - DIRECTORY SERVICES - GET DIRECTORY HANDLE
  31282.     AX = E900h
  31283.     DX = drive number to check (0 = A:, ..., 25 = Z:, 26 ... 31)
  31284. Return: AL = directory handle
  31285.     AH = flags (drive not mapped if none set)
  31286.         bit 0: permanent handle
  31287.         bit 1: temporary handle
  31288.         bit 7: mapped to local drive
  31289. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  31290.       Alloy NTNX
  31291. SeeAlso: AH=E2h/SF=00h,AH=E2h/SF=01h,AH=E2h/SF=0Ah
  31292. ----------21E905-----------------------------
  31293. INT 21 - Novell NetWare shell 3.01 - MAP A FAKE ROOT DIRECTORY
  31294.     AX = E905h
  31295.     BL = drive number (0=default, 1=A:, ...)
  31296.     DS:DX -> ASCIZ path for fake root (may include server name or be empty)
  31297. Return: CF set on error
  31298.         AL = error code (03h,0Fh,11h) (see AH=59h)
  31299.     CF clear if successful
  31300. Note:    if drive is not currently mapped, a drive mapping will be created
  31301. SeeAlso: AX=E906h
  31302. ----------21E906-----------------------------
  31303. INT 21 - Novell NetWare shell 3.01 - DELETE FAKE ROOT DIRECTORY
  31304.     AX = E906h
  31305.     BL = drive number (0=default, 1=A:, ...)
  31306. Note:    drive remains mapped
  31307. SeeAlso: AX=E905h
  31308. ----------21E907-----------------------------
  31309. INT 21 - Novell NetWare shell 3.01 - GET RELATIVE DRIVE DEPTH
  31310.     AX = E907h
  31311.     BL = drive number (0=default, 1=A:, ...)
  31312. Return: AL = number of directories below the fake root
  31313.         FFh if no fake root assigned
  31314. SeeAlso: AX=E905h
  31315. ----------21E908BL00-------------------------
  31316. INT 21 - Novell NetWare shell 3.01 - SET SHOW DOTS
  31317.     AX = E908h
  31318.     BL = 00h    don't return '.' or '..' during directory scans
  31319.        = nonzero    directory scans will return '.' or '..' entries
  31320. Return: BL = previous show-dots setting
  31321. ----------21EA-------------------------------
  31322. INT 21 - Novell NetWare 4.6, Alloy NTNX - RETURN SHELL VERSION
  31323.     AH = EAh
  31324.     AL = return version environment string
  31325.         00h        don't return string
  31326.         nonzero    return string in 40-byte buffer pointed to by ES:DI
  31327.         Return: buffer filled with three null-terminated entries:
  31328.             major operating system
  31329.             version
  31330.             hardware type
  31331. Return: AH = operating system (00h = MSDOS)
  31332.     AL = hardware type
  31333.         00h IBM PC
  31334.         01h Victor 9000
  31335.     BH = major shell version
  31336.     BL = minor shell version
  31337.     CH = (v3.01+) shell type
  31338.         00h conventional memory
  31339.         01h expanded memory
  31340.         02h extended memory
  31341.     CL = shell revision number
  31342. ----------21EA-------------------------------
  31343. INT 21 - DoubleDOS - TURN OFF TASK SWITCHING
  31344.     AH = EAh
  31345. Return: task switching turned off
  31346. SeeAlso: AH=E9h"DoubleDOS",AH=EBh"DoubleDOS",AH=FAh"DoubleDOS"
  31347. SeeAlso: INT FA"DoubleDOS"
  31348. ----------21EA-------------------------------
  31349. INT 21 - OS/286, OS/386 - ALLOCATE HUGE SEGMENT
  31350.     AH = EAh
  31351.     ???
  31352. Return: ???
  31353. Note:    protected mode only???
  31354. SeeAlso: AH=E7h"OS/286",AH=E8h"OS/286",AH=E9h"OS/286"
  31355. ----------21EB-------------------------------
  31356. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOG FILE
  31357.     AH = EBh
  31358.     DS:DX -> ASCIZ filename
  31359.     if function C6h lock mode 01h:
  31360.         AL = flags
  31361.         00h log file only
  31362.         01h lock as well as log file
  31363.             BP = lock timeout in timer ticks (1/18 second)
  31364.             0000h = don't wait if file already locked
  31365. Return: AL = error code
  31366.         00h successful
  31367.         96h no dynamic memory for file
  31368.         FEh timed out
  31369.         FFh failed
  31370. Desc:    add the location and size of the specified file to the log table and
  31371.       optionally lock the file
  31372. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  31373.       Alloy NTNX
  31374. SeeAlso: AH=BCh"NetWare",AH=CAh,AH=D0h,AH=ECh"NetWare",AH=EDh"NetWare"
  31375. ----------21EB-------------------------------
  31376. INT 21 - DoubleDOS - TURN ON TASK SWITCHING
  31377.     AH = EBh
  31378. Return: task switching turned on
  31379. SeeAlso: AH=E9h"DoubleDOS",AH=EAh"DoubleDOS",AH=FBh"DoubleDOS"
  31380. SeeAlso: INT FB"DoubleDOS"
  31381. ----------21EB00-----------------------------
  31382. INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY LINEAR ADDRESS
  31383.     AX = EB00h
  31384.     ???
  31385. Return: ???
  31386. Note:    protected mode only???
  31387. SeeAlso: AX=EB02h,AX=EB04h,INT 31/AX=0506h
  31388. ----------21EB02-----------------------------
  31389. INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 16-BIT SEGMENT:OFFSET
  31390.     AX = EB02h
  31391.     ???
  31392. Return: ???
  31393. Note:    protected mode only???
  31394. SeeAlso: AX=EB00h,AX=EB04h
  31395. ----------21EB03-----------------------------
  31396. INT 21 - OS/386 VMM - FREE MAPPED PAGES
  31397.     AX = EB03h
  31398.     ???
  31399. Return: ???
  31400. Note:    protected mode only???
  31401. SeeAlso: AX=EB05h,INT 31/AX=0801h
  31402. ----------21EB04-----------------------------
  31403. INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 32-BIT SEGMENT:OFFSET
  31404.     AX = EB04h
  31405.     ???
  31406. Return: ???
  31407. Note:    protected mode only???
  31408. SeeAlso: AX=EB00h,AX=EB02h
  31409. ----------21EB05-----------------------------
  31410. INT 21 - OS/386 VMM - MAP PAGES
  31411.     AX = EB05h
  31412.     ???
  31413. Return: ???
  31414. Note:    protected mode only???
  31415. SeeAlso: AX=EB03h,INT 31/AX=0800h
  31416. ----------21EB06-----------------------------
  31417. INT 21 - OS/386 VMM - LOCK PAGES IN MEMORY
  31418.     AX = EB06h
  31419.     ???
  31420. Return: ???
  31421. Note:    protected mode only???
  31422. SeeAlso: AX=EB07h,INT 31/AX=0600h
  31423. ----------21EB07-----------------------------
  31424. INT 21 - OS/386 VMM - UNLOCK MEMORY PAGES
  31425.     AX = EB07h
  31426.     ???
  31427. Return: ???
  31428. Note:    protected mode only???
  31429. SeeAlso: AX=EB06h,INT 31/AX=0601h
  31430. ----------21EC-------------------------------
  31431. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE FILE
  31432.     AH = ECh
  31433.     DS:DX -> ASCIZ filename
  31434. Return: AL = status
  31435.         00h successful
  31436.         FFh file not found
  31437. Desc:    unlock the specified file but retain it in the log table
  31438. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  31439.       Alloy NTNX
  31440. SeeAlso: AH=CDh,AH=EBh"NetWare",AH=EDh"NetWare"
  31441. ----------21EC-------------------------------
  31442. INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS
  31443.     AH = ECh
  31444. Return: ES = segment of virtual screen
  31445. Notes:    screen address can change if task-switching is on!!
  31446.     identical to AH=FCh
  31447. SeeAlso: INT 10/AH=FEh,AH=FCh"DoubleDOS",INT FC"DoubleDOS"
  31448. ----------21EC-------------------------------
  31449. INT 21 - OS/286, OS/386 - BLOCK TRANSFER
  31450.     AH = ECh
  31451.     ???
  31452. Return: ???
  31453. ----------21EC59-----------------------------
  31454. INT 21 - VIRUS - "Terror" - INSTALLATION CHECK
  31455.     AX = EC59h
  31456. Return: BP = EC59h if resident
  31457. SeeAlso: AH=E7h"VIRUS",AH=EEh"VIRUS"
  31458. ----------21ED-------------------------------
  31459. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR FILE
  31460.     AH = EDh
  31461.     DS:DX -> ASCIZ filename
  31462. Return: AL = status
  31463.         00h successful
  31464.         FFh no files found
  31465. Desc:    unlock the file and remove it from the log table
  31466. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  31467.       Alloy NTNX
  31468. SeeAlso: AH=CBh"NetWare",AH=CEh,AH=CFh,AH=EBh"NetWare",AH=ECh"NetWare"
  31469. ----------21ED-------------------------------
  31470. INT 21 - OS/286, OS/386 - GET SEGMENT OR WINDOW DESCRIPTOR
  31471.     AH = EDh
  31472.     ???
  31473. Return: ???
  31474. Note:    protected mode only???
  31475. SeeAlso: AH=E9h"OS/286"
  31476. ----------21EE-------------------------------
  31477. INT 21 - Novell NetWare - CONNECTION SERVICES - GET PHYSICAL STATION ADDRESS
  31478.     AH = EEh
  31479. Return: CX:BX:AX = six-byte physical address
  31480. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  31481.       Alloy NTNX
  31482. SeeAlso: AH=E3h/SF=13h
  31483. ----------21EE-------------------------------
  31484. INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS
  31485.     AH = EEh
  31486.     AL = number of 55ms time slices to give away
  31487. Return: returns after giving away time slices
  31488. SeeAlso: AH=FEh"DoubleDOS",INT FE"DoubleDOS"
  31489. ----------21EE-------------------------------
  31490. INT 21 - VIRUS - "Jerusalem-G", "Pregnant" - INSTALLATION CHECK
  31491.     AH = EEh
  31492. Return: AX = 0300h if "Jerusalem-G" resident
  31493.     AL = 05h if "Pregnant" resident
  31494. SeeAlso: AH=DDh"VIRUS",AX=EC59h,AH=F0h"VIRUS"
  31495. ----------21EF00-----------------------------
  31496. INT 21 - Novell NetWare - WORKSTATION - GET DRIVE HANDLE TABLE
  31497.     AX = EF00h
  31498. Return: ES:SI -> network shell's 32-byte drive handle table
  31499.     AX = 0000h
  31500. Notes:    this function is supported by Advanced NetWare 1.0+
  31501.     each byte in the drive handle table contains the directory handle for
  31502.       the corresponding drive, or 00h if not mapped to a directory
  31503. SeeAlso: AX=EF01h,AX=EF02h,AX=EF03h,AX=EF04h
  31504. ----------21EF01-----------------------------
  31505. INT 21 - Novell NetWare - WORKSTATION - GET DRIVE FLAG TABLE
  31506.     AX = EF01h
  31507. Return: ES:SI -> network shell's 32-byte drive flag table (see below)
  31508.     AX = 0000h
  31509. Notes:    this function is supported by Advanced NetWare 1.0+
  31510.     each byte in the drive flag table corresponds to a drive
  31511. SeeAlso: AX=EF00h,AX=EF02h,AX=EF03h
  31512.  
  31513. Values in drive flag table:
  31514.  00h    drive is not mapped
  31515.  01h    permanent network drive
  31516.  02h    temporary network drive
  31517.  80h    mapped to local drive
  31518.  81h    local drive used as permanent network drive
  31519.  82h    local drive used as temporary network drive
  31520. ----------21EF02-----------------------------
  31521. INT 21 - Novell NetWare - WORKSTATION - GET DRIVE CONNECTION ID
  31522.     AX = EF02h
  31523. Return: ES:SI -> network shell's 32-byte drive conection ID table
  31524.     AX = 0000h
  31525. Notes:    this function is supported by Advanced NetWare 1.0+
  31526.     each byte in the connection ID table corresponds to a drive and
  31527.       contains either the connection ID (1-8) of the server for that drive
  31528.       or 00h if the drive is not mapped to a file server
  31529. SeeAlso: AX=EF01h,AX=EF03h,AX=F002h
  31530. ----------21EF03-----------------------------
  31531. INT 21 - Novell NetWare - WORKSTATION - GET CONNECTION ID
  31532.     AX = EF03h
  31533. Return: ES:SI -> network shell's connection ID table (see below)
  31534.     AX = 0000h
  31535. Note:    this function is supported by Advanced NetWare 1.0+
  31536. SeeAlso: AX=EF00h,AX=EF02h,AX=EF04h,AX=F002h
  31537.  
  31538. Format of connection ID table [one entry of eight-element array]:
  31539. Offset    Size    Description
  31540.  00h    BYTE    in use flag
  31541.         E0h AES temporary
  31542.         F8h IPX in critical section
  31543.         FAh processing
  31544.         FBh holding
  31545.         FCh AES waiting
  31546.         FDh waiting
  31547.         FEh receiving
  31548.         FFh sending
  31549.  01h    BYTE    order number assigned to server (1-8)
  31550.  02h    DWORD    file server's network address (big-endian)
  31551.  06h  6 BYTEs    file server's node address (big-endian)
  31552.  0Ch    WORD    socket number (big-endian)
  31553.  0Eh    WORD    base receive timeout in clock ticks (big-endian)
  31554.  10h  6 BYTEs    preferred routing node (big-endian)
  31555.  16h    BYTE    packet sequence number
  31556.  17h    BYTE    connection number (FFh = no connection)
  31557.  18h    BYTE    connection status (00h if active)
  31558.  19h    WORD    maximum receive timeout in clock ticks (big-endian)
  31559.  1Bh  5 BYTEs    reserved
  31560. ----------21EF04-----------------------------
  31561. INT 21 - Novell NetWare - WORKSTATION - GET FILE SERVER NAME
  31562.     AX = EF04h
  31563. Return: ES:SI -> network shell's file server name table (see below)
  31564.     AX = 0000h
  31565. Notes:    this function is supported by Advanced NetWare 1.0+
  31566.     the name table consists of eight 48-byte entries, each consisting of
  31567.       an ASCIZ server name for the corresponding entry in the connection
  31568.       ID table
  31569. SeeAlso: AX=EF03h
  31570. ----------21F0-------------------------------
  31571. INT 21 - DoubleDOS - MENU CONTROL
  31572.     AH = F0h
  31573.     AL = subfunction
  31574.         01h exchange tasks
  31575.         73h resume invisible job if suspended
  31576.         74h kill other job
  31577.         75h suspend invisible job
  31578. Note:    identical to AH=E0h
  31579. SeeAlso: AH=E0h"DoubleDOS"
  31580. ----------21F0-------------------------------
  31581. INT 21 - VIRUS - "Frere Jacques" - INSTALLATION CHECK
  31582.     AH = F0h
  31583. Return: AX = 0300h if resident
  31584. SeeAlso: AH=EEh"VIRUS",AH=F1h"VIRUS"
  31585. ----------21F000-----------------------------
  31586. INT 21 - Novell NetWare - WORKSTATION - SET PREFERRED CONNECTION ID
  31587.     AX = F000h
  31588.     DL = connection ID of prefered file server (1-8) or 00h for none
  31589. Notes:    this function is supported by Advanced NetWare 1.0+
  31590.     the preferred connection ID is set to 00h by the shell on EOJ
  31591. SeeAlso: AH=D6h,AX=EF03h,AX=F001h,AX=F002h,AX=F005h
  31592. ----------21F001-----------------------------
  31593. INT 21 - Novell NetWare - WORKSTATION - GET PREFERRED CONNECTION ID
  31594.     AX = F001h
  31595. Return: AL = connection ID of preferred file server (1-8), 00h if not set
  31596. Notes:    this function is supported by Advanced NetWare 1.0+
  31597.     the preferred connection ID is set to 00h by the shell on EOJ
  31598. SeeAlso: AH=D6h,AX=EF03h,AX=F000h,AX=F002h,AX=F005h
  31599. ----------21F002-----------------------------
  31600. INT 21 - Novell NetWare - WORKSTATION - GET DEFAULT CONNECTION ID
  31601.     AX = F002h
  31602. Return: AL = connection ID of current default file server (1-8) (see AX=EF03h)
  31603. Note:    this function is supported by Advanced NetWare 1.0+
  31604. SeeAlso: AX=EF03h,AX=F000h,AX=F004h
  31605. ----------21F003-----------------------------
  31606. INT 21 - Novell NetWare - PRINT SERVICES - GET LPT CAPTURE STATUS
  31607.     AX = F003h
  31608. Return: AH = status
  31609.         00h not active
  31610.         FFh active
  31611.         AL = connection ID (01h-08h)
  31612. Note:    this function is supported by Advanced NetWare 1.0+
  31613. SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=00h,AH=DFh/DL=04h
  31614. ----------21F004-----------------------------
  31615. INT 21 - Novell NetWare - WORKSTATION - SET PRIMARY CONNECTION ID
  31616.     AX = F004h
  31617.     DL = connection ID of primary file server (1-8) or 00h for none
  31618. Note:    this function is supported by Advanced NetWare 2.0+
  31619. SeeAlso: AH=D6h,AX=EF03h,AX=F000h,AX=F002h,AX=F005h
  31620. ----------21F005-----------------------------
  31621. INT 21 - Novell NetWare - WORKSTATION - GET PRIMARY CONNECTION ID
  31622.     AX = F005h
  31623. Return: AL = connection ID of primary file server (1-8), 00h if not set
  31624. Notes:    this function is supported by Advanced NetWare 2.0+
  31625.     by default, the primary file server is the one from which the login
  31626.       script executed; it is set to 00h if the workstation is not logged in
  31627.       and when it detaches from its primary file server
  31628. SeeAlso: AH=D6h,AX=EF03h,AX=F000h,AX=F002h,AX=F004h
  31629. ----------21F1-------------------------------
  31630. INT 21 - Novell NetWare - CONNECTION SERVICES - FILE SERVER CONNECTION
  31631.     AH = F1h
  31632.     AL = subfunction
  31633.         00h attach to file server
  31634.         DL = preferred file server (01h-08h)
  31635.         01h detach from file server
  31636.         DL = connection ID
  31637.         02h logout from file server
  31638.         DL = connection ID
  31639. Return: AL = status
  31640.         00h successful
  31641.         F8h already attached to server
  31642.         F9h connection table full
  31643.         FAh no more server slots
  31644.         FCh unknown file server
  31645.         FEh server bindery locked
  31646.         FFh no response from server, or connection does not exist
  31647. Note:    these functions are supported by Advanced NetWare 1.0+
  31648. SeeAlso: AH=D7h"NetWare",AH=E3h/SF=14h
  31649. ----------21F1-------------------------------
  31650. INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB
  31651.     AH = F1h
  31652. SeeAlso: AH=E1h"DoubleDOS",AH=F2h"DoubleDOS",AH=F3h"DoubleDOS"
  31653. SeeAlso: AH=F8h"DoubleDOS"
  31654. ----------21F1-------------------------------
  31655. INT 21 - VIRUS - "F1-337" - ???
  31656.     AH = F1h
  31657.     ???
  31658. Return: ???
  31659. SeeAlso: AH=F0h"VIRUS",AX=F2AAh
  31660. ----------21F2-------------------------------
  31661. INT 21 - Novell NetWare v3.01+ shell interface - MULTIPLEXOR
  31662.     AH = F2h
  31663.     AL = function
  31664.         15h broadcast services (see AH=E1h"NetWare")
  31665.         16h file/directory services (see AH=E2h"NetWare")
  31666.         17h connection control (see AH=E3h"NetWare")
  31667.     CX = length of request buffer in bytes
  31668.     DX = length of reply buffer in bytes
  31669.     DS:SI -> request buffer (contents vary by function)
  31670.     ES:DI -> reply buffer (contents vary by function)
  31671. Return: AL = status
  31672.     reply buffer filled as appropriate for function
  31673. Note:    this is a multiplexor providing a "raw" interface to the underlying
  31674.       Netware Core Protocol.  Many functions which were accessed via a
  31675.       separate AH function in older versions can also be accessed here
  31676.       (the function number in AL is added to CCh to get the old function
  31677.       number which is desired), but some NetWare 3.x calls appear to be
  31678.       available only here.
  31679. SeeAlso: AX=F244h
  31680. ----------21F2-------------------------------
  31681. INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB
  31682.     AH = F2h
  31683.     AL = character
  31684. Return: AL = 00h successful
  31685.          01h buffer full (128 characters)
  31686. SeeAlso: AH=E2h"DoubleDOS",AH=F1h"DoubleDOS",AH=F3h"DoubleDOS"
  31687. SeeAlso: AH=F8h"DoubleDOS"
  31688. ----------21F244-----------------------------
  31689. INT 21 - Novell NetWare - FILE SERVICES - ERASE FILES
  31690.     AX = F244h
  31691.     DS:SI -> request buffer (see below)
  31692.     ES:DI -> reply buffer (ignored???)
  31693. Return: AL = status
  31694.         00h successful
  31695.         98h nonexistent volume
  31696.         9Bh invaid directory handle
  31697.         9Ch invalid path
  31698.         FFh no files found
  31699. Note:    this function only marks the file for deletion; use AH=E2h/SF=CEh to
  31700.       actually delete all marked files
  31701. SeeAlso: AH=13h,AH=41h,AH=E2h/SF=0Bh,AH=E3h/SF=CEh
  31702.  
  31703. Format of request buffer:
  31704. Offset    Size    Description
  31705.  00h    BYTE    directory handle
  31706.  01h    BYTE    search attributes (see AX=4301h)
  31707.  02h    BYTE    length of filespec
  31708.  03h  N BYTEs    ASCIZ filespec (may include wildcards)
  31709. ----------21F2AA-----------------------------
  31710. INT 21 - VIRUS - "PcVrsDs" - INSTALLATION CHECK
  31711.     AX = F2AAh
  31712. Return: AH = AAh if resident
  31713. SeeAlso: AH=F1h"VIRUS",AH=F3h"VIRUS"
  31714. ----------21F3-------------------------------
  31715. INT 21 - Novell NetWare - FILE SERVICES - FILE SERVER FILE COPY
  31716.     AH = F3h
  31717.     ES:DI -> request buffer (see below)
  31718. Return: AL = status/error code
  31719.     CX:DX = number of bytes copied
  31720. Notes:    this function is supported by Advanced NetWare 2.0+
  31721.     both source and destination must be on the same file server
  31722. SeeAlso: AH=3Ch,AH=3Fh
  31723.  
  31724. Format of request buffer:
  31725. Offset    Size    Description
  31726.  00h    WORD    source file handle (as returned by AH=3Ch or AH=3Dh)
  31727.  02h    WORD    destination file handle
  31728.  04h    DWORD    starting offset in source
  31729.  08h    DWORD    starting offset in destination
  31730.  0Ch    DWORD    number of bytes to copy
  31731. ----------21F3-------------------------------
  31732. INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB
  31733.     AH = F3h
  31734.     AL = character
  31735. Return: AL = 00h successful
  31736.          01h buffer full (128 characters)
  31737. SeeAlso: AH=E3h"DoubleDOS",AH=F1h"DoubleDOS",AH=F2h"DoubleDOS"
  31738. SeeAlso: AH=F8h"DoubleDOS"
  31739. ----------21F3-------------------------------
  31740. INT 21 - VIRUS - "Carfield" - INSTALLATION CHECK
  31741.     AH = F3h
  31742. Return: AX = 0400h if resident
  31743. SeeAlso: AH=D5h"Carfield",AX=F2AAh,AH=F7h"VIRUS"
  31744. ----------21F400-----------------------------
  31745. INT 21 - DoubleDOS - INSTALLATION CHECK/PROGRAM STATUS
  31746.     AX = F400h
  31747. Return: AL = 00h if DoubleDOS not present
  31748.        = 01h if running in visible DoubleDOS partition
  31749.        = 02h if running in the invisible DoubleDOS partition
  31750. SeeAlso: AX=E400h,AH=F5h"DoubleDOS"
  31751. ----------21F5-------------------------------
  31752. INT 21 - DoubleDOS - OTHER PROGRAM STATUS
  31753.     AH = F5h
  31754. Return: AL = 00h no program in other partition
  31755.        = 01h program in other partition is running
  31756.        = 02h program in other partition is suspended
  31757. SeeAlso: AH=E5h"DoubleDOS",AX=F400h"DoubleDOS"
  31758. ----------21F7-------------------------------
  31759. INT 21 - VIRUS - "GP1" - INSTALLATION CHECK
  31760.     AH = F7h
  31761. Return: AX = 0300h if resident
  31762. SeeAlso: AH=F0h"VIRUS",AH=FBh"VIRUS"
  31763. ----------21F8-------------------------------
  31764. INT 21 - DOS v2.11 - SET OEM INT 21 HANDLER
  31765.     AH = F8h
  31766.     DS:DX -> OEM INT 21 handler for functions F9h to FFh
  31767.          FFFFh:FFFFh disables OEM handler
  31768. Notes:    this function is supported by Toshiba T1000 ROM MSDOS 2.11
  31769.     calls to AH=F9h through AH=FFH will return AL=00h if no handler set
  31770.     handler is called with all registers exactly as set by caller, and
  31771.       should exit with IRET
  31772. SeeAlso: AH=F9h"OEM"
  31773. ----------21F8-------------------------------
  31774. INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS
  31775.     AH = F8h
  31776.     AL = 00h set flags for this program
  31777.        = 01h set flags for other program
  31778.     DX = keyboard control flags (bit set enables, cleared disables)
  31779.         bit 0: menu
  31780.         bit 1: exchange
  31781.         bit 2: entire keyboard enable/disable
  31782.         bit 3: Ctrl-C
  31783.         bit 4: Ctrl-PrtSc
  31784.         bit 5: Alt/Erase
  31785.         bit 6: Ctrl-Break
  31786.         bit 7: Ctrl-NumLock
  31787.         bit 8: shift-PrtSc
  31788.         bit 9-13: undefined
  31789.         bit 14: cancel key (clear keyboard buffer)
  31790.         bit 15: suspend key
  31791. Return: DX = previous flags
  31792. Notes:    disabling Ctrl-PrtSc will allow the program to intercept the keystroke;
  31793.       disabling any of the other keystrokes disables them completely
  31794.     identical to AH=E8h
  31795. SeeAlso: AH=E8h"DoubleDOS",AH=F1h"DoubleDOS",AH=F2h"DoubleDOS"
  31796. SeeAlso: AH=F3h"DoubleDOS"
  31797. ----------21F9-------------------------------
  31798. INT 21 - DOS v2.11 - OEM FUNCTION
  31799.     AH = F9h
  31800. SeeAlso: AH=F8h"OEM",AH=FAh"OEM"
  31801. ----------21F9-------------------------------
  31802. INT 21 - DoubleDOS - SET TIMESHARING PRIORITY
  31803.     AH = F9h
  31804.     AL = 00h visible program gets 70%, invisible gets 30% (default)
  31805.        = 01h visible program gets 50%, invisible gets 50%
  31806.        = 02h visible program gets 30%, invisible gets 70%
  31807.        = 03h Top program gets 70%, bottom program gets 30%
  31808.        = 04h Top program gets 30%, bottom program gets 70%
  31809.        = 05h get current priority
  31810.         Return: AL = priority setting
  31811. Note:    identical to AH=E9h
  31812. SeeAlso: AH=E9h"DoubleDOS",AH=FAh"DoubleDOS",AH=FBh"DoubleDOS"
  31813. ----------21FA-------------------------------
  31814. INT 21 - DOS v2.11 - OEM FUNCTION
  31815.     AH = FAh
  31816. SeeAlso: AH=F8h"OEM",AH=F9h"OEM",AH=FBh"OEM"
  31817. ----------21FA-------------------------------
  31818. INT 21 - DoubleDOS - TURN OFF TASK SWITCHING
  31819.     AH = FAh
  31820. Return: task switching turned off
  31821. SeeAlso: AH=EAh"DoubleDOS",AH=F9h"DoubleDOS",AH=FBh"DoubleDOS"
  31822. SeeAlso: INT FA"DoubleDOS"
  31823. ----------21FA--DX5945-----------------------
  31824. INT 21 U - PC Tools v7+ VDEFEND, VSAFE, VWATCH - API
  31825.     AH = FAh
  31826.     DX = 5945h
  31827.     AL = function (00h-02h for VDEFEND, 00h-07h for VSAFE and VWATCH)
  31828. Return: varies by function
  31829. Note:    this API is identical to the API on INT 13/AH=FAh and INT 16/AH=FAh,
  31830.       so it is listed in its entirety only under INT 16/AX=FA00h and
  31831.       following
  31832. SeeAlso: INT 13/AX=FA00h,INT 16/AX=FA00h
  31833. ----------21FB-------------------------------
  31834. INT 21 - DOS v2.11 - OEM FUNCTION
  31835.     AH = FBh
  31836. SeeAlso: AH=F8h"OEM",AH=FAh"OEM",AH=FCh"OEM"
  31837. ----------21FB-------------------------------
  31838. INT 21 - DoubleDOS - TURN ON TASK SWITCHING
  31839.     AH = FBh
  31840. Return: task switching turned on
  31841. SeeAlso: AH=EBh"DoubleDOS",AH=F9h"DoubleDOS",AH=FAh"DoubleDOS"
  31842. SeeAlso: INT FB"DoubleDOS"
  31843. ----------21FB-------------------------------
  31844. INT 21 - VIRUS - "Cinderella" - INSTALLATION CHECK
  31845.     AH = FBh
  31846. Return: AH = 00h if resident
  31847. SeeAlso: AH=F7h"VIRUS",AX=FB0Ah
  31848. ----------21FB0A-----------------------------
  31849. INT 21 - VIRUS - "dBASE" - INSTALLATION CHECK
  31850.     AX = FB0Ah
  31851. Return: AX = 0AFBh if resident
  31852. SeeAlso: AH=FBh"VIRUS",AH=FCh"VIRUS"
  31853. ----------21FC-------------------------------
  31854. INT 21 - DOS v2.11 - OEM FUNCTION
  31855.     AH = FCh
  31856. SeeAlso: AH=F8h"OEM",AH=FBh"OEM",AH=FDh"OEM"
  31857. ----------21FC-------------------------------
  31858. INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS
  31859.     AH = FCh
  31860. Return: ES = segment of virtual screen
  31861. Notes:    screen address can change if task-switching is on!!
  31862.     identical to AH=ECh
  31863. SeeAlso: AH=ECh"DoubleDOS",INT FC"DoubleDOS"
  31864. ----------21FC-------------------------------
  31865. INT 21 - VIRUS - "Troi" - INSTALLATION CHECK
  31866.     AH = FCh
  31867. Return: AL = A5h if resident
  31868. SeeAlso: AH=FB0Ah"VIRUS",AH=FDh"VIRUS"
  31869. ----------21FD-------------------------------
  31870. INT 21 - DOS v2.11 - OEM FUNCTION
  31871.     AH = FDh
  31872. SeeAlso: AH=F8h"OEM",AH=FCh"OEM",AH=FEh"DOS"
  31873. ----------21FD-------------------------------
  31874. INT 21 - VIRUS - "Border" - INSTALLATION CHECK
  31875.     AH = FDh
  31876. Return: AH = 13h if resident
  31877. SeeAlso: AH=FCh"VIRUS",AH=FEh"VIRUS"
  31878. ----------21FE-------------------------------
  31879. INT 21 - DOS v2.11 - OEM FUNCTION
  31880.     AH = FEh
  31881. SeeAlso: AH=F8h"OEM",AH=FDh"OEM",AH=FFh"OEM"
  31882. ----------21FE-------------------------------
  31883. INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS
  31884.     AH = FEh
  31885.     AL = number of 55ms time slices to give away
  31886. Return: returns after giving away time slices
  31887. SeeAlso: AH=EEh"DoubleDOS",INT FE"DoubleDOS"
  31888. ----------21FE-------------------------------
  31889. INT 21 - VIRUS - "483" - INSTALLATION CHECK
  31890.     AH = FEh
  31891. Return: AH = 00h if resident
  31892. SeeAlso: AH=FDh"VIRUS",AX=FE01h
  31893. ----------21FE01-----------------------------
  31894. INT 21 - VIRUS - "Flip" - INSTALLATION CHECK
  31895.     AX = FE01h
  31896. Return: AX = 01FEh if resident
  31897. SeeAlso: AH=FEh"VIRUS",AX=FE02h
  31898. ----------21FE02-----------------------------
  31899. INT 21 - VIRUS - "2468"/"Tequila" - INSTALLATION CHECK
  31900.     AX = FE02h
  31901. Return: AX = 01FDh if resident
  31902. SeeAlso: AX=FE01h,AX=FEDCh"VIRUS"
  31903. ----------21FEDC-----------------------------
  31904. INT 21 - PCMag PCMANAGE/DCOMPRES - INSTALLATION CHECK
  31905.     AX = FEDCh
  31906. Return: AX = CDEFh if installed
  31907. SeeAlso: AH=DCh
  31908. ----------21FEDC-----------------------------
  31909. INT 21 - VIRUS - "Black Monday" - INSTALLATION CHECK
  31910.     AX = FEDCh
  31911. Return: AL = DCh if resident
  31912. SeeAlso: AX=FE02h,AH=FFh"VIRUS"
  31913. ----------21FF-------------------------------
  31914. INT 21 - DOS v2.11 - OEM FUNCTION
  31915.     AH = FFh
  31916. SeeAlso: AH=F8h"OEM",AH=FEh"OEM"
  31917. ----------21FF-------------------------------
  31918. INT 21 - CED (Command EDitor) - INSTALLABLE COMMANDS
  31919.     AH = FFH
  31920.     AL = subfunction
  31921.         00h add installable command
  31922.            BL = mode - bit 0 = 1 callable from DOS prompt
  31923.                bit 1 = 1 callable from application
  31924.            DS:SI -> CR-terminated command name
  31925.            ES:DI -> FAR routine entry point
  31926.         01h remove installable command
  31927.            DS:SI -> CR-terminated command name
  31928.         02h reserved, may be used to test for CED installation
  31929. Return: CF clear if successful
  31930.     CF set on error
  31931.         AX = 01h invalid function
  31932.          02h command not found (subfunction 01h only)
  31933.          08h insufficient memory (subfunction 00h only)
  31934.          0Eh bad data (subfunction 00h only)
  31935.     AH = FFh if CED not installed
  31936. Note:    CED is a shareware DOS command-line enhancer by Christopher J. Dunford
  31937. SeeAlso: AX=0A00h
  31938. ----------21FF-------------------------------
  31939. INT 21 - DJ GO32.EXE 80386+ DOS extender - DOS EXTENSIONS
  31940.     AH = FFh
  31941.     AL = function
  31942.         01h create file
  31943.         02h open file
  31944.         03h get file statistics
  31945.         04h get time of day
  31946.         05h set time of day
  31947.         06h stat
  31948.         07h system
  31949. SeeAlso: INT 10/AH=FFh"GO32"
  31950. ----------21FF-------------------------------
  31951. INT 21 - DOSED.COM - INSTALLATION CHECK
  31952.     AH = FFh
  31953.     DS:SI -> "DOSED"
  31954.     ES = 0000h
  31955. Return: ES:DI -> "DOSED" if installed
  31956. Note:    DOSED is a free DOS commandline editor/history buffer by Sverre H.
  31957.       Huseby
  31958. ----------21FF-------------------------------
  31959. INT 21 - Topware Network Operating System - ???
  31960.     AH = FFh
  31961.     ???
  31962. Return: ???
  31963. SeeAlso: INT 2F/AX=FF00h
  31964. ----------21FF-------------------------------
  31965. INT 21 - VIRUS - "Sunday", "Tumen 0.5", "Hero" - INSTALLATION CHECK
  31966.     AH = FFh
  31967. Return: AH = 00h if "Tumen 0.5" or "Hero" resident
  31968.     AX = 0400h if "Sunday" resident
  31969. SeeAlso: AX=FEDCh"VIRUS",AX=FF0Fh
  31970. ----------21FF-------------------------------
  31971. INT 21 UP - Rational Systems DOS/4GW - API
  31972.     AH = FFh
  31973.     DH = function (00h-17h) (see also separate entries below)
  31974.     DL = subfunction or argument
  31975. Return: CF clear if valid function number
  31976.         AX = status???
  31977.     CF set if invalid function
  31978. SeeAlso: INT 15/AX=BFDCh
  31979. ----------21FF--DH02-------------------------
  31980. INT 21 UP - Rational Systems DOS/4GW - SET ???
  31981.     AH = FFh
  31982.     DH = 02h
  31983.     DL = ???
  31984. Return: CF clear
  31985. ----------21FF--DH05-------------------------
  31986. INT 21 UP - Rational Systems DOS/4GW - ???
  31987.     AH = FFh
  31988.     DH = 05h
  31989.     BX = ???
  31990. Return: ???
  31991. ----------21FF--DH06-------------------------
  31992. INT 21 UP - Rational Systems DOS/4GW - ???
  31993.     AH = FFh
  31994.     DH = 06h
  31995.     BX = ???
  31996. Return: ???
  31997. ----------21FF--DH07-------------------------
  31998. INT 21 UP - Rational Systems DOS/4GW - ???
  31999.     AH = FFh
  32000.     DH = 07h
  32001.     BX = ???
  32002. Return: ???
  32003. ----------21FF--DH08-------------------------
  32004. INT 21 UP - Rational Systems DOS/4GW - ???
  32005.     AH = FFh
  32006.     DH = 08h
  32007.     BX = ???
  32008.     CX = ???
  32009.     ES = ???
  32010. Return: ???
  32011. ----------21FF--DH09-------------------------
  32012. INT 21 UP - Rational Systems DOS/4GW - GET ???
  32013.     AH = FFh
  32014.     DH = 09h
  32015. Return: ES:BX -> ???
  32016. ----------21FF--DH0A-------------------------
  32017. INT 21 UP - Rational Systems DOS/4GW - ???
  32018.     AH = FFh
  32019.     DH = 0Ah
  32020.     AL = ???
  32021.     BX = ???
  32022.     CX = ???
  32023. Return: ES = ??? or 0000h
  32024. ----------21FF--DH0B-------------------------
  32025. INT 21 UP - Rational Systems DOS/4GW - ???
  32026.     AH = FFh
  32027.     DH = 0Bh
  32028.     AL = ???
  32029.     BX = ???
  32030.     CX = ???
  32031. Return: ???
  32032. ----------21FF--DH0C-------------------------
  32033. INT 21 UP - Rational Systems DOS/4GW - GET/SET ???
  32034.     AH = FFh
  32035.     DH = 0Ch
  32036.     DL = ??? (00h or 01h)
  32037. Return: CF clear if successful
  32038.         AL = previous value of ???
  32039.     CF set on error (DL out of range)
  32040.         AX = FFFFh
  32041. ----------21FF--DH0D-------------------------
  32042. INT 21 UP - Rational Systems DOS/4GW - ???
  32043.     AH = FFh
  32044.     DH = 0Dh
  32045.     ???
  32046. Return: ???
  32047. ----------21FF--DH0E-------------------------
  32048. INT 21 UP - Rational Systems DOS/4GW - ???
  32049.     AH = FFh
  32050.     DH = 0Eh
  32051. Return: DX:AX -> XBRK structure (see INT 15/AX=BF02h)
  32052.     BX = ???
  32053.     CX = ???
  32054. SeeAlso: INT 15/AX=BF02h
  32055. ----------21FF--DH0F-------------------------
  32056. INT 21 UP - Rational Systems DOS/4GW - ???
  32057.     AH = FFh
  32058.     DH = 0Fh
  32059.     ???
  32060. Return: ???
  32061. ----------21FF--DH10-------------------------
  32062. INT 21 UP - Rational Systems DOS/4GW - ???
  32063.     AH = FFh
  32064.     DH = 10h
  32065.     AL = ???
  32066.     BX = ???
  32067.     CX = ???
  32068.     DI = ???
  32069.     SI = ???
  32070. Return: ???
  32071. Note:    among other things, frees two memory blocks via INT 21/AH=49h
  32072. ----------21FF--DH11-------------------------
  32073. INT 21 UP - Rational Systems DOS/4GW - NOP
  32074.     AH = FFh
  32075.     DH = 11h
  32076. ----------21FF--DH12-------------------------
  32077. INT 21 UP - Rational Systems DOS/4GW - EXCHANGE ??? POINTERS
  32078.     AH = FFh
  32079.     DH = 12h
  32080.     DS:SI -> new ???
  32081.     ES:DI -> new ???
  32082. Return: DS:SI -> previous ???
  32083.     ES:DI -> previous ???
  32084. ----------21FF--DH13-------------------------
  32085. INT 21 UP - Rational Systems DOS/4GW - ???
  32086.     AH = FFh
  32087.     DH = 13h
  32088.     AL = ???
  32089.     ES = ???
  32090. Return: ???
  32091. ----------21FF--DH14-------------------------
  32092. INT 21 UP - Rational Systems DOS/4GW - ???
  32093.     AH = FFh
  32094.     DH = 14h
  32095.     BX = ???
  32096.     CX = ???
  32097. Return: CF clear
  32098.         AX = ???
  32099.         DX = ???
  32100. ----------21FF--DH15-------------------------
  32101. INT 21 UP - Rational Systems DOS/4GW - GET ??? FUNCTIONS
  32102.     AH = FFh
  32103.     DH = 15h
  32104. Return: CF clear
  32105.         DX:AX -> FAR function for ???
  32106.         CX:BX -> FAR function for ???
  32107.         SI:DI -> FAR function for ???
  32108. ----------21FF--DH16-------------------------
  32109. INT 21 UP - Rational Systems DOS/4GW - GET ???
  32110.     AH = FFh
  32111.     DH = 16h
  32112. Return: AX = ???
  32113. ----------21FF--DH17-------------------------
  32114. INT 21 UP - Rational Systems DOS/4GW - ???
  32115.     AH = FFH
  32116.     DH = 17h
  32117.     AL = ???
  32118.     DL = ???
  32119. Return: ???
  32120. ----------21FF00DX0078-----------------------
  32121. INT 21 - Rational Systems DOS/4G - INSTALLATION CHECK
  32122.     AX = FF00h
  32123.     DX = 0078h
  32124. Return: AL <> 00h if installed
  32125.         GS = segment of kernel if nonzero
  32126. SeeAlso: INT 15/AX=BF02h
  32127. ----------21FF0F-----------------------------
  32128. INT 21 - FLU_SHOT+ v1.83 - INSTALLATION CHECK
  32129.     AX = FF0Fh
  32130. Return: AX = 0101h if resident
  32131. Notes:    FLU_SHOT+ is an antivirus/antitrojan program by Ross M. Greenberg and
  32132.       Software Concepts Design
  32133.     the "PSQR/1720" virus calls this function to determine whether
  32134.       FLU_SHOT+ is present
  32135. SeeAlso: AH=FFh"VIRUS",AX=FF10h
  32136. ----------21FF10-----------------------------
  32137. INT 21 - VIRUS - "Twins" - INSTALLATION CHECK
  32138.     AX = FF10h
  32139. Return: AL = 07h if resident
  32140. SeeAlso: AX=FF0Fh,AX=FFFEh
  32141. ----------21FFFE-----------------------------
  32142. INT 21 - VIRUS - "08/15"/"Many Fingers" - INSTALLATION CHECK
  32143.     AX = FFFEh
  32144. Return: AX = 0815h if resident
  32145. SeeAlso: AX=FF10h,AX=FFFFh
  32146. ----------21FFFF-----------------------------
  32147. INT 21 - VIRUS - "Ontario", "Year 1992"/"B1M92" - INSTALLATION CHECK
  32148.     AX = FFFFh
  32149. Return: AX = 0000h if "Ontario" resident
  32150.     AX = 1992h if "Year 1992"/"B1M92" resident
  32151. SeeAlso: AX=FF0Fh,AX=FFFFh/CX=0000h,INT 6B"VIRUS"
  32152. ----------21FFFFCX0000-----------------------
  32153. INT 21 - VIRUS - "Revenge" - INSTALLATION CHECK
  32154.     AX = FFFFh
  32155.     CX = 0000h
  32156. Return: CX = 0006h if resident
  32157. SeeAlso: AX=FFFFh,INT 6B"VIRUS"
  32158. ----------22---------------------------------
  32159. INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
  32160. Desc:    this vector specifies the address of the routine which is to be given
  32161.       control after a program is terminated; it should never be called
  32162.       directly, since it does not point at an interrupt handler
  32163. Notes:    this vector is restored from the DWORD at offset 0Ah in the PSP during
  32164.       termination, and then a FAR JMP is performed to the address in INT 22
  32165.     normally points at the instruction immediately following INT 21/AH=4Bh
  32166.       call which loaded the current program
  32167. SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
  32168. ---------------------------------------------
  32169. INT 22 - COMTROL HOSTESS i/ISA DEBUGGER - CHANGE FIRMWARE DEBUGGING PORT
  32170.     AL = new firmware debugging port
  32171. Return: ???
  32172. SeeAlso: INT 21"COMTROL HOSTESS",INT 23"COMTROL HOSTESS"
  32173. ----------23---------------------------------
  32174. INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
  32175. ---DOS 1.x---
  32176. Return: AH = 00h abort program
  32177.     if all registers preserved, restart DOS call
  32178. ---DOS 2+---
  32179.     CF clear
  32180. Return: all registers preserved
  32181.     return via RETF or RETF 2 with CF set
  32182.         DOS will abort program with errorlevel 0
  32183.     else (RETF/RETF 2 with CF clear or IRET)
  32184.         interrupted DOS call is restarted
  32185. Notes:    this interrupt is invoked whenever DOS detects a ^C or ^Break; it
  32186.       should never be called directly
  32187.     MSDOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
  32188.     DOS remembers the stack pointer before calling INT 23, and if it is
  32189.       not the same on return, pops and discards the top word; this is what
  32190.       permits a return with RETF as well as IRET or RETF 2
  32191.     any DOS call may safely be made within the INT 23 handler, although
  32192.       the handler must to check for a recursive invocation if it does
  32193.       call DOS
  32194. SeeAlso: INT 1B
  32195. ---------------------------------------------
  32196. INT 23 - COMTROL HOSTESS i/ISA DEBUGGER - GET CONFIGURATION INFORMATION
  32197.     AL = query type
  32198.         00h get old config map
  32199.         Return: AX = old config map
  32200.         01h get dual-ported RAM map
  32201.         Return: BX:AX = dual-ported RAM map
  32202.         02h get SCC port map
  32203.         Return: BX:AX = SCC port map
  32204. SeeAlso: INT 22"COMTROL HOSTESS",INT 26"COMTROL HOSTESS"
  32205. ----------24---------------------------------
  32206. INT 24 - DOS 1+ - CRITICAL ERROR HANDLER
  32207. Note:    invoked when a critical (usually hardware) error is encountered; should
  32208.       never be called directly
  32209. SeeAlso: INT 21/AH=95h
  32210.  
  32211. Critical error handler is invoked with:
  32212.     AH = type and processing flags
  32213.         bit 7 clear = disk I/O error
  32214.           set    = -- if block device, bad FAT image in memory
  32215.               -- if char device, error code in DI
  32216.         bit 6  unused
  32217.         bit 5 = 1 if Ignore allowed, 0 if not (DOS 3+)
  32218.         bit 4 = 1 if Retry allowed, 0 if not (DOS 3+)
  32219.         bit 3 = 1 if Fail allowed, 0 if not (DOS 3+)
  32220.         bit 2 \ disk area of error    00 = DOS area  01 = FAT
  32221.         bit 1 /            10 = root dir  11 = data area
  32222.         bit 0 = 1 if write, 0 if read
  32223.     AL = drive number if AH bit 7 clear
  32224.     BP:SI -> device driver header (BP:[SI+4] bit 15 set if char device)
  32225.     DI low byte contains error code if AH bit 7 set
  32226.        00h write-protection violation attempted
  32227.        01h unknown unit for driver
  32228.        02h drive not ready
  32229.        03h unknown command given to driver
  32230.        04h data error (bad CRC)
  32231.        05h bad device driver request structure length
  32232.        06h seek error
  32233.        07h unknown media type
  32234.        08h sector not found
  32235.        09h printer out of paper
  32236.        0Ah write fault
  32237.        0Bh read fault
  32238.        0Ch general failure
  32239.        0Dh (DOS 3+) sharing violation
  32240.        0Eh (DOS 3+) lock violation
  32241.        0Fh invalid disk change
  32242.        10h (DOS 3+) FCB unavailable
  32243.        11h (DOS 3+) sharing buffer overflow
  32244.        12h (DOS 4+) code page mismatch
  32245.        13h (DOS 4+) out of input
  32246.        14h (DOS 4+) insufficient disk space
  32247.     STACK:    DWORD    return address for INT 24 call
  32248.         WORD    flags pushed by INT 24
  32249.         WORD    original AX on entry to INT 21
  32250.         WORD    BX
  32251.         WORD    CX
  32252.         WORD    DX
  32253.         WORD    SI
  32254.         WORD    DI
  32255.         WORD    BP
  32256.         WORD    DS
  32257.         WORD    ES
  32258.         DWORD    return address for INT 21 call
  32259.         WORD    flags pushed by INT 21
  32260. Handler must return:
  32261.     AL = action code
  32262.         00h ignore error and continue processing request
  32263.         01h retry operation
  32264.         02h terminate program through the equivalent of INT 21/AH=4Ch
  32265.             (INT 20h for DOS 1.x)
  32266.         03h fail system call in progress
  32267.     SS,SP,DS,ES,BX,CX,DX preserved
  32268. Notes:    the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h
  32269.     if the handler returns to the application by popping the stack, DOS
  32270.       will be in an unstable state until the first call with AH > 0Ch
  32271.     for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  32272.       critical errors
  32273.     if IGNORE specified but not allowed, it is turned into FAIL
  32274.     if RETRY specified but not allowed, it is turned into FAIL
  32275.     if FAIL specified but not allowed, it is turned into ABORT
  32276.     (DOS 3+) if a critical error occurs inside the critical error handler,
  32277.       the DOS call is automatically failed
  32278. ----------25---------------------------------
  32279. INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)
  32280.     AL = drive number (00h = A:, 01h = B:, etc)
  32281.     CX = number of sectors to read
  32282.     DX = starting logical sector number (0000h - highest sector on drive) 
  32283.     DS:BX -> buffer for data
  32284. Return: CF clear if successful
  32285.     CF set on error
  32286.         AH = status
  32287.          80h device failed to respond (timeout)
  32288.          40h seek operation failed
  32289.          20h controller failed
  32290.          10h data error (bad CRC)
  32291.          08h DMA failure
  32292.          04h requested sector not found
  32293.          03h write-protected disk (INT 26 only)
  32294.          02h bad address mark
  32295.          01h bad command
  32296.         AL = error code (same as passed to INT 24 in DI)
  32297.     may destroy all other registers except segment registers
  32298. Notes:    original flags are left on stack, and must be popped by caller
  32299.     this call bypasses the DOS filesystem
  32300. BUG:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  32301.     invalid drive number
  32302. SeeAlso: INT 13/AH=02h,INT 26
  32303. ----------25---------------------------------
  32304. INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition)
  32305.     AL = drive number (0=A, 1=B, etc)
  32306.     CX = FFFFh
  32307.     DS:BX -> disk read packet (see below)
  32308. Return: same as above
  32309. Notes:    partition is potentially >32M (and requires this form of the call) if
  32310.       bit 1 of device attribute word in device driver is set
  32311.     original flags are left on stack, and must be removed by caller
  32312.     this call bypasses the DOS filesystem
  32313. SeeAlso: INT 13/AH=02h,INT 26
  32314.  
  32315. Format of disk read packet:
  32316. Offset    Size    Description
  32317.  00h    DWORD    sector number
  32318.  04h    WORD    number of sectors to read
  32319.  06h    DWORD    transfer address
  32320. ----------25CDCD-----------------------------
  32321. INT 25 - Stacker - GET DEVICE DRIVER ADDRESS
  32322.     AX = CDCDh
  32323.     DS:BX -> buffer for address (see below)
  32324.     CX = 0001h
  32325.     DX = 0000h
  32326. Return: AX = CDCDh if Stacker installed
  32327.         DS:BX buffer filled
  32328.  
  32329. Format of driver address buffer:
  32330. Offset    Size    Description
  32331.  00h    WORD    signature CDCDh
  32332.  02h    WORD    ??? 0001h
  32333.  04h    DWORD    pointer to start of Stacker device driver
  32334.  
  32335. Format of device driver:
  32336. Offset    Size    Description
  32337.  00h    WORD    signature A55Ah
  32338.  02h    WORD    Stacker version * 64h
  32339.  04h    WORD    offset of volume-specific information offset table
  32340.         (list of WORDs, one per drive, containing offsets to various
  32341.         information)
  32342.  06h 56 BYTEs    n/a
  32343.  3Eh    BYTE    volume number, set after INT 21/AX=4404h
  32344.         (use to index into volume-specific info offset table)
  32345.  3Fh 19 BYTEs    n/a
  32346.  52h  4 BYTEs    ASCII string "SWAP"
  32347.  56h 26 BYTEs    drive mapping table (one byte for each drive A: through Z:)
  32348.  
  32349. Format of Stacker boot record:
  32350. Offset    Size    Description
  32351. 1F0h  8 BYTEs    Stacker signature (first byte is CDh)
  32352. 1F8h    DWORD    pointer to start of Stacker device driver
  32353. 1FCh    WORD    Stacker volume number
  32354. 1FEh    WORD    ???
  32355. ----------25--FFSI4358-----------------------
  32356. INT 25 - PC-CACHE.SYS - INSTALLATION CHECK
  32357.     AL = FFh
  32358.     SI = 4358h
  32359. Return: SI = 6378h if installed
  32360.         CX = segment of device driver PC-CACHE.SYS
  32361.         DX = version (major in DH, minor in DL)
  32362. Note:    PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain
  32363.       access to certain disk drivers for devices such as Bernoulli drives
  32364. SeeAlso: INT 13/AH=A0h
  32365. ----------26---------------------------------
  32366. INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
  32367.     AL = drive number (00h = A:, 01h = B:, etc)
  32368.     CX = number of sectors to write
  32369.     DX = starting logical sector number (0000h - highest sector on drive) 
  32370.     DS:BX -> data to write
  32371. Return: CF clear if successful
  32372.     CF set on error
  32373.         AH = status
  32374.          80h device failed to respond (timeout)
  32375.          40h seek operation failed
  32376.          20h controller failed
  32377.          10h data error (bad CRC)
  32378.          08h DMA failure
  32379.          04h requested sector not found
  32380.          03h write-protected disk (INT 26 only)
  32381.          02h bad address mark
  32382.          01h bad command
  32383.         AL = error code (same as passed to INT 24 in DI)
  32384.     may destroy all other registers except segment registers
  32385. Notes:    original flags are left on stack, and must be popped by caller
  32386.     this call bypasses the DOS filesystem
  32387. BUG:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  32388.     invalid drive number
  32389. SeeAlso: INT 13/AH=03h,INT 25
  32390. ----------26---------------------------------
  32391. INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition)
  32392.     AL = drive number (0=A, 1=B, etc)
  32393.     CX = FFFFh
  32394.     DS:BX -> disk write packet (see below)
  32395. Return: same as above
  32396. Notes:    partition is potentially >32M (and requires this form of the call) if
  32397.       bit 1 of device attribute word in device driver is set
  32398.     original flags are left on stack, and must be removed by caller
  32399.     this call bypasses the DOS filesystem
  32400. SeeAlso: INT 13/AH=03h,INT 25
  32401.  
  32402. Format of disk write packet:
  32403. Offset    Size    Description
  32404.  00h    DWORD    sector number
  32405.  04h    WORD    number of sectors to read
  32406.  06h    DWORD    transfer address
  32407. ---------------------------------------------
  32408. INT 26 - COMTROL HOSTESS i/ISA DEBUGGER - ENTER/EXIT EXTENDED ADDRESSING MODE
  32409.     ???
  32410. Return: ???
  32411. SeeAlso: INT 23"COMTROL HOSTESS",INT 27"COMTROL HOSTESS"
  32412. ----------27---------------------------------
  32413. INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
  32414.     DX = number of bytes to keep resident (max FFF0h)
  32415.     CS = segment of PSP
  32416. Return: never
  32417. Notes:    this is an obsolete call
  32418.     INT 22, INT 23, and INT 24 are restored from the PSP
  32419.     does not close any open files
  32420.     the minimum number of bytes which will remain resident is 110h for
  32421.       DOS 2.x and 60h for DOS 3+; there is no minimum for DOS 1.x, which
  32422.       implements this service in COMMAND.COM rather than the DOS kernel
  32423. SeeAlso: INT 21/AH=31h
  32424. ---------------------------------------------
  32425. INT 27 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE REMOTE TURBO DEBUGGER KERNEL
  32426.     ???
  32427. Return: ???
  32428. Desc:    invoke a copy of the remote Turbo Debugger kernel on the Hostess i
  32429.       controller
  32430. SeeAlso: INT 20"COMTROL HOSTESS",INT 26"COMTROL HOSTESS"
  32431. ----------28---------------------------------
  32432. INT 28 - DOS 2+ - DOS IDLE INTERRUPT
  32433.    Invoked each time one of the DOS character input functions loops while
  32434.    waiting for input.  Since a DOS call is in progress even though DOS is
  32435.    actually idle during such input waits, hooking this function is necessary
  32436.    to allow a TSR to perform DOS calls while the foreground program is
  32437.    waiting for user input.  The INT 28h handler may invoke any INT 21 function
  32438.    except functions 00h through 0Ch.  Under DOS 2.x, the critical error flag
  32439.    (the byte immediately after the InDOS flag) must be set in order to call
  32440.    DOS functions 50h/51h without destroying the DOS stacks.
  32441.  
  32442. Notes:    calls to INT 21/AH=3Fh,40h may not use a handle which refers to CON
  32443.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  32444.       set to 01h; if larger, DOS is truly busy and should not be reentered
  32445.     the default handler is an IRET instruction
  32446.     supported in OS/2 compatibility box
  32447. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h
  32448. ----------29---------------------------------
  32449. INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
  32450.     AL = character to display
  32451. Return: nothing
  32452. Notes:    automatically called when writing to a device with bit 4 of its device
  32453.       driver header set (see also INT 21/AH=52h)
  32454.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  32455.       vector and assume that ANSI.SYS is installed if the segment is larger
  32456.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  32457.     the default handler under DESQview 2.2 understands the <Esc>[2J
  32458.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  32459. SeeAlso: INT 79
  32460. ----------2A00-------------------------------
  32461. INT 2A - NETWORK (Microsoft, LANtastic) - INSTALLATION CHECK
  32462.     AH = 00h
  32463. Return: AH <> 00h if installed
  32464.     CF set if NetWare v2.15 NetBIOS emulator installed
  32465. SeeAlso: INT 5C
  32466. ----------2A0000-----------------------------
  32467. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  32468.     AX = 0000h
  32469. Return: AH = DDh
  32470. SeeAlso: INT 5B
  32471. ----------2A01-------------------------------
  32472. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  32473.     AH = 01h
  32474.     ES:BX -> NCB (see INT 5C)
  32475. Return: AL = NetBIOS error code
  32476.     AH = 00h if no error
  32477.        = 01h on error
  32478. SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  32479. ----------2A02-------------------------------
  32480. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  32481.     AH = 02h
  32482.     ???
  32483. Return: ???
  32484. ----------2A0300-----------------------------
  32485. INT 2A - NETWORK (Microsoft,LANtastic) - CHECK DIRECT I/O
  32486.     AX = 0300h
  32487.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  32488.         must include the colon)
  32489. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  32490.     CF set if access via files only
  32491. Notes:    do not use direct disk accesses if this function returns CF set or the
  32492.       device is redirected (INT 21/AX=5F02h)
  32493.     may take some time to execute
  32494.     called by DOS kernel on INT 25 and INT 26
  32495. SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h
  32496. ----------2A04-------------------------------
  32497. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NetBIOS REQUEST
  32498.     AH = 04h
  32499.     AL = error retry
  32500.         00h automatically retry request on errors 09h, 12h, and 21h
  32501.         01h no retry
  32502.     ES:BX -> Network Control Block (see INT 5C"NetBIOS")
  32503. Return: AX = 0000h if successful
  32504.     AH = 01h on error
  32505.         AL = error code
  32506. Notes:    invokes either INT 5B or INT 5C as appropriate
  32507.     NetWare 2.15 NetBIOS emulator returns CF clear if succesful, set on err
  32508. SeeAlso: AH=01h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  32509. ----------2A0500-----------------------------
  32510. INT 2A - NETWORK (Microsoft,LANtastic) - GET NETWORK RESOURCE AVAILABILITY
  32511.     AX = 0500h
  32512. Return: AX reserved
  32513.     BX = number of network names available
  32514.     CX = number of network control blocks available
  32515.     DX = number of network sessions available
  32516. SeeAlso: AH=01h,AH=04h,INT 5C"NetBIOS"
  32517. ----------2A06-------------------------------
  32518. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  32519.     AH = 06h
  32520.     AL = 01h set concatenation mode (all printer output put in one job)
  32521.          02h set truncation mode (default)
  32522.          printer open/close starts new print job
  32523.          03h flush printer output and start new print job
  32524. Return: CF set on error
  32525.         AX = error code
  32526.     CF clear if successful
  32527. Notes:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  32528.     LANtastic v4.x no longer supports this call
  32529. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  32530. ----------2A2001-----------------------------
  32531. INT 2A - MS Networks or NETBIOS - ???
  32532.     AX = 2001h
  32533.     ???
  32534. Return: ???
  32535. Note:    intercepted by DESQview 2.x
  32536. ----------2A2002-----------------------------
  32537. INT 2A - NETWORK - ???
  32538.     AX = 2002h
  32539.     ???
  32540. Return: ???
  32541. Note:    called by MSDOS 3.30-5.00 APPEND
  32542. ----------2A2003-----------------------------
  32543. INT 2A - NETWORK - ???
  32544.     AX = 2003h
  32545.     ???
  32546. Return: ???
  32547. Note:    called by MSDOS 3.30-5.00 APPEND
  32548. ----------2A7802-----------------------------
  32549. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  32550.     AX = 7802h
  32551.     ES:DI -> 8-byte buffer to be filled
  32552. Return: AL = 00h if no user logged on to Extended Services
  32553.     AL <> 00h if user logged on to Extended Services
  32554.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  32555. ----------2A80-------------------------------
  32556. INT 2A C - NETWORK - BEGIN DOS CRITICAL SECTION
  32557.     AH = 80h
  32558.     AL = critical section number (00h-0Fh)
  32559.         01h DOS kernel, SHARE.EXE
  32560.         apparently for maintaining the integrity of DOS/SHARE/NET
  32561.           data structures
  32562.         02h DOS kernel
  32563.         ensures that no multitasking occurs while DOS is calling an
  32564.           installable device driver
  32565.         05h DOS 4.x only IFSFUNC
  32566.         06h DOS 4.x only IFSFUNC
  32567.         08h ASSIGN.COM
  32568.         0Ah MSCDEX
  32569. Notes:    normally hooked to avoid interrupting a critical section, rather than
  32570.       called
  32571.     the handler should ensure that none of the critical sections are
  32572.       reentered, usually by suspending a task which attempts to reenter
  32573.       an active critical section
  32574.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  32575.       is patched.  DOS 3.1 through 3.31 contain a zero-terminated list of
  32576.       words beginning at offset 02C3h in the IBMDOS segment; each word
  32577.       contains the offset within the IBMDOS segment of a byte which must
  32578.       be changed from C3h to 50h to enable use of critical sections.
  32579. SeeAlso: AH=81h,AH=82h,AH=87h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  32580. ----------2A81-------------------------------
  32581. INT 2A C - NETWORK - END DOS CRITICAL SECTION
  32582.     AH = 81h
  32583.     AL = critical section number (00h-0Fh) (see AH=80h)
  32584. Notes:    normally hooked rather than called
  32585.     the handler should reawaken any tasks which were suspended due to an
  32586.       attempt to enter the specified critical section
  32587. SeeAlso: AH=80h,AH=82h,AH=87h
  32588. ----------2A82-------------------------------
  32589. INT 2A C - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  32590.     AH = 82h
  32591. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  32592.       greater than 0Ch except 59h, and on process termination
  32593.     the handler should reawaken any tasks which were suspended due to an
  32594.       attempt to enter one of the critical sections 0 through 7
  32595. SeeAlso: AH=81h
  32596. ----------2A84-------------------------------
  32597. INT 2A C - Microsoft Networks - KEYBOARD BUSY LOOP
  32598.     AH = 84h
  32599. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  32600.       loop to allow network to process requests
  32601. SeeAlso: INT 28
  32602. ----------2A87-------------------------------
  32603. !!!
  32604. INT 2A C - PRINT??? - CRITICAL SECTION
  32605.     AH = 87h
  32606.     AL = start/end
  32607.         00h start
  32608.         01h end
  32609. Note:    called by PRINT.COM
  32610. SeeAlso: AH=80h,AH=81h
  32611. ----------2A89-------------------------------
  32612. INT 2A - Network - ???
  32613.     AH = 89h
  32614.     AL = ???  (ASSIGN uses 08h)
  32615.     ???
  32616. Return: ???
  32617. ----------2A90-------------------------------
  32618. INT 2A - IBM PC 3270 EMULATION PROGRAM - ???
  32619.     AH = 90h
  32620.     ???
  32621. Return: ???
  32622. Note:    the LANtastic redirector and SERVER.EXE use this function with AL=01h,
  32623.       03h-07h,0Ch-11h
  32624. ----------2AC2-------------------------------
  32625. INT 2A - Network - ???
  32626.     AH = C2h
  32627.     AL = subfunction
  32628.         07h ???
  32629.         08h ???
  32630.     BX = 0001h
  32631.     ???
  32632. Return: ???
  32633. Note:    called by DOS 3.30-5.00 APPEND
  32634. ----------2AFF90-----------------------------
  32635. INT 2A - PC/TCP PREDIR.EXE - ???
  32636.     AX = FF90h
  32637. Return: AX = ???
  32638. Note:    PREDIR.EXE is the network printer redirector included as part of the
  32639.       PC/TCP system by FTP Software, Inc.
  32640. ----------2AFF91-----------------------------
  32641. INT 2A - PC/TCP PREDIR.EXE - ???
  32642.     AX = FF91h
  32643.     BX = ???
  32644. Return: AX = status???
  32645. ----------2AFF92-----------------------------
  32646. INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
  32647.     AX = FF92h
  32648. Return: AX = 0000h if installed
  32649.        BX = redirected printer port (FFFFh if no printers redirected)
  32650.        CX = version (CH = major, CL = minor)
  32651. Note:    PREDIR.EXE is the network printer redirector included as part of the
  32652.       PC/TCP system by FTP Software, Inc.
  32653. ----------2AFF93-----------------------------
  32654. INT 2A - PC/TCP PREDIR.EXE - ???
  32655.     AX = FF93h
  32656. Return: AX = ???
  32657. ----------2AFF94-----------------------------
  32658. INT 2A - PC/TCP PREDIR.EXE - ???
  32659.     AX = FF94h
  32660.     BX = ???
  32661.     CX = ???
  32662.     DX = ???
  32663. Return: AX = ???
  32664. Note:    PREDIR.EXE is the network printer redirector included as part of the
  32665.       PC/TCP system by FTP Software, Inc.
  32666. ----------2AFF95-----------------------------
  32667. INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
  32668.     AX = FF95h
  32669.     CX = what to get
  32670.         0000h ??? (returned pointer to "C:\COMMAND.COM")
  32671.         0001h spooling program
  32672.         0002h ???
  32673.         0003h spool file name
  32674.         0004h swap file name
  32675. Return: AX = status
  32676.         0000h successful
  32677.     BX:DX -> ASCIZ configuration string
  32678. ----------2AFF96-----------------------------
  32679. INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
  32680.     AX = FF96h
  32681.     CX = what to set
  32682.         0000h ???
  32683.         0001h print-on-hotkey state
  32684.         0002h print-on-exit state
  32685.         0003h print job timeout in clock ticks
  32686.         0004h print-on-EOF state
  32687.     BX = new value (0000h disabled, 0001h enabled except for timeout)
  32688. Return: AX = ???
  32689. SeeAlso: AX=FF97h
  32690. Note:    PREDIR.EXE is the network printer redirector included as part of the
  32691.       PC/TCP system by FTP Software, Inc.
  32692. ----------2AFF97-----------------------------
  32693. INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
  32694.     AX = FF97h
  32695.     CX = what to get
  32696.         0000h ???
  32697.         0001h print-on-hotkey state
  32698.         0002h print-on-exit state
  32699.         0003h print job timeout in clock ticks
  32700.         0004h print-on-EOF state
  32701. Return: AX = status
  32702.         0000h successful
  32703.     BX = old value (0000h disabled, 0001 enabled except for timeout)
  32704. SeeAlso: AX=FF96h
  32705. ----------2B---------------------------------
  32706. INT 2B - DOS 2+ - RESERVED
  32707. Note:    this vector is not used in DOS versions <= 5.00, and points at an IRET
  32708. ----------2C---------------------------------
  32709. INT 2C - DOS 2+ - RESERVED
  32710. Note:    this vector is not used in DOS versions <= 5.00, and points at an IRET
  32711. ----------2C---------------------------------
  32712. INT 2C - STARLITE architecture - KERNEL API
  32713. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  32714.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  32715.       be released in 1991.    The interrupt number is subject to change
  32716.       before the actual release.
  32717. ----------2D---------------------------------
  32718. INT 2D - DOS 2+ - RESERVED
  32719. Note:    this vector is not used in DOS versions <= 5.00, and points at an IRET
  32720. ----------2D---------------------------------
  32721. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.5]
  32722.     AH = multiplex number
  32723.     AL = function
  32724.         00h installation check
  32725.         Return: AL = 00h if free
  32726.             AL = FFh if multiplex number in use
  32727.                 CX = binary version number (CH = major, CL = minor)
  32728.                 DX:DI -> signature string (see below) identifying
  32729.                     the program using the multiplex number
  32730.         01h get entry point
  32731.         Return: AL = 00h if all API calls via INT 2D
  32732.             AL = FFh if entry point supported
  32733.                 DX:BX -> entry point for bypassing interrupt chain
  32734.         02h uninstall
  32735.         DX:BX = return address for successful uninstall (may be
  32736.             ignored by TSR)
  32737.         Return: AL = status
  32738.                 00h not implemented
  32739.                 01h unsuccessful
  32740.                 02h can not uninstall yet, will do so when able
  32741.                 03h safe to remove, but no resident uninstaller
  32742.                 (TSR still enabled)
  32743.                 BX = segment of memory block with resident code
  32744.                 04h safe to remove, but no resident uninstaller
  32745.                 (TSR now disabled)
  32746.                 BX = segment of memory block with resident code
  32747.                 05h not safe to remove now, try again later
  32748.                 FFh successful
  32749.             return at DX:BX with AX destroyed if successful and
  32750.               TSR honors specific return address
  32751.         03h request pop-up
  32752.         Return: AL = status
  32753.                 00h not implemented or TSR is not a pop-up
  32754.                 01h can not pop up at this time, try again later
  32755.                 02h can not pop up yet, will do so when able
  32756.                 03h already popped up
  32757.                 04h unable to pop up, user intervention required
  32758.                 BX = standard reason code
  32759.                     0000h unknown failure 
  32760.                     0001h interrupt chain passes through memory
  32761.                       which must be swapped out to pop up
  32762.                     0002h swap-in failed
  32763.                 CX = application's reason code if nonzero
  32764.                 FFh TSR popped up and was exited by user
  32765.                 BX = return value
  32766.                     0000h no return value
  32767.                     0001h TSR unloaded
  32768.                     0002h-00FFh reserved
  32769.                     0100h-FFFFh application-dependent
  32770.         04h determine chained interrupts
  32771.         BL = interrupt number (except 2Dh)
  32772.         Return: AL = status
  32773.                 00h not implemented
  32774.                 01h (obsolete) unable to determine
  32775.                 02h (obsolete) interrupt hooked
  32776.                 03h (obsolete) interrupt hooked, address returned
  32777.                 DX:BX -> TSR's interrupt BL handler
  32778.                 04h list of hooked interrupts returned
  32779.                 DX:BX -> interrupt hook list (see below)
  32780.                 FFh interrupt not hooked
  32781.         Notes:    since INT 2D is known to be hooked, the resident code
  32782.               need not test for BL=2Dh (to minimize its size), and
  32783.               the return value is therefore undefined in that case.
  32784.             BL is ignored if the TSR returns AL=04h; in that case,
  32785.               the caller needs to scan the return list rather than
  32786.               making additional calls to this function.  If the
  32787.               return is not 00h or 04h, then the caller must cycle
  32788.               through the remaining interrupt numbers it wishes to
  32789.               check.
  32790.             return values 01h thru 03h are disparaged and will be
  32791.               removed from the next version of this specification;
  32792.               they are included for compatibility with version 3.3,
  32793.               though they were probably never used in any
  32794.               implementation
  32795.         05h get hotkeys
  32796.         Return: AL = status
  32797.                 00h not implemented
  32798.                 FFh supported
  32799.                 DX:BX -> hotkey list (see below)
  32800.         06h-0Fh reserved for future enhancements
  32801.         Return: AL = 00h (not implemented)
  32802.         other  application-dependent
  32803. Notes:    programs should not use fixed multiplex numbers; rather, a program
  32804.       should scan all multiplex numbers from 00h to FFh, remembering the
  32805.       first unused multiplex in case the program is not yet installed.
  32806.       For multiplex numbers which are in use, the program should compare
  32807.       the first 16 bytes of the signature string to determine whether it
  32808.       is already installed on that multiplex number.  If not previously
  32809.       installed, it should use the first free multiplex number.
  32810.     functions other than 00h are not valid unless a program is installed
  32811.       on the selected multiplex number
  32812.     to be considered fully compliant with version 3.5 of the specification,
  32813.       programs must implement at least functions 00h, 02h (no resident
  32814.       uninstall code required), and 04h (return value 04h).     TSRs that
  32815.       provide hotkeys with which the user can activate them must also
  32816.       implement function 05h.  The absolute minimum fully-compliant
  32817.       implementation has an overhead of 64 bytes (80 bytes with function
  32818.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  32819.       protocol header and hook list entry).
  32820.     the signature string and description may be used by memory mappers
  32821.       to display the installed programs
  32822.     users of this proposal should adhere to the IBM interrupt sharing
  32823.       protocol (see below), which will permit removal of TSRs in
  32824.       arbitrary order and interrupt handler reordering.  All TSRs
  32825.       following this proposal should be removable, though they need not
  32826.       keep the code for removing themselves resident; it is acceptable
  32827.       for a separate program to perform the removal.
  32828.     A sample implementation including example TSRs and utility programs
  32829.       may be found in a separate package distributed as AMISLnnn.ZIP
  32830.       (AMISL090.ZIP as of this writing).
  32831.     Please let me know if you choose to follow this proposal.  The
  32832.       signature and a list of the private API calls you use would be
  32833.       appreciated, as well.
  32834. SeeAlso: INT 2F
  32835.  
  32836. Format of signature string:
  32837. Offset    Size    Description
  32838.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  32839.  08h  8 BYTEs    blank-padded product name
  32840.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  32841. Note:    it is not necessary to reserve a full 64 bytes for the description,
  32842.       just enough to store the actual ASCIZ string
  32843.  
  32844. Format of interrupt hook list [array]:
  32845. Offset    Size    Description
  32846.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  32847.  01h    WORD    offset within hook list's segment of the interrupt handler
  32848.         this will point at the initial short jump of the interrupt
  32849.         sharing protocol header (see below)
  32850.  
  32851. Format of hotkey list:
  32852. Offset    Size    Description
  32853.  00h    BYTE    type of hotkey checking
  32854.         bit 0: checks before chaining INT 09
  32855.         bit 1: checks after chaining INT 09
  32856.         bit 2: checks before chaining INT 15/AH=4Fh
  32857.         bit 3: checks after chaining INT 15/AH=4Fh
  32858.         bit 4: checks on INT 16/AH=00h,01h,02h
  32859.         bit 5: checks on INT 16/AH=10h,11h,12h
  32860.         bits 6,7: reserved (0)
  32861.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  32862.  02h 6N BYTEs    array of hotkey definitions
  32863.         (one per hotkey, first should be primary hotkey)
  32864.         Offset    Size    Description
  32865.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  32866.                 hotkey triggers on release if bit 7 set
  32867.          01h    WORD    required shift states (see below)
  32868.          03h    WORD    disallowed shift states (see below)
  32869.          05h    BYTE    flags
  32870.                 bit 0: hotkey chained before processing
  32871.                 bit 1: hotkey chained after processing
  32872.                 bit 2: others should pass through this hotkey
  32873.                     so that it can be monitored
  32874.                 bit 3: hotkey will not activate if other keys
  32875.                     pressed/released before hotkey press is
  32876.                     completed
  32877.                 bit 4: this key is remapped into some other key
  32878.                 bit 5-7: reserved (0)
  32879. Notes:    except for bit 7, the shift states correspond exactly to the return
  32880.       values from INT 16/AH=12h.  A set bit in the required states word
  32881.       indicates that the corresponding shift state must be active when the
  32882.       hotkey's scan code is received for the hotkey to be recognized; a
  32883.       clear bit means that the corresponding state may be ignored.    A set
  32884.       bit in the disallowed shift states word indicates that the
  32885.       corresponding shift state must be inactive.
  32886.     if bit 2 is set, either control key may be pressed for the hotkey; if
  32887.       bits 8 and 10 are both set, then both control keys must be pressed.
  32888.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  32889.     for the disallowed-states word, if one of the "either" bits is set,
  32890.       then both the corresponding left bit and right bit must be set
  32891.     examples:
  32892.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  32893.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  32894.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  32895.  
  32896. Bitmask of shift states:
  32897.  bit 0: right shift pressed
  32898.  bit 1: left shift pressed
  32899.  bit 2: either control key pressed
  32900.  bit 3: either Alt key pressed
  32901.  bit 4: ScrollLock active
  32902.  bit 5: NumLock active
  32903.  bit 6: CapsLock active
  32904.  bit 7: either shift key pressed
  32905.  bit 8: left control key pressed
  32906.  bit 9: left Alt key pressed
  32907.  bit 10: right control key pressed
  32908.  bit 11: right Alt key pressed
  32909.  bit 12: ScrollLock pressed
  32910.  bit 13: NumLock pressed
  32911.  bit 14: CapsLock pressed
  32912.  bit 15: SysRq key pressed
  32913.  
  32914. Format of interrupt sharing protocol interrupt handler entry point:
  32915. Offset    Size    Description
  32916.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  32917.         following this data block (EBh 10h)
  32918.  02h    DWORD    address of next handler in chain
  32919.  06h    WORD    signature 424Bh
  32920.  08h    BYTE    EOI flag
  32921.         00h software interrupt or secondary hardware interrupt handler
  32922.         80h primary hardware interrupt handler (will issue EOI)
  32923.  09h  2 BYTEs    short jump to hardware reset routine
  32924.         must point at a valid FAR procedure (may be just RETF)
  32925.  0Bh  7 BYTEs    reserved (0)
  32926.  
  32927. Signatures known to be in use:
  32928.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  32929.  'heathh  ' 'Monitor '
  32930.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  32931.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  32932.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  32933.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  32934.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  32935.  'Ralf B  ' 'VGABLANK'    example TSR -- VGA-only screen blanker
  32936.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  32937.             testing programs (v1.1+)
  32938.         'RECALL  '    public domain commandline editor and history (v1.2+)
  32939.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  32940. ----------2E---------------------------------
  32941. INT 2E - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  32942.     DS:SI -> commandline to execute (see below)
  32943. Return: all registers except CS:IP destroyed
  32944.     AX = status (4DOS v4.0)
  32945.        0000h successful
  32946.        FFFFh error before processing command (not enough memory, etc)
  32947.        other error number returned by command
  32948. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  32949.       internal commands) without loading another copy of COMMAND.COM
  32950.     if COMMAND.COM is the user's command interpreter, the primary copy
  32951.       executes the command; this allows the master environment to be
  32952.       modified by issuing a "SET" command, but changes in the master
  32953.       environment will not become effective until all programs descended
  32954.       from the primary COMMAND.COM terminate
  32955.     since COMMAND.COM processes the string as if typed from the keyboard,
  32956.       the transient portion needs to be present, and the calling program
  32957.       must ensure that sufficient memory to load the transient portion can
  32958.       be allocated by DOS if necessary
  32959.     results are unpredictable if invoked by a program run from a batch file
  32960.       because this call is not reentrant and COMMAND.COM uses the same
  32961.       internal variables when processing a batch file
  32962.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  32963.       has been loaded
  32964.     the MSDOS 5 Programmer's Reference calls this "Reload Transient"
  32965.  
  32966. Format of commandline:
  32967. Offset    Size    Description
  32968.  00h    BYTE    length of command string, not counting trailing CR
  32969.  01h    var    command string
  32970.   N    BYTE    0Dh (CR)
  32971. ----------2E----BXE22E-----------------------
  32972. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  32973.     BX = E22Eh
  32974.     DS:SI -> zero byte
  32975. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  32976. ---------------------------------------------
  32977. Interrupt List, part 5 of 8
  32978. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  32979. ----------2F---------------------------------
  32980. INT 2F - Multiplex - NOTES
  32981.     AH = identifier of program which is to handle the interrupt
  32982.        00h-7Fh reserved for DOS
  32983.        B8h-BFh reserved for networks
  32984.        C0h-FFh reserved for applications
  32985.     AL is the function code
  32986.    This is a general mechanism for verifying the presence of a TSR and 
  32987.    communicating with it.  When searching for a free identifier code for AH
  32988.    using the installation check (AL=00h), the calling program should set
  32989.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  32990.    and SS:SP to be valid on return, since numerous programs now use additional
  32991.    registers on input and/or output for the installation check.
  32992. Note:    Since the multiplex chain is growing so long, and beginning to
  32993.       experience multiplex number collisions, I am proposing an alternate
  32994.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  32995.       multiplex, please let me know.
  32996. SeeAlso: INT 2D
  32997. ----------2F---------------------------------
  32998. INT 2F - BMB Compuscience Canada Utilities Interface
  32999.     AH = xx (dynamically assigned based upon a search for a multiplex
  33000.          number which doesn't answer installed)
  33001.     AL = 00h installation check
  33002.     ES:DI = EBEBh:BEBEh
  33003. Return: AL = 00h not installed
  33004.          01h not installed, not OK to install
  33005.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  33006.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  33007.          short form of the manufacturer's name, PPPPPPPP is a product
  33008.          name and NNNN is the product's version number
  33009. ----------2F---------------------------------
  33010. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  33011.     AH = programmer-selected multiplex number
  33012.     AL = function
  33013.         00h installation check
  33014.         Return: AL = FFh if installed
  33015.         01h get TSR interrupt vectors
  33016.         Return: DX:AX -> vector table (see below)
  33017.         02h get TSR code segment
  33018.         Return: AX = code segment for all interrupt handlers
  33019.         03h call user exit routine and release TSR's memory
  33020.         04h get signature string
  33021.         Return: DX:AX -> counted string containing signature
  33022.         05h get TSR's INT 2F handler
  33023.         Return: DX:AX -> INT 2F handler
  33024.         06h enable/disable TSR
  33025.         BL = new state (00h disabled, 01h enabled)
  33026.         07h activate TSR (popup if not disabled)
  33027.         08h get hotkeys
  33028.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  33029.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  33030.         09h set hotkey
  33031.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  33032.         CX = new hotkey (CH = keyflags, CL = scancode)
  33033.         0Ah-1Fh reserved
  33034.  
  33035. Format of vector table entry:
  33036. Offset    Size    Description
  33037.  00h    BYTE    vector number (00h = end of table)
  33038.  01h    DWORD    original vector
  33039.  05h    WORD    offset of interrupt handler in TSR's code segment
  33040. ----------2F---------------------------------
  33041. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  33042.     AH = xx (dynamically assigned based upon a search for a multiplex
  33043.          number from C0h to FFh which doesn't answer installed)
  33044.     AL = 00h installation check
  33045.     ES:DI = 1492h:1992h
  33046. Return: AL = 00h not installed
  33047.          01h not installed, not OK to install
  33048.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  33049.          point to author_name_ver table (see below)
  33050.     AH = FFh
  33051. Note:    this interface permits advanced communication with TSRs: it is possible
  33052.       to make a generic unistall utility, advanced TSR relocator programs
  33053.       in order to fit fragmented memory areas, etc.
  33054. See also: INT 2D"AMIS",INT 2F"Compuscience"
  33055.  
  33056. Format of author_name_ver table:
  33057. Offset    Size    Description
  33058.  -16    WORD    segment in which really begins the TSR code (CS in programs
  33059.         with PSP, XMS upper memory segment if installed as UMB...)
  33060.  -14    WORD    offset in which really begins the TSR code (frecuently 100h
  33061.         in *.COM programs and 0 in upper memory TSR's).
  33062.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  33063.         used by TSR is possible to determine if hooked vectors are
  33064.         still pointing it (and if it is safe the unistall process).
  33065.  -10    BYTE    characteristics byte
  33066.         bits 0-2: 000 normal program (with PSP)
  33067.               001 upper XMS memory block (needed HIMEM.SYS function
  33068.                   to free memory when unistalling)
  33069.               010 device driver (*.SYS)
  33070.               011 device driver in EXE format
  33071.               1xx others (reserved)
  33072.         bits 3-6 reserved
  33073.         bit 7 set if extra_table defined and supported
  33074.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  33075.         that the TSR must be use THIS variable in it's INT 2Fh handler.
  33076.  -8    WORD    offset to vector_area table (see bellow)
  33077.  -6    WORD    offset to extra_area table (see bit 7 in offset -10 and bellow)
  33078.  -4   4 BYTEs    "*##*"    (to insure that the TSR verify this agreement)
  33079.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  33080.         is used in order to determine if the TSR is already resident
  33081.         and it's version code; the ':' char is used as delimiter)
  33082.  
  33083. Format of vector_area table:
  33084. Offset    Size    Description
  33085.  -1    BYTE    number of vectors intercepted by TSR
  33086.  00h    BYTE    first vector number
  33087.  01h    DWORD    first vector pointer before installing the TSR
  33088.  05h    BYTE    second vector number
  33089.  06h    DWORD    second vector pointer before installing the TSR
  33090.   .      .    (and so on) Note that the TSR must be use THIS variables to
  33091.         invoke previous interrupt handler routines.
  33092.  
  33093. Format of extra_area table (needed only to improve relocation feature):
  33094. Offset    Size    Description
  33095.  00h    WORD    offset to external_ctrl table (0 if not supported)
  33096.  02h    WORD    reserved for future use (0)
  33097.  
  33098. Format of external_ctrl table:
  33099. Offset    Size    Description
  33100.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  33101.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  33102.  ---And if bit 0 in offset 00h is off:
  33103.  03h    DWORD    pointer to ASCIIZ with pathname to executable file which
  33104.         supports /SR parameter (silent installation & inhibit)
  33105.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  33106.         from the previous TSR still resident
  33107.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  33108. ----------2F00-------------------------------
  33109. INT 2F U - DOS 2.x PRINT.COM - ???
  33110.     AH = 00h
  33111.     ???
  33112. Return: ???
  33113. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  33114.     values in AH other than 00h or 01h cause PRINT to return the number of
  33115.       files in the queue in AH
  33116. SeeAlso: AH=01h
  33117. ----------2F0080-----------------------------
  33118. INT 2F - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE
  33119.     AX = 0080h
  33120. Return: after PRINT executes
  33121. ----------2F01-------------------------------
  33122. INT 2F U - DOS 2.x PRINT.COM - ???
  33123.     AH = 01h
  33124.     ???
  33125. Return: ???
  33126. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  33127.     values in AH other than 00h or 01h cause PRINT to return the number of
  33128.       files in the queue in AH
  33129. SeeAlso: AH=00h
  33130. ----------2F0100-----------------------------
  33131. INT 2F - DOS 3+ PRINT.COM - INSTALLATION CHECK
  33132.     AX = 0100h
  33133. Return: AL = status
  33134.         00h not installed
  33135.         01h not installed, but not OK to install
  33136.         FFh installed
  33137. SeeAlso: AX=0101h
  33138. ----------2F0101-----------------------------
  33139. INT 2F - DOS 3+ PRINT.COM - SUBMIT FILE FOR PRINTING
  33140.     AX = 0101h
  33141.     DS:DX -> submit packet (see below)
  33142. Return: CF clear if successful
  33143.         AL = 01h added to queue
  33144.          9Eh now printing
  33145.     CF set on error
  33146.         AX = error code (see also INT 21/AH=59h)
  33147.         01h invalid function
  33148.         02h file not found
  33149.         03h path not found
  33150.         04h out of file handles
  33151.         05h access denied
  33152.         08h print queue full
  33153.         09h spooler busy
  33154.         0Ch name too long
  33155.         0Fh invalid drive
  33156. SeeAlso: AX=0102h
  33157.  
  33158. Format of submit packet:
  33159. Offset    Size    Description
  33160.  00h    BYTE    level (must be 00h)
  33161.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  33162. ----------2F0102-----------------------------
  33163. INT 2F - DOS 3+ PRINT.COM - REMOVE FILE FROM PRINT QUEUE
  33164.     AX = 0102h
  33165.     DS:DX -> ASCIZ filename (wildcards allowed)
  33166. Return: CF clear if successful
  33167.     CF set on error
  33168.         AX = error code (see AX=0101h)
  33169. SeeAlso: AX=0101h,AX=0103h
  33170. ----------2F0103-----------------------------
  33171. INT 2F - DOS 3+ PRINT.COM - CANCEL ALL FILES IN PRINT QUEUE
  33172.     AX = 0103h
  33173. Return: CF clear if successful
  33174.     CF set on error
  33175.         AX = error code (see AX=0101h)
  33176. SeeAlso: AX=0102h
  33177. ----------2F0104-----------------------------
  33178. INT 2F - DOS 3+ PRINT.COM - FREEZE PRINT QUEUE TO READ JOB STATUS
  33179.     AX = 0104h
  33180. Return: CF clear if successful
  33181.         DX = error count
  33182.         DS:SI -> print queue
  33183.     CF set on error
  33184.         AX = error code (see AX=0101h)
  33185. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  33186.       an empty filename; the first name is the file currently being printed
  33187.     printing is stopped until AX=0105h is called to prevent the queue
  33188.       from changing while the filenames are being read
  33189. SeeAlso: AX=0101h,AX=0105h
  33190. ----------2F0105-----------------------------
  33191. INT 2F - DOS 3+ PRINT.COM - RESTART PRINT QUEUE AFTER STATUS READ
  33192.     AX = 0105h
  33193. Return: CF clear if successful
  33194.     CF set on error
  33195.         AX = error code (see AX=0101h)
  33196. SeeAlso: AX=0104h
  33197. ----------2F0106-----------------------------
  33198. INT 2F - DOS 3.3+ PRINT.COM - GET PRINTER DEVICE
  33199.     AX = 0106h
  33200. Return: CF set if files in print queue
  33201.         AX = error code 0008h (queue full)
  33202.         DS:SI -> device driver header
  33203.     CF clear if print queue empty
  33204.         AX = 0000h
  33205. Note:    documented for DOS 5+, but not documented for prior versions
  33206. SeeAlso: AX=0104h
  33207. ----------2F0200-----------------------------
  33208. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  33209.     AX = 0200h
  33210. Return: AL = FFh if installed
  33211. ----------2F0201-----------------------------
  33212. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  33213.     AX = 0201h
  33214. Return: nothing???
  33215. Notes:    called by DOS 3.3+ PRINT.COM
  33216.     AX=0202h appears to be the opposite function
  33217. SeeAlso: AX=0202h
  33218. ----------2F0202-----------------------------
  33219. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  33220.     AX = 0202h
  33221.     ???
  33222. Return: nothing???
  33223. Note:    called by DOS 3.3+ PRINT.COM
  33224. SeeAlso: AX=0201h
  33225. ----------2F0203-----------------------------
  33226. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  33227.     AX = 0203h
  33228. Return: nothing???
  33229. Notes:    called by DOS 3.3+ PRINT.COM
  33230.     AX=0204h appears to be the opposite function
  33231. SeeAlso: AX=0204h
  33232. ----------2F0204-----------------------------
  33233. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  33234.     AX = 0204h
  33235.     ???
  33236. Return: nothing???
  33237. Note:    called by DOS 3.3 PRINT.COM
  33238. ----------2F---------------------------------
  33239. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  33240.     AX = 02xxh
  33241.     ???
  33242. Return: ???
  33243. ----------2F0500-----------------------------
  33244. INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  33245.     AX = 0500h
  33246. Return: AL = 00h not installed, OK to install
  33247.          01h not installed, can't install
  33248.          FFh installed
  33249. Note:    this set of functions allows a user program to partially or completely
  33250.       override the default critical error handler's message in COMMAND.COM
  33251. SeeAlso: AH=05h,INT 24
  33252. ----------2F05-------------------------------
  33253. INT 2F UC - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  33254.     AH = 05h
  33255. ---DOS 3.x---
  33256.     AL = extended error code (not zero)
  33257. ---DOS 4+ ---
  33258.     AL = error type
  33259.         01h DOS extended error code
  33260.         02h parameter error
  33261.     BX = error code
  33262. Return: CF clear if successful
  33263.         ES:DI -> ASCIZ error message (read-only)
  33264.         AL = ???
  33265.     CF set if error code can't be converted to string
  33266. Notes:    called at start of COMMAND.COM's default critical error handler if 
  33267.       installed by a user program, allowing partial or complete overriding
  33268.       of the default error message
  33269.     subfunction 02h called by many DOS 4 external programs
  33270. SeeAlso: AX=122Eh,INT 24
  33271. ----------2F0600-----------------------------
  33272. INT 2F - DOS 3+ ASSIGN - INSTALLATION CHECK
  33273.     AX = 0600h
  33274. Return: AL = status
  33275.         00h not installed
  33276.         01h not installed, but not OK to install
  33277.         FFh installed
  33278. Notes:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  33279.       (see INT 21/AH=52h)
  33280.     undocumented prior to the release of DOS 5.0
  33281. SeeAlso: AX=0601h,INT 21/AH=52h
  33282. ----------2F0601-----------------------------
  33283. INT 2F U - DOS 3+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  33284.     AX = 0601h
  33285. Return: ES = segment of ASSIGN work area and assignment table
  33286. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  33287.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  33288. SeeAlso: AX=0600h
  33289. ----------2F0800-----------------------------
  33290. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  33291.     AX = 0800h
  33292. Return:    AL = 00h not installed, OK to install
  33293.          01h not installed, not OK to install
  33294.          FFh installed
  33295. Note:    supported by DR-DOS 5.0
  33296. ----------2F0801-----------------------------
  33297. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  33298.     AX = 0801h
  33299.     DS:DI -> drive data table (see AX=0803h)
  33300. Notes:    moves down internal list of drive data tables, copying and modifying
  33301.       the drive description flags word for tables referencing same physical
  33302.       drive
  33303.     data table appended to chain of tables
  33304.     supported by DR-DOS 5.0
  33305. SeeAlso: AX=0803h
  33306. ----------2F0802-----------------------------
  33307. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  33308.     AX = 0802h
  33309.     ES:BX -> device driver request header (see below)
  33310. Return: request header updated as per requested operation
  33311. Notes:    supported by DR-DOS 5.0
  33312.     DOS 3.2 executes this function on any AL value from 02h through F7h
  33313. SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah
  33314.  
  33315. Values for command code:
  33316.     00h INIT
  33317.     01h MEDIA CHECK (block devices)
  33318.     02h BUILD BPB (block devices)
  33319.     03h IOCTL INPUT
  33320.     04h INPUT
  33321.     05h NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  33322.     06h INPUT STATUS (character devices)
  33323.     07h INPUT FLUSH (character devices)
  33324.     08h OUTPUT
  33325.     09h OUTPUT WITH VERIFY
  33326.     0Ah OUTPUT STATUS (character devices)
  33327.     0Bh OUTPUT FLUSH (character devices)
  33328.     0Ch IOCTL OUTPUT
  33329.     0Dh (DOS 3+) DEVICE OPEN
  33330.     0Eh (DOS 3+) DEVICE CLOSE
  33331.     0Fh (DOS 3+) REMOVABLE MEDIA (block devices)
  33332.     10h (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  33333.     11h (European MSDOS 4.0) STOP OUTPUT (console screen drivers only)
  33334.     12h (European MSDOS 4.0) RESTART OUTPUT (console screen drivers only)
  33335.     13h (DOS 3.2+) GENERIC IOCTL
  33336.     14h unused
  33337.     15h (European MSDOS 4.0) RESET UNCERTAIN MEDIA FLAG
  33338.     16h unused
  33339.     17h (DOS 3.2+) GET LOGICAL DEVICE
  33340.     18h (DOS 3.2+) SET LOGICAL DEVICE
  33341.     19h (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT
  33342.     80h (CD-ROM) READ LONG
  33343.     81h (CD-ROM) reserved
  33344.     82h (CD-ROM) READ LONG PREFETCH
  33345.     83h (CD-ROM) SEEK
  33346.     84h (CD-ROM) PLAY AUDIO
  33347.     85h (CD-ROM) STOP AUDIO
  33348.     86h (CD-ROM) WRITE LONG
  33349.     87h (CD-ROM) WRITE LONG VERIFY
  33350.     88h (CD-ROM) RESUME AUDIO
  33351.  
  33352. Format of device driver request header:
  33353. Offset    Size    Description
  33354.  00h    BYTE    length of request header
  33355.  01h    BYTE    subunit within device driver
  33356.  02h    BYTE    command code (see above)
  33357.  03h    WORD    status (filled in by device driver)
  33358.         bit 15: error
  33359.         bits 14-11: reserved
  33360.         bit 10: ??? set by DOS kernel on entry to some driver calls
  33361.         bit 9: busy
  33362.         bit 8: done (may be clear on return under European MSDOS 4.0)
  33363.         bits 7-0: error code if bit 15 set (see below)
  33364. ---DOS---
  33365.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  33366.  09h    DWORD    (European MSDOS 4.0 only) pointer to next request header in
  33367.             device's request queue
  33368.         (other versions) reserved (unused in DOS 2.x and 3.x)
  33369. ---STARLITE architecture---
  33370.  05h    DWORD    pointer to next request header
  33371.  09h  4 BYTEs    reserved
  33372. ---command code 00h---
  33373.  0Dh    BYTE    (return) number of units
  33374.  0Eh    DWORD    (call) pointer to DOS device helper function (see below)
  33375.             (European MSDOS 4.0 only)
  33376.         (call) pointer past end of memory available to driver (DOS 5.0)
  33377.         (return) address of first free byte following driver
  33378.  12h    DWORD    (call) pointer to commandline arguments
  33379.         (return) pointer to BPB array (block drivers) or
  33380.                 0000h:0000h (character drivers)
  33381.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  33382.    ---European MSDOS 4.0---
  33383.  17h    DWORD    pointer to function to save registers on stack
  33384.    ---DOS 5.0---
  33385.  17h    WORD    (return) error-message flag
  33386.             0001h MSDOS should display error msg on init failure
  33387. ---command code 01h---
  33388.  0Dh    BYTE    media descriptor
  33389.  0Eh    BYTE    returned status
  33390.         00h don't know
  33391.         01h media has not changed
  33392.         FFh media has been changed
  33393.  0Fh    DWORD    (return, DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM
  33394.           bit in device header is set and disk changed
  33395. ---command code 02h---
  33396.  0Dh    BYTE    media descriptor
  33397.  0Eh    DWORD    transfer address
  33398.         -> scratch sector if NON-IBM FORMAT bit in device header set
  33399.         -> first FAT sector otherwise
  33400.  12h    DWORD    pointer to BPB (set by driver) (see INT 21/AH=53h)
  33401. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  33402.  0Dh    BYTE    media descriptor (block devices only)
  33403.  0Eh    DWORD    transfer address
  33404.  12h    WORD    (call) number of bytes to read/write
  33405.         (return) actual number of bytes read or written
  33406. ---command codes 04h,08h,09h---
  33407.  0Dh    BYTE    media descriptor (block devices only)
  33408.  0Eh    DWORD    transfer address
  33409.  12h    WORD    byte count (character devices) or sector count (block devices)
  33410.  14h    WORD    starting sector number (block devices only)
  33411.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  33412.  1Ah    DWORD    (DOS 4+) 32-bit starting sector number (block devices with
  33413.         device attribute word bit 1 set only) (see INT 21/AH=52h)
  33414. ---command code 05h---
  33415.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  33416. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  33417.  no further fields
  33418. ---command code 10h---
  33419.  0Dh    BYTE    unused
  33420.  0Eh    DWORD    transfer address
  33421.  12h    WORD    (call) number of bytes to write
  33422.         (return) actual number of bytes written
  33423. ---command codes 11h,12h---
  33424.  0Dh    BYTE    reserved
  33425. ---command code 15h---
  33426.  no further fields
  33427. ---command codes 13h,19h---
  33428.  0Dh    BYTE    category code
  33429.         00h unknown
  33430.         01h COMn:
  33431.         03h CON
  33432.         05h LPTn:
  33433.         07h mouse (European MSDOS 4.0)
  33434.         08h disk
  33435.         9Eh (STARLITE) Media Access Control driver
  33436.  0Eh    BYTE    function code
  33437.         00h (STARLITE) MAC Bind request
  33438.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  33439.         SI contents (European MSDOS 4.0)
  33440.  11h    WORD    offset of device driver header
  33441.         DI contents (European MSDOS 4.0)
  33442.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  33443. ---command codes 80h,82h---
  33444.  0Dh    BYTE    addressing mode
  33445.         00h HSG (default)
  33446.         01h Phillips/Sony Red Book
  33447.  0Eh    DWORD    transfer address (ignored for command 82h)
  33448.  12h    WORD    number of sectors to read
  33449.         (if 0 for command 82h, request is an advisory seek)
  33450.  14h    DWORD    starting sector number
  33451.         logical sector number in HSG mode
  33452.         frame/second/minute/unused in Red Book mode
  33453.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  33454.  18h    BYTE    data read mode
  33455.         00h cooked (2048 bytes per frame)
  33456.         01h raw (2352 bytes per frame, including EDC/ECC)
  33457.  19h    BYTE    interleave size (number of sectors stored consecutively)
  33458.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  33459. ---command code 83h---
  33460.  0Dh    BYTE    addressing mode (see above)
  33461.  0Eh    DWORD    transfer address (ignored)
  33462.  12h    WORD    number of sectors to read (ignored)
  33463.  14h    DWORD    starting sector number (see also above)
  33464. ---command code 84h---
  33465.  0Dh    BYTE    addressing mode (see above)
  33466.  0Eh    DWORD    starting sector number (see also above)
  33467.  12h    DWORD    number of sectors to play
  33468. ---command codes 85h,88h---
  33469.  no further fields
  33470. ---command codes 86h,87h---
  33471.  0Dh    BYTE    addressing mode (see above)
  33472.  0Eh    DWORD    transfer address (ignored in write mode 0)
  33473.  12h    WORD    number of sectors to write
  33474.  14h    DWORD    starting sector number (see also above)
  33475.  18h    BYTE    write mode
  33476.         00h mode 0 (write all zeros)
  33477.         01h mode 1 (default) (2048 bytes per sector)
  33478.         02h mode 2 form 1 (2048 bytes per sector)
  33479.         03h mode 2 form 2 (2336 bytes per sector)
  33480.  19h    BYTE    interleave size (number of sectors stored consecutively)
  33481.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  33482.  
  33483. Values for error code:
  33484.     00h write-protect violation
  33485.     01h unknown unit
  33486.     02h drive not ready
  33487.     03h unknown command
  33488.     04h CRC error
  33489.     05h bad drive request structure length
  33490.     06h seek error
  33491.     07h unknown media
  33492.     08h sector not found
  33493.     09h printer out of paper
  33494.     0Ah write fault
  33495.     0Bh read fault
  33496.     0Ch general failure
  33497.     0Dh reserved
  33498.     0Eh (CD-ROM) media unavailable
  33499.     0Fh invalid disk change
  33500.  
  33501. Call European MSDOS 4.0 device helper function with:
  33502.     DL = function
  33503.         00h "SchedClock" called on each timer tick
  33504.         AL = tick interval in milliseconds
  33505.         01h "DevDone" device I/O complete
  33506.         ES:BX -> request header
  33507.         Note:    must update status word first; may be called from
  33508.               an interrupt handler
  33509.         02h "PullRequest" pull next request from queue
  33510.         DS:SI -> DWORD pointer to start of device's request queue
  33511.         Return: ZF clear if pending request
  33512.                 ES:BX -> request header
  33513.             ZF set if no more requests
  33514.         03h "PullParticular" remove specific request from queue
  33515.         DS:SI -> DWORD pointer to start of device's request queue
  33516.         ES:BX -> request header
  33517.         Return: ZF set if request header not found
  33518.         04h "PushRequest" push the request onto the queue
  33519.         DS:SI -> DWORD pointer to start of device's request queue
  33520.         ES:BX -> request header
  33521.         interrupts disabled
  33522.         05h "ConsInputFilter" keyboard input check
  33523.         AX = character (high byte 00h if PC ASCII character)
  33524.         Return: ZF set if character should be discarded
  33525.             ZF clear if character should be handled normally
  33526.         Note:    called by keyboard interrupt handler so DOS can scan
  33527.               for special input characters
  33528.         06h "SortRequest" push request in sorted order by starting sector
  33529.         DS:SI -> DWORD pointer to start of device's request queue
  33530.         ES:BX -> request header
  33531.         interrupts disabled
  33532.         07h "SigEvent" send signal on keyboard event
  33533.         AH = event identifier
  33534.         Return: AL,FLAGS destroyed
  33535.         09h "ProcBlock" block on event
  33536.         AX:BX = event identifier (typically a pointer)
  33537.         CX = timeout in ms or 0000h for never
  33538.         DH = interruptible flag (nonzero if pause may be interrupted)
  33539.         interrupts disabled
  33540.         Return:    after corresponding ProcRun call
  33541.             CF clear if event wakeup, set if unusual wakeup
  33542.             ZF set if timeout wakeup, clear if interrupted
  33543.             AL = wakeup code, nonzero if unusual wakeup
  33544.             interrupts enabled
  33545.             BX,CX,DX destroyed
  33546.         Note:    block process and schedules another to run
  33547.         0Ah "ProcRun" unblock process
  33548.         AX:BX = event identifier (typically a pointer)
  33549.         Return:    AX = number of processes awakened
  33550.             ZF set if no processes awakened
  33551.             BX,CX,DX destroyed
  33552.         0Bh "QueueInit" initialize/clear character queue
  33553.         DS:BX -> character queue structure (see below)
  33554.         Note:    the queue size field must be set before calling
  33555.         0Dh "QueueWrite" put a character in the queue
  33556.         DS:BX -> character queue (see below)
  33557.         AL = character to append to end of queue
  33558.         Return: ZF set if queue is full
  33559.             ZF clear if character stored
  33560.         0Eh "QueueRead" get a character from the queue
  33561.         DS:BX -> character queue (see below)
  33562.         Return: ZF set if queue is empty
  33563.             ZF clear if characters in queue
  33564.                 AL = first character in queue
  33565.         10h "GetDOSVar" return pointer to DOS variable
  33566.         AL = index of variable
  33567.             03h current process ID
  33568.         BX = index into variable if AL specifies an array
  33569.         CX = expected length of variable
  33570.         Return: CF clear if successful
  33571.                 DX:AX -> variable
  33572.             CF set on error
  33573.                 AX,DX destroyed
  33574.             BX,CX destroyed
  33575.         Note:    the variables may not be modified
  33576.         14h "Yield" yield CPU if higher-priority task ready to run
  33577.         Return: FLAGS destroyed
  33578.         1Bh "CritEnter" begin system critical section
  33579.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  33580.         Return: AX,BX,CX,DX destroyed
  33581.         1Ch "CritLeave" end system critical section
  33582.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  33583.         Return: AX,BX,CX,DX destroyed
  33584.         Note:    must be called in the context of the process which
  33585.               called CritEnter on the semaphore
  33586. Note:    the DWORD pointing at the request queue must be allocated by the driver
  33587.       and initialized to 0000h:0000h.  It always points at the next request
  33588.       to be executed
  33589.  
  33590. Format of character queue:
  33591. Offset    Size    Description
  33592.  00h    WORD    size of queue in bytes
  33593.  02h    WORD    index of next character out
  33594.  04h    WORD    count of characters in the queue
  33595.  06h  N BYTEs    queue buffer
  33596. ----------2F0803-----------------------------
  33597. INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  33598.     AX = 0803h
  33599. Return: DS:DI -> first drive data table in list
  33600. Note:    not available under DR-DOS 5.0
  33601. SeeAlso: AX=0801h
  33602.  
  33603. Format of DOS 3.30 drive data table:
  33604. Offset    Size    Description
  33605.  00h    DWORD    pointer to next table
  33606.  04h    BYTE    physical unit number (for INT 13)
  33607.  05h    BYTE    logical drive number
  33608.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  33609.         Offset    Size    Description
  33610.          00h    WORD    bytes per sector
  33611.          02h    BYTE    sectors per cluster, FFh if unknown
  33612.          03h    WORD    number of reserved sectors
  33613.          05h    BYTE    number of FATs
  33614.          06h    WORD    number of root dir entries
  33615.          08h    WORD    total sectors
  33616.          0Ah    BYTE    media descriptor, 00h if unknown
  33617.          0Bh    WORD    sectors per FAT
  33618.          0Dh    WORD    sectors per track
  33619.          0Fh    WORD    number of heads
  33620.          11h    WORD    number of hidden sectors
  33621.  19h    BYTE    flags
  33622.         bit 6: 16-bit FAT instead of 12-bit FAT
  33623.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  33624.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  33625.         fixed media)
  33626.  27h    BYTE    terminating null for volume label???
  33627.  28h    BYTE    device type (see INT 21/AX=440Dh)
  33628.  29h    WORD    bit flags describing drive
  33629.         bit 0: fixed media
  33630.         bit 1: door lock supported
  33631.         bit 2: ??? (used in determining BPB to set for INT 21/AX=440Dh)
  33632.         bit 3: all sectors in a track are the same size
  33633.         bit 4: physical drive has multiple logical units
  33634.         bit 5: current logical drive for physical drive
  33635.         bit 6: ???
  33636.         bit 7: ???
  33637.         bit 8: ??? (related to disk change detection)
  33638.  2Bh    WORD    number of cylinders
  33639.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  33640.  40h  3 BYTEs    ???
  33641.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  33642.         (apparently only MSDOS 3.30 fixed media, nulls for removable
  33643.         media and PCDOS 3.30)
  33644.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  33645. ---removable media---
  33646.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  33647. ---fixed media---
  33648.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  33649.  4Fh    WORD    absolute cylinder number of partition's start on physical
  33650.         drive (always FFFFh if primary partition)
  33651.  
  33652. Format of COMPAQ DOS 3.31 drive data table:
  33653. Offset    Size    Description
  33654.  00h    DWORD    pointer to next table
  33655.  04h    BYTE    physical unit number (for INT 13)
  33656.  05h    BYTE    logical drive number
  33657.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.0-5.0 drive data table below)
  33658.  1Fh  6 BYTEs    ??? apparently always zeros
  33659.  25h    BYTE    flags
  33660.         bit 6: 16-bit FAT instead of 12-bit FAT
  33661.             5: large volume???
  33662.  26h    WORD    device-open count???
  33663.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  33664.         fixed media)
  33665.  33h    BYTE    terminating null for volume label
  33666.  34h    BYTE    device type (see INT 21/AX=440Dh)
  33667.  35h    WORD    bit flags describing drive
  33668.  37h    WORD    number of cylinders
  33669.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  33670.  52h  6 BYTEs    ??? apparently always zeros
  33671.  58h    BYTE    least-significant byte of last-accessed cylinder number
  33672. ---removable media---
  33673.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  33674. ---fixed media---
  33675.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  33676.  5Bh    WORD    absolute cylinder number of partition's start on physical
  33677.         drive (always FFFFh if primary partition)
  33678.  
  33679. Format of DOS 4.0-5.0 drive data table:
  33680. Offset    Size    Description
  33681.  00h    DWORD    pointer to next table
  33682.  04h    BYTE    physical unit number (for INT 13)
  33683.  05h    BYTE    logical drive number
  33684.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  33685.         Offset    Size    Description
  33686.          00h    WORD    bytes per sector
  33687.          02h    BYTE    sectors per cluster, FFh if unknown
  33688.          03h    WORD    number of reserved sectors
  33689.          05h    BYTE    number of FATs
  33690.          06h    WORD    number of root dir entries
  33691.          08h    WORD    total sectors (see offset 15h if zero)
  33692.          0Ah    BYTE    media descriptor, 00h if unknown
  33693.          0Bh    WORD    sectors per FAT
  33694.          0Dh    WORD    sectors per track
  33695.          0Fh    WORD    number of heads
  33696.          11h    DWORD    number of hidden sectors
  33697.          15h    DWORD    total sectors if WORD at 08h is zero
  33698.  1Fh    BYTE    flags
  33699.         bit 6: 16-bit FAT instead of 12-bit
  33700.  20h  2 BYTEs    ???
  33701.  22h    BYTE    device type (see INT 21/AX=440Dh)
  33702.  23h    WORD    bit flags describing drive
  33703.         bit 0: fixed media
  33704.         bit 1: door lock supported
  33705.         bit 2: ???
  33706.         bit 3: all sectors in a track are the same size
  33707.         bit 4: physical drive has multiple logical units
  33708.         bit 5: current logical drive for physical drive
  33709.         bit 6: ???
  33710.         bit 7: ???
  33711.         bit 8: ???
  33712.  25h    WORD    number of cylinders
  33713.  27h 25 BYTEs    BIOS Parameter Block for highest capacity supported
  33714.  40h  7 BYTEs    ???
  33715. ---removable media---
  33716.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  33717. ---fixed media, DOS 4.x---
  33718.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  33719.  49h    WORD    absolute cylinder number of partition's start on phys drive
  33720.         (FFFFh if primary partition)
  33721. ---fixed media, DOS 5.0---
  33722.  47h    WORD    ??? apparently always 0001h
  33723.  49h    WORD    absolute cylinder number of partition's start on phys drive
  33724. ------
  33725.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  33726.         extended boot record rather than root directory)
  33727.  56h    BYTE    terminating null for volume label???
  33728.  57h    DWORD    serial number
  33729.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  33730.  63h    BYTE    terminating null for filesystem type???
  33731. ----------2F1000-----------------------------
  33732. INT 2F - SHARE - INSTALLATION CHECK
  33733.     AX = 1000h
  33734. Return: AL = 00h  not installed, OK to install
  33735.          01h  not installed, not OK to install
  33736.          FFh  installed
  33737. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  33738.       (08E9: OR  AL,AL
  33739.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  33740.     values of AL other than described here put PCDOS 4.00 into the same
  33741.       loop (the buggy instructions are the same)
  33742. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  33743.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  33744.       inactive state (due to the undocumented /NC flag used by the autoload
  33745.       code) until this call is made
  33746.     DOS 5.0 chains to the previous handler if AL <> 00h on entry
  33747. SeeAlso: AX=1080h,INT 21/AH=52h
  33748. ----------2F1001-----------------------------
  33749. INT 2F U - SuperStor PRO SSTORDRV.SYS - SET ???
  33750.     AX = 1001h
  33751.     BX = ???
  33752.     DX = ???
  33753. Program: SuperStor is a disk-compression program by Addstor.
  33754. SeeAlso: AX=F800h
  33755. ----------2F1040-----------------------------
  33756. INT 2F U - DOS 4 only SHARE internal - ???
  33757.     AX = 1040h
  33758.     ???
  33759. Return: AL = FFh???
  33760. SeeAlso: AX=1000h
  33761. ----------2F1080-----------------------------
  33762. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  33763.     AX = 1080h
  33764. Return: AL = status
  33765.         F0h successful
  33766.         FFh checking was already on
  33767. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  33768.       and file sharing checks.  The undocumented commandline flag /NC can
  33769.       be used to disable the sharing code.
  33770. SeeAlso: AX=1000h,AX=1081h
  33771. ----------2F1081-----------------------------
  33772. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  33773.     AX = 1081h
  33774. Return: AL = status
  33775.         F0h successful
  33776.         FFh checking was already off
  33777. Note:    (see AX=1080h)
  33778. SeeAlso: AX=1000h,AX=1080h
  33779. ----------2F10FF-----------------------------
  33780. INT 2F U - Multiplex - DR-DOS 5.0 - ???
  33781.     AX = 10FFh
  33782.     ES:BX -> ???
  33783. Note:    sets pointer in kernel
  33784. ----------2F1100-----------------------------
  33785. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  33786.     AX = 1100h
  33787. Return: AL = 00h  not installed, OK to install
  33788.          01h  not installed, not OK to install
  33789.          FFh  installed
  33790. Notes:    called by DOS 3.1+ kernel
  33791.     In DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  33792.       PC LAN Program redirector; DOS 5.0 moves the calls back into the
  33793.       redirector
  33794. ----------2F1100-----------------------------
  33795. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  33796.     AX = 1100h
  33797.     STACK: WORD DADAh
  33798. Return: AL = 00h not installed, OK to install
  33799.         STACK unchanged
  33800.        = 01h not installed, not OK to install
  33801.         STACK unchanged
  33802.        = FFh installed
  33803.         STACK: WORD ADADh
  33804. ----------2F1101-----------------------------
  33805. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  33806.     AX = 1101h
  33807.     SS = DOS DS
  33808.     SDA first filename pointer -> fully-qualified directory name
  33809.     SDA CDS pointer -> current directory structure for drive with dir
  33810. Return: CF set on error
  33811.         AX = DOS error code (see INT 21/AH=59h)
  33812.     CF clear if successful
  33813. Note:    called by DOS 3.1+ kernel
  33814. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  33815. ----------2F1102-----------------------------
  33816. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  33817.     AX = 1102h
  33818.     SS = DOS DS
  33819.     SDA first filename pointer -> fully-qualified directory name
  33820.     SDA CDS pointer -> current directory structure for drive with dir
  33821. Return: CF set on error
  33822.         AX = DOS error code (see INT 21/AH=59h)
  33823.     CF clear if successful
  33824. Note:    appears to be identical to AX=1101h
  33825. SeeAlso: AX=1101h
  33826. ----------2F1103-----------------------------
  33827. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  33828.     AX = 1103h
  33829.     SS = DOS DS
  33830.     SDA first filename pointer -> fully-qualified directory name
  33831.     SDA CDS pointer -> current directory structure for drive with dir
  33832. Return: CF set on error
  33833.         AX = DOS error code (see INT 21/AH=59h)
  33834.     CF clear if successful
  33835. Note:    called by DOS 3.1+ kernel
  33836. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  33837. ----------2F1104-----------------------------
  33838. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  33839.     AX = 1104h
  33840.     SS = DOS DS
  33841.     SDA first filename pointer -> fully-qualified directory name
  33842.     SDA CDS pointer -> current directory structure for drive with dir
  33843. Return: CF set on error
  33844.         AX = DOS error code (see INT 21/AH=59h)
  33845.     CF clear if successful
  33846. Note:    appears to be identical to AX=1103h
  33847. SeeAlso: AX=1103h
  33848. ----------2F1105-----------------------------
  33849. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  33850.     AX = 1105h
  33851.     SS = DOS DS
  33852.     SDA first filename pointer -> fully-qualified directory name
  33853.     SDA CDS pointer -> current directory structure for drive with dir
  33854. Return: CF set on error
  33855.         AX = DOS error code (see INT 21/AH=59h)
  33856.     CF clear if successful
  33857.         CDS updated with new path
  33858. Notes:    called by DOS 3.1+ kernel
  33859.     directory string in CDS should not have a terminating backslash unless
  33860.       the current directory is the root
  33861. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  33862. ----------2F1106-----------------------------
  33863. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  33864.     AX = 1106h
  33865.     ES:DI -> SFT
  33866.         SFT DPB field -> DPB of drive containing file
  33867. Return: CF set on error
  33868.         AX = DOS error code (see INT 21/AH=59h)
  33869.     CF clear if successful
  33870.         SFT updated (redirector must decrement open count, which may be
  33871.             done with INT 2F/AX=1208h)
  33872. Note:    called by DOS 3.1+ kernel
  33873. SeeAlso: AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  33874. ----------2F1107-----------------------------
  33875. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  33876.     AX = 1107h
  33877.     ES:DI -> SFT
  33878.         SFT DPB field -> DPB of drive containing file
  33879. Return: CF set on error
  33880.         AX = DOS error code (see INT 21/AH=59h)
  33881.     CF clear if successful
  33882.         all buffers for file flushed
  33883.         directory entry updated
  33884. Note:    called by DOS 3.1+ kernel
  33885. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  33886. ----------2F1108-----------------------------
  33887. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  33888.     AX = 1108h
  33889.     ES:DI -> SFT
  33890.         SFT DPB field -> DPB of drive containing file
  33891.     CX = number of bytes
  33892.     SS = DOS DS
  33893.     SDA DTA field -> user buffer
  33894. Return: CF set on error
  33895.         AX = DOS error code (see INT 21/AH=59h)
  33896.     CF clear if successful
  33897.         CX = number of bytes read (0000h = end of file)
  33898.         SFT updated
  33899. Note:    called by DOS 3.1+ kernel
  33900. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  33901. ----------2F1109-----------------------------
  33902. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  33903.     AX = 1109h
  33904.     ES:DI -> SFT
  33905.         SFT DPB field -> DPB of drive containing file
  33906.     CX = number of bytes
  33907.     SS = DOS DS
  33908.     SDA DTA field -> user buffer
  33909. Return: CF set on error
  33910.         AX = DOS error code (see INT 21/AH=59h)
  33911.     CF clear if successful
  33912.         CX = number of bytes written
  33913.         SFT updated
  33914. Note:    called by DOS 3.1+ kernel
  33915. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  33916. ----------2F110A-----------------------------
  33917. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  33918.     AX = 110Ah
  33919.     BX = file handle
  33920.     CX:DX = starting offset
  33921.     SI = high word of size
  33922.     STACK: WORD low word of size
  33923.     ES:DI -> SFT
  33924.         SFT DPB field -> DPB of drive containing file
  33925.     SS = DOS DS
  33926. Return: CF set on error
  33927.        AL = DOS error code (see INT 21/AH=59h)
  33928.     STACK unchanged
  33929. Notes:    called by DOS 3.10-3.31 kernel
  33930.     the redirector is expected to resolve lock conflicts
  33931. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  33932. ----------2F110A-----------------------------
  33933. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE
  33934.     AX = 110Ah
  33935.     BL = function
  33936.         00h lock
  33937.         01h unlock
  33938.     DS:DX -> parameter block (see below)
  33939.     ES:DI -> SFT
  33940.         SFT DPB field -> DPB of drive containing file
  33941.     SS = DOS DS
  33942. Return: CF set on error
  33943.        AL = DOS error code (see INT 21/AH=59h)
  33944. Notes:    called by DOS 4.0+ kernel
  33945.     the redirector is expected to resolve lock conflicts
  33946. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  33947.  
  33948. Format of parameter block:
  33949. Offset    Size    Description
  33950.  00h    DWORD    start offset
  33951.  04h    DWORD    size of region
  33952. ----------2F110B-----------------------------
  33953. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  33954.     AX = 110Bh
  33955.     BX = file handle
  33956.     CX:DX = starting offset
  33957.     SI = high word of size
  33958.     STACK: WORD low word of size
  33959.     ES:DI -> SFT for file
  33960.         SFT DPB field -> DPB of drive containing file
  33961. Return: CF set on error
  33962.        AL = DOS error code (see INT 21/AH=59h)
  33963.     STACK unchanged
  33964. Note:    called by DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  33965. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  33966. ----------2F110C-----------------------------
  33967. INT 2F CU - NETWORK REDIRECTOR - GET DISK SPACE
  33968.     AX = 110Ch
  33969.     ES:DI -> current directory structure for desired drive
  33970. Return: AL = sectors per cluster
  33971.     AH = media ID byte
  33972.     BX = total clusters
  33973.     CX = bytes per sector
  33974.     DX = number of available clusters
  33975. Note:    called by DOS 3.1+ kernel
  33976. SeeAlso: INT 21/AH=36h
  33977. ----------2F110D-----------------------------
  33978. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  33979.     AX = 110Dh
  33980.     SDA first filename pointer -> name of file
  33981.     ???
  33982. Return: ???
  33983. Note:    appears to be similar to AX=110Fh
  33984. SeeAlso: AX=110Fh
  33985. ----------2F110E-----------------------------
  33986. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  33987.     AX = 110Eh
  33988.     SS = DOS DS
  33989.     SDA first filename pointer -> fully-qualified name of file
  33990.     SDA CDS pointer -> current directory structure for drive with file
  33991.     STACK: WORD new file attributes
  33992. Return: CF set on error
  33993.         AX = DOS error code (see INT 21/AH=59h)
  33994.     CF clear if successful
  33995.     STACK unchanged
  33996. Note:    called by DOS 3.1+ kernel
  33997. SeeAlso: AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  33998. ----------2F110F-----------------------------
  33999. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  34000.     AX = 110Fh
  34001.     SS = DOS DS
  34002.     SDA first filename pointer -> fully-qualified name of file
  34003.     SDA CDS pointer -> current directory structure for drive with file
  34004. Return: CF set on error
  34005.         AX = DOS error code (see INT 21/AH=59h)
  34006.     CF clear if successful
  34007.         AX = file attributes
  34008.         BX:DI = file size
  34009. Note:    called by DOS 3.1+ kernel
  34010. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  34011. ----------2F1110-----------------------------
  34012. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  34013.     AX = 1110h
  34014.     SDA first filename pointer -> name of file
  34015.     ???
  34016. Return: ???
  34017. Note:    appears to be similar to AX=110Eh
  34018. SeeAlso: AX=110Eh
  34019. ----------2F1111-----------------------------
  34020. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  34021.     AX = 1111h
  34022.     SS = DS = DOS DS
  34023.     SDA first filename pointer = offset of fully-qualified old name
  34024.     SDA second filename pointer = offset of fully-qualified new name
  34025.     SDA CDS pointer -> current directory structure for drive with file
  34026. Return: CF set on error
  34027.         AX = DOS error code (see INT 21/AH=59h)
  34028.     CF clear if successful
  34029. Note:    called by DOS 3.1+ kernel
  34030. SeeAlso: INT 21/AH=56h,INT 21/AH=60h
  34031. ----------2F1112-----------------------------
  34032. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  34033.     AX = 1112h
  34034.     SS = DS = DOS DS
  34035.     SDA first filename pointer -> name of file
  34036.     ???
  34037. Return: ???
  34038. SeeAlso: AX=1111h
  34039. ----------2F1113-----------------------------
  34040. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  34041.     AX = 1113h
  34042.     SS = DS = DOS DS
  34043.     SDA first filename pointer -> fully-qualified filename in DOS DS
  34044.     SDA CDS pointer -> current directory structure for drive with file
  34045. Return: CF set on error
  34046.         AX = DOS error code (see INT 21/AH=59h)
  34047.     CF clear if successful
  34048. Notes:    called by DOS 3.1+ kernel
  34049.     the filespec may contain wildcards
  34050. SeeAlso: INT 21/AH=41h,INT 21/AH=60h
  34051. ----------2F1114-----------------------------
  34052. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  34053.     AX = 1114h
  34054.     SDA first filename pointer -> name of file
  34055.     ???
  34056. Return: ???
  34057. SeeAlso: AX=1113h
  34058. ----------2F1115-----------------------------
  34059. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  34060.     AX = 1115h
  34061.     SS = DOS DS
  34062.     ES:DI -> SFT ???
  34063.     ???
  34064. Return: ???
  34065. SeeAlso: AX=112Eh
  34066. ----------2F1116-----------------------------
  34067. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  34068.     AX = 1116h
  34069.     ES:DI -> uninitialized SFT
  34070.     SS = DOS DS
  34071.     SDA first filename pointer -> fully-qualified name of file to open
  34072.     STACK: WORD file open mode (see INT 21/AH=3Dh)
  34073. Return: CF set on error
  34074.         AX = DOS error code (see INT 21/AH=59h)
  34075.     CF clear if successful
  34076.         SFT filled (except handle count, which DOS manages itself)
  34077.     STACK unchanged
  34078. Note:    called by DOS 3.1+ kernel
  34079. SeeAlso: AX=1106h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh,INT 21/AH=60h
  34080. ----------2F1117-----------------------------
  34081. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  34082.     AX = 1117h
  34083.     ES:DI -> uninitialized SFT
  34084.     SS = DOS DS
  34085.     SDA first filename pointer -> fully-qualified name of file to open
  34086.     SDA CDS pointer -> current directory structure for drive with file
  34087.     STACK: WORD file creation mode
  34088.             low byte = file attributes
  34089.             high byte = 00h normal create, 01h create new file
  34090. Return: CF set on error
  34091.         AX = DOS error code (see INT 21/AH=59h)
  34092.     CF clear if successful
  34093.         SFT filled (except handle count, which DOS manages itself)
  34094.     STACK unchanged
  34095. Note:    called by DOS 3.1+ kernel
  34096. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  34097. ----------2F1118-----------------------------
  34098. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  34099.     AX = 1118h
  34100.     ES:DI -> uninitialized SFT
  34101.     SS = DOS DS
  34102.     SDA first filename pointer -> fully-qualified name of file
  34103.     STACK: WORD file creation mode
  34104.             low byte = file attributes
  34105.             high byte = 00h normal create, 01h create new file
  34106. Return: ???
  34107.     STACK unchanged
  34108. Note:    called by DOS 3.1+ kernel when creating a file on a drive for which the
  34109.       SDA CDS pointer has offset FFFFh
  34110. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  34111. ----------2F1119-----------------------------
  34112. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  34113.     AX = 1119h
  34114.     SS = DS = DOS DS
  34115.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  34116.     SDA first filename pointer -> fully-qualified search template
  34117.     SDA search attribute = attribute mask for search
  34118. Return: CF set on error
  34119.         AX = DOS error code (see INT 21/AH=59h)
  34120.     CF clear if successful
  34121.         [DTA] = updated findfirst search data
  34122.             (bit 7 of first byte must be set)
  34123.         [DTA+15h] = standard directory entry for file
  34124. Notes:    called by DOS 3.1+ kernel
  34125.     DOS 4.x IFSFUNC returns CF set, AX=0003h    
  34126. ----------2F111A-----------------------------
  34127. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  34128.     AX = 111Ah
  34129.     ???
  34130. Return: CF set
  34131.         AX = error code (03h for DOS 4.01 IFSFUNC)
  34132. ----------2F111B-----------------------------
  34133. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  34134.     AX = 111Bh
  34135.     SS = DS = DOS DS
  34136.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  34137.     SDA first filename pointer -> fully-qualified search template
  34138.     SDA CDS pointer -> current directory structure for drive with file
  34139.     SDA search attribute = attribute mask for search
  34140. Return: CF set on error
  34141.         AX = DOS error code (see INT 21/AH=59h)
  34142.     CF clear if successful
  34143.         [DTA] = updated findfirst search data
  34144.             (bit 7 of first byte must be set)
  34145.         [DTA+15h] = standard directory entry for file
  34146. Note:    called by DOS 3.1+ kernel
  34147. SeeAlso: AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  34148. ----------2F111C-----------------------------
  34149. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  34150.     AX = 111Ch
  34151.     SS = DS = DOS DS
  34152.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  34153. Return: CF set on error
  34154.         AX = DOS error code (see INT 21/AH=59h)
  34155.     CF clear if successful
  34156.         [DTA] = updated findfirst search data
  34157.             (bit 7 of first byte must be set)
  34158.         [DTA+15h] = standard directory entry for file
  34159. Note:    called by DOS 3.1+ kernel
  34160. SeeAlso: AX=111Bh,INT 21/AH=4Fh
  34161. ----------2F111D-----------------------------
  34162. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS
  34163.     AX = 111Dh
  34164.     DS???
  34165.     SS = DOS DS
  34166. Return: ???
  34167. Notes:    called by DOS 3.1+ kernel
  34168.     closes all FCBs opened by process
  34169. SeeAlso: INT 21/AX=5D04h
  34170. ----------2F111E-----------------------------
  34171. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  34172.     AX = 111Eh
  34173.     SS = DOS DS
  34174.     STACK: WORD function to execute
  34175.         5F00h  get redirection mode
  34176.             BL = type (03h printer, 04h disk)
  34177.             Return: BH = state (00h off, 01h on)
  34178.         5F01h  set redirection mode
  34179.             BL = type (03h printer, 04h disk)
  34180.             BH = state (00h off, 01h on)
  34181.         5F02h  get redirection list entry
  34182.             BX = redirection list index
  34183.             DS:SI -> 16-byte local device name buffer
  34184.             ES:DI -> 128-byte network name buffer
  34185.             Return: must set user's BX to device type and CX to
  34186.                 stored parameter value, using AX=1218h to get
  34187.                 stack frame address
  34188.         5F03h  redirect device
  34189.             BL = device type (see INT 21/AX=5F03h)
  34190.             CX = stored parameter value
  34191.             DS:SI -> ASCIZ source device name
  34192.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  34193.         5F04h  cancel redirection
  34194.             DS:SI -> ASCIZ device name or network path
  34195.         5F05h  get redirection list extended entry
  34196.             BX = redirection list index
  34197.             DS:SI -> buffer for ASCIZ source device name
  34198.             ES:DI -> buffer for destination ASCIZ network path
  34199.             Return: BH = status flag
  34200.                 BL = type (03h printer, 04h disk)
  34201.                 CX = stored parameter value
  34202.                 BP = NETBIOS local session number
  34203.         5F06h  similar to 5F05h???
  34204. Return: CF set on error
  34205.         AX = error code (see INT 21/AH=59h)
  34206.     STACK unchanged
  34207. Note:    called by DOS 3.1+ kernel
  34208. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  34209. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  34210. ----------2F111F-----------------------------
  34211. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  34212.     AX = 111Fh
  34213.     STACK: WORD function
  34214.         5E02h  set printer setup
  34215.         5E03h  get printer setup
  34216.         5E04h  set printer mode
  34217.         5E05h  get printer mode
  34218. Return: CF set on error
  34219.         AX = error code (see INT 21/AH=59h)
  34220.     STACK unchanged
  34221. Note:    called by DOS 3.1+ kernel
  34222. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  34223. ----------2F1120-----------------------------
  34224. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  34225.     AX = 1120h
  34226.     DS = DOS DS
  34227.     ???
  34228. Return: CF clear (successful)
  34229. Notes:    called by DOS 3.1+ kernel
  34230.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  34231. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  34232. ----------2F1121-----------------------------
  34233. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  34234.     AX = 1121h
  34235.     CX:DX = offset (in bytes) from end
  34236.     ES:DI -> SFT
  34237.         SFT DPB field -> DPB of drive with file
  34238.     SS = DOS DS
  34239. Return: CF set on error
  34240.         AL = DOS error code (see INT 21/AH=59h)
  34241.     CF clear if successful
  34242.         DX:AX = new file position
  34243. Note:    called by DOS 3.1+ kernel
  34244. SeeAlso: AX=1228h,INT 21/AH=42h
  34245. ----------2F1122-----------------------------
  34246. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  34247.     AX = 1122h
  34248.     SS = DOS DS
  34249.     ???
  34250. Return: ???
  34251. Note:    called by DOS 3.1+ kernel
  34252. ----------2F1123-----------------------------
  34253. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  34254.     AX = 1123h
  34255.     DS:SI -> ASCIZ filename to canonicalize
  34256.     ES:DI -> 128-byte buffer for qualified name
  34257. Return: CF set if not resolved
  34258. Notes:    called by MSDOS 3.1+ kernel, but not called by DR-DOS 5.0 unless the
  34259.       filename matches the name of a character device
  34260.     called first when DOS attempts to resolve a filename (unless inside an
  34261.       AX=5D00h server call); if this fails, DOS resolves the name locally
  34262. SeeAlso: AX=1221h,INT 21/AH=60h
  34263. ----------2F1124-----------------------------
  34264. INT 2F CU - NETWORK REDIRECTOR - PRINTER OFF???
  34265.     AX = 1124h
  34266.     ES:DI -> SFT
  34267.     SS = DOS DS
  34268.     ???
  34269. Return: CX = ???
  34270. Note:    called by DOS 3.1+ kernel if AX=1126h returns CF set
  34271. SeeAlso: AX=1126h
  34272. ----------2F1125-----------------------------
  34273. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  34274.     AX = 1125h
  34275.     STACK: WORD subfunction
  34276.         5D07h get print stream state
  34277.             Return: DL = current state
  34278.         5D08h set print stream state
  34279.             DL = new state
  34280.         5D09h finish print job
  34281. Return: CF set on error
  34282.         AX = error code (see INT 21/AH=59h)
  34283.     STACK unchanged
  34284. Note:    called by DOS 3.1+ kernel
  34285. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  34286. ----------2F1126-----------------------------
  34287. INT 2F CU - NETWORK REDIRECTOR - PRINTER ON/OFF???
  34288.     AX = 1126h
  34289.     ES:DI -> SFT for file handle 4???
  34290.     SS = DOS DS???
  34291.     ???
  34292. Return: CF set on error
  34293. Notes:    called by DOS 3.1+ kernel
  34294.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  34295.       bit 11 of the device information word in the SFT set
  34296. SeeAlso: AX=1124h
  34297. ----------2F1127-----------------------------
  34298. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  34299.     AX = 1127h
  34300. Return: CF set
  34301.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  34302. ----------2F1128-----------------------------
  34303. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  34304.     AX = 1128h
  34305. Return: CF set
  34306.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  34307. ----------2F1129-----------------------------
  34308. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  34309.     AX = 1129h
  34310. Return: CF set
  34311.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  34312. ----------2F112A-----------------------------
  34313. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  34314.     AX = 112Ah
  34315.     DS = DOS DS
  34316.     ???
  34317. Return: ???
  34318. Note:    does something to each IFS driver
  34319. ----------2F112B-----------------------------
  34320. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL???
  34321.     AX = 112Bh
  34322.     SS = DOS DS
  34323.     CX = function/category
  34324.     DS:DX -> parameter block
  34325.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  34326.     ???
  34327. Return: CF set on error
  34328.         AX = DOS error code (see INT 21/AH=59h)
  34329.     CF clear if successful
  34330. Note:    called by DOS 4.0 kernel
  34331. ----------2F112C-----------------------------
  34332. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  34333.     AX = 112Ch
  34334.     SS = DOS DS
  34335.     SDA current SFT pointer -> SFT for file
  34336.     ???
  34337. Return: CF set on error
  34338. Note:    called by SHARE in DOS 5.0
  34339. ----------2F112D-----------------------------
  34340. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  34341.     AX = 112Dh
  34342.     BL = subfunction (value of AL on INT 21)
  34343.         04h truncate open file to zero length
  34344.         ES:DI -> SFT for file
  34345.         Return: CF clear
  34346.         else ???
  34347.         Return: CX = ??? (00h or 02h for DOS 4.01)
  34348.     ES:DI -> SFT
  34349.     SS = DOS DS
  34350. Return: DS = DOS DS
  34351. Note:    called by DOS 4.0 kernel on INT 21/AX=5702h,INT 21/AX=5703h,
  34352.       INT 21/AX=5704h
  34353. ----------2F112E-----------------------------
  34354. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE
  34355.     AX = 112Eh
  34356.     SS = DS = DOS DS
  34357.     ES:DI -> uninitialized SFT for file
  34358.     STACK: WORD file attribute for created/truncated file
  34359.             low byte = file attributes
  34360.             high byte = 00h normal create/open, 01h create new file
  34361.     SDA first filename pointer -> fully-qualified filename
  34362.     SDA extended file open action = action code (see INT 21/AX=6C00h)
  34363.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  34364. Return: CF set on error
  34365.         AX = error code
  34366.     CF clear if successful
  34367.         CX = result code
  34368.         01h file opened
  34369.         02h file created
  34370.         03h file replaced (truncated)
  34371.         SFT initialized (except handle count, which DOS manages itself)
  34372. Note:    called by DOS 4.0 kernel
  34373. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  34374. ----------2F112F-----------------------------
  34375. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  34376.     AX = 112Fh
  34377.     SS = DOS DS
  34378.     STACK: WORD function in low byte
  34379.         00h ???
  34380.             DS:SI -> Current Directory Structure???
  34381.             CL = drive (1=A:)
  34382.         01h ???
  34383.             DS:SI -> ???
  34384.             CL = file handle???
  34385.         02h ???
  34386.             DS:SI -> Current Directory Structure???
  34387.             DI = ???
  34388.             CX = drive (1=A:)
  34389.     ???
  34390. Return: CF set on error
  34391.         AX = DOS error code (see INT 21/AH=59h)
  34392.     CF clear if successful
  34393. Note:    called by DOS 4.0 kernel
  34394. SeeAlso: INT 21/AH=6Bh
  34395. ----------2F1130-----------------------------
  34396. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  34397.     AX = 1130h
  34398. Return: ES = CS of resident IFSFUNC
  34399. ----------2F1186-----------------------------
  34400. INT 2F - LAN Manager Enhanced DOS API - DosReadAsynchNmPipe
  34401.     AX = 1186h
  34402.     ???
  34403. Return: ???
  34404. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  34405.       file/printer services
  34406. SeeAlso: AX=118Fh,INT 21/AX=5F39h
  34407. ----------2F118A-----------------------------
  34408. INT 2F - LAN Manager 2.0 DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  34409.     AX = 118Ah
  34410.     ???
  34411. Return: ???
  34412. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  34413. ----------2F118F-----------------------------
  34414. INT 2F - LAN Manager Enhanced DOS API - DosWriteAsynchNmPipe
  34415.     AX = 118Fh
  34416.     ???
  34417. Return: ???
  34418. SeeAlso: AX=1186h,INT 21/AX=5F3Ah
  34419. ----------2F1200-----------------------------
  34420. INT 2F U - DOS 3+ internal - INSTALLATION CHECK
  34421.     AX = 1200h
  34422. Return: AL = FFh (for compatibility with other INT 2F functions)
  34423. ----------2F1201-----------------------------
  34424. INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE
  34425.     AX = 1201h
  34426.     SS = DOS DS (must be using a DOS internal stack)
  34427.     SDA current SFT pointer -> SFT of file to close
  34428. Return: CF set on error
  34429.     BX???
  34430.     CX new reference count of SFT
  34431.     ES:DI -> SFT for file
  34432. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  34433. ----------2F1202-----------------------------
  34434. INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS
  34435.     AX = 1202h
  34436.     STACK: WORD vector number
  34437. Return: ES:BX -> interrupt vector
  34438.     STACK unchanged
  34439. ----------2F1203-----------------------------
  34440. INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT
  34441.     AX = 1203h
  34442. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  34443. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  34444.       segment
  34445. ----------2F1204-----------------------------
  34446. INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  34447.     AX = 1204h
  34448.     STACK: WORD character to normalize
  34449. Return: AL = normalized character (forward slash turned to backslash, all
  34450.         others unchanged)
  34451.     ZF set if path separator
  34452.     STACK unchanged
  34453. ----------2F1205-----------------------------
  34454. INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  34455.     AX = 1205h
  34456.     STACK: WORD character to output
  34457. Return: STACK unchanged
  34458. Note:    can be called only from within DOS
  34459. ----------2F1206-----------------------------
  34460. INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR
  34461.     AX = 1206h
  34462.     DI = error code
  34463.     BP:SI -> device driver header
  34464.     SS = DOS DS (must be using a DOS internal stack)
  34465.     STACK: WORD value to be passed to INT 24 in AX
  34466. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  34467.     STACK unchanged
  34468. SeeAlso: INT 24
  34469. ----------2F1207-----------------------------
  34470. INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  34471.     AX = 1207h
  34472.     DS:DI -> disk buffer
  34473. Return: nothing
  34474. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  34475.       recently used is first); under DOS 3.3, the buffer is then moved to
  34476.       the start of the disk buffer chain if it was marked unused
  34477. Note:    can be called only from within DOS
  34478. SeeAlso: AX=120Fh
  34479. ----------2F1208-----------------------------
  34480. INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  34481.     AX = 1208h
  34482.     ES:DI -> SFT
  34483. Return: AX = original value of reference count
  34484. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  34485.       that the SFT is not in use).    It is the caller's responsibility to
  34486.       set the reference count to zero after cleaning up.
  34487.     used by network redirectors such as MSCDEX
  34488. SeeAlso: AX=1106h
  34489. ----------2F1209-----------------------------
  34490. INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  34491.     AX = 1209h
  34492.     DS:DI -> disk buffer
  34493. Return: disk buffer marked unused, contents written to disk if buffer dirty
  34494. Note:    can be called only from within DOS
  34495. SeeAlso: AX=120Eh,AX=1215h
  34496. ----------2F120A-----------------------------
  34497. INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  34498.     AX = 120Ah
  34499.     DS = SS = DOS DS (must be using a DOS internal stack)
  34500.     STACK: WORD extended error code
  34501. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  34502.     CF clear if retry, set otherwise
  34503.     STACK unchanged
  34504. Notes:    can only be called during a DOS function call, as it uses various
  34505.       fields in the SDA to set up the registers for the INT 24
  34506.     reportedly sets current DPB's first root directory sector to 1
  34507. SeeAlso: INT 24
  34508. ----------2F120B-----------------------------
  34509. INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  34510.     AX = 120Bh
  34511.     ES:DI -> system file table entry for previous open of file
  34512.     STACK: WORD extended error code (should be 20h--sharing violation)
  34513. Return: CF clear if operation should be retried
  34514.     CF set if operation should not be retried
  34515.         AX = error code (20h) (see INT 21/AH=59h)
  34516.     STACK unchanged
  34517. Notes:    can only be called during a DOS function call
  34518.     should only be called if an attempt was made to open an already-open
  34519.       file contrary to the sharing rules
  34520.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  34521.       inheritance allowed
  34522. ----------2F120C-----------------------------
  34523. INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER???
  34524.     AX = 120Ch
  34525.     SDA current SFT pointer -> SFT for file
  34526.     DS = DOS DS
  34527.     SS = DOS DS (must be using a DOS internal stack)
  34528. Return: ES, DI, AX destroyed
  34529. Notes:    invokes "device open" call on device driver for SFT
  34530.     changes owner of last-accessed SFT to calling process if it was opened
  34531.       via FCB
  34532.     called by network redirectors such as MSCDEX
  34533. ----------2F120D-----------------------------
  34534. INT 2F U - DOS 3+ internal - GET DATE AND TIME
  34535.     AX = 120Dh
  34536.     SS = DOS DS (must be using a DOS internal stack)
  34537. Return: AX = current date in packed format (see INT 21/AX=5700h)
  34538.     DX = current time in packed format (see INT 21/AX=5700h)
  34539. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  34540. ----------2F120E-----------------------------
  34541. INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  34542.     AX = 120Eh
  34543.     SS = DOS DS (must be using a DOS internal stack)
  34544. Return: DS:DI -> first disk buffer
  34545. Note:    clears "referenced" flag on all disk buffers
  34546. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  34547. ----------2F120F-----------------------------
  34548. INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  34549.     AX = 120Fh
  34550.     DS:DI -> disk buffer
  34551.     SS = DOS DS (must be using a DOS internal stack)
  34552. Return: DS:DI -> next buffer in buffer list
  34553. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  34554.       recently used is first); under DOS 3.3, the buffer is then moved to
  34555.       the start of the disk buffer chain if it was marked unused
  34556. Note:    this function is the same as AX=1207h except that it returns a
  34557.       pointer to the buffer following the specified buffer in the buffer
  34558.       chain
  34559. SeeAlso: AX=1207h
  34560. ----------2F1210-----------------------------
  34561. INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  34562.     AX = 1210h
  34563.     DS:DI -> first disk buffer to check
  34564. Return: ZF clear if found
  34565.         DS:DI -> first unreferenced disk buffer
  34566.     ZF set if not found
  34567. SeeAlso: AX=120Eh
  34568. ----------2F1211-----------------------------
  34569. INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  34570.     AX = 1211h
  34571.     DS:SI -> ASCIZ filename to normalize
  34572.     ES:DI -> buffer for normalized filename
  34573. Return: destination buffer filled with uppercase filename, with slashes turned
  34574.     to backslashes
  34575. SeeAlso: AX=121Eh,AX=1221h
  34576. ----------2F1212-----------------------------
  34577. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  34578.     AX = 1212h
  34579.     ES:DI -> ASCIZ string
  34580. Return: CX = length of string
  34581. SeeAlso: AX=1225h
  34582. ----------2F1213-----------------------------
  34583. INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER
  34584.     AX = 1213h
  34585.     STACK: WORD character to convert to uppercase
  34586. Return: AL = uppercase character
  34587.     STACK unchanged
  34588. ----------2F1214-----------------------------
  34589. INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS
  34590.     AX = 1214h
  34591.     DS:SI = first pointer
  34592.     ES:DI = second pointer
  34593. Return: ZF set if pointers are equal, ZF clear if not equal
  34594. ----------2F1215-----------------------------
  34595. INT 2F U - DOS 3+ internal - FLUSH BUFFER
  34596.     AX = 1215h
  34597.     DS:DI -> disk buffer
  34598.     SS = DOS DS (must be using a DOS internal stack)
  34599.     STACK: WORD drives for which to skip buffer
  34600.         ignore buffer if drive same as high byte, or bytes differ and
  34601.         the buffer is for a drive OTHER than that given in low byte
  34602. Return: STACK unchanged
  34603. Note:    can be called only from within DOS
  34604. SeeAlso: AX=1209h
  34605. ----------2F1216-----------------------------
  34606. INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE
  34607.     AX = 1216h
  34608.     BX = system file table entry number
  34609. Return: CF clear if successful
  34610.         ES:DI -> system file table entry
  34611.     CF set if BX greater than FILES=
  34612. SeeAlso: AX=1220h
  34613. ----------2F1217-----------------------------
  34614. INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  34615.     AX = 1217h
  34616.     SS = DOS DS (must be using a DOS internal stack)
  34617.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  34618. Return: CF set on error
  34619.         (drive > LASTDRIVE)
  34620.     CF clear if successful
  34621.         DS:SI -> current directory structure for specified drive
  34622.     STACK unchanged
  34623. SeeAlso: AX=1219h
  34624. ----------2F1218-----------------------------
  34625. INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS
  34626.     AX = 1218h
  34627. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  34628. Note:    only valid while within DOS
  34629. ----------2F1219-----------------------------
  34630. INT 2F U - DOS 3+ internal - SET DRIVE???
  34631.     AX = 1219h
  34632.     SS = DOS DS (must be using a DOS internal stack)
  34633.     STACK: WORD drive (0 = default, 1 = A:, etc)
  34634. Return: ???
  34635.     STACK unchanged
  34636. Notes:    calls AX=1217h
  34637.     builds a current directory structure if inside server call
  34638.       (INT 21/AX=5D00h)
  34639. SeeAlso: AX=1217h,AX=121Fh
  34640. ----------2F121A-----------------------------
  34641. INT 2F U - DOS 3+ internal - GET FILE'S DRIVE
  34642.     AX = 121Ah
  34643.     DS:SI -> filename
  34644. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  34645.     DS:SI -> filename without leading X: (if present)
  34646. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  34647. ----------2F121B-----------------------------
  34648. INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  34649.     AX = 121Bh
  34650.     CL = year - 1980
  34651. Return: AL = number of days in February
  34652. Note:    requires DS to be set to the DOS code segment
  34653. SeeAlso: INT 21/AH=2Bh
  34654. ----------2F121C-----------------------------
  34655. INT 2F U - DOS 3+ internal - CHECKSUM MEMORY
  34656.     AX = 121Ch
  34657.     DS:SI -> start of memory to checksum
  34658.     CX = number of bytes
  34659.     DX = initial checksum
  34660.     SS = DOS DS (must be using a DOS internal stack)
  34661. Return: AX, CX destroyed
  34662.     DX = checksum
  34663.     DS:SI -> first byte after checksummed range
  34664. Note:    used by DOS to determine day count since 1/1/80 given a date
  34665. SeeAlso: AX=121Dh
  34666. ----------2F121D-----------------------------
  34667. INT 2F U - DOS 3+ internal - SUM MEMORY
  34668.     AX = 121Dh
  34669.     DS:SI -> memory to add up
  34670.     CX = 0000h
  34671.     DX = limit
  34672. Return: AL = byte which exceeded limit
  34673.     CX = number of bytes before limit exceeded
  34674.     DX = remainder after adding first CX bytes
  34675.     DS:SI -> byte beyond the one which exceeded the limit
  34676. Note:    used by DOS to determine year or month given day count since 1/1/80
  34677. SeeAlso: AX=121Ch
  34678. ----------2F121E-----------------------------
  34679. INT 2F U - DOS 3+ internal - COMPARE FILENAMES
  34680.     AX = 121Eh
  34681.     DS:SI -> first ASCIZ filename
  34682.     ES:DI -> second ASCIZ filename
  34683. Return: ZF set if filenames equivalent, ZF clear if not
  34684. SeeAlso: AX=1211h,AX=1221h
  34685. ----------2F121F-----------------------------
  34686. INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  34687.     AX = 121Fh
  34688.     SS = DOS DS (must be using a DOS internal stack)
  34689.     STACK: WORD drive letter
  34690. Return: ES:DI -> current directory structure (will be overwritten by next call)
  34691.     STACK unchanged
  34692. ----------2F1220-----------------------------
  34693. INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  34694.     AX = 1220h
  34695.     BX = file handle
  34696. Return: CF set on error
  34697.         AL = 6 (invalid file handle)
  34698.     CF clear if successful
  34699.         ES:DI -> JFT entry for file handle in current process
  34700. Note:    the byte pointed at by ES:DI contains the number of the SFT for the
  34701.       file handle, or FFh if the handle is not open
  34702. SeeAlso: AX=1216h,AX=1229h
  34703. ----------2F1221-----------------------------
  34704. INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME
  34705.     AX = 1221h
  34706.     DS:SI -> file name to be fully qualified
  34707.     ES:DI -> 128-byte buffer for resulting canonical file name
  34708.     SS = DOS DS (must be using a DOS internal stack)
  34709. Return: (see INT 21/AH=60h)
  34710. Note:    identical to INT 21/AH=60h
  34711. SeeAlso: AX=1123h,INT 21/AH=60h
  34712. ----------2F1222-----------------------------
  34713. INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO
  34714.     AX = 1222h
  34715.     SS = DOS data segment
  34716.     SS:SI -> 4-byte records
  34717.         BYTE    error code, FFh = last record
  34718.         BYTE    error class, FFh = don't change
  34719.         BYTE    suggested action, FFh = don't change
  34720.         BYTE    error locus, FFh = don't change
  34721.     SDA error code set
  34722. Return: SI destroyed
  34723.     SDA error class, error locus, and suggested action fields set
  34724. Note:    can be called only from within DOS
  34725. SeeAlso: AX=122Dh,INT 21/AH=59h
  34726. ----------2F1223-----------------------------
  34727. INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  34728.     AX = 1223h
  34729.     DS = DOS DS
  34730.     SS = DOS DS (must be using a DOS internal stack)
  34731.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  34732.     SDA+22Bh (DOS 4.0-5.0) = eight-character blank-padded name
  34733. Return: CF set if no character device by that name found
  34734.     CF clear if found
  34735.         BH = low byte of device attribute word
  34736. Note:    can only be called from within DOS
  34737. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  34738. ----------2F1224-----------------------------
  34739. INT 2F U - DOS 3+ internal - DELAY
  34740.     AX = 1224h
  34741.     SS = DOS DS (must be using a DOS internal stack)
  34742. Return: after delay set by INT 21/AX=440Bh, unless in server call
  34743.       (INT 21/AX=5D00h)
  34744. Note:    delay is dependent on the processor speed, and is skipped entirely if
  34745.       inside a server call
  34746. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h
  34747. ----------2F1225-----------------------------
  34748. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  34749.     AX = 1225h
  34750.     DS:SI -> ASCIZ string
  34751. Return: CX = length of string
  34752. SeeAlso: AX=1212h
  34753. ----------2F1226-----------------------------
  34754. INT 2F U - DOS 3.3+ internal - OPEN FILE
  34755.     AX = 1226h
  34756.     CL = access mode
  34757.     DS:DX -> ASCIZ filename
  34758.     SS = DOS DS (must be using a DOS internal stack)
  34759. Return: CF set on error
  34760.         AL = error code (see INT 21/AH=59h)
  34761.     CF clear if successful
  34762.         AX = file handle
  34763. Notes:    can only be called from within DOS
  34764.     equivalent to INT 21/AH=3Dh    
  34765. SeeAlso: AX=1227h,INT 21/AH=3Dh
  34766. ----------2F1227-----------------------------
  34767. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  34768.     AX = 1227h
  34769.     BX = file handle
  34770.     SS = DOS DS (must be using a DOS internal stack)
  34771. Return: CF set on error
  34772.         AL = 06h invalid file handle
  34773.     CF clear if successful
  34774. Notes:    can only be called from within DOS
  34775.     equivalent to INT 21/AH=3Eh
  34776. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  34777. ----------2F1228BP4200-----------------------
  34778. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  34779.     AX = 1228h
  34780.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  34781.     BX = file handle
  34782.     CX:DX = offset in bytes
  34783.     SS = DOS DS (must be using a DOS internal stack)
  34784. Return: as for INT 21/AH=42h
  34785. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  34786.       function call
  34787.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  34788.       LSEEK, and restores frame pointer
  34789. SeeAlso: INT 21/AH=42h
  34790. ----------2F1229-----------------------------
  34791. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  34792.     AX = 1229h
  34793.     BX = file handle
  34794.     CX = number of bytes to read
  34795.     DS:DX -> buffer
  34796.     SS = DOS DS (must be using a DOS internal stack)
  34797. Return: as for INT 21/AH=3Fh
  34798. Note:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  34799.       a DOS function call
  34800. SeeAlso: AX=1226h,INT 21/AH=3Fh
  34801. ----------2F122A-----------------------------
  34802. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  34803.     AX = 122Ah
  34804.     BX = entry point to set (0001h or 0002h)
  34805.     DS:SI -> FASTOPEN entry point
  34806.         (entry point not set if SI = FFFFh for DOS 4+)
  34807. Return: CF set if specified entry point already set
  34808. Notes:    entry point in BX is ignored under DOS 3.30
  34809.     both entry points set to same handler by DOS 4.01
  34810.  
  34811. DOS 3.30+ FASTOPEN is called with:
  34812.     AL = 01h  ???
  34813.         CX = ??? seems to be offset
  34814.         DI = ??? seems to be offset
  34815.         SI = offset in DOS DS of filename
  34816.     AL = 02h  ???
  34817.     AL = 03h  open file???
  34818.         SI = offset in DOS DS of filename
  34819.     AL = 04h  ???
  34820.         AH = subfunction (00h,01h,02h)
  34821.         ES:DI -> ???
  34822.         CX = ??? (subfunctions 01h and 02h only)
  34823. Returns: CF set on error or not installed
  34824. Note: function 03h calls function 01h first
  34825.  
  34826. PCDOS 4.01 FASTOPEN is additionally called with:
  34827.     AL = 04h ???
  34828.         AH = 03h
  34829.         ???
  34830.     AL = 05h ???
  34831.     AL = 0Bh ???
  34832.     AL = 0Ch ???
  34833.     AL = 0Dh ???
  34834.     AL = 0Eh ???
  34835.     AL = 0Fh ???
  34836.     AL = 10h ???
  34837.  
  34838. MSDOS 5.0 FASTOPEN is additionally called with:
  34839.     AL = 04h ???
  34840.         AH = 03h
  34841.         ???
  34842.     AL = 05h ???
  34843.         DL = drive (00h = A:)
  34844.         ???
  34845.     AL = 06h ???
  34846. ----------2F122B-----------------------------
  34847. INT 2F U - DOS 3.3+ internal - IOCTL
  34848.     AX = 122Bh
  34849.     BP = 44xxh
  34850.     SS = DOS DS (must be using a DOS internal stack)
  34851.     additional registers as appropriate for INT 21/AX=44xxh
  34852. Return: as for INT 21/AH=44h
  34853. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  34854.       a DOS function call
  34855.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  34856.       IOCTL, and restores frame pointer
  34857. SeeAlso: INT 21/AH=44h
  34858. ----------2F122C-----------------------------
  34859. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  34860.     AX = 122Ch
  34861. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  34862. SeeAlso: INT 21/AH=52h
  34863. ----------2F122D-----------------------------
  34864. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  34865.     AX = 122Dh
  34866. Return: AX = current extended error code
  34867. SeeAlso: AX=1222h,INT 21/AH=59h
  34868. ----------2F122E-----------------------------
  34869. INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  34870.     AX = 122Eh
  34871.     DL = subfunction
  34872.         00h get standard DOS error table
  34873.         Return: ES:DI -> error table
  34874.                  (DOS 4: errors 00h-12h,50h-5Bh)
  34875.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  34876.         01h set standard DOS error table
  34877.         ES:DI -> error table
  34878.         02h get parameter error table (errors 00h-0Ah)
  34879.         Return: ES:DI -> error table
  34880.         03h set parameter error table
  34881.         ES:DI -> error table
  34882.         04h get critical/SHARE error table (errors 13h-2Bh)
  34883.         Return: ES:DI -> error table
  34884.         05h set critical/SHARE error table
  34885.         ES:DI -> error table
  34886.         06h get ??? error table
  34887.         Return: ES:DI -> error table or 0000h:0000h
  34888.         07h set ??? error table
  34889.         ES:DI -> error table
  34890.         08h get error message retriever (see below)
  34891.         Return: ES:DI -> FAR procedure to fetch error message 
  34892.         09h set ??? error table
  34893.         ES:DI -> error table
  34894. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  34895.       the offset of the error message table within COMMAND.COM, and the
  34896.       procedure returned by DL=08h should be called
  34897.     DOS 5.0 COMMAND.COM does not allow setting any of the addresses (calls
  34898.       with DL odd are ignored); they are always returned with segment 0001h
  34899.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  34900.       into a single error table
  34901. SeeAlso: AX=0500h,INT 21/AH=59h
  34902.  
  34903. Format of DOS 4.x error table:
  34904. Offset    Size    Description
  34905.  00h    BYTE    FFh
  34906.  01h  2 BYTEs    04h,00h (DOS version???)
  34907.  03h    BYTE    number of error headers following
  34908.  04h 2N WORDs    table of all error headers for table
  34909.         Offset    Size    Description
  34910.          00h    WORD    error message number
  34911.          02h    WORD    offset of error message from start of header
  34912.                 error messages are count byte followed by msg
  34913. Note:    DOS 5 error tables consist of one word per error number; each word
  34914.       contains either the offset of a counted string or 0000h
  34915.  
  34916. Call error retrieval function with:
  34917.     AX = error number
  34918.     DI = offset of error table
  34919. Return: ES:DI -> error message (counted string)
  34920. Notes:    this function needs to access COMMAND.COM if the messages were not
  34921.       loaded into memory permanently with /MSG; the caller should assume
  34922.       that the returned message will be overwritten by the next call of
  34923.       the function
  34924.     supported by DR-DOS 5.0
  34925. ----------2F122F-----------------------------
  34926. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  34927.     AX = 122Fh
  34928.     DX = DOS version number (0000h = return true DOS version)
  34929. Note:    not available under DR-DOS 5.0 or 6.0
  34930. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  34931. ----------2F13-------------------------------
  34932. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  34933.     AH = 13h
  34934.     DS:DX -> interrupt handler disk driver calls on read/write
  34935.     ES:BX = address to restore INT 13 to on system halt (exit from root
  34936.          shell) or warm boot (INT 19)
  34937. Return: DS:DX from previous invocation of this function
  34938.     ES:BX from previous invocation of this function
  34939. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  34940.       original INT 13 handler.  The first is for disk change detection
  34941.       on floppy drives, the second is for tracking formatting calls and
  34942.       correcting DMA boundary errors, the third is for working around
  34943.       problems in a particular version of IBM's ROM BIOS
  34944.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  34945.       also points there unless IO.SYS has installed a special filter for
  34946.       hard disk reads (on systems with model byte FCh and BIOS date
  34947.       "01/10/84" only), in which case it points at the special filter
  34948.     most DOS 3.3+ disk access is via the vector in DS:DX, although a few
  34949.       functions are still invoked via an INT 13 instruction
  34950.     this is a dangerous security loophole for any virus-monitoring software
  34951.       which does not trap this call (many Bulgarian viruses are known to
  34952.       use it to get the original ROM entry point)
  34953. SeeAlso: INT 13/AH=01h,INT 19
  34954. ----------2F1400-----------------------------
  34955. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  34956.     AX = 1400h
  34957. Return: AL = 00h not installed, OK to install
  34958.          01h not installed, not OK
  34959.          FFh installed
  34960. Notes:    called by DOS v3.3+ kernel
  34961.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  34962.     supported by DR-DOS 5.0
  34963.     documented for MS-DOS 5.0, but undocumented in prior versions
  34964. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  34965. ----------2F1400-----------------------------
  34966. INT 2F - European MSDOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  34967.     AX = 1400h
  34968. Return: AX = FFFFh if installed
  34969.         BX = maximum memory required to save screen and keyboard info
  34970.     CF clear if successful
  34971.     CF set on error
  34972.         AX = error code
  34973.         0002h invalid function
  34974.         0004h unknown error
  34975. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  34976.       to communicate with the user
  34977. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  34978. ----------2F1401-----------------------------
  34979. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  34980.     AX = 1401h
  34981.     DS:SI -> internal code page structure (see below)
  34982.     BX = new code page
  34983.     DX = country code???
  34984. Return: AL = status
  34985.          00h successful
  34986.          else DOS error code
  34987. Note:    called by DOS v3.3+ kernel
  34988. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  34989.  
  34990. Format of DOS 3.30 internal code page structure:
  34991. Offset    Size    Description
  34992.  00h  8 BYTEs    ???
  34993.  08h 64 BYTEs    name of country information file
  34994.  48h    WORD    system code page
  34995.  4Ah    WORD    number of supported subfunctions
  34996.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  34997.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  34998.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  34999.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  35000.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  35001. ----------2F1401-----------------------------
  35002. INT 2F - European MSDOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  35003.     AX = 1401h
  35004.     DL = function (00h open, 01h close)
  35005.     DH = wait flag
  35006.         00h block until screen opens
  35007.         01h return error if screen is not available
  35008.         02h urgent--always open screen immediately
  35009. Return: CF clear if successful
  35010.         BX = amount of memory needed to save screen and keyboard info,
  35011.         0000h if default save location can be used (only if DH was 02h)
  35012.     CF set on error
  35013. Note:    the application using the screen is frozen until the popup screen is
  35014.       closed
  35015. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  35016. ----------2F1402-----------------------------
  35017. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  35018.     AX = 1402h
  35019.     BP = subfunction (same as AL for INT 21/AH=65h)
  35020.     BX = code page
  35021.     DX = country code
  35022.     DS:SI -> internal code page structure (see AX=1401h)
  35023.     ES:DI -> user buffer
  35024.     CX = size of user buffer
  35025. Return: AL = status
  35026.         00h successful
  35027.         else DOS error code
  35028. Notes:    called by DOS v3.3+ kernel on INT 21/AH=65h
  35029.     code page structure apparently only needed for COUNTRY.SYS pathname
  35030. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  35031. ----------2F1402-----------------------------
  35032. INT 2F - European MSDOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  35033.     AX = 1402h
  35034.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  35035. Return: CF clear if successful
  35036.     CF set on error
  35037.         AX = error code
  35038.         0001h process does not own screen
  35039.         0004h unknown error
  35040.         0005h invalid pointer
  35041. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  35042. ----------2F1403-----------------------------
  35043. INT 2F CU - NLSFUNC.COM - SET COUNTRY INFO
  35044.     AX = 1403h
  35045.     DS:SI -> internal code page structure (see AX=1401h)
  35046.     BX = code page
  35047.     DX = country code
  35048. Return: AL = status 
  35049.          ???
  35050. Note:    called by DOS v3.3+ kernel on INT 21/AH=38h
  35051. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  35052. ----------2F1403-----------------------------
  35053. INT 2F - European MSDOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  35054.     AX = 1403h
  35055.     ES:DI -> buffer containing saved screen
  35056.         (0000h:0000h for default buffer in POPUP)
  35057. Return: CF clear if successful
  35058.     CF set on error
  35059.         AX = error code (see AX=1402h"POPUP")
  35060. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  35061. ----------2F1404-----------------------------
  35062. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  35063.     AX = 1404h
  35064.     BX = code page
  35065.     DX = country code
  35066.     DS:SI -> internal code page structure (see AX=1401h)
  35067.     ES:DI -> user buffer
  35068. Return: AL = status
  35069.          ???
  35070. Notes:    called by DOS v3.3+ kernel on INT 21/AH=38h
  35071.     code page structure apparently only needed for COUNTRY.SYS pathname
  35072. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  35073. ----------2F14FE-----------------------------
  35074. INT 2F U - DR-DOS 5.0 NLSFUNC - ???
  35075.     AX = 14FEh
  35076.     DI = ???
  35077.     ???
  35078. Return: ???
  35079. Note:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  35080.       or FFh on entry.
  35081. SeeAlso: AX=14FFh
  35082. ----------2F14FF-----------------------------
  35083. INT 2F U - DR-DOS 5.0 NLSFUNC - ???
  35084.     AX = 14FFh
  35085.     ???
  35086. Return: ???
  35087. Note:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  35088.       or FFh on entry.
  35089. SeeAlso: AX=14FEh
  35090. ----------2F1500-----------------------------
  35091. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  35092.     AX = 1500h
  35093. Return: AX = FFFFh
  35094.     ES:DI -> ??? (graphics data?)
  35095. Note:    this installation check conflicts with the CD-ROM Extensions
  35096.       installation check; moved to AX=AC00h in later versions
  35097. SeeAlso: AX=AC00h
  35098. ----------2F1500BX0000-----------------------
  35099. INT 2F - CD-ROM - INSTALLATION CHECK
  35100.     AX = 1500h
  35101.     BX = 0000h
  35102. Return: BX = number of CD-ROM drive letters used
  35103.     CX = starting drive letter (0=A:)
  35104. Notes:    this installation check DOES NOT follow the format used by other
  35105.       software
  35106.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  35107.       installation check
  35108. SeeAlso: INT 2F/AX=D000h"Lotus"
  35109. ----------2F1501-----------------------------
  35110. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  35111.     AX = 1501h
  35112.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  35113. Return: buffer filled, for each drive letter
  35114.       BYTE    subunit number in driver
  35115.       DWORD address of device driver header
  35116. ----------2F1502-----------------------------
  35117. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  35118.     AX = 1502h
  35119.     ES:BX -> 38-byte buffer for name of copyright file
  35120.     CX = drive number (0=A:)
  35121. Return: CF set if drive is not a CD-ROM drive
  35122.         AX = 15 (invalid drive)
  35123.     CF clear if successful
  35124. SeeAlso: AX=1503h
  35125. ----------2F1503-----------------------------
  35126. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  35127.     AX = 1503h
  35128.     ES:BX -> 38-byte buffer for name of abstract file
  35129.     CX = drive number (0=A:)
  35130. Return: CF set if drive is not a CD-ROM drive
  35131.         AX = 15 (invalid drive)
  35132.     CF clear if successful
  35133. SeeAlso: AX=1502h
  35134. ----------2F1504-----------------------------
  35135. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  35136.     AX = 1504h
  35137.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  35138.     CX = drive number (0=A:)
  35139. Return: CF set if drive is not a CD-ROM drive
  35140.         AX = 15 (invalid drive)
  35141.     CF clear if successful
  35142. ----------2F1505-----------------------------
  35143. INT 2F - CD-ROM - READ VTOC
  35144.     AX = 1505h
  35145.     ES:BX -> 2048-byte buffer
  35146.     CX = drive number (0=A:)
  35147.     DX = sector index (0=first volume descriptor,1=second,...)
  35148. Return: CF set on error
  35149.         AX = error code (15=invalid drive,21=not ready)
  35150.     CF clear if successful
  35151.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  35152. ----------2F1506-----------------------------
  35153. INT 2F - CD-ROM - TURN DEBUGGING ON
  35154.     AX = 1506h
  35155.     BX = debugging function to enable
  35156. Note:    reserved for development
  35157. SeeAlso: AX=1507h
  35158. ----------2F1507-----------------------------
  35159. INT 2F - CD-ROM - TURN DEBUGGING OFF
  35160.     AX = 1507h
  35161.     BX = debugging function to disable
  35162. Note:    reserved for development
  35163. SeeAlso: AX=1506h
  35164. ----------2F1508-----------------------------
  35165. INT 2F - CD-ROM - ABSOLUTE DISK READ
  35166.     AX = 1508h
  35167.     ES:BX -> buffer
  35168.     CX = drive number (0=A:)
  35169.     SI:DI = starting sector number
  35170.     DX = number of sectors to read
  35171. Return: CF set on error
  35172.         AL = error code (15=invalid drive,21=not ready)
  35173.     CF clear if successful
  35174. SeeAlso: AX=1509h
  35175. ----------2F1509-----------------------------
  35176. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  35177.     AX = 1509h
  35178.     ES:BX -> buffer
  35179.     CX = drive number (0=A:)
  35180.     SI:DI = starting sector number
  35181.     DX = number of sectors to write
  35182. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  35183. SeeAlso: AX=1508h
  35184. ----------2F150A-----------------------------
  35185. INT 2F - CD-ROM - RESERVED
  35186.     AX = 150Ah
  35187. ----------2F150B-----------------------------
  35188. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  35189.     AX = 150Bh
  35190.     CX = drive number (0=A:)
  35191. Return: BX = ADADh if MSCDEX.EXE installed
  35192.         AX = 0000h if drive not supported
  35193.         nonzero if supported
  35194. SeeAlso: AX=150Dh
  35195. ----------2F150C-----------------------------
  35196. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION
  35197.     AX = 150Ch
  35198. Return: BH = major version
  35199.     BL = minor version
  35200. Note:    MSCDEX.EXE versions prior to 2.00 return BX=0
  35201. ----------2F150D-----------------------------
  35202. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  35203.     AX = 150Dh
  35204.     ES:BX -> buffer for drive letter list (1 byte per drive)
  35205. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  35206.     to the drive in the same position for function 1501h
  35207. SeeAlso: AX=150Bh
  35208. ----------2F150E-----------------------------
  35209. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  35210.     AX = 150Eh
  35211.     BX = subfunction
  35212.         00h get preference
  35213.         DX = 0000h
  35214.         Return: DX = preference settings
  35215.         01h set preference
  35216.         DH = volume descriptor preference
  35217.             01h = primary volume descriptor
  35218.             02h = supplementary volume descriptor
  35219.         DL = supplementary volume descriptor preference
  35220.             01h = shift-Kanji
  35221.     CX = drive number (0=A:)
  35222. Return: CF set on error
  35223.         AX = error code (15=invalid drive,1=invalid function)
  35224.     CF clear if successful
  35225. ----------2F150F-----------------------------
  35226. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  35227.     AX = 150Fh
  35228.     CL = drive number (0=A:)
  35229.     CH bit 0 = copy flag
  35230.         clear if direct copy
  35231.         set if copy to structure which removed ISO/High Sierra diffs
  35232.     ES:BX -> ASCIZ path name
  35233.     SI:DI -> buffer for directory entry (see below)
  35234.          minimum 255 bytes for direct copy
  35235. Return: CF set on error
  35236.         AX = error code
  35237.     CF clear if succesful
  35238.         AX = disk format (0=High Sierra,1=ISO 9660)
  35239.  
  35240. Format of directory entry (direct copy):
  35241. Offset    Size    Description
  35242.  00h    BYTE  length of directory entry
  35243.  01h    BYTE  length of XAR in Logical Block Numbers
  35244.  02h    DWORD LBN of data, Intel (little-endian) format
  35245.  06h    DWORD LBN of data, Motorola (big-endian) format
  35246.  0Ah    DWORD length of file, Intel format
  35247.  0Eh    DWORD length of file, Motorola format
  35248. ---High Sierra---
  35249.  12h  6 BYTEs date and time
  35250.  18h    BYTE  bit flags
  35251.  19h    BYTE  reserved
  35252. ---ISO 9660---
  35253.  12h  7 BYTEs date and time
  35254.  19h    BYTE  bit flags
  35255. ---both formats---
  35256.  1Ah    BYTE  interleave size
  35257.  1Bh    BYTE  interleave skip factor
  35258.  1Ch    WORD  volume set sequence number, Intel format
  35259.  1Eh    WORD  volume set sequence number, Motorola format
  35260.  20h    BYTE  length of file name
  35261.  21h  N BYTEs file name
  35262.     BYTE (optional) padding if filename is odd length
  35263.       N BYTEs system data
  35264.  
  35265. Format of directory entry (canonicalized):
  35266. Offset    Size    Description
  35267.  00h    BYTE    length of XAR in Logical Block Numbers
  35268.  01h    DWORD    Logical Block Number of file start
  35269.  05h    WORD    size of disk in logical blocks
  35270.  07h    DWORD    file length in bytes
  35271.  0Bh  7 BYTEs    date and time
  35272.  12h    BYTE    bit flags
  35273.  13h    BYTE    interleave size
  35274.  14h    BYTE    interleave skip factor
  35275.  15h    WORD    volume set sequence number
  35276.  17h    BYTE    length of file name
  35277.  18h 38 BYTEs    ASCIZ filename
  35278.  3Eh    WORD    file version number
  35279.  40h    BYTE    number of bytes of system use data
  35280.  41h 220 BYTEs    system use data
  35281. ----------2F1510-----------------------------
  35282. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  35283.     AX = 1510h
  35284.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  35285.     ES:BX -> CD-ROM device driver request header (see AX=0802h)
  35286. ----------2F1600-----------------------------
  35287. INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE INSTALLATION CHECK
  35288.     AX = 1600h
  35289. Return: AL = 00h if Windows 3.x enhanced mode or Windows/386 2.x not running
  35290.     AL = 80h if Windows 3.x enhanced mode or Windows/386 2.x not running
  35291.     AL = 01h if Windows/386 2.x running
  35292.     AL = FFh if Windows/386 2.x running
  35293.     AL = anything else
  35294.         AL = Windows major version number >= 3
  35295.         AH = Windows minor version number
  35296. Note:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  35297.       drivers, TSRs, and applications) to cooperate with multitasking
  35298.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  35299.     certain calls are also supported in the Microsoft 80286 DOS extender in
  35300.       Windows standard mode
  35301. SeeAlso: AX=160Ah,AX=4680h
  35302. ----------2F1602-----------------------------
  35303. INT 2F - MS WINDOWS/386 2.x - GET API ENTRY POINT
  35304.     AX = 1602h
  35305. Return: ES:DI -> Windows/386 2.x API procedure entry point
  35306. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  35307.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  35308.         AX = 0000h
  35309.         ES:DI -> return address
  35310.         JUMP to address returned from INT 2F/AX=1602h
  35311.     After JUMP, at return address:
  35312.         BX = current VM ID.
  35313. SeeAlso: AX=0C20h
  35314. ----------2F1603-----------------------------
  35315. INT 2F - RM Nimbus MSDOS 3.3 - ???
  35316.     AX = 1603h
  35317. Return: AX = 5248h ('RH')
  35318.     DS:SI -> first byte after INT 2F handler in IBMBIO.COM
  35319. ----------2F1605-----------------------------
  35320. INT 2F - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST
  35321.     AX = 1605h
  35322.     ES:BX = 0000h:0000h
  35323.     DS:SI = 0000h:0000h
  35324.     CX = 0000h
  35325.     DX = flags
  35326.         bit 0 = 0 if Windows enhanced-mode initialization
  35327.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  35328.         bits 1-15 reserved (undefined)
  35329.     DI = version number (major in upper byte, minor in lower)
  35330. Return: CX = 0000h if okay for Windows to load
  35331.     CX <> 0 if Windows should not load
  35332.     ES:BX -> startup info structure (see below)
  35333.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  35334. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  35335.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  35336.       driver or TSR can watch for this broadcast and return the appropriate
  35337.       values.  If the driver or TSR returns CX <> 0, it is also its
  35338.       responsibility to display an error message.
  35339.     each handler must first chain to the prior INT 2F handler with
  35340.       registers unchanged before processing the call
  35341.     if the handler requires local data on a per-VM basis, it must store the
  35342.       returned ES:BX in the "next" field of a startup info structure and
  35343.       return a pointer to that structure in ES:BX
  35344.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  35345.       already nonzero, the TSR must fail the initialization by setting CX
  35346.       nonzero
  35347. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  35348.  
  35349. Format of Startup Information Structure:
  35350. Offset    Size    Description
  35351.  00h  2 BYTEs    major, minor version of info structure
  35352.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  35353.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  35354.  0Ah    DWORD    virtual device reference data (only used if above nonzero)
  35355.  0Eh    DWORD    pointer to instance data records or 0000h:0000h
  35356.  
  35357. Format of one Instance Item in array:
  35358. Offset    Size    Description
  35359.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  35360.  04h    WORD    size of instance data
  35361.  
  35362. Virtual mode enable/disable procedure called with:
  35363.     AX = 0000h disable V86 mode
  35364.     AX = 0001h enable V86 mode
  35365.     interrupts disabled
  35366. Return: CF set on error
  35367.     CF clear if successful
  35368.     interrupts disabled
  35369. ----------2F1606-----------------------------
  35370. INT 2F - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST
  35371.     AX = 1606h
  35372.     DX = flags
  35373.         bit 0 = 0 if Windows enhanced-mode exit
  35374.         bit 0 = 1 if Microsoft 286 DOS extender exit
  35375.         bits 1-15 reserved (undefined)
  35376. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  35377.       broadcast will be issued immediately.
  35378.     this call will be issued in real mode
  35379. SeeAlso: AX=1605h,AX=1609h
  35380. ----------2F1607-----------------------------
  35381. INT 2F - MS WINDOWS - VIRTUAL DEVICE CALL OUT API
  35382.     AX = 1607h
  35383.     BX = virtual device ID (see INT 2F/AX=1684h)
  35384.     CX = (usually) callout subfunction
  35385. Return: (usually) AX,BX,CX,DX,ES contain results
  35386. Notes:    more of a convention than an API, this call specifies a standard
  35387.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  35388.       to DOS device drivers and TSRs
  35389.     see below for details on several virtual devices
  35390. SeeAlso: AX=0C20h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h
  35391. SeeAlso: AX=1607h/BX=0015h,AX=1684h
  35392. ----------2F1607BX000C-----------------------
  35393. INT 2F - MS WINDOWS - "VMD" VIRTUAL DEVICE API
  35394.     AX = 1607h
  35395.     BX = 000Ch (VxD identifier of "VMD")
  35396. Return: CX = nonzero if mouse driver already virtualized
  35397. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  35398.       nonzero; if yes, it will not automatically virtualize the mouse
  35399.       driver.  This would be used if MOUSE.COM already virtualizes
  35400.       itself using the Windows API.
  35401. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  35402. ----------2F1607BX0014-----------------------
  35403. INT 2F - MS WINDOWS - "VNETBIOS" VIRTUAL DEVICE API
  35404.     AX = 1607h
  35405.     BX = 0014H (VxD identifier of "VNETBIOS")
  35406. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  35407.         command code (see below)
  35408. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  35409.       the NetBIOS has an extensions Windows should know about
  35410. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0015h
  35411.  
  35412. Values for action code:
  35413.  00h    "VN_Unknown" unknown command
  35414.  04h    "VN_No_Map"  no memory mapping necessary
  35415.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  35416.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  35417.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  35418.  14h    "VN_Chain_Send"     the chain-send command
  35419.  18h    "VN_Cancel"    special case for cancel command
  35420.  1Ch    "VN_Buffer_In"    buffer is incoming
  35421.  20h    "VN_Buffer_Out" buffer is outgoing
  35422.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  35423. ----------2F1607BX0015-----------------------
  35424. INT 2F - MS WINDOWS - "DOSMGR" VIRTUAL DEVICE API
  35425.     AX = 1607h
  35426.     BX = 0015h (VxD identifier of "DOSMGR")
  35427.     CX = function
  35428.         0000h query instance processing
  35429.         Return: CX = state
  35430.                 0000h not instanced
  35431.                 other instanced (DOS 5.0 kernel returns 0001h)
  35432.                 DX = segment of DOS drivers
  35433.                     (unchanged if call handled by DOS 5.0)
  35434.                 ES:BX -> patch table (see below)
  35435.         0001h set patches in DOS
  35436.         DX = bit mask of patch requests
  35437.             bit 0 enable critical sections
  35438.             bit 1 NOP setting/checking user ID
  35439.             bit 2 turn INT 21/AH=3Fh on STDIN into polling loop
  35440.             bit 3 trap stack fault in "SYSINIT" to WIN386
  35441.             bit 4 BIOS patch to trap "Insert disk X:" to WIN386
  35442.         Return: AX = B97Ch
  35443.             BX = bit mask of patches applied
  35444.             DX = A2ABh
  35445.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  35446.         DX = bit mask of patch requests (see function 0001h)
  35447.         0003h get size of DOS data structures
  35448.         DX = bit mask of request (only one bit can be set)
  35449.             bit 0: Current Directory Structure size
  35450.         Return: if supported request:
  35451.                 AX = B97Ch
  35452.                 CX = size in bytes of requested structure
  35453.                 DX = A2ABh
  35454.             else:
  35455.                 all registers preserved
  35456.         0004h determine instanced data structures
  35457.         Return: AX = B97Ch if supported
  35458.             DX = A2ABh if supported (DOS 5.0 kernel returns 0000h)
  35459.             BX = bit mask of instanced items
  35460.                 bit 0: CDS
  35461.                 bit 1: SFT
  35462.                 bit 2: device list
  35463.                 bit 3: DOS swappable data area
  35464.         0005h get device driver size
  35465.         ES = segment of device driver
  35466.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  35467.             DX:AX = A2ABh:B97Ch if successful
  35468.                 BX:CX = size of device driver in bytes
  35469. Notes:    the DOS 5.0 kernel provides these calls; earlier versions require a
  35470.       separate driver
  35471.     DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  35472.       been instanced via INT 2F/AX=1605h and will not perform its own
  35473.       instancing of the normal DOS/BIOS data if so
  35474. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
  35475.  
  35476. Format of patch table:
  35477. Offset    Size    Description
  35478.  00h    WORD    number of items in patch table
  35479.  02h  N WORDs    offsets of ??? to be patched
  35480. ----------2F1607BX22C0-----------------------
  35481. INT 2F - Rational Systems DOS/4GW - ???
  35482.     AX = 1607h
  35483.     BX = 22C0h
  35484.     ???
  35485. Return: ???
  35486. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  35487. ----------2F1608-----------------------------
  35488. INT 2F C - MS WINDOWS - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  35489.     AX = 1608h
  35490. Notes:    called after all installable devices have been initialized
  35491.     real-mode software may be called between the Windows enhanced-mode init
  35492.       call (AX=1605h) and this call; the software must detect this
  35493.       situation
  35494. SeeAlso: AX=1605h,AX=1609h
  35495. ----------2F1609-----------------------------
  35496. INT 2F C - MS WINDOWS - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  35497.     AX = 1609h
  35498. Note:    called at the beginning of a normal exit sequence; not made in the
  35499.       event of a fatal system crash
  35500. SeeAlso: AX=1606h,AX=1608h
  35501. ----------2F160A-----------------------------
  35502. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  35503.     AX = 160Ah
  35504. Return: AX = 0000h if call supported
  35505.         BX = version (BH=major, BL=minor)
  35506.         CX = mode (0002h = standard, 0003h = enhanced)
  35507. SeeAlso: AX=1600h,AX=4680h
  35508. ----------2F160B-----------------------------
  35509. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  35510.     AX = 160Bh
  35511.     ES:DI -> communication structure (see below) or 0000h:0000h
  35512. Return: ES:DI -> communication structure
  35513. Desc:    this call allows Windows-aware TSRs to make themselves known to
  35514.       Windows.
  35515. Note:    the TSR should allocate a communication structure, place the given
  35516.       ES:DI pointer in the first field, and return a pointer to the new
  35517.       structure
  35518. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  35519.  
  35520. Format of TSR-to-Windows communication structure:
  35521. Offset    Size    Description
  35522.  00h    DWORD    pointer to next structure
  35523.  04h    WORD    PSP segment
  35524.  06h    WORD    API version ID (0100h)
  35525.  08h    WORD    EXEC flags
  35526.         bit 0: "WINEXEC"
  35527.         bit 1: "LOADLIBRARY"
  35528.         bit 2: "OPENDRIVER"
  35529.  0Ah    WORD    "exec_cmd_show"
  35530.  0Ch    DWORD    "exec_cmd"
  35531.  10h  4 BYTEs    reserved (0)
  35532.  14h    DWORD    pointer to TSR ID block (see below)
  35533.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  35534.  
  35535. Format of Norton Utilities 6.0 TSR ID block:
  35536. Offset    Size    Description
  35537.  00h    WORD    length of name string
  35538.  02h  N BYTEs    name of TSR's executable
  35539. ----------2F160C-----------------------------
  35540. INT 2F - MS Windows 3.1 - DETECT ROMs
  35541.     AX = 160Ch
  35542.     ???
  35543. Return: ???
  35544. Note:    used by ROM Windows
  35545. SeeAlso: AX=160Bh
  35546. ----------2F1680-----------------------------
  35547. INT 2F - MS WINDOWS, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  35548.     AX = 1680h
  35549. Return: AL = 00h if the call is supported
  35550.     AL = 80h (unchanged) if the call is not supported
  35551. Notes:    programs can use this function in idle loops to enhance performance
  35552.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  35553.       DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS
  35554.       applications
  35555.     does not block the program; it just gives up the remainder of the time
  35556.       slice
  35557.     should not be used by Windows-specific programs
  35558. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  35559. ----------2F1681-----------------------------
  35560. INT 2F - MS WINDOWS 3+ - BEGIN CRITICAL SECTION
  35561.     AX = 1681h
  35562. Notes:    used to prevent a task switch from occurring
  35563.     should be followed by an INT 2F/AX=1682h call as soon as possible
  35564.     nested calls are allowed, and must be followed by an appropriate number
  35565.       of "end critical section" calls
  35566.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  35567.       and increment by hand.
  35568. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  35569. ----------2F1682-----------------------------
  35570. INT 2F - MS WINDOWS 3+ - END CRITICAL SECTION
  35571.     AX = 1682h
  35572. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  35573.       and decrement by hand, taking care not to decrement InDOS flag
  35574.       through zero
  35575. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  35576. ----------2F1683-----------------------------
  35577. INT 2F - MS WINDOWS 3+ - GET CURRENT VIRTUAL MACHINE ID
  35578.     AX = 1683h
  35579. Return: BX = current virtual machine (VM) ID
  35580. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  35581.     VM IDs are reused when VMs are destroyed
  35582.     an ID of 0 will never be returned
  35583. SeeAlso: AX=1684h,AX=1685h,AX=168Bh
  35584. ----------2F1684-----------------------------
  35585. INT 2F - MS WINDOWS - GET DEVICE API ENTRY POINT
  35586.     AX = 1684h
  35587.     BX = virtual device (VxD) ID (see below)
  35588.     ES:DI = 0000h:0000h
  35589. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  35590. Note:    some Windows enhanced-mode virtual devices provide services that
  35591.       applications can access.  For example, the Virtual Display Device
  35592.       (VDD) provides an API used in turn by WINOLDAP.
  35593. SeeAlso: AX=1683h
  35594.  
  35595. Values for VxD ID:
  35596.  01h    VMM        Virtual Machine Manager
  35597.  02h    Debug
  35598.  03h    VPICD        Virtual Prog. Interrupt Controller (PIC) Device
  35599.  04h    VDMAD        Virtual Direct Memory Access (DMA) Device
  35600.  05h    VTD        Virtual Timer Device
  35601.  06h    V86MMGR        Virtual 8086 Mode Device
  35602.  07h    PAGESWAP    Paging Device
  35603.  08h    Parity
  35604.  09h    Reboot
  35605.  0Ah    VDD        Virtual Display Device (GRABBER)
  35606.  0Bh    VSD        Virtual Sound Device
  35607.  0Ch    VMD        Virtual Mouse Device
  35608.  0Dh    VKD        Virtual Keyboard Device
  35609.  0Eh    VCD        Virtual COMM Device
  35610.  0Fh    VPD        Virtual Printer Device
  35611.  10h    VHD        Virtual Hard Disk Device (BlockDev in Windows3.1)
  35612.  11h    VMCPD
  35613.  12h    EBIOS        Reserve EBIOS page (e.g., on PS/2)
  35614.  13h    BIOSXLAT    Map ROM BIOS API between prot & V86 mode
  35615.  14h    VNETBIOS    Virtual NetBIOS Device
  35616.  15h    DOSMGR
  35617.  16h    WINLOAD
  35618.  17h    SHELL
  35619.  18h    VMPoll
  35620.  19h    VPROD
  35621.  1Ah    DOSNET        assures network integrity across VMs
  35622.  1Bh    VFD        Virtual Floppy Device
  35623.  1Ch    VDD2        Secondary display adapter
  35624.  1Dh    WINDEBUG
  35625.  1Eh    TSRLoad        TSR instance utility
  35626.  1Fh    BiosHook    BIOS interrupt hooker VxD
  35627.  20h    Int13
  35628.  21h    PageFile    Paging File device
  35629.  22h    SCSI
  35630.  23h    MCA_POS
  35631.  24h    SCSIFD        SCSI FastDisk device
  35632.  25h    VPEND        Pen device
  35633.  26h    APM        Advanced Power Management
  35634. Note:    The high bit of the VxD ID is reserved for future use. The
  35635.     next 10 bits are the OEM # which is assigned by Microsoft. The
  35636.     low 5 bits are the device number. 
  35637.  
  35638. Call VTD.386 entry point with:
  35639.     AX = 0000h get VTD version number
  35640.         Return: AH = major version
  35641.             AL = minor version
  35642.     AX = 0100h get current clock tick time
  35643.         Return: EDX:EAX = clock tick time in 840ns units since Windows was
  35644.                 started
  35645.     AX = 0101h get current system time in milliseconds
  35646.         Return: EAX = time in milliseconds that Windows has been running
  35647.     AX = 0102h get current virtual machine time
  35648.         Return: EAX = cumulative amount of time the virtual machine has
  35649.             been active, in milliseconds
  35650. Note:    should only be called directly when TOOLHELP.DLL TimerCount() cannot
  35651.       be called
  35652. ----------2F1685-----------------------------
  35653. INT 2F - MS WINDOWS - SWITCH VMs AND CALLBACK
  35654.     AX = 1685h
  35655.     BX = VM ID of virtual machine to switch to
  35656.     CX = flags
  35657.         bit 0 wait until interrupts enabled
  35658.         bit 1 wait until critical section unowned
  35659.         bits 2-15 reserved (zero)
  35660.     DX:SI = priority boost (see VMM.INC)
  35661.     ES:DI -> FAR procedure to callback
  35662. Return: CF set on error
  35663.         AX = error code
  35664.         01h invalid VM ID
  35665.         02h invalid priority boost
  35666.         03h invalid flags
  35667.     CF clear if successful
  35668.         event will be or has been called
  35669. Notes:    some DOS devices, such as networks, need to call functions in a
  35670.       specific VM. This call forces the appropriate VM to be installed.
  35671.     the callback procedure must preserve all registers and return with IRET
  35672. SeeAlso: AX=1683h,INT 15/AX=1117h
  35673. ----------2F1686-----------------------------
  35674. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  35675.     AX = 1686h
  35676. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  35677.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  35678. SeeAlso: AX=1687h
  35679. ----------2F1687-----------------------------
  35680. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  35681.     AX = 1687h
  35682. Return: AX = 0000h if installed
  35683.         BX = flags
  35684.         bit 0: 32-bit programs supported
  35685.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  35686.         DH = DPMI major version
  35687.         DL = two-digit DPMI minor version
  35688.         SI = number of paragraphs of DOS extender private data
  35689.         ES:DI -> DPMI mode-switch entry point
  35690.     AX nonzero if not installed
  35691. SeeAlso: AX=1686h,INT 38/AH=10h
  35692.  
  35693. Call mode switch entry point with:
  35694.     AX = flags
  35695.         bit 0: set if 32-bit program
  35696.     ES = real mode segment of buffer for DPMI private data (ignored if
  35697.         SI was zero)
  35698. Return: CF set on error
  35699.         program still in real mode
  35700.         AX = error code (DPMI 1.0+)
  35701.            8011h unable to allocate all necessary descriptors
  35702.            8021h 32-bit program specified, but 16-bit DPMI host
  35703.     CF clear if successful
  35704.         CS = 16-bit selector corresponding to real-mode CS
  35705.         SS = selector corresponding to real-mode SS (64K limit)
  35706.         DS = selector corresponding to real-mode DS (64K limit)
  35707.         ES = selector to program's PSP (100h byte limit)
  35708.         FS = GS = 0
  35709.         high word of ESP = 0 if 32-bit program
  35710.         program now in protected mode
  35711. Note:    this entry point is only called for the initial switch to protected
  35712.       mode
  35713. ----------2F1688-----------------------------
  35714. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET SELECTOR TO LDT
  35715.     AX = 1688h
  35716. Return: AX = status??? (0000h for 386MAX)
  35717.     BX = selector for ???
  35718. ----------2F1689-----------------------------
  35719. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  35720.     AX = 1689h
  35721.     ???
  35722. Return: ???
  35723. ----------2F168A-----------------------------
  35724. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  35725.     AX = 168Ah
  35726.     DS:(E)SI = selector:offset of ASCIZ vendor name
  35727. Return: AL = status
  35728.         00h successful
  35729.            ES:(E)DI -> extended API entry point
  35730.         8Ah unsuccessful
  35731. Notes:    the vendor name is used to determine which entry point to return; it is
  35732.       case-sensitive
  35733.     available in protected mode only
  35734.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  35735.     this call is present but not documented for DPMI 0.9
  35736. SeeAlso: INT 31/AX=0A00h
  35737.  
  35738. Vendor names:
  35739.  "MS-DOS"    ??? and 386MAX v6.00+
  35740.  "386MAX"    386MAX v6.00+
  35741. ----------2F168B-----------------------------
  35742. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  35743.     AX = 168Bh
  35744.     ???
  35745. Return: ???
  35746. SeeAlso: AX=1683h
  35747. ----------2F168C-----------------------------
  35748. INT 2F - MS Windows 3.1 - RESTART COMMAND
  35749.     AX = 168Ch
  35750.     ???
  35751. Return: ???
  35752. Note:    WIN.COM executes specified application
  35753. ----------2F1700-----------------------------
  35754. INT 2F - MS WINDOWS "WINOLDAP" - IDENTIFY WinOldAp VERSION
  35755.     AX = 1700h
  35756. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  35757.     AX <> 1700h
  35758.         AL = WINOLDAP major version
  35759.         AH = WINOLDAP minor version
  35760. Notes:    WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  35761.       "old" (character-mode) application access to Dynamic Data Exchange,
  35762.       menus, and the Windows clipboard.
  35763.     this installation check DOES NOT follow the format used by other
  35764.       software
  35765. ----------2F1701-----------------------------
  35766. INT 2F - MS WINDOWS "WINOLDAP" - OPEN CLIPBOARD
  35767.     AX = 1701h
  35768. Return:    AX <> 0     success
  35769.     AX = 0     clipboard is already open
  35770. ----------2F1702-----------------------------
  35771. INT 2F - MS WINDOWS "WINOLDAP" - EMPTY CLIPBOARD
  35772.     AX = 1702h
  35773. Return: AX <> 0     clipboard has been emptied
  35774.     AX = 0     failure
  35775. ----------2F1703-----------------------------
  35776. INT 2F - MS WINDOWS "WINOLDAP" - SET CLIPBOARD DATA
  35777.     AX = 1703h
  35778.     DX = clipboard format supported by WinOldAp:
  35779.         01h text
  35780.         02h bitmap
  35781.         03h metafile picture
  35782.         04h SYLK
  35783.         05h DIF
  35784.         06h TIFF
  35785.         07h OEM text
  35786.     ES:BX -> data (see below)
  35787.     SI:CX = size of data
  35788. Return: AX <> 0 data copied into the Clipboard
  35789.     AX = 0 failure
  35790.  
  35791. Format of bitmap:
  35792. Offset    Size    Description
  35793.  00h    WORD    type (0000h)
  35794.  02h    WORD    width of bitmap in pixels
  35795.  04h    WORD    height of bitmap in pixels
  35796.  06h    WORD    bytes per line
  35797.  08h    BYTE    number of color planes
  35798.  09h    BYTE    number of adjacent color bits in pixel
  35799.  0Ah    DWORD    pointer to start of data
  35800.  0Eh    WORD    width in 0.1mm units
  35801.  10h    WORD    height in 0.1mm units
  35802.  12h  N BYTEs    bitmap data
  35803.  
  35804. Format of metafile picture:
  35805. Offset    Size    Description
  35806.  00h    WORD    mapping mode
  35807.  02h    WORD    X extent
  35808.  04h    WORD    Y extent
  35809.  06h    WORD    picture data
  35810. ----------2F1704-----------------------------
  35811. INT 2F - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA SIZE
  35812.     AX = 1704h
  35813.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  35814. Return:     DX:AX = size of data in bytes, including any headers
  35815. Failure: DX:AX = 0  no data in this format in the Clipboard
  35816. ----------2F1705-----------------------------
  35817. INT 2F - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA
  35818.     AX = 1705h
  35819.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  35820.     ES:BX -> buffer
  35821. Return: AX <> 0     success
  35822.     AX = 0     error, or no data in this format in Clipboard
  35823. ----------2F1708-----------------------------
  35824. INT 2F - MS WINDOWS "WINOLDAP" - CloseClipboard
  35825.     AX = 1708h
  35826. Return: AX <> 0 success
  35827.     AX = 0 failure
  35828. ----------2F1709-----------------------------
  35829. INT 2F - MS WINDOWS "WINOLDAP" - COMPACT CLIPBOARD
  35830.     AX = 1709h
  35831.     SI:CX = desired size in bytes
  35832. Return: DX:AX = number of bytes in largest block of free memory
  35833. Note:    WinOldAp is responsible for including the size of any headers
  35834. ----------2F170A-----------------------------
  35835. INT 2F - MS WINDOWS "WINOLDAP" - GET DEVICE CAPABILITIES
  35836.     AX = 170Ah
  35837.     DX = GDI information index
  35838.         00h device driver version
  35839.         02h device classification
  35840.         04h width in mm
  35841.         06h height in mm
  35842.         08h width in pixels
  35843.         0Ah height in pixels
  35844.         0Ch bits per pixel
  35845.         0Eh number of bit planes
  35846.         10h number of brushes supported by device
  35847.         12h number of pens supported by device
  35848.         14h number of markers supported by device
  35849.         16h number of fonts supported by device
  35850.         18h number of colors
  35851.         1Ah size required for device descriptor
  35852.         1Ch curve capabilities
  35853.         1Eh line capabilities
  35854.         20h polygon capabilities
  35855.         22h text capabilities
  35856.         24h clipping capabilities
  35857.         26h bitblt capabilities
  35858.         28h X aspect
  35859.         2Ah Y aspect
  35860.         2Ch length of hypotenuse of aspect
  35861.         58h logical pixels per inch of width
  35862.         5Ah logical pixels per inch of height
  35863. Return:     AX = integer value of the desired item
  35864.         device classification
  35865.             00h vector plotter
  35866.             01h raster display
  35867.             02h raster printer
  35868.             03h raster camera
  35869.             04h character-stream, PLP
  35870.             05h Metafile, VDM
  35871.             06h display-file
  35872.         curve capabilities
  35873.             bit 0  circles
  35874.             bit 1  pie wedges
  35875.             bit 2  chord arcs
  35876.             bit 3  ellipses
  35877.             bit 4  wide lines
  35878.             bit 5  styled lines
  35879.             bit 6  wide styled lines
  35880.             bit 7  interiors
  35881.         line capabilities
  35882.             bit 1  polylines
  35883.             bit 2  markers
  35884.             bit 3  polymarkers
  35885.             bit 4  wide lines
  35886.             bit 5  styled lines
  35887.             bit 6  wide styled lines
  35888.             bit 7  interiors
  35889.         polygon capabilities
  35890.             bit 0  polygons
  35891.             bit 1  rectangles
  35892.             bit 2  trapezoids
  35893.             bit 3  scanlines
  35894.             bit 4  wide borders
  35895.             bit 5  styled borders
  35896.             bit 6  wide styled borders
  35897.             bit 7  interiors
  35898.         text capabilities
  35899.             bit 0  output precision character
  35900.             bit 1  output precision stroke
  35901.             bit 2  clippping precision stroke
  35902.             bit 3  90-degree character rotation
  35903.             bit 4  arbitrary character rotation
  35904.             bit 5  independent X and Y scaling
  35905.             bit 6  double-size
  35906.             bit 7  integer scaling
  35907.             bit 8  continuous scaling
  35908.             bit 9  bold
  35909.             bit 10 italic
  35910.             bit 11 underline
  35911.             bit 12 strikeout
  35912.             bit 13 raster fonts
  35913.             bit 14 vector fonts
  35914.             bit 15 reserved
  35915.         clipping capabilities
  35916.             00h none
  35917.             01h clipping to rectangles
  35918.         raster capabilities
  35919.             bit 0  simple bitBLT
  35920.             bit 1  device requires banding support
  35921.             bit 2  device requires scaling support
  35922.             bit 3  supports >64K bitmap
  35923. Note:  This function returns the device-capability bits for the given display
  35924. ----------2F1900-----------------------------
  35925. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  35926.     AX = 1900h
  35927. Return: AL = 00h  not installed
  35928.          FFh  installed
  35929. ----------2F1901BL00-------------------------
  35930. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  35931.     AX = 1901h
  35932.     BL = 00h if SHELLC transient
  35933.          01h if SHELLC resident
  35934.     DS:DX -> far call entry point for resident SHELLC.EXE
  35935. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  35936. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  35937. ----------2F1902-----------------------------
  35938. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  35939.     AX = 1902h
  35940.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  35941.          final filename element uppercased
  35942.     DS:DX -> buffer for results
  35943. Return: AL = 00h  failed, either
  35944.           (a) final filename element quoted at ES:DI does not match
  35945.               identity of shell batch file quoted as parameter of most
  35946.               recent call of SHELLB command, or
  35947.           (b) no more Program Start Commands available.
  35948.     AL= FFh     success, then:
  35949.         memory at DS:[DX+1] onwards filled as:
  35950.         DX+1:    BYTE    count of bytes of PSC
  35951.         DX+2: N BYTEs    Program Start Command text
  35952.             BYTE    0Dh terminator 
  35953. Explanation: COMMAND.COM executes the result of this call in preference to 
  35954.     reading a command from a batch file. Thus the batch file does not
  35955.     advance in execution for so long as SHELLB provides PSCs from its
  35956.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  35957.     menu interface. The final PSC of a sequence is finished with a 
  35958.     GOTO COMMON, which causes a loop back in the batch file which called
  35959.     SHELLC so as to execute SHELLC again. The check on batch file name
  35960.     permits PSCs to CALL nested batch files while PSCs are still stacked
  35961.     up for subsequent execution.
  35962. ----------2F1903-----------------------------
  35963. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  35964.     AX = 1903h
  35965.     ES:DI -> ASCIZ batch file name as for AX=1902h
  35966. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  35967.     AL = 00h if it does not
  35968. ----------2F1904-----------------------------
  35969. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  35970.     AX = 1904h
  35971. Return: ES:DI -> name of current shell batch file:
  35972.         WORD    number of bytes of name following
  35973.         BYTEs    (8 max) uppercase name of shell batch file
  35974. ----------2F1A00-----------------------------
  35975. INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK
  35976.     AX = 1A00h
  35977. Return: AL = FFh if installed
  35978. Notes:    AVATAR.SYS also responds to this call
  35979.     documented for DOS 5+, but undocumented for DOS 4.x
  35980. ----------2F1A00BX4156-----------------------
  35981. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  35982.     AX = 1A00h
  35983.     BX = 4156h ('AV')
  35984.     CX = 4154h ('AT')
  35985.     DX = 4152h ('AR')
  35986. Return: AL = FFh if installed
  35987.         CF clear
  35988.         BX = AVATAR protocol level supported
  35989.         CX = driver type
  35990.         0000h AVATAR.SYS
  35991.         4456h DVAVATAR.COM inside DESQview window
  35992.         DX = 0016h
  35993. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  35994.       the magic values
  35995.     AVATAR.SYS is a CON replacement by George Adam Stanislav which
  35996.       interprets AVATAR command codes in the same way that ANSI interprets
  35997.       ANSI command codes
  35998. ----------2F1A01-----------------------------
  35999. INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  36000.     AX = 1A01h
  36001.     CL = function
  36002.         7Fh for GET
  36003.         5Fh for SET
  36004.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  36005. Return: CF set on error
  36006.         AX = error code (many non-standard)
  36007.     CF clear if successful
  36008.         AX destroyed
  36009. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  36010. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  36011. ----------2F1A02-----------------------------
  36012. INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  36013.     AX = 1A02h
  36014.     DS:DX -> parameter block (see below)
  36015. Note:    DOS 5.0 chains to previous handler if AL > 02h on call
  36016. SeeAlso: AX=1A01h
  36017.  
  36018. Format of parameter block:
  36019. Offset    Size    Description
  36020.  00h    BYTE    subfunction
  36021.         00h set/reset interlock
  36022.         01h get /L flag
  36023.  01h    BYTE    interlock state
  36024.         00h=reset, 01h=set
  36025.           This interlock prevents some of the ANSI.SYS post-processing
  36026.           in its hook onto INT 10, AH=00h mode set
  36027.  02h    BYTE    (returned)
  36028.         00h if /L not in effect
  36029.         01h if /L in effect
  36030. ----------2F1A21-----------------------------
  36031. INT 2F - AVATAR.SYS - SET DRIVER STATE
  36032.     AX = 1A21h (AL='!')
  36033.     DS:SI -> command string with one or more state characters
  36034.     CX = length of command string
  36035. Return: CF set on error (invalid subfunction)
  36036.     CF clear if successful
  36037. Note:    the characters in the state string are interpreted left to right, and
  36038.       need not be in any particular order
  36039. SeeAlso: AX=1A3Fh
  36040.  
  36041. Values of state characters:
  36042.  'a'    activate driver
  36043.  'd'    disable driver
  36044.  'f'    use fast screen output
  36045.  'g'    always convert gray keys (+ and -) to function keys
  36046.  'G'    never convert gray keys
  36047.  'l'    convert gray keys only when ScrollLock active
  36048.  's'    use slow screen output
  36049.  't'    Tandy 1000 keyboard (not yet implemented)
  36050. ----------2F1A3C-----------------------------
  36051. INT 2F U - AVATAR.SYS v0.11 - ???
  36052.     AX = 1A3Ch
  36053.     ???
  36054. Return: CX = 0000h
  36055. ----------2F1A3E-----------------------------
  36056. INT 2F U - AVATAR.SYS v0.11 - ???
  36057.     AX = 1A3Eh
  36058.     CL = ???
  36059.     CH = ???
  36060.     DL = ???
  36061.     DH = ???
  36062. Return: CL = ???
  36063.     CH = ???
  36064.     DL = ???
  36065.     DH = ???
  36066. ----------2F1A3F-----------------------------
  36067. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  36068.     AX = 1A3Fh (AL='?')
  36069.     ES:DI -> buffer
  36070.     CX = length of buffer in bytes
  36071. Return: CF clear
  36072.     CX = actual size of returned info
  36073. Note:    the returned information consists of multiple letters whose meanings
  36074.       are described under AX=1A21h
  36075. SeeAlso: AX=1A21h
  36076. ----------2F1A42BX4156-----------------------
  36077. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  36078.     AX = 1A42h
  36079.     BX = 4156h ('AV')
  36080.     ES:DI -> FAR handler for serial port using IRQ3
  36081.     DS = data segment needed by handler
  36082. Return: AX = 1A42h if ASD not installed
  36083.        = 0000h if no more room
  36084.        else handle to use when uninstalling
  36085. Notes:    the handler need not save/restore registers or signal EOI to the
  36086.       interrupt controller
  36087.     the handler should return AX=0000h if the interrupt was meant for it,
  36088.       and either leave AX unchanged or return a non-zero value otherwise
  36089.     the most recently installed handler will be called first, continuing
  36090.       to earlier handlers until one returns AX=0000h
  36091. SeeAlso: AX=1A43h,AX=1A62h
  36092. ----------2F1A43BX4156-----------------------
  36093. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  36094.     AX = 1A43h
  36095.     BX = 4156h ('AV')
  36096.     ES:DI -> FAR handler for serial port using IRQ4
  36097.     DS = data segment needed by handler
  36098. Return: AX = 1A43h if ASD not installed
  36099.        = 0000h if no more room
  36100.        else handle to use when uninstalling
  36101. Notes:    (see AX=1A42h)
  36102. SeeAlso: AX=1A42h,AX=1A63h
  36103. ----------2F1A44BX4156-----------------------
  36104. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  36105.     AX = 1A44h
  36106.     BX = 4156h ('AV')
  36107. Return: AX = 0000h
  36108.     DS = data segment
  36109.     CX = size of data segment
  36110. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  36111.       process under a multitasker hooks this function and provides a
  36112.       separate data segment, AVATAR.SYS becomes fully reentrant.
  36113. SeeAlso: AX=1A21h,AX=1A3Fh
  36114. ----------2F1A52-----------------------------
  36115. INT 2F U - AVATAR.SYS v0.11 - GET ???
  36116.     AX = 1A52h
  36117.     CX = size of buffer
  36118.     ES:DI -> buffer
  36119. Return: ??? copied into user buffer
  36120. Note:    the maximum size of the data which may be copied is returned by
  36121.       AX=1A72h
  36122. SeeAlso: AX=1A72h
  36123. ----------2F1A53-----------------------------
  36124. INT 2F U - AVATAR.SYS v0.11 - ???
  36125.     AX = 1A53h
  36126.     CL = ??? (00h-05h)
  36127.     ???
  36128. Return: ???
  36129. ----------2F1A62BX4156-----------------------
  36130. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  36131.     AX = 1A62h
  36132.     BX = 4156h ('AV')
  36133.     CX = handle for IRQ routine returned by AX=1A42h
  36134. SeeAlso: AX=1A42h,AX=1A63h
  36135. ----------2F1A63BX4156-----------------------
  36136. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  36137.     AX = 1A63h
  36138.     BX = 4156h ('AV')
  36139.     CX = handle for IRQ routine returned by AX=1A43h
  36140. SeeAlso: AX=1A43h,AX=1A62h
  36141. ----------2F1A72-----------------------------
  36142. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  36143.     AX = 1A72h
  36144. Return: CX = maximum size of ???
  36145. SeeAlso: AX=1A52h
  36146. ----------2F1A7B-----------------------------
  36147. INT 2F U - AVATAR.SYS v0.11 - ???
  36148.     AX = 1A7Bh
  36149. Return: AX = 0000h
  36150.     CX = 0000h
  36151. ----------2F1A7D-----------------------------
  36152. INT 2F U - AVATAR.SYS v0.11 - ???
  36153.     AX = 1A7Dh
  36154. Return: AX = ???
  36155. ----------2F1AADDX0000-----------------------
  36156. INT 2F U - AVATAR.SYS v0.11 - ???
  36157.     AX = 1AADh
  36158.     DX = 0000h
  36159.     CX = subfunction (00h-0Ch)
  36160.     ???
  36161. Return: AX = 0000h if DX was nonzero
  36162.     ???
  36163. ----------2F1B00-----------------------------
  36164. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  36165.     AX = 1B00h
  36166. Return: AL = FFh if installed
  36167. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  36168.     This extension hooks onto INT 67/AH=58h and returns from that call data
  36169.       which excludes the physical pages being used by DOS.
  36170. SeeAlso: AH=1Bh"FRAME INFO"
  36171. ----------2F1B-------------------------------
  36172. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  36173.     AH = 1Bh
  36174.     AL <> 00h
  36175.     DI = hidden physical page number
  36176. Return: AX = FFFFh if failed (no such hidden page)
  36177.     AX = 0000h if OK, then
  36178.          ES = segment of page frame
  36179.          DI = physical page number
  36180. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  36181.     FASTOPEN makes this call with AL = FFh
  36182. SeeAlso: AX=1B00h
  36183. ----------2F2300-----------------------------
  36184. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  36185.     AX = 2300h
  36186. Return: AH = FFh
  36187. Note:    this installation check does not follow the usual format
  36188. SeeAlso: AH=23h
  36189. ----------2F23-------------------------------
  36190. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  36191.     AH = 23h
  36192.     AL nonzero
  36193. Return: AH = FFh
  36194.     ES:BX -> graphics data
  36195. SeeAlso: AX=2300h
  36196. ----------2F2700-----------------------------
  36197. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  36198.     AX = 2700h
  36199. Return: AL = 00h not installed
  36200.        = FFh installed
  36201. ----------2F2701-----------------------------
  36202. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  36203.     AX = 2701h
  36204. Return: AX = maximum simultaneous tasks
  36205.     BX = index into TASK_IDS of current foreground task
  36206.     CX = currently-active tasks
  36207.     DX = version number (DR-DOS 6.0 = 0001h)
  36208.     ES:SI -> TASK_IDS
  36209.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  36210. Notes:    do not attempt to create a new task if CX == AX
  36211.     the task's index is its position on the task menu, while its ID is the
  36212.       position within the internal task name table
  36213. SeeAlso: AX=2714h,AX=2716h
  36214. ----------2F2702-----------------------------
  36215. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  36216.     AX = 2702h
  36217. Return: DX = maximum pages INT 67/AH=42h will report available
  36218. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  36219.       amount which is reported as being available at a given time
  36220. SeeAlso: AX=2703h,INT 67/AH=42h
  36221. ----------2F2703-----------------------------
  36222. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  36223.     AX = 2703h
  36224.     DX = maximum pages INT 67/AH=42h should report available
  36225. Return: DX = new maximum for reporting
  36226. SeeAlso: AX=2702h,INT 67/AH=42h
  36227. ----------2F2704-----------------------------
  36228. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  36229.     AX = 2704h
  36230.     DL = subfunction
  36231.         00h unregister task manager
  36232.         01h register task manager
  36233. Return: DL = status
  36234.         00h registered
  36235.         01h unregistered
  36236. Notes:    a task manager replaces TaskMAX's menu system with its own user
  36237.       interface; while one is registered, the TaskMAX hotkeys and
  36238.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  36239.     unregister the task manager before terminating it
  36240. SeeAlso: AX=2705h
  36241. ----------2F2705-----------------------------
  36242. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  36243.     AX = 2705h
  36244.     DL = subfunction
  36245.         00h disable keystrokes for switching to next/prev/specified task
  36246.         01h enable
  36247. Return: nothing
  36248. Note:    should only be called by a registered task manager (see AX=2704h)
  36249. SeeAlso: AX=2704h,AX=2706h
  36250. ----------2F2706-----------------------------
  36251. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  36252.     AX = 2706h
  36253.     DX = task index (see AX=2701h) of task to be activated
  36254. Return: DX = task index of previously-active task
  36255. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  36256. ----------2F2707-----------------------------
  36257. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  36258.     AX = 2707h
  36259.     DS:DX -> ASCIZ pathname of executable
  36260.     ES:BX -> parameter block (see below)
  36261.     CX = number of ticks before automatic return to task manager
  36262.         (0000h = run until termination or explicitly switched)
  36263. Return: DX = new task's task index (FFFFh if task terminated)
  36264. SeeAlso: AX=2706h,AX=2708h
  36265.  
  36266. Format of parameter block:
  36267. Offset    Size    Description
  36268.  00h    WORD    reserved, should be 0000h
  36269.  02h    DWORD    pointer to command tail to be copied into child's PSP
  36270.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  36271.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  36272. ----------2F2708-----------------------------
  36273. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  36274.     AX = 2708h
  36275.     DX = task index
  36276. Return: DX = FFFFh (task deleted)
  36277. Notes:    this call should only be used for abnormal task termination, after
  36278.       first checking for open files with AX=270Ch; should not be used
  36279.       with programs that allocate EMS or XMS memory
  36280.     switches to specified task first
  36281. SeeAlso: AX=2707h
  36282. ----------2F2709-----------------------------
  36283. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  36284.     AX = 2709h
  36285.     DX = task index
  36286.     DS:SI -> 8-byte name (8 NULs = remove name)
  36287. Return: AL = task flags
  36288.         00h ID unused or task terminated
  36289.         01h ID in use, task name table entry valid
  36290.         81h ID in use, task name fixed
  36291.     BX = task ID
  36292.     ES:DI -> name in task name table (see AX=2701h)
  36293. Note:    the task retains the given name until it terminates or the name is
  36294.       removed by specifying a name of 8 NULs.
  36295. SeeAlso: AX=2701h,AX=2707h
  36296. ----------2F270A-----------------------------
  36297. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  36298.     AX = 270Ah
  36299.     DX = task index
  36300. Return: DX = task ID (FFFFh if index invalid)
  36301. Note:    task IDs stay constant, while indexes can change when other tasks are
  36302.       deleted
  36303. SeeAlso: AX=2701h,AX=270Bh
  36304. ----------2F270B-----------------------------
  36305. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  36306.     AX = 270Bh
  36307.     DX = task ID
  36308. Return: DX = task index (FFFFh if task not active)
  36309. SeeAlso: AX=270Ah
  36310. ----------2F270C-----------------------------
  36311. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  36312.     AX = 270Ch
  36313.     DX = task index
  36314. Return: AX = number of files currently open for specified task
  36315. SeeAlso: AX=2708h
  36316. ----------2F270D-----------------------------
  36317. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  36318.     AX = 270Dh
  36319.     DX = task index
  36320. Return: DX = status
  36321.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  36322.         0001h if not in root shell for task
  36323. Note:    TaskMAX will return 0001h if the specified task has spawned another
  36324.       command interpreter with AX=2707h
  36325. SeeAlso: AX=2707h,AX=270Ch
  36326. ----------2F270E-----------------------------
  36327. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  36328.     AX = 270Eh
  36329.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  36330.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  36331. Return: ES:DI -> current lead-in string
  36332. Note:    the specified sequence of keystrokes is sent to the application before
  36333.       every line of a text-mode spreadsheet paste
  36334. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  36335. ----------2F270F-----------------------------
  36336. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  36337.     AX = 270Fh
  36338.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  36339.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  36340. Return: ES:DI -> current lead-in string
  36341. Note:    the specified sequence of keystrokes is sent to the application before
  36342.       every number in a numeric-mode spreadsheet paste
  36343. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  36344. ----------2F2710-----------------------------
  36345. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  36346.     AX = 2710h
  36347.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  36348.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  36349. Return: ES:DI -> current lead-in string
  36350. Note:    the specified sequence of keystrokes is sent to the application after
  36351.       every line of a spreadsheet paste operation
  36352. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  36353. ----------2F2711-----------------------------
  36354. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  36355.     AX = 2711h
  36356.     DX = ASCII code for separator (FFFFh to get current)
  36357. Return: DL = current separator character
  36358. SeeAlso: AX=270Fh
  36359. ----------2F2712-----------------------------
  36360. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  36361.     AX = 2712h
  36362.     DX = task index
  36363. ----------2F2713-----------------------------
  36364. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  36365.     AX = 2713h
  36366.     DX = task index
  36367.     CX = past mode
  36368.         0000h alphanumeric
  36369.         0001h numeric
  36370.         0002h text
  36371. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  36372. ----------2F2714-----------------------------
  36373. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  36374.     AX = 2714h
  36375. Return: CX = total KB of swap space
  36376.     DX = available KB of swap space
  36377. SeeAlso: AX=2701h
  36378. ----------2F2715-----------------------------
  36379. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  36380.     AX = 2715h
  36381. Return: only after calling task is again selected
  36382. SeeAlso: AX=2706h
  36383. ----------2F2716-----------------------------
  36384. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  36385.     AX = 2716h
  36386. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  36387.         CX = bytes in paste buffer
  36388.         DX = current generation number (updated after every copy operation)
  36389. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  36390. ----------2F2717-----------------------------
  36391. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  36392.     AX = 2717h
  36393.     CX = bytes in destination buffer
  36394.     ES:DI -> destination buffer
  36395. Return: AX = 0000h if function supported
  36396.         CX = bytes actually copied (FFFFh if buffer too small)
  36397.         DX = current generation number for paste buffer
  36398. Note:    the destination buffer may be too small if another task adds more data
  36399.       to the paste buffer after the AX=2716h call but before this call
  36400. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  36401. ----------2F2718-----------------------------
  36402. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  36403.     AX = 2718h
  36404.     CX = bytes in source buffer
  36405.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  36406. Return: AX = 0000h if function supported
  36407.         CX = bytes actually copied
  36408.         DX = current generation number for paste buffer
  36409. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  36410. ----------2F2A-------------------------------
  36411. INT 2F - Gammafax DOS Dispatcher INTERFACE
  36412.     AH = 2Ah
  36413. Note:    details not available at this time
  36414. SeeAlso: AX=8000h"FaxBIOS",AX=C000h"MTEZ",AX=CB00h,AX=CBDDh,INT 66"BitFax"
  36415. ----------2F3900-----------------------------
  36416. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  36417.     AX = 3900h
  36418. Return: AL = status
  36419.         00h not installed
  36420.         FFh one or more TSRs using this interface is installed
  36421. Note:    this function is provided to that the multiplex number will appear used
  36422.       to other programs
  36423. SeeAlso: AH=39h/BL=00h
  36424. ----------2F39--BL00-------------------------
  36425. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  36426.     AH = 39h
  36427.     BL = 00h
  36428.     AL = TSR ID number (01h-FFh, currently only 01h-0Eh used) (see below)
  36429. Return: AL = status
  36430.         00h not installed
  36431.         FFh installed
  36432.         DX = segment address of resident module
  36433. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  36434.       resident module is installed by allocating a block of upper memory,
  36435.       setting its owner ID to 0008h (DOS data), and filling the MCB name
  36436.       field with the TSR's name.
  36437. SeeAlso: AX=3900h,AH=39h/BL=01h
  36438.  
  36439. Values for TSR ID number:
  36440.  01h TSR Windows
  36441.  02h NOBUSY
  36442.  03h CD STACK
  36443.  04h DISK WATCH
  36444.  05h PUSHBP
  36445.  06h ALIAS
  36446.  07h KEYMACRO
  36447.  08h SLOWDOWN
  36448.  09h ANSIGRAB
  36449.  0Ah TEE
  36450.  0Bh FASTMOUS
  36451.  0Ch EXTWILD
  36452.  0Dh BREAKOUT
  36453.  0Eh STOPDISK
  36454.  
  36455. Format of TSR modules:
  36456. Offset    Size    Description
  36457.  00h  4 BYTEs    signature "FTSR"
  36458.  04h    WORD    segment address of this module
  36459.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  36460.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  36461.         (usually only a PSP if file access is required)
  36462.      5N BYTEs    interrupt list (see below)
  36463.     BYTE    FFh terminator
  36464.  
  36465. Format of interrupt list entry:
  36466. Offset    Size    Description
  36467.  00h    BYTE    interrupt number (00h-FEh)
  36468.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  36469.  03h    WORD    offset within segment of begin of interrupt handler code
  36470. ----------2F39--BL01-------------------------
  36471. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  36472.     AH = 39h
  36473.     BL = 01h
  36474.     AL = TSR ID number (01h-FFh) (see AH=39h/BL=00h)
  36475. Return: AL = status
  36476.         00h not ready to be removed
  36477.         FFh resident module may be removed by deassigning the interrupts
  36478.         hooked by the TSR and deallocating the TSR's memory block
  36479.     AH,BX,CX,DX,ES may be destroyed
  36480. SeeAlso: AX=3900h,AH=39h/BL=00h
  36481. ----------2F39-------------------------------
  36482. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  36483.     AH = 39h
  36484.     BL = function number (02h-FFh)
  36485.     AL = TSR ID number (01h-FFh)
  36486.     CX,DX,SI,DI,DS,ES may contain parameters
  36487. Return: as appropriate for the called function
  36488. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  36489. ----------2F3901BL02-------------------------
  36490. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  36491.     AX = 3901h
  36492.     BL = 02h
  36493. Return: AX = error code (0000h if successful)
  36494. Notes:    opens the next TSR window on top of any others.     Only three
  36495.       TSR windows can be opened at any one time.  The three windows
  36496.       are all 40x11 characters, partly overlapping.
  36497. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  36498. ----------2F3901BL03-------------------------
  36499. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  36500.     AX = 3901h
  36501.     BL = 03h
  36502. Return: AX = error code (0000h if successful)
  36503. Notes:    Hide any visible TSR windows from view.
  36504. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  36505. ----------2F3901BL04-------------------------
  36506. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  36507.     AX = 3901h
  36508.     BL = 04h
  36509. Return: AX = error code (0000h if successful)
  36510. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  36511. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  36512. ----------2F3901BL05-------------------------
  36513. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  36514.     AX = 3901h
  36515.     BL = 05h
  36516. Return: AX = error code (0000h if successful)
  36517. Notes:    Close the last opened TSR window.
  36518. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  36519. ----------2F3901BL06-------------------------
  36520. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  36521.     AX = 3901h
  36522.     BL = 06h
  36523.     DS:SI -> title string
  36524. Return: AX = error code (0000h if successful)
  36525. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  36526. ----------2F3901BL07-------------------------
  36527. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  36528.     AX = 3901h
  36529.     BL = 07h
  36530.     CH = Y coordinate (0-10)
  36531.     CL = X coordinate (0-39)
  36532. Return: AX = error code (0000h if successful)
  36533. Note:    the hardware cursor is always disabled when a TSR window is opened;
  36534.       this call only sets a text position
  36535. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  36536. ----------2F3901BL08-------------------------
  36537. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  36538.     AX = 3901h
  36539.     BL = 08h
  36540.     DS:SI -> string
  36541. Return: AX = error code (0000h if successful)
  36542. Notes:    The text is not clipped.
  36543.     This routine understands Tab, NewLine and Carriage Return
  36544. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  36545. ----------2F3901BL09-------------------------
  36546. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  36547.     AX = 3901h
  36548.     BL = 09h
  36549.     CL = scroll direction: 00h up, FFh down, 00h clear window
  36550. Return: AX = error code (0000h if successful)
  36551. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  36552. ----------2F3901BL0A-------------------------
  36553. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  36554.     AX = 3901h
  36555.     BL = 0Ah
  36556.     DX = sound divisor, or 0 for silence.
  36557.          (divide 1843200 by required frequency to get value for DX)
  36558.     CL = sound length in 18.2 Hz clock ticks
  36559. Return: AX = error code (0000h if successful)
  36560. SeeAlso: AH=39h/BL=00h
  36561. ----------2F3901BL0B-------------------------
  36562. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  36563.     AX = 3901h
  36564.     BL = 0Bh
  36565.     CL = number of users increment: +1 if adding a new user
  36566.                     -1 if removing a user
  36567. Return: AX = error code (0000h if successful)
  36568. Note:    the TSR windows resident module may only be removed when the internal
  36569.       user count is zero
  36570. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  36571. ----------2F4000-----------------------------
  36572. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  36573.     AX = 4000h
  36574. Return: AL = 01h does not virtualize video access
  36575.          02h virtualizes the video when in text mode
  36576.          03h virtualizes the video when in text mode or single plane
  36577.          graphics modes
  36578.          04h virtualizes the video when in text mode, single plane
  36579.          graphics modes, and VGA multiplane modes
  36580.          FFh virtualizes the video fully
  36581. Note:    this function is used by display drivers to find out what capabilities
  36582.       exist for the VDD driver and also trigger then VDD driver to call
  36583.       functions 4005h and 4006h.  This function also gives the Video Driver
  36584.       hardware access to the video registers.
  36585. ----------2F4001-----------------------------
  36586. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  36587.     AX = 4001h
  36588. Note:    called by OS/2 when the DOS box is about to be placed in the background
  36589.       and the video driver should save any necessary state
  36590. SeeAlso: AX=4002h,AX=4005h
  36591. ----------2F4002-----------------------------
  36592. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  36593.     AX = 4002h
  36594. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  36595.       and the video driver should restore the previously-saved state
  36596. SeeAlso: AX=4001h,AX=4006h
  36597. ----------2F4003-----------------------------
  36598. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  36599.     AX = 4003h
  36600. Note:    This critical section must be exited within 1 second.
  36601. SeeAlso: AX=4004h
  36602. ----------2F4004-----------------------------
  36603. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  36604.     AX = 4004h
  36605. SeeAlso: AX=4003h
  36606. ----------2F4005-----------------------------
  36607. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  36608.     AX = 4005h
  36609. Note:    called by Windows when the DOS box is about to be placed in the
  36610.       background and the video driver should save any necessary state
  36611.       information
  36612. SeeAlso: AX=4001h,AX=4006h
  36613. ----------2F4006-----------------------------
  36614. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  36615.     AX = 4006h
  36616. Note:    called by Windows when the DOS box is about to be placed in the
  36617.       foreground and the video driver should restore any necessary state
  36618.       information
  36619. SeeAlso: AX=4002h,AX=4005h
  36620. ----------2F4007-----------------------------
  36621. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  36622.     AX = 4007h
  36623. ----------2F4040-----------------------------
  36624. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  36625.     AX = 4040h
  36626. Return: BX:CX -> ???
  36627. ----------2F41-------------------------------
  36628. INT 2F - LAN Manager 2.0 DOS Enhanced NETPOPUP.EXE - NETWORK POP-UP SERVICE
  36629.     AH = 41h
  36630.     ???
  36631. Return: ???
  36632. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  36633.       file/printer services
  36634. SeeAlso: AX=118Ah,AH=42h,AH=4Bh
  36635. ----------2F42-------------------------------
  36636. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  36637.     AH = 42h
  36638.     ???
  36639. Return: ???
  36640. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  36641.       file/printer services
  36642. SeeAlso: AX=118Ah,AH=41h,AH=4Bh
  36643. ----------2F4300-----------------------------
  36644. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - INSTALLATION CHECK
  36645.     AX = 4300h
  36646. Return: AL = 80h XMS driver installed
  36647.     AL <> 80h no driver
  36648. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  36649.       above 640K
  36650.     this installation check DOES NOT follow the format used by other
  36651.       software
  36652. SeeAlso: AX=4310h
  36653. ---------------------------------------------
  36654. INT 2F U - HIMEM.SYS v2.77+ - GET A20 HANDLER NUMBER
  36655.     AX = 4308h
  36656. Return: AL = 43h if supported
  36657.         BL = A20 handler number (value of /MACHINE:nn switch)
  36658.         BH = AT A20 switch time (00h medium, 01h fast, 02h slow)
  36659. SeeAlso: AX=4330h
  36660. ----------2F4310-----------------------------
  36661. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - GET DRIVER ADDRESS
  36662.     AX = 4310h
  36663. Return: ES:BX -> driver entry point
  36664. Note:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  36665. SeeAlso: AX=4300h
  36666.  
  36667. Perform a FAR call to the driver entry point with AH set to the function code
  36668.     AH    function
  36669.     00h  Get XMS version number
  36670.          Return: AX = XMS version (in BCD, AH=major, AL=minor)
  36671.              BX = internal revision number
  36672.              DX = 0001h if HMA (1M to 1M + 64K) exists
  36673.               0000h if HMA does not exist
  36674.     01h  Request High Memory Area (1M to 1M + 64K)
  36675.          DX = memory in bytes (for TSR or device drivers)
  36676.           FFFFh if application program
  36677.          Return: AX = 0001h success
  36678.             = 0000h failure
  36679.                BL = error code (80h,81h,90h,91h,92h) (see below)
  36680.     02h  Release High Memory Area
  36681.          Return: AX = 0001h success
  36682.             = 0000h failure
  36683.                BL = error code (80h,81h,90h,93h) (see below)
  36684.     03h  Global enable A20, for using the HMA
  36685.          Return: AX = 0001h success
  36686.             = 0000h failure
  36687.                BL = error code (80h,81h,82h) (see below)
  36688.     04h  Global disable A20
  36689.          Return: AX = 0001h success
  36690.             = 0000h failure
  36691.                BL = error code (80h,81h,82h,94h) (see below)
  36692.     05h  Local enable A20, for direct access to extended memory
  36693.          Return: AX = 0001h success
  36694.             = 0000h failure
  36695.                BL = error code (80h,81h,82h) (see below)
  36696.     06h  Local disable A20
  36697.          Return: AX = 0001h success
  36698.             = 0000h failure
  36699.                BL = error code (80h,81h,82h,94h) (see below)
  36700.     07h  Query A20 state
  36701.          Return: AX = 0001h enabled
  36702.             = 0000h disabled
  36703.              BL = error code (00h,80h,81h) (see below)
  36704.     08h  Query free extended memory, not counting HMA
  36705.          BL = 00h (some implementations leave BL unchanged on success)
  36706.          Return: AX = size of largest extended memory block in K
  36707.              DX = total extended memory in K
  36708.              BL = error code (00h,80h,81h,A0h) (see below)
  36709.     09h  Allocate extended memory block
  36710.          DX = Kbytes needed
  36711.          Return: AX = 0001h success
  36712.                DX = handle for memory block
  36713.             = 0000h failure
  36714.                BL = error code (80h,81h,A0h) (see below)
  36715.     0Ah  Free extended memory block
  36716.          DX = handle of block to free
  36717.          Return: AX = 0001h success
  36718.             = 0000h failure
  36719.                BL = error code (80h,81h,A2h,ABh) (see below)
  36720.     0Bh  Move extended memory block
  36721.          DS:SI -> EMM structure (see below)
  36722.          Note: if either handle is 0000h, the corresponding offset is
  36723.            considered to be an absolute segment:offset address in
  36724.            directly addressable memory
  36725.          Return: AX = 0001h success
  36726.             = 0000h failure
  36727.                BL = error code (80h-82h,A3h-A9h) (see below)
  36728.     0Ch  Lock extended memory block
  36729.          DX = handle of block to lock
  36730.          Return: AX = 0001h success
  36731.                DX:BX = 32-bit linear address of locked block
  36732.             = 0000h failure
  36733.                BL = error code (80h,81h,A2h,ACh,ADh) (see below)
  36734.     0Dh  Unlock extended memory block
  36735.          DX = handle of block to unlock
  36736.          Return: AX = 0001h success
  36737.             = 0000h failure
  36738.                BL = error code (80h,81h,A2h,AAh) (see below)
  36739.     0Eh  Get handle information
  36740.          DX = handle for which to get info
  36741.          Return: AX = 0001h success
  36742.                BH = block's lock count
  36743.                BL = number of free handles left
  36744.                DX = block size in K
  36745.             = 0000h failure
  36746.                BL = error code (80h,81h,A2h) (see below)
  36747.     0Fh  Reallocate extended memory block
  36748.          DX = handle of block
  36749.          BX = new size of block in K
  36750.          Return: AX = 0001h success
  36751.             = 0000h failure
  36752.                BL = error code (80h,81h,A0h-A2h,ABh) (see below)
  36753.     10h  Request upper memory block (nonEMS memory above 640K)
  36754.          DX = size of block in paragraphs
  36755.          Return: AX = 0001h success
  36756.                BX = segment address of UMB
  36757.                DX = actual size of block
  36758.             = 0000h failure
  36759.                BL = error code (80h,B0h,B1h) (see below)
  36760.                DX = largest available block
  36761.     11h  Release upper memory block
  36762.          DX = segment address of UMB to release
  36763.          Return: AX = 0001h success
  36764.             = 0000h failure
  36765.                BL = error code (80h,B2h) (see below)
  36766.     12h  (XMS v3.0) Reallocate upper memory block
  36767.          DX = segment address of UMB to resize
  36768.          BX = new size of block in paragraphs
  36769.          Return: AX = 0001h success
  36770.             = 0000h failure
  36771.                BL = error code (80h,B0h,B2h) (see below)
  36772.     34h  (QEMM 5.11 only, undocumented) ???
  36773.     44h  (QEMM 5.11 only, undocumented) ???
  36774.     88h  (XMS v3.0) Query free extended memory
  36775.          Return: EAX = largest block of extended memory, in K
  36776.              BL = status
  36777.              00h success
  36778.              80h not implemented (i.e. on a 286 system)
  36779.              81h VDISK detected
  36780.              A0h all extended memory allocated
  36781.              ECX = physical address of highest byte of memory
  36782.                 (valid even on error codes 81h and A0h)
  36783.              EDX = total Kbytes of extended memory (0 if status A0h)
  36784.     89h  (XMS v3.0) Allocate any extended memory
  36785.          EDX = Kbytes needed
  36786.          Return: AX = 0001h success
  36787.                 DX = handle for allocated block (free with AH=0Ah)
  36788.             = 0000h failure
  36789.                 BL = status (80h,81h,A0h,A1h,A2h) (see below)
  36790.     8Eh  (XMS v3.0) Get extended EMB handle information
  36791.          DX = handle
  36792.          Return: AX = 0001h success
  36793.                 BH = block's lock count
  36794.                 CX = number of free handles left
  36795.                 EDX = block size in K
  36796.             = 0000h failure
  36797.                 BL = status (80h,81h,A2h) (see below)
  36798.     8Fh  (XMS v3.0) Reallocate any extended memory block
  36799.          DX = unlocked handle
  36800.          EBX = new size in K
  36801.          Return: AX = 0001h success
  36802.             = 0000h failure
  36803.                 BL = status (80h,81h,A0h-A2h,ABh) (see below)
  36804. Notes:    HIMEM.SYS requires at least 256 bytes free stack space
  36805.     the XMS driver need not implement functions 10h through 12h to be
  36806.       considered compliant with the standard
  36807. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  36808.       are called
  36809.  
  36810. Format of EMM structure:
  36811. Offset    Size    Description
  36812.  00h    DWORD    number of bytes to move (must be even)
  36813.  04h    WORD    source handle
  36814.  06h    DWORD    offset into source block
  36815.  0Ah    WORD    destination handle
  36816.  0Ch    DWORD    offset into destination block
  36817. Notes:    if source and destination overlap, only forward moves (source base
  36818.       less than destination base) are guaranteed to work properly
  36819.     if either handle is zero, the corresponding offset is interpreted
  36820.       as a real-mode address referring to memory directly addressable
  36821.       by the processor
  36822.  
  36823. Error codes returned in BL:
  36824.     00h successful
  36825.     80h function not implemented
  36826.     81h Vdisk was detected
  36827.     82h an A20 error occurred
  36828.     8Eh a general driver error
  36829.     8Fh unrecoverable driver error
  36830.     90h HMA does not exist
  36831.     91h HMA is already in use
  36832.     92h DX is less than the /HMAMIN= parameter
  36833.     93h HMA is not allocated
  36834.     94h A20 line still enabled
  36835.     A0h all extended memory is allocated
  36836.     A1h all available extended memory handles are allocated
  36837.     A2h invalid handle
  36838.     A3h source handle is invalid
  36839.     A4h source offset is invalid
  36840.     A5h destination handle is invalid
  36841.     A6h destination offset is invalid
  36842.     A7h length is invalid
  36843.     A8h move has an invalid overlap
  36844.     A9h parity error occurred
  36845.     AAh block is not locked
  36846.     ABh block is locked
  36847.     ACh block lock count overflowed
  36848.     ADh lock failed
  36849.     B0h only a smaller UMB is available
  36850.     B1h no UMB's are available
  36851.     B2h UMB segment number is invalid
  36852. ---------------------------------------------
  36853. INT 2F UC - HIMEM.SYS v2.77+ - GET EXTERNAL A20 HANDLER ADDRESS
  36854.     AX = 4330h
  36855. Return: AL = 80h if external A20 handler provided
  36856.         ES:BX -> external A20 handler
  36857.         CL = ???
  36858. Note:    HIMEM.SYS calls this function to allow an external program to provide
  36859.       an A20 handler (i.e. to support a machine not supported by HIMEM
  36860.       itself)
  36861.  
  36862. External A20 handler called with:
  36863.     AX = function
  36864.         0000h disable A20
  36865.         0001h enable A20
  36866.     Return: AX = status
  36867.             0000h failure
  36868.             0001h successful
  36869. SeeAlso: AX=4308h,AX=4310h
  36870. ----------2F44-------------------------------
  36871. INT 2F U - ???
  36872.     AH = 44h
  36873.     AL = function (at least 0Bh, 15h, 17h)
  36874.     ???
  36875. Return: ???
  36876. Note:    called by Codeview for Windows
  36877. SeeAlso: AH=86h
  36878. ----------2F4500-----------------------------
  36879. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK
  36880.     AX = 4500h
  36881. Return: AL = 01h if PROF.COM installed
  36882.     AL = 02h if VPROD.386 installed
  36883. SeeAlso: AX=4501h,AX=4502h
  36884. ----------2F4501-----------------------------
  36885. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER
  36886.     AX = 4501h
  36887.     BX = CSIPS buffer size in KB (first parameter for ProfSetup)
  36888.     CX = output limit in KB (second parameter for ProfSetup)
  36889. Note:    this call is not supported by PROF.COM
  36890. SeeAlso: AX=4502h,AX=4503h
  36891. ----------2F4502-----------------------------
  36892. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE
  36893.     AX = 4502h
  36894.     BL = sampling rate for PROF.COM (0 < BL <= 13)
  36895.         (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
  36896.     CX = sampling rate for VPROD.386
  36897. Note:    for PROF.COM, this programs the CMOS clock by setting BL+2 as the
  36898.       low four bits of CMOS register 0Ah.  The interruption rate is
  36899.       1 SHL (15 - BL) per second.
  36900. SeeAlso: AX=4501h,AX=4503h
  36901. ----------2F4503-----------------------------
  36902. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING
  36903.     AX = 4503h
  36904. Notes:    Profiling is also turned on by the key combinations
  36905.       LeftShift + RightShift + Alt
  36906.       LeftShift + RightShift + Ctrl
  36907.     for PROF.COM, this call programs the CMOS clock by reading register
  36908.       0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  36909.       is unmasked
  36910. SeeAlso: AX=4504h
  36911. ----------2F4504-----------------------------
  36912. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING
  36913.     AX = 4504h
  36914. Notes:    profiling is also turned off by the key combination
  36915.       LeftShift + RightShift
  36916.     for PROF.COM, this programs the CMOS clock by reading register 0Ch
  36917.       and clearing bit 6 of register 0Bh.  It then masks IRQ8.
  36918. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h
  36919. ----------2F4505-----------------------------
  36920. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA
  36921.     AX = 4505h
  36922. SeeAlso: AX=4503h,AX=4504h,AX=4506h
  36923. ----------2F4506-----------------------------
  36924. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush"
  36925.     AX = 4506h
  36926. SeeAlso: AX=4505h,AX=4507h
  36927. ----------2F4507-----------------------------
  36928. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish"
  36929.     AX = 4507h
  36930. Note:    this call is essentially a "ProfStop" (AX=4504h) followed by
  36931.       "ProfFlush" (AX=4506h)
  36932. SeeAlso: AX=4504h,AX=4505h,AX=4506h
  36933. ----------2F4508-----------------------------
  36934. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE
  36935.     AX = 4508h
  36936.     BX = ordinal (or 0000h)
  36937.     CX = segment
  36938.     DX = instance (or 0000h)
  36939.     SI = type (or 0000h)
  36940.     ES:DI -> ASCIZ module name
  36941. Notes:    this call is an alternate entry to the profiler's SEGDEBUG
  36942.       interface, but only to function 0, for notifying the profiler of
  36943.       each new segment loaded.  The SHOWHITS utility then examines the
  36944.       profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  36945.       with symbol files to provide information in a useful form.
  36946.     this call does not have a corresponding Windows function
  36947. SeeAlso: AX=4500h 
  36948. ----------2F4601-----------------------------
  36949. INT 2F U - DOS 5.0 kernel - ???
  36950.     AX = 4601h
  36951. Return: ???
  36952. Note:    copies the MCB following the caller's PSP memory block into DOS data
  36953.       segment
  36954. SeeAlso: AX=4602h
  36955. ----------2F4602-----------------------------
  36956. INT 2F U - DOS 5.0 kernel - ???
  36957.     AX = 4602h
  36958. Return: ???
  36959. Note:    copies previously copied MCB from DOS data segment into MCB following
  36960.       caller's PSP memory block
  36961. SeeAlso: AX=4601h
  36962. ----------2F46-------------------------------
  36963. INT 2F U - ???
  36964.     AH = 46h
  36965.     AL = subfunction (03h,04h)
  36966. Return: ???
  36967. Note:    these two subfunctions are called by MS Windows 3.0
  36968. ----------2F4653CX0002-----------------------
  36969. INT 2F - F-PROT v1.x only - F-LOCK.EXE 
  36970.     AX = 4653h
  36971.     CX = 0002h
  36972.     BX = subfunction
  36973.         0000h  installation check
  36974.         Return: AX = FFFFh
  36975.         0001h  uninstall
  36976.         Return: AX,BX,ES destroyed
  36977.         0002h  disable (v1.08 and below only)
  36978.         0003h  enable (v1.08 and below only)
  36979. Note:    F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik
  36980.       Skulason
  36981. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  36982. ----------2F4653CX0003-----------------------
  36983. INT 2F - F-PROT v1.x only - F-XCHK.EXE
  36984.     AX = 4653h
  36985.     CX = 0003h
  36986.     BX = subfunction
  36987.         0000h  installation check
  36988.         Return: AX = FFFFh
  36989.         0001h  uninstall
  36990.         Return: AX,BX,ES destroyed
  36991. Note:    F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik
  36992.       Skulason
  36993. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  36994. ----------2F4653CX0004-----------------------
  36995. INT 2F - F-PROT v1.x only - F-POPUP.EXE
  36996.     AX = 4653h
  36997.     CX = 0004h
  36998.     BX = subfunction
  36999.         0000h  installation check
  37000.         Return: AX = FFFFh
  37001.         0001h  uninstall
  37002.         Return: AX,BX,ES destroyed
  37003.         0002h  disable (v1.08 and below only)
  37004.            display message (v1.14+)
  37005.             other registers: ???
  37006.         0003h  enable (v1.08 and below only)
  37007.            display message (v1.14+)
  37008.             other registers: ???
  37009.             Return: AX = key pressed by user
  37010. Note:    F-POPUP is part of the F-PROT virus/trojan protection package by
  37011.       Fridrik Skulason
  37012. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  37013. ----------2F4653CX0005-----------------------
  37014. INT 2F - F-PROT v1.x only - F-DLOCK.EXE
  37015.     AX = 4653h
  37016.     CX = 0005h
  37017.     BX = subfunction
  37018.         0000h installation check
  37019.         Return: AX = FFFFh
  37020.         0001h uninstall
  37021.         Return: AX,BX,ES destroyed
  37022. Note:    F-DLOCK is part of the F-PROT virus/trojan protection package by
  37023.       Fridrik Skulason
  37024. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  37025. ----------2F4680-----------------------------
  37026. INT 2F U - MS Windows v3.0 - INSTALLATION CHECK
  37027.     AX = 4680h
  37028. Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  37029.            or DOS 5 DOSSHELL active
  37030.        nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  37031.             mode
  37032. Note:    Windows 3.1 finally provides an installation check which works in all
  37033.       modes (see AX=160Ah)
  37034. SeeAlso: AX=1600h,AX=160Ah
  37035. ----------2F4800-----------------------------
  37036. INT 2F - DOS v5.0 DOSKEY - INSTALLATION CHECK
  37037.     AX = 4800h
  37038. Return: AL = nonzero if installed
  37039. SeeAlso: AX=4810h
  37040. ----------2F4810-----------------------------
  37041. INT 2F - DOS v5.0 DOSKEY - READ INPUT LINE FROM CONSOLE
  37042.     AX = 4810h
  37043.     DS:DX -> line buffer (see INT 21/AH=0Ah)
  37044. Return: AX = 0000h if successful
  37045. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  37046.       the previous handler
  37047.     if the user's input is a macro name, no text is placed in the buffer
  37048.       even though AX=0000h on return; the program must immediately issue
  37049.       this call again to retrieve the expansion of the macro.  Similarly,
  37050.       if the user enters a special parameter such as $*, this call must
  37051.       be repeated to retrieve the expansion; on the second call, DOSKEY
  37052.       overwrites the macro name on the screen with its expansion.
  37053. SeeAlso: AX=4800h,INT 21/AH=0Ah
  37054. ----------2F4A00CX0000-----------------------
  37055. INT 2F CU - DOS v5.0 - SINGLE-FLOPPY LOGICAL DRIVE CHANGE NOTIFICATION
  37056.     AX = 4A00h
  37057.     CX = 0000h
  37058.     DH = new drive number
  37059.     DL = current drive number
  37060. Return: CX = FFFFh to skip "Insert diskette for drive X:" message
  37061. Note:    called by MSDOS 5.00 IO.SYS just before displaying the message
  37062.       "Insert diskette for drive X:" on single-floppy systems
  37063. ----------2F4A01-----------------------------
  37064. INT 2F - DOS 5.0 - QUERY FREE HMA SPACE
  37065.     AX = 4A01h
  37066. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  37067.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  37068. Note:    called by Windows 3.1 DOSX.EXE
  37069. SeeAlso: AX=4310h,AX=4A02h
  37070. ----------2F4A02-----------------------------
  37071. INT 2F - DOS 5.0 - ALLOCATE HMA SPACE
  37072.     AX = 4A02h
  37073.     BX = number of bytes
  37074. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  37075.     BX destroyed
  37076. Notes:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  37077.     called by Windows 3.1 DOSX.EXE
  37078. SeeAlso: AX=4A01h
  37079. ----------2F4A05-----------------------------
  37080. INT 2F U - DOS 5.0 DOSSHELL - TASK SWITCHING API???
  37081.     AX = 4A05h
  37082.     SI = function
  37083.         0000h reset???
  37084.         0001h ???
  37085.         0002h ???
  37086.         0003h ???
  37087.         0004h ???
  37088.         BL = ???
  37089.         0005h ???
  37090.         0006h get ???
  37091.         Return: ES:DI -> ???
  37092.         0007h get ???
  37093.         Return: AX = ???
  37094.         0008h get ???
  37095.         Return: DX:AX -> ???
  37096.         0009h get ???
  37097.         Return: ES = ???
  37098.         000Ah ???
  37099.         BL = ???
  37100.         ES:DI -> ???
  37101.         000Bh get ???
  37102.         Return: AX = ???
  37103.         000Ch ???
  37104.         BL = ???
  37105.         Return: DX:AX -> ???
  37106. Notes:    DOSSHELL chains to the previous handler if SI is not one of the values
  37107.       listed above
  37108.     the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch
  37109.     the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls
  37110. SeeAlso: AX=4B01h
  37111. ----------2F4A06-----------------------------
  37112. INT 2F CU - ??? - GET MEMORY SIZE
  37113.     AX = 4A06h
  37114.     DX = segment following last byte of conventional memory
  37115. Return: DX = segment following last byte of memory available for use by DOS
  37116. Note:    called by MSDOS 5.00 IO.SYS startup code if the signature "RPL" is
  37117.       present three bytes beyond the INT 2F handler; this call overrides
  37118.       the value returned by INT 12
  37119. SeeAlso: INT 12
  37120. ----------2F4A10-----------------------------
  37121. INT 2F - SMARTDRV v4.00+ - API
  37122.     AX = 4A10h
  37123.     BX = command
  37124.         0000h installation check and hit ratios
  37125.         Return: AX = BABEh if installed
  37126.                 DX:BX = cache hits
  37127.                 DI:SI = cache misses
  37128.                 CX = ???
  37129.                 BP = version (4.00 = 0400h)
  37130.         0001h reset cache
  37131.         0002h flush buffers
  37132.         0003h status
  37133.         BP = drive # (0=A, 1=B, etc.)
  37134.         DL = subfunction
  37135.             00h only get information
  37136.             01h turn on read cache
  37137.             02h turn off read cache
  37138.             03h turn on write cache
  37139.             04h turn off write cache
  37140.         Return: AX = BABEh if OK
  37141.             DL = status
  37142.                 bit 7  not cached
  37143.                 bit 6  write-through
  37144.                 bit 5  ???
  37145.                 bits 0-4 drive # (0=A, 1=B...)
  37146.             DL = FFh if drive does not exist
  37147.         Note:    If the read cache is off, reads will not be cached,
  37148.               but writes will continue to be cached if the write-
  37149.               cache is enabled.
  37150.         0004h cache size
  37151.         Return: AX = ???
  37152.             BX = largest number of elements
  37153.             CX = size of elements in bytes
  37154.             DX = number of elements under Windows
  37155.         0005h double-buffer status
  37156.         BP = drive # (0=A, 1=B...)
  37157.         Return: AX = BABEh if double-buffered
  37158.         0007h ???
  37159.         Return: DI = random number???
  37160.         000Ah get table pointer???
  37161.         Return: ES:BX -> table of about 10 bytes or 5 words. Seems to
  37162.                 be words pointing to memory addresses 
  37163.                 containing info??? (see below)
  37164.         1234h signal serious error
  37165.         pops up a message box saying that a serious error occurred and
  37166.           to hit R to retry.
  37167. !!!
  37168. Note:    at least partially supported by PC-Cache v8.0 (details not yet known)
  37169. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  37170.  
  37171. Format of data table:
  37172. Offset    Size    Description
  37173.  00h  8 BYTEs    ???
  37174.  08h    WORD    offset of WORD containing number of elements in cache
  37175. ----------2F4B-------------------------------
  37176. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  37177.     AH = 4Bh
  37178.     ???
  37179. Return: ???
  37180. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  37181.       file/printer services
  37182. SeeAlso: AX=118Ah,AH=41h,AH=42h
  37183. ----------2F4B01-----------------------------
  37184. INT 2F C - DOS v5.0 TASK SWITCHER - BUILD CALLOUT CHAIN
  37185.     AX = 4B01h
  37186.     CX:DX -> task switcher entry point (see AX=4B02h)
  37187.     ES:BX = 0000h:0000h
  37188. Return: ES:BX -> callback info structure (see below) or 0000h:0000h
  37189. Notes:    called by the task switcher
  37190.     this function is hooked by clients which require notification of task
  37191.       switcher activities; the call must first be passed on to the prior
  37192.       handler with registers unchanged using a simulated interrupt.     On
  37193.       return, the client must build a callback info structure and store
  37194.       the returned ES:BX in the "next" field, then return the address of
  37195.       its own callback info structure.
  37196.     a client program must add itself to the notification chain if it
  37197.       provides services to other programs; before terminating, it must
  37198.       remove itself from the chain by calling the task switcher's entry
  37199.       point with AX=0005h (see AX=4B02h)
  37200.     the task switcher entry point should not be saved, as it is subject to
  37201.       change and will be provided on any notification call
  37202.     the Windows 3.1 Standard Mode supports this API
  37203. SeeAlso: AX=160Bh,AX=4B02h
  37204.  
  37205. Format of callback info structure:
  37206. Offset    Size    Description
  37207.  00h    DWORD    pointer to next callback info structure
  37208.  04h    DWORD    pointer to notification function (see below)
  37209.  08h    DWORD    reserved
  37210.  0Ch    DWORD    address of zero-terminated list of API info structures
  37211.         (see AX=4B02h)
  37212.  
  37213. Notification function is called with:
  37214.     AX = function
  37215.         0000h switcher initialization
  37216.         Return: AX = 0000h if OK to load
  37217.                = nonzero to abort task switcher
  37218.         0001h query suspend
  37219.         BX = session ID
  37220.         Return: AX = 0000h if OK to switch session
  37221.                = 0001h if not
  37222.         0002h suspend session
  37223.         BX = session ID
  37224.         interrupts disabled
  37225.         Return: AX = 0000h if OK to switch session
  37226.                = 0001h if not
  37227.         0003h activate session
  37228.         BX = session ID
  37229.         CX = session status flags
  37230.             bit 0: set if first activation of session
  37231.             bits 1-15: reserved (0)
  37232.         interrupts disabled
  37233.         Return: AX = 0000h
  37234.         0004h session active
  37235.         BX = session ID
  37236.         CX = session status flags
  37237.             bit 0: set if first activation of session
  37238.             bits 1-15: reserved (0)
  37239.         Return: AX = 0000h
  37240.         0005h create session
  37241.         BX = session ID
  37242.         Return: AX = 0000h if OK to create session
  37243.                = 0001h if not
  37244.         0006h destroy session
  37245.         BX = session ID
  37246.         Return: AX = 0000h
  37247.         0007h switcher termination
  37248.         BX = flags
  37249.             bit 0: set if calling switcher is only switcher loaded
  37250.             bits 1-15: reserved (0)
  37251.         Return: AX = 0000h
  37252.     ES:DI -> task switcher entry point (see AX=4B02h)
  37253. Notes:    function 0000h is generally called by the program which controls or
  37254.       invokes the task switcher, rather than by the task switcher itself;
  37255.       the entry point supplied to this function is not necessarily the
  37256.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  37257.       any client indicates that loading is not possible, all clients will
  37258.       be called with function 0007h; thus it is possible for a client to
  37259.       receive a termination notice without a corresponding initialization
  37260.       notice.
  37261.     except for functions 0002h and 0003h, the notification handler is
  37262.       called with interrupts enabled and may make any INT 21h function
  37263.       call; interrupts must not be enabled in functions 0002h and 0003h
  37264.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  37265.       point is no longer valid
  37266. ----------2F4B02BX0000-----------------------
  37267. INT 2F - DOS v5.0 TASK SWITCHER - INSTALLATION CHECK
  37268.     AX = 4B02h
  37269.     BX = 0000h
  37270.     ES:DI = 0000h:0000h
  37271. Return: ES:DI = 0000h:0000h if task switcher not loaded
  37272.     ES:DI -> task switcher entry point (see below) if loaded
  37273.         AX = 0000h
  37274. Notes:    the returned entry point is that for the most-recently loaded task
  37275.       switcher; the entry points for prior task switchers may be determined
  37276.       with the "get version" call (see below)
  37277.     this function is supported by PC Tools v8+ CPTASK
  37278. SeeAlso: AX=4A05h,AX=4B03h
  37279.  
  37280. Call task switcher entry point with:
  37281.     AX = 0000h get version
  37282.         Return: CF clear if successful
  37283.                 AX = 0000h
  37284.                 ES:BX -> task switcher version struct (see below)
  37285.             CF set if unsupported function
  37286.     AX = 0001h test memory region
  37287.         ES:DI -> first byte to be tested
  37288.         CX = size of region to test
  37289.         Return: CF clear if successful
  37290.                 AX = memory type of tested region
  37291.                 0000h global
  37292.                 0001h global and local
  37293.                 0002h local (replaced on session switch)
  37294.             CF set if unsupported function
  37295.     AX = 0002h suspend switcher
  37296.         ES:DI -> new task switcher's entry point
  37297.         Return: CF clear if successful
  37298.                 AX = state
  37299.                 0000h switcher has been suspended
  37300.                 0001h switcher not suspended, new switcher must
  37301.                     abort
  37302.                 0002h switcher not suspended, but new switcher
  37303.                     may run anyway
  37304.             CF set if unsupported function
  37305.     AX = 0003h resume switcher
  37306.         ES:DI -> new task switcher's entry point
  37307.         Return: CF clear if successful
  37308.                 AX = 0000h
  37309.             CF set if unsupported function
  37310.     AX = 0004h hook notification chain
  37311.         ES:DI -> callback info structure to be added to chain
  37312.             (see AX=4B01h)
  37313.         Return: CF clear if successful
  37314.                 AX = 0000h
  37315.             CF set if unsupported function
  37316.     AX = 0005h unhook notification chain
  37317.         ES:DI -> callback info structure to be removed from chain
  37318.             (see AX=4B01h)
  37319.         Return: CF clear if successful
  37320.                 AX = 0000h
  37321.             CF set if unsupported function
  37322.     AX = 0006h query API support
  37323.         BX = asynchronous API identifier
  37324.         Return: CF clear if successful
  37325.                 AX = 0000h
  37326.                 ES:BX -> API info structure (see below) for the
  37327.                     client which provides the highest
  37328.                     level of 
  37329.             CF set if unsupported function
  37330.  
  37331. Format of task switcher version structure:
  37332. Offset    Size    Description
  37333.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  37334.  02h    WORD    minor version of supported protocol
  37335.  04h    WORD    major version of task switcher
  37336.  06h    WORD    minor version of task switcher
  37337.  08h    WORD    task switcher ID (see AX=4B03h)
  37338.  0Ah    WORD    operation flags
  37339.         bit 0: set if task switcher disabled
  37340.         bits 1-15: reserved (0)
  37341.  0Ch    DWORD    pointer to ASCIZ task switcher name
  37342.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  37343.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  37344.  
  37345. Format of API info structure:
  37346. Offset    Size    Description
  37347.  00h    WORD    size of structure in bytes (000Ah)
  37348.  02h    WORD    API identifier
  37349.         0001h NetBIOS
  37350.         0002h 802.2
  37351.         0003h TCP/IP
  37352.         0004h LAN Manager named pipes
  37353.         0005h Novell NetWare IPX
  37354.  04h    WORD    major version \ of highest version of API for which the support
  37355.  06h    WORD    minor version / level specified in the next field is provided
  37356.  08h    WORD    support level
  37357.         0001h minimal support
  37358.         0002h API-level support
  37359.         0003h switcher compatibility
  37360.         0004h seamless compatibility
  37361. ----------2F4B03-----------------------------
  37362. INT 2F - DOS v5.0 TASK SWITCHER - ALLOCATE SWITCHER ID
  37363.     AX = 4B03h
  37364.     ES:DI -> task switcher entry point (see AX=4B02h)
  37365. Return: AX = 0000h
  37366.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  37367. Notes:    if a task switcher has determined that it is the first to be loaded, it
  37368.       must allocate an identifier for itself and provide this function to
  37369.       all subsequent task switchers; if it is not the first to be loaded,
  37370.       it must call this function to allocate an ID.     The switcher ID is
  37371.       used as the high four bits of all session identifiers to ensure
  37372.       unique session IDs.
  37373.     if no more switcher IDs are available, the new task switcher making the
  37374.       call must terminate or disable itself
  37375.     the task switcher providing the identifiers may call the new task
  37376.       switcher's entry point as needed
  37377.     this call is available from within DOSSHELL even if the task switcher
  37378.       is not installed
  37379.     this function is supported by PC Tools v8+ CPTASK, but appears to
  37380.       always return an ID of 0000h
  37381. SeeAlso: AX=4B02h,AX=4B04h
  37382. ----------2F4B04-----------------------------
  37383. INT 2F - DOS v5.0 TASK SWITCHER - FREE SWITCHER ID
  37384.     AX = 4B04h
  37385.     BX = switcher ID
  37386.     ES:DI -> task switcher entry point (see AX=4B02h)
  37387. Return: AX = 0000h
  37388.     BX = status
  37389.         0000h successful
  37390.         other error (invalid ID or ID not allocated)
  37391. Notes:    called by a task switcher when it exits, unless it was the first loaded
  37392.       and is providing the support for AX=4B03h and AX=4B04h
  37393.     the task switcher providing the identifiers may call the terminating
  37394.       task switcher's entry point as needed
  37395.     this call is available from within DOSSHELL even if the task switcher
  37396.       is not installed
  37397.     this call is supported by PC Tools v8+ CPTASK, but appears to return
  37398.       sucessfully no matter which ID is given
  37399. SeeAlso: AX=4B02h,AX=4B03h
  37400. ----------2F4B05-----------------------------
  37401. INT 2F - DOS v5.0 DOSSHELL TASK SWITCHER - IDENTIFY INSTANCE DATA
  37402.     AX = 4B05h
  37403.     ES:BX = 0000h:0000h
  37404.     CX:DX -> task switcher entry point (see AX=4B02h)
  37405. Return: ES:BX -> startup info structure (see below) or 0000h:0000h
  37406. Notes:    called by task switcher
  37407.     clients with instance data should hook this call, pass it through to
  37408.       the previous handler with unchanged registers using a simulated
  37409.       interrupt.  On return, the client should create a startup info
  37410.       structure (see below), store the returned ES:BX in the "next"
  37411.       field, and return the address of the created structure in ES:BX
  37412.     all MSDOS function calls are available from within this call
  37413. SeeAlso: AX=1605h,AX=160Bh,AX=4B02h
  37414.  
  37415. Format of startup info structure:
  37416. Offset    Size    Description
  37417.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  37418.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  37419.  06h    DWORD    0000h:0000h (ignored)
  37420.  0Ah    DWORD    ignored
  37421.  0Eh    DWORD    pointer to instance data records
  37422.  
  37423. Format of one instance data record in array:
  37424. Offset    Size    Description
  37425.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  37426.  04h    WORD    size of instance data
  37427. ----------2F4E53-----------------------------
  37428. INT 2F U - SilverNET - API
  37429.     AX = 4E53h ("SN")
  37430.     BH = major function class??? (04h and 02h are common)
  37431.     BL = subclass???
  37432.     CX = function number???
  37433.     ???
  37434. Return: AX = return value or status
  37435.     ???
  37436. Program: SilverNET is an SMB-compatible peer-to-peer NOS for DOS or
  37437.       Windows systems, by Net-Source of Santa Clara, CA.
  37438. SeeAlso: AX=B800h,AX=B809h
  37439. ----------2F53-------------------------------
  37440. INT 2F U - ???
  37441.     AH = 53h
  37442.     AL = subfunction (0Bh, maybe others???)
  37443. Return: ???
  37444. Note:    called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+
  37445.       and PC-Cache v8.0
  37446. SeeAlso: AH=54h,INT 33/AX=002Fh
  37447. ----------2F54-------------------------------
  37448. INT 2F U - ???
  37449.     AH = 54h
  37450.     AL = subfunction (00h, 01h, maybe others???)
  37451. Return: ???
  37452. Note:    called by MS Windows 3.1 POWER.DRV
  37453. SeeAlso: AH=53h
  37454. ----------2F5453-----------------------------
  37455. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  37456.     AX = 5453h
  37457.     BX = subfunction
  37458.         00h installation check
  37459.         CX = 0000h
  37460.         DS:SI -> 8-char blank-padded name
  37461.         Return: AX = FFFFh installed
  37462.                 CX = ID number of already-installed copy
  37463.                = anything else, not installed
  37464.                 CX = ID number for TSR when installed
  37465.         01h get user parameters
  37466.         CX = TSR ID number
  37467.         Return: AX = 0000h successful
  37468.                ES:BX -> user parameter block (see below)
  37469.                = nonzero failed
  37470.         02h check if hotkey in use
  37471.         CL = scan code of hot key
  37472.         Return: AX = FFFFh hot key conflicts with another TSR
  37473.                  otherwise safe to use the hotkey
  37474.         03h replace default critical error handler
  37475.         CX = TSR ID number
  37476.         DS:SI -> new routine for INT 24h
  37477.         Return: AX = nonzero, unable to install new handler
  37478.         04h get internal data area
  37479.         CX = TSR ID number
  37480.         Return: AX = 0000h
  37481.                 ES:BX -> TSR's internal data area (see below)
  37482.                = nonzero, TSR not found
  37483.         05h set multiple hot keys
  37484.         CX = TSR ID number
  37485.         DL = number of additional hot keys to allocate
  37486.         DS:SI -> table of hot keys
  37487.             BYTE  hotkey scan code
  37488.             BYTE  hotkey shift state
  37489.             BYTE  flag value to pass to TSR (nonzero)
  37490.         Return: AX = nonzero, unable to install hot keys
  37491.         06h - 0Fh reserved
  37492.         10h enable TSR
  37493.         CX = TSR ID number
  37494.         Return: AX = nonzero, unable to enable
  37495.         11h disable TSR
  37496.         CX = TSR ID number
  37497.         Return: AX = nonzero, unable to disable
  37498.         12h unload TSR
  37499.         CX = TSR ID number
  37500.         Return: AX = nonzero, invalid TSR number
  37501.         Note: if any interrupts used by TSR have been grabbed by
  37502.             another TSR, the TesSeRact routines will wait until
  37503.             it is safe to remove the indicated TSR from memory
  37504.         13h restart TSR
  37505.         CX = TSR ID number of TSR which was unloaded but is still in
  37506.              memory
  37507.         Return: AX = nonzero, unable to restart TSR
  37508.         14h get status word
  37509.         CX = TSR ID number
  37510.         Return: AX = FFFFh invalid ID number
  37511.                = other, successful
  37512.                 BX = bit flags
  37513.         15h set status word
  37514.         CX = TSR ID number
  37515.         DX = new bit flags
  37516.         Return: AX = nonzero, unable to set status word
  37517.         16h get INDOS state at popup
  37518.         CX = TSR ID number
  37519.         Return: AX = 0000h successful
  37520.                 BX = value of INDOS flag
  37521.         17h - 1Fh reserved
  37522.         20h call user procedure
  37523.         CX = TSR ID number
  37524.         ES:DI -> user-defined data
  37525.         Return: AX = 0000h successful
  37526.         21h stuff keystrokes into keyboard buffer
  37527.         CX = TSR ID number
  37528.         DL = speed
  37529.             00h stuff keystrokes only when buffer is empty
  37530.             01h stuff up to four keystrokes per clock tick
  37531.             02h stuff up to 15 keystrokes per clock tick
  37532.         DH = scan code flag
  37533.             if zero, buffer contains alternating ASCII and scan codes
  37534.             if nonzero, buffer contains only ASCII codes
  37535.         SI = number of keystrokes
  37536.         ES:DI -> buffer to stuff
  37537.         Return: AX = 0000h success
  37538.                  F0F0h user aborted with ^C or ^Break
  37539.                  other unable to stuff keystrokes
  37540.         22h (v1.10) trigger popup
  37541.         CX = TSR ID number
  37542.         Return: AX = 0000h success, TSR will either pop up or beep to
  37543.                    indicate that it is unable to pop up
  37544.                  nonzero invalid ID number
  37545.         23h (v1.10) invoke TSR's background function
  37546.         CX = TSR ID number
  37547.         Return: AX = 0000h success
  37548.                  FFFFh not safe to call background function
  37549.                  nonzero invalid ID number
  37550.         24h - 2Fh reserved
  37551. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  37552.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  37553.       do the SWAP?? programs by Innovative Data Concepts.
  37554.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  37555.       of the user parameter block) using the name "AVATAR  "
  37556. SeeAlso: AX=CAFEh
  37557.  
  37558. Format of User Parameter Block:
  37559. Offset    Size    Description
  37560.  00h  8 BYTEs    blank-padded TSR name
  37561.  08h    WORD    TSR ID number
  37562.  0Ah    DWORD    bitmap of supported functions
  37563.  0Eh    BYTE    scan code of primary hotkey
  37564.             00h = pop up when shift states match
  37565.             FFh = no popup (if shift state also FFh)
  37566.  0Fh    BYTE    shift state of primary hotkey
  37567.             FFh = no popup (if scan code also FFh)
  37568.  10h    BYTE    number of secondary hotkeys
  37569.  11h    DWORD    pointer to extra hotkeys set by func 05h
  37570.  15h    WORD    current TSR status flags
  37571.  17h    WORD    PSP segment of TSR
  37572.  19h    DWORD    DTA for TSR
  37573.  1Dh    WORD    default DS for TSR
  37574.  1Fh    DWORD    stack at popup
  37575.  23h    DWORD    stack at background invocation
  37576.  
  37577. Format of TSR internal data area:
  37578. Offset    Size    Description
  37579.  00h    BYTE    revision level of TesSeRact library
  37580.  01h    BYTE    type of popup in effect
  37581.  02h    BYTE    INT 08 occurred since last invocation
  37582.  03h    BYTE    INT 13 occurred since last invocation
  37583.  04h    BYTE    active interrupts
  37584.  05h    BYTE    active soft interrupts
  37585.  06h    BYTE    DOS major version
  37586.  07h    BYTE    how long to wait before popping up
  37587.  08h    DWORD    pointer to INDOS flag
  37588.  0CH    DWORD    pointer to DOS critical error flag
  37589.  10h    WORD    PSP segment of interrupted program
  37590.  12h    WORD    PSP segment of prog interrupted by INT 28
  37591.  14h    DWORD    DTA of interrupted program
  37592.  18h    DWORD    DTA of program interrupted by INT 28
  37593.  1Ch    WORD    SS of interrupted program
  37594.  1Eh    WORD    SP of interrupted program
  37595.  20h    WORD    SS of program interrupted by INT 28
  37596.  22h    WORD    SP of program interrupted by INT 28
  37597.  24h    DWORD    INT 24 of interrupted program
  37598.  28h  3 WORDs    DOS 3+ extended error info
  37599.  2Eh    BYTE    old BREAK setting
  37600.  2Fh    BYTE    old VERIFY setting
  37601.  30h    BYTE    were running MS WORD 4.0 before popup
  37602.  31h    BYTE    MS WORD 4.0 special popup flag
  37603.  32h    BYTE    enhanced keyboard call in use
  37604.  33h    BYTE    delay for MS WORD 4.0
  37605. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  37606.     DWORD    old interrupt vector
  37607.     BYTE    interrupt number
  37608.     WORD    offset in TesSeRact code segment of new interrupt handler
  37609. ----------2F5500-----------------------------
  37610. INT 2F U - DOS v5.0 - COMMAND.COM INTERFACE
  37611.     AX = 5500h
  37612. Return: AX = 0000h
  37613.     DS:SI -> entry point table
  37614. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  37615.       been moved into the HMA; only the primary COMMAND.COM retains this
  37616.       portion
  37617.     procedures called from a dispatcher in COMMAND's resident portion;
  37618.       most assume that the segment address of the resident portion is on
  37619.       the stack and are thus not of general use
  37620. ----------2F6282-----------------------------
  37621. INT 2F U - PC Tools v7.0+ VDEFEND, VSAFE, VWATCH, DATAMON - SET ??? ADDRESS
  37622.     AX = 6282h
  37623.     CX:DX -> ??? or 0000h:0000h
  37624.     DI = 0000h ???
  37625.          FFFFh ???
  37626.          other segment of ???
  37627. Return: BX = 0062h
  37628. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  37629.       (DATAMON only)
  37630. SeeAlso: INT 13/AH=FAh"VSAFE",INT 21/AH=FAh"VDEFEND"
  37631. ----------2F6284BX0000-----------------------
  37632. INT 2F U - PC Tools v7.0+ DATAMON - INSTALLATION CHECK
  37633.     AX = 6284h
  37634.     BX = 0000h
  37635.     CX = 0000h
  37636. Return: AX = segment of resident code
  37637.     BX = 5555h
  37638.     CX = 5555h
  37639. ----------2F6284BX0001-----------------------
  37640. INT 2F U - PC Tools v7.0+ DATAMON - GET ???
  37641.     AX = 6284h
  37642.     BX = 0001h
  37643.     CX = 0001h
  37644. Return: AX:BX -> ???
  37645.     CX = BX
  37646. ----------2F6284BX0002-----------------------
  37647. INT 2F U - PC Tools v7.0+ DATAMON - GET ???
  37648.     AX = 6284h
  37649.     BX = 0002h
  37650.     CX = 0002h
  37651. Return: AX = ???
  37652.     BX = ???
  37653.     CX = AX
  37654.     DX = BX
  37655. ----------2F6284BX0003-----------------------
  37656. INT 2F U - PC Tools v7.0+ DATAMON - SET ??? FLAGS
  37657.     AX = 6284h
  37658.     BX = 0003h
  37659.     CX = flags
  37660.         bit 12: ???
  37661.         10: ???
  37662.          5: ???
  37663.          3: ???
  37664.     DX = flags
  37665.         bit 15: ???
  37666. ----------2F6284BX0004-----------------------
  37667. INT 2F U - PC Tools v8.0+ DATAMON - ???
  37668.     AX = 6284h
  37669.     BX = 0004h
  37670.     CX = 0004h
  37671. Return: AX = 5555h
  37672.     BX = ??? (0800h)
  37673.     CX = ??? (FCCCh)
  37674. ----------2F6400-----------------------------
  37675. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  37676.     AX = 6400h
  37677. Return: AL = 00h not installed
  37678.          FFh installed
  37679. Note:    SCRNSAV2.COM is a screen saver for PS/2's with VGA by Alan Ballard
  37680. SeeAlso: INT 10/AX=5555h
  37681. ----------2F7000------------------------------
  37682. INT 2F - License Service API - INSTALLATION CHECK
  37683.     AX = 7000h
  37684.     CX = license server index (0000h to 001Fh)
  37685. Return: AL = status
  37686.         00h not installed
  37687.         FFh installed
  37688. Notes:    The License Service API is being maintained by Microsoft but is being
  37689.       supported by a large number of companies including Apple, Banyan,
  37690.       DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association,
  37691.       and Wordperfect (not a complete list!)
  37692.     Each license service provider must search for the next free index
  37693.       slot to use
  37694. SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h
  37695. ----------2F7001------------------------------
  37696. INT 2F - License Service API - REQUEST License
  37697.     AX = 7001h
  37698.     CX = license server index (0000h to 001Fh)
  37699.     DS:DX -> SLSREQEUST structure (see below)
  37700. Return: AX = status
  37701.         0000h success
  37702.         else  provider error code
  37703.     ES:BX = provider specific handle for the license context
  37704. SeeAlso: AX=7002h,AX=7004h,AX=7005h
  37705.  
  37706. Format of SLSREQUEST structure:
  37707. Offset    Size    Description
  37708.  00h    DWORD    (return) status code
  37709.  04h    DWORD    (return) handle identifying context
  37710.  08h    DWORD    (call) address of Publisher string
  37711.  0Ch    DWORD    (call) address of Product string
  37712.  10h    DWORD    (call) address of Version string
  37713.  14h    DWORD    units required
  37714.  18h    DWORD    address of comment string
  37715.  1Ch    DWORD    address of SLSCHALLENGE structure (see below)
  37716.  
  37717. Format of SLSCHALLENGE structure:
  37718. Offset    Size    Description
  37719.  00h    DWORD    algorithm (currently always 1)
  37720.  04h    DWORD    secret to be challenged (1-255)
  37721.  08h    DWORD    size of challenge in bytes (1-255)
  37722.  0Ch  N BYTEs    challenge data
  37723. ----------2F7002------------------------------
  37724. INT 2F - License Service API - RELEASE License
  37725.     AX = 7002h
  37726.     CX = license server index (0000h to 001Fh)
  37727.     DS:DX -> SLSRELEASE structure (see below)
  37728.     ES:BX = provider specific handle for the license context
  37729. Return: AL = status
  37730.         00h not installed
  37731.         FFh installed
  37732. SeeAlso: AX=7001h,AX=7005h
  37733.  
  37734. Format of SLSRELEASE structure:
  37735. Offset    Size    Description
  37736.  00h    DWORD    handle indentifying license context
  37737.  04h    DWORD    total units consumed
  37738.  08h    DWORD    address of comment string
  37739. ----------2F7003------------------------------
  37740. INT 2F - License Service API - UPDATE
  37741.     AX = 7003h
  37742.     CX = license server index (0000h to 001Fh)
  37743.     DS:DX -> SLSUPDATE structure
  37744.     ES:BX = provider specific handle for the license context
  37745. Return: AL = status
  37746.         00h not installed
  37747.         FFh installed
  37748. SeeAlso: AX=7004h,AX=7005h
  37749.  
  37750. Format of SLSUPDATE structure:
  37751. Offset    Size    Description
  37752.  00h    DWORD    (return) status code
  37753.  04h    DWORD    (call) handle identifying license context
  37754.  08h    DWORD    (call) total units consumed
  37755.  0Ch    DWORD    additional units required
  37756.  10h    DWORD    address of comment string
  37757.  14h    DWORD    address of SLSCHALLENGE structure (see AX=7001h)
  37758. ----------2F7004------------------------------
  37759. INT 2F - License Service API - GET ERROR
  37760.     AX = 7004h
  37761.     CX = license server index (0000h to 001Fh)
  37762.     DS:DX -> SLSGETERROR structure (see below)
  37763.     ES:BX = provider specific handle for the license context
  37764. Return: AL = status
  37765.         00h not installed
  37766.         FFh installed
  37767. SeeAlso: AX=7000h,AX=7001h
  37768.  
  37769. Format of SLSGETERROR structure:
  37770. Offset    Size    Description
  37771.  00h    DWORD    (return) status code
  37772.  04h    DWORD    handle identifying license context
  37773.  08h    DWORD    error code
  37774.  0Ch    DWORD    buffer size in bytes
  37775.  10h  N BYTEs    data buffer
  37776. ----------2F7005------------------------------
  37777. INT 2F - License Service API - QUERY License
  37778.     AX = 7005h
  37779.     CX = license server index (0000h to 001Fh)
  37780.     DS:DX -> SLSQUERY structure (see below)
  37781.     ES:BX = provider specific handle for the license context
  37782. Return: AL = status
  37783.         00h not installed
  37784.         FFh installed
  37785. SeeAlso: AX=7001h,AX=7002h
  37786.  
  37787. Format of SLSQUERY structure:
  37788. Offset    Size    Description
  37789.  00h    DWORD    (return) status code
  37790.  04h    DWORD    handle identifying license context
  37791.  08h    DWORD    information index
  37792.  0Ch    DWORD    buffer size in bytes
  37793.  10h  N BYTEs    data buffer
  37794. ----------2F7200-----------------------------
  37795. INT 2F - SRDISK v1.30 - INSTALLATION CHECK
  37796.     AX = 7200h
  37797. Return: AL = FFh if installed
  37798.         ES = segment of device driver header (see below)
  37799. Note:    SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  37800.  
  37801. Format of device driver header:
  37802. Offset    Size    Description
  37803.  00h 10 BYTEs    same as standard device driver header (see INT 21/AH=52h)
  37804.  0Ah    BYTE    number of subunits (drives) supported by driver
  37805.  0Bh  3 BYTEs    signature "SRD"
  37806.  0Eh  4 BYTEs    memory type string (currently only "XMS ")
  37807.  12h  4 BYTEs    ASCII driver version string "N.NN"
  37808.  16h    BYTE    00h
  37809.  17h    BYTE    configuration format version (currently 00h)
  37810.  18h    WORD    offset of drive configuration data
  37811. ----------2F7A00-----------------------------
  37812. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  37813.     AX = 7A00h
  37814. Return: AL = 00h not installed
  37815.        = FFh installed
  37816.         ES:DI -> FAR entry point for routines accessed exclusively
  37817.             through INT 7A in NetWare versions through 2.0a.  Call
  37818.             with same values as INT 7A
  37819. SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"Novell"
  37820. ----------2F7A10-----------------------------
  37821. INT 2F - Novell NetWare - TBMI v2.0 - GET TBMI STATUS
  37822.     AX = 7A10h
  37823. Return: DH = major TBMI version number
  37824.     DL = minor TBMI version number
  37825.     CX = segment address of TBMI resident part
  37826.     BX = status word of TBMI
  37827.         bit 0: INT2F intercepted by TBMI
  37828.         bit 1: INT7A intercepted by TBMI
  37829.         bit 2: INT64 intercepted by TBMI
  37830.         bits 3-14: reserved or unused ???
  37831.         bit 15: outstanding task ID was detected
  37832. Note:    TBMI is the Task-Switched Buffer Manager Interface
  37833. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  37834. ----------2F7A11-----------------------------
  37835. INT 2F - Novell NetWare - TBMI v2.0 - GET INT2F HANDLERS
  37836.     AX = 7A11h
  37837. Return: ES:BX -> old INT 2F handler
  37838.     DS:DX -> TBMI INT 2F handler
  37839. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h
  37840. ----------2F7A12-----------------------------
  37841. INT 2F - Novell NetWare - TBMI v2.0 - GET INT64 HANDLERS
  37842.     AX = 7A12h
  37843. Return: ES:BX -> old INT 64 handler
  37844.     DS:DX -> TBMI INT 64 handler
  37845. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  37846. ----------2F7A13-----------------------------
  37847. INT 2F - Novell NetWare - TBMI v2.0 - GET INT7A HANDLERS
  37848.     AX = 7A13h
  37849. Return: ES:BX = old INT 7A handler
  37850.     DS:DX = TBMI INT 7A handler
  37851. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  37852. ----------2F7A14-----------------------------
  37853. INT 2F - Novell NetWare - TBMI v2.0 - GET STATISTICS
  37854.     AX = 7A14h
  37855.     CX = statistic to retrieve
  37856.         0000h available diagnostic functions???
  37857.         Return: CX = maximum available function??? (000Ch for v2.0)
  37858.         0001h buffers in use
  37859.         Return: CX = TBMI buffers currently in use
  37860.         0002h maximum buffers used
  37861.         Return: CX = maximum number of buffers ever in use
  37862.         0003h unavailable buffers
  37863.         Return: CX = count of unavailable TBMI buffers
  37864.         0004h old interrupt usage
  37865.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  37866.                 INT 64, and INT 7A
  37867.         0005h far call usage
  37868.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  37869.                 including internal accesses)
  37870.         0006h task buffering
  37871.         Return: CX = TBMI task buffering status (enabled/disabled or
  37872.                 disable/enable switch count???)
  37873.         0007h current task ID
  37874.         Return: CX = TBMI current task ID number (0000h if ???)
  37875.         0008h outstanding ID count
  37876.         Return: CX = number of outstanding TBMI IDs
  37877.         0009h configured ECBs
  37878.         Return: CX = number of TBMI Event Control Blocks configured
  37879.         000Ah configured data ECBs
  37880.         Return: CX = number of TBMI data ECBs configured
  37881.         000Bh configured sockets
  37882.         Return: CX = number of TBMI sockets configured (from NETCFG)
  37883.         000Ch current sockets
  37884.         Return: CX = number of TBMI sockets currently in use
  37885. SeeAlso: AX=7A10h
  37886. ----------2F7A1B-----------------------------
  37887. INT 2F - Novell NetWare - TBMI v2.0 - RESERVED???
  37888.     AX = 7A1Bh
  37889. Note:    this call merely performs an IRET
  37890. ----------2F7A20-----------------------------
  37891. INT 2F - Novell NetWare - NetWare 4.0 DOS Requester - GET CALL ADDRESS
  37892.     AX = 7A20h
  37893.     BX = 0000h
  37894. Return: AX = 0000h on success
  37895.         ES:BX -> far call address for DOS Requester
  37896. Note:    the DOS Requester replaces the NetWare Shell (ANETx, NETx) on
  37897.       NetWare LAN's as of the release of NetWare 4.0.  It is backward
  37898.       compatible with NetWare 2.1x through 3.11 servers as well.
  37899. ----------2F7A80-----------------------------
  37900. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - ABNORMAL EXIT
  37901.     AX = 7A80h
  37902. Return: nothing
  37903. Notes:    called on abnormal exit of the NetWare shell to notify other Novell
  37904.       TSRs that it is unsafe to call the shell in the future.
  37905.     must be passed through so that all interested programs see the exit
  37906.     on receiving this call, IPXODI clears an internal pointer to a
  37907.       default value; Novell's NETBIOS.EXE clears its INT 21h pointer to
  37908.       0000h:0000h and stops calling it
  37909. SeeAlso: AX=7A81h
  37910. ----------2F7A81-----------------------------
  37911. INT 2F - Novell NetWare - SHELL 3.01d BROADCAST - SET SHELL INT 21 HANDLER
  37912.     AX = 7A81h
  37913.     CX:DX -> shell's INT 21h entry point
  37914. Return: nothing
  37915. Notes:    the shell calls this function as it loads to allow interested TSRs
  37916.       and drivers to make a local copy of the shell's entry point
  37917.     must be passed through so that all interested programs see it
  37918. ----------2F7A85-----------------------------
  37919. INT 2F - Novell NetWare - shell 3.01 - BROADCAST INFORM
  37920.     AX = 7A85h
  37921.     CX = broadcast server number
  37922. Return: CX = 0000h if broadcast message handled by another program
  37923.     CX unchanged if broadcast not handled
  37924. ----------2F7A90-----------------------------
  37925. INT 2F U - Novell NetWare - NETBIOS.EXE 3+ - INSTALLATION CHECK
  37926.     AX = 7A90h
  37927. Return: AL = 00h if present
  37928.         BX = ???
  37929.         CX = PSP segment of NETBIOS resident code
  37930. SeeAlso: AX=7AFEh
  37931. ----------2F7AFE-----------------------------
  37932. INT 2F - Novell NetWare - DOSNP.EXE - INSTALLATION CHECK
  37933.     AX = 7AFEh
  37934. Return: AL = FFh if present
  37935.         ES = (data???) segment of DOSNP
  37936. Program: DOSNP.EXE provides "named pipes" support for DOS workstations running
  37937.        NetWare
  37938. Note:    the NetWare shell calls this function and refuses to load if DOSNP is
  37939.       present
  37940. SeeAlso: AX=7A90h
  37941. ----------2F7AFFBX0000-----------------------
  37942. INT 2F - Novell NetWare - TBMI v2.0 - INSTALLATION CHECK???
  37943.     AX = 7AFFh
  37944.     BX = 0000h
  37945.     CX = 4E65h ("Ne")
  37946.     DX = 7457h ("tW")
  37947.     ES:DI -> IPX/SPX special handler (XMS/EMS ???)
  37948. Return: AL = FFh if installed
  37949.         CX = configured sockets (14h)
  37950.         DS:SI -> data table ???
  37951.         ES:DI -> IPX far call handler
  37952. Note:    for IPX/SPX this call reportedly returns DS:DI pointing to the table
  37953.       of pointers to service events queue head and tail
  37954. SeeAlso: AX=7AFFh/BX=0001h
  37955. ----------2F7AFFBX0001-----------------------
  37956. INT 2F - Novell NetWare - TBMI v2.0, shell v3.01d - INSTALLATION CHECK???
  37957.     AX = 7AFFh
  37958.     BX = 0001h
  37959.     CX = 4E65h ("Ne")
  37960.     DX = 7457h ("tW")
  37961. Return: AL = FFh if installed
  37962.         CX = ???  (8000h)
  37963.         SI = ??? (or -> ???) (0002h)
  37964.         ES:DI -> IPX far call handler
  37965.         ES:DX -> 6-byte data area ???
  37966. SeeAlso: AX=7AFFh/BX=0000h
  37967. ----------2F7F24-----------------------------
  37968. INT 2F - Multiplex - ???
  37969.     AX = 7F24h
  37970.     ???
  37971. Return: ???
  37972. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  37973. ----------2F7F26-----------------------------
  37974. INT 2F - Multiplex - ???
  37975.     AX = 7F26h
  37976.     ???
  37977. Return: ???
  37978. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  37979. ----------2F8000-----------------------------
  37980. INT 2F - EASY-NET - INSTALLATION CHECK
  37981.     AX = 8000h
  37982. Return: AL = 00h not installed
  37983.          FFh installed
  37984. Note:    EASY-NET is a shareware two-machine serial-port network
  37985. ----------2F8000-----------------------------
  37986. INT 2F - Nanosoft, Inc. TurboNET server - INSTALLATION CHECK
  37987.     AX = 8000h
  37988. Return: AL = FFh if installed
  37989.         BX = CS of resident code
  37990.         CX = ??? (03FCh)
  37991. Note:    TurboNET is a NetBIOS-based file redirector and server; a demonstration
  37992.       version may be downloaded from Nanosoft's BBS
  37993. SeeAlso: AX=8100h
  37994. ----------2F8000DX0000-----------------------
  37995. INT 2F - FaxBIOS interface - INSTALLATION CHECK
  37996.     AX = 8000h
  37997.     DX = 0000h
  37998.     DI = 0000h
  37999. Return: AL = FFh if installed
  38000.     DX:DI -> signature "FaxBiosjpc"
  38001. Note:    FaxBIOS may use any multiplex number from 80h through FFh; to determine
  38002.       whether it is installed, it is necessary to poll all multiplex
  38003.       numbers for one which returns the above signature
  38004. SeeAlso: AH=2Ah,AX=80FBh
  38005. ----------2F8001-----------------------------
  38006. INT 2F - Nanosoft, Inc. TurboNET server - ???
  38007.     AX = 8001h
  38008.     DS:SI -> 16-byte buffer for ???
  38009. Return: AH = status
  38010.         00h successful
  38011.         01h error
  38012. Note:    makes NetBIOS calls
  38013. ----------2F80FB-----------------------------
  38014. INT 2F - FaxBIOS interface - COMMAND SUBMISSION
  38015.     AX = 80FBh
  38016.     BX = function number (see below)
  38017.     DX:DI -> command buffer (see below)
  38018. Return: AL = FFh if submitted OK
  38019.     CX = result code (see below)
  38020. Note:    FaxBIOS may use any multiplex number from 80h through FFh
  38021. SeeAlso: AX=8000h"FaxBIOS",AX=CBDDh
  38022.  
  38023. Values for function number:
  38024.  0001h    SYS_LOGIN
  38025.  0002h    SYS_LOGOUT
  38026.  0003h    SYS_GET_FAXAPP_INFO
  38027.  0004h    STAT_IO_GET
  38028.  0005h    STAT_FAXBIOS_GET
  38029.  0006h    PDIR_OPEN
  38030.  0007h    PDIR_CLOSE
  38031.  0008h    PDIR_READ_PERSON
  38032.  0009h    PDIR_PARTIAL_READ
  38033.  000Ah    PDIR_READ_GROUP
  38034.  000Bh    PDIR_READ_MEMBER_LIST
  38035.  000Ch    PDIR_WRITE_PERSON
  38036.  000Dh    PDIR_WRITE_GROUP
  38037.  000Eh    PDIR_DELETE_PERSON
  38038.  000Fh    PDIR_DELETE_GROUP
  38039.  0010h    PDIR_READ_GROUP_LIST
  38040.  0011h    PDIR_IN_GROUP
  38041.  0012h    PDIR_OUT_GROUP
  38042.  0013h    SCHED_OPEN
  38043.  0014h    SCHED_ADD_DEST
  38044.  0015h    SCHED_ADD_FILE
  38045.  0016h    SCHED_SET_PARAMS
  38046.  0017h    SCHED_CANCEL
  38047.  0018h    SCHED_CLOSE
  38048.  0019h    SLOG_OPEN
  38049.  001Ah    SLOG_CLOSE
  38050.  001Bh    SLOG_SHORT_ENV_STAT
  38051.  001Ch    SLOG_LONG_ENV_STAT
  38052.  001Dh    SLOG_DEST_STAT
  38053.  001Eh    SLOG_FILE_STAT
  38054.  001Fh    SLOG_CANCEL_ENV
  38055.  0020h    RLOG_OPEN
  38056.  0021h    RLOG_CLOSE
  38057.  0022h    RLOG_READ
  38058.  0023h    GRAPH_GET_FILE_TYPE
  38059.  0024h    GRAPH_EXPORT_FILE
  38060.  0025h    GRAPH_GET_LAYOUT_INFO
  38061.  0026h    GRAPH_CREATE_FILE
  38062.  0027h    GRAPH_CLOSE_FILE
  38063.  0028h    GRAPH_CREATE_PAGE
  38064.  0029h    GRAPH_WRITE
  38065.  002Ah    GRAPH_END_PAGE
  38066.  002Bh    GRAPH_OPEN_FILE
  38067.  002Ch    GRAPH_GOTO_PAGE
  38068.  002Dh    GRAPH_READ
  38069.  002Eh    IOCTL_GET
  38070.  002Fh    IOCTL_SET
  38071.  0030h    IOCTL_ANSWER_FAX
  38072.  0031h    IOCTL_DIAL
  38073.  
  38074. Values for result code:
  38075.  0000h    successful
  38076.  0001h    not prepared or servicing another client (busy)
  38077.  0002h    call failed due to sharing (LOCKED)
  38078.  0003h    logged-in client limit reached (FULL)
  38079.  0004h    transport denied (TRANSPORT_DENIED)
  38080.  0005h    not implemented (NOT_IMPLEMENTED)
  38081.  0006h    aborted while in progress (ABORTED)
  38082.  0007h    permissions denied (PERMISSION_DENIED)
  38083.  0008h    requested data is no longer valid (NO_LONGER_VALID)
  38084.  0080h    unspecified system error occurred
  38085.  0081h    an internal file was not found
  38086.  0082h    an internal file could not be created
  38087.  0083h    an internal file could not be opened
  38088.  0084h    an internal file could not be closed
  38089.  0085h    error occurred writing to an internal file
  38090.  0086h    error occurred reading from an internal file
  38091.  0087h    bad or corrupted file encountered
  38092.  0088h    an access violation occurred
  38093.  0089h    an internal file is empty
  38094.  008Ah    insufficient memory to process request
  38095.  008Bh    FaxBIOS was unable to issue a handle
  38096.  008Ch    an error internal to FaxBIOS occurred
  38097.  008Dh    no room on disk
  38098.  0100h    unspecified error accessing client file
  38099.  0101h    file not found
  38100.  0102h    creation fault
  38101.  0103h    open fault
  38102.  0104h    close fault
  38103.  0105h    write fault
  38104.  0106h    read fault
  38105.  0107h    file corrupted
  38106.  0108h    access violation
  38107.  0109h    empty file
  38108.  0200h    unspecified argument error
  38109.  0201h    bad function
  38110.  0202h    bad option
  38111.  0203h    bad structure size
  38112.  0204h    bad buffer size
  38113.  0205h    bad client ID
  38114.  0300h    unspecified error with token
  38115.  0301h    cover sheet token was invalid
  38116.  0302h    logo token was invalid
  38117.  0303h    signature token was invalid
  38118.  0304h    font token was invalid
  38119.  0305h    phone directory token was invalid
  38120.  0306h    outbound route token was invalid
  38121.  0307h    priority token was invalid
  38122.  0308h    sort token was invalid
  38123.  0309h    billing token was invalid
  38124.  0400h    unspecified handle error
  38125.  0401h    bad Phone Directory handle
  38126.  0402h    bad scheduling handle
  38127.  0403h    bad read send log handle
  38128.  0404h    bad read receive log handle
  38129.  0405h    bad graphics handle
  38130.  0500h    data passed in structure was invalid
  38131.  0501h    name field given is invalid
  38132.  0502h    phone number given is invalid
  38133.  0503h    poll code submitted is invalid
  38134.  0504h    file type constant was invalid
  38135.  0505h    BFT constant not defined or supported
  38136.  0506h    resolution not defined or supported
  38137.  0507h    page length not defined or supported
  38138.  0508h    page width not defined or supported
  38139.  0509h    date & time requested are ridiculous
  38140.  050Ah    Subject text was not an ASCIIZ string
  38141.  050Bh    From text was not an ASCIIZ string
  38142.  050Ch    requested envelope ID was not found
  38143.  050Dh    requested envelope ID is not valid
  38144.  050Eh    envelope requested was not found
  38145.  050Fh    destination index is out of range
  38146.  0510h    file index is out of range
  38147.  0511h    index into receive log is out of range
  38148.  0512h    file name specified was incomplete or invalid
  38149.  0513h    page selected was out of range
  38150.  0514h    bit width more than byte width 
  38151.  0515h    mode for open is not defined
  38152.  0516h    person index is out of range
  38153.  0517h    person ID is out of range
  38154.  0518h    group index out of range or invalid
  38155.  0519h    group ID out of range or invalid
  38156.  051Ah    range of indices to read is invalid
  38157.  051Bh    group name given is invalid
  38158.  051Ch    field_to_use is badly specified
  38159.  051Dh    predicate invalid for field specified
  38160.  0600h    unspecified client procedure error
  38161.  0601h    device of interest is not present
  38162.  0602h    device of interest has been removed
  38163.  0603h    device of interest is not responding
  38164.  0604h    device of interest is disabled
  38165.  0605h    could not dial because device was in use
  38166.  0606h    maximum destination limit exceeded
  38167.  0607h    maximum file limit exceeded
  38168.  0608h    scheduling closed with no destination
  38169.  0609h    scheduling closed with no files or poll
  38170.  060Ah    scheduling closed with no parameters specified
  38171.  060Bh    file type specified does not match file
  38172.  060Ch    file type specified is not supported
  38173.  060Dh    file submitted is not exportable
  38174.  060Eh    file type specified is not imageable
  38175.  060Fh    error converting file
  38176.  0610h    envelope could not be cancelled
  38177.  0611h    Phone Directory is full
  38178.  0612h    record is already in the Phone Directory
  38179.  0613h    selected group in Phone Directory is full
  38180.  0614h    person is already in the group
  38181.  0615h    person is not in the group & cannot be removed
  38182.  0616h    a graphics file to be created already exists
  38183.  0617h    a grphics file to be read is empty
  38184.  0618h    GRAPH_CREATE_PAGE called before GRAPH_END_PAGE
  38185.  0619h    graph read or write attempted without goto or create
  38186.  061Ah    graph page contains no data
  38187.  061Bh    Phone Directory is already open for this client
  38188.  061Ch    schedule log is already open for this client
  38189.  061Dh    receive log is aready open for this client
  38190.  061Eh    Phone Directory function requires write mode
  38191.  0800h    denied exclusive use of the API
  38192.  
  38193. Format of SYS_LOGIN command buffer:
  38194. Offset    Size    Description
  38195.  00h    WORD    structure size
  38196.  02h    WORD    function number
  38197.  04h    WORD    return code
  38198.  06h    WORD    client ID
  38199.  08h    WORD    API Major Version
  38200.  0Ah    WORD    API Minor Version
  38201.  0Ch    DWORD    reserved for manufacturer's use
  38202.  10h 22 BYTEs    manufacturer's ID
  38203.  26h    WORD    highest possible device number
  38204.  28h    WORD    maximum destinations per envelope
  38205.  2Ah    WORD    maximum files per envelope
  38206.  2Ch    WORD    FaxBIOS capabilities bitmap
  38207.         bit 0: transmit supported
  38208.         bit 1: receive supported
  38209.         bit 2: IOCTL supported
  38210.         bit 3: IOCTL_DIAL supported
  38211.         bit 4: IOCTL_ANSWER_FAX supported
  38212.         bit 5: manual transmit supported
  38213.         bit 6: optional phone services supported
  38214.         bit 7: canonical phone objects
  38215.         bit 8: seam with next supported
  38216.  2Eh    DWORD    T.30 capabilities bitmap
  38217.         bit 0:    low vertical resolution (minimum)
  38218.         bit 1:    high vertical resolution
  38219.         bit 2:    page width 107mm (4.21 in)
  38220.         bit 3:    page width 151mm (5.91 in)
  38221.         bit 4:    page width 215mm (8.46 in) (minimum)
  38222.         bit 5:    page width 255mm (10.04 in)
  38223.         bit 6:    page width 303mm (11.93 in)
  38224.         bit 7:    unused
  38225.         bit 8:    page length 297mm (11.69 in) (minimum)
  38226.         bit 9:    page length 364mm (14.33 in)
  38227.         bit 10: page length 279mm (11 in)
  38228.         bit 11: page length unlimited
  38229.         bit 12: Group 4 resolution 300x300
  38230.         bit 13: Group 4 resolution 400x400
  38231.         bit 14: able to respond to poll from remote
  38232.         bit 15: able to poll remote
  38233.         bit 16: binary file transfer supported
  38234.  32h    WORD    IPC handle
  38235.  34h    DWORD    amount of memory needed to load
  38236.  38h    WORD    scope (00h for public, nonzero for private)
  38237.  3Ah  6 BYTEs    future expansion
  38238.  40h    WORD    structure size
  38239.  
  38240. Format of SYS_LOGOUT command buffer:
  38241. Offset    Size    Description
  38242.  00h    WORD    structure size
  38243.  02h    WORD    function number
  38244.  04h    WORD    return code
  38245.  06h    WORD    client ID
  38246.  08h    DWORD    client tag (for client's internal use)
  38247.  0Ch  6 BYTEs    future expansion
  38248.  12h    WORD    structure size
  38249.  
  38250. Format of SYS_GET_FAXAPP_INFO command buffer:
  38251. Offset    Size    Description
  38252.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38253.  0Ch 80 BYTEs    FaxBIOS data
  38254.  5Ch 80 BYTEs    default cover
  38255.  ACh 80 BYTEs    default logo
  38256.  FCh 80 BYTEs    default signature
  38257. 14Ch 80 BYTEs    default font 10
  38258. 19Ch 80 BYTEs    default font 165
  38259. 1ECh 80 BYTEs    default user font
  38260. 23Ch 80 BYTEs    default Pdir
  38261. 28Ch 80 BYTEs    default sort
  38262. 2DCh 10 BYTEs    default bill
  38263. 2E6h 10 BYTEs    default route
  38264. 2F0h 40 BYTEs    default cover sheet form
  38265. 318h 34 BYTEs    valid dial characters
  38266. 33Ah  6 BYTEs    local country code
  38267. 340h  6 BYTEs    local city or area code
  38268. 346h  6 BYTEs    future expansion
  38269. 34Ch    WORD    structure size
  38270.  
  38271. Format of STAT_IO_GET command buffer:
  38272. Offset    Size    Description
  38273.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38274.  0Ch    WORD    device number
  38275.  0Eh    WORD    current activity
  38276.  10h    WORD    number of rings (if ringing)
  38277.  12h    WORD    number of fascimiles transmitted
  38278.  14h    WORD    number of fascimiles received
  38279.  16h    WORD    status of last transmission
  38280.  18h    WORD    envelope number of last transmission
  38281.  1Ah    WORD    index of last destination in envelope
  38282.  1Ch    WORD    status of last reception
  38283.  1Eh    WORD    current page (if session in progress)
  38284.  20h 80 BYTEs    current file
  38285.  70h104 BYTEs    remote number
  38286.  D8h 20 BYTEs    last name
  38287.  ECh 20 BYTEs    first name
  38288. 100h 32 BYTEs    company name
  38289. 120h 32 BYTEs    notes
  38290. 140h    WORD    current envelope ID (if sending)
  38291. 142h    WORD    total pages in transmission (if sending)
  38292. 144h  6 BYTEs    future expansion
  38293. 14h    WORD    structure size
  38294.  
  38295. Format of STAT_FAXBIOS_GET command buffer:
  38296. Offset    Size    Description
  38297.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38298.  0Ch    WORD    status ID
  38299.  0Eh    WORD    currenty FaxBIOS function number
  38300.  10h    WORD    current Client ID being serviced
  38301.  12h    WORD    number of things to do
  38302.  14h    WORD    number of them done
  38303.  16h    WORD    number of pages to do (if any)
  38304.  18h    WORD    number of them done
  38305.  1Ah    WORD    number of files to do
  38306.  1Ch    WORD    number of them done
  38307.  1Eh 80 BYTEs    current File
  38308.  6Eh    WORD    0 if all devices are idle
  38309.  70h    WORD    number of fascimiles transmitted
  38310.  72h    WORD    number of fascimiles received
  38311.  74h    WORD    status of last transmission in system
  38312.  76h    WORD    envelope ID of last transmission
  38313.  78h    WORD    index of last destination in envelope
  38314.  7Ah    WORD    status of last reception in system
  38315.  7Ch    DWORD    time of next transmission
  38316.  80h  6 BYTEs    future expansion
  38317.  86h    WORD    structure size
  38318.  
  38319. Format of PDIR_OPEN command buffer:
  38320. Offset    Size    Description
  38321.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38322.  0Ch 80 BYTEs    Phone Directory token
  38323.  5Ch 80 BYTEs    sort order token
  38324.  ACh    WORD    open Mode (0 = read, 1 = write)
  38325.  AEh    WORD    Phone Directory handle
  38326.  B0h    WORD    number of people
  38327.  B2h    WORD    number of groups
  38328.  B4h    WORD    bitmap of fields supported by partial read
  38329.  B6h  6 BYTEs    future expansion
  38330.  BCh    WORD    structure size
  38331.  
  38332. Format of PDIR_CLOSE command buffer:
  38333. Offset    Size    Description
  38334.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38335.  0Ch    WORD    Phone Directory handle
  38336.  0Eh  6 BYTEs    future expansion
  38337.  14h    WORD    structure size
  38338.  
  38339. Format of PDIR_READ_PERSON command buffer:
  38340. Offset    Size    Description
  38341.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38342.  0Ch    WORD    Phone Directory handle
  38343.  0Eh    WORD    retrieve by index
  38344.  10h    WORD    person ID or index
  38345.  12h    WORD    how many groups person is in
  38346.  14h    WORD    person ID
  38347.  16h 20 BYTEs    last name
  38348.  2Ah 20 BYTEs    first name
  38349.  3Eh 32 BYTEs    company
  38350.  5Eh 32 BYTEs    notes
  38351.  7Eh  6 BYTEs    FAX country code
  38352.  84h  6 BYTEs    FAX city/area code
  38353.  8Ah 14 BYTEs    FAX local number
  38354.  98h 14 BYTEs    FAX extension
  38355.  A6h 24 BYTEs    reserved
  38356.  BEh  6 BYTEs    voice country code
  38357.  C4h  6 BYTEs    voice city/area code
  38358.  CAh 14 BYTEs    voice local number
  38359.  D8h 14 BYTEs    voice extension
  38360.  E6h 24 BYTEs    reserved
  38361.  FEh 10 BYTEs    outbound routing information
  38362. 108h 10 BYTEs    billing information, credit card etc
  38363. 112h    DWORD    remote FAX capabilities
  38364. 116h 21 BYTEs    T.30 poll code of FAX number
  38365. 12Bh 15 BYTEs    reserved
  38366. 13Ah  6 BYTEs    future expansion
  38367. 140h    WORD    structure size
  38368.  
  38369. Format of SCHED_OPEN, SCHED_CANCEL command buffer:
  38370. Offset    Size    Description
  38371.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38372.  0Ch    WORD    scheduler handle
  38373.  0Eh  6 BYTEs    future expansion
  38374.  14h    WORD    structure size
  38375.  
  38376. Format of SCHED_ADD_DEST command buffer:
  38377. Offset    Size    Description
  38378.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38379.  0Ch    WORD    schedule handle
  38380.  0Eh    WORD    device number if manual send wanted
  38381.  10h    WORD    non-zero if poll desired
  38382.  12h    WORD    person ID
  38383.  14h 20 BYTEs    last name
  38384.  28h 20 BYTEs    first name
  38385.  3Ch 32 BYTEs    company
  38386.  5Ch 32 BYTEs    notes
  38387.  7Ch  6 BYTEs    FAX country code
  38388.  82h  6 BYTEs    FAX city/area code
  38389.  88h 14 BYTEs    FAX local number
  38390.  96h 14 BYTEs    FAX extension
  38391.  A4h 24 BYTEs    reserved
  38392.  BCh  6 BYTEs    voice country code
  38393.  C2h  6 BYTEs    voice city/area code
  38394.  C8h 14 BYTEs    voice local number
  38395.  D6h 14 BYTEs    voice extension
  38396.  E4h 24 BYTEs    reserved
  38397.  FCh 10 BYTEs    outbound routing information
  38398. 106h 10 BYTEs    billing information, credit card etc
  38399. 110h    DWORD    remote FAX capabilities
  38400. 114h 21 BYTEs    T.30 poll code of FAX number
  38401. 129h 15 BYTEs    reserved
  38402. 138h  6 BYTEs    future expansion
  38403. 13Eh    WORD    structure size
  38404.  
  38405. Format of SCHED_ADD_FILE command buffer:
  38406. Offset    Size    Description
  38407.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38408.  0Ch    WORD    schedule handle
  38409.  0Eh    WORD    file type
  38410.         0000h unidentified
  38411.         0001h native file format
  38412.         0002h ASCII
  38413.         0003h FaxBIOS Tiff Class F
  38414.  10h 80 BYTEs    file name
  38415.  60h 80 BYTEs    font token
  38416.  B0h    WORD    conversion options bitmap
  38417.  B2h    WORD    resolution
  38418.         0000h standard 98 lines per inch, 204 dpi
  38419.         0001h fine 196 lines per inch, 204 dpi
  38420.         0002h Group4 300 dpi
  38421.         0003h Group4 400 dpi
  38422.  B4h    WORD    page length
  38423.         0000h 279 mm (11 in)
  38424.         0001h 297 mm (11.69 in)
  38425.         0002h 364 mm (14.33 in)
  38426.         0003h unlimited
  38427.  B6h    WORD    page width
  38428.         0000h 215 mm (8.46 in)
  38429.         0001h 255 mm (10.04 in)
  38430.         0002h 303 mm (11.93 in)
  38431.         0003h 151 mm (5.91 in)
  38432.         0004h 107 mm (4.21 in)
  38433.  B8h    WORD    binary file transfer specification
  38434.         0000h only as FAX
  38435.         0001h only as file (for non-faxable files)
  38436.         0002h as file when possible else FAX
  38437.  BAh    WORD    seam flag (nonzero for seam with next)
  38438.  BCh    WORD    delete flag (nonzero to delete when done)
  38439.  BEh  6 BYTEs    future expansion
  38440.  C4h    WORD    structure size
  38441.  
  38442. Format of SCHED_SET_PARAMS command buffer:
  38443. Offset    Size    Description
  38444.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38445.  0Ch    WORD    scheduler handle
  38446.  0Eh    DWORD    time to send
  38447.  10h 10 BYTEs    priority token
  38448.  1Ch 80 BYTEs    logo file token
  38449.  6Ch 80 BYTEs    signature file token
  38450.  BCh 80 BYTEs    cover page token
  38451. 10Ch 40 BYTEs    Subject text
  38452. 134h 40 BYTEs    From text
  38453. 15Ch    WORD    user ID
  38454. 15Eh  6 BYTEs    future expansion
  38455. 164h    WORD    structure size
  38456.  
  38457. Format of SCHED_CLOSE command buffer:
  38458. Offset    Size    Description
  38459.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38460.  0Ch    WORD    scheduler handle
  38461.  0Eh    WORD    envelope ID generated
  38462.  10h  6 BYTEs    future expansion
  38463.  16h    WORD    structure size
  38464.  
  38465. Format of SLOG_OPEN, SLOG_CLOSE, RLOG_OPEN, RLOG_CLOSE command buffer:
  38466. Offset    Size    Description
  38467.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38468.  0Ch    WORD    log handle
  38469.  0Eh    WORD    number of entries 
  38470.  10h  6 BYTEs    future expansion
  38471.  16h    WORD    structure size
  38472.  
  38473. Format of GRAPH_GET_FILE_TYPE command buffer:
  38474. Offset    Size    Description
  38475.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38476.  0Ch 80 BYTEs    filename
  38477.  5Ch    WORD    file type
  38478.         0000h unidentified
  38479.         0001h native file format
  38480.         0002h ASCII
  38481.         0003h FaxBIOS Tiff Class F
  38482.  5Eh    WORD    bitmap of supported capabilities
  38483.  60h  6 BYTEs    future expansion
  38484.  66h    WORD    structure size
  38485.  
  38486. Format of GRAPH_CREATE_FILE command buffer:
  38487. Offset    Size    Description
  38488.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38489.  0Ch 80 BYTEs    filename
  38490.  5Ch    WORD    graph handle
  38491.  5Eh  6 BYTEs    future expansion
  38492.  64h    WORD    structure size
  38493.  
  38494. Format of GRAPH_CLOSE_FILE, GRAPH_END_PAGE command buffer:
  38495. Offset    Size    Description
  38496.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38497.  0Ch    WORD    graph handle
  38498.  0Eh  6 BYTEs    future expansion
  38499.  14h    WORD    structure size
  38500.  
  38501. Format of GRAPH_CREATE_PAGE command buffer:
  38502. Offset    Size    Description
  38503.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38504.  0Ch    WORD    graph handle
  38505.  0Eh    WORD    resolution
  38506.  10h    WORD    page width
  38507.  12h  6 BYTEs    future expansion
  38508.  18h    WORD    structure size
  38509.  
  38510. Format of GRAPH_WRITE_PAGE command buffer:
  38511. Offset    Size    Description
  38512.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38513.  0Ch    WORD    graph handle
  38514.  0Eh    DWORD    pointer to storage for image
  38515.  12h    WORD    band height in lines
  38516.  14h    WORD    width of page image in bytes
  38517.  16h    WORD    facsimile page width constant
  38518.  18h    WORD    width of page image in bits
  38519.  1Ah    WORD    number of bytes actually processed
  38520.  1Ch  6 BYTEs    future expansion
  38521.  22h    WORD    structure size
  38522.  
  38523. Format of GRAPH_OPEN_FILE command buffer:
  38524. Offset    Size    Description
  38525.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38526.  0Ch 80 BYTEs    filename
  38527.  5Ch    WORD    file type
  38528.  5Eh    WORD    graph handle
  38529.  60h    WORD    number of pages
  38530.  62h  6 BYTEs    future expansion
  38531.  68h    WORD    structure size
  38532.  
  38533. Format of GRAPH_GOTO_PAGE command buffer:
  38534. Offset    Size    Description
  38535.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38536.  0Ch    WORD    graph handle
  38537.  0Eh    WORD    page number
  38538.  10h    WORD    vertical resolution
  38539.  12h    WORD    page width
  38540.  14h    DWORD    page length
  38541.  18h  6 BYTEs    future expansion
  38542.  1Eh    WORD    structure size
  38543.  
  38544. Format of GRAPH_READ_PAGE command buffer:
  38545. Offset    Size    Description
  38546.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38547.  0Ch    WORD    graph handle
  38548.  0Eh    DWORD    pointer to storage for image
  38549.  12h    WORD    band height in lines
  38550.  14h    WORD    width of page image in bytes
  38551.  16h    WORD    facsimile page width constant
  38552.  18h    WORD    width of page image in bits
  38553.  1Ah    WORD    number of bytes actually processed
  38554.  1Ch  6 BYTEs    future expansion
  38555.  22h    WORD    structure size
  38556.  
  38557. Format of IOCTL_ANSWER_FAX command buffer:
  38558. Offset    Size    Description
  38559.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38560.  0Ch    WORD    device number
  38561.  0Eh  6 BYTEs    future expansion
  38562.  14h    WORD    structure size
  38563.  
  38564. Format of IOCTL_DIAL command buffer:
  38565. Offset    Size    Description
  38566.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  38567.  0Ch    WORD    device number
  38568.  0Eh  6 BYTEs    country code
  38569.  14h  6 BYTEs    city or area code
  38570.  1Ah 14 BYTEs    local number
  38571.  28h 14 BYTEs    extension
  38572.  36h 14 BYTEs    reserved
  38573.  4Eh  6 BYTEs    future expansion
  38574.  54h    WORD    structure size
  38575. ----------2F8100-----------------------------
  38576. INT 2F U - Nanosoft, Inc. TurboNET redirector - INSTALLATION CHECK
  38577.     AX = 8100h
  38578. Return: AL = FFh if installed
  38579. Note:    TurboNET is a NetBIOS-based file redirector and server; a demonstration
  38580.       version may be downloaded from Nanosoft's BBS
  38581. SeeAlso: AX=8000h"TurboNET"
  38582. ----------2F8101-----------------------------
  38583. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  38584.     AX = 8101h
  38585. Return: AL = ???
  38586.     DL = ???
  38587. ----------2F8102-----------------------------
  38588. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  38589.     AX = 8102h
  38590. Return: AL = ???
  38591.     DL = ???
  38592. ----------2F8103-----------------------------
  38593. INT 2F U - Nanosoft, Inc. TurboNET redirector - GET MACHINE NAME???
  38594.     AX = 8103h
  38595.     ES:DI -> 17-byte buffer
  38596. Return: buffer filled
  38597. ----------2F8104-----------------------------
  38598. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  38599.     AX = 8104h
  38600.     BL = ???
  38601.     BH = ???
  38602.     CX = ???
  38603.     DX = ???
  38604.     DS:SI -> 16-byte buffer containing ???
  38605. Return: AL = 00h ???
  38606. ----------2F8105-----------------------------
  38607. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  38608.     AX = 8105h
  38609.     CX = ??? (don't change current value if 0000h)
  38610.     DX = ??? (don't change current value if 0000h)
  38611. Return: AL = 00h successful
  38612. ----------2F82-------------------------------
  38613. INT 2F U - Nanosoft, Inc. TurboNET - ???
  38614.     AH = 82h
  38615.     ???
  38616. Return: ???
  38617. Note:    called by TNR.EXE, the TurboNET redirector configuration program
  38618. SeeAlso: AX=8100h
  38619. ----------2F8200-----------------------------
  38620. INT 2F - RESPLAY - SAMPLE/PLAYBACK
  38621.     AX = 8200h
  38622.     DX:DI -> start of sample space
  38623.     CX:BX = length in bytes
  38624. Return: AX = status
  38625.         1000h successful
  38626.         2000h not initialized (see AX=8210h)
  38627.         other RESPLAY not installed
  38628. Note:    RESPLAY is a freeware sound sampling/playback utility by Mark J. Cox
  38629. SeeAlso: AX=8201h,AX=8210h
  38630. ----------2F8201-----------------------------
  38631. INT 2F - RESPLAY - INSTALLATION CHECK
  38632.     AX = 8201h
  38633. Return: AX = 7746h if installed
  38634. SeeAlso: AX=8202h
  38635. ----------2F8202-----------------------------
  38636. INT 2F - RESPLAY - UNINSTALL
  38637.     AX = 8202h
  38638. Return:    AX = status
  38639.         1000h successful
  38640. SeeAlso: AX=8201h
  38641. ----------2F8210-----------------------------
  38642. INT 2F - RESPLAY - INITIALIZE
  38643.     AX = 8210h
  38644.     BL = sound device
  38645.         00h printer port LPT1
  38646.         01h printer port LPT2
  38647.         02h prototype board at I/O address 0300h
  38648.         03h printer port (alternative LPT1)
  38649.         04h internal speaker
  38650.     BH = sample rate in multiples of 250 Hz (14h to A0h)
  38651.     CL = direction
  38652.         00h playback
  38653.         01h sample
  38654. Return: AX = status
  38655.         1000h successful
  38656.         2000h parameter out of range
  38657.         other RESPLAY not installed
  38658. SeeAlso: AX=8200h
  38659. ----------2F86-------------------------------
  38660. INT 2F U - ???
  38661.     AH = 86h
  38662.     AL = function (at least 06h and 07h)
  38663.     ???
  38664. Return: ???
  38665. Note:    called by Codeview for Windows
  38666. SeeAlso: AH=44h
  38667. ----------2F8900-----------------------------
  38668. INT 2F - WHOA!.COM - INSTALLATION CHECK
  38669.     AX = 8900h
  38670. Return: AL = 00h not installed
  38671.        = FFh installed
  38672. Note:    WHOA!.COM is a system slow-down utility by Brad D Crandall
  38673. SeeAlso: AX=8901h,AX=8902h
  38674. ----------2F8901-----------------------------
  38675. INT 2F - WHOA!.COM - UNINSTALL
  38676.     AX = 8901h
  38677. Return: AL = FDh successful
  38678.        = FEh error
  38679. Note:    WHOA!.COM is a system slow-down utility by Brad D Crandall
  38680. SeeAlso: AX=8900h
  38681. ----------2F8902-----------------------------
  38682. INT 2F - WHOA!.COM - SET DELAY COUNT
  38683.     AX = 8902h
  38684.     BX = delay count (larger values slow system down more)
  38685. Return: AL = FDh successful
  38686.        = FEh error
  38687. Note:    WHOA!.COM is a system slow-down utility by Brad D Crandall
  38688. SeeAlso: AX=8900h
  38689. ----------2F9000-----------------------------
  38690. INT 2F U - RAID - INSTALLATION CHECK
  38691.     AX = 9000h
  38692. Return: AL = FFh if installed
  38693. Note:    RAID (Resident AID) is a TSR utility program by Ross Neilson Wentworth
  38694.       that resides mostly in EMS
  38695. ----------2F9001-----------------------------
  38696. INT 2F U - RAID - GET ???
  38697.     AX = 9001h
  38698. Return: DX:AX -> ???
  38699. SeeAlso: AX=9000h
  38700. ----------2F9002-----------------------------
  38701. INT 2F U - RAID - GET RESIDENT SEGMENT
  38702.     AX = 9002h
  38703. Return: AX = segment of resident (conventional memory) portion
  38704. SeeAlso: AX=9000h
  38705. ----------2F9003-----------------------------
  38706. INT 2F U - RAID - UNINSTALL
  38707.     AX = 9003h
  38708. Return: ???
  38709. SeeAlso: AX=9000h
  38710. ----------2F9004-----------------------------
  38711. INT 2F U - RAID - GET ???
  38712.     AX = 9004h
  38713. Return: AX = first available paragraph past end of resident portion???
  38714.     CX destroyed
  38715. SeeAlso: AX=9000h
  38716. ----------2F92-------------------------------
  38717. INT 2F - Couriers LAN E-Mail - API
  38718.     AH = 92h
  38719.     AL = function
  38720.         00h installation check
  38721.         01h uninstall
  38722.         02h pop down MICRO.EXE notification window
  38723.         03h ???
  38724.         04h ???
  38725.         05h ???
  38726. Return: ???
  38727. SeeAlso: AH=9Ch
  38728. ----------2F92-------------------------------
  38729. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  38730.     AH = 92h
  38731.     AL = function (00h-1Eh)
  38732.     ???
  38733. Return: ???
  38734.     AX = FFFFh if not a valid function number in AL
  38735. SeeAlso: INT 16/AX=FF70h
  38736. ----------2F93-------------------------------
  38737. INT 2F - InnerMission v1.7+ - INSTALLATION CHECK
  38738.     AH = 93h
  38739.     BX = CX = AX
  38740. Return: AL = FFh if installed and BX=CX=AX on entry
  38741.         BX = segment of resident code
  38742.        = 01h if installed but BX or CX differ from AX
  38743. Note:    InnerMission is a shareware graphical screen blanker by Kevin Stokes
  38744. ----------2F9C-------------------------------
  38745. INT 2F - Couriers LAN E-Mail OPERATOR.EXE - API
  38746.     AH = 9Ch
  38747.     AL = subfunction
  38748.         01h uninstall
  38749. Return: ???
  38750. SeeAlso: AH=92h
  38751. ----------2FA1--BX0081-----------------------
  38752. INT 2F - Ergo DOS extenders - INSTALLATION CHECK
  38753.     AH = A1h
  38754.     BX = 0081h
  38755.     AL = which
  38756.         FEh OS/286,OS/386
  38757.         FFh HummingBoard DOS extender
  38758.     ES:DI -> 16-byte buffer
  38759. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  38760. Note:    since TKERNEL is a licensed version, it is likely that subfunctions
  38761.       BX=0082h and BX=0084h are present and function identically to the
  38762.       AX=FBA1h/BX=008xh calls
  38763. SeeAlso: AX=ED00h,AX=FBA1h,INT 15/AX=BF02h
  38764. ----------2FA189-----------------------------
  38765. INT 2F U - Biologic HRAMDEV.SYS - API
  38766.     AX = A189h
  38767.     BX = subfunction
  38768.         0000h set ???
  38769.         0001h remove ???
  38770.         0002h get status ???
  38771.         0003h enable ???
  38772.         0004h disable ???
  38773.         0005h set ??? flag
  38774.         0006h clear ??? flag
  38775.         0007h set ??? flag
  38776.         0008h clear ??? flag
  38777.         0009h set ???
  38778.     ES:DI -> function-specific arguments
  38779.         if func 0000h: 20-byte buffer containing ???
  38780.         if func 0001h: 20-byte buffer for returned ???
  38781.         if func 0002h: 16-byte buffer for returned ???
  38782.         if func 0009h: WORD containing ???
  38783. Return: BX = A189h if installed
  38784.     AH = status
  38785.         00h successful
  38786.         FFh failed or invalid function number
  38787. Notes:    HRAMDEV.SYS is a part of the shareware package HRAM by Biologic which
  38788.       provides improved high memory access under MSDOS 5.0
  38789.     functions 00h and 01h use a stack of four entries; function 01h always
  38790.       removes the values stored with the most recent function 00h call
  38791.       which has not yet been matched with a function 01h call.
  38792. ----------2FA4E0-----------------------------
  38793. INT 2F - Futurus Team - INSTALLATION CHECK
  38794.     AX = A4E0h
  38795. Return: AL = 52h ("R") if installed
  38796.         AH = major version plus 30h ("0")
  38797.         ES:BX -> ??? (INT A4 handler???)
  38798. Note:    older versions of Right Hand Man (from which Team evolved) store the
  38799.       signature "RH" at offset 103h in the INT 2F handler's segment
  38800. SeeAlso: INT A4"Right Hand Man"
  38801. ----------2FA900-----------------------------
  38802. INT 2F - METZTSR.COM - INSTALLATION CHECK
  38803.     AX = A900h
  38804.     CF set
  38805. Return: CF clear if resident
  38806.         AX = 97FFh
  38807.     CF set if not present
  38808. Notes:    METZTSR.COM prevents METZ applications (such as the MAGIC screen
  38809.       saver) inactivity timeout while running a DOSapp under MS Windows.
  38810.     the default multiplex number is A9h, but may be set to any value from
  38811.       80h to FFh with a commandline switch
  38812. SeeAlso: AX=A901h,AX=A902h
  38813. ----------2FA901-----------------------------
  38814. INT 2F - METZTSR.COM - GET TIME OF LAST KEYBOARD ACTIVITY
  38815.     AX = A901h
  38816.     CF set
  38817. Return: CF clear if successful
  38818.         AX:DX = BIOS time at which INT 09 was last invoked
  38819.     CF set if not present
  38820. SeeAlso: INT 09,INT 1A/AH=00h
  38821. ----------2FA902-----------------------------
  38822. INT 2F - METZTSR.COM - SET METZ Ctrl-Alt-Del FLAG
  38823.     AX = A902h
  38824.     BL = new value
  38825.         00h Ctrl-Alt-Del not allowed
  38826.         else Ctrl-Alt-Del allowed (startup default is 01h)
  38827.     CF set
  38828. Return: CF clear if successful
  38829.         AX = 97FFh
  38830.     CF set if not resident
  38831. SeeAlso: AX=A903h
  38832. ----------2FA903-----------------------------
  38833. INT 2F - METZTSR.COM - GET METZ Ctrl-Alt-Del FLAG
  38834.     AX = A903h
  38835.     CF set
  38836. Return: CF clear if successful    
  38837.         AX = 97FFh if Ctrl-Alt-Del allowed
  38838.         AX = 0000h if Ctrl-Alt-Del not allowed
  38839.     CF set if not resident
  38840. SeeAlso: AX=A902h
  38841. ----------2FAA00-----------------------------
  38842. INT 2F - VIDCLOCK.COM - INSTALLATION CHECK
  38843.     AX = AA00h
  38844. Return: AL = 00h not installed
  38845.          FFh installed
  38846. Note:    VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III
  38847. ----------2FAB00-----------------------------
  38848. INT 2F - Btrieve Multi-User - INSTALLATION CHECK
  38849.     AX = AB00h
  38850. Return: AL = 4Dh if installed
  38851. SeeAlso: AX=AB01h,AX=AB02h,INT 7B"Btrieve"
  38852. ----------2FAB01-----------------------------
  38853. INT 2F - Btrieve Multi-User - EXECUTE Btrieve OPERATION
  38854.     AX = AB01h
  38855.     BX = process ID
  38856.     DS:DX -> 38-byte parameter record (see INT 7B"Btrieve")
  38857. Return: AL = 00h OK
  38858.        = other retry after calling INT 7F/AX=0200h
  38859. SeeAlso: AX=AB00h,AX=AB02h,INT 7B"Btrieve",INT 7F/AX=0200h
  38860. ----------2FAB02-----------------------------
  38861. INT 2F - Btrieve Multi-User - GET NEW PROCESS ID
  38862.     AX = AB02h
  38863. Return: AL = 00h succesful
  38864.         BX = process ID
  38865.     AL > 00h failed, retry after calling INT 7F/AX=0200h
  38866. SeeAlso: AX=AB00h,AX=AB01h,INT 7B"Btrieve",INT 7F/AX=0200h
  38867. ----------2FAC00-----------------------------
  38868. INT 2F - DOS 4.01+ GRAPHICS.COM - INSTALLATION CHECK
  38869.     AX = AC00h
  38870. Return: AX = FFFFh
  38871.     ES:DI -> ??? (graphics data?) (not documented)
  38872. Note:    this installation check was moved here to avoid the conflict with the
  38873.       CD-ROM extensions that occurred in DOS 4.00
  38874. SeeAlso: AX=1500h"GRAPHICS"
  38875. ----------2FAD00-----------------------------
  38876. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK
  38877.     AX = AD00h
  38878. Return: AL = FFh if installed
  38879.         BX = ??? (0100h in MS-DOS 3.30, PCDOS 4.01)
  38880. Note:    DOS 5.0 DISPLAY.SYS chains to previous handler if AL is not one of the
  38881.       subfunctions listed here
  38882. ----------2FAD01-----------------------------
  38883. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - SET ACTIVE CODE PAGE
  38884.     AX = AD01h
  38885.     BX = new code page
  38886. Return: CF clear if successful
  38887.         AX = 0001h
  38888.     CF set on error (unsupported code page)
  38889.         AX = 0000h
  38890. SeeAlso: AX=AD02h
  38891. ----------2FAD02-----------------------------
  38892. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET ACTIVE CODE PAGE
  38893.     AX = AD02h
  38894. Return: CF set if code page never set
  38895.         AX = 0001h
  38896.         BX = FFFFh (assume first hardware code page)
  38897.     CF clear if successful
  38898.         BX = current code page
  38899. SeeAlso: AX=AD01h,AX=AD03h
  38900. ----------2FAD03-----------------------------
  38901. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET CODE PAGE INFORMATION
  38902.     AX = AD03h
  38903.     ES:DI -> buffer for code page information (see below)
  38904.     CX = size of buffer in bytes
  38905. Return: CF set if buffer too small
  38906.     CF clear if successful
  38907.         ES:DI buffer filled
  38908. SeeAlso: AX=AD01h,AX=AD02h
  38909.  
  38910. Format of DOS 5.0 code page information:
  38911. Offset    Size    Description
  38912.  00h    WORD    number of software code pages
  38913.  02h    WORD    ??? (0003h)
  38914.  04h    WORD    number of hardware code pages
  38915.  06h  N WORDs    hardware code page numbers
  38916.       N WORDs    software (prepared) code pages (FFFFh if not yet prepared)
  38917. ----------2FAD04-----------------------------
  38918. INT 2F U - DOS 4.x only DISPLAY.SYS internal - ???
  38919.     AX = AD04h
  38920.     ???
  38921. Return: ???
  38922. ----------2FAD10-----------------------------
  38923. INT 2F U - DOS 4.x DISPLAY.SYS internal - INSTALLATION CHECK???
  38924.     AX = AD10h
  38925.     ???
  38926. Return: AX = FFFFh
  38927.     BX = ??? (0100h in PCDOS 4.01)
  38928. ----------2FAD10-----------------------------
  38929. INT 2F U - DOS 5.0 DISPLAY.SYS internal - ???
  38930.     AX = AD10h
  38931.     ???
  38932. Return: CF clear if successful
  38933.     CF set on error
  38934. Note:    this function is a NOP if the active code page has never been set
  38935.       (AX=AD02h returns BX=FFFFh); its purpose otherwise is not known
  38936. ----------2FAD40-----------------------------
  38937. INT 2F - DOS 4.0 - ???
  38938.     AX = AD40h
  38939.     DX = ???
  38940.     ???
  38941. Return: ???
  38942. Note:    called by PCDOS 4.01 PRINT.COM
  38943. ----------2FAD80-----------------------------
  38944. INT 2F u - DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK
  38945.     AX = AD80h
  38946. Return: AL = FFh if installed
  38947.         BX = version number (BH = major, BL = minor)
  38948.         ES:DI -> internal data (see below)
  38949. Notes:    MSDOS 3.30, PCDOS 4.01, and MSDOS 5.00 all report version 1.00.
  38950.     undocumented prior to the release of DOS 5.0
  38951.  
  38952. Format of KEYB internal data:
  38953. Offset    Size    Description
  38954.  00h    DWORD    original INT 09
  38955.  04h    DWORD    original INT 2F
  38956.  08h  6 BYTEs    ???
  38957.  0Eh    WORD    flags
  38958.  10h    BYTE    ???
  38959.  11h    BYTE    ???
  38960.  12h  4 BYTEs    ???
  38961.  16h  2 BYTEs    country ID letters
  38962.  18h    WORD    current code page
  38963. ---DOS 3.3---
  38964.  1Ah    WORD    pointer to first item in list of code page tables???
  38965.  1Ch    WORD    pointer to ??? item in list of code page tables
  38966.  1Eh  2 BYTEs    ???
  38967.  20h    WORD    pointer to key translation data
  38968.  22h    WORD    pointer to last item in code page table list (see below)
  38969.  24h  9 BYTEs    ???
  38970. ---DOS 4.01---
  38971.  1Ah  2 BYTEs    ???
  38972.  1Ch    WORD    pointer to first item in list of code page tables???
  38973.  1Eh    WORD    pointer to ??? item in list of code page tables
  38974.  20h  2 BYTEs    ???
  38975.  22h    WORD    pointer to key translation data
  38976.  24h    WORD    pointer to last item in code page table list (see below)
  38977.  26h  9 BYTEs    ???
  38978.  
  38979. Format of code page table list entries:
  38980. Offset    Size    Description
  38981.  00h    WORD    pointer to next item, FFFFh = last
  38982.  02h    WORD    code page
  38983.  04h  2 BYTEs    ???
  38984.  
  38985. Format of translation data:
  38986. Offset    Size    Description
  38987.  00h    WORD    size of data in bytes, including this word
  38988.  02h N-2 BYTEs    ???
  38989. ----------2FAD81-----------------------------
  38990. INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD CODE PAGE
  38991.     AX = AD81h
  38992.     BX = code page (see INT 21/AX=6601h)
  38993. Return: CF set on error
  38994.         AX = 0001h (code page not available)
  38995.     CF clear if successful
  38996. Notes:    called by DISPLAY.SYS
  38997.     undocumented prior to the release of DOS 5.0
  38998. SeeAlso: AX=AD82h
  38999. ----------2FAD82-----------------------------
  39000. INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD MAPPING
  39001.     AX = AD82h
  39002.     BL = new state
  39003.         00h US keyboard (Control-Alt-F1)
  39004.         FFh foreign keyboard (Control-Alt-F2)
  39005. Return: CF set on error (BL not 00h or FFh)
  39006.     CF clear if successful
  39007. Note:    undocumented prior to the release of DOS 5.0
  39008. SeeAlso: AX=AD81h,AX=AD83h
  39009. ----------2FAD83-----------------------------
  39010. INT 2F - DOS 5.0 KEYB.COM - GET KEYBOARD MAPPING
  39011.     AX = AD83h
  39012. Return: BL = current state
  39013.         00h US keyboard
  39014.         FFh foreign keyboard
  39015. SeeAlso: AX=AD82h
  39016. ----------2FAE00DXFFFF-----------------------
  39017. INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALLATION CHECK
  39018.     AX = AE00h
  39019.     DX = FFFFh
  39020.     CH = FFh
  39021.     CL = length of command line tail (4DOS v4.0)
  39022.     DS:BX -> command line buffer (see below)
  39023.     DS:SI -> command name buffer (see below)
  39024.     DI = 0000h (4DOS v4.0)
  39025. Return: AL = FFh if this command is a TSR extension to COMMAND.COM
  39026.     AL = 00h if the command should be executed as usual
  39027. Notes:    This call provides a mechanism for TSRs to install permanent
  39028.       extensions to the command repertoire of COMMAND.COM.    It appears
  39029.       that COMMAND.COM makes this call before executing the current
  39030.       command line, and does not execute it itself if the return is FFh.
  39031.     APPEND hooks this call, to allow subsequent APPEND commands to
  39032.       execute without re-running APPEND
  39033.  
  39034. Format of command line buffer:
  39035. Offset    Size    Description
  39036.  00h    BYTE    max length of command line, as in INT 21/AH=0Ah
  39037.  01h    BYTE    count of bytes to follow, excluding terminating 0Dh
  39038.       N BYTEs    command line text, terminated by 0Dh
  39039.  
  39040. Format of command name buffer:
  39041. Offset    Size    Description
  39042.  00h    BYTE    length of command name
  39043.  01h  N BYTEs    uppercased command name (blank-padded to 11 chars by 4DOS v4)
  39044. ----------2FAE01DXFFFF-----------------------
  39045. INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE
  39046.     AX = AE01h
  39047.     DX = FFFFh
  39048.     CH = 00h
  39049.     CL = length of command name (4DOS v4.0)
  39050.     DS:SI -> command name buffer (see AX=AE00h)
  39051.     DS:BX -> command line buffer (see AX=AE00h)
  39052. Return: DS:SI buffer updated
  39053.       if length byte is nonzero, the following bytes contain the uppercase
  39054.       internal command to execute and the command line buffer contains the
  39055.       command's parameters (the first DS:[SI] bytes are ignored)
  39056. Notes:    this call requests execution of the command which a previous call to
  39057.       AX=AE00h indicated was resident
  39058.     APPEND hooks this call
  39059. ----------2FB000-----------------------------
  39060. INT 2F - DOS 3.3+ GRAFTABL.COM - INSTALLATION CHECK
  39061.     AX = B000h
  39062. Return: AL = 00h not installed, OK to install
  39063.        = 01h not installed, not OK to install
  39064.        = FFh installed
  39065. Notes:    called by DISPLAY.SYS
  39066.     documented for DOS 5.0, but undocumented in prior versions
  39067. SeeAlso: AX=B001h
  39068. ----------2FB001-----------------------------
  39069. INT 2F - DOS 3.3+ GRAFTABL.COM - GET GRAPHICS FONT TABLE
  39070.     AX = B001h
  39071.     DS:BX -> DWORD buffer for address of 8x8 font table
  39072. Return: buffer filled
  39073.     AL = FFh
  39074. Note:    PCDOS 3.30/4.01 set the font table offset to 0130h, MSDOS 3.30 to 0030h
  39075. SeeAlso: AX=B000h
  39076. ----------2FB400-----------------------------
  39077. INT 2F - IBM PC3270 EMULATION PROG v3 - INSTALLATION CHECK
  39078.     AX = B400h
  39079. Return: AL = FFh if installed
  39080. ----------2FB401-----------------------------
  39081. INT 2F - IBM PC3270 EMULATION PROG v3 - GET HOST BUFFER ADDRESS
  39082.     AX = B401h
  39083. Return: ES -> host screen buffer (PC ASCII format)
  39084.     ES unchanged if communications not started
  39085. ----------2FB402-----------------------------
  39086. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  39087.     AX = B402h
  39088.     BX = ???
  39089. Return: ???
  39090. ----------2FB403-----------------------------
  39091. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  39092.     AX = B403h
  39093.     ???
  39094. Return: ???
  39095. ----------2FB404-----------------------------
  39096. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  39097.     AX = B404h
  39098.     ???
  39099. Return: ???
  39100. ----------2FB405-----------------------------
  39101. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  39102.     AX = B405h
  39103.     ???
  39104. Return: ???
  39105. ----------2FB700-----------------------------
  39106. INT 2F - APPEND - INSTALLATION CHECK
  39107.     AX = B700h
  39108. Return: AL = status
  39109.         00h not installed
  39110.         FFh installed
  39111. Note:    MSDOS 3.30 APPEND refuses to install itself when run inside TopView or
  39112.       a TopView-compatible environment
  39113. ----------2FB701-----------------------------
  39114. INT 2F U - APPEND - ???
  39115.     AX = B701h
  39116.     ???
  39117. Return: ???
  39118. Note:    MSDOS 3.30 APPEND displays "Incorrect APPEND Version" and aborts caller
  39119. ----------2FB702-----------------------------
  39120. INT 2F - APPEND - VERSION CHECK
  39121.     AX = B702h
  39122. Return: AX = FFFFh if not DOS 4.0 APPEND (also if DOS 5.0 APPEND)
  39123.     AL = major version number
  39124.     AH = minor version number, otherwise
  39125. SeeAlso: AX=B710h
  39126. ----------2FB703-----------------------------
  39127. INT 2F U - DOS 3.3, DOS 5.0 APPEND - HOOK INT 21
  39128.     AX = B703h
  39129.     ES:DI -> INT 21 handler APPEND should chain to
  39130. Return: ES:DI -> APPEND's INT 21 handler
  39131. Note:    each invocation of this function toggles a flag which APPEND uses to
  39132.       determine whether to chain to the user handler or the original
  39133.       INT 21
  39134. ----------2FB704-----------------------------
  39135. INT 2F - DOS 3.3+ APPEND - GET APPEND PATH
  39136.     AX = B704h
  39137. Return: ES:DI -> active APPEND path (128 bytes max)
  39138. ----------2FB706-----------------------------
  39139. INT 2F - DOS 4+ APPEND - GET APPEND FUNCTION STATE
  39140.     AX = B706h
  39141. Return: BX = APPEND state
  39142.         bit 0: set if APPEND enabled
  39143.         bits 1-11 reserved
  39144.         bit 12: (DOS 5.0) set if APPEND applies directory search even if a
  39145.             drive has been specified
  39146.         bit 13: set if /PATH flag active
  39147.         bit 14: set if /E flag active (environment var APPEND exists)
  39148.         bit 15: set if /X flag active
  39149. ----------2FB707-----------------------------
  39150. INT 2F - DOS 4+ APPEND - SET APPEND FUNCTION STATE
  39151.     AX = B707h
  39152.     BX = APPEND state bits (see AX=B706h)
  39153. ----------2FB710-----------------------------
  39154. INT 2F U - DOS 3.3+ APPEND - GET VERSION INFO
  39155.     AX = B710h
  39156. Return: AX = current APPEND state (see AX=B706h)
  39157.     BX = ??? (0000h in MSDOS 3.30 and 5.00)
  39158.     CX = ??? (0000h in MSDOS 3.30 and 5.00)
  39159.     DL = major version
  39160.     DH = minor version
  39161. SeeAlso: AX=B702h
  39162. ----------2FB711-----------------------------
  39163. INT 2F - DOS 4+ APPEND - SET RETURN FOUND NAME STATE
  39164.     AX = B711h
  39165. Note:    if the next INT 21h call (and ONLY the next) is function 3Dh, 43h, or
  39166.     6Ch (also 4B03h and 4Eh if /X active), the fully qualified filename is
  39167.     written over top of the filename passed to the INT 21h call.  The
  39168.     application must provide a sufficiently large buffer.  This state is
  39169.     reset after the next INT 21h call processed by APPEND.
  39170. BUG:    DOS 4.0 APPEND reportedly overwrites DS:DX instead of DS:SI for
  39171.       INT 21/AH=6Ch
  39172. SeeAlso: INT 21/AH=4Eh
  39173. ----------2FB800-----------------------------
  39174. INT 2F - network - INSTALLATION CHECK
  39175.     AX = B800h
  39176. Return: AL = status
  39177.         00h        not installed
  39178.         nonzero installed
  39179.           BX = installed component flags (test in this order!)
  39180.            bit 6   server
  39181.            bit 2   messenger
  39182.            bit 7   receiver
  39183.            bit 3   redirector
  39184.            bit 1   LANPUP (LANtastic 4.0)
  39185. Notes:    this function is supported by SilverNET
  39186.     LANtastic and NetWare Lite use only BL for the return value, preserving
  39187.       BH; LAN Manager and DOS LAN Requester return BH=0.  This permits
  39188.       differentiation between those two groups by setting BH to a nonzero
  39189.       value before the call and checking its value on return.
  39190. SeeAlso: AX=4E53h,AX=B809h
  39191. ----------2FB803-----------------------------
  39192. INT 2F - network - GET NETWORK EVENT POST HANDLER
  39193.     AX = B803h
  39194. Return: ES:BX -> event post handler (see AX=B804h)
  39195. SeeAlso: AX=B804h,AX=B903h
  39196. ----------2FB804-----------------------------
  39197. INT 2F - network - SET NETWORK EVENT POST HANDLER
  39198.     AX = B804h
  39199.     ES:BX -> new event post handler
  39200. Notes:    used in conjunction with AX=B803h to hook into the network event post
  39201.       routine
  39202.     The specified handler is called on any network event.  Two events are
  39203.       defined: message received and critical network error.
  39204. SeeAlso: AX=B803h,AX=B904h
  39205.  
  39206. Values post routine is called with:
  39207.     AX = 0000h single block message
  39208.         DS:SI -> ASCIZ originator name
  39209.         DS:DI -> ASCIZ destination name
  39210.         ES:BX -> text header (see below)
  39211.     AX = 0001h start multiple message block
  39212.         CX = block group ID
  39213.         DS:SI -> ASCIZ originator name
  39214.         DS:DI -> ASCIZ destination name
  39215.     AX = 0002h multiple block text
  39216.         CX = block group ID
  39217.         ES:BX -> text header (see below)
  39218.     AX = 0003h end multiple block message
  39219.         CX = block group ID
  39220.     AX = 0004h message aborted due to error
  39221.         CX = block group ID
  39222.     AX = 0101h server received badly formatted network request
  39223.         Return: AX = FFFFh (PC LAN will process error)
  39224.     AX = 0102h unexpected network error
  39225.         ES:BX -> NCB (see INT 5C)
  39226.     AX = 0103h server received INT 24 error
  39227.         other registers as for INT 24, except AH is in BH
  39228.         Return: as below, but only 0000h and FFFFh allowed
  39229. Return:    AX = response code
  39230.         0000h user post routine processed message
  39231.         0001h PC LAN will process message, but message window not displayed
  39232.         FFFFh PC LAN will process message
  39233.     
  39234. Format of text header:
  39235. Offset    Size    Description
  39236.  00h    WORD    length of text (maximum 512 bytes)
  39237.  02h  N BYTEs    text of message
  39238. Note:    all CRLF sequences in message text are replaced by 14h
  39239. ----------2FB807-----------------------------
  39240. INT 2F - Network - GET NetBIOS NAME NUMBER OF MACHINE NAME
  39241.     AX = B807h
  39242. Return: CH = NetBIOS name number of the machine name
  39243. SeeAlso: INT 21/AX=5E00h
  39244. ----------2FB808-----------------------------
  39245. INT 2F U - Network - RELINK KEYBOARD HANDLER
  39246.     AX = B808h
  39247.     ES:BX -> INT 09 handler network should call after it finishes INT 09
  39248. Notes:    this call replaces the address to which the network software chains on
  39249.       an INT 09 without preserving the original value.  This allows a prior
  39250.       handler to unlink, but does not allow a new handler to be added
  39251.       such that the network gets the INT 09 first unless the new handler
  39252.       completely takes over INT 09 and never chains.
  39253.     called by DOS 3.2 KEYBxx.COM
  39254. SeeAlso: AX=B908h
  39255. ----------2FB809-----------------------------
  39256. INT 2F - LANtastic Network, NetWare Lite - VERSION CHECK
  39257.     AX = B809h
  39258. Return: AH = major version
  39259.     AL = minor version (decimal)
  39260. Note:    this function is also supported by SilverNET
  39261. SeeAlso: AX=4E53h,AX=B800h,AX=B809h"LAN Manager"
  39262. ----------2FB809-----------------------------
  39263. INT 2F - PC LAN Program, LAN Manager, DOS LAN Requester - VERSION CHECK
  39264.     AX = B809h
  39265. Return: AH = minor version (decimal)
  39266.     AL = major version
  39267. SeeAlso: AX=4E53h,AX=B800h,AX=B809h"LANtastic"
  39268. ----------2FB80F-----------------------------
  39269. INT 2F - DOS LAN Requester - GET START PARAMETERS
  39270.     AX = B80Fh
  39271.     CX = size of return data buffer
  39272.     ES:DI -> return data buffer
  39273. Return: AX = status
  39274.          00h     network started
  39275.          nonzero network not started
  39276.     CX = number of bytes returned in buffer
  39277.     ES:DI buffer filled
  39278.  
  39279. Format of return data buffer:
  39280. Offset    Size    Description
  39281.  00h    BYTE    major version
  39282.  01h    BYTE    minor version
  39283.  02h    WORD    configuration flags given when the network was started
  39284.         bit 0  /NVS != 0
  39285.         bit 1  /NMS != 0
  39286.         bit 2  /API
  39287.         bit 3  /HIM
  39288.         bit 4  /LIM
  39289.         bit 5  /ENC
  39290.         bit 6  /POP
  39291.         bit 7  /EMS
  39292.         bit 8  /RPL
  39293.         bits 9-12 Reserved
  39294.         bit 13    RDR started
  39295.         bit 14    RCV started
  39296.         bit 15    User is currently logged on
  39297.  04h 15 BYTEs    NET START machine name (space padded)
  39298.  13h    BYTE    00h
  39299.  14h 9    BYTEs    NET START domain name (NULL padded)
  39300.  1Dh    BYTE    00h
  39301.  1Eh 32 BYTEs    /WRK heuristics string (space padded, not terminated)
  39302.  3Eh    WORD    /SRV value
  39303.  40h    WORD    /ASG value
  39304.  42h    WORD    /NBC value
  39305.  44h    WORD    /NBS value
  39306.  46h    WORD    /BBC value
  39307.  48h    WORD    /BBS value
  39308.  4Ah    WORD    /PBC value
  39309.  4Ch    WORD    /PBS value
  39310.  4Eh    WORD    /PFS value
  39311.  50h    WORD    /PFT value
  39312.  52h    WORD    /PWT value
  39313.  54h    WORD    /KUC value
  39314.  56h    WORD    /KST value
  39315.  58h    WORD    /NVS value
  39316.  5Ah    WORD    /NMS value
  39317.  5Ch    WORD    /NDB value
  39318.  5Eh    WORD    /MBI value
  39319.  60h    BYTE    NetBIOS name number for machine name
  39320.  61h    BYTE    NetBIOS name number for domain name
  39321.  62h    WORD    NetBIOS sessions required for configuration
  39322.  64h    WORD    NetBIOS commands required for configuration
  39323.  66h    WORD    NetBIOS names required for configuration
  39324.  68h 128 BYTEs    NET START path (LANROOT)
  39325.  E8h    BYTE    00h
  39326. ----------2FB900-----------------------------
  39327. INT 2F - PC Network RECEIVER.COM - INSTALLATION CHECK
  39328.     AX = B900h
  39329. Return: AL = 00h if not installed
  39330.          FFh if installed
  39331. ----------2FB901-----------------------------
  39332. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM INT 2F HANDLER ADDRESS
  39333.     AX = B901h
  39334. Return: AL = ???
  39335.     ES:BX -> RECEIVER.COM INT 2F handler
  39336. Note:    allows more efficient execution by letting the caller bypass any other
  39337.       INT 2F handlers which have been added since RECEIVER.COM was
  39338.       installed
  39339. ----------2FB903-----------------------------
  39340. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM POST ADDRESS
  39341.     AX = B903h
  39342. Return: ES:BX -> POST handler
  39343. SeeAlso: AX=B803h,AX=B904h
  39344. ----------2FB904-----------------------------
  39345. INT 2F - PC Network RECEIVER.COM - SET RECEIVER.COM POST ADDRESS
  39346.     AX = B904h
  39347.     ES:BX -> new POST handler
  39348. SeeAlso: AX=B804h,AX=B903h
  39349. ----------2FB905-----------------------------
  39350. INT 2F - PC Network RECEIVER.COM - GET FILENAME
  39351.     AX = B905h
  39352.     DS:BX -> 128-byte buffer for filename 1
  39353.     DS:DX -> 128-byte buffer for filename 2
  39354. Return: buffers filled from RECEIVER.COM internal buffers
  39355. Note:    use of filenames is unknown, but one appears to be for storing messages
  39356. SeeAlso: AX=B906h
  39357. ----------2FB906-----------------------------
  39358. INT 2F - PC Network RECEIVER.COM - SET FILENAME
  39359.     AX = B906h
  39360.     DS:BX -> 128-byte buffer for filename 1
  39361.     DS:DX -> 128-byte buffer for filename 2
  39362. Return: RECEIVER.COM internal buffers filled from user buffers
  39363. Note:    use of filenames is unknown, but one appears to be for storing messages
  39364. SeeAlso: AX=B905h
  39365. ----------2FB908-----------------------------
  39366. INT 2F - PC Network RECEIVER.COM - UNLINK KEYBOARD HANDLER
  39367.     AX = B908h
  39368.     ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09
  39369. Note:    this call replaces the address to which RECEIVER.COM chains on an
  39370.       INT 09 without preserving the original value.     This allows a prior
  39371.       handler to unlink, but does not allow a new handler to be added
  39372.       such that RECEIVER gets the INT 09 first.
  39373. SeeAlso: AX=B808h
  39374. ----------2FBC00-----------------------------
  39375. INT 2F - Windows 3.0, DOS 5.0 EGA.SYS - INSTALLATION CHECK
  39376.     AX = BC00h
  39377. Return: AL = 00h not installed, OK to install
  39378.        = 01h not installed, not OK to install
  39379.        = FFh installed
  39380.         BX = 5456h ("TV")
  39381. Note:    AH=BCh is the default value, which may be changed by a command line
  39382.       parameter to any value between 80h and FFh
  39383. SeeAlso: AX=BC06h,INT 10/AH=FAh"EGA"
  39384. ----------2FBC06-----------------------------
  39385. INT 2F U - MS Windows 3.0, DOS 5.0 EGA.SYS - GET VERSION INFO
  39386.     AX = BC06h
  39387. Return: BX = 5456h ("TV")
  39388.     CH = major version
  39389.     CL = minor version
  39390.     DL = revision
  39391. SeeAlso: AX=BC00h,INT 10/AH=FAh"EGA"
  39392. ----------2FBE00-----------------------------
  39393. INT 2F - REDVIEW - INSTALLATION CHECK
  39394.     AX = BE00h
  39395. Return: AL = FFh if installed
  39396. Note:    REDVIEW is a public-domain TSR by Alexandr Novy and Petr Horak which
  39397.       copies data sent to standard output to standard error when the
  39398.       former has been redirected to a file, thus allowing the data to
  39399.       be seen on the screen at the same time it is captured in a file
  39400. ----------2FBF00-----------------------------
  39401. INT 2F - PC LAN PROGRAM REDIRIFS.EXE internal - INSTALLATION CHECK
  39402.     AX = BF00h
  39403. Return: AL = FFh if installed
  39404. ----------2FBF01-----------------------------
  39405. INT 2F U - PC LAN PROGRAM REDIRIFS.EXE internal - ???
  39406.     AX = BF01h
  39407.     ???
  39408. Return: ???
  39409. ----------2FBF80-----------------------------
  39410. INT 2F - PC LAN PROG REDIR.SYS internal - SET REDIRIFS ENTRY POINT
  39411.     AX = BF80h
  39412.     ES:DI -> FAR entry point to IFS handler in REDIRIFS
  39413. Return: AL = FFh if installed
  39414.         ES:DI -> internal workspace
  39415. Note:    all future IFS calls to REDIR.SYS are passed to the ES:DI entry point
  39416. ---------------------------------------------
  39417. Interrupt List, part 6 of 8
  39418. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  39419. ----------2FC0-------------------------------
  39420. INT 2F - MTEZ XpressFax Hardware TSR (CLASS2) - API
  39421.     AH = C0h
  39422.     AL = function code (01h to 15h)
  39423. Return: ???
  39424. SeeAlso: AX=C000h"MTEZ",AX=CB00h"MTEZ"
  39425. ----------2FC000-----------------------------
  39426. INT 2F - Novell ODI Link Support Layer (LSL.COM) - INSTALLATION CHECK
  39427.     AX = C000h
  39428. Return: AL = FFh
  39429.     ES:BX -> FAR entry point
  39430.     ES:SI -> signature string "LINKSUP$"
  39431. Note:    LSL.COM may use any multiplex number between C0h and FFh; it searches
  39432.       for itself in that range, and installs using the first free multiplex
  39433.       number in the range if not already loaded.
  39434.  
  39435. Call entry point with:
  39436.     BX = 0002h get entry points
  39437.         ES:SI -> buffer for entry point record (see below)
  39438.         Return: ES:SI buffer filled
  39439.  
  39440. Format of entry point record:
  39441. Offset    Size    Description
  39442.  00h    DWORD    pointer to ??? entry point in LSL
  39443.  04h    DWORD    pointer to ??? entry point in LSL
  39444. ----------2FC000-----------------------------
  39445. INT 2F - MTEZ XpressFax Hardware TSR (CLASS2) - INSTALLATION CHECK
  39446.     AX = C000h
  39447.     BX = 444Bh
  39448.     CX = 4A4Eh
  39449. Return: AL = status
  39450.         00h not installed, OK to install
  39451.         FFh installed
  39452.         BX = 646Bh
  39453.         CX = 6A6Eh
  39454. Note:    this TSR will use any free multiplex number from C0h to FFh
  39455. SeeAlso: AH=C0h"MTEZ"
  39456. ----------2FC000-----------------------------
  39457. INT 2F - AD-DOS - INSTALLATION CHECK
  39458.     AX = C000h
  39459. Return: AL = FFh if installed
  39460.         BX = 4144h ('AD')
  39461.         CX = 2D44h ('-D')
  39462.         DX = 4F53h ('OS')
  39463. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  39464.       MS Windows
  39465. Note:    AH=C0h is the default multiplex number; if this is already in use,
  39466.       After Dark will try successive values up to AH=FFh
  39467. SeeAlso: AX=C001h,AX=C003h,AX=C005h,AX=C007h,AX=C009h,AX=C020h
  39468. ----------2FC001ES0000-----------------------
  39469. INT 2F - AD-DOS - GET RESIDENT CODE SEGMENT
  39470.     AX = C001h
  39471.     ES = 0000h
  39472. Return: AL = 00h if successful
  39473.         ES = AD-DOS TSR Code Segment
  39474. SeeAlso: AX=C000h"AD-DOS"
  39475. ----------2FC002-----------------------------
  39476. INT 2F - AD-DOS - CHECK FOR NEW INPUT
  39477.     AX = C002h
  39478. Return: AL = 00h if succesful
  39479.         BX = status
  39480.         0000h no input since last check
  39481.         0001h new input available
  39482. Note:    this call also resets the new-input flag
  39483. SeeAlso: AX=C000h"AD-DOS",AX=C004h
  39484. ----------2FC003-----------------------------
  39485. INT 2F - AD-DOS - SET MINUTES TO WAIT
  39486.     AX = C003h
  39487.     BX = minutes to wait before blanking screen
  39488. Return: AL = 00h if successful
  39489. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  39490.       MS Windows
  39491. Notes:    AH=C0h is the default multiplex number; if this is already in use,
  39492.       After Dark will try successive values up to AH=FFh
  39493.     this call also resets the delay timer
  39494. SeeAlso: AX=C000h"AD-DOS",AX=C004h
  39495. ----------2FC004-----------------------------
  39496. INT 2F - AD-DOS - GET MINUTES TO WAIT
  39497.     AX = C004h
  39498. Return: AL = 00h if succesful
  39499.         BX = minutes to wait before blanking screen
  39500. SeeAlso: AX=C000h"AD-DOS",AX=C003h
  39501. ----------2FC005-----------------------------
  39502. INT 2F - AD-DOS - SET BLANKER STATUS
  39503.     AX = C005h
  39504.     BX = new state (0000h inactive, 0001h active) (default 0001h)
  39505. Return: AL = 00h if successful
  39506. SeeAlso: AX=C006h
  39507. ----------2F0C06-----------------------------
  39508. INT 2F - AD-DOS - GET BLANKER STATUS
  39509.     AX = C006h
  39510. Return: AL = 00h if successful
  39511.         BX = current state of screen blanker (0000h inactive, 0001h active)
  39512. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  39513.       MS Windows
  39514. Note:    AH=C0h is the default multiplex number; if this is already in use,
  39515.       After Dark will try successive values up to AH=FFh
  39516. SeeAlso: AX=C000h"AD-DOS",AX=C005h
  39517. ----------2F0C07-----------------------------
  39518. INT 2F - AD-DOS - SET HOT KEY
  39519.     AX = C007h
  39520.     BX = hot key
  39521.     CL = hot key shift status
  39522. Return: AL = 00h if successful
  39523. SeeAlso: AX=C008h
  39524. ----------2F0C08-----------------------------
  39525. INT 2F - AD-DOS - GET CURRENT HOT KEY
  39526.     AX = C008h
  39527. Return: AX = status
  39528.         0000h successful
  39529.         BX = Hot Key
  39530.         CL = Hot Key Shift Status
  39531.         0008h otherwise
  39532. SeeAlso: AX=C000h"AD-DOS",AX=C007h
  39533. ----------2F0C09-----------------------------
  39534. INT 2F - AD-DOS - UNBLANK MONITOR
  39535.     AX = C009h
  39536. Return: AL = 00h if successful
  39537. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  39538.       MS Windows
  39539. Notes:    AH=C0h is the default multiplex number; if this is already in use,
  39540.       After Dark will try successive values up to AH=FFh
  39541.     this function works by simulating keyboard activity
  39542. ----------2F0C0A-----------------------------
  39543. INT 2F - AD-DOS - ???
  39544.     AX = C00Ah
  39545. Return: AX = status
  39546.         0000h successful
  39547.         BH = ??
  39548.         BL = ??
  39549.         000Ah failed
  39550. ----------2F0C0B-----------------------------
  39551. INT 2F - AD-DOS - ???
  39552.     AX = C00Bh
  39553. Return: AX = status 
  39554.         0000h successful
  39555.         000Bh failed
  39556. ----------2F0C0C-----------------------------
  39557. INT 2F - AD-DOS - SET ??? INTERNAL FLAG TO 01h
  39558.     AX = C00Ch
  39559. Return: AX = status
  39560.         0000h successful
  39561.         000Ch failed
  39562. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  39563.       MS Windows
  39564. Note:    AH=C0h is the default multiplex number; if this is already in use,
  39565.       After Dark will try successive values up to AH=FFh
  39566. ----------2F0C0E-----------------------------
  39567. INT 2F - AD-DOS - SET PASSWORD STATUS
  39568.     AX = C00Eh
  39569.     BX = new state (0000h disabled, 0001h enabled)
  39570. Return: ???
  39571. SeeAlso: AX=C000h"AD-DOS",AX=C00Fh
  39572. ----------2F0C0F-----------------------------
  39573. INT 2F - AD-DOS - GET PASSWORD STATUS
  39574.     AX = C00Fh
  39575. Return: BX = current state (0000h disabled, 0001h enabled)
  39576. SeeAlso: AX=C00Eh
  39577. ----------2F0C20-----------------------------
  39578. INT 2F - AD-DOS - GET AND RESET VxD API STATUS
  39579.     AX = C020h
  39580. Return: AL = 00h if successful
  39581.         BX = VxD API Status
  39582.         0000h no error
  39583.         0001h error
  39584.         0100h neither Windows 3.X enhanced mode nor
  39585.             Windows/386 2.x is running
  39586.         0200h VM API entry point not found (VxD not installed)
  39587. Notes:    AH=C0h is the default multiplex number; if this is already in use,
  39588.       After Dark will try successive values up to AH=FFh
  39589.     this call resets the VxD API Status to zero
  39590. SeeAlso: AX=1602h,AX=1607h
  39591. ----------2FC050-----------------------------
  39592. INT 2F U - Explosiv 2.00 - INSTALLATION CHECK
  39593.     AX = C050h
  39594. Return: AL = 51h if installed
  39595. Notes:    Explosiv is a shareware animated screen blanker for DOS and Windows 3
  39596.       by Reidar Gresseth and Chris Hook
  39597.     AH=C0h is the default multiplex number, but may be reconfigured to
  39598.       any value from C0h to C9h
  39599. SeeAlso: AX=C052h
  39600. ----------2FC052-----------------------------
  39601. INT 2F U - Explosiv 2.00 - UNINSTALL
  39602.     AX = C052h
  39603.     DX:BX = address to return to on successful uninstall
  39604. Return: at specified address if successful
  39605.     AL = 53h on error
  39606. Note:    specified return address must have the segment of the caller's PSP
  39607. SeeAlso: AX=C050h
  39608. ----------2FC054-----------------------------
  39609. INT 2F U - Explosiv 2.00 - GET ???
  39610.     AX = C054h
  39611. Return: AL = ???
  39612. Note:    returns value set by AX=C057h
  39613. SeeAlso: AX=C057h
  39614. ----------2FC055-----------------------------
  39615. INT 2F U - Explosiv 2.00 - SET BLANKING INTERVAL
  39616.     AX = C055h
  39617.     BX = new interval in clock ticks
  39618. ----------2FC056-----------------------------
  39619. INT 2F U - Explosiv 2.00 - SET ???
  39620.     AX = C056h
  39621.     BL = ???
  39622. ----------2FC057-----------------------------
  39623. INT 2F U - Explosiv 2.00 - SET ???
  39624.     AX = C057h
  39625.     BL = ???
  39626. SeeAlso: AX=C054h
  39627. ----------2FC058-----------------------------
  39628. INT 2F U - Explosiv 2.00 - SET ???
  39629.     AX = C058h
  39630.     BL = ???
  39631. ----------2FC059-----------------------------
  39632. INT 2F U - Explosiv 2.00 - CLEAR ???
  39633.     AX = C059h
  39634. Note:    clears flag set by AX=C05Ah
  39635. SeeAlso: AX=C05Ah
  39636. ----------2FC05A-----------------------------
  39637. INT 2F U - Explosiv 2.00 - SET ???
  39638.     AX = C05Ah
  39639.     BL = ???
  39640. Note:    sets flag cleared by AX=C059h then stores BL
  39641. SeeAlso: AX=C059h,AX=C05Bh
  39642. ----------2FC05B-----------------------------
  39643. INT 2F U - Explosiv 2.00 - SET ???
  39644.     AX = C05Bh
  39645.     BL = ???
  39646. SeeAlso: AX=C05Ah,AX=C05Ch
  39647. ----------2FC05C-----------------------------
  39648. INT 2F U - Explosiv 2.00 - SET ???
  39649.     AX = C05Ch
  39650.     BL = ???
  39651. SeeAlso: AX=C05Bh
  39652. ----------2FC900BP0000-----------------------
  39653. INT 2F U - ThunderByte??? - INSTALLATION CHECK
  39654.     AX = C900h
  39655.     BP = 0000h
  39656. Return: AL = FFh if installed
  39657.         BP >= 0014h
  39658. Note:    called by TBSCANX
  39659. SeeAlso: AX=C987h,AX=CA00h
  39660. ----------2FC987-----------------------------
  39661. INT 2F U - ThunderByte??? - DISINFECT FILE???
  39662.     AX = C987h
  39663.     BX:DX -> filename
  39664.     BX:CX -> virus name
  39665. Return: AX = status
  39666.         0000h successful???
  39667. Note:    called by TBSCANX
  39668. SeeAlso: AX=CA00h
  39669. ----------2FC9FF-----------------------------
  39670. INT 2F C - STACKMAN - INSTALLATION BROADCAST
  39671.     AX = C9FFh
  39672.     BL = BCD version number
  39673.     CX = number of stacks
  39674.     DX = stack size in bytes
  39675. Notes:    called by STACKMAN when it goes resident to inform interested TSRs that
  39676.       its API is available
  39677.     the installation check consists of testing for the string "STACKXXX" at
  39678.       offset 0Ah from the INT B4 handler
  39679. SeeAlso: INT B4"STACKMAN",INT B5"STACKMAN"
  39680. ----------2FCA00BX5442-----------------------
  39681. INT 2F - TBSCANX - INSTALLATION CHECK
  39682.     AX = CA00h
  39683.     BX = 5442h ('TB')
  39684. Return:    AL = 00h not installed
  39685.        = FFh installed
  39686.         BX = 7462h ('tb') if BX was 5442h on entry
  39687. Note:    TBSCANX is a resident virus scanning module by Frans Veldman.  Programs
  39688.       may perform virus checks on themselves, other program files, or their
  39689.       data files by invoking the TBSCANX API.
  39690. SeeAlso: AX=4653h,AX=C900h
  39691. ----------2FCA01-----------------------------
  39692. INT 2F - TBSCANX - GET STATUS
  39693.     AX = CA01h
  39694. Return: AH = BCD version number (v2.2+)
  39695.        = CAh for versions before 2.2
  39696.     AL = state (00h = disabled, 01h = enabled)
  39697.     CX = number of signatures which will be searched
  39698. ---v2.0---
  39699.     BX = EMS handle, 0000h if not using EMS
  39700. ---v2.3+---
  39701.     BX = segment of swap area, 0000h if not swapped
  39702.     DX = EMS or XMS handle (XMS handle if BX=0000h), FFFFh if not using EMS
  39703. SeeAlso: AX=CA02h
  39704. ----------2FCA02-----------------------------
  39705. INT 2F - TBSCANX - SET STATE
  39706.     AX = CA02h
  39707.     BL = new state (00h = disabled, 01h = enabled)
  39708. SeeAlso: AX=CA01h
  39709. ----------2FCA03-----------------------------
  39710. INT 2F - TBSCANX - SCAN BUFFER
  39711.     AX = CA03h
  39712.     CX = size of buffer
  39713.     DS:DX -> buffer containing data to scan
  39714. Return: CF clear if no virus signatures found
  39715.         BX,ES destroyed
  39716.     CF set if signature found
  39717.         ES:BX -> ASCIZ virus name (v2.3+)
  39718.         DS:DX -> ASCIZ virus name (v2.0)
  39719.     AX,CX,DX destroyed (v2.3+)
  39720.     all other registers except CS:IP and SS:SP destroyed (v2.0)
  39721. SeeAlso: AX=CA04h
  39722. ----------2FCA04-----------------------------
  39723. INT 2F - TBSCANX - SCAN FILE
  39724.     AX = CA04h
  39725.     DS:DX -> filename
  39726. Return: CF clear if no virus signatures found
  39727.         BX,ES destroyed
  39728.     CF set if signature found
  39729.         ES:BX -> ASCIZ virus name
  39730.     AX,CX,DX destroyed
  39731. Note:    this function requires at least 4K free memory
  39732. SeeAlso: AX=CA03h
  39733. ----------2FCAFEBX0000-----------------------
  39734. INT 2F U - THELP v3.0 - INSTALLATION CHECK
  39735.     AX = CAFEh
  39736.     BX = 0000h
  39737. Return: BX = segment of resident code if installed
  39738.        = 0000h if not installed
  39739. SeeAlso: AX=5453h
  39740. ----------2FCB00-----------------------------
  39741. INT 2F - Communicating Applications Specification - INSTALLATION CHECK
  39742.     AX = CB00h
  39743. Return: AL = status
  39744.         00h not installed, OK to install
  39745.         01h not installed, not OK to install
  39746.         FFh installed
  39747. Note:    AH = CBh is the default identifier, but may be reconfigured
  39748. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=CB0Eh,AX=CBDCh
  39749. ----------2FCB00BX4D53-----------------------
  39750. INT 2F - MTEZ XpressFax CASMGR - INSTALLATION CHECK
  39751.     AX = CB00h
  39752.     BX = 4D53h
  39753.     CX = 4949h
  39754. Return: AL = status
  39755.         00h not installed, OK to install
  39756.         01h not installed, not OK to install
  39757.         FFh installed
  39758.         BX = 6D73h
  39759.         CX = 6969h
  39760. Note:    this function is equivalent to the standard CASMGR installation check,
  39761.       but uses the additional magic values to identify which CAS is
  39762.       installed
  39763. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=C000h"MTEZ",AX=CB0Eh,AX=CB16h
  39764. ----------2FCB01-----------------------------
  39765. INT 2F - Communicating Applications Specification - SUBMIT A TASK
  39766.     AX = CB01h
  39767.     DS:DX -> ASCIZ name of task control file
  39768. Return: AX >= 0: event handle
  39769.        < 0: error code
  39770. Note:    files needed for an event must be kept until task is complete or error
  39771. SeeAlso: AX=CB0Bh,AX=CB15h
  39772.  
  39773. Error codes (AH = class, AL = subcode, value passed back is 2's complement):
  39774.   Class 00h    --- FAX warnings
  39775.     Subcode 00h    no error
  39776.         02h    bad scanline count
  39777.         03h    page sent with errors, could not retransmit
  39778.         04h    received data lost
  39779.         05h    invalid or missing logo file
  39780.         06h    filename does not match nonstandard format (NSF) header
  39781.         07h    file size does not match NSF header
  39782.   Class 01h    --- DOS warnings (data was sent)
  39783.     Subcode 01h    invalid function
  39784.         05h    access denied
  39785.         06h    invalid handle
  39786.         others    see INT 21/AH=59h
  39787.   Class 02h    --- fatal errors (data not sent)
  39788.     Subcode    00h    multiplex handler failed
  39789.         01h    unknown command
  39790.         02h    bad event handle
  39791.         03h    FIND NEXT attempted before FIND FIRST
  39792.         04h    no more events
  39793.         07h    invalid queue type
  39794.         08h    bad control file
  39795.         09h    communication board busy
  39796.         0Ah    invalid command parameter
  39797.         0Bh    can't uninstall resident code
  39798.         0Ch    file exists
  39799.         80h    unknown task type
  39800.         81h    bad phone number
  39801.         82h    bad .PCX file header
  39802.         83h    unexpected EOF
  39803.         84h    unexpected disconnect
  39804.         85h    too many dialing retries
  39805.         86h    no file specified for send
  39806.         87h    communication board timeout
  39807.         88h    received too many pages (>1023) of data
  39808.         89h    manual connect initiated too long ago
  39809.         8Ah    hardware command set error
  39810.         8Bh    bad NonStandard Format (NSF) header file
  39811.   Class 03h    --- fatal DOS errors
  39812.     Subcode 02h    file not found
  39813.         03h    path not found
  39814.         others    see INT 21/AH=59h
  39815.   Class 04h    --- FAX errors
  39816.     Subcode 01h    remote unit not Group 3 compatible
  39817.         02h    remote unit did not send capabilities
  39818.         03h    other FAX machine incompatible
  39819.         04h    other FAX incapable of file transfers
  39820.         05h    exceeded retrain or FAX resend limit
  39821.         06h    line noise or failure to agree on bit rate
  39822.         07h    remote disconnected after receiving data
  39823.         08h    no response from remote after sending data
  39824.         09h    remote's capabilities incompatible
  39825.         0Ah    no dial tone (v1.2+)
  39826.         0Bh    invalid response from remote unit after sending data
  39827.         0Dh    phone line dead or remote unit disconnected
  39828.         0Eh    timeout while waiting for secondary dial tone (v1.2+)
  39829.         11h    invalid command from remote after receiving data
  39830.         15h    tried to receive from incompatible hardware
  39831.         5Ch    received data overflowed input buffer
  39832.         5Dh    remote unexpectedly stopped sending data
  39833.         5Eh    other FAX machine jammed (no data sent)
  39834.         5Fh    remote took too long to send fax scan line
  39835.         63h    can't get through to remote unit
  39836.         64h    user canceled event
  39837.   Class 05h    --- application-specific (v1.2+)
  39838.   ---Intel FAXPOP.EXE
  39839.     Subcode 00h    tried to send while in graphics mode
  39840.         01h    insufficient disk space
  39841.         02h    internal buffer overflow
  39842.   Class 06h    --- CAS implementation-specific (v1.2+)
  39843. ----------2FCB02-----------------------------
  39844. INT 2F - Communicating Applications Specification - ABORT CURRENT EVENT
  39845.     AX = CB02h
  39846. Return: AX >= 0: event handle of aborted event
  39847.        < 0: error code (see AX=CB01h)
  39848. Note:    termination could take up to 30 seconds
  39849. SeeAlso: AX=CB08h,AX=CB10h
  39850. ----------2FCB05-----------------------------
  39851. INT 2F - Communicating Applications Specification - FIND FIRST QUEUE ENTRY
  39852.     AX = CB05h
  39853.     CX = status of events to find
  39854.         0000h successful completion
  39855.         0001h waiting to be processed
  39856.         0002h number has been dialed
  39857.         0003h connection established, sending
  39858.         0004h connection established, receiving
  39859.         0005h event aborted
  39860.         FFFFh find any event, regardless of status
  39861.         other negative values, match error code
  39862.     DH = direction
  39863.         00h chronological order, earliest to latest
  39864.         01h reverse chronological order, latest to earliest
  39865.     DL = queue to search
  39866.         00h task queue
  39867.         01h receive queue
  39868.         02h log queue
  39869. Return: AX = 0000h successful
  39870.         BX = event handle for found event
  39871.        < 0       error code (see AX=CB01h)
  39872. SeeAlso: AX=CB06h,AX=CB07h
  39873. ----------2FCB06-----------------------------
  39874. INT 2F - Communicating Applications Specification - FIND NEXT QUEUE ENTRY
  39875.     AX = CB06h
  39876.     DL = queue to search
  39877.         00h task queue
  39878.         01h receive queue
  39879.         02h log queue
  39880. Return: AX = 0000h successful
  39881.         BX = event handle for found event
  39882.        < 0       error code (see AX=CB01h)
  39883. Note:    direction of search is same as preceding FIND FIRST call
  39884. SeeAlso: AX=CB05h
  39885. ----------2FCB07-----------------------------
  39886. INT 2F - Communicating Applications Specification - OPEN FILE
  39887.     AX = CB07h
  39888.     BX = event handle from find (AL=05h,06h) or submit task (AL=01h)
  39889.     CX = receive file number (ignored for task queue and log queue)
  39890.         0000h  open receive control file
  39891.         N       open Nth received data file
  39892.     DL = queue
  39893.         00h task queue
  39894.         01h receive queue control file or received file, as given by CX
  39895.         02h log queue
  39896.         03h group file in task queue (v1.2+)
  39897.         04h group file in log queue (v1.2+)
  39898. Return: AX = 0000h successful
  39899.         BX = DOS file handle for requested file
  39900.        < 0       error code (see AX=CB01h)
  39901. Note:    the returned file handle has been opened in read-only mode and should
  39902.       be closed with INT 21/AH=3Eh after use
  39903. SeeAlso: AX=CB01h,AX=CB05h,AX=CB14h
  39904. ----------2FCB08-----------------------------
  39905. INT 2F - Communicating Applications Specification - DELETE FILE
  39906.     AX = CB08h
  39907.     BX = event handle
  39908.     CX = receive file number
  39909.         0000h delete ALL received files and receive control file
  39910.         N      delete Nth received file
  39911.     DL = queue
  39912.         00h delete control file in task queue and corresponding group file
  39913.         if it exists
  39914.         01h delete file in receive queue, as given by CX
  39915.         02h delete control file in log queue (individual deletions not
  39916.         recommended, to maintain integrity of log) and corresponding
  39917.         group file if it exists
  39918. Return: AX = 0000h successful
  39919.        < 0       error code (see AX=CB01h)\
  39920. SeeAlso: AX=CB02h,AX=CB09h
  39921. ----------2FCB09-----------------------------
  39922. INT 2F - Communicating Applications Specification - DELETE ALL FILES IN Q
  39923.     AX = CB09h
  39924.     DL = queue
  39925.         00h delete all control files in task queue, including all group
  39926.         files
  39927.         01h delete all files in receive queue
  39928.         02h delete all control files in log queue, including all group
  39929.         files
  39930. Return: AX = 0000h successful
  39931.        < 0       error code (see AX=CB01h)
  39932. SeeAlso: AX=CB08h
  39933. ----------2FCB0A-----------------------------
  39934. INT 2F - Communicating Applications Specification - GET EVENT DATE
  39935.     AX = CB0Ah
  39936.     BX = event handle
  39937.     DL = queue
  39938.         00h task queue
  39939.         01h receive queue
  39940.         02h log queue
  39941. Return: AX = 0000h successful
  39942.         CX = year
  39943.         DH = month
  39944.         DL = day
  39945.        < 0       error code (see AX=CB01h)
  39946. SeeAlso: AX=CB0Bh,AX=CB0Ch
  39947. ----------2FCB0B-----------------------------
  39948. INT 2F - Communicating Applications Specification - SET TASK DATE
  39949.     AX = CB0Bh
  39950.     BX = event handle (task event only)
  39951.     CX = year
  39952.     DH = month
  39953.     DL = day
  39954. Return: AX = 0000h successful
  39955.        < 0       error code (see AX=CB01h)
  39956. Note:    setting a task's date and time to before the current date and time
  39957.       causes it to execute immediately
  39958. SeeAlso: AX=CB01h,AX=CB0Ah,AX=CB0Dh
  39959. ----------2FCB0C-----------------------------
  39960. INT 2F - Communicating Applications Specification - GET EVENT TIME
  39961.     AX = CB0Ch
  39962.     BX = event handle
  39963.     DL = queue
  39964.         00h task queue
  39965.         01h receive queue
  39966.         02h log queue
  39967. Return: AX = 0000h successful
  39968.         CH = hour
  39969.         CL = minute
  39970.         DH = second
  39971.         DL = 00h
  39972.        < 0       error code (see AX=CB01h)
  39973. SeeAlso: AX=CB0Ah,AX=CB0Dh
  39974. ----------2FCB0D-----------------------------
  39975. INT 2F - Communicating Applications Specification - SET TASK TIME
  39976.     AX = CB0Dh
  39977.     BX = event handle (task events only)
  39978.     CH = hour
  39979.     CL = minute
  39980.     DH = second
  39981.     DL unused
  39982. Return: AX = 0000h successful
  39983.        < 0       error code (see AX=CB01h)
  39984. Note:    setting a task's date and time to before the current date and time
  39985.       causes it to execute immediately
  39986. SeeAlso: AX=CB0Bh,AX=CB0Ch,AX=CB10h
  39987. ----------2FCB0E-----------------------------
  39988. INT 2F - Communicating Applications Specification - GET EXTERNAL DATA BLOCK
  39989.     AX = CB0Eh
  39990.     DS:DX -> 256-byte buffer
  39991. Return: AX = 0000h successful
  39992.         buffer filled
  39993.        < 0       error code (see AX=CB01h)
  39994.  
  39995. Format of external data block:
  39996. Offset    Size    Description
  39997.  00h    BYTE    CAS major version
  39998.  01h    BYTE    CAS minor version
  39999.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  40000.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  40001.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  40002.  60h 32 BYTEs    ASCIZ default sender name
  40003.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  40004.  95h 107 BYTEs    reserved
  40005. ----------2FCB0F-----------------------------
  40006. INT 2F - Communicating Applications Specification - GET/SET AUTORECEIVE
  40007.     AX = CB0Fh
  40008.     DL = subfunction
  40009.         00h get current autoreceive state
  40010.         01h set autoreceive state
  40011.         DH = number of rings before answer, 00h = never
  40012. Return: AX = 0000h autoreceive disabled
  40013.        = N       number of rings before answer
  40014.        < 0       error code (see AX=CB01h)
  40015. ----------2FCB10-----------------------------
  40016. INT 2F - Communicating Applications Specification - GET CURRENT EVENT STATUS
  40017.     AX = CB10h
  40018.     DS:DX -> 512-byte buffer
  40019. Return: AX = 0000h successful
  40020.         BX = event handle of current event or negative error code if
  40021.             no current event
  40022.         buffer filled
  40023.        < 0       error code (see AX=CB01h)
  40024. SeeAlso: AX=CB02h,AX=CB0Dh
  40025.  
  40026. Format of status area:
  40027. Offset    Size    Description
  40028.  00h    BYTE    event type
  40029.         00h send
  40030.         01h receive
  40031.         02h polled send
  40032.         03h polled receive
  40033.         04h to 7Fh reserved
  40034.         FFh serious hardware error
  40035.  01h    BYTE    transfer type
  40036.         00h 200x200 dpi, FAX mode
  40037.         01h 100x200 dpi, FAX mode
  40038.         02h file transfer mode
  40039.         03h to 7Fh reserved
  40040.  02h    WORD    event status 
  40041.         0000h completed successfully
  40042.         0001h waiting
  40043.         0002h number dialed
  40044.         0003h connected, sending
  40045.         0004h connected, receiving
  40046.         0005h aborted
  40047.         0006h to 007Fh reserved
  40048.         0080h to 7FFFh application-specific events
  40049.         8000h to FFFFh error codes
  40050.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  40051.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  40052.  08h    WORD    number of files to transfer, max 7FFFh
  40053.  0Ah    WORD    offset of file transfer record
  40054.  0Ch 47 BYTEs    ASCIZ phone number to call
  40055.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  40056.  7Bh    BYTE    reserved (00h)
  40057.  7Ch    BYTE    connect time, seconds
  40058.  7Dh    BYTE    connect time, minutes
  40059.  7Eh    BYTE    connect time, hours
  40060.  7Fh    DWORD    total number of pages in all files
  40061.  83h    DWORD    pages already transmitted 
  40062.  87h    WORD    number of files already transmitted
  40063.  89h    BYTE    cover page flag
  40064.         00h don't transmit cover page
  40065.         01h transmit cover page
  40066.         02h to 7Fh reserved
  40067.  8Ah    WORD    total number of transmission errors
  40068.  8Ch 78 BYTEs    reserved (zeros)
  40069.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  40070.  EFH 32 BYTEs    ASCIZ destination name
  40071. 10Fh 32 BYTEs    ASCIZ sender name
  40072. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  40073. 17Fh 128 BYTEs    file transfer record for current event (see below)
  40074.  
  40075. Format of file transfer record:
  40076. Offset    Size    Description
  40077.  00h    BYTE    file type (ignored unless FAX)
  40078.         00h ASCII
  40079.         01h PCX
  40080.         02h DCX
  40081.         03h to 7Fh reserved
  40082.  01h    BYTE    text size for ASCII FAX file
  40083.         00h = 80 columns by 66 lines (11 inches)
  40084.         01h = 132 columns by 88 lines (11 inches)
  40085.         02h to 7Fh reserved
  40086.  02h    BYTE    status of file
  40087.         00h untouched
  40088.         01h opened
  40089.         02h moved
  40090.         03h deleted
  40091.         04h not yet received
  40092.         05h to 7Fh reserved
  40093.  03h    DWORD    bytes already transmitted
  40094.  07h    DWORD    file size in bytes
  40095.  0Bh    WORD    pages alread transmitted
  40096.  0Dh    WORD    number of pages in file
  40097.  0Fh 80 BYTEs    ASCIZ filename
  40098.  5Fh    BYTE    1/8 inch page length
  40099.         if page length below set to 01h through 7Fh, this value 
  40100.         specifies additional 1/8 inch increments to page length
  40101.  60h    BYTE    page length
  40102.         00h = 11 inches
  40103.         01h to 7Fh = page length is this number of inches plus value of
  40104.             1/8 inch field above
  40105.         80h to FEh reserved
  40106.         FFh = ASCII pages ending with formfeed
  40107.  61h 31 BYTEs    reserved (zeros)
  40108. ----------2FCB11-----------------------------
  40109. INT 2F - Communicating Applications Specification - GET QUEUE STATUS
  40110.     AX = CB11h
  40111.     DL = queue to get status of
  40112.         00h task queue
  40113.         01h receive queue
  40114.         02h log queue
  40115.         03h send events (v1.2+)
  40116.         04h receive events (v1.2+)
  40117. Return: AX >= 0     total number of changes made to queue, modulo 32768
  40118.         BX = number of control files currently in queue
  40119.         CX = number of received files (zero for task and log queues)
  40120.     AX < 0    error code (see AX=CB01h)
  40121. SeeAlso: AX=CB12h
  40122. ----------2FCB11DL03-------------------------
  40123. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF SEND EVENTS
  40124.     AX = CB11h
  40125.     DL = 03h
  40126. Return: AX = number of successful sends since resident manager started
  40127.     BX = number of unsuccessful sends, including warnings
  40128. SeeAlso: AX=CB11h/DL=04h
  40129. ----------2FCB11DL04-------------------------
  40130. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF RECEIVE EVENTS
  40131.     AX = CB11h
  40132.     DL = 04h
  40133. Return:    AX = number of received file events since resident manager started
  40134.     BX = number of received FAX events
  40135. SeeAlso: AX=CB11h/DL=03h
  40136. ----------2FCB12-----------------------------
  40137. INT 2F - Communicating Applications Specification - GET HARDWARE STATUS
  40138.     AX = CB12h
  40139.     DS:DX -> 128-byte status buffer
  40140. Return: AX = 0000h successful
  40141.         buffer filled with hardware-dependent status information
  40142.        < 0       error code (see AX=CB01h)
  40143. SeeAlso: AX=CB10h,AX=CB11h
  40144.  
  40145. Format of status buffer for Intel Connection CoProcessor:
  40146. Offset    Size    Description
  40147.  00h    BYTE    bit flags
  40148.         bit 7: hardware busy sending or receiving
  40149.         bit 6: last page of data
  40150.         bit 5: no data on current page
  40151.         bit 4: retransmit request for current page being transmitted
  40152.         bit 3: NSF mode active
  40153.         bits 2-0: reserved
  40154.  01h    BYTE    number of kilobytes of free buffer space
  40155.  02h    BYTE    page buffer status
  40156.         bit 7: Connection CoProcessor has documents to send
  40157.         bits 6-0: number of pages in buffer
  40158.  03h    BYTE    number of retries left for dialing number
  40159.  04h    BYTE    page number to retransmit
  40160.  05h    BYTE    communications status
  40161.         bit 7: originating call
  40162.         bit 6: FAX message to be sent
  40163.         bit 5: on line
  40164.         bit 4: ring detected and receive enabled
  40165.         bit 3: buffer dumped on receive
  40166.         bits 2-0: hardware sequence state
  40167.             000 idle
  40168.             001 dial
  40169.             010 answer
  40170.             011 transmit
  40171.             100 receive
  40172.             101 pre-message
  40173.             110 post-message
  40174.             111 disconnect
  40175.  06h    BYTE    baud rate
  40176.         bit 7: reserved
  40177.         bits 6-4: baud rate
  40178.             000 = 300 baud    (V.21 SDLC or HDLC mode)
  40179.             100 = 2400 baud (V.27 ter)
  40180.             101 = 4800 baud (V.27 ter)
  40181.             110 = 7200 baud (V.29)
  40182.             111 = 9600 baud (V.29)
  40183.         bits 3-0: reserved, should be 0110
  40184.  07h  3 BYTEs    reserved
  40185.  0Ah    BYTE    hardware status
  40186.         bit 7: modem option installed
  40187.         bit 6: Connection CoProcessor has control of DAA (not latched)
  40188.         bit 5: on line (not latched)
  40189.         bit 4: ring detected (not latched)
  40190.         bit 3: data in command buffer (not latched)
  40191.         bit 2: set if using DMA channel 1, clear if using DMA channel 3
  40192.         bit 1: line length compensation bit 1 set (not latched)
  40193.         bit 0: line length compensation bit 0 set (not latched)
  40194.  0Bh    BYTE    switch states
  40195.         bit 7: reserved
  40196.         bit 6: unused
  40197.         bit 5: spare switch open
  40198.         bit 4: FAX ADR1 switch open
  40199.         bit 3: FAX ADR0 switch open
  40200.         bit 2: alternate interrupt switch open
  40201.         bit 1: COM SEL 1 switch open
  40202.         bit 0: COM SEL 0 switch open
  40203.             Note: valid combinations of bits 0-2 are
  40204.                 000  COM2 IRQ3 IObase 2F8h
  40205.                 001  COM1 IRQ4 IObase 3F8h
  40206.                 010  COM4 IRQ3 IObase 2E8h
  40207.                 011  COM3 IRQ4 IObase 3E8h
  40208.                 110  COM4 IRQ2 IObase 2E8h
  40209.                 111  COM3 IRQ5 IObase 3E8h
  40210.  0Ch    BYTE    bit flags
  40211.         bit 7: reserved
  40212.         bit 6: auxiliary relay forced ON
  40213.         bit 5: modem select relay forced ON
  40214.         bit 4: offhook relay forced ON
  40215.         bit 3: 9600 bps enabled
  40216.         bit 2: 7200 bps enabled
  40217.         bit 1: 4800 bps enabled
  40218.         bit 0: 2400 bps enabled
  40219.  0Dh    BYTE    reserved
  40220.  0Eh    WORD    error count (only valid while busy, reset when idle)
  40221.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  40222.  14h    BYTE    'A' if Connection CoProcessor board present
  40223.  15h  9 BYTEs    reserved
  40224.  1Eh 21 BYTEs    ASCIZ CCITT identification
  40225.  33h 77 BYTEs    reserved
  40226.  
  40227. Format of status buffer for Intel SatisFAXtion board:
  40228. Offset    Size    Description
  40229.  00h    BYTE    connection status flags
  40230.         bit 7: busy in T.30 CCITT fax protocol
  40231.         bit 6: data on current page/file (only used for block xfers)
  40232.         bit 5: retransmission of last page requested
  40233.         bit 4: in file transfer mode
  40234.         bit 3: data in buffer
  40235.         bit 2: data buffer dumped on receive
  40236.         bit 1: 200x100 dpi resolution instead of 200x200 dpi
  40237.         bit 0: data modem in use, FAX image modem not available
  40238.  01h    BYTE    board state
  40239.         bit 7: reserved
  40240.         bit 6: handset jack active, data and FAX modems not available
  40241.         bits 5-3: current bit rate
  40242.             000     300 bps (V.21 HDLC)
  40243.             100 2400 bps (V.27 ter)
  40244.             101 4800 bps (V.27 ter)
  40245.             110 7200 bps (V.29)
  40246.             111 9600 bps (V.29)
  40247.         bits 2-0: T.30 CCITT protocol state
  40248.             000 idle
  40249.             001 dialing
  40250.             010 answering
  40251.             011 transmitting
  40252.             100 receiving
  40253.             101 pre-message
  40254.             110 post-message
  40255.             111 disconnect
  40256.  02h    BYTE    number of KB free in buffer
  40257.  03h    BYTE    number of pages or files in buffer
  40258.  04h    BYTE    number of redials remaining on current number
  40259.  05h    BYTE    FAX page number to retransmit
  40260.  06h    BYTE    current page/file in block transfer
  40261.  07h    BYTE    number of rings received (only if auto-answer enabled)
  40262.  08h    WORD    error count
  40263.  0Ah    DWORD    length of file being transferred
  40264.  0Eh  6 BYTEs    reserved
  40265.  14h    BYTE    'B' is SatisFAXtion board present
  40266.  15h 13 BYTEs    ASCIZ transfer agent name
  40267.  22h  5 BYTEs    ASCIZ transfer agent version number
  40268.  27h 13 BYTEs    ASCIZ resident loader name
  40269.  34h  5 BYTEs    ASCIZ resident loader version number
  40270.  39h 21 BYTEs    ASCIZ remote CSID
  40271.  4Eh 13 BYTEs    ASCIZ resident manager name
  40272.  5Bh  5 BYTEs    ASCIZ resident manager version number
  40273.  60h 32 BYTEs    reserved
  40274. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  40275.       by examining the byte at offset 14h
  40276. ----------2FCB13DL00-------------------------
  40277. INT 2F - Communicating Applications Specification - GET DIAGNOSTICS RESULTS
  40278.     AX = CB13h
  40279.     DL = 00h
  40280. Return: AX = 0040h in progress
  40281.        >= 0       passed
  40282.        < 0       hardware-dependent failure code (see below)
  40283. SeeAlso: AX=CB13h/DL=01h
  40284.  
  40285. Intel Connection CoProcessor failure codes:
  40286.     bit 3: 9600 bps FAX modem module failed
  40287.     bit 2: SDLC chip failed
  40288.     bit 1: RAM failed
  40289.     bit 0: ROM checksum failed
  40290.  
  40291. Intel SatisFAXtion failure codes:
  40292.     bit 1: 2400 bps data modem failed
  40293.     bit 0: 9600 bps FAX modem failed
  40294. ----------2FCB13DL01-------------------------
  40295. INT 2F - Communicating Applications Specification - START DIAGNOSTICS
  40296.     AX = CB13h
  40297.     DL = 01h
  40298. Return: AX = 0000h successfully started
  40299.        < 0       error code (see AX=CB01h)
  40300. SeeAlso: AX=CB13h/DL=00h
  40301. ----------2FCB14-----------------------------
  40302. INT 2F - Communicating Applications Specification - MOVE RECEIVED FILE
  40303.     AX = CB14h
  40304.     BX = event handle
  40305.     CX = receive file number
  40306.          0001h first received file
  40307.          N       Nth received file
  40308.     DS:DX -> ASCIZ string specifying new name for file (must not exist)
  40309. Return: AX = 0000h successful
  40310.        < 0       error code (see AX=CB01h)
  40311. ----------2FCB15-----------------------------
  40312. INT 2F - Communicating Applications Specification - SUBMIT FILE TO SEND
  40313.     AX = CB15h
  40314.     DS:DX -> variable-length data area (see below)
  40315. Return: AX >= 0    event handle
  40316.        < 0    error code (see AX=CB01h)
  40317. SeeAlso: AX=CB01h
  40318.  
  40319. Format of data area:
  40320. Offset    Size    Description
  40321.  00h    BYTE    transfer type
  40322.         00h = 200x200 dpi, fax mode
  40323.         01h = 100x200 dpi, fax mode
  40324.         02h = file transfer mode
  40325.         03h to 7Fh reserved
  40326.  01h    BYTE    text size
  40327.         00h = 80 columns
  40328.         01h = 132 columns
  40329.         02h to 7Fh reserved
  40330.  02h    WORD    time to send (DOS packed time format, see INT 21/AX=5700h)
  40331.  04h    WORD    date to send (DOS packed date format, see INT 21/AX=5700h)
  40332.  06h 32 BYTEs    ASCIZ destination name
  40333.  26h 80 BYTEs    ASCIZ name of file to send
  40334.  76h 47 BYTEs    ASCIZ phone number to dial
  40335.  A5h 64 BYTEs    ASCIZ application-specific tag string
  40336.  E5h    BYTE    reserved (00h)
  40337.  E6h    BYTE    cover page
  40338.         00h don't send cover page
  40339.         01h send cover page
  40340.         02h to 7Fh reserved
  40341.  E7h 23 BYTEs    reserved (zeros)
  40342.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  40343.         set to 01h)
  40344. ----------2FCB16BX1234-----------------------
  40345. INT 2F - Communicating Applications Spec v1.2+ - UNLOAD RESIDENT MANAGER
  40346.     AX = CB16h
  40347.     BX = 1234h
  40348.     CX = 5678h
  40349.     DX = 9ABCh
  40350. Return: AX = 0000h successful
  40351.        < 0       error code
  40352. Note:    the MTEZ XpressFax CASMGR ignores the values in BX,CX, and DX
  40353. SeeAlso: AX=C000h"MTEZ",AX=CB00h
  40354. ----------2FCB17-----------------------------
  40355. INT 2F - Communicating Applications Spec v1.2+ - SET COVER PAGE STATUS
  40356.     AX = CB17h
  40357.     BX = event handle
  40358.     CL = cover page status
  40359.         00h not read
  40360.         01h read by user
  40361. Return: AX = 0000h successful
  40362.        < 0       error code
  40363. ----------2FCB80-----------------------------
  40364. INT 2F - Intel SatisFAXtion CASMGR - ???
  40365.     AX = CB80h
  40366.     ???
  40367. Return: ???
  40368. ----------2FCB81-----------------------------
  40369. INT 2F - Intel SatisFAXtion CASMGR - ???
  40370.     AX = CB81h
  40371.     ???
  40372. Return: ???
  40373. ----------2FCB82-----------------------------
  40374. INT 2F - Intel SatisFAXtion CASMGR - ???
  40375.     AX = CB82h
  40376.     ???
  40377. Return: ???
  40378. ----------2FCBDCBL56-------------------------
  40379. INT 2F - Comwave Microfax Specification - GET STATUS ARRAY
  40380.     AX = CBDCh
  40381.     BL = 56h
  40382.     BH = line number (starts with 1)
  40383.     CX:DX -> 32-byte status buffer or 80 character string
  40384. Return: AX = number of cards installed, or FFFFh on error
  40385. Program: Comwave manufacturers the Microfax line of fax cards which are a high-
  40386.       performance multi-card FAX solution for OEMs.
  40387. Note:    defaults to AH=CBh but can be changed
  40388. SeeAlso: AX=CBDDh,AX=DA00h
  40389. ----------2FCBDDBL56-------------------------
  40390. INT 2F - Comwave Microfax Specification - COMMAND SUBMISSION
  40391.     AX = CBDDh
  40392.     BL = 56h
  40393.     BH = ?
  40394.     CX:DX -> command to execute
  40395. Return: AX = status
  40396.         0000h success
  40397.         FFFFh on error
  40398. SeeAlso: AH=2Ah,AX=CBDCh,AX=80FBh
  40399. ----------2FCC--SI5453-----------------------
  40400. INT 2F U - Qualitas Qcach v4.00
  40401.     AH = CCh
  40402.     SI = 5453h or 7473h
  40403.     AL = ???
  40404.     DL = 00h or ???
  40405. Return: SI = 7473h
  40406.     ???
  40407. ----------2FCD00-----------------------------
  40408. INT 2F - Intel Image Processing Interface - INSTALLATION CHECK
  40409.     AX = CD00h
  40410. Return: AL = 00h not installed, OK to install
  40411.          01h not installed, not OK to install
  40412.          FFh installed
  40413. SeeAlso: AX=CD02h"Image"
  40414. ----------2FCD00-----------------------------
  40415. INT 2F - SWELL.EXE - INSTALLATION CHECK
  40416.     AX = CD00h
  40417. Return: AX = 00FFh installed
  40418.         BH = major version
  40419.         BL = minor version
  40420. Note:    SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child
  40421.       process with INT 21/AH=4Bh
  40422. ----------2FCD01-----------------------------
  40423. INT 2F - Intel Image Processing Interface - SET DEVICE NAME
  40424.     AX = CD01h
  40425.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  40426. Return: AL = 00h successful
  40427.         CX:BX -> internal character device name
  40428.        = 80h error
  40429. ----------2FCD01-----------------------------
  40430. INT 2F - SWELL.EXE - SUSPEND ONCE
  40431.     AX = CD01h
  40432. Return: AX = 0000h
  40433. SeeAlso: AX=CD02h"SWELL"
  40434. ----------2FCD02-----------------------------
  40435. INT 2F - Intel Image Processing Interface - GET VERSION NUMBER
  40436.     AX = CD02h
  40437. Return: AL = 00h/01h successful
  40438.         BH = major version number (BCD)
  40439.         BL = minor version number (BCD)
  40440.        = 80h error
  40441. Note:    if return AL = 01h, the IPI supports network redirection
  40442. SeeAlso: AX=CD00h"Image"
  40443. ----------2FCD02-----------------------------
  40444. INT 2F - SWELL.EXE - SUSPEND
  40445.     AX = CD02h
  40446. Return: AX = 0000h
  40447. SeeAlso: AX=CD03h"SWELL"
  40448. ----------2FCD03-----------------------------
  40449. INT 2F - Intel Image Processing Interface - SELECT SCAN LINE
  40450.     AX = CD03h
  40451.     BX = scan line
  40452.     CX = requested density in dots per inch (300, 600, or 1200)
  40453. Return: AL = 00h succesful
  40454.         CX = density at which scan line was mapped
  40455.         ES:DI -> start of scan line
  40456.     AL = 80h unsuccessful
  40457.        = 81h scan line out of range
  40458.        = 82h unsupported scan line density
  40459.        = 83h out of memory
  40460. SeeAlso: AX=CD04h"Image"
  40461. ----------2FCD03-----------------------------
  40462. INT 2F - SWELL.EXE - ACTIVATE
  40463.     AX = CD03h
  40464. Return: AX = 0000h
  40465. SeeAlso: AX=CD02h"SWELL"
  40466. ----------2FCD04-----------------------------
  40467. INT 2F - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  40468.     AX = CD04h
  40469.     CX:BX -> structure (see below)
  40470. Return: AL = 00h successful
  40471.        = 80h unsuccessful
  40472.        = 81h scan line out of range
  40473.        = 82h unsupported scan line density
  40474.        = 83h out of memory
  40475.        = 84h unrecognized source
  40476.        = 85h initialization error
  40477. SeeAlso: AX=CD03h"Image"
  40478.  
  40479. Format of structure:
  40480. Offset    Size    Description
  40481.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  40482.  02h    DWORD    pointer to image data
  40483.  06h    WORD    scan line on which to place
  40484.  08h    WORD    bit offset from start of scan line at which to place
  40485.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  40486.  0Ch    WORD    width in bits of data
  40487.  0Eh    WORD    source logical page number
  40488.  10h    WORD    source handle (only if source in expanded memory)
  40489.  12h    WORD    source offset (only if source in expanded memory)
  40490. ----------2FCD04-----------------------------
  40491. INT 2F - SWELL.EXE - TURN OFF VERBOSE MODE
  40492.     AX = CD04h
  40493. Return: AX = 0000h
  40494. SeeAlso: AX=CD05h"SWELL"
  40495. ----------2FCD05-----------------------------
  40496. INT 2F - Intel Image Processing Interface - PRINT PAGE
  40497.     AX = CD05h
  40498. Return: AL = 00h successful
  40499.        = 80h unsuccessful
  40500. Note:    page image is retained, so multiple calls will print multiple copies of
  40501.       the page
  40502. SeeAlso: AX=CD06h"Image"
  40503. ----------2FCD05-----------------------------
  40504. INT 2F - SWELL.EXE - TURN ON VERBOSE MODE
  40505.     AX = CD05h
  40506. Return: AX = 0000h
  40507. SeeAlso: AX=CD04h"SWELL"
  40508. ----------2FCD06-----------------------------
  40509. INT 2F - Intel Image Processing Interface - CLEAR PAGE
  40510.     AX = CD06h
  40511. Return: AL = 00h successful
  40512.        = 80h unsuccessful
  40513. Note:    palette is reset to default
  40514. SeeAlso: AX=CD09h"Image"
  40515. ----------2FCD06-----------------------------
  40516. INT 2F - SWELL.EXE - UNINSTALL
  40517.     AX = CD06h
  40518. Return: AX = 0000h uninstalled
  40519.        = 8002h programs still swapped, not uninstalled
  40520. ----------2FCD07-----------------------------
  40521. INT 2F - Intel Image Processing Interface - reserved
  40522.     AX = CD07h
  40523. ----------2FCD07-----------------------------
  40524. INT 2F - SWELL.EXE - GET INFO
  40525.     AX = CD07h
  40526.     ES:BX -> 32-byte buffer for info
  40527. Return: AX = 0000h successful
  40528.         ES:BX buffer filled
  40529.        = 8001h buffer wrong size
  40530.  
  40531. Format of info buffer:
  40532. Offset    Size    Description
  40533.  00h    WORD    20h  (total size of buffer)
  40534.  02h    BYTE    suspend-once mode active if nonzero
  40535.  03h    BYTE    00h active, 01h suspended
  40536.  04h    BYTE    00h quiet, 01h verbose
  40537.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  40538.  06h 26 BYTEs    unused???
  40539. ----------2FCD08-----------------------------
  40540. INT 2F - Intel Image Processing Interface - SCREEN IMAGE
  40541.     AX = CD08h
  40542.     CX:BX -> structure (see below)
  40543. Return: AL = 00h successful
  40544.        = 80h unsuccessful
  40545.        = 81h scan line out of range
  40546.        = 82h unsupported scan line density
  40547.        = 83h out of memory
  40548.        = 84h unrecognized source
  40549.        = 85h initialization error
  40550. SeeAlso: AX=CD05h"Image",AX=CD09h"Image"
  40551.  
  40552. Format of structure:
  40553. Offset    Size    Description
  40554.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  40555.  02h    DWORD    pointer to image data
  40556.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  40557.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  40558.  0Ah    WORD    left cropping (currently must be zero)
  40559.  0Ch    WORD    top cropping (currently must be zero)
  40560.  0Eh    WORD    width (currently must be 8000h)
  40561.  10h    WORD    height (currently must be 8000h)
  40562.  12h    WORD    horizontal size of image in 1200 dpi units
  40563.  14h    WORD    vertical size of image in 1200 dpi units
  40564.  16h    WORD    aspect ratio (currently reserved)
  40565.  18h    WORD    initialization flag (if 01h, initialization is performed)
  40566.  1Ah    WORD    pixels per line of source data
  40567.  1Ch    WORD    number of scan lines in source data
  40568.  1Eh    WORD    number of scan lines in packet
  40569.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  40570.  22h    WORD    pixels per byte (1,2,4, or 8)
  40571.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  40572.  26h    WORD    source page number (if in expanded memory)
  40573.  28h    WORD    source handle (if in expanded memory)
  40574.  2Ah    WORD    source offset (if in expanded memory)
  40575. ----------2FCD08-----------------------------
  40576. INT 2F - SWELL.EXE - UNUSED
  40577.     AX = CD08h
  40578. Return: AX = FFFFh (error)
  40579. ----------2FCD09-----------------------------
  40580. INT 2F - Intel Image Processing Interface - LOAD SCREEN
  40581.     AX = CD09h
  40582.     CX:BX -> structure (see below)
  40583. Return: AL = 00h successful
  40584.        = 80h unsuccessful
  40585. SeeAlso: AX=CD06h"Image Processing",AX=CD0Ah"Image Processing"
  40586.  
  40587. Format of structure:
  40588. Offset    Size    Description
  40589.  00h    BYTE    style
  40590.         44h ('D') diamond style
  40591.         4Ch ('L') line style
  40592.  01h    BYTE    reserved (00h)
  40593.  02h    WORD    frequency in lines per inch [sic]
  40594.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  40595.  04h    WORD    screen angle in degrees (-360 to 360)
  40596.         currently coerced to nearest of -45, 0, 45, or 90
  40597. ----------2FCD09-----------------------------
  40598. INT 2F - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  40599.     AX = CD09h
  40600. Return: AX = 0000h
  40601. SeeAlso: AX=CD0Ah"SWELL"
  40602. ----------2FCD0A-----------------------------
  40603. INT 2F - Intel Image Processing Interface - LOAD PALETTE
  40604.     AX = CD0Ah
  40605.     CX:BX -> palette structure (see below)
  40606. Return: AL = 00h successful
  40607.        = 80h unsuccessful
  40608. SeeAlso: AX=CD09h"Image Processing"
  40609.  
  40610. Format of palette structure:
  40611. Offset    Size    Description
  40612.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  40613.  01h    2**N    palette translation values, one per possible pixel value
  40614. ----------2FCD0A-----------------------------
  40615. INT 2F - SWELL.EXE - TURN ON "BORLAND SUPPORT"
  40616.     AX = CD0Ah
  40617. Return: AX = 0000h
  40618. SeeAlso: AX=CD09h"SWELL"
  40619. ----------2FCF00-----------------------------
  40620. INT 2F - TEMPLEXX - INSTALLATION CHECK
  40621.     AX = CF00h
  40622. Return: AL = FFh if installed
  40623. Program: TEMPLEXX is a popup keyboard template by Henson Scientific, Inc.
  40624. Note:    values in AL other than 00h cause an immediate return without modifying
  40625.       any registers
  40626. ----------2FD000-----------------------------
  40627. INT 2F - MDEBUG display driver - GET DRIVER STATUS
  40628.     AX = D000h
  40629. Return: CF set on error
  40630.         all other registers must be unchanged)
  40631.     CF clear if successful
  40632.         AL = FFh
  40633.         AH = driver semaphor
  40634.         00h driver is not active
  40635.         01h driver is active
  40636.         BX = CS of the driver
  40637.         CX = driver version (CH = major, CL = minor, must be >= 013Ch)
  40638.         DL = buffer semaphor
  40639.         00h driver is not pending
  40640.         01h driver is pending between functions 02h and 03h
  40641.         DH = show semaphor
  40642.         00h driver is not pending
  40643.         01h driver is pending between functions 04h and 05h
  40644. Notes:    MDEBUG is a shareware memory-resident debugging tool by Bernd Schemmer,
  40645.       including a memory monitor, an interpreter and a disassembler
  40646.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  40647.       FFh; the default is D0h for the display driver and D1h for the
  40648.       command driver (see INT 60/AH=00h"MDEBUG" for the actual multiplex
  40649.       numbers used)
  40650.     this function MUST be reentrant, as MDEBUG calls it after every popup
  40651.       before any other actions.  The handler should not change any
  40652.       registers if the display is in an unsupported mode or in a mode
  40653.       MDEBUG supports itself, e.g. a normal text mode with at least 80x25
  40654.       characters (i.e. 80x43 or 132x44 (v1.60+)). In this case MDEBUG will
  40655.       not call any of the other functions for this popup session.
  40656.     MDEBUG will not call the other functions if the returned version is
  40657.       less than the actual version of MDEBUG.
  40658.     if the driver is reentrant, DL and DH should be 00h
  40659. SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h
  40660. ----------2FD000-----------------------------
  40661. INT 2F - ZWmous - INSTALLATION CHECK
  40662.     AX = D000h
  40663. Return: AX = 5A57h ("ZW") if installed
  40664.         BX = segment of resident code
  40665. Note:    ZWmous is a shareware TSR by Zen Wu which permits the use of a mouse
  40666.       with many non-mouse applications by entering the letter under the
  40667.       mouse cursor on button presses
  40668. SeeAlso: INT 33/AX=0003h
  40669. ----------2FD000-----------------------------
  40670. INT 2F - Lotus CD/Networker - INSTALLATION CHECK
  40671.     AX = D000h
  40672. Return: AL = FF if CD/Networker TSR is loaded
  40673.     BX = 4D44h ("MD") signature
  40674.     CX = Windows mode word (from INT 2F/AX=1600h) at time of TSR load
  40675.     DX = bitmap identifying all loaded CD/Networker TSRs.
  40676. Notes:    INT 2F/AH=D0h is used by CD/Networker to communicate between a
  40677.       resident redirector TSR and a transient program that controls the
  40678.       TSR's CD-ROM drive emulation (volume attachments, caching, etc).
  40679.     At present there is only one CD/Networker TSR; the bitmap always = 4.
  40680. SeeAlso: AX=D002h"Lotus",INT 2F/AX=1500h"CD-ROM"
  40681. ----------2FD001-----------------------------
  40682. INT 2F - MDEBUG display driver - INITIALIZE DRIVER
  40683.     AX = D001h
  40684. Return: CF set on error
  40685.     AL = driver semaphor
  40686.     AH = buffer semaphor
  40687. Notes:    MDEBUG calls this function after every succesful call of the function
  40688.       00h. The function should reset all internal data and the status of
  40689.       the driver. If this function returns an error, MDEBUG will not call
  40690.       the other functions in this popup session.
  40691.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  40692.       FFh; the default is D0h for the display driver and D1h for the
  40693.       command driver
  40694. SeeAlso: AX=D000h
  40695. ----------2FD002-----------------------------
  40696. INT 2F - MDEBUG display driver - SAVE GRAPHIC DATA
  40697.     AX = D002h
  40698. Return: CF set on error
  40699.     CF clear if successful
  40700.         display memory saved and display switched to one of the text modes
  40701.           02h, 03h or 07h.
  40702. Note:    MDEBUG calls this function only once every popup session before
  40703.       displaying its windows.
  40704. SeeAlso: AX=D000h,AX=D003h
  40705. ----------2FD002BX4D44-----------------------
  40706. INT 2F - Multiplex - Lotus CD/Networker GET DATA AREA
  40707.     AX = D002h
  40708.     BX = 4D44h
  40709.     DX = bitmap identifying one loaded CD/Networker TSR
  40710. Return: ES:DI -> data area owned by TSR
  40711. Note:    the format of the data area changes with each minor revision, so it
  40712.       cannot be counted on
  40713. SeeAlso: AX=D000h"Lotus"
  40714. ----------2FD003-----------------------------
  40715. INT 2F - MDEBUG display driver - RESTORE GRAPHIC DATA
  40716.     AX = D003h
  40717. Return: CF set on error
  40718.     CF clear if successful
  40719.         display restored to the mode it was in before calling AX=D002h and
  40720.           the display memory is restored
  40721. Note:    MDEBUG calls this function only once every popup session just before
  40722.      it exits to normal DOS.
  40723. SeeAlso: AX=D000h,AX=D002h
  40724. ----------2FD004-----------------------------
  40725. INT 2F - MDEBUG display driver - SHOW SAVED DATA
  40726.     AX = D004h
  40727. Return: CF set on error
  40728.     CF clear if successful
  40729.         display switched to mode it was in before calling AX=D002h and the
  40730.           display memory is restored
  40731. Note:    This function needn't save the display memory before changing it.
  40732. SeeAlso: AX=D000h,AX=D005h
  40733. ----------2FD005-----------------------------
  40734. INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN
  40735.     AX = D005h
  40736. Return: CF set on error
  40737.     CF clear if successful
  40738.         display restored to mode it was in before calling AX=D004h
  40739. Note:    This function needn't save or change the display memory
  40740. SeeAlso: AX=D000h,AX=D004h
  40741. ----------2FD0-------------------------------
  40742. INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS
  40743.     AH = D0h
  40744.     AL = 06h-7Fh
  40745. Note:    these functions are reserved for future use
  40746. ----------2FD0-------------------------------
  40747. INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS
  40748.     AH = D0h
  40749.     AL = 80h-FFh
  40750. Note:    these functions numbers are reserved for user defined features (e.g.
  40751.       communication between the transient und resident parts of the driver)
  40752. ----------2FD100-----------------------------
  40753. INT 2F C - MDEBUG command driver - GET STATUS
  40754.     AX = D100h
  40755.     BX = version of MDEBUG (BH = major, BL = minor)
  40756.     CX = command driver counter
  40757. ---v1.60+---
  40758.     DS:SI -> MDEBUG identification table (see below)
  40759.     ES = segment of display memory used by MDEBUG
  40760.     DI = size of video mode used by MDEBUG
  40761.         (high byte = lines, low byte = columns)
  40762. Return: DL = FFh
  40763.     BX = version number of the driver if it is less than the version in BX,
  40764.          else unchanged
  40765.     CX incremented
  40766. Notes:    MDEBUG is a shareware memory-resident debugging tool by Bernd Schemmer,
  40767.       including a memory monitor, an interpreter, and a disassembler
  40768.     called by MDEBUG at start of popup session; if the version number
  40769.       returned in BX is less than 1.52 (1.60 for MDEBUG v1.70), MDEBUG will
  40770.       not call any of the other functions during this popup session
  40771.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  40772.       FFh; the default is D0h for the display driver and D1h for the
  40773.       command driver (see INT 60/AH=00h"MDEBUG" for the multiplex numbers
  40774.       actually used)
  40775.     this function must end with a far call to the old INT 2F handler after
  40776.       changing the registers
  40777.     this function MUST be reentrant
  40778.     command drivers must also declare the following data at the given
  40779.       offsets in the code segment
  40780.         100h  3 BYTEs    JMP-command in .COM-files
  40781.         103h    BYTE    NOP-command (90h)
  40782.         104h 26 BYTEs    signature "Kommandotreiber für MDEBUG"
  40783.         11Eh 12 BYTEs    name of driver, e.g. "MDHISDRV.COM"
  40784.                 each driver must have a unique name
  40785.     MDEBUG will pass every key and command to the command driver(s) before
  40786.       checking for a valid internal command
  40787. SeeAlso: AX=D000h,AX=D101h
  40788.  
  40789. Format of MDEBUG identification table:
  40790. Offset    Size    Description
  40791.  -2    WORD    entry offset
  40792.  00h    WORD    CS of MDEBUG
  40793.  02h    DWORD    old INT 08h vector
  40794.  06h    DWORD    old INT 09h vector
  40795.  0Ah    DWORD    address INT 16h routine used by MDEBUG
  40796.  0Eh    BYTE    length of version string
  40797.  0Fh  N BYTEs    version string
  40798. ----------2FD101-----------------------------
  40799. INT 2F - MDEBUG command driver - INITIALIZE DRIVER
  40800.     AX = D101h
  40801.     CX = command driver counter
  40802. Return: DL = FFh if successful
  40803.         CX incremented
  40804.          else error: all registers unchanged
  40805. Note:    this function must end with a  far call to the old INT 2F handler after
  40806.       changing the registers
  40807.     this function must be reentrant
  40808. ----------2FD102-----------------------------
  40809. INT 2F - MDEBUG command driver - EXECUTE INTERPRETER COMMAND
  40810.     AX = D102h
  40811.     BL = first character of the interpreter command
  40812.     BH = last character of the interpreter command (or blank)
  40813.     DS:SI -> parameter for the interpreter command as ASCIZ string
  40814.     DS:DI -> MDEBUG data structure (see below)
  40815. Return: AL = FFh
  40816.     CF set on error
  40817.         AH = error number
  40818.         01h syntax error
  40819.         02h first shell of the command.com is activ
  40820.         03h esc pressed
  40821.         04h break pressed
  40822.         05h DOS is busy
  40823.         06h command ended
  40824.         07h division by zero
  40825.         08h invalid display driver
  40826.         09h invalid command driver
  40827.         0Ah error 8 and 9
  40828.         0Bh unknown error
  40829.         0Ch new error
  40830.             DS:SI -> ASCIZ error message (max 30 characters)
  40831.            else unknown error
  40832.     CF clear if successful
  40833.         AH = return code
  40834.         00h continue processing the command line
  40835.         01h leave MDEBUG popup session
  40836.         02h leave MDEBUG popup session and automatically popup again
  40837.             if the InDOS flag is zero
  40838.         03h not used (same as 00h)
  40839.         04h not used (same as 00h)
  40840.         05h put new command line into the input buffer,
  40841.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  40842.         06h process new command line
  40843.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  40844.            else unknown status, but continue processing commmand line
  40845. Note:    this function must end with a far call to the old INT 2F handler (with
  40846.       registers unchanged) if the driver does not support the interpreter
  40847.       command in BX.  Otherwise, the driver must not chain to the old
  40848.       INT 2F.
  40849.  
  40850. Format of MDEBUG data structure:
  40851. Offset    Size    Description
  40852.  00h    WORD    register SE
  40853.  02h    WORD    register OF
  40854.  04h    WORD    register FS
  40855.  06h    WORD    register FO
  40856.  08h    WORD    register AX
  40857.  0Ah    WORD    register BX
  40858.  0Ch    WORD    register CX
  40859.  0Eh    WORD    register DX
  40860.  10h    WORD    register SI
  40861.  12h    WORD    register DI
  40862.  14h    WORD    register DS
  40863.  16h    WORD    register ES
  40864.  18h    WORD    register BP
  40865.  1Ah    WORD    register SS
  40866.  1Ch    WORD    register SP
  40867.  1Eh    WORD    register FL (flags)
  40868.  20h    WORD    register R0
  40869.  22h    WORD    register R1
  40870.  24h    WORD    register R2
  40871.  26h    WORD    register R3
  40872.  28h    WORD    register R4
  40873.  2Ah    WORD    register R5
  40874.  2Ch    WORD    register R6
  40875.  2Eh    WORD    register R7
  40876.  30h    WORD    register R8
  40877.  32h    WORD    register CS, return-address
  40878.  34h    WORD    register IP, return-address
  40879.  36h    DWORD    saved pointer to data for key <F6> (v1.60)
  40880.         saved monitor address (v1.70)
  40881.  3Ah 12 WORDs    saved register values on last popup entry (for <F8> key)
  40882.         (original register values at popup entry of MDEBUG)
  40883.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  40884.  52h 12 WORDs    saved register values on last popup exit (for <SHIFT-F8> key)
  40885.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  40886.  6Ah    DWORD    address of the DOS-invars-table
  40887.  6Eh    DWORD    address of the InDOS flag
  40888.  72h    WORD    offset of the register which is used for the segment of the
  40889.         first monitor window
  40890.  74h    WORD    offset of the register which is used for the offset of the
  40891.         first monitor window
  40892.  76h    WORD    name of the register which is used for the segment of the
  40893.         first monitor segment
  40894.  78h    WORD    name of the register which is used for the offset of the first
  40895.         monitor window     
  40896.  7Ah    WORD    pseudo register 1
  40897.  7Ch    WORD    pseudo register 2
  40898. ----------2FD103-----------------------------
  40899. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR
  40900.     AX = D103h
  40901.     BX = key code (like result of an interrupt 16h call)
  40902.     CX = 0 -> the cursor is in the ASCII column of the monitor
  40903.     CX = 1 -> the cursor is in one of the hex fields of the monitor
  40904.     DS:SI -> MDEBUG data structure (see AX=D102h)
  40905.     ES:DI -> actual byte in the monitor
  40906. Return: AL = FFh
  40907.     AH = return code
  40908.         00h key processed, read next key
  40909.         01h leave MDEBUG popup session
  40910.         02h leave MDEBUG popup session and automatically popup again if DOS
  40911.         is not busy
  40912.         03h signal an error (beep)
  40913.         04h driver has redefined the key, proceed with the new key
  40914.         BX = new key code
  40915.         MDEBUG will not pass the new key to the command driver(s)
  40916.        else treat like code 00h
  40917. Note:    this function must end with a far call to the old INT 2F handler (with
  40918.       registers unchanged) if the driver does not support the key in BX.
  40919.       Otherwise, the driver must not chain to the old INT 2F.
  40920. SeeAlso: AX=D104h
  40921. ----------2FD104-----------------------------
  40922. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE INTERPRETER
  40923.     AX = D104h
  40924.     DS:SI -> MDEBUG data structure (see AX=D102h)
  40925. Return: AL = FFh
  40926.     AH = return code
  40927.         00h key processed, read next key
  40928.         01h leave MDEBUG popup session
  40929.         02h leave MDEBUG popup session and automactically popup again if
  40930.         DOS is not busy
  40931.         03h signal an error (beep)
  40932.         04h driver has redefined the key, proceed with the new key
  40933.         BX = new key code
  40934.         MDEBUG won't pass the new key to the command driver(s)
  40935.         05h put new command line into the input buffer
  40936.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  40937.         06h process new command line
  40938.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  40939.        else treat like code 00h
  40940. Note:    this function must end with a far call to the old INT 2F handler if the
  40941.       driver does not support the key in BX.  Otherwise, the driver must
  40942.       not chain to the old INT 2F.
  40943. SeeAlso: AX=D103h
  40944. ----------2FD1-------------------------------
  40945. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  40946.     AH = D1h
  40947.     AL = 05h-0Ah
  40948. Note:    these functions are reserved for future use
  40949. ----------2FD110-----------------------------
  40950. INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F
  40951.     AX = D110h
  40952. Return: DL = FFh
  40953.     ES:BX -> next program in the chain for INT 2F
  40954.     CX = code segment of this driver
  40955.     DI = offset of driver identification table (see below) (v1.60+)
  40956. Notes:    only called by the transient part of the driver
  40957.     must be reentrant and the driver must not chain this function to the
  40958.       old INT 2F
  40959.  
  40960. Format of the driver identification table:
  40961. Offset    Size    Description
  40962.  00h  26 BYTEs     signature "Kommandotreiber für MDEBUG"
  40963.                          ^- Note: ASCII 129,German U-umlaut
  40964.  27h  12 BYTEs     name of driver, e.g. "MDHISDRV.COM"
  40965.          each driver must have a unique name
  40966. ----------2FD111-----------------------------
  40967. INT 2F - MDEBUG command driver - START DRIVER
  40968.     AX = D111h
  40969. Return: DL = FFh
  40970. Notes:    only called by the transient part of the driver to inform the resident
  40971.       part that it is installed
  40972.     the function must be reentrant and the driver mustn't chain this
  40973.       function to the old INT 2F
  40974. SeeAlso: AX=D101h,AX=D112h
  40975. ----------2FD112-----------------------------
  40976. INT 2F - MDEBUG command driver - END DRIVER
  40977.     AX = D112h
  40978. Return: DL = FFh
  40979. Notes:    only called by the transient part of the driver to inform the resident
  40980.       part that it will be released after this function
  40981.     the function must be reentrant and the driver mustn't chain this
  40982.       function to the old INT 2F
  40983. SeeAlso: AX=D101h,AX=D111h
  40984. ----------2FD1-------------------------------
  40985. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  40986.     AH = D1h
  40987.     AL = 13h-7Fh
  40988. Note:    these functions are reserved for future use
  40989. ----------2FD1-------------------------------
  40990. INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS
  40991.     AH = D1h
  40992.     AL = 80h-FFh
  40993. Note:    these functions are reserved for user defined features (e.g.
  40994.       communication between the transient und resident parts of the    driver)
  40995. ----------2FD200BX5144-----------------------
  40996. INT 2F U - Quarterdeck - QEMM/QRAM/VIDRAM/MANIFEST v5.0+ - INSTALLATION CHECK
  40997.     AX = D200h
  40998.     BX = 5144h ("QD")
  40999.     CX = 4D45h ("ME")
  41000.     DX = 4D30h ("M0")
  41001. Return: AL = FFh installed      
  41002.     if BX,CX,DX registers were as specified on entry:
  41003.         BX = 4D45h ("ME")
  41004.         CX = 4D44h ("MD")
  41005.         DX = 5652h ("VR")
  41006. Notes:    QEMM/QRAM/VIDRAM/MANIFEST/etc will search for a free AH value from D2h
  41007.       through FFh, then C0h through D1h
  41008.     for AL <> 0, if the BX/CX/DX values don't match a the identifier of a
  41009.       Quarterdeck product, it just chains to the previous INT 2F handler
  41010. ----------2FD201BX4849-----------------------
  41011. INT 2F U - Quarterdeck - GET QD HIMEM PRESENCE
  41012.     AX = D201h
  41013.     BX = 4849h ("HI")
  41014.     CX = 4D45h ("ME")
  41015.     DX = 4D51h ("MQ")
  41016. Return: BX = 4F4Bh ("OK")
  41017.     ES:DI -> HIMEM entry point
  41018. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  41019.       through FFh, then C0h through D1h
  41020. SeeAlso: AX=D201h/BX=5145h
  41021. ----------2FD201BX4849-----------------------
  41022. INT 2F U - Quarterdeck - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
  41023.     AX = D201h
  41024.     BX = 4849h ("HI")
  41025.     CX = 5241h ("RA")
  41026.     DX = 4D30h ("M0")
  41027. Return: BX = 4F4Bh ("OK")
  41028.     CX = segment of start of HIRAM chain
  41029.     DX = QEMM/QRAM code segment
  41030. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  41031.       through FFh, then C0h through D1h
  41032.     QEMM and QRAM both responded the same
  41033.     the HIRAM memory chain has the same format as the regular DOS 4.0
  41034.       memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks
  41035.       have the block header program name field set to "UMB"; blocks whose
  41036.       "owner" field is set to the QEMM/QRAM code segment returned in DX
  41037.       are locked out regions such as video memory and ROMs.
  41038. ----------2FD201BX4D41-----------------------
  41039. INT 2F U - Quarterdeck - MANIFEST v1.0+ - INSTALLATION CHECK
  41040.     AX = D201h
  41041.     BX = 4D41h ("MA")
  41042.     CX = 4E49h ("NI")
  41043.     DX = 4645h ("FE")
  41044. Return: BX = 5354h ("ST")
  41045. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  41046.       through FFh, then C0h through D1h
  41047. ----------2FD201BX4D45-----------------------
  41048. INT 2F U - Quarterdeck - DVDOS4GX.DVR - ???
  41049.     AX = D201h
  41050.     BX = 4D45h ("ME")
  41051.     CX = 5155h ("QU")
  41052.     DX = 5044h ("PD")
  41053. Return: ???
  41054. Notes:    AH=D2h is the default; use the Quarterdeck installation check described
  41055.       under AX=D200h
  41056.     called by QEMM 6.03
  41057. ----------2FD201BX5145-----------------------
  41058. INT 2F U - Quarterdeck - QEMM v5.0+ - INSTALLATION CHECK
  41059.     AX = D201h
  41060.     BX = 5145h ("QE")
  41061.     CX = 4D4Dh ("MM")
  41062.     DX = 3432h ("42")
  41063. Return: BX = 4F4Bh ("OK")
  41064.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  41065. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  41066.       through FFh, then C0h through D1h
  41067.     this call is not available under QEMM v6.00 unless Windows3 support
  41068.       has been disabled with the NW3 switch to QEMM386.SYS
  41069. SeeAlso: AX=D201h/BX=4849h,INT 67/AH=3Fh
  41070. ----------2FD201BX5649-----------------------
  41071. INT 2F U - Quarterdeck - VIDRAM v5.0+ - INSTALLATION CHECK
  41072.     AX = D201h
  41073.     BX = 5649h ("VI")
  41074.     CX = 4452h ("DR")
  41075.     DX = 414dh ("AM")
  41076. Return: BX = 4F4Bh ("OK")
  41077.     ES:DI -> VIDRAM entry point
  41078. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  41079.       through FFh, then C0h through D1h
  41080.  
  41081. Call VIDRAM entry point with:
  41082.     AH = 00h get status
  41083.         Return: AL = VIDRAM state (see below)
  41084.             BL = extra RAM status
  41085.                 00h VIDRAM does not use extra RAM
  41086.                 01h VIDRAM uses EMS as extra RAM
  41087.                 02h VIDRAM uses EGA as extra RAM
  41088.             BH = feature flags
  41089.                 bit 0: override enabled
  41090.                 bit 1: mapped memory detected in A000h-B000h range
  41091.                 bit 2: top of memory not at 640K
  41092.                 bit 3: MDA detected
  41093.                 bit 4: high RAM exists in video area
  41094.                 bit 5: mapped memory detected in video area
  41095.                 bits 6-7: reserved???
  41096.             CL = current monitor (01h = mono, 80h = color)
  41097.             SI = current top of memory (paragraph)
  41098.             DI = segment of start of HiRAM chain
  41099.     AH = 01h setup
  41100.         AL = VIDRAM state (00h off, 01h no EGA graphics, 02h no graph)
  41101.         BL = extra RAM status (see above)
  41102.         BH = feature flags (see above)
  41103.         CL = monitor (01h = monochrome, 80h = color)
  41104.         SI = new top of memory (paragraph)
  41105.         DI = segment of start of HiRAM chain
  41106.     AH = 02h get end address of VIDRAM code
  41107.         Return: ES:DI -> VIDRAM partial map context (see below)
  41108. Return: CF set on error
  41109.     CF clear if successful
  41110.  
  41111. Format of partial map context (EMS 3.2):
  41112. Offset    Size    Description
  41113.  00h    BYTE    EMS version ID (32h)
  41114.  01h    WORD    EMM handle for this entry
  41115.  03h    BYTE    number of frames
  41116.  04h    BYTE    first page frame
  41117.  05h    WORD    offset from ES to previously saved map
  41118.  
  41119. Format of partial map context (EMS 4.0):
  41120. Offset    Size    Description
  41121.  00h    BYTE    EMS version ID (40h)
  41122.  01h    WORD    mappable segment count
  41123.  03h  N WORD    mappable segments
  41124.     WORD    offset to previously saved map???
  41125. ----------2FD300BX4562-----------------------
  41126. INT 2F U - TeleReplica - INSTALLATION CHECK
  41127.     AX = D300h
  41128.     BX = 4562h
  41129.     CX = 2745h
  41130.     DX = serial port I/O base address??? (03F8h for v3.9)
  41131. Return: SI = segment of resident code
  41132.     AX = 251Dh
  41133.     BX = DF21h
  41134.     CX = F321h
  41135.     DX = ???
  41136. ----------2FD3CB-----------------------------
  41137. INT 2F U - LapLink Quick Connect v6 - API
  41138.     AX = D3CBh
  41139.     CX = function
  41140.         0002h get ???
  41141.         Return: BX:AX -> ???
  41142.             CL = ???
  41143.             CH = ???
  41144.             DX = ???
  41145.             DI = COM1 I/O port???
  41146.             SI = COM2 I/O port???
  41147.         0003h initialization???
  41148.         0004h ???
  41149.         0005h initialization???
  41150.         0006h reset/clear ???
  41151.         Return: AX = 0000h
  41152.             ES:DI -> next byte after ??? cleared by this call
  41153.         0007h initialization???
  41154.         0008h uninstall
  41155.         Return: BX = status
  41156.                 0000h successful
  41157.                 FFFFh incomplete, stub remains in memory
  41158. Return: CX = 534Bh (except function 0002h)
  41159. ----------2FD44D-----------------------------
  41160. INT 2F - 4DOS.COM v2.1+ - API
  41161.     AX = D44Dh
  41162.     BH = function
  41163.         00h installation check
  41164.         Return: AX = 44DDh
  41165.             BL = minor version number
  41166.             BH = major version number
  41167.             CX = PSP segment address for current invocation
  41168.             DL = 4DOS shell number (0 for the first (root) shell,
  41169.                  updated each time a new copy is loaded)
  41170.         01h (internal, v2.1-3.03) terminate current copy of 4DOS
  41171.         Return: nothing
  41172.         (internal, v4.0) ???
  41173.         Return: ES:BX -> data area (see below)
  41174.         02h ???
  41175.         DX = ???
  41176.     ---v2.1-3.03 only---
  41177.         03h EXEC program
  41178.         CX:DX -> EXEC record
  41179.         FEh deallocate shell number (passed through to root shell)
  41180.         ???
  41181.         FFh allocate shell number (passed through to root shell)
  41182. Note:    bug in v3.00 will crash system if unrecognized value in BH
  41183. SeeAlso: AX=D44Eh,AX=E44Dh,INT 21/AX=4403h
  41184.  
  41185. Format of EXEC record:
  41186. Offset    Size    Description
  41187.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  41188.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  41189.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  41190.  
  41191. Format of 4DOS v4.0 data area:
  41192. Offset    Size    Description
  41193.  00h  2 BYTEs    ???
  41194.  06h    WORD    XMS handle for swapping
  41195.     ???
  41196. ----------2FD44E-----------------------------
  41197. INT 2F - 4DOS v3.0+ - AWAITING USER INPUT
  41198.     AX = D44Eh
  41199. ---4DOS v3.01+---
  41200.     BX = 0000h 4DOS is ready to display prompt
  41201.        = 0001h 4DOS has displayed the prompt, about to accept user input
  41202. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  41203. Note:    v3.00 only makes the call corresponding to BX=0001h, does not set BX
  41204. SeeAlso: AX=D44Dh
  41205. ----------2FD44FBX0000-----------------------
  41206. INT 2F - 4DOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  41207.     AX = D44Fh
  41208.     BX = 0000h
  41209. Return: AX = 44DDh if installed
  41210. SeeAlso: AX=D44Fh/BX=0001h
  41211. ----------2FD44FBX0001-----------------------
  41212. INT 2F - 4DOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  41213.     AX = D44Fh
  41214.     BX = 0001h
  41215.     CX = number of keystrokes (01h-FFh)
  41216.     DS:DX -> keystroke list (one word per keystroke)
  41217. Return: AX = status
  41218.         0000h successful
  41219.         nonzero failed
  41220.     BX,CX,DX destroyed
  41221. Notes:    the keystrokes are the exact values to return from subsequent calls to
  41222.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  41223.         0000h causes subfunctions 01h and 11h to indicate an empty
  41224.             keyboard buffer
  41225.         FFFFh is followed by a word indicating the number of clock
  41226.             ticks to delay before the next faked keystroke
  41227.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  41228.       invocation, and does not range-check CX; it will overwrite memory
  41229.       following the resident portion if CX is greater than 100h.
  41230. SeeAlso: AX=D44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h
  41231. ----------2FD600-----------------------------
  41232. INT 2F - HEART.COM - INSTALLATION CHECK
  41233.     AX = D600h
  41234. Return: AX = 0303h (two hearts) if installed
  41235.         ES:DI -> buffer (see below)
  41236. Program: HEART.COM is a CPU lock-up/critical indicator utility by Mitch Davis.
  41237. Notes:    Once the host program has identified the address of the data area, it
  41238.       can change this to indicate safe/critical, alternate colours, etc.
  41239.     The entries for the color table are in char/attrib form.  Every two
  41240.       entries form a pair which is alternated between 68 times a minute.
  41241.       The first half of the table is for color videos, the second mono.
  41242.       Within each half, the first half is for the safe chars, and the
  41243.       second for the critical chars.
  41244.  
  41245. Format of buffer:
  41246. Offset    Size    Description
  41247.  00h  8 WORDs    table of colors/attributes (see notes above)
  41248.  10h    BYTE    flags
  41249.         bit 0: program is in critical section, so flash double
  41250.             exclamation mark
  41251.         bit 1: program is in safe code, so flash the heart character
  41252.  11h    WORD    position of heartbeat on screen, normally 009Eh (last column
  41253.         of second line)
  41254. ----------2FD600-----------------------------
  41255. INT 2F U - VEDIT VSWAP - INSTALLATION CHECK
  41256.     AX = D600h
  41257. Return: AL = D6h if installed
  41258. Note:    VSWAP is the resident portion of VEDIT's "swapper" capability.
  41259.     VEDIT is a programmer's text editor by Greenview Data.
  41260. SeeAlso: AX=D601h,AX=D602h
  41261. ----------2FD601-----------------------------
  41262. INT 2F U - VEDIT VSWAP - ???
  41263.     AX = D601h
  41264.     BL = subfunction number???
  41265. Return: BL = return code ???
  41266.     ES = resident portion's data??? segment
  41267.     DX = resident portion's code segment
  41268. SeeAlso: AX=D600h"VSWAP"
  41269. ----------2FD602-----------------------------
  41270. INT 2F U - VEDIT VSWAP - EXEC PROGRAM WITH SWAP
  41271.     AX = D602h
  41272.     other registers set as for INT 21/AX=4B00h
  41273. Return: CF set on error
  41274.         AL = error code
  41275.         82h = failure due to ???
  41276.     CF clear on success
  41277. SeeAlso: AX=D600h"VSWAP",INT 21/AH=4Bh"EXEC"
  41278. ----------2FD701-----------------------------
  41279. INT 2F - BANYAN VINES v4+ - GET BANV INTERRUPT NUMBER
  41280.     AX = D701h
  41281.     BX = 0000h
  41282. Return: AX = 0000h installed
  41283.         BX = interrupt number (60h to 66h)
  41284.        nonzero not present
  41285. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  41286.       necessary to examine the four bytes preceding the handlers for
  41287.       INT 60 through INT 66 for the string "BANV"
  41288. SeeAlso: AX=D702h,AX=D703h,AX=D704h
  41289. ----------2FD702-----------------------------
  41290. INT 2F U - BANYAN VINES v4+ - PCPRINT interface
  41291.     AX = D702h
  41292.     BX = function
  41293.     ???
  41294. Return: ???
  41295. SeeAlso: AX=D701h,AX=D703h,INT 61/AX=0005h"Banyan"
  41296. ----------2FD703-----------------------------
  41297. INT 2F U - BANYAN VINES v4+ - MAIL interface
  41298.     AX = D703h
  41299.     BX = function
  41300.     ???
  41301. Return: ???
  41302. SeeAlso: AX=D702h,AX=D704h
  41303. ----------2FD704-----------------------------
  41304. INT 2F U - BANYAN VINES v4+ - Streettalk Directory Assistance interface
  41305.     AX = D704h
  41306.     BX = function
  41307.     ???
  41308. Return: ???
  41309. SeeAlso: AX=D703h,INT 61/AX=0007h"Banyan"
  41310. ----------2FD800-----------------------------
  41311. INT 2F - Novell NetWare Lite - CLIENT.EXE - INSTALLATION CHECK
  41312.     AX = D800h
  41313. Return:    AL = FFh if installed
  41314.         DX = version number??? (0100h in 1.00)
  41315.         BX = data segment of resident copy???
  41316.         ES:DI = FAR entry point for API routines
  41317.             Load BX = function number and call for various
  41318.             functions.    Functions 00h - 10h supported in 1.00.
  41319. SeeAlso: AX=7A00h,AX=D880h
  41320. ----------2FD880-----------------------------
  41321. INT 2F - Novell NetWare Lite - SERVER.EXE - INSTALLATION CHECK
  41322.     AX = D880h
  41323. Return:    AL = FFh if installed
  41324.         DX = version number??? (0100h in 1.00)
  41325.         BX = Data segment of resident copy???
  41326.         CL = 01h if SERVER is active
  41327.            = 00h if SERVER is disabled
  41328. SeeAlso: AX=7A00h,AX=D800h
  41329. ----------2FDA00-----------------------------
  41330. INT 2F - ZyXEL ZFAX - INSTALLATION CHECK
  41331.     AX = DA00h
  41332. Return: AH = enabled state (00h = enabled, 01h = disabled)
  41333.     AL = 5Ah installed
  41334. Note:    ZFAX is the bundled FAX software which comes with the ZyXEL model
  41335.       fax modems.
  41336. SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h
  41337. ----------2FDA01-----------------------------
  41338. INT 2F - ZyXEL ZFAX - UNINSTALL
  41339.     AX = DA01h
  41340. Return: AL = 00h Success
  41341.          01h Failure
  41342. SeeAlso: AX=DA00h
  41343. ----------2FDA02-----------------------------
  41344. INT 2F - ZyXEL ZFAX - DISABLE
  41345.     AX = DA02h
  41346. Return: AL = 00h
  41347. SeeAlso: AX=DA03h
  41348. ----------2FDA03-----------------------------
  41349. INT 2F - ZyXEL ZFAX - ENABLE
  41350.     AX = DA03h
  41351. Return: AL = 00h
  41352. SeeAlso: AX=DA02h
  41353. ----------2FDA55-----------------------------
  41354. INT 2F U - TRAP.COM - INSTALLATION CHECK
  41355.     AX = DA55h
  41356.     DL = interrupt number
  41357.     DH = ???
  41358. Return: if installed
  41359.         AH = interrupt number
  41360.         AL = ???
  41361.         ES:BX -> ???
  41362. Notes:    TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel
  41363.     a separate copy of TRAP is loaded for each interrupt to be traced; thus
  41364.       the interrupt number is part of the installation check
  41365. ----------2FDC00-----------------------------
  41366. INT 2F - GOLD.COM - INSTALLATION CHECK
  41367.     AX = DC00h
  41368. Return: AL = 00h not installed
  41369.        = FFh installed
  41370. Note:    GOLD is a TSR by Bob Eager which makes the NumLock key return the code
  41371.       for F1; the purpose is to improve Kermit's VTxxx emulation
  41372. ----------2FDC01-----------------------------
  41373. INT 2F - GOLD.COM - GET STATE
  41374.     AX = DC01h
  41375. Return:    AL = status
  41376.         00h off
  41377.         01h on
  41378. SeeAlso: AX=DC00h,AX=DC02h
  41379. ----------2FDC02-----------------------------
  41380. INT 2F - GOLD.COM - SET STATE
  41381.     AX = DC02h
  41382.     DL = new state
  41383.         00h off
  41384.         01h on
  41385. Return: AL = 00h (OK)
  41386. SeeAlso: AX=DC01h
  41387. ----------2FDD-------------------------------
  41388. INT 2F - SoftCom programs - API
  41389.     AH = DDh
  41390.     AL = FEh get info
  41391.         Return: ES:BX -> TSR info list (see below)
  41392.     AL = program identifier
  41393.         BH = function
  41394.         FDh get version
  41395.             Return: BX = version
  41396.         FFh installation check
  41397.             Return: AL = FFh if installed
  41398.                 BX = version
  41399.                 ES = segment of resident code
  41400.         others vary by program
  41401. Return: AL = status
  41402.         bit 7 set on error
  41403.         AL = 81h unknown function
  41404.  
  41405. Format of TSR info list:
  41406. Offset    Size    Description
  41407.  00h  9 BYTEs    blank-padded ASCIZ program name
  41408.  09h    BYTE    program ID
  41409.  0Ah    WORD    program's PSP segment
  41410.  0Ch    WORD    program version (major in high byte)
  41411.  0Eh    DWORD    pointer to next item in info list or 0000h:0000h
  41412.  12h    BYTE    number of interrupts hooked
  41413.  13h  5 BYTEs    interrupt numbers hooked by program
  41414.  18h  8 BYTEs    reserved
  41415. ----------2FDE00BX4445-----------------------
  41416. INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
  41417.     AX = DE00h
  41418.     BX = 4445h ("DE")
  41419.     CX = 5844h ("XD")
  41420.     DX = 4931h ("I1")
  41421. Return: AL = FFh if installed (even if other registers do not match)
  41422.     if BX,CX, and DX were as specified on entry,
  41423.         BX = 4845h ("HE")
  41424.         CX = 5245h ("RE")
  41425.         DX = 4456h ("DV")
  41426. Notes:    AH=DEh is the default XDI multiplex number, but may range from C0h-FFh
  41427.     programs should check for XDI starting at DEh to FFh, then C0h to DDh
  41428.     the XDI handler should not issue any DOS or BIOS calls, nor should it
  41429.       issue DESQview API calls other than those allowed from hardware ints
  41430. SeeAlso: AX=DE02h,INT 15/AX=5400h
  41431. ----------2FDE01-----------------------------
  41432. INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  41433.     AX = DE01h
  41434.     BX = driver ID
  41435.     other registers as needed by driver
  41436. Notes:    XDI drivers should pass this call through to previous handler if ID
  41437.       does not match
  41438.     DESQview never calls this function
  41439. ----------2FDE01BX4450-----------------------
  41440. INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK
  41441.     AX = DE01h
  41442.     BX = 4450h ("DP")
  41443.     CX = 4D49h ("MI")
  41444.     DX = 3039h ("09")
  41445. Return: AL = FFh if installed
  41446.         BX = 4D42h ("MB")
  41447.         CX = 4921h ("I!")
  41448.         DX = 8F4Fh
  41449.         ES:DI -> filename of DPMI host overlay
  41450. Note:    the installation check consists of testing for the existence of the
  41451.       character device QDPMI$$$
  41452. ----------2FDE01BX5242-----------------------
  41453. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  41454.     AX = DE01h
  41455.     BX = 5242h ("RB")
  41456.     CX:DX = program identifier
  41457.         656F7000h ("eop",0) for DVeop
  41458. Return: AX = 5242h ("RB") if installed
  41459.         ES:BX -> data or entry point
  41460.         CX = version number (CH = major, CL = minor)
  41461.  
  41462. Call DVeop entry point with:
  41463.     ES:DI -> callback address or 0000h:0000h to remove callback
  41464. Return: AX = status
  41465.         0000h failed (callback table full or attempted to remove non-
  41466.             existent callback)
  41467.         0001h successful
  41468.         ES:DI -> chaining address
  41469.     BX,CX,DX destroyed
  41470. Notes:    the callback function is called with a simulated interrupt when the
  41471.       DESQview window containing it is closed; it should perform all
  41472.       necessary cleanup and then perform a FAR jump to the chaining address
  41473.       or an IRET if the chaining address is 0000h:0000h
  41474.     if the program wishes to remove itself before the window is closed, it
  41475.       should call the DVeop entry point with the previously returned
  41476.       chaining address and ignore the returned chaining address.
  41477. ----------2FDE01BX7474-----------------------
  41478. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  41479.     AX = DE01h
  41480.     BX = 7474h
  41481.     CL = function
  41482.         00h installation check
  41483.         Return: AL = FFh
  41484.         01h get process handle
  41485.         DX = keys on Open Window menu (DL = first, DH = second)
  41486.         Return: AX = process handle or 0000h if not running
  41487.         02h (v1.3+) set TMAN handle
  41488.         DX = TMAN process handle
  41489.         03h (v1.3+) set open keys to ignore on next CL=01h call
  41490.         DX = keys on Open Window menu (DL = first, DH = second)
  41491. Return: BX = 4F4Bh ("OK")
  41492.     DL destroyed
  41493. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  41494.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  41495. ----------2FDE01BX7575-----------------------
  41496. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  41497.     AX = DE01h
  41498.     BX = 7575h
  41499.     CX = function
  41500.         0000h installation check
  41501.         Return: AX = 00FFh if installed
  41502.         0001h turn on notification (currently unused)
  41503.         Return: AX = 0001h
  41504.         0002h turn off notification (currently unused)
  41505.         Return: AX = 0001h
  41506.         0003h get process information
  41507.         Return: AX = status
  41508.                 0000h failed
  41509.                 0001h successful
  41510.                 BX = last instantaneous time slice
  41511.                     in 1/100s (v1.10)
  41512.                     in 1/18s (v1.11+)
  41513.                 CX = number of processes
  41514.                 DX = number of "(starting)" records (v2.00+)
  41515.                 SI = number of records in process info array
  41516.                      (v2.00+) (always 15 for v1.x)
  41517.                 ES:DI -> process info array (see below)
  41518.         0004h get version
  41519.         Return: AH = major version
  41520.             AL = minor version
  41521.         0005h (v1.10+) get time since DESQview started
  41522.         Return: DX:AX = 1/100s since DV start (v1.10)
  41523.             DX:AX = 1/18s since DV start (v1.11+)
  41524.         0006h (v1.10+) get number of task switches
  41525.         Return: DX:AX = total task switches
  41526.             CX = task switches in last instantaneous interval
  41527. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  41528.       Daniel J. Bodoh
  41529.     for v1.00, function 0003h allocates common memory, which the caller
  41530.       must deallocate after reading the process information; only the
  41531.       currently used records are placed in the buffer
  41532.     for v1.10+, function 0003h merely returns a pointer to the internal
  41533.       array of process information; the caller should make a copy of the
  41534.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  41535.       those records with bit 7 of the first byte set are valid.
  41536.  
  41537. Format of information for one process (v1.00):
  41538. Offset    Size    Description
  41539.  00h    BYTE    flags
  41540.         bit 7: process slot is valid
  41541.  01h    WORD    offset into DESQVIEW.DVO of program's record if started from
  41542.         Open Windows menu, else undefined
  41543.  03h    WORD    Switch Windows window number
  41544.  05h    WORD    segment of process handle
  41545.  07h    WORD    number of tasks owned by process
  41546.  09h    WORD    mapping context of process
  41547.  0Bh    DWORD    hook for other programs
  41548.  
  41549. Format of information for one process (v1.10-v2.00):
  41550. Offset    Size    Description
  41551.  00h    BYTE    flags
  41552.         bit 7: valid record
  41553.             6: (v2.00+) record is allocated; if bit 7 clear, process
  41554.             is "(starting)" and only offsets 01h and 09h are valid
  41555.             5: (v2.00+) this app currently owns the CPU
  41556.             4: reserved (0)
  41557.             3: DESQview system task
  41558.             2: reserved (0)
  41559.             1: task has keyboard (currently unused)
  41560.             0: task swapped out (currently unused)
  41561.  01h    WORD    Open Window keys
  41562.  03h    WORD    Switch Windows number
  41563.  05h    WORD    segment of process handle
  41564.  07h    WORD    number of tasks for process
  41565.  09h    WORD    process mapping context
  41566.  0Bh    DWORD    time process started (relative to start of DESQview)
  41567.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  41568.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  41569.  17h    DWORD    total CPU time since process started
  41570.  1Bh    DWORD    CPU time at start of current instantaneous interval
  41571.  1Fh    DWORD    CPU time in current instantaneous interval
  41572.  23h    DWORD    hook for other programs
  41573. Note:    all times are in 1/100s for v1.10, in 1/18s for v1.11+
  41574. ----------2FDE01BXFFFE-----------------------
  41575. INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???
  41576.     AX = DE01h
  41577.     BX = FFFEh
  41578.     CX = 4D47h ("MG")
  41579.     DX = 0052h (0,"R")
  41580. Return: AL = FFh
  41581.     DX = 584Dh
  41582. ----------2FDE02-----------------------------
  41583. INT 2F C - DESQview v2.26+ External Dev Interface - DV INITIALIZATION COMPLETE
  41584.     AX = DE02h
  41585.     BX = mapping context of DESQview
  41586.     DX = handle of DESQview system task
  41587. Note:    driver should pass this call to previous handler after doing its work
  41588. SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h
  41589. ----------2FDE03-----------------------------
  41590. INT 2F C - DESQview v2.26+ External Dev Interface - DV TERMINATION
  41591.     AX = DE03h
  41592.     BX = mapping context of DESQview
  41593.     DX = handle of DESQview system task
  41594. Notes:    driver should pass this call to previous handler before doing its work
  41595.     DESQview makes this call when it is exiting, but before unhooking any
  41596.       interrupt vectors
  41597. SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h
  41598. ----------2FDE04-----------------------------
  41599. INT 2F C - DESQview v2.26+ External Dev Interface - ADD PROCESS
  41600.     AX = DE04h
  41601.     BX = mapping context of new process
  41602.     DX = handle of process
  41603. Return: nothing
  41604. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  41605.       (see below) from "common" memory to control access to XMS memory
  41606.     all DOS, BIOS, and DV API calls are valid in handler
  41607.     driver should pass this call to previous handler after processing it
  41608. SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h
  41609.  
  41610. Format of XMS XDI structure:
  41611. Offset    Size    Description
  41612.  00h    DWORD    pointer to 10-byte record???
  41613.  04h    DWORD    pointer to next XMS XDI structure
  41614.  08h    WORD    mapping context
  41615.  0Ah    BYTE    ???
  41616.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  41617.         (FAR jump to next field)
  41618.  10h  6 BYTEs    FAR handler for XMS driver entry point
  41619.         (consists of a FAR CALL followed by RETF)
  41620. ----------2FDE05-----------------------------
  41621. INT 2F C - DESQview v2.26+ External Dev Interface - REMOVE PROCESS
  41622.     AX = DE05h
  41623.     BX = mapping context of process
  41624.     DX = handle of last task in process
  41625. Return: nothing
  41626. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  41627.     driver should pass this call to previous handler before processing it
  41628.     all DOS, BIOS, and DV API calls except those generating a task switch
  41629.       are valid in handler
  41630. SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h
  41631. ----------2FDE06-----------------------------
  41632. INT 2F C - DESQview v2.26+ External Dev Interface - CREATE TASK
  41633.     AX = DE06h
  41634.     BX = mapping context of process containing task
  41635.     DX = handle of new task
  41636. Notes:    driver should pass this call to previous handler after processing it
  41637.     all DOS, BIOS, and DV API calls are valid in handler
  41638. ----------2FDE07-----------------------------
  41639. INT 2F C - DESQview v2.26+ External Dev Interface - TERMINATE TASK
  41640.     AX = DE07h
  41641.     BX = mapping context of process containing task
  41642.     DX = handle of task
  41643. Notes:    driver should pass this call to previous handler before processing it
  41644.     all DOS, BIOS, and DV API calls except those generating a task switch
  41645.       are valid in handler
  41646. SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h
  41647. ----------2FDE08-----------------------------
  41648. INT 2F C - DESQview v2.26+ External Dev Interface - SAVE STATE
  41649.     AX = DE08h
  41650.     BX = mapping context of task being switched from
  41651.     DX = handle of task being switched from
  41652. Notes:    invoked prior to task swap, interrupts, etc
  41653.     driver should pass this call to previous handler after processing it
  41654. SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h
  41655. ----------2FDE09-----------------------------
  41656. INT 2F C - DESQview v2.26+ External Dev Interface - RESTORE STATE
  41657.     AX = DE09h
  41658.     BX = mapping context of task being switched to
  41659.     DX = handle of task being switched to
  41660. Notes:    state is restored except for interrupts
  41661.     driver should pass this call to previous handler before processing it
  41662. SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h
  41663. ----------2FDE0A-----------------------------
  41664. INT 2F C - DESQview v2.26+ External Dev Interface - CHANGE KEYBOARD FOCUS
  41665.     AX = DE0Ah
  41666.     BX = mapping context of task receiving focus
  41667.     DX = handle of running task
  41668. Notes:    driver should pass this call to previous handler before processing it
  41669.     this call often occurs inside a keyboard interrupt
  41670. SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh
  41671. ----------2FDE0B-----------------------------
  41672. INT 2F C - DESQview v2.26+ External Dev Interface - DVP PROCESSING COMPLETE
  41673.     AX = DE0Bh
  41674.     BX = mapping context of DESQview system task
  41675.     CX = number of system memory paragraphs required for the use of all
  41676.         XDI drivers (DV will add this to system memory in DVP buffer)
  41677.     DX = handle of DESQview system task
  41678.     SI = mapping context of new process if it starts
  41679.     ES:DI -> DVP buffer
  41680. Return: CX incremented as needed
  41681. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  41682.     driver should pass this call to previous handler before processing it
  41683. ----------2FDE0C-----------------------------
  41684. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP OUT PROCESS
  41685.     AX = DE0Ch
  41686.     BX = mapping context of task being swapped out
  41687.     DX = handle of DESQview system task
  41688. Note:    driver should pass this call to previous handler after processing it
  41689. ----------2FDE0D-----------------------------
  41690. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP IN PROCESS
  41691.     AX = DE0Dh
  41692.     BX = mapping context of process just swapped in
  41693.     DX = handle of DESQview system task
  41694. Note:    driver should pass this call to previous handler before processing it
  41695. ----------2FDE0E-----------------------------
  41696. INT 2F C - DESQview v2.26+ External Dev Interface - DVP START FAILED
  41697.     AX = DE0Eh
  41698.     BX = mapping context of DESQview system task
  41699.     DX = handle of DESQview system task
  41700.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  41701. Note:    driver should pass this call to previous handler after processing it
  41702. ----------2FDE0F-----------------------------
  41703. INT 2F C - DESQview v2.50+ External Dev Interface - INITIALIZE DV
  41704.     AX = DE0Fh
  41705. Note:    DESQview 2.50+ calls this function just before it completes its
  41706.       initialization.  At the time of the call, DESQview has not yet
  41707.       changed any interrupt vectors
  41708. SeeAlso: AX=DE02h
  41709. ----------2FDE10-----------------------------
  41710. INT 2F C - DESQview v2.50+ External Dev Interface - FREE TASK
  41711.     AX = DE10h
  41712.     BX = mapping context of process
  41713.     DX = task handle of process
  41714. Note:    DESQview 2.50+ calls this function before it frees the task; it is
  41715.       similar to AX=DE07h but allows the XDI handler to make calls which
  41716.       cause context switches
  41717. SeeAlso: AX=DE06h,AX=DE07h
  41718. ----------2FDF00-----------------------------
  41719. INT 2F - HyperWare programs - INSTALLATION CHECK
  41720.     AX = DF00h
  41721.     BX = product code
  41722.         4248h ('BH') HyperStb
  41723.         4448h ('DH') HyperDisk v4.20+
  41724.         4B48h ('KH') HyperKey
  41725.         5348h ('SH') HyperScreen
  41726.     CX = 0000h
  41727.     DX = 0000h
  41728. Return: AL = status
  41729.         00h not installed
  41730.         FFh multiplex number in use
  41731.         CX = 5948h ('YH') if selected product installed
  41732.         ---HyperDisk---
  41733.         BX = code segment of resident portion
  41734.         DX = HyperDisk local data version
  41735. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  41736. Note:    AH=DFh is the default; if it is already in use by some other program,
  41737.       HyperWare programs then scan multiplex numbers from C0h through FFh
  41738. SeeAlso: INT 13/AX=8EEDh
  41739. ---------------------------------------------
  41740. INT 2F - HyperDisk v4.50+ - GET CURRENT CACHE STATE
  41741.     AX = DF01h
  41742.     BX = 4448h ('DH')
  41743. Return: AX = 0000h if function supported
  41744.         BX = number of cache buffers in use
  41745.         CX = number of cache buffers which have been modified
  41746.         DL = caching flags (see below)
  41747. Note:    AH=DFh is the default; if it is already in use by some other program,
  41748.       HyperWare programs then scan multiplex numbers from C0h through FFh
  41749. SeeAlso: AX=DF00h,AX=DF02h
  41750.  
  41751. Bitmask of caching flags:
  41752.  bit 0: staged writes enabled for floppy disks
  41753.  bit 1: staged writes enabled for hard disks
  41754.  bit 2: writes verified on floppy disks
  41755.  bit 3: writes verified on hard disks
  41756.  bit 4: reserved (0)
  41757.  bit 5: reserved (0)
  41758.  bit 6: floppy caching enabled
  41759.  bit 7: all caching functions enabled
  41760. ---------------------------------------------
  41761. INT 2F - HyperDisk v4.50+ - SET CACHE STATE
  41762.     AX = DF02h
  41763.     BX = 4448h ('DH')
  41764.     DL = new caching flags (see AX=DF01h)
  41765. Return: AX = 0000h if supported
  41766.         BX = number of cache buffers in use
  41767.         CX = number of cache buffers which have been modified
  41768.         DL = previous caching flags (see AX=DF01h)
  41769. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  41770. Note:    AH=DFh is the default; if it is already in use by some other program,
  41771.       HyperWare programs then scan multiplex numbers from C0h through FFh
  41772. SeeAlso: AX=DF00h,AX=DF01h
  41773. ----------2FE000-----------------------------
  41774. INT 2F - SETDRVER.COM v2.10+ - INSTALLATION CHECK
  41775.     AX = E000h
  41776. Return: AX = 4A52h ("JR") if present
  41777. Program: SETDRVER is a public domain TSR by Jacob Rieper which sets the
  41778.       apparent DOS version analogously to MSDOS SETVER
  41779. Note:    this installation check differs from the usual one of returning AL=FFh
  41780. SeeAlso: AX=E001h,INT 21/AH=52h
  41781. ----------2FE001-----------------------------
  41782. INT 2F - SETDRVER.COM v2.10+ - GET SETDRVER VERSION
  41783.     AX = E001h
  41784. Return: AH = major version
  41785.     AL = minor version
  41786. SeeAlso: AX=E000h
  41787. ----------2FE002-----------------------------
  41788. INT 2F - SETDRVER.COM v2.10+ - GET ORIGINAL DOS VERSION INFO
  41789.     AX = E002h
  41790. Return: AL = FFh if successful
  41791.         BH = major DOS version
  41792.         BL = minor DOS version
  41793.         CH = DOS version flag
  41794.         CL = OEM number
  41795.         DH = major DR-DOS version number (FFh if unknown)
  41796.         DL = minor DR-DOS version number (FFh if unknown)
  41797. SeeAlso: AX=E003h,AX=E007h,INT 21/AH=30h
  41798. ----------2FE003-----------------------------
  41799. INT 2F - SETDRVER.COM v2.10+ - RESET INTERNAL VARIABLES
  41800.     AX = E003h
  41801.     BH = new major DOS version
  41802.     BL = new minor DOS version
  41803.     CH = new DOS version flag
  41804.     CL = new DOS revision number
  41805.     DH = new OEM number
  41806. SeeAlso: AX=E002h
  41807. ----------2FE004-----------------------------
  41808. INT 2F - SETDRVER.COM v2.10+ - ENABLE TSR
  41809.     AX = E004h
  41810. Return: AL = FFh if successful
  41811. SeeAlso: AX=E000h,AX=E005h,AX=E006h
  41812. ----------2FE005-----------------------------
  41813. INT 2F - SETDRVER.COM v2.10+ - DISABLE TSR
  41814.     AX = E005h
  41815. Return: AL = FFh if successful
  41816. SeeAlso: AX=E000h,AX=E004h,AX=E006h
  41817. ----------2FE006-----------------------------
  41818. INT 2F - SETDRVER.COM v2.10+ - GET TSR STATUS
  41819.     AX = E006h
  41820. Return: AL = FFh if successful
  41821.         BL = status
  41822.         01h resident and active
  41823.         02h resident and inactive
  41824. ----------2FE007-----------------------------
  41825. INT 2F - SETDRVER.COM v2.10+ - GET TaskMAX STATUS AT INSTALLATION
  41826.     AX = E007h
  41827. Return: AL = FFh if successful
  41828.         BL = status
  41829.         00h if TaskMAX not loaded before SETDRVER
  41830.         FFh if TaskMAX was loaded before SETDRVER
  41831. SeeAlso: AX=E003h
  41832. ----------2FE0-------------------------------
  41833. INT 2F - SETDRVER.COM - RESERVED FOR FUTURE USE
  41834.     AH = E0h
  41835.     AL = 08h-10h
  41836. ----------2FE300-----------------------------
  41837. INT 2F - ANARKEY.COM - INSTALLATION CHECK
  41838.     AX = E300h
  41839. Return: AL = 00h not installed
  41840.          FEh if installed but suspended (v3.0+)
  41841.          FFh installed
  41842. Notes:    ANARKEY.COM is a commandline recall program by Steven Calwas
  41843.     E3h is the default function number, but can be set to any value from
  41844.       C0h to FFh
  41845. SeeAlso: AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h,AX=E307h
  41846. ----------2FE301-----------------------------
  41847. INT 2F U - ANARKEY.COM v2+ - GET ???
  41848.     AX = E301h
  41849. Return: DX:BX -> ???
  41850. SeeAlso: AX=E300h
  41851.  
  41852. Format of returned data structure for ANARKEY v2.0:
  41853. Offset    Size    Description
  41854.  -7   7 BYTEs    signature ('ANARKEY')
  41855.  00h    WORD    ??? (I see 0001h in v2.0)
  41856.  02h    WORD    ??? (I see 0001h in v2.0)
  41857.  04h    WORD    ??? (I see 0 in v2.0)
  41858.  06h    WORD    PSP segment of next program loaded
  41859.  
  41860. Format of returned data structure for ANARKEY v3+:
  41861. Offset    Size    Description
  41862.  -1    BYTE    multiplex number
  41863.  00h    WORD    ??? (I see 0001h in v3.0-4.0)
  41864.  02h    WORD    ??? (I see 0001h in v3.0-4.0)
  41865.  04h    BYTE    ??? (I see 0 in v3.0-4.0)
  41866.  05h    WORD    PSP segment of next program loaded
  41867. ----------2FE302-----------------------------
  41868. INT 2F U - ANARKEY.COM v3+ - ???
  41869.     AX = E302h
  41870.     BL = ???
  41871. Return: ???
  41872. SeeAlso: AX=E300h
  41873. ----------2FE303-----------------------------
  41874. INT 2F U - ANARKEY.COM v3+ - ANARKMD API
  41875.     AX = E303h
  41876.     BL = function
  41877.         01h    toggle insert mode
  41878.         02h    display contents of history buffer
  41879.         03h    write history buffer to file
  41880.         ES:DX -> file name
  41881.         04h    clear history buffer
  41882.         05h    undefine all aliases
  41883.         06h    show aliases
  41884.         07h    list programs using Unix switchar
  41885.         08h    jump to bottom of history buffer    
  41886.         09h (v4.0) add string to history buffer
  41887.         ES:DX -> ASCIZ string
  41888.         0Ah (v4.0) ???
  41889.         ES:DX -> ???
  41890.         0Bh (v4.0) copy string to edit buffer for use as next input line
  41891.         ES:DX -> ASCIZ string
  41892.         0Ch (v4.0) ???
  41893.         0Dh (v4.0) copy ??? to ???
  41894.         0Eh (v4.0) ???
  41895.         0Fh (v4.0) ???
  41896.         10h (v4.0) set ??? flag
  41897.         11h (v4.0) display error message about running in EMS under Windows
  41898. Return: ???
  41899. SeeAlso: AX=E300h
  41900. ----------2FE304-----------------------------
  41901. INT 2F U - ANARKEY.COM v2+ - ???
  41902.     AX = E304h
  41903.     BL = ???
  41904. Return: ???
  41905. SeeAlso: AX=E300h
  41906. ----------2FE305-----------------------------
  41907. INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY
  41908.     AX = E305h
  41909.     BL = new state
  41910.         01h suspended
  41911.         00h enabled
  41912. SeeAlso: AX=E300h
  41913. ----------2FE306-----------------------------
  41914. INT 2F U - ANARKEY.COM v4.0 - GET ???
  41915.     AX = E306h
  41916. Return: AX = ???
  41917. SeeAlso: AX=E300h
  41918. ----------2FE307-----------------------------
  41919. INT 2F U - ANARKEY.COM v4.0 - GET ???
  41920.     AX = E307h
  41921. Return: AX = ???
  41922.     BL = ???
  41923. SeeAlso: AX=E300h
  41924. ----------2FE44D-----------------------------
  41925. INT 2F - NDOS - API
  41926.     AX = E44Dh
  41927. Note:    as NDOS is a licensed version of 4DOS v3.03, the API is identical to
  41928.       that for 4DOS, except that AH=E4h instead of D4h and the installation
  41929.       check returns AX=44EEh instead of AX=44DDh
  41930. SeeAlso: AX=D44Dh,AX=E44Eh
  41931. ----------2FE44EBX0000-----------------------
  41932. INT 2F - NDOS - AWAITING USER INPUT
  41933.     AX = E44Eh
  41934.     BX = 0000h NDOS is ready to display prompt
  41935.        = 0001h NDOS has displayed the prompt, about to accept user input
  41936. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  41937. SeeAlso: AX=E44Dh
  41938. ----------2FED00-----------------------------
  41939. INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK
  41940.     AX = ED00h
  41941.     BL = DOS extender
  41942.         01h 286dosx v1.3+ (Software Development Kit)
  41943.         02h 286dosx v1.3+ (Run-Time Kit)
  41944.         03h 386dosx v4.0+ (SDK)
  41945.         04h 386dosx v4.0+ (RTK)
  41946. Return: AL = status
  41947.         00h not installed
  41948.         FFh installed
  41949.         SI = 5048h ("PH")
  41950.         DI = 4152h ("AR")
  41951.         CH = major version number
  41952.         CL = minor version number
  41953.         DX = flags
  41954.             bit 0: running under DPMI
  41955.             1: running under Phar Lap VMM
  41956. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h
  41957. ----------2FED80-----------------------------
  41958. INT 2F - Phar Lap 286|DOS Extender Lite v2.5 - ???
  41959.     AX = ED80h
  41960.     BL = DOS extender ID (see AX=ED00h)
  41961.     SI = 5048h ("PH")
  41962.     DI = 4152h ("AR")
  41963.     ???
  41964. Return: ???
  41965. ----------2FEE00-----------------------------
  41966. INT 2F - GRIDLOC.EXE - INSTALLATION CHECK
  41967.     AX = EE00h
  41968. Return: AL = FFh if installed
  41969. Note:    GRIDLOC is a PC security program by Intelligent Security Systems, Inc.
  41970. ----------2FF000-----------------------------
  41971. INT 2F U - 4MAP - INSTALLATION CHECK
  41972.     AX = F000h
  41973. Return: AX = 00FFh
  41974. Notes:    returns AX=00FFh for any value of AL not listed here
  41975.     4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  41976. ----------2FF001-----------------------------
  41977. INT 2F U - 4MAP - GET KEY MAPPINGS
  41978.     AX = F001h
  41979. Return: ES:BX -> key mappings
  41980. SeeAlso: AX=F000h
  41981. ----------2FF002-----------------------------
  41982. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  41983.     AX = F002h
  41984.     BL = character to insert
  41985. Return: AX = status
  41986.         0000h successful
  41987.         0001h buffer full
  41988. SeeAlso: AX=F000h,AX=F003h
  41989. ----------2FF003-----------------------------
  41990. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  41991.     AX = F003h
  41992.     BL = character to insert
  41993. Return: AX = status
  41994.         0000h successful
  41995.         0001h buffer full
  41996. SeeAlso: AX=F000h,AX=F002h
  41997. ----------2FF1-------------------------------
  41998. INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK
  41999.     AH = F1h
  42000.     AL <> F1h
  42001. Return: AL = F1h if installed
  42002. Note:    MIN-MEM is a shareware TSR manager by Biologic which permits up to 24
  42003.       popup TSRs to be loaded but swapped out to disk, EMS, or XMS.     One
  42004.       TSR at a time is brought back into memory at the user's request.
  42005. ----------2FF100-----------------------------
  42006. INT 2F - DOS EXTENDER INSTALLATION CHECK
  42007.     AX = F100h
  42008. Return: AL = FFh if DOS extender present
  42009.         SI = 444Fh ("DO")
  42010.         DI = 5358h ("SX")
  42011. Note:    supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC
  42012. SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h
  42013. ----------2FF700-----------------------------
  42014. INT 2F - AUTOPARK.COM - INSTALLATION CHECK
  42015.     AX = F700h
  42016. Return: AL = 00h not installed
  42017.          FFh installed
  42018. Note:    AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  42019. ----------2FF701-----------------------------
  42020. INT 2F - AUTOPARK.COM - SET PARKING DELAY
  42021.     AX = F701h
  42022.     BX:CX = 32-bit count of 55ms timer ticks
  42023. ----------2FF800CX4455-----------------------
  42024. INT 2F U - SuperStor PRO 2XON.COM - INSTALLATION CHECK
  42025.     AX = F800h
  42026.     CX = 4455h ("DU")
  42027.     DL = 45h ("E")
  42028. Return: AL = FFh if installed
  42029.         ES:BX -> ASCII signature "Universal Data Exchange"
  42030. Program: SuperStor is a disk-compression program by Addstor.
  42031. Note:    returns AX=0001h if AL is not 00h or 01h
  42032. SeeAlso: AX=1001h,AX=F801h
  42033. ----------2FF801CX4455-----------------------
  42034. INT 2F U - SuperStor PRO 2XON.COM - UNINSTALL
  42035.     AX = F801h
  42036.     CX = 4455h ("DU")
  42037.     DL = 45h ("E")
  42038.     ES:BX = return address if successful
  42039. Return: at specified address if successfully removed from memory
  42040.     else
  42041.         AL = error code
  42042.         ???
  42043. Program: SuperStor is a disk-compression program by Addstor.
  42044. Note:    returns AX=0001h if AL is not 00h or 01h
  42045. SeeAlso: AX=1001h,AX=F800h
  42046. ----------2FFB-------------------------------
  42047. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  42048.     AH = FBh
  42049. ----------2FFB00-----------------------------
  42050. INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK
  42051.     AX = FB00h
  42052. Return: AX = 00FFh if installed
  42053. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  42054. SeeAlso: INT 10/AH=38h,INT 14/AX=F0F1h
  42055. ----------2FFB00-----------------------------
  42056. INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK
  42057.     AX = FB00h
  42058. Return: AX = FFFFh if installed
  42059.         BX = version (BCD, BH=major, BL=minor)
  42060. SeeAlso: AX=FB03h"Jot-It",AX=FB01h"Jot-It"
  42061. ----------2FFB01-----------------------------
  42062. INT 2F U - AutoBraille v1.1A - ???
  42063.     AX = FB01h
  42064.     ???
  42065. Return: ???
  42066. ----------2FFB01-----------------------------
  42067. INT 2F U - Jot-It! v1.50 - GET USER NAME
  42068.     AX = FB01h
  42069. Return: DX:BX -> ASCIZ user name
  42070. SeeAlso: AX=FB02h"Jot-It"
  42071. ----------2FFB02-----------------------------
  42072. INT 2F U - AutoBraille v1.1A - ???
  42073.     AX = FB02h
  42074. Return: AH = ???
  42075.     AL = ???
  42076. ----------2FFB02-----------------------------
  42077. INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY
  42078.     AX = FB02h
  42079. Return: DX:BX -> ASCIZ name of directory in which messages are stored
  42080. SeeAlso: AX=FB01h"Jot-It"
  42081. ----------2FFB03-----------------------------
  42082. INT 2F U - AutoBraille v1.1A - GET NEXT ???
  42083.     AX = FB03h
  42084. Return: AX = ???
  42085. ----------2FFB03-----------------------------
  42086. INT 2F U - Jot-It! v1.50 - UNINSTALL
  42087.     AX = FB03h
  42088. Return: resident code removed from memory
  42089. Note:    CAUTION: NO checks are performed to ensure that the interrupt vectors
  42090.       being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code
  42091. SeeAlso: AX=FB00h"Jot-It"
  42092. ----------2FFB-------------------------------
  42093. INT 2F U - AutoBraille v1.1A - SET ???
  42094.     AH = FBh
  42095.     AL = 04h-08h
  42096. Return: AX = 0000h
  42097. ----------2FFB-------------------------------
  42098. INT 2F U - AutoBraille v1.1A - SET ???
  42099.     AH = FBh
  42100.     AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2)
  42101. Return: ???
  42102. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  42103. ----------2FFB-------------------------------
  42104. INT 2F U - AutoBraille v1.1A - SET ???
  42105.     AH = FBh
  42106.     AL = 10h-1Fh
  42107.     ???
  42108. Return: ???
  42109. ----------2FFB20-----------------------------
  42110. INT 2F U - AutoBraille v1.1A - SET ??? FLAGS
  42111.     AX = FB20h
  42112.     BL = flags to set
  42113. SeeAlso: AX=FB21h"AutoBraille"
  42114. ----------2FFB21-----------------------------
  42115. INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS
  42116.     AX = FB21h
  42117.     BL = flags to clear
  42118. SeeAlso: AX=FB20h"AutoBraille"
  42119. ----------2FFB22-----------------------------
  42120. INT 2F U - AutoBraille v1.1A - SET ???
  42121.     AX = FB22h
  42122.     BL = ???
  42123. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  42124. ----------2FFB28-----------------------------
  42125. INT 2F U - AutoBraille v1.1A - ???
  42126.     AX = FB28h
  42127.     BX = ???
  42128.     ???
  42129. Return: ???
  42130. SeeAlso: AX=FB29h"AutoBraille"
  42131. ----------2FFB29-----------------------------
  42132. INT 2F U - AutoBraille v1.1A - ???
  42133.     AX = FB29h
  42134.     BX = ???
  42135.     ???
  42136. Return: ???
  42137. SeeAlso: AX=FB28h"AutoBraille"
  42138. ----------2FFB-------------------------------
  42139. INT 2F U - AutoBraille v1.1A - SET ???
  42140.     AH = FBh
  42141.     AL = 2Bh-34h
  42142.     BX = ???
  42143. ----------2FFB35-----------------------------
  42144. INT 2F U - AutoBraille v1.1A - SET ???
  42145.     AX = FB35h
  42146.     BL = ???
  42147. ----------2FFB36-----------------------------
  42148. INT 2F U - AutoBraille v1.1A - SET ???
  42149.     AX = FB36h
  42150.     BL = ???
  42151. ----------2FFB37-----------------------------
  42152. INT 2F U - AutoBraille v1.1A - SET ???
  42153.     AX = FB37h
  42154.     BL = ???
  42155. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  42156. ----------2FFB42BX0001-----------------------
  42157. INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK???
  42158.     AX = FB42h
  42159.     BX = 0001h
  42160. Return: AX = version number??? (AL=major, AH=minor)
  42161.     CX = next-selector increment
  42162. ---BC2.0---
  42163.     ES:BX -> 80-byte buffer for ???
  42164.     DX = DPMI version
  42165. ---BC3.0---
  42166.     BX = ??? (0000h)
  42167.     DX = ???
  42168.     ES:SI -> list of valid selectors ???
  42169. Notes:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  42170.       as version 1.000, while the version distributed with BC++ 3.0
  42171.       identifies itself as version 1.0; the former is 10864 bytes, the
  42172.       latter 22180 bytes.  The BC2.0 version is a DPMI loader, while
  42173.       the BC3.0 version also adds a DPMI host and DOS extender
  42174.     the BC++ 2.0 version displays an error message if called with BX
  42175.       values other than 0001h-0008h
  42176. ----------2FFB42BX0002-----------------------
  42177. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY
  42178.     AX = FB42h
  42179.     BX = 0002h
  42180.     CX = size in bytes
  42181.     DX = bit flags
  42182.         bit 2: set to allocate DOS memory, clear for DPMI memory
  42183.     SI = selector of descriptor to be modified to access allocated memory
  42184.     DI = selector of a second descriptor to be modified
  42185. Return: AX = ??? or 0000h on error
  42186.     CX:DX = linear base address of DPMI memory block
  42187.     SI:DI = handle for DPMI memory block or FFFFh:FFFFh
  42188.     ???
  42189. Note:    two segment descriptors may be set if a code and an aliased data
  42190.       segment are required; if only one descriptor is needed, SI should
  42191.       equal DI on entry
  42192. BUG:    when allocating DOS memory, the code computes the linear address by
  42193.       multiplying the segment number by 4 rather than shifting by 4
  42194. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h
  42195. ----------2FFB42BX0002-----------------------
  42196. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY
  42197.     AX = FB42h
  42198.     BX = 0002h
  42199.     ES:SI -> memory block info (see below)
  42200. Return: ???
  42201. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  42202.       as version 1.000, while the version distributed with BC++ 3.0
  42203.       identifies itself as version 1.0; the former is 10864 bytes, the
  42204.       latter 22180 bytes.
  42205. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h
  42206.  
  42207. Format of memory block info:
  42208. Offset    Size    Description
  42209.  00h    WORD    flags
  42210.         bit 0: set if data segment rather than code segment
  42211.         bit 1: information valid
  42212.         bit 2: set if DOS memory block rather than DPMI memory block
  42213.         bit 4: ???
  42214.         bit 15: set if no LDT selectors for memory block???
  42215.  02h    DWORD    block size in bytes
  42216. ---DPMI memory block---
  42217.  06h    DWORD    DPMI memory block handle
  42218. ---DOS memory block---
  42219.  06h    WORD    real-mode segment of memory block
  42220.  08h    WORD    selector of memory block
  42221. ---
  42222.  0Ah    DWORD    linear address of memory
  42223.  0Eh    WORD    memory operation error code
  42224.         0008h no more free LDT descriptors
  42225. ---if flags bit 0 clear---
  42226.  10h    WORD    code segment selector for memory block or 0000h or FFFFh
  42227.  12h    WORD    data alias selector for memory block or 0000h or FFFFh
  42228. ---if flags bit 0 set---
  42229.  10h    WORD    data segment selector for memory block or 0000h or FFFFh
  42230.  12h    WORD    unused???
  42231. ----------2FFB42BX0003-----------------------
  42232. INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY
  42233.     AX = FB42h
  42234.     BX = 0003h
  42235. Return: DX:AX = size of largest free block in paragraphs
  42236.         0000h:0000h on error (BC3.0 version only)
  42237. Note:    AX and DX are destroyed on error, but no other error indicator is
  42238.       returned, under the BC++ 2.0 version of DPMILOAD
  42239. SeeAlso: AX=FB42h/BX=0002h
  42240. ----------2FFB42BX0004-----------------------
  42241. INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE???
  42242.     AX = FB42h
  42243.     BX = 0004h
  42244.     DS:DX -> ASCIZ filename of protected-mode executable
  42245. Return: CX = selector of ??? or 0000h
  42246. ---BC3.0---
  42247.     DX = status (0000h,FFF4h,others???) (see below)
  42248. Note:    the filename may also be terminated by a CR rather than a NUL under the
  42249.       BC++ 3.0 version of DPMILOAD
  42250.  
  42251. Values for status:
  42252.  0000h    successful
  42253.  0001h    ??? failure
  42254.  0002h    invalid selector
  42255.  0004h    unknown error
  42256.  0008h    no more LDT descriptors available???
  42257.  FFDEh    unable to set descriptor
  42258.  FFDFh    unable to get segment base address
  42259.  FFE0h    ???
  42260.  FFF2h    invalid parameter value
  42261.  FFF4h    component of filename too long (name not in 8.3 format)
  42262.  FFF5h    pathname too long (>79 chars)
  42263.  FFF6h    ???
  42264.  FFF8h    ???
  42265.  FFF9h    index out of range
  42266.  FFFAh    ???
  42267.  FFFCh    invalid access to code segment???
  42268.  FFFEh    ???
  42269.  FFFFh    general error
  42270. ----------2FFB42BX0005-----------------------
  42271. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME
  42272.     AX = FB42h
  42273.     BX = 0005h
  42274.     CX = selector of DPMILOAD data (see below)
  42275.     DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored)
  42276. Return: DX = status (see AX=FB42h/BX=0004h)
  42277.         0000h successful
  42278.         AX:BX -> ??? FAR function (called with two words on top of stk)
  42279.         else
  42280.         BX destroyed
  42281. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh
  42282.  
  42283. Format of DPMILOAD data:
  42284. Offset    Size    Description
  42285.  00h 12 BYTEs    ???
  42286.  0Ch    WORD    ??? bit flags
  42287.  0Eh 14 BYTEs    ???
  42288.  1Ch    WORD    number of memory control records
  42289.  1Eh 25 BYTEs    ???
  42290.  37h    BYTE    ??? bit flags
  42291.         bit 4: data valid???
  42292.  38h  4 BYTEs    ???
  42293.  3Ch    WORD    ???
  42294.  3Eh 12 BYTEs    ???
  42295.  46h    BYTE    ??? counter
  42296.  47h    BYTE    ???
  42297.  48h    BYTE    ???
  42298.  49h    BYTE    ???
  42299.  4Ah    WORD    ???
  42300.  4Ch  2 BYTEs    ???
  42301.  4Eh    WORD    offset of array of 64-byte memory control records
  42302.  52h    WORD    offset of name list (see below)
  42303.  54h  4 BYTEs    ???
  42304.  58h    WORD    offset of array of 6-byte objects
  42305.  5Ah  8 BYTEs    ???
  42306.  62h  9 BYTEs    ASCIZ name for ???
  42307.  6Bh  9 BYTEs    ASCIZ name for ???
  42308.     ???
  42309.  
  42310. Format of name list entry [array]:
  42311. Offset    Size    Description
  42312.  00h    BYTE    length of name (00h if end of array)
  42313.  01h  N BYTEs    name
  42314.  N+1    WORD    1-based index into array of unknown 6-byte objects
  42315.  
  42316. Format of 6-byte objects:
  42317. Offset    Size    Description
  42318.  00h    BYTE    ???
  42319.  01h    BYTE    ???
  42320.  02h    BYTE    ???
  42321.  03h    BYTE    1-based index of memory control record
  42322.  04h    WORD    ???
  42323.  
  42324. Format of memory control record:
  42325. Offset    Size    Description
  42326.  00h 20 BYTEs    memory block info (see AX=FB42h/BX=0002h)
  42327.  14h  6 BYTEs    ???
  42328.  1Ah    BYTE    ???
  42329.  1Bh  2 BYTEs    ???
  42330.  1Dh    BYTE    ??? bit flags
  42331.  1Eh 14 BYTEs    ???
  42332.  2Ch    DWORD    pointer to ??? memory control record or 0000h:0000h
  42333.  30h    DWORD    pointer to ??? memory control record or 0000h:0000h
  42334.  34h    DWORD    pointer to next??? memory control record or 0000h:0000h
  42335.  38h    DWORD    pointer to prev??? memory control record or 0000h:0000h
  42336.  3Ch  4 BYTEs    ???
  42337. Note:    the pointers at offsets 2Ch and 30h form a doubly-linked list, as do
  42338.       the pointers at offsets 34h and 38h
  42339. ----------2FFB42BX0006-----------------------
  42340. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER
  42341.     AX = FB42h
  42342.     BX = 0006h
  42343.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  42344.     DX = 1-based index into array of ??? 6-byte objects
  42345. Return: DX = status (see AX=FB42h/BX=0004h)
  42346.         0000h successful
  42347.         AX:BX -> ??? FAR function (called with two words on top of stk)
  42348.         else
  42349.         BX destroyed
  42350. SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh
  42351. ----------2FFB42BX0007-----------------------
  42352. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ???
  42353.     AX = FB42h
  42354.     BX = 0007h
  42355.     CX = selector of ???
  42356. Return: ???
  42357. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  42358.       as version 1.000, while the version distributed with BC++ 3.0
  42359.       identifies itself as version 1.0; the former is 10864 bytes, the
  42360.       latter 22180 bytes.
  42361. ----------2FFB42BX0007-----------------------
  42362. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42363.     AX = FB42h
  42364.     BX = 0007h
  42365.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  42366.     ???
  42367. Return: DX = status (see AX=FB42h/BX=0004h)
  42368.         0000h successful    
  42369.         AX = ???
  42370. ----------2FFB42BX0008-----------------------
  42371. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  42372.     AX = FB42h
  42373.     BX = 0008h
  42374.     CX = bit flags
  42375.         bit 2: set if DPMI memory, clear if DOS memory
  42376.     DX = selector of DOS memory block
  42377.     SI:DI = handle of DPMI memory block
  42378. Return: DX = 0000h on error, unchanged if succcessful
  42379. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  42380.       as version 1.000, while the version distributed with BC++ 3.0
  42381.       identifies itself as version 1.0; the former is 10864 bytes, the
  42382.       latter 22180 bytes.
  42383. SeeAlso: AX=FB42h/BX=0002h
  42384. ----------2FFB42BX0008-----------------------
  42385. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  42386.     AX = FB42h
  42387.     BX = 0008h
  42388.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  42389. Return: ???
  42390. SeeAlso: AX=FB42h/BX=0009h
  42391. ----------2FFB42BX0009-----------------------
  42392. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK
  42393.     AX = FB42h
  42394.     BX = 0009h
  42395.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  42396.     ???
  42397. Return: ???
  42398. SeeAlso: AX=FB42h/BX=0008h"3.0"
  42399. ----------2FFB42BX000A-----------------------
  42400. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL
  42401.     AX = FB42h
  42402.     BX = 000Ah
  42403.     CX = 0001h
  42404.     DX = ???
  42405.     SI = ???
  42406. Return: after user exits subshell
  42407. Notes:    this call is used by DPMIRES; unlike most of the DPMILOAD calls, this
  42408.       function is not available in protected mode.
  42409.     the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0
  42410.       version also adds a DPMI host and DOS extender.
  42411. SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h
  42412. ----------2FFB42BX000B-----------------------
  42413. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED
  42414.     AX = FB42h
  42415.     BX = 000Bh
  42416. ----------2FFB42BX000C-----------------------
  42417. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK???
  42418.     AX = FB42h
  42419.     BX = 000Ch ???
  42420.     ES:SI -> memory block info ??? (see AX=FB42h/BX=0002h"3.0")
  42421. Return: DX = status???
  42422. SeeAlso: AX=FB42h/BX=000Fh
  42423. ----------2FFB42BX000D-----------------------
  42424. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT
  42425.     AX = FB42h
  42426.     BX = 000Dh
  42427.     CX = number of words to copy from protected-mode to real mode stack
  42428.     DL = interrupt number
  42429.     DH = flags
  42430.         bit 0: reset the interrupt controller and A20 line
  42431.     ES:DI -> real-mode call structure (see INT 31/AX=0300h)
  42432. Return: CX = status
  42433.         0000h successful
  42434.         0001h failed
  42435. SeeAlso: INT 31/AX=0300h
  42436. ----------2FFB42BX000E-----------------------
  42437. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  42438.     AX = FB42h
  42439.     BX = 000Eh
  42440.     DS:DX -> ASCIZ or CR-terminated name of ???
  42441. Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) corresponding to
  42442.         name, 0000h on error
  42443. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh
  42444. ----------2FFB42BX000F-----------------------
  42445. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK???
  42446.     AX = FB42h
  42447.     BX = 000Fh
  42448.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  42449. Return: ???
  42450. SeeAlso: AX=FB42h/BX=000Ch
  42451. ----------2FFB42BX0010-----------------------
  42452. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR
  42453.     AX = FB42h
  42454.     BX = 0010h
  42455.     DX = segment number
  42456. Return: CX = status (see also AX=FB42h/BX=0004h)
  42457.         0000h successful
  42458.         DX = selector number for descriptor
  42459.         0008h failed
  42460. SeeAlso: AX=FB42h/BX=0023h
  42461. ----------2FFB42BX0011-----------------------
  42462. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42463.     AX = FB42h
  42464.     BX = 0011h
  42465.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  42466.     ???
  42467. Return: DX = status (see also AX=FB42h/BX=0004h)
  42468.         0000h successful
  42469.         AX:BX -> ??? name
  42470.         0002h invalid selector
  42471.         FFFEh ??? error
  42472. ----------2FFB42BX0012-----------------------
  42473. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42474.     AX = FB42h
  42475.     BX = 0012h
  42476.     CX = selector for ???
  42477. Return: CX = selector for ???
  42478. ----------2FFB42BX0013-----------------------
  42479. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42480.     AX = FB42h
  42481.     BX = 0013h
  42482.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  42483.     DX = 1-based index of ???
  42484. Return: CX = status (see also AX=FB42h/BX=0004h)
  42485.         0000h successful
  42486.         BX = ??? or 0000h
  42487.         0002h invalid selector
  42488.         FFF9h ??? error
  42489. ----------2FFB42BX0014-----------------------
  42490. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42491.     AX = FB42h
  42492.     BX = 0014h ???
  42493.         CX = 0001h
  42494.         Return: BX = 0000h
  42495. Note:    unlike most of the DPMILOAD functions, this call is available only in
  42496.       real or V86 mode
  42497. SeeAlso: AX=FB42h/BX=000Ah
  42498. ----------2FFB42BX0015-----------------------
  42499. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42500.     AX = FB42h
  42501.     BX = 0015h uninstall
  42502.     CX = 0001h
  42503. Return: ???
  42504. Note:    unlike most of the DPMILOAD functions, this call is available only in
  42505.       real or V86 mode
  42506. SeeAlso: AX=FB42h/BX=000Ah
  42507. ----------2FFB42BX0016-----------------------
  42508. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  42509.     AX = FB42h
  42510.     BX = 0016h
  42511.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  42512. Return: DX = status (see also AX=FB42h/BX=0004h)
  42513.         0000h successful
  42514.         CX = ???
  42515. ----------2FFB42BX0017-----------------------
  42516. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42517.     AX = FB42h
  42518.     BX = 0017h
  42519.     CX = ???
  42520.     DX = ???
  42521.     ???
  42522. Return: DX = status (0000h,0001h) (see below)
  42523. ----------2FFB42BX0018-----------------------
  42524. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ???
  42525.     AX = FB42h
  42526.     BX = 0018h
  42527.     CX = ???
  42528. ----------2FFB42BX0019-----------------------
  42529. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42530.     AX = FB42h
  42531.     BX = 0019h
  42532.     CX = selector for ???
  42533.     ???
  42534. Return: DX = status (see also AX=FB42h/BX=0004h)
  42535.         0000h successful
  42536.         CX = selector for ???
  42537. ----------2FFB42BX001A-----------------------
  42538. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42539.     AX = FB42h
  42540.     BX = 001Ah
  42541.     CX = selector for ???
  42542.     ???
  42543. Return: DX = status (see also AX=FB42h/BX=0004h)
  42544.         0000h successful
  42545.         0004h failed
  42546.     CX:BX -> ???
  42547. ----------2FFB42BX001B-----------------------
  42548. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42549.     AX = FB42h
  42550.     BX = 001Bh
  42551.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  42552.     DX = offset of ???
  42553. Return: DX = status (see also AX=FB42h/BX=0004h)
  42554.         0000h successful
  42555.         BX = selector for ???
  42556.         CX = selector for ???
  42557.         0002h invalid selector
  42558. ----------2FFB42BX001C-----------------------
  42559. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42560.     AX = FB42h
  42561.     BX = 001Ch
  42562.     ES = selector for DPMILOAD data (see AX=FB42h/BX=0005h)
  42563.     CX = 1-based index of ???
  42564.     DX = 1-based index of ???
  42565. Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h)
  42566. ----------2FFB42BX001D-----------------------
  42567. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  42568.     AX = FB42h
  42569.     BX = 001Dh
  42570. Return: CX:DX = ???
  42571. ----------2FFB42BX001E-----------------------
  42572. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42573.     AX = FB42h
  42574.     BX = 001Eh
  42575.     CX = ???
  42576.     ???
  42577. Return: DX = status (see also AX=FB42h/BX=0004h)
  42578.         0000h successful
  42579.         FFF7h ??? error
  42580.     CX:BX -> ???
  42581. ----------2FFB42BX001F-----------------------
  42582. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  42583.     AX = FB42h
  42584.     BX = 001Fh
  42585.     DS:DX -> 8-character name of ???
  42586.     ???
  42587. Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) for ???
  42588.         0000h on error
  42589. SeeAlso: AX=FB42h/BX=000Eh
  42590. ----------2FFB42BX0020-----------------------
  42591. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION???
  42592.     AX = FB42h
  42593.     BX = 0020h
  42594. Return: DX = ??? (always 0000h)
  42595. ----------2FFB42BX0021-----------------------
  42596. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT
  42597.     AX = FB42h
  42598.     BX = 0021h
  42599.     CL = exception number (00h-1Fh)
  42600. Return: DX = status (see also AX=FB42h/BX=0004h)
  42601.         0000h successful
  42602.         AX:BX = selector:offset of handler
  42603.         FFF2h unable to get exception handler vector
  42604. SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h
  42605. ----------2FFB42BX0022-----------------------
  42606. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT
  42607.     AX = FB42h
  42608.     BX = 0022h
  42609.     CL = exception number (00h-1Fh)
  42610.     SI:DX = selector:offset of new handler
  42611. Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h)
  42612. SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h
  42613. ----------2FFB42BX0023-----------------------
  42614. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER
  42615.     AX = FB42h
  42616.     BX = 0023h
  42617.     CX = selector
  42618. Return: DX = status (see also AX=FB42h/BX=0004h)
  42619.         0000h successful
  42620.         CX = real-mode segment number
  42621.         FFF2h descriptor has invalid base address for real-mode segment
  42622. SeeAlso: AX=FB42h/BX=0010h
  42623. ----------2FFB42BX0024-----------------------
  42624. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR
  42625.     AX = FB42h
  42626.     BX = 0024h
  42627.     CL = interrupt number
  42628. Return: DX = status (0000h) (see also AX=FB42h/BX=0004h)
  42629.     AX:BX = selector:offset of handler
  42630. SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h
  42631. ----------2FFB42BX0025-----------------------
  42632. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR
  42633.     AX = FB42h
  42634.     BX = 0025h
  42635.     CL = interrupt number
  42636.     SI:DX = selector:offset of new handler
  42637. Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h)
  42638. SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h
  42639. ----------2FFB42BX0026-----------------------
  42640. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  42641.     AX = FB42h
  42642.     BX = 0026h
  42643.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  42644.     DX = 1-based index of ???
  42645.     ???
  42646. Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h)
  42647.         0000h successful
  42648.         BX = offset of ??? within data structure
  42649. ----------2FFB42BX0027-----------------------
  42650. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  42651.     AX = FB42h
  42652.     BX = 0027h
  42653.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  42654.     DX = offset of ???
  42655. Return: DX = status (see also AX=FB42h/BX=0004h)
  42656.         0000h successful
  42657.         BX = ???
  42658. ----------2FFB42BX0080-----------------------
  42659. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  42660.     AX = FB42h
  42661.     BX = 0080h
  42662.     ???
  42663. Return: AX = ???
  42664.     ???
  42665. ----------2FFB42BX0081-----------------------
  42666. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  42667.     AX = FB42h
  42668.     BX = 0081h
  42669.     ???
  42670. Return: AX = ???
  42671.     ???
  42672. ----------2FFB43-----------------------------
  42673. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION
  42674.     AX = FB43h
  42675.     BX = subfunction (at least 0000h-000Eh)
  42676. Notes:    this function is only present in protected mode; it does nothing but
  42677.       an immediate IRET
  42678.     DPMILOAD.EXE itself calls various subfunctions:
  42679.         subfunction 0004h is called with CX=selector of ???, DI=selector
  42680.         of DPMILOAD data
  42681.         subfunction 0008h is called with CX=selector of DPMILOAD data
  42682. ----------2FFB64-----------------------------
  42683. INT 2F U - AutoBraille v1.1A - GET ???
  42684.     AX = FB64h
  42685. Return: AX = ??? (0006h seen)
  42686. Note:    AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  42687. ----------2FFBA1BX0081-----------------------
  42688. INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK
  42689.     AX = FBA1h
  42690.     BX = 0081h
  42691.     ES:DI -> 16-byte buffer
  42692. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  42693. Note:    TKERNEL is a licensed version of AI Architects/Ergo's OS/x86.  It was
  42694.       present only in Borland C++ 2.0; with version 3.0, the DOS extender
  42695.       was moved into DPMILOAD.
  42696. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h 
  42697. SeeAlso: INT 21/AX=4403h"TKERNEL"
  42698. ----------2FFBA1BX0082-----------------------
  42699. INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT
  42700.     AX = FBA1h
  42701.     BX = 0082h
  42702.     ES:DI -> response buffer (see below)
  42703. Return: ES:DI buffer filled
  42704. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  42705.  
  42706. Format of response buffer:
  42707. Offset    Size    Description
  42708.  00h  4 BYTEs    signature "IABH"
  42709.  04h    DWORD    pointer to FAR extender entry point
  42710.  
  42711. Call entry point with:
  42712.     AX = function number
  42713.         0000h initialize???
  42714.         STACK:    WORD  ???
  42715.         Return: AX = status???
  42716.             STACK unchanged
  42717.         0001h get version???
  42718.         Return: AX = 0200h for v2.0.34
  42719.         0002h get ???
  42720.         Return: AX = ??? (011Eh or 0182h seen)
  42721.         0003h load protected-mode executable
  42722.         STACK:    DWORD -> ASCIZ filename of executable
  42723.             DWORD    ???
  42724.             DWORD -> program arguments (counted string plus CR)
  42725.             DWORD -> environment for protected-mode executable
  42726.                 (terminated with two consecutive NULs)
  42727.             DWORD -> WORD buffer for ???
  42728.         Return:    AX = status???
  42729.             STACK unchanged
  42730.         0004h get descriptor
  42731.         STACK:    WORD    selector for which to get descriptor
  42732.             WORD    segment number (when running in real mode)
  42733.             DWORD -> buffer for descriptor
  42734.         Return: CF clear if successful
  42735.                 buffer filled
  42736.             CF set on error
  42737.                 AX destroyed???
  42738.             STACK unchanged
  42739.         0005h ???
  42740.         STACK:    WORD    selector for ???
  42741.             WORD    subfunction number???
  42742.                 0000h run previously-loaded program???
  42743.                 0001h ??? (similar to 0000h)
  42744.                 0002h
  42745.                 0003h
  42746.                 0005h ??? (similar to 0000h and 0001h)
  42747.         Return: AX = status???
  42748.             STACK unchanged
  42749.         0006h ???
  42750.         STACK:    WORD ???
  42751.             DWORD -> WORD (call) max iterations of ???
  42752.                       (return) remaining iterations
  42753.         Return: AX = ???
  42754.             STACK unchanged
  42755.         0007h unused
  42756.         Return: AX = 0001h
  42757.         0008h unused
  42758.         Return: AX = 0001h
  42759.         0009h copy protected-mode memory into conventional memory
  42760.         STACK:    WORD    selector for source segment
  42761.             WORD    segment of source if in real mode???
  42762.             DWORD    offset of source
  42763.             WORD    number of bytes to copy
  42764.             DWORD -> low-memory destination
  42765.         Return: AX = status
  42766.             STACK unchanged
  42767.         000Ah copy conventional memory into protected-mode memory
  42768.         STACK:    WORD    selector for destination segment
  42769.             WORD    segment of destination if in real mode???
  42770.             DWORD    offset of destination
  42771.             WORD    number of bytes to copy
  42772.             DWORD -> low-memory source
  42773.         Return: AX = status
  42774.             STACK unchanged
  42775.         000Bh get ??? pointers
  42776.         STACK:    WORD desired pointer
  42777.                 0000h get ???
  42778.                 0002h get protected-mode CR3
  42779.                 0003h get 4K page table buffer pointer
  42780.                 else Return: DX:AX = FFFFh:FFFFh
  42781.         Return: DX:AX = requested pointer
  42782.             STACK unchanged
  42783.         000Ch set ??? pointers
  42784.         STACK:    WORD desired pointer
  42785.                 0000h set ???
  42786.                 0002h set protected-mode CR3
  42787.                 0003h set 4K page table buffer pointer
  42788.                 else ignore
  42789.             DWORD new value for pointer
  42790.         Return: STACK unchanged
  42791.         000Dh get ??? pointers
  42792.         STACK:    WORD desired pointer
  42793.                 0000h get ???
  42794.                 0001h get ???
  42795.                 0002h get ???
  42796.                 0003h get ???
  42797.                 0004h get ???
  42798.                 0005h get ???
  42799.                 0006h get ???
  42800.                 0007h get ???
  42801.                 else Return: DX:AX = FFFFh:FFFFh
  42802.         Return: DX:AX = desired pointer
  42803.             STACK unchanged
  42804.         000Eh set ??? pointer
  42805.         STACK:    WORD desired pointer
  42806.                 0000h set ???
  42807.                 0001h set ???
  42808.                 0002h set ???
  42809.                 0003h set ???
  42810.                 0004h set ???
  42811.                 0005h set ???
  42812.                 0006h set ???
  42813.                 0007h set ???
  42814.                 else Return: DX:AX = FFFFh:FFFFh
  42815.         Return: STACK unchanged
  42816.         000Fh get ???
  42817.         Return: AX = ??? (seen 0008h)
  42818.         0010h get ???
  42819.         Return: AX = ???
  42820.         0011h determine whether selector is valid
  42821.         STACK:    WORD    possible selector
  42822.         Return: AX = selector or 0000h if invalid
  42823.             STACK unchanged
  42824.         0012h get physical address
  42825.         STACK:    WORD    selector for desired segment
  42826.             WORD    segment number if in real mode
  42827.             DWORD    offset within segment
  42828.         Return: DX:AX = 32-bit physical address or 00000000h on error
  42829.             BX destroyed
  42830.             STACK unchanged
  42831.         0013h ???
  42832.         Note:    normally jumps to code for function 0012h
  42833.         0014h copy protected-mode memory to conventional memory, with ???
  42834.         STACK:    WORD    selector for source segment
  42835.             WORD    segment of source if in real mode???
  42836.             DWORD    offset of source
  42837.             WORD    number of bytes to copy
  42838.             DWORD -> low-memory destination
  42839.         Return: AX = status???
  42840.             STACK unchanged
  42841.         0015h copy conventional memory to protected-mode memory, with ???
  42842.         STACK:    WORD    selector for destination segment
  42843.             WORD    segment of destination if in real mode???
  42844.             DWORD    offset of destination
  42845.             WORD    number of bytes to copy
  42846.             DWORD -> low-memory source
  42847.         Return: AX = status???
  42848.             STACK unchanged
  42849.         0016h set ??? pointer
  42850.         STACK:    WORD    unused
  42851.             DWORD -> ??? or 0000h:0000h
  42852.         Return: AX = 0000h
  42853.             STACK unchanged
  42854.         0017h allocate real-mode procedure???
  42855.         STACK:    DWORD    ASCIZ name of procedure
  42856.             DWORD ???
  42857.             DWORD    address of subroutine to invoke
  42858.         Return: AX = status
  42859.                 0032h procedure by that name exists
  42860.                 0033h no more real-mode procedures available
  42861.             DX destroyed
  42862.             STACK unchanged
  42863.         0018h unused
  42864.         Return: AX = 0001h
  42865.         0019h get parameter block
  42866.         Return: DX:AX -> parameter block (format unknown at this time,
  42867.                 but 92h bytes)
  42868.                 (preceded by signature "!!PARAM-BLOCK!!")
  42869.         001Ah get ???
  42870.         Return: AX = ??? (0148h seen)
  42871.         001Bh free real-mode procedure???
  42872.         STACK:    DWORD -> ASCIZ name of procedure
  42873.         Return: ???
  42874.             STACK unchanged
  42875.         001Ch check whether packets from protected mode task pending
  42876.         Return: AX = 0001h if packets pending, 0000h if not
  42877.         001Dh set ???
  42878.         STACK:    DWORD ??? or 0000h:0000h
  42879.         Return: AX,BX destroyed
  42880.             STACK unchanged
  42881.         001Eh ???
  42882.         STACK:    WORD ??? (high byte ignored)
  42883.             DWORD -> data structure (see below)
  42884.         Return: AX,BX,CX,DX destroyed
  42885.             data structure updated
  42886.             STACK unchanged
  42887.         Format of data structure
  42888.         Offset    Size    Description
  42889.          00h  2 BYTEs    unused
  42890.          02h    WORD    ???
  42891.          04h    WORD    ???
  42892.          06h    WORD    ???
  42893.          08h  2 BYTEs    unused
  42894.          0Ah    WORD    ???
  42895.          0Ch    WORD    (call) ???
  42896.                 (return) offset of this data structure (BUG?)
  42897.         001Fh set ???
  42898.         STACK:    WORD ??? (set to 0001h if zero)
  42899.         Return: AX destroyed
  42900.             STACK unchanged
  42901.         0020h ???
  42902.         STACK:    DWORD -> ??? (8 bytes of data)
  42903.         Return: AX = ???
  42904.             STACK unchanged
  42905.         0021h ???
  42906.         STACK:    DWORD -> ??? (8 bytes of data)
  42907.             WORD    ???
  42908.             WORD    ???
  42909.         Return: AX = ???
  42910.             STACK unchanged
  42911.         0022h ???
  42912.         STACK:    DWORD -> ??? (8 bytes of data)
  42913.             DWORD -> 4-byte buffer for results
  42914.         Return: AX = ???
  42915.             STACK unchanged
  42916.         0023h ???
  42917.         STACK:    DWORD -> ??? (8 bytes of data)
  42918.         Return: AX = ???
  42919.             STACK unchanged
  42920.         0024h set ???
  42921.         STACK:    WORD ???
  42922.         Return: AX destroyed
  42923.             STACK unchanged
  42924.         0025h get ???
  42925.         Return: AX = ??? (value set with func 0024h)
  42926.         0026h BUG: jumps to hyperspace due to fencepost error
  42927.         FFFFh set DOS memory management functions
  42928.         BX:SI -> FAR routine for allocating DOS memory
  42929.             (called with AH=48h,BX=number of paragraphs to alloc;
  42930.              returns CF clear, AX=segment of allocated memory, or
  42931.                  CF set on error)
  42932.         CX:DI -> FAR routine for freeing DOS memory
  42933.             (called with AH=49h,ES=segment of block to free;
  42934.              returns CF set on error,AX=error code)
  42935.         Note: each of these pointers normally points at INT 21/RETF
  42936.         other Return: AX = 0001h
  42937. Note:    BX may be destroyed by any of the API calls
  42938. ----------2FFBA1BX0084-----------------------
  42939. INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL
  42940.     AX = FBA1h
  42941.     BX = 0084h
  42942.     ES:DI -> response buffer (see below)
  42943. Return: ES:DI buffer filled
  42944. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  42945.  
  42946. Format of response buffer:
  42947. Offset    Size    Description
  42948.  00h  4 BYTEs    signature "IABH"
  42949.  04h    WORD    success indicator
  42950.         0001h failed (INT 2F hooked by another program)
  42951.         unchanged if successful
  42952.  06h    WORD    segment of ???
  42953.  08h    WORD    segment of ??? memory block to free if nonzero
  42954.  0Ah    WORD    segment of ??? memory block to free if nonzero
  42955. ----------2FFBFBES0000-----------------------
  42956. INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK
  42957.     AX = FBFBh
  42958.     ES = 0000h
  42959. Return: ES nonzero if installed
  42960.         ES:BX -> entry point data structure (see below)
  42961. SeeAlso: INT 80/BX=0000h,INT F3"SoundBlaster"
  42962.  
  42963. Format of entry point data structure:
  42964. Offset    Size    Description
  42965.  00h  3 BYTEs    signature "FB "
  42966.  03h    BYTE    driver major version number???
  42967.  04h    DWORD    speech driver entry point
  42968.  08h 24 BYTEs    ???
  42969.  20h  ? BYTEs    data buffer for calling speech driver
  42970.  
  42971. Call driver entry point with:
  42972.     AL = function
  42973.         07h speak a string
  42974.         data buffer (see above) contains:
  42975.             BYTE  length of string
  42976.               N BYTEs string to speak
  42977. ----------2FFE00DI4E55-----------------------
  42978. INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT
  42979.     AX = FE00h
  42980.     DI = 4E55h ("NU")
  42981.     SI = TSR identifier
  42982.         4346h ("CF") NCACHE-F (v5) / NCACHE (v6.0+)
  42983.         4353h ("CS") NCACHE-S (v5 only)
  42984.         4443h ("DC") DISKREET
  42985.         444Dh ("DM") DISKMON
  42986.         4653h ("FS") FILESAVE (v5) / EP (v6.0+)
  42987. Return: SI = TSR reply
  42988.         lowercase version of SI on entry (i.e. SI OR 2020h)
  42989.     AH = status
  42990.         00h installed but disabled internally
  42991.         01h installed and enabled
  42992.     AL = status
  42993.         00h    NCACHE-x or DISKREET installed
  42994.         01h FILESAVE / EP / DISKMON v6 installed
  42995.         45h    DISKMON v5 installed
  42996.     BX = length of *.INI file (DISKMON and FILESAVE/EP only) (see below)
  42997.     CX = segment of resident portion
  42998.         FFFFh if completely loaded high (NCACHE)
  42999. ---FILESAVE/EP---
  43000.     DL = ??? (apparently always 00h)
  43001. ---DISKMON---
  43002.     DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6])
  43003. Note:    the value returned in CX is incorrect for NCACHE 6.00
  43004. SeeAlso: AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h
  43005.  
  43006. Format of DISKMON.INI file:
  43007. Offset    Size    Description
  43008. -6Ch 108 BYTEs    (in memory copy only)
  43009.         list of filenames which are always protected:
  43010.           IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS,
  43011.           MIO.SYS/IO.BIN, COMMAND.COM
  43012.  00h    BYTE    ??? always 01h
  43013.  01h    BYTE    disk light (00h off, 01h on)
  43014.  02h    BYTE    disk protection (00h off, 01h on)
  43015.  03h    BYTE    protected areas
  43016.         01h system area
  43017.         02h files
  43018.         03h system area and files
  43019.         04h entire disk
  43020.  04h    BYTE    floppy access (00h not allowed, 01h allowed)
  43021.  05h 27 BYTEs    filename extension list (9 entries)
  43022.         (lowercase, blank padded or = 000000h)
  43023.  20h 240 BYTEs    filename list (20 entries)
  43024.         (lowercase, name and extension blank padded, with '.')
  43025. Note:    CX:0508h -> copy in installed TSR (v5)
  43026.     CX:052Fh -> copy in installed TSR (v6)
  43027.  
  43028. Format of FILESAVE.INI / EP.INI file:
  43029. Offset    Size    Description
  43030.  00h 26 BITs    drive list (bit set: file protection on, cleared: off):
  43031.  00h    BYTE    drives    A: - H:
  43032.  01h    BYTE    drives    I: - P:
  43033.  02h    BYTE    drives    Q: - X:
  43034.  03h    BYTE    drives    Y: - Z:
  43035.  04h    BYTE    which files to protect
  43036.         00h all files
  43037.         01h all files with extension in list
  43038.         02h all files except those with extension in list
  43039.  05h 27 BYTEs    filename extension list (9 entries, uppercase, ASCIZ)
  43040.  20h    BYTE    include files with archive bit clear (00h no, 01h yes)
  43041.  21h    WORD    number of days after which files are purged (0 = never)
  43042.  23h    WORD    max kilobytes of erased file space to hold (0 = all)
  43043. Note:    CX:03D2h -> copy in installed TSR (v5.0)
  43044.     CX:03F5h -> copy in installed TSR (v6.0)
  43045. ----------2FFE01DI4E55-----------------------
  43046. INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE
  43047.     AX = FE01h
  43048.     DI = 4E55h ("NU")
  43049.     SI = TSR identifier (see AX=FE00h)
  43050. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  43051.     AX = status
  43052.         0002h successful (DISKMON, FILESAVE, EP)
  43053.         FE00h successful (NCACHE-x, DISKREET)
  43054. Notes:    if the enable/disable calls are used on DISKMON or NCACHE-x, the status
  43055.       report generated by the programs still indicates the previous state,
  43056.       and DISKMON.INI is not updated
  43057.     apparently has no effect on DISKREET
  43058. SeeAlso: AX=FE00h,AX=FE02h
  43059. ----------2FFE02DI4E55-----------------------
  43060. INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE
  43061.     AX = FE02h
  43062.     DI = 4E55h ("NU")
  43063.     SI = TSR identifier (see AX=FE00h)
  43064. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  43065.     AX = status
  43066.         0004h successful (DISKMON, FILESAVE)
  43067.         FE00h successful (NCACHE-x, DISKREET)
  43068. Note:    (see AX=FE01h)
  43069. SeeAlso: AX=FE00h,AX=FE01h
  43070. ----------2FFE03DI4E55-----------------------
  43071. INT 2F U - NORTON UTILITIES 5.0+ TSRs - internal - ???
  43072.     AX = FE03h
  43073.     DI = 4E55h ("NU")
  43074.     SI = TSR identifier (see AX=FE00h)
  43075. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  43076.     AX = status
  43077.         0006h successful???
  43078. Notes:    only supported by DISKMON, FILESAVE, and NCACHE-x
  43079.     reportedly dangerous
  43080. SeeAlso: AX=FE00h
  43081. ----------2FFE04DI4E55-----------------------
  43082. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  43083.     AX = FE04h
  43084.     DI = 4E55h ("NU")
  43085.     SI = TSR identifier (see AX=FE00h)
  43086. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  43087.     AX = status
  43088.         0008h successful???
  43089. SeeAlso: AX=FE00h
  43090. ----------2FFE05DI4E55-----------------------
  43091. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  43092.     AX = FE05h
  43093.     DI = 4E55h ("NU")
  43094.     SI = TSR identifier (see AX=FE00h)
  43095. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  43096.     AX = status
  43097.         000Ah successful???
  43098. Note:    reportedly dangerous
  43099. SeeAlso: AX=FE00h
  43100. ----------2FFF00-----------------------------
  43101. INT 2F - Topware Network Operating System - INSTALLATION CHECK
  43102.     AX = FF00h
  43103. Return: AL = 00h not installed, OK to install
  43104.        = 01h not installed, not OK to install
  43105.        = FFh installed
  43106. SeeAlso: AX=FF01h,INT 21/AH=FFh"Topware",INT 7A"Topware"
  43107. ----------2FFF01-----------------------------
  43108. INT 2F - Topware Network Operating System - GET VERSION
  43109.     AX = FF01h
  43110. Return: AX = version
  43111. SeeAlso: AX=FF00h
  43112. ----------30---------------------------------
  43113. INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls
  43114.    the CALL 5 entry point does a FAR jump to here
  43115. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  43116.       memory
  43117. SeeAlso: INT 21/AH=26h
  43118. ----------31---------------------------------
  43119. INT 31 - overwritten by CP/M jump instruction in INT 30
  43120. ----------310000-----------------------------
  43121. INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS
  43122.     AX = 0000h
  43123.     CX = number of descriptors to allocate
  43124. Return: CF clear if successful
  43125.         AX = base selector
  43126.     CF set on error
  43127.         AX = error code (DPMI 1.0+)
  43128.         0000h-7FFFh DOS error passed through by DPMI
  43129.         8001h unsupported function
  43130.         8002h object in wrong state for function
  43131.         8003h system integrity would be endangered
  43132.         8004h deadlock detected
  43133.         8005h pending serialization request cancelled
  43134.         8010h out of DPMI internal resources
  43135.         8011h descriptor unavailable
  43136.         8012h linear memory unavailable
  43137.         8013h physical memory unavailable
  43138.         8014h backing store unavailable
  43139.         8015h callback unavailable
  43140.         8016h handle unavailable
  43141.         8017h maximum lock count exceeded
  43142.         8018h shared memory already serialized exclusively by another
  43143.         8019h shared memory already serialized shared by another client
  43144.         8021h invalid value for numeric or flag parameter
  43145.         8022h invalid segment selector
  43146.         8023h invalid handle
  43147.         8024h invalid callback
  43148.         8025h invalid linear address
  43149.         8026h request not supported by hardware
  43150. Notes:    DPMI is the DOS Protected-Mode Interface
  43151.     the base and limit of the returned descriptors will be 0, and the type
  43152.       will be "data"
  43153.     add the value returned by INT 31/AX=0003h to move to subsequent
  43154.       descriptors if multiple descriptors were allocated
  43155.     not supported by MS Windows 3.0 in Standard mode
  43156. SeeAlso: AX=0001h,AX=000Dh,INT 21/AX=3501h
  43157. ----------310001-----------------------------
  43158. INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR
  43159.     AX = 0001h
  43160.     BX = selector to free
  43161. Return: CF clear if successful
  43162.     CF set on error
  43163.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  43164. Notes:    only one descriptor is freed per call
  43165.     the program's initial CS, DS, and SS descriptors may be freed
  43166.     (DPMI 1.0+) any segment registers containing the freed selector are
  43167.       set to 0000h
  43168.     not supported by MS Windows 3.0 in Standard mode
  43169. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh,INT 21/AX=3502h
  43170. ----------310002-----------------------------
  43171. INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR
  43172.     AX = 0002h
  43173.     BX = real mode segment
  43174. Return: CF clear if successful
  43175.         AX = selector corresponding to real mode segment (64K limit)
  43176.     CF set on error
  43177.         AX = error code (DPMI 1.0+) (8011h) (see AX=0000h)
  43178. Notes:    multiple calls for the same real mode segment return the same selector
  43179.     the returned descriptor can never be modified or freed
  43180.     not supported by MS Windows 3.0 in Standard mode
  43181. ----------310003-----------------------------
  43182. INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE
  43183.     AX = 0003h
  43184. Return: CF clear
  43185.         AX = value to add to get next sequential selector
  43186. Notes:    the increment will be a power of two
  43187.     not supported by MS Windows 3.0 in Standard mode
  43188. SeeAlso: AX=0000h
  43189. ----------310004-----------------------------
  43190. INT 31 P - DPMI 0.9+ - LOCK SELECTOR
  43191.     AX = 0004h
  43192.     BX = selector to lock (prevent paging)
  43193. Return: ???
  43194. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  43195.       specification, this function is called by MS Windows TASKMAN,
  43196.       PROGMAN, and KERNEL
  43197. SeeAlso: AX=0005h,AX=0600h
  43198. ----------310005-----------------------------
  43199. INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR
  43200.     AX = 0005h
  43201.     BX = selector to unlock (permit paging)
  43202. Return: ???
  43203. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  43204.       specification, this function is called by MS Windows TASKMAN,
  43205.       PROGMAN, and KERNEL
  43206. SeeAlso: AX=0004h,AX=0601h
  43207. ----------310006-----------------------------
  43208. INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS
  43209.     AX = 0006h
  43210.     BX = selector
  43211. Return: CF clear if successful
  43212.         CX:DX = linear base address of segment
  43213.     CF set on error
  43214.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  43215. Note:    not supported by MS Windows 3.0 in Standard mode
  43216. SeeAlso: AX=0007h,INT 21/AX=3504h
  43217. ----------310007-----------------------------
  43218. INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS
  43219.     AX = 0007h
  43220.     BX = selector
  43221.     CX:DX = linear base address
  43222. Return: CF clear if successful
  43223.     CF set on error
  43224.         AX = error code (DPMI 1.0+) (8022h,8025h) (see AX=0000h)
  43225. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  43226.     only the low 24 bits of the address will be used by 16-bit DPMI
  43227.       implementations even on a 386 or higher
  43228.     DPMI 1.0+ automatically reloads any segment registers containing the
  43229.       selector being modified
  43230.     not supported by MS Windows 3.0 in Standard mode
  43231. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AX=3503h
  43232. SeeAlso: INT 21/AH=E9h"OS/286"
  43233. ----------310008-----------------------------
  43234. INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT
  43235.     AX = 0008h
  43236.     BX = selector
  43237.     CX:DX = segment limit
  43238. Return: CF clear if successful
  43239.     CF set on error
  43240.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  43241. Notes:    CX must be zero for 16-bit DPMI implementations
  43242.     limits greater than 1MB must be page aligned (low 12 bits set)
  43243.     only modify descriptors allocated with INT 31/AX=0000h
  43244.     DPMI 1.0+ automatically reloads any segment registers containing the
  43245.       selector being modified
  43246.     not supported by MS Windows 3.0 in Standard mode
  43247. SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AX=3505h,INT 21/AH=E9h"OS/286"
  43248. ----------310009-----------------------------
  43249. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS
  43250.     AX = 0009h
  43251.     BX = selector
  43252.     CL = access rights/type byte
  43253.     CH = 80386 extended rights/type byte (32-bit DPMI implementations only)
  43254. Return: CF clear if successful
  43255.     CF set on error
  43256.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  43257. Notes:    if the Present bit is clear, CL bits 0-3 may have any value
  43258.     DPMI 1.0+ automatically reloads any segment registers containing the
  43259.       selector being modified
  43260.     not supported by MS Windows 3.0 in Standard mode
  43261. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h
  43262. ----------31000A-----------------------------
  43263. INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR
  43264.     AX = 000Ah
  43265.     BX = selector
  43266. Return: CF clear if successful
  43267.         AX = new data selector
  43268.     CF set on error
  43269.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  43270. Notes:    fails if selector in BX is not a code segment or is invalid
  43271.     use INT 31/AX=0001h to free new selector
  43272.     future changes to the original selector will not be reflected in the
  43273.       returned alias selector
  43274.     not supported by MS Windows 3.0 in Standard mode
  43275. SeeAlso: AX=0001h
  43276. ----------31000B-----------------------------
  43277. INT 31 P - DPMI 0.9+ - GET DESCRIPTOR
  43278.     AX = 000Bh
  43279.     BX = LDT selector
  43280.     ES:(E)DI -> 8-byte buffer for copy of descriptor
  43281. Return: CF clear if successful
  43282.         buffer filled
  43283.     CF set on error
  43284.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  43285. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  43286.     not supported by MS Windows 3.0 in Standard mode
  43287. SeeAlso: AX=000Ch
  43288. ----------31000C-----------------------------
  43289. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR
  43290.     AX = 000Ch
  43291.     BX = LDT selector
  43292.     ES:(E)DI -> 8-byte buffer containing descriptor
  43293. Return:    CF clear if successful
  43294.     CF set on error
  43295.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  43296. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  43297.     only modify descriptors allocated with INT 31/AX=0000h
  43298.     DPMI 1.0+ automatically reloads any segment registers containing the
  43299.       selector being modified
  43300.     not supported by MS Windows 3.0 in Standard mode
  43301. SeeAlso: AX=000Bh
  43302. ----------31000D-----------------------------
  43303. INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR
  43304.     AX = 000Dh
  43305.     BX = LDT selector
  43306. Return: CF clear if successful
  43307.         descriptor allocated
  43308.     CF set on error
  43309.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  43310. Notes:    free descriptor with INT 31/AX=0001h
  43311.     the first 16 descriptors (04h-7Ch) are reserved for this function, but
  43312.       some may already be in use by other applications under DPMI 0.9;
  43313.       DPMI 1.0 guarantees 16 descriptors per client
  43314.     not supported by MS Windows 3.0 in Standard mode
  43315. SeeAlso: AX=0000h,AX=0001h
  43316. ----------31000E-----------------------------
  43317. INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS
  43318.     AX = 000Eh
  43319.     CX = number of descriptors to copy
  43320.     ES:(E)DI -> descriptor buffer (see below)
  43321. Return: CF clear if successful
  43322.         descriptors copied
  43323.     CF set on error
  43324.         AX = error code (8022h) (see AX=0000h)
  43325.         CX = number of descriptors successfully copied
  43326. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  43327.     if the function fails, the first CX descriptors are valid; the
  43328.       remainder are not modified
  43329. SeeAlso: AX=000Bh,AX=000Fh
  43330.  
  43331. Format of descriptor buffer entry (one per descriptor to get):
  43332. Offset    Size    Description
  43333.  00h    WORD    selector (set by client)
  43334.  02h    QWORD    descriptor (set by host)
  43335. ----------31000F-----------------------------
  43336. INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS
  43337.     AX = 000Fh
  43338.     CX = number of descriptors to copy
  43339.     ES:(E)DI -> descriptor buffer (see below)
  43340. Return: CF clear if successful
  43341.         descriptors copied
  43342.     CF set on error
  43343.         AX = error code (8021h,8022h,8025h) (see AX=0000h)
  43344.         CX = number of descriptors successfully copied
  43345. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  43346.     if the function fails, the first CX descriptors are valid; the
  43347.       remainder are not modified
  43348.     DPMI 1.0+ automatically reloads any segment registers containing a
  43349.       selector being modified
  43350. SeeAlso: AX=000Ch,AX=000Eh
  43351.  
  43352. Format of descriptor buffer entry (one per descriptor to set):
  43353. Offset    Size    Description
  43354.  00h    WORD    selector
  43355.  02h    QWORD    descriptor
  43356. ----------310100-----------------------------
  43357. INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK
  43358.     AX = 0100h
  43359.     BX = number of paragraphs to allocate
  43360. Return: CF clear if successful
  43361.         AX = real mode segment of allocated block
  43362.         DX = first selector for allocated block
  43363.     CF set on error
  43364.         AX = DOS error code (07h,08h) (see INT 21/AH=59h)
  43365.          (DPMI 1.0+) DPMI error code (8011h) (see AX=0000h)
  43366.         BX = size (in paragraphs) of largest available block
  43367. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  43368.       if the caller is a 16-bit program
  43369.     never modify or deallocate returned descriptors
  43370.     not supported by MS Windows 3.0 in Standard mode
  43371. SeeAlso: AX=0101h,AX=0501h
  43372. ----------310101-----------------------------
  43373. INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK
  43374.     AX = 0101h
  43375.     DX = selector of block
  43376. Return: CF set if successful
  43377.     CF set on error
  43378.         AX = DOS error code (07h,09h) (see INT 21/AH=59h)
  43379. Notes:    all descriptors allocated for the block are automatically freed
  43380.     DPMI 1.0+ automatically zeros any segment registers containing a
  43381.       selector freed by this function
  43382.     not supported by MS Windows 3.0 in Standard mode
  43383. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  43384. ----------310102-----------------------------
  43385. INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK
  43386.     AX = 0102h
  43387.     BX = new block size in paragraphs
  43388.     DX = selector of block
  43389. Return: CF clear if successful
  43390.     CF set on error
  43391.         AX = DOS error code (07h,08h,09h) (see INT 21/AH=59h)
  43392.          (DPMI 1.0+) DPMI error code (8011h,8022h) (see AX=0000h)
  43393.         BX = maximum block size (in paragraphs) possible
  43394. Notes:    increasing the size of a block past a 64K boundary will fail if the
  43395.       next descriptor in the LDT is already in use
  43396.     shrinking a block past a 64K boundary will cause some selectors to be
  43397.       freed; DPMI 1.0+ automatically zeros any segment registers containing
  43398.       a selector freed by this function
  43399.     not supported by MS Windows 3.0 in Standard mode
  43400. SeeAlso: AX=0100h
  43401. ----------310200-----------------------------
  43402. INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR
  43403.     AX = 0200h
  43404.     BL = interrupt number
  43405. Return: CF clear
  43406.     CX:DX = segment:offset of real mode interrupt handler
  43407. Note:    the DPMI implementation is required to support all 256 vectors
  43408. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h
  43409. ----------310201-----------------------------
  43410. INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR
  43411.     AX = 0201h
  43412.     BL = interrupt number
  43413.     CX:DX = segment:offset of real mode handler
  43414. Return: CF clear
  43415. Note:    all memory that may be touched by a hardware interrupt handler must be
  43416.       locked down with INT 31/AX=0600h    
  43417. SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h
  43418. ----------310202-----------------------------
  43419. INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR
  43420.     AX = 0202h
  43421.     BL = exception number (00h-1Fh)
  43422. Return:    CF clear if successful
  43423.         CX:(E)DX = selector:offset of handler
  43424.     CF set on error
  43425.         AX = error code (DPMI 1.0+) (8021h) (see AX=0000h)
  43426. Notes:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  43427.     DPMI 1.0+ supports this function only for backward compatibility; use
  43428.        AX=0210h or AX=0211h instead
  43429.     not supported by MS Windows 3.0 in Standard mode
  43430. SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h
  43431. ----------310203-----------------------------
  43432. INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR
  43433.     AX = 0203h
  43434.     BL = exception number (00h-1Fh)
  43435.     CX:(E)DX = selector:offset of handler
  43436. Return: CF clear if successful
  43437.     CF set on error
  43438.         AX = error code (DPMI 1.0+) (8021h,8022h) (see AX=0000h)
  43439. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  43440.       stack frame on chaining to the next exception handler
  43441.     the handler should return using a FAR return
  43442.     all fault stack frames contain an error code, but it is only valid for
  43443.       exceptions 08h and 0Ah-0Eh
  43444.     handlers will only be called if the exception occurs in protected mode,
  43445.       and the DPMI host does not transparently handle the exception
  43446.     the handler may change certain values on the stack frame (see below)
  43447.     DPMI 1.0+ supports this function only for backward compatibility; use
  43448.        AX=0212h or AX=0213h instead
  43449.     not supported by MS Windows 3.0 in Standard mode
  43450. SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h
  43451.  
  43452. Format of stack frame for 16-bit programs: (offset from SS:SP)
  43453. Offset    Size    Description
  43454.  00h    DWORD    return CS:IP (do not change)
  43455.  04h    WORD    error code
  43456.  06h    DWORD    CS:IP of exception
  43457.  0Ah    WORD    flags
  43458.  0Ch    DWORD    SS:SP
  43459.  
  43460. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  43461. Offset    Size    Description
  43462.  00h    DWORD    return EIP (do not change)
  43463.  04h    WORD    return CS selector (do not change)
  43464.  06h    WORD    reserved (do not change)
  43465.  08h    DWORD    error code
  43466.  0Ch    DWORD    EIP of exception
  43467.  10h    WORD    CS selector of exception
  43468.  12h    WORD    reserved (do not change)
  43469.  14h    DWORD    EFLAGS
  43470.  18h    DWORD    ESP
  43471.  1Ch    WORD    SS
  43472.  1Eh    WORD    reserved (do not change)
  43473. ----------310204-----------------------------
  43474. INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR
  43475.     AX = 0204h
  43476.     BL = interrupt number
  43477. Return:    CF clear
  43478.     CX:(E)DX = selector:offset of handler
  43479. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  43480.     DPMI implementations are required to support all 256 vectors
  43481.     not supported by MS Windows 3.0 in Standard mode
  43482. SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2F/AX=FB42h/BX=0024h
  43483. ----------310205-----------------------------
  43484. INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR
  43485.     AX = 0205h
  43486.     BL = interrupt number
  43487.     CX:(E)DX = selector:offset of handler
  43488. Return: CF clear if successful
  43489.     CF set on error
  43490.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  43491. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  43492.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  43493.       to the next handler
  43494.     DPMI implementations are required to support all 256 vectors
  43495.     hardware interrupts are reflected to the virtual machine's primary
  43496.       client, software interrupts to the current client
  43497.     not supported by MS Windows 3.0 in Standard mode
  43498. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2F/AX=FB42h/BX=0025h
  43499. ----------310210-----------------------------
  43500. INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  43501.     AX = 0210h
  43502.     BL = exception number (00h-1Fh)
  43503. Return: CF clear if successful
  43504.         CX:(EDX) = selector:offset of exception handler
  43505.     CF set on error
  43506.         AX = error code (8021h) (see AX=0000h)
  43507. Note:    DPMI host reflects exception to current client's handler
  43508. SeeAlso: AX=0202h,AX=0211h,AX=0212h
  43509. ----------310211-----------------------------
  43510. INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  43511.     AX = 0211h
  43512.     BL = exception number (00h-1Fh)
  43513. Return: CF clear if successful
  43514.         CX:(EDX) = selector:offset of exception handler
  43515.     CF set on error
  43516.         AX = error code (8021h) (see AX=0000h)
  43517. Notes:    returns address of protected-mode handler for real-mode exception
  43518.     DPMI host performs a switch to protected mode, reflects the exception
  43519.       to the virtual machine's primary client, and returns to real mode
  43520.       on the handler's completion
  43521. SeeAlso: AX=0202h,AX=0210h,AX=0213h
  43522. ----------310212-----------------------------
  43523. INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  43524.     AX = 0212h
  43525.     BL = exception or fault number (00h-1Fh)
  43526.     CX:(E)DX = exception handler selector:offset
  43527. Return: CF clear if successful
  43528.     CF set on error
  43529.         AX = error code (8021h,8022h) (see AX=0000h)
  43530. Note:    DPMI host sends exception to current client's handler
  43531. SeeAlso: AX=0203h,AX=0210h,AX=0213h
  43532. ----------310213-----------------------------
  43533. INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  43534.     AX = 0213h
  43535.     BL = exception or fault number (00h-1Fh)
  43536.     CX:(E)DX = exception handler selector:offset
  43537. Return: CF clear if successful
  43538.     CF set on error
  43539.         AX = error code (8021h,8022h) (see AX=0000h)
  43540. Notes:    specifies address of protected-mode handler for real-mode exception
  43541.     DPMI host performs a switch to protected mode, reflects the exception
  43542.       to the virtual machine's primary client, and returns to real mode
  43543.       on the handler's completion
  43544. SeeAlso: AX=0203h,AX=0211h,AX=0212h
  43545. ----------310300-----------------------------
  43546. INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT
  43547.     AX = 0300h
  43548.     BL = interrupt number
  43549.     BH = flags
  43550.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  43551.            reserved, must be 0 (DPMI 1.0+)
  43552.         others must be 0
  43553.     CX = number of words to copy from protected mode to real mode stack
  43554.     ES:(E)DI = selector:offset of real mode call structure (see below)
  43555. Return:    CF clear if successful
  43556.         real mode call structure modified (all fields except SS:SP, CS:IP
  43557.           filled with return values from real mode interrupt)
  43558.     CF set on error
  43559.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  43560.     protected mode stack unchanged
  43561. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  43562.     CS:IP in the real mode call structure is ignored for this call,
  43563.       instead, the indicated interrupt vector is used for the address
  43564.     the flags in the call structure are pushed on the real mode stack to
  43565.       form an interrupt stack frame, and the trace and interrupt flags are
  43566.       clear on entry to the handler
  43567.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  43568.     the real mode handler must return with the stack in the same state as
  43569.       it was on being called
  43570. SeeAlso: AX=0302h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286"
  43571. SeeAlso: INT 2F/AX=FB42h/BX=000Dh
  43572.  
  43573. Format of real mode call structure:
  43574. Offset    Size    Description
  43575.  00h    DWORD    EDI
  43576.  04h    DWORD    ESI
  43577.  08h    DWORD    EBP
  43578.  0Ch    DWORD    reserved (00h)
  43579.  10h    DWORD    EBX
  43580.  14h    DWORD    EDX
  43581.  18h    DWORD    ECX
  43582.  1Ch    DWORD    EAX
  43583.  20h    WORD    flags
  43584.  22h    WORD    ES
  43585.  24h    WORD    DS
  43586.  26h    WORD    FS
  43587.  28h    WORD    GS
  43588.  2Ah    WORD    IP
  43589.  2Ch    WORD    CS
  43590.  2Eh    WORD    SP
  43591.  30h    WORD    SS
  43592. ----------310301-----------------------------
  43593. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME
  43594.     AX = 0301h
  43595.     BH = flags
  43596.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  43597.            reserved, must be 0 (DPMI 1.0+)
  43598.         others must be 0
  43599.     CX = number of words to copy from protected mode to real mode stack
  43600.     ES:DI / ES:EDI = selector:offset of real mode call structure
  43601.             (see INT 31/AX=0300h)
  43602. Return: CF clear if successful
  43603.         real mode call structure modified (all fields except SS:SP, CS:IP
  43604.           filled with return values from real mode interrupt)
  43605.     CF set on error
  43606.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  43607.     protected mode stack unchanged
  43608. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  43609.     the real mode procedure must exit with a FAR return
  43610.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  43611.     the real mode handler must return with the stack in the same state as
  43612.       it was on being called
  43613. SeeAlso: AX=0300h,AX=0302h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286"
  43614. ----------310302-----------------------------
  43615. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME
  43616.     AX = 0302h
  43617.     BH = flags
  43618.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  43619.            reserved, must be 0 (DPMI 1.0+)
  43620.         others must be 0
  43621.     CX = number of words to copy from protected mode to real mode stack
  43622.     ES:DI / ES:EDI = selector:offset of real mode call structure
  43623.             (see INT 31/AX=0300h)
  43624. Return:    CF clear if successful
  43625.         real mode call structure modified (all fields except SS:SP, CS:IP
  43626.           filled with return values from real mode interrupt)
  43627.     CF set on error
  43628.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  43629.     protected mode stack unchanged
  43630. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  43631.     the flags in the call structure are pushed on the real mode stack to
  43632.       form an interrupt stack frame, and the trace and interrupt flags are
  43633.       clear on entry to the handler
  43634.     the real mode procedure must exit with an IRET
  43635.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  43636.     the real mode handler must return with the stack in the same state as
  43637.       it was on being called
  43638. SeeAlso: AX=0300h
  43639. ----------310303-----------------------------
  43640. INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS
  43641.     AX = 0303h
  43642.     DS:SI / DS:ESI = selector:offset of procedure to call
  43643.     ES:DI / ES:EDI = selector:offset of real mode call structure
  43644.             (see AX=0300h)
  43645. Return: CF clear if successful
  43646.         CX:DX = segment:offset of real mode call address
  43647.     CF set on error
  43648.         AX = error code (DPMI 1.0+) (8015h) (see AX=0000h)
  43649. Notes:    the real mode call structure is static, causing reentrancy problems;
  43650.       its contents are only valid at the time of a callback
  43651.     the called procedure must modify the real mode CS:IP before returning
  43652.     values are returned to real mode by modifying the real mode call struc
  43653.     DPMI hosts must provide at least 16 callbacks per client
  43654. SeeAlso: AX=0304h,AX=0C00h
  43655.  
  43656. Values callback procedure is called with:
  43657.     DS:SI / DS:ESI = selector:offset of real mode SS:SP
  43658.     ES:DI / ES:EDI = selector:offset of real mode call structure
  43659.     SS:SP / SS:ESP = locked protected mode API stack
  43660.     interrupts disabled
  43661. Return: (with IRET)
  43662.     ES:DI / ES:EDI = selector:offset of real mode call structure to restore
  43663. ----------310304-----------------------------
  43664. INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS
  43665.     AX = 0304h
  43666.     CX:DX = real mode callback address
  43667. Return: CF clear if successful
  43668.     CF set on error
  43669.         AX = error code (DPMI 1.0+) (8024h) (see AX=0000h)
  43670. SeeAlso: AX=0303h
  43671. ----------310305-----------------------------
  43672. INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES
  43673.     AX = 0305h
  43674. Return: CF clear
  43675.     AX = size in bytes of state buffer
  43676.     BX:CX = real mode address of procedure to save/restore state
  43677.     SI:DI / SI:EDI = protected mode procedure to save/restore state
  43678. Notes:    the buffer size will be zero if it is not necessary to preserve state
  43679.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  43680.     this function is only needed if using the raw mode switch service
  43681. SeeAlso: AX=0306h
  43682.  
  43683. Values to call state-save procedures with:
  43684.     AL = direction
  43685.         00h save state
  43686.         01h restore state
  43687.     ES:DI / ES:EDI -> state buffer
  43688. Return: all registers preserved
  43689. ----------310306-----------------------------
  43690. INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES
  43691.     AX = 0306h
  43692. Return:    CF clear
  43693.     BX:CX -> procedure to switch from real to protected mode
  43694.     SI:DI / SI:EDI -> procedure to switch from protected to real mode
  43695. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  43696.     the caller must save and restore the state of the task with AX=0305h
  43697.     not supported by MS Windows 3.0 in Standard mode
  43698. SeeAlso: AX=0305h
  43699.  
  43700. Values to JUMP at mode-switch procedures with:
  43701.     AX = new DS
  43702.     CX = new ES
  43703.     DX = new SS
  43704.     BX / EBX = new SP / ESP
  43705.     SI = new CS
  43706.     DI / EDI = new IP / EIP
  43707. Notes:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  43708.       DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h
  43709.     interrupts will stay disabled during the entire mode switch if they
  43710.       are disabled on entry to the mode-switch procedure
  43711. ----------310400-----------------------------
  43712. INT 31 P - DPMI 0.9+ - GET DPMI VERSION
  43713.     AX = 0400h
  43714. Return: CF clear
  43715.     AH = major version of DPMI spec supported
  43716.     AL = two-digit minor version of DPMI spec supported
  43717.     BX = flags
  43718.         bit 0: running under an 80386 (32-bit) implementation
  43719.         bit 1: processor returns to real mode for reflected interrupts
  43720.            instead of V86 mode
  43721.         bit 2: virtual memory supported
  43722.         bit 3: reserved (undefined)
  43723.         others reserved (zero)
  43724.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  43725.     DH = curr value of virtual master interrupt controller base interrupt
  43726.     DL = curr value of virtual slave interrupt controller base interrupt
  43727. SeeAlso: AX=0401h,INT 21/AX=250Ch,INT 67/AX=DE0Ah
  43728. ----------310401-----------------------------
  43729. INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES
  43730.     AX = 0401h
  43731.     ES:(E)DI -> 128-byte buffer (see below)
  43732. Return: CF clear if successful
  43733.         AX = capabilities
  43734.         bit 0: paged accessed/dirty supported (see AX=0506h,AX=0507h)
  43735.             1: exceptions restartability supported
  43736.             2: device mapping supported (see AX=0508h)
  43737.             3: conventional memory mapping supported (see AX=0509h)
  43738.             4: demand zero-fill supported
  43739.             5: write-protect client capability supported
  43740.             6: write-protect host capability supported
  43741.             7-15: reserved
  43742.         CX = reserved (00h)
  43743.         DX = reserved (00h)
  43744.         buffer filled
  43745.     CF set on error (DPMI 0.9 only)
  43746. SeeAlso: AX=0400h
  43747.  
  43748. Format of buffer:
  43749. Offset    Size    Description
  43750.  00h    BYTE    host major version number
  43751.  01h    BYTE    host minor version number
  43752.  02h 126 BYTEs    ASCIZ host vendor name
  43753. ----------310500-----------------------------
  43754. INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION
  43755.     AX = 0500h
  43756.     ES:DI / ES:EDI -> buffer for memory information (see below)
  43757. Return: CF clear
  43758. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  43759.     this function must be considered advisory because other applications
  43760.       may affect the results at any time after the call
  43761.     fields not supported by the DPMI implementation are filled with
  43762.       FFFFFFFFh
  43763.     DPMI 1.0+ supports this function solely for backward compatibility; use
  43764.       AX=050Bh instead
  43765. SeeAlso: AX=0501h,AX=0604h
  43766.  
  43767. Format of memory information:
  43768. Offset    Size    Description
  43769.  00h    DWORD    largest available block in bytes
  43770.  04h    DWORD    maximum unlocked page allocation
  43771.  08h    DWORD    maximum locked page allocation
  43772.  0Ch    DWORD    total linear address space in pages
  43773.  10h    DWORD    total unlocked pages
  43774.  14h    DWORD    free pages
  43775.  18h    DWORD    total physical pages
  43776.  1Ch    DWORD    free linear address space in pages
  43777.  20h    DWORD    size of paging file/partition in pages
  43778.  24h 12 BYTEs    reserved
  43779. ----------310501-----------------------------
  43780. INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK
  43781.     AX = 0501h
  43782.     BX:CX = size in bytes
  43783. Return: CF clear if successful
  43784.         BX:CX = linear address of block
  43785.         SI:DI = memory block handle for resizing and freeing block
  43786.     CF set on error
  43787.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see AX=0000h)
  43788. Notes:    no selectors are allocated
  43789.     the memory block is allocated unlocked (can be locked with AX=0600h)
  43790.     allocations are often page granular (see AX=0604h)
  43791. SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h
  43792. ----------310502-----------------------------
  43793. INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK
  43794.     AX = 0502h
  43795.     SI:DI = handle of memory block
  43796. Return: CF clear if successful
  43797.     CF set on error
  43798.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  43799. Note:    any selectors allocated for the memory block must also be freed,
  43800.       preferably before freeing the memory block
  43801. SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h
  43802. ----------310503-----------------------------
  43803. INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK
  43804.     AX = 0503h
  43805.     BX:CX = new size in bytes (nonzero)
  43806.     SI:DI = handle of memory block
  43807. Return: CF clear if successful
  43808.         BX:CX = new linear address
  43809.         SI:DI = new handle of memory block
  43810.     CF set on error
  43811.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h)
  43812.         (see AX=0000h)
  43813. Notes:    any selectors pointing at the block must be updated
  43814.     the previous memory block handle becomes invalid
  43815.     an error is returned if the new size is 0
  43816. SeeAlso: AX=0102h,AX=0501h,AX=0505h
  43817. ----------310504-----------------------------
  43818. INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK
  43819.     AX = 0504h
  43820.     EBX = page-aligned linear address of memory block (00000000h if any
  43821.         address is acceptable)
  43822.     ECX = size in bytes (nonzero)
  43823.     EDX = flags
  43824.         bit 0: set to create committed pages instead of uncommitted pages
  43825.         bits 1-31: reserved (0)
  43826. Return: CF clear if successful
  43827.         EBX = linear address of memory block
  43828.         ESI = memory block handle
  43829.     CF set on error
  43830.         AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see AX=0000h)
  43831. Note:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  43832. SeeAlso: AX=0501h,AX=0505h
  43833. ----------310505-----------------------------
  43834. INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK
  43835.     AX = 0505h
  43836.     ESI = memory block handle
  43837.     ECX = new size in bytes (nonzero)
  43838.     EDX = flags
  43839.         bit 0: create committed pages rather than uncommitted pages
  43840.         bit 1: segment descriptor update required
  43841.         ES:EBX -> buffer containing array of WORDs with selectors
  43842.         EDI = number of selectors in array
  43843.         bits 2-31: reserved (0)
  43844. Return: CF clear if successful
  43845.         EBX = new linear base address
  43846.         ESI = new memory block handle
  43847.     CF set on error
  43848.         AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see AX=0000h)
  43849. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  43850.     the old memory block handle becomes invalid
  43851.     if EDX bit 1 set and the block's base address is changed, DPMI updates
  43852.       all descriptors for selectors in the update buffer which fall within
  43853.       the memory block
  43854. SeeAlso: AX=0503h,AX=0504h
  43855. ----------310506-----------------------------
  43856. INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES
  43857.     AX = 0506h
  43858.     ESI = memory block handle
  43859.     EBX = offset in memory block of first page
  43860.     ECX = number of pages
  43861.     ES:EDX -> array of WORDs to hold page attributes (see below)
  43862. Return: CF clear if successful
  43863.         buffer filled
  43864.     CF set on error
  43865.         AX = error code (8001h,8023h,8025h) (see AX=0000h)
  43866. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  43867.     if EBX is not page-aligned, it will be rounded down
  43868. SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h
  43869.  
  43870. Format of page attribute words:
  43871.  bits 0-2    page type
  43872.         000 uncommitted
  43873.         001 committed
  43874.         010 mapped (see AX=0508h,AX=0509h)
  43875.         other currently unused
  43876.  bit 3        page is read/write rather than read-only
  43877.  bit 4        accessed/dirty bits supplied in bits 5 and 6
  43878.  bit 5        page has been accessed (only valid if bit 4 set)
  43879.  bit 6        page has been written (only valid if bit 4 set)
  43880.  bits 7-15    reserved (0)
  43881. ----------310507-----------------------------
  43882. INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES
  43883.     AX = 0507h
  43884.     ESI = memory block handle
  43885.     EBX = offset in memory block of first page
  43886.     ECX = number of pages
  43887.     ES:EDX -> array of WORDs with new page attributes (see AX=0506h)
  43888. Return: CF clear if successful
  43889.     CF set on error
  43890.         AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h)
  43891.         (see AX=0000h)
  43892.         ECX = number of pages which have been set
  43893. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  43894.     if EBX is not page-aligned, it will be rounded down
  43895. SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh
  43896. ----------310508-----------------------------
  43897. INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK
  43898.     AX = 0508h
  43899.     ESI = memory block handle
  43900.     EBX = page-aligned offset within memory block of page(s) to be mapped
  43901.     ECX = number of pages to map
  43902.     EDX = page-aligned physical address of device
  43903. Return: CF clear if successful
  43904.     CF set on error
  43905.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  43906. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  43907.     support of this function is optional; hosts are also allowed to support
  43908.       the function for some devices but not others
  43909. SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h
  43910. ----------310509-----------------------------
  43911. INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK
  43912.     AX = 0509h
  43913.     ESI = memory block handle
  43914.     EBX = page-aligned offset within memory block of page(s) to map
  43915.     ECX = number of pages to map
  43916.     EDX = page-aligned linear address of conventional (below 1M) memory
  43917. Return: CF clear if successful
  43918.     CF set on error
  43919.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  43920. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  43921.     support of this function is optional
  43922. SeeAlso: AX=0504h,AX=0508h,AX=0801h
  43923. ----------31050A-----------------------------
  43924. INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE
  43925.     AX = 050AH
  43926.     SI:DI = memory block handle
  43927. Return: CF clear if successful
  43928.         SI:DI = size in bytes
  43929.         BX:CX = base address
  43930.     CF set on error
  43931.         AX = error code (8023h) (see AX=0000h)
  43932. SeeAlso: AX=0501h,AX=0504h
  43933. ----------31050B-----------------------------
  43934. INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION
  43935.     AX = 050Bh
  43936.     ES:(E)DI -> 128-byte buffer for memory information (see below)
  43937. Return: CF clear if successful
  43938.     CF set on error (DPMI 0.9 only)
  43939. Note:    16-bit programs use ES:DI, 32-bit programs must use ES:EDI
  43940. SeeAlso: AX=0500h
  43941.  
  43942. Format of memory information:
  43943. Offset    Size    Description
  43944.  00h    DWORD    total allocated bytes of physical memory controlled by host
  43945.  04h    DWORD    total allocated bytes of virtual memory controlled by host
  43946.  08h    DWORD    total available bytes of virtual memory controlled by host
  43947.  0Ch    DWORD    total allocated bytes of virtual memory for curr virtual mach
  43948.  10h    DWORD    total available bytes of virtual memory for curr virtual mach
  43949.  14h    DWORD    total allocated bytes of virtual memory for current client
  43950.  18h    DWORD    total available bytes of virtual memory for current client
  43951.  1Ch    DWORD    total locked bytes for current client
  43952.  20h    DWORD    maximum locked bytes for current client
  43953.  24h    DWORD    highest linear address available to current client
  43954.  28h    DWORD    largest available memory block in bytes
  43955.  2Ch    DWORD    minimum allocation unit in bytes
  43956.  30h    DWORD    allocation alignment unit size in bytes
  43957.  34h 76 BYTEs    reserved (00h)
  43958. ----------310600-----------------------------
  43959. INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION
  43960.     AX = 0600h
  43961.     BX:CX = starting linear address
  43962.     SI:DI = size of region in bytes
  43963. Return: CF clear if successful
  43964.     CF set on error
  43965.         none of the memory is locked
  43966.         AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see AX=0000h)
  43967. Notes:    pages at beginning and end will be locked if the region overlaps them
  43968.     may be called multiple times for a given page; the DPMI host keeps a
  43969.       lock count for each page
  43970. SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h
  43971. ----------310601-----------------------------
  43972. INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION
  43973.     AX = 0601h
  43974.     BX:CX = starting linear address
  43975.     SI:DI = size of region in bytes
  43976. Return: CF clear if successful
  43977.     CF set on error
  43978.         none of the memory is unlocked
  43979.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  43980. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  43981.     memory whose lock count has not reached zero remains locked
  43982. SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h
  43983. ----------310602-----------------------------
  43984. INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE
  43985.     AX = 0602h
  43986.     BX:CX = starting linear address
  43987.     SI:DI = size of region in bytes
  43988. Return: CF clear if successful
  43989.     CF set on error    
  43990.         none of the memory is made pageable
  43991.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  43992. Notes:    must relock all unlocked real mode memory before terminating process
  43993.       for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory
  43994.     pages at beginning and end will be unlocked if the region overlaps them
  43995.     pageability of real mode pages is binary, not a count
  43996. SeeAlso: AX=0600h,AX=0603h
  43997. ----------310603-----------------------------
  43998. INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION
  43999.     AX = 0603h
  44000.     BX:CX = starting linear address
  44001.     SI:DI = size of region in bytes
  44002. Return: CF clear if successful
  44003.     CF set on error    
  44004.         none of the memory is relocked
  44005.         AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see AX=0000h)
  44006. Notes:    pages at beginning and end will be relocked if the region overlaps them
  44007.     pageability of real mode pages is binary, not a count
  44008. SeeAlso: AX=0602h
  44009. ----------310604-----------------------------
  44010. INT 31 P - DPMI 0.9+ - GET PAGE SIZE
  44011.     AX = 0604h
  44012. Return: CF clear if successful
  44013.         BX:CX = page size in bytes
  44014.     CF set on error
  44015.         AX = error code (DPMI 1.0+)
  44016.         8001h unsupported, 16-bit host
  44017. ----------310700-----------------------------
  44018. INT 31 P - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES
  44019.     AX = 0700h
  44020.     BX:CX = starting linear page number
  44021.     SI:DI = number of pages to mark as paging candidates
  44022. Return: ???
  44023. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  44024.       specification, this function is called by MS Windows TASKMAN,
  44025.       PROGMAN, and KERNEL
  44026. SeeAlso: AX=0701h,AX=0702h
  44027. ----------310701-----------------------------
  44028. INT 31 P - DPMI 0.9+ - DISCARD PAGES
  44029.     AX = 0701h
  44030.     BX:CX = starting linear page number
  44031.     SI:DI = number of pages to discard
  44032. Return: ???
  44033. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  44034.       specification, this function is called by MS Windows TASKMAN,
  44035.       PROGMAN, and KERNEL
  44036. SeeAlso: AX=0700h,AX=0703h
  44037. ----------310702-----------------------------
  44038. INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE
  44039.     AX = 0702h
  44040.     BX:CX = starting linear address
  44041.     SI:DI = number of bytes to mark as paging candidates
  44042. Return: CF clear if successful
  44043.     CF set on error
  44044.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  44045. Notes:    this function is advisory, and does not force immediate paging
  44046.     partial pages will not be discarded
  44047. SeeAlso: AX=0700h,AX=0703h
  44048. ----------310703-----------------------------
  44049. INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS
  44050.     AX = 0703h
  44051.     BX:CX = starting linear address
  44052.     SI:DI = number of bytes to mark as discarded
  44053. Return: CF clear if successful
  44054.     CF set on error
  44055.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  44056. Notes:    this function is advisory, and may be ignored by DPMI implementations
  44057.     partial pages will not be discarded
  44058. SeeAlso: AX=0701h,AX=0702h
  44059. ----------310800-----------------------------
  44060. INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING
  44061.     AX = 0800h
  44062.     BX:CX = physical address (should be above 1 MB)
  44063.     SI:DI = size in bytes
  44064. Return:    CF clear if successful
  44065.         BX:CX = linear address which maps the requested physical memory
  44066.     CF set on error
  44067.         AX = error code (DPMI 1.0+) (8003h,8021h) (see AX=0000h)
  44068. Notes:    implementations may refuse this call because it can circumvent protects
  44069.     the caller must build an appropriate selector for the memory
  44070.     do not use for memory mapped in the first megabyte
  44071. SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h
  44072. ----------310801-----------------------------
  44073. INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING
  44074.     AX = 0801h
  44075.     BX:CX = linear address returned by AX=0800h
  44076. Return: CF clear if successful
  44077.     CF set on error
  44078.         AX = error code (8025h) (see AX=0000h)
  44079. Note:    should be called at end of access to device mapped with AX=0800h
  44080. SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h
  44081. ----------310900-----------------------------
  44082. INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE
  44083.     AX = 0900h
  44084. Return: CF clear
  44085.     virtual interrupts disabled
  44086.     AL = 00h if previously disabled
  44087.        = 01h if previously enabled
  44088.     AH preserved
  44089. Notes:    the previous state may be restored simply by executing another INT 31
  44090.     a CLI instruction may be used if the previous state is unimportant,
  44091.       but should be assumed to be very slow due to trapping by the host
  44092. SeeAlso: AX=0901h,AX=0902h
  44093. ----------310901-----------------------------
  44094. INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE
  44095.     AX = 0901h
  44096. Return: CF clear
  44097.     virtual interrupts enabled
  44098.     AL = 00h if previously disabled
  44099.        = 01h if previously enabled
  44100.     AH preserved
  44101. Notes:    the previous state may be restored simply by executing another INT 31
  44102.     a STI instruction may be used if the previous state is unimportant,
  44103.       but should be assumed to be very slow due to trapping by the host
  44104. SeeAlso: AX=0900h,AX=0902h
  44105. ----------310902-----------------------------
  44106. INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE
  44107.     AX = 0902h
  44108. Return: CF clear
  44109.     AL = 00h if disabled
  44110.        = 01h if enabled
  44111. Note:    should be used rather than PUSHF because that instruction yields the
  44112.       physical interrupt state rather than the per-client virtualized
  44113.       interrupt flag
  44114. SeeAlso: AX=0900h,AX=0901h
  44115. ----------310A00-----------------------------
  44116. INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT
  44117.     AX = 0A00h
  44118.     DS:SI / DS:ESI -> case-sensitive ASCIZ vendor name or identifier
  44119. Return: CF clear if successful
  44120.         ES:DI / ES:EDI -> FAR extended API entry point
  44121.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  44122.     CF set on error
  44123.         AX = error code (DPMI 1.0+) (8001h) (see AX=0000h)
  44124. Notes:    extended API parameters are vendor-specific
  44125.     DPMI 1.0+ supports this function solely for backward compatibility; use
  44126.       INT 2F/AX=168Ah instead
  44127. SeeAlso: INT 2F/AX=168Ah
  44128. ----------310B00-----------------------------
  44129. INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT
  44130.     AX = 0B00h
  44131.     BX:CX = linear address
  44132.     DL = size (1,2,4 bytes)
  44133.     DH = type (00h execute, 01h write, 02h read/write)
  44134. Return: CF clear if successful
  44135.         BX = watchpoint handle
  44136.     CF set on error
  44137.         AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see AX=0000h)
  44138. SeeAlso: AX=0212h,AX=0601h
  44139. ----------310B01-----------------------------
  44140. INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT
  44141.     AX = 0B01h
  44142.     BX = watchpoint handle
  44143. Return: CF clear if successful
  44144.     CF set on error
  44145.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  44146. Note:    the watchpoint handle is freed
  44147. SeeAlso: AX=0B00h
  44148. ----------310B02-----------------------------
  44149. INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT
  44150.     AX = 0B02h
  44151.     BX = watchpoint handle
  44152. Return: CF clear if successful
  44153.         AX = status flags
  44154.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  44155.     CF set on error
  44156.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  44157. SeeAlso: AX=0B00h,AX=0B03h
  44158. ----------310B03-----------------------------
  44159. INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT
  44160.     AX = 0B03h
  44161.     BX = watchpoint handle
  44162. Return: CF clear if successful
  44163.     CF set on error
  44164.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  44165. SeeAlso: AX=0B02h
  44166. ----------310C00-----------------------------
  44167. INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK
  44168.     AX = 0C00h
  44169.     ES:(E)DI -> resident service provider structure (see below)
  44170. Return: CF clear if successful
  44171.     CF set on error
  44172.         AX = error code (8015h,8021h,8025h) (see AX=0000h)
  44173. Note:    calling this function declares an intent to provide resident
  44174.       protected mode services after terminating with AX=0C01h
  44175. SeeAlso: AX=0303h,AX=0C01h
  44176.  
  44177. Format of resident service provider structure:
  44178. Offset    Size    Description
  44179.  00h    QWORD    descriptor for 16-bit data segment
  44180.  08h    QWORD    descriptor for 16-bit code segment (zeros if not supported)
  44181.  10h    WORD    offset of 16-bit callback procedure
  44182.  12h  2 BYTEs    reserved
  44183.  14h    QWORD    descriptor for 32-bit data segment
  44184.  1Ch    QWORD    descriptor for 32-bit code segment (zeros if not supported)
  44185.  24h    DWORD    offset of 32-bit callback procedure
  44186. ----------310C01-----------------------------
  44187. INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT
  44188.     AX = 0C01h
  44189.     BL = return code
  44190.     DX = number of paragraphs of DOS memory to reserve (0 or >= 6)
  44191. Return: never
  44192. Notes:    should only be used if the program will only provide services to
  44193.       other DPMI programs
  44194.     any protected mode memory remains allocated to the program unless
  44195.       explicitly freed before this call
  44196.     must first call AX=0C00h or program will simply be terminated
  44197. SeeAlso: AX=0C00h,INT 21/AH=31h
  44198. ----------310D00-----------------------------
  44199. INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY
  44200.     AX = 0D00h
  44201.     ES:(E)DI -> shared memory allocation request structure (see below)
  44202. Return: CF clear if successful
  44203.         request structure updated
  44204.     CF set on error
  44205.         AX = error code (8012h,8013h,8014h,8016h,8021h) (see AX=0000h)
  44206. Note:    first 16 bytes of memory block will be initialized to zeros on the
  44207.       first allocation
  44208. SeeAlso: AX=0501h,AX=0D01h,AX=0D02h
  44209.  
  44210. Format of shared memory allocation request structure:
  44211. Offset    Size    Description
  44212.  00h    DWORD    requested length of shared memory block in bytes
  44213.  04h    DWORD    (return) allocated length of block
  44214.  08h    DWORD    (return) shared memory handle
  44215.  0Ch    DWORD    (return) linear address of memory block
  44216.  10h  6 BYTEs    selector:offset32 of ASCIZ name for memory block
  44217.         (name max 128 bytes)
  44218.  16h  2 BYTEs    reserved
  44219.  18h  4 BYTEs    reserved (00h)
  44220. ----------310D01-----------------------------
  44221. INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY
  44222.     AX = 0D01h
  44223.     SI:DI = shared memory block handle
  44224. Return: CF clear if successful
  44225.     CF set on error
  44226.         AX = error code (8023h) (see AX=0000h)
  44227. Notes:    handle becomes invalid after this call
  44228.     DPMI maintains separate global and virtual machine use counts for each
  44229.       shared memory block; when the global use counts reaches zero, the
  44230.       block is finally destroyed
  44231. SeeAlso: AX=0502h,AX=0D00h
  44232. ----------310D02-----------------------------
  44233. INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY
  44234.     AX = 0D02h
  44235.     SI:DI = shared memory block handle
  44236.     DX = flags
  44237.         bit 0: return immediately rather than suspending if serialization
  44238.             unavailable
  44239.         1: shared rather than exclusive serialization
  44240.         2-15: reserved (0)
  44241. Return: CF clear if successful
  44242.     CF set on error
  44243.         AX = error code (8004h,8005h,8017h-8019h,8023h) (see AX=0000h)
  44244. Notes:    an exclusive serialization blocks any other serialization attempts for
  44245.       the same block by another virtual machine; a shared serialization
  44246.       blocks attempts at exclusive serialization by another virtual machine
  44247.     hosts are not required to detect deadlock
  44248.     a client's interrupt handler can cancel a serialization call which
  44249.       caused it to block by calling AX=0D03h
  44250. SeeAlso: AX=0D00h,AX=0D03h
  44251. ----------310D03-----------------------------
  44252. INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY
  44253.     AX = 0D03h
  44254.     SI:DI = shared memory block handle
  44255.     DX = flags
  44256.         bit 0: release shared serialization rather than exclusive serialztn
  44257.         bit 1: free pending serialization
  44258.         bits 2-15: reserved (0)
  44259. Return: CF clear if successful
  44260.     CF set on error
  44261.         AX = error code (8002h,8023h) (see AX=0000h)
  44262. SeeAlso: AX=0D00h,AX=0D02h
  44263. ----------310E00-----------------------------
  44264. INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS
  44265.     AX = 0E00h
  44266. Return: CF clear
  44267.     AX = coprocessor status
  44268.         bit 0: numeric coprocessor enabled for current client
  44269.         bit 1: client is emulating coprocessor
  44270.         bit 2: numeric coprocessor is present
  44271.         bit 3: host is emulating coprocessor instructions
  44272.         bits 4-7: coprocessor type
  44273.         0000 none
  44274.         0010 80287
  44275.         0011 80387
  44276.         0100 80486 with numeric coprocessor
  44277.         other reserved
  44278.         bits 8-15: not used
  44279. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  44280. SeeAlso: AX=0E01h
  44281. ----------310E01-----------------------------
  44282. INT 31 P - DPMI 1.0+ - SET EMULATION
  44283.     AX = 0E01h
  44284.     BX = coprocessor flag bits
  44285.         bit 0: enable numeric coprocessor for current client
  44286.         bit 1: client will emulate coprocessor
  44287.         bits 2-15: not used
  44288. Return: CF clear if successful
  44289.     CF set on error
  44290.         AX = error code (8026h) (see AX=0000h)
  44291. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  44292. SeeAlso: AX=0E00h
  44293. ----------32---------------------------------
  44294. INT 32 - VIRUS - reportedly used by "Tiny" Viruses
  44295. SeeAlso: INT 60"VIRUS"
  44296. ----------330000-----------------------------
  44297. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  44298.     AX = 0000h
  44299. Return: AX = status
  44300.         0000h hardware/driver not installed
  44301.         FFFFh hardware/driver installed
  44302.     BX = number of buttons
  44303.         0000h other than two
  44304.         0002h two buttons (many drivers)
  44305.         0003h Mouse Systems/Logitech three-button mouse
  44306.         FFFFh two buttons
  44307. Notes:    to use mouse on a Hercules-compatible monographics card in graphics
  44308.       mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1,
  44309.       and then call this function.    Logitech drivers v5.01 and v6.00
  44310.       reportedly do not correctly use Hercules graphics in dual-monitor
  44311.       systems, while version 4.10 does.
  44312.     the Logitech mouse driver contains the signature string "LOGITECH" 
  44313.       three bytes past the interrupt handler; many of the Logitech mouse
  44314.       utilities check for this signature.
  44315. SeeAlso: AX=0011h,AX=0021h,AX=002Fh,INT 62/AX=007Ah,INT 74
  44316. ----------330001-----------------------------
  44317. INT 33 - MS MOUSE - SHOW MOUSE CURSOR
  44318.     AX = 0001h
  44319. SeeAlso: AX=0002h,INT 16/AX=FFFEh,INT 62/AX=007Bh
  44320. ----------330002-----------------------------
  44321. INT 33 - MS MOUSE - HIDE MOUSE CURSOR
  44322.     AX = 0002h
  44323. Note:    multiple calls to hide the cursor will require multiple calls to
  44324.       function 01h to unhide it.
  44325. SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh,INT 62/AX=007Bh
  44326. ----------330003-----------------------------
  44327. INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS
  44328.     AX = 0003h
  44329. Return: BX = button status
  44330.        bit 0  left button pressed if 1
  44331.        bit 1  right button pressed if 1
  44332.        bit 2  middle button pressed if 1 (Mouse Systems/Logitech mouse)
  44333.     CX = column
  44334.     DX = row
  44335. SeeAlso: AX=0004h,AX=000Bh,INT 2F/AX=D000h"ZWmous"
  44336. ----------330004-----------------------------
  44337. INT 33 - MS MOUSE - POSITION MOUSE CURSOR
  44338.     AX = 0004h
  44339.     CX = column
  44340.     DX = row
  44341. Note:    the row and column are truncated to the next lower multiple of the cell
  44342.       size; however, some versions of the Microsoft documentation
  44343.       incorrectly state that the coordinates are rounded
  44344. SeeAlso: AX=0003h,INT 62/AX=0081h
  44345. ----------330005-----------------------------
  44346. INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA
  44347.     AX = 0005h
  44348.     BX = button
  44349.         0000h left
  44350.         0001h right
  44351.         0002h middle (Mouse Systems/Logitech mouse)
  44352. Return: AX = button states
  44353.         bit 0 left button pressed if 1
  44354.         bit 1 right button pressed if 1
  44355.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  44356.     BX = number of times specified button has been pressed since last call
  44357.     CX = column at time specified button was last pressed
  44358.     DX = row at time specified button was last pressed
  44359. SeeAlso: AX=0006h,INT 62/AX=007Ch
  44360. ----------330006-----------------------------
  44361. INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA
  44362.     AX = 0006h
  44363.     BX = button
  44364.         0000h left
  44365.         0001h right
  44366.         0002h middle (Mouse Systems/Logitech mouse)
  44367. Return: AX = button states
  44368.         bit 0 left button pressed if 1
  44369.         bit 1 right button pressed if 1
  44370.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  44371.     BX = number of times specified button has been released since last call
  44372.     CX = column at time specified button was last released
  44373.     DX = row at time specified button was last released
  44374. SeeAlso: AX=0005h,INT 62/AX=007Ch
  44375. ----------330007-----------------------------
  44376. INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE
  44377.     AX = 0007h
  44378.     CX = minimum column
  44379.     DX = maximum column
  44380. SeeAlso: AX=0008h,AX=0010h,AX=0031h,INT 62/AX=0080h
  44381. ----------330008-----------------------------
  44382. INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE
  44383.     AX = 0008h
  44384.     CX = minimum row
  44385.     DX = maximum row
  44386. SeeAlso: AX=0007h,AX=0010h,AX=0031h,INT 62/AX=0080h
  44387. ----------330009-----------------------------
  44388. INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR
  44389.     AX = 0009h
  44390.     BX = column of cursor hot spot in bitmap (-16 to 16)
  44391.     CX = row of cursor hot spot (-16 to 16)
  44392.     ES:DX -> bitmap
  44393.         16 words screen mask
  44394.         16 words cursor mask
  44395.             each word defines the sixteen pixels of a row, low bit
  44396.             rightmost
  44397. SeeAlso: AX=000Ah,AX=0012h,AX=002Ah,INT 62/AX=007Fh
  44398. ----------33000A-----------------------------
  44399. INT 33 - MS MOUSE - DEFINE TEXT CURSOR
  44400.     AX = 000Ah
  44401.     BX = hardware/software text cursor
  44402.         0000h software
  44403.         CX = screen mask
  44404.         DX = cursor mask
  44405.         0001h hardware
  44406.         CX = start scan line
  44407.         DX = end scan line
  44408. Note:    when the software cursor is selected, the char/attribute data at the
  44409.       current screen position is ANDed with the screen mask and then XORed
  44410.       with the cursor mask
  44411. SeeAlso: AX=0009h,INT 62/AX=007Eh
  44412. ----------33000B-----------------------------
  44413. INT 33 - MS MOUSE - READ MOTION COUNTERS
  44414.     AX = 000Bh
  44415. Return: CX = number of mickeys mouse moved horizontally since last call
  44416.     DX = number of mickeys mouse moved vertically
  44417. Notes:    a mickey is the smallest increment the mouse can sense
  44418.     positive values indicate down/right
  44419. SeeAlso: AX=0003h,AX=001Bh,AX=0027h
  44420. ----------33000C-----------------------------
  44421. INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  44422.     AX = 000Ch
  44423.     CX = call mask
  44424.          bit 0 call if mouse moves
  44425.          bit 1 call if left button pressed
  44426.          bit 2 call if left button released
  44427.          bit 3 call if right button pressed
  44428.          bit 4 call if right button released
  44429.          bit 5 call if middle button pressed (Mouse Systems/Logitech mouse)
  44430.          bit 6 call if middle button released (Mouse Sys/Logitech mouse)
  44431.     ES:DX -> FAR routine
  44432. Notes:    when the subroutine is called, it is passed the following values:
  44433.       AX = condition mask (same bit assignments as call mask)
  44434.       BX = button state
  44435.       CX = cursor column
  44436.       DX = cursor row
  44437.       SI = horizontal mickey count
  44438.       DI = vertical mickey count
  44439.     some versions of the Microsoft documentation incorrectly state that CX
  44440.       bit 0 means call if mouse cursor moves, and swap the meanings of SI
  44441.       and DI
  44442. SeeAlso: AX=0018h
  44443. ----------33000D-----------------------------
  44444. INT 33 - MS MOUSE - LIGHT PEN EMULATION ON
  44445.     AX = 000Dh
  44446. SeeAlso: AX=000Eh,INT 10/AH=04h
  44447. ----------33000E-----------------------------
  44448. INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF
  44449.     AX = 000Eh
  44450. SeeAlso: AX=000Dh
  44451. ----------33000F-----------------------------
  44452. INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO
  44453.     AX = 000Fh
  44454.     CX = number of mickeys per 8 pixels horizontally (default 8)
  44455.     DX = number of mickeys per 8 pixels vertically (default 16)
  44456. SeeAlso: AX=0013h,AX=001Ah,INT 62/AX=0082h
  44457. ----------330010-----------------------------
  44458. INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING
  44459.     AX = 0010h
  44460.     CX,DX = X,Y coordinates of upper left corner
  44461.     SI,DI = X,Y coordinates of lower right corner
  44462. Note:    mouse cursor is hidden in the specified region, and needs to be
  44463.       explicitly turned on again
  44464. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"Genius MOUSE",AX=0031h
  44465. ----------330010-----------------------------
  44466. INT 33 - Genius MOUSE - DEFINE SCREEN REGION FOR UPDATING
  44467.     AX = 0010h
  44468.     ES:DX -> update region list (see below)
  44469. Notes:    mouse cursor is hidden in the specified region, and needs to be
  44470.       explicitly turned on again
  44471.     this version of the call is described in an August 1988 version of the
  44472.       Genius Mouse programmer's reference; it has been changed to conform
  44473.       to the Microsoft version shown above by version 9.06 (and possibly
  44474.       earlier versions)
  44475. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"MS MOUSE"
  44476.  
  44477. Format of update region list:
  44478. Offset    Size    Description
  44479.  00h    WORD    left-most column
  44480.  02h    WORD    top-most row
  44481.  04h    WORD    right-most column
  44482.  06h    WORD    bottom-most row
  44483. ----------330011-----------------------------
  44484. INT 33 - Genius Mouse 9.06 - GET NUMBER OF BUTTONS
  44485.     AX = 0011h
  44486. Return: AX = FFFFh
  44487.     BX = number of buttons
  44488. SeeAlso: AX=0000h
  44489. ----------330012-----------------------------
  44490. INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  44491.     AX = 0012h
  44492.     BH = cursor width in words
  44493.     CH = rows in cursor
  44494.     BL = horizontal hot spot (-16 to 16)
  44495.     CL = vertical hot spot (-16 to 16)
  44496.     ES:DX -> bit map of screen and cursor maps
  44497. Return: AX = FFFFh if successful
  44498. SeeAlso: AX=0009h,AX=002Ah,AX=0035h
  44499. ----------330013-----------------------------
  44500. INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD
  44501.     AX = 0013h
  44502.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  44503. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  44504. SeeAlso: AX=000Fh,AX=001Bh,AX=002Ch
  44505. ----------330014-----------------------------
  44506. INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES
  44507.     AX = 0014h
  44508.     CX = call mask (see AX=000Ch)
  44509.     ES:DX -> FAR routine 
  44510. Return: CX = call mask of previous interrupt routine
  44511.     ES:DX = FAR address of previous interrupt routine
  44512. SeeAlso: AX=000Ch,AX=0018h
  44513. ----------330015-----------------------------
  44514. INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS
  44515.     AX = 0015h
  44516. Return: BX = size of buffer needed to store driver state
  44517. SeeAlso: AX=0016h,AX=0017h,AX=0042h
  44518. ----------330016-----------------------------
  44519. INT 33 - MS MOUSE - SAVE DRIVER STATE
  44520.     AX = 0016h
  44521.     BX = size of buffer (see AX=0015h)
  44522.     ES:DX -> buffer for driver state
  44523. Note:    although not documented, many drivers appear to require BX on input
  44524. SeeAlso: AX=0015h,AX=0017h
  44525. ----------330017-----------------------------
  44526. INT 33 - MS MOUSE - RESTORE DRIVER STATE
  44527.     AX = 0017h
  44528.     BX = size of buffer (see AX=0015h)
  44529.     ES:DX -> buffer containing saved state
  44530. Notes:    although not documented, many drivers appear to require BX on input
  44531.     some mouse drivers range-check the values in the saved state based on
  44532.       the current video mode; thus, the video mode should be restored
  44533.       before the mouse driver's state is restored
  44534. SeeAlso: AX=0015h,AX=0016h
  44535. ----------330018-----------------------------
  44536. INT 33 - MS MOUSE - SET ALTERNATE MOUSE USER HANDLER
  44537.     AX = 0018h
  44538.     CX = call mask
  44539.          bit 0 call if mouse moves
  44540.          bit 1 call if left button pressed
  44541.          bit 2 call if left button released
  44542.          bit 3 call if right button pressed
  44543.          bit 4 call if right button released
  44544.          bit 5 call if shift button pressed during event
  44545.          bit 6 call if ctrl key pressed during event
  44546.          bit 7 call if alt key pressed during event
  44547.     ES:DX -> FAR routine
  44548. Return: AX = 0018h if successful
  44549.        = FFFFh on error
  44550. Notes:    when the subroutine is called, it is passed the following values:
  44551.       AX = condition mask (same bit assignments as call mask)
  44552.       BX = button state
  44553.       CX = cursor column
  44554.       DX = cursor row
  44555.       SI = horizontal mickey count
  44556.       DI = vertical mickey count
  44557.     up to three handlers can be defined by separate calls to this function
  44558. SeeAlso: AX=000Ch,AX=0014h,AX=0019h
  44559. ----------330019-----------------------------
  44560. INT 33 - MS MOUSE - RETURN USER ALTERNATE INTERRUPT VECTOR
  44561.     AX = 0019h
  44562.     CX = call mask (see AX=0018h)
  44563. Return: BX:DX = user interrupt vector
  44564.     CX = call mask (0000h if not found)
  44565. Note:    attempts to find a user event handler (defined by function 18h)
  44566.       whose call mask matches CX
  44567. SeeAlso: AX=0018h
  44568. ----------33001A-----------------------------
  44569. INT 33 - MS MOUSE - SET MOUSE SENSITIVITY
  44570.     AX = 001Ah
  44571.     BX = horizontal speed \
  44572.     CX = vertical speed   / (see AX=000Fh)
  44573.     DX = double speed threshold (see AX=0013h)
  44574. SeeAlso: AX=0013h,AX=001Bh,INT 62/AX=0082h
  44575. ----------33001B-----------------------------
  44576. INT 33 - MS MOUSE - RETURN MOUSE SENSITIVITY
  44577.     AX = 001Bh
  44578. Return: BX = horizontal speed
  44579.     CX = vertical speed
  44580.     DX = double speed threshold
  44581. SeeAlso: AX=000Bh,AX=001Ah
  44582. ----------33001C-----------------------------
  44583. INT 33 - MS MOUSE - SET INTERRUPT RATE
  44584.     AX = 001Ch
  44585.     BX = rate
  44586.         00h no interrupts allowed
  44587.         01h 30 per second
  44588.         02h 50 per second
  44589.         03h 100 per second
  44590.         04h 200 per second
  44591. Notes:    only available on InPort mouse
  44592.     values greater than 4 may cause unpredictable driver behavior
  44593. ----------33001D-----------------------------
  44594. INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER
  44595.     AX = 001Dh
  44596.     BX = display page number
  44597. Note:    the cursor will be displayed on the specified page
  44598. SeeAlso: AX=001Eh
  44599. ----------33001E-----------------------------
  44600. INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER
  44601.     AX = 001Eh
  44602. Return: BX = display page number
  44603. SeeAlso: AX=001Dh
  44604. ----------33001F-----------------------------
  44605. INT 33 - MS MOUSE - DISABLE MOUSE DRIVER
  44606.     AX = 001Fh
  44607. Return: AX = 001Fh unsuccessful
  44608.          FFFFh successful
  44609.     ES:BX = vector for INT 33h before mouse driver was first installed
  44610. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  44611.     if you restore Int 33h to ES:BX, driver will be completely disabled
  44612. SeeAlso: AX=0020h
  44613. ----------330020-----------------------------
  44614. INT 33 - MS MOUSE - ENABLE MOUSE DRIVER
  44615.     AX = 0020h
  44616. Return: AX = 0020h unsuccessful (or driver not installed)
  44617.          FFFFh successful
  44618. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  44619.       which were removed by function 1Fh
  44620. SeeAlso: AX=001Fh
  44621. ----------330021-----------------------------
  44622. INT 33 - MS MOUSE - SOFTWARE RESET
  44623.     AX = 0021h
  44624. Return: AX = FFFFh if mouse driver installed
  44625.         BX = number of buttons (FFFFh = two buttons)
  44626.          0021h if mouse driver not installed
  44627. Note:    identical to funtion 00h, but does not reset the mouse
  44628. SeeAlso: AX=0000h
  44629. ----------330022-----------------------------
  44630. INT 33 - MS MOUSE - SET LANGUAGE FOR MESSAGES
  44631.     AX = 0022h
  44632.     BX = language
  44633.         00h English
  44634.         01h French
  44635.         02h Dutch
  44636.         03h German
  44637.         04h Swedish
  44638.         05h Finnish
  44639.         06h Spanish
  44640.         07h Portugese
  44641.         08h Italian
  44642. Note:    only available on international versions of the driver, US versions
  44643.       ignore this call
  44644. SeeAlso: AX=0023h
  44645. ----------330023-----------------------------
  44646. INT 33 - MS MOUSE - GET LANGUAGE FOR MESSAGES
  44647.     AX = 0023h
  44648. Return:    BX = language (see AX=0022h)
  44649. Note:    the US version of the driver always returns zero 
  44650. SeeAlso: AX=0022h
  44651. ----------330024-----------------------------
  44652. INT 33 - MS MOUSE v6.26+ - GET SOFTWARE VERSION, MOUSE TYPE, AND IRQ NUMBER
  44653.     AX = 0024h
  44654. Return: AX = FFFFh on error
  44655.     otherwise,
  44656.         BH = major version
  44657.         BL = minor version
  44658.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  44659.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  44660. SeeAlso: AX=004Dh,AX=006Dh
  44661. ----------330025-----------------------------
  44662. INT 33 - MS MOUSE v6.26+ - GET GENERAL DRIVER INFORMATION
  44663.     AX = 0025h
  44664. Return: AX = general information
  44665.         bit 15: driver loaded as device driver rather than TSR
  44666.         bit 14: driver is newer integrated type
  44667.         bits 13,12: current cursor type
  44668.             00 software text cursor
  44669.             01 hardware text cursor
  44670.             1X graphics cursor
  44671.         bits 11-8: interrupt rate (see AX=001Ch)
  44672.         bits 7-0:  count of currently-active Mouse Display Drivers (MDD),
  44673.             the newer integrated driver type
  44674.     BX = cursor lock flag for OS/2 to prevent reentrancy problems
  44675.     CX = mouse code active flag (for OS/2)
  44676.     DX = mouse driver busy flag (for OS/2)
  44677. ----------330026-----------------------------
  44678. INT 33 - MS MOUSE v6.26+ - GET MAXIMUM VIRTUAL COORDINATES
  44679.     AX = 0026h
  44680. Return: BX = mouse-disabled flag
  44681.     CX = maximum virtual X (for current video mode)
  44682.     DX = maximum virtual Y
  44683. SeeAlso: AX=0031h
  44684. ----------330026-----------------------------
  44685. INT 33 - Genius Mouse 9.06 - ???
  44686.     AX = 0026h
  44687. Return: CX = 0204h if CX was 0105h on entry, else unchanged
  44688. ----------330027-----------------------------
  44689. INT 33 - MS MOUSE v7.01+ - GET SCREEN/CURSOR MASKS AND MICKEY COUNTS
  44690.     AX = 0027h
  44691. Return: AX = screen-mask value (or hardware cursor scan-line start for v7.02+)
  44692.     BX = cursor-mask value (or hardware cursor scan-line stop for v7.02+)
  44693.     CX = horizontal mickeys moved since last call
  44694.     DX = vertical mickeys moved since last call
  44695. SeeAlso: AX=000Bh
  44696. ----------330028-----------------------------
  44697. INT 33 - MS MOUSE v7.0+ - SET VIDEO MODE
  44698.     AX = 0028h
  44699.     CX = new video mode (call is NOP if 0000h)
  44700.     DH = Y font size (00h = default)
  44701.     DL = X font size (00h = default)
  44702. Return: CL = status (00h = successful)
  44703. Note:    DX is ignored unless the selected video mode supports font size control
  44704. SeeAlso: AX=0029h,INT 10/AH=00h
  44705. ----------330029-----------------------------
  44706. INT 33 - MS MOUSE v7.0+ - ENUMERATE VIDEO MODES
  44707.     AX = 0029h
  44708.     CX = previous video mode
  44709.         0000h get first supported video mode
  44710.         other get next supported mode after mode CX
  44711. Return: CX = first/next video mode (0000h = no more video modes)
  44712.     BS:DX -> description of video mode or 0000h:0000h if none
  44713. Notes:    the enumerated video modes may be in any order and may repeat
  44714.     the description string (if available) is terminated by '$' followed by
  44715.       a NUL byte
  44716. SeeAlso: AX=0028h
  44717. ----------33002A-----------------------------
  44718. INT 33 - MS MOUSE v7.02+ - GET CURSOR HOT SPOT
  44719.     AX = 002Ah
  44720. Return: AX = internal counter controlling cursor visibility
  44721.     BX = cursor hot spot column
  44722.     CX = cursor hot spot row
  44723.     DX = mouse type (00h none, 01h bus, 02h serial, 03h InPort, 04h IBM,
  44724.              05h Hewlett-Packard)
  44725. Note:    the hot spot location is relative to the upper left corner of the
  44726.       cursor block and may range from -128 to +127 both horizontally and
  44727.       vertically
  44728. SeeAlso: AX=0009h,AX=0012h,AX=0035h
  44729. ----------33002B-----------------------------
  44730. INT 33 - MS MOUSE v7.0+ - LOAD ACCELERATION PROFILES
  44731.     AX = 002Bh
  44732.     BX = active acceleration profile
  44733.         0001h-0004h or FFFFh to restore default curves
  44734.     ES:SI -> buffer containing acceleration profile data (see below)
  44735. Return: AX = success flag
  44736. SeeAlso: AX=002Ch,AX=002Dh,AX=0033h
  44737.  
  44738. Format of acceleration profile data:
  44739. Offset    Size    Description
  44740.  00h    BYTE    length of acceleration profile 1
  44741.  01h    BYTE    length of acceleration profile 2
  44742.  02h    BYTE    length of acceleration profile 3
  44743.  03h    BYTE    length of acceleration profile 4
  44744.  04h 32 BYTEs    threshold speeds for acceleration profile 1
  44745.  24h 32 BYTEs    threshold speeds for acceleration profile 2
  44746.  44h 32 BYTEs    threshold speeds for acceleration profile 3
  44747.  64h 32 BYTEs    threshold speeds for acceleration profile 4
  44748.  84h 32 BYTEs    speedup factor for acceleration profile 1
  44749.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  44750.  A4h 32 BYTEs    speedup factor for acceleration profile 2
  44751.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  44752.  C4h 32 BYTEs    speedup factor for acceleration profile 3
  44753.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  44754.  E4h 32 BYTEs    speedup factor for acceleration profile 4
  44755.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  44756. 104h 16 BYTEs    name of acceleration profile 1 (blank-padded)
  44757. 114h 16 BYTEs    name of acceleration profile 2 (blank-padded)
  44758. 124h 16 BYTEs    name of acceleration profile 3 (blank-padded)
  44759. 134h 16 BYTEs    name of acceleration profile 4 (blank-padded)
  44760. Note:    unused bytes in the threshold speed fields are filled with 7Fh and
  44761.       unused bytes in the speedup factor fields are filled with 10h
  44762. ----------33002C-----------------------------
  44763. INT 33 - MS MOUSE v7.0+ - GET ACCELERATION PROFILES
  44764.     AX = 002Ch
  44765. Return: AX = status (0000h success)
  44766.     BX = currently-active acceleration profile
  44767.     ES:SI -> acceleration profile data (see AX=002Bh)
  44768. SeeAlso: AX=002Bh,AX=002Dh,AX=0033h
  44769. ----------33002D-----------------------------
  44770. INT 33 - MS MOUSE v7.0+ - SELECT ACCELERATION PROFILE
  44771.     AX = 002Dh
  44772.     BX = acceleration level
  44773.         0001h-0004h to set profile, or FFFFh to get current profile
  44774. Return: AX = status
  44775.         0000h successful
  44776.         ES:SI -> 16-byte blank-padded name of acceleration profile
  44777.         FFFEh invalid acceleration curve number
  44778.         ES:SI destroyed
  44779.     BX = active acceleration curve number
  44780. SeeAlso: AX=0013h,AX=002Bh,AX=002Ch,AX=002Eh
  44781. ----------33002E-----------------------------
  44782. INT 33 - MS MOUSE v8.10+ - SET ACCELERATION PROFILE NAMES
  44783.     AX = 002Eh
  44784.     BL = flag (if nonzero, fill ES:SI buffer with default names on return)
  44785.     ES:SI -> 64-byte buffer for profile names (16 bytes per name)
  44786. Return: AX = status (0000h success)
  44787.     ES:SI buffer filled with default names if BL nonzero on entry
  44788. Note:    not supported by Logitech driver v6.10
  44789. SeeAlso: AX=002Ch,AX=002Dh,AX=012Eh,AX=022Eh
  44790. ----------33002F-----------------------------
  44791. INT 33 - MS MOUSE v7.02+ - MOUSE HARDWARE RESET
  44792.     AX = 002Fh
  44793. Return: AX = status
  44794. Note:    invoked by mouse driver v8.20 on being called with INT 2F/AX=530Bh
  44795. SeeAlso: INT 2F/AH=53h
  44796. ----------330030-----------------------------
  44797. INT 33 - MS MOUSE v7.04+ - GET/SET BallPoint INFORMATION
  44798.     AX = 0030h
  44799.     CX = command
  44800.         0000h get status of BallPoint device
  44801.         other set rotation angle and masks
  44802.         BX = rotation angle (-32768 to 32767 degrees)
  44803.         CH = primary button mask
  44804.         CL = secondary button mask
  44805. Return: AX = button status (FFFFh if no BallPoint)
  44806.         bit 5: button 1
  44807.         bit 4: button 2
  44808.         bit 3: button 3
  44809.         bit 2: button 4
  44810.         other: zero
  44811.     BX = rotation angle (0-360 degrees)
  44812.     CH = primary button mask
  44813.     CL = secondary button mask
  44814. ----------330031-----------------------------
  44815. INT 33 - MS MOUSE v7.05+ - GET CURRENT MINIMUM/MAXIMUM VIRTUAL COORDINATES
  44816.     AX = 0031h
  44817. Return: AX = virtual X minimum
  44818.     BX = virtual Y minimum
  44819.     CX = virtual X maximum
  44820.     DX = virtual Y maximum
  44821. Note:    the minimum and maximum values are those set by AX=0007h and AX=0008h;
  44822.       the default is minimum = 0 and maximum = absolute maximum
  44823.       (see AX=0026h)
  44824. SeeAlso: AX=0007h,AX=0008h,AX=0010h,AX=0026h
  44825. ----------330032-----------------------------
  44826. INT 33 - MS MOUSE v7.05+ - GET ACTIVE ADVANCED FUNCTIONS
  44827.     AX = 0032h
  44828. Return: AX = active function flags (FFFFh for v8.10)
  44829.         bit 15: function 0025h supported
  44830.         bit 14: function 0026h supported
  44831.         ...
  44832.         bit 0: function 0034h supported
  44833.     BX = ??? (0000h) officially unused
  44834.     CX = ??? (E000h) officially unused
  44835.     DX = ??? (0000h) officially unused
  44836. ----------330033-----------------------------
  44837. INT 33 - MS MOUSE v7.05+ - GET SWITCH SETTINGS AND ACCELERATION PROFILE DATA
  44838.     AX = 0033h
  44839.     CX = size of buffer
  44840.         0000h get required buffer size
  44841.         Return: AX = 0000h
  44842.             CX = required size (0154h for Logitech v6.10, 0159h
  44843.                 for MS v8.10-8.20)
  44844.         other
  44845.         ES:DX -> buffer of CX bytes
  44846.         Return: AX = 0000h
  44847.             CX = number of bytes returned
  44848.             ES:DX buffer filled (see below)
  44849. SeeAlso: AX=002Bh
  44850.  
  44851. Format of data buffer:
  44852. Offset    Size    Description
  44853.  00h    BYTE    mouse type
  44854.  01h    BYTE    current language
  44855.  02h    BYTE    horizontal sensitivity (00h-64h)
  44856.  03h    BYTE    vertical sensitivity (00h-64h)
  44857.  04h    BYTE    double-speed threshold (00h-64h)
  44858.  05h    BYTE    ballistic curve (01h-04h)
  44859.  06h    BYTE    interrupt rate (01h-04h)
  44860.  07h    BYTE    cursor override mask
  44861.  08h    BYTE    laptop adjustment
  44862.  09h    BYTE    memory type (00h-02h)
  44863.  0Ah    BYTE    SuperVGA support (00h,01h)
  44864.  0Bh    BYTE    rotation angle
  44865.  0Ch    BYTE    ???
  44866.  0Dh    BYTE    primary button (01h-04h)
  44867.  0Eh    BYTE    secondary button (01h-04h)
  44868.  0Fh    BYTE    click lock enabled (00h,01h)
  44869.  10h 324 BYTEs    acceleration profile data (see AX=002Bh)
  44870. 154h  5 BYTEs    ??? (Microsoft driver, but not Logitech)
  44871. ----------330034-----------------------------
  44872. INT 33 - MS MOUSE v8.0+ - GET INITIALIZATION FILE
  44873.     AX = 0034h
  44874. Return: AX = status (0000h successful)
  44875.     ES:DX -> ASCIZ initialization (.INI) file name
  44876. ----------330035-----------------------------
  44877. INT 33 - MS MOUSE v8.10+ - LCD SCREEN LARGE POINTER SUPPORT
  44878.     AX = 0035h
  44879.     BX = function
  44880.         FFFFh get current settings
  44881.         Return: AX = 0000h
  44882.             BH = style (see below)
  44883.             BL = size (see below)
  44884.             CH = threshold
  44885.             CL = active flag (00h disabled, 01h enabled)
  44886.             DX = delay
  44887.         other
  44888.         BH = style (00h normal, 01h reverse, 02h transparent)
  44889.         BL = size (00h small "1", 01h medium "1.5", 02h large "2")
  44890.         CH = threshold (00h-64h)
  44891.         CL = active flag (00h disable size change, 01h enable)
  44892.         DX = delay (0000h-0064h)
  44893.         Return: AX = 0000h
  44894. Note:    not supported by Logitech driver v6.10
  44895. SeeAlso: AX=0012h,AX=002Ah
  44896. ----------330042-----------------------------
  44897. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  44898.     AX = 0042h
  44899. Return: AX = FFFFh successful
  44900.         BX = buffer size in bytes for functions 50h and 52h
  44901.        = 0000h MSMOUSE not installed
  44902.        = 0042h functions 42h, 50h, and 52h not supported
  44903. Note:    this function is also supported by the Genius Mouse 9.06 driver
  44904. SeeAlso: AX=0015h,AX=0050h,AX=0052h
  44905. ----------330043-----------------------------
  44906. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CONFIGURE MOUSE???
  44907.     AX = 0043h
  44908.     CX:BX -> ??? buffer (see below)
  44909.     DL = ???
  44910. Return: ???
  44911. Notes:    also calls routines for INT 33/AX=0053h and INT 33/AX=004Fh
  44912.     this function is also supported by the Genius Mouse 9.06 driver
  44913.  
  44914. Format of buffer:
  44915. Offset    Size    Description
  44916.  00h    WORD    I/O port address
  44917.  02h    BYTE    ???
  44918.  03h    BYTE    interrupt number
  44919.  04h    BYTE    interrupt mask for interrupt controller
  44920.  05h  5 BYTEs    ???
  44921. ----------330044CXCDEF-----------------------
  44922. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ???
  44923.     AX = 0044h
  44924.     CX = CDEFh
  44925. Return: AX = new state of ???
  44926. Note:    this function is also supported by the Genius Mouse 9.06 driver
  44927. SeeAlso: AX=0045h
  44928. ----------330045CXCDEF-----------------------
  44929. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ???
  44930.     AX = 0045h
  44931.     CX = CDEFh
  44932. Return: AX = new state of ???
  44933. Note:    this function is also supported by the Genius Mouse 9.06 driver
  44934. SeeAlso: AX=0044h
  44935. ----------330047-----------------------------
  44936. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET BUTTON ASSIGNMENTS
  44937.     AX = 0047h
  44938.     ES:BX -> button assignments (3 bytes, combinations of "L", "M", "R")
  44939. Return: ???
  44940. Note:    also supported by Genius Mouse 9.06 driver
  44941. SeeAlso: AX=0067h
  44942. ----------330048BXCDEF-----------------------
  44943. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET ???
  44944.     AX = 0048h
  44945.     BX = CDEFh
  44946. Return: CX = ???
  44947.     BH = ???
  44948.     BL = ??? (if 50h, driver is using PS/2 pointing device BIOS interface)
  44949. Note:    also supported by Genius Mouse 9.06 driver
  44950. ----------33004B-----------------------------
  44951. INT 33 - Z-NIX MOUSE DRIVER v7.04d - INSTALLATION CHECK
  44952.     AX = 004Bh
  44953. Return: ES:DI -> signature/description string if installed
  44954. Note:    the signature string in v7.04d is
  44955.       "Z-NIX;BUS,AUX,Serial 3-byte and 5-byte Mouse Driver;ZMOUSE;v7.04d"
  44956. ----------33004CBXCDEF-----------------------
  44957. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ??? FLAG
  44958.     AX = 004Ch
  44959.     BX = CDEFh
  44960. Note:    also supported by Genius Mouse 9.06
  44961. SeeAlso: AX=006Ch
  44962. ----------33004D-----------------------------
  44963. INT 33 - MS MOUSE - RETURN POINTER TO COPYRIGHT STRING
  44964.     AX = 004Dh
  44965. Return: ES:DI -> copyright message "*** This is Copyright 1983 Microsoft"
  44966. Notes:    also supported by Logitech, Kraft, Genius Mouse, and Mouse Systems
  44967.       mouse drivers
  44968.     in the Genius Mouse 9.06 driver, the ASCIZ signature "KYE" immediately
  44969.       follows the above copyright message (KYE Corp. manufactures the
  44970.       driver)
  44971. SeeAlso: AX=0024h,AX=006Dh
  44972. ----------33004F-----------------------------
  44973. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ENABLE MOUSE
  44974.     AX = 004Fh
  44975. Return: nothing
  44976. Note:    also supported by Genius Mouse 9.06
  44977. SeeAlso: AX=0043h,AX=0053h
  44978. ----------330050-----------------------------
  44979. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  44980.     AX = 0050h
  44981.     BX = buffer size (ignored by some driver versions)
  44982.     ES:DX -> buffer
  44983. Return: AX = FFFFh if successful
  44984. Notes:    the buffer must be large enough to hold the entire state, or following
  44985.       data will be overwritten by state data in versions which ignore BX;
  44986.       use INT 33/AX=0042h to get the required size
  44987.     this function is also supported by the Genius Mouse 9.06 driver
  44988. SeeAlso: AX=0042h,AX=0052h
  44989. ----------330052-----------------------------
  44990. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  44991.     AX = 0052h
  44992.     BX = buffer size (ignored by some driver versions)
  44993.     ES:DX -> buffer
  44994. Return: AX = FFFFh if successful
  44995. Note:    also supported by Genius Mouse 9.06 driver
  44996. SeeAlso: AX=0050h
  44997. ----------330053-----------------------------
  44998. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - DISABLE MOUSE
  44999.     AX = 0053h
  45000. Return: nothing
  45001. Note:    also supported by Genius Mouse 9.06
  45002. SeeAlso: AX=0043h,AX=004Fh
  45003. ----------330054CXCDEF-----------------------
  45004. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SELECT ULTRARES ACCELERATION LEVEL
  45005.     AX = 0054h
  45006.     CX = CDEFh
  45007.     BX = ??? (NOP if <= 0000h)
  45008. Return: ???
  45009. Note:    this function is also supported by the Genius Mouse 9.06 driver
  45010. SeeAlso: AX=005Ah
  45011. ----------330055-----------------------------
  45012. INT 33 - Kraft Mouse - GET ???
  45013.     AX = 0055h
  45014. Return: CX = ???
  45015.     DX = ???
  45016.     ES = ???
  45017. ----------330058-----------------------------
  45018. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  45019.     AX = 0058h
  45020. Return: AX = CS of driver
  45021.     CX:BX = original INT 33 vector
  45022.     DX = ???
  45023. Note:    this function is also supported by the Genius Mouse 9.06 driver
  45024. ----------33005A-----------------------------
  45025. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ULTRARES ACCELERATIONS
  45026.     AX = 005Ah
  45027.     CX = number of WORDs to copy (max 0014h, but not range-checked)
  45028.     DX:SI -> buffer containing thresholds??? (CX words)
  45029.     DX:BX -> buffer containing acceleration values???
  45030.         (9*14h words, only first CX of each 14h used)
  45031.     ???
  45032. Return: CF clear
  45033.     ???
  45034. Note:    this function is also supported by Genius Mouse 9.06
  45035. SeeAlso: AX=0054h
  45036. ----------330061BXCDEF-----------------------
  45037. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  45038.     AX = 0061h
  45039.     BX = CDEFh
  45040. Return: CX = ???
  45041. Note:    also supported by Genius Mouse 9.06
  45042. ----------330067-----------------------------
  45043. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET MOUSE BUTTONS???
  45044.     AX = 0067h         
  45045. Return: BL = number of buttons???
  45046. Note:    also supported by Genius Mouse 9.06
  45047. SeeAlso: AX=0047h
  45048. ----------33006CBXCDEF-----------------------
  45049. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CLEAR ??? FLAG
  45050.     AX = 006Ch
  45051.     BX = CDEFh
  45052. Note:    also supported by Genius Mouse 9.06
  45053. SeeAlso: AX=004Ch   
  45054. ----------33006D-----------------------------
  45055. INT 33 - MS MOUSE - GET VERSION STRING
  45056.     AX = 006Dh
  45057. Return: ES:DI -> Microsoft version number of resident driver (see below)
  45058. Notes:    also supported by Logitech, Mouse Systems, Kraft, and Genius mouse
  45059.       drivers
  45060.     the Mouse Systems 7.01 and Genius Mouse 9.06 drivers report their
  45061.       Microsoft version as 7.00 even though they do not support any of the
  45062.       functions from 0025h through 002Dh supported by the MS 7.00 driver
  45063.       (the Genius Mouse driver supports function 0026h, but it differs
  45064.       from the Microsoft function)
  45065. SeeAlso: AX=0024h,AX=004Dh,AX=266Ch
  45066.  
  45067. Format of Microsoft version number:
  45068. Offset    Size    Description
  45069.  00h    BYTE    major version
  45070.  01h    BYTE    minor version (BCD)
  45071. ----------330070BXABCD-----------------------
  45072. INT 33 - Mouse Systems MOUSE DRIVER - POPUP.COM - INSTALLATION CHECK
  45073.     AX = 0070h
  45074.     BX = ABCDh
  45075. Return: AX = ABCDh if installed
  45076.         BX:CX -> data structure (see below)
  45077. Notes:    this function is also supported by the Genius Mouse 9.06 driver
  45078.     the v7.01 POPUP.COM and menu drivers also check for the signature
  45079.       CDh ABh BAh DCh at offset -2Ch from the interrupt handler
  45080.     if POPUP is not loaded, the returned data structure contains the proper
  45081.       signature at offset 00h, but not at offset 08h
  45082.  
  45083. Format of data structure:
  45084. Offset    Size    Description
  45085.  00h    WORD    signature ABCDh
  45086.  02h    DWORD    pointer to info structure???
  45087.  06h  2 BYTEs    ???
  45088.  08h    WORD    signature ABCDh
  45089.  
  45090. Format of info structure:
  45091. Offset    Size    Description
  45092.  00h    WORD    driver version
  45093.  02h  8 BYTEs    ???
  45094.  0Ah    WORD    segment of ???
  45095.     ???
  45096. ----------330072BXABCD-----------------------
  45097. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  45098.     AX = 0072h
  45099.     BX = ABCDh
  45100. Return: ???
  45101. Note:    this function is also supported by the Genius Mouse 9.06 driver
  45102. ----------330073BXCDEF-----------------------
  45103. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET BUTTON ASSIGNMENTS
  45104.     AX = 0073h
  45105.     BX = CDEFh
  45106.     ES:DX -> 3-byte buffer for button assignments
  45107. Return: CX = number of buttons???
  45108.     ES:DX buffer filled (default is "LMR")
  45109. Note:    also supported by Genius Mouse 9.06
  45110. SeeAlso: AX=0067h
  45111. ----------33012E-----------------------------
  45112. INT 33 - MS MOUSE v8.10+ - ???
  45113.     AX = 012Eh
  45114.     BL = ???
  45115. Return: AX = 0000h
  45116. Note:    not supported by Logitech driver v6.10
  45117. SeeAlso: AX=002Eh,AX=022Eh
  45118. ----------33022E-----------------------------
  45119. INT 33 - MS MOUSE v8.10+ - ???
  45120.     AX = 022Eh
  45121.     BL = ???
  45122. Return: AX = 0000h
  45123. Note:    not supported by Logitech driver v6.10
  45124. SeeAlso: AX=002Eh,AX=012Eh
  45125. ----------33136C-----------------------------
  45126. INT 33 - LOGITECH MOUSE v6.10+ - ???
  45127.     AX = 136Ch
  45128.     BX = ???
  45129. Return: AX = ???
  45130.     BX = ???
  45131. ----------33146C-----------------------------
  45132. INT 33 - LOGITECH MOUSE v6.10+ - GET/SET ???
  45133.     AX = 146Ch
  45134.     BL = function
  45135.         00h set ???
  45136.         BH = new value (zero/nonzero to clear/set)
  45137.         else get ???
  45138.         Return: ???
  45139. ----------33156C-----------------------------
  45140. INT 33 - LOGITECH MOUSE v6.10+ - GET SIGNATURE AND VERSION STRINGS
  45141.     AX = 156Ch
  45142. Return: ES:DI -> signature "LOGITECH MOUSE DRIVER"
  45143.     ES:SI -> version string, terminated with CRLF
  45144. ----------33166C-----------------------------
  45145. INT 33 - LOGITECH MOUSE v6.10+ - ???
  45146.     AX = 166Ch
  45147.     BL = ???
  45148.         00h ???
  45149.         01h ???
  45150.         other ???
  45151.         BH = new value of ???
  45152.         Return: AX = FFFFh
  45153. ----------33176C-----------------------------
  45154. INT 33 - LOGITECH MOUSE v6.10+ - ???
  45155.     AX = 176Ch
  45156.     ???
  45157. Return: ???
  45158. ----------33186C-----------------------------
  45159. INT 33 - LOGITECH MOUSE v6.10+ - ???
  45160.     AX = 186Ch
  45161.     ???
  45162. Return: ???
  45163. ----------33196C-----------------------------
  45164. INT 33 - LOGITECH MOUSE v6.10+ - ???
  45165.     AX = 196Ch
  45166.     ???
  45167. Return: ???
  45168. ----------331A6C-----------------------------
  45169. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  45170.     AX = 1A6Ch
  45171. Return: AX = FFFFh
  45172.     BX = ???
  45173.     CX = ???
  45174. SeeAlso: AX=1B6Ch
  45175. ----------331B6C-----------------------------
  45176. INT 33 - LOGITECH MOUSE v6.10+ - SET ???
  45177.     AX = 1B6Ch
  45178.     BX = new value for ??? (0000h-0003h)
  45179. Return: AX = FFFFh
  45180. SeeAlso: AX=1A6Ch
  45181. ----------331C6C-----------------------------
  45182. INT 33 - LOGITECH MOUSE v6.10+ - ???
  45183.     AX = 1C6Ch
  45184.     BX = ???
  45185.         <42h ???
  45186.         =42h ???
  45187.         >42h ???
  45188.             ES:DI -> ???
  45189.             Return: AX = ???
  45190. ----------331D6C-----------------------------
  45191. INT 33 - LOGITECH MOUSE - GET COMPASS PARAMETER
  45192.     AX = 1D6Ch
  45193. Return: BX = direction (0=north, 1=south, 2=east, 3=west)
  45194. SeeAlso: AX=1E6Ch
  45195. ----------331E6C-----------------------------
  45196. INT 33 - LOGITECH MOUSE - SET COMPASS PARAMETER
  45197.     AX = 1E6Ch
  45198.     BX = direction (0=north, 1=south, 2=east, 3=west)
  45199. SeeAlso: AX=1D6Ch
  45200. ----------331F6C-----------------------------
  45201. INT 33 - LOGITECH MOUSE - GET BALLISTICS INFORMATION
  45202.     AX = 1F6Ch
  45203. Return: BX = 0=off, 1=on
  45204.     CX = 1=low, 2=high
  45205. SeeAlso: AX=002Ch,AX=236Ch
  45206. ----------33206C-----------------------------
  45207. INT 33 - LOGITECH MOUSE - SET LEFT OR RIGHT PARAMETER
  45208.     AX = 206Ch
  45209.     BX = parameter (00h = right, FFh = left)
  45210. SeeAlso: AX=216Ch
  45211. ----------33216C-----------------------------
  45212. INT 33 - LOGITECH MOUSE - GET LEFT OR RIGHT PARAMETER
  45213.     AX = 216Ch
  45214. Return: BX = parameter (00h = right, FFh = left)
  45215. SeeAlso: AX=206Ch
  45216. ----------33226C-----------------------------
  45217. INT 33 - LOGITECH MOUSE - REMOVE DRIVER FROM MEMORY
  45218.     AX = 226Ch
  45219. Note:    this only frees memory; does not restore hooked interrupts
  45220. ----------33236C-----------------------------
  45221. INT 33 - LOGITECH MOUSE - SET BALLISTICS INFORMATION
  45222.     AX = 236Ch
  45223.     BX = 0=off, 1=on
  45224.     CX = 1=low, 2=high
  45225. SeeAlso: AX=002Ch,AX=1F6Ch
  45226. ----------33246C-----------------------------
  45227. INT 33 - LOGITECH MOUSE - GET PARAMETERS AND RESET SERIAL MOUSE
  45228.     AX = 246Ch
  45229.     ES:DX -> parameter table buffer (see below)
  45230. Return: AX = FFFFh if driver installed for serial mouse
  45231. SeeAlso: AX=0000h,AX=256Ch
  45232.  
  45233. Format of parameter table:
  45234. Offset    Size    Description
  45235.  00h    WORD    baud rate divided by 100  (serial mouse only)
  45236.  02h    WORD    emulation          (serial mouse only)
  45237.  04h    WORD    report rate          (serial mouse only)
  45238.  06h    WORD    firmware revision      (serial mouse only)
  45239.  08h    WORD    0              (serial mouse only)
  45240.  0Ah    WORD    port              (serial mouse only)
  45241.  0Ch    WORD    physical buttons
  45242.  0Eh    WORD    logical buttons
  45243. ----------33256CBX00h -----------------------
  45244. INT 33 - LOGITECH MOUSE - SET PARAMETERS
  45245.     AX = 256Ch
  45246.     BX = 00h set baud rate (serial mouse only)
  45247.         CX = rate (0=1200, 1=2400, 2=4800, 3=9600)
  45248.        = 01h set emulation (serial mouse only)
  45249.         CX = emulation
  45250.             0 = 5 byte packed binary
  45251.             1 = 3 byte packed binary
  45252.             2 = hexadecimal
  45253.             3 = relative bit pad
  45254.             4 = not supported
  45255.             5 = MM Series
  45256.             6 = not supported
  45257.             7 = Microsoft
  45258.        = 02h set report rate (serial mouse only)
  45259.         CX = rate (0=10, 1=20, 2=35, 3=50, 4=70, 5=100, 6=150)
  45260.        = 03h set port (serial mouse only)
  45261.         CX = port (1, 2)
  45262.        = 04h set mouse logical buttons
  45263.         CX = buttons (2, 3)
  45264. Return: AX = FFFFh if driver installed for serial mouse
  45265. SeeAlso: AX=246Ch,AX=276Ch
  45266. ----------33266C-----------------------------
  45267. INT 33 - LOGITECH MOUSE - GET VERSION???
  45268.     AX = 266Ch
  45269. Return: BX = 'SS'
  45270.     CH = '4'  major version number
  45271.     CL = '1'  minor version number
  45272. SeeAlso: AX=006Dh
  45273. ----------33276C-----------------------------
  45274. INT 33 - LOGITECH MOUSE - ??? Tries MMSeries, Baud 2400
  45275.     AX = 276Ch
  45276. SeeAlso: AX=256Ch
  45277. ----------333000-----------------------------
  45278. INT 33 - Smooth Mouse Driver, PrecisePoint - INSTALLATION CHECK
  45279.     AX = 3000h
  45280. Return: AX = FFFFh if installed
  45281.         BX = version number (BH = major, BL = minor)
  45282. Program: SMD is a programmer's library by Andy Hakim which provides a
  45283.       graphics-style mouse cursor in text mode.  PrecisePoint is an
  45284.       SMD-based TSR which replaces the block mouse cursor in text
  45285.       applications.
  45286. SeeAlso: AX=0000h,AX=3001h,AX=3003h
  45287. ----------333001-----------------------------
  45288. INT 33 - Smooth Mouse Driver, PrecisePoint - ENABLE SMOOTH MOUSE
  45289.     AX = 3001h
  45290. Return: AX = status (0000h = disabled, 0001h = enabled)
  45291. Note:    SMD remains disabled if running under Desqview or in graphics mode
  45292. SeeAlso: AX=0001h,AX=0002h,AX=3002h
  45293. ----------333002-----------------------------
  45294. INT 33 - Smooth Mouse Driver, PrecisePoint - DISABLE SMOOTH MOUSE
  45295.     AX = 3002h
  45296. Return: AX = status (0000h = disabled, 0001h = enabled)
  45297. SeeAlso: AX=0001h,AX=0002h,AX=3000h,AX=3001h
  45298. ----------333003-----------------------------
  45299. INT 33 - Smooth Mouse Driver, PrecisePoint - GET INFORMATION
  45300.     AX = 3003h
  45301.     BL = data structure selector
  45302.         00h Primary Bitmap (used for 25 line mode)
  45303.         01h Secondary Bitmap (used for 43/50 line modes)
  45304.         02h Sacrifice Character Map
  45305.         03h Program Information
  45306. Return: ES:DI -> selected data structure
  45307. SeeAlso: AX=3000h
  45308.  
  45309. Format of Primary/Secondary Bitmap [SMD_BITMAP_STRUCT]
  45310. Offset    Size    Description
  45311.  00h    BYTE    vertical size of bitmap (00h - 10h)
  45312.  01h    BYTE    horizontal size of bitmap (00h - 10h)
  45313.  02h    BYTE    vertical hotspot position (00h - 10h)
  45314.  03h    BYTE    horizontal hotspot position (00h - 10h)
  45315.  04h 16 WORDs    cursor bitmap data
  45316.  14h 16 WORDs    screen bitmap data
  45317.  
  45318. Format of Sacrifice Character Map [SMD_SMAP_STRUCT]
  45319. Offset    Size    Description
  45320.  00h    BYTE    bytes are character values (00h-FFh) used in place of the
  45321.  01h    BYTE    actual character for the corresponding position on the screen
  45322.  02h    BYTE         +--------------+      occupied by part or all of the mouse
  45323.  03h    BYTE         | 0h | 1h | 2h |      cursor
  45324.  04h    BYTE         |----+----+----|
  45325.  05h    BYTE         | 3h | 4h | 5h |
  45326.  06h    BYTE         |----+----+----|
  45327.  07h    BYTE         | 6h | 7h | 8h |
  45328.  08h    BYTE         +--------------+
  45329.  
  45330. Format of Program Information [SMD_INFO_STRUCT]
  45331. Offset    Size    Description
  45332.  00h    WORD    segment of old interrupt 33h handler
  45333.  02h    WORD    offset of old interrupt 33h handler
  45334.  04h    WORD    PSP of SMD
  45335.  06h    BYTE    ENABLE/DISABLE manual setting status
  45336.  07h    BYTE    ENABLE/DISABLE internal usage status
  45337. ----------33---------------------------------
  45338. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  45339.     AX = 3004
  45340. SeeAlso: AX=3000h
  45341. ----------33---------------------------------
  45342. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  45343.     AX = 3005
  45344. SeeAlso: AX=3000h
  45345. ----------334F00-----------------------------
  45346. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  45347.     AX = 4F00h
  45348. Return: AX = 004Fh if supported
  45349.     BX = ???
  45350.     ES:DI -> ???
  45351. SeeAlso: AX=4F01h
  45352. ----------334F01-----------------------------
  45353. INT 33 - LOGITECH MOUSE v6.10+ - ???
  45354.     AX = 4F01h
  45355.     ES = ???
  45356. Return: AX = 004Fh if supported
  45357.     ES:DI -> ???
  45358. SeeAlso: AX=4F00h
  45359. ----------34---------------------------------
  45360. INT 34 - FLOATING POINT EMULATION - OPCODE D8h
  45361. Desc:    this interrupt is used to emulate floating-point instructions with
  45362.       an opcode of D8h
  45363. Note:    the floating-point emulators in Borland and Microsoft languages and
  45364.       Lahey FORTRAN use this interrupt
  45365. SeeAlso: INT 35,INT 3E
  45366. ----------35---------------------------------
  45367. INT 35 - FLOATING POINT EMULATION - OPCODE D9h
  45368. Desc:    this interrupt is used to emulate floating-point instructions with
  45369.       an opcode of D9h
  45370. Note:    the floating-point emulators in Borland and Microsoft languages and
  45371.       Lahey FORTRAN use this interrupt
  45372. SeeAlso: INT 34,INT 36
  45373. ----------36---------------------------------
  45374. INT 36 - FLOATING POINT EMULATION - OPCODE DAh
  45375. Desc:    this interrupt is used to emulate floating-point instructions with
  45376.       an opcode of DAh
  45377. Note:    the floating-point emulators in Borland and Microsoft languages and
  45378.       Lahey FORTRAN use this interrupt
  45379. SeeAlso: INT 35,INT 37
  45380. ----------37---------------------------------
  45381. INT 37 - FLOATING POINT EMULATION - OPCODE DBh
  45382. Desc:    this interrupt is used to emulate floating-point instructions with
  45383.       an opcode of DBh
  45384. Note:    the floating-point emulators in Borland and Microsoft languages and
  45385.       Lahey FORTRAN use this interrupt
  45386. SeeAlso: INT 36,INT 38
  45387. ----------38---------------------------------
  45388. INT 38 - FLOATING POINT EMULATION - OPCODE DCh
  45389. Desc:    this interrupt is used to emulate floating-point instructions with
  45390.       an opcode of DCh
  45391. Note:    the floating-point emulators in Borland and Microsoft languages and
  45392.       Lahey FORTRAN use this interrupt
  45393. SeeAlso: INT 37,INT 39
  45394. ----------3802-------------------------------
  45395. INT 38 - PC-MOS/386 v3.0 - GET MOS INTERNAL DATA POINTER
  45396.     AH = 02h
  45397. Return: AX = 0000h
  45398.     ES:BX -> ??? internal data structure
  45399. Program: PC-MOS/386 is a multitasking/multiuser MSDOS-compatible operating
  45400.       system by Software Links, Inc.
  45401. SeeAlso: AH=04h,AH=10h,INT 21/AX=3000h,INT D4
  45402. ----------3804-------------------------------
  45403. INT 38 - PC-MOS/386 v3.0 - GET TASK CONTROL BLOCK
  45404.     AH = 04h
  45405. Return: ES = segment of Task Control Block (TCB) (see below)
  45406. SeeAlso: AH=02h,INT D4
  45407.  
  45408. Format of Task Control Block:
  45409. Offset    Size    Description
  45410.  00h  2 BYTEs    signature "HT"
  45411.  02h 23 BYTEs    ???
  45412.  19h    BYTE    task time slice
  45413.  1Ah  7 BYTEs    ???
  45414.  21h 11 BYTEs    name of currently executing task
  45415.  2Ch 79 BYTEs    ???
  45416.  7Bh  4 BYTEs    user name
  45417.  7Fh    BYTE    current output class
  45418.  80h  7 BYTEs    protection access rights, 2 bits per class (writeable!)
  45419.     ???
  45420. ----------380703-----------------------------
  45421. INT 38 - PC-MOS/386 v3.0 - WAIT FOR KEYPRESS OR TIMEOUT
  45422.     AX = 0703h
  45423.     CX = timeout (in seconds???)
  45424. Return: AH bit 0 set if key pressed, clear otherwise
  45425. SeeAlso: INT 16/AH=00h,INT D4
  45426. ----------3810-------------------------------
  45427. INT 38 - PC-MOS/386 v3.0 - ENTER NATIVE 386 EXECUTION MODE
  45428.     AH = 10h
  45429.     CX = NCA (???) length in bytes (at least 1024???)
  45430.     DX = NCA segment
  45431. Return: in protected mode
  45432.     all segment registers converted to appropriate selectors
  45433. Note:    MSDOS calls are available in protected mode
  45434. SeeAlso: AH=11h,AH=12h,INT 2F/AX=1687h,INT 67/AX=DE0Ch,INT D4
  45435. ----------3811-------------------------------
  45436. INT 38 - PC-MOS/386 v3.0 - ALLOCATE NATIVE MODE MEMORY BLOCK
  45437.     AH = 11h
  45438.     EBX = block length
  45439. Return: ES = selector for allocated block
  45440. SeeAlso: AH=10h,AH=12h,INT D4
  45441. ----------3812-------------------------------
  45442. INT 38 - PC-MOS/386 v3.0 - FREE NATIVE MODE MEMORY BLOCK
  45443.     AH = 12h
  45444.     ES = selector for block to free
  45445. SeeAlso: AH=10h,AH=11h,INT D4
  45446. ----------39---------------------------------
  45447. INT 39 - FLOATING POINT EMULATION - OPCODE DDh
  45448. Desc:    this interrupt is used to emulate floating-point instructions with
  45449.       an opcode of DDh
  45450. Note:    the floating-point emulators in Borland and Microsoft languages and
  45451.       Lahey FORTRAN use this interrupt
  45452. SeeAlso: INT 38,INT 3A
  45453. ----------3A---------------------------------
  45454. INT 3A - FLOATING POINT EMULATION - OPCODE DEh
  45455. Desc:    this interrupt is used to emulate floating-point instructions with
  45456.       an opcode of DEh
  45457. Note:    the floating-point emulators in Borland and Microsoft languages and
  45458.       Lahey FORTRAN use this interrupt
  45459. SeeAlso: INT 39,INT 3B
  45460. ----------3B---------------------------------
  45461. INT 3B - FLOATING POINT EMULATION - OPCODE DFh
  45462. Desc:    this interrupt is used to emulate floating-point instructions with
  45463.       an opcode of DFh
  45464. Note:    the floating-point emulators in Borland and Microsoft languages and
  45465.       Lahey FORTRAN use this interrupt
  45466. SeeAlso: INT 3A,INT 3C
  45467. ----------3C---------------------------------
  45468. INT 3C - FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE
  45469. Notes:    the floating-point emulators in Borland and Microsoft languages and
  45470.       Lahey FORTRAN use this interrupt
  45471.     the generated code is  CD 3C xy mm ....
  45472.       where xy is a modified ESC instruction and mm is the modR/M byte.
  45473.       The xy byte appears to be encoded as
  45474.         s s 0 1 1 x x x      or    s s 0 0 0 x x x
  45475.       where "ss" specifies the segment override:
  45476.         00 -> DS:
  45477.         01 -> SS:
  45478.         10 -> CS:
  45479.         11 -> ES:
  45480. SeeAlso: INT 3B,INT 3D
  45481. ----------3D---------------------------------
  45482. INT 3D - FLOATING POINT EMULATION - STANDALONE FWAIT
  45483. Notes:    the floating-point emulators in Borland and Microsoft languages and
  45484.       Lahey FORTRAN use this interrupt
  45485.     this vector is modified but not restored by Direct Access v4.0, and
  45486.       may be left dangling by other programs written with the same version
  45487.       of compiled BASIC
  45488. SeeAlso: INT 3C,INT 3E
  45489. ----------3E---------------------------------
  45490. INT 3E - FLOATING POINT EMULATION - Borland LANGUAGES "SHORTCUT" CALL
  45491. Notes:    the two bytes following the INT 3E instruction are the subcode and
  45492.       a NOP (90h), except for subcodes DCh and DEh, where the second byte
  45493.       is a register count (01h-08h)
  45494.     this vector is modified but not restored by Direct Access v4.0, and
  45495.       may be left dangling by other programs written with the same version
  45496.       of compiled BASIC
  45497. SeeAlso: INT 3D
  45498.  
  45499. Subcode        Function
  45500.  DCh    load 8086 stack with 8087 registers; overwrites the 10*N bytes at the
  45501.       top of the stack prior to the INT 3E with the 8087 register contents
  45502.  DEh    load 8087 registers from top of 8086 stack; ST0 is furthest from top
  45503.       of 8086 stack
  45504.  E0h    round TOS and R1 to single precision, compare, pop twice
  45505.       returns AX=8087 status word, FLAGS=8087 condition bits
  45506.  E2h    round TOS and R1 to double precision, compare, pop twice
  45507.       returns AX=8087 status word, FLAGS=8087 condition bits
  45508.     Note: buggy in TPas5.5, because it sets the 8087 precision control
  45509.       field to the undocumented value 01h; this results in actually
  45510.       rounding to single precision
  45511.  E4h    compare TOS/R1 with two POP's
  45512.       returns FLAGS=8087 condition bits
  45513.  E6h    compare TOS/R1 with POP
  45514.       returns FLAGS=8087 condition bits
  45515.  E8h    FTST (check TOS value)
  45516.       returns FLAGS=8087 condition bits
  45517.  EAh    FXAM (check TOS value)
  45518.       returns AX=8087 status word
  45519.  ECh    sine(ST0)
  45520.  EEh    cosine(ST0)
  45521.  F0h    tangent(ST0)
  45522.  F2h    arctangent(ST0)
  45523.  F4h    ST0 = ln(ST0)
  45524.  F6h    ST0 = log2(ST0)
  45525.  F8h    ST0 = log10(ST0)
  45526.  FAh    ST0 = e**ST0
  45527.  FCh    ST0 = 2**ST0
  45528.  FEh    ST0 = 10**ST0
  45529. ----------3F---------------------------------
  45530. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE, Borland TLINK VROOMM)
  45531. Notes:    INT 3F is the default, and may be overridden while linking
  45532.     this vector is modified but not restored by Direct Access v4.0, and
  45533.       may be left dangling by other programs written with the same version
  45534.       of compiled BASIC
  45535. SeeAlso: INT FE"OVERLAY"
  45536. ----------3F---------------------------------
  45537. INT 3F - Microsoft Dynamic Link Library manager
  45538. SeeAlso: INT 21/AH=4Bh
  45539. ----------40---------------------------------
  45540. INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS
  45541. SeeAlso: INT 13,INT 63
  45542. ----------40---------------------------------
  45543. INT 40 - Z100 - Master 8259 - Parity error or S100 error
  45544. SeeAlso: INT 41"Z100",INT FF"Z100"
  45545. ----------40---------------------------------
  45546. INT 40 - Acorn BBC Master 512 - "OSFIND" - OPEN FILE
  45547.     AL = operation
  45548.         00h close file
  45549.         40h open file for reading
  45550.         80h open file for writing
  45551.         C0h open file for random access
  45552.     DS:BX -> CR-terminated filename
  45553. Return: AL = file handle (00h if file closed or could not be opened)
  45554. Note:    the Acorn BBC Master 512 is an 80186-based add-on board for the
  45555.       6502-based Master 128 which uses the original CPU as an I/O processor
  45556. SeeAlso: INT 41"Acorn",INT 42"Acorn",INT 43"Acorn",INT 44"Acorn",INT 4C"Acorn"
  45557. ----------41---------------------------------
  45558. INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE
  45559. Note:    the default parameter table array is located at F000h:E401h in 100%
  45560.       compatible BIOSes; the pointer may be overridden by the hard disk
  45561.       controller's BIOS to support drive formats unknown to the ROM BIOS
  45562. SeeAlso: INT 13/AH=09h,INT 1E,INT 46
  45563.  
  45564. Format of fixed disk parameters:
  45565. Offset    Size    Description
  45566.  00h    WORD    number of cylinders
  45567.  02h    BYTE    number of heads
  45568.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  45569.  05h    WORD    starting write precompensation cylinder number
  45570.  07h    BYTE    maximum ECC burst length (XT only)
  45571.  08h    BYTE    control byte
  45572.            bits 0-2: drive option (XT only, 0 for others)
  45573.            bit 3:    set if more than 8 heads (AT and later only)
  45574.            bit 4:    always 0
  45575.            bit 5:    set if manufacturer's defect map on max cylinder+1
  45576.                  (AT and later only)
  45577.            bit 6:    disable ECC retries
  45578.            bit 7:    disable access retries
  45579.  09h    BYTE    standard timeout (XT only, 0 for others)
  45580.  0Ah    BYTE    formatting timeout (XT only, 0 for others)
  45581.  0Bh    BYTE    timeout for checking drive (XT only, 0 for others)
  45582.  0Ch    WORD    cylinder number of landing zone (AT and later only)
  45583.  0Eh    BYTE    number of sectors per track (AT and later only)
  45584.  0Fh    BYTE    reserved
  45585. ----------41---------------------------------
  45586. INT 41 - Z100 - Master 8259 - Processor Swap
  45587. SeeAlso: INT 40"Z100",INT 42"Z100"
  45588. ----------41---------------------------------
  45589. INT 41 - Acorn BBC Master 512 - "OSGBPB" - MULTI-BYTE GET/PUT
  45590.     AL = function
  45591.         01h put bytes sequentially
  45592.         02h put bytes, ignoring sequential pointer
  45593.         03h get bytes sequentially
  45594.         04h get bytes, ignoring sequential pointer
  45595.         05h get media title and boot option
  45596.         06h get current device and directory
  45597.         07h get current library and device
  45598.         08h search directory
  45599.     DS:BX -> control block (see below)
  45600. Return: CF clear if successful
  45601.     CF set on error
  45602.     AL = 00h if operation attempted
  45603.     AL unchanged if unsupported function
  45604. SeeAlso: INT 40"Acorn",INT 42"Acorn",INT 43"Acorn"
  45605.  
  45606. Format of control block:
  45607. Offset    Size    Description
  45608.  00h    BYTE    file handle
  45609.  01h    DWORD    pointer to data in either I/O processor or Tube processor
  45610.  05h    DWORD    number of bytes to be transferred
  45611.  09h    DWORD    transfer address
  45612. ----------4112-------------------------------
  45613. INT 41 P - MS Windows debugging kernel - "OutputDebugString"
  45614.     AH = 12h
  45615.     ???
  45616. Return: ???
  45617. SeeAlso: AH=50h
  45618. ----------4150-------------------------------
  45619. INT 41 P - MS Windows debugging kernel - "DefineDebugSegment"
  45620.     AH = 50h
  45621.     ???
  45622. Return: ???
  45623. SeeAlso: AH=12h
  45624. ----------42---------------------------------
  45625. INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA)
  45626. SeeAlso: INT 10
  45627. Note:    not used by PS/2 built-in VGA or XGA
  45628. ----------42---------------------------------
  45629. INT 42 - Z100 - Master 8259 - Timer
  45630. SeeAlso: INT 41"Z100",INT 43"Z100"
  45631. ----------42---------------------------------
  45632. INT 42 - Acorn BBS Master 512 - "OSBPUT" - WRITE SINGLE BYTE TO FILE
  45633.     AL = byte to be written
  45634.     BH = file handle
  45635. Return: flags destroyed
  45636. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  45637. ----------43---------------------------------
  45638. INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA)
  45639.    points at graphics data for characters 00h-7Fh of the current font
  45640. SeeAlso: INT 1F,INT 44"VIDEO"
  45641. ----------43---------------------------------
  45642. INT 43 - Z100 - Master 8259 - Slave 8259 input
  45643. Note:    slave runs in special fully nested mode
  45644. SeeAlso: INT 42"Z100",INT 44"Z100"
  45645. ----------43---------------------------------
  45646. INT 43 - Acorn BBC Master 512 - "OSBGET" - READ SINGLE BYTE FROM FILE
  45647.     BH = file handle
  45648. Return: CF clear if successful
  45649.         AL = byte read from file
  45650.     CF set on error
  45651. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 42"Acorn",INT 46"Acorn"
  45652. ----------44---------------------------------
  45653. INT 44 - VIDEO DATA - ROM BIOS CHARACTER FONT, CHARACTERS 00h-7Fh (PCjr)
  45654.    points at graphics data for current character font
  45655. SeeAlso: INT 1F,INT 43"VIDEO"
  45656. ----------44---------------------------------
  45657. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  45658. ----------44---------------------------------
  45659. INT 44 - IBM 3270-PC High Level Language API
  45660.     DS:SI -> parameter control block
  45661. ----------44---------------------------------
  45662. INT 44 - Z100 - Master 8259 - Serial A
  45663. SeeAlso: INT 43"Z100",INT 45"Z100"
  45664. ----------44---------------------------------
  45665. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  45666.     AH = 00h
  45667.         AL = function
  45668.         00h get current filing system
  45669.             Return: AL = filing system (see below)
  45670.         01h get address of commandline tail
  45671.             Return: BX buffer filled with address of command tail
  45672.                     in I/O processor address space
  45673.                     (use INT 4A/AL=05h to retrieve)
  45674.         FFh flush all files onto secondary storage
  45675.     AH = file handle
  45676.         AL = function
  45677.         00h get sequential pointer for file
  45678.         01h set sequential pointer for file
  45679.         02h get length of file
  45680.     BX -> 4-byte data buffer
  45681. Return: BX buffer updated if appropriate
  45682. Note:    the commandline tail is terminated with a carriage return (0Dh)
  45683. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 45"Acorn",INT 4A"Acorn"
  45684.  
  45685. Values for filing system:
  45686.  00h none
  45687.  01h 1200 bps cassette
  45688.  02h 300 bps cassette
  45689.  03h ROM FS
  45690.  04h DFS
  45691.  05h ANFS/NFS
  45692.  06h TFS
  45693.  08h ADFS
  45694. ----------45---------------------------------
  45695. INT 45 - Z100 - Master 8259 - Serial B
  45696. SeeAlso: INT 44"Z100",INT 46"Z100"
  45697. ----------45---------------------------------
  45698. INT 45 - Acorn BBC Master 512 - "OSFILE" - READ/WRITE FILE OR DIRECTORY INFO
  45699.     AL = function
  45700.         00h save block of memory as file
  45701.         01h update directory entry for existing file
  45702.         02h set load address for existing file
  45703.         03h set execution address for existing file
  45704.         04h set attributes for existing file
  45705.         05h read directory
  45706.         06h delete file
  45707.         FFh load file
  45708.     DS:BX -> control block (see below)
  45709. Return: FLAGS destroyed
  45710.     AL = file type
  45711.         00h not found
  45712.         01h file found
  45713.         02h directory found
  45714.         FFh    protected file
  45715. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44"Acorn",INT 46"Acorn"
  45716.  
  45717. Format of control block:
  45718. Offset    Size    Description
  45719.  00h    WORD    address of CR-terminated filename
  45720.  02h    DWORD    load address of file
  45721.  06h    DWORD    execution address of file
  45722.  0Ah    DWORD    start address of data to save
  45723.  0Eh    DWORD    end address of data to save, or file attributes
  45724.         file attributes in low byte:
  45725.             bit 0: no owner read access
  45726.             bit 1: no owner write access
  45727.             bit 2: not executable by owner
  45728.             bit 3: not deletable by owner
  45729.             bit 4: no public read access
  45730.             bit 5: no public write access
  45731.             bit 6: not executable with public access
  45732.             bit 7: not deletable with public access
  45733.         other three bytes are filing-system specific file attributes
  45734. ----------46---------------------------------
  45735. INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE
  45736. SeeAlso: INT 13/AH=09h,INT 41
  45737. ----------46---------------------------------
  45738. INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen
  45739. SeeAlso: INT 45"Z100",INT 47"Z100"
  45740. ----------46---------------------------------
  45741. INT 46 - Acorn BBC Master 512 - "OSRDCH" - GET CHARACTER FROM CUR INPUT STREAM
  45742. Return: CF clear if successful
  45743.         AL = character read
  45744.     CF set on error
  45745.         AL = error code
  45746. SeeAlso: INT 40"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  45747. ----------47---------------------------------
  45748. INT 47 - Z100 - Master 8259 - Printer
  45749. SeeAlso: INT 46"Z100",INT 48"Z100"
  45750. ----------47---------------------------------
  45751. INT 47 - Acorn BBC Master 512 - "OSWRCH" - WRITE CHARACTER TO CUR OUTPUT STREAM
  45752.     AL = character to be written
  45753. Return: FLAGS destroyed
  45754. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 49"Acorn"
  45755. ----------478000-----------------------------
  45756. INT 47 - SQL Base - DATABASE ENGINE API
  45757.     AX = 8000h
  45758.     DS:BX -> parameter block, first word is function number
  45759. Note:    SQL Base is a network-oriented database engine by Gupta Technologies
  45760.  
  45761. Values for function number:
  45762.  01h    "SQLFINI" initalialize application's use of the database
  45763.  02h    "SQLFDON" application is done using the database
  45764.  03h    "SQLFCON" connect to a cursor/database
  45765.  04h    "SQLFDIS" disconnect from a cursor/database
  45766.  05h    "SQLFCOM" compile a SQL command
  45767.  06h    "SQLFEXE" execute a SQL command
  45768.  07h    "SQLFCEX" compile and execute a SQL command
  45769.  08h    "SQLFCMT" commit a transaction to the database
  45770.  09h    "SQLFDES" describe the items of a SELECT statement
  45771.  0Ah    "SQLFGFI" get fetch information
  45772.  0Bh    "SQLFFBK" fetch previous result row from SELECT statement
  45773.  0Ch    "SQLFFET" fetch next result row from SELECT statement
  45774.  0Dh    "SQLFEFB" enable fetch backwards
  45775.  0Eh    "SQLFPRS" position in result set
  45776.  0Fh    "SQLFURS" undo result set
  45777.  10h    "SQLFNBV" get number of bind variables
  45778.  11h    "SQLFBND" bind data variables
  45779.  12h    "SQLFBNN" bind numerics
  45780.  13h    "SQLFBLN" bind long number
  45781.  14h    "SQLFBLD" bind long data variables
  45782.  15h    "SQLFSRS" start restriction set processing
  45783.  16h    "SQLFRRS" restart restriction set processing
  45784.  17h    "SQLFCRS" close restriction set
  45785.  18h    "SQLFDRS" drop restriction set
  45786.  19h    "SQLFARF" apply Roll Forward journal
  45787.  1Ah    "SQLFERF" end Roll Forward journal
  45788.  1Bh    "SQLFSRF" start Roll Forward journal
  45789.  1Ch    "SQLFSTO" store a compiled SQL command
  45790.  1Dh    "SQLFRET" retrieve a compiled SQL command
  45791.  1Eh    "SQLFDST" drop a stored command
  45792.  1Fh    "SQLFCTY" get command type
  45793.  20h    "SQLFEPO" get error position
  45794.  21h    "SQLFGNR" get number of rows
  45795.  22h    "SQLFNSI" get number of select items
  45796.  23h    "SQLFRBF" get Roll Back flag
  45797.  24h    "SQLFRCD" get return code
  45798.  25h    "SQLFROW" get number of ROWs
  45799.  26h    "SQLFSCN" set cursor name
  45800.  27h    "SQLFSIL" set isolation level
  45801.  28h    "SQLFSLP" set log parameters
  45802.  29h    "SQLFSSB" set select buffer
  45803.  2Ah    "SQLFSSS" set sort space
  45804.  2Bh    "SQLFRLO" read long
  45805.  2Ch    "SQLFWLO" write long
  45806.  2Dh    "SQLFLSK" long seek
  45807.  2Eh    "SQLFGLS" get long size
  45808.  2Fh    "SQLFELO" end long operation
  45809.  30h    "SQLFRBK" roll back a transaction from the database
  45810.  31h    "SQLFERR" error message
  45811.  32h    "SQLFCPY" copy
  45812.  33h    "SQLFR01" reserved
  45813.  34h    "SQLFSYS" system
  45814.  35h    "SQLFSTA" statistics
  45815.  36h    "SQLFR02" reserved
  45816.  37h    "SQLFXAD" extra add
  45817.  38h    "SQLFXCN" extra character to number
  45818.  39h    "SQLFXDA" extra date add
  45819.  3Ah    "SQLFXDP" extra date picture
  45820.  3Bh    "SQLFXDV" extra divide
  45821.  3Ch    "SQLFXML" extra multiply
  45822.  3Dh    "SQLFXNP" extra number picture
  45823.  3Eh    "SQLFXPD" extra picture date
  45824.  3Fh    "SQLFXSB" extra subtract
  45825.  40h    "SQLFINS" install database
  45826.  41h    "SQLFDIN" deinstall database
  45827.  42h    "SQLFDIR" directory of databases
  45828.  43h    "SQLFTIO" timeout
  45829.  44h    "SQLFFQN" get fully qualified column name
  45830.  45h    "SQLFEXP" explain execution plan
  45831.  46h    "SQLFFER" get full error
  45832.  47h    "SQLFBKP" begin online backup
  45833.  48h    "SQLFRDC" read backup data chunk
  45834.  49h    "SQLFEBK" end backup
  45835.  4Ah    "SQLFRES" begin restore from backup
  45836.  4Bh    "SQLFWDC" write backup data chunk for restore
  45837.  4Ch    "SQLFRRD" recover restored database to consistent state
  45838.  4Dh    "SQLFERS" end restore
  45839.  4Eh    "SQLFNRR" return number of result set rows
  45840.  4Fh    "SQLFSTR" start restriction mode
  45841.  50h    "SQLFSPR" stop restriction mode
  45842.  51h    "SQLFCNC" connect 2
  45843.  52h    "SQLFCNR" connect with no recovery
  45844.  53h    "SQLFOMS" set output message size
  45845.  54h    "SQLFIMS" set input message size
  45846.  55h    "SQLFSCP" set cache pages
  45847.  56h    "SQLFDSC" describe items of a SELECT statement (external)
  45848.  57h    "SQLFLAB" get label info for items in SELECT statement
  45849.  58h    "SQLFCBV" clear bind variables
  45850.  59h    "SQLFGET" get database information
  45851.  5Ah    "SQLFSET" set database information
  45852.  5Bh    "SQLFTEC" translate error code
  45853. ----------478001-----------------------------
  45854. INT 47 - SQL Base - GET VERSION NUMBER
  45855.     AX = 8001h
  45856. Return: ???
  45857. Note:    SQL Base is a network-oriented database engine by Gupta Technologies
  45858. ----------48---------------------------------
  45859. INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr)
  45860. SeeAlso: INT 49"PCjr"
  45861. ----------48---------------------------------
  45862. INT 48 - Z100 - Slave 8259 - S100 vectored line 0
  45863. SeeAlso: INT 47"Z100",INT 49"Z100"
  45864. ----------48---------------------------------
  45865. INT 48 - Watstar PC Network data pointer 1
  45866. SeeAlso: INT 49"Watstar"
  45867. ----------48---------------------------------
  45868. INT 48 - Acorn BBC Master 512 - "OSNEWL" - SEND NEWLINE TO OUTPUT STREAM
  45869. Return: FLAGS destroyed
  45870. Note:    writes a carriage return (0Dh) followed by a linefeed (0Ah)
  45871. SeeAlso: INT 40"Acorn",INT 47"Acorn",INT 49"Acorn"
  45872. ----------49---------------------------------
  45873. INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr)
  45874. SeeAlso: INT 48"PCjr"
  45875.  
  45876. Format of translation table:
  45877. Offset    Size    Description
  45878.  00h    BYTE    number of nonkeyboard scancodes in the table
  45879.  01h  N WORDs    high byte 00h (NUL) byte scancode with low order byte
  45880.         representing the scancode mapped values relative to their
  45881.         input values within the range of 56h through 7Eh
  45882. ----------49---------------------------------
  45883. INT 49 - Z100 - Slave 8259 - S100 vectored line 1
  45884. SeeAlso: INT 48"Z100",INT 4A"Z100"
  45885. ----------49---------------------------------
  45886. INT 49 - Texas Instruments PC - VIDEO I/O???
  45887.     apparently provides direct video display on the TI Professional PC
  45888. ----------49---------------------------------
  45889. INT 49 - Watstar PC Network data pointer 2
  45890. SeeAlso: INT 49"Watstar"
  45891. ----------49---------------------------------
  45892. INT 49 - Acorn BBC Master 512 - "OSASCI" - WRITE CHARACTER TO CUR OUTPUT STREAM
  45893.     AL = character to be written
  45894. Return: FLAGS destroyed
  45895. Note:    converts carriage return (0Dh) into CRLF sequence (0Dh 0Ah)
  45896. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 47"Acorn",INT 48"Acorn"
  45897. ----------490001-----------------------------
  45898. INT 49 - MAGic v1.16+ - TURN ON MAGNIFICATION
  45899.     AX = 0001h
  45900. Return: AX = status
  45901.         0000h cannot magnify current video mode
  45902.         0002h magnified (text mode)
  45903.         0003h magnified (graphics mode)
  45904.         FFFDh function works only in magnified mode
  45905.         FFFFh MAGic busy, retry later
  45906.     BX,CX,DX destroyed
  45907. Notes:    MAGic (MAGnification In Color) is a TSR by Microsystems Software, Inc.
  45908.       providing 2x2 text and graphics magnification on VGA, XGA, and SVGA
  45909.     INT 49 is the default, but may be overridden on the commandline.  The
  45910.       actual interrupt in use may be found by searching for the signature
  45911.       "MAGic" or "xMAGic" (for the deluxe version) immediately preceding
  45912.       the interrupt handler (this is also the installation check).    MAGic
  45913.       uses CodeRunneR, which places the signature "RT" at offset 0000h in
  45914.       the interrupt handler's segment, followed by MAGic's TSR ID of
  45915.       "VMAG".
  45916. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0008h
  45917. ----------490002-----------------------------
  45918. INT 49 - MAGic v1.16+ - TURN OFF MAGNIFICATION
  45919.     AX = 0002h
  45920. Return: AX = status (see AX=0001h)
  45921.     BX,CX,DX destroyed
  45922. SeeAlso: AX=0001h
  45923. ----------490003-----------------------------
  45924. INT 49 - MAGic v1.16+ - SHIFT MAGNIFIED WINDOW TO INCLUDE SPECIFIED LOCATION
  45925.     AX = 0003h
  45926.     BX = vertical position (character row [text] or pixel row [graphics])
  45927.     DX = horizontal position (char column [text] or 8-pixel units [gr])
  45928. Return: AX = status
  45929.         0000h successful
  45930.         FFFFh MAGic busy, retry later
  45931.     BX,CX,DX destroyed
  45932. Note:    window is not moved if the position is inside the current window
  45933. SeeAlso: AX=0001h,AX=0004h,AX=0005h
  45934. ----------490004-----------------------------
  45935. INT 49 - MAGic v1.16+ - REPOSITION MAGNIFIED WINDOW
  45936.     AX = 0004h
  45937.     BX = vertical position of upper left corner
  45938.     DX = horizontal position
  45939. Return: AX = status (see AX=0003h)
  45940.     BX,CX,DX destroyed
  45941. SeeAlso: AX=0001h,AX=0003h,AX=0005h
  45942. ----------490005-----------------------------
  45943. INT 49 - MAGic v1.16+ - GET POSITION OF MAGNIFIED WINDOW
  45944.     AX = 0005h
  45945. Return: AX = status
  45946.         0000h successful
  45947.         BX = vertical position (char row or pixel row)
  45948.         DX = horizontal position (char column or 8-pixel units)
  45949.         FFFFh MAGic busy, retry later
  45950.         BX,DX destroyed
  45951.     CX destroyed
  45952. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0006h,AX=0007h
  45953. ----------490006-----------------------------
  45954. INT 49 - MAGic v1.16+ - GET SIZE OF FULL SCREEN
  45955.     AX = 0006h
  45956. Return: AX = status
  45957.         0000h successful
  45958.         BX = vertical size (char rows or pixel rows)
  45959.         DX = horizontal size (char cols or 8-pixel units)
  45960.         FFFFh MAGic busy, retry later
  45961.         BX,DX destroyed
  45962.     CX destroyed
  45963. SeeAlso: AX=0001h,AX=0005h,AX=0007h
  45964. ----------490007-----------------------------
  45965. INT 49 - MAGic v1.16+ - GET SIZE OF MAGNIFICATION WINDOW
  45966.     AX = 0007h
  45967. Return: AX = status
  45968.         0000h successful
  45969.         BX = vertical size (char rows or pixel rows)
  45970.         DX = horizontal size (char cols or 8-pixel units)
  45971.         FFFEh invalid function
  45972.         FFFFh MAGic busy, retry later
  45973.         BX,DX destroyed
  45974.     CX destroyed
  45975. BUG:    in v1.16 and v1.17, this function is not recognized as valid, but
  45976.       AX=0000h is accepted and will branch into hyperspace
  45977. SeeAlso: AX=0001h,AX=0006h
  45978. ----------490008-----------------------------
  45979. INT 49 - MAGic v1.23+ - SET TEXT MODE MAGNIFICATION SIZE
  45980.     AX = 0008h
  45981.     BX = scaling factor (01h=1.4 times, 02h, 04h, 06h, 08h, 09h=12 times)
  45982. Return: AX = status
  45983.         0000h successful
  45984.         FFFBh scaling factor only available in MAGic Deluxe
  45985.         FFFCh already in magnified state, can't set size
  45986. Notes:    this call specifies the amount a subsequent call to AX=0001h should
  45987.       magnify the display
  45988.     scaling factors greater than 2 are only available in MAGic Deluxe
  45989. SeeAlso: AX=0001h
  45990. ----------4A---------------------------------
  45991. INT 4A C - SYSTEM - USER ALARM HANDLER
  45992. Desc:    This interrupt is invoked by the BIOS when a real-time clock alarm
  45993.       occurs; an application may use it to perform an action at a
  45994.       predetermined time.
  45995. Note:    this interrupt is called from within a hardware interrupt handler,
  45996.       so all usual precautions against reentering DOS must be taken
  45997. SeeAlso: INT 1A/AH=06h
  45998. ----------4A---------------------------------
  45999. INT 4A - Z100 - Slave 8259 - S100 vectored line 2
  46000. SeeAlso: INT 49"Z100",INT 4B"Z100"
  46001. ----------4A---------------------------------
  46002. INT 4A - Acorn BBC Master 512 - "OSWORD" - MISC FUNCTIONS USING CONTROL BLOCK
  46003.     AL = function code
  46004.         FAh transfer data between 80186 and 65C12 I/O processor
  46005.     DS:BX -> control block (see below)
  46006. Return: FLAGS destroyed
  46007.     control block updated
  46008. Note:    there are more functions than are listed here, but details are not
  46009.       available
  46010. SeeAlso: INT 40"Acorn",INT 4B"Acorn",INT 4C"Acorn"
  46011.  
  46012. Format of control block for function FAh:
  46013. Offset    Size    Description
  46014.  00h    BYTE    number of parameters sent to I/O processor (0Dh,0Eh)
  46015.  01h    BYTE    number of parameters read from I/O processor (01h)
  46016.  02h    DWORD    I/O processor address
  46017.  06h    DWORD    80186 segment:offset address
  46018.  0Ah    WORD    number of bytes to transfer
  46019.  0Ch    BYTE    operation type
  46020.         00h write to 65C12 at 24 us/byte
  46021.         01h read from 65C12 at 24 us/byte
  46022.         02h write to 65C12 at 26 us/word
  46023.         03h read from 65C12 at 26 us/word
  46024.         04h write to 65C12 at 10 us/byte using 256-byte blocks
  46025.         05h read from 65C12 at 10 us/byte using 256-byte blocks
  46026.  0Dh    BYTE    65C12 memory access control (only used if offset 00h = 0Eh)
  46027.         bit 7: unused
  46028.         bit 6: always use main screen memory if I/O addr 3000h-7FFFh
  46029.             (overrides bit 5)
  46030.         bit 5: use shadow screen memory if screen address specified
  46031.         bit 4: use current ROM rather than ROM selected by bits 3-0
  46032.             (only if I/O address between 8000h and BFFFh)
  46033.         bits 3-0: paged ROM number
  46034. ----------4B---------------------------------
  46035. INT 4B - Z100 - Slave 8259 - S100 vectored line 3
  46036. SeeAlso: INT 4A"Z100",INT 4C"Z100"
  46037. ----------4B---------------------------------
  46038. INT 4B - Common Access Method SCSI interface (draft revision 1.9)
  46039.     ES:DI -> CAM Control Block (see INT 4F/AX=8100h)
  46040. Notes:    the CAM committee moved the interface to INT 4F after revision 1.9
  46041.       to avoid conflicting with the IBM SCSI interface and the Virtual
  46042.       DMA specification
  46043.     the installation check for the driver is the string "SCSI_CAM" eight
  46044.       bytes past the INT 4Bh handler
  46045.     it is not known whether any drivers actually implemented this
  46046.       interface on INT 4B instead of INT 4F
  46047. SeeAlso: INT 4F/AX=8100h
  46048. ----------4B---------------------------------
  46049. INT 4B - Acorn BBC Master 512 - "OSBYTE" - MISC FUNCTIONS USING REGISTER PARAMS
  46050.     AL = function code
  46051.     BL = first parameter
  46052.     BH = second parameter (if needed)
  46053. Return: BL = first return parameter
  46054.     BH = second return parameter
  46055.     CF depends on function
  46056. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4C"Acorn"
  46057. ----------4B80-------------------------------
  46058. INT 4B - IBM SCSI interface
  46059.     AH = 80h
  46060.     details not yet available
  46061. ----------4B8102DX0000-----------------------
  46062. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  46063.     AX = 8102h
  46064.     DX = 0000h
  46065. Return: CF clear if successful
  46066.         AH = major version number
  46067.         AL = minor version number
  46068.         BX = product number
  46069.         0000h for Quadtel's QMAPS and Hewlett-Packard's HPMM.SYS
  46070.         0001h for Microsoft's EMM386.EXE
  46071.         4560h ("E`") for Qualitas' 386MAX
  46072.         4D43h ("MC") for V Communication's Memory Commander
  46073.         5145h ("QE") for Quarterdeck's QEMM-386
  46074.         CX = product revision number
  46075.         always 0000h for QMAPS and HPMM.SYS
  46076.         always 0001h for Microsoft's EMM386.EXE v4.20-4.41
  46077.         SI:DI = maximum DMA buffer size
  46078.         DX = flags
  46079.         bit 0: PC/XT bus (DMA in first megabyte only)
  46080.             1: physical buffer/remap region in first megabyte
  46081.             2: automatic remap enabled
  46082.             3: all memory is physically contiguous
  46083.          4-15: reserved (zero)
  46084.     CF set on error
  46085.         AL = error code (see below)
  46086. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  46087.       apparently not always the case
  46088. SeeAlso: INT 31
  46089.  
  46090. Values for error code:
  46091.  01h    region not in contiguous memory
  46092.  02h    region crossed a physical alignment boundary
  46093.  03h    unable to lock pages
  46094.  04h    no buffer available
  46095.  05h    region too large for buffer
  46096.  06h    buffer currently in use
  46097.  07h    invalid memory region
  46098.  08h    region was not locked
  46099.  09h    number of physical pages greater than table length
  46100.  0Ah    invalid buffer ID
  46101.  0Bh    copy out of buffer range
  46102.  0Ch    invalid DMA channel number
  46103.  0Dh    disable count overflow
  46104.  0Eh    disable count underflow
  46105.  0Fh    function not supported
  46106.  10h    reserved flag bits set in DX
  46107.  
  46108. Format of DMA descriptor structure (DDS):
  46109. Offset    Size    Description
  46110.  00h    DWORD    region size
  46111.  04h    DWORD    offset
  46112.  08h    WORD    segment/selector
  46113.  0Ah    WORD    buffer ID
  46114.  0Ch    DWORD    physical address
  46115.  
  46116. Format of Extended DMA descriptor structure (EDDS):
  46117. Offset    Size    Description
  46118.  00h    DWORD    region size
  46119.  04h    DWORD    offset
  46120.  08h    WORD    segment/selector
  46121.  0Ah    WORD    reserved
  46122.  0Ch    WORD    number available
  46123.  0Eh    WORD    number used
  46124.  10h    DWORD    region 0 physical address
  46125.  14h    DWORD    region 0 size in bytes
  46126.  18h    DWORD    region 1 physical address
  46127.  1Ch    DWORD    region 1 size in bytes
  46128.     ...
  46129.  
  46130. Format of Extended DMA descriptor structure (EDDS) with page table entries:
  46131. Offset    Size    Description
  46132.  00h    DWORD    region size
  46133.  04h    DWORD    offset
  46134.  08h    WORD    segment/selector
  46135.  0Ah    WORD    reserved
  46136.  0Ch    WORD    number available
  46137.  0Eh    WORD    number used
  46138.  10h    DWORD    page table entry 0 (same as 80386 page table entry)
  46139.  14h    DWORD    page table entry 1
  46140.     ...
  46141. Note:    bits 1-11 of the page table entries should be zero; bit 0 set if page
  46142.       is present and locked
  46143. ----------4B8103-----------------------------
  46144. INT 4B - Virtual DMA Specification - LOCK DMA REGION
  46145.     AX = 8103h
  46146.     DX = flags
  46147.         bit 0: reserved (zero)
  46148.         1: data should be copied into buffer (ignored if bit 2 set)
  46149.         2: buffer should not be allocated if region noncontiguous or
  46150.            crosses physical alignment boundary specified by bits 4-5
  46151.         3: don't attempt automatic remap
  46152.         4: region must not cross 64K physical alignment boundary
  46153.         5: region must not cross 128K physical alignment boundary
  46154.          6-15: reserved (zero)
  46155.     ES:DI -> DMA descriptor structure (see AX=8102h)
  46156. Return:    CF clear if successful
  46157.         DDS physical address field filled in
  46158.         DDS buffer ID field filled (0000h if no buffer allocated)
  46159.     CF set on error
  46160.         AL = error code (see AX=8102h)
  46161.         DDS region size field filled wth maximum contiguous length in bytes
  46162. SeeAlso: AX=8104h,AX=8105h
  46163. ----------4B8104-----------------------------
  46164. INT 4B - Virtual DMA Specification - UNLOCK DMA REGION
  46165.     AX = 8104h
  46166.     DX = flags
  46167.         bit 0: reserved (zero)
  46168.         1: data should be copied out of buffer
  46169.          2-15: reserved (zero)
  46170.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size,
  46171.         physical address, and buffer ID fields set
  46172. Return: CF clear if successful
  46173.         DDS physical address field set
  46174.         DDS buffer ID field set (0000h if no buffer allocated)
  46175.     CF set on error
  46176.         AL = error code (see AX=8102h)
  46177.         DDS region size field filled wth maximum contiguous length in bytes
  46178. SeeAlso: AX=8103h,AX=8106h
  46179. ----------4B8105-----------------------------
  46180. INT 4B - Virtual DMA Specification - SCATTER/GATHER LOCK REGION
  46181.     AX = 8105h
  46182.     DX = flags
  46183.         bits 0-5: reserved (zero)
  46184.            6: EDDS should be returned with page table entries
  46185.            7: only present pages should be locked (not-present pages
  46186.             receive entry of 0000h)
  46187.         8-15: reserved (zero)
  46188.     ES:DI -> Extended DMA descriptor structure (see AX=8102h)
  46189.         region size, linear segment, linear offset, and number avail
  46190.         fields set
  46191. Return: CF clear if successful
  46192.         EDDS number used field set
  46193.         if DX bit 6 set, lower 12 bits of BX = offset in first page
  46194.     CF set on error
  46195.         AL = error code (see AX=8102h)
  46196.         EDDS region size field filled with max length in bytes that can be
  46197.         locked and described in the EDDS table
  46198. SeeAlso: AX=8103h,AX=8106h
  46199. ----------4B8106-----------------------------
  46200. INT 4B - Virtual DMA Specification - SCATTER/GATHER UNLOCK REGION
  46201.     AX = 8106h
  46202.     DX = flags
  46203.         bits 0-5: reserved (zero)
  46204.            6: EDDS contains page table entries
  46205.            7: EDDS may contain not-present pages (entry = 0000h)
  46206.         8-15: reserved (zero)
  46207.     ES:DI -> Extended DMA descriptor structure (see AX=8102h) returned
  46208.         by AX=8105h    
  46209. Return: CF clear if successful
  46210.     CF set on error
  46211.         AL = error code (see AX=8102h)
  46212. Note:    according to the Microsoft version of the VDS specification, the
  46213.       actual scatter/gather list is ignored, while according to the IBM
  46214.       version of the specification, "the result of a LOCK operation"
  46215.       must be provided to this function
  46216. SeeAlso: AX=8104h,AX=8105h
  46217. ----------4B8107-----------------------------
  46218. INT 4B - Virtual DMA Specification - REQUEST DMA BUFFER
  46219.     AX = 8107h
  46220.     DX = flags
  46221.         bit 0: reserved (zero)
  46222.         1: data should be copied into buffer
  46223.          2-15: reserved (zero)
  46224.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size set
  46225.         (also region offset and region segment if DX bit 1 set)
  46226. Return: CF clear if successful
  46227.         DDS physical address and buffer ID set
  46228.         DDS region size filled with length of buffer
  46229.     CF set on error
  46230.         AL = error code (see AX=8102h)
  46231. SeeAlso: AX=8108h
  46232. ----------4B8108-----------------------------
  46233. INT 4B - Virtual DMA Specification - RELEASE DMA BUFFFER
  46234.     AX = 8108h
  46235.     DX = flags
  46236.         bit 0: reserved (zero)
  46237.         1: data should be copied out of buffer
  46238.          2-15: reserved (zero)
  46239.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID set
  46240.         (also region size/region offset/segment if DX bit 1 set)
  46241. Return: CF clear if successful
  46242.     CF set on error
  46243.         AL = error code (see AX=8102h)
  46244. SeeAlso: AX=8107h
  46245. ----------4B8109DX0000-----------------------
  46246. INT 4B - Virtual DMA Specification - COPY INTO DMA BUFFER
  46247.     AX = 8109h
  46248.     DX = 0000h
  46249.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  46250.         region segment/offset, and region size fields set
  46251.     BX:CX = starting offset into DMA buffer
  46252. Return: CF clear if successful
  46253.     CF set on error
  46254.         AL = error code (see AX=8102h)
  46255. SeeAlso: AX=810Ah
  46256. ----------4B810ADX0000-----------------------
  46257. INT 4B - Virtual DMA Specification - COPY OUT OF DMA BUFFER
  46258.     AX = 810Ah
  46259.     DX = 0000h
  46260.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  46261.         region segment/offset, and region size fields set
  46262.     BX:CX = starting offset into DMA buffer
  46263. Return: CF clear if successful
  46264.     CF set on error
  46265.         AL = error code (see AX=8102h)
  46266. SeeAlso: AX=8109h
  46267. ----------4B810B-----------------------------
  46268. INT 4B - Virtual DMA Specification - DISABLE DMA TRANSLATION
  46269.     AX = 810Bh
  46270.     BX = DMA channel number
  46271.     DX = 0000h
  46272. Return: CF clear if successful
  46273.     CF set on error
  46274.         AL = error code (see AX=8102h)
  46275. SeeAlso: AX=810Ch
  46276. ----------4B810C-----------------------------
  46277. INT 4B - Virtual DMA Specification - ENABLE DMA TRANSLATION
  46278.     AX = 810Ch
  46279.     BX = DMA channel number
  46280.     DX = 0000h
  46281. Return: CF clear if successful
  46282.         ZF set if disable count decremented to zero
  46283.     CF set on error
  46284.         AL = error code (see AX=8102h)
  46285. SeeAlso: AX=810Bh
  46286. ----------4B810D-----------------------------
  46287. INT 4B - QEMM-386 - BUG
  46288.     AX = 810Dh
  46289. Note:    the code in QEMM v5.11 and 6.00 jumps to an invalid location on this
  46290.       call
  46291. ----------4C---------------------------------
  46292. INT 4C - Z100 - Slave 8259 - S100 vectored line 4
  46293. SeeAlso: INT 4B"Z100",INT 4D"Z100"
  46294. ----------4C---------------------------------
  46295. INT 4C - Acorn BBC Master 512 - "OSCLI" - INTERPRET COMMAND LINE
  46296.     DS:BX -> CR-terminated command string
  46297. Return: FLAGS destroyed
  46298. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4B"Acorn"
  46299. ----------4D---------------------------------
  46300. INT 4D - Z100 - Slave 8259 - S100 vectored line 5
  46301. SeeAlso: INT 4C"Z100",INT 4E"Z100"
  46302. ----------4E---------------------------------
  46303. INT 4E - TI Professional PC - DISK I/O
  46304.     used instead of INT 13 on the TI Professional PC
  46305. SeeAlso: INT 13
  46306. ----------4E---------------------------------
  46307. INT 4E - Z100 - Slave 8259 - S100 vectored line 6
  46308. SeeAlso: INT 4D"Z100",INT 4F"Z100"
  46309. ----------4F---------------------------------
  46310. INT 4F - Z100 - Slave 8259 - S100 vectored line 7
  46311. SeeAlso: INT 4E"Z100"
  46312. ----------4F8100-----------------------------
  46313. INT 4F - Common Access Method SCSI interface rev 2.3 - SEND CCB TO XPT/SIM
  46314.     AX = 8100h
  46315.     ES:BX -> CAM Control Block (CCB) (see below)
  46316. Return: AH = status
  46317.         00h successful
  46318.         01h invalid CCB address (0000h:0000h)
  46319. Note:    the SCSI Interface Module (SIM) may complete the requested function
  46320.       and invoke the completion callback function before this call returns
  46321. SeeAlso: AX=8200h,INT 4B"Common Access Method"
  46322.  
  46323. Format of CAM Control Block:
  46324. Offset    Size    Description
  46325.  00h    DWORD    physical address of this CCB
  46326.  04h    WORD    CAM control block length
  46327.  06h    BYTE    function code (see below)
  46328.  07h    BYTE    CAM status (see below)
  46329.  08h    BYTE    SCSI status
  46330.  09h    BYTE    path ID (FFh = XPT)
  46331.  0Ah    BYTE    target ID
  46332.  0Bh    BYTE    logical unit number
  46333.  0Ch    BYTE    CAM flags
  46334.         bits 7-6: direction
  46335.             00 reserved
  46336.             01 in
  46337.             10 out
  46338.             11 no data transfer
  46339.         bit 5: disable autosense
  46340.             4: scatter/gather
  46341.             3: disable callback on completion
  46342.             2: linked CDB
  46343.             1: tagged queue action enable
  46344.             0: CDB is a pointer
  46345.  0Dh    BYTE    CAM flags
  46346.         bit 7: disable disconnect
  46347.             6: initiate synchronous transfers  \ mutually
  46348.             5: disable synchronous transfers   / exclusive
  46349.             4: SIM queue priority
  46350.             1 head insertion
  46351.             0 tail insertion (normal)
  46352.         bit 3: SIM queue freeze
  46353.             2: engine synchronize
  46354.         bits 1-0: reserved
  46355.  0Eh    BYTE    CAM address flags
  46356.         bit 7: SG list/data (0 = host, 1 = engine)
  46357.         bit 6: CDB pointer    (bits 6-1: 0=virtual addr, 1=phys addr)
  46358.         bit 5: SG list/data
  46359.         bit 4: sense buffer
  46360.         bit 3: message buffer
  46361.         bit 2: next CCB
  46362.         bit 1: callback on completion
  46363.         bit 0: reserved
  46364.  0Fh    BYTE    target-mode flags
  46365.         bit 7: data buffer valid
  46366.         bit 6: status valid
  46367.         bit 5: message buffer valid
  46368.         bit 4: reserved
  46369.         bit 3: phase-cognizant mode
  46370.         bit 2: target CCB available
  46371.         bit 1: disable autodisconnect
  46372.         bit 0: disable autosave/restore
  46373. ---function 02h---
  46374.  10h    DWORD    pointer to 36-byte buffer for inquiry data or 0000h:0000h
  46375.  14h    BYTE    peripheral device type of target logical unit number
  46376. ---function 03h---
  46377.  10h    BYTE    version number (00h-07h prior to rev 1.7, 08h = rev 1.7,
  46378.         09h-FFh = rev no, i.e. 23h = rev 2.3)
  46379.  11h    BYTE    SCSI capabilities
  46380.         bit 7: modify data pointers
  46381.             6: wide bus (32 bits)
  46382.             5: wide bus (16 bits)
  46383.             4: synchronous transfers
  46384.             3: linked commands
  46385.             2: reserved
  46386.             1: tagged queueing
  46387.             0: soft reset
  46388.  12h    BYTE    target mode support
  46389.         bit 7: processor mode
  46390.             6: phase-cognizant mode
  46391.             5-0: reserved
  46392.  13h    BYTE    miscellaneous flags
  46393.         bit 7: scanned high to low instead of low to high
  46394.             6: removables not included in scan
  46395.             5: inquiry data not kept by XPT
  46396.             4-0: reserved
  46397.  14h    WORD    engine count
  46398.  16h 14 BYTEs    vendor-specific data
  46399.  24h    DWORD    size of private data area
  46400.  28h    DWORD    asynchronous event capabilities
  46401.         bits 31-24: vendor-specific
  46402.              23-8: reserved
  46403.             7: new devices found during rescan
  46404.             6: SIM module deregistered
  46405.             5: SIM module registered
  46406.             4: sent bus device reset to target
  46407.             3: SCSI AEN
  46408.             2: reserved
  46409.             1: unsolicited reselection
  46410.             0: unsolicited SCSI bus reset
  46411.  2Ch    BYTE    highest path ID assigned
  46412.  2Dh    BYTE    SCSI device ID of initiator
  46413.  2Eh  2 BYTEs    reserved
  46414.  30h 16 BYTEs    SIM vendor ID
  46415.  40h 16 BYTEs    HBA (host bus adaptor) vendor ID
  46416.  50h  4 BYTEs    operating-system dependant usage
  46417. ---functions 00h,04h,11h,12h---
  46418.  no additional fields
  46419. ---function 05h---
  46420.  10h    DWORD    asynchronous event enables (see function 03h above)
  46421.  14h    DWORD    pointer to asynchronous callback routine
  46422.  18h    DWORD    pointer to peripheral driver buffer
  46423.  1Ch    BYTE    size of peripheral buffer
  46424. ---function 06h---
  46425.  10h    BYTE    peripheral device type of target
  46426. ---functions 10h,13h---
  46427.  10h    DWORD    pointer to CCB to be aborted
  46428. ---function 20h---
  46429.  10h    WORD    engine number
  46430.  12h    BYTE    engine type
  46431.         00h buffer memory
  46432.         01h lossless compression
  46433.         02h lossy compression
  46434.         03h encryption
  46435.  13h    BYTE    engine algorithm ID
  46436.         00h vendor-unique
  46437.         01h LZ1 variation 1 (STAC)
  46438.         02h LZ2 variation 1 (HP DCZL)
  46439.         03h LZ2 variation 2 (Infochip)
  46440.  14h    DWORD    engine memory size
  46441. ---function 21h---
  46442.  10h    DWORD    pointer to peripheral driver
  46443.  14h  4 BYTEs    reserved
  46444.  18h    DWORD    OS-dependent request-mapping info
  46445.  1Ch    DWORD    address of completion callback routine
  46446.  20h    DWORD    pointer to scatter/gather list or data buffer
  46447.  24h    DWORD    length of data transfer
  46448.  28h    DWORD    pointer to engine buffer data
  46449.  2Ch  2 BYTEs    reserved
  46450.  2Eh    WORD    number of scatter/gather entries
  46451.  30h    DWORD    maximum destination data length
  46452.  34h    DWORD    length of destination data
  46453.  38h    DWORD    source residual length
  46454.  3Ch 12 BYTEs    reserved
  46455.  48h    DWORD    OS-dependent timeout value
  46456.  4Ch  4 BYTEs    reserved
  46457.  50h    WORD    engine number
  46458.  52h    WORD    vendor-unique flags
  46459.  54h  4 BYTEs    reserved
  46460.  58h  N BYTEs    private data area for SIM
  46461. ---function 30h---
  46462.  10h    WORD    group 6 vendor-unique CDB length
  46463.  12h    WORD    group 7 vendor-unique CDB length
  46464.  14h    DWORD    pointer to target CCB list
  46465.  18h    WORD    number of target CCBs
  46466. ---other functions---
  46467.  10h    DWORD    pointer to peripheral driver
  46468.  14h    DWORD    pointer to next CCB
  46469.  18h    DWORD    OS-dependent request mapping information
  46470.  1Ch    DWORD    address of completion callback routine
  46471.  20h    DWORD    pointer to scatter/gather list or data buffer
  46472.  24h    DWORD    length of data transfer
  46473.  28h    DWORD    pointer to sense info buffer
  46474.  2Ch    BYTE    length of sense info buffer
  46475.  2Dh    BYTE    CDB length
  46476.  2Eh    WORD    number of scatter/gather entries
  46477.  30h  4 BYTEs    reserved
  46478.  34h    BYTE    SCSI status
  46479.  35h  3 BYTEs    reserved
  46480.  38h    DWORD    residual length
  46481.  40h 12 BYTEs    Command Descriptor Block (CDB)
  46482.  44h    DWORD    OS-dependent timeout value
  46483.  48h    DWORD    pointer to message buffer
  46484.  4Ch    WORD    length of message buffer
  46485.  4Eh    WORD    vendor-unique flags
  46486.  50h    BYTE    tag queue action
  46487.  51h  3 BYTEs    reserved
  46488.  54h  N BYTEs    private data area for SIM
  46489.  
  46490. Values for CAM function code:
  46491.  00h NOP
  46492.  01h execute SCSI I/O
  46493.  02h get device type
  46494.  03h path inquiry
  46495.  04h release SIM queue
  46496.  05h set async callback
  46497.  06h set device type
  46498.  07h-0Fh reserved
  46499.  10h abort SCSI command
  46500.  11h reset SCSI bus
  46501.  12h reset SCSI device
  46502.  13h terminate I/O process
  46503.  14h-1Fh reserved
  46504.  20h engine inquiry
  46505.  21h execute engine request
  46506.  22h-2Fh reserved
  46507.  30h enable logical unit number
  46508.  31h execute target I/O
  46509.  32h-7Fh reserved
  46510.  80h-FFh vendor-specific functions
  46511.  
  46512. Values for CAM status:
  46513.  00h request in progress
  46514.  01h request successful
  46515.  02h host aborted request
  46516.  03h unable to abort request
  46517.  04h request completed with error
  46518.  05h CAM is busy
  46519.  06h invalid request
  46520.  07h invalid path ID
  46521.  08h no such SCSI device
  46522.  09h unable to terminate I/O process
  46523.  0Ah timeout on target selection
  46524.  0Bh timeout on command
  46525.  0Dh receive message rejection
  46526.  0Eh sent/received SCSI bus reset
  46527.  0Fh detected uncorrectable parity error
  46528.  10h Autosense request failed
  46529.  11h no HBA detected
  46530.  12h data over/underrun
  46531.  13h bus freed unexpectedly
  46532.  14h target bus phase sequence failure
  46533.  15h CCB too small
  46534.  16h requested capability not available
  46535.  17h sent bus device reset
  46536.  18h terminate I/O process
  46537.  38h invalid LUN
  46538.  39h invalid target ID
  46539.  3Ah unimplemented function
  46540.  3Bh nexus not established
  46541.  3Ch invalid initiator ID
  46542.  3Dh received SCSI Command Descriptor Block
  46543.  3Eh LUN already enabled
  46544.  3Fh SCSI bus busy
  46545. Note:    bit 6 set to indicate frozen SIM queue
  46546.     bit 7 set to indicate valid autosense
  46547.  
  46548. Completion callback function called with:
  46549.     interrupts disabled
  46550.     ES:BX -> completed CCB
  46551.  
  46552. Asynchronous callback function called with:
  46553.     AH = opcode
  46554.     AL = path ID generating callback
  46555.     DH = target ID causing event
  46556.     DL = LUN causing event
  46557.     CX = data byte count (if applicable)
  46558.     ES:BX -> data buffer (if applicable)
  46559. Return: all registers preserved
  46560. ----------4F8200CX8765-----------------------
  46561. INT 4F - Common Access Method SCSI interface rev 2.3 - INSTALLATION CHECK
  46562.     AX = 8200h
  46563.     CX = 8765h
  46564.     DX = CBA9h
  46565. Return: AH = 00h if installed
  46566.         CX = 9ABCh
  46567.         DX = 5678h
  46568.         ES:DI -> "SCSI_CAM"
  46569. SeeAlso: AX=8100h,INT 4B"Common Access Method"
  46570. ---------------------------------------------
  46571. Interrupt List, part 7 of 8
  46572. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  46573. ----------50---------------------------------
  46574. INT 50 - TIL Xpert AIM (X.25)
  46575.     AH = function
  46576. ----------50---------------------------------
  46577. INT 50 - IRQ0 relocated by DESQview
  46578. Notes:    this is the default location for older versions; DESQview v2.26+
  46579.       searches for unused ranges of interrupts and uses the lowest
  46580.       available range in its list for relocating these IRQs and the next
  46581.       lowest for relocating IRQ8-IRQ15
  46582.     a range of eight interrupts starting at a multiple of 8 is considered
  46583.       available if all vectors are identical and it has not been excluded
  46584.       with an /XB:nn commandline switch
  46585.     the list of ranges for v2.26 is 50h,58h,68h,78h,F8h (if < two of these
  46586.       are available, F8h and then 50h are used anyway)
  46587.     the list of ranges for v2.31+ is 68h,78h,88h-B8h,F8h (if < two of these
  46588.       are available, F8h and then F0h are used anyway)
  46589. SeeAlso: INT 08"IRQ0",INT 51"DESQview",INT 54"DESQview",INT 58"DESQview"
  46590. ----------50---------------------------------
  46591. INT 50 - IRQ0 relocated by IBM 3278 emulation control program
  46592. SeeAlso: INT 51"IBM 3278"
  46593. ----------50---------------------------------
  46594. INT 50 - IRQ0 relocated by OS/2 v1.x
  46595. SeeAlso: INT 51"OS/2"
  46596. ----------500000-----------------------------
  46597. INT 50 - Vanderaart TEXT WINDOWS, PC Thuis Shell - OPEN TEXT WINDOW
  46598.     AX = 0000h
  46599.     ES:BX -> name string or ES:0000h if none
  46600.     CH,CL = row,column of upper left corner
  46601.     DH,DL = row,column of lower right corner
  46602. Return: AX = window handle or
  46603.         0000h if not installed
  46604.         FFFFh on error
  46605. SeeAlso: AX=0001h,AX=0002h"TEXT WINDOWS"
  46606. ----------500001-----------------------------
  46607. INT 50 - Vanderaart TEXT WINDOWS, PC Thuis Shell - CLOSE TEXT WINDOW
  46608.     AX = 0001h
  46609.     DI = window handle
  46610. SeeAlso: AX=0000h
  46611. ----------500002-----------------------------
  46612. INT 50 - Vanderaart TEXT WINDOWS - PUT CHARACTER IN WINDOW
  46613.     AX = 0002h
  46614.     BL = character
  46615.     BH = attribute
  46616.     DL = column
  46617.     DH = row
  46618.     DI = window handle
  46619. Return: AX = status
  46620.         0000h if successful
  46621.         FFFFh if outside window
  46622. SeeAlso: AX=0000h
  46623. ----------500002-----------------------------
  46624. INT 50 - PC Thuis Organizer Shell - PLOT TEXT
  46625.     AX = 0002h
  46626.     ES:BX -> text string
  46627.     DH,DL = row,column of upper left corner
  46628.     DI = window handle
  46629. Return: AX = status
  46630.         0000h successful (text fits in window)
  46631.         FFFFh error
  46632. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  46633.       published in the June/July 1990 issue of PC Thuis Power magazine
  46634. ----------500003-----------------------------
  46635. INT 50 - Vanderaart TEXT WINDOWS - OUTPUT LINE TO WINDOW
  46636.     AX = 0003h
  46637.     ES:BX -> text string
  46638.     CX = string length (0000h if ASCIZ string)
  46639.     DL = position (FFh centered, else flush left)
  46640.     DH = starting row
  46641.     DI = window handle
  46642. Return: AX = status
  46643.         0000h successful
  46644.         FFFFh did not fit in window
  46645. ----------500003-----------------------------
  46646. INT 50 - PC Thuis Organizer Shell - WRITE FILE
  46647.     AX = 0003h
  46648.     ES:BX -> data to be written
  46649.     CX = number of bytes to write
  46650.     DS:SI -> filename
  46651. Return: AX = status
  46652.         0000h successful
  46653.         FFFFh error
  46654. SeeAlso: AX=0004h"Shell"
  46655. ----------500004-----------------------------
  46656. INT 50 - Vanderaart TEXT WINDOWS - GET KEY
  46657.     AX = 0004h
  46658.     CH = type
  46659.         00h any key
  46660.         01h 'J' or 'N' (Dutch for yes/no)
  46661. Return: AX = key
  46662. SeeAlso: INT 16/AH=00h
  46663. ----------500004-----------------------------
  46664. INT 50 - PC Thuis Organizer Shell - READ FILE
  46665.     AX = 0004h
  46666.     ES:BX -> buffer for data
  46667.     CX = number of bytes to read or 0000h for entire file
  46668.     DL = file type
  46669.         01h setting shell
  46670.         02h setting sterm
  46671.         03h INT21 file
  46672.     DS:SI -> filename
  46673. Return: AX = status
  46674.         0000h successful
  46675.         FFFFh error
  46676. Note:    file type numbers are maintained by John Vanderaart; if a new file type
  46677.       is needed, a type number should be requested from him through the
  46678.       magazine:
  46679.         PC Thuis BV
  46680.         Spaarne 55
  46681.         2011 CE HAARLEM
  46682.         The Netherlands
  46683. SeeAlso: AX=0003h"Shell"
  46684. ----------500005-----------------------------
  46685. INT 50 -Vanderaart TEXT WINDOWS - CHANGE ATTRIBUTE
  46686.     AX = 0005h
  46687.     BL = new attribute
  46688.     CH,CL = row,column of upper left corner
  46689.     DH,DL = row,column of lower right corner
  46690.     DI = window handle
  46691. ----------500005-----------------------------
  46692. INT 50 - PC Thuis Organizer Shell - PROMPT YES/NO
  46693.     AX = 0005h
  46694.     ES:BX -> prompt string (ES:0000h if no prompt)
  46695. Return: AX = key pressed
  46696.         0000h "J" (Dutch "Ja" = "Yes")
  46697.         FFFFh "N" (Dutch "Nee" = "No")
  46698. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  46699.       published in the June/July 1990 issue of PC Thuis Power magazine
  46700. ----------500006-----------------------------
  46701. INT 50 - Vanderaart TEXT WINDOWS - EDIT LINE IN WINDOW
  46702.     AX = 0006h
  46703.     ES:BX -> text string
  46704.     CH = type
  46705.         00h everything
  46706.         01h uppercase only
  46707.         02h positive numbers
  46708.         03h Dutch postal code ("9999 AA")
  46709.         04h 'J' or 'N' (Dutch yes/no)
  46710.         05h telephone or FAX number
  46711.         06h positive or negative number
  46712.         07h date (dd/mm/yy)
  46713.         08h money
  46714.         09h '1' through '8'
  46715.         0Ah '1' through '4'
  46716.         0Bh uppercase filenames
  46717.     DH,DL = row,column of upper left corner
  46718.     DI = window handle
  46719. Return: AX = key which terminated entry
  46720.         0000h Enter
  46721.         0001h Esc
  46722.         0002h Down arrow
  46723.         0003h Up arrow
  46724.         0004h F10
  46725. ----------500006-----------------------------
  46726. INT 50 - PC Thuis Organizer Shell - ALERT USER
  46727.     AX = 0006h
  46728.     ES:BX -> string
  46729. ----------500007-----------------------------
  46730. INT 50 - PC Thuis Organizer Shell - DO LINE
  46731.     AX = 0007h
  46732.     ES:BX -> text string
  46733.     CX = string length in bytes (0000h if NUL-terminated)
  46734.     DL = FFh to center string, else flush left
  46735.     DH = upper left row
  46736.     DI = window handle
  46737. Return: AX = status
  46738.         0000h successful
  46739.         FFFFh error
  46740. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  46741.       published in the June/July 1990 issue of PC Thuis Power magazine
  46742. ----------500008-----------------------------
  46743. INT 50 - PC Thuis Organizer Shell - DO MENU
  46744.     AX = 0008h
  46745.     ES:BX -> menu structure
  46746. Return: AL = index 1 or FFh if not selected
  46747.     AH = index 2 or FFh if not selected
  46748.     BL = index 3 or FFh if not selected
  46749.     BH = index 4 or FFh if not selected
  46750. SeeAlso: AX=000Ch
  46751. ----------500009-----------------------------
  46752. INT 50 - PC Thuis Organizer Shell - MESSAGE ON
  46753.     AX = 0009h
  46754.     ES:BX -> message string
  46755. SeeAlso: AX=000Ah
  46756. ----------50000A-----------------------------
  46757. INT 50 - PC Thuis Organizer Shell - MESSAGE OFF
  46758.     AX = 000Ah
  46759. SeeAlso: AX=0009h
  46760. ----------50000B-----------------------------
  46761. INT 50 - PC Thuis Organizer Shell - CHANGE ATTRIBUTE
  46762.     AX = 000Bh
  46763.     BL = new attribute
  46764.     CH,CL = row,column of upper left corner
  46765.     DH,DL = row,column of lower right corner
  46766.     DI = window handle
  46767. ----------50000C-----------------------------
  46768. INT 50 - PC Thuis Organizer Shell - DO REQUEST
  46769.     AX = 000Ch
  46770.     ES:BX -> request structure
  46771. Return: AX = status
  46772.         0000h confirmed
  46773.         FFFFh denied
  46774. SeeAlso: AX=0008h
  46775. ----------50000D-----------------------------
  46776. INT 50 - PC Thuis Organizer Shell - EDIT LINE
  46777.     AX = 000Dh
  46778.     ES:BX -> text string
  46779.     CL = length
  46780.     CH = type
  46781.         bit 0: force uppercase
  46782.         bit 1: integer
  46783.         bit 2: no spaces allowed
  46784.         bit 3: no cursor keys
  46785.     DH,DL = row,column of upper left corner
  46786.     DI = window handle
  46787. Return: AX = result code
  46788. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  46789.       published in the June/July 1990 issue of PC Thuis Power magazine
  46790. ----------50000E-----------------------------
  46791. INT 50 - PC Thuis Organizer Shell - PLOT CHARACTER
  46792.     AX = 000Eh
  46793.     BL = character
  46794.     BH = attribute
  46795.     DH,DL = row,column at which to plot
  46796.     DI = window handle
  46797. Return: AX = status
  46798.         0000h successful
  46799.         FFFFh errror
  46800. ----------50000F-----------------------------
  46801. INT 50 - PC Thuis Organizer Shell - EMPTY WINDOW
  46802.     AX = 000Fh
  46803.     BL = character
  46804.     BH = attribute
  46805.     DI = window handle
  46806. ----------500010-----------------------------
  46807. INT 50 - PC Thuis Organizer Shell - TRACE MENU
  46808.     AX = 0010h
  46809.     ES:BX -> first menu structure
  46810.     CL = hotkey to look up
  46811. Return: AL = index 1 or FFh if not selected
  46812.     AH = index 2 or FFh if not selected
  46813.     BL = index 3 or FFh if not selected
  46814.     BH = index 4 or FFh if not selected
  46815. ----------500011-----------------------------
  46816. INT 50 - PC Thuis Organizer Shell - MOVE MEMORY
  46817.     AX = 0011h
  46818.     DS:SI -> source
  46819.     ES:DI -> destination
  46820.     CX = number of bytes to move (0000h = until NUL string terminator???)
  46821. SeeAlso: AX=0012h
  46822. ----------500012-----------------------------
  46823. INT 50 - PC Thuis Organizer Shell - COMPARE MEMORY
  46824.     AX = 0012h
  46825.     DS:SI -> source
  46826.     ES:DI -> destination
  46827.     CX = number of bytes to compare (0000h=until NUL string terminator???)
  46828. Return: AX = status
  46829.         0000h same
  46830.         FFFFh different
  46831. SeeAlso: AX=0011h
  46832. ----------500013-----------------------------
  46833. INT 50 - PC Thuis Organizer Shell - GET KEY
  46834.     AX = 0013h
  46835.     CH = type flags
  46836.         bit 0: force uppercase
  46837.         bit 1: integer
  46838.         bit 2: no spaces
  46839. Return: AX = keystroke
  46840. ----------500014-----------------------------
  46841. INT 50 - PC Thuis Organizer Shell - SCROLL WINDOW
  46842.     AX = 0014h
  46843.     BL = direction
  46844.         06h up
  46845.         07h down
  46846.     BH = attribute
  46847.     DI = window handle
  46848. SeeAlso: INT 10/AH=06h,INT 10/AH=07h
  46849. ----------500015-----------------------------
  46850. INT 50 - PC Thuis Organizer Shell - GET MEMORY HANDLE
  46851.     AX = 0015h
  46852.     BL = handle size
  46853.         00h 65536 bytes (64K)
  46854.         01h 65535 bytes (64K-1)
  46855.         02h 32768 bytes (32K)
  46856.         03h 32767 bytes (32K-1)
  46857. Return: AX = segment
  46858. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  46859.       published in the June/July 1990 issue of PC Thuis Power magazine
  46860. SeeAlso: INT 21/AH=48h
  46861. ----------51---------------------------------
  46862. INT 51 - through 53 - IRQ1-IRQ3 relocated by DESQview
  46863. Note:    this is the default location for older versions; see INT 50"DESQview"
  46864.       for details of interrupt relocation
  46865. SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
  46866. ----------51---------------------------------
  46867. INT 51 - through 53 - IRQ1-IRQ3 relocated by IBM 3278 emulation control program
  46868. SeeAlso: INT 50"IBM 3278",INT 54"IBM 3278"
  46869. ----------51---------------------------------
  46870. INT 51 - through 53 - IRQ1-IRQ3 relocated by OS/2 v1.x
  46871. SeeAlso: INT 50"OS/2",INT 54"OS/2"
  46872. ----------53---------------------------------
  46873. INT 53 - ??? - API
  46874.     BX = function
  46875.         0000h ???
  46876.         AX = ???
  46877.         Return: AX = ???
  46878.         0004h ???
  46879.         0009h ???
  46880.         0015h
  46881.         AX = ???
  46882.         DX = ???
  46883.         0017h
  46884. Return: ???
  46885. Notes:    the installation check consists of looking for the signature "WEBCO"
  46886.       immediately prior to the interrupt handler
  46887.     the above calls are made by Show Partner F/X v3.6 (see INT 10/AH=53h)
  46888. ----------54---------------------------------
  46889. INT 54 - through 57 - IRQ4-IRQ7 relocated by DESQview
  46890. Note:    this is the default location for older versions; see INT 50"DESQview"
  46891.       for details of interrupt relocation
  46892. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  46893. ----------54---------------------------------
  46894. INT 54 - through 57 - IRQ4-IRQ7 relocated by IBM 3278 emulation control program
  46895. SeeAlso: INT 51"IBM 3278"
  46896. ----------54---------------------------------
  46897. INT 54 - through 57 - IRQ4-IRQ7 relocated by OS/2 v1.x
  46898. SeeAlso: INT 51"OS/2"
  46899. ----------58---------------------------------
  46900. INT 58 - IRQ8 relocated by DESQview 2.26+
  46901. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  46902. SeeAlso: INT 50"DESQview",INT 70
  46903. ----------58---------------------------------
  46904. INT 58 - IRQ0 relocated by DoubleDOS
  46905. SeeAlso: INT 08
  46906. ----------59---------------------------------
  46907. INT 59 - IRQ9 relocated by DESQview 2.26+
  46908. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  46909. SeeAlso: INT 50"DESQview",INT 71
  46910. ----------59---------------------------------
  46911. INT 59 - IRQ1 relocated by DoubleDOS
  46912. SeeAlso: INT 09
  46913. ----------59---------------------------------
  46914. INT 59 - GSS Computer Graphics Interface (GSS*CGI)
  46915.     DS:DX -> block of 5 array pointers
  46916. Return:    CF set on error
  46917.         AX = error code
  46918.     CF clear if successful
  46919.         AX = return code
  46920. Note:    INT 59 is the means by which GSS*CGI language bindings communicate with
  46921.       GSS*CGI device drivers and the GSS*CGI device driver controller.
  46922.     also used by the IBM Graphic Development Toolkit
  46923. ----------5A---------------------------------
  46924. INT 5A - IRQ10 relocated by DESQview 2.26+
  46925. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  46926. SeeAlso: INT 50"DESQview",INT 72
  46927. ----------5A---------------------------------
  46928. INT 5A - IRQ2 relocated by DoubleDOS
  46929. SeeAlso: INT 0A
  46930. ----------5A---------------------------------
  46931. INT 5A - Cluster adapter BIOS entry address
  46932.     ???
  46933. ----------5B---------------------------------
  46934. INT 5B - IRQ11 relocated by DESQview 2.26+
  46935. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  46936. SeeAlso: INT 50"DESQview",INT 73
  46937. ----------5B---------------------------------
  46938. INT 5B - IRQ3 relocated by DoubleDOS
  46939. SeeAlso: INT 0B
  46940. ----------5B---------------------------------
  46941. INT 5B - Used by cluster adapter
  46942. ----------5B---------------------------------
  46943. INT 5B - AT&T Starlan Extended NetBIOS (variable length names)
  46944.     ES:BX -> Network Control Block (see below)
  46945. Return: AL = status (see INT 5C)
  46946. SeeAlso: INT 5C
  46947.  
  46948. Format of Network Control Block
  46949. Offset    Size    Description
  46950.  00h    BYTE    ncb_command (see below)
  46951.  01h    BYTE    ncb_retcode
  46952.  02h    BYTE    ncb_lsn
  46953.  03h    BYTE    ncb_num
  46954.  04h    DWORD    -> ncb_buffer
  46955.  08h    WORD    ncb_length
  46956.  0Ah 16 BYTEs    ncb_callname
  46957.  1Ah 16 BYTEs    ncb_name
  46958.  2Ah    BYTE    ncb_rto
  46959.  2Bh    BYTE    ncb_sto
  46960.  2Ch    DWORD    -> ncb_post    /* int (far *ncb_post)(); */
  46961.  30h    BYTE    ncb_lana_num
  46962.  31h    BYTE    ncb_cmd_cplt
  46963.  32h    DWORD    -> ncb_vname
  46964.  36h    BYTE    ncb_vnamelen
  46965.  37h  9 BYTEs    ncb_reserve
  46966. Note: fields 00h-31h are the same as for a standard NetBIOS NCB (see INT 5C)
  46967.  
  46968. Values for ncb_command field same as for INT 5C, except
  46969.     70h    send net Break
  46970. ----------5B---------------------------------
  46971. INT 5B - Microsoft Network Transport Layer Interface
  46972. Note:    used by MS-NET for executing network commands
  46973. SeeAlso: INT 5C"NetBIOS"
  46974. ----------5B---------------------------------
  46975. INT 5B - used by Alloy NTNX
  46976. ----------5B---------------------------------
  46977. INT 5B - ISOLAN Multi Protocol Software
  46978.     ES:BX -> Transfer Control Block
  46979. Return: AL - status
  46980. Note:    this software interface allows multiple protocols/software packages
  46981.       to access a BICC 411x network card
  46982.  
  46983. Format of Transfer Control Block:
  46984. Offset    Type    Description
  46985.  00h    BYTE    command code
  46986.         B3h Status
  46987.         F2h Activate
  46988.         F3h Deactivate
  46989.         F4h Send Data
  46990.  01h    BYTE    command identity
  46991.  02h    BYTE    virtual circuit ID
  46992.  03h    WORD    buffer length
  46993.  05h    DWORD    buffer pointer
  46994.  09h    BYTE    expedited data flag
  46995.  0Ah    BYTE    cancelable flag
  46996.  0Bh 16 BYTEs    local network address
  46997.  1Bh 16 BYTEs    remote network address
  46998.  2Bh    DWORD    asynchronous notification routine
  46999.  30h    DWORD    local network number
  47000.  34h    DWORD    remote network number
  47001.  38h    BYTE    call timeout
  47002.  39h    BYTE    not used
  47003.  3Ah  8 BYTEs    reserved
  47004.  42h    BYTE    command code extension
  47005.  43h    WORD    Blue Book MAC type
  47006. ----------5C---------------------------------
  47007. INT 5C - IRQ12 relocated by DESQview 2.26+
  47008. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  47009. SeeAlso: INT 50"DESQview",INT 74
  47010. ----------5C---------------------------------
  47011. INT 5C - IRQ4 relocated by DoubleDOS
  47012. SeeAlso: INT 0C
  47013. ----------5C---------------------------------
  47014. INT 5C - NetBIOS INTERFACE
  47015.     ES:BX -> network control block (NCB) (see below)
  47016. Return: AL = status (see below)
  47017. Note:    Sytek PCnet card uses DMA 3.
  47018. SeeAlso: INT 2A/AH=01h,INT 2A/AH=04h,INT 5B
  47019.  
  47020. Values for NetBIOS status:
  47021.  00h successful
  47022.  01h bad buffer size
  47023.  03h invalid NETBIOS command
  47024.  05h timeout
  47025.  06h receive buffer too small
  47026.  07h No-ACK command failed
  47027.  08h bad session number
  47028.  09h LAN card out of memory
  47029.  0Ah session closed
  47030.  0Bh command has been cancelled
  47031.  0Dh name already exists
  47032.  0Eh local name table full
  47033.  0Fh name still in use, can't delete
  47034.  11h local session table full
  47035.  12h remote PC not listening
  47036.  13h bad NCB_NUM field
  47037.  14h no answer to CALL or no such remote
  47038.  15h name not in local name table
  47039.  16h duplicate name
  47040.  17h bad delete
  47041.  18h abnormal end
  47042.  19h name error, multiple identical names in use
  47043.  1Ah bad packet
  47044.  21h network card busy
  47045.  22h too many commands queued
  47046.  23h bad LAN card number
  47047.  24h command finished while cancelling
  47048.  26h command can't be cancelled
  47049.  30h name defined by another process (OS/2)
  47050.  34h NetBIOS environment not defined, must issue reset (OS/2)
  47051.  35h required operating system resources exhausted (OS/2)
  47052.  36h maximum applications exceeded (OS/2)
  47053.  37h no SAPs available for NetBIOS (OS/2)
  47054.  38h requested resources not available (OS/2)
  47055.  40h Lana System Error
  47056.  41h Lana Remote Hot Carrier
  47057.  42h Lana Local Hot Carrier
  47058.  43h Lana No Carrier Detected
  47059.  44h unusual network condition
  47060.  45h-4Dh hardware error
  47061.  4Eh token ring is broken
  47062.  4Fh token ring error
  47063.  50h adapter malfunction
  47064.  F7h error in explicit INITIALIZE
  47065.  F8h error in implicit OPEN
  47066.  F9h TOKREUI internal error
  47067.  FAh hardware adapter testing
  47068.  FBh NetBIOS emulator not found
  47069.  FCh OPEN or OPEN_SAP failure
  47070.  FDh unexpected adapter closure
  47071.  FFh NetBIOS busy (command pending)
  47072.  
  47073. Format of Network Control Block:
  47074. Offset    Size    Description
  47075.  00h    BYTE    command code (see below)
  47076.  01h    BYTE    return code
  47077.  02h    BYTE    local session number (LSN)
  47078.  03h    BYTE    "ncb_num" datagram table entry from ADD NAME
  47079.  04h    DWORD    -> I/O buffer
  47080.  08h    WORD    length of data in buffer
  47081.  0Ah 16 BYTEs    remote system to call
  47082.  1Ah 16 BYTEs    network name of local machine
  47083.  2Ah    BYTE    receive timeout in 1/2 seconds
  47084.  2Bh    BYTE    send timeout in 1/2 seconds
  47085.  2Ch    DWORD    -> FAR post handler    /* int (far *ncb_post)(); */
  47086.  30h    BYTE    network adapter number on which to execute command
  47087.         00h-03h IBM NetBIOS specs
  47088.         F0h-FFh Eicon NABios interface (see also INT 7B"Eicon")
  47089.  31h    BYTE    command completion code (see returned status above)
  47090.  32h 14 BYTEs    reserved for network card
  47091.  
  47092. Values for command code field in NCB (OR with 80h for non-waiting call):
  47093.  10h start session with NCB_NAME name (call)
  47094.  11h listen for call
  47095.  12h end session with NCB_NAME name (hangup)
  47096.  14h send data via NCB_LSN
  47097.  15h receive data from a session
  47098.  16h receive data from any session
  47099.  17h send multiple data buffers
  47100.  20h send unACKed message (datagram)
  47101.  21h receive datagram
  47102.  22h send broadcast datagram
  47103.  23h receive broadcast datagram
  47104.  30h add name to name table
  47105.  31h delete name from name table
  47106.  32h reset adapter card and tables
  47107.  33h get adapter status (see structure "astatus" below)
  47108.  34h status of all sessions for name (see structure "sstatus" below)
  47109.  35h cancel
  47110.  36h add group name to name table
  47111.  48h send data and receive data (LAN Manager NETBEUI.DOS)
  47112.  70h unlink from IBM remote program (no F0h function)
  47113.  71h send data without ACK
  47114.  72h send multiple buffers without ACK
  47115.  72h UngermannBass Register (conflicts with above function)
  47116.  73h UngermannBass SendNmc
  47117.  74h UngermannBass Callniu
  47118.  75h UngermannBass Calladdr
  47119.  76h UngermannBass Listenaddr
  47120.  77h UngermannBass SendPkt
  47121.  78h find name
  47122.  78h UngermannBass RcvPkt (conflicts with above function)
  47123.  79h token-ring protocol trace
  47124.  79h UngermannBass SendAttn (conflicts with above function)
  47125.  7Ah UngermannBass RcvAttn
  47126.  7Bh UngermannBass Listenniu
  47127.  7Ch UngermannBass RcvRaw
  47128.  7Dh UngermannBass SendNmc2
  47129.  
  47130. Format of structure "name":
  47131. Offset    Size    Description
  47132.  00h 16 BYTEs "nm_name" symbolic name
  47133.  10h    BYTE  "nm_num" number associated with name
  47134.  11h    BYTE  nm_status
  47135.  
  47136. Format of structure "astatus":
  47137. Offset    Size    Description
  47138.  00h  6 BYTEs as_id
  47139.  06h    BYTE  as_jumpers
  47140.  07h    BYTE  as_post
  47141.  08h    BYTE  as_major
  47142.  09h    BYTE  as_minor
  47143.  0Ah    WORD  as_interval
  47144.  0Ch    WORD  as_crcerr
  47145.  0Eh    WORD  as_algerr
  47146.  10h    WORD  as_colerr
  47147.  12h    WORD  as_abterr
  47148.  14h    DWORD as_tcount
  47149.  18h    DWORD as_rcount
  47150.  1Ch    WORD  as_retran
  47151.  1Eh    WORD  as_xresrc
  47152.  20h  8 BYTEs as_res0
  47153.  28h    WORD  as_ncbfree
  47154.  2Ah    WORD  as_ncbmax
  47155.  2Ch    WORD  as_ncbx
  47156.  2Eh  4 BYTEs as_res1
  47157.  32h    WORD  as_sespend
  47158.  34h    WORD  as_msp
  47159.  36h    WORD  as_sesmax
  47160.  38h    WORD  as_bufsize
  47161.  3Ah    WORD  as_names
  47162.  3Ch 16 name structures     as_name
  47163.  
  47164. Format of structure "sstatus":
  47165. Offset    Size    Description
  47166.  00h    BYTE    number of sessions being reported
  47167.  01h    BYTE    number of sessions with this name
  47168.  02h    BYTE    number of outstanding receive datagrams
  47169.  03h    BYTE    number of outstanding ReceiveAnys
  47170.  04h    var    session structures (see below)
  47171.  
  47172. Format of structure "session":
  47173. Offset    Size    Description
  47174.  00h    BYTE    local session number
  47175.  01h    BYTE    state
  47176.         01h listen pending
  47177.         02h call pending
  47178.         03h session established
  47179.         04h hangup pending
  47180.         05h hangup done
  47181.         06h session aborted
  47182.  02h 16 BYTEs    local name
  47183.  12h 16 BYTEs    remote name
  47184.  22h    BYTE    number of outstanding receives
  47185.  23h    BYTE    number of outstanding sends/chainsends
  47186. ----------5C---------------------------------
  47187. INT 5C - TOPS INTERFACE
  47188.     ES:BX -> Network Control Block
  47189. Note:    TOPS card uses DMA 1, 3 or none.
  47190. ----------5C---------------------------------
  47191. INT 5C - ATALK.SYS - AppleTalk INTERFACE
  47192.     DX:BX -> control block (see below)
  47193. Return: none
  47194. Notes:    this driver can use any interrupt from 5Ch to 70h
  47195.     the signature 'AppleTalk' appears 16 bytes prior to the interrupt
  47196.       handler; this serves as the installation check
  47197.  
  47198. Format of AppleTalk control block:
  47199. Offset    Size    Description
  47200.  00h    WORD    command code
  47201.         01h "AT_INIT"        initialize the driver
  47202.         02h "AT_KILL"
  47203.         03h "AT_GETNETINFO" get current network info incl init status
  47204.         04h "AT_GETCLOCKTICKS"
  47205.         05h "AT_STARTTIMER"
  47206.         06h "AT_RESETTIMER"
  47207.         07h "AT_CANCELTIMER"
  47208.         10h "LAP_INSTALL"
  47209.         11h "LAP_REMOVE"
  47210.         12h "LAP_WRITE"
  47211.         13h "LAP_READ"
  47212.         14h "LAP_CANCEL"
  47213.         20h "DDP_OPENSOCKET"
  47214.         21h "DDP_CLOSESOCKET"
  47215.         22h "DDP_WRITE"
  47216.         23h "DDP_READ"
  47217.         24h "DDP_CANCEL"
  47218.         30h "NBP_REGISTER"
  47219.         31h "NBP_REMOVE"
  47220.         32h "NBP_LOOKUP"
  47221.         33h "NBP_CONFIRM"
  47222.         34h "NBP_CANCEL"
  47223.         35h "ZIP_GETZONELIST"
  47224.         36h "ZIP_GETMYZONE"
  47225.         37h "ZIP_TAKEDOWN"
  47226.         38h "ZIP_BRINGUP"
  47227.         40h "ATP_OPENSOCKET"
  47228.         41h "ATP_CLOSESOCKET"
  47229.         42h "ATP_SENDREQUEST"
  47230.         43h "ATP_GETREQUEST"
  47231.         44h "ATP_SENDRESPONSE"
  47232.         45h "ATP_ADDRESPONSE"
  47233.         46h "ATP_CANCELTRANS"
  47234.         47h "ATP_CANCELRESPONSE"
  47235.         48h "ATP_CANCELREQUEST"
  47236.         50h "ASP_GETPARMS"
  47237.         51h "ASP_CLOSESESSION"
  47238.         52h "ASP_CANCEL"
  47239.         53h "ASP_INIT"
  47240.         54h "ASP_KILL"
  47241.         55h "ASP_GETSESSION"
  47242.         56h "ASP_GETREQUEST"
  47243.         57h "ASP_CMDREPLY"
  47244.         58h "ASP_WRTCONTINUE"
  47245.         59h "ASP_WRTREPLY"
  47246.         5Ah "ASP_CLOSEREPLY"
  47247.         5Bh "ASP_NEWSTATUS"
  47248.         5Ch "ASP_ATTENTION"
  47249.         5Dh "ASP_GETSTATUS"
  47250.         5Eh "ASP_OPENSESSION"
  47251.         5Fh "ASP_COMMAND"
  47252.         60h "ASP_WRITE"
  47253.         61h "ASP_GETATTENTION"
  47254.         70h "PAP_OPEN"
  47255.         71h "PAP_CLOSE"
  47256.         72h "PAP_READ"
  47257.         73h "PAP_WRITE"
  47258.         74h "PAP_STATUS"
  47259.         75h "PAP_REGNAME"
  47260.         76h "PAP_REMNAME"
  47261.         77h "PAP_INIT"
  47262.         78h "PAP_NEWSTATUS"
  47263.         79h "PAP_GETNEXTJOB"
  47264.         7Ah "PAP_KILL"
  47265.         7Bh "PAP_CANCEL"
  47266.         
  47267.         or with the following flags
  47268.         8000h start command then return
  47269.         4000h wait for interrupt service to complete
  47270.  02h    WORD    returned status
  47271.         0000h success (already initialized if func 01h)
  47272.  04h    DWORD    pointer to completion function
  47273.  08h    WORD    network number
  47274.  0Ah    BYTE    node ID
  47275. ---if general func (01h,03h), control block continues:
  47276.  0Bh    BYTE    "inf_abridge"
  47277.  0Ch    WORD    "inf_config"
  47278.  0Eh    DWORD    pointer to buffer
  47279.  12h    WORD    buffer size
  47280. ---if DDP function (20h-24h), control block continues:
  47281.  0Bh    BYTE    "ddp_addr_socket"
  47282.  0Ch    BYTE    "ddp_socket"
  47283.  0Dh    BYTE    "ddp_type"
  47284.  0Eh    DWORD    pointer to buffer
  47285.  12h    WORD    buffer size
  47286.  14h    BYTE    "ddp_chksum"
  47287. ---if Name Binding Protocol (30h-34h), control block continues:
  47288.  0Bh    BYTE    "nbp_addr_socket"
  47289.  0Ch    WORD    "nbp_toget"
  47290.  0Eh    DWORD    pointer to buffer
  47291.  12h    WORD    buffer size
  47292.  14h    BYTE    "nbp_interval"
  47293.  15h    BYTE    "nbp_retry"
  47294.  16h    DWORD    "nbp_entptr"
  47295. ---if AppleTalk Transaction Protocol (42h), control block continues:
  47296.  0Bh    BYTE    "atp_addr_socket"
  47297.  0Ch    WORD    "atp_socket"
  47298.  0Eh    DWORD    pointer to buffer
  47299.  12h    WORD    buffer size
  47300.  14h    BYTE    "atp_interval"
  47301.  15h    BYTE    "atp_retry"
  47302.  16h    BYTE    ATP flags
  47303.         bit 5: exactly one transaction
  47304.  17h    BYTE    "atp_seqbit"
  47305.  18h    BYTE    transaction ID
  47306.  19h  4 BYTEs    ATP user bytes
  47307.  1Dh    BYTE    number of BDS buffers
  47308.  1Eh    BYTE    number of BDS responses
  47309.  1Fh    DWORD    pointer to BDS buffers (see below)
  47310.  
  47311. Format of Name Binding Protocol Name-to-Address binding entries for NBP_LOOKUP:
  47312. Offset    Size    Description
  47313.  00h    WORD    "tup_address_network"
  47314.  02h    BYTE    "tup_address_notid"
  47315.  03h    BYTE    "tup_address_socket"
  47316.  04h    BYTE    "tup_enum"
  47317.  05h 99 BYTEs    name
  47318.  
  47319. Format of BDS entries:
  47320. Offset    Size    Description
  47321.  00h    DWORD    pointer to buffer
  47322.  04h    WORD    size of buffer
  47323.  06h    WORD    BDS data size
  47324.  08h  4 BYTEs    "bds_userbytes"
  47325. ----------5C---------------------------------
  47326. INT 5C - IBM 802.2 INTERFACE (LLC)
  47327.     ES:BX -> CCB
  47328. Return: none
  47329.  
  47330. Format of CCB:
  47331. Offset    Size    Description
  47332.  00h    BYTE    adapter
  47333.  01h    BYTE    command code
  47334.  02h    BYTE    return code
  47335.  03h    BYTE    work
  47336.  04h    DWORD    pointer to ???
  47337.  08h    DWORD    pointer to completion function???
  47338.  0Ch    DWORD    pointer to parameters???
  47339. ----------5C---------------------------------
  47340. INT 5C - $25 LAN - INSTALLATION CHECK
  47341. Notes:    current versions only check whether the vector is 0000h:0000h or not
  47342.     future versions are supposed to have the signature "NET" in the three
  47343.       bytes preceding the INT 5C handler
  47344. ----------5C04-------------------------------
  47345. INT 5C - $25 LAN - CHECK IF CONNECTION ALIVE
  47346.     AH = 04h
  47347.     AL = COM port (0 = default)
  47348.     CX = wait count in character times (should be at least 100)
  47349. Return: ZF set if link alive
  47350. ----------5D---------------------------------
  47351. INT 5D - IRQ13 relocated by DESQview 2.26+
  47352. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  47353. SeeAlso: INT 50"DESQview",INT 75
  47354. ----------5D---------------------------------
  47355. INT 5D - IRQ5 relocated by DoubleDOS
  47356. SeeAlso: INT 0D,INT 5C"DoubleDOS"
  47357. ----------5E---------------------------------
  47358. INT 5E - IRQ14 relocated by DESQview 2.26+
  47359. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  47360. SeeAlso: INT 50"DESQview",INT 76
  47361. ----------5E---------------------------------
  47362. INT 5E - IRQ6 relocated by DoubleDOS
  47363. SeeAlso: INT 0E,INT 5D"DoubleDOS"
  47364. ----------5F---------------------------------
  47365. INT 5F - IRQ15 relocated by DESQview 2.26+
  47366. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  47367. SeeAlso: INT 50"DESQview",INT 77
  47368. ----------5F---------------------------------
  47369. INT 5F - IRQ7 relocated by DoubleDOS
  47370. SeeAlso: INT 0F,INT 5E"DoubleDOS"
  47371. ----------5F00-------------------------------
  47372. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET VIDEO MODE
  47373.     AH = 00h
  47374.     AL = video mode
  47375.         07h text, system manager compliant
  47376.         20h 240x128 mono graphics, system manager compliant
  47377.         87h text, not system manager compliant
  47378.         A0h 240x128 mono graphics, not system manager compliant
  47379. Note:    the defaults after setting the mode to graphics are (0,0) logical
  47380.       origin, full-screen clip region, (0,0) pen location, pen color 1,
  47381.       pixel replacement FORCE, line type and fill mask all bits set
  47382. SeeAlso: INT 0F"HP 95LX",INT 10/AH=00h,INT 15/AX=4DD4h
  47383. ----------5F01-------------------------------
  47384. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET FILL MASK
  47385.     AH = 01h
  47386.     ES:DI -> 8-byte fill mask
  47387. Note:    the fill mask represents an 8x8 pixel box and is repeated as necessary
  47388.       when drawing filled rectangles; it is always aligned with the byte
  47389.       boundaries of video memory, regardless of the actual boundaries of
  47390.       the rectangle
  47391. SeeAlso: AH=02h
  47392. ----------5F02-------------------------------
  47393. INT 5F - HP 95LX GRAPHICS PRIMITIVES - GET CURRENT GRAPHICS INFORMATION
  47394.     AH = 02h
  47395.     ES:DI -> graphics info record (see below)
  47396. Return: DX:AX -> filled graphics info record (for return to high-level langs)
  47397. Format of graphics info record:
  47398. Offset    Size    Description
  47399.  00h    BYTE    current video mode
  47400.  01h    BYTE    default video mode
  47401.  02h    WORD    display width in pixels
  47402.  04h    WORD    display height in pixels
  47403.  06h    WORD    current pen column
  47404.  08h    WORD    current pen row
  47405.  0Ah    WORD    current line type
  47406.  0Ch    WORD    current replacement rule
  47407.  0Eh    WORD    current pen color
  47408.  10h    WORD    current leftmost column of clip region
  47409.  12h    WORD    current rightmost column of clip region
  47410.  14h    WORD    current topmost row of clip region
  47411.  16h    WORD    current bottommost row of clip region
  47412.  18h    WORD    current column of logical origin
  47413.  1Ah    WORD    current row of logical origin
  47414.  1Ch  8 BYTEs    current fill mask
  47415. ----------5F03-------------------------------
  47416. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET LOGICAL ORIGIN
  47417.     AH = 03h
  47418.     CX = column
  47419.     DX = row
  47420. SeeAlso: AH=04h
  47421. ----------5F04-------------------------------
  47422. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET CLIP REGION
  47423.     AH = 04h
  47424.     CX = left-most column
  47425.     DX = top-most row
  47426.     SI = right-most column
  47427.     DI = bottom-most row
  47428. SeeAlso: AH=03h
  47429. ----------5F05-------------------------------
  47430. INT 5F - HP 95LX GRAPHICS PRIMITIVES - DRAW RECTANGLE
  47431.     AH = 05h
  47432.     AL = fill type
  47433.         00h outline, using current line type and color
  47434.         01h solid, using current color
  47435.         02h pattern, using current fill mask and color
  47436.     DX,CX = row,column of other corner of rectangle
  47437. Note:    the rectangle is drawn starting at the current pen position
  47438. SeeAlso: AH=01h,AH=06h,AH=07h
  47439. ----------5F06-------------------------------
  47440. INT 5F - HP 95LX GRAPHICS PRIMITIVES - DRAW LINE
  47441.     AH = 06h
  47442.     DX,CX = row,column of end point
  47443. Note:    the line is drawn starting at the current pen position
  47444. SeeAlso: AH=05h,AH=07h
  47445. ----------5F07-------------------------------
  47446. INT 5F - HP 95LX GRAPHICS PRIMITIVES - PLOT POINT
  47447.     AH = 07h
  47448.     DX,CX = row,column of point
  47449. Note:    also sets pen position to the specified point
  47450. SeeAlso: AH=06h,AH=08h,AH=0Ch
  47451. ----------5F08-------------------------------
  47452. INT 5F - HP 95LX GRAPHICS PRIMITIVES - MOVE PEN
  47453.     AH = 08h
  47454.     DX,CX = row,column of new pen position
  47455. SeeAlso: AH=07h,AH=09h
  47456. ----------5F09-------------------------------
  47457. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET PEN COLOR
  47458.     AH = 09h
  47459.     AL = new color (00h = white, 01h = black)
  47460. SeeAlso: AH=08h,AH=0Ah,AH=0Bh
  47461. ----------5F0A-------------------------------
  47462. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET REPLACEMENT RULE
  47463.     AH = 0Ah
  47464.     AL = new replacement rule
  47465.         00h force
  47466.         01h AND
  47467.         02h OR
  47468.         03h XOR
  47469. SeeAlso: AH=01h,AH=09h,AH=0Bh
  47470. ----------5F0B-------------------------------
  47471. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET LINE TYPE
  47472.     AH = 0Bh
  47473.     CX = new line type
  47474. Note:    the line type specifies 16 bits which are repeated over and over while
  47475.       drawing the pixels of a line
  47476. SeeAlso: AH=09h,AH=0Ah
  47477. ----------5F0C-------------------------------
  47478. INT 5F - HP 95LX GRAPHICS PRIMITIVES - GET PIXEL
  47479.     AH = 0Ch
  47480.     DX,CX = row,column of pixel to read
  47481. Return: AX = pixel color
  47482. SeeAlso: AH=07h
  47483. ----------5F0D-------------------------------
  47484. INT 5F - HP 95LX GRAPHICS PRIMITIVES - GET IMAGE
  47485.     AH = 0Dh
  47486.     DX,CX = row,column of first corner
  47487.     BP,SI = row,column of second corner
  47488.     ES:DI -> image buffer (see below)
  47489. Note:    the specified corners are included in the saved image
  47490. SeeAlso: AH=0Eh
  47491.  
  47492. Format of image buffer:
  47493. Offset    Size    Description
  47494.  00h    WORD    number of planes (always 01h on HP 95LX)
  47495.  02h    WORD    number of bits/pixel (always 01h on HP 95LX)
  47496.  04h    WORD    image width in pixels
  47497.  06h    WORD    image height in pixels
  47498.  08h  N BYTEs    image data
  47499.         requires (WIDTH+7)/8 * HEIGHT bytes
  47500. ----------5F0E-------------------------------
  47501. INT 5F - HP 95LX GRAPHICS PRIMITIVES - PUT IMAGE
  47502.     AH = 0Eh
  47503.     AL = replacement rule
  47504.         bit 2: invert image before applying rule
  47505.         bits 1-0:  00 force
  47506.                01 AND
  47507.                10 OR
  47508.                11 XOR
  47509.     DX,CX = row,column of top left corner
  47510.     ES:DI -> image buffer (see AH=0Dh)
  47511. Note:    if the specified image does not fit completely on the screen, this call
  47512.       does nothing
  47513. SeeAlso: AH=0Dh
  47514. ----------5F0F-------------------------------
  47515. INT 5F - HP 95LX GRAPHICS PRIMITIVES - WRITE TEXT
  47516.     AH = 0Fh
  47517.     AL = rotate flag (if nonzero, rotate 90 degrees counter-clockwise)
  47518.     DX,CX = row,column of first character's top left corner
  47519.     ES:DI -> ASCIZ text
  47520. ----------60---------------------------------
  47521. INT 60 - reserved for user interrupt
  47522. ----------60---------------------------------
  47523. INT 60 - VIRUS - "Zero Bug" - INSTALLATION CHECK
  47524.    The "Zero Bug" virus hooks this vector.  It considers itself installed if
  47525.    offset 103h of the handler's segment contains the bytes "ZE"
  47526. SeeAlso: INT 32,INT 61"SEMTEX"
  47527. ----------60---------------------------------
  47528. INT 60 - Adaptec and OMTI controllers - DRIVE 0 DATA
  47529. SeeAlso: INT 61"Adaptec",INT 62"Adaptec",INT 63"Adaptec",INT 64"Adaptec"
  47530. Notes:    this vector stores the first four bytes of the parameter table for
  47531.       hard disk 0
  47532.     these vectors are used by the following Adaptec controllers:
  47533.         ACB 2370 A/B/C, ACB 2372 A/B/C, ACB 2333 A/B, 2322B-8, 2322B-16
  47534.     these vectors are NOT used by the following Adaptec controllers:
  47535.         ACB 2310, ACB 2312, ACB 2320D, ACB 2322D
  47536. ----------60---------------------------------
  47537. INT 60 - Atari Portfolio - USER INTERFACE FUNCTIONS
  47538.    supplies a number of subfunctions which perform such functions as drawing
  47539.    boxes and menus, and provide input line editing
  47540. SeeAlso: INT 61"Atari"
  47541. ----------60---------------------------------
  47542. INT 60 - PC-IPC API
  47543.     STACK:    DWORD    pointer to parameter block (see below)
  47544. Return: STACK:    unchanged
  47545. Notes:    PC-IPC is a shareware TSR by Donnelly Software Engineering which allows
  47546.       communication between independent programs
  47547.     INT 60 is the default, any interrupt vector may be used by specifying
  47548.       the vector on the commandline
  47549.  
  47550. Format of parameter block:
  47551. Offset    Size    Description
  47552.  00h    WORD    caller's ID
  47553.  02h    WORD    to ID
  47554.  04h    WORD    command code (see below)
  47555.  06h    WORD    returned status
  47556.         bit 0: unused
  47557.         bit 1: IPC enabled
  47558.         bit 2: IPC installed
  47559.         bit 3: error
  47560.         bit 4: message(s) available
  47561.  08h    WORD    returned error code (see below)
  47562.  0Ah    WORD    size of data
  47563.  0Ch    DWORD    pointer to data buffer
  47564.  
  47565. Values of command code:
  47566.  01h "IPC_CMND_INQUIRE"     inquire current status
  47567.         set status field, writes WORD to data buffer containing free
  47568.           message space in bytes, and sets the "size" field to the
  47569.           number of messages waiting
  47570.  02h "IPC_CMND_ENABLE"    reenable PC-IPC
  47571.         ignored unless called with the same ID that disabled PC-IPC
  47572.  03h "IPC_CMND_DISABLE" disable PC-IPC
  47573.  04h "IPC_CMND_INSTALL" reset PC-IPC
  47574.  06h "IPC_CMND_RDATA"    read data
  47575.         returns first message in data buffer, sets "size" to message
  47576.           length and "to ID" field to sender's ID
  47577.         if no messages available, bit 4 of status is cleared and "size"
  47578.           is set to zero
  47579.  07h "IPC_CMND_SDATA"    send data
  47580.  08h "IPC_CMND_REQID"    require user ID
  47581.         create a new recognized ID and return in "caller's ID" field
  47582.  09h "IPC_CMND_DELID"    cancel user ID
  47583.         delete caller's ID from pool of recognized IDs
  47584.  0Ah "IPC_CMND_RDATAW"    read data, wait if no messages available
  47585.  0Bh "IPC_CMND_VERS"    get PC-IPC version 
  47586.         string representing version returned in data buffer, "size"
  47587.           field set to length of string
  47588.  
  47589. Values for error code:
  47590.  00h    no error
  47591.  01h    invalid command or parameter
  47592.  02h    only process 0 can install/reset IPC
  47593.  03h    process can not install/reset IPC
  47594.  04h    IPC is not enabled
  47595.  05h    process can not disable IPC
  47596.  06h    invalid destination process ID
  47597.  07h    invalid sending process ID
  47598.  08h    invalid data destination
  47599.  09h    no more process IDs available
  47600.  0Ah    can not relinquish that process ID
  47601.  0Bh    message space is full
  47602.  0Ch    IPC is not installed
  47603. ----------60---------------------------------
  47604. INT 60 - Tangram Arbiter - API
  47605. Notes:    Arbiter may use any interrupt from 60h to 66h (parameterized)
  47606.     identified by string "@ARB_API" immediately following a short jump at
  47607.       the interrupt handler address
  47608.     Arbiter makes a PC disk look like a slow disk over an SNA link to an
  47609.       IBM mainframe
  47610. ----------60---------------------------------
  47611. INT 60 U - INTRSPY/CMDSPY API
  47612. Notes:    INTRSPY will hook the first available interrupt in the range 60h-67h.
  47613.     The installation check is to 
  47614.       a) determine that the handler is an IRET instruction
  47615.       b) the signature 0Dh "INTRSPY vN.NN" immediately precedes the handler
  47616.       If INTRSPY is installed, the DWORD immediately after the IRET stores
  47617.       its entry point.
  47618.     INTRSPY is a script-driven debugger included with the book
  47619.       _Undocumented_DOS_.
  47620.  
  47621. Call INTRSPY entry point with:
  47622.     AH = function
  47623.         00h ???
  47624.         01h set current directory (for use in reporting)
  47625.         ES:DI -> counted string containing directory name (max 79 char)
  47626.         02h set name of script file
  47627.         ES:DI -> counted string containing file name (max 79 chars)
  47628.         03h set script arguments
  47629.         ES:DI -> counted string containing arguments (max 79 chars)
  47630.         04h get directory set with function 01h
  47631.         ES:DI -> 80-byte buffer for directory name
  47632.         05h get name of script file
  47633.         ES:DI -> 80-byte buffer for script filename
  47634.         06h get script arguments
  47635.         ES:DI -> 80-byte buffer for script arguments
  47636.         07h get ???
  47637.         CL = 00h-15h specifies what to get
  47638.         ES:DI -> WORD to be set with desired value on return
  47639.         08h get ???
  47640.         ES:DI -> WORD to be set with returned value
  47641.         09h get ???
  47642.         ES:DI -> WORD to be set with returned value
  47643.         0Bh store code for interrupt handler???
  47644.         ES:DI -> data
  47645.         CX = number of bytes
  47646.         0Ch ???
  47647.         ES:DI -> ???
  47648.         0Dh get ???
  47649.         ES:DI -> BYTE to be set with returned value
  47650.         0Eh set ??? flag
  47651.         0Fh clear ??? flag
  47652.         10h ???
  47653.         Return: AL = 04h or 05h if failed
  47654.         11h ???
  47655.         Return: AL = 05h if failed
  47656.         12h get ???
  47657.         ES:DI -> buffer
  47658.         Return: CX = number of bytes returned in buffer
  47659.         13h ???
  47660. Return: AH = 00h
  47661.     AL = status
  47662.         00h successful
  47663.         01h invalid function
  47664.         02h ???
  47665.         03h ???
  47666.         04h ???
  47667.         05h ???
  47668. ----------60---------------------------------
  47669. INT 60 U - PC/370 v4.2 - ???
  47670.     ???
  47671. Return: ???
  47672. Notes:    PC/370 is an IBM 370 emulator by Donald S. Higgins
  47673.     this is the default interrupt, however the documentation includes
  47674.       instructions for patching the system for another interrupt
  47675. SeeAlso: INT 2F/AX=7F24h,INT DC"PC/370"
  47676. ----------60---------------------------------
  47677. INT 60 - JPI TopSPEED Modula-2 v1 - PROCEDURE ENTRY TRAP
  47678. SeeAlso: INT 61"JPI"
  47679. ----------60---------------------------------
  47680. INT 60 - FTP Packet Driver - PC/TCP Packet Driver Specification
  47681. Notes:    The handler for the interrupt will start with a 3-byte jump 
  47682.       instruction, followed by the ASCIZ string "PKT DRVR" (the
  47683.       terminating NUL is significant).
  47684.     To find the interrupt being used by the driver, an application should
  47685.       scan through interrupt vectors 60h to 80h (20h through FFh for
  47686.       v1.10+ of the specification) until it finds one with the "PKT DRVR"
  47687.       string.
  47688.     AH values of 80h to FFh have been reserved for user-defined additions.
  47689. ----------60----DI0100-----------------------
  47690. INT 60 u - HP 95LX System Manager - WAIT FOR EVENT
  47691.     DI = 0100h
  47692.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47693.         DWORD    pointer to event record (see below)
  47694. Return: event record filled
  47695.     STACK unchanged
  47696. Note:    this call will timeout after about 500ms
  47697. SeeAlso: INT 15/AX=4DD4h,INT 60/DI=0101h,INT 61"HP 95LX",INT 62"HP 95LX"
  47698.  
  47699. Format of event record:
  47700. Offset    Size    Description
  47701.  00h    WORD    event type
  47702.         00h no events
  47703.         01h keystroke available
  47704.         02h Ctrl-Break
  47705.         03h reactivation (always follows deactivation event)
  47706.         04h about to deactivate (sleep)
  47707.             next get-event call will not return until reactivated
  47708.         05h forced application termination
  47709.         06h 1-2-3 bridge service request (only given to     1-2-3)
  47710.         07h request to grow
  47711.         08h request to shrink
  47712.         09h application's alarm expired
  47713.         0Ah daily chance to set an alarm
  47714.         0Bh system date or time has been changed
  47715.  02h    WORD    ASCII code page 850 translation of keystroke
  47716.         or grow/shrink amount in paragraphs or 0000h if error
  47717.         or alarm expiration data
  47718.  04h    BYTE    scan code from BIOS
  47719.  05h    BYTE    shift key states at time keystroke is retrieved
  47720.  06h    WORD    LICS translation of keystroke
  47721.  08h    BYTE    function key number (1-2-3 only)
  47722.  09h    DWORD    pointer to 1-2-3 bridge record (see INT 60/DI=0104h)
  47723.         or pointer to time change structure (see below)
  47724. Note:    if the System Manager is waiting the conclusion of a bridge service
  47725.       or grow/shrink call and the event type field is set to FFFFh on
  47726.       entry, the SysMgr will resume
  47727.  
  47728. Format of time change structure:
  47729. Offset    Size    Description
  47730.  00h    WORD    old year
  47731.  02h    BYTE    old month
  47732.  03h    BYTE    old date
  47733.  04h    BYTE    old day
  47734.  05h    BYTE    old hour
  47735.  06h    BYTE    old minute
  47736.  07h    BYTE    old second
  47737.  08h    BYTE    old hundredth of a second
  47738.  09h  9 BYTEs    new time in same format as old time
  47739. ----------60----DI0101-----------------------
  47740. INT 60 u - HP 95LX System Manager - CHECK FOR EVENT
  47741.     DI = 0101h
  47742.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47743.         DWORD pointer to event record (INT 60/DI=0100h)
  47744. Return: event record filled
  47745.     STACK unchanged
  47746. Note:    this call returns immediately if no event is available
  47747. SeeAlso: INT 60/DI=0100h
  47748. ----------60----DI0102-----------------------
  47749. INT 60 u - HP 95LX System Manager - "SH_STATUS"
  47750.     DI = 0102h
  47751.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47752. Return: ???
  47753.     STACK unchanged
  47754. ----------60----DI0104-----------------------
  47755. INT 60 u - HP 95LX System Manager - LOTUS 1-2-3 BRIDGE SERVICES
  47756.     DI = 0104h
  47757.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47758.         DWORD pointer to bridge record (see below)
  47759. Return: ???
  47760.     STACK unchanged
  47761.  
  47762. Format of bridge record:
  47763. Offset    Size    Description
  47764.  00h    WORD    function code
  47765.         00h test
  47766.         01h get range
  47767.         02h "GETRANGE_ADDR"
  47768.         03h "SETRANGE_ADDR"
  47769.         04h "GETRANGE_DATA"
  47770.         05h "SETRANGE_DATA"
  47771.         06h recalculate
  47772.         07h get cursor
  47773.         08h set cursor
  47774.         09h redisplay
  47775.         0Ah cell type
  47776.         0Bh "CALCTYPE"
  47777.  02h    WORD    return code from 1-2-3
  47778.  04h 16 BYTEs    ASCII range name
  47779.  14h    WORD    start column of range
  47780.  16h    WORD    start row of range
  47781.  18h    WORD    end column of range
  47782.  1Ah    WORD    end row of range
  47783.  1Ch    WORD    order in which data is placed in buffer
  47784.  1Eh    WORD    buffer size
  47785.  20h    WORD    offset within bridge record's segment of buffer for cell data
  47786. ----------60----DI0105-----------------------
  47787. INT 60 u - HP 95LX System Manager - FLUSH KEYBOARD BUFFER
  47788.     DI = 0105h
  47789.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47790. Return: ???
  47791.     STACK unchanged
  47792. ----------60----DI0106-----------------------
  47793. INT 60 u - HP 95LX System Manager - YIELD CPU
  47794.     DI = 0106h
  47795.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47796.         DWORD pointer to ???
  47797. Return: ???
  47798.     STACK unchanged
  47799. SeeAlso: INT 15/AX=1000h,INT 2F/AX=1680h
  47800. ----------60----DI0107-----------------------
  47801. INT 60 u - HP 95LX System Manager - "NO_FINI" - REFUSE TERMINATION REQUEST
  47802.     DI = 0107h
  47803.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47804.         DWORD pointer to ???
  47805. Return: ???
  47806.     STACK unchanged
  47807. SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  47808. ----------60----DI0200-----------------------
  47809. INT 60 u - HP 95LX System Manager - SETUP MENU
  47810.     DI = 0200h
  47811.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47812.         DWORD    pointer to menu data (see below)
  47813.         DWORD    pointer to ???
  47814.         WORD    number of items on menu???
  47815.         WORD    ???
  47816.         DWORD    pointer to ???
  47817.         WORD    ???
  47818.         DWORD    pointer to ???
  47819. Return: ???
  47820.     STACK unchanged
  47821. SeeAlso: INT 15/AX=4DD4h,INT 60/DI=0201h,INT 60/DI=0203h,INT 60/DI=0205h
  47822.  
  47823. Format of menu data:
  47824. Offset    Size    Description
  47825.  00h 80 BYTEs    first line of menu text
  47826.  50h 80 BYTEs    second line of menu text
  47827.  A0h 80 BYTEs    third line of menu text
  47828.  F0h    WORD    number of keywords
  47829.  F2h    WORD    index of currently highlighted keyword or FFFFh
  47830.  F4h    WORD    single prompt on top line if nonzero
  47831.  F6h 20 BYTEs    which line each of 20 keywords is located on
  47832. 10Ah 20 BYTEs    offset of each of 20 keywords within its line
  47833. 11Eh 20 BYTEs    length of each of 20 keywords
  47834. 132h 20 BYTEs    first letter of each of 20 keywords
  47835. 146h 20 WORDs    offsets of long prompts for each of 20 keywords
  47836. ----------60----DI0201-----------------------
  47837. INT 60 u - HP 95LX System Manager - DISPLAY OR REDISPLAY MENU
  47838.     DI = 0201h
  47839.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47840.         DWORD    pointer to menu data (see INT 60/DI=0200h)
  47841. Return: ???
  47842.     STACK unchanged
  47843. SeeAlso: INT 60/DI=0200h,INT 60/DI=0202h,INT 60/DI=0206h
  47844. ----------60----DI0202-----------------------
  47845. INT 60 u - HP 95LX System Manager - "MENU_ON" - ENABLE PROCESSING OF MENU
  47846.     DI = 0202h
  47847.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47848.         DWORD    pointer to menu data (see INT 60/DI=0200h)
  47849. Return: ???
  47850.     STACK unchanged
  47851. SeeAlso: INT 60/DI=0200h,INT 60/DI=0201h,INT 60/DI=0203h
  47852. ----------60----DI0203-----------------------
  47853. INT 60 u - HP 95LX System Manager - REMOVE MENU
  47854.     DI = 0203h
  47855.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47856.         DWORD    pointer to menu data (see INT 60/DI=0200h)
  47857. Return: ???
  47858.     STACK unchanged
  47859. SeeAlso: INT 60/DI=0201h,INT 60/DI=0202h,INT 60/DI=0204h,INT 60/DI=0208h
  47860. ----------60----DI0204-----------------------
  47861. INT 60 u - HP 95LX System Manager - LET SYSTEM MANAGER HANDLE MENU KEYSTROKE
  47862.     DI = 0204h
  47863.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47864.         DWORD    pointer to menu data (see INT 60/DI=0200h)
  47865.         WORD    keystroke
  47866.         DWORD    pointer to WORD to receive selection number
  47867. Return: buffer for selection number filled with index of selected menu item or
  47868.       FFFFh if no final selection yet
  47869.     STACK unchanged
  47870. SeeAlso: INT 60/DI=0200h,INT 60/DI=0202h,INT 60/DI=0207h
  47871. ----------60----DI0205-----------------------
  47872. INT 60 u - HP 95LX System Manager - INITIALIZE FILE SELECTION MENU
  47873.     DI = 0205h
  47874.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47875.         DWORD    pointer to file menu structure (see below)
  47876.         DWORD    pointer to edit record (see INT 60/DI=0400h)
  47877.         DWORD    pointer to wildcard filespec for initial file list
  47878.         WORD    row???
  47879.         WORD    column???
  47880. Return: ???
  47881.     STACK unchanged
  47882. SeeAlso: INT 60/DI=0200h,INT 60/DI=0206h,INT 60/DI=0208h
  47883.  
  47884. Format of file menu structure:
  47885. Offset    Size    Description
  47886.  00h    DWORD    pointer to ASCIZ base directory name
  47887.  04h    DWORD    pointer to ASCIZ file pattern (wildcard filespec)
  47888.  08h    DWORD    pointer to file list workspace, at least 1024 bytes (see below)
  47889.  0Ch    WORD    size of file list workspace in bytes
  47890.  0Eh    WORD    starting row (-3 is topmost, 0 is first non-"reserved" line)
  47891.  10h    WORD    starting column
  47892.  12h    WORD    number of lines
  47893.  14h    WORD    number of columns
  47894.  16h    WORD    number of files displayed on each line
  47895. ---the remaining fields are initialized by the System Manager---
  47896.  18h    WORD    0000h if first edit character, else multiline
  47897.  1Ah    WORD    number of files in file list
  47898.  1Ch    WORD    max files workspace has room for
  47899.  1Eh    WORD    file at top of list
  47900.  20h    WORD    index of file to highlight
  47901.  22h    WORD    index of file to unhighlight
  47902.  24h    WORD    current focus (01h FMENU, 02h EDIT)
  47903.  
  47904. Format of file list workspace entry:
  47905. Offset    Size    Description
  47906.  00h    BYTE    file attributes
  47907.  01h    WORD    file time (see INT 21/AX=5700h)
  47908.  03h    WORD    file date (see INT 21/AX=5700h)
  47909.  05h    DWORD    file size
  47910.  09h 13 BYTEs    ASCIZ filename
  47911. ----------60----DI0206-----------------------
  47912. INT 60 u - HP 95LX System Manager - DISPLAY/REDISPLAY FILE SELECTION MENU
  47913.     DI = 0206h
  47914.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47915.         DWORD    pointer to file menu structure (see INT 60/DI=0205h)
  47916.         DWORD    pointer to edit record (see INT 60/DI=0400h)
  47917. Return: ???
  47918.     STACK unchanged
  47919. SeeAlso: INT 60/DI=0205h
  47920. ----------60----DI0207-----------------------
  47921. INT 60 u - HP 95LX System Manager - LET SYSMGR PROCESS FILE SEL MENU KEYSTROKE
  47922.     DI = 0207h
  47923.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47924.         DWORD    pointer to file menu structure (see INT 60/DI=0205h)
  47925.         DWORD    pointer to edit record (see INT 60/DI=0400h)
  47926.         WORD    keystroke
  47927. Return: AX = status
  47928.         0000h keystroke processed, call INT 60/DI=0206h to refresh menu
  47929.         0001h redisplay application area before refreshing menu
  47930.         0002h user confirmed selection, filename is in edit record's buffer
  47931.         0003h user aborted menu
  47932.         FFFBh bad filename
  47933.         FFFCh bad directory
  47934.         FFFDh bad drive
  47935.         FFFEh unknown keystroke
  47936.         FFFFh keystroke known but invalid in current context
  47937.     STACK unchanged
  47938. SeeAlso: INT 60/DI=0205h,INT 60/DI=0208h
  47939. ----------60----DI0208-----------------------
  47940. INT 60 u - HP 95LX System Manager - REMOVE FILE SELECTION MENU
  47941.     DI = 0208h
  47942.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47943.         DWORD    pointer to file menu structure (see INT 60/DI=0205h)
  47944.         DWORD    pointer to edit record (see INT 60/DI=0400h)
  47945. Return: ???
  47946.     STACK unchanged
  47947. SeeAlso: INT 15/AX=4DD4h,INT 60/DI=0205h,INT 60/DI=0206h
  47948. ----------60----DI0300-----------------------
  47949. INT 60 u - HP 95LX System Manager - DISPLAY STRING
  47950.     DI = 0300h
  47951.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47952.         WORD    starting row (-3 is topmost, 0 is first user line)
  47953.         WORD    starting column
  47954.         DWORD    pointer to string
  47955.         WORD    length of string
  47956.         WORD    display style: 0000h normal, 0001h reverse video
  47957.         WORD    "OSTYLE"
  47958. Return: ???
  47959.     STACK unchanged
  47960. SeeAlso: INT 60/DI=0F03h,INT 60/DI=1005h
  47961. ----------60----DI0301-----------------------
  47962. INT 60 u - HP 95LX System Manager - CLEAR PORTION OF SCREEN
  47963.     DI = 0301h
  47964.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47965.         WORD    starting row (-3 is topmost, 0 is first user line)
  47966.         WORD    starting column
  47967.         WORD    number of rows
  47968.         WORD    number of columns
  47969. Return: ???
  47970.     STACK unchanged
  47971. SeeAlso: INT 60/DI=0302h,INT 60/DI=1005h
  47972. ----------60----DI0302-----------------------
  47973. INT 60 u - HP 95LX System Manager - SCROLL PORTION OF SCREEN
  47974.     DI = 0302h
  47975.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47976.         WORD    starting row???
  47977.         WORD    starting column???
  47978.         WORD    height of scroll region???
  47979.         WORD    width of scroll region???
  47980.         WORD    number of lines to scroll region???
  47981. Return: ???
  47982.     STACK unchanged
  47983. SeeAlso: INT 60/DI=0301h
  47984. ----------60----DI0303-----------------------
  47985. INT 60 u - HP 95LX System Manager - SCREEN SERVICE "M_XCHG"
  47986.     DI = 0303h
  47987.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47988.         WORD    ???
  47989.         WORD    ???
  47990.         WORD    ???
  47991.         WORD    ???
  47992.         DWORD    pointer to ???
  47993. Return: ???
  47994.     STACK unchanged
  47995. ----------60----DI0304-----------------------
  47996. INT 60 u - HP 95LX System Manager - SCREEN SERVICE "M_CHRATTR"
  47997.     DI = 0304h
  47998.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  47999.         DWORD    pointer to ???
  48000.         WORD    ???
  48001. Return: ???
  48002.     STACK unchanged
  48003. ----------60----DI0305-----------------------
  48004. INT 60 u - HP 95LX System Manager - SCREEN SERVICE "M_CHRRVRT"
  48005.     DI = 0305h
  48006.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48007.         WORD    ???
  48008.         WORD    ???
  48009.         DWORD    pointer to ???
  48010.         WORD    ???
  48011. Return: ???
  48012.     STACK unchanged
  48013. ----------60----DI0307-----------------------
  48014. INT 60 u - HP 95LX System Manager - SCREEN SERVICE "M_CHRINV"
  48015.     DI = 0307h
  48016.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48017.         WORD    ???
  48018.         WORD    ???
  48019.         WORD    ???
  48020. Return: ???
  48021.     STACK unchanged
  48022. ----------60----DI0308-----------------------
  48023. INT 60 u - HP 95LX System Manager - SCREEN SERVICE "M_ROWS_COLS"
  48024.     DI = 0308h
  48025.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48026. Return: ???
  48027.     STACK unchanged
  48028. ----------60----DI0309-----------------------
  48029. INT 60 u - HP 95LX System Manager - SET SCREEN (VIDEO???) MODE
  48030.     DI = 0309h
  48031.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48032.         WORD    new mode
  48033. Return: ???
  48034.     STACK unchanged
  48035. ----------60----DI030A-----------------------
  48036. INT 60 u - HP 95LX System Manager - GET SCREEN (VIDEO???) MODE
  48037.     DI = 030Ah
  48038.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48039. Return: ???
  48040.     STACK unchanged
  48041. ----------60----DI030B-----------------------
  48042. INT 60 u - HP 95LX System Manager - SET CURSOR POSITION
  48043.     DI = 030Bh
  48044.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48045.         WORD    row (-3 is topmost, 0 is first non-reserved line)
  48046.         WORD    column
  48047. Return: ???
  48048.     STACK unchanged
  48049. Note:    cursor is hidden if the specified position is not on the physical
  48050.       display
  48051. SeeAlso: INT 10/AH=02h,INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  48052. ----------60----DI0400-----------------------
  48053. INT 60 u - HP 95LX System Manager - "EDIT_INIT"
  48054.     DI = 0400h
  48055.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48056.         DWORD    pointer to edit record (see below)
  48057.         DWORD    pointer to string to be edited
  48058.         WORD    initial length of string being edited
  48059.         WORD    maximum length of edited string
  48060.         WORD    row of edit field
  48061.         WORD    leftmost column of edit field
  48062. Return: ???
  48063.     STACK unchanged
  48064.  
  48065. Format of edit record:
  48066. Offset    Size    Description
  48067.  00h    WORD    current length of edit buffer
  48068.  02h    BYTE    flag for special processing on first character
  48069.  03h    BYTE    flags
  48070.         bit 0: tab handling
  48071.  04h    WORD    editing in prompt window?
  48072.  06h    DWORD    pointer to top line of prompt window message
  48073.  0Ah    WORD    length of top line of prompt
  48074.  0Ch    DWORD    pointer to second line of prompt window message
  48075.  10h    WORD    length of second line of prompt
  48076.  12h 80 BYTEs    workspace for editing
  48077.  62h  2 WORDs    line array needed for multi-line editing
  48078.  66h 36 BYTEs    multi-line edit record (see below)
  48079.  8Ah    WORD    displayable columns
  48080.  
  48081. Format of multi-line edit record:
  48082. Offset    Size    Description
  48083.  00h    DWORD    pointer to user-supplied edit buffer
  48084.  04h    WORD    length of edit buffer
  48085.  06h    WORD    current cursor position
  48086.  08h    WORD    starting row of edit area (-3 is topmost, 0 is first user line)
  48087.  0Ah    WORD    starting column of edit area
  48088.  0Ch    WORD    height of edit area
  48089.  0Eh    WORD    width of edit area
  48090.  10h    WORD    current top row (-3 is topmost, 0 is first user line)
  48091.  12h    WORD    number of rows displayable
  48092.  14h    BYTE    cursor column
  48093.  15h    BYTE    01h if buffer has been modified
  48094.  16h    BYTE    first displayable column (ticker fields only)
  48095.  17h    BYTE    01h if wordwrap enabled, FFh if ticker field
  48096.  18h    DWORD    pointer to array of line starts (at least one bigger than edit
  48097.           area is high)
  48098.  1Ch    BYTE    currently marking?
  48099.  1Dh    BYTE    flag
  48100.  1Eh    WORD    offset of mark start
  48101.  20h    WORD    offset of mark end (inclusive)
  48102.  22h    WORD    displayable columns
  48103. ----------60----DI0401-----------------------
  48104. INT 60 u - HP 95LX System Manager - EDIT ON TOP LINE
  48105.     DI = 0401h
  48106.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48107.         DWORD    pointer to edit record (see INT 60/DI=0400h)
  48108.         DWORD    pointer to string to edit
  48109.         WORD    initial length of string being edited
  48110.         WORD    maximum length of edited string
  48111.         DWORD    pointer to first line of prompt
  48112.         WORD    length of first line
  48113.         DWORD    pointer to second line of prompt
  48114.         WORD    length of second line
  48115. Return: ???
  48116.     STACK unchanged
  48117. ----------60----DI0402-----------------------
  48118. INT 60 u - HP 95LX System Manager - DISPLAY OR REDISPLAY EDIT FIELD
  48119.     DI = 0402h
  48120.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48121.         DWORD    pointer to edit record (see INT 60/DI=0400h)
  48122. Return: ???
  48123.     STACK unchanged
  48124. ----------60----DI0403-----------------------
  48125. INT 60 u - HP 95LX System Manager - LET SYSTEM MANAGER PROCESS EDITING KEYSTROK
  48126.     DI = 0403h
  48127.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48128.         DWORD    pointer to edit record (see INT 60/DI=0400h)
  48129.         WORD    keystroke
  48130.         DWORD    pointer to WORD buffer for result code
  48131. Return: result code buffer filled with 0001h if editing complete
  48132.     STACK unchanged
  48133. ----------60----DI0404-----------------------
  48134. INT 60 u - HP 95LX System Manager - "MDIT_INI"
  48135.     DI = 0404h
  48136.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48137.         DWORD    pointer to ???
  48138.         WORD    ???
  48139.         WORD    ???
  48140.         WORD    ???
  48141.         WORD    ???
  48142.         DWORD    pointer to ???
  48143.         WORD    ???
  48144.         WORD    ???
  48145.         WORD    ???
  48146.         DWORD    pointer to ???
  48147. Return: ???
  48148.     STACK unchanged
  48149. ----------60----DI0405-----------------------
  48150. INT 60 u - HP 95LX System Manager - "MDIT_DIS"
  48151.     DI = 0405h
  48152.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48153.         DWORD    pointer to ???
  48154. Return: ???
  48155.     STACK unchanged
  48156. ----------60----DI0406-----------------------
  48157. INT 60 u - HP 95LX System Manager - "MDIT_KEY"
  48158.     DI = 0406h
  48159.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48160.         DWORD    pointer to ???
  48161.         WORD    ???
  48162. Return: ???
  48163.     STACK unchanged
  48164. ----------60----DI0407-----------------------
  48165. INT 60 u - HP 95LX System Manager - "MDIT_FIL"
  48166.     DI = 0407h
  48167.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48168.         DWORD    pointer to ???
  48169.         DWORD    pointer to ???
  48170. Return: ???
  48171.     STACK unchanged
  48172. ----------60----DI0408-----------------------
  48173. INT 60 u - HP 95LX System Manager - "MDIT_MARK"
  48174.     DI = 0408h
  48175.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48176.         DWORD    pointer to ???
  48177. Return: ???
  48178.     STACK unchanged
  48179. ----------60----DI0409-----------------------
  48180. INT 60 u - HP 95LX System Manager - "MDIT_UNMARK"
  48181.     DI = 0409h
  48182.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48183.         DWORD    pointer to ???
  48184. Return: ???
  48185.     STACK unchanged
  48186. ----------60----DI040A-----------------------
  48187. INT 60 u - HP 95LX System Manager - "MDIT_CUTMARK"
  48188.     DI = 040Ah
  48189.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48190.         DWORD    pointer to ???
  48191. Return: ???
  48192.     STACK unchanged
  48193. ----------60----DI040B-----------------------
  48194. INT 60 u - HP 95LX System Manager - "MDIT_INS_STR"
  48195.     DI = 040Bh
  48196.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48197.         DWORD    pointer to ???
  48198.         DWORD    pointer to ???
  48199.         WORD    ???
  48200. Return: ???
  48201.     STACK unchanged
  48202. SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  48203. ----------60----DI0500-----------------------
  48204. INT 60 u - HP 95LX System Manager - OPEN FILE
  48205.     DI = 0500h
  48206.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48207.         DWORD    pointer to file state record (see below)
  48208.         DWORD    pointer to filename
  48209.         WORD    length of filename
  48210.         WORD    ???
  48211.         WORD    suppress buffering if nonzero
  48212. Return: AX = status
  48213.     STACK unchanged
  48214. SeeAlso: INT 60/DI=0501h,INT 60/DI=0502h,INT 60/DI=0508h
  48215.  
  48216. Format of file state record:
  48217. Offset    Size    Description
  48218.  00h    WORD    DOS file handle
  48219.  02h    WORD    flags
  48220.         bit 0: buffer contents valid
  48221.         bit 1: buffer is dirty and must be written
  48222.         bit 2: unbuffered I/O
  48223.         bit 3: file is a character device
  48224.  04h    DWORD    current DOS physical file offset (FFFFFFFFh if unknown)
  48225.  08h    DWORD    DOS file offset of start of buffer
  48226.  0Ch    DWORD    effective file offset as seen by caller
  48227.  10h    WORD    number of bytes in file buffer
  48228. ---buffered I/O only---
  48229.  12h 512 BYTEs    file buffer
  48230. ----------60----DI0501-----------------------
  48231. INT 60 u - HP 95LX System Manager - OPEN FILE IN READ-ONLY MODE
  48232.     DI = 0501h
  48233.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48234.         DWORD    pointer to file state record (see INT 60/DI=0500h)
  48235.         DWORD    pointer to filename
  48236.         WORD    length of filename
  48237.         WORD    ???
  48238.         WORD    suppress buffering if nonzero
  48239. Return: AX = status
  48240.     STACK unchanged
  48241. SeeAlso: INT 60/DI=0500h
  48242. ----------60----DI0502-----------------------
  48243. INT 60 u - HP 95LX System Manager - CREATE NEW FILE
  48244.     DI = 0502h
  48245.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48246.         DWORD    pointer to file state record (see INT 60/DI=0500h)
  48247.         DWORD    pointer to filename
  48248.         WORD    length of filename
  48249.         WORD    ???
  48250.         WORD    suppress buffering if nonzero
  48251. Return: AX = status
  48252.     STACK unchanged
  48253. SeeAlso: INT 60/DI=0500h,INT 60/DI=0503h
  48254. ----------60----DI0503-----------------------
  48255. INT 60 u - HP 95LX System Manager - CREATE OR TRUNCATE FILE
  48256.     DI = 0503h
  48257.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48258.         DWORD    pointer to file state record (see INT 60/DI=0500h)
  48259.         DWORD    pointer to filename
  48260.         WORD    length of filename
  48261.         WORD    ???
  48262.         WORD    suppress buffering if nonzero
  48263. Return: AX = status
  48264.     STACK unchanged
  48265. SeeAlso: INT 60/DI=0502h
  48266. ----------60----DI0504-----------------------
  48267. INT 60 u - HP 95LX System Manager - READ FROM FILE
  48268.     DI = 0504h
  48269.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48270.         DWORD    pointer to file state record (see INT 60/DI=0500h)
  48271.         DWORD    pointer to data buffer
  48272.         WORD    number of bytes to read
  48273.         DWORD    pointer to WORD in which to return actual bytes read
  48274. Return: ???
  48275.     STACK unchanged
  48276. SeeAlso: INT 60/DI=0505h
  48277. ----------60----DI0505-----------------------
  48278. INT 60 - HP 95LX System Manager - WRITE TO FILE
  48279.     DI = 0505h
  48280.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48281.         DWORD    pointer to file state record (see INT 60/DI=0500h)
  48282.         DWORD    pointer to data
  48283.         WORD    length of data
  48284. Return: AX = status
  48285.     STACK unchanged
  48286. SeeAlso: INT 60/DI=0504h
  48287. ----------60----DI0506-----------------------
  48288. INT 60 u - HP 95LX System Manager - SET FILE POSITION
  48289.     DI = 0506h
  48290.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48291.         DWORD    pointer to file state record (see INT 60/DI=0500h)
  48292.         WORD    ???
  48293.         WORD    ???
  48294. Return: ???
  48295.     STACK unchanged
  48296. SeeAlso: INT 60/DI=0507h
  48297. ----------60----DI0507-----------------------
  48298. INT 60 u - HP 95LX System Manager - GET FILE POSITION
  48299.     DI = 0507h "M_TELL"
  48300.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48301.         DWORD    pointer to file state record (see INT 60/DI=0500h)
  48302.         DWORD    pointer to DWORD buffer for file position???
  48303. Return: ???
  48304.     STACK unchanged
  48305. SeeAlso: INT 60/DI=0506h
  48306. ----------60----DI0508-----------------------
  48307. INT 60 u - HP 95LX System Manager - CLOSE FILE
  48308.     DI = 0508h
  48309.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48310.         DWORD    pointer to file state record (see INT 60/DI=0500h)
  48311. Return: ???
  48312.     STACK unchanged
  48313. SeeAlso: INT 60/DI=0500h
  48314. ----------60----DI0509-----------------------
  48315. INT 60 u - HP 95LX System Manager - FILE SERVICE "M_SETPAT"
  48316.     DI = 0509h
  48317.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48318.         DWORD    pointer to ???
  48319.         DWORD    pointer to ???
  48320.         WORD    ???
  48321.         WORD    ???
  48322. Return: ???
  48323.     STACK unchanged
  48324. ----------60----DI050A-----------------------
  48325. INT 60 u - HP 95LX System Manager - FILE SERVICE "M_MATCH"
  48326.     DI = 050Ah
  48327.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48328.         DWORD    pointer to ???
  48329.         DWORD    pointer to ???
  48330. Return: ???
  48331.     STACK unchanged
  48332.  
  48333. Format of pattern match control block:
  48334. Offset    Size    Description
  48335.  00h 43 BYTEs    FindFirst data block (see INT 21/AH=4Eh)
  48336.  2Bh 80 BYTEs    full path name
  48337.  7Bh    BYTE    offset of last component of filename
  48338.  7Ch    BYTE    DOS function number (4Eh or 4Fh)
  48339. ----------60----DI050B-----------------------
  48340. INT 60 u - HP 95LX System Manager - IDENTIFY FILENAME REFERENT
  48341.     DI = 050Bh
  48342.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48343.         DWORD    pointer to ???
  48344.         WORD    ???
  48345.         WORD    ???
  48346.         DWORD    pointer to ???
  48347. Return: ???
  48348.     STACK unchanged
  48349.  
  48350. Values returned:
  48351.  0000h nonexistent
  48352.  0001h file
  48353.  0002h directory
  48354.  0003h character device
  48355. ----------60----DI050C-----------------------
  48356. INT 60 u - HP 95LX System Manager - DELETE FILE
  48357.     DI = 050Ch "M_DELETE"
  48358.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48359.         DWORD    pointer to ???
  48360.         WORD    ???
  48361.         WORD    ???
  48362. Return: ???
  48363.     STACK unchanged
  48364. ----------60----DI050D-----------------------
  48365. INT 60 u - HP 95LX System Manager - RENAME FILE
  48366.     DI = 050Dh
  48367.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48368.         DWORD    pointer to ???
  48369.         WORD    ???
  48370.         WORD    ???
  48371.         DWORD    pointer to ???
  48372.         WORD    ???
  48373.         WORD    ???
  48374. Return: ???
  48375.     STACK unchanged
  48376. ----------60----DI050E-----------------------
  48377. INT 60 u - HP 95LX System Manager - FILE SERVICE "M_GETDIR"
  48378.     DI = 050Eh
  48379.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48380.         WORD    ???
  48381.         DWORD    pointer to ???
  48382.         DWORD    pointer to ???
  48383. Return: ???
  48384.     STACK unchanged
  48385. ----------60----DI050F-----------------------
  48386. INT 60 u - HP 95LX System Manager - FILE SERVICE "M_SETDIR"
  48387.     DI = 050Fh
  48388.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48389.         DWORD    pointer to ???
  48390.         WORD    ???
  48391. Return: ???
  48392.     STACK unchanged
  48393. ----------60----DI0510-----------------------
  48394. INT 60 u - HP 95LX System Manager - FILE SERVICE "M_VOLUME"
  48395.     DI = 0510h
  48396.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48397.         DWORD    pointer to ???
  48398.         DWORD    pointer to ???
  48399. Return: ???
  48400.     STACK unchanged
  48401. ----------60----DI0511-----------------------
  48402. INT 60 u - HP 95LX System Manager - MAKE A SUBDIRECTORY
  48403.     DI = 0511h
  48404.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48405.         DWORD    pointer to ???
  48406.         WORD    ???
  48407.         WORD    ???
  48408. Return: ???
  48409.     STACK unchanged
  48410. ----------60----DI0512-----------------------
  48411. INT 60 u - HP 95LX System Manager - REMOVE A SUBDIRECTORY
  48412.     DI = 0512h
  48413.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48414.         DWORD    pointer to ???
  48415.         WORD    ???
  48416.         WORD    ???
  48417. Return: ???
  48418.     STACK unchanged
  48419. ----------60----DI0513-----------------------
  48420. INT 60 u - HP 95LX System Manager - GET DEFAULT DRIVE
  48421.     DI = 0513h
  48422.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48423.         DWORD    pointer to ??? buffer for current drive
  48424. Return: ???
  48425.     STACK unchanged
  48426. ----------60----DI0514-----------------------
  48427. INT 60 u - HP 95LX System Manager - SET DEFAULT DRIVE
  48428.     DI = 0514h
  48429.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48430.         WORD    new drive
  48431. Return: ???
  48432.     STACK unchanged
  48433. ----------60----DI0515-----------------------
  48434. INT 60 u - HP 95LX System Manager - FILE SERVICE "M_FDATE"
  48435.     DI = 0515h
  48436.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48437.         DWORD    pointer to ???
  48438.         DWORD    pointer to ???
  48439. Return: ???
  48440.     STACK unchanged
  48441. ----------60----DI0516-----------------------
  48442. INT 60 u - HP 95LX System Manager - FILE SERVICE "M_GET_SYSDIR"
  48443.     DI = 0516h
  48444.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48445.         DWORD    pointer to ???
  48446. Return: ???
  48447.     STACK unchanged
  48448. ----------60----DI0517-----------------------
  48449. INT 60 u - HP 95LX System Manager - GET FILE ATTRIBUTES
  48450.     DI = 0517h
  48451.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48452.         DWORD    pointer to ???
  48453.         WORD    ???
  48454.         WORD    ???
  48455.         DWORD    pointer to ??? buffer for file's attributes???
  48456. Return: ???
  48457.     STACK unchanged
  48458. ----------60----DI0518-----------------------
  48459. INT 60 u - HP 95LX System Manager - SET FILE ATTRIBUTES
  48460.     DI = 0518h
  48461.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48462.         DWORD    pointer to ???
  48463.         WORD    ???
  48464.         WORD    ???
  48465.         WORD    new attributes???
  48466. Return: ???
  48467.     STACK unchanged
  48468. ----------60----DI0519-----------------------
  48469. INT 60 u - HP 95LX System Manager - FILE SERVICE "M_COMMON_OPEN"
  48470.     DI = 0519h
  48471.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48472.         DWORD    pointer to ???
  48473.         DWORD    pointer to ???
  48474.         WORD    ???
  48475.         WORD    ???
  48476.         WORD    ???
  48477.         WORD    ???
  48478.         WORD    ???
  48479. Return: ???
  48480.     STACK unchanged
  48481. ----------60----DI051A-----------------------
  48482. INT 60 u - HP 95LX System Manager - FILE SERVICE "M_COPYDT"
  48483.     DI = 051Ah
  48484.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48485.         DWORD    pointer to ???
  48486.         DWORD    pointer to ???
  48487. Return: ???
  48488.     STACK unchanged
  48489. ----------60----DI051B-----------------------
  48490. INT 60 u - HP 95LX System Manager - FILE SERVICE "M_GETFDT"
  48491.     DI = 051Bh
  48492.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48493.         DWORD    pointer to ???
  48494.         DWORD    pointer to ???
  48495. Return: ???
  48496.     STACK unchanged
  48497. ----------60----DI051C-----------------------
  48498. INT 60 u - HP 95LX System Manager - FILE SERVICE "M_PUTFDT"
  48499.     DI = 051Ch
  48500.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48501.         DWORD    pointer to ???
  48502.         WORD    ???
  48503. Return: ???
  48504.     STACK unchanged
  48505. ----------60----DI0600-----------------------
  48506. INT 60 u - HP 95LX System Manager - PROCESS INITIALIZING
  48507.     DI = 0600h
  48508.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48509. Return: ???
  48510.     STACK unchanged
  48511. SeeAlso: INT 15/AX=4DD4h,INT 60/DI=0601h,INT 61"HP 95LX"
  48512. ----------60----DI0601-----------------------
  48513. INT 60 u - HP 95LX System Manager - PROCESS TERMINATION
  48514.     DI = 0601h
  48515.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48516. Return: never
  48517.     STACK unchanged
  48518. SeeAlso: INT 21/AH=4Ch,INT 60/DI=0600h
  48519. ----------60----DI0602-----------------------
  48520. INT 60 u - HP 95LX System Manager - "M_LOCK" - PREVENT TASK SWITCHES
  48521.     DI = 0602h
  48522.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48523. Return: ???
  48524.     STACK unchanged
  48525. SeeAlso: INT 15/AX=101Bh,INT 60/DI=0603h
  48526. ----------60----DI0603-----------------------
  48527. INT 60 u - HP 95LX System Manager - "M_UNLOCK" - ALLOW TASK SWITCHES
  48528.     DI = 0603h
  48529.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48530. Return: ???
  48531.     STACK unchanged
  48532. SeeAlso: INT 15/AX=101Ch,INT 60/DI=0602h
  48533. ----------60----DI0604-----------------------
  48534. INT 60 u - HP 95LX System Manager - "M_SPAWN"
  48535.     DI = 0604h
  48536.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48537.         DWORD    pointer to ???
  48538.         WORD    ???
  48539.         WORD    ???
  48540.         DWORD    pointer to ???
  48541. Return: ???
  48542.     STACK unchanged
  48543. ----------60----DI0605-----------------------
  48544. INT 60 u - HP 95LX System Manager - "M_APPCOUNT"
  48545.     DI = 0605h
  48546.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48547. Return: ???
  48548.     STACK unchanged
  48549. ----------60----DI0606-----------------------
  48550. INT 60 u - HP 95LX System Manager - "M_REBOOT"
  48551.     DI = 0606h
  48552.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48553. Return: ???
  48554.     STACK unchanged
  48555. ----------60----DI0607-----------------------
  48556. INT 60 u - HP 95LX System Manager - "M_SPAWNARG"
  48557.     DI = 0607h
  48558.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48559.         DWORD    pointer to ???
  48560.         WORD    ???
  48561.         DWORD    pointer to ???
  48562.         WORD    ???
  48563. Return: ???
  48564.     STACK unchanged
  48565. ----------60----DI0608-----------------------
  48566. INT 60 u - HP 95LX System Manager - "M_REG_APP_NAME"
  48567.     DI = 0608h
  48568.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48569.         DWORD    pointer to ???
  48570. Return: ???
  48571.     STACK unchanged
  48572. ----------60----DI0609-----------------------
  48573. INT 60 u - HP 95LX System Manager - "M_APP_NAME"
  48574.     DI = 0609h
  48575.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48576.         DWORD    pointer to ???
  48577. Return: DX:AX -> ???
  48578.     STACK unchanged
  48579. SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  48580. ----------60----DI0700-----------------------
  48581. INT 60 u - HP 95LX System Manager - OPEN CLIPBOARD
  48582.     DI = 0700h
  48583.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48584. Return: ???
  48585.     STACK unchanged
  48586. SeeAlso: INT 60/DI=0701h,INT 60/DI=0702h
  48587.  
  48588. Values for error code:
  48589.  0000h    successful
  48590.  FFF8h transfer request out of bounds
  48591.  FFF9h no such representation
  48592.  FFFAh no representation open
  48593.  FFFBh a representation is already open
  48594.  FFFCh representation already exists
  48595.  FFFDh heap allocation failure
  48596.  FFFEh clipboard not open
  48597.  FFFFh clipboard access denied
  48598. ----------60----DI0701-----------------------
  48599. INT 60 u - HP 95LX System Manager - CLOSE CLIPBOARD
  48600.     DI = 0701h
  48601.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48602. Return: ???
  48603.     STACK unchanged
  48604. SeeAlso: INT 60/DI=0700h,INT 60/DI=0702h
  48605. ----------60----DI0702-----------------------
  48606. INT 60 u - HP 95LX System Manager - RESET CLIPBOARD
  48607.     DI = 0702h
  48608.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48609.         DWORD    pointer to ???
  48610. Return: ???
  48611.     STACK unchanged
  48612. SeeAlso: INT 60/DI=0700h
  48613. ----------60----DI0704-----------------------
  48614. INT 60 u - HP 95LX System Manager - "M_NEW_REP" - START A NEW REPRESENTATION???
  48615.     DI = 0704h
  48616.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48617.         DWORD    pointer to ???
  48618. Return: ???
  48619.     STACK unchanged
  48620. SeeAlso: INT 60/DI=0705h,INT 60/DI=0706h,INT 60/DI=0707h
  48621. ----------60----DI0705-----------------------
  48622. INT 60 u - HP 95LX System Manager - CLIPBOARD SERVICE "M_FINI_REP"
  48623.     DI = 0705h
  48624.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48625. Return: ???
  48626.     STACK unchanged
  48627. SeeAlso: INT 60/DI=0704h
  48628. ----------60----DI0706-----------------------
  48629. INT 60 u - HP 95LX System Manager - CLIPBOARD SERVICE "M_REP_NAME"
  48630.     DI = 0706h
  48631.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48632.         WORD    ???
  48633.         DWORD    pointer to ???
  48634.         DWORD    pointer to ???
  48635. Return: ???
  48636.     STACK unchanged
  48637. SeeAlso: INT 60/DI=0704h,INT 60/DI=0707h
  48638. ----------60----DI0707-----------------------
  48639. INT 60 u - HP 95LX System Manager - CLIPBOARD SERVICE "M_REP_INDEX"
  48640.     DI = 0707h
  48641.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48642.         DWORD    pointer to ???
  48643.         DWORD    pointer to ???
  48644.         DWORD    pointer to ???
  48645. Return: ???
  48646.     STACK unchanged
  48647. SeeAlso: INT 60/DI=0704h,INT 60/DI=0706h
  48648. ----------60----DI0708-----------------------
  48649. INT 60 u - HP 95LX System Manager - WRITE TO CLIPBOARD
  48650.     DI = 0708h
  48651.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48652.         DWORD    pointer to data to be written???
  48653.         WORD    length of data???
  48654. Return: ???
  48655.     STACK unchanged
  48656. SeeAlso: INT 60/DI=0709h
  48657. ----------60----DI0709-----------------------
  48658. INT 60 u - HP 95LX System Manager - READ FROM CLIPBOARD
  48659.     DI = 0709h
  48660.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48661.         WORD    ???
  48662.         WORD    ???
  48663.         DWORD    pointer to buffer for data???
  48664.         WORD    length of buffer???
  48665. Return: ???
  48666.     STACK unchanged
  48667. SeeAlso: INT 60/DI=0708h
  48668. ----------60----DI0800-----------------------
  48669. INT 60 u - HP 95LX System Manager - BEEP
  48670.     DI = 0800h
  48671.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48672. Return: ???
  48673.     STACK unchanged
  48674. SeeAlso: INT 60/DI=0801h,INT 60/DI=0802h,INT 60/DI=0803h
  48675. ----------60----DI0801-----------------------
  48676. INT 60 u - HP 95LX System Manager - SOUND SERVICE "M_THUD"
  48677.     DI = 0801h
  48678.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48679. Return: ???
  48680.     STACK unchanged
  48681. SeeAlso: INT 60/DI=0800h,INT 60/DI=0802h,INT 60/DI=0803h
  48682. ----------60----DI0802-----------------------
  48683. INT 60 u - HP 95LX System Manager - MAKE A SOUND PATTERN
  48684.     DI = 0802h
  48685.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48686.         WORD    pattern number (00h-06h)
  48687. Return: ???
  48688.     STACK unchanged
  48689. SeeAlso: INT 60/DI=0800h,INT 60/DI=0801h,INT 60/DI=0803h
  48690. ----------60----DI0803-----------------------
  48691. INT 60 u - HP 95LX System Manager - TURN OFF SOUND
  48692.     DI = 0803h
  48693.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48694. Return: ???
  48695.     STACK unchanged
  48696. SeeAlso: INT 60/DI=0800h,INT 60/DI=0801h,INT 60/DI=0802h
  48697. ----------60----DI0900-----------------------
  48698. INT 60 - HP 95LX System Manager - ALLOCATE REGULAR MEMORY BLOCK
  48699.     DI = 0900h
  48700.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48701.         WORD    size of block in bytes
  48702. Return: AX -> memory block
  48703.     STACK unchanged
  48704. Note:    System Manager-compliant applications are always small-model (64K code,
  48705.       64K data)
  48706. SeeAlso: INT 15/AX=4DD4h,INT 60/DI=0902h,INT 60/DI=0903h
  48707. ----------60----DI0902-----------------------
  48708. INT 60 u - HP 95LX System Manager - FREE REGULAR MEMORY BLOCK
  48709.     DI = 0902h
  48710.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48711.         WORD    offset of memory block???
  48712. Return: ???
  48713.     STACK unchanged
  48714. Note:    System Manager-compliant applications are always small-model (64K code,
  48715.       64K data)
  48716. SeeAlso: INT 60/DI=0900h,INT 60/DI=0904h
  48717. ----------60----DI0903-----------------------
  48718. INT 60 u - HP 95LX System Manager - ALLOCATE LARGE MEMORY BLOCK
  48719.     DI = 0903h
  48720.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48721.         WORD    size of block in bytes???
  48722. Return: AX -> memory block???
  48723.     STACK unchanged
  48724. SeeAlso: INT 60/DI=0900h,INT 60/DI=0904h
  48725. ----------60----DI0904-----------------------
  48726. INT 60 u - HP 95LX System Manager - FREE LARGE MEMORY BLOCK
  48727.     DI = 0904h
  48728.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48729.         WORD    segment of memory block???
  48730. Return: AX -> ???
  48731.     STACK unchanged
  48732. SeeAlso: INT 60/DI=0902h,INT 60/DI=0903h
  48733. ----------60----DI0B00-----------------------
  48734. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_DTINFO"
  48735.     DI = 0B00h
  48736.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48737.         DWORD    pointer to ???
  48738. Return: ???
  48739.     STACK unchanged
  48740. ----------60----DI0B01-----------------------
  48741. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_GETDTM"
  48742.     DI = 0B01h
  48743.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48744.         DWORD    pointer to ???
  48745. Return: ???
  48746.     STACK unchanged
  48747. ----------60----DI0B02-----------------------
  48748. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_SETDTM"
  48749.     DI = 0B02h
  48750.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48751.         DWORD    pointer to ???
  48752. Return: ???
  48753.     STACK unchanged
  48754. ----------60----DI0B03-----------------------
  48755. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_XALARM"
  48756.     DI = 0B03h
  48757.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48758.         WORD    ???
  48759. Return: ???
  48760.     STACK unchanged
  48761. ----------60----DI0B04-----------------------
  48762. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_ALARM"
  48763.     DI = 0B04h
  48764.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48765.         DWORD    pointer to alarm record???
  48766.         WORD    ???
  48767. Return: ???
  48768.     STACK unchanged
  48769.  
  48770. Format of alarm record:
  48771. Offset    Size    Description
  48772.  00h    BYTE    hour
  48773.  01h    BYTE    minute
  48774.  02h    BYTE    second
  48775.  03h    BYTE    unused padding
  48776.  04h    WORD    rescheduling interval, in seconds
  48777.  06h    BYTE    are seconds significant?
  48778.  07h    BYTE    alarm sound
  48779.  08h 40 BYTEs    message displayed when alarm activates
  48780.  30h    BYTE    task ID of owner
  48781.  31h    BYTE    application's own use for sub-class
  48782.  32h  4 BYTEs    application's own use for private data
  48783. ----------60----DI0B05-----------------------
  48784. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_START_SW"
  48785.     DI = 0B05h
  48786.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48787.         DWORD    pointer to ???
  48788. Return: ???
  48789.     STACK unchanged
  48790. ----------60----DI0B06-----------------------
  48791. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_GET_SW"
  48792.     DI = 0B06h
  48793.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48794.         DWORD    pointer to ???
  48795.         DWORD    pointer to ???
  48796.         DWORD    pointer to ???
  48797. Return: ???
  48798.     STACK unchanged
  48799. ----------60----DI0B07-----------------------
  48800. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_STOP_SW"
  48801.     DI = 0B07h
  48802.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48803.         DWORD    pointer to ???
  48804. Return: ???
  48805.     STACK unchanged
  48806. ----------60----DI0B08-----------------------
  48807. INT 60 u - HP 95LX System Manager - "M_TELLTIME" - DISPLAY TIMESTAMP
  48808.     DI = 0B08h
  48809.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48810.         WORD    timestamp format
  48811.             bits 1-0:
  48812.                 00 date only
  48813.                 01 time only
  48814.                 10 date and time
  48815.                 11 day and date
  48816.             bit 4: supply am/pm
  48817.             bit 5: supply seconds
  48818.             bit 6: show year
  48819.             bit 7: four-digit year
  48820.         WORD    row (-3 is topmost, 0 is first non-reserved line)
  48821.         WORD    column
  48822. Return: ???
  48823.     STACK unchanged
  48824. ----------60----DI0B09-----------------------
  48825. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_GET_SETTINGS"
  48826.     DI = 0B09h
  48827.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48828.         DWORD    pointer to ???
  48829.         DWORD    pointer to ???
  48830. Return: ???
  48831.     STACK unchanged
  48832. SeeAlso: INT 60/DI=0B0Ah,INT 60/DI=0B0Fh
  48833.  
  48834. Format of system settings:
  48835. Offset    Size    Description
  48836.  00h    WORD    country code
  48837.  02h    WORD    speaker volume (00h-03h or FFh for off)
  48838.  04h    WORD    contrast level (00h-0Fh)
  48839.  06h    WORD    week start (00h Sunday, 01h Monday)
  48840.  08h    WORD    punctuation format
  48841.         code    decimal    arg    thousands
  48842.         00h    .    ,    ,
  48843.         01h    ,    .    .
  48844.         02h    .    ;    ;
  48845.         03h    ,    ;    .
  48846.         04h    .    ,    " "
  48847.         05h    ,    .    " "
  48848.         06h    .    ;    " "
  48849.         07h    ,    ;    " "
  48850.  0Ah    WORD    two-character language code (only 5355h = "US" byte-swapped)
  48851.  0Ch    WORD    current date format
  48852.         00h dd-mmm-yy
  48853.         01h dd-mmm
  48854.         02h mmm-yy
  48855.         03h mm/dd/yy
  48856.         04h dd/mm/yy
  48857.         05h dd.mm.yy
  48858.         06h yy-mm-dd
  48859.         07h mm/dd
  48860.         08h dd/mm
  48861.         09h dd.mm
  48862.         0Ah mm-dd
  48863.  0Eh    WORD    current time format
  48864.         00h HH:MM:SS am/pm
  48865.         01h HH:MM am/pm
  48866.         02h HH:MM:SS
  48867.         03h HH.MM.SS
  48868.         04h HH,MM,SS
  48869.         05h HHhMMmSSs
  48870.         06h HH:MM
  48871.         07h HH.MM
  48872.         08h HH,MM
  48873.         09h HHhMMm
  48874.  10h    WORD    collating sequence
  48875.         00h numbers first, 01h letters first, 02h ASCII
  48876.  12h 80 BYTEs    name of picture file
  48877.  62h 30 BYTEs    name
  48878.  80h 30 BYTEs    title
  48879.  9Eh 28 BYTEs    company name
  48880.  BAh    WORD    number of languages
  48881.  BCh  6 BYTEs    available languages
  48882.  C2h 66 BYTEs    language menu
  48883. 104h  2 BYTEs    ASCIZ date separator
  48884. 106h  2 BYTEs    ASCIZ time separator
  48885. 108h    BYTE    date order
  48886. 109h    BYTE    use 24 hour time?
  48887. 10Ah 16 BYTEs    currency string
  48888. 11Ah    WORD    currency string position (00h prefix, 01h suffix)
  48889. 11Ch    WORD    keyboard (see below)
  48890. 11Eh    WORD    printer baud rate
  48891.         00h 300, 01h 1200, 02h 2400, 03h 4800, 04h 9600, 05h 19200
  48892. 120h    WORD    printer driver code
  48893.         00h Epson FX80, 01h HP Laserjet, 02h IBM ProPrinter
  48894. 122h    WORD    printer interface (00h COM1, 01h COM2, 02h IR, 03h LPT1)
  48895. 124h    WORD    system manager interrupt (60h by default)
  48896. 126h    WORD    code page (01h CP850, 02h CP437)
  48897. 128h    WORD    active exit key
  48898. 12Ah    WORD    active menu key
  48899. 12Ch    WORD    active CHAR key toggle
  48900. 12Eh  6 BYTEs    alarm
  48901.  
  48902. Values for keyboard:
  48903.     0001h Belgium
  48904.     0002h French Canadian
  48905.     0004h Denmark
  48906.     0008h Finland
  48907.     0010h French
  48908.     0020h Finland
  48909.     0040h Italy
  48910.     0080h Netherlands
  48911.     0100h Norway
  48912.     0200h Portugal
  48913.     0400h Spain
  48914.     0800h Sweden
  48915.     1000h Swiss French
  48916.     2000h Swiss German
  48917.     4000h United Kingdom
  48918.     8000h USA
  48919. ----------60----DI0B0A-----------------------
  48920. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_SET_SETTINGS"
  48921.     DI = 0B0Ah
  48922.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48923.         DWORD    pointer to ???
  48924.         DWORD    pointer to ???
  48925. Return: ???
  48926.     STACK unchanged
  48927. SeeAlso: INT 60/DI=0B09h
  48928. ----------60----DI0B0B-----------------------
  48929. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_START_TIMER"
  48930.     DI = 0B0Bh
  48931.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48932.         DWORD    pointer to ???
  48933. Return: ???
  48934.     STACK unchanged
  48935. SeeAlso: INT 60/DI=0B0Ch,INT 60/DI=0B0Dh
  48936. ----------60----DI0B0C-----------------------
  48937. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_STOP_TIMER"
  48938.     DI = 0B0Ch
  48939.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48940.         DWORD    pointer to ???
  48941. Return: ???
  48942.     STACK unchanged
  48943. SeeAlso: INT 60/DI=0B0Bh,INT 60/DI=0B0Dh
  48944. ----------60----DI0B0D-----------------------
  48945. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_GET_TIMER"
  48946.     DI = 0B0Dh
  48947.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48948.         DWORD    pointer to ???
  48949.         DWORD    pointer to ???
  48950.         DWORD    pointer to ???
  48951. Return: ???
  48952.     STACK unchanged
  48953. SeeAlso: INT 60/DI=0B0Bh,INT 60/DI=0B0Ch
  48954. ----------60----DI0B0E-----------------------
  48955. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_TELL_ANYTIME"
  48956.     DI = 0B0Eh
  48957.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48958.         WORD    ???
  48959.         WORD    ???
  48960.         WORD    ???
  48961.         DWORD    pointer to ???
  48962.         DWORD    pointer to ???
  48963. Return: DX:AX -> ???
  48964.     STACK unchanged
  48965. ----------60----DI0B0F-----------------------
  48966. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVCE "M_GET_SETTINGS_ADDR"
  48967.     DI = 0B0Fh
  48968.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48969. Return: DX:AX -> system settings record (see INT 60/DI=0B09h)
  48970.     STACK unchanged
  48971. SeeAlso: INT 60/DI=0B09h
  48972. ----------60----DI0B10-----------------------
  48973. INT 60 u - HP 95LX System Manager - PARSE DATE SPECIFICATION
  48974.     DI = 0B10h
  48975.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48976.         WORD    ???
  48977.         DWORD    pointer to ???
  48978.         DWORD    pointer to ???
  48979. Return: ???
  48980.     STACK unchanged
  48981. ----------60----DI0B11-----------------------
  48982. INT 60 u - HP 95LX System Manager - PARSE TIME SPECIFICATION
  48983.     DI = 0B11h
  48984.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48985.         WORD    ???
  48986.         DWORD    pointer to ???
  48987.         DWORD    pointer to ???
  48988. Return: ???
  48989.     STACK unchanged
  48990. ----------60----DI0B12-----------------------
  48991. INT 60 u - HP 95LX System Manager - SET DATE PARSING RULE
  48992.     DI = 0B12h
  48993.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  48994.         WORD    new parsing rule
  48995.             01h day-month-year
  48996.             02h month-day-year
  48997.             03h year-month-day
  48998.             04h "DMYO"
  48999.             05h "MDYO"
  49000.             OR with 08h to get any year
  49001. Return: ???
  49002.     STACK unchanged
  49003. SeeAlso: INT 60/DI=0B13h
  49004. ----------60----DI0B13-----------------------
  49005. INT 60 u - HP 95LX System Manager - SET TIME PARSING RULE
  49006.     DI = 0B13h
  49007.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49008.         WORD    new parsing rule
  49009.             01h HH:MM:SS (am/pm)
  49010.             02h HH:MM:SS (24hr)
  49011.             03h HHMM:SS (24hr)
  49012.             04h HH:MM:SS.hh (24hr)
  49013.             05h HH:MM (am/pm)
  49014.             06h HH:MM (24hr)
  49015.             07h HHMM (24hr)
  49016. Return: ???
  49017.     STACK unchanged
  49018. SeeAlso: INT 60/DI=0B12h
  49019. ----------60----DI0B14-----------------------
  49020. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_POST_TIME"
  49021.     DI = 0B14h
  49022.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49023. Return: ???
  49024.     STACK unchanged
  49025. ----------60----DI0B15-----------------------
  49026. INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_DAY_TRIGGER"
  49027.     DI = 0B15h
  49028.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49029.         WORD    ???
  49030. Return: ???
  49031.     STACK unchanged
  49032. SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  49033. ----------60----DI0C00-----------------------
  49034. INT 60 u - HP 95LX System Manager - OPEN PRINTER
  49035.     DI = 0C00h
  49036.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49037. Return: ???
  49038.     STACK unchanged
  49039. SeeAlso: INT 60/DI=0C01h,INT 60/DI=0C02h,INT 60/DI=0C03h
  49040. ----------60----DI0C01-----------------------
  49041. INT 60 u - HP 95LX System Manager - CLOSE PRINTER
  49042.     DI = 0C01h
  49043.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49044. Return: ???
  49045.     STACK unchanged
  49046. Note:    relinquishes control of printer
  49047. SeeAlso: INT 60/DI=0C00h
  49048. ----------60----DI0C02-----------------------
  49049. INT 60 u - HP 95LX System Manager - WRITE TO PRINTER
  49050.     DI = 0C02h
  49051.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49052.         DWORD    pointer to data to be written
  49053.         WORD    length of data
  49054. Return: ???
  49055.     STACK unchanged
  49056. SeeAlso: INT 60/DI=0C00h
  49057. ----------60----DI0C03-----------------------
  49058. INT 60 u - HP 95LX System Manager - INITIALIZE PRINTER
  49059.     DI = 0C03h
  49060.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49061. Return: ???
  49062.     STACK unchanged
  49063. SeeAlso: INT 60/DI=0C00h
  49064. ----------60----DI0C04-----------------------
  49065. INT 60 u - HP 95LX System Manager - "M_TRANS_PRINTER"
  49066.     DI = 0C04h
  49067.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49068.         WORD    ???
  49069.         DWORD    pointer to ???
  49070. Return: ???
  49071.     STACK unchanged
  49072. ----------60----DI0C05-----------------------
  49073. INT 60 u - HP 95LX System Manager - "M_FALL_PRINTER"
  49074.     DI = 0C05h
  49075.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49076.         WORD    ???
  49077.         DWORD    pointer to ???
  49078. Return: ???
  49079.     STACK unchanged
  49080. SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  49081. ----------60----DI0E00-----------------------
  49082. INT 60 u - HP 95LX System Manager - COMMUNICATIONS SERVICE "M_COMM_INIT"
  49083.     DI = 0E00h
  49084.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49085.         DWORD    pointer to ???
  49086. Return: ???
  49087.     STACK unchanged
  49088. SeeAlso: INT 60/DI=0E01h,INT 60/DI=0E02h
  49089.  
  49090. Values for error code:
  49091.  0000h    successful
  49092.  FFF1h "E_BUSY"
  49093.  FFF2h timeout
  49094.  FFF3h framing error
  49095.  FFF4h parity error
  49096.  FFF5h overrun error
  49097.  FFF6h "E_EMPTY"
  49098.  FFF7h "E_CONECT"
  49099.  FFF8h not open
  49100.  FFF9h out of memory
  49101.  FFFAh buffer overflow
  49102.  FFFBh "E_NOFIT"
  49103.  FFFCh unsupported
  49104.  FFFDh "E_IVOPR"
  49105.  FFFEh "E_IVCHN"
  49106.  FFFFh "E_REOPEN"
  49107. ----------60----DI0E01-----------------------
  49108. INT 60 u - HP 95LX System Manager - OPEN COMMUNICATIONS CHANNEL
  49109.     DI = 0E01h
  49110.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49111.         DWORD    pointer to WORD buffer for comm channel handle
  49112.         WORD    communications line number (01h-04h)
  49113. Return: ???
  49114.     STACK unchanged
  49115. SeeAlso: INT 60/DI=0E00h,INT 60/DI=0E02h
  49116. ----------60----DI0E02-----------------------
  49117. INT 60 u - HP 95LX System Manager - CLOSE COMMUNICATIONS CHANNEL
  49118.     DI = 0E02h
  49119.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49120.         WORD    comm channel handle
  49121. Return: ???
  49122.     STACK unchanged
  49123. SeeAlso: INT 60/DI=0E00h,INT 60/DI=0E01h
  49124. ----------60----DI0E03-----------------------
  49125. INT 60 u - HP 95LX System Manager - "M_COMM_GETMDM"
  49126.     DI = 0E03h
  49127.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49128.         WORD    ???
  49129. Return: ???
  49130.     STACK unchanged
  49131. ----------60----DI0E04-----------------------
  49132. INT 60 u - HP 95LX System Manager - "M_COMM_ANSWER"
  49133.     DI = 0E04h
  49134.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49135.         WORD    ???
  49136.         WORD    ???
  49137. Return: ???
  49138.     STACK unchanged
  49139. ----------60----DI0E05-----------------------
  49140. INT 60 u - HP 95LX System Manager - "M_COMM_DIAL"
  49141.     DI = 0E05h
  49142.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49143.         WORD    ???
  49144.         DWORD    pointer to ???
  49145. Return: ???
  49146.     STACK unchanged
  49147. ----------60----DI0E06-----------------------
  49148. INT 60 u - HP 95LX System Manager - RESET COMMUNICATIONS CHANNEL
  49149.     DI = 0E06h
  49150.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49151.         WORD    comm channel handle
  49152.         WORD    reset options
  49153.             bit 0: reset line
  49154.             bit 1: flush transmit buffer
  49155.             bit 2: flush receive buffer
  49156.             bit 3: reset modem
  49157.             bit 4: reset receiver's ^S state
  49158.             bit 5: reset transmitter's ^S state
  49159. Return: ???
  49160.     STACK unchanged
  49161. ----------60----DI0E07-----------------------
  49162. INT 60 u - HP 95LX System Manager - "M_COMM_HANGUP"
  49163.     DI = 0E07h
  49164.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49165.         WORD    ???
  49166. Return: ???
  49167.     STACK unchanged
  49168. ----------60----DI0E08-----------------------
  49169. INT 60 u - HP 95LX System Manager - SEND DATA OVER COMM CHANNEL
  49170.     DI = 0E08h
  49171.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49172.         WORD    comm channel handle
  49173.         DWORD    pointer to data to be sent
  49174.         WORD    option flags
  49175.             bit 0: send partial buffer
  49176.             bit 1: turn on receiver after sending
  49177.         DWORD    pointer to WORD containing length of data to be sent
  49178. Return: length WORD updated to contain number of bytes actually sent???
  49179.     STACK unchanged
  49180. SeeAlso: INT 60/DI=0E09h,INT 60/DI=0E0Bh
  49181. ----------60----DI0E09-----------------------
  49182. INT 60 u - HP 95LX System Manager - QUERY COMM CHANNEL TRANSMIT QUEUE
  49183.     DI = 0E09h
  49184.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49185.         WORD    ???
  49186.         DWORD    pointer to ??? WORD
  49187.         DWORD    pointer to ??? WORD
  49188. Return: ???
  49189.     STACK unchanged
  49190. SeeAlso: INT 60/DI=0E0Ah
  49191. ----------60----DI0E0A-----------------------
  49192. INT 60 u - HP 95LX System Manager - QUERY COMM CHANNEL RECEIVE QUEUE
  49193.     DI = 0E0Ah
  49194.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49195.         WORD    comm channel handle
  49196.         DWORD    pointer to WORD to get receive buffer size
  49197.         DWORD    pointer to WORD to get free bytes in receive buffer
  49198. Return: ???
  49199.     STACK unchanged
  49200. SeeAlso: INT 60/DI=0E09h,INT 60/DI=0E0Bh
  49201. ----------60----DI0E0B-----------------------
  49202. INT 60 u - HP 95LX System Manager - RECEIVE DATA FROM COMM CHANNEL
  49203.     DI = 0E0Bh
  49204.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49205.         WORD    comm channel handle
  49206.         DWORD    pointer to data buffer
  49207.         DWORD    pointer to WORD (input) length of data buffer
  49208.                     (output) number of bytes received
  49209. Return: ???
  49210.     STACK unchanged
  49211. SeeAlso: INT 60/DI=0E08h,INT 60/DI=0E0Ah
  49212. ----------60----DI0E0C-----------------------
  49213. INT 60 u - HP 95LX System Manager - "M_COMM_HAZCMD"
  49214.     DI = 0E0Ch
  49215.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49216.         WORD    ???
  49217.         DWORD    pointer to ???
  49218.         WORD    ???
  49219. Return: ???
  49220.     STACK unchanged
  49221. ----------60----DI0E0D-----------------------
  49222. INT 60 u - HP 95LX System Manager - "M_COMM_COMAND"
  49223.     DI = 0E0Dh
  49224.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49225.         WORD    ???
  49226.         DWORD    pointer to ???
  49227.         WORD    ???
  49228. Return: ???
  49229.     STACK unchanged
  49230. ----------60----DI0E0E-----------------------
  49231. INT 60 u - HP 95LX System Manager - "M_COMM_BREAK"
  49232.     DI = 0E0Eh
  49233.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49234.         WORD    ???
  49235.         WORD    ???
  49236. Return: ???
  49237.     STACK unchanged
  49238. ----------60----DI0E0F-----------------------
  49239. INT 60 u - HP 95LX System Manager - "M_COMM_FRCXON"
  49240.     DI = 0E0Fh
  49241.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49242.         WORD    ???
  49243. Return: ???
  49244.     STACK unchanged
  49245. ----------60----DI0E10-----------------------
  49246. INT 60 u - HP 95LX System Manager - "M_COMM_FRCXOF"
  49247.     DI = 0E10h
  49248.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49249.         WORD    ???
  49250. Return: ???
  49251.     STACK unchanged
  49252. ----------60----DI0E11-----------------------
  49253. INT 60 u - HP 95LX System Manager - "M_COMM_SETDTR"
  49254.     DI = 0E11h
  49255.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49256.         WORD    ???
  49257.         WORD    ???
  49258. Return: ???
  49259.     STACK unchanged
  49260. ----------60----DI0E12-----------------------
  49261. INT 60 u - HP 95LX System Manager - "M_COMM_XMITNG"
  49262.     DI = 0E12h
  49263.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49264.         WORD    ???
  49265. Return: ???
  49266.     STACK unchanged
  49267. ----------60----DI0E13-----------------------
  49268. INT 60 u - HP 95LX System Manager - "M_COMM_STATUS"
  49269.     DI = 0E13h
  49270.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49271.         WORD    ???
  49272. Return: ???
  49273.     STACK unchanged
  49274. ----------60----DI0E14-----------------------
  49275. INT 60 u - HP 95LX System Manager - SET COMMUNICATIONS SETTINGS
  49276.     DI = 0E14h
  49277.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49278.         WORD    comm channel handle
  49279.         DWORD    pointer to comm settings (see below)
  49280. Return: ???
  49281.     STACK unchanged
  49282. SeeAlso: INT 60/DI=0E15h
  49283.  
  49284. Format of comm settings:
  49285. Offset    Size    Description
  49286.  00h    BYTE    dial type ('T' tone, 'P' pulse)
  49287.  01h    WORD    baud rate divisor (115200/baud_rate)
  49288.  03h    BYTE    parity (00h none, 08h odd, 18h even, 28h mark, 38h space)
  49289.  04h    BYTE    stop bits (00h one, 04h two)
  49290.  05h    BYTE    data bits - 5
  49291.  06h    BYTE    software handshake
  49292.         01h none, 02h XOFF/XON, 04h XOFF/any, 08h ENQ/ACK
  49293.  07h    BYTE    infrared (01h off, 02h on)
  49294.  08h    BYTE    duplex (01h half, 02h full)
  49295.  09h    BYTE    echo (01h echo, 02h no echo)
  49296. ----------60----DI0E15-----------------------
  49297. INT 60 u - HP 95LX System Manager - GET COMMUNICATIONS SETTINGS
  49298.     DI = 0E15h
  49299.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49300.         WORD    ???
  49301.         DWORD    pointer to buffer for settings (see INT 60/DI=0E14h)
  49302. Return: ???
  49303.     STACK unchanged
  49304. SeeAlso: INT 60/DI=0E14h
  49305. ----------60----DI0E16-----------------------
  49306. INT 60 u - HP 95LX System Manager - "M_COMM_CNFGUR"
  49307.     DI = 0E16h
  49308.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49309.         WORD    ???
  49310.         WORD    ???
  49311.         WORD    ???
  49312.         WORD    ???
  49313.         WORD    ???
  49314. Return: ???
  49315.     STACK unchanged
  49316. ----------60----DI0E17-----------------------
  49317. INT 60 u - HP 95LX System Manager - "M_COMM_QRYERR"
  49318.     DI = 0E17h
  49319.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49320.         WORD    ???
  49321. Return: ???
  49322.     STACK unchanged
  49323. SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  49324. ----------60----DI0F00-----------------------
  49325. INT 60 u - HP 95LX System Manager - "M_ERRMSG"
  49326.     DI = 0F00h
  49327.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49328.         WORD    ???
  49329.         DWORD    pointer to ???
  49330.         WORD    ???
  49331.         DWORD    pointer to ???
  49332. Return: ???
  49333.     STACK unchanged
  49334. ----------60----DI0F01-----------------------
  49335. INT 60 u - HP 95LX System Manager - DRAW STANDARD TITLE BOX
  49336.     DI = 0F01h
  49337.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49338.         DWORD    pointer to ASCIZ title string
  49339. Return: ???
  49340.     STACK unchanged
  49341. ----------60----DI0F02-----------------------
  49342. INT 60 u - HP 95LX System Manager - "SHOWNAME"
  49343.     DI = 0F02h
  49344.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49345.         DWORD    pointer to ???
  49346. Return: ???
  49347.     STACK unchanged
  49348. ----------60----DI0F03-----------------------
  49349. INT 60 u - HP 95LX System Manager - DISPLAY TWO-LINE MESSAGE BOX
  49350.     DI = 0F03h
  49351.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49352.         DWORD    pointer to first line of message
  49353.         WORD    length of first line
  49354.         DWORD    pointer to second line of message
  49355.         WORD    length of second line
  49356. Return: ???
  49357.     STACK unchanged
  49358. SeeAlso: INT 60/DI=0300h,INT 60/DI=0F04h,INT 60/DI=0F09h
  49359. ----------60----DI0F04-----------------------
  49360. INT 60 u - HP 95LX System Manager - REMOVE MESSAGE BOX
  49361.     DI = 0F04h
  49362.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49363. Return: ???
  49364.     STACK unchanged
  49365. SeeAlso: INT 60/DI=0F03h,INT 60/DI=0F09h
  49366. ----------60----DI0F05-----------------------
  49367. INT 60 u - HP 95LX System Manager - "M_COM_TIMER_ADDR"
  49368.     DI = 0F05h
  49369.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49370. Return: DX:AX -> ???
  49371.     STACK unchanged
  49372. ----------60----DI0F06-----------------------
  49373. INT 60 u - HP 95LX System Manager - "M_COM_TIMER_COUNT_ADDR"
  49374.     DI = 0F06h
  49375.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49376. Return: DX:AX -> ???
  49377.     STACK unchanged
  49378. ----------60----DI0F07-----------------------
  49379. INT 60 u - HP 95LX System Manager - "M_SYS_RSRC_ADDR"
  49380.     DI = 0F07h
  49381.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49382. Return: DX:AX -> ???
  49383.     STACK unchanged
  49384. ----------60----DI0F08-----------------------
  49385. INT 60 u - HP 95LX System Manager - "M_BIOS_OUTSTR"
  49386.     DI = 0F08h
  49387.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49388.         ???
  49389. Return: ???
  49390.     STACK unchanged
  49391. ----------60----DI0F09-----------------------
  49392. INT 60 u - HP 95LX System Manager - DISPLAY THREE-LINE MESSAGE BOX
  49393.     DI = 0F09h
  49394.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49395.         DWORD    pointer to first line of message
  49396.         WORD    length of first line
  49397.         DWORD    pointer to second line of message
  49398.         WORD    length of second line
  49399.         DWORD    pointer to third line of message
  49400.         WORD    length of third line
  49401. Return: ???
  49402.     STACK unchanged
  49403. SeeAlso: INT 60/DI=0F03h,INT 60/DI=0F04h
  49404. ----------60----DI0F0A-----------------------
  49405. INT 60 u - HP 95LX System Manager - DISABLE MACROS
  49406.     DI = 0F0Ah
  49407.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49408. Return: ???
  49409.     STACK unchanged
  49410. SeeAlso: INT 60/DI=0F0Bh
  49411. ----------60----DI0F0B-----------------------
  49412. INT 60 u - HP 95LX System Manager - ENABLE MACROS
  49413.     DI = 0F0Bh
  49414.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49415. Return: ???
  49416.     STACK unchanged
  49417. SeeAlso: INT 60/DI=0F0Ah
  49418. ----------60----DI0F0C-----------------------
  49419. INT 60 u - HP 95LX System Manager - "M_DATE_TIME_SEPS"
  49420.     DI = 0F0Ch
  49421.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49422.         ???
  49423. Return: ???
  49424.     STACK unchanged
  49425. ----------60----DI0F0D-----------------------
  49426. INT 60 u - HP 95LX System Manager - "M_FORM_FT"
  49427.     DI = 0F0Dh
  49428.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49429.         DWORD    pointer to ???
  49430. Return: DX:AX -> ???
  49431.     STACK unchanged
  49432. ----------60----DI0F0E-----------------------
  49433. INT 60 u - HP 95LX System Manager - "M_RAM_IV_INFO"
  49434.     DI = 0F0Eh
  49435.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49436.         DWORD    pointer to ???
  49437. Return: DX:AX -> ???
  49438.     STACK unchanged
  49439. SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  49440. ----------60----DI1005-----------------------
  49441. INT 60 u - HP 95LX System Manager - "M_DIRTY_SYNC" - FORCE SCREEN UPDATE
  49442.     DI = 1005h
  49443.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49444. Return: ???
  49445.     STACK unchanged
  49446. SeeAlso: INT 10/AH=FFh,INT 60/DI=0300h,INT 60/DI=0301h
  49447. ----------60----DI1200-----------------------
  49448. INT 60 u - HP 95LX System Manager - RESOURCE SERVICE "MAP_RESOURCE_FILE"
  49449.     DI = 1200h
  49450.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49451.         DWORD    pointer to ???
  49452. Return: ???
  49453.     STACK unchanged
  49454. ----------60----DI1201-----------------------
  49455. INT 60 u - HP 95LX System Manager - "GET_RESOURCE_PTR"
  49456.     DI = 1201h
  49457.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49458.         WORD    ???
  49459. Return: DX:AX -> ???
  49460.     STACK unchanged
  49461. SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  49462. ----------60----DI1202-----------------------
  49463. INT 60 u - HP 95LX System Manager - "GET_RSRC_TAB_PTR"
  49464.     DI = 1202h
  49465.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49466. Return: DX:AX -> ???
  49467.     STACK unchanged
  49468. ----------60----DI1203-----------------------
  49469. INT 60 u - HP 95LX System Manager - "INIT_SYSGMR_RSRCS"
  49470.     DI = 1203h
  49471.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49472. Return: ???
  49473.     STACK unchanged
  49474. ----------60----DI1300-----------------------
  49475. INT 60 u - HP 95LX System Manager - INITIALIZE HELP SYSTEM
  49476.     DI = 1300h
  49477.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49478.         DWORD    pointer to ???
  49479.         DWORD    pointer to ???
  49480.         WORD    ???
  49481. Return: ???
  49482.     STACK unchanged
  49483. ----------60----DI1301-----------------------
  49484. INT 60 u - HP 95LX System Manager - DISPLAY HELP
  49485.     DI = 1301h
  49486.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49487.         DWORD    pointer to ???
  49488. Return: ???
  49489.     STACK unchanged
  49490. ----------60----DI1302-----------------------
  49491. INT 60 u - HP 95LX System Manager - "M_HELP_KEY"
  49492.     DI = 1302h
  49493.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49494.         DWORD    pointer to ???
  49495.         WORD    ???
  49496. Return: ???
  49497.     STACK unchanged
  49498. ----------60----DI1303-----------------------
  49499. INT 60 u - HP 95LX System Manager - "M_HELP_TERM"
  49500.     DI = 1303h
  49501.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49502.         DWORD    pointer to ???
  49503. Return: ???
  49504.     STACK unchanged
  49505. SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  49506. ----------60----DI1400-----------------------
  49507. INT 60 u - HP 95LX System Manager - "M_ColInit"
  49508.     DI = 1400h
  49509.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49510. Return: AX = ???
  49511.     STACK unchanged
  49512. ----------60----DI1401-----------------------
  49513. INT 60 u - HP 95LX System Manager - "M_ColCpStr"
  49514.     DI = 1401h
  49515.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49516.         DWORD    pointer to ???
  49517.         WORD    ???
  49518.         DWORD    pointer to ???
  49519.         WORD    ???
  49520. Return: ???
  49521.     STACK unchanged
  49522. ----------60----DI1402-----------------------
  49523. INT 60 u - HP 95LX System Manager - "M_ColLicsStr"
  49524.     DI = 1402h
  49525.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49526.         ???
  49527. Return: ???
  49528.     STACK unchanged
  49529. ----------60----DI1403-----------------------
  49530. INT 60 u - HP 95LX System Manager - "M_ColLicsChar"
  49531.     DI = 1403h
  49532.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49533.         ???
  49534. Return: ???
  49535.     STACK unchanged
  49536. ----------60----DI1404-----------------------
  49537. INT 60 u - HP 95LX System Manager - "M_ColToLower"
  49538.     DI = 1404h
  49539.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49540.         DWORD    pointer to ???
  49541.         WORD    ???
  49542. Return: ???
  49543.     STACK unchanged
  49544. ----------60----DI1405-----------------------
  49545. INT 60 u - HP 95LX System Manager - "M_ColCpSearch"
  49546.     DI = 1405h
  49547.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49548.         DWORD    pointer to ???
  49549.         WORD    ???
  49550.         DWORD    pointer to ???
  49551.         WORD    ???
  49552.         WORD    ???
  49553. Return: ???
  49554.     STACK unchanged
  49555. ----------60----DI1406-----------------------
  49556. INT 60 u - HP 95LX System Manager - "M_ColToUpper"
  49557.     DI = 1406h
  49558.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49559.         DWORD    pointer to ???
  49560.         WORD    ???
  49561. Return: ???
  49562.     STACK unchanged
  49563. SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  49564. ----------60----DI1500-----------------------
  49565. INT 60 u - HP 95LX System Manager - "GrDispInit"
  49566.     DI = 1500h
  49567.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49568.         ???
  49569. Return: ???
  49570.     STACK unchanged
  49571. ----------60----DI1501-----------------------
  49572. INT 60 u - HP 95LX System Manager - "GrDispClear"
  49573.     DI = 1501h
  49574.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49575.         ???
  49576. Return: ???
  49577.     STACK unchanged
  49578. ----------60----DI1502-----------------------
  49579. INT 60 u - HP 95LX System Manager - "GrDispDot"
  49580.     DI = 1502h
  49581.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49582.         ???
  49583. Return: ???
  49584.     STACK unchanged
  49585. ----------60----DI1503-----------------------
  49586. INT 60 u - HP 95LX System Manager - "GrDispDraw"
  49587.     DI = 1503h
  49588.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49589.         ???
  49590. Return: ???
  49591.     STACK unchanged
  49592. ----------60----DI1504-----------------------
  49593. INT 60 u - HP 95LX System Manager - "GrDispFill"
  49594.     DI = 1504h
  49595.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49596.         ???
  49597. Return: ???
  49598.     STACK unchanged
  49599. ----------60----DI1505-----------------------
  49600. INT 60 u - HP 95LX System Manager - "GrDispRead"
  49601.     DI = 1505h
  49602.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49603.         ???
  49604. Return: ???
  49605.     STACK unchanged
  49606. ----------60----DI1506-----------------------
  49607. INT 60 u - HP 95LX System Manager - "GrDispString"
  49608.     DI = 1506h
  49609.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49610.         ???
  49611. Return: ???
  49612.     STACK unchanged
  49613. ----------60----DI1507-----------------------
  49614. INT 60 u - HP 95LX System Manager - "GrDispPan"
  49615.     DI = 1507h
  49616.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49617.         ???
  49618. Return: ???
  49619.     STACK unchanged
  49620. ----------60----DI1508-----------------------
  49621. INT 60 u - HP 95LX System Manager - "GrDispZoom"
  49622.     DI = 1508h
  49623.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49624.         ???
  49625. Return: ???
  49626.     STACK unchanged
  49627. ----------60----DI1509-----------------------
  49628. INT 60 u - HP 95LX System Manager - "GrDispSave"
  49629.     DI = 1509h
  49630.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49631.         ???
  49632. Return: ???
  49633.     STACK unchanged
  49634. ----------60----DI150A-----------------------
  49635. INT 60 u - HP 95LX System Manager - "GrDispRestore"
  49636.     DI = 150Ah
  49637.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49638.         ???
  49639. Return: ???
  49640.     STACK unchanged
  49641. ----------60----DI150B-----------------------
  49642. INT 60 u - HP 95LX System Manager - "GrDispCorner"
  49643.     DI = 150Bh
  49644.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49645.         ???
  49646. Return: ???
  49647.     STACK unchanged
  49648. SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  49649. ----------60----DI1604-----------------------
  49650. INT 60 u - HP 95LX System Manager - "CP_TO_LICS"
  49651.     DI = 1604h
  49652.     STACK:    2 WORDs unused dummies (for calls from high level languages)
  49653.         ???
  49654. Return: ???
  49655.     STACK unchanged
  49656. SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX"
  49657. ----------6000-------------------------------
  49658. INT 60 - SYS_PROF.EXE - PROFILER STATUS
  49659.     AH = 00h
  49660. Return: AX = 0000h    profiling is off
  49661.         otherwise profiling is on
  49662. Note:    SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47
  49663. SeeAlso: AH=01h"SYS_PROF",02h"SYS_PROF"
  49664. ----------6000-------------------------------
  49665. INT 60 - MDEBUG - GET STATUS
  49666.     AH = 00h
  49667.     DS:SI -> password or a null byte
  49668. Return: AX = return code
  49669.         FFFEh password is invalid
  49670.         FFFDh display mode is invalid
  49671.        else successful
  49672.         ES = value of the monitor register SE
  49673.         DI = value of the monitor register OF
  49674.         CH = monitor color
  49675.         CL = interpreter color
  49676.         BH = monitor start line
  49677.         BL = interpreter start line
  49678.         AH = makecode of the hotkey
  49679.         AL = ASCII code of the hotkey
  49680.         DL = status of special keys (only SHIFT, ALT, CTRL) for the
  49681.             hotkey (coded as for the keyboard flag at 0040h:0017h)
  49682.         DH = basic process number for the communication with drivers
  49683.             process number for the display driver, DH+1 = process
  49684.             number for the command driver(s)
  49685.     DS:SI -> MDEBUG identification table
  49686. Notes:    MDEBUG is a shareware memory-resident debugging tool by Bernd Schemmer,
  49687.       including a memory monitor, an interpreter, and a disassembler
  49688.     MDEBUG uses INT 60 by default, but may be directed to any of INT 60
  49689.       through INT 67; the interrupt handler is preceded by the signature
  49690.       "USERINT" and is not chained
  49691.     if DS:SI points at a null byte, MDEBUG will prompt for a password if
  49692.       passwords are active; enough stack space must be provided for an
  49693.       INT 10h call (which MDEBUG uses while prompting for the password)
  49694. SeeAlso: AH=02h"MDEBUG"
  49695.  
  49696. Format of MDEBUG identification table:
  49697. Offset    Size    Description
  49698.  -2    WORD    entry offset
  49699.  00h    WORD    CS of MDEBUG
  49700.  02h    DWORD    old INT 08h vector
  49701.  06h    DWORD    old INT 09h vector
  49702.  0Ah    DWORD    address INT 16h routine used by MDEBUG
  49703.  0Eh    BYTE    length of version string
  49704.  0Fh  N BYTEs    version string
  49705. ----------6001-------------------------------
  49706. INT 60 - MDEBUG - GET ADDRESS OF THE HELP REGISTERS
  49707.     AH = 01h
  49708.     DS:SI -> password or a null byte
  49709. Return: AX = return code
  49710.         FFFEh password is invalid
  49711.         FFFDh display mode is invalid
  49712.        else successful
  49713.         ES:DI point to the help registers of MDEBUG
  49714.            ES:DI-02h  -> R0 (WORD)
  49715.            ES:DI      -> R1 (WORD)
  49716.            ES:DI+02h  -> R2 (WORD)
  49717.            ES:DI+04h  -> R3 (WORD)
  49718.            ...
  49719.            ES:DI+0Eh  -> R8 (WORD)
  49720. ----------6001-------------------------------
  49721. INT 60 - SYS_PROF.EXE - TURN PROFILING OFF
  49722.     AH = 01h
  49723. Note:    SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47
  49724. SeeAlso: AH=00h"SYS_PROF",02h"SYS_PROF"
  49725. ----------6001FF-----------------------------
  49726. INT 60 - FTP Packet Driver - BASIC FUNC - GET DRIVER INFO
  49727.     AX = 01FFh
  49728.     BX = handle returned by function 02h
  49729. Return: CF set on error
  49730.         DH = error code (see below)
  49731.     CF clear if successful
  49732.         BX = version
  49733.         CH = network interface class (see below)
  49734.         DX = interface type (see below)
  49735.         CL = number
  49736.         DS:SI -> name
  49737.         AL = driver functions supported
  49738.         01h basic
  49739.         02h basic and extended
  49740.         05h basic and high-performance
  49741.         06h basic, high-performance, and extended
  49742.         FFh not installed
  49743. Note:    the handle in BX is optional for drivers written to v1.07 or later of
  49744.       the packet driver specification
  49745.  
  49746. Values for error code:
  49747.  01h "BAD_HANDLE"    invalid handle number 
  49748.  02h "NO_CLASS"        no interfaces of the specified class found
  49749.  03h "NO_TYPE"        no interfaces of the specified type found
  49750.  04h "NO_NUMBER"    no interfaces of the specified number found
  49751.  05h "BAD_TYPE"        bad packet type
  49752.  06h "NO_MULTICAST"    interface does not support multicast messages
  49753.  07h "CANT_TERMINATE"    this packet driver cannot terminate
  49754.  08h "BAD_MODE"        invalid receiver mode
  49755.  09h "NO_SPACE"        insufficient space
  49756.  0Ah "TYPE_INUSE"    type accessed but never released
  49757.  0Bh "BAD_COMMAND"    bad command
  49758.  0Ch "CANT_SEND"    packet could not be sent
  49759.  0Dh "CANT_SET"        hardware address could not be changed
  49760.  0Eh "BAD_ADDRESS"    hardware address has a bad length or format
  49761.  0Fh "CANT_RESET"    could not reset interface
  49762.  
  49763. Values for Network Interface classes/types:
  49764.     Class 01h  Ethernet/IEEE 802.3     
  49765.     01h 3COM 3C500/3C501
  49766.     02h 3COM 3C505
  49767.     03h MICOM-Interlan NI5010
  49768.     04h BICC Data Networks 4110
  49769.     05h BICC Data Networks 4117
  49770.     06h MICOM-Interlan NP600
  49771.     08h Ungermann-Bass PC-NIC
  49772.     09h Univation NC-516
  49773.     0Ah TRW PC-2000    
  49774.     0Bh MICOM-Interlan NI5210
  49775.     0Ch 3COM 3C503
  49776.     0Dh 3COM 3C523
  49777.     0Eh Western Digital WD8003
  49778.     0Fh Spider Systems S4
  49779.     10h Torus Frame Level
  49780.     11h 10Net Communications
  49781.     12h Gateway PC-bus
  49782.     13h Gateway AT-bus
  49783.     14h Gateway MCA-bus
  49784.     15h IMC PCnic
  49785.     16h IMC PCnic II
  49786.     17h IMC PCnic 8-bit
  49787.     18h Tigan Communications
  49788.     19h Micromatic Research
  49789.     1Ah Clarkson "Multiplexor"
  49790.     1Bh D-Link 8-bit
  49791.     1Ch D-Link 16-bit
  49792.     1Dh D-Link PS/2
  49793.     1Eh Research Machines 8
  49794.     1Fh Research Machines 16
  49795.     20h Research Machines MCA
  49796.     21h Radix Microsystems EXM1 16-bit
  49797.     22h Interlan Ni9210
  49798.     23h Interlan Ni6510
  49799.     24h Vestra LANMASTER 16-bit
  49800.     25h Vestra LANMASTER 8-bit
  49801.     26h Allied Telesis PC/XT/AT
  49802.     27h Allied Telesis NEC PC-98
  49803.     28h Allied Telesis Fujitsu FMR
  49804.     29h Ungermann-Bass NIC/PS2
  49805.     2Ah Tiara LANCard/E AT
  49806.     2Bh Tiara LANCard/E MC
  49807.     2Ch Tiara LANCard/E TP
  49808.     2Dh Spider Communications SpiderComm 8
  49809.     2Eh Spider Communications SpiderComm 16
  49810.     2Fh AT&T Starlan NAU
  49811.     30h AT&T Starlan-10 NAU
  49812.     31h AT&T Ethernet NAU
  49813.     32h Intel smart card
  49814.     33h Xircom Packet Adapter
  49815.     34h Aquila Ethernet
  49816.     35h Novell NE1000
  49817.     36h Novell NE2000
  49818.     37h SMC PC-510
  49819.     38h AT&T Fiber NAU
  49820.     39h NDIS to Packet Driver adapter
  49821.     3Ah Racal-InterLan ES3210
  49822.     3Bh General Systems ISDN simulated Ethernet
  49823.     3Ch Hewlett-Packard
  49824.     3Dh IMC EtherNic-8
  49825.     3Eh IMC EtherNic-16
  49826.     3Fh IMC EtherNic-MCA
  49827.     40h NetWorth EtherNext
  49828.     41h Dataco Scanet
  49829.     42h DEC DEPCA
  49830.     43h C-Net
  49831.     44h Gandalf LANLine
  49832.     45h Apricot built-in
  49833.     46h David Systems Ether-T
  49834.     47h ODI to Packet Driver adapter
  49835.     48h AMD Am21110-16
  49836.     49h Intel ICD Network controller family
  49837.     4Ah Intel ICD PCL2
  49838.     4Bh Intel ICD PCL2A
  49839.     4Ch AT&T LANPacer
  49840.     4Dh AT&T LANPacer+
  49841.     4Eh AT&T EVB
  49842.     4Fh AT&T StarStation
  49843.     50h SLIP simulated ethernet
  49844.     51h Racal-Interlan NIA310
  49845.     52h Racal-Interlan NISE
  49846.     53h Racal-Interlan NISE30
  49847.     54h Racal-Interlan NI6610
  49848.     55h Ethernet over IP/UDP
  49849.     Class 02h  ProNET-10
  49850.     01h Proteon p1300
  49851.     02h Proteon p1800
  49852.     Class 03h  IEEE 802.5/ProNet-4
  49853.     01h IBM Token-Ring Adapter
  49854.     02h Proteon p1340
  49855.     03h Proteon p1344
  49856.     04h Gateway PC-bus
  49857.     05h Gateway AT-bus
  49858.     06h Gateway MCA-bus
  49859.     39h NDIS to Packet Driver adapter
  49860.     47h ODI to Packet Driver adapter
  49861.     Class 04h  Omninet
  49862.     Class 05h  Appletalk
  49863.     01h ATALK.SYS adapter
  49864.     Class 06h  Serial Line
  49865.     01h Clarkson 8250-SLIP
  49866.     02h Clarkson "Multiplexor"
  49867.     Class 07h  StarLAN (subsumed by Ethernet class)
  49868.     Class 08h  ARCnet
  49869.     01h Datapoint RIM
  49870.     Class 09h  AX.25
  49871.     01h Ottawa PI card
  49872.     Class 0Ah  KISS
  49873.     Class 0Bh  IEEE 802.3 with 802.2 headers
  49874.     types same as for class 01h
  49875.     Class 0Ch  FDDI with 802.2 headers
  49876.     01h Western Digital
  49877.     02h Frontier Technology
  49878.     Class 0Dh  Internet X.25
  49879.     01h Western Digital
  49880.     02h Frontier Technology
  49881.     Class 0Eh  N.T. LANSTAR (encapsulating DIX Ethernet)
  49882.     01h NT LANSTAR/8
  49883.     02h NT LANSTAR/MC
  49884.     Class 0Fh  SLFP (MIT serial specification)
  49885.     01h MERIT
  49886.     Class 10h  PPP (Point-to-Point Protocol)
  49887.  
  49888. Note: class and type numbers are cleared through FTP Software
  49889. ----------6002-------------------------------
  49890. INT 60 - MDEBUG - SET STATUS
  49891.     AH = 02h
  49892.     DS:SI -> password or a null byte
  49893.     ES = new value for the register SE
  49894.     DI = new value for the register OF
  49895.     CH = new monitor color if nonzero
  49896.     CL = new interpreter color if nonzero
  49897.     BH = new monitor start line if nonzero
  49898.     BL = new interpreter start line if nonzero
  49899.     AL = new ASCII code for the hotkey ('A'..'Z', 'a'..'z') if nonzero
  49900.     DL = new status of the special keys (SHIFT, ALT, CTRL) for the hotkey
  49901.         if nonzero
  49902.     DH = if nonzero, new basic process number for communication with the
  49903.         drivers (DH = multiplex number for the display driver,
  49904.         DH+1 = multiplex number for the command driver or drivers)
  49905. Return: AX = return code
  49906.         FFFFh call not allowed
  49907.         FFFEh password is invalid
  49908.         FFFDh display mode is invalid
  49909.         0000h successful, status changed
  49910.        else AL = error code
  49911.             bit 0 invalid monitor start line
  49912.             1 invalid interpreter start line
  49913.             2 invalid hotkey
  49914.             3 invalid process number
  49915.               4-7 reserved
  49916. Note:    the values of the registers SE and OF are always changed, the other
  49917.       values are only changed if they are valid
  49918. SeeAlso: AH=00h"MDEBUG"
  49919. ----------6002-------------------------------
  49920. INT 60 - FTP Packet Driver - BASIC FUNC - ACCESS TYPE
  49921.     AH = 02h
  49922.     AL = interface class
  49923.     BX = interface type
  49924.     DL = interface number
  49925.     DS:SI -> type
  49926.     CX = length of type (0000h for all packets)
  49927.     ES:DI -> receiver
  49928. Return: CF set on error
  49929.         DH = error code (see AX=01FFh)
  49930.     CF clear if successful
  49931.         AX = handle        
  49932. SeeAlso: AH=03h"FTP"
  49933.  
  49934. Receiver is called with:
  49935.     AX = subfunction
  49936.         00h get packet buffer
  49937.         DX = lookahead length (v1.10+)
  49938.         DS:SI -> lookahead buffer if DX nonzero (v1.10+)
  49939.         DI = error flags (class dependent) (v1.10+)
  49940.         Return: ES:DI -> packet buffer
  49941.                 0000h:0000h means throw away packet
  49942.             CX = size of buffer (v1.10+), may be smaller than
  49943.                 incoming data
  49944.         01h copy completed
  49945.         DS:SI -> buffer
  49946.         CX = bytes actually copied (v1.10+)
  49947.     BX = handle
  49948.     CX = buffer length
  49949. when a packet is received
  49950. ----------6002-------------------------------
  49951. INT 60 - SYS_PROF.EXE - TURN PROFILING ON
  49952.     AH = 02h
  49953. Note:    SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47
  49954. SeeAlso: AH=00h"SYS_PROF",01h"SYS_PROF"
  49955. ----------6003-------------------------------
  49956. INT 60 - MDEBUG - POP UP
  49957.     AH = 03h
  49958.     DS:SI -> password or a null byte
  49959.     ES -> new value for the register SE
  49960.     DI -> new value for the register OF
  49961. Return: AX = return code
  49962.         FFFFh call not allowed
  49963.         FFFEh password is invalid
  49964.         FFFDh display mode is invalid
  49965.        else successful
  49966. SeeAlso: AH=04h"MDEBUG"
  49967. ----------6003-------------------------------
  49968. INT 60 - FTP Packet Driver - BASIC FUNC - RELEASE TYPE
  49969.     AH = 03h
  49970.     BX = handle
  49971. Return: CF set on error
  49972.        DH = error code (see AX=01FFh)
  49973.     CF clear if successful    
  49974. SeeAlso: AH=02h"FTP"
  49975. ----------6003-------------------------------
  49976. INT 60 - SYS_PROF.EXE - GET ADDRESS OF PROFILING TABLE
  49977.     AH = 03h
  49978. Return: ES:BX -> profiling table
  49979. Note:    SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47
  49980. SeeAlso: AH=04h"SYS_PROF"
  49981. ----------6004-------------------------------
  49982. INT 60 - FTP Packet Driver - BASIC FUNC - SEND PACKET
  49983.     AH = 04h
  49984.     DS:SI -> buffer
  49985.     CX = length
  49986. Return: CF set on error
  49987.         DH = error code (see AX=01FFh)
  49988.     CF clear if successful
  49989. Note:    the buffer may be modified immediately upon return from this call
  49990. SeeAlso: AH=0Bh
  49991. ----------6004-------------------------------
  49992. INT 60 - MDEBUG - POP UP
  49993.     AH = 04h
  49994.     DS:SI -> password or a null byte
  49995. Return: AX = return code
  49996.         FFFFh call not allowed
  49997.         FFFEh password is invalid
  49998.         FFFDh display mode is invalid
  49999.        else successful
  50000. SeeAlso: AH=03h"MDEBUG",AH=07h"MDEBUG"
  50001. ----------6004-------------------------------
  50002. INT 60 - SYS_PROF.EXE - CLEAR PROFILING TABLE
  50003.     AH = 04h
  50004. Note:    SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47
  50005. SeeAlso: AH=03h"SYS_PROF"
  50006. ----------6005-------------------------------
  50007. INT 60 - FTP Packet Driver - BASIC FUNC - TERMINATE DRIVER FOR HANDLE
  50008.     AH = 05h
  50009.     BX = handle (optional for v1.10+)
  50010. Return: CF set on error
  50011.        DH = error code (see AX=01FFh)
  50012.     CF clear if successful
  50013. ----------6005-------------------------------
  50014. INT 60 - MDEBUG - GET AND SET MDEBUG FLAGS
  50015.     AH = 05h
  50016.     DS:SI -> password or a null byte
  50017.     BL = new value for the semaphor of MDEBUG
  50018.          00h  enable popup of MDEBUG
  50019.          else disable popup of MDEBUG
  50020. Return: AX = return code
  50021.         FFFEh password is invalid
  50022.         FFFDh display mode is invalid
  50023.        else successful
  50024.         BL = old value of the semapor of MDEBUG
  50025.         BH = old value of the INT 08h semaphor
  50026.             (this semaphor is always reset after this function)
  50027. ----------6006-------------------------------
  50028. INT 60 - FTP Packet Driver - BASIC FUNC - GET ADDRESS
  50029.     AH = 06h
  50030.     BX = handle (optional for v1.10+)
  50031.     ES:DI -> buffer
  50032.     CX = length
  50033. Return: CF set on error
  50034.         DH = error code (see AX=01FFh)
  50035.     CF clear if successful
  50036.         CX = length    
  50037. Note:    copies the local net address associated with the handle into the buffer
  50038. ----------6006-------------------------------
  50039. INT 60 - MDEBUG - GET PASSWORD STATUS
  50040.     AH = 06h
  50041. Return: AL = status
  50042.         00h password inactive
  50043.         01h password active
  50044. ----------6007-------------------------------
  50045. INT 60 - FTP Packet Driver - BASIC FUNC - RESET INTERFACE
  50046.     AH = 07h
  50047.     BX = handle (optional for v1.10+)
  50048. Return: CF set on error
  50049.         DH = error code (see AX=01FFh)
  50050.     CF clear if successful
  50051. ----------6007-------------------------------
  50052. INT 60 - MDEBUG v1.70+ - GET ACTIVE PART OF MDEBUG
  50053.     AH = 07h
  50054. Return: AL = active part for the next popup session of MDEBUG:
  50055.         bit 0: the next popup session will start in the interpreter rather
  50056.             than in the monitor
  50057.         bit 1: the next popup session will sart in the online-help
  50058. SeeAlso: AH=03h"MDEBUG",AH=04h"MDEBUG"
  50059. ----------6008-------------------------------
  50060. INT 60 - MDEBUG - UNUSED
  50061.     AH = 08h-FFh
  50062. Return: AX = FFFCh
  50063. ----------600A-------------------------------
  50064. INT 60 - FTP Packet Driver 1.09+ - HIGH-PERF FUNC - GET PARAMETERS
  50065.     AH = 0Ah
  50066. Return: CF set on error
  50067.         DH = error code (0Bh) (see AX=01FFh)
  50068.     CF clear if successful
  50069.         ES:DI -> parameter table (see below)
  50070.  
  50071. Format of parameter table:
  50072. Offset    Size    Description
  50073.  00h    BYTE    major revision of packet driver spec driver conforms to
  50074.  01h    BYTE    minor revision of packet driver spec
  50075.  02h    BYTE    length of this structure in bytes
  50076.  03h    BYTE    length of a MAC-layer address
  50077.  04h    WORD    maximum transfer unit, including MAC headers
  50078.  06h    WORD    buffer size for multicast addr
  50079.  08h    WORD    number of receive buffers (one less than back-to-back MTU rcvs)
  50080.  0Ah    WORD    number of transmit buffers
  50081.  0Ch    WORD    interrupt number to hook for post-EOI processing, 00h=none
  50082. ----------600B-------------------------------
  50083. INT 60 - FTP Packet Driver 1.09 - HIGH-PERF FUNC - ASYNCHRONOUS SEND PACKET
  50084.     AH = 0Bh
  50085.     DS:SI -> buffer
  50086.     CX = length of buffer
  50087.     ES:DI -> FAR function to call when buffer becomes available
  50088. Return: CF set on error
  50089.         DH = error code (0Bh,0Ch) (see AX=01FFh)
  50090.     CF clear if successful
  50091. Notes:    unlike function 04h, the buffer is not available for modification as
  50092.       soon as the call returns; the buffer may be queued by the driver and
  50093.       not processed until later
  50094.     this function has been dropped from v1.10+ of the specification and
  50095.       replaced by function 0Ch
  50096. SeeAlso: AH=04h"Packet Driver",AH=0Ch"Packet Driver"
  50097.  
  50098. Completion function called with:
  50099.     AX = result
  50100.         00h copy OK
  50101.         nonzero error
  50102.     ES:DI -> buffer passed to INT 60/AH=0Bh call
  50103. ----------600C-------------------------------
  50104. INT 60 - FTP Packet Driver 1.10+ - HIGH-PERF FUNC - ASYNCHRONOUS SEND PACKET
  50105.     AH = 0Ch
  50106.     ES:DI -> pointer to IOCB
  50107. Return: CF set on error
  50108.         DH = error code (see AX=01FFh)
  50109.     CF clear if successful
  50110. SeeAlso: AH=04h"Packet Driver",AH=0Bh"Packet Driver"
  50111.  
  50112. Format of IOCB:
  50113. Offset    Size    Description
  50114.  00h    DWORD    pointer to buffer
  50115.  04h    WORD    length of buffer
  50116.  06h    BYTE    flags
  50117.         bit 0: packet driver is finished with IOCB
  50118.         bit 1: application requests upcall when driver completes
  50119.  07h    DWORD    function address for upcall
  50120.  0Bh  4 BYTEs    future gather write
  50121.  0Fh    BYTE    ???
  50122.  10h  8 BYTEs    private driver workspace
  50123.  
  50124. Completion function called with:
  50125.     ES:DI -> IOCB passed to INT 60/AH=0Ch
  50126. ----------600C-------------------------------
  50127. INT 60 - Banyan VINES, 3com - GET STATION ADDRESS
  50128.     AH = 0Ch
  50129. Return: AL = status
  50130.         00h successful
  50131.         ES:SI -> 6-byte station address
  50132.         02h semaphore service is unavailable
  50133. ----------600D-------------------------------
  50134. INT 60 - FTP Packet Driver 1.10+ - HIGH-PERF FUNC - DROP PACKET FROM QUEUE
  50135.     AH = 0Dh
  50136.     ES:DI -> IOCB
  50137. Return: CF set on error
  50138.         DH = error code (see AX=01FFh)
  50139.     CF clear if successful
  50140. SeeAlso: AH=0Ch"Packet Driver"
  50141. ----------6011-------------------------------
  50142. INT 60 - 3com, 10NET, Banyan VINES - LOCK AND WAIT
  50143.     AH = 11h
  50144.     AL = drive number or 0
  50145.     DX = number of seconds to wait
  50146.     ES:SI = Ethernet address or 0
  50147.     DS:BX -> 31-byte ASCIZ semaphore name
  50148. Return: AL = status
  50149.         00h successful
  50150.         01h timeout
  50151.         02h server not responding
  50152.         03h invalid semaphore name
  50153.         04h semaphore list is full
  50154.         05h invalid drive ID
  50155.         06h invalid Ethernet address
  50156.         07h not logged in
  50157.         08h write to network failed
  50158.         09h semaphore already logged for this CPU
  50159. SeeAlso: AH=12h,AH=13h
  50160. ----------6012-------------------------------
  50161. INT 60 - 3com, 10NET, Banyan VINES - LOCK
  50162.     AH = 12h
  50163.     AL = drive number or 00h
  50164.     ES:SI = Ethernet address or 0000h:0000h
  50165.     DS:BX -> 31-byte ASCIZ semaphore name
  50166. Return: AL = status (see also AH=11h)
  50167.         01h semaphore currently locked by another PC
  50168. Note:    unlike function 11h, this function returns immediately
  50169. SeeAlso: AH=11h,AH=13h
  50170. ----------6013-------------------------------
  50171. INT 60 - 3com, 10NET, Banyan VINES - UNLOCK
  50172.     AH = 13h
  50173.     AL = drive number or 00h
  50174.     ES:SI = Ethernet address or 0000h:0000h
  50175.     DS:BX -> 31-byte ASCIZ semaphore name
  50176. Return: AL = status (see also AH=11h)
  50177.         1 semaphore not locked
  50178. SeeAlso: AH=11h,AH=12h
  50179. ----------6014-------------------------------
  50180. INT 60 - FTP Packet Driver - EXTENDED FUNC - SET RECEIVE MODE
  50181.     AH = 14h
  50182.     BX = handle (optional for v1.10+)
  50183.     CX = mode
  50184.         01h turn off receiver
  50185.         02h receive only packets sent to this interface
  50186.         03h mode 2 plus broadcast packets
  50187.         04h mode 3 plus limited multicast packets
  50188.         05h mode 3 plus all multicast packets
  50189.         06h all packets
  50190.         07h raw mode for serial line only (v1.10+)
  50191. Return: CF set on error
  50192.        DH = error code (01h,08h) (see AX=01FFh)
  50193.     CF clear if successful
  50194. SeeAlso: AH=15h
  50195. ----------6015-------------------------------
  50196. INT 60 - FTP Packet Driver - EXTENDED FUNC - GET RECEIVE MODE
  50197.     AH = 15h
  50198.     BX = handle (optional for v1.10+)
  50199. Return: CF set on error
  50200.         DH = error code (01h) (see AX=01FFh)
  50201.     CF clear if successful
  50202.         AX = mode    
  50203. SeeAlso: AH=14h
  50204. ----------6016-------------------------------
  50205. INT 60 - FTP Packet Driver - EXTENDED FUNC - SET MULTICAST LIST
  50206.     AH = 16h
  50207.     ES:DI -> multicast list
  50208.     CX = length of list in bytes
  50209. Return: CF set on error
  50210.         DH = error code (06h,09h,0Eh) (see AX=01FFh)
  50211.     CF clear if successful
  50212. SeeAlso: AH=17h
  50213. ----------6017-------------------------------
  50214. INT 60 - FTP Packet Driver - EXTENDED FUNC - GET MULTICAST LIST
  50215.     AH = 17h
  50216. Return: CF set on error
  50217.         DH = error code (06h,09h) (see AX=01FFh)
  50218.     CF clear if successful
  50219.         ES:DI -> multicast addresses (do not modify)
  50220.         CX = bytes of multicast addresses currently in use
  50221. SeeAlso: AH=16h
  50222. ----------6018-------------------------------
  50223. INT 60 - FTP Packet Driver - EXTENDED FUNC - GET STATISTICS
  50224.     AH = 18h
  50225.     BX = handle (optional for v1.10+)
  50226. Return: CF set on error
  50227.         DH = error code (01h) (see AX=01FFh)
  50228.     CF clear if successful
  50229.         DS:SI -> statistics (see below)
  50230.  
  50231. Format of statistics:
  50232. Offset    Size    Description
  50233.  00h    DWORD    packets in
  50234.  04h    DWORD    packets out
  50235.  08h    DWORD    bytes in
  50236.  0Ch    DWORD    bytes out
  50237.  10h    DWORD    errors in
  50238.  14h    DWORD    errors out
  50239.  18h    DWORD    packets dropped
  50240. ----------6019-------------------------------
  50241. INT 60 - FTP Packet Driver - EXTENDED FUNC - SET NETWORK ADDRESS
  50242.     AH = 19h
  50243.     ES:DI -> address
  50244.     CX = length of address
  50245. Return: CF set on error
  50246.         DH = error code (0Dh,0Eh) (see AX=01FFh)
  50247.     CF clear if successful
  50248.         CX = length
  50249. ----------601A-------------------------------
  50250. INT 60 - FTP Packet Driver v1.10+ - EXTENDED FUNC - SEND RAW BYTES
  50251.     AH = 1Ah
  50252.     DS:SI -> buffer
  50253.     CX = length of buffer
  50254. Return: CF set on error
  50255.         DH = error code (see AX=01FFh)
  50256.     CF clear if successful
  50257. SeeAlso: AH=1Ch
  50258. ----------601B-------------------------------
  50259. INT 60 - FTP Packet Driver v1.10+ - EXTENDED FUNC - FLUSH RAW BYTES RECEIVED
  50260.     AH = 1Bh
  50261. Return: CF set on error
  50262.         DH = error code (see AX=01FFh)
  50263.     CF clear if successful
  50264. SeeAlso: AH=1Ch
  50265. ----------601C-------------------------------
  50266. INT 60 - FTP Packet Driver v1.10+ - EXTENDED FUNC - FETCH RAW BYTES RECEIVED
  50267.     AH = 1Ch
  50268.     DS:SI -> buffer
  50269.     CX = length of buffer
  50270.     DX = timeout in clock ticks
  50271. Return: CF set on error
  50272.         DH = error code (see AX=01FFh)
  50273.     CF clear if successful
  50274.         CX = number of bytes transferred to buffer
  50275. SeeAlso: AH=1Ah,AH=1Bh
  50276. ----------60AD-------------------------------
  50277. INT 60 - AccessDOS - API
  50278.     AH = ADh
  50279.     AL = function
  50280.         E1h ???
  50281.         Return: AX = ???
  50282.         E2h get configuration
  50283.         Return: BX:AX -> configuration data
  50284. Notes:    AccessDOS is a public domain TSR developed at The Trace Research and
  50285.       Development Center which provides extensions for keyboard, mouse,
  50286.       and sound access by the visually, hearing, or motor-control
  50287.       impaired.
  50288.     INT 60 is the default vector; AccessDOS will use the first 0000h:0000h
  50289.       vector in the range 60h through 66h.
  50290. ----------61---------------------------------
  50291. INT 61 - reserved for user interrupt
  50292. ----------61---------------------------------
  50293. INT 61 - Atari Portfolio - EXTENDED BIOS
  50294.    provides subfunctions such as turning off the machine, accessing internal
  50295.    variables, and mapping memory cards
  50296. SeeAlso: INT 60"Atari"
  50297. ----------61---------------------------------
  50298. INT 61 - HP 95LX System Manager - LOAD DS
  50299. SeeAlso: INT 0F"HP 95LX",INT 60"HP 95LX"
  50300. ----------61---------------------------------
  50301. INT 61 - JPI TopSPEED Modula-2 v1 - PROCEDURE EXIT TRAP
  50302. SeeAlso: INT 61"JPI"
  50303. ----------61---------------------------------
  50304. INT 61 - Adaptec and OMTI controllers - DRIVE 0 DATA
  50305. Note:    this vector stores the second four bytes of the parameter table for
  50306.       hard disk 0
  50307. SeeAlso: INT 60"Adaptec",INT 62"Adaptec",INT 63"Adaptec"
  50308. ----------61---------------------------------
  50309. INT 61 - Sangoma CCIP (CCPOP 3270 resident module) INTERFACE
  50310.     BX:DX -> control block
  50311. SeeAlso: INT 67"Sangoma"
  50312. ----------61---------------------------------
  50313. INT 61 - VIRUS - "SEMTEX"/"Screen Trasher" - INT 21h SUBSTITUTE
  50314. Note:    the virus copies the original INT 21h vector into INT 61h
  50315. SeeAlso: INT 21h,INT 60"VIRUS",INT 6B"VIRUS"
  50316. ----------61---------------------------------
  50317. INT 61 - FTP Software PC/TCP - TCP/IP TSR System Call interface
  50318.     AH = system call number (see also entries below)
  50319.         01h "pkt_alloc"
  50320.         02h "pkt_free"
  50321. Return: CF clear if successful
  50322.     CF set on error
  50323.         AL = basic error (see below)
  50324.         AH = suberror number
  50325. Notes:    the installation check consists of testing for the signature "TCPTSR"
  50326.       three bytes beyond the start of the interrupt handler
  50327.     INT 61 is the default; PC/TCP v2.05 may be configured to use any
  50328.       interrupt from 20h through E0h
  50329. BUG:    the SLIP kernel for v2.05 bounds-checks the wrong register, so values
  50330.       greater than 54h in AH may crash the system.    Other kernels may have
  50331.       this bug as well.
  50332. SeeAlso: INT 61/AH=00h"PC/TCP",INT 61/AH=2Ah,INT 61/AH=54h
  50333.  
  50334. Values for error code:
  50335.  00h "NET_NOERR" successful
  50336.  01h "NET_ERR_INUSE" protocol or socket already in use
  50337.  02h "NET_DOS_ERR" MSDOS error (returned as suberror code in AH)
  50338.  03h "NET_ERR_NOMEM" out of memory
  50339.  04h "NET_ERR_NOTNETCONN" not a network descriptor
  50340.  05h "NET_ERR_ILLEGALOP" invalid operation on given kind of network descriptor
  50341.  06h "NET_ERR_BADPKT" illegal or corrupted packet
  50342.  07h "NET_ERR_NOHOST" no host bound to specified connection
  50343.  08h "NET_ERR_CANTOPEN" unable to open file
  50344.  09h "NET_ERR_NET_UNREACHABLE" network is unreachable
  50345.  0Ah "NET_ERR_HOST_UNREACHABLE" host is unreachable
  50346.  0Bh "NET_ERR_PROT_UNREACHABLE" protocol is unreachable
  50347.  0Ch "NET_ERR_PORT_UNREACHABLE" port is unreachable
  50348.  0Dh "NET_ERR_TIMEOUT" operation timed out
  50349.  0Eh "NET_ERR_HOSTUNKNOWN" unable to resolve host name
  50350.  0Fh "NET_ERR_NOSERVERS" no name servers configured
  50351.  10h "NET_ERR_SERVER_ERR" bad reply from name server
  50352.  11h "NET_ERR_BADFORMAT" bad format for IP address or field in IP address struc
  50353.             is zero
  50354.  12h "NET_ERR_BADARG" invalid argument
  50355.  13h "NET_ERR_EOF" foreign host closed its end of connection
  50356.  14h "NET_ERR_RESET" connection has been reset
  50357.  15h "NET_ERR_WOULDBLOCK" recv() call was done on a non-blocking connection
  50358.             with no data available
  50359.  16h "NET_ERR_UNBOUND" insufficient resources to do operation
  50360.  17h "NET_ERR_NODESC" could not allocate network descriptor
  50361.  18h "NET_ERR_BADSYSCALL" invalid/unsupported kernel call
  50362.  19h "NET_ERR_CANTBROADCAST" unable to broadcast
  50363.  1Ah "NET_ERR_NOTESTAB" operation illegal because connection not established
  50364.  1Bh kernel busy, try again later
  50365. ----------6100-------------------------------
  50366. INT 61 U - PC/TCP kernel v2.05 - GET DEBUG INFORMATION
  50367.     AH = 00h
  50368.     DS:SI -> 216-byte buffer for network debugging information (see below)
  50369. Return: CF clear
  50370.     AX = 0000h
  50371.     buffer filled
  50372. SeeAlso: INT 61"PC/TCP",INT 61/AH=2Ah"PC/TCP"
  50373.  
  50374. Format of network debugging information:
  50375. Offset    Size    Description
  50376.  00h    DWORD    number of interrupts
  50377.  04h    DWORD    receive buffer low-water mark
  50378.  08h    DWORD    transmit buffer low-water mark
  50379.  0Ch    DWORD    number of packets received
  50380.  10h    DWORD    number of packets transmitted
  50381.  14h    DWORD    total receive errors
  50382.  18h    DWORD    total transmit errors
  50383.  1Ch  4 BYTEs    ???
  50384.  20h    DWORD    receive resets
  50385.  24h    DWORD    transmit resets
  50386.  28h    DWORD    number of "runts" received
  50387.  2Ch    DWORD    number of alignment errors on received packets
  50388.  30h    DWORD    number of CRC errors on received packets
  50389.  34h    DWORD    number of parity errors on received packets
  50390.  38h    DWORD    number of receive overflow errors
  50391.  3Ch    DWORD    number of oversized packets received
  50392.  40h    DWORD    number of packets lost due to lack of buffers
  50393.  44h    DWORD    receive timeouts
  50394.  48h 32 BYTEs    ???
  50395.  68h    DWORD    number of transmit collisions
  50396.  6Ch    DWORD    number of transmit timeouts
  50397.  70h    DWORD    number of transmit underflows
  50398.  74h    DWORD    number of lost "crs" on transmit
  50399.  78h    DWORD    number of times heartbeat failed on transmit
  50400.  7Ch 24 BYTEs    ???
  50401.  94h    WORD    free packet buffers
  50402.  96h    WORD    total packet buffers
  50403.  98h    WORD    minimum number of packet buffers free since kernel started
  50404.  9Ah 24 BYTEs    ???
  50405.  B2h    DWORD    pointer to TCP connection list???
  50406.  B6h    DWORD    pointer to IP routing table???
  50407.  BAh 30 BYTEs    ???
  50408. ----------610000-----------------------------
  50409. INT 61 - OPTIMA 1024 VGA-Sync - ZOOM DISPLAY
  50410.     AX = 0000h
  50411.     BX = zoom factor (0-7)
  50412. Notes:    zooms the display based on the given zoom factor
  50413.     INT 61h is the default interrupt; the actual interrupt number can be
  50414.       obtained by calling INT 16/AH=FFh
  50415. SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0001h"OPTIMA",INT 61/AX=0002h"OPTIMA"
  50416. SeeAlso: INT 61/AX=0005h"OPTIMA"
  50417. ----------610001-----------------------------
  50418. INT 61 - Banyan VINES - "Sosock" - OPEN COMMUNICATIONS SOCKET
  50419.     AX = 0001h
  50420.     DS:DX -> communications control block (function 0001h)
  50421. Return: AX = status
  50422.         0000h  successful
  50423.         0001h  service not installed
  50424.         0002h  invalid service ID
  50425.         0098h  resource already in use
  50426.         009Eh  address family does not exist
  50427.         009Fh  socket type does not exist
  50428.         00A0h  protocol does not exist
  50429.         00A1h  no more sockets available
  50430.         00A2h  no more buffer space available
  50431. Note:    BANYAN can use any interrupt from 60h through 66h.  The Banyan
  50432.       interrupt handler is identified by the string "BANV" in the four
  50433.       bytes immediately preceding the interrupt handler
  50434.  
  50435. Format of control block:
  50436. Offset    Size    Description
  50437.  00h    WORD    0001h
  50438.  02h    WORD    pointer to argument block
  50439.  04h    WORD    error return code
  50440.  06h  4 BYTEs    reserved
  50441.  
  50442. Format of argument block:
  50443. Offset    Size    Description
  50444.  00h    WORD    pointer to 2-byte buffer for socket identifier
  50445.  02h    WORD    address family
  50446.         0003h Banyan
  50447.  04h    WORD    socket type
  50448.         in address family 0003h
  50449.             0001h IPC socket
  50450.             0002h SPP socket
  50451.  06h    WORD    protocol number
  50452.         FFFFh default
  50453.  08h    WORD    pointer to 16-byte buffer for socket address
  50454.  0Ah    WORD    local port number
  50455.         0000h if service should assign transient port number
  50456.         0001h to 01FFh well-known port number (assigned by Banyan)
  50457.  
  50458. Format of IPC port:
  50459. Offset    Size    Description
  50460.  00h    WORD    address family (always 0003h for Banyan ports)
  50461.  04h  4 BYTEs    network number (server's serial number)
  50462.  06h    WORD    subnet number  (0001h = server, 8000h-FFFEh = PC)
  50463.  08h    WORD    port ID (0001h-01FFh for "well-known" ports)
  50464.  0Ah    BYTE    hop count
  50465.  0Bh  5 BYTEs    filler
  50466. ----------610001-----------------------------
  50467. INT 61 - Banyan VINES - "Sosend" - INITIATE OUTPUT EVENT
  50468.     AX = 0001h
  50469.     DS:DX -> communications control block (function 0002h)
  50470. Return: AX = status
  50471.         0000h  successful
  50472.         0001h  service not installed
  50473.         0002h  invalid service ID
  50474.         0003h-000Ah reserved for BANV interface errors
  50475.         0097h  invalid socket identifier
  50476.         009Bh  destination node unreachable
  50477.         009Ch  message overflow
  50478.         009Dh  destination socket nonexistent
  50479.         00A2h  no more buffer space
  50480.         00A3h  timeout
  50481.         00B1h  resource disconnect
  50482. Note:    BANYAN can use any interrupt from 60h through 66h.  The Banyan
  50483.       interrupt handler is identified by the string "BANV" in the four
  50484.       bytes immediately preceding the interrupt handler
  50485.  
  50486. Format of control block:
  50487. Offset    Size    Description
  50488.  00h    WORD    0002h
  50489.  02h    WORD    pointer to argument block (see below)
  50490.  04h    WORD    error return code
  50491.         0000h successful
  50492.         0097h invalid socket ID
  50493.         00A2h no more buffer space
  50494.         00A3h timeout event
  50495.         00A5h resource not available
  50496.         00A6h internal communication failure
  50497.         00B1h resource disconnect
  50498.  06h  4 BYTEs    reserved
  50499.  
  50500. Format of argument block:
  50501. Offset    Size    Description
  50502.  00h    WORD    routine metric
  50503.  02h    WORD    error return code
  50504.  04h    WORD    socket identifier
  50505.  06h    WORD    pointer to send buffer
  50506.  08h    WORD    length of send buffer
  50507.  0Ah    WORD    flags
  50508.         bit 0: async request
  50509.             1: reliable message
  50510.             3: end of user message received
  50511.             4: vectored request (if set, send buffer contains buffer
  50512.             descriptors)
  50513.             5: connection-specific receive
  50514.             6: change to connection-specific receive mode
  50515.  0Ch 16 BYTEs    socket address (see below)
  50516.  1Ch    WORD    timeout value in multiples of 200ms
  50517.  1Eh    WORD    connection identifier
  50518.  20h    WORD    type of request
  50519.         0001h send message
  50520.         0002h establish a virtual connection
  50521.         0003h terminate a virtual connection
  50522.  
  50523. Format of buffer descriptor:
  50524. Offset    Size    Description
  50525.  00h    WORD    data segment
  50526.  02h    WORD    buffer pointer
  50527.  04h    WORD    buffer length
  50528.  06h    WORD    character count
  50529.  
  50530. Format of socket address for unreliable datagrams:
  50531. Offset    Size    Description
  50532.  00h    WORD    0003h      address family
  50533.  02h    DWORD    FFFFFFFFh network number
  50534.  06h    WORD    FFFFh      subnet number
  50535.  08h    WORD          local port number
  50536.  0Ah    BYTE    00h-0Fh      hop count
  50537.  0Bh  5 BYTEs    0000h      filler
  50538. ----------610001-----------------------------
  50539. INT 61 - Banyan VINES - "Sorec" - RECEIVE INPUT EVENT NOTIFICATION
  50540.     AX = 0001h
  50541.     DS:DX -> communications control block (function 0003h)
  50542. Return: AX = status
  50543.         0000h  successful
  50544.         0001h  service not installed
  50545.         0002h  invalid service ID
  50546.         0003h-000Ah reserved for BANV interface errors
  50547.         0097h  invalid socket identifier
  50548.         00A2h  no more buffer space
  50549.         00A3h  timeout
  50550. Note:    BANYAN can use any interrupt from 60h through 66h.  The Banyan
  50551.       interrupt handler is identified by the string "BANV" in the four
  50552.       bytes immediately preceding the interrupt handler
  50553.  
  50554. Format of control block:
  50555. Offset    Size    Description
  50556.  00h    WORD    0003h
  50557.  02h    WORD    pointer to argument block (see below)
  50558.  04h    WORD    error return code
  50559.         0000h successful
  50560.         0097h invalid socket ID
  50561.         00A2h no more buffer space
  50562.         00A3h timeout event
  50563.         00A5h resource not available
  50564.         00A6h internal communication failure
  50565.         00B1h resource disconnect
  50566.  06h  4 BYTEs    reserved
  50567.  
  50568. Format of argument block:
  50569. Offset    Size    Description
  50570.  00h    WORD    character count
  50571.  02h    WORD    error return code
  50572.  04h    WORD    socket identifier
  50573.  06h    WORD    pointer to receive buffer
  50574.  08h    WORD    length of receive buffer
  50575.  0Ah    WORD    flags
  50576.         bit 0: async request
  50577.             2: flush receive buffer on overflow
  50578.             3: end of user message received
  50579.             4: vectored request (if set, receive buffer contains buffer
  50580.             descriptors)
  50581.             5: connection-specific receive
  50582.             6: change to connection-specific receive mode
  50583.  0Ch 16 BYTEs    socket address
  50584.  1Ch    WORD    timeout value in multiples of 200ms
  50585.  1Eh    WORD    connection identifier
  50586.  20h    WORD    type of response
  50587.         0001h message received
  50588.         0002h virtual connection established
  50589.         0003h virtual connection terminated
  50590.  
  50591. Format of buffer descriptor:
  50592. Offset    Size    Description
  50593.  00h    WORD    data segment
  50594.  02h    WORD    buffer pointer
  50595.  04h    WORD    buffer length
  50596.  06h    WORD    character count
  50597. ----------610001-----------------------------
  50598. INT 61 - Banyan VINES - "Soclose" - CLOSE A SOCKET
  50599.     AX = 0001h
  50600.     DS:DX -> communications control block (function 0004h)
  50601. Return: AX = status
  50602.         0000h  successful
  50603.         0001h  service not installed
  50604.         0002h  invalid service ID
  50605.         0003h-000Ah reserved for BANV interface errors
  50606.         0097h  invalid socket identifier
  50607. Note:    BANYAN can use any interrupt from 60h through 66h.  The Banyan
  50608.       interrupt handler is identified by the string "BANV" in the four
  50609.       bytes immediately preceding the interrupt handler
  50610.  
  50611. Format of control block:
  50612. Offset    Size    Description
  50613.  00h    WORD    0004h
  50614.  02h    WORD    pointer to argument block (see below)
  50615.  04h    WORD    error return code
  50616.  06h  4 BYTEs    reserved
  50617.  
  50618. Format of argument block:
  50619. Offset    Size    Description
  50620.  00h    WORD    socket identifier
  50621. ----------610001-----------------------------
  50622. INT 61 - Banyan VINES - "Sowait" - WAIT FOR ASYNCHRONOUS EVENT COMPLETION
  50623.     AX = 0001h
  50624.     DS:DX -> communications control block (function 0005h)
  50625. Return: AX = status
  50626.         0000h  successful
  50627.         0001h  service not installed
  50628.         0002h  invalid service ID
  50629.         0003h-000Ah reserved for BANV interface errors
  50630.         00A2h  no more buffer space available
  50631.         00A3h  timeout event
  50632. Notes:    BANYAN can use any interrupt from 60h through 66h.  The Banyan
  50633.       interrupt handler is identified by the string "BANV" in the four
  50634.       bytes immediately preceding the interrupt handler
  50635.     returns results for all asynchronous operations invoked from the
  50636.       data segment used for this call
  50637.  
  50638. Format of control block:
  50639. Offset    Size    Description
  50640.  00h    WORD    0005h
  50641.  02h    WORD    pointer to argument block (see below)
  50642.  04h    WORD    error return code
  50643.  06h  4 BYTEs    reserved
  50644.  
  50645. Format of argument block:
  50646. Offset    Size    Description
  50647.  00h    WORD    pointer to WORD event pointer
  50648.  02h    WORD    timeout in multiples of 200ms, FFFFh = infinite
  50649. ----------610001-----------------------------
  50650. INT 61 - Banyan VINES - "Sosession" - REGISTER APPLICATION WITH COMM SERVICE
  50651.     AX = 0001h
  50652.     DS:DX -> communications control block (function 0008h)
  50653. Return: AX = status
  50654.         0000h  successful
  50655.         00A2h  no more buffer space available
  50656. Note:    BANYAN can use any interrupt from 60h through 66h (default 61h).  The
  50657.       Banyan interrupt handler is identified by the string "BANV" in the
  50658.       four bytes immediately preceding the interrupt handler
  50659.  
  50660. Format of control block:
  50661. Offset    Size    Description
  50662.  00h    WORD    0008h
  50663.  02h    WORD    process type
  50664.         0001h transient process
  50665.         0002h resident process
  50666.  04h    WORD    error return code
  50667.  06h  4 BYTEs    reserved
  50668. ----------610001-----------------------------
  50669. INT 61 - Banyan VINES - "Soint" - SET USER COMPLETION FUNCTION
  50670.     AX = 0001h
  50671.     DS:DX -> communications control block (function 000Bh)
  50672. Return: AX = status
  50673.         0000h  successful
  50674.         0001h  service not installed
  50675.         0002h  invalid service ID
  50676.         0003h-000Ah reserved for BANV interface errors
  50677.         00A2h  no more buffer space available
  50678. Notes:    BANYAN can use any interrupt from 60h through 66h.  The Banyan
  50679.       interrupt handler is identified by the string "BANV" in the four
  50680.       bytes immediately preceding the interrupt handler
  50681.     FAR user function is invoked with SS,DS, and ES set to segment of
  50682.       control block, and with the stack containing
  50683.         DWORD    return address
  50684.         WORD    argument pointer (sosend or sorec argument block)
  50685.         WORD    error return code
  50686.             0000h argument pointer is valid
  50687.             00A3h timeout
  50688.  
  50689. Format of control block:
  50690. Offset    Size    Description
  50691.  00h    WORD    000Bh
  50692.  02h    WORD    pointer to argument block (see below)
  50693.  04h    WORD    error return code
  50694.  06h  2 BYTEs    reserved
  50695.  08h    WORD    user CS register
  50696.  
  50697. Format of argument block:
  50698. Offset    Size    Description
  50699.  00h    WORD    pointer to user interrupt function    
  50700.  02h    WORD    pointer to user stack
  50701.  04h    WORD    initial timeout value in multiples of 200ms, FFFFh = infinite
  50702. ----------610001-----------------------------
  50703. INT 61 - OPTIMA 1024 VGA-Sync - CENTER ZOOM WINDOW
  50704.     AX = 0001h
  50705.     BX = X coordinate to center
  50706.     CX = Y coordinate to center
  50707. Notes:    Positions the zoom window such that the specified window-relative
  50708.       coordinates appear as close as possible to the center of the
  50709.       display.  Useful for scrolling and panning.
  50710.     INT 61h is the default interrupt; the actual interrupt number can be
  50711.       obtained by calling INT 16/AH=FFh
  50712. SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0002h"OPTIMA"
  50713. SeeAlso: INT 61/AX=0005h"OPTIMA"
  50714. ----------610002-----------------------------
  50715. INT 61 - Banyan VINES - 3270 INTERFACE
  50716.     AX = 0002h
  50717.     BH = function
  50718.         00h "pi2reset"  reset 3270/SNA or 3270/BSC driver
  50719.         02h "pi2bsc" (3270/BSC only)
  50720.         03h    "pi2get"    get information stored in 3270 resident driver
  50721.         04h "pi2put"    store information in 3270 resident driver
  50722.         05h "pi2gcur"   get current screen position
  50723.         07h "pi2sdat"   send data keystroke
  50724.         08h "pi2scom"   send command keystroke
  50725.         0Ah "pi2field"  get field info for arbitrary screen positions
  50726.         0Fh "pi2stat"   get logical unit/device status
  50727.         12h "pi2nlus"   determine logical unit/device assignment
  50728.         13h "pi2gate"   specifies comm port address to gateway service
  50729.         14h "pi2attach" attach a logical unit/device
  50730.         15h "pi2sdev"   save logical unit/device info in resident driver
  50731.                 (not supported in >3.0)
  50732.         16h "pi2gdev"   get device information (not supported in >3.0)
  50733.         17h "pi2luinfo" get info about specific logical unit/device
  50734.         18h "pi2gerr"   get finer error detail
  50735.         19h "pi2dhold"  (3270/SNA only)  holds a 3270 device
  50736.         1Ah "pi2shut"   release memory-resident module
  50737.         1Ch "pi2sprof"  save profile info in res driver (not supp in >3.0)
  50738.         1Dh "pi2gprof"  get prevsly stored profile info (not supp in >3.0)
  50739.     DS:CX -> argument block (except BH=00h,1Ah)
  50740. Return: AX = status
  50741.         0000h successful
  50742.         000Bh invalid parameter or data does not fit data area
  50743.         000Ch another code path currently active in resident driver
  50744.         000Dh operation currently not allowed
  50745.         0032h encountered connection disconnect error
  50746.         0033h encountered "sosend" completion error
  50747.         0034h encountered "sosend" communication error
  50748.         0035h attach request refused.  extended error info via "pi2gerr":
  50749.             01h resource unavailable
  50750.             02h invalid type
  50751.             03h version mismatch
  50752.             04h invalid logical unit number
  50753.             05h error during ARL processing
  50754.             06h no access for user
  50755.         0071h encountered "sosock" error
  50756.         0072h encountered unrecognizable error
  50757.         0073h encountered "sowait" error (extended info via "pi2gerr")
  50758.         0074h encountered invalid type-of-request on "sowait"
  50759.         0075h encountered "sorec" error (extended info via "pi2gerr")
  50760.         0076h encountered "sorec" completion error (ext info via "pi2gerr")
  50761.         0077h encountered connection request
  50762.         0078h encountered unrecognizable data
  50763.         0079h encountered unknown connection ID (ext info via "pi2gerr")
  50764. Notes:    Either 3270/SNA or 3270/BSC interface may use AX=0002h, depending on
  50765.       which is loaded first.  The other interface will use AX=000Ah
  50766.     Status codes greater than 63h indicate an inconsistency in the 3270/SNA
  50767.       or 3270/BSC resident driver, which must be reloaded by the user
  50768.  
  50769. Format of argument block for BH=03h,04h:
  50770. Offset    Size    Description
  50771.  00h    WORD    size of data area (max 256)
  50772.  02h  N BYTEs    data area
  50773.  
  50774. Format of argument block for BH=05h:
  50775. Offset    Size    Description
  50776.  00h    WORD    logical unit/device number
  50777.  02h    WORD    pointer to WORD buffer for cursor index
  50778.  04h    WORD    pointer to BYTE buffer for current field attribute
  50779.  
  50780. Format of argument block for BH=07h:
  50781. Offset    Size    Description
  50782.  00h    WORD    logical unit/device number
  50783.  02h    WORD    ASCII data byte
  50784.  04h    WORD    pointer to WORD count of characters which will need updating
  50785.  
  50786. Format of argument block for BH=08h:
  50787. Offset    Size    Description
  50788.  00h    WORD    logical unit/device number
  50789.  02h    WORD    keystroke
  50790.         0000h Enter
  50791.         0001h Clear
  50792.         0002h PA1
  50793.         0003h PA2
  50794.         0004h PA3
  50795.         0005h PF1
  50796.         ...
  50797.         001Ch PF24
  50798.         001Dh CSELECT (cursor select)
  50799.         001Eh Insert
  50800.         001Fh Delete
  50801.         0020h EOField
  50802.         0021h EINPUT (erase input)
  50803.         0022h Reset
  50804.         0023h Attention
  50805.         0024h SysReq
  50806.         0025h Duplicate
  50807.         0026h Fieldmark
  50808.         0027h Home
  50809.         0028h NextLine
  50810.         0029h Tab
  50811.         002Ah BackTab
  50812.         002Bh cursor up
  50813.         002Ch cursor down
  50814.         002Dh cursor right
  50815.         002Eh cursor left
  50816.         002Fh double cursor right
  50817.         0030h double cursor left
  50818.         0031h PRINT
  50819.         0032h CANCEL
  50820.         0033h Backspace
  50821.  
  50822. Format of argument block for BH=0Ah:
  50823. Offset    Size    Description
  50824.  00h    WORD    logical unit/device number
  50825.  02h    WORD    screen index
  50826.  04h    WORD    pointer to WORD buffer for field length
  50827.  06h    WORD    pointer to WORD buffer for offset in screen of field start
  50828.  
  50829. Format of argument block for BH=0Fh:
  50830. Offset    Size    Description
  50831.  00h    WORD    logical unit/device number
  50832.  02h    WORD    clear mask (clear these bits of status after returning status)
  50833.  04h    WORD    pointer to WORD buffer for status
  50834.         bit 10: status modified
  50835.         bit  9: buffer modified
  50836.         bit  8: set cursor
  50837.         bit  5: sound alarm
  50838.         bits 0,1: size of print line for printer logical units
  50839.             00 unformatted line
  50840.             01 40-character line
  50841.             10 64-character line
  50842.             11 80-character line
  50843.  
  50844. Format of argument block for BH=12h:
  50845. Offset    Size    Description
  50846.  00h    WORD    pointer to WORD buffer for number of logical units or devices
  50847.  02h    WORD    pointer to WORD buffer for version number
  50848.  04h    WORD    pointer to 64-byte buffer for logical unit/device list
  50849.  
  50850. Format of argument block for BH=13h:
  50851. Offset    Size    Description
  50852.  00h 16 BYTEs    communications port address (see AX=0001h#"Sosock")
  50853.  
  50854. Format of argument block for BH=14h:
  50855. Offset    Size    Description
  50856.  00h    WORD    logical unit/device number 
  50857.         0000h attach any free device of the specified type
  50858.  02h    WORD    logical unit/device type
  50859.         (3270/SNA) 01h, 02h, or 03h
  50860.         (3270/BSC) 02h display
  50861.         (3270/BSC) 03h printer
  50862.  04h    WORD    pointer to WORD buffer for attached logical unit/device number
  50863.  
  50864. Format of argument block for BH=16h:
  50865. Offset    Size    Description
  50866.  00h    WORD    pointer to 18-byte buffer for device block (see below)
  50867.         first WORD must be set to desired logical unit/device number
  50868.  
  50869. Format of argument block for BH=17h:
  50870. Offset    Size    Description
  50871.  00h    WORD    logical unit/device number
  50872.  02h    WORD    pointer to information block in caller's DS (see below)
  50873.  
  50874. Format of argument block for BH=18h:
  50875. Offset    Size    Description
  50876.  00h    WORD    pointer to WORD buffer for major error code
  50877.  02h    WORD    pointer to WORD buffer for minor error code
  50878.  
  50879. Format of argument block for BH=19h:
  50880. Offset    Size    Description
  50881.  00h    WORD    logical unit/device number
  50882.  
  50883. Format of argument block for BH=1Ch,1Dh:
  50884. Offset    Size    Description
  50885.  00h    WORD    pointer to profile block in caller's DS (see below)
  50886.  
  50887. Format of device block, argument block for BH=15h:
  50888. Offset    Size    Description
  50889.  00h    WORD    logical unit/device number
  50890.  02h    WORD    logical unit/device type
  50891.  04h    WORD    display model number
  50892.  06h    WORD    numeric checking
  50893.  08h    WORD    status line
  50894.  0Ah    BYTE    unprotected normal field attribute
  50895.  0Bh    BYTE    unprotected intensified field attribute
  50896.  0Ch    BYTE    protected normal field attribute
  50897.  0Dh    BYTE    protected intensified field attribute
  50898.  0Eh    WORD    reserved
  50899.  10h    WORD    printer port number
  50900.  
  50901. Format of information block:
  50902. Offset    Size    Description
  50903.  00h    WORD    device model number
  50904.  02h    DWORD    screen buffer pointer
  50905.  06h    DWORD    status line pointer (see below)
  50906.  0Ah    DWORD    reserved
  50907.  
  50908. Format of status line:
  50909. Offset    Size    Description
  50910.  00h    BYTE    comm line status
  50911.         00h inactive
  50912.         01h active
  50913.  01h    BYTE    activation level
  50914.         01h physical unit activated
  50915.         02h logical unit also activated
  50916.         03h session is bound
  50917.  02h    BYTE    data traffic state
  50918.         00h inactive
  50919.         01h active
  50920.  03h    BYTE    screen ownership
  50921.         00h SLU->PLU sessoin owns screen
  50922.         01h SLU->SSCP session owns screen
  50923.  04h    BYTE    keyboard status
  50924.         00h UNLOCK - ready to accept data
  50925.         01h TIME - aid was struck
  50926.         02h SYSTEM - received response no restore
  50927.         03h FUNCTION - unavailable keyboard function
  50928.         04h INPUT - not currently used
  50929.         05h ENDFIELD - field filled in insert mode
  50930.         06h PROTECTED - attempt to enter in protected field
  50931.         07h NUMERIC - attempt to enter in numeric field
  50932.         08h PROGRAM - error in outbound data stream
  50933.  05h    BYTE    insert mode
  50934.         01h if in insert mode
  50935.  06h    BYTE    numeric
  50936.         01h if current screen buffer is numeric only
  50937.  07h    BYTE    printer status
  50938.         00h printer not assigned
  50939.         01h printer is inactive
  50940.         02h printer error
  50941.         03h currently printing
  50942.         04h printer is busy
  50943.         05h printer is very busy
  50944.  08h    BYTE    printer assignment
  50945.  09h    BYTE    maximum size of network name
  50946.  0Ah  N BYTEs    ASCIZ network name
  50947.     BYTE    maximum size of message window
  50948.       M BYTEs    null-terminated message window
  50949.     BYTE    code set
  50950.         00h EBCDIC
  50951.         01h ASCII
  50952.       M BYTEs    extended attributes
  50953.         01h extended attributes are in effect (stored at screen+1920)
  50954.             each extended attribute specifies
  50955.             bits 0,1: 00=normal, 01=blink, 10=reverse, 11=underscor
  50956.             bits 2-4: 000=default,001=blue,010=red,011=pink,
  50957.                   100=green,101=turquoise,110=yellow,111=white
  50958.     BYTE    extended color
  50959.         01h other than base color is in effect
  50960.  
  50961. Format of profile block:
  50962. Offset    Size    Description
  50963.  00h 64 BYTEs    gateway service name
  50964.  40h 16 BYTEs    gateway comm port address
  50965.  50h    WORD    primary logical unit number
  50966.  52h    WORD    secondary logical unit type
  50967.  54h    WORD    secondary logical unit number
  50968.  56h    WORD    printer assignment
  50969.  58h 50 BYTEs    keyboard definitions filename
  50970. ----------610002-----------------------------
  50971. INT 61 - OPTIMA 1024 VGA-Sync - END ZOOM
  50972.     AX = 0002h
  50973. Note:    switches off zoom and returns window to its original state
  50974.     INT 61h is the default interrupt; the actual interrupt number can be
  50975.       obtained by calling INT 16/AH=FFh
  50976. SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA"
  50977. ----------610003-----------------------------
  50978. INT 61 - Banyan VINES - ASYNCHRONOUS TERMINAL EMULATION
  50979.     AX = 0003h
  50980.     DS:BX -> argument block with function number (see below)
  50981. Return: AX = status
  50982.         0000h successful
  50983.         000Bh invalid session ID
  50984.         000Ch session not active
  50985.         000Dh invalid request type
  50986.         000Eh invalid parameters
  50987.         000Fh out of heap space
  50988.         0010h timeout on send
  50989.         0011h Banyan communications error
  50990.         0012h session not waiting for host
  50991.         0013h session is active
  50992.         0014h duplicate suspend session request
  50993.         0015h no session suspended
  50994.         0016h ring data buffer full
  50995.         0017h printer error encountered
  50996.         0018h Banyan communications error
  50997.         0019h unable to make connection
  50998.         001Ah no ring buffer specified at startup
  50999.         001Bh service is down
  51000.         001Ch invalid service name
  51001.         001Dh service is closed
  51002.         001Eh invalid connection name
  51003.         001Fh max session limit reached for service
  51004.         0020h access rights list for connection/dialout does not include
  51005.             this user
  51006.         0021h service not responding
  51007.         0022h missing telephone number
  51008.  
  51009. Format of argument block:
  51010. Offset    Size    Description
  51011.  00h    BYTE    session ID (00h)
  51012.  01h    BYTE    asynchronous interface request number
  51013.         00h initialize user buffer pointer information area
  51014.         01h send to host
  51015.         02h "control monitor"
  51016.         03h "flow control data": freeze/unfreeze display, ring buffer
  51017.         04h end active session
  51018.         05h set session parameter
  51019.         06h get session parameter
  51020.         07h set tab settings
  51021.         08h get tab settings
  51022.         09h refresh emulation screen
  51023.         0Ah suspend session temporarily
  51024.         0Bh restore previously suspended session
  51025.         0Ch set state of scroll lock checking
  51026.         0Dh exit emulation
  51027.         0Eh interrupt on character from host
  51028.         0Fh start a session
  51029.         10h start/stop printing of data received from host
  51030.         11h get file transfer parameters
  51031.         12h get connection information
  51032.         13h start/stop tracing data traffic in session
  51033.         14h interrupt on message from host
  51034.         15h reset error
  51035. ---request=00h---
  51036.  02h    WORD    pointer to info area in caller's current DS
  51037.         Offset    Size    Description
  51038.          00h    WORD    flags
  51039.                 0000h don't read interface's data buffer
  51040.                 0001h read data buffer
  51041.          02h    DWORD    pointer to ring buffer
  51042.          06h    WORD    length of ring buffer
  51043.          08h    WORD    ring buffer offset to last byte read by caller
  51044.          0Ah    DWORD    pointer to WORD containing offset of last byte
  51045.                   in ring buffer filled
  51046.          0Eh    DWORD    pointer to screen buffer
  51047.          12h    DWORD    pointer to field containing cursor position
  51048.          16h    DWORD    pointer to terminal status area (see below)
  51049. ---request=01h---
  51050.  02h    BYTE    type
  51051.         00h ASCII byte
  51052.         01h ASCII string
  51053.         02h terminal function code
  51054.         03h up arrow
  51055.         04h down arrow
  51056.         05h left arrow
  51057.         06h right arrow
  51058.         07h break
  51059.  03h  N BYTEs    type-specific info
  51060.         Offset    Size    Description
  51061.         ---ASCII byte---
  51062.          03h    BYTE    byte to send to host
  51063.         ---ASCII string---
  51064.          03h    WORD    length of string
  51065.          05h    WORD    pointer to string
  51066.         ---terminal function code (VT52/VT100)---
  51067.          03h    BYTE    function code
  51068.                 00h keypad 0
  51069.                 01h keypad 1
  51070.                 ...
  51071.                 09h keypad 9
  51072.                 0Ah keypad -
  51073.                 0Bh keypad ,
  51074.                 0Ch keypad .
  51075.                 0Dh keypad ENTER
  51076.                 0Eh PF1
  51077.                 0Fh PF2
  51078.                 10h PF3
  51079.                 11h PF4
  51080.         ---terminal function code (IBM3101)---
  51081.          03h    BYTE    function code
  51082.                 00h PF1
  51083.                 ...
  51084.                 07h PF8
  51085.                 08h Home
  51086. ---request=02h---
  51087.  02h    BYTE    display flag
  51088.         00h don't display data received from host
  51089.         01h display data
  51090. ---request=03h---
  51091.  02h    BYTE    flow control flag
  51092.         00h allow characters to be put into display or ring buffer
  51093.         01h don't place any more characters into display or ring buffer
  51094. ---request=05h,06h---
  51095.  02h    BYTE    parameter number
  51096.         00h line speed (00h=any, 01h=50, 02h=110, 03h=134.5, 04h=150,
  51097.             05h=300,06h=600,07h=1200,08h=2400,09h=4800, 0Ah=9600)
  51098.         01h parity (00h=none, 01h=odd, 02h=even)
  51099.         02h duplex (00h=full, 01h=half)
  51100.         03h character size (00h=7 bits, 01h=8 bits)
  51101.         04h stop bits (00h=1, 01h=2)
  51102.         05h XON/XOFF flow control (00h=no, 01h=yes)
  51103.         07h intercharacter delay in tenths of a second
  51104.         08h interline delay in tenths of a second
  51105.         09h auto linefeed (00h=no, 01h=yes)
  51106.         0Ah filter control characters (00h=no, 01h=yes)
  51107.         0Bh terminal type (00h=VT100,01h=glassTTY,02h=VT52,03h=IBM3101)
  51108.         0Ch auto wrap (00h=no, 01h=yes)
  51109.         0Dh cursor shape (00h=underscore, 01h=block)
  51110.         0Eh character set (00h=UK, 01h=US ASCII)
  51111.         0Fh printer port (00h=LPT1, 01h=LPT2, 02h=LPT3)
  51112.  03h    BYTE    parameter value (returned for 06h)
  51113. ---request=07h,08h---
  51114.  02h    WORD    pointer to 80-byte buffer in caller's current DS
  51115.           each byte = 00h if no tab, 01h if tab at that position
  51116. ---request=0Ah---
  51117.  02h    WORD    size of session information to be saved
  51118.  04h    WORD    pointer to buffer in caller's DS
  51119. ---request=0Bh---
  51120.  02h    WORD    size of buffer into which session info is restored
  51121.  04h    WORD    pointer to buffer in caller's DS
  51122. ---request=0Ch---
  51123.  02h    BYTE    check_scroll_lock flag
  51124.         00h off
  51125.         01h on (display of host data stopped while ScrollLock on)
  51126. ---request=0Eh,14h---
  51127.  02h    DWORD    pointer to routine to be called (0000h:0000h = don't call)
  51128.  06h    DWORD    stack pointer to use when call is made
  51129. ---request=0Fh---
  51130.  02h    WORD    pointer to information area in caller's current DS
  51131.         Offset    Size    Description
  51132.          00h    WORD    length of service name
  51133.          02h    WORD    pointer to service name in caller's DS
  51134.          04h    BYTE    type of connection
  51135.                 (00h=connection name, 01h=dialout)
  51136.          05h    WORD    length of connection name/telephone number
  51137.          07h    WORD    pointer to connection name/telephone number
  51138. ---request=10h---
  51139.  02h    WORD    print capture flag (00h=off, 01h=on)
  51140. ---request=11h---
  51141.  02h    WORD    pointer to info area in caller's current DS
  51142.         Offset    Size    Description
  51143.          00h    BYTE    protocol flag (00h none, 01h Kermit)
  51144.          01h    BYTE    direction flag (00h send, 01h receive)
  51145.          02h    BYTE    length of null-terminated PC filename
  51146.          03h    DWORD    pointer to null-terminated PC filename
  51147.          07h    BYTE    length of null-terminated host filename
  51148.          08h    DWORD    pointer to null-terminated host filename
  51149. ---request=12h---
  51150.  02h    WORD    pointer to info area in caller's current DS (see below)
  51151.         Offset    Size    Description
  51152.          00h    WORD    length of service name (returned)
  51153.          02h    WORD    pointer to 64-byte buffer for service name
  51154.          04h    BYTE    type of connection
  51155.                 00h connection name
  51156.                 01h dialout
  51157.          05h    WORD    length of connection name/telephone number
  51158.          07h    WORD    pointer to 64-byte buffer for name/telno
  51159.          09h    BYTE    server line number being used (returned)
  51160. ---request=13h---
  51161.  02h    BYTE    trace flag (00h=off, 01h=on)
  51162.  
  51163. Format of terminal status area:
  51164. Offset    Size    Description
  51165.  00h    BYTE    status of session: 4Eh=oNline, 46h=oFfline, 57h=Waiting
  51166.  01h    BYTE    terminal type (00h=VT100, 01h=TTY, 02h=VT52, 03h=IBM3101)
  51167.  02h    BYTE    current keypad mode (VT100,VT52 only)
  51168.         4Eh ("N") numeric mode
  51169.         41h ("A") application mode
  51170.  03h  4 BYTEs    current state of LEDs (VT100 only)
  51171.         00h off
  51172.         01h on
  51173.  07h    WORD    line error count
  51174.  09h    WORD    primary error code
  51175.         0000h no error
  51176.         0001h unable to make connection
  51177.         0002h communications error, restart session
  51178.         0003h async terminal emulation service unavailable
  51179.         0004h lost carrier
  51180.         0005h all matching lines busy
  51181.         0006h no lines defined for connection name
  51182.         0007h no dial lines available on server
  51183.         0008h no matching dial lines available
  51184.         0009h out of heap space
  51185.         000Ah service error encountered
  51186.         000Bh timed out waiting to connect
  51187.         000Ch communications error
  51188.         000Dh communications error
  51189.         000Eh host wants file transferred to/from PC
  51190.         000Fh host software changed session parameter
  51191.         0010h host software changed tap settings
  51192.         0011h host software changed LED indicator
  51193.         0012h host software changed display background (secondary error
  51194.             code 00h for white on black, 01h for black on white)
  51195.         0013h host software changed display option (secondary error
  51196.             code 00h for off, 01h for on)
  51197.         0014h communications error
  51198.         0015h communications error
  51199.         0016h unable to make connection
  51200.         0017h unable to make connection
  51201.  0Bh    WORD    secondary error code
  51202. ----------610003-----------------------------
  51203. INT 61 - OPTIMA 1024 VGA-Sync - REPORT ZOOM FACTOR
  51204.     AX = 0003h
  51205. Return: AX = zoom factor
  51206. Note:    returns the current zoom factor
  51207.     INT 61h is the default interrupt; the actual interrupt number can be
  51208.       obtained by calling INT 16/AH=FFh
  51209. SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0005h"OPTIMA"
  51210. ----------610004-----------------------------
  51211. INT 61 - Banyan VINES - GET SERVER SERIAL NUMBER
  51212.     AX = 0004h
  51213.     DS:DX -> request block (function 0008h)
  51214. Return: AX = status
  51215.         0000h server ID returned in request block
  51216.         000Fh invalid drive
  51217.         0015h drive not ready
  51218.  
  51219. Format of request block:
  51220. Offset    Size    Description
  51221.  00h    WORD    0008h
  51222.  02h    WORD    drive number (0=default, 1=A, ...)
  51223.  04h  6 BYTEs    buffer for server ID
  51224. ----------610004-----------------------------
  51225. INT 61 - OPTIMA 1024 VGA-Sync - ENTER SPECIFY MODE
  51226.     AX = 0004h
  51227. Note:    Specify Mode is enabled by hot key (seeAlso below), and allows
  51228.     panning and zooming via the numeric keypad.
  51229.     INT 61h is the default interrupt; the actual interrupt number can be
  51230.       obtained by calling INT 16/AH=FFh
  51231.     The Zoom interrupt no. can be obtained with function INT 16h,AH=0FFh
  51232. SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0007h"OPTIMA"
  51233. ----------610005-----------------------------
  51234. INT 61 - Banyan VINES - PRINTER CONTROL
  51235.     AX = 0005h
  51236.     DS:DX -> request block
  51237. Return: AX = status
  51238.         0000h successful
  51239.         0001h network software not installed or incompatible
  51240. SeeAlso: INT 2F/AX=D702h
  51241.  
  51242. Format of request block:
  51243. Offset    Size    Description
  51244.  00h    WORD    function
  51245.         0201h "endspool" all data for a print job has been sent
  51246.         0205h "getactive" get currently active printer port
  51247.  02h    WORD    number of active port (1-3)
  51248.  04h    WORD    ??? (0 for func 0201h, 3 for func 0205h)
  51249.  06h    WORD    0000h
  51250. ----------610005-----------------------------
  51251. INT 61 - OPTIMA 1024 VGA-Sync - QUERY ZOOM WINDOW
  51252.     AX = 0005h
  51253.     BX:CX -> buffer for window parameters (see below)
  51254. Note:    INT 61h is the default interrupt; the actual interrupt number can be
  51255.       obtained by calling INT 16/AH=FFh
  51256. SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0003h"OPTIMA"
  51257. SeeAlso: INT 61/AX=0006h"OPTIMA"
  51258.  
  51259. Format of window parameters:
  51260. Offset    Size    Description
  51261.  00h    WORD    X start of zoom window
  51262.  02h    WORD    Y start of zoom window
  51263.  04h    WORD    X end of zoom window
  51264.  06h    WORD    Y end of zoom window
  51265.  08h    WORD    current zoom factor
  51266.  0Ah    WORD    zoom offset start X
  51267.  0Ch    WORD    zoom offset start Y
  51268. ----------610006-----------------------------
  51269. INT 61 - OPTIMA 1024 VGA-Sync - SET ZOOM WINDOW
  51270.     AX = 0006h
  51271.     BX:CX -> zoom window description (see below)
  51272. Notes:    width of zoom window must be a multiple of the pixel replication
  51273.       factor
  51274.     INT 61h is the default interrupt; the actual interrupt number can be
  51275.       obtained by calling INT 16/AH=FFh
  51276. SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0001h"OPTIMA"
  51277. SeeAlso: INT 61/AX=0005h"OPTIMA",INT 61/AX=0008h"OPTIMA"
  51278.  
  51279. Format of zoom window description:
  51280. Offset    Size    Description
  51281.  00h    WORD    X start of zoom window
  51282.  02h    WORD    Y start of zoom window
  51283.  04h    WORD    X end of zoom window
  51284.  06h    WORD    Y end of zoom window
  51285. ----------610007-----------------------------
  51286. INT 61 - OPTIMA 1024 VGA-Sync - QUERY APPLICATION KEY
  51287.     AX = 0007h
  51288. Return: AX = 0000h/0001h
  51289. Notes:    In specify mode, the END key has been reserved for applications.
  51290.     Returns the current toggle state of that key. E.g. in the
  51291.       OPTIMA AutoCAD driver, 0 means, AutoCAD calls subfunction 0001h
  51292.       every time the cross cursor moves.
  51293.     INT 61h is the default interrupt; the actual interrupt number can be
  51294.       obtained by calling INT 16/AH=FFh
  51295. SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0001h"OPTIMA"
  51296. SeeAlso: INT 61/AX=0004h"OPTIMA",INT 7A"AutoCAD"
  51297. ----------610007BX0002-----------------------
  51298. INT 61 - Banyan VINES - GET PORTS FOR A SERVICE
  51299.     AX = 0007h
  51300.     BX = 0002h
  51301.     DS:DX -> StreetTalk service name
  51302.     DS:DI -> port record block (see below)
  51303. Return: AX = status
  51304.         0000h successful
  51305.         0001h PC network software not installed or incompatible
  51306.         03E9h incorrect name syntax
  51307.         03EAh organization name too long
  51308.         03EBh group name too long
  51309.         03ECh item name too long
  51310.         03EDh StreetTalk name too long
  51311.         03F3h organization not found
  51312.         03F4h group not found
  51313.         03F5h StreetTalk name not found
  51314.         03F8h not a StreetTalk name
  51315.         040Dh appropriate StreetTalk name unavailable
  51316.  
  51317. Format of port record block:
  51318. Offset    Size    Description
  51319.  00h    WORD    number of 17-byte elements
  51320.  02h 17 BYTEs    element (byte 00h = input port type, bytes 01h-10h = port)
  51321.         (see AX=0001h#"Sosock" for port format)
  51322. ----------610007BX0004-----------------------
  51323. INT 61 - Banyan VINES - SET PORTS FOR A SERVICE
  51324.     AX = 0007h
  51325.     BX = 0004h
  51326.     DS:DX -> StreetTalk name of service
  51327.     DS:DI -> port record block (see below)
  51328. Return: AX = status
  51329.         0000h successful
  51330.         0001h PC network software not installed or incompatible
  51331.         03E9h incorrect name syntax
  51332.         03EAh organization name too long
  51333.         03EBh group name too long
  51334.         03ECh item name too long
  51335.         03EDh StreetTalk name too long
  51336.         03F3h organization not found
  51337.         03F4h group not found
  51338.         03F5h StreetTalk name not found
  51339.         03F8h not a StreetTalk name
  51340.         0409h modify access denied
  51341.         040Dh appropriate StreetTalk name unavailable
  51342.  
  51343. Format of port record block:
  51344. Offset    Size    Description
  51345.  00h    WORD    number of 17-byte elements
  51346.  02h 17 BYTEs    element: byte 00h = input port type, 01h-10h = port
  51347.         (see AX=0001h#"Sosock" for port format)
  51348. ----------610007BX0005-----------------------
  51349. INT 61 - Banyan VINES - GET USER NAME
  51350.     AX = 0007h
  51351.     BX = 0005h
  51352.     DS:DX -> 64-byte buffer for user's StreetTalk name
  51353. Return: AX = status
  51354.         0000h successful
  51355.         0001h network software not installed or incompatible
  51356. Note:    if no user logged in, first byte of returned name will be 00h
  51357. ----------610007BX0006-----------------------
  51358. INT 61 - Banyan VINES - TRANSLATE ERROR INTO ASCII STRING
  51359.     AX = 0007h
  51360.     BX = 0006h
  51361.     SI = error code (>100)
  51362.     DS:DX -> 80-byte buffer for error text
  51363. Return: AX = status
  51364.         0000h successful
  51365.         0001h network software not installed or incompatible        
  51366. ----------610007BX0007-----------------------
  51367. INT 61 - Banyan VINES - VERIFY EXISTENCE OF NAME AND RETURN CANONICAL FORM
  51368.     AX = 0007h
  51369.     BX = 0007h
  51370.     DS:DX -> NiceName block (see below)
  51371. Return: AX = status
  51372.         0000h successful
  51373.         0001h PC network software not installed or incompatible
  51374.         03E9h incorrect name syntax
  51375.         03EAh organization name too long
  51376.         03EBh group name too long
  51377.         03ECh item name too long
  51378.         03EDh StreetTalk name too long
  51379.         03F3h organization not found
  51380.         03F4h group not found
  51381.         03F5h StreetTalk name not found
  51382.         03F8h not a StreetTalk name
  51383.         040Dh appropriate StreetTalk name unavailable
  51384. SeeAlso: AX=0007h/BX=0008h
  51385.  
  51386. Format of NiceName block:
  51387. Offset    Size    Description
  51388.  00h    WORD    type of name
  51389.         0064h organization
  51390.         00C8h group
  51391.         012Ch item
  51392.  02h    WORD    pointer to ASCIZ input name
  51393.  04h    WORD    pointer to 64-byte buffer for output name
  51394. ----------610007BX0008-----------------------
  51395. INT 61 - Banyan VINES - ENUMERATE StreetTalk NAMES
  51396.     AX = 0007h
  51397.     BX = 0008h
  51398.     DS:DX -> enumerate block (see below)
  51399. Return: AX = status
  51400.         0000h successful
  51401.         0411h all matching names have been returned
  51402.         0412h some groups unavailable, all available matches returned
  51403. Note:    each program using this call should continue until a nonzero status
  51404.       is returned; otherwise, some resources will not be freed for several
  51405.       hours
  51406. SeeAlso: AX=0007h/BX=0007h
  51407.  
  51408. Format of enumerate block:
  51409. Offset    Size    Description
  51410.  00h    WORD    return code
  51411.  02h    WORD    pointer to pattern string
  51412.  04h    WORD    enumerate type
  51413.         0064h organization
  51414.         00C8h group
  51415.         012Ch item
  51416.  06h    WORD    enumerate class
  51417.         0000h unspecified (return all matching items)
  51418.         0001h user names
  51419.         0002h service names
  51420.         0003h list names
  51421.         0004h nicknames
  51422.  08h    WORD    pointer to category criteria block (see below) or 0
  51423.  0Ah    WORD    pointer to array of 64-byte returned names
  51424.  0Ch    WORD    number of names returned
  51425.  0Eh  6 BYTEs    reserved for subsequent enumerated calls (set to zeros on first
  51426.           call)
  51427.  
  51428. Format of category criteria block:
  51429. Offset    Size    Description
  51430.  00h    WORD    exclude flag
  51431.         0000h return only items with the specified categories
  51432.         0001h return all items except those with the given categories
  51433.  02h    WORD    number of categories
  51434.  04h    WORD    category 1 value
  51435.  06h    WORD    category 2 value
  51436.         ...
  51437.  
  51438. Values for common service categories:
  51439.  0002h file service
  51440.  0003h print service
  51441.  0004h mail service
  51442.  0005h StreetTalk
  51443.  0006h time service
  51444.  0008h semaphore service
  51445.  0009h 3270/SNA service
  51446.  000Ah asynchronous terminal emulation service
  51447.  000Ch NETBIOS service
  51448.  000Dh PC-based service
  51449. ----------610008-----------------------------
  51450. INT 61 - OPTIMA 1024 VGA-Sync - SET ZOOM OFFSET
  51451.     AX = 0008h
  51452.     BX = X start of zoom offset
  51453.     CX = Y start of zoom offset
  51454. Notes:    specifies the first byte of video memory to appear in the zoom window
  51455.     INT 61h is the default interrupt; the actual interrupt number can be
  51456.       obtained by calling INT 16/AH=FFh
  51457. SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0006h"OPTIMA"
  51458. ----------610008BX0002-----------------------
  51459. INT 61 - Banyan VINES - POST MESSAGE ON LOCAL DISPLAY
  51460.     AX = 0008h
  51461.     BX = 0002h
  51462.     CX = flags
  51463.         bit 0: message will remain on screen until user presses ^X
  51464.         bit 1: ring bell after displaying message
  51465.         bit 2: blink
  51466.     DS:DX -> ASCIZ string to display (only first 80 chars used)
  51467. Return: AX = status
  51468.         0000h successful
  51469.         000Bh message display function currently busy
  51470.         000Ch message queue full
  51471. Note:    queues up to three messages to be displayed on the bottom line
  51472. ----------610008BX0003-----------------------
  51473. INT 61 - Banyan VINES - INTERCEPT VINES 25th-LINE MESSAGES AT LOCAL PC
  51474.     AX = 0008h
  51475.     BX = 0003h
  51476.     DS:DX -> request block
  51477. Return: AX = status
  51478.         0000h successful
  51479.         0001h network software not installed or incompatible
  51480. Notes:    message handler should not call BIOS or DOS functions, and should
  51481.       either call next handler or simply return
  51482.     to stop intercepting messages, set prev and next request blocks to
  51483.       point at each other
  51484.  
  51485. Format of request block:
  51486. Offset    Size    Description
  51487.  00h    DWORD    pointer to user-written message handler
  51488.  04h    DWORD    pointer to next request block (filled in by VINES)
  51489.  08h    DWORD    pointer to previous request block (filled in by VINES)
  51490.  0Ch    DWORD    pointer to message storage area (filled by VINES) (see below)
  51491.  
  51492. Format of message storage area:
  51493. Offset    Size    Description
  51494.  00h 16 BYTEs    IPC port of message sender (see AX=0001h#"Sosock")
  51495.  10h    BYTE    message flags
  51496.  11h    WORD    reserved
  51497.  13h    BYTE    length of message
  51498.  14h 80 BYTEs    message text
  51499. ----------61000A-----------------------------
  51500. INT 61 - Banyan VINES - SECONDARY 3270 INTERFACE
  51501.     AX = 000Ah
  51502. Notes:    either 3270/SNA or 3270/BSC interface will use AX=000Ah, depending on
  51503.       which is loaded second.  The first interface loaded will use AX=0002h
  51504. SeeAlso: INT 61/AX=0002h
  51505. ----------6101-------------------------------
  51506. INT 61 - Banyan VINES - CHECK SERVICE
  51507.     AH = 01h
  51508.     AL = service ID
  51509.         01h communications
  51510.         02h primary 3270 emulation
  51511.         03h async terminal emulation
  51512.         04h file deflection
  51513.         07h StreetTalk
  51514.         08h environment
  51515.         0Ah secondary 3270 emulation
  51516.         0Bh semaphore service
  51517.         0Ch 3270 emulation active status
  51518.         0Dh 3270 keyboard interrupt simulator
  51519. Return: AX = status
  51520.         0000h installed
  51521.         0001h not installed
  51522.         0002h invalid ID
  51523. ----------6102-------------------------------
  51524. INT 61 - Banyan VINES - GET REVISION NUMBER
  51525.     AH = 02h
  51526.     DS:DX -> 2-byte buffer for result
  51527. Return: AX = 0000h installed
  51528.         DS:DX buffer contains revision number as
  51529.         10000d * major_ver + 100d * minor_ver + patch_revision
  51530. ----------6105-------------------------------
  51531. INT 61 u - PC/TCP kernel v2.05 - "get_addr" - ???
  51532.     AH = 05h
  51533.     BX = connection handle???
  51534. Return: CF clear if successful
  51535.         DX:AX = ???
  51536.     CF set on error
  51537.         AX = error code (see INT 61"PC/TCP")
  51538. Notes:    the installation check consists of testing for the signature "TCPTSR"
  51539.       three bytes beyond the start of the interrupt handler
  51540.     INT 61 is the default; PC/TCP v2.05 may be configured to use any
  51541.       interrupt from 20h through E0h
  51542. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=06h
  51543. ----------6106-------------------------------
  51544. INT 61 u - PC/TCP kernel v2.05 - "net_info" - GET INTERFACE STATISTICS
  51545.     AH = 06h
  51546.     BX = connection handle???
  51547.     DS:SI -> 38-byte buffer (see below)
  51548. Return: CF clear if successful
  51549.         buffer filled
  51550.     CF set on error
  51551.         AX = error code (see INT 61"PC/TCP")
  51552. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=05h
  51553.  
  51554. Format of buffer:
  51555. Offset    Size    Description
  51556.  00h    WORD    ???
  51557.  02h    WORD    ???
  51558.  04h    WORD    ???
  51559.  06h    DWORD    IP address of interface (big-endian)
  51560.  0Ah    DWORD    subnet mask
  51561.  0Eh    WORD    ??? (apparently always 0001h)
  51562.  10h    DWORD    total packets received
  51563.  14h    DWORD    total packets sent
  51564.  18h    DWORD    receive errors
  51565.  1Ch    DWORD    send errors
  51566.  20h    WORD    ??? (apparently always 0006h)
  51567.  22h    DWORD    pointer to ???
  51568. ----------6107-------------------------------
  51569. INT 61 u - PC/TCP kernel v2.05 - "net_globalize" - ???
  51570.     AH = 07h
  51571.     BX = connection handle???
  51572. Return: CF clear if successful
  51573.         AX = ???
  51574.     CF set on error
  51575.         AX = error code (see INT 61"PC/TCP")
  51576. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51577. ----------6108-------------------------------
  51578. INT 61 u - PC/TCP kernel v2.05 - "net_release" - ???
  51579.     AH = 08h
  51580.     BX = connection handle???
  51581. Return: CF clear if successful
  51582.     CF set on error
  51583.         AX = error code (see INT 61"PC/TCP")
  51584. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51585. ----------6109-------------------------------
  51586. INT 61 u - PC/TCP kernel v2.05 - "net_releaseall" - ??? ALL
  51587.     AH = 09h
  51588. Return: CF clear
  51589. Notes:    performs function 08h on every connection handle???
  51590.     the installation check consists of testing for the signature "TCPTSR"
  51591.       three bytes beyond the start of the interrupt handler
  51592.     INT 61 is the default; PC/TCP v2.05 may be configured to use any
  51593.       interrupt from 20h through E0h
  51594. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51595. ----------610A-------------------------------
  51596. INT 61 - PC/TCP kernel v2.05 - "net_send" - ???
  51597.     AH = 0Ah
  51598.     ???
  51599. Return: ???
  51600. ----------610B-------------------------------
  51601. INT 61 - PC/TCP kernel v2.05 - "net_sendto" - ???
  51602.     AH = 0Bh
  51603.     ???
  51604. Return: ???
  51605. ----------610C-------------------------------
  51606. INT 61 u - PC/TCP kernel v2.05 - "net_stat" - GET CONNECTION STATISTICS
  51607.     AH = 0Ch
  51608.     BX = connection handle???
  51609.         FFFCh for kernel ICMP statistics
  51610.         FFFDh for kernel UDP statistics
  51611.         FFFEh for kernel IP statistics
  51612.         FFFFh for kernel TCP statistics
  51613.     DS:DX -> 64-byte buffer
  51614. Return: CF clear if successful
  51615.         buffer filled
  51616.     CF set on error
  51617.         AX = error code (see INT 61"PC/TCP")
  51618. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51619.  
  51620. Format of handle statistics:
  51621. Offset    Size    Description
  51622.  00h  4 BYTEs    unused
  51623.  04h    DWORD    ???
  51624.  08h  8 BYTEs    unused
  51625.  10h    DWORD    ???
  51626.  14h    DWORD    ???
  51627.  18h 12 BYTEs    unused
  51628.  24h    DWORD    ???
  51629.  28h 24 BYTEs    unused
  51630.  
  51631. Format of kernel TCP statistics:
  51632. Offset    Size    Description
  51633.  00h 16 BYTEs    unused
  51634.  10h    DWORD    bytes sent
  51635.  14h    DWORD    bytes received
  51636.  18h  8 BYTEs    unused
  51637.  20h    DWORD    packets sent
  51638.  24h    DWORD    packets received
  51639.  28h    DWORD    bad checksums
  51640.  2Ch    DWORD    protocol errors
  51641.  30h    DWORD    timeouts
  51642.  34h    DWORD    resets
  51643.  38h    DWORD    duplicate packets
  51644.  3Ch    DWORD    retransmits
  51645.  
  51646. Format of kernel IP statistics:
  51647. Offset    Size    Description
  51648.  00h  8 BYTEs    unused
  51649.  08h    DWORD    ??? errors
  51650.  0Ch    DWORD    ??? errors
  51651.  10h    DWORD    ???
  51652.  14h    DWORD    ??? errors
  51653.  18h    DWORD    security errors
  51654.  1Ch    DWORD    ??? errors
  51655.  20h    DWORD    packets sent
  51656.  24h    DWORD    packets received
  51657.  28h    DWORD    bad checksums
  51658.  2Ch    DWORD    protocol errors
  51659.  30h    DWORD    timeouts
  51660.  34h    DWORD    errors
  51661.  38h    DWORD    fragments
  51662.  3Ch
  51663.  
  51664. Format of kernel UDP statistics:
  51665. Offset    Size    Description
  51666.  00h 32 BYTEs    unused
  51667.  20h    DWORD    packets sent
  51668.  24h    DWORD    packets received
  51669.  28h    DWORD    bad checksums
  51670.  2Ch    DWORD    port not listening errors
  51671.  30h  4 BYTEs    unused
  51672.  34h    DWORD    truncated receives
  51673.  38h  8 BYTEs    unused
  51674.  
  51675. Format of kernel ICMP statistics:
  51676. Offset    Size    Description
  51677.  00h    DWORD    "TimeEx" sent
  51678.  04h    DWORD    "TimeEx" received
  51679.  08h    DWORD    "ParamProb" sent
  51680.  0Ch    DWORD    "ParamProb" received
  51681.  10h    DWORD    redirects received
  51682.  14h    DWORD    source quenches received
  51683.  18h    DWORD    ???
  51684.  1Ch    DWORD    ???
  51685.  20h    DWORD    packets sent
  51686.  24h    DWORD    packets received
  51687.  28h    DWORD    bad packets received
  51688.  2Ch    DWORD    "DestUn" received
  51689.  30h    DWORD    packet send errors
  51690.  34h    DWORD    "DestUn" sent
  51691.  38h    DWORD    ???
  51692.  3Ch    DWORD    ???
  51693. ----------610D-------------------------------
  51694. INT 61 u - PC/TCP kernel v2.05 - "is_netnd" - CHECK IF CONNECTION HANDLE VALID
  51695.     AH = 0Dh
  51696.     BX = connection handle
  51697. Return: CF clear if valid
  51698.     CF set on error
  51699.         AX = error code (see INT 61"PC/TCP")
  51700. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51701. ----------610E-------------------------------
  51702. INT 61 u - PC/TCP kernel v2.05 - "net_select" - ???
  51703.     AH = 0Eh
  51704.     BX = ???
  51705.     DS:DX -> ???
  51706.     ES:DI -> ???
  51707. Return: CF clear
  51708.     ???
  51709. Notes:    the installation check consists of testing for the signature "TCPTSR"
  51710.       three bytes beyond the start of the interrupt handler
  51711.     INT 61 is the default; PC/TCP v2.05 may be configured to use any
  51712.       interrupt from 20h through E0h
  51713. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51714. ----------610F-------------------------------
  51715. INT 61 u - PC/TCP kernel v2.05 - "get_netversion" - GET SOFTWARE VERSION
  51716.     AH = 0Fh
  51717. Return: CF clear
  51718.         AX = version (AH = major, AL = minor)
  51719.         BX = patch level
  51720. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51721. ----------6110-------------------------------
  51722. INT 61 u - PC/TCP kernel v2.05 - "net_shutdown" - UNINSTALL
  51723.     AH = 10h
  51724. Return: CF clear if successful
  51725.     CF set on error???
  51726. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51727. ----------6111-------------------------------
  51728. INT 61 u - PC/TCP kernel v2.05 - "disable_async" - ???
  51729.     AH = 11h
  51730. Return: CF clear
  51731.     AX = ???
  51732. Note:    clears location whose value is returned in AX and decrements another if
  51733.       it is not already zero
  51734. SeeAlso: INT 61"PC/TCP",INT 61/AH=12h
  51735. ----------6112-------------------------------
  51736. INT 61 u - PC/TCP kernel v2.05 - "enable_async" - ???
  51737.     AH = 12h
  51738. Return: CF clear
  51739.     AX = ???
  51740. Note:    sets location whose value is returned in AX to 0001h and performs other
  51741.       actions if another location is nonzero; these two locations are the
  51742.       same ones used by AH=11h
  51743. SeeAlso: INT 61"PC/TCP",INT 61/AH=11h
  51744. ----------6113-------------------------------
  51745. INT 61 u - PC/TCP kernel v2.05 - "net_connect" - ???
  51746.     AH = 13h
  51747.     BX = connection handle??? or FFFFh
  51748.     DX = protocol
  51749.         0000h ??? (returns error 0016h)
  51750.         0001h ???
  51751.         0002h ???
  51752.         0003h ???
  51753.         0004h ???
  51754.         0005h ???
  51755.     DS:SI -> result buffer???
  51756. Return: CF clear if successful
  51757.         AX = connection handle???
  51758.     CF set on error
  51759.         AX = error code (see INT 61"PC/TCP")
  51760. Note:    invokes AH=22h if BX=FFFFh on entry; also invokes AH=19h in various
  51761.       cases
  51762. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=23h
  51763. ----------6114-------------------------------
  51764. INT 61 u - PC/TCP kernel v2.05 - "net_recv" - NO LONGER SUPPORTED
  51765.     AH = 14h
  51766.     BX = connection handle???
  51767. Return: CF set
  51768.         AX = 0018h (see INT 61"PC/TCP")
  51769. Note:    displays error message "Illegal system call!  Please upgrade your
  51770.       PCserver software" to standard output
  51771. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51772. ----------6115-------------------------------
  51773. INT 61 - PC/TCP kernel v2.05 - "net_recvfrom" - ???
  51774.     AH = 15h
  51775.     ???
  51776. Return: ???
  51777. ----------6116-------------------------------
  51778. INT 61 u - PC/TCP kernel v2.05 - "net_peer" - GET ADDRESS OF REMOTE PEER???
  51779.     AH = 16h
  51780.     BX = connection handle???
  51781.     DS:DX -> 9-byte buffer for ???
  51782. Return: CF clear if successful
  51783.         ???
  51784.     CF set on error
  51785.         AX = error code (see INT 61"PC/TCP")
  51786. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51787. ----------6117-------------------------------
  51788. INT 61 u - PC/TCP kernel v2.05 - "net_reconfig" - ???
  51789.     AH = 17h
  51790. Return: CF clear if successful
  51791.     CF set on error
  51792.         AX = error code (see INT 61"PC/TCP")
  51793. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51794. ----------6118-------------------------------
  51795. INT 61 u - PC/TCP kernel v2.05 - "net_eof" - ???
  51796.     AH = 18h
  51797.     BX = connection handle???
  51798. Return: CF clear if successful
  51799.     CF set on error
  51800.         AX = error code (see INT 61"PC/TCP")
  51801. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51802. ----------6119-------------------------------
  51803. INT 61 u - PC/TCP kernel v2.05 - "net_abort" - ???
  51804.     AH = 19h
  51805.     BX = connection handle???
  51806. Return: CF clear if successful
  51807.     CF set on error
  51808.         AX = error code (see INT 61"PC/TCP")
  51809. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51810. ----------611A-------------------------------
  51811. INT 61 u - PC/TCP kernel v2.05 - "net_write" - ???
  51812.     AH = 1Ah
  51813.     BX = connection handle???
  51814.     CX = ???
  51815.     DX = ???
  51816.     DS:SI -> ???
  51817. Return: CF clear if successful
  51818.         AX = ???
  51819.         DX = ???
  51820.     CF set on error
  51821.         AX = error code (see INT 61"PC/TCP")
  51822. Notes:    the installation check consists of testing for the signature "TCPTSR"
  51823.       three bytes beyond the start of the interrupt handler
  51824.     INT 61 is the default; PC/TCP v2.05 may be configured to use any
  51825.       interrupt from 20h through E0h
  51826. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=1Bh,INT 61/AH=1Ch
  51827. ----------611B-------------------------------
  51828. INT 61 u - PC/TCP kernel v2.05 - "net_read" - ???
  51829.     AH = 1Bh
  51830.     BX = connection handle???
  51831.     CX = ???
  51832.     DX = ???
  51833.     DS:SI -> ???
  51834.     ES:DI -> ???
  51835. Return: CF clear if successful
  51836.         CX = ???
  51837.         DX = ???
  51838.     CF set on error
  51839.         AX = error code (see INT 61"PC/TCP")
  51840. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=1Ah,INT 61/AH=1Dh
  51841. ----------611C-------------------------------
  51842. INT 61 u - PC/TCP kernel v2.05 - "net_readfrom" - ???
  51843.     AH = 1Ch
  51844.     BX = connection handle???
  51845.     CX = ???
  51846.     DX = ???
  51847.     DS:SI -> ???
  51848.     ES:DI -> ???
  51849. Return: CF clear if successful
  51850.         AX = ???
  51851.         DX = ???
  51852.     CF set on error
  51853.         AX = error code (see INT 61"PC/TCP")
  51854. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=1Ah,INT 61/AH=1Dh
  51855. ----------611D-------------------------------
  51856. INT 61 u - PC/TCP kernel v2.05 - "net_writeto" - ???
  51857.     AH = 1Dh
  51858.     BX = connection handle???
  51859.     CX = ???
  51860.     DX = ???
  51861.     DS:SI -> ???
  51862.     ES:DI -> 9-byte buffer containing ???
  51863. Return: CF clear if successful
  51864.         CX = ???
  51865.         DX = ???
  51866.     CF set on error
  51867.         AX = error code (see INT 61"PC/TCP")
  51868. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=1Bh,INT 61/AH=1Ch
  51869. ----------611E-------------------------------
  51870. INT 61 u - PC/TCP kernel v2.05 - "net_flush" - ???
  51871.     AH = 1Eh
  51872.     BX = connection handle
  51873. Return: CF clear if successful
  51874.     CF set on error
  51875.         AX = error code (see INT 61"PC/TCP")
  51876. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51877. ----------611F-------------------------------
  51878. INT 61 u - PC/TCP kernel v2.05 - "net_asynch" - ???
  51879.     AH = 1Fh
  51880.     BX = connection handle???
  51881.     CX = ???
  51882.     DS:SI -> ???
  51883.     ES:DI -> ???
  51884. Return: CF clear if successful
  51885.         DS:DX -> ???
  51886.     CF set on error
  51887.         AX = error code (see INT 61"PC/TCP")
  51888. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51889. ----------6120-------------------------------
  51890. INT 61 u - PC/TCP kernel v2.05 - "set_option" - ???
  51891.     AH = 20h
  51892.     BX = connection handle???
  51893.     CX = ???
  51894.     DS:DX -> ???
  51895.     SI = ???
  51896.     DI = ???
  51897. Return: CF clear if successful
  51898.     CF set on error
  51899.         AX = error code (see INT 61"PC/TCP")
  51900. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=21h
  51901. ----------6121-------------------------------
  51902. INT 61 u - PC/TCP kernel v2.05 - "get_option" - ???
  51903.     AH = 21h
  51904.     BX = connection handle???
  51905.     CX = ???
  51906.     DS:DX -> ???
  51907.     SI = ???
  51908.     DI = ???
  51909. Return: CF clear if successful
  51910.         DS:DX -> ???
  51911.     CF set on error
  51912.         AX = error code (see INT 61"PC/TCP")
  51913. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=20h
  51914. ----------6122-------------------------------
  51915. INT 61 u - PC/TCP kernel v2.05 - "net_getdesc" - ???
  51916.     AH = 22h
  51917.     BX = connection handle???
  51918. Return: CF clear if successful
  51919.         AX = ???
  51920.     CF set on error
  51921.         AX = error code (see INT 61"PC/TCP")
  51922. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51923. ----------6123-------------------------------
  51924. INT 61 u - PC/TCP kernel v2.05 - "net_listen" - ???
  51925.     AH = 23h
  51926.     BX = connection handle??? or FFFFh
  51927.     DX = subfunction???
  51928.     DS:SI -> ???
  51929. Return: CF clear if successful
  51930.         AX = ???
  51931.     CF set on error
  51932.         AX = error code (see INT 61"PC/TCP")
  51933. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=13h
  51934. ----------6124-------------------------------
  51935. INT 61 u - PC/TCP kernel v2.05 - "net_abortall" - ???
  51936.     AH = 24h
  51937. Return: ???
  51938. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51939. ----------6125-------------------------------
  51940. INT 61 u - PC/TCP kernel v2.05 - "ad_res_name" - ???
  51941.     AH = 25h
  51942.     BX = ???
  51943.     CX = ???
  51944.     DX = ???
  51945.     DS:SI -> ???
  51946. Return: CF clear if successful
  51947.     CF set on error
  51948.         AX = error code (see INT 61"PC/TCP")
  51949. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51950. ----------6126-------------------------------
  51951. INT 61 u - PC/TCP kernel v2.05 - "ad_htable" - ???
  51952.     AH = 26h
  51953.     BX = ???
  51954.     CX = ???
  51955.     DX = ???
  51956.     DS:SI -> ???
  51957. Return: CF clear if successful
  51958.     CF set on error
  51959.         AX = error code (see INT 61"PC/TCP")
  51960. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51961. ----------6127-------------------------------
  51962. INT 61 u - PC/TCP kernel v2.05 - "ad_domain" - ???
  51963.     AH = 27h
  51964.     BX = ???
  51965.     CX = ???
  51966.     DX = ???
  51967.     DS:SI -> ???
  51968. Return: CF clear if successful
  51969.     CF set on error
  51970.         AX = error code (see INT 61"PC/TCP")
  51971. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51972. ----------6128-------------------------------
  51973. INT 61 u - PC/TCP kernel v2.05 - "net_swap" - ???
  51974.     AH = 28h
  51975.     BX = connection handle???
  51976.     CX = ???
  51977. Return: CF clear if successful
  51978.         ???
  51979.     CF set on error
  51980.         AX = error code (see INT 61"PC/TCP")
  51981. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51982. ----------6129-------------------------------
  51983. INT 61 u - PC/TCP kernel v2.05 - "net_getglobdesc" - OPEN CONNECTION???
  51984.     AH = 29h
  51985. Return: CF clear if successful
  51986.         AX = connection handle???
  51987.     CF set on error
  51988.         AX = error code (see INT 61"PC/TCP")
  51989. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51990. ----------612A-------------------------------
  51991. INT 61 U - PC/TCP kernel v2.05 - GET CONFIGURATION INFORMATION
  51992.     AH = 2Ah
  51993.     DS:SI -> 26-byte buffer for configuration information (see below)
  51994. Return: CF clear
  51995.     AX = 0000h
  51996.     buffer filled
  51997. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  51998.  
  51999. Format of configuration information:
  52000. Offset    Size    Description
  52001.  00h    BYTE    maximum TCP connections available
  52002.  01h    BYTE    maximum UDP connections available
  52003.  02h    BYTE    maximum IP connections available
  52004.  03h    BYTE    ???
  52005.  04h    BYTE    number of TCP connections currently in use
  52006.  05h    BYTE    number of UDP connections currently in use
  52007.  06h    BYTE    number of IP connections currently in use
  52008.  07h    BYTE    ???
  52009.  08h    WORD    number of local network descriptors active
  52010.  0Ah    WORD    number of global network descriptors active
  52011.  0Ch    BYTE    ???
  52012.  0Dh    BYTE    ???
  52013.  0Eh    WORD    ???
  52014.  10h    WORD    ???
  52015.  12h    DWORD    ???
  52016.  16h    DWORD    IP broadcast address
  52017. ----------612B-------------------------------
  52018. INT 61 U - PC/TCP kernel v2.05 - ???
  52019.     AH = 2Bh
  52020.     BX = connection handle???
  52021.     CX = ???
  52022.     DX = ???
  52023.     DS:SI -> ???
  52024.     ES:DI -> ???
  52025. Return: CF clear if successful
  52026.     CF set on error
  52027.         AX = error code (see INT 61"PC/TCP")
  52028. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  52029. ----------6130-------------------------------
  52030. INT 61 u - PC/TCP kernel v2.05 - "icmp_ping" ???
  52031.     AH = 30h
  52032.     BX = ???
  52033.     CX = ???
  52034.     DX = ???
  52035. Return: CF clear if successful
  52036.     CF set on error
  52037.         AX = error code (see INT 61"PC/TCP")
  52038. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  52039. ----------61---------------------------------
  52040. INT 61 u - PC/TCP kernel v2.05 - NOP for SLIP kernel
  52041.     AH = function
  52042.         31h "net_add_route"
  52043.         32h "net_del_route"
  52044.         33h "net_dump_routes"
  52045. ----------6134-------------------------------
  52046. INT 61 u - PC/TCP kernel v2.1 - "icmp_destun" - ???
  52047.     AH = 34h
  52048.     ???
  52049. Return: ???
  52050. ----------6150-------------------------------
  52051. INT 61 u - PC/TCP kernel v2.05 - "nm_prs_addr" - ???
  52052.     AH = 50h
  52053.     DS:DX -> 127-byte buffer containing ???
  52054. Return: CF clear if successful
  52055.         DX:AX -> ???
  52056.     CF set on error
  52057.         AX = error code (see INT 61"PC/TCP")
  52058. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  52059. ----------6151-------------------------------
  52060. INT 61 u - PC/TCP kernel v2.05 - "nm_htable" - ???
  52061.     AH = 51h
  52062.     CX = size of destination buffer
  52063.     DS:DX -> 127-byte buffer containing ???
  52064.     ES:DI -> destination buffer or 0000h:0000h
  52065. Return: CF clear if successful
  52066.         DX:AX -> ???
  52067.     CF set on error
  52068.         AX = error code (see INT 61"PC/TCP")
  52069. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  52070. ----------6152-------------------------------
  52071. INT 61 u - PC/TCP kernel v2.05 - "nm_domain" - ???
  52072.     AH = 52h
  52073.     CX = size of destination buffer
  52074.     DS:DX -> 127-byte buffer containing ???
  52075.     ES:DI -> destination buffer or 0000h:0000h
  52076. Return: CF clear if successful
  52077.         DX:AX -> ???
  52078.     CF set on error
  52079.         AX = error code (see INT 61"PC/TCP")
  52080. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  52081. ----------6153-------------------------------
  52082. INT 61 u - PC/TCP kernel v2.05 - "nm_ien116" - ???
  52083.     AH = 53h
  52084.     DS:DX -> 127-byte buffer containing ???
  52085. Return: CF clear if successful
  52086.         DX:AX -> ???
  52087.     CF set on error
  52088.         AX = error code (see INT 61"PC/TCP")
  52089. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  52090. ----------6154-------------------------------
  52091. INT 61 u - PC/TCP kernel v2.05 - "nm_res_name" - RESOLVE HOST NAME
  52092.     AH = 54h
  52093.     CX = size of destination buffer
  52094.     DS:DX -> 127-byte buffer containing host name???
  52095.     ES:DI -> destination buffer or 0000h:0000h
  52096. Return: CF clear if successful
  52097.         DX:AX -> ???
  52098.     CF set on error
  52099.         AX = error code (see INT 61"PC/TCP")
  52100. BUG:    the SLIP kernel for v2.05 bounds-checks the wrong register, so values
  52101.       greater than 54h in AH may crash the system.    Other kernels may have
  52102.       this bug as well.
  52103. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP"
  52104. ----------62---------------------------------
  52105. INT 62 - reserved for user interrupt
  52106. ----------62---------------------------------
  52107. INT 62 - Adaptec and OMTI controllers - DRIVE 0 DATA
  52108. Notes:    this vector stores the third four bytes of the parameter table for
  52109.       hard disk 0
  52110. SeeAlso: INT 60"Adaptec",INT 61"Adaptec",INT 63"Adaptec"
  52111. ----------62---------------------------------
  52112. INT 62 - HP 95LX - USED BY CALCULATOR
  52113. SeeAlso: INT 60"HP 95LX"
  52114. ----------62---------------------------------
  52115. INT 62 - MS SQL Server/Sybase DBLIBRARY interface - ???
  52116.     AH = function (00h to 07h)
  52117.     CX = FFFEh
  52118.     DX = FFFFh
  52119.     ???
  52120. Return: ???
  52121. Note:    the installation check consists of testing for the string "DBLIBRARY"
  52122.       2 bytes past the interrupt handler
  52123. SeeAlso: AH=08h"SQL"
  52124. ----------620000-----------------------------
  52125. INT 62 u - FGDRIVER v1.10 - "FG_GETMODE" - GET CURRENT VIDEO MODE NUMBER
  52126.     AX = 0000h
  52127.     ES:BX -> ???
  52128. Return: AX = current video mode number
  52129. Notes:    FGDRIVER is the external video driver for the shareware
  52130.       Fastgraph/Light by Ted Gruber Software
  52131.     the installation check consists of testing for the signature "FG" ten
  52132.       bytes beyond the start of the interrupt handler
  52133. SeeAlso: AX=0001h,AX=0006h
  52134. ----------620001-----------------------------
  52135. INT 62 u - FGDRIVER v1.10 - "FG_SETMODE" - SELECT VIDEO MODE AND INITIALIZE
  52136.     AX = 0001h
  52137.     BX = new video mode or FFFFh for current mode
  52138.     ES:DX -> ???
  52139. Notes:    video modes are the same as the BIOS video modes except for
  52140.         0Bh Hercules graphics 720x348
  52141.         0Ch Hercules graphics 320x200
  52142.         15h VGA graphics 320x400x256
  52143.         16h VGA graphics 320x240x256
  52144.         17h VGA graphics 320x480x256
  52145.     this call resets the active video page to page 0000h, the clipping
  52146.       region to the entire screen, text rows to 25, etc.
  52147. SeeAlso: AX=0000h,AX=0002h,INT 10/AH=00h
  52148. ----------620002-----------------------------
  52149. INT 62 u - FGDRIVER v1.10 - "FG_TESTMODE" - CHECK IF VIDEO MODE AVAILABLE
  52150.     AX = 0002h
  52151.     BX = desired video mode (00h-17h)
  52152.     CX = required number of video pages (ignore memory size if <= 0)
  52153. Return: AX = status
  52154.         0000h mode not available with requested number of pages
  52155.         0001h mode is available
  52156. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0005h
  52157. ----------620003-----------------------------
  52158. INT 62 u - FGDRIVER v1.10 - "FG_BESTMODE" - GET BEST VIDEO MODE GIVEN RESOLUTN
  52159.     AX = 0003h
  52160.     BX = horizontal resolution
  52161.     CX = vertical resolution
  52162.     DX = number of video pages required (both physical and virtual)
  52163. Return: AX = proposed video mode number or FFFFh if no matching video mode
  52164. SeeAlso: AX=0002h,AX=0004h
  52165. ----------620004-----------------------------
  52166. INT 62 u - FGDRIVER v1.10 - "FG_AUTOMODE" - GET VIDEO MODE WITH MOST FEATURES
  52167.     AX = 0004h
  52168. Return: AX = proposed video mode number
  52169. Note:    FGDRIVER is the external video driver for the shareware
  52170.       Fastgraph/Light by Ted Gruber Software
  52171. SeeAlso: AX=0002h,AX=0003h,AX=0005h
  52172. ----------620005-----------------------------
  52173. INT 62 u - FGDRIVER v1.10 - "FG_EGACHECK" - GET INFO ABOUT ACTIVE EGA DISPLAY
  52174.     AX = 0005h
  52175. Return: AX = number of 64K banks of video memory, or 0000h if no EGA or EGA
  52176.         without an Enhanced Color Display
  52177. SeeAlso: AX=0002h,AX=0003h
  52178. ----------620006-----------------------------
  52179. INT 62 u - FGDRIVER v1.10 - "FG_RESET" - ERASE SCREEN AND RESTORE SCREEN ATTR
  52180.     AX = 0006h
  52181. Notes:    this call is ignored in graphics modes
  52182.     the screen attributes are only restored if ANSI.SYS is loaded
  52183. SeeAlso: AX=0000h
  52184. ----------620007-----------------------------
  52185. INT 62 u - FGDRIVER v1.10 - "FG_CURSOR" - SPECIFY WHETHER TEXT CURSR IS VISIBLE
  52186.     AX = 0007h
  52187.     BX = new state (0000h invisible, 0001h visible)
  52188. Note:    this call is ignored in text modes
  52189. ----------620008-----------------------------
  52190. INT 62 - FGDRIVER v1.10 - UNUSED
  52191.     AX = 0008h to 0009h
  52192. Return: AX = 0000h
  52193. ----------62000A-----------------------------
  52194. INT 62 u - FGDRIVER v1.10 - "FG_GETMAXX" - GET MAXIMUM COLUMN IN SCREEN SPACE
  52195.     AX = 000Ah
  52196. Return: AX = maximum X coordinate in screen space
  52197.         (or character space if in text mode)
  52198. SeeAlso: AX=000Bh,AX=0045h
  52199. ----------62000B-----------------------------
  52200. INT 62 u - FGDRIVER v1.10 - "FG_GETMAXY" - GET MAXIMUM ROW IN SCREEN SPACE
  52201.     AX = 000Bh
  52202. Return: AX = maximum Y coordinate in screen space
  52203.         (or character space if in text mode)
  52204. SeeAlso: AX=000Ah,AX=0045h
  52205. ----------62000C-----------------------------
  52206. INT 62 u - FGDRIVER v1.10 - "FG_XALPHA" - CONVERT SCREEN COLUMN TO CHAR COLUMN
  52207.     AX = 000Ch
  52208.     BX = screen space column
  52209. Return: AX = character space column containing specified coordinate
  52210. SeeAlso: AX=000Dh,AX=000Eh
  52211. ----------62000D-----------------------------
  52212. INT 62 u - FGDRIVER v1.10 - "FG_YALPHA" - CONVERT SCREEN ROW TO CHARACTER ROW
  52213.     AX = 000Dh
  52214.     BX = screen space row
  52215. Return: AX = character space row containing specified coordinate
  52216. SeeAlso: AX=000Ch,AX=000Fh
  52217. ----------62000E-----------------------------
  52218. INT 62 u - FGDRIVER v1.10 - "FG_XCONVERT" - CONVERT CHAR COLUMN TO SCREEN COL
  52219.     AX = 000Eh
  52220.     BX = character space column
  52221. Return: AX = screen space column of leftmost pixel in specified character col
  52222. SeeAlso: AX=000Ch,AX=000Fh
  52223. ----------62000F-----------------------------
  52224. INT 62 u - FGDRIVER v1.10 - "FG_YCONVERT" - CONVERT CHARACTER ROW TO SCREEN ROW
  52225.     AX = 000Fh
  52226.     BX = character space row
  52227. Return: AX = screen space row of topmost pixel in specified character row
  52228. SeeAlso: AX=000Dh,AX=000Eh
  52229. ----------620010-----------------------------
  52230. INT 62 u - FGDRIVER v1.10 - "FG_GETLINES" - GET TEXT ROWS FOR CURR VIDEO MODE
  52231.     AX = 0010h
  52232. Return: AX = number of text rows on screen in current video mode
  52233. SeeAlso: AX=0011h
  52234. ----------620011-----------------------------
  52235. INT 62 u - FGDRIVER v1.10 - "FG_SETLINES" - SET TEXT ROWS ON SCREEN
  52236.     AX = 0011h
  52237.     BX = new screen size (25, 43, 50)
  52238. SeeAlso: AX=0010h
  52239. ----------620012-----------------------------
  52240. INT 62 - FGDRIVER v1.10 - UNUSED
  52241.     AX = 0012h to 0013h
  52242. Return: AX = 0000h
  52243. ----------620014-----------------------------
  52244. INT 62 u - FGDRIVER v1.10 - "FG_DEFCOLOR" - ASSIGN COLOR VALUE TO COLOR INDEX
  52245.     AX = 0014h
  52246.     BX = color index (0000h-00FFh)
  52247.     CX = new color value (0 to maximum color value for current video mode)
  52248. Note:    this call is ignored in text modes and 256-color graphics modes
  52249. SeeAlso: AX=0015h,AX=0016h,AX=001Dh
  52250. ----------620015-----------------------------
  52251. INT 62 u - FGDRIVER v1.10 - "FG_GETCOLOR" - GET CURRENT TEXT ATTRIBUTE
  52252.     AX = 0015h
  52253. Return: AX = current text attribute or color index (graphics modes)
  52254. Note:    FGDRIVER is the external video driver for the shareware
  52255.       Fastgraph/Light by Ted Gruber Software
  52256. SeeAlso: AX=0019h,AX=001Ah
  52257. ----------620016-----------------------------
  52258. INT 62 u - FGDRIVER v1.10 - "FG_GETINDEX" - GET COLOR VALUE FOR COLOR INDEX
  52259.     AX = 0016h
  52260.     BX = color index (0000h to 00FFh)
  52261. Return: AX = color value for specified color index
  52262. Note:    this call returns the value passed to it in text and 256-color
  52263.       graphics modes
  52264. SeeAlso: AX=0014h,AX=001Ch
  52265. ----------620017-----------------------------
  52266. INT 62 u - FGDRIVER v1.10 - "FG_PALETTE" - SET PALETTE / SET VIDEO DAC REGISTER
  52267.     AX = 0017h
  52268. ---CGA 4-color graphics---
  52269.     BX = CGA paletee number
  52270.     CX = background color
  52271. ---CGA 2-color graphics---
  52272.     BX ignored
  52273.     CX = foreground color
  52274. ---16-color graphics---
  52275.     BX = palette register number
  52276.     CX = palette value
  52277. ---256-color graphics---
  52278.     BX = DAC register number
  52279.     CX =  DAC value
  52280. Notes:    ignored in text modes and Hercules graphics modes
  52281.     few EGA/VGA adapters correctly set the foreground color in CGA mode 6
  52282. SeeAlso: AX=0018h,AX=001Dh
  52283. ----------620018-----------------------------
  52284. INT 62 u - FGDRIVER v1.10 - "FG_PALETTES" - SET ALL PALETTE REGISTERS
  52285.     AX = 0018h
  52286.     ES:BX -> array of 16 WORDs containing values for palette registers
  52287.         (or first 16 DAC registers in 256-color modes)
  52288. Note:    ignored in text modes, CGA and Hercules graphics modes
  52289. SeeAlso: AX=0017h
  52290. ----------620019-----------------------------
  52291. INT 62 u - FGDRIVER v1.10 - "FG_SETATTR" - SET TEXT-MODE CHARACTER ATTRIBUTE
  52292.     AX = 0019h
  52293.     BX = foreground
  52294.     CX = background
  52295.     DX = blink (0000h nonblinking, 0001h blink)
  52296. Note:    this call is ignored in graphics modes
  52297. SeeAlso: AX=0015h,AX=001Ah,AX=0037h
  52298. ----------62001A-----------------------------
  52299. INT 62 u - FGDRIVER v1.10 - "FG_SETCOLOR" - SET CURRENT COLOR
  52300.     AX = 001Ah
  52301.     BX = new color index (or text attribute in text modes)
  52302. SeeAlso: AX=0015h,AX=0019h
  52303. ----------62001B-----------------------------
  52304. INT 62 u - FGDRIVER v1.10 - "FG_SETRGB" - SET VIDEO DAC REGISTER CONTENTS
  52305.     AX = 001Bh
  52306.     BX = palette or DAC register number
  52307.     CX = red color component
  52308.     DX = green component
  52309.     SI = blue component
  52310. Notes:    the register number may be negative for Tandy, PCjr, and 200-line
  52311.       EGA graphics modes to specify an intense color
  52312.     this call has no effect in text, CGA graphics, and Hercules graphics
  52313.       modes
  52314. SeeAlso: AX=001Ch,AX=00A5h
  52315. ----------62001C-----------------------------
  52316. INT 62 u - FGDRIVER v1.10 - "FG_GETRGB" - GET VIDEO DAC REGISTER CONTENTS
  52317.     AX = 001Ch
  52318.     ES:BX -> variable pointer record (see below)
  52319.     CX = DAC register number
  52320. Return: variables updated
  52321. Note:    this call is ignored in text modes and CGA/EGA video modes (since
  52322.       they do not use DAC registers)
  52323. SeeAlso: AX=001Bh,AX=001Dh,AX=00A4h
  52324.  
  52325. Format of variable pointer record:
  52326. Offset    Size    Description
  52327.  00h    WORD    segment of WORD buffer for red component of DAC register
  52328.  02h    WORD    offset of WORD buffer for red component
  52329.  04h    WORD    segment of WORD buffer for green component of DAC register
  52330.  06h    WORD    offset of WORD buffer for green component
  52331.  08h    WORD    segment of WORD buffer for blue component of DAC register
  52332.  0Ah    WORD    offset of WORD buffer for blue component
  52333. ----------62001D-----------------------------
  52334. INT 62 u - FGDRIVER v1.10 - "FG_MAPRGB" - MAP COLOR COMPONENTS INTO PALETTE VAL
  52335.     AX = 001Dh
  52336.     BX = red component
  52337.     CX = green component
  52338.     DX = blue component
  52339. Return: AX = mode-specific palette value corresponding to specified components
  52340. Note:    only meaningful in 16-color graphics modes
  52341. SeeAlso: AX=0015h,AX=0017h
  52342. ----------62001E-----------------------------
  52343. INT 62 u - FGDRIVER v1.10 - "FG_ERASE" - CLEAR THE ACTIVE VIDEO PAGE
  52344.     AX = 001Eh
  52345. Note:    sets each pixel to 0 in graphics modes, each character cell to a blank
  52346.       with a gray foreground attribute in text modes
  52347. ----------62001F-----------------------------
  52348. INT 62 u - FGDRIVER v1.10 - "FG_POINT" - DISPLAY A PIXEL
  52349.     AX = 001Fh
  52350.     BX = column
  52351.     CX = row
  52352. Note:    this call is ignored in text modes
  52353. SeeAlso: AX=0020h
  52354. ----------620020-----------------------------
  52355. INT 62 u - FGDRIVER v1.10 - "FG_GETPIXEL" - GET COLOR OF SPECIFIED PIXEL
  52356.     AX = 0020h
  52357.     BX = column in screen space
  52358.     CX = row in screen space
  52359. Return: AX = color value of pixel (0 to num_colors-1)
  52360.         0000h in text modes
  52361. SeeAlso: AX=001Fh
  52362. ----------620021-----------------------------
  52363. INT 62 u - FGDRIVER v1.10 - "FG_GETXPOS" - GET GRAPHICS CURSOR COLUMN
  52364.     AX = 0021h
  52365. Return: AX = screen space X coordinate of graphics cursor position
  52366. SeeAlso: AX=0022h,AX=0023h,AX=0024h
  52367. ----------620022-----------------------------
  52368. INT 62 u - FGDRIVER v1.10 - "FG_GETXPOS" - GET GRAPHICS CURSOR ROW
  52369.     AX = 0022h
  52370. Return: AX = screen space Y coordinate of graphics cursor position
  52371. SeeAlso: AX=0021h,AX=0023h,AX=0024h
  52372. ----------620023-----------------------------
  52373. INT 62 u - FGDRIVER v1.10 - "FG_MOVE" - SET GRAPHICS CURSOR POSITION
  52374.     AX = 0023h
  52375.     BX = new column
  52376.     CX = new row
  52377. Note:    this call is ignored in text modes
  52378. SeeAlso: AX=0021h,AX=0022h,AX=0024h
  52379. ----------620024-----------------------------
  52380. INT 62 u - FGDRIVER v1.10 - "FG_MOVEREL" - ADJUST GRAPHICS CURSOR POSITION
  52381.     AX = 0024h
  52382.     BX = column offset
  52383.     CX = row offset
  52384. Note:    this call is ignored in text modes
  52385. SeeAlso: AX=0021h,AX=0022h,AX=0023h
  52386. ----------620025-----------------------------
  52387. INT 62 u - FGDRIVER v1.10 - "FG_DRAW" - DRAW SOLID LINE TO ABSOLUTE POSITION
  52388.     AX = 0025h
  52389.     BX = endpoint column
  52390.     CX = endpoint row
  52391. Notes:    this call is ignored in text modes
  52392.     the starting point is the current graphics cursor position; the cursor
  52393.       position is updated
  52394. SeeAlso: AX=0026h,AX=0027h
  52395. ----------620026-----------------------------
  52396. INT 62 u - FGDRIVER v1.10 - "FG_DRAWREL" - DRAW SOLID LINE TO RELATIVE POSITION
  52397.     AX = 0026h
  52398.     BX = endpoint column offset
  52399.     CX = endpoint row offset
  52400. Notes:    this call is ignored in text modes
  52401.     the starting point is the current graphics cursor position; the cursor
  52402.       position is updated
  52403. SeeAlso: AX=0025h,AX=0028h
  52404. ----------620027-----------------------------
  52405. INT 62 u - FGDRIVER v1.10 - "FG_DASH" - DRAW DASHED LINE TO ABSOLUTE POSITION
  52406.     AX = 0027h
  52407.     BX = endpoint column
  52408.     CX = endpoint row
  52409.     DX = dash pattern (set bits cause drawn pixels)
  52410. Notes:    this call is ignored in text modes
  52411.     the starting point is the current graphics cursor position; the cursor
  52412.       position is updated
  52413. SeeAlso: AX=0025h,AX=0028h
  52414. ----------620028-----------------------------
  52415. INT 62 u - FGDRIVER v1.10 - "FG_DASHREL" - DRAW DASHED LINE TO RELATVE POSITION
  52416.     AX = 0028h
  52417.     BX = endpoint column offset
  52418.     CX = endpoint row offset
  52419.     DX = dash pattern (set bits cause drawn pixels)
  52420. Notes:    this call is ignored in text modes
  52421.     the starting point is the current graphics cursor position; the cursor
  52422.       position is updated
  52423. SeeAlso: AX=0026h,AX=0027h
  52424. ----------620029-----------------------------
  52425. INT 62 u - FGDRIVER v1.10 - "FG_SETCLIP" - SET CLIPPING REGION
  52426.     AX = 0029h
  52427.     BX = left edge of clipping region
  52428.     CX = right edge of clipping region
  52429.     DX = top edge of clipping region
  52430.     SI = bottom edge of clipping region
  52431. SeeAlso: AX=004Ah,AX=004Ch,AX=0052h,AX=0054h
  52432. ----------62002A-----------------------------
  52433. INT 62 u - FGDRIVER v1.10 - "FG_RECT" - DRAW UNFILLED RECTANGLE IN SCREEN SPACE
  52434.     AX = 002Ah
  52435.     BX = left edge column
  52436.     CX = right edge column
  52437.     DX = top edge row
  52438.     SI = bottom edge row
  52439. SeeAlso: AX=002Bh,AX=002Ch,AX=002Eh,AX=00A2h
  52440. ----------62002B-----------------------------
  52441. INT 62 u - FGDRIVER v1.10 - "FG_CLPRECT" - DRAW FILLED RECTANGLE IN SCREEN SPCE
  52442.     AX = 002Bh
  52443.     BX = screen space column of left edge
  52444.     CX = screen space column of right edge
  52445.     DX = screen space row of top edge
  52446.     SI = screen space row of bottom edge
  52447. Note:    this call is ignored in text modes
  52448. SeeAlso: AX=002Ah,AX=002Ch,AX=00A2h
  52449. ----------62002C-----------------------------
  52450. INT 62 u - FGDRIVER v1.10 - "FG_DRECT" - DRAW DITHERED RECTANGLE IN SCRN SPACE
  52451.     AX = 002Ch
  52452.     BX = screen space column of left edge
  52453.     CX = screen space column of right edge
  52454.     DX = screen space row of top edge
  52455.     SI = screen space row of bottom edge
  52456.     ES:DI -> dithering matrix (video-mode dependent)
  52457. Note:    this call is ignored in text modes
  52458. SeeAlso: AX=002Bh,AX=00A2h
  52459. ----------62002D-----------------------------
  52460. INT 62 u - FGDRIVER v1.10 - "FG_ELLIPSE" - DRAW UNFILLED ELLIPSE IN SCRN SPACE
  52461.     AX = 002Dh
  52462.     BX = horizontal semi-axis length in screen space units
  52463.     CX = vertical semi-axis length in screen space units
  52464. Notes:    this call is ignored in text modes
  52465.     the ellipse is centered at the current graphics cursor position
  52466. SeeAlso: AX=002Ah,AX=002Eh,AX=00A2h
  52467. ----------62002E-----------------------------
  52468. INT 62 u - FGDRIVER v1.10 - "FG_POLYGON" - DRAW AN UNFILLED POLYGON
  52469.     AX = 002Eh
  52470.     CX = number of vertices in polygon
  52471.     ES:BX -> variable pointer record (see below)
  52472. SeeAlso: AX=002Dh,AX=0030h,AX=00A2h
  52473.  
  52474. Format of variable pointer record:
  52475. Offset    Size    Description
  52476.  00h    WORD    segment of WORD array containing vertex columns
  52477.  02h    WORD    offset of WORD array containing vertex columns
  52478.  04h    WORD    segment of WORD array containing vertex rows
  52479.  06h    WORD    offset of WORD array containing vertex rows
  52480. ----------62002F-----------------------------
  52481. INT 62 u - FGDRIVER v1.10 - "FG_PAINT" - FLOOD CLOSED REGION WITH COLOR
  52482.     AX = 002Fh
  52483.     BX = column
  52484.     CX = row
  52485. Notes:    fills an arbitrary closed region around the specified point with the
  52486.       current color; the screen edges are not considered region boundaries
  52487.     ignored in text modes
  52488. ----------620030-----------------------------
  52489. INT 62 u - FGDRIVER v1.10 - "FG_CIRCLE" - DRAW UNFILLED CIRCLE
  52490.     AX = 0030h
  52491.     BX = radius in horizontal screen space units (> 0)
  52492. Notes:    the circle is drawn in screen space, centered at the current graphics
  52493.       cursor position
  52494.     this call is ignored in text modes
  52495. SeeAlso: AX=00A2h
  52496. ----------620031-----------------------------
  52497. INT 62 - FGDRIVER v1.10 - UNUSED
  52498.     AX = 0031h
  52499. Return: AX = 0000h
  52500. ----------620032-----------------------------
  52501. INT 62 u - FGDRIVER v1.10 - "FG_TEXT" - DISPLAY STRING OF CHARACTERS
  52502.     AX = 0032h
  52503.     CX = length of string
  52504.     ES:BX -> string
  52505. Notes:    the string is displayed staring at the text cursor position using the
  52506.       current text attribute (text modes) or color index (graphics modes)
  52507.     the text cursor position is updated after this call
  52508. SeeAlso: AX=001Ah,AX=0033h,AX=0035h,AX=0036h
  52509. ----------620033-----------------------------
  52510. INT 62 u - FGDRIVER v1.10 - "FG_LOCATE" - SET TEXT-MODE CURSOR POSITION
  52511.     AX = 0033h
  52512.     BX = row
  52513.     CX = column
  52514. Note:    there are only eight text cursors shared by successive groups of
  52515.       eight video pages (pages 0, 8, 16, ... share one cursor, 1, 9, ...
  52516.       share the second, etc)
  52517. SeeAlso: AX=0034h
  52518. ----------620034-----------------------------
  52519. INT 62 u - FGDRIVER v1.10 - "FG_WHERE" - GET CURRENT CURSOR POSITION
  52520.     AX = 0034h
  52521.     ES:BX -> variable pointers (see below)
  52522. Return: indicated variables filled with cursor row and column for active
  52523.       display
  52524. Note:    FGDRIVER is the external video driver for the shareware
  52525.       Fastgraph/Light by Ted Gruber Software
  52526. SeeAlso: AX=0033h
  52527.  
  52528. Format of variable pointers:
  52529. Offset    Size    Description
  52530.  00h    WORD    segment of WORD buffer for cursor row
  52531.  02h    WORD    offset of WORD buffer for cursor row
  52532.  04h    WORD    segment WORD buffer for cursor column
  52533.  06h    WORD    offset WORD buffer for cursor column
  52534. ----------620035-----------------------------
  52535. INT 62 u - FGDRIVER v1.10 - "FG_CHGATTR" - APPLY CURRENT TEXT ATTRIB TO CHARS
  52536.     AX = 0035h
  52537.     BX = number of characters to recolor
  52538. Notes:    this call is ignored in graphics modes
  52539.     starting at the current text cursor position, the specified number of
  52540.       characters have their attributes to the current text attribute
  52541. SeeAlso: AX=0036h
  52542. ----------620036-----------------------------
  52543. INT 62 u - FGDRIVER v1.10 - "FG_CHGTEXT" - DISPLAY STRING AT CURSOR POSITION
  52544.     AX = 0036h
  52545.     CX = length of string
  52546.     ES:BX -> string to be displayed
  52547. Return: text cursor updated
  52548. Note:    this call is ignored in graphics modes
  52549. SeeAlso: AX=0032h,AX=0035h
  52550. ----------620037-----------------------------
  52551. INT 62 u - FGDRIVER v1.10 - "FG_GETATTR" - GET CHARACTER ATTRIB FOR POSITION
  52552.     AX = 0037h
  52553.     BX = row
  52554.     CX = column
  52555. Return: AX = character attribute at specified location on active video page
  52556. Note:    this call is ignored in graphics modes
  52557. SeeAlso: AX=0019h,AX=0038h
  52558. ----------620038-----------------------------
  52559. INT 62 u - FGDRIVER v1.10 - "FG_GETCHAR" - GET CHARACTER FOR SCREEN POSITION
  52560.     AX = 0038h
  52561.     BX = row
  52562.     CX = column
  52563. Return: AX = character at specified location on active video page
  52564. Note:    this call is ignored in graphics modes
  52565. SeeAlso: AX=0037h
  52566. ----------620039-----------------------------
  52567. INT 62 - FGDRIVER v1.10 - UNUSED
  52568.     AX = 0039h to 003Bh
  52569. Return: AX = 0000h
  52570. ----------62003C-----------------------------
  52571. INT 62 u - FGDRIVER v1.10 - "FG_GETPAGE" - GET ACTIVE VIDEO PAGE NUMBER
  52572.     AX = 003Ch
  52573. Return: AX = active video page (0000h-003Fh)
  52574. SeeAlso: AX=003Dh,AX=003Eh,AX=0040h
  52575. ----------62003D-----------------------------
  52576. INT 62 u - FGDRIVER v1.10 - "FG_SETPAGE" - SET ACTIVE VIDEO PAGE
  52577.     AX = 003Dh
  52578.     BX = new video page (0000h to 003Fh)
  52579. Note:    the specified page must be a physical or virtual page
  52580. SeeAlso: AX=0001h,AX=003Ch,AX=003Fh,AX=0041h
  52581. ----------62003E-----------------------------
  52582. INT 62 u - FGDRIVER v1.10 - "FG_GETVPAGE" - GET VISIBLE VIDEO PAGE NUMBER
  52583.     AX = 003Eh
  52584. Return: AX = visible video page (0000h-003Fh)
  52585. SeeAlso: AX=003Ch,AX=003Fh,AX=0040h
  52586. ----------62003F-----------------------------
  52587. INT 62 u - FGDRIVER v1.10 - "FG_SETVPAGE" - SET VISIBLE VIDEO PAGE
  52588.     AX = 003Fh
  52589.     BX = new video page (0000h to 003Fh)
  52590. Note:    the specified page must be a physical or virtual page
  52591. SeeAlso: AX=0001h,AX=003Dh,AX=003Eh,AX=0041h
  52592. ----------620040-----------------------------
  52593. INT 62 u - FGDRIVER v1.10 - "FG_GETHPAGE" - GET CURRENT HIDDEN VIDEO PAGE NUM
  52594.     AX = 0040h
  52595. Return: AX = current hidden video page number (0000h-003Fh)
  52596. SeeAlso: AX=003Ch,AX=003Eh,AX=0041h
  52597. ----------620041-----------------------------
  52598. INT 62 u - FGDRIVER v1.10 - "FG_SETHPAGE" - SET HIDDEN VIDEO PAGE
  52599.     AX = 0041h
  52600.     BX = new hidden page (0000h to 003Fh)
  52601. Note:    specified page must be a physical page or a virtual page
  52602. SeeAlso: AX=003Dh,AX=003Fh,AX=0040h
  52603. ----------620042-----------------------------
  52604. INT 62 u - FGDRIVER v1.10 - "FG_ALLOCATE" - CREATE VIRTUAL VIDEO PAGE
  52605.     AX = 0042h
  52606.     BX = page number (0000h-003Fh)
  52607. Return: AX = status
  52608.         0000h successful
  52609.         0001h specified page is a physical or logical page
  52610.         0007h virtual page created, but memory control blocks corrupted
  52611.         0008h not enough memory
  52612. Notes:    FGDRIVER is the external video driver for the shareware
  52613.       Fastgraph/Light by Ted Gruber Software
  52614.     the amount of memory required by the virtual video page depends on the
  52615.       current video mode
  52616. SeeAlso: AX=0043h,AX=009Dh,AX=009Fh
  52617. ----------620043-----------------------------
  52618. INT 62 u - FGDRIVER v1.10 - "FG_FREEPAGE" - FREE VIRTUAL OR LOGICAL VIDEO PAGE
  52619.     AX = 0043h
  52620.     BX = page number (0000h-003Fh)
  52621. Return: AX = status
  52622.         0000h successful
  52623.         0001h specified page is a physical page
  52624.         0007h virtual page released, but memory control blocks corrupted
  52625.         0009h attempt to free a page which was never created
  52626. SeeAlso: AX=0042h,AX=009Dh,AX=009Eh,AX=009Fh
  52627. ----------620044-----------------------------
  52628. INT 62 u - FGDRIVER v1.10 - "FG_GETADDR" - GET SEGMENT OF ACTIVE VIDEO PAGE
  52629.     AX = 0044h
  52630. Return: AX = segment of active video page
  52631. ----------620045-----------------------------
  52632. INT 62 u - FGDRIVER v1.10 - "FG_RESIZE" - SET GRAPHICS MODE VIDEO PAGE SIZE
  52633.     AX = 0045h
  52634.     BX = new page width in pixels
  52635.     CX = new page height in pixels
  52636. Notes:    the visible page must be set to 0000h before making this call
  52637.     mouse, joysticks, expanded memory, and extended memory must be
  52638.       reinitialized after this call
  52639. SeeAlso: AX=000Ah,AX=000Bh,AX=0075h,AX=007Ah,AX=00A0h,AX=00A1h
  52640. ----------620046-----------------------------
  52641. INT 62 u - FGDRIVER v1.10 - "FG_GETMAP" - STORE IMAGE AS MODE-INDEPENDNT BITMAP
  52642.     AX = 0046h
  52643.     ES:BX -> buffer for video mode-independent bitmap
  52644.     CX = width of bitmap in bytes
  52645.     DX = height of bitmap in pixel rows
  52646. Return: each bit in bitmap is set if corresponding pixel is of the current
  52647.       color, cleared otherwise
  52648. Note:    this call is ignored in text modes
  52649. SeeAlso: AX=0047h,AX=0048h
  52650. ----------620047-----------------------------
  52651. INT 62 u - FGDRIVER v1.10 - "FG_DRAWMAP" - DISPLAY MODE-INDEPENDENT BIT MAP
  52652.     AX = 0047h
  52653.     ES:BX -> bitmap (each set bit is pixel drawn in current color)
  52654.     CX = width of bitmap in bytes
  52655.     DX = height of bitmap in pixel rows
  52656. SeeAlso: AX=0046h,AX=004Ah,AX=004Dh,AX=0052h
  52657. ----------620048-----------------------------
  52658. INT 62 u - FGDRIVER v1.10 - "FG_GETIMAGE" - STORE IMAGE AS BITMAP
  52659.     AX = 0048h
  52660.     ES:BX -> buffer for video mode-specific bitmap
  52661.     CX = width of bitmap in bytes
  52662.     DX = height of bitmap in pixel rows
  52663. SeeAlso: AX=0046h,AX=0049h,AX=0062h
  52664. ----------620049-----------------------------
  52665. INT 62 u - FGDRIVER v1.10 - "FG_DRWIMAGE" - DISPLAY BITMAPPED IMAGE
  52666.     AX = 0049h
  52667.     ES:BX -> video mode-specific bitmap
  52668.     CX = width of bitmap in bytes
  52669.     DX = height of bitmap in pixel rows
  52670. Note:    the image will be drawn with its lower left corner at the current
  52671.       cursor position (either text or graphics)    
  52672. SeeAlso: AX=0048h,AX=004Ah,AX=0062h
  52673. ----------62004A-----------------------------
  52674. INT 62 u - FGDRIVER v1.10 - "FG_CLPIMAGE" - DISPLAY CLIPPED IMAGE (BITMAP)
  52675.     AX = 004Ah
  52676.     ES:BX -> mode-specific bitmap
  52677.     CX = width of bit map in bytes
  52678.     DX = height of bit map in pixel rows
  52679. Notes:    this call is ignored in text modes
  52680.     the image is drawn with its lower left corner at the current graphics
  52681.       cursor position
  52682.     the current clipping region is used, extended to a byte boundary
  52683. SeeAlso: AX=0029h,AX=0047h,AX=0049h,AX=004Ch,AX=0052h
  52684. ----------62004B-----------------------------
  52685. INT 62 u - FGDRIVER v1.10 - "FG_REVIMAGE" - DISPLAY REVERSED IMAGE (BITMAP)
  52686.     AX = 004Bh
  52687.     ES:BX -> mode-specific bitmap
  52688.     CX = width of bitmap in bytes
  52689.     DX = height of bitmap in pixel rows
  52690. Notes:    this call is ignored in text modes
  52691.     the image is drawn with its lower left corner at the current graphics
  52692.       cursor position
  52693. SeeAlso: AX=004Ah,AX=004Ch
  52694. ----------62004C-----------------------------
  52695. INT 62 u - FGDRIVER v1.10 - "FG_FLPIMAGE" - DISPLAY INV CLIPPED IMAGE (BITMAP)
  52696.     AX = 004Ch
  52697.     ES:BX -> mode-specific bitmap
  52698.     CX = width of bit map in bytes
  52699.     DX = height of bit map in pixel rows
  52700. Notes:    this call is ignored in text modes
  52701.     the image is drawn with its lower left corner at the current graphics
  52702.       cursor position
  52703.     the current clipping region is used, extended to a byte boundary
  52704. SeeAlso: AX=0029h,AX=004Ah
  52705. ----------62004D-----------------------------
  52706. INT 62 u - FGDRIVER v1.10 - "FG_DISPLAY" - DISPLAY IMAGE (STD PIXEL RUN FORMAT)
  52707.     AX = 004Dh
  52708.     ES:BX -> pixel run map (pairs of bytes: color index, count)
  52709.     CX = number of pixel runs to display
  52710.     DX = width of image in pixels (> 0)
  52711. Notes:    this call is ignored in text modes
  52712.     the image is displayed with its lower left corner at the current
  52713.       graphics cursor position
  52714. SeeAlso: AX=0047h,AX=004Eh,AX=004Fh,AX=0050h,AX=0060h
  52715. ----------62004E-----------------------------
  52716. INT 62 u - FGDRIVER v1.10 - "FG_DISPLAY" - DISPLAY IMAGE (PACKED PIXEL RUN FMT)
  52717.     AX = 004Eh
  52718.     ES:BX -> pixel run map (trios of bytes: colors, count1, count2; colors
  52719.         contains the color for the first run in its high nybble and the
  52720.         color for the second run in its low nybble)
  52721.     CX = number of pixel runs to display
  52722.     DX = width of image in pixels (> 0)
  52723. Notes:    this call is ignored in text modes
  52724.     the image is displayed with its lower left corner at the current
  52725.       graphics cursor position
  52726. SeeAlso: AX=004Dh,AX=004Fh,AX=0050h,AX=0060h
  52727. ----------62004F-----------------------------
  52728. INT 62 u - FGDRIVER v1.10 - "FG_DISPFILE" - DISPLAY STORED IMAGE
  52729.     AX = 004Fh
  52730.     ES:BX -> ASCIZ filename
  52731.     CX = image width in pixels (> 0)
  52732.     DX = image format
  52733.         0000h Fastgraph standard pixel run format
  52734.         0001h packed pixel run format
  52735. Notes:    this call is ignored in text modes
  52736.     the image is displayed with its lower left corner at the current
  52737.       graphics cursor position
  52738. SeeAlso: AX=004Dh,AX=004Eh,AX=0050h,AX=0060h
  52739. ----------620050-----------------------------
  52740. INT 62 u - FGDRIVER v1.10 - "FG_PATTERN" - SPECIFY DISPLAY PATTERN FOR COLOR
  52741.     AX = 0050h
  52742.     BX = index of pattern to define
  52743.     CX = number of predefined display pattern
  52744. Notes:    when displaying a pixel run map, Fastgraph uses the pattern associated
  52745.       with each color index rather than displaying the actual color
  52746.     this call has no effect in text and 256-color graphics modes
  52747. SeeAlso: AX=004Dh,AX=004Eh,AX=004Fh
  52748. ----------620051-----------------------------
  52749. INT 62 u - FGDRIVER v1.10 - "FG_DRAWMASK" - DISPLAY IMAGE (MASKING MAP)
  52750.     AX = 0051h
  52751.     ES:BX -> array containing image stores as a masking map (see below)
  52752.     CX = number of pixel runs in masking map
  52753.     DX = width of masking map in pixels
  52754. Notes:    this call is ignored in text modes and in native EGA and VGA graphics
  52755.       modes
  52756.     the image is drawn with its lower left corner at the current graphics
  52757.       cursor position
  52758. SeeAlso: AX=0052h
  52759.  
  52760. Format of masking map:
  52761. Offset    Size    Description
  52762.  00h    BYTE    length of first "protect" run (pixels remain unchanged)
  52763.  01h    BYTE    length of first "zero" run (pixels set to background color)
  52764.  02h    BYTE    length of second "protect" run
  52765.  03h    BYTE    length of second "zero" run
  52766.     ...
  52767. ----------620052-----------------------------
  52768. INT 62 u - FGDRIVER v1.10 - "FG_CLIPMASK" - DISPLAY CLIPPED IMAGE (MASKING MAP)
  52769.     AX = 0052h
  52770.     ES:BX -> array containing image stored as a masking map (see AX=0051h)
  52771.     CX = number of pixel runs in masking map
  52772.     DX = width of masking map in pixels
  52773. Notes:    this call is ignored in text modes and in native EGA and VGA graphics
  52774.       modes
  52775.     the image is drawn with its lower left corner at the current graphics
  52776.       cursor position
  52777. SeeAlso: AX=0029h,AX=004Ah,AX=0051h,AX=0053h,AX=0054h
  52778. ----------620053-----------------------------
  52779. INT 62 u - FGDRIVER v1.10 - "FG_REVMASK" - DISPLAY REVERSED IMAGE (MASKING MAP)
  52780.     AX = 0053h
  52781.     ES:BX -> array containing image stored as a masking map (see AX=0051h)
  52782.     CX = number of pixel runs in masking map
  52783.     DX = width of masking map in pixels
  52784. Notes:    this call is ignored in text modes and in native EGA and VGA graphics
  52785.       modes
  52786.     the image is drawn with its lower left corner at the current graphics
  52787.       cursor position
  52788. SeeAlso: AX=0052h,AX=0054h
  52789. ----------620054-----------------------------
  52790. INT 62 u - FGDRIVER v1.10 - "FG_FLIPMASK" - DISPLAY INV CLIPPED IMAGE (MASKMAP)
  52791.     AX = 0054h
  52792.     ES:BX -> array containing image stored as a masking map (see AX=0051h)
  52793.     CX = number of pixel runs in masking map
  52794.     DX = width of masking map in pixels
  52795. Notes:    this call is ignored in text modes and in native EGA and VGA graphics
  52796.       modes
  52797.     the image is drawn with its lower left corner at the current graphics
  52798.       cursor position
  52799. SeeAlso: AX=0029h,AX=0052h,AX=0053h
  52800. ----------620055-----------------------------
  52801. INT 62 - FGDRIVER v1.10 - UNUSED
  52802.     AX = 0055h to 0059h
  52803. Return: AX = 0000h
  52804. ----------62005A-----------------------------
  52805. INT 62 u - FGDRIVER v1.10 - "FG_SAVE" - COPY REGION FROM VISIBLE TO HIDDEN PAGE
  52806.     AX = 005Ah
  52807.     BX = left edge column
  52808.     CX = right edge column
  52809.     DX = top edge row
  52810.     SI = bottom edge row
  52811. Note:    left and right edges are adjusted to byte boundaries if necessary
  52812. SeeAlso: AX=005Bh
  52813. ----------62005B-----------------------------
  52814. INT 62 u - FGDRIVER v1.10 - "FG_RESTORE" - COPY REGION FROM HIDDEN TO VIS PAGE
  52815.     AX = 005Bh
  52816.     BX = left edge column
  52817.     CX = right edge column
  52818.     DX = top edge row
  52819.     SI = bottom edge row
  52820. Note:    left and right edges are adjusted to byte boundaries if necessary
  52821. SeeAlso: AX=005Ah,AX=0064h
  52822. ----------62005C-----------------------------
  52823. INT 62 u - FGDRIVER v1.10 - "FG_TRANSFER" - COPY REGION
  52824.     AX = 005Ch
  52825.     CX = source video page
  52826.     DX = destination video page
  52827.     ES:BX -> copy record (see below)
  52828. Note:    source and destination regions must not overlap if on the same page
  52829. SeeAlso: AX=005Dh,AX=005Fh
  52830.  
  52831. Format of copy record:
  52832. Offset    Size    Description
  52833.  00h    WORD    left edge column of source region
  52834.  02h    WORD    right edge column of source region
  52835.  04h    WORD    top edge row of source region
  52836.  06h    WORD    bottom edge row of source region
  52837.  08h    WORD    left edge of destination
  52838.  0Ah    WORD    bottom edge of destination
  52839. ----------62005D-----------------------------
  52840. INT 62 u - FGDRIVER v1.10 - "FG_TCXFER" - COPY REGION EXCLUDING TRANSPARENT
  52841.     AX = 005Dh
  52842.     CX = source video page
  52843.     DX = destination video page
  52844.     ES:BX -> copy record (see AX=005Ch)
  52845. Notes:    pixels which are in any of the colors defined as transparent with
  52846.       AX=005Eh are left unchanged in the destination region
  52847.     source and destination regions must not overlap if on the same page
  52848.     this call is ignored in text modes
  52849. SeeAlso: AX=005Ch,AX=005Eh
  52850. ----------62005E-----------------------------
  52851. INT 62 u - FGDRIVER v1.10 - "FG_TCMASK" - SET TRANSPARENT COLORS
  52852.     AX = 005Eh
  52853.     BX = colors to consider transparent (bit 0 = color 0, etc)
  52854. Notes:    this call is ignored in text modes
  52855.     the specified colors are considered transparent by AX=005Dh
  52856. SeeAlso: AX=005Dh
  52857. ----------62005F-----------------------------
  52858. INT 62 u - FGDRIVER v1.10 - "FG_COPYPAGE" - TRANSFER VIDEO PAGE CONTENTS
  52859.     AX = 005Fh
  52860.     BX = source page number (0000h-003Fh)
  52861.     CX = destination page number (0000h-003Fh)
  52862. Note:    if both source and destination pages are logical pages, they must both
  52863.       be located in the same type (conventional, EMS, XMS) of memory
  52864. SeeAlso: AX=005Ch,AX=009Dh,AX=009Eh,AX=009Fh
  52865. ----------620060-----------------------------
  52866. INT 62 u - FGDRIVER v1.10 - "FG_DISPPCX" - DISPLAY PCX FILE
  52867.     AX = 0060h
  52868.     ES:BX -> ASCIZ filename
  52869.     CX = flags
  52870.         bit 0: use current palette rather than PCX file's palette
  52871.         bits 1-15: reserved (0)
  52872. Return: AX = status
  52873.         0000h success
  52874.         0001h file not found
  52875.         0002h file is not a valid PCX file
  52876. Notes:    this call is ignored in text modes and Hercules low-resolution graphics
  52877.     the image is displayed with its upper left corner at the current
  52878.       graphics cursor position
  52879. SeeAlso: AX=004Dh,AX=004Eh,AX=004Fh,AX=0061h
  52880. ----------620061-----------------------------
  52881. INT 62 u - FGDRIVER v1.10 - "FG_MAKEPCX" - CREATE PCX FILE FROM SCREEN WINDOW
  52882.     AX = 0061h
  52883.     BX = left edge in screen space units
  52884.     CX = right edge in screen space units
  52885.     DX = top edge in screen space units
  52886.     SI = bottom edge in screen space units
  52887.     ES:DI -> ASCIZ filename of PCX file to create
  52888. Return: AX = status
  52889.         0000h successful
  52890.         0001h file not created
  52891. Notes:    the PCX file is created from the specified region of the active video
  52892.       page; the left and right edges are adjusted to a byte boundary if
  52893.       necessary
  52894.     if the specified file already exists, it is overwritten
  52895.     this call is ignored in text and Hercules low-resolution graphics modes
  52896. SeeAlso: AX=0060h
  52897. ----------620062-----------------------------
  52898. INT 62 u - FGDRIVER v1.10 - "FG_IMAGESIZ" - DETERMINE IMAGE STORAGE REQUIREMENT
  52899.     AX = 0062h
  52900.     BX = image width in pixels
  52901.     CX = image height in pixels
  52902. Return: DX:AX = size in bytes of mode-specific bitmap for current video mode
  52903. SeeAlso: AX=0048h
  52904. ----------620063-----------------------------
  52905. INT 62 - FGDRIVER v1.10 - UNUSED
  52906.     AX = 0063h
  52907. Return: AX = 0000h
  52908. ----------620064-----------------------------
  52909. INT 62 u - FGDRIVER v1.10 - "FG_FADEIN" - FADE IN HIDDEN PAGE
  52910.     AX = 0064h
  52911.     BX = delay (0000h = fastest possible fade-in)
  52912. Notes:    the current hidden page is copied to the current visible page in small
  52913.       random sections to produce a fade-in effect
  52914.     this call is ignored in text modes
  52915. SeeAlso: AX=005Bh,AX=0065h
  52916. ----------620065-----------------------------
  52917. INT 62 u - FGDRIVER v1.10 - "FG_FADEOUT" - FADE OUT TO CURRENT COLOR
  52918.     AX = 0065h
  52919.     BX = delay (0000h = fastest possible fade-out)
  52920. Notes:    this call is ignored in text modes
  52921.     the current visible page is filled with pixels of the current color in
  52922.       small random sections to give a fade-out effect
  52923. SeeAlso: AX=0064h
  52924. ----------620066-----------------------------
  52925. INT 62 u - FGDRIVER v1.10 - "FG_PAN" - SET SCREEN ORIGIN
  52926.     AX = 0066h
  52927.     BX = new column for screen origin
  52928.     CX = new row for screen origin
  52929. SeeAlso: AX=0067h
  52930. ----------620067-----------------------------
  52931. INT 62 u - FGDRIVER v1.10 - "FG_SCROLL" - VERTICALLY SCROLL SCREEN REGION
  52932.     AX = 0067h
  52933.     BX = left edge column
  52934.     CX = right edge column
  52935.     DX = top edge row
  52936.     SI = bottom edge row
  52937.     DI = number of pixels by which to scroll (positive scrolls up,
  52938.         negative scrolls down)
  52939.     ES = type of scroll
  52940.         0000h circular (rows scrolled off are copied to vacated rows)
  52941.         else vacated rows are filled with the current color
  52942. Notes:    in graphics modes, the left and right edges are adjusted to byte
  52943.       boundaries if necessary
  52944.     circular scrolling uses part of the hidden page as a workspace
  52945. SeeAlso: AX=0066h
  52946. ----------620068-----------------------------
  52947. INT 62 - FGDRIVER v1.10 - UNUSED
  52948.     AX = 0068h to 006Ch
  52949. Return: AX = 0000h
  52950. ----------62006D-----------------------------
  52951. INT 62 u - FGDRIVER v1.10 - "FG_WAITKEY" - FLUSH KEYBOARD BUFFER AND AWAIT KEY
  52952.     AX = 006Dh
  52953. Return: after next key pressed
  52954. SeeAlso: AX=006Eh,AX=006Fh,AX=0096h
  52955. ----------62006E-----------------------------
  52956. INT 62 u - FGDRIVER v1.10 - "FG_GETKEY" - GET NEXT KEYSTROKE
  52957.     AX = 006Eh
  52958.     ES:BX -> variable pointer record (see below)
  52959. Return: (after next keystroke if no typeahead) variables updated
  52960. SeeAlso: AX=006Dh,AX=006Fh,AX=0070h
  52961.  
  52962. Format of variable pointer record:
  52963. Offset    Size    Description
  52964.  00h    WORD    segment of BYTE buffer for ASCII keycode
  52965.  02h    WORD    offset of BYTE buffer for ASCII keycode
  52966.  04h    WORD    segment of BYTE buffer for extended keycode
  52967.  06h    WORD    offset of BYTE buffer for extended keycode
  52968. ----------62006F-----------------------------
  52969. INT 62 u - FGDRIVER v1.10 - "FG_INTKEY" - GET KEYSTROKE, NO WAIT
  52970.     AX = 006Fh
  52971.     ES:BX -> variable pointer record (see below)
  52972. Return: variables updated
  52973. Note:    if the keyboard buffer is empty, both the ASCII and extended keycodes
  52974.       are set to 00h
  52975. SeeAlso: AX=006Dh,AX=006Eh,AX=0070h,AX=0079h
  52976.  
  52977. Format of variable pointer record:
  52978. Offset    Size    Description
  52979.  00h    WORD    segment of BYTE buffer for ASCII keycode
  52980.  02h    WORD    offset of BYTE buffer for ASCII keycode
  52981.  04h    WORD    segment of BYTE buffer for extended keycode
  52982.  06h    WORD    offset of BYTE buffer for extended keycode
  52983. ----------620070-----------------------------
  52984. INT 62 u - FGDRIVER v1.10 - "FG_CAPSLOCK" - GET STATE OF CAPSLOCK KEY
  52985.     AX = 0070h
  52986. Return: AX = CapsLock state (0000h off, 0001h on)
  52987. SeeAlso: AX=006Eh,AX=006Fh,AX=0071h,AX=0072h,AX=0074h
  52988. ----------620071-----------------------------
  52989. INT 62 u - FGDRIVER v1.10 - "FG_SETCAPS" - SET STATE OF CAPSLOCK KEY
  52990.     AX = 0071h
  52991.     BX = new state (0000h off, 0001h on)
  52992. SeeAlso: AX=0070h,AX=0073h
  52993. ----------620072-----------------------------
  52994. INT 62 u - FGDRIVER v1.10 - "FG_NUMLOCK" - GET STATE OF NUMLOCK KEY
  52995.     AX = 0072h
  52996. Return: AX = NumLock state (0000h off, 0001h on)
  52997. SeeAlso: AX=0070h,AX=0074h
  52998. ----------620073-----------------------------
  52999. INT 62 u - FGDRIVER v1.10 - "FG_SETNUM" - SET STATE OF NUMLOCK KEY
  53000.     AX = 0073h
  53001.     BX = new state (0000h off, 0001h on)
  53002. SeeAlso: AX=0071h,AX=0072h
  53003. ----------620074-----------------------------
  53004. INT 62 u - FGDRIVER v1.10 - "FG_SCRLOCK" - GET STATE OF SCROLL LOCK KEY
  53005.     AX = 0074h
  53006. Return: AX = ScrollLock state (0000h off, 0001h on)
  53007. SeeAlso: AX=0070h,AX=0072h
  53008. ----------620075-----------------------------
  53009. INT 62 u - FGDRIVER v1.10 - "FG_INITJOY" - INITIALIZE JOYSTICK USE
  53010.     AX = 0075h
  53011.     BX = joystick number (0001h or 0002h)
  53012. Return: AX = status
  53013.         0000h successful
  53014.         FFFFh joystick not connected or no game port
  53015. Note:    Fastgraph assumes that the requested joystick is centered at the time
  53016.       this function is called
  53017. SeeAlso: AX=0076h,AX=0077h,AX=0078h,AX=0079h
  53018. ----------620076-----------------------------
  53019. INT 62 u - FGDRIVER v1.10 - "FG_GETXJOY" - GET HORIZONTAL POSITION OF JOYSTICK
  53020.     AX = 0076h
  53021.     BX = joystick number (0001h or 0002h)
  53022. Return: AX = horizontal position of joystick
  53023.         FFFFh if joystick uninitialized or not present
  53024. Notes:    the actual coordinates are processor- and joystick-dependent
  53025.     you must call AX=0075h before this function
  53026. SeeAlso: AX=0075h,AX=0077h,AX=0078h
  53027. ----------620077-----------------------------
  53028. INT 62 u - FGDRIVER v1.10 - "FG_GETYJOY" - GET VERTICAL POSITION OF JOYSTICK
  53029.     AX = 0077h
  53030.     BX = joystick number (0001h or 0002h)
  53031. Return: AX = vertical position of joystick
  53032.         FFFFh if joystick uninitialized or not present
  53033. Notes:    the actual coordinates are processor- and joystick-dependent
  53034.     you must call AX=0075h before this function
  53035. SeeAlso: AX=0075h,AX=0076h,AX=0078h
  53036. ----------620078-----------------------------
  53037. INT 62 u - FGDRIVER v1.10 - "FG_BUTTON" - GET JOYSTICK BUTTON STATE
  53038.     AX = 0078h
  53039.     BX = joystick number (0001h or 0002h)
  53040. Return: AX = button states
  53041.         bit 0: top button pressed
  53042.         bit 1: bottom button pressed
  53043. SeeAlso: AX=0075h,AX=0076h,AX=0077h,AX=0079h
  53044. ----------620079-----------------------------
  53045. INT 62 u - FGDRIVER v1.10 - "FG_INTJOY" - GET KEYCODES CORRESP TO JOYSTICK POS
  53046.     AX = 0079h
  53047.     CX = joystick number (0001h or 0002h)
  53048.     ES:BX -> variable pointer record (see below)
  53049. Notes:    if the indicated joystick has not been initialized with AX=0075h, both
  53050.       the button code and joystick position will be set to 00h
  53051.     if either button is pressed, a button code of 0Dh is returned;
  53052.       otherwise, a button code of 00h is returned
  53053. SeeAlso: AX=006Fh,AX=0075h,AX=0078h
  53054.  
  53055. Format of variable pointer record:
  53056. Offset    Size    Description
  53057.  00h    WORD    segment of BYTE buffer for button code
  53058.  02h    WORD    offset of BYTE buffer for button code
  53059.  04h    WORD    segment of BYTE buffer for joystick position
  53060.  06h    WORD    offset of BYTE buffer for joystick position
  53061. ----------62007A-----------------------------
  53062. INT 62 u - FGDRIVER v1.10 - "FG_MOUSEINI" - INITIALIZE MOUSE SUPPORT
  53063.     AX = 007Ah
  53064. Return: AX = status
  53065.         0002h two-button mouse
  53066.         0003h three-button mouse
  53067.         FFFFh initialization failed
  53068. Note:    after this call, the mouse cursor is invisible
  53069. SeeAlso: AX=007Bh,AX=007Ch,AX=007Eh,AX=0080h,INT 33/AX=0000h
  53070. ----------62007B-----------------------------
  53071. INT 62 u - FGDRIVER v1.10 - "FG_MOUSEVIS" - SET MOUSE CURSOR VISIBILITY
  53072.     AX = 007Bh
  53073.     BX = new state (0000h invisible, 0001h visible)
  53074. SeeAlso: AX=007Ah,AX=007Eh,INT 33/AX=0001h,INT 33/AX=0002h
  53075. ----------62007C-----------------------------
  53076. INT 62 u - FGDRIVER v1.10 - "FG_MOUSEBUT" - GET MOUSE BUTTON PRESS/RELEASE CNTS
  53077.     AX = 007Ch
  53078.     CX = mouse button (1 = left press, 2 = right press, 3 = middle press,
  53079.               -1=left release, -2=right release, -3=middle release)
  53080.     ES:BX -> variable pointer record (see below)
  53081. Return: variables updated
  53082. Note:    returns the count of presses or releases since the last call to this
  53083.       function; if the count is zero, row and col will also be zero
  53084. SeeAlso: AX=007Ah,INT 33/AX=0005h,INT 33/AX=0006h
  53085.  
  53086. Format of variable pointer record:
  53087. Offset    Size    Description
  53088.  00h    WORD    segment of WORD buffer for press/release count
  53089.  02h    WORD    offset of WORD buffer for press/release count
  53090.  04h    WORD    segment of WORD buffer for screen space col of last press/rls
  53091.  06h    WORD    offset of WORD buffer for screen space col of last press/rels
  53092.  08h    WORD    segment of WORD buffer for screen space row of last press/rls
  53093.  0Ah    WORD    offset of WORD buffer for screen space row of last press/rls
  53094. ----------62007D-----------------------------
  53095. INT 62 u - FGDRIVER v1.10 - "FG_MOUSEPOS" - GET CURRENT MOUSE POSITION
  53096.     AX = 007Dh
  53097.     ES:BX -> variable pointer record (see below)
  53098. SeeAlso: AX=007Ah,AX=0081h
  53099.  
  53100. Format of variable pointer record:
  53101. Offset    Size    Description
  53102.  00h    WORD    segment of WORD buffer for mouse column
  53103.  02h    WORD    offset of WORD buffer for mouse column
  53104.  04h    WORD    segment of WORD buffer for mouse row
  53105.  06h    WORD    offset of WORD buffer for mouse row
  53106.  08h    WORD    segment of WORD buffer for button status
  53107.  0Ah    WORD    offset of WORD buffer for button status
  53108. Note:    button status: bit 0 = left button, bit 1 = right, bit 2 = middle
  53109. ----------62007E-----------------------------
  53110. INT 62 u - FGDRIVER v1.10 - "FG_MOUSECUR" - SPECIFY TEXT-MODE MOUSE CURSOR
  53111.     AX = 007Eh
  53112.     BX = screen mask
  53113.     CX = cursor mask
  53114. Note:    this call is ignored in graphics modes
  53115. SeeAlso: AX=007Ah,AX=007Fh,INT 33/AX=000Ah
  53116. ----------62007F-----------------------------
  53117. INT 62 u - FGDRIVER v1.10 - "FG_MOUSEPTR" - SPECIFY GRAPH-MODE MOUSE CURSOR
  53118.     AX = 007Fh
  53119.     ES:BX -> masks (16-byte screen mask followed by 16-byte cursor mask)
  53120.     CX = X offset of hot spot from upper left corner
  53121.     DX = Y offset of hot spot from upper left corner
  53122. Note:    this call is ignored in text modes
  53123. SeeAlso: AX=007Ah,AX=007Eh,INT 33/AX=0009h
  53124. ----------620080-----------------------------
  53125. INT 62 u - FGDRIVER v1.10 - "FG_MOUSELIM" - SPECIFY MOUSE CURSOR LIMITS
  53126.     AX = 0080h
  53127.     BX = left-most position allowed for mouse cursor
  53128.     CX = right-most position allowed
  53129.     DX = top-most position allowed
  53130.     SI = bottom-most position allowed
  53131. SeeAlso: AX=007Ah,AX=0081h,INT 33/AX=0007h,INT 33/AX=0008h
  53132. ----------620081-----------------------------
  53133. INT 62 u - FGDRIVER v1.10 - "FG_MOUSEMOV" - SET MOUSE CURSOR POSITION
  53134.     AX = 0081h
  53135.     BX = new column
  53136.     CX = new row
  53137. Note:    will not move the mouse cursor outside the bounding box specified with
  53138.       AX=0080h
  53139. SeeAlso: AX=007Ah,AX=007Dh,AX=0080h,INT 33/AX=0004h
  53140. ----------620082-----------------------------
  53141. INT 62 u - FGDRIVER v1.10 - "FG_MOUSESPD" - SET MOUSE CURSOR SPEED
  53142.     AX = 0082h
  53143.     BX = horizontal mickeys per eight pixels of movement (default 16)
  53144.     CX = vertical mickeys per eight pixels of movement (default 16)
  53145. SeeAlso: INT 33/AX=000Fh,INT 33/AX=001Ah
  53146. ----------620083-----------------------------
  53147. INT 62 - FGDRIVER v1.10 - UNUSED
  53148.     AX = 0083h to 0087h
  53149. Return: AX = 0000h
  53150. ----------620088-----------------------------
  53151. INT 62 u - FGDRIVER v1.10 - "FG_SOUND" - MAKE SOUND FOR SPECIFIED DURATION
  53152.     AX = 0088h
  53153.     BX = frequency in Hertz (18-32767)
  53154.     CX = duration in clock ticks (0000h or negative for continuous sound)
  53155. Note:    ignored if asynchronous sound (AX=0089h,AX=008Bh,AX=008Dh) is in
  53156.       progress
  53157. SeeAlso: AX=0089h,AX=008Ah,AX=008Eh,AX=0090h
  53158. ----------620089-----------------------------
  53159. INT 62 u - FGDRIVER v1.10 - "FG_SOUNDS" - PLAY SOUNDS IN BACKGROUND
  53160.     AX = 0089h
  53161.     CX = number of times to cycle through sound list
  53162.     ES:BX -> sounds array (see below)
  53163. Note:    ignored if asynchronous sound (AX=0089h,AX=008Bh,AX=008Dh) is in
  53164.       progress
  53165. SeeAlso: AX=0088h,AX=008Eh,AX=008Fh
  53166.  
  53167. Format of sounds array element:
  53168. Offset    Size    Description
  53169.  00h    WORD    frequency of sound in Hertz (0000h ends array)
  53170.  02h    WORD    duration of sound in clock ticks
  53171. ----------62008A-----------------------------
  53172. INT 62 u - FGDRIVER v1.10 - "FG_VOICE" - START SOUND
  53173.     AX = 008Ah
  53174.     BX = channel on TI sound chip
  53175.         1-3 = channels 1-3, 4 = channel 4 with periodic noise,
  53176.         5 = channel 4 with white noise
  53177.     CX = frequency in Hz (18-32767 for channels 1-3; 0=512 Hz, 1=1024 Hz, 
  53178.         2=2048 Hz for channels 4 and 5)
  53179.     DX = volume
  53180.     SI = duration in clock ticks (continuous if <= 0)
  53181. Notes:    FGDRIVER is the external video driver for the shareware
  53182.       Fastgraph/Light by Ted Gruber Software
  53183.     only available on PCjr and Tandy 1000
  53184. SeeAlso: AX=0088h,AX=008Bh,AX=008Ch
  53185. ----------62008B-----------------------------
  53186. INT 62 u - FGDRIVER v1.10 - "FG_VOICES" - PLAY SOUNDS IN BACKGROUND
  53187.     AX = 008Bh
  53188.     ES:BX -> tone array (see below)
  53189.     CX = number of times to repeat tone array
  53190. Notes:    FGDRIVER is the external video driver for the shareware
  53191.       Fastgraph/Light by Ted Gruber Software
  53192.     only available on PCjr and Tandy 1000
  53193. SeeAlso: AX=008Ah,AX=008Dh,AX=008Eh,AX=008Fh,AX=0091h
  53194.  
  53195. Format of tone array element:
  53196. Offset    Size    Description
  53197.  00h    WORD    channel number (0000h terminates array)
  53198.  02h    WORD    frequency
  53199.  04h    WORD    volume
  53200.  06h    WORD    duration in 1/72.8 seconds
  53201. ----------62008C-----------------------------
  53202. INT 62 u - FGDRIVER v1.10 - "FG_MUSIC" - PLAY SERIES OF NOTES
  53203.     AX = 008Ch
  53204.     ES:BX -> '$'-terminated music string in BASIC PLAY format
  53205. Return: after music completed
  53206. Note:    ignored if asynchronous sound (AX=0089h,AX=008Bh,AX=008Dh) is in
  53207.       progress
  53208. SeeAlso: AX=008Ah,AX=008Dh
  53209. ----------62008D-----------------------------
  53210. INT 62 u - FGDRIVER v1.10 - "FG_MUSICB" - PLAY SERIES OF NOTES IN BACKGROUND
  53211.     AX = 008Dh
  53212.     CX = number of repetitions (negative = continuous play)
  53213.     ES:BX -> '$'-terminated music string in BASIC PLAY format
  53214. Note:    ignored if asynchronous sound (AX=0089h,AX=008Bh,AX=008Dh) is in
  53215.       progress
  53216. SeeAlso: AX=008Bh,AX=008Ch,AX=008Eh,AX=008Fh,AX=0091h
  53217. ----------62008E-----------------------------
  53218. INT 62 u - FGDRIVER v1.10 - "FG_HUSH" - STOP ASYNCHRONOUS SOUND IMMEDIATELY
  53219.     AX = 008Eh
  53220. Note:    immediately stops any sounds started with "FG_MUSICB", "FG_SOUNDS",
  53221.       or AX=008Bh; ignored if no asynchronous sound is playing
  53222. SeeAlso: AX=0088h,AX=008Bh,AX=008Fh,AX=0090h,AX=0091h
  53223. ----------62008F-----------------------------
  53224. INT 62 u - FGDRIVER v1.10 - "FG_HUSHNEXT" - STOP ASYNCHRONOUS SOUND
  53225.     AX = 008Fh
  53226. Note:    stops any sounds started with "FG_MUSICB", "FG_SOUNDS", or AX=008Bh
  53227.       after the current repetition completes; ignored unless asynchronous
  53228.       sound is continuous
  53229. SeeAlso: AX=008Bh,AX=008Eh,AX=0090h
  53230. ----------620090-----------------------------
  53231. INT 62 u - FGDRIVER v1.10 - "FG_QUIET" - STOP CONTINUOUS SYNCHRONOUS SOUND
  53232.     AX = 0090h
  53233. Note:    this call has no effect if there is no continuous sound playing
  53234. SeeAlso: AX=008Eh,AX=008Fh,AX=0091h
  53235. ----------620091-----------------------------
  53236. INT 62 u - FGDRIVER v1.10 - "FG_PLAYING" - DETERMINE WHETHER ASYNC SOUND ACTIVE
  53237.     AX = 0091h
  53238. Return: AX = sound state (0 = no asynchronous sound, 1 = async sound playing)
  53239. SeeAlso: AX=008Bh,AX=008Dh,AX=0090h
  53240. ----------620092-----------------------------
  53241. INT 62 u - FGDRIVER v1.10 - "FG_RESUME" - RESTART ASYNCHRONOUS SOUND
  53242.     AX = 0092h
  53243. SeeAlso: AX=008Eh,AX=008Fh,AX=0090h
  53244. ----------620093-----------------------------
  53245. INT 62 u - FGDRIVER v1.10 - "FG_SUSPEND" - TEMPORARILY STOP ASYNCHRONOUS SOUND
  53246.     AX = 0093h
  53247. Notes:    this call has no effect if there is no asynchronous sound in progress
  53248.     the program must not exit while sound is suspended
  53249. SeeAlso: AX=0092h
  53250. ----------620094-----------------------------
  53251. INT 62 - FGDRIVER v1.10 - UNUSED
  53252.     AX = 0094h to 0095h
  53253. Return: AX = 0000h
  53254. ----------620096-----------------------------
  53255. INT 62 u - FGDRIVER v1.10 - "FG_WAITFOR" - DELAY FOR SPECIFIED DURATION
  53256.     AX = 0096h
  53257.     BX = duration in clock ticks
  53258. Return: after delay elapses
  53259. SeeAlso: AX=006Dh,AX=0097h
  53260. ----------620097-----------------------------
  53261. INT 62 u - FGDRIVER v1.10 - "FG_STALL" - PAUSE FOR SPECIFIED DURATION
  53262.     AX = 0097h
  53263.     BX = duration in processor-dependent delay units (see AX=0098h)
  53264. Return: after delay elapses
  53265. SeeAlso: AX=0096h,AX=0098h
  53266. ----------620098-----------------------------
  53267. INT 62 u - FGDRIVER v1.10 - "FG_MEASURE" - GET DELAY UNITS PER CLOCK TICK
  53268.     AX = 0098h
  53269. Return: AX = delay units per clock tick (processor-dependent)
  53270. Note:    delay units are used by "FG_STALL" (AX=0097h)
  53271. SeeAlso: AX=0097h
  53272. ----------620099-----------------------------
  53273. INT 62 u - FGDRIVER v1.10 - "FG_GETCLOCK" - GET CLOCK TICKS SINCE MIDNIGHT
  53274.     AX = 0099h
  53275. Return: DX:AX = number of clock ticks since midnight
  53276. Note:    FGDRIVER is the external video driver for the shareware
  53277.       Fastgraph/Light by Ted Gruber Software
  53278. ----------62009A-----------------------------
  53279. INT 62 - FGDRIVER v1.10 - UNUSED
  53280.     AX = 009Ah
  53281. Return: AX = 0000h
  53282. ----------62009B-----------------------------
  53283. INT 62 u - FGDRIVER v1.10 - "FG_MEMAVAIL" - QUERY AMOUNT OF FREE MEMORY
  53284.     AX = 009Bh
  53285. Return: DX:AX = number of bytes of conventional memory available
  53286. SeeAlso: AX=009Dh
  53287. ----------62009C-----------------------------
  53288. INT 62 u - FGDRIVER v1.10 - "FG_SETFUNC" - SET LOGICAL OPERATION FOR VIDEO OPS
  53289.     AX = 009Ch
  53290.     BX = operation
  53291.         0000h replacement
  53292.         0001h AND
  53293.         0002h OR
  53294.         0003h XOR
  53295. Note:    only available in native EGA/VGA graphics mode (0Dh to 12h)
  53296. ----------62009D-----------------------------
  53297. INT 62 u - FGDRIVER v1.10 - "FG_ALLOCCMS" - CREATE LOGICAL VIDEO PAGE (CONVMEM)
  53298.     AX = 009Dh
  53299.     BX = page number (0001h-003Fh)
  53300. Return: AX = status
  53301.         0000h successful
  53302.         FFFCh insufficient memory
  53303.         FFFDh page already created, or exists as physical or virtual page
  53304.         FFFEh invalid page number
  53305. Note:    the only operation which is allowed on logical pages is AX=005Fh
  53306. SeeAlso: AX=0043h,AX=005Fh,AX=009Bh,AX=009Eh,AX=009Fh
  53307. ----------62009E-----------------------------
  53308. INT 62 u - FGDRIVER v1.10 - "FG_ALLOCEMS" - CREATE LOGICAL VIDEO PAGE (EMS)
  53309.     AX = 009Eh
  53310.     BX = page number (0001h-003Fh)
  53311. Return: AX = status
  53312.         0000h successful
  53313.         FFFCh insufficient memory
  53314.         FFFDh page already created, or exists as physical or virtual page
  53315.         FFFEh invalid page number
  53316.         FFFFh memory manager not initialized
  53317. Notes:    must first call AX=00A0h
  53318.     the only operation which is allowed on logical pages is AX=005Fh
  53319. SeeAlso: AX=0043h,AX=005Fh,AX=009Dh,AX=009Fh,AX=00A0h
  53320. ----------62009F-----------------------------
  53321. INT 62 u - FGDRIVER v1.10 - "FG_ALLOCXMS" - CREATE LOGICAL VIDEO PAGE (XMS)
  53322.     AX = 009Fh
  53323.     BX = page number (0001h-003Fh)
  53324. Return: AX = status (see AX=009Eh)
  53325. Notes:    must first call AX=00A1h
  53326.     the only operation which is allowed on logical pages is AX=005Fh
  53327. SeeAlso: AX=0043h,AX=005Fh,AX=009Dh,AX=009Eh,AX=00A1h
  53328. ----------6200A0-----------------------------
  53329. INT 62 u - FGDRIVER v1.10 - "FG_INITEMS" - INITIALIZE EXPANDED MEMORY USE
  53330.     AX = 00A0h
  53331. Return: AX = status
  53332.         0000h successful
  53333.         FFFFh expanded memory manager inaccessible or not installed
  53334. SeeAlso: AX=009Eh,AX=00A1h
  53335. ----------6200A1-----------------------------
  53336. INT 62 u - FGDRIVER v1.10 - "FG_INITXMS" - INITIALIZE EXTENDED MEMORY USE
  53337.     AX = 00A1h
  53338. Return: AX = status
  53339.         0000h successful
  53340.         FFFFh extended memory manager inaccessible or not installed
  53341. SeeAlso: AX=009Fh,AX=00A0h
  53342. ----------6200A2-----------------------------
  53343. INT 62 u - FGDRIVER v1.10 - "FG_BOX" - DRAW UNFILLED RECTANGLE
  53344.     AX = 00A2h
  53345.     BX = left column
  53346.     CX = right column
  53347.     DX = top row
  53348.     SI = bottom row
  53349. Notes:    FGDRIVER is the external video driver for the shareware
  53350.       Fastgraph/Light by Ted Gruber Software
  53351.     the rectangle is drawn in screen space, respecting the clipping region,
  53352.       width edges of the width specified with AX=00A3h (default = 1 is set
  53353.       by "FG_SETMODE")
  53354.     this function has no effect in text modes
  53355. SeeAlso: AX=002Bh,AX=002Ch,AX=002Eh,AX=0030h,AX=00A3h
  53356. ----------6200A3-----------------------------
  53357. INT 62 u - FGDRIVER v1.10 - "FG_BOXDEPTH" - SET RECTANGLE BORDER WIDTH
  53358.     AX = 00A3h
  53359.     BX = width of left and right edges in pixels (> 0)
  53360.     CX = width of top and bottom edges in pixels (> 0)
  53361. SeeAlso: AX=00A2h
  53362. ----------6200A4-----------------------------
  53363. INT 62 u - FGDRIVER v1.10 - "FG_GETDACS" - GET VIDEO DAC CONTENTS
  53364.     AX = 00A4h
  53365.     CX = number of DAC registers to return (0001h to 0100h)
  53366.     DX = starting DAC register number (0000h to 00FFh)
  53367.     ES:BX -> buffer for DAC red/green/blue triples
  53368. Note:    the register number wraps back to zero after FFh
  53369. SeeAlso: AX=001Ch,AX=00A5h
  53370. ----------6200A5-----------------------------
  53371. INT 62 u - FGDRIVER v1.10 - "FG_SETDACS" - SET VIDEO DAC CONTENTS
  53372.     AX = 00A5h
  53373.     CX = number of DAC registers to set (0001h to 0100h)
  53374.     DX = starting DAC register number (0000h to 00FFh)
  53375.     ES:BX -> buffer containing DAC red/green/blue triples
  53376. Notes:    the register number wraps back to zero after FFh
  53377.     this call has no effect in text modes or graphics modes below 11h
  53378. SeeAlso: AX=001Bh,AX=00A4h
  53379. ----------6201-------------------------------
  53380. INT 62 - Cswitch - GIVE UP REST OF TIME-SLICE
  53381.     AH = 01h
  53382. Note:    Cswitch is a set of multitasking functions by Herb Rose
  53383. SeeAlso: AH=05h,AH=06h,INT 15/AX=1000h
  53384. ----------6202-------------------------------
  53385. INT 62 - Cswitch - WAIT FOR SEMAPHORE
  53386.     AH = 02h
  53387.     DX = semaphore number (0-63)
  53388. Return: AX = FFFFh bad semaphore number
  53389.          else  success
  53390. SeeAlso: AH=03h,AH=04h
  53391. ----------6203-------------------------------
  53392. INT 62 - Cswitch - CHECK SEMAPHORE
  53393.     AH = 03h
  53394.     DX = semaphore number (0-63)
  53395. Return: AX = FFFFh not owned
  53396.          else  owned
  53397. SeeAlso: AH=02h,AH=04h
  53398. ----------6204-------------------------------
  53399. INT 62 - Cswitch - TRIGGER SEMAPHORE
  53400.     AH = 04h
  53401.     DX = semaphore number (0-63)
  53402. Return: AX = FFFFh bad semaphore number
  53403.          else  success
  53404. SeeAlso: AH=02h,AH=03h
  53405. ----------6205-------------------------------
  53406. INT 62 - Cswitch - SLEEP
  53407.     AH = 05h
  53408.     BX = seconds to sleep
  53409. SeeAlso: AH=01h,AH=06h,AH=08h"Cswitch"
  53410. ----------6206-------------------------------
  53411. INT 62 - Cswitch - SUSPEND
  53412.     AH = 06h
  53413. SeeAlso: AH=05h,AH=08h"Cswitch"
  53414. ----------6207-------------------------------
  53415. INT 62 - Cswitch - SPAWN
  53416.     AH = 07h
  53417.     ES:BX -> function address to start executing at
  53418.     CX = priority (1-10)
  53419. Return: AX = FFFDh  no free memory control blocks
  53420.        = FFFEh  no free task control blocks
  53421.        = FFFFh  not enough memory to create new task stack
  53422.        = >0        the tcb number of the new task, indicating no error
  53423. SeeAlso: AH=0Fh,AH=10h
  53424. ----------6208-------------------------------
  53425. INT 62 - Cswitch - WAKE UP TASK
  53426.     AH = 08h
  53427.     BX = tcb identifier
  53428. SeeAlso: AH=05h,AH=06h
  53429. ----------6208--CXFFFE-----------------------
  53430. INT 62 - MS SQL Server/Sybase DBLIBRARY interface - UNINSTALL/GET PSP ADDR
  53431.     AH = 08h
  53432.     CX = FFFEh
  53433.     DX = FFFFh
  53434. Return: AX = PSP address of resident DBLIBRARY
  53435. Note:    this call does not free the memory allocated to the TSR; the calling
  53436.       code must do the deallocation.
  53437. SeeAlso: INT 62"DBLIBRARY"
  53438. ----------6209-------------------------------
  53439. INT 62 - Cswitch - SET PRIORITY
  53440.     AH = 09h
  53441.     BX = new base priority (1-10)
  53442. Note:    the lower the priority is numerically, the more often the task will run
  53443. ----------620A-------------------------------
  53444. INT 62 - Cswitch - TEST MESSAGE QUEUE
  53445.     AH = 0Ah
  53446.     DX = queue number (0-63)
  53447. Return: AX = FFFFh bad queue number
  53448.        = 0000h nothing on queue
  53449.          else  number of bytes in first message in queue
  53450. SeeAlso: AH=0Bh,AH=0Ch
  53451. ----------620B-------------------------------
  53452. INT 62 - Cswitch - SEND MESSAGE
  53453.     AH = 0Bh
  53454.     CX = number of bytes to write
  53455.     DS:SI -> buffer
  53456.     DX = queue number (0-63)
  53457. Return: AX = FFFEh triggered by something arriving, redo the call
  53458.        = FFFFh bad queue number
  53459.        = 0000h no message was on queue
  53460.          else  number of bytes in message
  53461. SeeAlso: AH=0Ah,AH=0Ch
  53462. ----------620C-------------------------------
  53463. INT 62 - Cswitch - READ MESSAGE
  53464.     AH = 0Ch
  53465.     CX = number of bytes to read
  53466.     DS:SI -> buffer
  53467.     DX = queue number (0-63)
  53468. Return: AX = FFFFh bad queue number
  53469.          else  number of bytes transferred
  53470. SeeAlso: AH=0Ah,AH=0Bh
  53471. ----------620D-------------------------------
  53472. INT 62 - Cswitch - DON'T ALLOW TASK TO BE SWAPPED OUT
  53473.     AH = 0Dh
  53474. SeeAlso: AH=0Eh
  53475. ----------620E-------------------------------
  53476. INT 62 - Cswitch - ALLOW TASK TO BE SWAPPED OUT
  53477.     AH = 0Eh
  53478. SeeAlso: AH=0Dh
  53479. ----------620F-------------------------------
  53480. INT 62 - Cswitch - LOAD AND RUN PROGRAM FROM DISK
  53481.     AH = 0Fh
  53482.     ES:BX -> command line
  53483.     CX = priority (1-10)
  53484.     DX = background flag
  53485.        = != 0000h  allows loading to EMS
  53486. Return: AX = 0000h task loader queue is full
  53487.        = 0001h  no error
  53488. SeeAlso: AH=07h,AH=10h,AH=13h
  53489. ----------6210-------------------------------
  53490. INT 62 - Cswitch - TERMINATE SPAWNED PROGRAM
  53491.     AH = 10h
  53492. SeeAlso: AH=07h,AH=0Fh
  53493. ----------6211-------------------------------
  53494. INT 62 - Cswitch - GET TCB INFORMATION
  53495.     AH = 11h
  53496.     ES:BX -> a pointer which will be set to the tcb address
  53497. Return: AX = tcb indentifier
  53498. SeeAlso: AH=12h
  53499. ----------6212-------------------------------
  53500. INT 62 - Cswitch - GET TCB ADDRESS
  53501.     AH = 12h
  53502.     ES:BX -> a pointer which will be set to the tcb table address
  53503. Return: AX = tcb indentifier
  53504. SeeAlso: AH=11h
  53505. ----------6213-------------------------------
  53506. INT 62 - Cswitch - CHECK STATUS OF PREVIOUS LOAD_TASK
  53507.     AH = 13h
  53508. Return: AX = FFFCh no Memory Control Blocks available
  53509.        = FFFDh no TCBs available
  53510.        = FFFEh insufficient memory
  53511.        = FFFFh cannot open file
  53512.        = 0000h load in progress (not done yet)
  53513.          else  tcb indentifier
  53514. SeeAlso: AH=0Fh
  53515. ----------6247-------------------------------
  53516. INT 62 - PC Tools 7 COMMUTE - ???
  53517.     AH = 47h
  53518.     AL = subfunction (00h-31h)
  53519.     ???
  53520.     CF set
  53521. Return: ???
  53522. ----------6248-------------------------------
  53523. INT 62 - PC Tools 7 COMMUTE - ???
  53524.     AH = 48h
  53525.     AL = ???
  53526.     ???
  53527.     CF set
  53528. Return: ???
  53529. ----------6249-------------------------------
  53530. INT 62 - PC Tools 7 COMMUTE - ???
  53531.     AH = 49h
  53532.     ???
  53533.     CF set
  53534. Return: ???
  53535. Note:    may be the same as AH=4Ch
  53536. ----------624A-------------------------------
  53537. INT 62 - PC Tools 7 COMMUTE - ???
  53538.     AH = 4Ah
  53539.     AL = subfunction (00h-46h)
  53540.     ???
  53541.     CF set
  53542. Return: ???
  53543. ----------624B--BX1234-----------------------
  53544. INT 62 - PC Tools 7 COMMUTE - ???
  53545.     AH = 4Bh
  53546.     BX = 1234h
  53547.     CX = 1234h
  53548.     ES = ???
  53549.     CF set
  53550. Return: ???
  53551. ----------624C-------------------------------
  53552. INT 62 - PC Tools 7 COMMUTE - ???
  53553.     AH = 4Ch
  53554.     BL = subfunction
  53555.         00h ???
  53556.         02h ???
  53557. Return: CF clear if successful
  53558.     CF set on error
  53559. ----------626262-----------------------------
  53560. INT 62 - PC Tools 7 COMMUTE - INSTALLATION CHECK
  53561.     AX = 6262h
  53562.     CF set
  53563. Return: AX = 0000h
  53564.     BX = segment of resident code's PSP
  53565. ----------63---------------------------------
  53566. INT 63 - reserved for user interrupt
  53567. ----------63---------------------------------
  53568. INT 63 - Adaptec and OMTI controllers - DRIVE 0 DATA
  53569. Notes:    this vector stores the last four bytes of the parameter table for
  53570.       hard disk 0
  53571. SeeAlso: INT 60"Adaptec",INT 61"Adaptec",INT 62"Adaptec",INT 64"Adaptec"
  53572. ----------63---------------------------------
  53573. INT 63 - Oracle SQL Protected Mode Executive - ???
  53574. ----------63---------------------------------
  53575. INT 63 - 4+Power FLOPPY CONTROLLER - ORIGINAL INT 13/40
  53576.    the "4+Power" quad floppy controller BIOS hooks INT 13 (or INT 40 if INT 13
  53577.    has been moved there) and places the old value here
  53578. ----------63---------------------------------
  53579. INT 63 - Kofax KF9X00 image manipulation card interface
  53580. ----------63---------------------------------
  53581. INT 63 - DESQview/X - SOCKET API
  53582. Notes:    parameters are passed by patching!! data field immediately following
  53583.       the entry point, as detailed below; the preferred method for calling
  53584.       the socket API is via INT 15/AX=DE2Eh
  53585.     the installation check consists of testing for the string "dvxunix"
  53586.       (yes, lowercase) at offset 9 from the interrupt handler start
  53587. SeeAlso: INT 15/AX=DE2Eh,INT BE"DESQview"
  53588.  
  53589. Format of interrupt handler entry:
  53590. Offset    Size    Description
  53591.  00h  3 BYTEs    near jump or short jump + NOP to actual interrupt handler
  53592.  03h    WORD    offset from following pointer for initial top of local stack
  53593.  05h    DWORD    pointer to argument/stack block (see INT 15/AX=DE2Eh)
  53594.  09h  7 BYTEs    signature "dvxunix"
  53595. ----------64---------------------------------
  53596. INT 64 - reserved for user interrupt
  53597. ----------64---------------------------------
  53598. INT 64 - Adaptec controllers - DRIVE 1 DATA
  53599. Notes:    this vector stores the first four bytes of the parameter table for
  53600.       hard disk 1
  53601.     these vectors are used by the following Adaptec controllers:
  53602.         ACB 2370 A/B/C, ACB 2372 A/B/C, ACB 2333 A/B, 2322B-8, 2322B-16
  53603.     these vectors are NOT used by the following Adaptec controllers:
  53604.         ACB 2310, ACB 2312, ACB 2320D, ACB 2322D
  53605. SeeAlso: INT 60"Adaptec",INT 65"Adaptec",INT 66"Adaptec",INT 67"Adaptec"
  53606. ----------64---------------------------------
  53607. INT 64 - Oracle SQL Protected Mode Executive - ???
  53608. ----------64---------------------------------
  53609. INT 64 - Novell NetWare to v2.0a - LOW-LEVEL API
  53610. Note:    equivalent to INT 7A for NetWare versions through 2.0a only; later
  53611.       versions do not use this interrupt for IPX/SPX access, instead
  53612.       getting an entry point from INT 2F/AX=7A00h
  53613. SeeAlso: INT 2F/AX=7A00h,INT 7A"Novell"
  53614. ----------64---------------------------------
  53615. INT 64 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE
  53616. SeeAlso: INT 65"DG10",INT 66"DG10"
  53617. ----------64---------------------------------
  53618. INT 64 - Extended Batch Language v3.14+
  53619.     AH = function
  53620.         00h to 5Fh chained to previous handler
  53621.         60h to 6Ch reserved, return immediately
  53622.         80h to FFh chained to previous handler
  53623.         6Dh (v4.01+) insert tone in queue
  53624.         AL = ???
  53625.         CX = frequency in Hertz
  53626.         DL = duration in clock ticks
  53627.         Return: AL = 00h if note stored
  53628.                = 01h if no room to store
  53629.         6Eh clear ??? counter/flag
  53630.         6Fh return counter/flag that AH=6Eh clears
  53631.         70h ???
  53632.         AL = ???
  53633.         71h ???
  53634.         AL = ???
  53635.         72h ???
  53636.         73h insert byte at end of keyboard buffer
  53637.         AL = byte to insert
  53638.         Return: AL = 00h if byte inserted
  53639.                = 01h if no room to store
  53640.         74h insert byte at front of keyboard buffer
  53641.         AL = byte to insert
  53642.         Return: AL = 00h if byte inserted
  53643.                = 01h if no room to store
  53644.         75h ???
  53645.         76h get keyboard "stack" status
  53646.         AL = 'K' if kbd read will read physical keyboard
  53647.              'S' if it will read EBL internal keyboard buffer
  53648.         AH = ???
  53649.         77h clear internal keyboard buffer
  53650.         78h ???
  53651.         AL = ???
  53652.         79h ???
  53653.         7Ah ???
  53654.         AL = ???
  53655.         7Bh ???
  53656.         AL = ???
  53657.         7Ch ???
  53658.         AL = ???
  53659.         7Dh ???
  53660.         AL = ???
  53661.         7Eh clear buffer for ???
  53662.         7Fh installation check
  53663.         Return: CX = version in BCD
  53664.             DI = segment of ???
  53665.             BX = segment of next program's PSP???
  53666. Notes:    Extended Batch Language is a batch-file enhancer by Seaware
  53667.     the chaining does not check whether the interrupt had been hooked
  53668.       before, so if you try to chain when the previous vector was 
  53669.       0000h:0000h, you'll be in trouble
  53670.     functions 72h and 7Ah-7Dh appear to be interfaces to the optional
  53671.       floating-point and extended function packages
  53672. ----------64---------------------------------
  53673. INT 64 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
  53674. Note:    This vector is overwritten by Pdisk to install custom harddrive types.
  53675.       It can either destroy 4 vectors and take no memory or TSR and take
  53676.       up some memory.
  53677. SeeAlso: INT 65"Pdisk"
  53678. ----------65---------------------------------
  53679. INT 65 - reserved for user interrupt
  53680. ----------65---------------------------------
  53681. INT 65 - Adaptec controllers - DRIVE 1 DATA
  53682. Note:    this vector stores the second four bytes of the parameter table for
  53683.       hard disk 1
  53684. SeeAlso: INT 64"Adaptec",INT 66"Adaptec",INT 67"Adaptec"
  53685. ----------65---------------------------------
  53686. INT 65 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE
  53687. SeeAlso: INT 64"DG10",INT 66"DG10"
  53688. ----------65---------------------------------
  53689. INT 65 - FTP Software NDIS-Packet Driver adapter - POST PROCESSING INTERRUPT
  53690. ----------65---------------------------------
  53691. INT 65 - SD.COM v6.2
  53692.    The unregistered version of SD62.COM uses the low byte of this vector to
  53693.    count the number of invocations, displaying a registration reminder each
  53694.    time after the 20th use.
  53695. ----------65---------------------------------
  53696. INT 65 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
  53697. SeeAlso: INT 64"Pdisk",INT 66"Pdisk"
  53698. ----------65---------------------------------
  53699. INT 65 - Ad Lib SOUND.COM - INTERFACE
  53700.     SI = function number (see also entries below)
  53701.         0000h Init
  53702.         0002h RelTimeStart
  53703.         0003h SetState
  53704.         0004h GetState
  53705.         0005h Flush
  53706.         0006h SetMode
  53707.         0007h GetMode
  53708.         0008h SetRelVolume
  53709.         0009h SetTempo
  53710.         000Ah SetTranspose
  53711.         000Bh GetTranspose
  53712.         000Ch SetActVoice
  53713.         000Dh GetActVoice
  53714.         000Eh PlayNoteDel
  53715.         000Fh PlayNote
  53716.         0010h SetTimbre
  53717.         0011h SetPitch
  53718.         0012h SetTickBeat
  53719.         0013h NoteOn
  53720.         0014h NoteOff
  53721.         0015h Timbre
  53722.         0016h SetPitchBend
  53723.         0017h WaveForm
  53724.     ES:BX -> arguments
  53725. Note:    the installation check consists of checking for the signature block
  53726.       immediately preceding the interrupt handler (see below)
  53727.  
  53728. Format of signature block:
  53729. Offset    Size    Description
  53730.  00h    WORD    version number
  53731.  02h 19 BYTEs    "SOUND-DRIVER-AD-LIB"
  53732.  15h    BYTE    01h
  53733.  16h    BYTE    01h
  53734.  17h    BYTE    00h
  53735. ----------65----SI0000-----------------------
  53736. INT 65 - Ad Lib SOUND.COM - INITIALIZE (RESET)
  53737.     SI = 0000h
  53738. ----------65----SI0003-----------------------
  53739. INT 65 - Ad Lib SOUND.COM - SET STATE
  53740.     SI = 0003h
  53741.     ES:BX -> WORD state = 0000h disabled 
  53742.                 = 0001h enabled
  53743. SeeAlso: SI=0004h
  53744. ----------65----SI0004-----------------------
  53745. INT 65 - Ad Lib SOUND.COM - GET STATE
  53746.     SI = 0004h
  53747. Return: AX = 0000h all done playing sounds
  53748.        = else  still playing sounds
  53749. SeeAlso: SI=0003h
  53750. ----------65----SI0006-----------------------
  53751. INT 65 - Ad Lib SOUND.COM - SET MODE
  53752.     SI = 0006h
  53753.     ES:BX -> WORD mode = 0000h melodic
  53754.                = 0001h percussive
  53755. SeeAlso: SI=0007h
  53756. ----------65----SI0007-----------------------
  53757. INT 65 - Ad Lib SOUND.COM - GET MODE
  53758.     SI = 0007h
  53759. Return: AX = 0000h melodic
  53760.        = 0001h percussive
  53761. SeeAlso: SI=0006h
  53762. ----------65----SI000C-----------------------
  53763. INT 65 - Ad Lib SOUND.COM - SET ACTIVE VOICE
  53764.     SI = 000Ch
  53765.     ES:BX -> WORD voice = 0000h to 0008h
  53766. SeeAlso: SI=000Dh
  53767. ----------65----SI000D-----------------------
  53768. INT 65 - Ad Lib SOUND.COM - GET ACTIVE VOICE
  53769.     SI = 000Dh
  53770. Return: AX = voice (0000h to 0008h)
  53771. SeeAlso: SI=000Ch
  53772. ----------66---------------------------------
  53773. INT 66 - reserved for user interrupt
  53774. ----------66---------------------------------
  53775. INT 66 - Adaptec controllers - DRIVE 1 DATA
  53776. Note:    this vector stores the third four bytes of the parameter table for
  53777.       hard disk 1
  53778. SeeAlso: INT 64"Adaptec",INT 65"Adaptec",INT 67"Adaptec"
  53779. ----------66---------------------------------
  53780. INT 66 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE
  53781. SeeAlso: INT 64"DG10"
  53782. ----------66---------------------------------
  53783. INT 66 C - Nanosoft, Inc. TurboNET - NETWORK PROCESSING ???
  53784. Notes:    hooked but not used (IRET) by both redirector and server; called from
  53785.       server's INT 28 handler
  53786.     TurboNET is a NetBIOS-based file redirector and server
  53787. SeeAlso: INT 2F/AX=8100h
  53788. ----------66---------------------------------
  53789. INT 66 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
  53790. SeeAlso: INT 64"Pdisk",INT 67"Pdisk"
  53791. ----------66---------------------------------
  53792. INT 66 - Microsoft Windows VITD.386 Virtual Interval Timer
  53793. Note:    This Windows 3.x Virtual Device Driver implements a virtual timer
  53794.       which will expire and call INT 66.  This timer can be used to
  53795.       calculate elapsed execution time etc.
  53796. ----------6601-------------------------------
  53797. INT 66 - BitFax Scheduler - SET MODE???
  53798.     AH = 01h
  53799. SeeAlso: AH=02h
  53800. ----------6602-------------------------------
  53801. INT 66 - BitFax Scheduler - SET MODE???
  53802.     AH = 02h
  53803. SeeAlso: AH=01h
  53804. ----------6603-------------------------------
  53805. INT 66 - BitFax Scheduler - SCHEDULE FAX TRANSMISSIONS
  53806.     AH = 03h
  53807.     ???
  53808. Return: ???
  53809. SeeAlso: AH=05h
  53810. ----------6604-------------------------------
  53811. INT 66 - BitFax Scheduler - GET STATUS???
  53812.     AH = 04h
  53813. Return: AX = ??? (0000h or 0001h)
  53814.     DX = BitSched version???  (for versions >= 3.00)
  53815.         9796h (ver. 3.00)
  53816.         97E6h (ver. 3.02)
  53817.         92D0h (ver. 3.04.06)
  53818.         9510h (ver. 3.06.02)
  53819. SeeAlso: AH=06h,AX=3345h,INT 2F/AX=8000h"FaxBIOS"
  53820. ----------6605-------------------------------
  53821. INT 66 - BitFax Scheduler - CONVERT FILE AND SEND FAX
  53822.     AH = 05h
  53823.     BX:CX -> command block (see below)
  53824.     ???
  53825. Return: ???
  53826. SeeAlso: AH=03h
  53827.  
  53828. Format of command block:
  53829. Offset    Size    Description
  53830.  00h 18 BYTEs    configuration bytes???
  53831.  12h    BYTEs    ASCIZ temporary file name to place converted fax
  53832.  52h    BYTEs    ASCIZ directory containing BitFax executables
  53833.  92h    BYTEs    ASCIZ telephone number
  53834.  C2h    BYTE    00h don't send cover page
  53835.         01h send cover page
  53836.  C3h 15 BYTEs    configuration bytes???
  53837.  E2h    BYTEs    ASCIZ path of BITFAX.TRA file (containing additional
  53838.         configuration information???)
  53839. 122h    BYTEs    configuration bytes???
  53840. 12Ch    BYTE    00h don't send cover page
  53841.         01h send cover page
  53842. 12Dh  7 BYTEs    configuration bytes???
  53843. 134h    BYTEs    ASCIZ path of file to send
  53844. 174h    BYTEs    more configuration bytes???
  53845.     ???
  53846. ----------6606-------------------------------
  53847. INT 66 - BitFax Scheduler - SET MODE???
  53848.     AH = 06h
  53849. Return: DX = BitSched version??? (same as AH=04h)
  53850. SeeAlso: AH=04h
  53851. ----------660688-----------------------------
  53852. INT 66 - John W. Ratcliff (The IBM Digitized Sound Package)
  53853.     AX = 0688h
  53854.     ???
  53855. Return: ???
  53856. SeeAlso: AX=0689h
  53857. ----------660689-----------------------------
  53858. INT 66 - John W. Ratcliff (The IBM Digitized Sound Package)
  53859.     AX = 0689h
  53860.     ???
  53861. Return: ???
  53862. SeeAlso: AX=0688h
  53863. ----------663345-----------------------------
  53864. INT 66 - BitFax Scheduler - REMOVE TSR FROM MEMORY
  53865.     AX = 3345h
  53866. Return: AX = FFFFh error removing TSR
  53867. Note:    the installation check consists of checking for the signature
  53868.       "BitFax Scheduler" beginning two bytes past the interrupt handler
  53869. SeeAlso: AH=04h,INT 2F/AH=2Ah,INT 2F/AX=CB00h
  53870. ----------66FFFBBXFFFB-----------------------
  53871. INT 66 - MicroHelp Stay-Res Plus - ???
  53872.     AX = FFFBh
  53873.     BX = FFFBh
  53874.     ???
  53875. Return: ???
  53876. SeeAlso: AX=FFFEh,INT 2D"AMIS"
  53877. ----------66FFFEBXFFFE-----------------------
  53878. INT 66 - MicroHelp Stay-Res/Stay-Res Plus - UNINSTALL
  53879.     AX = FFFEh
  53880.     BX = FFFEh
  53881. Return: only if unsuccessful
  53882. Notes:    installation check is for the interrupt handler to begin with the bytes
  53883.       FBh 9Ch or 9Ch FAh, and the program name (not case-sensitive) to
  53884.       appear at offset 0005h (older versions) or the offset returned by
  53885.       AX=FFFFh/BX=FFF0h in the interrupt handler segment.
  53886.     Programs which use Stay-Res include ThesPlus (program name "THESPLUS")
  53887.       and Personal Calendar (program name "CAL") by Paul Mun~oz-Colman.
  53888. SeeAlso: AX=FFFBh,AX=FFFFh,INT 2D"AMIS"
  53889. ----------66FFFFBXFFF0-----------------------
  53890. INT 66 - MicroHelp Stay-Res Plus - FIND PROGRAM NAME
  53891.     AX = FFFFh
  53892.     BX = FFF0h
  53893. Return: DI = offset of program name in interrupt handler segment
  53894. SeeAlso: AX=FFFBh,AX=FFFEh,INT 2D"AMIS"
  53895. ----------67---------------------------------
  53896. INT 67 - Adaptec controllers - DRIVE 1 DATA
  53897. Note:    this vector stores the last four bytes of the parameter table for
  53898.       hard disk 1
  53899. SeeAlso: INT 64"Adaptec",INT 65"Adaptec",INT 66"Adaptec"
  53900. ----------67---------------------------------
  53901. INT 67 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information
  53902. SeeAlso: INT 64"Pdisk",INT 66"Pdisk"
  53903. ----------67---------------------------------
  53904. INT 67 - Sangoma CCPOP 3270 resident module
  53905. SeeAlso: INT 61"Sangoma",INT 68"Sangoma"
  53906. ----------67---------------------------------
  53907. INT 67 - CUCKOO.COM - INSTALLATION CHECK
  53908. Notes:    this is not a vector; when loaded for the first time, CUCKOO.COM uses
  53909.       the last unused (0000h:0000h) vector in the range 60h-67h to store
  53910.       the signature value 434Ch:4F4Bh ('CLOK')
  53911.     CUCKOO is a resident on-screen clock with optional hourly chime or
  53912.       cuckoo by an unknown author with revisions by Thomas A. Lundin
  53913. ----------6700-------------------------------
  53914. INT 67 - PC-NET, Alloy NTNX - LOCK SEMAPHORE AND WAIT
  53915.     AH = 00h
  53916.     DS:DX -> ASCIZ semaphore name (max 64 bytes)
  53917. Return: AL = status
  53918.         00h successful
  53919.         01h invalid function
  53920.         02h semaphore already locked
  53921.         03h unable to lock semaphore
  53922.         04h semaphore space exhausted
  53923.     AH = semaphore owner if status=02h
  53924. SeeAlso: AH=01h,AH=02h"PC-NET",INT 7F/AH=00h
  53925. ----------6701-------------------------------
  53926. INT 67 - PC-NET, Alloy NTNX - LOCK SEMAPHORE
  53927.     AH = 01h
  53928.     DS:DX -> ASCIZ semaphore name (max 64 bytes)
  53929. Return: AL = status (see AH=00h)
  53930.     AH = semaphore owner if status=02h
  53931. SeeAlso: AH=00h,AH=02h"PC-NET",INT 7F/AH=01h"Alloy"
  53932. ----------6702-------------------------------
  53933. INT 67 - PC-NET, Alloy NTNX - UNLOCK SEMAPHORE
  53934.     AH = 02h
  53935.     DS:DX -> ASCIZ semaphore name (max 64 bytes)
  53936. Return: AL = status (see AH=00h)
  53937.     AH = semaphore owner if status=02h
  53938. SeeAlso: AH=00h,AH=01h"PC-NET",INT 7F/AH=02h
  53939. ----------673F--CX5145-----------------------
  53940. INT 67 U - QEMM-386 v4.23+ - INSTALLATION CHECK
  53941.     AH = 3Fh
  53942.     CX = 5145h ("QE")
  53943.     DX = 4D4Dh ("MM")
  53944. Return: AH = 00h if installed
  53945.         ES:DI -> QEMM API entry point
  53946. Notes:    if no other program has hooked INT 67, an alternate installation
  53947.       check is to test for the string
  53948.       "QUARTERDECK EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  53949.       handler's segment; the word at offset 12h contains the offset in
  53950.       the handler's segment of the API entry point
  53951.     MICEMM (Micronics Expanded Memory Manager) versions 2.0C and 4D support
  53952.       the alternate QEMM installation check and entry point functions 00h,
  53953.       02h, and 03h; version 4D only provides the signature string if the
  53954.       commandline argument "DV" is provided
  53955.     386MAX v6.01 responds to this call, but DESQview 2.42 does not
  53956.       recognize the returned entry point as providing QEMM's capabilities
  53957.       because a) only functions 0Ch (different from QEMM 0Ch) and
  53958.             1000h-1009h are supported,
  53959.           b) status is returned as for EMS functions, not QEMM funcs
  53960.           c) the protected-mode entry point returned by function 1000h
  53961.             only supports functions    0Ch, 1004h, 1005h, and 100Ah
  53962.     the string check mentioned above is not supported by 386MAX
  53963. SeeAlso: AH=DDh,AX=5BF0h,AX=FFA5h,INT 15/AX=11DEh,INT 21/AX=4402h"QEMM"
  53964. SeeAlso: INT 21/AX=4402h"386MAX",INT 2F/AX=D201h/BX=5145h
  53965.  
  53966. Call QEMM entry point with:
  53967.     AH = 00h get QEMM state
  53968.         Return: CF clear
  53969.             AL = QEMM state
  53970.                 bit 0 set if QEMM turned OFF
  53971.                 bit 1 set if in "Auto" mode
  53972.     AH = 01h set QEMM state
  53973.         AL = new state
  53974.             bit 0 set: place QEMM in OFF state
  53975.         Return: CF clear if successful
  53976.             CF set on error
  53977.     AH = 02h get ???
  53978.         Return: CF clear
  53979.             AX = segment of ??? data structure
  53980.             Data Structure
  53981.             Offset    Size    Description
  53982.              00h    DWORD    page table entry for ???
  53983.                 ???
  53984.     AH = 03h get QEMM version
  53985.         Return: CF clear
  53986.             AX = BX = version in BCD
  53987.         Notes:    the official docs only state that the version is
  53988.               returned in BX
  53989.             MICEMM returns AX=0001h, BX unchanged
  53990.     AH = 04h allocate 4K page and set AUTO/ON mode
  53991.         Return: CF clear if successful
  53992.                 DX = page number of a 4K page
  53993.             CF set if unable to allocate page
  53994.         Note:    QEMM mode unchanged if not AUTO/OFF
  53995.     AH = 05h free 4K page and turn QEMM off
  53996.         DX = page number returned by function 04h
  53997.         Return: CF clear
  53998.         Note:    QEMM mode unchanged if not AUTO/ON
  53999.     AH = 06h make new mapping context???
  54000.         DX = page number of 4K page to hold page table
  54001.         Return: CF clear
  54002.         Note:    copies page table into given page and then sets ???
  54003.               page table entry to point at copy
  54004.     AH = 07h get mapping context
  54005.         Return: CF clear
  54006.             DX = page number of page table for current mapping
  54007.                 context
  54008.     AH = 08h set mapping context???
  54009.         DX = linear page number of page table
  54010.         Return: CF clear
  54011.     AH = 09h get linear page number for page table entry
  54012.         CX = page table index
  54013.         Return: CF clear
  54014.             DX = linear page number
  54015.     AH = 0Ah set linear page number for page table entry
  54016.         CX = page table index
  54017.         DX = linear page number
  54018.         Return: CF clear
  54019.     AH = 0Bh map 4K pages
  54020.         BX = number of pages
  54021.         CX = first page number (must be 0100h to allocate HMA)
  54022.         DX = EMS handle (memory belonging to EMS handle will be mapped
  54023.             into the address space beginning with the first page
  54024.             allocated to the handle)
  54025.         Return: AH = 00h
  54026.     AH = 0Ch get available memory
  54027.         Return: CF clear
  54028.             BX = 0001h
  54029.             CX = total 4K pages???
  54030.             DX = number of 4K pages free
  54031.     AH = 0Dh ??? (related to callbacks)
  54032.         AL = 00h/01h/02h ???
  54033.         Return: CF clear
  54034.     AH = 0Eh set ??? callbacks
  54035.         DS:BX -> FAR routine for ???
  54036.         ES:DX -> FAR routine for ???
  54037.         Return: CF clear
  54038.         Note:    DS:BX callback should return BX=???; ES:DX is called
  54039.               with BX=???, and should set the ??? from which the
  54040.               other handler read the value of BX.  BH and BL
  54041.               appear to be separate values.
  54042.     AH = 0Fh unmap 4K pages
  54043.         CX = first page number
  54044.         DX = number of pages
  54045.         Return: CF clear
  54046.             AL = 00h/01h if ???
  54047.         Note:    if CX=0100h and DX=0010h, the HMA is remapped to
  54048.               simulate a disabled A20
  54049.     AX = 1000h get protected-mode interface
  54050.         DS:SI -> 16-byte buffer for two GDT entries
  54051.         ES:DI -> buffer for 4K page table
  54052.         Return: CF clear
  54053.             EAX = offset of protected-mode API entry point
  54054.             DS:SI buffer filled with two GDT descriptors
  54055.                 first is QEMM code segment, second is data???
  54056.             ES:DI buffer filled with 4K page table
  54057.             DI points to first unused page table entry
  54058.         SeeAlso: INT 67/AX=DE01h
  54059.     AX = 1001h get CPU debug registers
  54060.         ES:DI -> buffer for debug registers (8 DWORDs)
  54061.         Return: CF clear
  54062.             BL = INT01 handling (see function 1002h)
  54063.             ES:DI buffer filled
  54064.     AX = 1002h set CPU debug registers
  54065.         BL = INT01 handling
  54066.             00h     reflect all debugging exceptions as V86-mode INT 01's
  54067.             else convert debugging exceptions other than single-step
  54068.                into V86-mode INT 03's, single-step to INT 01's
  54069.         ES:DI -> buffer containing debug registers (8 DWORDs)
  54070.         Return: CF clear
  54071.         Notes:    identical to INT 67/AX=DE09h if BL=01h
  54072.             the INT01 handling flag is set to 01h by the general-
  54073.               protection violation handler for certain privileged
  54074.               instructions
  54075.     AX = 1003h get machine status word CR0
  54076.         Return: CF clear
  54077.             EAX = contents of CR0
  54078.         SeeAlso: INT 67/AX=DE07h
  54079.     AX = 1004h allocate a 4K page
  54080.         Return: CF clear if successful
  54081.                 EDX = linear address of allocated page
  54082.             CF set on error
  54083.         SeeAlso: INT 67/AX=DE04h
  54084.     AX = 1005h free 4K page
  54085.         EDX = linear address of page to free
  54086.         Return: CF clear
  54087.         SeeAlso: INT 67/AX=DE05h
  54088.     AX = 1006h NOP
  54089.         Return: CF set
  54090.     AX = 1007h get maximum physical memory address
  54091.         Return: CF clear
  54092.             EDX = physical address of highest 4K memory page
  54093.         SeeAlso: INT 67/AX=DE02h
  54094.     AX = 1008h get physical address of page in first megabyte
  54095.         CX = page number (linear address shifted right 12 bits)
  54096.         Return: CF clear
  54097.             EDX = linear address of page
  54098.         SeeAlso: function 1F00h
  54099.     AX = 1009h switch to protected mode
  54100.         ESI = linear address in first megabyte of system reg values
  54101.             (see INT 67/AX=DE0Ch)
  54102.         interrupts disabled
  54103.         Return: interrupts disabled
  54104.             GDTR, IDTR, LDTR, TR loaded
  54105.             SS:ESP must have at least 16 bytes space, and the
  54106.                 entry point is required to set up a new stack
  54107.                 before enabling interrupts
  54108.             EAX, ESI, DS, ES, FS, GS destroyed
  54109.     AX = 100Ah switch back to virtual-86 mode
  54110.         DS = selector for data segment from function 1000h
  54111.         SS:ESP in first megabyte of linear memory
  54112.         interrupts disabled
  54113.         STACK:    QWORD  return address from FAR call to 32-bit segment
  54114.             DWORD  EIP
  54115.             DWORD  CS
  54116.             DWORD  reserved for EFLAGS
  54117.             DWORD  ESP
  54118.             DWORD  SS
  54119.             DWORD  ES
  54120.             DWORD  DS
  54121.             DWORD  FS
  54122.             DWORD  GS
  54123.         will switch to virtual86 mode with interrupts disabled, all
  54124.           segment registers loaded, and EAX destroyed.
  54125.     AH = 11h get memory type map
  54126.         AL = zero/nonzero ??? (set by QEMM.COM but apparently ignored
  54127.             by QEMM 6.00)
  54128.         ES:DI -> 256-byte buffer for memory types
  54129.         Return: CF clear
  54130.             BL = ???
  54131.             ES:DI buffer filled
  54132.         Note:    each byte of the buffer corresponds to a 4K page, and
  54133.               contains the type of that page: 00h = mappable,
  54134.               02h = mapped ROM, 03h = high RAM, 04h = excluded,
  54135.               05h = video, 06h = ROM, 07h = adapter ROM,
  54136.               08h = split ROM, 09h = page frame, 0Ah = RAMmable,
  54137.               0Bh = conventional
  54138.     AH = 12h get HIRAM chain
  54139.         Return: CF clear
  54140.             BX = segment of first MCB in high memory
  54141.                 0000h if no high memory
  54142.     AX = 1300h VIDRAMEGA???
  54143.         BL = 00h copy ???
  54144.              nonzero copy ??? (reverse)
  54145.         Return: CF clear
  54146.             AL = 00h if all pages clean
  54147.                = 01h if any page dirty
  54148.     AX = 1301h check if ???
  54149.         DX:DI = start address of range to check ???
  54150.         CX = length of range
  54151.         Return: CF clear
  54152.             CX = ??? (0000h or 1000h)
  54153.     AX = 1302h ???
  54154.         BL = ???
  54155.         BH = ???
  54156.         CX = ???
  54157.         SI = offset of ???
  54158.         DI = offset of ???
  54159.         ???
  54160.         Return: CF clear
  54161.             ???
  54162.         Note:    disables certain interrupts at the two 8259 PICs during
  54163.               execution; also modifies CRT controller during
  54164.               execution under certain circumstances
  54165.     AX = 1303h ??? EMS allocation
  54166.         BX = number of pages of EMS to allocate
  54167.         ???
  54168.         Return: CF clear if successful
  54169.             CF set on error
  54170.             ???
  54171.     AX = 1304h EMS deallocation
  54172.         DX = EMS handle
  54173.         Return: CF clear
  54174.     AX = 1305h ???
  54175.         CX = ???
  54176.         Return: CF clear
  54177.         Note:    disables certain interrupts at the two 8259 PICs during
  54178.               execution (see AX=130Ch)
  54179.     AX = 1306h set DESQview critical section counter address
  54180.         ES:BX -> WORD DESQview critical section counter or 0000h:0000h
  54181.         Return: CF clear
  54182.         Note:    also sets pointer in low-memory part of QEMM to current
  54183.               value of INT 15 if ES:BX not 0000h:0000h
  54184.     AX = 1307h ???
  54185.         Return: CF clear
  54186.         Note:    disables certain interrupts at the two 8259 PICs during
  54187.               execution (see AX=130Ch)
  54188.     AX = 1308h ???
  54189.         BL = ??? (zero/nonzero)
  54190.         Return: CF clear
  54191.     AX = 1309h Hercules mode-change support
  54192.         ES:BX -> new address for Hercules mode-change callback
  54193.         Return: CF clear
  54194.         Note:    the callback function is called whenever the CRTC mode
  54195.               register is written, with AL set to the value written
  54196.     AX = 130Ah virtualize EGA/VGA I/O ports 03C8h/03C9h???
  54197.         CX:DX -> buffer for storing CRTC register contents???
  54198.             or 0000h:0000h to disable
  54199.         Return: CF clear
  54200.     AX = 130Bh ???
  54201.         BL = ???
  54202.         Return: CF clear
  54203.             ???
  54204.     AX = 130Ch set interrupts to mask
  54205.         BX = interrupts to mask out during AX=1302h,AX=1307h,AX=1308h,
  54206.             AX=130Dh,AX=1310h (BL = master PIC, BH = slave PIC)
  54207.         Return: CF clear
  54208.     AX = 130Dh ???
  54209.         ???
  54210.         Return: CF clear
  54211.         Note:    disables certain interrupts at the two 8259 PICs during
  54212.               execution (see AX=130Ch)
  54213.     AX = 130Eh ??? (modifies CRT controller setup)
  54214.         ???
  54215.         Return: CF clear
  54216.     AX = 130Fh reset ???
  54217.         Return: CF clear
  54218.     AX = 1310h ???
  54219.         ???
  54220.         Return: CF clear
  54221.         Note:    disables certain interrupts at the two 8259 PICs during
  54222.               execution (see AX=130Ch)
  54223.     AX = 1311h set ???
  54224.         BL = ???
  54225.         Return: CF clear
  54226.     AX = 1312h (v6.02) NOP???
  54227.         Note:    called by DV 2.42, but appears to be a NOP in QEMM 6.02
  54228.     AX = 1400h ???
  54229.         ES:DI -> ??? data structure (at least 24 bytes)
  54230.         BL = ???
  54231.         Return: AX = ???
  54232.         Data structure
  54233.         Offset    Size    Description
  54234.          00h    WORD    ???
  54235.          02h    DWORD    far pointer to ???
  54236.          06h    DWORD    far pointer to ??? pointer array (see below)
  54237.          0Ah    DWORD    far pointer to ???
  54238.          0Eh    DWORD    ???
  54239.          12h    WORD    segment of ???
  54240.          14h    DWORD    far pointer to ???
  54241.         Pointer array
  54242.         Offset    Size    Description
  54243.          00h    WORD    number of pointers to follow
  54244.          02h  N DWORDs    far pointers to ???
  54245.         Note: QEMM converts the pointers into linear addresses in place
  54246.     AX = 1401h ???
  54247.         Return: CF clear
  54248.             ???
  54249.     AX = 1402h ???
  54250.         BL = function
  54251.             00h NOP
  54252.             01h ???
  54253.             02h ???
  54254.             other ???
  54255.         ES:DI -> ???
  54256.         Return: CF clear
  54257.             ???
  54258.         Data structure
  54259.         Offset    Size    Description
  54260.          00h    WORD    segment of ??? (X, word at X:0136h set to X)
  54261.          02h    WORD    segment of ??? (word at X:0124h set to this)
  54262.          04h    WORD    number of paragraphs of ???
  54263.          06h  3 WORDs    ??? (copied to X:0000h)
  54264.          0Ch    WORD    ???
  54265.     AX = 1403h add ??? to list and ??? (execute func 1406h)
  54266.         ES:DI -> ??? structure added to end of ??? list
  54267.             (at least 31 bytes, DWORD at offset 06h used for
  54268.              storing pointer to next struc, WORD at offset 00h
  54269.              seems to be a key or index)
  54270.         Return: CF clear
  54271.     AX = 1404h NOP
  54272.     AX = 1405h remove ??? from ??? list
  54273.         BX = key???
  54274.         Return: CF clear
  54275.     AX = 1406h ???
  54276.         ???
  54277.         Return: CF clear
  54278.             ???
  54279.     AX = 1407h ???
  54280.         ???
  54281.         Return: CF clear
  54282.             ???
  54283.     AX = 1408h ???
  54284.         ???
  54285.         Return: CF clear
  54286.             ???
  54287.     AX = 1409h ???
  54288.         ???
  54289.         Return: CF clear
  54290.             ???
  54291.     AX = 140Ah ???
  54292.         BX = ???
  54293.         Return: CF clear
  54294.             ???
  54295.     AX = 140Bh ???
  54296.         BX = ???
  54297.         Return: CF clear
  54298.             SI = segment of 256-byte buffer???
  54299.     AH = 15h ???
  54300.         ES:BX -> ??? or 0000h:0000h
  54301.         Return: CF clear
  54302.      ---QEMM v5.00+ ---
  54303.     AX = 1600h get memory access status
  54304.         ES:DI -> 256-byte buffer
  54305.         Return: ES:DI buffer filled
  54306.         Note:    each byte of the buffer indicates the status of a 4K
  54307.               page (bit 0 set if read, bit 1 set if written)
  54308.     AX = 1601h set memory access status
  54309.         ES:DI -> 256-byte buffer containing access statuses (see above)
  54310.     AH = 17h get memory usage statistics
  54311.         ES:DI -> 81-byte buffer for memory statistics (see below)
  54312.         Return: CF clear
  54313.      ---QEMM v5.11+ ---
  54314.     AH = 18h check whether conventional memory mapped into address range
  54315.         ES:BX = starting address
  54316.         CX = number of 4K pages
  54317.         Return: CF clear
  54318.             AL = 00h one or more pages is remapped
  54319.                  01h all pages in range are conventional memory
  54320.                 (physical address == virtual address)
  54321.     AH = 19h NOP
  54322.         Return: CF set
  54323.     AH = 1Ah I/O port access
  54324.         AL = subfunction
  54325.             00h get byte from I/O port
  54326.             Return: BL = port value
  54327.             01h send byte to I/O port
  54328.             BL = value to send
  54329.             02h send byte to I/O port, get byte from following port
  54330.             BH = value to send
  54331.             Return: BL = value read
  54332.             03h send bytes to two consecutive I/O ports
  54333.             BH = value for first I/O port (DX)
  54334.             BL = value for second I/O port (DX+1)
  54335.         DX = port number
  54336.         Return: CF clear
  54337.     AH = 1Bh MS Windows 3 support
  54338.         AL = subfunction
  54339.             00h get ???
  54340.             ES:DI -> buffer for ??? data structure
  54341.             Return: CF set on error
  54342.                 CF clear if successful
  54343.             Data structure:
  54344.             Offset    Size    Description
  54345.              00h    DWORD    pointer to ???
  54346.              04h    BYTE    ??? (v6.00 sets to 01h)
  54347.              05h    BYTE    ??? (v6.00 sets to 00h or 0Bh)
  54348.             SeeAlso: INT 21/AX=4402h"QEMM"
  54349.             01h ???
  54350.             Return: CF set on error
  54351.                 CF clear if successful
  54352.             02h ???
  54353.             Return: CF set on error
  54354.                 CF clear if successful
  54355.             03h MS Windows initializing
  54356.             CX = segment from which Windows init broadcast made???
  54357.             DL = Windows startup flags???
  54358.             DI = Windows version number (major in upper byte)
  54359.             Return: ???
  54360.             SeeAlso: INT 2F/AX=1605h
  54361.             04h MS Windows terminating
  54362.             Return: CF clear
  54363.             05h determine whether program is driver???
  54364.             DS:DX -> ASCIZ filename
  54365.             Return: CF clear
  54366.                 AL = 01h if string ends in ".DRV"
  54367.                    = FFh if string ends in "GDI.EXE"
  54368.                    = 00h otherwise
  54369.             06h ???
  54370.             CX = length of data pointed at by DS:DX
  54371.             DS:DX -> ???
  54372.             Return: CF clear
  54373.             07h BUG: QEMM 6.00-6.03 accept this and branch randomly
  54374.             else Return: CF set
  54375.     AH = 1Ch protected-mode hardware interrupt handlers ???
  54376.         AL = subfunction
  54377.             00h restore??? IRQ0-7 handlers
  54378.             01h set??? IRQ0-7 handlers
  54379.             ES:DI -> 8 DWORDs containing ???
  54380.             02h restore??? IRQ8-15 handlers
  54381.             03h set??? IRQ8-15 handlers
  54382.             ES:DI -> 8 DWORDs containing ???
  54383.         BUG: although the jump table only contains four entries,
  54384.             QEMM 6.00 will attempt to use it for any value of
  54385.             AL between 00h and 2Ah, thus branching unpredictably
  54386.             for AL=04h-2Ah
  54387.      ---QEMM v6.00+ ---
  54388.     AH = 1Dh Stealth interrupts
  54389.         AL = subfunction
  54390.             00h switch to pre-Stealth interrupt vector table
  54391.             Note:    also switches VGA Save table pointer
  54392.                   (0040h:00A8h)    and overwrites the vectors
  54393.                   currently assigned for use by the two
  54394.                   interrupt controllers (see INT 67/AX=DE0Ah)
  54395.                   with the vectors for INT 08-0F and 70-77 (to
  54396.                   avoid crashing the system).
  54397.             01h restore user interrupt vector table
  54398.             Notes:    interrupts should be disabled around the
  54399.                   AX=1D00h and AX=1D01h calls because QEMM does
  54400.                   not modify the memory maps to map in ROM, so
  54401.                   an interrupt could be disastrous
  54402.                 clears any pending IRQ7 at end of function
  54403.             else
  54404.             Return: CF set
  54405.     AH = 1Eh Stealth information
  54406.         AL = subfunction
  54407.             00h get Stealth configuration
  54408.             Return: BL = flags
  54409.                     bit 0: conventional memory sorted
  54410.                     bit 1: conventional memory filled
  54411.                     bit 2: ???
  54412.                     bit 3: ???
  54413.                     bit 4: expanded memory is in use
  54414.                     bit 5: ???
  54415.                 BH = ??? (always 00h for v6.00)
  54416.                 CL = stealth type (00h none,46h Frame,4Dh Map)
  54417.                 CH = ??? (zero/nonzero important)
  54418.                 DX = ??? (always 0000h for v6.00)
  54419.                 SI = ??? (always 0000h for v6.00)
  54420.                 DI = ??? (always 0000h for v6.00)
  54421.             01h get number of Stealth'ed ROMs
  54422.             Return: CF clear
  54423.                 BX = number of Stealth'ed ROMs
  54424.             02h get Stealth'ed ROM info
  54425.             ES:DI -> buffer for Stealth ROM info (see below)
  54426.             Return: CF clear
  54427.                 BX = number of Stealth'ed ROMs
  54428.                 ES:DI buffer filled
  54429.             else
  54430.             Return: CF set
  54431.     AH = 1Fh page table manipulation
  54432.         AL = subfunction
  54433.             00h get page table entry
  54434.             CX = page number
  54435.             Return: EDX = page table entry
  54436.                 CF clear
  54437.             01h set page table entry
  54438.             CX = page number
  54439.             EDX = page table entry
  54440.             Return: CF clear
  54441.             SeeAlso: function 1008h
  54442.             else
  54443.             Return: CF set
  54444.     AH = 20h asynchronous disk access support???
  54445.         AL = subfunction
  54446.             00h get ???
  54447.             Return: CF clear
  54448.                 BL = flags
  54449.                     bit 7: ??? (set if Stealth:F or :M active)
  54450.                     bit 0: ???
  54451.             01h set ???
  54452.             BL = ??? (bit 0 only)
  54453.             Return: CF clear
  54454.             else
  54455.             Return: CF set
  54456.     AH = 21h Stealth support
  54457.         AL = subfunction
  54458.             00h copy data from Stealthed address space
  54459.             DS:SI -> start address of hidden memory to copy
  54460.             ES:DI -> buffer for copied data
  54461.             ECX = number of bytes to copy
  54462.             Return: CF clear if successful
  54463.                 CF set on error (DS:SI < C000h:0000h or
  54464.                          DS:SI + ECX > 1M)
  54465.             else
  54466.             Return: CF set
  54467.     ---QEMM v6.03 only---
  54468.     AH = 22h DESQview/X support
  54469.         AL = subfunction
  54470.             00h get ???
  54471.             Return: CF clear
  54472.                 ES:DI -> ???
  54473.             01h set ???
  54474.             ES:DI -> ??? or 0000h:0000h
  54475.             Return: CF clear if successful
  54476.                 CF set on error
  54477.     other
  54478.         Return: CF set
  54479.  
  54480. Format of QEMM 6.0 memory statistics:
  54481. Offset    Size    Description
  54482.  00h    BYTE    01h if Shadow RAM found, 00h otherwise
  54483.  01h    DWORD    initial conventional memory in bytes
  54484.  05h    DWORD    initial extended memory in bytes
  54485.  09h    DWORD    initial expanded memory in bytes
  54486.  0Dh    DWORD    initial "top" or "shadow" memory in bytes
  54487.  11h    DWORD    Unavailable conventional memory in bytes
  54488.  15h    DWORD    Unavailable extended memory in bytes
  54489.  19h    DWORD    Unavailable expanded memory in bytes
  54490.  1Dh    DWORD    Unavailable "top" or "shadow" memory in bytes
  54491.         Add to offset 49h for Total unavailable top/shadow.
  54492.  21h    DWORD    QEMM code size in bytes
  54493.  25h    DWORD    QEMM data size in bytes
  54494.  29h    DWORD    bytes used for TASKS=
  54495.  2Dh    DWORD    DMA buffer size
  54496.  31h    DWORD    bytes used for MAPS=
  54497.  35h    DWORD    bytes of high RAM
  54498.  39h    DWORD    bytes used by mapped ROMs
  54499.  3Dh    DWORD    bytes of conventional memory provided by QEMM
  54500.  41h    DWORD    bytes of extended memory NOT converted by QEMM (EXT=xxx)
  54501.  45h    DWORD    bytes of EMS/XMS pool memory provided by QEMM
  54502.  49h    DWORD    Unavailable "top" or "shadow" memory in bytes
  54503.         Add to offset 1Dh for Total unavailable top/shadow.
  54504.  4Dh    DWORD    conventional memory overhead in bytes
  54505.         (set to 0 by QEMM.COM prior to call)
  54506.  
  54507. Format of Stealth ROM info [array]:
  54508. Offset    Size    Description
  54509.  00h    WORD    starting segment of ROM
  54510.  02h    WORD    length of ROM in paragraphs
  54511. ----------6740-------------------------------
  54512. INT 67 - LIM EMS - GET MANAGER STATUS
  54513.     AH = 40h
  54514. Return: AH = status
  54515.         00h successful
  54516.         80h internal error
  54517.         81h hardware malfunction
  54518.         84h undefined function requested by application
  54519. Note:    this call can be used only after establishing that the EMS driver is in
  54520.       fact present
  54521. SeeAlso: AH=3Fh,AX=FFA5h
  54522. ----------6741-------------------------------
  54523. INT 67 - LIM EMS - GET PAGE FRAME SEGMENT
  54524.     AH = 41h
  54525. Return: AH = 00h function successful
  54526.         BX = segment of page frame
  54527.     AH = error code (see AH=40h)
  54528. SeeAlso: AH=58h,AH=68h
  54529. ----------6742-------------------------------
  54530. INT 67 - LIM EMS - GET NUMBER OF PAGES
  54531.     AH = 42h
  54532. Return: AH = 00h function successful
  54533.         BX = number of unallocated pages
  54534.         DX = total number of pages
  54535.     AH = error code (see AH=40h)
  54536. SeeAlso: INT 2F/AX=2702h
  54537. ----------6743-------------------------------
  54538. INT 67 - LIM EMS - GET HANDLE AND ALLOCATE MEMORY
  54539.     AH = 43h
  54540.     BX = number of logical pages to allocate
  54541. Return: AH = status
  54542.         00h function successful
  54543.         DX = handle
  54544.         80h internal error
  54545.         81h hardware malfunction
  54546.         84h undefined function requested
  54547.         85h no more handles available
  54548.         87h more pages requested than physically exist
  54549.         88h more pages requested than currently available
  54550.         89h zero pages requested
  54551. SeeAlso: AH=45h
  54552. ----------6744-------------------------------
  54553. INT 67 - LIM EMS - MAP MEMORY
  54554.     AH = 44h
  54555.     AL = physical page number (0-3)
  54556.     BX = logical page number
  54557.     DX = handle
  54558. Return: AH = status
  54559.         00h function successful
  54560.         80h internal error
  54561.         81h hardware malfunction
  54562.         83h invalid handle
  54563.         84h undefined function requested
  54564.         8Ah invalid logical page number
  54565.         8Bh illegal physical-page number
  54566. SeeAlso: AH=69h
  54567. ----------6745-------------------------------
  54568. INT 67 - LIM EMS - RELEASE HANDLE AND MEMORY
  54569.     AH = 45h
  54570.     DX = EMM handle
  54571. Return: AH = status
  54572.         00h successful
  54573.         80h internal error
  54574.         81h hardware malfunction
  54575.         83h invalid handle
  54576.         84h undefined function requested
  54577.         86h error in save or restore of mapping context
  54578. SeeAlso: AH=43h
  54579. ----------6746-------------------------------
  54580. INT 67 - LIM EMS - GET EMM VERSION
  54581.     AH = 46h
  54582. Return: AH = status
  54583.         00h successful
  54584.         AL = EMM version number
  54585.         80h internal error
  54586.         81h hardware malfunction
  54587.         84h undefined function requested
  54588. ----------6747-------------------------------
  54589. INT 67 - LIM EMS - SAVE MAPPING CONTEXT
  54590.     AH = 47h
  54591.     DX = handle
  54592. Return: AH = status
  54593.         00h successful
  54594.         80h internal error
  54595.         81h hardware malfunction
  54596.         83h invalid handle
  54597.         84h undefined function requested
  54598.         8Ch page-mapping hardware state save area is full
  54599.         8Dh save of mapping context failed
  54600. SeeAlso: AH=48h
  54601. ----------6748-------------------------------
  54602. INT 67 - LIM EMS - RESTORE MAPPING CONTEXT
  54603.     AH = 48h
  54604.     DX = handle
  54605. Return: AH = status
  54606.         00h successful
  54607.         80h internal error
  54608.         81h hardware malfunction
  54609.         83h invalid handle
  54610.         84h undefined function requested
  54611.         8Eh restore of mapping context failed
  54612. SeeAlso: AH=47h
  54613. ----------6749-------------------------------
  54614. INT 67 - LIM EMS - reserved - GET I/O PORT ADDRESSES
  54615.     AH = 49h
  54616. Note:    defined in EMS 3.0, but undocumented in EMS 3.2
  54617. ----------674A-------------------------------
  54618. INT 67 - LIM EMS - reserved - GET TRANSLATION ARRAY
  54619.     AH = 4Ah
  54620. Note:    defined in EMS 3.0, but undocumented in EMS 3.2
  54621. ----------674B-------------------------------
  54622. INT 67 - LIM EMS - GET NUMBER OF EMM HANDLES
  54623.     AH = 4Bh
  54624. Return: AH = status
  54625.         00h successful
  54626.         BX = number of EMM handles
  54627.         80h internal error
  54628.         81h hardware malfunction
  54629.         83h invalid handle
  54630.         84h undefined function requested
  54631. ----------674C-------------------------------
  54632. INT 67 - LIM EMS - GET PAGES OWNED BY HANDLE
  54633.     AH = 4Ch
  54634.     DX = EMM handle
  54635. Return: AH = status
  54636.         00h successful
  54637.         BX = number of logical pages
  54638.         80h internal error
  54639.         81h hardware malfunction
  54640.         83h invalid handle
  54641.         84h undefined function requested
  54642. SeeAlso: AH=4Dh
  54643. ----------674D-------------------------------
  54644. INT 67 - LIM EMS - GET PAGES FOR ALL HANDLES
  54645.     AH = 4Dh
  54646.     ES:DI -> array to receive information
  54647. Return: AH = status
  54648.         00h successful
  54649.         BX = number of active EMM handles
  54650.         array filled with 2-word entries, consisting of a handle
  54651.           and the number of pages allocated to that handle
  54652.         80h internal error
  54653.         81h hardware malfunction
  54654.         84h undefined function requested
  54655. SeeAlso: AH=4Ch
  54656. ----------674E-------------------------------
  54657. INT 67 - LIM EMS - GET OR SET PAGE MAP
  54658.     AH = 4Eh
  54659.     AL = 00h if getting mapping registers
  54660.          01h if setting mapping registers
  54661.          02h if getting and setting mapping registers at once
  54662.          03h if getting size of page-mapping array
  54663.     DS:SI -> array holding information (AL=01/02)
  54664.     ES:DI -> array to receive information (AL=00/02)
  54665. Return: AH = status
  54666.         00h successful
  54667.         AL = bytes in page-mapping array (AL=03h only)
  54668.         array pointed to by ES:DI receives mapping info (AL=00h/02h)
  54669.         80h internal error
  54670.         81h hardware malfunction
  54671.         84h undefined function requested
  54672.         8Fh undefined subfunction parameter
  54673.         A3h contents of source array corrupted (EMS 4.0?)
  54674. Note:    this function was designed to be used by multitasking operating systems
  54675.       and should not ordinarily be used by appplication software.
  54676. SeeAlso: AH=4Fh
  54677. ----------674F-------------------------------
  54678. INT 67 - LIM EMS 4.0 - GET/SET PARTIAL PAGE MAP
  54679.     AH = 4Fh
  54680.     AL = subfunction
  54681.         00h get partial page map
  54682.            DS:SI -> structure containing list of segments whose mapping
  54683.             contexts are to be saved
  54684.            ES:DI -> array to receive page map
  54685.         01h set partial page map
  54686.            DS:SI -> structure containing saved partial page map
  54687.         02h get size of partial page map
  54688.            BX = number of mappable segments in the partial map to be saved
  54689. Return: AH = status
  54690.         00h successful
  54691.         80h internal error
  54692.         81h hardware malfunction
  54693.         84h undefined function requested
  54694.         8Bh one of specified segments is not mappable
  54695.         8Fh undefined subfunction parameter
  54696.         A3h contents of partial page map corrupted or count of mappable
  54697.         segments exceeds total number of mappable segments in system
  54698.     AL = size of partial page map for subfunction 02h
  54699. SeeAlso: AH=4Eh
  54700. ----------6750-------------------------------
  54701. INT 67 - LIM EMS 4.0 - MAP/UNMAP MULTIPLE HANDLE PAGES
  54702.     AH = 50h
  54703.     AL = subfunction
  54704.         00h use physical page numbers
  54705.         01h use segment addresses
  54706.     DX = handle
  54707.     CX = number of entries in array
  54708.     DS:SI -> mapping array (see below)
  54709. Return: AH = status
  54710.         00h successful
  54711.         80h internal error
  54712.         81h hardware malfunction
  54713.         83h invalid handle
  54714.         84h undefined function requested
  54715.         8Ah one or more logical pages are invalid
  54716.         8Bh one or more physical pages are invalid
  54717.         8Fh invalid subfunction
  54718. SeeAlso: AH=40h
  54719.  
  54720. Format of mapping array entry:
  54721. Offset    Size    Description
  54722.  00h    WORD    logical page number or FFFFh to unmap physical page
  54723.  02h    WORD    physical page number or segment address
  54724. ----------6751-------------------------------
  54725. INT 67 - LIM EMS 4.0 - REALLOCATE PAGES
  54726.     AH = 51h
  54727.     DX = handle
  54728.     BX = number of pages to be allocated to handle
  54729. Return: BX = actual number of pages allocated to handle
  54730.     AH = status
  54731.         00h successful
  54732.         80h internal error
  54733.         81h hardware malfunction
  54734.         83h invalid handle
  54735.         84h undefined function requested
  54736.         87h more pages requested than present in system
  54737.         88h more pages requested than currently available
  54738. ----------6752-------------------------------
  54739. INT 67 - LIM EMS 4.0 - GET/SET HANDLE ATTRIBUTES
  54740.     AH = 52h
  54741.     AL = subfunction
  54742.         00h get handle attributes
  54743.         Return: AL = attribute
  54744.                 00h handle is volatile
  54745.                 01h handle is nonvolatile
  54746.         01h set handle attributes
  54747.         BL = new attribute (see returned AL)
  54748.         02h get attribute capability
  54749.         Return: AL = attribute capability
  54750.                 00h only volatile handles supported
  54751.                 01h both volatile and non-volatile supported
  54752.     DX = handle
  54753. Return:    AH = status
  54754.         00h successful
  54755.         80h internal error
  54756.         81h hardware malfunction
  54757.         83h invalid handle
  54758.         84h undefined function requested
  54759.         8Fh undefined subfunction
  54760.         90h undefined attribute type
  54761.         91h feature not supported
  54762. SeeAlso: AH=53h
  54763. ----------6753-------------------------------
  54764. INT 67 - LIM EMS 4.0 - GET/SET HANDLE NAME
  54765.     AH = 53h
  54766.     AL = subfunction
  54767.         00h get handle name
  54768.            ES:DI -> 8-byte buffer for handle name
  54769.         01h set handle name
  54770.            DS:SI -> 8-byte handle name
  54771.     DX = handle
  54772. Return: AH = status
  54773.         00h successful
  54774.         80h internal error
  54775.         81h hardware malfunction
  54776.         83h invalid handle
  54777.         84h undefined function requested
  54778.         8Fh undefined subfunction
  54779.         A1h duplicate handle name
  54780. SeeAlso: AH=52h
  54781. ----------6754-------------------------------
  54782. INT 67 - LIM EMS 4.0 - GET HANDLE DIRECTORY
  54783.     AH = 54h
  54784.     AL = subfunction
  54785.         00h get handle directory
  54786.            ES:DI -> buffer for handle directory (see below)
  54787.         01h search for named handle
  54788.            DS:SI -> 8-byte name
  54789.         02h get total number of handles
  54790. Return: AL = number of entries in handle directory (subfunction 00h)
  54791.     DX = value of named handle (subfunction 01h)
  54792.     BX = total number of handles (subfunction 02h)
  54793.     AH = status
  54794.         00h successful
  54795.         80h internal error
  54796.         81h hardware malfunction
  54797.         84h undefined function requested
  54798.         8Fh undefined subfunction
  54799.         A0h no such handle name
  54800.         A1h a handle found had no name
  54801.  
  54802. Format of handle directory entry:
  54803. Offset    Size    Description
  54804.  00h    WORD    handle
  54805.  02h  8 BYTEs    handle's name
  54806. ----------6755-------------------------------
  54807. INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND JUMP
  54808.     AH = 55h
  54809.     AL = subfunction
  54810.         00h physical page numbers provided by caller
  54811.         01h segment addresses provided by caller
  54812.     DX = handle
  54813.     DS:SI -> structure containing map and jump address
  54814. Return: (at target address unless error)
  54815.     AH = status
  54816.         00h successful
  54817.         80h internal error
  54818.         81h hardware failure
  54819.         83h invalid handle
  54820.         84h undefined function requested
  54821.         8Ah invalid logical page number encountered
  54822.         8Bh invalid physical page number encountered
  54823.         8Fh invalid subfunction
  54824. SeeAlso: AH=56h
  54825. ----------6756-------------------------------
  54826. INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND CALL
  54827.     AH = 56h
  54828.     AL = subfunction
  54829.         00h physical page numbers provided by caller
  54830.         DX = handle
  54831.         DS:SI -> structure containing page map and call address
  54832.         01h segment addresses provided by caller
  54833.         DX = handle
  54834.         DS:SI -> structure containing page map and call address
  54835.         02h get page map stack space required
  54836.         Return: BX = stack space required
  54837. Return: (if successful, the target address is called.  Use a RETF to return and
  54838.      restore mapping context)
  54839.     AH = status (see AH=55h)
  54840. SeeAlso: AH=55h
  54841. ----------6757-------------------------------
  54842. INT 67 - LIM EMS 4.0 - MOVE/EXCHANGE MEMORY REGION
  54843.     AH = 57h
  54844.     AL = subfunction
  54845.         00h move memory region
  54846.         01h exchange memory region
  54847.     DS:SI -> structure describing source and destination (see below)
  54848. Return: AH = status
  54849.         00h successful
  54850.         80h internal error
  54851.         81h hardware failure
  54852.         83h invalid handle
  54853.         84h undefined function requested
  54854.         8Ah invalid logical page number encountered
  54855.         8Fh undefined subfunction
  54856.         92h successful, but a portion of the source region has been
  54857.         overwritten
  54858.         93h length of source or destination region exceeds length of region
  54859.         allocated to either source or destination handle
  54860.         94h conventional and expanded memory regions overlap
  54861.         95h offset within logical page exceeds size of logical page
  54862.         96h region length exceeds 1M
  54863.         97h source and destination EMS regions have same handle and overlap
  54864.         98h memory source or destination type undefined
  54865.         A2h attempted to wrap around 1M conventional address space
  54866. Note:    source and destination may overlap for a move, in which case the copy
  54867.       direction is chosen such that the destination receives an intact copy
  54868.       of the source region
  54869.  
  54870. Format of EMS copy data:
  54871. Offset    Size    Description
  54872.  00h    DWORD    region length in bytes
  54873.  04h    BYTE    source memory type
  54874.         00h conventional
  54875.         01h expanded
  54876.  05h    WORD    source handle (0000h if conventional memory)
  54877.  07h    WORD    source initial offset (within page if EMS, segment if convent)
  54878.  09h    WORD    source initial segment (conv mem) or logical page (EMS)
  54879.  0Bh    BYTE    destination memory type
  54880.         00h conventional
  54881.         01h expanded
  54882.  0Ch    WORD    destination handle
  54883.  0Eh    WORD    destination initial offset
  54884.  10h    WORD    destination initial segment or page
  54885. ----------6758-------------------------------
  54886. INT 67 - LIM EMS 4.0 - GET MAPPABLE PHYSICAL ADDRESS ARRAY
  54887.     AH = 58h
  54888.     AL = subfunction
  54889.         00h get mappable physical address array
  54890.         ES:DI -> buffer to be filled with array
  54891.         01h get number of entries in m.p.a. array
  54892. Return: CX = number of entries in array
  54893.     AH = status
  54894.         00h successful
  54895.         80h internal error
  54896.         81h hardware failure
  54897.         84h undefined function requested
  54898.         8Fh undefined subfunction
  54899. Note:    the returned array for subfunction 00h is filled in physical segment
  54900.       address order
  54901.  
  54902. Format of mappable physical address entry:
  54903. Offset    Size    Description
  54904.  00h    WORD    physical page segment
  54905.  02h    WORD    physical page number
  54906. ----------6759-------------------------------
  54907. INT 67 - LIM EMS 4.0 - GET EXPANDED MEMORY HARDWARE INFORMATION
  54908.     AH = 59h
  54909.     AL = subfunction
  54910.         00h get hardware configuration array
  54911.         ES:DI -> buffer to be filled with array (see below)
  54912.         01h get unallocated raw page count
  54913.         Return: BX = unallocated raw pages
  54914.             DX = total raw pages
  54915. Return:    AH = status
  54916.         00h successful
  54917.         80h internal error
  54918.         81h hardware failure
  54919.         84h undefined function requested
  54920.         8Fh undefined subfunction
  54921.         A4h access denied by operating system
  54922. Note:    subfunction 00h is for use by operating systems only, and can be
  54923.       enabled or disabled at any time by the operating system
  54924.  
  54925. Format of hardware configuration array:
  54926. Offset    Size    Description
  54927.  00h    WORD    size of raw EMM pages in paragraphs
  54928.  02h    WORD    number of alternate register sets
  54929.  04h    WORD    size of mapping-context save area in bytes
  54930.  06h    WORD    number of register sets assignable to DMA
  54931.  08h    WORD    DMA operation type
  54932.         0000h DMA with alternate register sets
  54933.         0001h only one DMA register set
  54934. ----------675A-------------------------------
  54935. INT 67 - LIM EMS 4.0 - ALLOCATE STANDARD/RAW PAGES
  54936.     AH = 5Ah
  54937.     AL = subfunction
  54938.         00h allocate standard pages
  54939.         01h allocate raw pages
  54940.     BX = number of pages to allocate
  54941. Return: DX = handle
  54942.     AH = status
  54943.         00h successful
  54944.         80h internal error
  54945.         81h hardware failure
  54946.         84h undefined function requested
  54947.         85h no more handles available
  54948.         87h insufficient memory pages in system
  54949.         88h insufficient memory pages available
  54950.         8Fh undefined subfunction
  54951. ----------675B-------------------------------
  54952. INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET
  54953.     AH = 5Bh
  54954.     AL = subfunction
  54955.         00h get alternate map register set
  54956.         Return: BL = current active alternate map register set number
  54957.             ES:DI -> map register context save area if BL=00h
  54958.         01h set alternate map register set
  54959.         BL = new alternate map register set number
  54960.         ES:DI -> map register context save area if BL=0
  54961.         02h get alternate map save array size
  54962.         Return: DX = array size in bytes
  54963.         03h allocate alternate map register set
  54964.         Return: BL = number of map register set; 00h = not supported
  54965.         04h deallocate alternate map register set
  54966.         BL = number of alternate map register set
  54967. Return: AH = status
  54968.         00h successful
  54969.         80h internal error
  54970.         81h hardware malfunction
  54971.         84h undefined function requested
  54972.         8Fh undefined subfunction
  54973.         9Ah specified alternate map register set not supported
  54974.         9Bh all alternate map register sets currently allocated
  54975.         9Ch alternate map register sets not supported
  54976.         9Dh undefined or unallocated alternate map register set
  54977.         A3h source array corrupted
  54978.         A4h operating system denied access
  54979. Note:    this function is for use by operating systems only, and can be
  54980.       enabled or disabled at any time by the operating system
  54981. ----------675B-------------------------------
  54982. INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET - DMA REGISTERS
  54983.     AH = 5Bh
  54984.     AL = subfunction
  54985.         05h allocate DMA register set
  54986.         Return: BL = DMA register set number, 00h if not supported
  54987.         06h enable DMA on alternate map register set
  54988.            BL = DMA register set number
  54989.            DL = DMA channel number
  54990.         07h disable DMA on alternate map register set
  54991.            BL = DMA register set number
  54992.         08h deallocate DMA register set
  54993.            BL = DMA register set number
  54994. Return: AH = status
  54995.         00h successful
  54996.         80h internal error
  54997.         81h hardware malfunction
  54998.         84h undefined function requested
  54999.         8Fh undefined subfunction
  55000.         9Ah specified DMA register set not supported
  55001.         9Bh all DMA register sets currently allocated
  55002.         9Ch alternate DMA sets not supported
  55003.         9Dh undefined or unallocated DMA register set
  55004.         9Eh dedicated DMA channels not supported
  55005.         9Fh specified dedicated DMA channel not supported
  55006.         A3h source array corrupted
  55007.         A4h operating system denied access
  55008. Note:    this function is for use by operating systems only, and can be
  55009.       enabled or disabled at any time by the operating system
  55010. ----------675BE0-----------------------------
  55011. INT 67 - MICEMM v4D - GET LINEAR ADDRESS OF MEMORY
  55012.     AX = 5BE0h
  55013.     ES:BX -> memory for which to get linear address
  55014. Return: AH = 00h
  55015.     DX:CX = linear address of physical memory corresponding to ES:BX
  55016. SeeAlso: AX=5BF0h,AX=5BF1h
  55017. ----------675BF0-----------------------------
  55018. INT 67 - MICEMM v4D - INSTALLATION CHECK
  55019.     AX = 5BF0h
  55020. Return: AH = 00h if MICEMM present
  55021.         BX = code segment of driver
  55022. Note:    MICEMM is the Micronics Expanded Memory Manager
  55023. SeeAlso: AH=3Fh,AX=5BE0h,AX=5BF1h
  55024. ----------675BF1-----------------------------
  55025. INT 67 - MICEMM v4D - GET MEMORY TYPES
  55026.     AX = 5BF1h
  55027.     ES:BX -> 256-byte buffer for memory types
  55028. Return: AH = 00h
  55029.     ES:BX buffer filled
  55030. Note:    each byte in the buffer specifies the type of a 4K page of memory:
  55031.         00h unused
  55032.         02h DOS extension
  55033.         04h shadowed ROM
  55034.         08h mappable EMS
  55035.         10h page frame
  55036.         20h ROM
  55037.         40h reserved (video memory, etc)
  55038.         80h RAM
  55039. SeeAlso: AX=5BE0h,AX=5BF0h
  55040. ----------675C-------------------------------
  55041. INT 67 - LIM EMS 4.0 - PREPARE EXPANDED MEMORY HARDWARE FOR WARM BOOT
  55042.     AH = 5Ch
  55043. Return: AH = status
  55044.         00h successful
  55045.         80h internal error
  55046.         81h hardware malfunction
  55047.         84h undefined function requested
  55048. ----------675D-------------------------------
  55049. INT 67 - LIM EMS 4.0 - ENABLE/DISABLE OS FUNCTION SET FUNCTIONS
  55050.     AH = 5Dh
  55051.     AL = subfunction
  55052.         00h enable OS Function Set
  55053.         01h disable OS Function Set
  55054.         02h return access key (resets memory manager, returns access key at
  55055.         next invocation)
  55056.     BX,CX = access key returned by first invocation
  55057. Return: BX,CX = access key, returned only on first invocation of function
  55058.     AH = status
  55059.         00h successful
  55060.         80h internal error
  55061.         81h hardware malfunction
  55062.         84h undefined function requested
  55063.         8Fh undefined subfunction
  55064.         A4h operating system denied access
  55065. ----------6760-------------------------------
  55066. INT 67 - EEMS - GET PHYSICAL WINDOW ARRAY
  55067.     AH = 60h
  55068.     ES:DI -> buffer
  55069. Return: AH = status
  55070.     AL = number of entries
  55071.     buffer at ES:DI filled
  55072. ----------6761-------------------------------
  55073. INT 67 - EEMS - GENERIC ACCELERATOR CARD SUPPORT
  55074.     AH = 61h
  55075.     ???
  55076. Return: ???
  55077. Note:    can be used by accelerator card manufacturer to flush RAM cache,
  55078.       ensuring that the cache accurately reflects what the processor would
  55079.       see without the cache.
  55080. ----------6768-------------------------------
  55081. INT 67 - EEMS - GET ADDRESSES OF ALL PAGE FRAMES IN SYSTEM
  55082.     AH = 68h
  55083.     ES:DI -> buffer
  55084. Return: AH = status
  55085.     AL = number of entries
  55086.     buffer at ES:DI filled
  55087. Note:    equivalent to LIM 4.0 function 58h
  55088. ----------6769-------------------------------
  55089. INT 67 - EEMS - MAP PAGE INTO FRAME
  55090.     AH = 69h
  55091.     AL = frame number
  55092.     BX = page number
  55093.     DX = handle
  55094. Return: AH = status
  55095. Note:    similar to EMS function 44h
  55096. SeeAlso: AH=44h,AH=50h,AH=6Ah
  55097. ----------676A-------------------------------
  55098. INT 67 - EEMS - PAGE MAPPING
  55099.     AH = 6Ah
  55100.     AL = subfunction
  55101.         00h save partial page map
  55102.         CH = first page frame
  55103.         CL = number of frames
  55104.         ES:DI -> buffer which is to be filled
  55105.         01h restore partial page map
  55106.         CH = first page frame
  55107.         CL = number of frames
  55108.         DI:SI -> previously saved page map
  55109.         02h save and restore partial page map
  55110.         CH = first page frame
  55111.         CL = number of frames
  55112.         ES:DI = buffer for current page map
  55113.         DI:SI = new page map
  55114.         03h get size of save array
  55115.         CH = first page frame
  55116.         CL = number of frames
  55117.         Return: AL = size of array in bytes
  55118.         04h switch to standard map register setting
  55119.         05h switch to alternate map register setting
  55120.         06h deallocate pages mapped to frames in conventional memory
  55121.         CH = first page frame
  55122.         CL = number of frames
  55123. Return: AH = status
  55124. Note:    similar to EMS function 4Eh, except that a subrange of pages can be
  55125.       specified
  55126. SeeAlso: AH=69h
  55127. ----------67DD-------------------------------
  55128. INT 67 - Quadtel QMAPS - API
  55129.     AH = DDh
  55130.     AL = function
  55131.     ???
  55132. Return: ???
  55133. Notes:    details are not yet available
  55134.     Hewlett-Packard's HPMM.SYS is a licensed version of QMAPS, and thus
  55135.       supports this API
  55136. SeeAlso: AH=3Fh,AX=FFA5h
  55137. ----------67DE00-----------------------------
  55138. INT 67 - Virtual Control Program Interface - INSTALLATION CHECK
  55139.     AX = DE00h
  55140. Return: AH = 00h    VCPI is present
  55141.         BH = major version number
  55142.         BL = minor version number
  55143.     AH nonzero  VCPI not present
  55144. SeeAlso: INT 2F/AX=1687h
  55145. ----------67DE01-----------------------------
  55146. INT 67 - Virtual Control Program Interface - GET PROTECTED MODE INTERFACE
  55147.     AX = DE01h
  55148.     ES:DI -> 4K page table buffer
  55149.     DS:SI -> three descriptor table entries in GDT
  55150.         first becomes code segment descriptor, other two for use by
  55151.         main control program
  55152. Return: AH = 00h successful
  55153.         DI -> first unused page table entry in buffer
  55154.         EBX -> protected mode entry point in code segment
  55155.     AH = nonzero  failed
  55156. Note:    protected mode entry point may be called with AX=DE00h-DE05h and
  55157.       AX=DE0Ch (in each case, all other registers as appropriate for
  55158.       the function)
  55159. SeeAlso: INT 2F/AX=1687h,INT 67/AH=3Fh
  55160.  
  55161. QEMM v6.03 protected mode entry point may also be called with:
  55162.     AX = DF00h ???
  55163.         ???
  55164.         Return: ???
  55165.     AX = DF01h ???
  55166.         ???
  55167.         Return: ???
  55168. ----------67DE02-----------------------------
  55169. INT 67 - Virtual Control Program Interface - GET MAX PHYSICAL MEMORY ADDRESS
  55170.     AX = DE02h
  55171. Return: AH = 00h  successful
  55172.         EDX = physical address of highest 4K memory page
  55173.     AH nonzero: failed
  55174. SeeAlso: AH=3Fh
  55175. ----------67DE03-----------------------------
  55176. INT 67 - Virtual Control Program Interface - GET NUMBER OF FREE 4K PAGES
  55177.     AX = DE03h
  55178. Return: AH = 00h  successful
  55179.         EDX = number of free 4K pages
  55180.     AH nonzero: failed
  55181. Notes:    returns total number of pages available to ALL tasks in system
  55182.     also available in protected mode by calling the protected-mode VCPI
  55183.       entry point
  55184. SeeAlso: AX=DE04h
  55185. ----------67DE04-----------------------------
  55186. INT 67 - Virtual Control Program Interface - ALLOCATE A 4K PAGE
  55187.     AX = DE04h
  55188. Return: AH = 00h successful
  55189.         EDX = physical address of allocated page
  55190.     AH nonzero: failed
  55191. Notes:    the client program is responsible for freeing all memory allocated
  55192.       with this call before terminating
  55193.     also available in protected mode by calling the protected-mode VCPI
  55194.       entry point
  55195. SeeAlso: AH=3Fh,AX=DE03h,AX=DE05h
  55196. ----------67DE05-----------------------------
  55197. INT 67 - Virtual Control Program Interface - FREE 4K PAGE
  55198.     AX = DE05h
  55199.     EDX = physical address of 4K page
  55200. Return: AH = 00h successful
  55201.     AH nonzero: failed
  55202. Note:    also available in protected mode by calling the protected-mode VCPI
  55203.       entry point
  55204. SeeAlso: AH=3Fh,AX=DE04h
  55205. ----------67DE06-----------------------------
  55206. INT 67 - Virtual Control Program Interface - GET PHYS ADDR OF PAGE IN FIRST MB
  55207.     AX = DE06h
  55208.     CX = page number (linear address shifted right 12 bits)
  55209. Return: AH = 00h successful
  55210.         EDX = physical address of page
  55211.     AH nonzero: invalid page number (AH = 8Bh recommended)
  55212. ----------67DE07-----------------------------
  55213. INT 67 - Virtual Control Program Interface - READ CR0
  55214.     AX = DE07h
  55215. Return: AH = 00h
  55216.     EBX = value of Control Register 0
  55217. SeeAlso: AH=3Fh,AX=DE07h
  55218. ----------67DE08-----------------------------
  55219. INT 67 - Virtual Control Program Interface - READ DEBUG REGISTERS
  55220.     AX = DE08h
  55221.     ES:DI -> array of 8 DWORDs
  55222. Return: AH = 00h
  55223.     buffer filled with DR0 first, DR7 last, DR4 and DR5 unused
  55224. SeeAlso: AH=3Fh,AX=DE09h
  55225. ----------67DE09-----------------------------
  55226. INT 67 - Virtual Control Program Interface - SET DEBUG REGISTERS
  55227.     AX = DE09h
  55228.     ES:DI -> array of 8 DWORDs holding new values of debug registers
  55229. Return: AH = 00h
  55230. Note:    values for DR4 and DR5 ignored
  55231. SeeAlso: AH=3Fh,AX=DE08h
  55232. ----------67DE0A-----------------------------
  55233. INT 67 - Virtual Control Program Interface - GET 8259 INTERRUPT VECTOR MAPPINGS
  55234.     AX = DE0Ah
  55235. Return: AH = 00h successful
  55236.         BX = first vector used by master 8259 (IRQ0)
  55237.         CX = first vector used by slave 8259 (IRQ8)
  55238.     AH nonzero: failed
  55239. Note:    CX is undefined in systems without a slave 8259
  55240. SeeAlso: AX=DE0Bh,INT 21/AX=250Ch,INT 31/AX=0400h
  55241. ----------67DE0B-----------------------------
  55242. INT 67 - Virtual Control Program Interface - SET 8259 INTERRUPT VECTOR MAPPINGS
  55243.     AX = DE0Bh
  55244.     BX = first vector used by master 8259
  55245.     CX = first vector used by slave 8259
  55246.     interrupts disabled
  55247. Return: AH = 00h successful
  55248.     AH nonzero: failed 
  55249. Notes:    This call merely informs the server that the client has changed the
  55250.       interrupt mappings.  The client may not change the mappings if they
  55251.       have already been changed by the server or another client, and is
  55252.       responsible for restoring the original mappings before terminating.
  55253. SeeAlso: AX=DE0Ah
  55254. ----------67DE0C-----------------------------
  55255. INT 67 - Virtual Control Program Interface - SWITCH TO PROTECTED MODE
  55256.     AX = DE0Ch
  55257.     ESI = linear address in first megabyte of values for system registers
  55258.     interrupts disabled
  55259. Return: interrupts disabled
  55260.     GDTR, IDTR, LDTR, TR loaded
  55261.     SS:ESP must have at least 16 bytes space, and the entry point is
  55262.         required to set up a new stack before enabling interrupts
  55263.     EAX, ESI, DS, ES, FS, GS destroyed
  55264. SeeAlso: AH=3Fh,INT 15/AH=89h,INT 38/AH=10h
  55265.  
  55266. Note:    in protected mode, calling the protected-mode VCPI entry point with 
  55267.       AX = DE0Ch
  55268.       DS = segment selector mapping entire linear address space obtained
  55269.         via AX=DE01h
  55270.       SS:ESP in first megabyte of linear memory
  55271.       STACK:QWORD  return address from FAR call to 32-bit segment
  55272.         DWORD  EIP
  55273.         DWORD  CS
  55274.         DWORD  reserved for EFLAGS
  55275.         DWORD  ESP
  55276.         DWORD  SS
  55277.         DWORD  ES
  55278.         DWORD  DS
  55279.         DWORD  FS
  55280.         DWORD  GS
  55281.       and interrupts disabled, will switch to virtual86 mode with
  55282.       interrupts disabled, all segment registers loaded, and EAX destroyed.
  55283.  
  55284. Format of system register values for switch to protected mode:
  55285. Offset    Size    Description
  55286.  00h    DWORD    value for CR3
  55287.  04h    DWORD    linear address in first megabyte of value for GDTR
  55288.  08h    DWORD    linear address in first megabyte of value for IDTR
  55289.  0Ch    WORD    value for LDTR
  55290.  0Eh    WORD    value for TR
  55291.  10h    PWORD    CS:EIP of protected mode entry-point
  55292. ----------67FFA5-----------------------------
  55293. INT 67 - Microsoft EMM386.EXE v4.20+ - INSTALLATION CHECK
  55294.     AX = FFA5h
  55295. Return: AX = 845Ah if loaded
  55296.         BX:CX -> API entry point
  55297. Notes:    this call is available even if EMM386 is not providing EMS
  55298.     if no other program has hooked INT 67, an alternate installation
  55299.       check is to search for the string
  55300.       "MICROSOFT EXPANDED MEMORY MANAGER 386" early in the INT 67
  55301.       handler's segment, usually at offset 14h
  55302. SeeAlso: AH=3Fh
  55303.  
  55304. Call API entry point with:
  55305.     AH = 00h get memory manager's status
  55306.         Return: AH = status
  55307.             bit 0: not active (OFF)
  55308.             bit 1: in "Auto" mode
  55309.     AH = 01h set memory manager's state
  55310.         AL = new state (00h ON, 01h OFF, 02h AUTO)
  55311.     AH = 02h Weitek coprocessor support
  55312.         AL = subfunction
  55313.         00h get Weitek support state
  55314.             Return: AL = status
  55315.                 bit 0: Weitek coprocessor is present
  55316.                 bit 1: Weitek support is enabled
  55317.         01h turn on Weitek support
  55318.         02h turn off Weitek support
  55319.      --- v4.20-4.41 only ---
  55320.     AH = 03h Windows support???
  55321.         AL = subfunction (00h, 01h)
  55322.     AH = 04h print copyright notice to standard output
  55323.          (using INT 21/AH=09h)
  55324.     AH = 05h print available report
  55325.          (the one shown when running EMM386 from the DOS prompt)
  55326. ---------------------------------------------
  55327. Interrupt List, part 8 of 8
  55328. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  55329. ----------68---------------------------------
  55330. INT 68 - Sangoma CCPOP 3270 resident module
  55331. SeeAlso: INT 67"Sangoma",INT 92"Sangoma"
  55332. ----------6801-------------------------------
  55333. INT 68 - APPC/PC - NETWORK DEVICE CONTROL
  55334.     AH = 01h
  55335.     DS:DX -> control block
  55336.  
  55337. Format of control block:
  55338. Offset    Size    Description
  55339.  00h 12 BYTEs    reserved
  55340.  0Ch    WORD    verb (action)
  55341.  0Eh  6 BYTEs    00h
  55342.  14h    DWORD    big-endian return code (see below)
  55343. ---if verb = 1B00h (DISPLAY)---
  55344.  18h    WORD    00h
  55345.  1Ah  8 BYTEs    logical unit ID (big-endian)
  55346.  22h  8 BYTEs    partner logical unit name (big-endian)
  55347.  2Ah  8 BYTEs    mode name (big-endian)
  55348.  32h    BYTE    logical unit session limit
  55349.  33h    BYTE    partner logical unit session limit
  55350.  34h    BYTE    node maximum negotiable session limit
  55351.  35h    BYTE    current session limit
  55352.  36h    BYTE    minimum negotiated winner limit
  55353.  37h    BYTE    maximum negotiated loser limit
  55354.  38h    BYTE    active session count
  55355.  39h    BYTE    active CONWINNER session count
  55356.  3Ah    BYTE    active CONLOSER session count
  55357.  3Bh    BYTE    session termination count
  55358.  3Ch    BYTE    bit 7: SESSION_TERMINATION_TARGET_DRAIN
  55359.         bit 6: SESSION_TERMINATION_SOURCE_DRAIN
  55360. ---if verb=2000h (Attach Physical Unit)---
  55361.  18h    WORD    00h
  55362.  1Ah    BYTE    version
  55363.  1Bh    BYTE    release
  55364.  1Ch  8 BYTEs    net name (big-endian)
  55365.  24h  8 BYTEs    physical unit name (big-endian)
  55366.  2Ch  8 BYTEs    00h
  55367.  34h    DWORD    pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh=don't log errors
  55368.  38h    DWORD    00h
  55369.  3Ch    BYTE    00h RETURN_CONTROL: COMPLETE
  55370.         01h RETURN_CONTROL: INCOMPLETE
  55371. ---if verb=2100h (Attach Logical Unit)---
  55372.  18h    WORD    70  offset to partner logical unit record
  55373.  1Ah  8 BYTEs    logical unit name (big-endian)
  55374.  22h  8 BYTEs    logical unit ID (big-endian)
  55375.  2Ah    BYTE    logical unit local address
  55376.  2Bh    BYTE    logical unit session limit
  55377.  2Ch    DWORD    pointer to CREATE_TP_EXIT routine,
  55378.         FFFFFFFFh = reject incoming ALLOCATEs
  55379.         00000000h = queue ALLOCATEs
  55380.  30h    DWORD    00h
  55381.  34h    DWORD    pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh=don't log errors
  55382.  38h    DWORD    00h
  55383.  3Ch    BYTE    maximum TPs
  55384.  3Dh    BYTE    queue depth
  55385.  3Eh    DWORD    pointer to LU_LU_PASSWORD_EXIT routine, FFFFFFFFh=no pswd exit
  55386.  42h    DWORD    00h
  55387.  46h    WORD    total length of partner records
  55388.     for each partner logical unit:
  55389.     WORD    length of this partner logical unit record
  55390.     WORD    42  offset to mode records
  55391.       8 BYTEs    partner logical unit name (big-endian)
  55392.     BYTE    partner logical unit security capabilities
  55393.         bit 7: already verified
  55394.         bit 6: conversation level security
  55395.         bit 5: session level security
  55396.     BYTE    partner logical unit session limit
  55397.     WORD    partner logical unit maximum MC_SEND_LL
  55398.       8 BYTEs    partner logical unit DLC name (big-endian)
  55399.     BYTE    partner logical unit adapter number
  55400.      17 BYTEs    (counted string) partner logical unit adapter address
  55401.     WORD    total length of mode records
  55402.    for each mode:
  55403.     WORD    16  length of this mode record
  55404.       8 BYTEs    mode name (big-endian)
  55405.     WORD    RU_SIZE high bound
  55406.     WORD    RU_SIZE low bound
  55407.     BYTE    mode maximum negotiable session limit
  55408.     BYTE    pacing size for receive
  55409. ---if verb=2200h (Detach Logical Unit)---
  55410.  18h  8 BYTEs    logical unit ID (big-endian)
  55411.  20h    BYTE    00h
  55412. ---if verb=2700h (Detach Physical Unit)---
  55413.  18h    BYTE    00h  type: hard
  55414.         01h  type: soft
  55415. ---if verb=2B00h (Activate DLC)---
  55416.  18h  8 BYTEs    DLC name (big-endian)
  55417.  20h    BYTE    adapter number
  55418.  
  55419. Values for return code:
  55420.      0000h    successful
  55421.      0001h    BAD_TP_ID
  55422.      0002h    BAD_CONV_ID
  55423.      0003h    bad logical unit ID
  55424.      0008h    no physical unit attached
  55425.      0110h    bad state
  55426.      01B1h    BAD_PART_LUNAME
  55427.      01B2h    bad mode name
  55428.      0201h    physical unit already active
  55429.      0211h    logical unit already active
  55430.      0212h    BAD_PART_SESS
  55431.      0213h    BAD_RU_SIZES
  55432.      0214h    BAD_MODE_SESS
  55433.      0216h    BAD_PACING_CNT
  55434.      0219h    EXTREME_RUS
  55435.      021Ah    SNASVCMG_1
  55436.      0223h    SSCP_CONNECTED_LU
  55437.      0230h    invalid change
  55438.      0243h    too many TPs
  55439.      0272h    adapter close failure
  55440.      0281h    GET_ALLOC_BAD_TYPE
  55441.      0282h    unsuccessful
  55442.      0283h    DLC failure
  55443.      0284h    unrecognized DLC
  55444.      0286h    duplicate DLC
  55445.      0301h    SSCP_PU_SESSION_NOT_ACTIVE
  55446.      0302h    data exceeds RU size
  55447.      0401h    invalid direction
  55448.      0402h    invalid type
  55449.      0403h    segment overlap
  55450.      0404h    invalid first character
  55451.      0405h    table error
  55452.      0406h    conversion error
  55453.      F0010000h    APPC disabled
  55454.      F0020000h    APPC busy
  55455.      F0030000h    APPC abended
  55456.      F0040000h    incomplete
  55457.  
  55458. Routines defined by LU_LU_PASSWORD_EXIT, CREATE_TP_EXIT, and SYSTEM_LOG_EXIT
  55459. pointers are called by pushing the DWORD pointer to the verb on the stack and
  55460. then performing a FAR call.
  55461.  
  55462. Format of ACCESS_LU_LU_PW verb:
  55463. Offset    Size    Description
  55464.  00h 12 BYTEs    reserved
  55465.  0Ch    WORD    1900h
  55466.  0Eh  8 BYTEs    logical unit ID (big-endian)
  55467.  16h  8 BYTEs    logical unit name (big-endian)
  55468.  1Eh  8 BYTEs    partner logical unit name (big-endian)
  55469.  26h 17 BYTEs    (counted string) partner fully qualified logical unit name
  55470.  37h    BYTE    password available (0=no, 1=yes)
  55471.  38h  8 BYTEs    password
  55472.  
  55473. Format of CREATE_TP verb:
  55474. Offset    Size    Description
  55475.  00h 12 BYTEs    reserved
  55476.  0Ch    WORD    2300h
  55477.  0Eh  6 BYTEs    00h
  55478.  14h    DWORD    sense code (big-endian)
  55479.         00000000h    Ok
  55480.         080F6051h    SECURITY_NOT_VALID
  55481.         084B6031h    TP_NOT_AVAIL_RETRY
  55482.         084C0000h    TP_NOT_AVAIL_NO_RETRY
  55483.         10086021h    TP_NAME_NOT_RECOGNIZED
  55484.         10086034h    CONVERSATION_TYPE_MISMATCH
  55485.         10086041h    SYNC_LEVEL_NOT_SUPPORTED
  55486.  18h  8 BYTEs    TP ID (big-endian)
  55487.  20h  8 BYTEs    logical unit ID (big-endian)
  55488.  28h    DWORD    conversation ID (big-endian)
  55489.  2Ch    BYTE    0 basic conversation, 1 mapped conversation
  55490.  2Dh    BYTE    0 no sync level, 1 confirm
  55491.  2Eh    BYTE    reserved
  55492.  2Fh 65 BYTEs    (counted string) transaction program name
  55493.  70h  6 BYTEs    00h
  55494.  76h    WORD    length of ERROR_LOG_DATA to return
  55495.  78h    DWORD    pointer to ERROR_LOG_DATA buffer
  55496.  7Ch  8 BYTEs    partner logical unit name (big-endian)
  55497.  84h 18 BYTEs    (counted string) partner fully qualified logical unit name
  55498.  96h  8 BYTEs    mode name (big-endian)
  55499.  9Eh 12 BYTEs    00h
  55500.  AAh 11 BYTEs    (counted string) password
  55501.  B5h 11 BYTEs    (counted string) user ID
  55502.  C0h    BYTE    0 verification should be performed
  55503.         1 already verified
  55504.  
  55505. Format of SYSLOG verb:
  55506. Offset    Size    Description
  55507.  00h 12 BYTEs    reserved
  55508.  0Ch    WORD    2600h
  55509.  0Eh 10 BYTEs    00h
  55510.  18h    WORD    type (big-endian)
  55511.  1Ah    DWORD    subtype (big-endian)
  55512.  1Eh    DWORD    pointer to ADDITIONAL_INFO
  55513.  22h    DWORD    conversation ID (big-endian)
  55514.  26h  8 BYTEs    TP ID (big-endian)
  55515.  2Eh  8 BYTEs    physical unit or logical unit name (big-endian)
  55516.  36h    WORD    length of data
  55517.  38h    DWORD    pointer to data
  55518.  3Ch    BYTE    00h
  55519. ----------6802-------------------------------
  55520. INT 68 - APPC/PC - CONNECTION CONTROL
  55521.     AH = 02h
  55522.     DS:DX -> control block
  55523.  
  55524. Format of control block:
  55525. Offset    Size    Description
  55526.  00h 12 BYTEs    reserved
  55527.  0Ch    WORD    verb (action)
  55528.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  55529.         0 if basic verb
  55530.  0Fh  5 BYTEs    reserved (0)
  55531.  14h    WORD    (high byte first) primary return code (see below)
  55532.  16h    DWORD    (high byte first) error code (see below)
  55533.  1Ah  8 BYTEs    (high byte first) TP_ID
  55534.  22h    DWORD    (high byte first) conversation ID
  55535. ---if verb=0100h (Allocate or MC_Allocate)---
  55536.  26h    BYTE    (MC_Allocate only) 0 basic conversation
  55537.                    1 mapped conversation
  55538.  27h    BYTE    00h SYNC_LEVEL = none
  55539.         01h SYNC_LEVEL = confirm
  55540.  28h    WORD    0000h
  55541.  2Ah    BYTE    00h RETURN_CONTROL: when session allocated
  55542.         01h RETURN_CONTROL: immediate
  55543.         02h RETURN_CONTROL: when session free
  55544.  2Bh  8 BYTEs    00h
  55545.  33h  8 BYTEs    (high byte first) partner logical unit name
  55546.  3Bh  8 BYTEs    (high byte first) mode name
  55547.  43h 65 BYTEs    (counted string) TP name
  55548.  84h    BYTE    00h security: none
  55549.         01h security: same
  55550.         02h security: pgm
  55551.  85h 11 BYTEs    00h
  55552.  90h 11 BYTEs    (counted string) password
  55553.  9Bh 11 BYTEs    (counted string) user ID
  55554.  A6h    WORD    PIP_DATA length
  55555.  A8h    DWORD    pointer to PIP_DATA
  55556. ---if verb=0300h (Confirm or MC_Confirm)---
  55557.  26h    BYTE  request to send received (0=no, 1=yes)
  55558. ---if verb=0400h (Confirmed or MC_Confirmed), no additional fields---
  55559. ---if verb=0500h (Deallocate or MC_Deallocate)---
  55560.  26h    BYTE    00h
  55561.  27h    BYTE    type 0 SYNC_LEVEL
  55562.              1 FLUSH
  55563.              2 ABEND_PROC
  55564.              3 ABEND_SVC
  55565.              4 ABEND_TIMER
  55566.              5 ABEND
  55567.  28h    WORD    (MC_Deallocate only) length of error log data
  55568.  2Ah    DWORD    (MC_Deallocate only) pointer to error log data
  55569. ---if verb=0600h (Flush or MC_Flush), no additional fields---
  55570. ---if verb=0700h (Get_Attributes or MC_Get_Attributes)---
  55571.  26h  8 BYTEs    (high byte first) logical unit ID
  55572.  2Eh    BYTE    00h
  55573.  2Fh    BYTE    SYNC_LEVEL (0=none, 1=confirm)
  55574.  30h  8 BYTEs    (high byte first) mode name
  55575.  38h  8 BYTEs    (high byte first) own net name
  55576.  40h  8 BYTEs    (high byte first) own logical unit name
  55577.  48h  8 BYTEs    (high byte first) partner logical unit name
  55578.  50h 18 BYTEs    (counted string) partner's fully qualified logical unit name
  55579.  62h    BYTE    00h
  55580.  63h 11 BYTEs    (counted string) user ID
  55581. ---if verb=0800h (Get_Type)---
  55582.  26h    BYTE    type (0=basic conversation, 1=mapped conversation)
  55583. ---if verb=0900h (Post_on_Receipt)---
  55584.  26h    WORD    maximum length
  55585.  28h    BYTE    fill (0=buffer, 1=LL)
  55586. ---if verb=0A00h (Prepare_to_Receive or MC_Prepare_to_Receive)---
  55587.  26h    BYTE    type (0=SYNC_LEVEL, 1=FLUSH)
  55588.  27h    BYTE    locks (0=short, 1=long)
  55589. ---if verb=0B00h (Receive_and_Wait or MC_Receive_and_Wait)---
  55590.  26h    BYTE    what received
  55591.         00h data
  55592.         01h data complete
  55593.         02h data incomplete
  55594.         03h confirm
  55595.         04h confirm send
  55596.         05h confirm deallocate
  55597.         06h send
  55598.  27h    BYTE    (MC_Receive_and_Wait only) fill (0=buffer, 1=LL)
  55599.  28h    BYTE    Request_to_Send_Received (0=no, 1=yes)
  55600.  29h    WORD    maximum length
  55601.  2Bh    WORD    data length
  55602.  2Dh    DWORD    pointer to data
  55603. ---if verb=0C00h (Receive_Immediate or MC_Receive_Immediate)---
  55604.  26h    BYTE    what received
  55605.         00h data
  55606.         01h data complete
  55607.         02h data incomplete
  55608.         03h confirm
  55609.         04h confirm send
  55610.         05h confirm deallocate
  55611.         06h send
  55612.  27h    BYTE    (MC_Receive_Immediate only) fill (0=buffer, 1=LL)
  55613.  28h    BYTE    Request_to_Send_Received (0=no, 1=yes)
  55614.  29h    WORD    maximum length
  55615.  2Bh    WORD    data length
  55616.  2Dh    DWORD    pointer to data
  55617. ---if verb=0E00h (Request_to_Send or MC_Request_to_Send), no other fields---
  55618. ---if verb=0F00h (Send_Data or MC_Send_Data)---
  55619.  26h    BYTE    request to send received (0=no, 1=yes)
  55620.  27h    BYTE    00h
  55621.  28h    WORD    data length
  55622.  2Ah    DWORD    pointer to data
  55623. ---if verb=1000h (Send_Error or MC_Send_Error)---
  55624.  26h    BYTE    request to send received (0=no, 1=yes)
  55625.  27h    BYTE    type (0=program, 1=SVC)
  55626.  28h    DWORD    00h
  55627.  2Ch    WORD    (MC_Send_Error only) LOG_DATA length
  55628.  2Eh    DWORD    (MC_Send_Error only) pointer to LOG_DATA
  55629. ---if verb=1200h (Test or MC_Test)---
  55630.  26h    BYTE    (MC_Test only) test (0=posted, 1=request_to_send received)
  55631.         Note: error code has different interpretations for:
  55632.             0 posted data
  55633.             1 posted not data (primary return code = 0)
  55634.             1 bad TP_ID (primary return code = 1)
  55635. ---if verb=1300h (Wait)---
  55636.  26h    BYTE    number of conversations to wait on
  55637.         Note: error codes have interpretations as for 1200h above
  55638.  
  55639. Values for primary return code:
  55640.  0000h    successful
  55641.  0001h    parameter check
  55642.  0002h    state check
  55643.  0003h    allocation error
  55644.  0005h    deallocate abended
  55645.  0006h    deallocate abended program
  55646.  0007h    deallocate abended SVC
  55647.  0008h    deallocate abended timer
  55648.  0009h    deallocate normal return
  55649.  000Ah    data posting blocked
  55650.  000Bh    posting not active
  55651.  000Ch    PROG_ERROR_NO_TRUNC
  55652.  000Dh    PROG_ERROR_TRUNC
  55653.  000Eh    PROG_ERROR_PURGING
  55654.  000Fh    CONV_FAILURE_RETRY
  55655.  0010h    CONV_FAILURE_NO_RETRY
  55656.  0011h    SVC_ERROR_NO_TRUNC
  55657.  0012h    SVC_ERROR_TRUNC
  55658.  0013h    SVC_ERROR_PURGING
  55659.  0014h    unsuccessful
  55660.  0018h    CNOS partner logical unit reject
  55661.  0019h    conversation type mixed
  55662.  F001h    APPC disabled
  55663.  F002h    APPC busy
  55664.  F003h    APPC abended
  55665.  F004h    incomplete
  55666.  
  55667. Values for error code:
  55668.  0001h bad TP ID
  55669.  0002h bad conversation ID
  55670.  0004h allocation error, no retry
  55671.  0005h allocation error, retry
  55672.  0006h data area crosses segment boundary
  55673.  0010h bad TPN length
  55674.  0011h bad CONV length
  55675.  0012h bad SYNC level
  55676.  0013h bad security selection
  55677.  0014h bad return control
  55678.  0015h SEC_TOKENS too big
  55679.  0016h PIP_LEN incorrect
  55680.  0017h no use of SNASVCMG
  55681.  0018h unknown partner mode
  55682.  0031h confirm: SYNC_NONE
  55683.  0032h confirm: bad state
  55684.  0033h confirm: NOT_LL_BDY
  55685.  0041h confirmed: bad state
  55686.  0051h deallocate: bad type
  55687.  0052h deallocate: flush bad state
  55688.  0053h deallocate: confirm bad state
  55689.  0055h deallocate: NOT_LL_BDY
  55690.  0057h deallocate: log LL_WRONG
  55691.  0061h flush: not send state
  55692.  0091h post on receipt: invalid length
  55693.  0092h post on receipt: not in receive state
  55694.  0093h post on receipt: bad fill
  55695.  00A1h prepare to receive:invalid type
  55696.  00A2h prepare to receive: unfinished LL
  55697.  00A3h prepare to receive: not in send state
  55698.  00B1h receive and wait: bad state
  55699.  00B2h receive and wait: NOT_LL_BDY
  55700.  00B5h receive and wait: bad fill
  55701.  00C1h receive immediate: not in receive state
  55702.  00C4h receive immediate: bad fill
  55703.  00E1h request to send: not in receive state
  55704.  00F1h send data: bad LL
  55705.  00F2h send data: not in send state
  55706.  0102h send error: log LL wrong
  55707.  0103h send error: bad type
  55708.  0121h test: invalid type
  55709.  0122h test: not in receive state
  55710. ----------6803-------------------------------
  55711. INT 68 - APPC/PC
  55712.     AH = 03h
  55713.     DS:DX -> control block (see below)
  55714.  
  55715. Format of control block:
  55716. Offset    Size    Description
  55717.  00h 12 BYTEs    reserved
  55718.  0Ch    WORD    verb (action)
  55719.  0Eh  6 BYTEs    0
  55720.  14h    DWORD    (high byte first) return code (see AH=01h)
  55721.  18h    WORD    0
  55722.  1Ah  8 BYTEs    (high byte first) logical unit ID
  55723. ---if verb=2400h (TP Started), control block continues---
  55724.  22h  8 BYTEs    (high byte first) TP ID
  55725. ---if verb=2800h (Get ALLOCATE), control block continues---
  55726.  22h    BYTE    type
  55727.         00h dequeue
  55728.         01h test
  55729.  23h    DWORD    pointer to CREATE_TP record
  55730. ---if verb=2A00h (Change Logical Unit). control block continues---
  55731.  22h    DWORD    pointer to CREATE_TP_EXIT routine
  55732.         FFFFFFFFh reject incoming ALLOCATEs
  55733.         00000000h queue ALLOCATEs
  55734.  26h    DWORD    00000000h
  55735.  2Ah    DWORD    pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh= don't log errors
  55736.  2Eh    DWORD    00000000h
  55737.  32h    BYTE    maximum TPs
  55738.  33h    BYTE    00h stop QUEUE_ALLOCATEs
  55739.         01h resume QUEUE_ALLOCATEs
  55740.  34h    DWORD    pointer to LU_LU_PASSWORD_EXIT routine, FFFFFFFFh = no exit
  55741.  38h    DWORD    00000000h
  55742. ----------6804-------------------------------
  55743. INT 68 - APPC/PC
  55744.     AH = 04h
  55745.     DS:DX -> control block (see below)
  55746.  
  55747. Format of control block:
  55748. Offset    Size    Description
  55749.  00h 12 BYTEs    reserved
  55750.  0Ch    WORD    verb (action)
  55751.         2500h TP_ENDED
  55752.         2900h TP_VALID
  55753.  0Eh  6 BYTEs    0
  55754.  14h    DWORD    (high byte first) return code (see AH=01h)
  55755.  18h    WORD    0
  55756.  1Ah  8 BYTEs    (high byte first) TP_ID
  55757.  22h    DWORD -> CREATE_TP record (only if verb = 2900h)
  55758. ----------6805-------------------------------
  55759. INT 68 - APPC/PC - TRANSFER MSG DATA
  55760.     AH = 05h
  55761.     DS:DX -> control block (see below)
  55762.  
  55763. Format of control block:
  55764. Offset    Size    Description
  55765.  00h 12 BYTEs    reserved
  55766.  0Ch    WORD    1C00h
  55767.  0Eh    BYTE    00h user defined
  55768.         01h NMVT
  55769.         02h alert subvectors
  55770.         03h PDSTATS subvectors
  55771.  0Fh  5 BYTEs    0
  55772.  14h    DWORD    (high byte first) return code (see AH=01h)
  55773.  18h 12 BYTEs    0
  55774.  24h    BYTE    if bit 0 clear, add correlation subvector
  55775.         if bit 1 clear, add product set ID subvector
  55776.         if bit 2 clear, do SYSLOG
  55777.         if bit 3 clear, send SSCP_PU_SESSION
  55778.  25h    BYTE    0
  55779.  26h    WORD    length of data
  55780.  28h  N BYTEs    data
  55781. ----------6806-------------------------------
  55782. INT 68 - APPC/PC - CHANGE NUMBER OF SESSIONS
  55783.     AH = 06h
  55784.     DS:DX -> control block (see below)
  55785.  
  55786. Format of control block:
  55787. Offset    Size    Description
  55788.  00h 12 BYTEs    reserved
  55789.  0Ch    WORD    1500h
  55790.  0Eh  6 BYTEs    0
  55791.  14h    WORD    (high byte first) primary return code (see AH=02h)
  55792.  16h    DWORD    (high byte first) secondary return code (see below, AH=01h)
  55793.  1Ah  8 BYTEs    (high byte first) logical unit ID
  55794.  22h  8 BYTEs    blanks
  55795.  2Ah  8 BYTEs    (high byte first) partner logical unit name
  55796.  32h  8 BYTEs    (high byte first) mode name
  55797.  3Ah    BYTE    bit 7: use MODE_NAME_SELECT_ALL rather than MODE_NAME
  55798.         bit 6: set negotiable values
  55799.  3Bh    BYTE    partner logical unit mode session limit
  55800.  3Ch    BYTE    minimum CONWINNERS_SOURCE
  55801.  3Dh    BYTE    maximum CONWINNERS_TARGET
  55802.  3Eh    BYTE    automatic activation
  55803.  3Fh    BYTE    0
  55804.  40h    BYTE    bit 7: drain target
  55805.         bit 6: drain source
  55806.         bit 5: target responsible, not source
  55807.  
  55808. Values for secondary return code (see also AH=01h):
  55809.   0000h accepted
  55810.   0001h negotiated
  55811.   0003h bad logical unit ID
  55812.   0004h allocation failure, no retry
  55813.   0005h allocation failure, retry
  55814.   0151h can't raise limits
  55815.   0153h all modes must reset
  55816.   0154h bad SNASVCMG limits
  55817.   0155h minimum greater than total
  55818.   0156h mode closed (prim return code = 1)
  55819.     CNOS mode closed (prim return code = 18h)
  55820.   0157h bad mode name (prim return code = 1)
  55821.     CNOS bad mode name (prim return code = 18h)
  55822.   0159h reset SNA drains
  55823.   015Ah single not SRC response
  55824.   015Bh bad partner logical unit
  55825.   015Ch exceeds maximum allowed
  55826.   015Dh change SRC drains
  55827.   015Eh logical unit detached
  55828.   015Fh CNOS command race reject
  55829. ----------6807-------------------------------
  55830. INT 68 - APPC/PC - PASSTHROUGH
  55831.     AH = 07h
  55832.     DS:DX -> control block (format depends on application subsystem)
  55833. SeeAlso: AH=FFh
  55834. ----------68FA-------------------------------
  55835. INT 68 - APPC/PC - ENABLE/DISABLE APPC
  55836.     AH = FAh
  55837.     AL bit 0 = 0 enable
  55838.            1 disable
  55839. ----------68FB-------------------------------
  55840. INT 68 - APPC/PC - CONVERT
  55841.     AH = FBh
  55842.     DS:DX -> control block (see below)
  55843.  
  55844. Format of control block:
  55845. Offset    Size    Description
  55846.  00h 12 BYTEs    reserved
  55847.  0Ch    WORD    1A00h
  55848.  0Eh  6 BYTEs    0
  55849.  14h    DWORD    (high byte first) return code
  55850.  18h    BYTE    conversion
  55851.            00h ASCII to EBCDIC
  55852.            01h EBCDIC to ASCII
  55853.  19h    BYTE    character set
  55854.            00h AE
  55855.            01h A
  55856.            02h G
  55857.  1Ah    WORD    length of string to convert
  55858.  1Ch    DWORD    pointer to source
  55859.  20h    DWORD    pointer to target
  55860. ----------68FC-------------------------------
  55861. INT 68 - APPC/PC - ENABLE/DISABLE MESSAGE TRACING
  55862.     AH = FCh
  55863.     AL = 00h disable tracing
  55864.        = 01h enable tracing
  55865.         DX = number of bytes to keep (0=all)
  55866. SeeAlso: AH=FDh
  55867. ----------68FD-------------------------------
  55868. INT 68 - APPC/PC - ENABLE/DISABLE API VERB TRACING
  55869.     AH = FDh
  55870.     AL = 00h disable tracing
  55871.          01h enable tracing
  55872. SeeAlso: AH=FCh,AH=FEh
  55873. ----------68FE-------------------------------
  55874. INT 68 - APPC/PC - SET TRACE DESTINATION
  55875.     AH = FEh
  55876.     AL = trace destinations
  55877.         bit 0  storage (DS:DX -> trace stats record)
  55878.         bit 1  display
  55879.         bit 2  file (trace written to file OUTPUT.PC)
  55880.         bit 3  printer
  55881. SeeAlso: AH=FDh
  55882.  
  55883. Format of Trace Statistics Record:
  55884. Offset    Size    Description
  55885.  00h    DWORD    pointer to storage trace buffer
  55886.  04h    WORD    max number of 80-byte records in trace
  55887.  06h    WORD    (high-order byte first!) current record number (must init to 0)
  55888.  08h    DWORD    (high-order byte first!) number of records written (init to 0)
  55889.  0Ch    DWORD    reserved
  55890. Note:    do not move record while trace is active
  55891. ----------68FF-------------------------------
  55892. INT 68 - APPC/PC - SET PASSTHROUGH
  55893.     AH = FFh
  55894.     DS:DX -> passthrough exit routine
  55895. SeeAlso: AH=07h
  55896. ----------69---------------------------------
  55897. INT 69 - Zenith AT BIOS - ???
  55898.    called by INT 09 handler
  55899. ----------690100-----------------------------
  55900. INT 69 - DECnet DOS CTERM - INSTALLATION CHECK
  55901.     AX = 0100h
  55902. Return: AL = FFh if present
  55903. SeeAlso: AX=010Fh
  55904. ----------690101-----------------------------
  55905. INT 69 - DECnet DOS CTERM - SEND BYTE
  55906.     AX = 0101h
  55907.     BL = character
  55908.     DX = session handle
  55909. Return: AH >= 80h on error
  55910. SeeAlso: AX=0102h
  55911. ----------690102-----------------------------
  55912. INT 69 - DECnet DOS CTERM - READ BYTE
  55913.     AX = 0102h
  55914.     DX = session handle
  55915. Return: AH >= 80h on error
  55916.     AH < 80h if successful
  55917.         AL = character
  55918. SeeAlso: AX=0101h
  55919. ----------690103-----------------------------
  55920. INT 69 - DECnet DOS CTERM - STATUS
  55921.     AX = 0103h
  55922.     DX = session handle
  55923. Return: AH status flags
  55924.         bit 7 session has been aborted
  55925.         6 DECnet error
  55926.         1 trace data available
  55927.         0 receive data available
  55928.     AL = reason code if DECnet error
  55929.         00h normal disconnect
  55930.         01h unknown message from host
  55931.         02h protocol violation from host
  55932.         03h could not process the initiate message
  55933.         04h error receiving message from host
  55934.         05h error sending message to host
  55935.         06h error checking for message from host
  55936.         07h remote system does not support CTERM
  55937.         08h remote system does not support correct protocol version
  55938.         09h did not receive BIND message from host
  55939.         0Ah could not send BIND message to host
  55940.         0Bh no more sessions available
  55941.         0Ch session does not exist
  55942.         0Dh not enough memory to complete operation
  55943.         0Eh connection has broken
  55944. SeeAlso: AX=0104h
  55945. ----------690104-----------------------------
  55946. INT 69 - DECnet DOS CTERM - DECnet STATUS
  55947.     AX = 0104h
  55948.     DX = session handle
  55949. Return: AX = reason code (see AX=0103h)
  55950. Note:    use this call when AX=0103h returns a DECnet error
  55951. SeeAlso: AX=0103h
  55952. ----------690105-----------------------------
  55953. INT 69 - DECnet DOS CTERM - OPEN SESSION
  55954.     AX = 0105h
  55955.     DS:BX -> ASCIZ node name
  55956.     ES:DX -> buffer for session control block (see INT 6A/AH=D0h)
  55957. Return: AX <= 0 on error
  55958.     AX > 0 session handle
  55959. SeeAlso: AX=0103h,AX=0106h,AX=010Ah
  55960. ----------690106-----------------------------
  55961. INT 69 - DECnet DOS CTERM - CLOSE SESSION
  55962.     AX = 0106h
  55963.     DX = session handle
  55964. Return: AH = 00h good close
  55965.        other error code (see AX=0103h)
  55966. SeeAlso: AX=0103h,AX=0105h
  55967. ----------69010A-----------------------------
  55968. INT 69 - DECnet DOS CTERM - GET SESSION CONTROL BLOCK SIZE
  55969.     AX = 010Ah
  55970. Return: AX = length of session control block in bytes
  55971. SeeAlso: AX=0105h
  55972. ----------69010B-----------------------------
  55973. INT 69 - DECnet DOS CTERM - GET DECnet SOCKET
  55974.     AX = 010Bh
  55975.     DX = session handle
  55976. Return: AX > 0    DECnet socket for the session
  55977.        = 0    no match for handle
  55978. ----------69010F-----------------------------
  55979. INT 69 - DECnet DOS CTERM - DEINSTALL CTERM
  55980.     AX = 010Fh
  55981. Return: AH = 00h succesful uninstall
  55982.        other error code
  55983. Note:    CTERM must have been the last TSR loaded in order to deinstall it
  55984. SeeAlso: AX=0100h
  55985. ----------690A-------------------------------
  55986. INT 69 - DECnet DOS 2.1+ - DATA LINK LAYER
  55987.     AH = 0Ah
  55988.     AL = function
  55989.         00h initialize
  55990.         01h open portal
  55991.         02h close portal
  55992.         03h enable multicast address
  55993.         04h disable multicast address
  55994.         05h transmit
  55995.         06h request transmit buffer
  55996.         07h deallocate transmit buffer
  55997.         08h read channel status
  55998.         09h read datalink portal list
  55999.         0Ah read information about a datalink portal
  56000.         0Bh read and/or clear counters
  56001.         0Ch request to boot from a network server
  56002.         0Dh enable Ethernet channel
  56003.         0Eh disable Ethernet channel
  56004.         0Fh start MOP/send a System ID message
  56005.         10h stop MOP
  56006.         11h get DECPARM
  56007.         12h set DECPARM
  56008.         13h external loopback
  56009.     ES:BX -> Datalink Communication Block
  56010. Return: AX = status
  56011.         00h successful
  56012.         01h hardware failed to initialize
  56013.         02h channel state was not off (must be off to execute that command)
  56014.         03h channel state is off (must be on to execute that command)
  56015.         04h address not set
  56016.         05h hardware missing
  56017.         06h buffer too small
  56018.         07h no more buffers available
  56019.         08h no more resources available
  56020.         09h promiscuous receiver active
  56021.         0Ah non exclusive
  56022.         0Bh unrecognized portal
  56023.         0Ch protocol type in use
  56024.         0Dh not a valid Multicast address
  56025.         0Eh outstanding calls
  56026.         0Fh hardware doesn't support receiving bad frames
  56027.         10h none outstanding
  56028.         11h no events
  56029.         12h broken
  56030.         13h buffer quota exceeded
  56031.         14h already initialized
  56032.         15h loopback failure
  56033. SeeAlso: INT 6D"DECnet"
  56034.  
  56035. Format of Datalink Communication Block
  56036. Offset    Type    Description
  56037.  00h    WORD    portal ID
  56038.  02h  6 BYTEs    source address
  56039.  08h  6 BYTEs    destination address
  56040.  0Eh    DWORD    buffer pointer
  56041.  12h    WORD    buffer length
  56042.  14h    WORD    operation
  56043.  16h    BYTE    pad flag (used on open)
  56044.             00h no pad
  56045.             01h pad
  56046.  17h    BYTE    mode flag (used on open)
  56047.             00h 802.3
  56048.             01h Ethernet
  56049.             02h promiscuous
  56050.  18h    DWORD    line status change function
  56051.  1Ch    DWORD    received data function
  56052.  20h    DWORD    transmitted data function
  56053.  24h    BYTE    maximum outstanding transmits/receives
  56054.  25h  2 BYTEs    protocol type
  56055.  27h    WORD    buffers lost
  56056. ----------694001-----------------------------
  56057. INT 69 - 10NET v5.0 - SYSSVC.COM - ???
  56058.     AX = 4001h
  56059. Return: CF clear
  56060.     AX = 0000h
  56061.     ES:SI -> ???
  56062. Note:    INT 69 is the default, and may be set to any interrupt from 60h-7Fh;
  56063.       the signature "SYSV" immediately before the interrupt handler serves
  56064.       as the installation check
  56065. SeeAlso: AX=4002h
  56066. ----------694002-----------------------------
  56067. INT 69 - 10NET v5.0 - SYSSVC.COM - ???
  56068.     AX = 4002h
  56069.     ???
  56070. Return: ???
  56071. Note:    INT 69 is the default, and may be set to any interrupt from 60h-7Fh;
  56072.       the signature "SYSV" immediately before the interrupt handler serves
  56073.       as the installation check
  56074. ----------694101-----------------------------
  56075. INT 69 - 10NET v5.0 - SYSSVC.COM - ???
  56076.     AX = 4101h
  56077. Return: CF clear
  56078.     ES:SI -> ???
  56079. SeeAlso: AX=4102h,AX=4103h,AX=4104h
  56080. ----------694102-----------------------------
  56081. INT 69 - 10NET v5.0 - SYSSVC.COM - ???
  56082.     AX = 4102h
  56083.     ???
  56084. Return: ???
  56085. ----------694103-----------------------------
  56086. INT 69 - 10NET v5.0 - SYSSVC.COM - ???
  56087.     AX = 4103h
  56088.     ???
  56089. Return: ???
  56090. ----------694104-----------------------------
  56091. INT 69 - 10NET v5.0 - SYSSVC.COM - ???
  56092.     AX = 4104h
  56093.     ???
  56094. Return: ???
  56095. ----------6942-------------------------------
  56096. INT 69 - 10NET v5.0 - SYSSVC.COM - ???
  56097.     AH = 42h
  56098.     AL = function (01h-14h)
  56099.     ???
  56100. Return: ???
  56101. ----------6943-------------------------------
  56102. INT 69 - 10NET v5.0 - SYSSVC.COM - ???
  56103.     AH = 43h
  56104.     AL = function (01h-05h)
  56105.     ???
  56106. Return: ???
  56107. ----------6944-------------------------------
  56108. INT 69 - 10NET v5.0 - SYSSVC.COM - ???
  56109.     AH = 44h
  56110.     AL = function (01h-03h)
  56111.     ???
  56112. Return: ???
  56113. ----------6949-------------------------------
  56114. INT 69 - 10NET v5.0 - SYSSVC.COM - BUG
  56115.     AH = 49h
  56116. Note:    due to a fencepost error, this function branches to hyperspace
  56117. SeeAlso: AX=4001h,AH=FFh
  56118. ----------696996-----------------------------
  56119. INT 69 - ISR.COM v1.00 - SPECIFY INTERRUPT HANDLER
  56120.     AX = 6996h
  56121.     DS:DX -> interrupt handler or 0000h:0000h to disable
  56122. Return: AX = 9669h
  56123. Notes:    ISR (Interrupt Service Reflector) is a TSR by Rich Bono which permits
  56124.       a program to provide hardware interrupt handlers even while being
  56125.       debugged with a debugger that swaps interrupt vectors during
  56126.       debugging.
  56127.     the interrupt vector which is to be reflected is set at installation
  56128.       time and cannot be changed
  56129. ----------69FF-------------------------------
  56130. INT 69 - 10NET v5.0 - SYSSVC.COM - SIGNAL SYSTEM ERROR
  56131.     AH = FFh
  56132. Return: never???
  56133. Notes:    displays "System Error" message and register dump, then halts system
  56134.     INT 69 is the default, and may be set to any interrupt from 60h-7Fh;
  56135.       the signature "SYSV" immediately before the interrupt handler serves
  56136.       as the installation check
  56137. SeeAlso: AX=4001h,AH=49h
  56138. ----------6A---------------------------------
  56139. INT 6A - OPTHELP.COM
  56140. Notes:    OPTHELP is an optionally-resident help system for SLR Systems's OPTASM
  56141.       assembler
  56142.     may be configured to use any interrupt from 60h to 7Fh (default 6Ah)
  56143. ----------6A---------------------------------
  56144. INT 6A - DECnet DOS - LOCAL AREA TRANSPORT PROGRAM
  56145. Note:    the installation check consists of testing for a signature area
  56146.       immediately preceding the interrupt handler
  56147. SeeAlso: INT 6B"DECnet",INT 6D"DECnet"
  56148.  
  56149. Format of signature area:
  56150. Offset    Size    Description
  56151.  -5    BYTE    major version number
  56152.  -4    BYTE    minor version number
  56153.  -3   3 BYTEs    signature (ASCII "LAT")
  56154. ----------6A01--DHFF-------------------------
  56155. INT 6A - DECnet DOS LOCAL AREA TRANSPORT - SEND BYTE
  56156.     AH = 01h
  56157.     DH = FFh
  56158.     AL = character
  56159.     DL = handle
  56160. Return: AH >= 80h on error
  56161. SeeAlso: AH=02h
  56162. ----------6A02--DHFF-------------------------
  56163. INT 6A - DECnet DOS LOCAL AREA TRANSPORT - READ BYTE
  56164.     AH = 02h
  56165.     DH = FFh
  56166.     DL = handle
  56167. Return: AH < 80h if successful
  56168.         AL = character
  56169.     AH >= 80h on error
  56170. SeeAlso: AH=01h
  56171. ----------6A03--DHFF-------------------------
  56172. INT 6A - DECnet DOS LOCAL AREA TRANSPORT - STATUS
  56173.     AH = 03h
  56174.     DH = FFh
  56175.     DL = handle
  56176. Return: AH = status flags
  56177.         bit 5 transmit buffer empty
  56178.         3 session in start state
  56179.         2 session not active
  56180.         1 unable to queue transmit data
  56181.         0 receive data available
  56182. ----------6AD0--DHFF-------------------------
  56183. INT 6A - DECnet DOS LOCAL AREA TRANSPORT - OPEN SESSION
  56184.     AH = D0h
  56185.     DH = FFh
  56186.     AL = FFh no password
  56187.        = 0Fh password at ES:DI
  56188.     ES:BX -> LAT session control block (see below)
  56189.     ES:DI -> 16-byte blank-padded password
  56190. Return: AH = 00h success
  56191.         DL = handle
  56192. SeeAlso: AX=D000h
  56193.  
  56194. Format of LAT Session Control Block:
  56195. Offset    Size    Description
  56196.  00h 18 BYTEs    service name
  56197.  12h 18 BYTEs    node name (future use)
  56198.  24h 18 BYTEs    port name (future use)
  56199.  36h    DWORD    -> session stopped post routine
  56200.  3Ah    DWORD    -> service table overflow post routine
  56201.  3Eh    DWORD    -> transmit post routine
  56202.  42h    DWORD    -> receive post routine
  56203.  46h    WORD    session status
  56204.         04h circuit failure
  56205.         08h stop slot received
  56206.  48h    WORD    slot state (LAT driver use)
  56207.  4Ah    WORD    local credits (LAT driver use)
  56208.  4Ch    DWORD    -> VCB (LAT driver use)
  56209.  50h    WORD    backward slot (LAT driver use)
  56210.  52h    WORD    forward slot (LAT driver use)
  56211.  54h    WORD    remote slot ID (LAT driver use)
  56212.  56h    WORD    local slot ID (LAT driver use)
  56213.  58h    WORD    slot byte count (LAT driver use)
  56214.  5Ah    BYTE    remote credits (LAT driver use)
  56215.  5Bh 255 BYTEs    transmitted data slot
  56216. 15Ah    BYTE    number of receive data slots (4 recommended)
  56217. 15Bh    BYTE    number of occupied slots
  56218. 15Ch    BYTE    index of next receive slot to use
  56219. 15Dh    BYTE    index of current receive slot
  56220. 15Eh    WORD    pointer to first received character
  56221. 160h  N WORDs    pointers to receive slots (buffers); each is 259 bytes
  56222. Note:    set post routines to 0000h:0000h if polled operation will be used
  56223. ----------6AD000DHFF-------------------------
  56224. INT 6A - DECnet DOS LOCAL AREA TRANSPORT - CLOSE SESSION
  56225.     AX = D000h
  56226.     DH = FFh
  56227.     DL = handle
  56228. Return: AX = 0000h successful
  56229.        = 0001h no such session
  56230.        = 0002h session not running, try again later
  56231. SeeAlso: AH=D0h
  56232. ----------6AD100DHFF-------------------------
  56233. INT 6A - DECnet DOS LOCAL AREA TRANSPORT - SEND BREAK
  56234.     AX = D100h
  56235.     DH = FFh
  56236.     DL = handle
  56237. Return: AX = 0000h if successful
  56238.     AH bit 7 set if unable to send break
  56239. ----------6AD300DHFF-------------------------
  56240. INT 6A - DECnet DOS LOCAL AREA TRANSPORT - RESET LAT COUNTERS
  56241.     AX = D300h
  56242.     DH = FFh
  56243. SeeAlso: AX=D400h
  56244. ----------6AD400DHFF-------------------------
  56245. INT 6A - DECnet DOS LOCAL AREA TRANSPORT - COPY LAT COUNTERS
  56246.     AX = D400h
  56247.     DH = FFh
  56248.     CX = buffer size
  56249.     ES:BX -> buffer for LAT counters
  56250. Return: AX = 0000h counters copied into buffer
  56251.        = FFFFh buffer too small
  56252. SeeAlso: AX=D300h
  56253. ----------6AD500DHFF-------------------------
  56254. INT 6A - DECnet DOS LOCAL AREA TRANSPORT - GET NEXT LAT SERVICE NAME
  56255.     AX = D500h
  56256.     DH = FFh
  56257.     ES:BX -> 17-byte buffer for name
  56258. Return: AH = 00h if successful
  56259.        ES:BX buffer filled
  56260.     AX = FFFFh if end of table or no name available
  56261. Notes:    use this function to get the names of the hosts on the network
  56262.     successive calls are necessary to get all names
  56263. SeeAlso: AX=D600h
  56264. ----------6AD600DHFF-------------------------
  56265. INT 6A - DECnet DOS LOCAL AREA TRANSPORT - LAT SERVICE TABLE RESET
  56266.     AX = D600h
  56267.     DH = FFh
  56268. Return: AX = number of service table entries
  56269.     BX = 0000h service table has not overflowed
  56270.        = FFFFh service table has overflowed
  56271. SeeAlso: AX=D500h
  56272. ---------------------------------------------
  56273. INT 6B - DECnet DOS - PORT DRIVER
  56274. Note:    the installation check consists of testing for a signature area
  56275.       immediately preceding the interrupt handler
  56276. SeeAlso: INT 6A"DECnet",INT 6C"DECnet"
  56277.  
  56278. Format of signature area:
  56279. Offset    Size    Description
  56280.  -5    BYTE    major version number
  56281.  -4    BYTE    minor version number
  56282.  -3   3 BYTEs    signature (ASCII "PDV")
  56283. ----------6B0000-----------------------------
  56284. INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - BUFFERED WRITE
  56285.     AX = 0000h
  56286.     CX = length
  56287.     ES:BX -> buffer
  56288. Return: CX = number of bytes written
  56289. Note:    also supported by NPC NCSI
  56290. SeeAlso: AX=0100h,AH=18h,INT 14/AH=19h
  56291. ----------6B0100-----------------------------
  56292. INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - BUFFERED READ
  56293.     AX = 0100h
  56294.     CX = length of buffer
  56295.     ES:BX -> buffer
  56296. Return: CX = number of bytes read
  56297. Note:    also supported by NPC NCSI
  56298. SeeAlso: AX=0000h,AH=19h,INT 14/AH=18h,INT 14/AX=FF02h
  56299. ----------6B02-------------------------------
  56300. INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - INSTALL CHECK
  56301.     AH = 02h
  56302.     AL nonzero
  56303. Return: AL = 00h if present and OK
  56304. Note:    also supported by NPC NCSI
  56305. SeeAlso: AX=0700h
  56306. ----------6B0600-----------------------------
  56307. INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - CONTROL
  56308.     AX = 0600h
  56309.     CX = command
  56310.         02h send break
  56311.         04h disconnect
  56312.         06h hold
  56313. Note:    also supported by NPC NCSI
  56314. ----------6B0700-----------------------------
  56315. INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - GET STATUS
  56316.     AX = 0700h
  56317. Return: CH <> 00h if connection active
  56318. Note:    also supported by NPC NCSI
  56319. SeeAlso: AH=02h,AH=10h
  56320. ----------6B10-------------------------------
  56321. INT 6B - NPC NCSI EXTENDED SERIAL I/O - GET STATUS
  56322.     AH = 10h
  56323.     ???
  56324. Return: ???
  56325. SeeAlso: AX=0700h,AH=12h,AH=1Fh
  56326. ----------6B11-------------------------------
  56327. INT 6B - NPC NCSI EXTENDED SERIAL I/O - ALLOCATE A VIRTUAL CIRCUIT
  56328.     AH = 11h
  56329.     ???
  56330. Return: ???
  56331. SeeAlso: AH=12h,AH=15h,AH=16h,AH=17h,AH=18h
  56332. ----------6B12-------------------------------
  56333. INT 6B - NPC NCSI EXTENDED SERIAL I/O - VIRTUAL CIRCUIT STATUS
  56334.     AH = 12h
  56335.     ???
  56336. Return: ???
  56337. SeeAlso: AH=10h,AH=15h,AH=1Ah,AH=1Bh,AH=1Fh
  56338. ----------6B13-------------------------------
  56339. INT 6B - NPC NCSI EXTENDED SERIAL I/O - SET/RETRIEVE REQUEST/REPLY SERVICE NAME
  56340.     AH = 13h
  56341.     ???
  56342. Return: ???
  56343. SeeAlso: AH=14h,AH=15h
  56344. ----------6B14-------------------------------
  56345. INT 6B - NPC NCSI EXTENDED SERIAL I/O - SET/RETRIEVE SERVICE ADDRESS
  56346.     AH = 14h
  56347.     ???
  56348. Return: ???
  56349. SeeAlso: AH=13h,AH=15h,AH=21h
  56350. ----------6B15-------------------------------
  56351. INT 6B - NPC NCSI EXTENDED SERIAL I/O - SET/RETRIEVE VIRTUAL CIRCUIT CONFIG
  56352.     AH = 15h
  56353.     ???
  56354. Return: ???
  56355. SeeAlso: AH=13h,AH=14h
  56356. ----------6B16-------------------------------
  56357. INT 6B - NPC NCSI EXTENDED SERIAL I/O - LOG AND/OR INITIALIZE VIRTUAL CIRCUIT
  56358.     AH = 16h
  56359.     ???
  56360. Return: ???
  56361. SeeAlso: AH=11h,AH=12h,AH=17h
  56362. ----------6B17-------------------------------
  56363. INT 6B - NPC NCSI EXTENDED SERIAL I/O - DISCONNECT A VIRTUAL CIRCUIT
  56364.     AH = 17h
  56365.     ???
  56366. Return: ???
  56367. SeeAlso: AH=11h,AH=16h
  56368. ----------6B18-------------------------------
  56369. INT 6B - NPC NCSI EXTENDED SERIAL I/O - WRITE DATA ON A VIRTUAL CIRCUIT
  56370.     AH = 18h
  56371.     ???
  56372. Return: ???
  56373. SeeAlso: AX=0000h,AH=12h,AH=19h
  56374. ----------6B19-------------------------------
  56375. INT 6B - NPC NCSI EXTENDED SERIAL I/O - READ DATA ON A VIRTUAL CIRCUIT
  56376.     AH = 19h
  56377.     ???
  56378. Return: ???
  56379. SeeAlso: AX=0100h,AH=12h,AH=18h
  56380. ----------6B1A-------------------------------
  56381. INT 6B - NPC NCSI EXTENDED SERIAL I/O - RECEIVE STATUS
  56382.     AH = 1Ah
  56383.     ???
  56384. Return: ???
  56385. SeeAlso: AH=12h,AH=1Bh
  56386. ----------6B1B-------------------------------
  56387. INT 6B - NPC NCSI EXTENDED SERIAL I/O - TRANSMIT STATUS
  56388.     AH = 1Bh
  56389.     ???
  56390. Return: ???
  56391. SeeAlso: AH=12h,AH=1Ah
  56392. ----------6B1C-------------------------------
  56393. INT 6B - NPC NCSI EXTENDED SERIAL I/O - RECEIVE BUFFER CONTROL
  56394.     AH = 1Ch
  56395.     ???
  56396. Return: ???
  56397. SeeAlso: AH=1Dh,AH=1Eh
  56398. ----------6B1D-------------------------------
  56399. INT 6B - NPC NCSI EXTENDED SERIAL I/O - TRANSMIT BUFFER CONTROL
  56400.     AH = 1Dh
  56401.     ???
  56402. Return: ???
  56403. SeeAlso: AH=1Ch,AH=1Eh
  56404. ----------6B1E-------------------------------
  56405. INT 6B - NPC NCSI EXTENDED SERIAL I/O - ISSUE CONTROL REQUEST
  56406.     AH = 1Eh
  56407.     ???
  56408. Return: ???
  56409. SeeAlso: AH=1Ch,AH=1Dh
  56410. ----------6B1F-------------------------------
  56411. INT 6B - NPC NCSI EXTENDED SERIAL I/O - EXTERNAL STATUS
  56412.     AH = 1Fh
  56413.     ???
  56414. Return: ???
  56415. SeeAlso: AH=10h,AH=12h
  56416. ----------6B21-------------------------------
  56417. INT 6B - NPC NCSI EXTENDED SERIAL I/O - QUERY NAME SERVICE
  56418.     AH = 21h
  56419.     ???
  56420. Return: ???
  56421. SeeAlso: AH=14h
  56422. ----------6B6B-------------------------------
  56423. INT 6B - Tandy SCHOOLMATE PLUS - API
  56424.     AH = 6Bh
  56425.     AL = E0h to FFh
  56426. ----------6B---------------------------------
  56427. INT 6B - VIRUS - "Saddam" - ???
  56428. SeeAlso: INT 21/AX=FFFFh,INT 61"VIRUS",INT 70"VIRUS"
  56429. ----------6C---------------------------------
  56430. INT 6C - system resume vector (CONVERTIBLE)
  56431. ----------6C---------------------------------
  56432. INT 6C - DOS 3.2 Realtime Clock update
  56433. ----------6C---------------------------------
  56434. INT 6C - DECnet DOS network scheduler
  56435. Notes:    the installation check consists of testing for a signature area
  56436.       immediately preceding the interrupt handler
  56437.     also supported by DEC Pathworks for DOS
  56438. SeeAlso: INT 6B"DECnet",INT 6D"DECnet",INT 6E"DECnet"
  56439.  
  56440. Format of signature area:
  56441. Offset    Size    Description
  56442.  -5    BYTE    major version number
  56443.  -4    BYTE    minor version number
  56444.  -3   3 BYTEs    signature (ASCII "SCH")
  56445. ----------6D---------------------------------
  56446. INT 6D - VGA - internal
  56447. Note:    used by IBM, Paradise, Video7, and NCR
  56448. ----------6D---------------------------------
  56449. INT 6D - ATI VGA Wonder - VIDEO BIOS ENTRY POINT
  56450.    points at the original INT 10 entry point set up by the ATI BIOS
  56451. SeeAlso: INT 10
  56452. ----------6D---------------------------------
  56453. INT 6D - DECnet DOS (before 2.1) - DATA LINK LAYER PROGRAM
  56454.     AH = function
  56455.     ???
  56456. Return: ???
  56457. Note:    the installation check consists of testing for a signature area
  56458.       immediately preceding the interrupt handler
  56459. SeeAlso: INT 69/AH=0Ah,INT 6C"DECnet",INT 6E"DECnet"
  56460.  
  56461. Format of signature area:
  56462. Offset    Size    Description
  56463.  -5    BYTE    major version number
  56464.  -4    BYTE    minor version number
  56465.  -3   3 BYTEs    signature (ASCII "SCH")
  56466. ----------6E---------------------------------
  56467. INT 6E - DECnet DOS - DECnet NETWORK PROCESS API
  56468. Notes:    this is the main DECnet DOS access, and is described in Digital manual
  56469.       AA-EB46B-TV ("DECnet-DOS Programmer's Reference Manual")
  56470.     there is a signature/data area immediately prior to the interrupt
  56471.       handler which may be used as an installation check
  56472.  
  56473. Format of signature area:
  56474. Offset    Size    Description
  56475.  -5    BYTE    major version number
  56476.  -4    BYTE    minor version number
  56477.  -3   3 BYTEs    signature (ASCII "DNP")
  56478. ----------6F22--BP0012-----------------------
  56479. INT 6F - HP ES-12 EXTENDED BIOS - READ CMOS MEMORY
  56480.     AH = 22h
  56481.     BP = 0012h
  56482.     BL = address of CMOS byte to read
  56483. Return: AH = status
  56484.     AL = byte read
  56485.     BP, DS destroyed
  56486. SeeAlso: BP=0012h/AH=24h
  56487. ----------6F24--BP0012-----------------------
  56488. INT 6F - HP ES-12 EXTENDED BIOS - WRITE CMOS MEMORY
  56489.     AH = 24h
  56490.     BP = 0012h
  56491.     BL = address of CMOS byte to write
  56492.     AL = new value
  56493. Return: AH = status
  56494.     BP, DS destroyed
  56495. SeeAlso: BP=0012h/AH=22h
  56496. ----------6F---------------------------------
  56497. INT 6F - Novell NetWare - PCOX API (3270 PC terminal interface)
  56498. ----------6F00-------------------------------
  56499. INT 6F - 10NET - LOGIN
  56500.     AH = 00h
  56501.     DS:DX -> login record (see below)
  56502. Return: CL = security level
  56503.     AX = status (see below)
  56504. SeeAlso: AH=01h,INT 21/AX=4402h"10MEMMGR"
  56505.  
  56506. Format of login record:
  56507. Offset    Size    Description
  56508.  00h  8 BYTEs    user name
  56509.  08h  8 BYTEs    password
  56510.  10h 12 BYTEs    name of SuperStation
  56511.  
  56512. Values for status:
  56513.         0000h successful
  56514.         01FFh time out on response
  56515.         02FFh network (hardware) error
  56516.         03FFh invalid password
  56517.         04FFh local resource not available
  56518.         05FFh server resource not available
  56519.         06FFh already logged in under different name
  56520.         07FFh login security failure (node)
  56521.         08FFh not logged in
  56522.         09FFh position calc error
  56523.         0AFFh receive subfunction not = send subfunction (i.e. read, write)
  56524.         0BFFh request function not in range
  56525.         0CFFh no more server file handle entries left
  56526.         0DFFh no more shared file table entries left
  56527.         0EFFh no more user file handle entries left
  56528.         0FFFh chat permit not on
  56529.         10FFh not a server on request
  56530.         11FFh no transporter board error
  56531.         12FFh time out on send
  56532.         13FFh item not found (spool item not on queue)
  56533.         14FFh DOS access incompatible
  56534.         15FFh record already locked
  56535.         16FFh invalid parameter
  56536.         17FFh record lock time out error
  56537.         18FFh currently spooling to named device
  56538.         19FFh dropped receive message (throttle)
  56539.         1AFFh open sharing violation
  56540.         1BFFh no more tuf entries left
  56541.         1CFFh not file owner on open
  56542.         1DFFh read security not passed
  56543.         1EFFh write security not passed
  56544.         1FFFh group security not passed
  56545.         20FFh security file failure
  56546.         21FFh activity file failure
  56547.         22FFh spool cntrl file failure
  56548.         23FFh device not mounted (spooling)
  56549.         24FFh spool file has not been terminated
  56550.         25FFh device not mounted or is not being shared
  56551.         26FFh duplicate node id
  56552.         27FFh file not found error
  56553.         28FFh no more files
  56554.         29FFh unknown internal system error
  56555.         2AFFh print queue is full or corrupted
  56556.         2BFFh invalid function
  56557.         2CFFh invalid handle
  56558.         2DFFh too many files opened
  56559.         2EFFh path not found
  56560.         2FFFh named file is active
  56561. /* I've gotten one submission which says FFxxh, and another with xxFFh */
  56562. /* I don't know which way around these should be, does somebody else know? */
  56563.         FF01h timeout
  56564.         FF02h network error
  56565.         FF03h invalid password
  56566.         FF04h no local buffer
  56567.         FF05h superstation not available
  56568.         FF06h node already logged in
  56569.         FF07h login not valid from this node
  56570.         FF08h node ID already in use
  56571.         FF16h invalid parameter (bad length, invalid node ID, etc)
  56572.         FF17h record locked by another user
  56573.         FF18h sent message has been dropped
  56574. ----------6F01-------------------------------
  56575. INT 6F - 10NET - LOGOFF
  56576.     AH = 01h
  56577.     DS:DX -> superstation ID or nulls (12 bytes)
  56578. Return: CX = number of files closed
  56579.     AX = status (see AH=00h)
  56580.         FF08h superstation ID not already logged in
  56581. SeeAlso: AH=00h
  56582. ----------6F02-------------------------------
  56583. INT 6F - 10NET - STATUS OF NODE
  56584.     AH = 02h
  56585.     DS:DX -> 512-byte status record (see below)
  56586. Return: CF set on error
  56587.         AX = error code (see AH=00h)
  56588.     CF clear if successful
  56589.  
  56590. Format of node status record:
  56591. Offset    Size    Description
  56592.  00h  8 BYTEs    user name (0 if none)
  56593.  08h    BYTE    station type
  56594.            00h workstation
  56595.            01h superstation
  56596.            02h gateway station
  56597.            03h gateway active
  56598.            04h logged into multiple superstations
  56599.            05h reserved
  56600.  09h 24 BYTEs    list of superstations logged into more than one superstation
  56601.  21h 12 BYTEs    node ID
  56602.  2Dh    WORD    message count for this station (send for user node, receive for
  56603.         superstations)
  56604. ---for superstations only---
  56605.  2Fh    WORD    drives allocated (bit 0=A:, bit 1=B:,...)
  56606.  31h    BYTE    user service flag
  56607.         bit 7: gate
  56608.             6: print permit on
  56609.             4: SUBMIT is on
  56610.             3: mail waiting for node
  56611.             2: calendar waiting for you
  56612.             1: news waiting for you
  56613.             0: mail waiting for you
  56614.  32h    BYTE    printers allocated (bit 0=LPT1,...)
  56615.  33h    BYTE    number of unprinted spool files
  56616.  34h    BYTE    number of opened files
  56617.  35h    BYTE    number of logged on nodes
  56618.  36h    BYTE    primary drive (1=A:)
  56619.  37h    BYTE    reserved
  56620.  38h  N BYTEs    list of logged on node IDs (each 12 bytes, max 37 IDs)
  56621. 1F4h  3 BYTEs    time: sec/min/hrs
  56622. 1F7h  3 BYTEs    date: day/mon/year-1980
  56623. ----------6F03-------------------------------
  56624. INT 6F - 10NET - GET ADDRESS OF CONFIGURATION TABLE
  56625.     AH = 03h
  56626.     DS:DI -> node ID (optional)
  56627. Return: ES:BX -> configuration table 
  56628. SeeAlso: AH=13h
  56629.  
  56630. Format of configuration table:
  56631. Offset    Size    Description
  56632. -41    WORD    local device table address
  56633. -39    WORD    extended network error mapping table address
  56634. -37    WORD    shared device table address
  56635. -35    WORD    mounted device table address
  56636. -33    BYTE    receive buffer counter
  56637. -32    BYTE    collect buffer counter
  56638. -31    WORD    TUF address
  56639. -29    BYTE    enable flag
  56640. -28    BYTE    FCB keep flag
  56641. -27    WORD    reserved
  56642. ---up to here, 10NET v3.3---
  56643. -25    WORD    count of dropped Send6F
  56644. -23    WORD    buffer start address
  56645. -21    WORD    comm driver base address
  56646. -19    WORD    send/receive retry count
  56647. -17    BYTE    number of 550ms loops before timeout
  56648. -16    WORD    UFH address
  56649. -14    WORD    CDIR address
  56650. -12    WORD    LTAB address
  56651. -10    WORD    SFH address
  56652. -8    WORD    FTAB address
  56653. -6    WORD    RLTAB address
  56654. -4    WORD    SMI address
  56655. -2    WORD    NTAB address
  56656.  00h    WORD    address of first CT_DRV
  56657.  02h    BYTE    number of DRV entries
  56658.  03h  8 BYTEs    login name
  56659.  0Bh 12 BYTEs    node ID (blank-padded)
  56660.  17h  6 BYTEs    node address
  56661.  1Dh    BYTE    flag
  56662.  1Eh    BYTE    CT_CFLG (chat permit)
  56663.         bit 1: sound bell
  56664.         bit 0: CHAT permit
  56665.  1Fh    BYTE    CT_PSFLG
  56666.         bit 5: PRINT permit
  56667.         bit 4: KB initiated
  56668.         bit 3: CHAT called FOXPTRM
  56669.         bit 2: SUBMIT active
  56670.         bit 1: SUBMIT received
  56671.         bit 0: SUBMIT permit
  56672.  20h    BYTE    in 10Net flag
  56673.  21h    WORD    receive message count
  56674.  23h    WORD    send message count
  56675.  25h    WORD    retry count
  56676.  27h    WORD    failed count
  56677.  29h    WORD    driver errors
  56678.  2Bh    WORD    dropped responses/CHATs
  56679.  2Dh  9 BYTEs    LIST ID/NTAB address (3 entries--LPT1-3)
  56680.  36h  6 BYTEs    AUX ID/NTAB address (2 entries--COM1-2)
  56681.  3Ch    BYTE    active CB channel
  56682.  3Dh    BYTE    received 6F messages on queue
  56683.  3Eh  9 BYTEs    activity counters for channels 1-9
  56684. ---beyond here, 10NET v3.3---
  56685.  47h    BYTE    bit 0 = RS232 gate
  56686.             1 = Send6F gate (user set)
  56687.  48h    DWORD    pointer into gate (user set)
  56688.  4Ch    DWORD    pointer into 10Net send
  56689.  50h  N WORDs    addresses of timer blocks
  56690. ----------6F04-------------------------------
  56691. INT 6F - 10NET - SEND
  56692.     AH = 04h
  56693.     DS:BX -> record
  56694.         12 BYTEs receiving node's ID
  56695.             if first byte has high-order bit set, message is
  56696.                directed to the CT_RGATE vector at the receiver
  56697.             if second byte is 00h, first byte is taken as a CB
  56698.                channel number and delivered to all nodes on same
  56699.                channel
  56700.            WORD     length of data at DX
  56701.     DS:DX -> data (max 1024 bytes)
  56702. Return: CF set on error
  56703.         AX = error code (see AH=00h)
  56704.     CF clear if successful
  56705. SeeAlso: AH=05h
  56706. ----------6F05-------------------------------
  56707. INT 6F - 10NET - RECEIVE
  56708.     AH = 05h
  56709.     CX = number of seconds before timeout
  56710.     DS:DX -> receive buffer (see below)
  56711. Return: CF set on error
  56712.         AX = error code (see AH=00h)
  56713.     CF clear if successful
  56714.         AH = FEh if dequeued message is a CB message
  56715. SeeAlso: AH=04h
  56716.  
  56717. Format of receive buffer:
  56718. Offset    Size    Description
  56719.  00h 12 BYTEs    sending node's ID
  56720.  0Ch    WORD    length of message
  56721.  0Eh  N BYTEs    message (maximum 1024 bytes)
  56722. ----------6F07-------------------------------
  56723. INT 6F - 10NET - LOCK HANDLE
  56724.     AH = 07h
  56725.     BX = file handle
  56726.     CX:DX = starting offset in file
  56727.     SI = record length
  56728. Return: CF set on error
  56729.         AX = error code (see also AH=00h)
  56730.         0002h file not found
  56731.     CF clear if successful
  56732. SeeAlso: AH=08h,INT 21/AH=5Ch
  56733. ----------6F08-------------------------------
  56734. INT 6F - 10NET - UNLOCK HANDLE
  56735.     AH = 08h
  56736.     BX = file handle
  56737.     AL = mode
  56738.         00h unlock all
  56739.         01h unlock record at CX:DX
  56740. Return: CF set on error
  56741.         AX = error code (see also AH=00h)
  56742.         0002h file not found
  56743.     CF clear if successful
  56744. SeeAlso: AH=07h,INT 21/AH=5Ch
  56745. ----------6F09-------------------------------
  56746. INT 6F - 10NET - SUBMIT
  56747.     AH = 09h
  56748.     DS:BX -> submit record (see below)
  56749.  
  56750. Format of submit record:
  56751. Offset    Size    Description
  56752.  00h 12 BYTEs    destination node ID (must be logged in)
  56753.  0Ch    WORD    length+2 of following 'command line' text
  56754.  0Eh  N BYTEs    command line text (<=100 bytes), system adds CR
  56755. ----------6F0A-------------------------------
  56756. INT 6F - 10NET - CHAT
  56757.     AH = 0Ah
  56758.     DS:BX -> control parameters (see below)
  56759.     DS:DX -> chat message (see below)
  56760.  
  56761. Format of control parameters:
  56762. Offset    Size    Description
  56763.  00h  8 BYTEs    sender ID, defaults to node's userID if nulls
  56764.  08h  8 BYTEs    destination user ID, 'EVERYONE' may be used
  56765.  10h 12 BYTEs    destination node ID
  56766.  
  56767. Format of chat message:
  56768. Offset    Size    Description
  56769.  00h    WORD    length+2 of following text
  56770.  02h  N BYTEs    text, max 101 bytes
  56771. ----------6F0B-------------------------------
  56772. INT 6F - 10NET - LOCK SEMAPHORE, RETURN IMMEDIATELY
  56773.     AH = 0Bh
  56774.     AL = drive number or 0
  56775.     ES:SI = Ethernet address or 0
  56776.     DS:BX -> 31-byte ASCIZ semaphore name
  56777. Return: AL = status
  56778.         00h successful
  56779.         01h semaphore currently locked
  56780.         02h server not responding
  56781.         03h invalid semaphore name
  56782.         04h semaphore list is full
  56783.         05h invalid drive ID
  56784.         06h invalid Ethernet address
  56785.         07h not logged in
  56786.         08h write to network failed
  56787.         09h semaphore already logged in this CPU
  56788. Note:    same as INT 60/AH=12h
  56789. SeeAlso: AH=0Ch,INT 60/AH=12h
  56790. ----------6F0C-------------------------------
  56791. INT 6F - 10NET - UNLOCK SEMAPHORE
  56792.     AH = 0Ch
  56793.     AL = drive number or 0
  56794.     ES:SI = Ethernet address or 0
  56795.     DS:BX -> 31-byte ASCIZ semaphore name
  56796. Return: AL = status (see also AH=0Bh)
  56797.         01h semaphore not locked
  56798. Note:    same as INT 60/AH=13h
  56799. SeeAlso: AH=0Bh,INT 60/AH=13h
  56800. ----------6F0D-------------------------------
  56801. INT 6F - 10NET - WHO
  56802.     AH = 0Dh
  56803.     AL = type code
  56804.         01h return superstations only
  56805.         02h return non-superstations only
  56806.         otherwise return all
  56807.     CX = length of data
  56808.     DS:DX -> array of records to be filled (see below)
  56809. Return: CL = number of records returned (responding stations)
  56810.  
  56811. Format of station record:
  56812. Offset    Size    Description
  56813.  00h 12 BYTEs    node ID
  56814.  0Ch    BYTE    flags
  56815.         bit 1 = workstation
  56816.             2 = superstation
  56817.             3 = xgate
  56818.             4 = active gate
  56819. ---if AL = 01h---
  56820.  0Dh    BYTE    version number
  56821.     WORD    level number of 10Net software in responding node
  56822. ---if AL = 02h---
  56823.  0Dh  8 BYTEs    user ID
  56824.  15h    BYTE    version number
  56825.  16h    WORD    level number
  56826. ----------6F0E-------------------------------
  56827. INT 6F - 10NET - SPOOL/PRINT
  56828.     AH = 0Eh
  56829.     DS:DX -> spool/print record (see below)
  56830. Return: CF set on error
  56831.         AX = error code (see also AH=00h)
  56832.         FF17h device not mounted
  56833.         FF18h already spooling to named device
  56834.     CF clear if successful
  56835.  
  56836. Format of Spool/Print record:
  56837. Offset    Size    Description
  56838.  00h    WORD    operation code
  56839.            00h initiate spool
  56840.            01h abort print
  56841.            02h close spool
  56842.            03h delete spool
  56843.            04h print
  56844.            05h get report info
  56845.            06h set chat template
  56846.            07h queue
  56847.            08h return queue
  56848.            09h queue non-spooled file for printing
  56849.  02h 11 BYTEs    file name in FCB format
  56850. ---if operation code = 00h or 06h---
  56851.  0Dh    BYTE    notification
  56852.         bit 7: queue to top
  56853.         bit 6: do ID page
  56854.         bit 5: no form feed
  56855.         bit 4: reserved
  56856.         bit 3: explicity queuing only
  56857.         bit 2: notify at print completion
  56858.         bit 1: notify server operator/reply
  56859.         bit 0: notify at print start
  56860.  0Eh    BYTE    days to keep (FFh=forever)
  56861.  0Fh    BYTE    bits 0,1: device (1=LPT1)
  56862.         bits 4-7: remote drive to store spool file (1=A,...)
  56863.  10h    WORD    length of following data area
  56864.  12h  N BYTEs    up to 64 bytes of description
  56865. ---if operation code = 03h---
  56866.  0Dh  8 BYTEs    user ID to associate with filename
  56867. ---if operation code = 04h---
  56868.  0Dh    WORD    block number
  56869.  0Fh  8 BYTEs    user ID to associate with filename
  56870. ---if operation code = 05h---
  56871.  0Dh    BYTE    RRN to start retrieve
  56872.  0Eh    BYTE    bits 0,1: local print device (LPTx)
  56873.         bit 3: if set, return entries for all users
  56874.  0Fh    WORD    length of following area
  56875.  11h  N BYTEs    up to 1500 bytes to receive $SCNTL records returned
  56876. ---if operation code = 07h---
  56877.  0Dh    BYTE    queue number
  56878.  0Eh    BYTE    bits 0,1: local print device (LPTx)
  56879.  0Fh    WORD    number of bytes of test print to be done
  56880.  11h    BYTE    code: 01h print device
  56881.               02h test print count
  56882.               03h prn
  56883. ---if operation code = 08h---
  56884.  0Dh    BYTE    queue location or $SCNTL location to start access
  56885.             returns next item for access:
  56886.                 00h-7Fh queued items
  56887.                 80h-FEh non-queued, non-printed items
  56888.                 FFh    no more items
  56889.  0Eh    WORD    unused
  56890.  10h    WORD    length of following area
  56891.  12h  N BYTEs    up to 64 bytes to receive $SCNTL records
  56892. ---if operation code = 09h---
  56893.  0Dh  3 BYTEs    unused
  56894.  10h  N BYTEs    path to non-spooled file to be queued for printing
  56895.  
  56896. Format of $SCNTL record:
  56897. Offset    Size    Description
  56898.  00h  8 BYTEs    user ID
  56899.  08h 11 BYTEs    filename in FCB format
  56900.  13h  6 BYTEs    node ID
  56901.  19h  3 BYTEs    creation date
  56902.  1Ch    BYTE    flags
  56903.         bit 7: queue to top
  56904.             6: do ID page
  56905.             5: no form feed at end
  56906.             4: reserved
  56907.             3: explicit queueing only
  56908.             2: notify at completion
  56909.             1: notify server operator/reply
  56910.             0: notify at start
  56911.  1Dh    BYTE    retention time in days
  56912.  1Eh    BYTE    printing device (LPTx)
  56913.  1Fh  3 BYTEs    date last printed (0 = never)
  56914.  22h    BYTE    device containing spoolfile
  56915.  23h    WORD    bytes to print for test print
  56916.  25h    WORD    block number to start print
  56917.  27h    BYTE    reserved
  56918. ----------6F0F-------------------------------
  56919. INT 6F - 10NET v5.0 - "RM LOCK" - ???
  56920.     AH = 0Fh
  56921.     ???
  56922. Return: ???
  56923. ----------6F10-------------------------------
  56924. INT 6F - 10NET - ATTACH/DETACH PRINTER
  56925.     AH = 10h
  56926.     AL = subfunction
  56927.         00h initiate spooling if LPT1 is mounted
  56928.         01h terminate spooling if LPT1 is mounted
  56929. SeeAlso: INT 21/AX=5D08h
  56930. ----------6F11-------------------------------
  56931. INT 6F - 10NET - LOCK FCB
  56932.     AH = 11h
  56933.     AL = mode
  56934.         01h sequential
  56935.         02h random
  56936.         03h random block
  56937.         CX = number of records
  56938.     DS:DX -> FCB (see INT 21/AH=0Fh)
  56939. Return: CF set on error
  56940.         AX = error code (see also AH=00h)
  56941.         0002h file not found
  56942.     CF clear if successful
  56943. SeeAlso: AH=12h
  56944. ----------6F12-------------------------------
  56945. INT 6F - 10NET - UNLOCK FCB
  56946.     AH = 12h
  56947.     AL = mode
  56948.         00h sequential
  56949.         01h random
  56950.         02h random block
  56951.         CX = number of records
  56952.     DS:DX -> FCB (see INT 21/AH=0Fh)
  56953. Return: CF set on error
  56954.         AX = error code (see also AH=00h)
  56955.         0002h file not found
  56956.     CF clear if successful
  56957. SeeAlso: AH=11h
  56958. ----------6F13-------------------------------
  56959. INT 6F - 10NET v3.3+ - GET REMOTE CONFIGURATION TABLE ADDRESS
  56960.     AH = 13h
  56961.     DS:DX -> node ID, 12 bytes blank-padded
  56962. Return: CF set on error
  56963.         AX = error code (see AH=00h)
  56964.     CF clear if successful
  56965.         ES:BX = configuration table address on given machine
  56966. SeeAlso: AH=03h
  56967. ----------6F14-------------------------------
  56968. INT 6F - 10NET v3.3+ - GET REMOTE MEMORY
  56969.     AH = 14h
  56970.     BX:SI = address of remote memory
  56971.     CX = length (<=1024 bytes)
  56972.     DS:DX -> node ID, 12 bytes blank-padded
  56973.     DS:DI -> area to receive remote memory image
  56974. Return: CF set on error
  56975.         AX = error code (see AH=00h)
  56976.     CF clear if successful
  56977.         CX = amount of memory copied to DS:SI
  56978. ----------6F1501-----------------------------
  56979. INT 6F - 10NET v3.3+ - GET SHARED DEVICE ENTRY
  56980.     AX = 1501h
  56981.     BX = zero-based index
  56982.     DS:SI -> node ID, 12 bytes blank-padded
  56983.     ES:DI -> 85-byte buffer for shared device table entry (see below)
  56984. Return: CF set on error
  56985.         AX = error code (see AH=00h)
  56986.     CF clear if successful
  56987.         ES:DI buffer contains shared device table entry of BXth device:
  56988. SeeAlso: AX=1502h,AX=1503h
  56989.  
  56990. Format of shared device table entry:
  56991. Offset    Size    Description
  56992.  00h  8 BYTEs    device
  56993.  08h  8 BYTEs    alias
  56994.  10h 64 BYTEs    path
  56995.  50h  8 BYTEs    password
  56996.  58h    BYTE    access
  56997.  59h  4 BYTEs    mask
  56998. ----------6F1502-----------------------------
  56999. INT 6F - 10NET v3.3+ - SET SHARED DEVICE ENTRY
  57000.     AX = 1502h
  57001.     DS:SI -> node ID, 12 bytes blank-padded
  57002.     ES:DI -> valid shared device table entry
  57003. Return: CF set on error
  57004.         AX = error code (see AH=00h)
  57005.     CF clear if successful
  57006. SeeAlso: AX=1501h,AX=1503h
  57007. ----------6F1503-----------------------------
  57008. INT 6F - 10NET v3.3+ - DELETE SHARED DEVICE ENTRY
  57009.     AX = 1503h
  57010.     BX = zero-based index
  57011.     DS:SI -> node ID, 12 bytes blank-padded
  57012. Return: CF set on error
  57013.         AX = error code (see AH=00h)
  57014.     CF clear if successful
  57015. SeeAlso: AX=1501h,AX=1502h
  57016. ----------6F16-------------------------------
  57017. INT 6F - 10NET v5.0 - "GL WHO" - ???
  57018.     AH = 16h
  57019.     ???
  57020. Return: ???
  57021. ----------6F17-------------------------------
  57022. INT 6F - 10NET v3.3+ - MOUNT
  57023.     AH = 17h
  57024.     AL = local drive number (0=A:)
  57025.     BL = remote drive letter or '1'..'3' for LPTn or '4' or '5' for COMx
  57026.     DS:DX -> node ID, 12 bytes blank-padded
  57027. Return: CF set on error
  57028.         AX = error code (see AH=00h)
  57029.     CF clear if successful
  57030. SeeAlso: AH=18h
  57031. ----------6F18-------------------------------
  57032. INT 6F - 10NET v3.3+ - UNMOUNT
  57033.     AH = 18h
  57034.     AL = local drive number (0=A:)
  57035.     BL = type
  57036.         00h        disk
  57037.         01h-03h LPTn
  57038.         04h,05h COMx
  57039. Return: CF set on error
  57040.         AX = error code (see AH=00h)
  57041.     CF clear if successful
  57042. SeeAlso: AH=17h
  57043. ----------6F19-------------------------------
  57044. INT 6F - 10NET v5.0 - "AUDIT" - ???
  57045.     AH = 19h
  57046.     ???
  57047. Return: ???
  57048. ----------6F1A-------------------------------
  57049. INT 6F - 10NET v5.0 - "BULL" - ???
  57050.     AH = 1Ah
  57051.     ???
  57052. Return: ???
  57053. ----------6F1B-------------------------------
  57054. INT 6F - 10NET v5.0 - "GMOUNT" - ???
  57055.     AH = 1Bh
  57056.     ???
  57057. Return: ???
  57058. ----------6F1C-------------------------------
  57059. INT 6F - 10NET v5.0 - "GLOGIN" - ???
  57060.     AH = 1Ch
  57061.     ???
  57062. Return: ???
  57063. ----------6F1D-------------------------------
  57064. INT 6F - 10NET v5.0 - "TABDATA" - ???
  57065.     AH = 1Dh
  57066.     ???
  57067. Return: ???
  57068. ----------6F1E-------------------------------
  57069. INT 6F - 10NET v5.0 - "SCHED" - ???
  57070.     AH = 1Eh
  57071.     ???
  57072. Return: ???
  57073. ----------6F1F-------------------------------
  57074. INT 6F - 10NET v5.0 - "WHOAMI" - ???
  57075.     AH = 1Fh
  57076.     ???
  57077. Return: ???
  57078. ----------6F20-------------------------------
  57079. INT 6F - 10NET v5.0 - ???
  57080.     AH = 20h
  57081.     ???
  57082. Return: ???
  57083. ----------6F21-------------------------------
  57084. INT 6F - 10NET v5.0 - ???
  57085.     AH = 21h
  57086.     ???
  57087. Return: ???
  57088. ----------6F22-------------------------------
  57089. INT 6F - 10NET v5.0 - ???
  57090.     AH = 22h
  57091.     ???
  57092. Return: ???
  57093. ----------70---------------------------------
  57094. INT 70 - IRQ8 - CMOS REAL-TIME CLOCK
  57095. Desc:    this interrupt is called when the real-time clock chip generates an
  57096.       alarm or periodic interrupt, among others.  The periodic interrupt
  57097.       occurs 1024 times per second.
  57098. Nots:    many BIOSes turn off the periodic interrupt in the INT 70h handler
  57099.       unless in an event wait (see INT 15/AH=83h or INT 15/AH=86h).
  57100.     may be masked by setting bit 0 on I/O port A1h
  57101. SeeAlso: INT 08,INT 0F"HP 95LX",INT 15/AH=01h"Amstrad",INT 15/AH=83h
  57102. SeeAlso: INT 15/AH=86h,INT 1A/AH=02h,INT 58"DESQview"
  57103. ----------70---------------------------------
  57104. INT 70 - VIRUS "Stupid" - ???
  57105. SeeAlso: INT 6B"VIRUS",INT E0"VIRUS"
  57106. ----------71---------------------------------
  57107. INT 71 - IRQ9 - REDIRECTED TO INT 0A BY BIOS
  57108. Notes:    may be masked by setting bit 1 on I/O port A1h
  57109.     the default BIOS handler invokes INT 0A for compatibility, since the
  57110.       pin for IRQ2 on the PC expansion bus became the pin for IRQ9 on the
  57111.       AT expansion bus.
  57112.     under DESQview, only the INT 15h vector and BASIC segment address (the
  57113.       word at 0000h:0510h) may be assumed to be valid for the handler's
  57114.       process
  57115. SeeAlso: INT 0A,INT 59
  57116. ----------72---------------------------------
  57117. INT 72 - IRQ10 - RESERVED
  57118. Note:    may be masked by setting bit 2 on I/O port A1h
  57119. SeeAlso: INT 5A
  57120. ----------73---------------------------------
  57121. INT 73 - IRQ11 - RESERVED
  57122. Note:    may be masked by setting bit 3 on I/O port A1h
  57123. SeeAlso: INT 5B
  57124. ----------74---------------------------------
  57125. INT 74 - IRQ12 - POINTING DEVICE (PS)
  57126. Notes:    may be masked by setting bit 4 on I/O port A1h
  57127.     under DESQview, only the INT 15h vector and BASIC segment address (the
  57128.       word at 0000h:0510h) may be assumed to be valid for the handler's
  57129.       process
  57130. SeeAlso: INT 33,INT 5C
  57131. ----------75---------------------------------
  57132. INT 75 - IRQ13 - MATH COPROCESSOR EXCEPTION (AT and up)
  57133.    redirected to INT 02 by the BIOS, for compatibility with the PC
  57134. Notes:    may be masked by setting bit 5 on I/O port A1h
  57135.     not all clones wire the coprocessor to generate this IRQ; some systems
  57136.       generate an NMI (see INT 02) or assert the -ERROR pin on the CPU
  57137.       (see INT 10"COPROCESSOR")
  57138.     under DESQview, only the INT 15h vector and BASIC segment address (the
  57139.       word at 0000h:0510h) may be assumed to be valid for the handler's
  57140.       process
  57141. SeeAlso: INT 10"COPROCESSOR",INT 5D
  57142. ----------76---------------------------------
  57143. INT 76 - IRQ14 - HARD DISK CONTROLLER (AT and later)
  57144. Note:    may be masked by setting bit 6 on I/O port A1h
  57145. SeeAlso: INT 0E"IRQ6",INT 5E
  57146. ----------77---------------------------------
  57147. INT 77 - IRQ15 - RESERVED (AT,PS)
  57148. Note:    may be masked by setting bit 7 on I/O port A1h
  57149. SeeAlso: INT 5F
  57150. ----------77---------------------------------
  57151. INT 77 - IRQ15 - POWER CONSERVATION (Compaq SLT/286)
  57152. Note:    may be masked by setting bit 7 on I/O port A1h
  57153. SeeAlso: INT 15/AX=4600h,INT 5F
  57154. ----------78---------------------------------
  57155. INT 78 - UofSalford DBOS DOS extender - API
  57156.     BYTE following INT instruction contains function code
  57157.         03h switch to protected mode
  57158.         1Eh set real-mode memory size (specify how much real-mode memory
  57159.           to leave free when running FTN77 programs)
  57160.         22h uninstall
  57161.     ???
  57162. Return: ???
  57163. Note:    DBOS supports functions 00h through 50h
  57164. ----------78---------------------------------
  57165. INT 78 - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ0
  57166. Note:    this vector is overwritten when GO32 starts but is not restored
  57167. SeeAlso: INT 08,INT 10/AH=FFh"GO32",INT 79"GO32"
  57168. ----------78---------------------------------
  57169. INT 78 - AutoCAD 10 ADI for Plotters
  57170.     AX = function
  57171.         0001h initialize comm port and reset plotter
  57172.         BX = ??? (comm port?)
  57173.         0002h close plotter
  57174.         0003h move (pen up)
  57175.         BX = new X position
  57176.         CX = new Y position
  57177.         0004h move (pen down)
  57178.         BX = new X position
  57179.         CX = new Y position
  57180.         0005h select pen
  57181.         BX = pen number
  57182.         0006h select drawing speed
  57183.         BX = drawing speed N
  57184.         0007h select line style
  57185.         BX = line style N
  57186.         0008h return pen to pen carrier??? (called before change-pen cmd)
  57187. Return: ???
  57188. SeeAlso: INT 7A"AutoCAD",INT 7B"AutoCAD"
  57189. ----------78---------------------------------
  57190. INT 78 - ADP-60 IDE controller - ORIGINAL INT 13
  57191. SeeAlso: INT 79"ADP-60"
  57192. ----------7800-------------------------------
  57193. INT 78 - TARGA.DEV - CMC International SCSI device driver - SET I/O PORT
  57194.     AH = 00h
  57195.     DX = interface board I/O port
  57196. Return:    CF set on error
  57197.         AL = error code
  57198.         00h illegal command given to SCSI code
  57199.         01h invalid I/O port specified (must be from 100H to 3F8H, and
  57200.             must be on an 8-port boundary)
  57201.         02h invalid DMA channel specified (must be from 1 to 3)
  57202.         03h invalid SCSI board number specified (must be from 0 to 7)
  57203.         04h error from data register test during self-test
  57204.         05h SCSI input signals not all 0 when SCSI RST activated
  57205.         06h SCSI input signals not all 0 before selecting a SCSI device
  57206.         07h BSY signal is active; SCSI bus is busy
  57207.         08h SCSI board not selected, BSY signal did not come on in
  57208.             response to raising SEL
  57209.         09h time-out waiting for status state, signifying end of DMA
  57210.             transfer
  57211. Note:    if this routine is not called, the port is the driver's default
  57212.       (usually 0280h or 0300h)
  57213.     an installation check is performed by TARGA.DEV upon initialization
  57214.       by checking for the string "SCSI" at offset 03h into the interrupt
  57215.       handler
  57216. SeeAlso: AH=01h,AH=02h
  57217. ----------7801-------------------------------
  57218. INT 78 - TARGA.DEV - GET I/O PORT
  57219.     AH = 01h
  57220. Return: DX = current interface board I/O port
  57221. SeeAlso: AH=00h,AH=03h"TARGA"
  57222. ----------7802-------------------------------
  57223. INT 78 - TARGA.DEV - SET DMA CHANNEL
  57224.     AH = 02h
  57225.     AL = interface board DMA channel
  57226. Return: CF set on error
  57227.     AL = error code (see AH=00h)
  57228. Note:    if this routine is not called, the DMA channel is the driver's default
  57229.       (usually 3)
  57230. SeeAlso: AH=00h,AH=03h"TARGA"
  57231. ----------7803-------------------------------
  57232. INT 78 - TARGA.DEV - GET DMA CHANNEL
  57233.     AH = 03h
  57234. Return: AL = current interface board DMA channel
  57235. SeeAlso: AH=01h,AH=02h
  57236. ----------7804-------------------------------
  57237. INT 78 - TARGA.DEV - SET SCSI DEVICE NUMBER
  57238.     AH = 04h
  57239.     AL = SCSI device number
  57240. Return: CF set on error
  57241.     AL = error code (see AH=00h)
  57242. Note:    if this routine is not called, the device number used is the driver's
  57243.       default (usually 0)
  57244. SeeAlso: AH=02h,AH=05h
  57245. ----------7805-------------------------------
  57246. INT 78 - TARGA.DEV - GET SCSI DEVICE NUMBER
  57247.     AH = 05h
  57248. Return: AL = current SCSI device number
  57249. SeeAlso: AH=03h"TARGA",AH=04h
  57250. ----------7806-------------------------------
  57251. INT 78 - TARGA.DEV - SET/CLEAR EARLY RETURN MODE
  57252.     AH = 06h
  57253.     AL = 00h clear early return mode
  57254.        = 01h set early return mode
  57255. Note:    if early return mode is set then SCSI will return with no errors
  57256.       when the last DMA transfer is started in a call with AH=13h or AH=14h
  57257.     if this routine is not called, early return mode is cleared
  57258. SeeAlso: AH=13h,AH=14h,AH=15h
  57259. ----------7808-------------------------------
  57260. INT 78 - TARGA.DEV - INTERFACE BOARD SELF-TEST
  57261.     AH = 08h
  57262. Return: CF set on error
  57263.     AL = error code (see AH=00h)
  57264. Note:    the SCSI bus is also reset
  57265. SeeAlso: AH=09h
  57266. ----------7809-------------------------------
  57267. INT 78 - TARGA.DEV - RESET SCSI BUS
  57268.     AH = 09h
  57269. Return: AL = error code if carry set (see AH=00h)
  57270. SeeAlso: AH=08h
  57271. ----------7810-------------------------------
  57272. INT 78 - TARGA.DEV - SEND SCSI COMMAND
  57273.     AH = 10h
  57274.     DS:SI -> command bytes
  57275. Return: AH = SCSI status byte
  57276.     CF clear if successful
  57277.         AL = SCSI message byte
  57278.     CF set on error
  57279.         AL = error code (see AH=00h)
  57280. SeeAlso: AH=11h,INT 21/AX=4403h"ST-01"
  57281.  
  57282. Format of SCSI Command:
  57283. Offset    Size    Description
  57284.  00h    BYTE    length of command
  57285.  01h    ???    command bytes
  57286. ----------7811-------------------------------
  57287. INT 78 - TARGA.DEV - SEND SCSI COMMAND, RECEIVE DATA (PROGRAMMED I/O)
  57288.     AH = 11h
  57289.     DS:SI -> command bytes
  57290.     ES:BX -> data storage area
  57291.     CX = number of data bytes to transfer
  57292. Return: AH = SCSI status byte
  57293.     CF clear if successful
  57294.         AL = SCSI message byte
  57295.     CF set on error
  57296.         AL = error code (see AH=00h)
  57297. Note:    this command receives data internally one byte at a time
  57298. SeeAlso: AH=10h,AH=13h
  57299.  
  57300. Format of SCSI Command:
  57301. Offset    Size    Description
  57302.  00h    BYTE    length of command
  57303.  01h    ???    command bytes
  57304. ----------7812-------------------------------
  57305. INT 78 - TARGA.DEV - SEND SCSI COMMAND AND DATA (PROGRAMMED I/O)
  57306.     AH = 12h
  57307.     DS:SI -> command bytes
  57308.     ES:BX -> data storage area
  57309.     CX = number of data bytes to transfer
  57310. Return: AH = SCSI status byte
  57311.     CF clear if successful
  57312.         AL = SCSI message byte
  57313.     CF set on error
  57314.         AL = error code (see AH=00h)
  57315. Note:    this command sends data internally one byte at a time
  57316. SeeAlso: AH=14h
  57317.  
  57318. Format of SCSI Command:
  57319. Offset    Size    Description
  57320.  00h    BYTE    length of command
  57321.  01h    ???    command bytes
  57322. ----------7813-------------------------------
  57323. INT 78 - TARGA.DEV - SEND SCSI COMMAND, RECEIVE DATA (DMA)
  57324.     AH = 13h
  57325.     DS:SI -> command bytes
  57326.     ES:BX -> data storage area
  57327.     DX:CX = number of data bytes to transfer
  57328. Return: AH = SCSI status byte (if early return mode is clear)
  57329.     CF clear if successful
  57330.         AL = SCSI message byte (if early return mode is clear)
  57331.     CF set on error
  57332.         AL = error code (see AH=00h)
  57333. Note:    this command receives data using DMA
  57334. SeeAlso: AH=11h,AH=12h
  57335.  
  57336. Format of SCSI Command:
  57337. Offset    Size    Description
  57338.  00h    BYTE    length of command
  57339.  01h    ???    command bytes
  57340. ----------7814-------------------------------
  57341. INT 78 - TARGA.DEV - SEND SCSI COMMAND AND DATA (DMA)
  57342.     AH = 14h
  57343.     DS:SI -> command bytes
  57344.     ES:BX -> data storage area
  57345.     DX:CX = number of data bytes to transfer
  57346. Return: AH = SCSI status byte (if early return mode is clear)
  57347.     CF clear if successful
  57348.         AL = SCSI message byte (if early return mode is clear)
  57349.     CF set on error
  57350.         AL = error code (see AH=00h)
  57351. Note:    this command sends data using DMA
  57352. SeeAlso: AH=12h,AH=13h
  57353.  
  57354. Format of SCSI Command:
  57355. Offset    Size    Description
  57356.  00h    BYTE    length of command
  57357.  01h    ???    command bytes
  57358. ----------7815-------------------------------
  57359. INT 78 - TARGA.DEV - FINISH DATA TRANSFER (DMA)
  57360.     AH = 15h
  57361. Return: AH = SCSI status byte
  57362.     CF clear if successful
  57363.         AL = SCSI message byte
  57364.     CF set on error
  57365.         AL = error code (see AH=00h)
  57366. Note:    if AH=06h was previously called to set the early return mode, this
  57367.       function finishes a command AH=13h or AH=14h which returned before
  57368.       the last DMA transfer was finished
  57369. SeeAlso: AH=06h,AH=13h,AH=14h
  57370. ----------79---------------------------------
  57371. INT 79 - AVATAR.SYS - FAST GET KEYSTROKE
  57372. Return: CF set if no keystroke available
  57373.         AX = FFFFh
  57374.     CF clear if key pressed
  57375.         AX = keystroke
  57376. Notes:    if a keystroke is available, it is removed from the keyboard buffer
  57377.       before being returned
  57378.     AVATAR.SYS is a CON driver by George Adam Stanislav which interprets
  57379.       AVATAR command codes just as ANSI.SYS interprets ANSI commands
  57380. SeeAlso: INT 29
  57381. ----------79---------------------------------
  57382. INT 79 - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ1
  57383. Note:    this vector is overwritten when GO32 starts but is not restored
  57384. SeeAlso: INT 09,INT 78"GO32",INT 7A"GO32"
  57385. ----------79---------------------------------
  57386. INT 79 U - ADP-60 IDE adapter - ???
  57387. SeeAlso: INT 78"ADP-60"
  57388. ----------790001-----------------------------
  57389. INT 79 U - AutoCAD Device Interface - DIGITIZER - INITIALIZE
  57390.     AX = 0001h
  57391. Return: AX = 0001h ??? self-test result???
  57392.     BX = 0001h
  57393. SeeAlso: AX=0002h,AX=0003h,INT 7A"AutoCAD"
  57394. ----------790002-----------------------------
  57395. INT 79 U - AutoCAD Device Interface - DIGITIZER - CLOSE
  57396.     AX = 0002h
  57397. SeeAlso: AX=0001h,AX=0003h
  57398. ----------790003-----------------------------
  57399. INT 79 U - AutoCAD Device Interface - DIGITIZER - GET DIGITIZER STATUS
  57400.     AX = 0003h
  57401. Return: AX = button state
  57402.         0002h no button pressed
  57403.         BX = X coordinate
  57404.         CX = Y coordinate
  57405.         0003h Pick button (0,A,B,C,D) pressed
  57406.         BX = X coordinate
  57407.         CX = Y coordinate
  57408.         0005h other button (1-9) pressed
  57409.         BX = number of button - 1
  57410.         CX = X coordinate
  57411.         DX = Y coordinate
  57412. Note:    these return values are valid for the Houston Instruments HiPad Plus
  57413.       9236 digitizer with a 16-button cursor
  57414. SeeAlso: AX=0001h,AX=0002h
  57415. ----------7A---------------------------------
  57416. INT 7A U - Topware Network Operating System - ???
  57417.     AL = ???
  57418.     ???
  57419. Return: ???
  57420. SeeAlso: INT 21/AH=FFh"Topware",INT 2F/AX=FF00h
  57421. ----------7A---------------------------------
  57422. INT 7A - AutoCAD Device Interface
  57423.     ???
  57424. SeeAlso: INT 61/AX=0007h"OPTIMA",INT 78"AutoCAD",INT 79/AX=0001h
  57425. SeeAlso: INT 7B"AutoCAD"
  57426. ----------7A---------------------------------
  57427. INT 7A - X.PC Packet software interface
  57428.     ES:BX -> parameter block
  57429. SeeAlso: INT 60/AX=01FFh
  57430. ----------7A---------------------------------
  57431. INT 7A - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ2
  57432. Note:    this vector is overwritten when GO32 starts but is not restored
  57433. SeeAlso: INT 0A,INT 79"GO32",INT 7B"GO32"
  57434. ----------7A---------------------------------
  57435. INT 7A - Novell NetWare - LOW-LEVEL API - Notes
  57436. Note:    this interrupt is used for IPX/SPX access in NetWare versions through
  57437.       2.0a; in later versions, you should use INT 2F/AX=7A00h to get an
  57438.       entry point even though INT 7A still exists.    For both INT 7A and
  57439.       the FAR entry point, BX contains the function number; IPX is
  57440.       sometimes called internally with BX bit 15 set.
  57441. SeeAlso: INT 2F/AX=7A00h,INT 64"Novell",INT 7A/BX=0000h
  57442. ----------7A----BX0000-----------------------
  57443. INT 7A - Novell NetWare - IPX Driver - OPEN SOCKET
  57444.     BX = 0000h
  57445.     AL = socket longevity
  57446.         00h open until close or terminate
  57447.         FFh open until close
  57448.     DX = socket number (high byte in DL)
  57449.         0000h dynamic allocation
  57450.         else  socket to open (see below)
  57451. Return: AL = return code
  57452.         00h success
  57453.         DX = socket number
  57454.         FEh socket table full
  57455.         FFh socket already open
  57456. Notes:    TSRs which need to use sockets should set AL to FFh, non-resident
  57457.       programs should normally use AL=00h
  57458.     IPX can be configured to support up to 150 open sockets on a
  57459.       workstation, and defaults to 20
  57460.     this function is supported by Advanced NetWare 1.02+
  57461. SeeAlso: BX=0001h,BX=0004h
  57462.  
  57463. Values for socket number:
  57464.  0451h File Service
  57465.  0452h Service Advertising Socket
  57466.  0453h Routing Information Packet
  57467.  0455h NetBIOS Packet
  57468.  0456h diagnostics
  57469.  0457h ??? (appears to be related to server serial numbers)
  57470.  4000h-7FFFh used for dynamic allocation
  57471.  4444h Brightwork Development's SiteLock server
  57472.  5555h Brightwork Development's SiteLock client (workstation)
  57473.  8000h-FFFFh assigned by Novell
  57474. Note:    SiteLock is an application metering product using IPX to communicate
  57475.       between the application and the license server
  57476. ----------7A----BX0001-----------------------
  57477. INT 7A - Novell NetWare - IPX Driver - CLOSE SOCKET
  57478.     BX = 0001h
  57479.     DX = socket number (high byte in DL)
  57480. Notes:    also cancels events set by any Event Control Blocks for the socket
  57481.     the program must close all open sockets before terminating
  57482.     this function is supported by Advanced NetWare 1.02+
  57483. SeeAlso: BX=0000h
  57484. ----------7A----BX0002-----------------------
  57485. INT 7A - Novell NetWare - IPX Driver - GET LOCAL TARGET
  57486.     BX = 0002h
  57487.     ES:SI -> target internetwork address (see INT 7A/BX=000Bh)
  57488.     ES:DI -> 6-byte buffer for local target
  57489. Return: AL = return code
  57490.         00h success
  57491.            CX = expected one-way transfer time (clock ticks) for a 576-byte
  57492.             packet
  57493.            ES:DI -> local target
  57494.         FAh unsuccessful (no path to destination)
  57495. Notes:    the internetwork address consists of a 4-byte network address followed
  57496.       by a 6-byte node address.  The local target is only a 6-byte node
  57497.       address.  If the target is in the same network, the local target is
  57498.       just the node address of target; otherwise, the local target is the
  57499.       node address of the bridge that leads to the target.
  57500.     this function may be called from inside IPX and AES Event Service
  57501.       Routines, but not from other interrupt handlers
  57502.     this function is supported by Advanced NetWare 1.02+
  57503. SeeAlso: BX=0009h
  57504. ----------7A----BX0003-----------------------
  57505. INT 7A - Novell NetWare - IPX Driver - SEND PACKET
  57506.     BX = 0003h
  57507.     ES:SI -> Event Control Block (see below)
  57508. Notes:    returns immediately; IPX attempts to send the packet in the background
  57509.     this function is supported by Advanced NetWare 1.02+
  57510. SeeAlso: BX=0004h,BX=000Fh,INT 21/AH=EEh"Novell"
  57511.  
  57512. Format of Event Control Block:
  57513. Offset    Size    Description
  57514.  00h    DWORD    Link
  57515.  04h    DWORD    -> Event Service Routine (00000000h if none)
  57516.  08h    BYTE    in use flag
  57517.         00h available
  57518.         E0h AES temporary
  57519.         F6h \ special IPX/SPX processing for v3.02+
  57520.         F7h /
  57521.         F8h IPX in critical section
  57522.         F9h SPX listening
  57523.         FAh processing
  57524.         FBh holding
  57525.         FCh AES waiting
  57526.         FDh AES couting down delay time
  57527.         FEh awaiting packet reception
  57528.         FFh sending packet
  57529.  09h    BYTE    completion code (see below)
  57530.  0Ah    WORD    socket (big-endian)
  57531.         0452h Service Advertising Socket
  57532.         0456h diagnostics
  57533.         other
  57534.  0Ch  4 BYTES    IPX workspace
  57535.  10h 12 BYTES    driver workspace
  57536.  1Ch  6 BYTES    immediate local node address
  57537.  22h    WORD    fragment count
  57538.  24h    var    fragment descriptors
  57539.         Offset    Size    Description
  57540.          00h    DWORD    -> fragment data
  57541.          04h    WORD    size of fragment in bytes.
  57542. Notes:    ESR is a far procedure that is called when the ECB has been handled.
  57543.       On call, the in use flag is zero if the ECB has been handled,
  57544.       non-zero otherwise. If the flag is zero, the completion code holds
  57545.       the result of the event.
  57546.     the first fragment should start with an IPX header
  57547.     all fragments are concatenated and sent in one piece
  57548.     node address FFh FFh FFh FFh FFh FFh broadcasts to all nodes
  57549.  
  57550. Values for ECB completion code:
  57551.  00h success
  57552.  ECh remote terminated connection without acknowledging packet
  57553.  EDh abnormal connection termination
  57554.  EEh invalid connection ID
  57555.  EFh SPX connection table full
  57556.  F9h event should not be cancelled
  57557.  FAh cannot establish connection with specified destination
  57558.  FCh cancelled
  57559.  FDh malformed packet
  57560.  FEh packet undeliverable
  57561.  FFh physical error
  57562.  
  57563. Event Service Routine called with:
  57564.     AL = caller's identity (00h = AES, FFh = IPX)
  57565.     ES:SI -> event control block
  57566.     interrupts disabled
  57567.  
  57568. Format of IPX header:
  57569. Offset    Size    Description
  57570.  00h    WORD    checksum (high byte first [big-endian])
  57571.  02h    WORD    length in bytes (high byte first) of total packet
  57572.  04h    BYTE    transport control
  57573.  05h    BYTE    packet type
  57574.         00h unknown packet type
  57575.         01h routing information packet
  57576.         02h echo packet
  57577.         03h error packet
  57578.         04h packet exchange packet (always use this one)
  57579.         05h SPX packet
  57580.         11h-1Eh experimental protocols
  57581.  06h 10 BYTES    destination internetwork address
  57582.  10h    WORD    destination socket (high byte first)
  57583.  12h 10 BYTES    source internetwork address
  57584.  1Ch    WORD    source socket (high byte first)
  57585.  
  57586. Format of Service Advertising Protocol Service Query Packet:
  57587. Offset    Size    Description
  57588.  00h 30 BYTEs    IPX header
  57589.  1Eh    WORD    query type (big-endian)
  57590.  20h    WORD    server type (big-endian) (see INT 21/AH=E3h"NetWare")
  57591.  
  57592. Format of Service Advertising Protocol Server Identification Packet:
  57593. Offset    Size    Description
  57594.  00h 30 BYTEs    IPX header
  57595.  1Eh    WORD    response type (big-endian)
  57596.         0002h general service
  57597.         0004h nearest service
  57598.  20h    WORD    server type (big-endian) (see INT 21/AH=E3h"NetWare")
  57599.  22h 48 BYTEs    ASCIZ server name
  57600.  52h  2 WORDs    network number (big-endian)
  57601.  54h  3 WORDs    node number (big-endian)
  57602.  5Ch    WORD    socket number (big-endian)
  57603.  5Eh    WORD    number of hops between caller and server (big-endian)
  57604. ----------7A----BX0004-----------------------
  57605. INT 7A - Novell NetWare - IPX Driver - LISTEN FOR PACKET
  57606.     BX = 0004h
  57607.     ES:SI -> Event Control Block (see BX=0003h)
  57608. Return: AL = status
  57609.         00h successful
  57610.         FFh no listening socket for packet
  57611. Desc:    this function provides IPX with an ECB for receiving an IPX packet, but
  57612.       does not wait for a packet to arrive
  57613. Notes:    the application must open a socket and initialize the ECB's ESR
  57614.       address, socket number, fragment count, and fragment descriptor
  57615.       fields before invoking this function
  57616.     there is no limit on the number of ECBs which may simultaneously be
  57617.       listening on a socket
  57618.     this function is supported by Advanced NetWare 1.02+
  57619. SeeAlso: BX=0000h,BX=0003h
  57620. ----------7A----BX0005-----------------------
  57621. INT 7A - Novell NetWare - IPX Driver - SCHEDULE IPX EVENT
  57622.     BX = 0005h
  57623.     AX = delay time in clock ticks
  57624.     ES:SI -> Event Control Block (see BX=0003h)
  57625. Note:    this function is supported by Advanced NetWare 1.02+
  57626. SeeAlso: BX=0006h,BX=0007h,BX=0008h
  57627. ----------7A----BX0006-----------------------
  57628. INT 7A - Novell NetWare - IPX Driver - CANCEL EVENT
  57629.     BX = 0006h
  57630.     ES:SI -> Event Control Block (see BX=0003h)
  57631. Return: AL = return code
  57632.         00h success
  57633.         F9h event in use
  57634.         FCh event cancelled
  57635.         FFh unsuccessful, event not in use, or unrecognized ECB flag
  57636. Notes:    cannot cancel packets which the node's driver has already sent
  57637.     this function is supported by Advanced NetWare 1.02+
  57638. SeeAlso: BX=0005h
  57639. ----------7A----BX0007-----------------------
  57640. INT 7A - Novell NetWare - IPX Driver - SCHEDULE SPECIAL EVENT
  57641.     BX = 0007h
  57642.     AX = delay time
  57643.     ES:SI -> Event Control Block (see BX=0003h)
  57644. Note:    this function is supported by Advanced NetWare 1.02+
  57645. SeeAlso: BX=0006h
  57646. ----------7A----BX0008-----------------------
  57647. INT 7A - Novell NetWare - IPX Driver - GET INTERVAL MARKER
  57648.     BX = 0008h
  57649. Return: AX = interval marker in clock ticks
  57650. Notes:    may be used to measure the time elapsed between two events, up to one
  57651.       hour
  57652.     this function is supported by Advanced NetWare 1.02+
  57653. SeeAlso: BX=0005h
  57654. ----------7A----BX0009-----------------------
  57655. INT 7A - Novell NetWare - IPX Driver - GET INTERNETWORK ADDRESS
  57656.     BX = 0009h
  57657.     ES:SI -> buffer for own internetwork address (see below)
  57658. Return: ES:SI buffer filled
  57659.     SI destroyed
  57660. Note:    this function is supported by Advanced NetWare 1.02+
  57661. SeeAlso: BX=0002h,BX=000Bh
  57662.  
  57663. Format of internetwork address:
  57664. Offset    Size    Description
  57665.  00h  4 BYTEs    network number (big-endian)
  57666.  04h  6 BYTEs    node number within network (big-endian)
  57667. ----------7A----BX000A-----------------------
  57668. INT 7A - Novell NetWare - IPX Driver - RELINQUISH CONTROL
  57669.     BX = 000Ah
  57670. Desc:    this call indicates that the application is idle and permits the IPX
  57671.       driver to do some work
  57672. Note:    this function is supported by Advanced NetWare 1.02+
  57673. SeeAlso: INT 15/AX=1000h,INT 21/AH=89h,INT 2F/AX=1680h
  57674. ----------7A----BX000B-----------------------
  57675. INT 7A - Novell NetWare - IPX Driver - DISCONNECT FROM TARGET
  57676.     BX = 000Bh
  57677.     ES:SI -> internetwork address (see below)
  57678. Notes:    this function permits the network software on the remote machine to
  57679.       remove any virtual connection with the calling machine
  57680.     only use in point-to-point networks
  57681.     should never be called from within an Event Service Routine
  57682.     this function is supported by Advanced NetWare 1.02+
  57683. SeeAlso: BX=0002h,BX=0009h
  57684.  
  57685. Format of internetwork address:
  57686. Offset    Size    Description
  57687.  00h  4 BYTEs    destination network (big-endian)
  57688.  04h  6 BYTEs    destination node (big-endian)
  57689.  0Ah  2 BYTEs    destination socket (big-endian)
  57690. ----------7A----BX000C-----------------------
  57691. INT 7A U - Novell NetWare - IPX Driver - internal - INITIALIZE NETWORK ADDRESS
  57692.     BX = 000Ch
  57693.     CX:DX = global network address (see INT 7A/BX=0002h)
  57694.     ES:DI -> "OSINCRITICALSECTION" flag
  57695.     DS:SI -> current mode for socket
  57696. Note:    the address cannot be changed once it has been initialized
  57697. ----------7A----BX000D-----------------------
  57698. INT 7A U - Novell NetWare - IPX Driver - internal - IPX GET PACKET SIZE
  57699.     BX = 000Dh
  57700. Return: AX = maximum packet size
  57701.     CX = retry count
  57702. SeeAlso: BX=001Ah
  57703. ----------7A----BX000E-----------------------
  57704. INT 7A U - Novell NetWare - IPX Driver - internal - TERMINATE SOCKETS
  57705.     BX = 000Eh
  57706. Return: nothing
  57707. Note:    this function terminates all sockets opened with the current mode; this
  57708.       may be intended for future enhancements as the socket mode never
  57709.       changes in v2.15
  57710. ----------7A----BX000F-----------------------
  57711. INT 7A U - Novell NetWare - IPX Driver - INTERNAL - SEND PACKET
  57712.     BX = 000Fh
  57713.     ES:SI -> Event Control Block (see BX=0003h)
  57714. Note:    similar to function 0003h, but apparently does not allow multiple
  57715.       fragments
  57716. SeeAlso: BX=0003h
  57717. ----------7A----BX0010-----------------------
  57718. INT 7A - Novell NetWare - SPX Driver - INSTALLATION CHECK
  57719.     BX = 0010h
  57720.     AL = 00h
  57721. Return: AL = FFh if SPX loaded
  57722.         BH = SPX major version
  57723.         BL = SPX minor version
  57724.         CX = maximum SPX connections
  57725.         DX = SPX connections available
  57726. Note:    this function is supported by Advanced NetWare 2.1+
  57727. SeeAlso: BX=0015h
  57728. ----------7A----BX0011-----------------------
  57729. INT 7A - Novell NetWare - SPX Driver - ESTABLISH SPX CONNECTION
  57730.     BX = 0011h
  57731.     AL = retry count
  57732.     AH = watchdog flag
  57733.     ES:SI -> Event Control Block (see BX=0003h)
  57734. Return: AL = status
  57735.         00h attempting to contact destination socket
  57736.         EFh local connection table full
  57737.         FDh buffer size not 42 or fragment count not 1
  57738.         FFh sending socket not open
  57739.     DX = assigned connection ID number
  57740. Desc:    attempt to establish a connection with a listening socket
  57741. Notes:    there should always be at least two SPX ECB's listening to a socket, so
  57742.       that NetWare can perform its internal packet exchanges
  57743.     the first fragment should start with a SPX header.  Fill in all
  57744.       destination addresses.
  57745.     this function is supported by Advanced NetWare 2.1+
  57746. SeeAlso: BX=0000h,BX=0012h,BX=0013h,BX=0014h,BX=0015h
  57747.  
  57748. Format of SPX header:
  57749. Offset    Size    Description
  57750.  00h    WORD    checksum (big-endian)
  57751.  02h    WORD    length in bytes of total packet (big-endian)
  57752.  04h    BYTE    transport control
  57753.  05h    BYTE    packet type (see INT 7A/BX=0003h)
  57754.  06h 10 BYTEs    destination internet address
  57755.  10h    WORD    destination socket (big-endian)
  57756.  12h 10 BYTEs    source internet address
  57757.  1Ch    WORD    source socket (big-endian)
  57758.  1Eh    BYTE    connection control
  57759.  1Fh    BYTE    datastream type
  57760.  20h    WORD    source connection ID (big-endian)
  57761.  22h    WORD    destination connection ID (big-endian)
  57762.  24h    WORD    sequence number (big-endian)
  57763.  26h    WORD    acknowledge number (big-endian)
  57764.  28h    WORD    allocation number (big-endian)
  57765. ----------7A----BX0012-----------------------
  57766. INT 7A - Novell NetWare - SPX Driver - LISTEN FOR SPX CONNECTION
  57767.     BX = 0012h
  57768.     AH = watchdog flag
  57769.         00h disabled
  57770.         01h enabled
  57771.     AL = retry count (00h = default)
  57772.     ES:SI -> Event Control Block (see BX=0003h)
  57773. Notes:    there should always be at least two SPX ECB's listening to a socket, so
  57774.       that NetWare can perform its internal packet exchanges
  57775.     this function is supported by Advanced NetWare 2.1+
  57776. SeeAlso: BX=0011h,BX=0013h,BX=0014h
  57777. ----------7A----BX0013-----------------------
  57778. INT 7A - Novell NetWare - SPX Driver - TERMINATE SPX CONNECTION
  57779.     BX = 0013h
  57780.     DX = connection ID to terminate
  57781.     ES:SI -> Event Control Block (see BX=0003h)
  57782. Note:    this function is supported by Advanced NetWare 2.1+
  57783. SeeAlso: BX=0011h,BX=0012h,BX=0014h
  57784. ----------7A----BX0014-----------------------
  57785. INT 7A - Novell NetWare - SPX Driver - ABORT SPX CONNECTION
  57786.     BX = 0014h
  57787.     DX = connection ID to terminate
  57788. Notes:    this function is supported by Advanced NetWare 2.1+
  57789.     this function does not tell the other side that the connection has been
  57790.       terminated
  57791.     also aborts any outstanding Establish Connection, Terminate Connection,
  57792.       and Send Sequenced Packet commands
  57793. SeeAlso: BX=0011h,BX=0013h
  57794. ----------7A----BX0015-----------------------
  57795. INT 7A - Novell NetWare - SPX Driver - GET SPX CONNECTION STATUS
  57796.     BX = 0015h
  57797.     DX = connection ID
  57798.     ES:SI -> status buffer (see below)
  57799. Return: AL = return code
  57800.         00h connection still valid
  57801.         ES:SI -> status buffer filled
  57802.         EEh no such connection
  57803. Note:    this function is supported by Advanced NetWare 2.1+
  57804. SeeAlso: BX=0010h,BX=0011h
  57805.  
  57806. Format of status buffer:
  57807. Offset    Size    Description
  57808.  00h    BYTE    connection state
  57809.         01h waiting to establish connection
  57810.         02h starting (attempting to create connection)
  57811.         03h connection established
  57812.         04h terminating
  57813.  01h    BYTE    watchdog flag
  57814.         bit 0: used internally by SPX
  57815.         bit 1: SPX watchdog is monitoring connection
  57816.         bits 2-7: used internally by SPX
  57817.  02h    WORD    source connection ID (big-endian)
  57818.  04h    WORD    destination connection ID (big-endian)
  57819.  06h    WORD    sequence number of next packet sent (big-endian)
  57820.  08h    WORD    acknowledge number, expected sequence number of next received
  57821.         packet (big-endian)
  57822.  0Ah    WORD    maximum sequence number remote SPX may send without ACK from
  57823.         local SPX (big-endian)
  57824.  0Ch    WORD    remote acknowledge number, next sequence number remote SPX
  57825.         expects to receive (big-endian)
  57826.  0Eh    WORD    remote allocation number, maximum sequence number local SPX
  57827.         may send (big-endian)
  57828.  10h    WORD    connection socket (big-endian)
  57829.  12h  6 BYTEs    immediate node address--bridge on local network to destination
  57830.  18h 10 BYTEs    destination internetwork address (see INT 7A/BX=000Bh)
  57831.  22h    WORD    retransmit count (big-endian)
  57832.  24h    WORD    estimated roundtrip delay (big-endian)
  57833.  26h    WORD    retransmitted packets (big-endian)
  57834.  28h    WORD    suppressed packets (big-endian)
  57835.  2Ah 12 BYTEs    ??? (v2.15)
  57836. ----------7A----BX0016-----------------------
  57837. INT 7A - Novell NetWare - SPX Driver - SEND SPX PACKET
  57838.     BX = 0016h
  57839.     DX = connection ID
  57840.     ES:SI -> Event Control Block (see BX=0003h)
  57841. Notes:    this function is supported by Advanced NetWare 2.1+
  57842.     CX may need to be 0001h ???
  57843. SeeAlso: BX=0011h,BX=0017h
  57844. ----------7A----BX0017-----------------------
  57845. INT 7A - Novell NetWare - SPX Driver - LISTEN FOR SPX PACKET
  57846.     BX = 0017h
  57847.     DX = connection ID (unused in v2.15)
  57848.     ES:SI -> Event Control Block (see BX=0003h)
  57849. Notes:    this function is supported by Advanced NetWare 2.1+
  57850.     CX may need to be 0001h ???
  57851. SeeAlso: BX=0011h,BX=0016h
  57852. ----------7A----BX0018-----------------------
  57853. INT 7A U - Novell NetWare - SPX Driver - internal - ADD DIAGNOSTIC ELEMENT
  57854.     BX = 0018h
  57855.     ES:SI -> diagnostic element (see below) to be added to Diagnostic Queue
  57856. Note:    this function is supported on file servers only under v2.15; v3.02 also
  57857.       supports it on workstations
  57858. SeeAlso: BX=0019h
  57859.  
  57860. Format of diagnostic element:
  57861. Offset    Size    Description
  57862.  00h    DWORD    pointer to next diagnostic element
  57863.  04h    DWORD    pointer to function for ???
  57864.  08h    DWORD    pointer to function for ???
  57865. ----------7A----BX0019-----------------------
  57866. INT 7A U - Novell NetWare - IPX Driver - internal - CANCEL DIAGNOSTIC ELEMENT
  57867.     BX = 0019h
  57868.     ES:SI -> diagnostic element (see BX=0018h) to be removed
  57869. Note:    this function is supported on file servers only under v2.15; v3.02 also
  57870.       supports it on workstations
  57871. SeeAlso: BX=0018h
  57872. ----------7A----BX001A-----------------------
  57873. INT 7A U - Novell NetWare - IPX Driver - internal - GET DRIVER PACKT SIZE LIMIT
  57874.     BX = 001Ah
  57875. Return: AX = packet size with preamble
  57876.     CX = IPX retry count
  57877. Note:    this function is supported on file servers only under v2.15; v3.02 also
  57878.       supports it on workstations
  57879. SeeAlso: BX=000Dh
  57880. ----------7A----BX001B-----------------------
  57881. INT 7A U - Novell NetWare - IPX Driver - INTERNAL
  57882.     BX = 001Bh
  57883.     ???
  57884. Return: ???
  57885. Note:    this function is supported on file servers only under v2.15; v3.02 also
  57886.       supports it on workstations
  57887. ----------7A04-------------------------------
  57888. INT 7A - IBM 3270 Workstation Program API - CREATE A QUEUE
  57889.     AH = 04h
  57890.     ???
  57891. Return: ???
  57892. SeeAlso: AH=06h
  57893. ----------7A06-------------------------------
  57894. INT 7A - IBM 3270 Workstation Program API - DELETE A QUEUE
  57895.     AH = 06h
  57896.     ???
  57897. Return: ???
  57898. SeeAlso: AH=04h
  57899. ----------7A09--BX8020-----------------------
  57900. INT 7A - IBM 3270 Workstation Program API - SESSION SERVICES
  57901.     AH = 09h
  57902.     BX = 8020h (synchronous request)
  57903.     CX = 0000h
  57904.     DX = ID of session manager (SESSMGR)
  57905.     AL = service
  57906.         01h get session ID
  57907.         02h get session info
  57908.         04h dettach from session
  57909.         05h attach to session
  57910.         06h get list of windows available
  57911.         07h get environment of window
  57912.         08h get 'PIF' (program information file) info
  57913.         0Ah get base window ID
  57914.         0Bh get cursor info
  57915.     ES:DI -> control block
  57916. Return: ???
  57917. ----------7A09--BX8020-----------------------
  57918. INT 7A - IBM 3270 Workstation Program API - KEYBOARD SERVICES
  57919.     AH = 09h
  57920.     BX = 8020h (synchronous request)
  57921.     CX = 0000h
  57922.     DX = ID of keyboard manager
  57923.     AL = service
  57924.         01h connect to keyboard
  57925.         02h disconnect from keyboard
  57926.         03h read from keyboard
  57927.         04h send keystroke to session
  57928.         05h disable input
  57929.         06h enable input
  57930.         07h update status code
  57931.     ES:DI -> control block
  57932. Return: ???
  57933. ----------7A09--BX8020-----------------------
  57934. INT 7A - IBM 3270 Workstation Program API - WINDOW SERVICES
  57935.     AH = 09h
  57936.     BX = 8020h (synchronous request)
  57937.     CX = 00FFh
  57938.     DX = ID of window service controller (WSCTRL)
  57939.     AL = service
  57940.         01h connect to WS control
  57941.         02h disconnect from WS control
  57942.         03h add a window
  57943.         04h change window's position on screen
  57944.         05h change window's size
  57945.         06h change window's color
  57946.         07h change window's position in the presentation space
  57947.         08h hide/unhide toggle
  57948.         09h enlarge/reduce toggle
  57949.         0Ah change screen background color
  57950.         0Bh get window's position on screen
  57951.         0Ch get window's size
  57952.         0Dh get window's color
  57953.         0Eh get window's position in the presentation space
  57954.         0Fh determine whether hidden
  57955.         10h determine whether enlarged
  57956.         11h get background color
  57957.         12h get window names
  57958.         13h delete all windows from profile
  57959.         14h pick active window
  57960.         15h redraw screen
  57961.         16h redraw window
  57962.         17h delete a window from profile
  57963.         18h get active window
  57964.         19h get active screen
  57965.         1Ah get window data
  57966.         1Bh change window data
  57967.         1Ch select active screen
  57968.     ES:DI -> control block
  57969. Return: ???
  57970. ----------7A09--BX8020-----------------------
  57971. INT 7A - IBM 3270 Workstation Program API - PRESENTATION SPACE SERVICES
  57972.     AH = 09h
  57973.     BX = 8020h
  57974.     CX = 00FFh
  57975.     DX = ID of PCPSM
  57976.     AL = service
  57977.         01h define presentation space
  57978.         02h delete presentation space
  57979.         03h display presentation space
  57980.         04h position cursor in presentation space
  57981.         05h change default presentation space
  57982.     ES:DI -> control block
  57983. Return: ???
  57984. ----------7A09--BX8020-----------------------
  57985. INT 7A - IBM 3270 Workstation Program API - 3270 EMULATION
  57986.     AH = 09h
  57987.     BX = 8020h
  57988.     CX = 00FFh
  57989.     DX = ID of 3270EML
  57990.     AL = service
  57991.         01h connect
  57992.         02h disconnect
  57993.     ES:DI -> control block
  57994. Return: ???
  57995. ----------7A09--BX8020-----------------------
  57996. INT 7A - IBM 3270 Workstation Program API - OPERATOR INFORMATION AREA
  57997.     AH = 09h
  57998.     BX = 8020h
  57999.     CX = 00FFh
  58000.     DX = ID of OIAM
  58001.     AL = service
  58002.         01h read Operator Information Area
  58003.         02h read OIA subset
  58004.     ES:DI -> control block
  58005. Return: ???
  58006. Note: the OIA is the 25th line on the Host session
  58007. ----------7A09--BX8020-----------------------
  58008. INT 7A - IBM 3270 Workstation Program API - TRANSLATE DATA
  58009.     AH = 09h
  58010.     BX = 8020h
  58011.     CX = 00FFh
  58012.     DX = ID of XLATE
  58013.     AL = service
  58014.         01h translate from host characters to ASCII and vice versa
  58015.         (determined by control block byte 11)
  58016.     ES:DI -> control block
  58017. Return: ???
  58018. ----------7A09--BX8020-----------------------
  58019. INT 7A - IBM 3270 Workstation Program API - COPY SERVICE
  58020.     AH = 09h
  58021.     BX = 8020h
  58022.     CX = 00FFh
  58023.     DX = ID of copy service
  58024.     AL = service
  58025.         01h copy string from one presentation space to another
  58026.         02h copy block from one presentation space to another
  58027.         03h connect to PC session for copy
  58028.         04h disconnect PC session from copy
  58029.     ES:DI -> control block
  58030. Return: ???
  58031. ----------7A09--BX8020-----------------------
  58032. INT 7A - IBM 3270 Workstation Program API - Multi-DOS
  58033.     AH = 09h
  58034.     BX = 8020h
  58035.     CX = 00FFh
  58036.     ES:DI -> control block
  58037.     DX = ID of INDJQRY  
  58038.         get environment size
  58039.        = ID of INDJASY
  58040.         request DOS functions from workstation
  58041.        = ID of MEMORY
  58042.         AL = function
  58043.             01h allocate memory
  58044.             02h deallocate memory
  58045.             03h modify allocated size
  58046. Return: ???
  58047. ----------7A09-------------------------------
  58048. INT 7A - IBM 3270 Workstation Program API - HOST SERVICES
  58049.     AH = 09h
  58050.     BX = request type (4000h async, 8028h synchronous)
  58051.     CX = 0000h
  58052.     DX = ID of MFIC
  58053.     AL = service
  58054.        01h connect to host
  58055.        02h disconnect from host
  58056.        03h read DFT structured data from host
  58057.        04h write DFT structured data to host
  58058.        05h create a host buffer
  58059.     ES:DI -> control block
  58060. ----------7A13-------------------------------
  58061. INT 7A - IBM 3270 Workstation Program API - GET DATA FROM A QUEUE
  58062.     AH = 13h
  58063.     ???
  58064. Return: ???
  58065. ----------7A7A-------------------------------
  58066. INT 7A - Canon IX-30F Image Scanner SI3.SYS - INTERFACE
  58067.     AH = 7Ah
  58068.     ???
  58069. Return: AX = 0000h success
  58070.          000Eh undefined function code
  58071. Note:    this interface is normally on INT 7A but can be changed via device
  58072.       driver command line arguments
  58073. ----------7A81-------------------------------
  58074. INT 7A - IBM 3270 Workstation Program API - RESOLVE A GATE NAME
  58075.     AH = 81h
  58076.     ES:DI -> 8-char blank-padded gate name
  58077.         "SESSMGR ", "KEYBOARD", "WSCTRL     ", "MFIC    ", "PCPSM     ",
  58078.         "3270EML ", "COPY    ", "XLATE     ", "OIAM    ", "MEMORY     ",
  58079.         "INDJQRY ", or "INDJASY "
  58080. Return: DX = gate ID
  58081. ----------7A83-------------------------------
  58082. INT 7A - IBM 3270 Workstation Program API - GET COMPLETION RESULTS
  58083.     AH = 83h
  58084.     ???
  58085. Return: ???
  58086. ----------7AFDCB-----------------------------
  58087. INT 7A - IBM Personal Communications/3270 - INSTALLATION CHECK
  58088.     AX = FDCBh
  58089. Return: DX:AX -> PCS/3270 signature block if loaded (see below)
  58090.  
  58091. Format of signature block:
  58092. Offset    Size    Description
  58093.  04h    WORD    PCS/3270 signature (5741h)
  58094.  06h    WORD    version (0501h = PCS/3270 v1.0)
  58095. ----------7AFE01-----------------------------
  58096. INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL SEND/RECEIVE FUNCTION
  58097.     AX = FE01h
  58098.     ???
  58099. Return: ???
  58100. SeeAlso: AX=FE02h
  58101. ----------7AFE02-----------------------------
  58102. INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL SEND/RECEIVE FUNCTION
  58103.     AX = FE02h
  58104.     ???
  58105. Return: ???
  58106. SeeAlso: AX=FE01h
  58107. ----------7AFF01-----------------------------
  58108. INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL API INITIALIZATION
  58109.     AX = FF01h
  58110.     ES:DI -> API function handler routine
  58111. Return: CX = 1200h
  58112. SeeAlso: AX=FF02h,AX=FF03h
  58113. ----------7AFF02-----------------------------
  58114. INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL API TERMINATION
  58115.     AX = FF02h
  58116. Return: CX = 1200h
  58117. SeeAlso: AX=FF01h
  58118. ----------7AFF03-----------------------------
  58119. INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL API INITIALIZATION
  58120.     AX = FF03h
  58121.     ES:DI -> send/receive function handler routine
  58122. Return: CX = 1200h
  58123. SeeAlso: AX=FF01h
  58124. ----------7AFF04-----------------------------
  58125. INT 7A U - IBM PC3270 EMUL PROG v3 - INTERNAL ???
  58126.     AX = FF04h
  58127.     ES:DI -> ???
  58128. Return: CX = 1200h
  58129. ----------7B---------------------------------
  58130. INT 7B - Btrieve API (single user)
  58131.     DS:DX -> 38-byte parameter record (see below)
  58132. Return: return code field set
  58133. Note:    Btrieve sets low byte of vector to 33h; this serves as the installation
  58134.       check
  58135. SeeAlso: INT 2F/AX=AB01h,INT 7F/AX=0200h
  58136.  
  58137. Format of Btrieve parameter record:
  58138. Offset    Size    Description
  58139.  00h    DWORD    pointer to data buffer
  58140.  04h    WORD    data buffer length
  58141.  06h    DWORD    pointer to 90-byte record containing positioning info
  58142.         (should be same for all calls for same file)
  58143.  0Ah    DWORD    pointer to 38-byte FCB info buffer
  58144.         (should be same for all calls for same file)
  58145.  0Eh    WORD    function code (see below)
  58146.  10h    DWORD    pointer to file name/key buffer
  58147.  14h    BYTE    key length
  58148.  15h    BYTE    key number
  58149.  16h    DWORD    pointer to status code (see below)
  58150.  1Ah    WORD    interface code (version specific)
  58151.         6176h version 5.10
  58152.  
  58153. Values for function code:
  58154.  00h open
  58155.  01h close
  58156.  02h insert
  58157.  03h update
  58158.  04h delete
  58159.  05h get_equal
  58160.  06h get_next
  58161.  07h get_prev
  58162.  08h get_greater
  58163.  09h get_gr_eql
  58164.  0Ah get_less
  58165.  0Bh get_less_eq
  58166.  0Ch get_first
  58167.  0Dh get_last
  58168.  0Eh create
  58169.  0Fh stat
  58170.  10h extend
  58171.  11h set_dir: set directory information
  58172.  12h get_dir: get directory information
  58173.  13h begin_trans
  58174.  14h end_trans
  58175.  15h abort_trans
  58176.  16h get_pos: get record position number
  58177.  17h get_direct: get data by sending record position
  58178.  18h step_next
  58179.  19h stop
  58180.  1Ah version
  58181.  1Bh unlock
  58182.  1Ch reset
  58183.  1Dh set owner
  58184.  1Eh clear owner
  58185.  1Fh create supplemental index
  58186.  20h drop supplemental index
  58187.  21h step first
  58188.  22h step last
  58189.  23h step previous
  58190.  24h get next extended: get multiple records using a filter
  58191.  25h get previous extended: get multiple records using a filter
  58192.  26h step next extended: get multiple records using a filter
  58193.  27h step previous extended: get multiple records using a filter
  58194.  28h insert extended: insert one or more records
  58195.  31h ???
  58196.  add 50 (32h) to any "get" operation to just return the key data
  58197.  add 100 (64h) for a single-record wait lock (automatically released on next
  58198.         get)
  58199.  add 200 (C8h) for a single-record nowait lock (nowait lock returns error 54h
  58200.         or 55h if record already locked)
  58201.  add 300 (12Ch) for a multiple-record wait lock (not released until unlock
  58202.         called)
  58203.  add 400 (190h) for a multiple-record nowait lock (nowait lock returns error
  58204.         54h or 55h if record already locked)
  58205.  
  58206. Values for status code:
  58207.  00h successful
  58208.  01h invalid operation
  58209.  02h I/O error
  58210.  03h file not open
  58211.  04h key value not found
  58212.  05h duplicate key value
  58213.  06h invalid key number
  58214.  07h different key number
  58215.  08h invalid positioning
  58216.  09h end of file
  58217.  0Ah modifiable key value error
  58218.  0Bh invalid file name
  58219.  0Ch file not found
  58220.  0Dh extended file error
  58221.  0Eh pre-image open error
  58222.  0Fh pre-image I/O error
  58223.  10h expansion error
  58224.  11h close error
  58225.  12h disk full
  58226.  13h unrecoverable error
  58227.  14h record manager inactive
  58228.  15h key buffer too short
  58229.  16h data buffer length overrun
  58230.  17h position block length
  58231.  18h page size error
  58232.  19h create I/O error
  58233.  1Ah number of keys
  58234.  1Bh invalid key position
  58235.  1Ch invalid record length
  58236.  1Dh invalid key length
  58237.  1Eh not a Btrieve file
  58238.  1Fh file already extended
  58239.  20h extended I/O error
  58240.  22h invalid extension name
  58241.  23h directory error
  58242.  24h transaction error
  58243.  25h transaction is active
  58244.  26h transaction control file I/O error
  58245.  27h end/abort transaction error
  58246.  28h transaction max files
  58247.  29h operation not allowed
  58248.  2Ah incomplete accelerated access
  58249.  2Bh invalid record address
  58250.  2Ch null key path
  58251.  2Dh inconsistent key flags
  58252.  2Eh access to file denied
  58253.  2Fh maximum open files
  58254.  30h invalid alternate sequence definition
  58255.  31h key type error
  58256.  32h owner already set
  58257.  33h invalid owner
  58258.  34h error writing cache
  58259.  35h invalid interface
  58260.  36h variable page error
  58261.  37h autoincrement error
  58262.  38h incomplete index
  58263.  39h expanded memory error
  58264.  3Ah compression buffer too short
  58265.  3Bh file already exists
  58266.  3Ch reject count reached
  58267.  3Dh work space too small
  58268.  3Eh incorrect descriptor
  58269.  3Fh invalid extended insert
  58270.  40h filter limit reached
  58271.  41h incorrect field offset
  58272.  4Ah automatic transaction abort
  58273.  4Eh deadlock detected
  58274.  50h conflict
  58275.  51h lock error
  58276.  52h lost position
  58277.  53h read outside transaction
  58278.  54h record in use
  58279.  55h file in use
  58280.  56h file table full
  58281.  57h handle table full
  58282.  58h incompatible open mode
  58283.  5Ah redirected device table full
  58284.  5Bh server error
  58285.  5Ch transaction table full
  58286.  5Dh incompatible lock type
  58287.  5Eh permission error
  58288.  5Fh session no longer valid
  58289.  60h communications environment error
  58290.  61h data message too small
  58291.  62h internal transaction error
  58292. ----------7B---------------------------------
  58293. INT 7B - Eicon Access API (3270/5250 gateways)
  58294. ----------7B---------------------------------
  58295. INT 7B CU - AutoCAD ADI INTERFACE
  58296.     AX = function
  58297.         0000h output blank line
  58298.         other ???
  58299. Return: ???
  58300. Note:    called by AutoCAD to perform its output
  58301. SeeAlso: INT 78"AutoCAD",INT 7A"AutoCAD"
  58302. ----------7B---------------------------------
  58303. INT 7B - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ3
  58304. Note:    this vector is overwritten when GO32 starts but is not restored
  58305. SeeAlso: INT 0B,INT 10/AH=FFh"GO32",INT 7A"GO32",INT 7C"GO32"
  58306. ----------7C---------------------------------
  58307. INT 7C U - IBM REXX88PC command language
  58308.     ???
  58309. ----------7C---------------------------------
  58310. INT 7C - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ4
  58311. Note:    this vector is overwritten when GO32 starts but is not restored
  58312. SeeAlso: INT 0C,INT 7B"GO32",INT 7D"GO32"
  58313. ----------7D---------------------------------
  58314. INT 7D - [obsoleted proposal] - ALTERNATE MULTIPLEX INTERRUPT
  58315. Note:    this interface proposal has been moved to INT 2D; there are no known
  58316.       implementations on INT 7D
  58317. SeeAlso: INT 2D, INT 2F
  58318. ----------7D---------------------------------
  58319. INT 7D U - YTERM 1.4 - CLOCK SUPPORT
  58320. SeeAlso: INT 7E"YTERM"
  58321. ----------7D---------------------------------
  58322. INT 7D - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ5
  58323. Note:    this vector is overwritten when GO32 starts but is not restored
  58324. SeeAlso: INT 0D,INT 7C"GO32",INT 7E"GO32"
  58325. ----------7D---------------------------------
  58326. INT 7D - HyperPAD v2.2 - API ACCESS
  58327. Note:    this vector is hooked but immediately passed on (without checking
  58328.       whether the previous handler was 0000h:0000h).  The sole purpose of
  58329.       this vector is to provide the address of the data area described
  58330.       below.
  58331.  
  58332. Format of HyperPAD data area:
  58333. Offset    Size    Description
  58334.  -16h    DWORD    pointer to ??? FAR function
  58335.  -12h    DWORD    pointer to callback setting function
  58336.         [C calling conventions, (*callback)(int (_loadds far *)()) ]
  58337.  -0Eh 6 BYTEs    signature "BRC001"
  58338.  -08h    DWORD    pointer to previous INT 7D handler
  58339.  -04h    DWORD    pointer to ??? data
  58340.  00h        HyperPAD INT 7D handler
  58341. ----------7E---------------------------------
  58342. INT 7E - RESERVED FOR DIP, Ltd. ROM LIBRARY
  58343. ----------7E---------------------------------
  58344. INT 7E U - YTERM 1.4 - ???
  58345. SeeAlso: INT 7D"YTERM",INT 7F"YTERM"
  58346. ----------7E---------------------------------
  58347. INT 7E - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ6
  58348. Note:    this vector is overwritten when GO32 starts but is not restored
  58349. SeeAlso: INT 0E,INT 7D"GO32",INT 7F"GO32"
  58350. ----------7F---------------------------------
  58351. INT 7F - IBM XGA - ???
  58352. ----------7F---------------------------------
  58353. INT 7F - Halo88 - API
  58354.     BX = function
  58355.         64h arc
  58356.         65h bar
  58357.         66h box
  58358.         67h circle
  58359.         68h clr
  58360.         69h default hatch style
  58361.         6Ah default line style
  58362.         6Bh delhcur
  58363.         6Ch delln / deltcur
  58364.         6Dh ellipse
  58365.         6Eh fill
  58366.         6Fh flood
  58367.         70h flood2
  58368.         71h init graphics
  58369.         72h init hcur
  58370.         73h init marker
  58371.         74h init tcur
  58372.         75h inqarc
  58373.         76h inqbknd
  58374.         77h inqclr
  58375.         78h inqerr
  58376.         79h inqgcur
  58377.         7Ah inqhcur
  58378.         7Bh inqmarker
  58379.         7Dh inqtcur
  58380.         7Eh inqtext
  58381.         7Fh lnabs
  58382.         80h lnrel
  58383.         81h markerabs
  58384.         82h markerrel
  58385.         83h moveabs
  58386.         84h movehcurabs
  58387.         85h movehcurrel
  58388.         86h moverel
  58389.         87h movetcurabs
  58390.         88h movetcurrel
  58391.         89h movefrom
  58392.         8Ah moveto
  58393.         8Bh pie
  58394.         8Ch polylnabs
  58395.         8Dh polylnrel
  58396.         8Eh ptabs
  58397.         8Fh ptrel
  58398.         91h setasp
  58399.         92h set color
  58400.         93h set font
  58401.         94h set hatch style
  58402.         95h set line style
  58403.         97h settext
  58404.         98h set text color
  58405.         99h btext
  58406.         9Ah setseg
  58407.         9Bh display
  58408.         9Ch setscreen
  58409.         9Eh close graphics
  58410.         9Fh ftinit
  58411.         A0h ftlocate
  58412.         A1h ftext
  58413.         A5h set viewport
  58414.         A6h set window
  58415.         A7h set world
  58416.         AAh ftcolor
  58417.         ACh initlp
  58418.         ADh inqasp
  58419.         AEh inqdev
  58420.         AFh inqdisplay
  58421.         B0h inqft
  58422.         B1h inqftcolor
  58423.         B2h inqinterlace
  58424.         B3h inqlpa
  58425.         B4h inqlpg
  58426.         B5h inqmode
  58427.         B6h inqscreen
  58428.         B7h inqversion
  58429.         B8h roam
  58430.         B9h scroll
  58431.         BAh setieee
  58432.         BBh set interlace
  58433.         BCh shift
  58434.         BDh start graphics
  58435.         BEh vpan
  58436.         CBh gwrite
  58437.         CCh gread
  58438.         CDh setxor
  58439.         CEh rbox
  58440.         CFh rcir
  58441.         D0h rlnabs
  58442.         D1h rlnrel
  58443.         D2h delbox
  58444.         D3h delcir
  58445.         D5h setseg2
  58446.         DCh worldoff
  58447.         DDh mapwtod
  58448.         DEh mapdtow
  58449.         DFh mapwton
  58450.         E0h mapntow
  58451.         E1h mapdton
  58452.         E2h mapntod
  58453.         E3h inqworld
  58454.         E4h inqviewport
  58455.         E5h set line width
  58456.         E6h lnjoint
  58457.         E7h set locator
  58458.         E8h read locator
  58459.         E9h setdev
  58460.         EBh setstext
  58461.         ECh setstclr
  58462.         EDh setstang
  58463.         EEh stext
  58464.         EFh inqstext
  58465.         F0h setdegree
  58466.         F1h inqstsize
  58467.         F2h polyfabs
  58468.         F3h polyfrel
  58469.         F4h inqdrange
  58470.         F5h inqstang
  58471.         F6h orglocator
  58472.         F7h inqlocator
  58473.         F8h inqarea
  58474.         F9h setipal
  58475.         FAh setborder
  58476.         FBh inqcrange
  58477.         FEh setclip
  58478.         FFh fcir
  58479.            100h setcrange
  58480.            101h setdrange
  58481.            102h setlattr
  58482.            103h polycabs
  58483.            104h polycrel
  58484.            108h memcom
  58485.            109h memexp
  58486.            10Ah memmov
  58487.            10Eh movefx
  58488.            10Fh movetx
  58489.            110h inqrgb
  58490.            111h save image
  58491.            112h restore image
  58492.            113h setapal
  58493.            114h setxpal
  58494.            118h inqtsize
  58495.            12Eh gprint
  58496.            130h setprn
  58497.            131h setpattr
  58498.            133h setbattr
  58499.            135h pexpand
  58500.            136h ptnorm
  58501.            137h pfnorm
  58502.            13Bh inqprn
  58503.            13Ch lopen
  58504.            13Dh lclose
  58505.            13Eh lappend
  58506.            13Fh lrecord
  58507.            140h lswitch
  58508.            142h inqfun
  58509.            15Dh lsetup
  58510.            15Eh lrest
  58511.            15Fh lsave
  58512.     additional parameters on stack
  58513. Return: ???
  58514. Notes:    Halo88 is a suite of graphics routines
  58515.     according to Stuart Kemp, the code appears to make no provisions for
  58516.        chaining
  58517. ----------7F---------------------------------
  58518. INT 7F - CONVERGENT TECHNOLOGIES ClusterShare CTOS ACCESS VECTOR
  58519.     AL = request ID
  58520.         01h "Request"/"RequestDirect"
  58521.         ES:BX -> pRq
  58522.         DX ignored
  58523.         04h "Wait"
  58524.         ES:BX -> ppMsgRet
  58525.         DX = exchange
  58526.         05h "AllocExch"
  58527.         ES:BX -> pExchRet
  58528.         06h "DeAllocExch"
  58529.         DX = exchange
  58530.         07h "Check"
  58531.         ES:BX -> ppMsgRet
  58532.         DX = exchange
  58533.     CX = 4354h ('CT')
  58534. Return: AX = status
  58535.         0000h successful
  58536. ----------7F---------------------------------
  58537. INT 7F - Telebit ACS SERIAL I/O
  58538.     ES:SI-> parameter block
  58539. Return: CF set on error
  58540.     CF clear on success
  58541. Notes:    the signature "PDGATEWRKSTNIF" appears just prior to the interrupt
  58542.       handler; this serves as the installation check
  58543.  
  58544. Format of Telebit ACS parameter block:
  58545. Offset    Size    Description
  58546.  00h    BYTE    command
  58547.             3Ch status
  58548.             3Dh connect
  58549.             3Eh disconnect
  58550.             3Fh read
  58551.             40h data/command write
  58552.             41h clear receive buffer
  58553.             42h get configuration
  58554.             43h get receiver status
  58555.             44h raw write
  58556.             45h search servers
  58557.             46h set transmit buffer size
  58558.  01h    BYTE    gateway number
  58559.  02h    BYTE    reserved
  58560.  03h    BYTE    port
  58561.  04h 17 BYTES    auxiliary buffer
  58562.  15h    BYTE    session
  58563.  16h    WORD    count of bytes passed to API
  58564.  18h    DWORD    buffer pointer passed to/from API
  58565.  1Ch    WORD    count of bytes passed from API
  58566.  1Eh    BYTE    return code (see below)
  58567.  
  58568. Values for return code:
  58569.  00h - success
  58570.  01h - invalid session
  58571.  05h - servername invalid
  58572.  06h - netware fileserver bindery is locked
  58573.  07h communication server not active
  58574.  08h general failure in netware fileserver
  58575.  09h not logged into a fileserver
  58576.  10h connection table full
  58577.  11h no response from communication server
  58578.  12h connection attempt terminated abnormally
  58579.  13h connection refused - no sessions available
  58580.  14h gw_no/port already in use
  58581.  15h invalid connection response
  58582.  16h port invalid
  58583.  17h incorrect version in server response
  58584.  18h gw_no/port combination not configured
  58585.  19h initialization has not been completed
  58586.  20h no more sockets are available
  58587.  21h no active poolname
  58588.  23h FATAL internal interface error
  58589.  24h registration of host workstation failed - name is already in used
  58590.  25h registration of host workstation failed - workstation name table full
  58591.  26h registration of host workstation failed - only one session may be
  58592.     registered for dial-in
  58593.  FFh telebit acs api is busy - retry later
  58594. ----------7F---------------------------------
  58595. INT 7F - Non-dedicated NetWare 2.x File Server - ENTER CONSOLE MODE
  58596. Notes:    the installation check consists of checking for the signature "Lynn"
  58597.       in the four bytes preceding the interrupt handler; if present, the
  58598.       current program is running as a DOS task on a non-dedicated NetWare
  58599.       2.x file server.
  58600.     Before placing the server into "console" mode, it is recommended that
  58601.       NetWare broadcast messages be disabled with INT 21/AX=DE00h.
  58602. SeeAlso: INT 21/AX=DE00h
  58603. ----------7F---------------------------------
  58604. INT 7F U - YTERM - ???
  58605. SeeAlso: INT 7E"YTERM"
  58606. ----------7F---------------------------------
  58607. INT 7F - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ7
  58608. Note:    this vector is overwritten when GO32 starts but is not restored
  58609. SeeAlso: INT 0F,INT 7E"GO32"
  58610. ----------7F---------------------------------
  58611. INT 7F - Canon IXHND2 Scanner Interface
  58612. ----------7F---------------------------------
  58613. INT 7F - Alloy 386/MultiWare (MW386), Novell-Type Network Executive (NTNX)
  58614. Notes:    the words at C800h:0000h and C800h:0002h will both be 584Eh if the
  58615.       MW386 multitasking system is present (i.e. signature "NXNX")
  58616.     NTNX allows its API to be placed on a different interrupt than 7Fh at
  58617.       load time.  To determine the actual vector used, open the device
  58618.       "SPOOLER" with INT 21/AX=3D02h, place it in RAW mode with
  58619.       INT 21/AX=4400h and INT 21/AX=4401h, then read one byte which will
  58620.       be the actual interrupt number being used; the other interrupts may
  58621.       be found with INT 7F/AH=09h/CL=03h
  58622. ----------7F---------------------------------
  58623. INT 7F - Alloy NetWare Support Kit (ANSK) v2.2+ - INSTALLATION CHECK
  58624. Note:    a program may determine that it is running on an ANSK Slave by checking
  58625.       the five bytes at F000h:0000h for the ASCIZ signature "ANSK"; this
  58626.       address is RAM, and should not be written.  However, the above check
  58627.       will not work on Slaves with <1MB RAM or those using the SLIM.SYS
  58628.       device driver
  58629. ----------7F00-------------------------------
  58630. INT 7F - Alloy NTNX, MW386 - SEMAPHORE LOCK AND WAIT
  58631.     AH = 00h
  58632.     DS:DX -> ASCIZ semaphore name (max 64 bytes)
  58633. Return: AL = status
  58634.         00h successful
  58635.         01h invalid function
  58636.         02h semaphore already locked
  58637.         03h unable to lock semaphore
  58638.         04h semaphore space exhausted
  58639.         05h host/target PC did not respond (NTNX)
  58640.     AH = semaphore owner if status=02h
  58641. SeeAlso: AH=01h,AH=02h,AH=41h,INT 67/AH=00h
  58642. ----------7F01-------------------------------
  58643. INT 7F - Alloy NTNX, MW386 - SEMAPHORE LOCK
  58644.     AH = 01h
  58645.     DS:DX -> ASCIZ semaphore name (max 64 bytes)
  58646. Return: AL = status (see AH=00h)
  58647.     AH = semaphore owner if status=02h
  58648. SeeAlso: AH=00h,AH=02h,AH=41h
  58649. ----------7F0104BX0000-----------------------
  58650. INT 7F - HLLAPI (IBM 3270 High-Level Language API)/LLAPI (Rabbit Low Level API)
  58651.     AX = 0104h (HLLAPI gate ID)
  58652.     BX = 0000h
  58653.     DS:SI -> parameter control block (see below)
  58654. Return: parameter control block updated
  58655. SeeAlso: AX=0105h,AX=ABCDh
  58656.  
  58657. Format of parameter control block:
  58658. Offset    Size    Description
  58659.  00h  3 BYTEs    signature = 'PCB'
  58660.  03h    BYTE    function number (see below)
  58661.  04h    WORD    segment of control string
  58662.  06h    WORD    offset of control string
  58663.  08h    WORD    length of control string, unless explicit end-of-str char set
  58664.  0Ah    BYTE    unused (IBM)
  58665.         ControlString[0] (Rabbit)
  58666.  0Bh    WORD    return code
  58667.  0Dh    WORD    maximum length of control string (IBM)
  58668.         unused (Rabbit)
  58669.  
  58670. Values for HLLAPI function number:
  58671.  00h    Query system (Attachmate implementation only)
  58672.  01h    Connect presentation space
  58673.  02h    Disconnect presentation space
  58674.  03h    Send string of keystrokes as if typed from keyboard
  58675.  04h    Wait ~60s, returns status of presentation space
  58676.  05h    Copy current presentation space into a user-defined buffer
  58677.  06h    Search presentation space for first occurrence of a specified string
  58678.  07h    Query cursor location in current presentation space
  58679.  08h    Copy part or all of current presentation space into user buffer
  58680.  09h    Set session parameters; parameters vary by vendor
  58681.  0Ah    Get info on sessions currently connected
  58682.  0Bh    Lock current presentation space
  58683.  0Ch    Unlock previously locked presentation space
  58684.  0Dh    Return copy of operator info area (OIA) of current presentation space
  58685.  0Eh    get attribute byte for given position in the current presentation space
  58686.  0Fh    copy string of characters to the current presentation space
  58687.  10h    workstation control functions
  58688.  11h    storage manager functions, intended primarily for BASIC applications
  58689.     (not implemented by Rabbit)
  58690.  12h    set delay period in half-second intervals
  58691.  14h    get info on level of workstation support used
  58692.  15h    reset session parameters to default values
  58693.  16h    get detailed info on the current session
  58694.  17h    start host notification to application on presentation sp or OIA update
  58695.  18h    check host update when host notification enabled
  58696.  19h    stop host notification
  58697.  1Eh    search field within current presentation space for string
  58698.  1Fh    get first positionof a selected field in the current presentation space
  58699.  20h    get length of specified field
  58700.  21h    copy string into a specified field
  58701.  22h    copy specified field into a user-defined buffer
  58702.  23h    create alternate presentation space (IBM only), don't use with BASIC
  58703.  24h    switch to alternate presentation space (IBM only), not with BASIC
  58704.  25h    display cursor in specified area (IBM only), don't use with BASIC
  58705.  26h    display alternate presentation space (IBM only), don't use with BASIC
  58706.  27h    delete alternate presentation space (IBM only), don't use with BASIC
  58707.  32h    start intercepting keystrokes to allow filtering
  58708.  33h    get keystrokes after turning on interception
  58709.  34h    notify operator when keystroke rejected by filter subroutine
  58710.  35h    stop intercepting keystrokes
  58711.  5Ah    send file
  58712.  5Bh    receive file
  58713.  5Ch    run a program (not implemented by Rabbit)
  58714.  5Dh    execute DOS command (not implemented by Rabbit)
  58715.  63h    change presentation space position to PC display row/col or vice versa
  58716.  FFh    Get info on DCA implementation
  58717.  
  58718. Values for LLAPI function number:
  58719.  80h    initialize LLAPI (internal call)
  58720.  83h    set Session ID (one-character ID)
  58721.  84h    read Session ID (one-character ID)
  58722.  85h    lock 327x keyboard
  58723.  86h    unlock 327x keyboard
  58724.  87h    wait for Clear to Send
  58725.  88h    type ASCII character
  58726.  89h    type 327x key
  58727.  8Ah    read keyboard lock state
  58728.  8Fh    force screen update
  58729.  90h    view session
  58730.  91h    relinquish (suspend foreground until background becomes idle)
  58731.  92h    poke screen character
  58732.  93h    poke translated character
  58733.  94h    peek screen character
  58734.  95h    peek translated character
  58735.  96h    set cursor position
  58736.  97h    send scan code (Rabbit only)
  58737.  98h    synchronize (returns after keystroke queue empty)
  58738.  99h    type PC key (Rabbit only)
  58739.  
  58740. Session Parameters for function 09h:
  58741.  ASCII        ??? (Rabbit only)
  58742.  ATTRIB        return attributes in hex
  58743.  NOATTRIB    return attributes as blanks
  58744.  CONPHYS    make physical connection
  58745.  CONLOG        only make logical connection
  58746.  EAB        copy extended attribute bytes along with data 
  58747.  NOEAB        copy data only
  58748.  ESC=n        set escape character to "n" (default '@')
  58749.  EOT=n        set end of string character (default 00h)
  58750.  FPAUSE        full-duration pause
  58751.  FTNOWAIT    return immediately from functions 5Ah and 5Bh (Rabbit only)
  58752.  FTWAIT        wait for file transfer to complete (Rabbit only)
  58753.  IPAUSE        interruptible pause
  58754.  RABESC        ??? (Rabbit only)
  58755.  NORABESC    ??? (Rabbit only)
  58756.  SCANCODE    ??? (Rabbit only)
  58757.  STRLEN        use explicit string lengths
  58758.  STREOT        use terminated strings
  58759.  SRCHALL    search entire presentation space
  58760.  SRCHFROM    search from specified offset
  58761.  SRCHFRWD    search forward from position 1
  58762.  SRCHBKWD    search backward from last position in presentation space
  58763.  TIMEOUT=n    ??? (Rabbit only)
  58764.  TWAIT        wait specified time for keyboard ready
  58765.  LWAIT        wait until keyboard ready
  58766.  NWAIT        no wait
  58767.  TRON        enable tracing
  58768.  TROFF        disable tracing
  58769.  AUTORESET    send reset before sending keys with function 03h
  58770.  NORESET    don't send reset
  58771.  QUIET        don't display messages sent with INT 21/AH=09h
  58772.  NOQUIET    allow messages to be displayed
  58773.  TIMEOUT=n    set timeout in 30-second intervals, 0 = wait until ^Break
  58774.  XLATE        translate extended attribute bytes
  58775.  NOXLATE    don't translate
  58776.  NEWRET        use HLLAPI v3.0 return code conventions
  58777.  OLDRET        use HLLAPI v2.0 return code conventions
  58778. ----------7F0105-----------------------------
  58779. INT 7F - HDILOAD.EXE - 8514/A VIDEO CONTROLLER INTERFACE
  58780.     AX = 0105h
  58781. Return: CF set on error
  58782.     CF clear if successful
  58783.         CX:DX -> array of FAR pointers to entry points
  58784. Note:    most functions are invoked by pushing the DWORD parameter block pointer
  58785.       and then performing a FAR call via the appropriate vector of the
  58786.       entry point array
  58787. SeeAlso: AX=0104h,AX=ABCDh
  58788.  
  58789. Function numbers: (do FAR call via entry_points+4*function)
  58790.  08h    HOPEN
  58791.  10h    HINT
  58792.  13h    HLDPAL
  58793.  15h    HBBW
  58794.  17h    HBBR
  58795.  18h    HBBCHN
  58796.  1Dh    HQMODE
  58797.  22h    HCLOSE
  58798.  30h    HINIT
  58799.  31h    HSYNC
  58800.  39h    HSPAL
  58801.  3Ah    HRPAL 
  58802. ----------7F02-------------------------------
  58803. INT 7F - Alloy NTNX, MW386 - RELEASE SEMAPHORE
  58804.     AH = 02h
  58805.     DS:DX -> ASCIZ semaphore name (max 64 bytes)
  58806. Return: AL = status
  58807.         00h successful
  58808.         01h invalid function
  58809.         02h semaphore locked by other user
  58810.         AH = semaphore owner
  58811.         03h unable to unlock semaphore
  58812.         05h target PC did not respond
  58813. SeeAlso: AH=00h,AH=01h,AH=42h
  58814. ----------7F0200-----------------------------
  58815. INT 7F - Btrieve Multi-User - GIVE UP TIME???
  58816.     AX = 0200h
  58817. SeeAlso: INT 2F/AX=AB01h,INT 2F/AX=AB02h,INT 7B"Btrieve"
  58818. ----------7F03-------------------------------
  58819. INT 7F - Alloy ANSK, NTNX, MW386 - GET USER NUMBER
  58820.     AH = 03h
  58821. Return: AL = user number
  58822.     AH = machine number (MW386)
  58823. Note:    this function call is the recommended method for a CPU-bound process to
  58824.       prevent its priority from being lowered
  58825. SeeAlso: AH=04h,AH=05h,AH=A1h
  58826. ----------7F04-------------------------------
  58827. INT 7F - Alloy NTNX, MW386 - GET NUMBER OF USERS
  58828.     AH = 04h
  58829. Return: AL = total number of users on currrent machine (MW386)
  58830.     AL = number of slaves on system (NTNX)
  58831. SeeAlso: AH=03h
  58832. ----------7F05-------------------------------
  58833. INT 7F - Alloy NTNX (Host) - LOCK/UNLOCK SYSTEM, SPOOLER CONTROL
  58834.     AH = 05h
  58835.     AL = function
  58836.         00h lock system (disable slave services)
  58837.         01h unlock system
  58838.         02h enable spooler
  58839.         03h disable spooler
  58840.         04h enable slave timer update
  58841.         05h disable slave timer update
  58842.         06h enable form feeds
  58843.         07h disable form feeds
  58844. SeeAlso: INT 17/AH=A4h
  58845. ----------7F05-------------------------------
  58846. INT 7F - Alloy NTNX (Slave), MW386 - GET USER PARAMETERS
  58847.     AH = 05h
  58848.     DX:DI -> buffer for user information record (see below)
  58849. Notes:    MW386 provides this function for backward compatibility only, and sets
  58850.       many of the fields to zero because they are meaningless under MW386
  58851.     this function has no effect when called by the host (user 0)
  58852. SeeAlso: AH=03h
  58853.  
  58854. Format of user information record:
  58855. Offset    Size    Description
  58856.  00h    WORD    segment of video RAM
  58857.  02h    WORD    segment of secondary copy of video RAM
  58858.  04h    WORD    offset of screen update flag (see INT 10/AH=8Bh)
  58859.         flag nonzero if update needed
  58860.  06h    WORD    video NMI enable port
  58861.         (not used by MW386, set to 0000h)
  58862.  08h    WORD    video NMI disable port
  58863.         (not used by MW386, set to 0000h)
  58864.  0Ah    BYTE    processor type
  58865.         00h 8088
  58866.         01h V20
  58867.         02h 8086
  58868.         03h V30
  58869.         06h 80386
  58870.  0Bh    WORD    multitasking flag (00h = single tasking, 01h = multitasking)
  58871.         (not used by MW386, set to 0000h)
  58872.  0Dh    WORD    offset of terminal driver
  58873.         (not used by MW386, set to 0000h)
  58874.  0Fh    BYTE    port for console I/O
  58875.         (not used by MW386, set to 0000h)
  58876.  10h    WORD    offset of processor communication busy flag
  58877.         bit 7 set when slave communicating with host
  58878.  12h    WORD    pointer to FAR NX system call
  58879.         (not used by MW386, set to 0000h)
  58880.  14h    WORD    offset of 16-byte user configuration record (see AH=38h)
  58881.  16h    WORD    offset of command/status word
  58882.  18h    WORD    offset of screen valid flag (see INT 10/AH=93h)
  58883.         nonzero if screen must be repainted
  58884.  1Ah    WORD    offset of screen repaint flag
  58885.  1Ch    WORD    pointer to NEAR NX system call
  58886.         (not used by MW386, set to 0000h)
  58887.  1Eh    WORD    offset for intercept flags
  58888.         (not used by MW386, set to 0000h)
  58889.         intercept flag = FFh if MSDOS intercepts should be disabled
  58890.  20h    WORD    offset of terminal lock flag (see INT 10/AH=92h)
  58891.         lock flag = FFh if backgrnd screen updates should be suspended
  58892.  22h 26 BYTEs    reserved
  58893. ----------7F06-------------------------------
  58894. INT 7F - Alloy NTNX (Host) - GET SHARED DRIVE INFO
  58895.     AH = 06h
  58896.     AL = drive number (1=A:, 2=B:, etc)
  58897.     ES:DI -> drive info record (see below)
  58898. Return: AX = status
  58899.         0000h successful
  58900.         ES:DI buffer filled
  58901.         0001h not shared drive
  58902.  
  58903. Format of drive info record:
  58904. Offset    Size    Description
  58905.  00h    WORD    segment of drive IO-REQUEST structure (MSDOS DPB)
  58906.  02h    WORD    segment of allocation map (owner table)
  58907.         one byte per FAT entry, containing user ID owning that entry
  58908.  04h    WORD    segment of master FAT for drive (copy of FAT on disk)
  58909.  06h    WORD    pointer to configuration file
  58910.  08h    WORD    total number of clusters
  58911.  0Ah    WORD    bytes per sector
  58912.  0Ch    WORD    sectors per cluster
  58913.  0Eh    BYTE    FAT type (0Ch = 12-bit, 10h = 16-bit)
  58914. ----------7F06-------------------------------
  58915. INT 7F - Alloy NTNX (Slave) - ALLOCATE FREE CLUSTER ON SHARED DRIVE
  58916.     AH = 06h
  58917.     DL = drive number (1=A:,2=B:,etc)
  58918.     CX = number of clusters to allocate
  58919. Return: AH = status
  58920.         00h successful
  58921.         CX = number of clusters still free
  58922.         10h invalid shared drive request
  58923.         CL = first and second shared drives
  58924.         11h invalid cluster count (must be 01h-FFh)
  58925. ----------7F07-------------------------------
  58926. INT 7F - Alloy NTNX, MW386 - GET LIST OF SHARED DRIVES
  58927.     AH = 07h
  58928. Return: ES:DI -> shared drive list (see below)
  58929. Note:    MW386 considers all fixed disks to be shared drives; only C and D will
  58930.       be returned as shared
  58931.  
  58932. Format of shared drive list:
  58933. Offset    Size    Description
  58934.  00h    BYTE    string length
  58935.  01h    BYTE    number of shared drives
  58936.  02h  N BYTEs    one byte per shared drive
  58937. ----------7F08-------------------------------
  58938. INT 7F - Alloy NTNX (Host) - GET INTERRUPT VECTORS
  58939.     AH = 08h
  58940.     CL = function
  58941.         00h get original interrupt vector
  58942.         01h get Network Executive interrrupt
  58943.     AL = interrupt number
  58944.     DX:SI -> DWORD to hold interrupt vector
  58945. Return: AL = status
  58946.         00h successful
  58947.         01h interrupt vector not used by network executive
  58948.         02h invalid subfunction
  58949. Note:    the network executive uses interrupts 02h,08h,09h,0Fh,10h,13h,16h-19h,
  58950.       1Ch,20h,28h,2Ah,2Fh,5Bh,67h,7Fh,ECh, and F0h-FFh
  58951. SeeAlso: AH=09h/CL=03h,INT 21/AH=35h
  58952. ----------7F08--CL02-------------------------
  58953. INT 7F - Alloy NTNX - SET MESSAGE DISPLAY TIMEOUT
  58954.     AH = 08h
  58955.     CL = 02h
  58956.     DX = timeout in seconds
  58957. Return: AL = status
  58958.         00h successful
  58959.         02h invalid subfunction
  58960. ----------7F09-------------------------------
  58961. INT 7F - MultiLink Advanced - SET TASK PRIORITY
  58962.     AH = 09h
  58963.     AL = priority (0-7)
  58964. Note:    the installation check consists of ensuring that the interrupt vector
  58965.       is not pointing at segment 0000h, then checking whether the byte
  58966.       at offset 0000h in the interrupt handler's segment is E9h
  58967. ----------7F09-------------------------------
  58968. INT 7F - Alloy NTNX - ENABLE/DISABLE MUD FILE CHECKING
  58969.     AH = 09h
  58970.     CL = function
  58971.         00h enable checking of RTNX.MUD file
  58972.         01h disable RTNX.MUD checking
  58973. ----------7F09--CL02-------------------------
  58974. INT 7F - Alloy NTNX - SWITCH HOST TO DEDICATED MODE
  58975.     AH = 09h
  58976.     CL = 02h
  58977. Note:    in dedicated mode, the host will only poll for I/O requests from the
  58978.       slave processors, and not provide workstation services
  58979. ----------7F09--CL03-------------------------
  58980. INT 7F - Alloy NTNX,MW386 - GET ALTERNATE INTERRUPT
  58981.     AH = 09h
  58982.     CL = 03h
  58983.     AL = default interrupt number (67h,7Fh,etc)
  58984. Return:    CL = actual interrupt which handles specified interrupt's calls
  58985. SeeAlso: AH=08h
  58986. ----------7F0A--CL00-------------------------
  58987. INT 7F - Alloy NTNX - GET SYSTEM FLAGS
  58988.     AH = 0Ah
  58989.     CL = 00h
  58990.     ES:DI -> buffer for system flags (see below)
  58991. Return: ES:DI buffer filled
  58992. Notes:    on a slave, only the NX_Busy flag is returned
  58993.     all three flags are at fixed positions, so this function only needs to
  58994.       be called once
  58995.     an interrupt handler should only perform DOS or device accesses when
  58996.       all three flags are 00h
  58997.  
  58998. Format of system flags:
  58999. Offset    Size    Description
  59000.  00h    DWORD    pointer to NX_Busy flag (nonzero when communicating with users)
  59001.  04h    DWORD    pointer to device driver busy flag
  59002.  08h    DWORD    pointer to InTimer flag
  59003. ----------7F0B--CL02-------------------------
  59004. INT 7F - Alloy NTNX (Host) - SET/RESET GRAPHICS DOS ON SLAVE
  59005.     AH = 0Bh
  59006.     CL = 02h
  59007.     AL = slave ID number
  59008.     CH = DOS to activate
  59009.         00h graphics DOS
  59010.         01h character DOS
  59011. Return: AL = status
  59012.         00h successful
  59013.         01h nothing done, proper DOS type already loaded
  59014. ----------7F10--CL00-------------------------
  59015. INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - OPEN CHANNEL
  59016.     AH = 10h
  59017.     CL = 00h
  59018.     AL = channel number
  59019.     DX:DI -> channel buffer
  59020. Return: AL = status
  59021.         00h successful
  59022.         01h busy
  59023.         02h channel range error (not 00h-3Fh)
  59024.         03h invalid subfunction
  59025.         0Dh unable to open
  59026. Note:    may not be invoked from within a hardware interrupt handler
  59027. SeeAlso: AH=10h/CL=01h,AH=10h/CL=04h,AH=14h/CL=02h
  59028. ----------7F10--CL01-------------------------
  59029. INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - CLOSE CHANNEL
  59030.     AH = 10h
  59031.     CL = 01h
  59032.     AL = channel number
  59033. Return: AL = status
  59034.         00h successful
  59035.         01h busy
  59036.         02h channel range error (not 00h-3Fh)
  59037.         03h invalid subfunction
  59038.         0Ah channel not open
  59039. Note:    may not be invoked from within a hardware interrupt handler
  59040. SeeAlso: AH=10h/CL=00h,AH=10h/CL=05h
  59041. ----------7F10--CL02-------------------------
  59042. INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - LOCK CHANNEL
  59043.     AH = 10h
  59044.     CL = 02h
  59045.     AL = channel number
  59046. Return: AL = status
  59047.         00h successful
  59048.         01h busy
  59049.         02h channel range error (not 00h-3Fh)
  59050.         03h invalid subfunction
  59051.         0Ah channel not open
  59052.         0Ch channel already locked
  59053. Note:    may not be invoked from within a hardware interrupt handler
  59054. SeeAlso: AH=10h/CL=03h,AH=10h/CL=06h,AH=10h/CL=08h
  59055. ----------7F10--CL03-------------------------
  59056. INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - UNLOCK CHANNEL
  59057.     AH = 10h
  59058.     CL = 03h
  59059.     AL = channel number
  59060. Return: AL = status (see AH=10h/CL=02h)
  59061. Notes:    should only be used on channels locked with AH=10h/CL=02h, not on those
  59062.       locked by receipt of a datagram
  59063.     may not be invoked from within a hardware interrupt handler
  59064. SeeAlso: AH=10h/CL=02h,AH=10h/CL=04h,AH=10h/CL=09h
  59065. ----------7F10--CL04-------------------------
  59066. INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - RELEASE BUFFER
  59067.     AH = 10h
  59068.     CL = 04h
  59069.     AL = channel number
  59070. Return: AL = status
  59071.         00h successful
  59072.         01h busy
  59073.         02h channel range error (not 00h-3Fh)
  59074.         03h invalid subfunction
  59075. Notes:    unlocks buffer after received datagram has been processed
  59076.     may not be invoked from within a hardware interrupt handler
  59077. SeeAlso: AH=10h/CL=00h
  59078. ----------7F10--CL05-------------------------
  59079. INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - CLOSE ALL CHANNELS
  59080.     AH = 10h
  59081.     CL = 05h
  59082. Return: AL = status
  59083.         00h successful
  59084.         01h busy
  59085.         02h channel range error (not 00h-3Fh)
  59086.         03h invalid subfunction
  59087. Notes:    clears all pending datagrams and clears buffer pointers before closing
  59088.       the channels
  59089.     may not be invoked from within a hardware interrupt handler
  59090. SeeAlso: AH=10h/CL=01h
  59091. ----------7F10--CL06-------------------------
  59092. INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - LOCK ALL OPEN CHANNELS
  59093.     AH = 10h
  59094.     CL = 06h
  59095. Return: AL = status
  59096.         00h successful
  59097.         01h busy
  59098.         02h channel range error (not 00h-3Fh)
  59099.         03h invalid subfunction
  59100. Note:    may not be invoked from within a hardware interrupt handler
  59101. SeeAlso: AH=10h/CL=02h,AH=10h/CL=08h
  59102. ----------7F10--CL07-------------------------
  59103. INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - UNLOCK ALL LOCKED IDLE CHANNELS
  59104.     AH = 10h
  59105.     CL = 07h
  59106. Return: AL = status
  59107.         00h successful
  59108.         01h busy
  59109.         02h channel range error (not 00h-3Fh)
  59110.         03h invalid subfunction
  59111. Notes:    unlocks all locked channels which have no pending datagrams
  59112.     may not be invoked from within a hardware interrupt handler
  59113. SeeAlso: AH=10h/CL=03h,AH=10h/CL=09h
  59114. ----------7F10--CL08-------------------------
  59115. INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - LOCK MULTIPLE CHANNELS
  59116.     AH = 10h
  59117.     CL = 08h
  59118.     DX = maximum channel number to lock
  59119. Return: AL = status
  59120.         00h successful
  59121.         01h busy
  59122.         02h channel range error (not 00h-3Fh)
  59123.         03h invalid subfunction
  59124. Notes:    locks channels numbered 00h through the value in DX
  59125.     may not be invoked from within a hardware interrupt handler
  59126. SeeAlso: AH=10h/CL=02h,AH=10h/CL=06h,AH=10h/CL=09h
  59127. ----------7F10--CL09-------------------------
  59128. INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - UNLOCK MULTIPLE CHANNELS
  59129.     AH = 10h
  59130.     CL = 09h
  59131.     DX = maximum channel number to unlock
  59132. Return: AL = status
  59133.         00h successful
  59134.         01h busy
  59135.         02h channel range error (not 00h-3Fh)
  59136.         03h invalid subfunction
  59137. Notes:    unlocks channels numbered 00h through the value in DX
  59138.     may not be invoked from within a hardware interrupt handler
  59139. SeeAlso: AH=10h/CL=03h,AH=10h/CL=07h,AH=10h/CL=08h
  59140. ----------7F11-------------------------------
  59141. INT 7F - Alloy NTNX, MW386 - SEND DATAGRAM
  59142.     AH = 11h
  59143.     DX:SI -> request block (see below)
  59144. Return: AL = status
  59145.         00h successful
  59146.         01h busy
  59147.         02h channel range error (not 00h-3Fh)
  59148.         03h invalid subfunction
  59149.         0Ah packet too large (or <2 bytes if NTNX)
  59150.         0Bh can't send packet to itself
  59151.         0Ch invalid number of destinations
  59152.         0Dh destination channel number out of range
  59153.         0Eh destination user is busy
  59154.         0Fh destination user has locked channel
  59155.         10h channel not open
  59156.         11h no datagram server on destination (NTNX)
  59157. Note:    if wildcard channel FFh used, actual channel number will be filled in
  59158. SeeAlso: AH=12h
  59159.  
  59160. Format of request block:
  59161. Offset    Size    Description
  59162.  00h    DWORD    pointer to packet to send
  59163.  04h    WORD    packet size in bytes (1-4096)
  59164.  06h    BYTE    number of destinations for packet (max 1Fh)
  59165.  07h 31 BYTEs    destination user IDs (FFh = broadcast to all except sender)
  59166.  26h 31 BYTEs    destination channels (FFh = first available channel)
  59167.  45h 31 BYTEs    return destination statuses
  59168. ----------7F12-------------------------------
  59169. INT 7F - Alloy NTNX, MW386 - ACKNOWLEDGE DATAGRAM
  59170.     AH = 12h
  59171.     AL = channel number being acknowledged
  59172.     DI:DX = 32-bit status to return to sender
  59173. Return: AL = status
  59174.         00h successful
  59175.         01h busy
  59176.         02h channel range error (not 00h-3Fh)
  59177.         03h invalid subfunction
  59178.         0Ah channel not open
  59179.         0Bh no message in channel
  59180.         0Ch destination slave busy--retry (NTNX)
  59181.         0Dh destination user not active
  59182.         0Eh destination slave not active (NTNX)
  59183.         0Fh destination disabled datagram service
  59184. Note:    also unlocks the channel, allowing the next datagram to be received
  59185. SeeAlso: AH=11h,AH=15h/CL=04h
  59186. ----------7F13--CL00-------------------------
  59187. INT 7F - Alloy NTNX, MW386 - RESET USER DATAGRAMS
  59188.     AH = 13h
  59189.     CL = 00h
  59190. Note:    clears all pending datagrams and removes all channels opened in NTNX
  59191.       compatibility mode
  59192. ----------7F14--CL00-------------------------
  59193. INT 7F - Alloy NTNX, MW386 -  SET RECEIVE ISR
  59194.     AH = 14h
  59195.     CL = 00h
  59196.     DX:DI -> application FAR receive service routine (see below)
  59197. Return: AL = status
  59198.         00h successful
  59199.         01h busy
  59200.         02h channel range error (not 00h-3Fh)
  59201.         03h invalid subfunction
  59202. SeeAlso: AH=14h/CL=01h,AH=14h/CL=03h
  59203.  
  59204. Service routine called with:
  59205.     DH = sender ID
  59206.     DL = channel with datagram
  59207.     interrupts disabled
  59208. Return: AL = response code
  59209.         00h leave buffer locked, set channel status, and repeat call later
  59210.         01h release channel buffer
  59211.         02h change buffer pointer to DX:DI
  59212.     AH,CX,DX,DI,SI may be destroyed
  59213. ----------7F14--CL01-------------------------
  59214. INT 7F - Alloy NTNX, MW386 - SET ACKNOWLEDGE ISR
  59215.     AH = 14h
  59216.     CL = 01h
  59217.     DX:DI -> application FAR acknowledge service routine (see below)
  59218. Return: AL = status
  59219.         00h successful
  59220.         01h busy
  59221.         02h channel range error (not 00h-3Fh)
  59222.         03h invalid subfunction
  59223. Note:    the service routine will be called as soon as an acknowledgment arrives
  59224. SeeAlso: AH=12h,AH=14h/CL=00h,AH=14h/CL=04h,AH=15/CL=04h
  59225.  
  59226. Service routine called with:
  59227.     DS:SI -> acknowledge structure (see AH=15h/CL=04h)
  59228. Return: AL = response code
  59229.         00h application busy, network executive should call again later
  59230.         01h acknowledge accepted
  59231.     AH,DX,SI may be destroyed
  59232. ----------7F14--CL02-------------------------
  59233. INT 7F - Alloy NTNX, MW386 - SET CHANNEL BUFFER POINTER
  59234.     AH = 14h
  59235.     CL = 02h
  59236.     AL = channel number
  59237.     DX:DI -> receive buffer
  59238. Return: AL = status
  59239.         00h successful
  59240.         01h busy
  59241.         02h channel range error (not 00h-3Fh)
  59242.         03h invalid subfunction
  59243. Note:    may be called from within a receive ISR or when a datagram is pending
  59244. SeeAlso: AH=10h/CL=00h,AH=14h/CL=00h
  59245. ----------7F14--CL03-------------------------
  59246. INT 7F - Alloy NTNX, MW386 - GET RECEIVE ISR
  59247.     AH = 14h
  59248.     CL = 03h
  59249. Return: DX:DI -> current receive ISR
  59250. SeeAlso: AH=14h/CL=00h,AH=14h/CL=04h
  59251. ----------7F14--CL04-------------------------
  59252. INT 7F - Alloy NTNX, MW386 - GET ACKNOWLEDGE ISR
  59253.     AH = 14h
  59254.     CL = 04h
  59255. Return: DX:DI -> current acknowledge ISR
  59256. SeeAlso: AH=14h/CL=01h,AH=14h/CL=03h
  59257. ----------7F14--CL05-------------------------
  59258. INT 7F - Alloy NTNX (Host), MW386 - GET BUSY POINTER
  59259.     AH = 14h
  59260.     CL = 05h
  59261.     DX:DI -> buffer for busy structure (see below)
  59262. Return: DX:DI buffer filled
  59263.  
  59264. Format of busy structure:
  59265. Offset    Size    Description
  59266.  00h    DWORD    pointer to busy flag byte
  59267.  04h    WORD    fixed port address (FF00h)
  59268. ----------7F15--CL00-------------------------
  59269. INT 7F - Alloy NTNX, MW386 - GET CHANNEL STATUS
  59270.     AH = 15h
  59271.     CL = 00h
  59272.     AL = channel number
  59273.     DX:DI -> status structure (see below)
  59274. Return: AL = status
  59275.         00h successful
  59276.         01h busy
  59277.         02h channel range error (not 00h-3Fh)
  59278.         03h invalid subfunction
  59279. SeeAlso: AH=15h/CL=01h
  59280.  
  59281. Format of status structure:
  59282. Offset    Size    Description
  59283.  00h    BYTE    channel status
  59284.         bit 0: channel open
  59285.             1: channel buffer contains received data
  59286.             7: channel locked
  59287.  01h    BYTE    sender ID
  59288. ----------7F15--CL01-------------------------
  59289. INT 7F - Alloy NTNX, MW386 - GET NEXT FULL CHANNEL
  59290.     AH = 15h
  59291.     CL = 01h
  59292.     DX:DI -> full-channel structure
  59293. Return: AL = status
  59294.         00h successful
  59295.         01h busy
  59296.         0Ah no datagrams available
  59297. Note:    MW386 v1.0 returns the lowest channel with a datagram; newer versions
  59298.       and NTNX return the oldest datagram
  59299. SeeAlso: AH=15h/CL=00h
  59300.  
  59301. Format of full-channel structure:
  59302. Offset    Size    Description
  59303.  00h    BYTE    number of channel with oldest datagram
  59304.  01h    BYTE    sender ID
  59305. ----------7F15--CL02-------------------------
  59306. INT 7F - Alloy NTNX, MW386 - GET MAXIMUM NUMBER OF CHANNELS
  59307.     AH = 15h
  59308.     CL = 02h
  59309. Return: AH = number of channels available (40h for MW386)
  59310. Note:    the application may always assume at least 32 channels available
  59311. SeeAlso: AH=15h/CL=03h
  59312. ----------7F15--CL03-------------------------
  59313. INT 7F - Alloy NTNX, MW386 - GET MAXIMUM PACKET SIZE
  59314.     AH = 15h
  59315.     CL = 03h
  59316.     DX:DI -> WORD for return value
  59317. Return: buffer WORD filled with maximum packet size (4096 for MW386)
  59318. SeeAlso: AH=15h/CL=02h
  59319. ----------7F15--CL04-------------------------
  59320. INT 7F - Alloy NTNX, MW386 - GET AND CLEAR ACKNOWLEDGE STATUS
  59321.     AH = 15h
  59322.     CL = 04h
  59323.     DX:DI -> status structure (see below)
  59324. Return: AL = status
  59325.         00h successful
  59326.         DX:DI structure filled
  59327.         01h busy
  59328.         0Ah no acknowledgement has arrived
  59329. SeeAlso: AH=12h,AH=14h/CL=01h
  59330.  
  59331. Format of status structure:
  59332. Offset    Size    Description
  59333.  00h    BYTE    sender ID
  59334.  01h    BYTE    channel number
  59335.  02h  4 BYTEs    receiver status (see AH=12h)
  59336. ----------7F16-------------------------------
  59337. INT 7F - Alloy NTNX, MW386 - DIRECT MEMORY TRANSFER
  59338.     AH = 16h
  59339.     DX:SI -> transfer structure (see below)
  59340. Return: AL = status
  59341.         00h successful
  59342.         0Ah source or destination out of range
  59343.         0Bh transfer kernal busy--try again
  59344. Notes:    this call transfers memory contents directly between users; both source
  59345.       and destination user IDs may differ from the caller's ID
  59346.     no segment wrap is allowed
  59347.  
  59348. Format of transfer structure:
  59349. Offset    Size    Description
  59350.  00h    WORD    bytes to transfer
  59351.  02h    BYTE    source ID
  59352.         FEh = caller
  59353.  03h    DWORD    source address
  59354.  07h    BYTE    destination ID
  59355.         FFh = all slaves except caller
  59356.         FEh = caller
  59357.  08h    DWORD    destination address
  59358. ----------7F21-------------------------------
  59359. INT 7F - Alloy NTNX, MW386 - SEND MESSAGE OR COMMAND TO USER(S)
  59360.     AH = 21h
  59361.     AL = sender's user ID
  59362.     DS:DX -> control packet (see below)
  59363. Note:    messages or commands are ignored if disabled by the destination user
  59364. SeeAlso: AH=22h
  59365.  
  59366. Format of control packet:
  59367. Offset    Size    Description
  59368.  00h    BYTE    packet type
  59369.         00h message
  59370.         01h NTNX command
  59371.         02h MW386 command
  59372.  01h    BYTE    destination user ID or 'A' for all users
  59373.  02h 62 BYTEs    ASCIZ message (packet type 00h)
  59374.         BIOS keycodes terminated by NUL byte (type 01h) or word (02h)
  59375. Note:    a maximum of 16 keycodes will be processed for NTNX and MW386 commands
  59376. ----------7F22-------------------------------
  59377. INT 7F - Alloy NTNX - GET MESSAGE
  59378.     AH = 22h
  59379. Return: pending messages displayed on user's screen
  59380. SeeAlso: AH=21h
  59381. ----------7F24-------------------------------
  59382. INT 7F - Alloy NTNX, MW386 - ATTACH OR RELEASE DRIVE FOR LOW-LEVEL WRITE ACCESS
  59383.     AH = 24h
  59384.     CL = function
  59385.         00h attach
  59386.         01h release
  59387.     CH = drive (0=A:,1=B:,etc)
  59388. Return: AX = status
  59389.         00h successful
  59390.         01h invalid request
  59391.         02h already attached
  59392.         03h not attached
  59393.         04h lock table full
  59394. Note:    only drives on the current machine may be attached
  59395. ----------7F24-------------------------------
  59396. INT 7F - Alloy NTNX - ATTACH/RELEASE HOST PROCESSOR
  59397.     AH = 24h
  59398.     CL = function
  59399.         02h attach host
  59400.         03h release host
  59401. Return: AX = status
  59402.         00h successful
  59403.         01h invalid request
  59404.         02h already attached
  59405.         03h not attached
  59406.         04h lock table full
  59407. Note:    the host processor may be attached in order to perform I/O via the host
  59408. ----------7F25--CL00-------------------------
  59409. INT 7F - Alloy ANSK, NTNX, MW386 - GET NETWORK EXECUTIVE VERSION
  59410.     AH = 25h
  59411.     CL = 00h        
  59412. Return: AH = version suffix letter
  59413.     CH = major version number
  59414.     CL = minor version number
  59415. SeeAlso: AH=25h/CL=01h
  59416. ----------7F25--CL01-------------------------
  59417. INT 7F - Alloy ANSK, NTNX, MW386 - GET NETWORK EXECUTIVE TYPE
  59418.     AH = 25h
  59419.     CL = 01h
  59420. Return: CL = type
  59421.         00h RTNX
  59422.         01h ATNX
  59423.         02h NTNX
  59424.         03h BTNX
  59425.         04h MW386
  59426.         05h ANSK
  59427. SeeAlso: AH=25h/CL=00h
  59428. ----------7F26--CL00-------------------------
  59429. INT 7F - Alloy NTNX, MW386 - GET NTNX FILE MODE
  59430.     AH = 26h
  59431.     CL = 00h
  59432. Return: AX = file mode bits
  59433.         bit 0: directory protection enabled
  59434.         1: extended open enabled
  59435.         2: flush on every disk write
  59436.         3: flush on every disk write in locked interval
  59437.         4: flush on reads from simultaneously opened file
  59438. Note:    MW386 does not support file modes, and always returns AX=001Fh
  59439. SeeAlso: AH=26h,AH=26h/CL=06h
  59440. ----------7F26-------------------------------
  59441. INT 7F - Alloy NTNX - SET FILE I/O CHECKING LEVEL
  59442.     AH = 26h
  59443.     CL = check type to set/reset
  59444.         01h directory protection
  59445.         02h extended open
  59446.         03h flush on every disk write
  59447.         04h flush on disk write if any lock set during write
  59448.         05h flush on all reads if file written
  59449.     AL = new state (00h off, 01h on)
  59450. SeeAlso: AH=26h/CL=00h,AH=26h/CL=06h
  59451. ----------7F26--CL06-------------------------
  59452. INT 7F - Alloy NTNX - CANCEL FLUSH ON WRITE
  59453.     AH = 26h
  59454.     CL = 06h
  59455. Note:    cancels flags set by AH=26h/CL=03h and AH=26h/CL=04h
  59456. SeeAlso: AH=26h/CL=00h
  59457. ----------7F30-------------------------------
  59458. INT 7F - Alloy MW386 - GET PORT INFORMATION
  59459.     AH = 30h
  59460.     CX = MW386 port number
  59461. Return: AL = FFh if port not found
  59462.        else     driver unit number
  59463.            BL = port mode
  59464.            BH = port type
  59465.            02h remote
  59466.            DH = owner's machine ID
  59467.            DL = owner's user ID
  59468. SeeAlso: INT 17/AH=8Bh
  59469. ----------7F31-------------------------------
  59470. INT 7F - Alloy MW386 v1.x only - CHECK PORT ASSIGNMENT
  59471.     AH = 31h
  59472.     ???
  59473. Return: ???
  59474. ----------7F37-------------------------------
  59475. INT 7F - Alloy NTNX (Host) - GET SEMAPHORE TABLE
  59476.     AH = 37h
  59477. Return: ES:AX -> semaphore table
  59478. ----------7F37-------------------------------
  59479. INT 7F - Alloy ANSK, NTNX (Slave) - DUMP STRING TO TERMINAL
  59480.     AH = 37h
  59481.     DS:DX -> ASCIZ string to display
  59482. Note:    if the string is empty, a terminal update will be forced
  59483. ----------7F38-------------------------------
  59484. INT 7F - Alloy NTNX (Slave), MW386 - SET NEW TERMINAL DRIVER
  59485.     AH = 38h
  59486.     AL = new terminal driver number
  59487.         FFh dummy driver
  59488.         FEh current driver
  59489.         FDh load new driver
  59490.         DS:SI -> new driver
  59491. SeeAlso: AH=39h
  59492. ----------7F39-------------------------------
  59493. INT 7F - Alloy MW386 - SET TERMINAL DRIVER FOR ANOTHER USER
  59494.     AH = 39h
  59495.     AL = new terminal driver number
  59496.     DL = user number (FFh = caller)
  59497.     DH = machine number if DL <> FFh
  59498. Return: CF set if invalid user number
  59499.     CF clear if successful
  59500. Notes:    only available to supervisors
  59501.     the new driver number will not take effect until the user is rebooted
  59502. SeeAlso: AH=38h
  59503. ----------7F3A-------------------------------
  59504. INT 7F - Alloy MW386 - GET TERMINAL PARAMETERS
  59505.     AH = 3Ah
  59506.     DL = user number (FFh = caller)
  59507.     DH = machine number
  59508. Return: CF clear if successful
  59509.         AH = terminal driver number
  59510.         AL = baud rate (00h = 38400, 01h = 19200, etc)
  59511.         CL = parity (00h none, 01h even, 02h odd)
  59512.         CH = handshaking (00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC)
  59513.     CF set if invalid user number
  59514. SeeAlso: AH=3Bh
  59515. ----------7F3B-------------------------------
  59516. INT 7F - Alloy MW386 - SET TERMINAL PARAMETERS
  59517.     AH = 3Bh
  59518.     AL = baud rate (00h = 38400, 01h = 19200, etc)
  59519.     CL = parity (00h none, 01h even, 02h odd)
  59520.     CH = handshaking (00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC)
  59521.     DL = user number (FFh = caller)
  59522.     DH = machine number for user
  59523. Return: CF set if invalid user number
  59524. Notes:    only available to supervisors
  59525.     the new parameters will take effect immediately if the user's terminal
  59526.       has not been started, else AH=3Dh must be called to post the changes
  59527. SeeAlso: AH=3Ah,AH=3Dh
  59528. ----------7F3C-------------------------------
  59529. INT 7F - Alloy MW386 - ENABLE/DISABLE AUTOBAUD DETECT
  59530.     AH = 3Ch
  59531.     AL = new state
  59532.          00h disabled, 01h enabled
  59533.     DL = user number (FFh = caller)
  59534.     DH = machine number for user
  59535. Return: CF set if invalid user number
  59536. Note:    only available to supervisors
  59537. SeeAlso: AH=3Dh
  59538. ----------7F3D-------------------------------
  59539. INT 7F - Alloy MW386 - POST TERMINAL CONFIGURATION CHANGES
  59540.     AH = 3Dh
  59541. Note:    should be called whenever a program changes the terminal type or its
  59542.       parameters
  59543. SeeAlso: AH=3Bh
  59544. ----------7F41-------------------------------
  59545. INT 7F - Alloy NTNX - LOCK FILE FOR USER
  59546.     AH = 41h
  59547.     AL = user ID
  59548.     DS:DX -> ASCIZ filename
  59549. Return: AL = status
  59550.         00h successful
  59551.         01h invalid function
  59552.         02h already locked
  59553.         03h unable to lock
  59554.         04h lock table full
  59555. Note:    requests exclusive read/write access to file
  59556. SeeAlso: AH=00h,,AH=41h"MW386",AH=42h"NTNX"
  59557. ----------7F41-------------------------------
  59558. INT 7F - Alloy MW386 - LOCK SEMAPHORE FOR USER
  59559.     AH = 41h
  59560.     AL = user ID
  59561.     DS:DX -> ASCIZ semaphore name
  59562. Return: AL = status
  59563.         00h successful
  59564.         01h invalid function
  59565.         02h semaphore already locked
  59566.         03h unable to lock semaphore
  59567.         04h semaphore space exhausted
  59568. SeeAlso: AH=00h,AH=42h"MW386"
  59569. ----------7F42-------------------------------
  59570. INT 7F - Alloy NTNX - UNLOCK FILE FOR USER
  59571.     AH = 42h
  59572.     AL = user ID
  59573.     DS:DX -> ASCIZ filename
  59574. Return: AL = status
  59575.         00h successful
  59576.         01h invalid function
  59577.         02h already locked
  59578.         03h unable to lock
  59579.         04h lock table full
  59580. SeeAlso: AH=00h,AH=41h"NTNX",AH=42h"MW386"
  59581. ----------7F42-------------------------------
  59582. INT 7F - Alloy MW386 - UNLOCK SEMAPHORE FOR USER
  59583.     AH = 42h
  59584.     AL = user ID
  59585.     DS:DX -> ASCIZ semaphore name
  59586. Return: AL = status
  59587.         00h successful
  59588.         01h invalid function
  59589.         03h unable to unlock semaphore
  59590. SeeAlso: AH=02h,AH=41h"MW386",AH=42h"NTNX"
  59591. ----------7F4E-------------------------------
  59592. INT 7F - Alloy MW386 v2+ - SET ERROR MODE
  59593.     AH = 4Eh
  59594.     AL = error mode flags
  59595.         bit 0: display critical disk errors
  59596.         1: display sharing errors
  59597.     DX = 4E58h ("NX")
  59598. Return: AL = status
  59599.         00h successful
  59600. SeeAlso: AH=4Fh
  59601. ----------7F4F-------------------------------
  59602. INT 7F - Alloy MW386 v2+ - SET FCB MODE
  59603.     AH = 4Fh
  59604.     AL = FCB mode
  59605.         02h read/write compatibility
  59606.         42h read/write shared
  59607.     DX = 4E58h ("NX")
  59608. Return: AL = status
  59609.         00h successful
  59610. ----------7F81-------------------------------
  59611. INT 7F - Alloy NTNX - ATTACH DEVICE FOR USER
  59612.     AH = 81h
  59613.     AL = user ID
  59614.     DS:DX -> ASCIZ device name
  59615. SeeAlso: AH=82h
  59616. ----------7F82-------------------------------
  59617. INT 7F - Alloy NTNX - RELEASE DEVICE FOR USER
  59618.     AH = 82h
  59619.     AL = user ID
  59620.     DS:DX -> ASCIZ device name
  59621. SeeAlso: AH=81h
  59622. ----------7FA0-------------------------------
  59623. INT 7F - Alloy MW386 - GET USER NAME
  59624.     AH = A0h
  59625.     DL = user number (FFh = caller)
  59626.     DH = machine number for user
  59627.     ES:DI -> 17-byte buffer for ASCIZ user name
  59628. Return: CF set if invalid user number
  59629. SeeAlso: AH=03h,AH=A1h
  59630. ----------7FA1-------------------------------
  59631. INT 7F - Alloy MW386 - GET MACHINE, USER, AND PROCESS NUMBER
  59632.     AH = A1h
  59633. Return: AL = process number
  59634.     DL = user number
  59635.     DH = machine number
  59636. SeeAlso: AH=03h,AH=A0h,AH=A2h
  59637. ----------7FA2-------------------------------
  59638. INT 7F - Alloy MW386 - GET USER PRIVILEGE LEVEL
  59639.     AH = A2h
  59640.     DL = user number (FFh = caller)
  59641.     DH = machine number for user
  59642. Return: CF clear if successful
  59643.         AL = privilege level
  59644.         00h supervisor
  59645.         01h high
  59646.         02h medium
  59647.         03h low
  59648.     CF set if invalid user number
  59649. SeeAlso: AH=A1h,AH=A3h
  59650. ----------7FA3-------------------------------
  59651. INT 7F - Alloy MW386 - GET USER LOGIN STATE
  59652.     AH = A3h
  59653.     DL = user number
  59654.     DH = machine number for user
  59655. Return: CF clear if successful
  59656.         AL = login state
  59657.         00h never logged in
  59658.         01h currently logged out
  59659.         03h currently logged in
  59660.     CF set if invalid user number or user not active
  59661. SeeAlso: AH=A2h
  59662. ----------7FA4-------------------------------
  59663. INT 7F - Alloy MW386 - VERIFY USER PASSWORD
  59664.     AH = A4h
  59665.     DS:DX -> ASCIZ password (null-padded to 16 bytes)
  59666. Return: AL = 00h if accepted
  59667.        else     invalid password
  59668. ----------7FA5-------------------------------
  59669. INT 7F - Alloy MW386 - GET/SET USER STATUS
  59670.     AH = A5h
  59671.     AL = function
  59672.         00h get status
  59673.         Return: BX = user flags
  59674.                 bit 5: allow messages
  59675.             CL = scan code for task manager hotkey
  59676.             CH = scan code for spooler hotkey
  59677.             DL = scan code for task swapper hotkey
  59678.             DH = modifier key status
  59679.         01h set status
  59680.         BX = user flags (see above)
  59681.         CL = scan code for task manager hotkey
  59682.         CH = scan code for spooler hotkey
  59683.         DL = scan code for task swapper hotkey
  59684.         DH = modifier key status
  59685.     DI = machine number and user number
  59686. Return: CF set if invalid user number
  59687. Note:    must have supervisor privilege to set another user's status
  59688. ----------7FABCDBX0000-----------------------
  59689. INT 7F - IBM 8516 Touch Screen Device Driver - GET API ENTRY
  59690.     AX = ABCDh
  59691.     BX = 0000h
  59692. Return: AX = total number of functions available
  59693.     ES:BX -> entry point array
  59694. SeeAlso: AX=0104h,AX=0105h
  59695.  
  59696. Function numbers:
  59697.  00h    check initialization and reset
  59698.  14h    set user-defined subroutine
  59699. Notes:    each driver function takes two stack parameters using Pascal calling
  59700.       conventions: address of parameter block and address of results buffer
  59701.     all pointers are FAR pointers
  59702.     on return, AX contains the status of the call:
  59703.         AX = 0000h successful
  59704.          0001h invalid input
  59705.          0002h interface error
  59706.          0003h unable to perform function
  59707.  
  59708. Format of parameter block for function 00h:
  59709. Offset    Size    Description
  59710.  00h    WORD    0000h (function number)
  59711. Note:    this function should be called before any other device driver functions
  59712.  
  59713. Format of results buffer for function 00h:
  59714. Offset    Size    Description
  59715.  00h    WORD    touch screen status
  59716.         0000h unavailable
  59717.         0001h uncalibrated
  59718.         FFFFh available
  59719.  02h    WORD    aux mouse status (0000h not present, FFFFh present)
  59720. Notes:    the following driver parameters will have been reset to zero:
  59721.       touchdown counter, liftoff counter, position at last touch, position
  59722.       at last lift, int call mask, select on count, select off count,
  59723.       pos select on count, pos select off count.
  59724.     the following driver parameters will have been reset as listed:
  59725.       mouse emulation mode: left on
  59726.       thresholds: 46 on screen, 96 push harder, 80 push release
  59727.       x, y hysteresis: 400
  59728.       data repeat rate: 40/sec
  59729.       select mechanism: push-harder - first-touch
  59730.       coordinate origin: upper left corner
  59731.       filter frequency: medium
  59732.       data block mask: all enabled
  59733.       click lock: on
  59734. ----------7FB0-------------------------------
  59735. INT 7F - Alloy NTNX, MW386 - RELEASE ALL SEMAPHORES FOR USER
  59736.     AH = B0h
  59737.     AL = user number
  59738.     DS = code segment
  59739. Note:    MW386 ignores AL and DS; it releases all semaphores locked using INT 67
  59740.       or INT 7F locking functions
  59741. SeeAlso: AH=B1h,AH=B2h,AH=B3h,AH=B4h
  59742. ----------7FB1-------------------------------
  59743. INT 7F - Alloy NTNX, MW386 - RELEASE NORMAL SEMAPHORES FOR USER
  59744.     AH = B1h
  59745.     AL = (bits 7-5) 000
  59746.          (bits 4-0) user ID
  59747. Note:    MW386 ignores AL; it releases all semaphores locked using INT 67 or
  59748.       INT 7F locking functions
  59749. SeeAlso: AH=B0h,AH=B2h,AH=B3h,AH=B4h
  59750. ----------7FB2-------------------------------
  59751. INT 7F - Alloy NTNX - RELEASE MESSAGES FOR USER
  59752.     AH = B2h
  59753.     AL = (bits 7-5) 001
  59754.          (bits 4-0) user ID
  59755. SeeAlso: AH=B0h,AH=B1h,AH=B3h,AH=B4h
  59756. ----------7FB3-------------------------------
  59757. INT 7F - Alloy NTNX - RELEASE FILES FOR USER
  59758.     AH = B3h
  59759.     AL = (bits 7-5) 010
  59760.          (bits 4-0) user ID
  59761. SeeAlso: AH=B0h,AH=B1h,AH=B2h,AH=B4h
  59762. ----------7FB4-------------------------------
  59763. INT 7F - Alloy NTNX - RELEASE DEVICES FOR USER
  59764.     AH = B4h
  59765.     AL = user ID
  59766. SeeAlso: AH=B0h,AH=B1h,AH=B2h,AH=B3h
  59767. ----------7FC3-------------------------------
  59768. INT 7F - Alloy MW386 - WRITE BYTE TO TERMINAL AUX PORT
  59769.     AH = C3h
  59770.     AL = byte to write
  59771. Return: CF clear if successful
  59772.     CF set on error
  59773. SeeAlso: AH=C6h
  59774. ----------7FC5-------------------------------
  59775. INT 7F - Alloy MW386 - CHANGE CONSOLE MODE
  59776.     AH = C5h
  59777.     AL = new console mode
  59778.         00h keyboard indirect
  59779.         01h keyboard direct
  59780.         02h data handshake enforced
  59781.         03h no data handshake
  59782. Return: CF clear if successful
  59783.         AL = prior console mode
  59784.     CF set on error (caller is not remote user)
  59785. Note:    modes 2 and 3 may be used for input through the console port; no video
  59786.       output should be performed in these modes
  59787. ----------7FC6-------------------------------
  59788. INT 7F - Alloy MW386 - WRITE BYTE TO CONSOLE PORT
  59789.     AH = C6h
  59790.     AL = byte to write
  59791. Return: CF clear if successful
  59792.     CF set on error (caller is not remote user)
  59793. Note:    any terminal driver data translation will be bypassed
  59794. SeeAlso: AH=C3h,AH=C7h
  59795. ----------7FC7-------------------------------
  59796. INT 7F - Alloy MW386 - READ CONSOLE DATA BYTE
  59797.     AH = C7h
  59798. Return: CF clear if successful
  59799.         AL = byte read
  59800.     CF set on error (no data available or caller is not remote user)
  59801. Note:    used to read data after placing console in mode 2 or 3 (see AH=C5h)
  59802. SeeAlso: AH=C5h,AH=C6h,AH=C8h
  59803. ----------7FC8-------------------------------
  59804. INT 7F - Alloy MW386 - READ CONSOLE DATA INTO BUFFER
  59805.     AH = C8h
  59806.     AL = maximum bytes to read
  59807.     ES:DI -> buffer for console data
  59808. Return: CF clear if successful
  59809.         CX = number of bytes read
  59810.     CF set on error (caller is not remote user)
  59811. SeeAlso: AH=C7h
  59812. ----------7FCF-------------------------------
  59813. INT 7F - Alloy NTNX - REBOOT USER PROCESSOR
  59814.     AH = CFh
  59815.     DS:DX -> ASCIZ string containing user number to be reset
  59816. SeeAlso: AH=D6h
  59817. ----------7FD6-------------------------------
  59818. INT 7F - Alloy MW386 - RESET NETWORK EXECUTIVE
  59819.     AH = D6h
  59820.     DS:DX -> reset packet (see below)
  59821. Return: never if succesful
  59822. Note:    all users will be shut down immediately if successful
  59823. SeeAlso: AH=CFh
  59824.  
  59825. Format of reset packet:
  59826. Offset    Size    Description
  59827.  00h    DWORD    reset code (60606060h)
  59828.  04h 16 BYTEs    ASCIZ supervisor password padded with nulls
  59829. ----------7FD7-------------------------------
  59830. INT 7F - Alloy MW386 - POST EVENT
  59831.     AH = D7h
  59832.     AL = user number (if local event)
  59833.     DX = event number
  59834. ----------7FD8-------------------------------
  59835. INT 7F - Alloy MW386 - FLUSH DISK BUFFERS
  59836.     AH = D8h
  59837. Return: CF set on error
  59838. Note:    forces all disk buffers to be written out immediately
  59839. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h,INT 2F/AX=1120h
  59840. ----------7FDB-------------------------------
  59841. INT 7F - Alloy MW386 v2+ - GET MW386 INVOCATION DRIVE
  59842.     AH = DBh
  59843. Return: AL = drive from which MW386 was started (2=C:,3=D:,etc)
  59844. ----------7FE0-------------------------------
  59845. INT 7F - Alloy MW386 - CREATE DOS TASK
  59846.     AH = E0h
  59847.     AL = memory size (00h=128K, 01h=256K, 02h=384K, 03h=512K, 04h=640K)
  59848.     DS:DX -> ASCIZ task name (max 16 bytes)
  59849. Return: CF clear if successful
  59850.         AL = task create ID
  59851.     CF set on error
  59852. Note:    only foreground DOS tasks can use this function
  59853. SeeAlso: AH=E1h,AH=E2h,AH=E3h,AH=E6h,AH=E7h
  59854. ----------7FE1-------------------------------
  59855. INT 7F - Alloy MW386 - GET DOS TASK PID FROM CREATE ID
  59856.     AH = E1h
  59857.     AL = create ID (from AH=E0h)
  59858. Return: AL = DOS process number
  59859.     CL = memory size (00h=128K, 01h=256K, 02h=384K, 03h=512K, 04h=640K)
  59860. Note:    this function should not be called immediately after creating a new
  59861.       DOS task, since the new task is being initialized by a concurrent
  59862.       process
  59863. SeeAlso: AH=E0h,AH=E2h
  59864. ----------7FE2-------------------------------
  59865. INT 7F - Alloy MW386 - SWITCH TO NEW DOS TASK
  59866.     AH = E2h
  59867.     AL = DOS process number (from AH=E1h)
  59868. Return: CF set on error (invalid process number or caller not foreground task)
  59869. Notes:    specified task becomes the foreground task and current task is placed
  59870.       in the background
  59871.     may only be called by a foreground task
  59872. SeeAlso: AH=E0h,AH=E1h
  59873. ----------7FE3-------------------------------
  59874. INT 7F - Alloy MW386 - CHANGE NAME OF DOS TASK
  59875.     AH = E3h
  59876. ---v1.x---
  59877.     AL = user number
  59878. ---v2+---
  59879.     BH = user number
  59880.     BL = task number
  59881. ---
  59882.     DS:DX -> ASCIZ task name
  59883. Return: CF set on error (invalid process number)
  59884. SeeAlso: AH=E0h,AH=E4h,AH=E5h
  59885. ----------7FE4-------------------------------
  59886. INT 7F - Alloy MW386 - GET TASK NAME FROM PROCESS NUMBER
  59887.     AH = E4h
  59888. ---v1.x---
  59889.     AL = user number
  59890. ---v2+---
  59891.     BH = user number
  59892.     BL = task number
  59893. ---
  59894.     ES:DI -> buffer for task name
  59895. Return: CF clear if successful
  59896.         CL = memory size (00h=128K, 01h=256K, 02h=384K, 03h=512K, 04h=640K)
  59897.         DX = task flags
  59898.         bit 7: MSDOS process
  59899.         ES:DI buffer filled
  59900.     CF set on error (invalid process number)
  59901. SeeAlso: AH=E3h,AH=E5h
  59902. ----------7FE5-------------------------------
  59903. INT 7F - Alloy MW386 - GET PROCESS NUMBER FROM TASK NAME
  59904.     AH = E5h
  59905.     DS:DX -> ASCIZ task name
  59906.     BH = user number
  59907. Return: CF clear if successful
  59908.         AL = DOS process number
  59909.         CL = memory size (00h=128K, 01h=256K, 02h=384K, 03h=512K, 04h=640K)
  59910.     CF set on error (no match for name)
  59911. SeeAlso: AH=E3h,AH=E4h
  59912. ----------7FE6-------------------------------
  59913. INT 7F - Alloy MW386 - GET NUMBER OF AVAILABLE USER TASKS
  59914.     AH = E6h
  59915. Return: AX = number of processes available to current user
  59916. SeeAlso: AH=E0h
  59917. ----------7FE7-------------------------------
  59918. INT 7F - Alloy MW386 - REMOVE DOS TASK
  59919.     AH = E7h
  59920.     AL = DOS process number
  59921. Return: CF set on error (invalid process number or first process)
  59922. Note:    can only be called by a foreground task
  59923. SeeAlso: AH=E0h
  59924. ----------7FE8-------------------------------
  59925. INT 7F - Alloy MW386 - DOS TASK DELAY
  59926.     AH = E8h
  59927.     CX = delay time in milliseconds
  59928. Note:    a delay of 0 may be used to surrender the current time slice
  59929. SeeAlso: INT 15/AX=1000h,INT 21/AH=EEh"DoubleDOS",INT 2F/AX=1680h
  59930. ----------7FF0-------------------------------
  59931. INT 7F - Alloy MW386 - RESTRICT DIRECTORY TO GROUP
  59932.     AH = F0h
  59933.     AL = group number
  59934.     DS:DX -> ASCIZ directory name
  59935. Return: CF clear if successful
  59936.         AX = status
  59937.         0002h directory not found
  59938.         0003h directory not found
  59939.         0005h directory in use, cannot be restricted
  59940.         02xxh restricted to group xxh
  59941.     CF set on error
  59942. Note:    the restriction on the directory may be removed by calling this
  59943.       function with group 0, then using AH=F1h to assign the directory to
  59944.       group 0
  59945. SeeAlso: AH=F1h,AH=F2h,AH=F3h
  59946. ----------7FF1-------------------------------
  59947. INT 7F - Alloy MW386 - ASSIGN DIRECTORY TO GROUP
  59948.     AH = F1h
  59949.     AL = group number
  59950.     DS:DX -> ASCIZ directory name
  59951. Notes:    performs permanent assignment to a group; no immediate action is taken
  59952.       unless the directory has been restricted with AH=F0h
  59953.     may be used to restrict a nonexistent directory
  59954. SeeAlso: AH=F0h
  59955. ----------7FF2-------------------------------
  59956. INT 7F - Alloy MW386 - READ RESTRICTED DIRECTORY ENTRY
  59957.     AH = F2h
  59958.     CX = entry number
  59959.     ES:DI -> 64-byte buffer
  59960. Return: CF clear if successful
  59961.         buffer filled with 63-byte directory info and 1-byte group number
  59962.     CF set on error (invalid entry)
  59963. SeeAlso: AH=F0h,AH=F3h
  59964. ----------7FF3-------------------------------
  59965. INT 7F - Alloy MW386 - READ RESTRICTED DIRECTORY ENTRY FOR GROUP
  59966.     AH = F3h
  59967.     AL = group number
  59968.     CX = entry number
  59969.     ES:DI -> 64-byte buffer
  59970. Return: CF clear if successful
  59971.         CX = next entry number
  59972.         buffer filled with 63-byte directory info and 1-byte group number
  59973.     CF set on error (no more matching entries)
  59974. Note:    like AH=F2h, but only returns directories belonging to the specified
  59975.       group
  59976. SeeAlso: AH=F2h
  59977. ----------7FF8-------------------------------
  59978. INT 7F - Alloy MW386 - ASSIGN USER TO GROUP
  59979.     AH = F8h
  59980.     AL = group number
  59981.     DL = user number
  59982.     DH = machine number (currently 00h)
  59983. Return: CF clear if successful
  59984.     CF set on error (user already in maximum number of groups)
  59985. Note:    each user is allowed eight group assignments
  59986. SeeAlso: AH=F9h,AH=FAh
  59987. ----------7FF9-------------------------------
  59988. INT 7F - Alloy MW386 - REMOVE USER FROM GROUP
  59989.     AH = F9h
  59990.     AL = group number
  59991.     DL = user number
  59992.     DH = machine number (currently 00h)
  59993. Return: CF set if failed
  59994. SeeAlso: AH=F8h,AH=FAh
  59995. ----------7FFA-------------------------------
  59996. INT 7F - Alloy MW386 - GET USER GROUP LIST
  59997.     AH = FAh
  59998.     DL = user number
  59999.     DH = machine number (currently 00h)
  60000.     ES:DI -> 16-byte buffer for group list
  60001. Return: CX = number of groups
  60002.     ES:DI buffer filled with group numbers
  60003. SeeAlso: AH=F8h,AH=F9h
  60004. ----------7FFB-------------------------------
  60005. INT 7F - Alloy MW386 - ASSIGN GROUP NAME
  60006.     AH = FBh
  60007.     CL = group number
  60008.     ES:DI -> ASCIZ group name (max 17 bytes)
  60009. SeeAlso: AH=FCh
  60010. ----------7FFC-------------------------------
  60011. INT 7F - Alloy MW386 - GET GROUP NAME
  60012.     AH = FCh
  60013.     CL = group number
  60014.     ES:DI -> 17-byte buffer for ASCIZ name
  60015. Return: ES:DI buffer filled
  60016. Note:    if the group has not been named, "(unnamed)" is returned
  60017. SeeAlso: AH=FBh
  60018. ----------80---------------------------------
  60019. INT 80 - Q-PRO4 - ???
  60020. ----------80---------------------------------
  60021. INT 80 - reserved for BASIC
  60022. Note:    this vector and INT 81 through INT ED are modified but not restored by
  60023.       Direct Access v4.0, and may be left dangling by other programs
  60024.       written with the same version of compiled BASIC
  60025. SeeAlso: INT 81"BASIC"
  60026. ----------80----BX0000-----------------------
  60027. INT 80 - SoundBlaster SBFM driver - GET VERSION
  60028.     BX = 0000h
  60029. Return: ???
  60030. Note:    SBFM installs at a free interrupt in the range 80h through BFh
  60031. SeeAlso: BX=0008h,INT 2F/AX=FBFBh
  60032. ----------80----BX0001-----------------------
  60033. INT 80 - SoundBlaster SBFM driver - SET MUSIC STATUS BYTE ADDRESS
  60034.     BX = 0001h
  60035.     DX:AX -> music status byte
  60036. SeeAlso: BX=0000h,BX=0002h,BX=0003h
  60037. ----------80----BX0002-----------------------
  60038. INT 80 - SoundBlaster SBFM driver - SET INSTRUMENT TABLE
  60039.     BX = 0002h
  60040.     CX = number of instruments
  60041.     DX:AX -> instrument table
  60042. SeeAlso: BX=0000h,BX=0001h,BX=0005h
  60043. ----------80----BX0003-----------------------
  60044. INT 80 - SoundBlaster SBFM driver - SET SYSTEM CLOCK RATE
  60045.     BX = 0003h
  60046.     AX = clock rate divisor (1193180 / desired frequency in Hertz)
  60047.         FFFFh to restore to 18.2 Hz
  60048. SeeAlso: BX=0000h,BX=0001h,BX=0004h
  60049. ----------80----BX0004-----------------------
  60050. INT 80 - SoundBlaster SBFM driver - SET DRIVER CLOCK RATE
  60051.     BX = 0004h
  60052.     AX = driver clock rate divisor (1193180 / frequency in Hertz)
  60053. Note:    default frequency is 96 Hz
  60054. SeeAlso: BX=0000h,BX=0003h
  60055. ----------80----BX0005-----------------------
  60056. INT 80 - SoundBlaster SBFM driver - TRANSPOSE MUSIC
  60057.     BX = 0005h
  60058.     AX = semi-tone offset
  60059. SeeAlso: BX=0000h,BX=0002h,BX=0006h
  60060. ----------80----BX0006-----------------------
  60061. INT 80 - SoundBlaster SBFM driver - PLAY MUSIC
  60062.     BX = 0006h
  60063.     DX:AX -> music block
  60064. Return: AX = status
  60065.         0000h successful
  60066.         0001h music already active
  60067. SeeAlso: BX=0000h,BX=0007h,BX=000Ah
  60068. ----------80----BX0007-----------------------
  60069. INT 80 - SoundBlaster SBFM driver - STOP MUSIC
  60070.     BX = 0007h
  60071. Return: AX = status
  60072.         0000h successful
  60073.         0001h music not active
  60074. SeeAlso: BX=0000h,BX=0006h,BX=0009h
  60075. ----------80----BX0008-----------------------
  60076. INT 80 - SoundBlaster SBFM driver - RESET DRIVER
  60077.     BX = 0008h
  60078. Return: AX = status
  60079.         0000h successful
  60080.         0001h music is active
  60081. SeeAlso: BX=0000h
  60082. ----------80----BX0009-----------------------
  60083. INT 80 - SoundBlaster SBFM driver - PAUSE MUSIC
  60084.     BX = 0009h
  60085. Return: AX = status
  60086.         0000h successful
  60087.         0001h no music active
  60088. SeeAlso: BX=0000h,BX=0007h,BX=000Ah
  60089. ----------80----BX000A-----------------------
  60090. INT 80 - SoundBlaster SBFM driver - RESUME MUSIC
  60091.     BX = 000Ah
  60092. Return: AX = status
  60093.         0000h successful
  60094.         0001h no music paused
  60095. SeeAlso: BX=0000h,BX=0006h,BX=0009h
  60096. ----------80----BX000B-----------------------
  60097. INT 80 - SoundBlaster SBFM driver - SET USER-DEF TRAP FOR SYSTEM-EXCLUSIVE CMDS
  60098.     BX = 000Bh
  60099.     DX:AX -> trap routine
  60100. SeeAlso: BX=0000h
  60101. ----------8001-------------------------------
  60102. INT 80 - QPC Software PKTINT.COM - INITIALIZE
  60103.     AH = 01h
  60104. Return: AX = 0000h
  60105.     CX = FFFFh
  60106.     DX = FFFFh
  60107. Notes:    this interrupt is the WinQVTNet protected mode interface to Windows 3.0
  60108.     all buffer pointers are reset back to 0
  60109. ----------8002-------------------------------
  60110. INT 80 - QPC Software PKTINT.COM - GET BUFFER ADDRESSES
  60111.     AH = 02h
  60112.     BX = extra bytes to allocate per packet
  60113. Return: AX = segment address of 10K buffer (for receives???)
  60114.     BX = segment address of 2K buffer (for sends???)
  60115. SeeAlso: AH=05h
  60116. ----------8003-------------------------------
  60117. INT 80 - QPC Software PKTINT.COM - GET ENTRY POINT
  60118.     AH = 03h
  60119. Return: CX:DX -> receive call address
  60120. Note:    the returned address can be used in the packet driver calls since it
  60121.       will be a valid address in all DOS boxes
  60122. SeeAlso: AH=06h
  60123. ----------8004-------------------------------
  60124. INT 80 - QPC Software PKTINT.COM - ENABLE???
  60125.     AH = 04h
  60126.     BX = ???
  60127. Return: ???
  60128. ----------8005-------------------------------
  60129. INT 80 - QPC Software PKTINT.COM - GET RECEIVE STATISTICS
  60130.     AH = 05h
  60131. Return: AX = amount of buffer currently in use
  60132.     BX = current offset in buffer
  60133.     CX = number of times receive has been called
  60134. SeeAlso: AH=02h
  60135. ----------8006-------------------------------
  60136. INT 80 - QPC Software PKTINT.COM - REMOVE RECEIVED PACKET
  60137.     AH = 06h
  60138. Return: BX = next packet offset
  60139.     CX = number of bytes still buffered
  60140.     DX = size of packet released back into buffer pool
  60141. SeeAlso: AH=03h
  60142. ----------81---------------------------------
  60143. INT 81 - reserved for BASIC
  60144. Note:    this vector is modified but not restored by Direct Access v4.0, and
  60145.       may be left dangling by other programs written with the same version
  60146.       of compiled BASIC
  60147. SeeAlso: INT 80"BASIC",INT 82"BASIC"
  60148. ----------81---------------------------------
  60149. INT 81 - IBM TOKEN RING ADAPTER - ???
  60150. ----------82---------------------------------
  60151. INT 82 - reserved for BASIC
  60152. SeeAlso: INT 81"BASIC",INT 83"BASIC"
  60153. ----------82---------------------------------
  60154. INT 82 - IBM TOKEN RING ADAPTER - ???
  60155.     AH = function
  60156.         00h display message???
  60157.         DS:BX -> string
  60158.     ???
  60159. Return: ???
  60160. ----------83---------------------------------
  60161. INT 83 - reserved for BASIC
  60162. SeeAlso: INT 82"BASIC",INT 84"BASIC"
  60163. ----------84---------------------------------
  60164. INT 84 - reserved for BASIC
  60165. SeeAlso: INT 83"BASIC",INT 85"BASIC"
  60166. ----------85---------------------------------
  60167. INT 85 - reserved for BASIC
  60168. Note:    INT 80 through INT ED are modified but not restored by Direct Access
  60169.       v4.0, and may be left dangling by other programs written with the
  60170.       same version of compiled BASIC
  60171. SeeAlso: INT 84"BASIC",INT 86"BASIC"
  60172. ----------86---------------------------------
  60173. INT 86 - NetBIOS - ORIGINAL INT 18
  60174. Note:    some implementations of NetBIOS reportedly relocate INT 18 here
  60175. SeeAlso: INT 18
  60176. ----------86---------------------------------
  60177. INT 86 - IBM ROM BASIC - used while in interpreter
  60178. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60179.     BASIC.COM/BASICA.COM do not restore vector on termination
  60180. SeeAlso: INT 85"BASIC",INT 87"BASIC"
  60181. ----------86---------------------------------
  60182. INT 86 - APL*PLUS/PC - Terminate APL session and return to DOS
  60183. SeeAlso: INT 21/AH=4Ch,INT 87"APL"
  60184. ----------87---------------------------------
  60185. INT 87 - IBM ROM BASIC - used while in interpreter
  60186. Notes:    called by ROM BASIC
  60187.     BASIC.COM/BASICA.COM do not restore vector on termination
  60188. SeeAlso: INT 86"BASIC",INT 88"BASIC"
  60189. ----------87---------------------------------
  60190. INT 87 - APL*PLUS/PC - ???
  60191. SeeAlso: INT 86"APL",INT 88/AL=00h
  60192. ----------88---------------------------------
  60193. INT 88 - IBM ROM BASIC - used while in interpreter
  60194. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60195.     BASIC.COM/BASICA.COM do not restore vector on termination
  60196. SeeAlso: INT 87"BASIC",INT 89"BASIC"
  60197. ----------88--00-----------------------------
  60198. INT 88 - APL*PLUS/PC - CREATE OBJECT OF ARBITRARY RANK OR SHAPE
  60199.     AL = 00h
  60200.     BX = STPTR of the variable to be assigned
  60201.     ES:SI -> model of type, rank, and shape (see below)
  60202. Return: ES:DI -> first data byte of object
  60203.     DX:CX = number of elements in the object
  60204. SeeAlso: INT C8"APL"
  60205.  
  60206. Format of shape model:
  60207. Offset    Size    Description
  60208.  00h    BYTE    type
  60209.         01h character (2-byte dimension sizes)
  60210.         02h integer (2-byte dimension sizes)
  60211.         08h floating point (2-byte dimension sizes)
  60212.         11h character (4-byte dimension sizes)
  60213.         12h integer (4-byte dimension sizes)
  60214.         18h floating point (4-byte dimension sizes)
  60215.  01h    BYTE    rank
  60216.  02h    WORD/DWORD first dimension of shape
  60217.  N    WORD/DWORD second dimension of shape
  60218.     ...
  60219. ----------88--01-----------------------------
  60220. INT 88 - APL*PLUS/PC - CREATE CHARACTER SCALAR/VECTOR/MATRIX <64K IN SIZE
  60221.     AL = 01h
  60222.     AH = rank
  60223.     BX = STPTR of the variable to be assigned
  60224.     CX = first dimension (if any)
  60225.     DX = second dimension (if any)
  60226. Return: ES:DI -> object
  60227.     CX = number of elements in the object
  60228. Note:    each dimension must be 32767 or smaller
  60229. SeeAlso: AL=02h,AL=08h,INT C8"APL"
  60230. ----------88--02-----------------------------
  60231. INT 88 - APL*PLUS/PC - CREATE INTEGER SCALAR/VECTOR/MATRIX <64K IN SIZE
  60232.     AL = 02h
  60233.     AH = rank
  60234.     BX = STPTR of the variable to be assigned
  60235.     CX = first dimension (if any)
  60236.     DX = second dimension (if any)
  60237. Return: ES:DI -> object
  60238.     CX = number of elements in the object
  60239. Note:    each dimension must be 32767 or smaller
  60240. SeeAlso: AL=01h,AL=08h,INT C8"APL"
  60241. ----------88--08-----------------------------
  60242. INT 88 - APL*PLUS/PC - CREATE FLOATING POINT SCALAR/VECTOR/MATRIX <64K IN SIZE
  60243.     AL = 08h
  60244.     AH = rank
  60245.     BX = STPTR of the variable to be assigned
  60246.     CX = first dimension (if any)
  60247.     DX = second dimension (if any)
  60248. Return: ES:DI -> object
  60249.     CX = number of elements in the object
  60250. Note:    each dimension must be 32767 or smaller
  60251. SeeAlso: AL=01h,AL=02h,INT C8"APL"
  60252. ----------88--F5-----------------------------
  60253. INT 88 - APL*PLUS/PC - FORCE OBJECT INTO REAL WORKSPACE FROM VIRTUAL
  60254.     AL = F5h
  60255.     BX = STPTR of object
  60256. SeeAlso: INT C8"APL"
  60257. ----------88--F6-----------------------------
  60258. INT 88 - APL*PLUS/PC - MAKE NAME IMMUNE FROM OUTSWAPPING
  60259.     AL = F6h
  60260.     BX = STPTR of object
  60261. SeeAlso: AL=F7h,AL=F8h,INT C8"APL"
  60262. ----------88--F7-----------------------------
  60263. INT 88 - APL*PLUS/PC - MAKE NAME ELIGIBLE FOR OUTSWAPPING
  60264.     AL = F7h
  60265.     BX = STPTR of object
  60266. SeeAlso: AL=F6h,AL=F8h,INT C8"APL"
  60267. ----------88--F8-----------------------------
  60268. INT 88 - APL*PLUS/PC - REPORT WHETHER NAME IS ELIGIBLE FOR OUTSWAPPING
  60269.     AL = F8h
  60270.     BX = STPTR of object
  60271. Return:     BX = 0000h eligible
  60272.           0001h not eligible
  60273. SeeAlso: AL=F6h,AL=F7h,INT C8"APL"
  60274. ----------88--F9-----------------------------
  60275. INT 88 - APL*PLUS/PC - DETERMINE NAME STATUS
  60276.     AL = F9h
  60277.     ES:SI -> name
  60278.     CX = length of name
  60279. Return: CF set if name ill-formed or already in use
  60280.         BX = STPTR if already in symbol table
  60281.     CF clear if name is available for use
  60282.         BX = 0000h
  60283. Note:    does not force the name into the workspace
  60284. SeeAlso: AL=FEh,AL=FFh,INT C8"APL"
  60285. ----------88--FC-----------------------------
  60286. INT 88 - APL*PLUS/PC - DETERMINE IF MEMORY AVAIL WITHOUT GARBAGE COLLECTION
  60287.     AL = FCh
  60288.     BX = amount of memory needed (paragraphs)
  60289. Return: CF clear if memory available
  60290.     CF set if a workspace compaction is required
  60291. SeeAlso: AL=FDh,INT C8"APL"
  60292. ----------88--FD-----------------------------
  60293. INT 88 - APL*PLUS/PC - PERFORM GARBAGE COLLECTION AND RETURN AVAILABLE MEMORY
  60294.     AL = FDh
  60295. Return: BX = number of paragraphs available in workspace
  60296. SeeAlso: AL=FCh,INT C8"APL"
  60297. ----------88--FE-----------------------------
  60298. INT 88 - APL*PLUS/PC - CREATE NAME
  60299.     AL = FEh
  60300.     ES:SI -> name
  60301.     CX = length of name
  60302. Return: BX = STPTR of name
  60303.     DX = interpreter's data segment
  60304. SeeAlso: AL=F9h,AL=FFh,INT C8"APL"
  60305. ----------88--FF-----------------------------
  60306. INT 88 - APL*PLUS/PC - DETERMINE NAME STATUS
  60307.     AL = FFh
  60308.     ES:SI -> name
  60309.     CX = length of name
  60310. Return: CF set if name ill-formed or already in use
  60311.         BX = STPTR if already in symbol table
  60312.     CF clear if name is available for use
  60313.         BX = 0000h
  60314. Note:    forces the name into the workspace and makes it immune from outswapping
  60315. SeeAlso: AL=F9h,AL=FEh,INT C8"APL"
  60316. ----------89---------------------------------
  60317. INT 89 - IBM ROM BASIC - used while in interpreter
  60318. Notes:    called by ROM BASIC
  60319.     BASIC.COM/BASICA.COM do not restore vector on termination
  60320. SeeAlso: INT 88"BASIC",INT 8A"BASIC"
  60321. ----------8A---------------------------------
  60322. INT 8A - IBM ROM BASIC - used while in interpreter
  60323. Notes:    called by ROM BASIC
  60324.     BASIC.COM/BASICA.COM do not restore vector on termination
  60325. SeeAlso: INT 89"BASIC",INT 8B"BASIC"
  60326. ----------8A---------------------------------
  60327. INT 8A - APL*PLUS/PC - PRINT SCREEN
  60328. Note:    same as INT 05
  60329. SeeAlso: INT 05,INT 8C"APL",INT CA"APL"
  60330. ----------8B---------------------------------
  60331. INT 8B - IBM ROM BASIC - used while in interpreter
  60332. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60333.     BASIC.COM/BASICA.COM do not restore vector on termination
  60334. SeeAlso: INT 8A"BASIC",INT 8C"BASIC"
  60335. ----------8B---------------------------------
  60336. INT 8B - APL*PLUS/PC - BEEP
  60337. Note:    same as printing a ^G via INT 21/AH=02h
  60338. SeeAlso: INT 21/AH=02h,INT CB"APL"
  60339. ----------8C---------------------------------
  60340. INT 8C - IBM ROM BASIC - used while in interpreter
  60341. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60342.     BASIC.COM/BASICA.COM do not restore vector on termination
  60343. ----------8C---------------------------------
  60344. INT 8C - APL*PLUS/PC - CLEAR SCREEN MEMORY
  60345.     AX = flag
  60346.         0000h do not save display attributes
  60347.         0001h save attributes
  60348. SeeAlso: INT CC"APL"
  60349. ----------8D---------------------------------
  60350. INT 8D - IBM ROM BASIC - used while in interpreter
  60351. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60352.     BASIC.COM/BASICA.COM do not restore vector on termination
  60353. ----------8E---------------------------------
  60354. INT 8E - IBM ROM BASIC - used while in interpreter
  60355. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60356.     BASIC.COM/BASICA.COM do not restore vector on termination
  60357. ----------8F---------------------------------
  60358. INT 8F - IBM ROM BASIC - used while in interpreter
  60359. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60360.     BASIC.COM/BASICA.COM do not restore vector on termination
  60361. ----------90---------------------------------
  60362. INT 90 - IBM ROM BASIC - used while in interpreter
  60363. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60364.     BASIC.COM/BASICA.COM do not restore vector on termination
  60365. ----------90---------------------------------
  60366. INT 90 - APL*PLUS/PC - USED BY PORT 10 PRINTER DRIVER
  60367. ----------91---------------------------------
  60368. INT 91 - IBM ROM BASIC - used while in interpreter
  60369. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60370.     BASIC.COM/BASICA.COM do not restore vector on termination
  60371. ----------91---------------------------------
  60372. INT 91 - IBM TOKEN RING ADAPTER - ???
  60373. ----------92---------------------------------
  60374. INT 92 - IBM ROM BASIC - used while in interpreter
  60375. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60376.     BASIC.COM/BASICA.COM do not restore vector on termination
  60377. ----------92---------------------------------
  60378. INT 92 - Sangoma X.25 INTERFACE PROGRAM
  60379.     BX:DX -> control block
  60380. SeeAlso: INT 68"Sangoma"
  60381. ----------92E1-------------------------------
  60382. INT 92 - Da Vinci eMail Dispatcher INTERFACE
  60383.     AH = E1h
  60384.     AL = function
  60385.     BX = stack count (number of words to push)
  60386.     CX:DX -> stack data (in word-reversed order ready to push)
  60387. Return: AX = status
  60388.         0001h success
  60389.         FF97h "ERS_NOT_AVAILABLE"
  60390.         FF99h "ERS_TOO_MANY_NAMES"
  60391.         FF9Ah "ERS_BAD_NAME_PASSWORD"
  60392.         FFE3h "ERS_NAME_NOT_FOUND"
  60393.         FFF8h "ERS_USE_STRING" (call NetGetError to get error string)
  60394.         FFFFh "ERS_NO_SUCH_FILE"
  60395. Note:    preserves BP, DS, SI, DI; other registers may be destroyed
  60396. ----------92E100BX000A-----------------------
  60397. INT 92 - Da Vinci eMail Dispatcher - "NetInitStart"
  60398.     AX = E100h
  60399.     BX = 000Ah
  60400.     CX:DX -> parameter block (see below)
  60401. Return: AX = 0001h success
  60402. Note:    this function is used to initialize the dispatcher
  60403. SeeAlso: AX=E101h,AX=E103h
  60404.  
  60405. Format of parameter block:
  60406. Offset    Size    Description
  60407.  00h    WORD    segment of ???
  60408.  02h    WORD    offset of ???
  60409.  04h    WORD    high part of long ???
  60410.  06h    WORD    low part of long ???
  60411.  08h    WORD    high part of long ???
  60412.  0Ah    WORD    low part of long ???
  60413.  0Ch    WORD    high part of long ???
  60414.  0Eh    WORD    low part of long ???
  60415.  10h    WORD    high part of long ???
  60416.  12h    WORD    low part of long ???
  60417. ----------92E101BX0000-----------------------
  60418. INT 92 - Da Vinci eMail Dispatcher - "NetInitCheck"
  60419.     AX = E101h
  60420.     BX = 0000h
  60421.     CX:DX ignored
  60422. Return: AX = 0001h success
  60423. SeeAlso: AX=E100h
  60424. ----------92E102BX0000-----------------------
  60425. INT 92 - Da Vinci eMail Dispatcher - "NetCheckDriver"
  60426.     AX = E102h
  60427.     BX = 0000h
  60428.     CX:DX ignored
  60429. Return: AX = 0001h success
  60430. Note:    this function is used to determine if the dispatcher is loaded
  60431. SeeAlso: AX=E10Bh,AX=E180h
  60432. ----------92E103BX0000-----------------------
  60433. INT 92 - Da Vinci eMail Dispatcher - "NetTerminate"
  60434.     AX = E103h
  60435.     BX = 0000h
  60436.     CX:DX ignored
  60437. Return: AX = status (see AH=E1h)
  60438. SeeAlso: AX=E100h
  60439. ----------92E104BX0006-----------------------
  60440. INT 92 - Da Vinci eMail Dispatcher - "NetWhereIs"
  60441.     AX = E104h
  60442.     BX = 0006h
  60443.     CX:DX -> parameter block (see below)
  60444. Return: AX = status (see AH=E1h)
  60445. Note:    this function is used to verify node address for usernames
  60446.  
  60447. Format of parameter block:
  60448. Offset    Size    Description
  60449.  00h    WORD    segment of node address buffer
  60450.  02h    WORD    offset of node address buffer
  60451.  04h    WORD    segment of uppercase username
  60452.  06h    WORD    offset of uppercase username
  60453.  08h    WORD    segment of "DVSEMAIL"
  60454.  0Ah    WORD    offset of "DVSEMAIL"
  60455. ----------92E105BX0007-----------------------
  60456. INT 92 - Da Vinci eMail Dispatcher - "NetOpen"
  60457.     AX = E105h
  60458.     BX = 0007h
  60459.     CX:DX -> parameter block (see below)
  60460. Return: AX = 0000h Error
  60461.     AX = handle
  60462. Note:    this function is used to open a submission channel
  60463. SeeAlso: AX=E10Ah
  60464.  
  60465. Format of parameter block:
  60466. Offset    Size    Description
  60467.  00h    WORD    operation (1 = read, 2 = write)
  60468.  02h    WORD    segment of uppercase To: username
  60469.  04h    WORD    offset of uppercase To: username
  60470.  06h    WORD    segment of "DVSEMAIL"
  60471.  08h    WORD    offset of "DVSEMAIL"
  60472.  0Ah    WORD    segment of node address
  60473.  0Ch    WORD    offset of node address
  60474. ----------92E106BX0004-----------------------
  60475. INT 92 - Da Vinci eMail Dispatcher - "NetRead"
  60476.     AX = E106h
  60477.     BX = 0004h
  60478.     CX:DX -> parameter block
  60479. Return: AX = 0001h
  60480. SeeAlso: AX=E108h
  60481. ----------92E107BX0002-----------------------
  60482. INT 92 - Da Vinci eMail Dispatcher - "NetGetError"
  60483.     AX = E107h
  60484.     BX = 0002h
  60485.     CX:DX -> parameter block
  60486. Return: AX = 0001h
  60487. ----------92E108BX0004-----------------------
  60488. INT 92 - Da Vinci eMail Dispatcher - "NetWrite"
  60489.     AX = E108h
  60490.     BX = 0004h
  60491.     CX:DX -> parameter block (see below)
  60492. Return: AX = amount written
  60493. Note:    this function is used to write transactions to the dispatcher.
  60494.       The command block is written first and then another call is used
  60495.       to write the associated data.
  60496. SeeAlso: AX=E106h
  60497.  
  60498. Format of parameter block:
  60499. Offset    Size    Description
  60500.  00h    WORD    buffer count
  60501.  02h    WORD    segment of command buffer
  60502.  04h    WORD    offset of command buffer
  60503.  06h    WORD    handle from NetOpen
  60504.  
  60505. Format of command buffer:
  60506. Offset    Size    Description
  60507.  00h    BYTE    command
  60508.         21h '!' Protocol commands for remote control
  60509.         41h 'A' Authorization protocol element
  60510.         42h 'B' Return(back) routing information
  60511.             Associated data is the From: username
  60512.         43h 'C' Carbon Copy list
  60513.             Associated data is a comma delimitted list of usernames
  60514.         44h 'D' Distribution list
  60515.             Associated data is a comma delimitted list of usernames
  60516.         45h 'E' Mail end marker
  60517.             No associated data
  60518.         48h 'H' Mail message header
  60519.             Associated data is a message header buffer
  60520.         4Dh 'M' Mail message
  60521.             Associated data is the body of the message
  60522.         4Fh 'O' Object
  60523.         50h 'P' Paperclip attachment
  60524.         52h 'R' Routing information
  60525.             Associated data is the To: username
  60526.         53h 'S' Subject
  60527.             Associated data is the subject of the message
  60528.         54h 'T' Trail of Reply/Forwards
  60529.  01h    BYTE    subcommand
  60530.  02h    DWORD    length of associated data
  60531.  
  60532. Format of message header buffer:
  60533. Offset    Size    Description
  60534.  00h 30 BYTEs    subject line
  60535.  1Eh 24 BYTEs    To
  60536.  36h 24 BYTEs    From
  60537.  4Eh    DWORD    Time
  60538.         BYTE    0
  60539.         BYTE    hour
  60540.         BYTE    minute
  60541.         BYTE    second
  60542.  52h    DWORD    Date
  60543.         BYTE    0
  60544.         BYTE    year
  60545.         BYTE    month
  60546.         BYTE    day
  60547.  56h    DWORD    serial number (0L)
  60548.  5Ah    WORD    mail types
  60549.         bit 7    blind carbon copy
  60550.         bit 6    carbon copy
  60551.         bit 5    priority
  60552.         bit 4    confidential
  60553.         bit 3    certified
  60554.         bit 2    bulk
  60555.         bits 1-0 class (first, second, third, bulk)
  60556.  5Ch    WORD    special types (0)
  60557. ----------92E109BX0001-----------------------
  60558. INT 92 - Da Vinci eMail Dispatcher - "NetErrorFix" (UNUSED)
  60559.     AX = E109h
  60560.     BX = 0001h
  60561.     CX:DX -> ???
  60562. Return: AX = FF97h (ERS_NOT_AVAILABLE)
  60563. ----------92E10ABX0001-----------------------
  60564. INT 92 - Da Vinci eMail Dispatcher - "NetClose"
  60565.     AX = E10Ah
  60566.     BX = 0001h
  60567.     CX:DX -> parameter block (see below)
  60568. Return: AX = 0001h
  60569. Note:    this function is used to close a dispatcher handle
  60570. SeeAlso: AX=E105h
  60571.  
  60572. Format of parameter block:
  60573. Offset    Size    Description
  60574.  00h    WORD    handle from NetOpen
  60575. ----------92E10BBX0004-----------------------
  60576. INT 92 - Da Vinci eMail Dispatcher - "NetCheckQueue"
  60577.     AX = E10Bh
  60578.     BX = 0004h
  60579.     CX:DX -> parameter block (see below)
  60580. Return: AX = 0001h
  60581. SeeAlso: AX=E102h,AX=E10Ch
  60582.  
  60583. Format of parameter block:
  60584. Offset    Size    Description
  60585.  00h    WORD    segment of 24 byte username buffer
  60586.  02h    WORD    offset of 24 byte username buffer
  60587.  04h    WORD    segment of 24 byte protocol buffer
  60588.  06h    WORD    offset of 24 byte protocol buffer
  60589. ----------92E10CBX0002-----------------------
  60590. INT 92 - Da Vinci eMail Dispatcher - "NetReadQueue"
  60591.     AX = E10Ch
  60592.     BX = 0002h
  60593.     CX:DX -> parameter block (see below)
  60594. Return: AX = 0001h
  60595. SeeAlso: AX=E10Bh
  60596.  
  60597. Format of parameter block:
  60598. Offset    Size    Description
  60599.  00h    WORD    Segment of 128 byte node address buffer
  60600.  02h    WORD    Offset of 128 byte node address buffer
  60601. ----------92E10DBX0006-----------------------
  60602. INT 92 - Da Vinci eMail Dispatcher - "NetSubmitName"
  60603.     AX = E10Dh
  60604.     BX = 0006h
  60605.     CX:DX -> parameter block (see below)
  60606. Return: AX = status (see AH=E1h)
  60607. Note:    this function is used to verify username/password
  60608. SeeAlso: AX=E10Eh
  60609.  
  60610. Format of parameter block:
  60611. Offset    Size    Description
  60612.  00h    WORD    segment of uppercase password string
  60613.  02h    WORD    offset of uppercase password string
  60614.  04h    WORD    segment of uppercase username string
  60615.  06h    WORD    offset of uppercase username string
  60616.  08h    WORD    segment of "DVSEMAIL"
  60617.  0Ah    WORD    offset of "DVSEMAIL"
  60618. ----------92E10EBX0004-----------------------
  60619. INT 92 - Da Vinci eMail Dispatcher - "NetRemoveName"
  60620.     AX = E10Eh
  60621.     BX = 0004h
  60622.     CX:DX -> parameter block (see below)
  60623. Return: AX = 0001h
  60624. Note:    this function is used to remove a username
  60625. SeeAlso: AX=E10Dh
  60626.  
  60627. Format of parameter block:
  60628. Offset    Type    Description
  60629.  00h    WORD    segment of uppercase username
  60630.  02h    WORD    offset of uppercase username
  60631.  04h    WORD    segment of "DVSEMAIL"
  60632.  06h    WORD    offset of "DVSEMAIL"
  60633. ----------92E10FBX0000-----------------------
  60634. INT 92 - Da Vinci eMail Dispatcher - IS ANYONE THERE? QUERY
  60635.     AX = E10Fh
  60636.     BX = 0000h
  60637.     CX:DX ignored
  60638. Return: AX = 0001h
  60639. ----------92E110BX0006-----------------------
  60640. INT 92 - Da Vinci eMail Dispatcher - "NetGetAltRoute"
  60641.     AX = E110h
  60642.     BX = 0006h
  60643.     CX:DX -> ???
  60644. Return: AX = 0001h
  60645. SeeAlso: AX=E111h,AX=E113h
  60646. ----------92E111BX0004-----------------------
  60647. INT 92 - Da Vinci eMail Dispatcher - "NetDeleteAltRoutes"
  60648.     AX = E111h
  60649.     BX = 0004h
  60650.     CX:DX -> ???
  60651. Return: AX = 0001h
  60652. SeeAlso: AX=E110h,AX=E113h
  60653. ----------92E112BX0008-----------------------
  60654. INT 92 - Da Vinci eMail Dispatcher - "NetChangePassword"
  60655.     AX = E112h
  60656.     BX = 0008h
  60657.     CX:DX -> ???
  60658. Return: AX = 0001h
  60659. ----------92E113BX0008-----------------------
  60660. INT 92 - Da Vinci eMail Dispatcher - "NetSetAltRoute"
  60661.     AX = E113h
  60662.     BX = 0008h
  60663.     CX:DX -> ???
  60664. Return: AX = 0001h
  60665. SeeAlso: AX=E110h,AX=E111h
  60666. ----------92E175-----------------------------
  60667. INT 92 - Da Vinci eMail Dispatcher - BECOME MICRO TSR
  60668.     AX = E175h
  60669. Return: AX = 0012h
  60670.     BX = PSP
  60671. ----------92E180-----------------------------
  60672. INT 92 - Da Vinci eMail Dispatcher - INSTALLATION CHECK
  60673.     AX = E180h
  60674. Return: AX = 0012h if installed
  60675.     ES:DX -> '$'-terminated driver information string
  60676. SeeAlso: AX=E102h
  60677. ----------93---------------------------------
  60678. INT 93 - IBM ROM BASIC - used while in interpreter
  60679. Notes:    called by ROM BASIC
  60680.     BASIC.COM/BASICA.COM do not restore vector on termination
  60681. ----------93---------------------------------
  60682. INT 93 - IBM TOKEN RING ADAPTER - ???
  60683. ----------94---------------------------------
  60684. INT 94 - IBM ROM BASIC - used while in interpreter
  60685. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60686.     BASIC.COM/BASICA.COM do not restore vector on termination
  60687. ----------95---------------------------------
  60688. INT 95 - IBM ROM BASIC - used while in interpreter
  60689. Notes:    called by ROM BASIC
  60690.     BASIC.COM/BASICA.COM do not restore vector on termination
  60691. ----------95---------------------------------
  60692. INT 95 - APL*PLUS/PC - DETERMINE R= SPACE
  60693. Note:    use only when the R= option is invoked on entering APL
  60694. ----------96---------------------------------
  60695. INT 96 - IBM ROM BASIC - used while in interpreter
  60696. Notes:    called by ROM BASIC
  60697.     BASIC.COM/BASICA.COM do not restore vector on termination
  60698. ----------97---------------------------------
  60699. INT 97 - IBM ROM BASIC - used while in interpreter
  60700. Notes:    called by ROM BASIC
  60701.     BASIC.COM/BASICA.COM do not restore vector on termination
  60702. ----------98---------------------------------
  60703. INT 98 - IBM ROM BASIC - used while in interpreter
  60704. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60705.     BASIC.COM/BASICA.COM do not restore vector on termination
  60706. ----------99---------------------------------
  60707. INT 99 - IBM ROM BASIC - used while in interpreter
  60708. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60709.     BASIC.COM/BASICA.COM do not restore vector on termination
  60710. ----------9A---------------------------------
  60711. INT 9A - IBM ROM BASIC - used while in interpreter
  60712. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60713.     BASIC.COM/BASICA.COM do not restore vector on termination
  60714. ----------9B---------------------------------
  60715. INT 9B - IBM ROM BASIC - used while in interpreter
  60716. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60717.     BASIC.COM/BASICA.COM do not restore vector on termination
  60718. ----------9C---------------------------------
  60719. INT 9C - IBM ROM BASIC - used while in interpreter
  60720. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60721.     BASIC.COM/BASICA.COM do not restore vector on termination
  60722. ----------9D---------------------------------
  60723. INT 9D - IBM ROM BASIC - used while in interpreter
  60724. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60725.     BASIC.COM/BASICA.COM do not restore vector on termination
  60726. ----------9E---------------------------------
  60727. INT 9E - IBM ROM BASIC - used while in interpreter
  60728. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60729.     BASIC.COM/BASICA.COM do not restore vector on termination
  60730. ----------9F---------------------------------
  60731. INT 9F - IBM ROM BASIC - used while in interpreter
  60732. Notes:    called by ROM BASIC
  60733.     BASIC.COM/BASICA.COM do not restore vector on termination
  60734. ----------A0---------------------------------
  60735. INT A0 - IBM ROM BASIC - used while in interpreter
  60736. Notes:    called by ROM BASIC
  60737.     BASIC.COM/BASICA.COM do not restore vector on termination
  60738. ----------A0---------------------------------
  60739. INT A0 - APL*PLUS/PC - USED BY APL/GSS*CGI GRAPHICS INTERFACE
  60740. SeeAlso: INT 59
  60741. ----------A1---------------------------------
  60742. INT A1 - IBM ROM BASIC - used while in interpreter
  60743. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60744.     BASIC.COM/BASICA.COM do not restore vector on termination
  60745. ----------A2---------------------------------
  60746. INT A2 - IBM ROM BASIC - used while in interpreter
  60747. Notes:    called by ROM BASIC
  60748.     BASIC.COM/BASICA.COM do not restore vector on termination
  60749. ----------A3---------------------------------
  60750. INT A3 - IBM ROM BASIC - used while in interpreter
  60751. Notes:    called by ROM BASIC
  60752.     BASIC.COM/BASICA.COM do not restore vector on termination
  60753. ----------A4---------------------------------
  60754. INT A4 - IBM ROM BASIC - used while in interpreter
  60755. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60756.     BASIC.COM/BASICA.COM do not restore vector on termination
  60757. ----------A4---------------------------------
  60758. INT A4 U - Right Hand Man - API
  60759.     AH = function number (v3.3 supports functions 00h-52h)
  60760. Return: CF set on error
  60761.     CF clear if successful
  60762. Program: Right Hand Man is a TSR desk-top utility originally by Red E Products
  60763.       which has evolved into Futurus Team
  60764. Note:    this interrupt is only hooked while popped up
  60765. SeeAlso: INT 2F/AX=A4E0h
  60766. ----------A5---------------------------------
  60767. INT A5 - IBM ROM BASIC - used while in interpreter
  60768. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60769.     BASIC.COM/BASICA.COM do not restore vector on termination
  60770. ----------A6---------------------------------
  60771. INT A6 - IBM ROM BASIC - used while in interpreter
  60772. Notes:    called by ROM BASIC
  60773.     BASIC.COM/BASICA.COM do not restore vector on termination
  60774. ----------A7---------------------------------
  60775. INT A7 - IBM ROM BASIC - used while in interpreter
  60776. Notes:    called by ROM BASIC
  60777.     BASIC.COM/BASICA.COM do not restore vector on termination
  60778. ----------A8---------------------------------
  60779. INT A8 - IBM ROM BASIC - used while in interpreter
  60780. Notes:    called by ROM BASIC
  60781.     BASIC.COM/BASICA.COM do not restore vector on termination
  60782. ----------A9---------------------------------
  60783. INT A9 - IBM ROM BASIC - used while in interpreter
  60784. Notes:    called by ROM BASIC
  60785.     BASIC.COM/BASICA.COM do not restore vector on termination
  60786. ----------AA---------------------------------
  60787. INT AA - IBM ROM BASIC - used while in interpreter
  60788. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60789.     BASIC.COM/BASICA.COM do not restore vector on termination
  60790. ----------AB---------------------------------
  60791. INT AB - IBM ROM BASIC - used while in interpreter
  60792. Notes:    called by ROM BASIC
  60793.     BASIC.COM/BASICA.COM do not restore vector on termination
  60794. ----------AC---------------------------------
  60795. INT AC - IBM ROM BASIC - used while in interpreter
  60796. Notes:    called by ROM BASIC
  60797.     BASIC.COM/BASICA.COM do not restore vector on termination
  60798. ----------AD---------------------------------
  60799. INT AD - IBM ROM BASIC - used while in interpreter
  60800. Notes:    called by ROM BASIC
  60801.     BASIC.COM/BASICA.COM do not restore vector on termination
  60802. ----------AE---------------------------------
  60803. INT AE - IBM ROM BASIC - used while in interpreter
  60804. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60805.     BASIC.COM/BASICA.COM do not restore vector on termination
  60806. ----------AF---------------------------------
  60807. INT AF - IBM ROM BASIC - used while in interpreter
  60808. Notes:    called by ROM BASIC
  60809.     BASIC.COM/BASICA.COM do not restore vector on termination
  60810. ----------B0---------------------------------
  60811. INT B0 - IBM ROM BASIC - used while in interpreter
  60812. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60813.     BASIC.COM/BASICA.COM do not restore vector on termination
  60814. ----------B1---------------------------------
  60815. INT B1 - IBM ROM BASIC - used while in interpreter
  60816. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60817.     BASIC.COM/BASICA.COM do not restore vector on termination
  60818. ----------B2---------------------------------
  60819. INT B2 - IBM ROM BASIC - used while in interpreter
  60820. Notes:    called by ROM BASIC
  60821.     BASIC.COM/BASICA.COM do not restore vector on termination
  60822. ----------B3---------------------------------
  60823. INT B3 - IBM ROM BASIC - used while in interpreter
  60824. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  60825.     BASIC.COM/BASICA.COM do not restore vector on termination
  60826. ----------B370-------------------------------
  60827. INT B3 - ZIPKEY - GET VERSION
  60828.     AH = 70h
  60829. Return: AH = major version
  60830.     AL = minor version
  60831.     CL = number of states and territories in current database
  60832.     DH = year of current database - 1900
  60833.     DL = month of current database's file date
  60834. Return: AX destroyed
  60835. Notes:    if installed, the string "ZIPKEY" is present at offset 75h in the
  60836.       interrupt handler's segment, and the byte at 7Bh contains the API
  60837.       version number (00h for v1.x, 01h for v2.0)
  60838.     ZIPKEY is a resident ZIPCODE database by Eric Isaacson
  60839. ----------B371-------------------------------
  60840. INT B3 - ZIPKEY - CONVERT TWO-LETTER ABBREVIATION TO STATE CODE
  60841.     AH = 71h
  60842.     BX = abbreviation, in either case (first letter in BL)
  60843. Return: CF set on error
  60844.         AL = FFh
  60845.     CF clear if successful
  60846.         AL = ZIPKEY state code
  60847. SeeAlso: AH=72h
  60848. ----------B372-------------------------------
  60849. INT B3 - ZIPKEY - CONVERT STATE CODE TO TWO-LETTER ABBREVIATION
  60850.     AH = 72h
  60851.     BL = ZIPKEY state code
  60852. Return: CF set on error
  60853.         AX destroyed
  60854.     CF clear if successful
  60855.         AX = abbreviation, in upper case
  60856. SeeAlso: AH=71h,AH=73h
  60857. ----------B373-------------------------------
  60858. INT B3 - ZIPKEY - CONVERT STATE CODE TO STATE NAME
  60859.     AH = 73h
  60860.     BL = ZIPKEY state code
  60861.     ES:DI -> buffer for name
  60862. Return: CF set on error
  60863.         AX destroyed
  60864.     CF clear if successful
  60865.         ES:DI points one byte beyond end of name
  60866. SeeAlso: AH=72h
  60867. ----------B374-------------------------------
  60868. INT B3 - ZIPKEY - CONVERT ZIPCODE TO ASCII DIGITS
  60869.     AH = 74h
  60870.     DX = zipcode region (0-999)
  60871.     CH = last two digits of zipcode (0-99)
  60872.     ES:DI -> buffer
  60873. Return: CF set on error
  60874.         AX destroyed
  60875.     CF clear if successful
  60876.         ES:DI points one byte beyond end of digit string
  60877. ----------B375-------------------------------
  60878. INT B3 - ZIPKEY - LOOK UP STATE CODE FOR ZIPCODE
  60879.     AH = 75h
  60880.     DX = zipcode region (0-999)
  60881.     CH = last two digits of zipcode (0-99)
  60882. Return: CF set on error (zipcode not found)
  60883.         AL = suggested state code, FFh if none
  60884.     CF clear if successful
  60885.         AL = ZIPKEY state code
  60886.         BX = area code (v2.0+)
  60887. SeeAlso: AH=76h,AH=79h
  60888. ----------B376-------------------------------
  60889. INT B3 - ZIPKEY - LOOK UP CITY AND STATE FOR ZIPCODE
  60890.     AH = 76h
  60891.     DX = zipcode region (0-999)
  60892.     CH = last two digits of zipcode (0-99)
  60893.     ES:DI -> buffer for name
  60894. Return: CF set on error
  60895.         AL = suggested state code, FFh if none
  60896.         ES:DI buffer filled with suggested city name
  60897.     CF clear if successful
  60898.         AL = ZIPKEY state code
  60899.         BX = area code (v2.0+)
  60900.         ES:DI points one byte beyond end of name
  60901. SeeAlso: AH=75h,AH=78h
  60902. ----------B377-------------------------------
  60903. INT B3 - ZIPKEY - PLAY BACK EXIT KEY FOR ENTRY WITH GIVEN ZIPCODE
  60904.     AH = 77h
  60905.     DX = zipcode region (0-999)
  60906.     CH = last two digits of zipcode (0-99)
  60907.     BX = 16-bit BIOS keycode for a defined ZIPKEY alternate exit key
  60908. Return: CF set on error
  60909.         AX destroyed
  60910.     CF clear if successful    
  60911.         zipcode specification as defined by the BX keystroke is placed in
  60912.           keyboard buffer, as if the user had popped up ZIPKEY and exited
  60913.           by pressing the key specified by BX
  60914. ----------B378-------------------------------
  60915. INT B3 - ZIPKEY - LOOK UP ZIPCODES FOR A GIVEN STATE AND CITY
  60916.     AH = 78h
  60917.     BL = ZIPKEY state code
  60918.     DS:SI -> city name, terminated with 0Dh if complete name, 00h if prefix
  60919. Return: BH = number of matching entries (set to 51 if more than 50)
  60920.     DX = zipcode region of first match (0-999)
  60921.     CL = last two digits of first zipcode in the range (0-99)
  60922.     CH = last two digits of last zipcode in the range (0-99)
  60923.     AX destroyed
  60924. SeeAlso: AH=79h,AH=7Ah
  60925. ----------B379-------------------------------
  60926. INT B3 - ZIPKEY - LOOK UP ZIPCODES FOR A GIVEN CITY
  60927.     AH = 79h
  60928.     BL = ZIPKEY state code of first state to search
  60929.     DS:SI -> city name, terminated with 0Dh if complete name, 00h if prefix
  60930. Return:    AL = ZIPKEY state code of first matching state
  60931.     BH = number of matching entries (set to 51 if more than 50)
  60932.     DX = zipcode region of first match (0-999)
  60933.     CL = last two digits of first zipcode in first range (0-99)
  60934.     CH = last two digits of last zipcode in first range (0-99)
  60935. Note:    to find all matching cities, repeat search with BL set to one more than
  60936.       the returned AL
  60937. SeeAlso: AH=78h,AH=7Ah
  60938. ----------B37A-------------------------------
  60939. INT B3 - ZIPKEY - FETCH AN ENTRY FROM A PREVIOUS LOOKUP
  60940.     AH = 7Ah
  60941.     BL = case number (0 to one less than value returned in BH by lookup)
  60942. Return: AL = ZIPKEY state code
  60943.     DX = zipcode region (0-999)
  60944.     CL = last two digits of first zipcode in the range (0-99)
  60945.     CH = last two digits of last zipcode in the range (0-99)
  60946. SeeAlso: AH=78h,AH=79h
  60947. ----------B37B-------------------------------
  60948. INT B3 - ZIPKEY - GET VALUES NEEDED TO SAVE ZIPKEY CONTEXT
  60949.     AH = 7Bh
  60950. Return: BL = maximum number of characters for a city name
  60951.     BH = ZIPKEY state code for last city-name search
  60952.         FFh if none
  60953.     CX:DX = internal code identifying last city search
  60954.     AX destroyed
  60955. SeeAlso: AH=7Ch
  60956. ----------B37C-------------------------------
  60957. INT B3 - ZIPKEY - RESTORE ZIPKEY CONTEXT
  60958.     AH = 7Ch
  60959.     BL = maximum number of characters for a city name
  60960.     BH = ZIPKEY state code for last city-name search
  60961.         FFh if none
  60962.     CX:DX = internal code returned by AH=7Bh
  60963. Return: CF set on error
  60964.     CF clear if successful
  60965.     AX destroyed
  60966. SeeAlso: AH=7Bh
  60967. ----------B37D-------------------------------
  60968. INT B3 - ZIPKEY - REQUEST POP UP
  60969.     AH = 7Dh
  60970.     BL = index number to simulate pressing a hotkey
  60971.         FFh for immediate popup with no playback on return
  60972. Return: CF set on error
  60973.         AL = FDh already busy with another request
  60974.            = FEh illegal function
  60975.     CF clear if successful
  60976.         AX destroyed
  60977.         window popped up and was closed by the user
  60978. ----------B37E-------------------------------
  60979. INT B3 - ZIPKEY - GET NAME OF PRIMARY CITY FOR A ZIPCODE REGION
  60980.     AH = 7Eh
  60981.     DX = zipcode region (0-999)
  60982.     ES:DI -> buffer for name
  60983. Return: CF set on error
  60984.         AL = FFh region does not exist
  60985.     CF clear if successful
  60986.         AL = ZIPKEY state code
  60987.         ES:DI points one byte beyond end of name
  60988. ----------B37F-------------------------------
  60989. INT B3 - ZIPKEY - ENABLE/DISABLE HOTKEYS
  60990.     AH = 7Fh
  60991.     BL = function
  60992.         00h turn off hotkeys
  60993.         01h turn on hotkeys
  60994.         02h return hotkey status
  60995.         03h toggle hotkey status
  60996. Return: AL = hotkey status
  60997.         00h off
  60998.         01h on
  60999. ----------B380-------------------------------
  61000. INT B3 - ZIPKEY v2.0+ - DETERMINE STATE FOR AREA CODE
  61001.     AH = 80h
  61002.     BX = telephone area code (decimal)
  61003. Return: CF clear if successful
  61004.         AL = ZIPKEY state code
  61005.         DX = first ZIP region for state (03E8h if Canada)
  61006.         CX = number of ZIP regions in state
  61007.     CF set on error
  61008.         AL = FFh
  61009.         DX = 03E9h
  61010. ----------B4---------------------------------
  61011. INT B4 - IBM ROM BASIC - used while in interpreter
  61012. Notes:    called by ROM BASIC
  61013.     BASIC.COM/BASICA.COM do not restore vector on termination
  61014. ----------B4---------------------------------
  61015. INT B4 - STACKMAN - REQUEST NEW STACK
  61016. Return: SS:SP -> new stack
  61017. Note:    the installation check consists of testing for the string "STACKXXX" at
  61018.       offset 0Ah from the interrupt handler
  61019. SeeAlso: INT 2F/AX=C9FFh,INT B5"STACKMAN"
  61020. ----------B5---------------------------------
  61021. INT B5 - IBM ROM BASIC - used while in interpreter
  61022. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61023.     BASIC.COM/BASICA.COM do not restore vector on termination
  61024. ----------B5---------------------------------
  61025. INT B5 - STACKMAN - RESTORE ORIGINAL STACK
  61026.     SS:SP -> stack returned by INT B4
  61027. Return: SS:SP restored to value before INT B4
  61028. SeeAlso: INT 2F/AX=C9FFh,INT B4"STACKMAN"
  61029. ----------B6---------------------------------
  61030. INT B6 - IBM ROM BASIC - used while in interpreter
  61031. Notes:    called by ROM BASIC
  61032.     BASIC.COM/BASICA.COM do not restore vector on termination
  61033. ----------B7---------------------------------
  61034. INT B7 - IBM ROM BASIC - used while in interpreter
  61035. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61036.     BASIC.COM/BASICA.COM do not restore vector on termination
  61037. ----------B8---------------------------------
  61038. INT B8 - IBM ROM BASIC - used while in interpreter
  61039. Notes:    called by ROM BASIC
  61040.     BASIC.COM/BASICA.COM do not restore vector on termination
  61041. ----------B9---------------------------------
  61042. INT B9 - IBM ROM BASIC - used while in interpreter
  61043. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61044.     BASIC.COM/BASICA.COM do not restore vector on termination
  61045. ----------BA---------------------------------
  61046. INT BA - IBM ROM BASIC - used while in interpreter
  61047. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61048.     BASIC.COM/BASICA.COM do not restore vector on termination
  61049. ----------BB---------------------------------
  61050. INT BB - IBM ROM BASIC - used while in interpreter
  61051. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61052.     BASIC.COM/BASICA.COM do not restore vector on termination
  61053. ----------BC---------------------------------
  61054. INT BC - IBM ROM BASIC - used while in interpreter
  61055. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61056.     BASIC.COM/BASICA.COM do not restore vector on termination
  61057. ----------BD---------------------------------
  61058. INT BD - IBM ROM BASIC - used while in interpreter
  61059. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61060.     BASIC.COM/BASICA.COM do not restore vector on termination
  61061. ----------BE---------------------------------
  61062. INT BE - IBM ROM BASIC - used while in interpreter
  61063. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61064.     BASIC.COM/BASICA.COM do not restore vector on termination
  61065. ----------BE---------------------------------
  61066. INT BE - DESQview/X - ???
  61067. Note:    points at an IRET
  61068. SeeAlso: INT 15/AX=BFDEh/BX=0006h,INT 63"DESQview"
  61069. ----------BF---------------------------------
  61070. INT BF - IBM ROM BASIC - used while in interpreter
  61071. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61072.     BASIC.COM/BASICA.COM do not restore vector on termination
  61073. ----------C0---------------------------------
  61074. INT C0 - IBM ROM BASIC - used while in interpreter
  61075. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61076.     BASIC.COM/BASICA.COM do not restore vector on termination
  61077. ----------C1---------------------------------
  61078. INT C1 - IBM ROM BASIC - used while in interpreter
  61079. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61080.     BASIC.COM/BASICA.COM do not restore vector on termination
  61081. ----------C2---------------------------------
  61082. INT C2 - IBM ROM BASIC - used while in interpreter
  61083. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61084.     BASIC.COM/BASICA.COM do not restore vector on termination
  61085. ----------C3---------------------------------
  61086. INT C3 - IBM ROM BASIC - used while in interpreter
  61087. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61088.     BASIC.COM/BASICA.COM do not restore vector on termination
  61089. ----------C4---------------------------------
  61090. INT C4 - IBM ROM BASIC - used while in interpreter
  61091. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61092.     BASIC.COM/BASICA.COM do not restore vector on termination
  61093. ----------C5---------------------------------
  61094. INT C5 - IBM ROM BASIC - used while in interpreter
  61095. Notes:    called by ROM BASIC
  61096.     BASIC.COM/BASICA.COM do not restore vector on termination
  61097. ----------C6---------------------------------
  61098. INT C6 - IBM ROM BASIC - used while in interpreter
  61099. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61100.     BASIC.COM/BASICA.COM do not restore vector on termination
  61101. ----------C6---------------------------------
  61102. INT C6 - APL*PLUS/PC - IDENTICAL TO INT 86
  61103. Note:    STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
  61104.       the older interrupts
  61105. SeeAlso: INT 86"APL"
  61106. ----------C7---------------------------------
  61107. INT C7 - IBM ROM BASIC - used while in interpreter
  61108. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61109.     BASIC.COM/BASICA.COM do not restore vector on termination
  61110. ----------C7---------------------------------
  61111. INT C7 - APL*PLUS/PC - ???
  61112. Note:    STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
  61113.       the older interrupts
  61114. SeeAlso: INT 87"APL"
  61115. ----------C8---------------------------------
  61116. INT C8 - IBM ROM BASIC - used while in interpreter
  61117. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61118.     BASIC.COM/BASICA.COM do not restore vector on termination
  61119. ----------C8---------------------------------
  61120. INT C8 - APL*PLUS/PC - IDENTICAL TO INT 88
  61121. Note:    STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
  61122.       the older interrupts
  61123. SeeAlso: INT 88"APL"
  61124. ----------C9---------------------------------
  61125. INT C9 - IBM ROM BASIC - used while in interpreter
  61126. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61127.     BASIC.COM/BASICA.COM do not restore vector on termination
  61128. ----------C9---------------------------------
  61129. INT C9 - APL*PLUS/PC - ???
  61130. Note:    STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
  61131.       the older interrupts
  61132. SeeAlso: INT 89"APL"
  61133. ----------CA---------------------------------
  61134. INT CA - IBM ROM BASIC - used while in interpreter
  61135. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61136.     BASIC.COM/BASICA.COM do not restore vector on termination
  61137. ----------CA---------------------------------
  61138. INT CA - APL*PLUS/PC - PRINT SCREEN
  61139. Note:    STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
  61140.       the older interrupts
  61141. SeeAlso: INT 8A"APL"
  61142. ----------CB---------------------------------
  61143. INT CB - IBM ROM BASIC - used while in interpreter
  61144. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61145.     BASIC.COM/BASICA.COM do not restore vector on termination
  61146. ----------CB---------------------------------
  61147. INT CB - APL*PLUS/PC - BEEP
  61148. Notes:    STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
  61149.       the older interrupts
  61150.     same as printing a ^G via INT 21/AH=02h
  61151. SeeAlso: INT 8B"APL"
  61152. ----------CC---------------------------------
  61153. INT CC - IBM ROM BASIC - used while in interpreter
  61154. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61155.     BASIC.COM/BASICA.COM do not restore vector on termination
  61156. ----------CC---------------------------------
  61157. INT CC - APL*PLUS/PC - CLEAR SCREEN MEMORY
  61158.     AX = flag
  61159.         0000h do not save display attributes
  61160.         0001h save attributes
  61161. Note:    STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete
  61162.       the older interrupts
  61163. SeeAlso: INT 8C"APL"
  61164. ----------CD---------------------------------
  61165. INT CD - IBM ROM BASIC - used while in interpreter
  61166. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61167.     BASIC.COM/BASICA.COM do not restore vector on termination
  61168. ----------CD---------------------------------
  61169. INT CD - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61170. ----------CE---------------------------------
  61171. INT CE - IBM ROM BASIC - used while in interpreter
  61172. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61173.     BASIC.COM/BASICA.COM do not restore vector on termination
  61174. ----------CE---------------------------------
  61175. INT CE - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61176. ----------CF---------------------------------
  61177. INT CF - IBM ROM BASIC - used while in interpreter
  61178. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61179.     BASIC.COM/BASICA.COM do not restore vector on termination
  61180. ----------CF---------------------------------
  61181. INT CF - APL*PLUS/PC - DEFAULT LOW-RESOLUTION TIMER FOR QUAD MF FUNCTION
  61182. SeeAlso: INT E0"APL"
  61183. ----------D0---------------------------------
  61184. INT D0 - IBM ROM BASIC - used while in interpreter
  61185. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61186.     BASIC.COM/BASICA.COM do not restore vector on termination
  61187. ----------D0---------------------------------
  61188. INT D0 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61189. ----------D0---------------------------------
  61190. INT D0 - [not a vector!] - NJFRERAM SIGNATURE VECTOR
  61191. Notes:    NJFRERAM is a resident free-memory display utility by Mike "Nifty
  61192.       James" Blaszczak
  61193.     if NJFRERAM is installed, this vector points at the signature "NJ"
  61194. ----------D1---------------------------------
  61195. INT D1 - IBM ROM BASIC - used while in interpreter
  61196. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61197.     BASIC.COM/BASICA.COM do not restore vector on termination
  61198. ----------D1---------------------------------
  61199. INT D1 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61200. ----------D2---------------------------------
  61201. INT D2 - IBM ROM BASIC - used while in interpreter
  61202. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61203.     BASIC.COM/BASICA.COM do not restore vector on termination
  61204. ----------D2---------------------------------
  61205. INT D2 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61206. ----------D3---------------------------------
  61207. INT D3 - IBM ROM BASIC - used while in interpreter
  61208. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61209.     BASIC.COM/BASICA.COM do not restore vector on termination
  61210. ----------D3---------------------------------
  61211. INT D3 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61212. ----------D4---------------------------------
  61213. INT D4 - IBM ROM BASIC - used while in interpreter
  61214. Notes:    called by ROM BASIC
  61215.     BASIC.COM/BASICA.COM do not restore vector on termination
  61216. ----------D4---------------------------------
  61217. INT D4 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61218. ----------D4---------------------------------
  61219. INT D4 - PC-MOS/386 - API
  61220. ----------D5---------------------------------
  61221. INT D5 - IBM ROM BASIC - used while in interpreter
  61222. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61223.     BASIC.COM/BASICA.COM do not restore vector on termination
  61224. ----------D5---------------------------------
  61225. INT D5 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61226. ----------D6---------------------------------
  61227. INT D6 - IBM ROM BASIC - used while in interpreter
  61228. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61229.     BASIC.COM/BASICA.COM do not restore vector on termination
  61230. ----------D6---------------------------------
  61231. INT D6 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61232. ----------D7---------------------------------
  61233. INT D7 - IBM ROM BASIC - used while in interpreter
  61234. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61235.     BASIC.COM/BASICA.COM do not restore vector on termination
  61236. ----------D7---------------------------------
  61237. INT D7 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61238. ----------D8---------------------------------
  61239. INT D8 - IBM ROM BASIC - used while in interpreter
  61240. Notes:    called by ROM BASIC
  61241.     BASIC.COM/BASICA.COM do not restore vector on termination
  61242. ----------D8---------------------------------
  61243. INT D8 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61244. ----------D9---------------------------------
  61245. INT D9 - IBM ROM BASIC - used while in interpreter
  61246. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61247.     BASIC.COM/BASICA.COM do not restore vector on termination
  61248. ----------D9---------------------------------
  61249. INT D9 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61250. ----------DA---------------------------------
  61251. INT DA - IBM ROM BASIC - used while in interpreter
  61252. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61253.     BASIC.COM/BASICA.COM do not restore vector on termination
  61254. ----------DA---------------------------------
  61255. INT DA - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61256. ----------DB---------------------------------
  61257. INT DB - IBM ROM BASIC - used while in interpreter
  61258. Notes:    called by ROM BASIC
  61259.     BASIC.COM/BASICA.COM do not restore vector on termination
  61260. ----------DB---------------------------------
  61261. INT DB - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61262. ----------DC---------------------------------
  61263. INT DC - PC/370 v4.1- - API
  61264. SeeAlso: INT 60"PC/370"
  61265. ----------DC---------------------------------
  61266. INT DC - IBM ROM BASIC - used while in interpreter
  61267. Notes:    called by ROM BASIC
  61268.     BASIC.COM/BASICA.COM do not restore vector on termination
  61269. ----------DC---------------------------------
  61270. INT DC - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES
  61271. ----------DD---------------------------------
  61272. INT DD - IBM ROM BASIC - used while in interpreter
  61273. Notes:    called by ROM BASIC
  61274.     BASIC.COM/BASICA.COM do not restore vector on termination
  61275. ----------DD---------------------------------
  61276. INT DD - STSC APL*PLUS/PC v9.0 - PLACE KEYSTROKE EVENTS IN INPUT BUFFER
  61277.     BX = where to place keystrokes
  61278.         FFFFh insert before current buffer contents
  61279.         0000h replace current contents
  61280.         0001h insert after current contents
  61281.     CX = number of keystroke events to insert
  61282.     ES:SI -> data to be placed into buffer (list of WORD key codes)
  61283.         4000h + N = normal ASCII keystroke N (N = 00h to FFh)
  61284.         4100h + N = extended ASCII keystroke N (N = 03h to 84h)
  61285. SeeAlso: INT 16/AH=05h
  61286. ----------DE---------------------------------
  61287. INT DE - IBM ROM BASIC - used while in interpreter
  61288. Notes:    called by ROM BASIC
  61289.     BASIC.COM/BASICA.COM do not restore vector on termination
  61290. ----------DE---------------------------------
  61291. INT DE - APL*PLUS/PC - ???
  61292. Note:    appears to be the same as INT 16
  61293. ----------DF---------------------------------
  61294. INT DF - Victor 9000 - SuperBIOS
  61295. ----------DF---------------------------------
  61296. INT DF - IBM ROM BASIC - used while in interpreter
  61297. Notes:    called by ROM BASIC
  61298.     BASIC.COM/BASICA.COM do not restore vector on termination
  61299. ----------DF---------------------------------
  61300. INT DF - APL*PLUS/PC - SAME AS INT 10
  61301. SeeAlso: INT 10
  61302. ----------E0---------------------------------
  61303. INT E0 - IBM ROM BASIC - used while in interpreter
  61304. Notes:    called by ROM BASIC
  61305.     BASIC.COM/BASICA.COM do not restore vector on termination
  61306. ----------E0---------------------------------
  61307. INT E0 - APL*PLUS/PC - RESTIME HIGH-RESOLUTION TIMER FOR QUAD MF FUNCTION
  61308. SeeAlso: INT CF"APL"
  61309. ----------E0---------------------------------
  61310. INT E0 - VIRUS - "Micro-128" - ???
  61311. Note:    Micro-128 also overwrites the upper half of the interrupt table
  61312. SeeAlso: INT 70"VIRUS"
  61313. ----------E0---------------------------------
  61314. INT E0 - CP/M-86, Concurrent CP/M, DR Multiuser DOS - FUNCTION CALLS
  61315.     CL = function number
  61316.     DS,DX = parameters
  61317. Return: as appropriate for function
  61318. Notes:    several functions are covered in more detail in following entries
  61319.     most of these calls are also supported by Digital Research's DOS Plus
  61320.       v2.1; the unsupported functions are 26h,29h-2Bh,3Ah,3Dh-62h,71h-8Ch,
  61321.       90h-92h,94h-97h,9Bh-ABh, and AEh-FFh
  61322. SeeAlso: INT 21/AX=4459h,INT 21/AH=E0h"DOS Plus"
  61323.  
  61324. Values for function number:
  61325.  00h    terminate calling process (see also INT 21/AH=00h)
  61326.  01h    read a character
  61327.  02h    write character to default console (see also INT 21/AH=02h)
  61328.  03h    read character from default AUX (see also INT 21/AH=03h)
  61329.  04h    write character to default AUX (see also INT 21/AH=04h)
  61330.  05h    write character to default list device (see also INT 21/AH=05h)
  61331.  06h    perform raw I/O on default console (see also INT 21/AH=06h)
  61332.  07h    return default AUX input status
  61333.  08h    return default AUX output status
  61334.  09h    write string to default console (see also INT 21/AH=09h)
  61335.  0Ah    read string from default console (see also INT 21/AH=0Ah)
  61336.  0Bh    return default console input status (see also INT 21/AH=0Bh)
  61337.  0Ch    get BDOS release ID
  61338.  0Dh    reset all disk drives (see also INT 21/AH=0Dh)
  61339.  0Eh    set default drive (see also INT 21/AH=0Eh)
  61340.  0Fh    open file via FCB (see also INT 21/AH=0Fh)
  61341.  10h    close file via FCB (see also INT 21/AH=10h)
  61342.  11h    search for first matching file with FCB (see also INT 21/AH=11h)
  61343.  12h    search for next matching file with FCB (see also INT 21/AH=12h)
  61344.  13h    delete file via FCB (see also INT 21/AH=13h)
  61345.  14h    sequential read via FCB (see also INT 21/AH=14h)
  61346.  15h    sequential write via FCB (see also INT 21/AH=15h)
  61347.  16h    create file via FCB (see also INT 21/AH=16h)
  61348.  17h    rename file via FCB (see also INT 21/AH=17h)
  61349.  18h    get bit map of logged drives
  61350.  19h    get default drive (see also INT 21/AH=19h)
  61351.  1Ah    set DMA address offset
  61352.  1Bh    get default disk allocation vector (see also INT 21/AH=1Bh)
  61353.  1Ch    set default drive to read-only
  61354.  1Dh    get bit map of read-only drives
  61355.  1Eh    set file attributes via FCB (see also INT 21/AX=4301h)
  61356.  1Fh    get address of disk parameter block (see also INT 21/AH=1Fh)
  61357.  20h    get/set default user number
  61358.  21h    read random record via FCB (see also INT 21/AH=21h)
  61359.  22h    write random record via FCB (see also INT 21/AH=22h)
  61360.  23h    compute file size with FCB (see also INT 21/AH=23h)
  61361.  24h    get FCB random record number (see also INT 21/AH=24h)
  61362.  25h    reset specified drives
  61363.  26h    access specified drives (not in DR DOS Plus v2.1)
  61364.  27h    free specified drives
  61365.  28h    write random with FCB, zero fill (see also also INT 21/AH=28h)
  61366.  2Ah    lock records in FCB file (see also INT 21/AH=5Ch)
  61367.  2Bh    unlock records in FCB file (see also INT 21/AH=5Ch)
  61368.  2Ch    set BDOS multisector count
  61369.  2Dh    set BDOS error mode
  61370.  2Eh    get free space on disk
  61371.  2Fh    load, initialize, and jump to process (see also INT 21/AH=4Bh)
  61372.  30h    flush write-deferred buffers
  61373.  31h    get/set system variable (DOS Plus v2.1)
  61374.  32h    call BIOS (XIOS) character routine (see below)
  61375.  33h    set DMA address segment
  61376.  34h    get DMA buffer address
  61377.  35h    CP/M-86 allocate maximum memory
  61378.  36h    allocate maximum memory at specified segment
  61379.  37h    CP/M-86 allocate memory segment (see also INT 21/AH=48h)
  61380.  38h    allocate memory at specified segment
  61381.  39h    CP/M-86 free specified memory segment (see also INT 21/AH=49h)
  61382.  3Ah    CP/M-86 free all memory (not in DOS Plus v2.1)
  61383.  3Bh    load .CMD file into memory
  61384.  3Ch    (DOS Plus v2.1) call RSX program
  61385.  40h    (DR-NET) log on a server
  61386.  41h    (DR-NET) log off a server
  61387.  42h    (DR-NET) send a message
  61388.  43h    (DR-NET) receive a message
  61389.  44h    (DR-NET) get network status
  61390.  45h    (DR-NET) get requestor configuration table
  61391.  46h    (DR-NET) set compatibility attributes
  61392.  47h    (DR-NET) get server configuration table
  61393.  48h    (DR-NET) set network error mode
  61394.  49h    (DR-NET) attach network
  61395.  4Ah    (DR-NET) detach network
  61396.  4Bh    (DR-NET) set default password
  61397.  4Ch    (DR-NET) get-set long timeout
  61398.  4Dh    (DR-NET) get parameter table
  61399.  50h    (DR-NET) get network information
  61400.  53h    get current time (see also INT 21/AH=2Ch)
  61401.  54h    set current time (see also INT 21/AH=2Dh)
  61402.  55h    get binary system date (see also INT 21/AH=2Ah)
  61403.  56h    set system date (see also INT 21/AH=2Bh)
  61404.  57h    allocate system flag
  61405.  58h    deallocate system flag
  61406.  59h    reserve memory in global area
  61407.  5Ah    lock physical drive
  61408.  5Bh    unlock physical drive
  61409.  5Ch    search path for executable file
  61410.  5Dh    load and execute command (see also INT 21/AH=4Bh)
  61411.  5Eh    get/set process exit code
  61412.  5Fh    set country information
  61413.  60h    get country information
  61414.  63h    truncate FCB file (see also INT 21/AH=28h)
  61415.  64h    create/update directory label
  61416.  65h    get directory label
  61417.  66h    get FCB date stamp and password mode
  61418.  67h    write extended FCB
  61419.  68h    set system date and time
  61420.  69h    get system date and time in binary
  61421.  6Ah    establish password for file access
  61422.  6Bh    get OS serial number
  61423.  6Ch    (DOS Plus v2.1) get/set program return code
  61424.  6Dh    get/set console mode
  61425.  6Eh    get/set string delimiter
  61426.  6Fh    write block to default console
  61427.  70h    write block to default list device
  61428.  71h    execute DOS-compatible function
  61429.  74h    set FCB time and date stamps
  61430.  80h    allocate memory
  61431.  82h    deallocate memory
  61432.  83h    poll I/O device
  61433.  84h    wait on system flag
  61434.  85h    set system flag
  61435.  86h    create message queue
  61436.  87h    open message queue
  61437.  88h    delete message queue
  61438.  89h    read from message queue
  61439.  8Ah    conditionally read from message queue
  61440.  8Bh    write to message queue
  61441.  8Ch    conditionally write to message queue
  61442.  8Dh    delay calling process
  61443.  8Eh    call process dispatcher (yield CPU)
  61444.  8Fh    terminate calling process (same as function 00h)
  61445.  90h    create a process
  61446.  91h    set calling process' priority
  61447.  92h    attach to default console
  61448.  93h    detach from default console
  61449.  95h    assign default console to process
  61450.  96h    interpret and execute commandline
  61451.  97h    resident procedure library
  61452.  98h    parse ASCII string into FCB (see also INT 21/AH=29h)
  61453.  99h    return default console
  61454.  9Ah    get address of system data (SYSDAT)
  61455.  9Bh    get system time and date
  61456.  9Ch    return calling process' descriptor
  61457.  9Dh    terminate process by name or PD address
  61458.  9Eh    attach to default list device
  61459.  9Fh    detach from default list device
  61460.  A0h    select default list device
  61461.  A1h    conditionally attach to default list device
  61462.  A2h    conditionally attach to default console
  61463.  A3h    get OS version number
  61464.  A4h    get default list device
  61465.  A5h    attach to default AUX
  61466.  A6h    detach from default AUX
  61467.  A7h    conditionally attach to default AUX
  61468.  A8h    set default AUX
  61469.  A9h    return default AUX
  61470.  ACh    read block from default AUX
  61471.  ADh    (DOS Plus v2.1) write block to default AUX
  61472.  B0h    configure default AUX
  61473.  B1h    get/set device control parameters
  61474.  B2h    send Break through default AUX
  61475.  B3h    allocate physical memory
  61476.  B4h    free physical memory
  61477.  B5h    map physical memory
  61478.  B6h    nondestructive message queue read
  61479.  B7h    timed wait on system flag
  61480.  B8h    get/set I/O port mapping
  61481.  B9h    set list device timeout
  61482.  BAh    set AUX timeout value
  61483.  BBh    execute XIOS service
  61484.  BDh    (DR Multiuser DOS) delay
  61485.  FFh    return 80386 to native mode
  61486.  
  61487. Values for DOS Plus v2.1 XIOS functions:
  61488.  00h    terminate program
  61489.  01h    ???
  61490.  02h    check for console input status
  61491.  03h    read character from console
  61492.  04h    write character to console
  61493.  05h    write character to list device
  61494.  06h    write character to auxiliary device
  61495.  07h    read cahracter from auxiliary device
  61496.  0Fh    get list device status
  61497.  10h-14h reserved
  61498.  15h    device initialization
  61499.  16h    check console output status
  61500.  17h-7Fh reserved
  61501. ---BBC Acorn---
  61502.  80h    get XIOS version
  61503.  81h    get Tube semaphore
  61504.  82h    release Tube semaphore
  61505.  83h    select text/graphics
  61506.  84h    update B&W graphics rectangle
  61507.  85h    update color graphics rectangle
  61508.  86h    get/release/update mouse
  61509.  87h    get system error info
  61510.  88h    entry in CLOCK called by WatchDog RSP
  61511.  89h    BBC OSBYTE function
  61512.  8Ah    BBC OSWORD function
  61513.  
  61514. DR Multiuser DOS Error Return Codes:
  61515.  00h no error
  61516.  01h system call not implmented
  61517.  02h illegal system call number
  61518.  03h cannot find memory
  61519.  04h illegal flag number
  61520.  05h flag overrun
  61521.  06h flag underrun
  61522.  07h no unused Queue Descriptors
  61523.  08h no free queue buffer
  61524.  09h cannot find queue
  61525.  0Ah queue in use
  61526.  0Ch no free Process Descriptors
  61527.  0Dh no queue access
  61528.  0Eh empty queue
  61529.  0Fh full queue
  61530.  10h CLI queue missing
  61531.  11h no 8087 in system
  61532.  12h no unused Memory Descriptors
  61533.  13h illegal console number
  61534.  14h no Process Descriptor match
  61535.  15h no console match
  61536.  16h no CLI process
  61537.  17h illegal disk number
  61538.  18h illegal filename
  61539.  19h illegal filetype
  61540.  1Ah character not ready
  61541.  1Bh illegal Memory Descriptor
  61542.  1Ch bad return from BDOS load
  61543.  1Dh bad return from BDOS read
  61544.  1Eh bad return from BDOS open
  61545.  1Fh null command
  61546.  20h not owner of resource
  61547.  21h no CSEG in load file
  61548.  22h process Descriptor exists on Thread Root
  61549.  23h could not terminate process
  61550.  24h cannot attach to process
  61551.  25h illegal list device number
  61552.  26h illegal password
  61553.  28h external termination occurred
  61554.  29h fixup error upon load
  61555.  2Ah flag set ignored
  61556.  2Bh illegal auxilliary device number
  61557. ----------E0----CL03-------------------------
  61558. INT E0 - DR Multiuser DOS - "A_READ" - READ CHARACTER FROM AUX DEVICE
  61559.     CL = 03h
  61560. Return:    AL = ASCII character
  61561. Notes:    A_READ reads the next 8-bit character from the logical auxilliary
  61562.       input device (AUXn:); control is not returned to the calling
  61563.       process until a character has been read. 
  61564.     if another process owns AUX, this call blocks until the device becomes
  61565.       available
  61566. SeeAlso: INT 21/AH=03h,INT E0/CL=04h,INT E0/CL=07h,INT E0/CL=A5h,INT E0/CL=ACh
  61567. ----------E0----CL04-------------------------
  61568. INT E0 - DR Multiuser DOS - "A_WRITE" - WRITE CHARACTER TO AUX DEVICE
  61569.     CL = 04h
  61570.     DL = ASCII character
  61571. Return:    nothing
  61572. Note:    if another process owns AUX, this call blocks until the device becomes
  61573.       available
  61574. SeeAlso: INT 21/AH=04h,INT E0/CL=03h,INT E0/CL=08h,INT E0/CL=A5h,INT E0/CL=ADh
  61575. ----------E0----CL07-------------------------
  61576. INT E0 - DR Multiuser DOS - "A_STATIN" - GET INPUT STATUS OF AUX DEVICE 
  61577.     CL = 07h
  61578. Return:    AL = status
  61579.         00h not ready
  61580.         FFh character available
  61581. SeeAlso: INT E0/CL=03h,INT E0/CL=08h
  61582. ----------E0----CL08-------------------------
  61583. INT E0 - DR Multiuser DOS - "A_STATOUT" - GET OUTPUT STATUS OF AUX DEVICE
  61584.     CL = 08h
  61585. Return:    AL = status
  61586.         00h not ready
  61587.         FFh ready for output
  61588. SeeAlso: INT E0/CL=04h,INT E0/CL=07h
  61589. ----------E0----CL59-------------------------
  61590. INT E0 - ConcCP/M,DR Multiuser DOS - "S_MEMORY" - RESERVE MEMORY IN GLOBAL AREA
  61591.     CL = 59h
  61592.     DX = size in bytes
  61593. Return: AX = FFFFh if failed
  61594.     AX = other if successful
  61595.         ES:BX -> reserved memory
  61596. ----------E0----CL86-------------------------
  61597. INT E0 - ConcCP/M,DR Multiuser DOS - "Q_MAKE" - CREATE MESSAGE QUEUE
  61598.     CL = 86h
  61599.     DS:DX -> queue descriptor (see below)
  61600. Return: AX = status
  61601.         0000h success
  61602.         FFFFh failure
  61603.     CX = error code
  61604. SeeAlso: INT E0/CL=87h
  61605.  
  61606. Format of queue descriptor:
  61607. Offset    Size    Description
  61608.  00h  2 WORDs    internal use, initialize to zeros
  61609.  04h    WORD    flags
  61610.  06h  8 BYTEs    queue name
  61611.  0Eh    WORD    length of message
  61612.  10h    WORD    number of messages
  61613.  12h  4 WORDs    internal use, initialize to zeros
  61614.  1Ah    WORD    offset in system area of buffer for messages
  61615. ----------E0----CL87-------------------------
  61616. INT E0 - ConcCP/M,DR Multiuser DOS - "Q_OPEN" - OPEN MESSAGE QUEUE
  61617.     CL = 87h
  61618.     DS:DX -> queue parameter block (see below)
  61619. Return: AX = status
  61620.         0000h success
  61621.         FFFFh failure
  61622.     CX = error code
  61623. SeeAlso: INT E0/CL=86h,INT E0/CL=89h
  61624.  
  61625. Format of queue parameter block:
  61626. Offset    Size    Description
  61627.  00h    WORD    internal use, initialize to zero
  61628.  02h    WORD    queue ID (set by INT E0/CL=87h)
  61629.  04h    WORD    internal use, initialize to zero
  61630.  06h    WORD    offset of queue message buffer
  61631.  08h  8 BYTEs    queue name
  61632. ----------E0----CL89-------------------------
  61633. INT E0 - ConcCP/M,DR Multiuser DOS - "Q_READ" - READ MESSAGE QUEUE
  61634.     CL = 89h
  61635.     DS:DX -> queue parameter block (see INT E0/CL=87h)
  61636. Return: AX = status
  61637.         0000h success
  61638.         FFFFh failure
  61639.     CX = error code
  61640. SeeAlso: INT E0/CL=87h,INT E0/CL=8Ah,INT E0/CL=8Bh
  61641. ----------E0----CL8A-------------------------
  61642. INT E0 - ConcCP/M,DR Multiuser DOS - "Q_CREAD" - CONDITIONALLY READ MSG QUEUE
  61643.     CL = 8Ah
  61644.     DS:DX -> queue parameter block (see INT E0/CL=87h)
  61645. Return: AX = status
  61646.         0000h success
  61647.         FFFFh failure
  61648.     CX = error code
  61649. SeeAlso: INT E0/CL=87h,INT E0/CL=89h,INT E0/CL=8Ch
  61650. ----------E0----CL8B-------------------------
  61651. INT E0 - ConcCP/M,DR Multiuser DOS - "Q_WRITE" - WRITE MESSAGE QUEUE
  61652.     CL = 8Bh
  61653.     DS:DX -> queue parameter block (see INT E0/CL=87h)
  61654. Return: AX = status
  61655.         0000h success
  61656.         FFFFh failure
  61657.     CX = error code
  61658. SeeAlso: INT E0/CL=89h,INT E0/CL=8Ch
  61659. ----------E0----CL8C-------------------------
  61660. INT E0 - ConcCP/M,DR Multiuser DOS - "Q_CWRITE" - CONDITIONALLY WRITE MSG QUEUE
  61661.     CL = 8Ch
  61662.     DS:DX -> queue parameter block (see INT E0/CL=87h)
  61663. Return: AX = status
  61664.         0000h success
  61665.         FFFFh failure
  61666.     CX = error code
  61667. SeeAlso: INT E0/CL=8Ah,INT E0/CL=8Bh
  61668. ----------E0----CL8E-------------------------
  61669. INT E0 - ConcCP/M,DR Multiuser DOS - "P_DISPATCH" - CALL DISPATCHER
  61670.     CL = 8Eh
  61671.     DX = FFFFh (optional) to force dispatch
  61672. Return: nothing
  61673. Note:    if DX=FFFFh, a dispatch is forced even if no other process is ready
  61674. SeeAlso: INT E0/CL=91h
  61675. ----------E0----CL91-------------------------
  61676. INT E0 - ConcCP/M,DR Multiuser DOS - "P_PRIORITY" - SET PROCESS PRIORITY
  61677.     CL = 91h
  61678.     DL = new priority (00h highest to FFh lowest)
  61679. Note:    sets priority of calling process; transient processes are initialized
  61680.       to priority C8h
  61681. SeeAlso: INT E0/CL=8Eh
  61682. ----------E0----CL93-------------------------
  61683. INT E0 - ConcCP/M,DR Multiuser DOS - "C_DETACH" - DETACH FROM DEFAULT CONSOLE
  61684.     CL = 93h
  61685. Return: AX = status
  61686.         0000h successfully detached
  61687.         FFFFh detach failed
  61688. ----------E0----CLA5-------------------------
  61689. INT E0 - DR Multiuser DOS - "A_ATTACH" - ATTACH AUX DEVICE
  61690.     CL = A5h
  61691. Desc:    attaches the default auxiliary device to the calling process unless
  61692.       it is already attached to another process, in which case the call
  61693.       blocks until the device becomes available
  61694. Note:    this call should be used before attempting to read or write from
  61695.       the AUX device; however, the I/O calls internally call this function
  61696.       to ensure device ownership
  61697. SeeAlso: INT E0/CL=03h,INT E0/CL=04h,INT E0/CL=A6h,INT E0/CL=A7h,INT E0/CL=A8h
  61698. SeeAlso: INT E0/CL=ACh,INT E0/CL=ADh,INT E0/CL=B0h
  61699. ----------E0----CLA6-------------------------
  61700. INT E0 - DR Multiuser DOS - "A_DETACH" - DETACH FROM AUX DEVICE
  61701.     CL = A6h
  61702. Return: AX = status
  61703.         0000h successfully detached
  61704.         FFFFh detach failed
  61705.     CX = error code
  61706. SeeAlso: INT E0/CL=A5h,INT E0/CL=A7h
  61707. ----------E0----CLA7-------------------------
  61708. INT E0 - DR Multiuser DOS - "A_CATTACH" - CONDITIONALLY ATTACH TO AUX DEVICE
  61709.     CL = A7h
  61710. Return: AX = status
  61711.         0000h attached
  61712.         FFFFh unable to attach
  61713. Desc:    attaches the default auxiliary device to the calling process if it is
  61714.       available
  61715. Note:    does not block if the device is already in use
  61716. SeeAlso: INT E0/CL=A5h,INT E0/CL=A6h,INT E0/CL=A8h,INT E0/CL=B0h
  61717. ----------E0----CLA8-------------------------
  61718. INT E0 - DR Multiuser DOS - "A_SET" - SET DEFAULT AUX DEVICE NUMBER
  61719.     CL = A8h
  61720.     DL = auxiliary device number
  61721. Return: AX = status
  61722.         0000h successful
  61723.         FFFFh failed
  61724.     CX = error code
  61725. SeeAlso: INT E0/CL=A5h,INT E0/CL=A9h
  61726. ----------E0----CLA9-------------------------
  61727. INT E0 - DR Multiuser DOS - "A_GET" - GET DEFAULT AUX DEVICE NUMBER
  61728.     CL = A9h
  61729. Return: AL = current default auxiliary device number
  61730. SeeAlso: INT E0/CL=A8h
  61731. ----------E0----CLAC-------------------------
  61732. INT E0 - DR Multiuser DOS - "A_READBLK" - READ STRING FROM AUX DEVICE
  61733.     CL = ACh
  61734.     DS:DX -> character control block (CHCB) (see below)
  61735. Return: AX = number of characters read
  61736. Desc:    read characters from the default auxiliary (AUXn:) device into a buffer
  61737.       until the buffer is full or the device is no longer ready
  61738. Notes:    if the device is initially not ready, blocks until at least one
  61739.       character has been read
  61740.     if another process owns AUX, this call blocks until the device becomes
  61741.       available
  61742. SeeAlso: INT E0/CL=03h,INT E0/CL=A5h,INT E0/CL=ADh
  61743.  
  61744. Format of character control block (CHCB):
  61745. Offset    Size    Description
  61746.  00h    DWORD    pointer to character buffer
  61747.  04h    WORD    length of character buffer
  61748. ----------E0----CLAD-------------------------
  61749. INT E0 - DR Multiuser DOS - "A_WRITEBLK" - WRITE STRING TO AUX DEVICE
  61750.     CL = ADh
  61751.     DS:DX -> character control block (see INT E0/CL=ACh)
  61752. Return: AX = number of characters written
  61753. Note:    does not return until at least one character has been written
  61754. SeeAlso: INT E0/CL=04h,INT E0/CL=A5h,INT E0/CL=ACh
  61755. ----------E0----CLB0-------------------------
  61756. INT E0 - DR Multiuser DOS - "A_CONFIG" - GET/SET AUX DEVICE PARAMETERS
  61757.     CL = B0h
  61758.     DX:DX -> AUX device parameter block (see below)
  61759. Return: AX = status
  61760.         0000h successful
  61761.         parameter block updated
  61762.         FFFFh failed
  61763.         CX = error code
  61764. SeeAlso: INT E0/CL=A5h,INT E0/CL=B1h
  61765.  
  61766. Format of AUX device parameter block:
  61767. Offset    Size    Description
  61768.  00h    BYTE    function (00h get, 01h set)
  61769.  01h    BYTE    baud rate (see below) FFh = don't change/unknown
  61770.  02h    BYTE    parity
  61771.         00h none
  61772.         01h odd
  61773.         02h none
  61774.         03h even
  61775.         04h stick parity bit
  61776.         FFh don't change/unknown
  61777.  03h    BYTE    stop bits (00h one, 01h 1.5, 02h two, FFh unknown/don't change)
  61778.  04h    BYTE    data bits (05h-08h or FFh unknown/don't change)
  61779.  05h    BYTE    handshake (00h none, 01h DTS/DSR, 02h RTS/CTS, 04h XON/XOFF,
  61780.         FFh unknown/don't change)
  61781.  06h    BYTE    XON character, FFh unknown/don't change
  61782.  07h    BYTE    XOFF character, FFh unknown/don't change
  61783.  
  61784. Values for baud rate:
  61785.  00h = 50 baud
  61786.  01h = 62.5 baud
  61787.  02h = 75 baud
  61788.  03h = 110 baud
  61789.  04h = 134.5 baud
  61790.  05h = 150 baud
  61791.  06h = 200 baud
  61792.  07h = 300 baud
  61793.  08h = 600 baud
  61794.  09h = 1200 baud
  61795.  0Ah = 1800 baud
  61796.  0Bh = 2000 baud
  61797.  0Ch = 2400 baud
  61798.  0Dh = 3600 baud
  61799.  0Eh = 4800 baud
  61800.  0Fh = 7200 baud
  61801.  10h = 9600 baud
  61802.  11h = 19200 baud
  61803.  12h = 38400 baud
  61804.  13h = 56000 baud
  61805.  14h = 76800 baud
  61806.  15h = 115200 baud
  61807. ----------E0----CLB1-------------------------
  61808. INT E0 - DR Multiuser DOS - "A_CONTROL" - GET/SET AUX CONTROL PARAMETERS
  61809.     CL = B1h
  61810.     DS:DX -> AUX device control block (see below)
  61811. Return: AX = status
  61812.         0000h successful
  61813.         control block updated
  61814.         FFFFh failed
  61815.         CX = error code
  61816. SeeAlso: INT E0/CL=B0h,INT E0/CL=B2h
  61817.  
  61818. Format of AUX device control block:
  61819. Offset    Size    Description
  61820.  00h    BYTE    function (00h get, 01h set)
  61821.  01h    BYTE    DTR state (00h low, 01h high, FFh unknown/don't change)
  61822.  02h    BYTE    RTS state (00h low, 01h high, FFh unknown/don't change)
  61823.  03h    BYTE    DSR state (00h low, 01h high, FFh unknown/don't change)
  61824.  04h    BYTE    CTS state (00h low, 01h high, FFh unknown/don't change)
  61825.  05h    BYTE    DCD state (00h low, 01h high, FFh unknown/don't change)
  61826.  06h    BYTE    RI state (00h inactive, 01h active, FFh unknown/don't change)
  61827. ----------E0----CLB2-------------------------
  61828. INT E0 - DR Multiuser DOS - "A_BREAK" - SEND BREAK TO AUX DEVICE
  61829.     CL = B2h
  61830.     DX = duration of break in system ticks (0001h-FFFFh)
  61831. Return: AX = status
  61832.         0000h successful
  61833.         break signal completed
  61834.         FFFFh failed
  61835.         CX = error code
  61836. Note:    if the AUX device is currently owned by another process, this call will
  61837.       block until the device becomes available
  61838. SeeAlso: INT E0/CL=A5h,INT E0/CL=B1h
  61839. ----------E0----CLBD-------------------------
  61840. INT E0 - DR Multiuser DOS - "P_DELAY" - DELAY EXECUTION
  61841.     CL = BDh
  61842.     DX = delay in system ticks
  61843. Return: after the delay elapses
  61844. Notes:    the length of a system tick is installation-dependent (typically
  61845.       1/50 or 1/60 second); the length may be determined by reading the
  61846.       TICKSPERSEC value from the system data segment
  61847.     the actual delay before the process is rescheduled to run may be up to
  61848.       one tick longer than requested; the delay between rescheduling and
  61849.       actual execution cannot be predicted if higher-priority processes
  61850.       are awaiting a turn at the CPU
  61851. ----------E1---------------------------------
  61852. INT E1 - IBM ROM BASIC - used while in interpreter
  61853. Notes:    called by ROM BASIC
  61854.     BASIC.COM/BASICA.COM do not restore vector on termination
  61855. ----------E1---------------------------------
  61856. INT E1 - PC Cluster Disk Server Information
  61857. SeeAlso: INT E2
  61858. ----------E2---------------------------------
  61859. INT E2 - IBM ROM BASIC - used while in interpreter
  61860. Notes:    called by ROM BASIC
  61861.     BASIC.COM/BASICA.COM do not restore vector on termination
  61862. ----------E2---------------------------------
  61863. INT E2 - PC Cluster Program
  61864. ----------E3---------------------------------
  61865. INT E3 - IBM ROM BASIC - used while in interpreter
  61866. Notes:    called by ROM BASIC
  61867.     BASIC.COM/BASICA.COM do not restore vector on termination
  61868. ----------E40005-----------------------------
  61869. INT E4 - Logitech Modula v2.0 - MonitorEntry
  61870.     AX = 0005h
  61871.     BX = priority
  61872. SeeAlso: AX=0006h
  61873. ----------E40006-----------------------------
  61874. INT E4 - Logitech Modula v2.0 - MonitorExit
  61875.     AX = 0006h
  61876. SeeAlso: AX=0005h
  61877. ----------E4---------------------------------
  61878. INT E4 - IBM ROM BASIC - used while in interpreter
  61879. Notes:    called by ROM BASIC
  61880.     BASIC.COM/BASICA.COM do not restore vector on termination
  61881. ----------E5---------------------------------
  61882. INT E5 - IBM ROM BASIC - used while in interpreter
  61883. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61884.     BASIC.COM/BASICA.COM do not restore vector on termination
  61885. ----------E6---------------------------------
  61886. INT E6 - IBM ROM BASIC - used while in interpreter
  61887. Notes:    called by ROM BASIC
  61888.     BASIC.COM/BASICA.COM do not restore vector on termination
  61889. ----------E7---------------------------------
  61890. INT E7 - IBM ROM BASIC - used while in interpreter
  61891. Notes:    called by ROM BASIC
  61892.     BASIC.COM/BASICA.COM do not restore vector on termination
  61893. ----------E8---------------------------------
  61894. INT E8 - IBM ROM BASIC - used while in interpreter
  61895. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61896.     BASIC.COM/BASICA.COM do not restore vector on termination
  61897. ----------E9---------------------------------
  61898. INT E9 - IBM ROM BASIC - used while in interpreter
  61899. Notes:    called by ROM BASIC
  61900.     BASIC.COM/BASICA.COM do not restore vector on termination
  61901. ----------EA---------------------------------
  61902. INT EA - IBM ROM BASIC - used while in interpreter
  61903. Notes:    called by ROM BASIC
  61904.     BASIC.COM/BASICA.COM do not restore vector on termination
  61905. ----------EB---------------------------------
  61906. INT EB - IBM ROM BASIC - used while in interpreter
  61907. Notes:    called by ROM BASIC
  61908.     BASIC.COM/BASICA.COM do not restore vector on termination
  61909. ----------EC---------------------------------
  61910. INT EC - IBM ROM BASIC - used while in interpreter
  61911. Notes:    called by ROM BASIC
  61912.     BASIC.COM/BASICA.COM do not restore vector on termination
  61913. ----------EC---------------------------------
  61914. INT EC - used by Alloy NTNX
  61915. ----------EC---------------------------------
  61916. INT EC - Exact - RUNTIME INTERFACE MULTIPLEXOR
  61917.     AX = function number (0000h to 0140h)
  61918.     STACK:    DWORD address to return to
  61919.         any arguments required by function
  61920. Return: STACK:    return address popped, but otherwise unchanged
  61921. Notes:    this is the interface from applications to the runtime system by Exact
  61922.       Automatisering B.V. of the Netherlands.  By using this interrupt,
  61923.       it can provide DLL-style capabilities under MSDOS.
  61924.     the interrupt handler removes the return address and flags placed on
  61925.       the stack by the INT EC, then jumps to the appropriate function
  61926. ----------ED---------------------------------
  61927. INT ED - IBM ROM BASIC - used while in interpreter
  61928. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61929.     BASIC.COM/BASICA.COM do not restore vector on termination
  61930.     INT 80 through INT ED are modified but not restored by Direct Access
  61931.       v4.0, and may be left dangling by other programs written with the
  61932.       same version of compiled BASIC
  61933. SeeAlso: INT EC"BASIC",INT EE"BASIC"
  61934. ----------EE---------------------------------
  61935. INT EE - IBM ROM BASIC - used while in interpreter
  61936. Notes:    called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM
  61937.     BASIC.COM/BASICA.COM do not restore vector on termination
  61938. SeeAlso: INT ED"BASIC",INT EE"BASIC"
  61939. ----------EF---------------------------------
  61940. INT EF - BASIC - ORIGINAL INT 09 VECTOR
  61941. Note:    BASIC.COM/BASICA.COM do not restore vector on termination
  61942. SeeAlso: INT EE"BASIC",INT F0"BASIC"
  61943. ----------EF----CX0473-----------------------
  61944. INT EF - GEM - INTERFACE
  61945.     CX = 0473h
  61946.     DS:DX -> GEM parameter block
  61947. ----------F0---------------------------------
  61948. INT F0 - BASICA.COM, GWBASIC, compiled BASIC - ORIGINAL INT 08 VECTOR
  61949. Note:    BASICA.COM does not restore vector on termination
  61950. SeeAlso: INT EF"BASIC"
  61951. ----------F1---------------------------------
  61952. INT F1 - reserved for user interrupt
  61953. ----------F1---------------------------------
  61954. INT F1 - SPEECH.COM - CONVERT TEXT STRING TO SPEECH
  61955.     DS:BX -> '$'-terminated text string
  61956. Note:    SPEECH.COM is a resident text-to-speech converter by Douglas Sisco
  61957. ----------F1---------------------------------
  61958. INT F1 - Andy C. McGuire SPEECH.COM/SAY.COM
  61959. SeeAlso: INT F2"SPEECH"
  61960. ----------F1---------------------------------
  61961. INT F1 - AQUEDUCT, PIPELINE - GET DATA AREA ADDRESS
  61962. Return: AX:BX -> data area
  61963. Notes:    AQUEDUCT and PIPELINE are TSRs by James W. Birdsall to connect COM1
  61964.       and COM2 in software
  61965.     The installation check consists of testing for the following signature
  61966.       immediately preceding the interrupt handler: "JWBtvv" where 't' is
  61967.       either "A" for AQUEDUCT or "P" for PIPELINE and "vv" is a two-digit
  61968.       version number
  61969. ----------F2---------------------------------
  61970. INT F2 - reserved for user interrupt
  61971. ----------F2---------------------------------
  61972. INT F2 - Andy C. McGuire SPEECH.COM/SAY.COM
  61973. SeeAlso: INT F1"SPEECH"
  61974. ----------F2---------------------------------
  61975. INT F2 - ICCTSR 1.0 - ImageCapture COLOR Developer's Kit - API
  61976.     AH = function
  61977.         01h power up
  61978.         02h power down
  61979.         03h set controls
  61980.         04h capture image
  61981.         05h display image
  61982.         06h read file
  61983.         07h write file
  61984.         08h write array
  61985.         09h read pixel
  61986.         0Ah write pixel
  61987.         0Bh check if VGA present
  61988.         0Ch set video mode
  61989.         0Dh check for keystroke
  61990.         0Eh delay
  61991.     ???
  61992. Return: ???
  61993. Program: ImageCapture is a product of International Computers
  61994. SeeAlso: INT F3"ICCTSR"
  61995. ----------F3---------------------------------
  61996. INT F3 - reserved for user interrupt
  61997. ----------F3---------------------------------
  61998. INT F3 - SoundBlaster - POINTER TO ECHO VALUE
  61999. Note:    this is not a vector, but a pointer to a DWORD containing the echo
  62000.       value selected with SET-ECHO.EXE
  62001. SeeAlso: INT 2F/AX=FBFBh
  62002. ----------F3---------------------------------
  62003. INT F3 - ICCTSR 1.0 - HANDSHAKE ID VECTOR
  62004. Program: ImageCapture is a product of International Computers
  62005. SeeAlso: INT F2"ICCTSR"
  62006. ----------F4---------------------------------
  62007. INT F4 - reserved for user interrupt
  62008. ----------F4---------------------------------
  62009. INT F4 - DoubleDOS - GIVE UP REST OF CURRENT CLOCK TICK AND ALL OF NEXT TICK
  62010. SeeAlso: INT 21/AH=EEh"DoubleDOS",INT FE"DoubleDOS"
  62011. ----------F5---------------------------------
  62012. INT F5 - reserved for user interrupt
  62013. ----------F5---------------------------------
  62014. INT F5 - DoubleDOS - ???
  62015. ----------F6---------------------------------
  62016. INT F6 - reserved for user interrupt
  62017. ----------F6---------------------------------
  62018. INT F6 - DoubleDOS - ???
  62019. ----------F7---------------------------------
  62020. INT F7 - reserved for user interrupt
  62021. ----------F7---------------------------------
  62022. INT F7 - DoubleDOS - ???
  62023. ----------F700-------------------------------
  62024. INT F7 - FSBBS 2.0 - CONFIGURATION RECORD
  62025.     AH = 00h
  62026.     AL = function
  62027.         00h get configuration record
  62028.         Return: DS:DX -> configuration record
  62029.         01h set configuration record
  62030.         02h get path for option
  62031.         DS:DX -> option name
  62032.         Return: DS:DX -> path
  62033.         03h determine whether configuration record set
  62034.         Return: AX = status
  62035.                 0000h set
  62036.                 0001h not yet set
  62037.         04h get link state
  62038.         Return: AX = state
  62039.                 0000h unlinked
  62040.                 0001h linked
  62041. Notes:    this information is preliminary and still subject to change
  62042.     all of the INT F7 calls for FSBBS are used for interprogram
  62043.       communication between the BBS kernel and the programs it spawns
  62044. SeeAlso: AH=01h
  62045. ----------F701-------------------------------
  62046. INT F7 - FSBBS 2.0 - USER RECORD
  62047.     AH = 01h
  62048.     AL = function
  62049.         00h get user record for user currently online
  62050.         Return: DS:DX -> user record
  62051.         01h set user record
  62052.         DS:DX -> user record
  62053. SeeAlso: AH=00h,AH=02h
  62054. ----------F702-------------------------------
  62055. INT F7 - FSBBS 2.0 - GET ACCOUNT NAME
  62056.     AH = 02h
  62057. Return: DS:DX -> 8-character blank-padded account name
  62058. SeeAlso: AH=01h
  62059. ----------F703-------------------------------
  62060. INT F7 - FSBBS 2.0 - TERMINAL NUMBER
  62061.     AH = 03h
  62062.     AL = function
  62063.         00h get terminal index number
  62064.         Return: DX = index number
  62065.         01h set terminal index number
  62066.         DX = terminal index
  62067. ----------F704-------------------------------
  62068. INT F7 - FSBBS 2.0 - PASSDATA BUFFER
  62069.     AH = 04h
  62070.     AL = function
  62071.         00h get PassData buffer contents
  62072.         DS:DX -> buffer for PassData contents
  62073.         01h set PassData contents
  62074.         DS:DX -> buffer containing new PassData
  62075.         CH = length of data in buffer
  62076. ----------F705-------------------------------
  62077. INT F7 - FSBBS 2.0 - TIMER FUNCTIONS
  62078.     AH = 05h
  62079.     AL = function
  62080.         00h get time remaining
  62081.         Return: DX = number of minutes remaining
  62082.         01h get current time
  62083.         Return: DS:DX -> 8-character time string
  62084.         02h increment time
  62085.         DX = number of additional minutes
  62086.         03h decrement time
  62087.         DX = number of minutes
  62088. SeeAlso: AH=06h
  62089. ----------F706-------------------------------
  62090. INT F7 - FSBBS 2.0 - FUNCTION AVAILABILITY
  62091.     AH = 06h
  62092.     AL = function
  62093.         00h determine whether function is available
  62094.         DX = index of function
  62095.         01h set function availability
  62096.         DX = index of function
  62097.         ???
  62098. SeeAlso: AH=05h,AH=07h
  62099. ----------F707-------------------------------
  62100. INT F7 - FSBBS 2.0 - DUMP FUNCTIONS
  62101.     AH = 07h
  62102.     AL = function
  62103.         00h get current dump mode
  62104.         Return: DL = mode
  62105.         01h set dump mode
  62106.         DL = mode
  62107. SeeAlso: AH=06h
  62108. ----------F8---------------------------------
  62109. INT F8 - TANDY??? - 100 HZ INTERRUPT
  62110. SeeAlso: INT FA"USART"
  62111. ----------F8---------------------------------
  62112. INT F8 - DoubleDOS - ???
  62113. ----------F9---------------------------------
  62114. INT F9 - reserved for user interrupt
  62115. ----------F9---------------------------------
  62116. INT F9 - DoubleDOS - ???
  62117. ----------FA---------------------------------
  62118. INT FA - TANDY??? - SERIAL PORT USART INTERRUPT
  62119. SeeAlso: INT F8"100 HZ",INT FB"USART"
  62120. ----------FA---------------------------------
  62121. INT FA - DoubleDOS - TURN OFF TIMESHARING
  62122. SeeAlso: INT 21/AH=EAh"DoubleDOS",INT FB"DoubleDOS"
  62123. ----------FB---------------------------------
  62124. INT FB - TANDY??? - KEYBOARD USART RECEIVE INTERRUPT
  62125. SeeAlso: INT FA"USART"
  62126. ----------FB---------------------------------
  62127. INT FB - DoubleDOS - TURN ON TIMESHARING
  62128. SeeAlso: INT 21/AH=EBh"DoubleDOS",INT FA"DoubleDOS"
  62129. ----------FC---------------------------------
  62130. INT FC - reserved for user interrupt
  62131. ----------FC---------------------------------
  62132. INT FC - DoubleDOS - GET CURRENT SCREEN BUFFER ADDRESS
  62133. Return: ES = segment of display buffer
  62134. Note:    the display buffer may be moved if multitasking is enabled
  62135. SeeAlso: INT 21/AH=ECh"DoubleDOS",INT FB"DoubleDOS"
  62136. ----------FD---------------------------------
  62137. INT FD - reserved for user interrupt
  62138. ----------FD---------------------------------
  62139. INT FD - DoubleDOS - ???
  62140. ----------FE---------------------------------
  62141. INT FE - AT/XT286/PS50+ - destroyed by return from protected mode
  62142. SeeAlso: INT FF"XT286"
  62143. ----------FE---------------------------------
  62144. INT FE - DoubleDOS - GIVE UP TIME
  62145.     AL = number of 55ms time slices to give away
  62146. SeeAlso: INT 21/AH=EEh"DoubleDOS",INT F4"DoubleDOS"
  62147. ----------FE---------------------------------
  62148. INT FE - Turbo Debugger 8086 v2.5+ - OVERLAY MANAGER
  62149. SeeAlso: INT 3F
  62150. ----------FF---------------------------------
  62151. INT FF - AT/XT286/PS50+ - destroyed by return from protected mode
  62152. SeeAlso: INT FE"XT286"
  62153. ----------FF---------------------------------
  62154. INT FF - Z100 - WARM BOOT
  62155. SeeAlso: INT 40"Z100"
  62156. ---------------------------------------------
  62157. Please redistribute the following files unmodified as a group, in a pair of
  62158. archives named INTER33A and INTER33B (preferably the original authenticated
  62159. PKZIP archives):
  62160.     INTERRUP.1ST    the read-me file, containing credits, availability info
  62161.     INTERRUP.A    INT 00 through INT 14
  62162.     INTERRUP.B    INT 15 through INT 1F
  62163.     INTERRUP.C    INT 20 through INT 21/7F
  62164.     INTERRUP.D    INT 21/80 through INT 2E
  62165.     INTERRUP.E    INT 2F through INT 2F/BF
  62166.     INTERRUP.F    INT 2F/C0 through INT 4F
  62167.     INTERRUP.G    INT 50 through INT 67
  62168.     INTERRUP.H    INT 68 through INT FF
  62169.     INTERRUP.PRI    a brief introduction to interrupts
  62170.     INTPRINT.COM    a simple formatter that also generates a list summary
  62171.     INTPRINT.DOC    instructions for INTPRINT
  62172.     GLOSSARY.LST    a glossary of terms, abbreviations, and acronyms
  62173.     MEMORY.LST    format of the BIOS data area
  62174. The following files should be distributed in an archive called INTER33C:
  62175.     INT.COM        invoke interrupts from commandline
  62176.     INT2HLP.BAT    Perl script to convert list into QuickHelp database
  62177.     INT2GUID.*    convert list into TurboPower GUIDE or POPHELP database
  62178.     INT2QH.*    program to convert list into QuickHelp database
  62179.     INTHELP.*    convert list into TurboPower GUIDE database
  62180.     INTLIST.E    Epsilon extension for handling list
  62181.     INTPRINT.C    source code for INTPRINT
  62182. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  62183. ---------------------------------------------
  62184. ARPA: ralf@cs.cmu.edu
  62185. UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf
  62186. BIT:  ralf%cs.cmu.edu@carnegie
  62187. FIDO: Ralf Brown 1:129/26.1
  62188.     or post a message to me in the DR_DEBUG echo (I probably won't see it
  62189.     unless you address it to me)
  62190. CIS:  >INTERNET:ralf@cs.cmu.edu
  62191.