home *** CD-ROM | disk | FTP | other *** search
/ Current Shareware 1994 January / SHAR194.ISO / sys_util / inter37b.zip / INTERRUP.H < prev    next >
Text File  |  1993-10-03  |  182KB  |  4,805 lines

  1. Interrupt List, part 8 of 10
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. --------D-30---------------------------------
  4. INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls
  5.    the CALL 5 entry point does a FAR jump to here
  6. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  7.       memory
  8. SeeAlso: INT 21/AH=26h
  9. --------D-31---------------------------------
  10. INT 31 - overwritten by CP/M jump instruction in INT 30
  11. --------v-31---------------------------------
  12. INT 31 - VIRUS - "Vacsina" series - INSTALLATION CHECK (NOT A VECTOR!)
  13. Note:    if one of the Vacsina viruses is resident, the low byte of this
  14.       interrupt still contains the last byte of the INT 30 CP/M JMP
  15.       instruction, but the remaining three bytes are 7Fh 39h followed
  16.       by the Vacsina version number
  17. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 32"VIRUS"
  18. --------E-310000-----------------------------
  19. INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS
  20.     AX = 0000h
  21.     CX = number of descriptors to allocate
  22. Return: CF clear if successful
  23.         AX = base selector
  24.     CF set on error
  25.         AX = error code (DPMI 1.0+) (see below)
  26. Notes:    DPMI is the DOS Protected-Mode Interface
  27.     the base and limit of the returned descriptors will be 0, and the type
  28.       will be "data"
  29.     add the value returned by INT 31/AX=0003h to move to subsequent
  30.       descriptors if multiple descriptors were allocated
  31.     not supported by MS Windows 3.0 in Standard mode
  32. SeeAlso: AX=0001h,AX=000Dh,INT 21/AX=3501h
  33.  
  34. Values for error code:
  35.  0000h-7FFFh DOS error passed through by DPMI
  36.  8001h    unsupported function
  37.  8002h    object in wrong state for function
  38.  8003h    system integrity would be endangered
  39.  8004h    deadlock detected
  40.  8005h    pending serialization request cancelled
  41.  8010h    out of DPMI internal resources
  42.  8011h    descriptor unavailable
  43.  8012h    linear memory unavailable
  44.  8013h    physical memory unavailable
  45.  8014h    backing store unavailable
  46.  8015h    callback unavailable
  47.  8016h    handle unavailable
  48.  8017h    maximum lock count exceeded
  49.  8018h    shared memory already serialized exclusively by another
  50.  8019h    shared memory already serialized shared by another client
  51.  8021h    invalid value for numeric or flag parameter
  52.  8022h    invalid segment selector
  53.  8023h    invalid handle
  54.  8024h    invalid callback
  55.  8025h    invalid linear address
  56.  8026h    request not supported by hardware
  57. --------E-310001-----------------------------
  58. INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR
  59.     AX = 0001h
  60.     BX = selector to free
  61. Return: CF clear if successful
  62.     CF set on error
  63.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  64. Notes:    only one descriptor is freed per call
  65.     the program's initial CS, DS, and SS descriptors may be freed
  66.     (DPMI 1.0+) any segment registers containing the freed selector are
  67.       set to 0000h
  68.     not supported by MS Windows 3.0 in Standard mode
  69. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh,INT 21/AX=3502h
  70. --------E-310002-----------------------------
  71. INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR
  72.     AX = 0002h
  73.     BX = real mode segment
  74. Return: CF clear if successful
  75.         AX = selector corresponding to real mode segment (64K limit)
  76.     CF set on error
  77.         AX = error code (DPMI 1.0+) (8011h) (see AX=0000h)
  78. Notes:    multiple calls for the same real mode segment return the same selector
  79.     the returned descriptor can never be modified or freed
  80.     not supported by MS Windows 3.0 in Standard mode
  81. --------E-310003-----------------------------
  82. INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE
  83.     AX = 0003h
  84. Return: CF clear
  85.         AX = value to add to get next sequential selector
  86. Notes:    the increment will be a power of two
  87.     not supported by MS Windows 3.0 in Standard mode
  88. SeeAlso: AX=0000h
  89. --------E-310004-----------------------------
  90. INT 31 P - DPMI 0.9+ - LOCK SELECTOR
  91.     AX = 0004h
  92.     BX = selector to lock (prevent paging)
  93. Return: ???
  94. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  95.       specification, this function is called by MS Windows TASKMAN,
  96.       PROGMAN, and KERNEL
  97. SeeAlso: AX=0005h,AX=0600h
  98. --------E-310005-----------------------------
  99. INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR
  100.     AX = 0005h
  101.     BX = selector to unlock (permit paging)
  102. Return: ???
  103. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  104.       specification, this function is called by MS Windows TASKMAN,
  105.       PROGMAN, and KERNEL
  106. SeeAlso: AX=0004h,AX=0601h
  107. --------E-310006-----------------------------
  108. INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS
  109.     AX = 0006h
  110.     BX = selector
  111. Return: CF clear if successful
  112.         CX:DX = linear base address of segment
  113.     CF set on error
  114.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  115. Note:    not supported by MS Windows 3.0 in Standard mode
  116. SeeAlso: AX=0007h,INT 21/AX=3504h
  117. --------E-310007-----------------------------
  118. INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS
  119.     AX = 0007h
  120.     BX = selector
  121.     CX:DX = linear base address
  122. Return: CF clear if successful
  123.     CF set on error
  124.         AX = error code (DPMI 1.0+) (8022h,8025h) (see AX=0000h)
  125. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  126.     only the low 24 bits of the address will be used by 16-bit DPMI
  127.       implementations even on a 386 or higher
  128.     DPMI 1.0+ automatically reloads any segment registers containing the
  129.       selector being modified
  130.     not supported by MS Windows 3.0 in Standard mode
  131. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AX=3503h
  132. SeeAlso: INT 21/AH=E9h"OS/286",INT 2C/AX=0002h
  133. --------E-310008-----------------------------
  134. INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT
  135.     AX = 0008h
  136.     BX = selector
  137.     CX:DX = segment limit
  138. Return: CF clear if successful
  139.     CF set on error
  140.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  141. Notes:    CX must be zero for 16-bit DPMI implementations
  142.     limits greater than 1MB must be page aligned (low 12 bits set)
  143.     only modify descriptors allocated with INT 31/AX=0000h
  144.     DPMI 1.0+ automatically reloads any segment registers containing the
  145.       selector being modified
  146.     not supported by MS Windows 3.0 in Standard mode
  147. SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AX=3505h,INT 21/AH=E9h"OS/286"
  148. SeeAlso: INT 2C/AX=0003h
  149. --------E-310009-----------------------------
  150. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS
  151.     AX = 0009h
  152.     BX = selector
  153.     CL = access rights/type byte
  154.     CH = 80386 extended rights/type byte (32-bit DPMI implementations only)
  155. Return: CF clear if successful
  156.     CF set on error
  157.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  158. Notes:    if the Present bit is clear, CL bits 0-3 may have any value
  159.     DPMI 1.0+ automatically reloads any segment registers containing the
  160.       selector being modified
  161.     not supported by MS Windows 3.0 in Standard mode
  162. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h,INT 2C/AX=0004h
  163. SeeAlso: INT 2C/AX=0005h
  164. --------E-31000A-----------------------------
  165. INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR
  166.     AX = 000Ah
  167.     BX = selector
  168. Return: CF clear if successful
  169.         AX = new data selector
  170.     CF set on error
  171.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  172. Notes:    fails if selector in BX is not a code segment or is invalid
  173.     use INT 31/AX=0001h to free new selector
  174.     future changes to the original selector will not be reflected in the
  175.       returned alias selector
  176.     not supported by MS Windows 3.0 in Standard mode
  177. SeeAlso: AX=0001h
  178. --------E-31000B-----------------------------
  179. INT 31 P - DPMI 0.9+ - GET DESCRIPTOR
  180.     AX = 000Bh
  181.     BX = LDT selector
  182.     ES:(E)DI -> 8-byte buffer for copy of descriptor
  183. Return: CF clear if successful
  184.         buffer filled
  185.     CF set on error
  186.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  187. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  188.     not supported by MS Windows 3.0 in Standard mode
  189. SeeAlso: AX=000Ch
  190. --------E-31000C-----------------------------
  191. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR
  192.     AX = 000Ch
  193.     BX = LDT selector
  194.     ES:(E)DI -> 8-byte buffer containing descriptor
  195. Return: CF clear if successful
  196.     CF set on error
  197.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  198. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  199.     only modify descriptors allocated with INT 31/AX=0000h
  200.     DPMI 1.0+ automatically reloads any segment registers containing the
  201.       selector being modified
  202.     not supported by MS Windows 3.0 in Standard mode
  203. SeeAlso: AX=000Bh
  204. --------E-31000D-----------------------------
  205. INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR
  206.     AX = 000Dh
  207.     BX = LDT selector
  208. Return: CF clear if successful
  209.         descriptor allocated
  210.     CF set on error
  211.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  212. Notes:    free descriptor with INT 31/AX=0001h
  213.     the first 16 descriptors (04h-7Ch) are reserved for this function, but
  214.       some may already be in use by other applications under DPMI 0.9;
  215.       DPMI 1.0 guarantees 16 descriptors per client
  216.     not supported by MS Windows 3.0 in Standard mode
  217. SeeAlso: AX=0000h,AX=0001h
  218. --------E-31000E-----------------------------
  219. INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS
  220.     AX = 000Eh
  221.     CX = number of descriptors to copy
  222.     ES:(E)DI -> descriptor buffer (see below)
  223. Return: CF clear if successful
  224.         descriptors copied
  225.     CF set on error
  226.         AX = error code (8022h) (see AX=0000h)
  227.         CX = number of descriptors successfully copied
  228. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  229.     if the function fails, the first CX descriptors are valid; the
  230.       remainder are not modified
  231. SeeAlso: AX=000Bh,AX=000Fh
  232.  
  233. Format of descriptor buffer entry (one per descriptor to get):
  234. Offset    Size    Description
  235.  00h    WORD    selector (set by client)
  236.  02h    QWORD    descriptor (set by host)
  237. --------E-31000F-----------------------------
  238. INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS
  239.     AX = 000Fh
  240.     CX = number of descriptors to copy
  241.     ES:(E)DI -> descriptor buffer (see below)
  242. Return: CF clear if successful
  243.         descriptors copied
  244.     CF set on error
  245.         AX = error code (8021h,8022h,8025h) (see AX=0000h)
  246.         CX = number of descriptors successfully copied
  247. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  248.     if the function fails, the first CX descriptors are valid; the
  249.       remainder are not modified
  250.     DPMI 1.0+ automatically reloads any segment registers containing a
  251.       selector being modified
  252. SeeAlso: AX=000Ch,AX=000Eh
  253.  
  254. Format of descriptor buffer entry (one per descriptor to set):
  255. Offset    Size    Description
  256.  00h    WORD    selector
  257.  02h    QWORD    descriptor
  258. --------E-310100-----------------------------
  259. INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK
  260.     AX = 0100h
  261.     BX = number of paragraphs to allocate
  262. Return: CF clear if successful
  263.         AX = real mode segment of allocated block
  264.         DX = first selector for allocated block
  265.     CF set on error
  266.         AX = DOS error code (07h,08h) (see INT 21/AH=59h)
  267.          (DPMI 1.0+) DPMI error code (8011h) (see AX=0000h)
  268.         BX = size (in paragraphs) of largest available block
  269. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  270.       if the caller is a 16-bit program
  271.     never modify or deallocate returned descriptors
  272.     not supported by MS Windows 3.0 in Standard mode
  273. SeeAlso: AX=0101h,AX=0501h
  274. --------E-310101-----------------------------
  275. INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK
  276.     AX = 0101h
  277.     DX = selector of block
  278. Return: CF set if successful
  279.     CF set on error
  280.         AX = DOS error code (07h,09h) (see INT 21/AH=59h)
  281. Notes:    all descriptors allocated for the block are automatically freed
  282.     DPMI 1.0+ automatically zeros any segment registers containing a
  283.       selector freed by this function
  284.     not supported by MS Windows 3.0 in Standard mode
  285. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  286. --------E-310102-----------------------------
  287. INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK
  288.     AX = 0102h
  289.     BX = new block size in paragraphs
  290.     DX = selector of block
  291. Return: CF clear if successful
  292.     CF set on error
  293.         AX = DOS error code (07h,08h,09h) (see INT 21/AH=59h)
  294.          (DPMI 1.0+) DPMI error code (8011h,8022h) (see AX=0000h)
  295.         BX = maximum block size (in paragraphs) possible
  296. Notes:    increasing the size of a block past a 64K boundary will fail if the
  297.       next descriptor in the LDT is already in use
  298.     shrinking a block past a 64K boundary will cause some selectors to be
  299.       freed; DPMI 1.0+ automatically zeros any segment registers containing
  300.       a selector freed by this function
  301.     not supported by MS Windows 3.0 in Standard mode
  302. SeeAlso: AX=0100h
  303. --------E-310200-----------------------------
  304. INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR
  305.     AX = 0200h
  306.     BL = interrupt number
  307. Return: CF clear
  308.     CX:DX = segment:offset of real mode interrupt handler
  309. Note:    the DPMI implementation is required to support all 256 vectors
  310. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h
  311. --------E-310201-----------------------------
  312. INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR
  313.     AX = 0201h
  314.     BL = interrupt number
  315.     CX:DX = segment:offset of real mode handler
  316. Return: CF clear
  317. Note:    all memory that may be touched by a hardware interrupt handler must be
  318.       locked down with INT 31/AX=0600h
  319. SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h
  320. --------E-310202-----------------------------
  321. INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR
  322.     AX = 0202h
  323.     BL = exception number (00h-1Fh)
  324. Return: CF clear if successful
  325.         CX:(E)DX = selector:offset of handler
  326.     CF set on error
  327.         AX = error code (DPMI 1.0+) (8021h) (see AX=0000h)
  328. Notes:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  329.     DPMI 1.0+ supports this function only for backward compatibility; use
  330.        AX=0210h or AX=0211h instead
  331.     not supported by MS Windows 3.0 in Standard mode
  332. SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h
  333. --------E-310203-----------------------------
  334. INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR
  335.     AX = 0203h
  336.     BL = exception number (00h-1Fh)
  337.     CX:(E)DX = selector:offset of handler
  338. Return: CF clear if successful
  339.     CF set on error
  340.         AX = error code (DPMI 1.0+) (8021h,8022h) (see AX=0000h)
  341. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  342.       stack frame on chaining to the next exception handler
  343.     the handler should return using a FAR return
  344.     all fault stack frames contain an error code, but it is only valid for
  345.       exceptions 08h and 0Ah-0Eh
  346.     handlers will only be called if the exception occurs in protected mode,
  347.       and the DPMI host does not transparently handle the exception
  348.     the handler may change certain values on the stack frame (see below)
  349.     DPMI 1.0+ supports this function only for backward compatibility; use
  350.        AX=0212h or AX=0213h instead
  351.     not supported by MS Windows 3.0 in Standard mode
  352. SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h
  353.  
  354. Format of stack frame for 16-bit programs: (offset from SS:SP)
  355. Offset    Size    Description
  356.  00h    DWORD    return CS:IP (do not change)
  357.  04h    WORD    error code
  358.  06h    DWORD    CS:IP of exception
  359.  0Ah    WORD    flags
  360.  0Ch    DWORD    SS:SP
  361.  
  362. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  363. Offset    Size    Description
  364.  00h    DWORD    return EIP (do not change)
  365.  04h    WORD    return CS selector (do not change)
  366.  06h    WORD    reserved (do not change)
  367.  08h    DWORD    error code
  368.  0Ch    DWORD    EIP of exception
  369.  10h    WORD    CS selector of exception
  370.  12h    WORD    reserved (do not change)
  371.  14h    DWORD    EFLAGS
  372.  18h    DWORD    ESP
  373.  1Ch    WORD    SS
  374.  1Eh    WORD    reserved (do not change)
  375. --------E-310204-----------------------------
  376. INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR
  377.     AX = 0204h
  378.     BL = interrupt number
  379. Return: CF clear
  380.     CX:(E)DX = selector:offset of handler
  381. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  382.     DPMI implementations are required to support all 256 vectors
  383.     not supported by MS Windows 3.0 in Standard mode
  384. SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2C/AX=0006h
  385. SeeAlso: INT 2F/AX=FB42h/BX=0024h
  386. --------E-310205-----------------------------
  387. INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR
  388.     AX = 0205h
  389.     BL = interrupt number
  390.     CX:(E)DX = selector:offset of handler
  391. Return: CF clear if successful
  392.     CF set on error
  393.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  394. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  395.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  396.       to the next handler
  397.     DPMI implementations are required to support all 256 vectors
  398.     hardware interrupts are reflected to the virtual machine's primary
  399.       client, software interrupts to the current client
  400.     not supported by MS Windows 3.0 in Standard mode
  401. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2C/AX=0007h
  402. SeeAlso: INT 2F/AX=FB42h/BX=0025h
  403. --------E-310210-----------------------------
  404. INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  405.     AX = 0210h
  406.     BL = exception number (00h-1Fh)
  407. Return: CF clear if successful
  408.         CX:(E)DX = selector:offset of exception handler
  409.     CF set on error
  410.         AX = error code (8021h) (see AX=0000h)
  411. Note:    DPMI host reflects exception to current client's handler
  412. SeeAlso: AX=0202h,AX=0211h,AX=0212h
  413. --------E-310211-----------------------------
  414. INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  415.     AX = 0211h
  416.     BL = exception number (00h-1Fh)
  417. Return: CF clear if successful
  418.         CX:(E)DX = selector:offset of exception handler
  419.     CF set on error
  420.         AX = error code (8021h) (see AX=0000h)
  421. Notes:    returns address of protected-mode handler for real-mode exception
  422.     DPMI host performs a switch to protected mode, reflects the exception
  423.       to the virtual machine's primary client, and returns to real mode
  424.       on the handler's completion
  425. SeeAlso: AX=0202h,AX=0210h,AX=0213h
  426. --------E-310212-----------------------------
  427. INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  428.     AX = 0212h
  429.     BL = exception or fault number (00h-1Fh)
  430.     CX:(E)DX = exception handler selector:offset
  431. Return: CF clear if successful
  432.     CF set on error
  433.         AX = error code (8021h,8022h) (see AX=0000h)
  434. Note:    DPMI host sends exception to current client's handler
  435. SeeAlso: AX=0203h,AX=0210h,AX=0213h
  436. --------E-310213-----------------------------
  437. INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  438.     AX = 0213h
  439.     BL = exception or fault number (00h-1Fh)
  440.     CX:(E)DX = exception handler selector:offset
  441. Return: CF clear if successful
  442.     CF set on error
  443.         AX = error code (8021h,8022h) (see AX=0000h)
  444. Notes:    specifies address of protected-mode handler for real-mode exception
  445.     DPMI host performs a switch to protected mode, reflects the exception
  446.       to the virtual machine's primary client, and returns to real mode
  447.       on the handler's completion
  448. SeeAlso: AX=0203h,AX=0211h,AX=0212h
  449. --------E-310300-----------------------------
  450. INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT
  451.     AX = 0300h
  452.     BL = interrupt number
  453.     BH = flags
  454.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  455.            reserved, must be 0 (DPMI 1.0+)
  456.         others must be 0
  457.     CX = number of words to copy from protected mode to real mode stack
  458.     ES:(E)DI = selector:offset of real mode call structure (see below)
  459. Return: CF clear if successful
  460.         real mode call structure modified (all fields except SS:SP, CS:IP
  461.           filled with return values from real mode interrupt)
  462.     CF set on error
  463.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  464.     protected mode stack unchanged
  465. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  466.     CS:IP in the real mode call structure is ignored for this call,
  467.       instead, the indicated interrupt vector is used for the address
  468.     the flags in the call structure are pushed on the real mode stack to
  469.       form an interrupt stack frame, and the trace and interrupt flags are
  470.       clear on entry to the handler
  471.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  472.     the real mode handler must return with the stack in the same state as
  473.       it was on being called
  474. SeeAlso: AX=0302h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286",INT 2C/AX=0026h
  475. SeeAlso: INT 2F/AX=FB42h/BX=000Dh
  476.  
  477. Format of real mode call structure:
  478. Offset    Size    Description
  479.  00h    DWORD    EDI
  480.  04h    DWORD    ESI
  481.  08h    DWORD    EBP
  482.  0Ch    DWORD    reserved (00h)
  483.  10h    DWORD    EBX
  484.  14h    DWORD    EDX
  485.  18h    DWORD    ECX
  486.  1Ch    DWORD    EAX
  487.  20h    WORD    flags
  488.  22h    WORD    ES
  489.  24h    WORD    DS
  490.  26h    WORD    FS
  491.  28h    WORD    GS
  492.  2Ah    WORD    IP
  493.  2Ch    WORD    CS
  494.  2Eh    WORD    SP
  495.  30h    WORD    SS
  496. --------E-310301-----------------------------
  497. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME
  498.     AX = 0301h
  499.     BH = flags
  500.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  501.            reserved, must be 0 (DPMI 1.0+)
  502.         others must be 0
  503.     CX = number of words to copy from protected mode to real mode stack
  504.     ES:DI / ES:EDI = selector:offset of real mode call structure
  505.             (see INT 31/AX=0300h)
  506. Return: CF clear if successful
  507.         real mode call structure modified (all fields except SS:SP, CS:IP
  508.           filled with return values from real mode interrupt)
  509.     CF set on error
  510.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  511.     protected mode stack unchanged
  512. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  513.     the real mode procedure must exit with a FAR return
  514.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  515.     the real mode handler must return with the stack in the same state as
  516.       it was on being called
  517. SeeAlso: AX=0300h,AX=0302h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286"
  518. SeeAlso: INT 2C/AX=0025h
  519. --------E-310302-----------------------------
  520. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME
  521.     AX = 0302h
  522.     BH = flags
  523.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  524.            reserved, must be 0 (DPMI 1.0+)
  525.         others must be 0
  526.     CX = number of words to copy from protected mode to real mode stack
  527.     ES:DI / ES:EDI = selector:offset of real mode call structure
  528.             (see INT 31/AX=0300h)
  529. Return: CF clear if successful
  530.         real mode call structure modified (all fields except SS:SP, CS:IP
  531.           filled with return values from real mode interrupt)
  532.     CF set on error
  533.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  534.     protected mode stack unchanged
  535. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  536.     the flags in the call structure are pushed on the real mode stack to
  537.       form an interrupt stack frame, and the trace and interrupt flags are
  538.       clear on entry to the handler
  539.     the real mode procedure must exit with an IRET
  540.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  541.     the real mode handler must return with the stack in the same state as
  542.       it was on being called
  543. SeeAlso: AX=0300h
  544. --------E-310303-----------------------------
  545. INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS
  546.     AX = 0303h
  547.     DS:SI / DS:ESI = selector:offset of procedure to call
  548.     ES:DI / ES:EDI = selector:offset of real mode call structure
  549.             (see AX=0300h)
  550. Return: CF clear if successful
  551.         CX:DX = segment:offset of real mode call address
  552.     CF set on error
  553.         AX = error code (DPMI 1.0+) (8015h) (see AX=0000h)
  554. Notes:    the real mode call structure is static, causing reentrancy problems;
  555.       its contents are only valid at the time of a callback
  556.     the called procedure must modify the real mode CS:IP before returning
  557.     values are returned to real mode by modifying the real mode call struc
  558.     DPMI hosts must provide at least 16 callbacks per client
  559. SeeAlso: AX=0304h,AX=0C00h
  560.  
  561. Values callback procedure is called with:
  562.     DS:SI / DS:ESI = selector:offset of real mode SS:SP
  563.     ES:DI / ES:EDI = selector:offset of real mode call structure
  564.     SS:SP / SS:ESP = locked protected mode API stack
  565.     interrupts disabled
  566. Return: (with IRET)
  567.     ES:DI / ES:EDI = selector:offset of real mode call structure to restore
  568. --------E-310304-----------------------------
  569. INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS
  570.     AX = 0304h
  571.     CX:DX = real mode callback address
  572. Return: CF clear if successful
  573.     CF set on error
  574.         AX = error code (DPMI 1.0+) (8024h) (see AX=0000h)
  575. SeeAlso: AX=0303h
  576. --------E-310305-----------------------------
  577. INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES
  578.     AX = 0305h
  579. Return: CF clear
  580.     AX = size in bytes of state buffer
  581.     BX:CX = real mode address of procedure to save/restore state
  582.     SI:DI / SI:EDI = protected mode procedure to save/restore state
  583. Notes:    the buffer size will be zero if it is not necessary to preserve state
  584.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  585.     this function is only needed if using the raw mode switch service
  586. SeeAlso: AX=0306h
  587.  
  588. Values to call state-save procedures with:
  589.     AL = direction
  590.         00h save state
  591.         01h restore state
  592.     ES:DI / ES:EDI -> state buffer
  593. Return: all registers preserved
  594. --------E-310306-----------------------------
  595. INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES
  596.     AX = 0306h
  597. Return: CF clear
  598.     BX:CX -> procedure to switch from real to protected mode
  599.     SI:DI / SI:EDI -> procedure to switch from protected to real mode
  600. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  601.     the caller must save and restore the state of the task with AX=0305h
  602.     not supported by MS Windows 3.0 in Standard mode
  603. SeeAlso: AX=0305h
  604.  
  605. Values to JUMP at mode-switch procedures with:
  606.     AX = new DS
  607.     CX = new ES
  608.     DX = new SS
  609.     BX / EBX = new SP / ESP
  610.     SI = new CS
  611.     DI / EDI = new IP / EIP
  612. Notes:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  613.       DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h
  614.     interrupts will stay disabled during the entire mode switch if they
  615.       are disabled on entry to the mode-switch procedure
  616. --------E-310400-----------------------------
  617. INT 31 P - DPMI 0.9+ - GET DPMI VERSION
  618.     AX = 0400h
  619. Return: CF clear
  620.     AH = major version of DPMI spec supported
  621.     AL = two-digit minor version of DPMI spec supported
  622.     BX = flags
  623.         bit 0: running under an 80386 (32-bit) implementation
  624.         bit 1: processor returns to real mode for reflected interrupts
  625.            instead of V86 mode
  626.         bit 2: virtual memory supported
  627.         bit 3: reserved (undefined)
  628.         others reserved (zero)
  629.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  630.     DH = curr value of virtual master interrupt controller base interrupt
  631.     DL = curr value of virtual slave interrupt controller base interrupt
  632. BUG:    the Windows NT March 1993 beta reports version 0090h (0.144); this has
  633.       been fixed in the final release
  634. SeeAlso: AX=0401h,INT 21/AX=250Ch,INT 2F/AX=1687h,INT 67/AX=DE0Ah
  635. --------E-310401-----------------------------
  636. INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES
  637.     AX = 0401h
  638.     ES:(E)DI -> 128-byte buffer for host description (see below)
  639. Return: CF clear if successful
  640.         AX = capabilities (see below)
  641.         CX = reserved (00h)
  642.         DX = reserved (00h)
  643.         buffer filled
  644.     CF set on error (DPMI 0.9 only)
  645. SeeAlso: AX=0400h
  646.  
  647. Bitfields for capabilities:
  648.  bit 0    paged accessed/dirty supported (see AX=0506h,AX=0507h)
  649.  bit 1    exceptions restartability supported
  650.  bit 2    device mapping supported (see AX=0508h)
  651.  bit 3    conventional memory mapping supported (see AX=0509h)
  652.  bit 4    demand zero-fill supported
  653.  bit 5    write-protect client capability supported
  654.  bit 6    write-protect host capability supported
  655.  bits 7-15 reserved
  656.  
  657. Format of host description:
  658. Offset    Size    Description
  659.  00h    BYTE    host major version number
  660.  01h    BYTE    host minor version number
  661.  02h 126 BYTEs    ASCIZ host vendor name
  662. --------E-310500-----------------------------
  663. INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION
  664.     AX = 0500h
  665.     ES:DI / ES:EDI -> buffer for memory information (see below)
  666. Return: CF clear
  667. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  668.     this function must be considered advisory because other applications
  669.       may affect the results at any time after the call
  670.     fields not supported by the DPMI implementation are filled with
  671.       FFFFFFFFh
  672.     DPMI 1.0+ supports this function solely for backward compatibility; use
  673.       AX=050Bh instead
  674. SeeAlso: AX=0501h,AX=0604h
  675.  
  676. Format of memory information:
  677. Offset    Size    Description
  678.  00h    DWORD    largest available block in bytes
  679.  04h    DWORD    maximum unlocked page allocation
  680.  08h    DWORD    maximum locked page allocation
  681.  0Ch    DWORD    total linear address space in pages
  682.  10h    DWORD    total unlocked pages
  683.  14h    DWORD    free pages
  684.  18h    DWORD    total physical pages
  685.  1Ch    DWORD    free linear address space in pages
  686.  20h    DWORD    size of paging file/partition in pages
  687.  24h 12 BYTEs    reserved
  688. --------E-310501-----------------------------
  689. INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK
  690.     AX = 0501h
  691.     BX:CX = size in bytes
  692. Return: CF clear if successful
  693.         BX:CX = linear address of block
  694.         SI:DI = memory block handle for resizing and freeing block
  695.     CF set on error
  696.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see AX=0000h)
  697. Notes:    no selectors are allocated
  698.     the memory block is allocated unlocked (can be locked with AX=0600h)
  699.     allocations are often page granular (see AX=0604h)
  700.     under MS Windows 3.10 Enhanced mode with paging enabled, it is possible
  701.       for this function to fail even if AX=0500h indicates that enough
  702.       memory is available
  703. SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h
  704. SeeAlso: INT 2F/AX=FB42h/BX=0002h
  705. --------E-310502-----------------------------
  706. INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK
  707.     AX = 0502h
  708.     SI:DI = handle of memory block
  709. Return: CF clear if successful
  710.     CF set on error
  711.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  712. Note:    any selectors allocated for the memory block must also be freed,
  713.       preferably before freeing the memory block
  714. SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h
  715. --------E-310503-----------------------------
  716. INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK
  717.     AX = 0503h
  718.     BX:CX = new size in bytes (nonzero)
  719.     SI:DI = handle of memory block
  720. Return: CF clear if successful
  721.         BX:CX = new linear address
  722.         SI:DI = new handle of memory block
  723.     CF set on error
  724.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h)
  725.         (see AX=0000h)
  726. Notes:    any selectors pointing at the block must be updated
  727.     the previous memory block handle becomes invalid
  728.     an error is returned if the new size is 0
  729. SeeAlso: AX=0102h,AX=0501h,AX=0505h
  730. --------E-310504-----------------------------
  731. INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK
  732.     AX = 0504h
  733.     EBX = page-aligned linear address of memory block (00000000h if any
  734.         address is acceptable)
  735.     ECX = size in bytes (nonzero)
  736.     EDX = flags
  737.         bit 0: set to create committed pages instead of uncommitted pages
  738.         bits 1-31 reserved (0)
  739. Return: CF clear if successful
  740.         EBX = linear address of memory block
  741.         ESI = memory block handle
  742.     CF set on error
  743.         AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see AX=0000h)
  744. Note:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  745. SeeAlso: AX=0501h,AX=0505h
  746. --------E-310505-----------------------------
  747. INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK
  748.     AX = 0505h
  749.     ESI = memory block handle
  750.     ECX = new size in bytes (nonzero)
  751.     EDX = flags
  752.         bit 0: create committed pages rather than uncommitted pages
  753.         bit 1: segment descriptor update required
  754.         ES:EBX -> buffer containing array of WORDs with selectors
  755.         EDI = number of selectors in array
  756.         bits 2-31 reserved (0)
  757. Return: CF clear if successful
  758.         EBX = new linear base address
  759.         ESI = new memory block handle
  760.     CF set on error
  761.         AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see AX=0000h)
  762. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  763.     the old memory block handle becomes invalid
  764.     if EDX bit 1 set and the block's base address is changed, DPMI updates
  765.       all descriptors for selectors in the update buffer which fall within
  766.       the memory block
  767. SeeAlso: AX=0503h,AX=0504h
  768. --------E-310506-----------------------------
  769. INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES
  770.     AX = 0506h
  771.     ESI = memory block handle
  772.     EBX = offset in memory block of first page
  773.     ECX = number of pages
  774.     ES:EDX -> array of WORDs to hold page attributes (see below)
  775. Return: CF clear if successful
  776.         buffer filled
  777.     CF set on error
  778.         AX = error code (8001h,8023h,8025h) (see AX=0000h)
  779. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  780.     if EBX is not page-aligned, it will be rounded down
  781. SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h
  782.  
  783. Format of page attribute words:
  784.  bits 0-2    page type
  785.         000 uncommitted
  786.         001 committed
  787.         010 mapped (see AX=0508h,AX=0509h)
  788.         other currently unused
  789.  bit 3        page is read/write rather than read-only
  790.  bit 4        accessed/dirty bits supplied in bits 5 and 6
  791.  bit 5        page has been accessed (only valid if bit 4 set)
  792.  bit 6        page has been written (only valid if bit 4 set)
  793.  bits 7-15    reserved (0)
  794. --------E-310507-----------------------------
  795. INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES
  796.     AX = 0507h
  797.     ESI = memory block handle
  798.     EBX = offset in memory block of first page
  799.     ECX = number of pages
  800.     ES:EDX -> array of WORDs with new page attributes (see AX=0506h)
  801. Return: CF clear if successful
  802.     CF set on error
  803.         AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h)
  804.         (see AX=0000h)
  805.         ECX = number of pages which have been set
  806. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  807.     if EBX is not page-aligned, it will be rounded down
  808. SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh
  809. --------E-310508-----------------------------
  810. INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK
  811.     AX = 0508h
  812.     ESI = memory block handle
  813.     EBX = page-aligned offset within memory block of page(s) to be mapped
  814.     ECX = number of pages to map
  815.     EDX = page-aligned physical address of device
  816. Return: CF clear if successful
  817.     CF set on error
  818.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  819. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  820.     support of this function is optional; hosts are also allowed to support
  821.       the function for some devices but not others
  822. SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h
  823. --------E-310509-----------------------------
  824. INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK
  825.     AX = 0509h
  826.     ESI = memory block handle
  827.     EBX = page-aligned offset within memory block of page(s) to map
  828.     ECX = number of pages to map
  829.     EDX = page-aligned linear address of conventional (below 1M) memory
  830. Return: CF clear if successful
  831.     CF set on error
  832.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  833. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  834.     support of this function is optional
  835. SeeAlso: AX=0504h,AX=0508h,AX=0801h
  836. --------E-31050A-----------------------------
  837. INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE
  838.     AX = 050AH
  839.     SI:DI = memory block handle
  840. Return: CF clear if successful
  841.         SI:DI = size in bytes
  842.         BX:CX = base address
  843.     CF set on error
  844.         AX = error code (8023h) (see AX=0000h)
  845. SeeAlso: AX=0501h,AX=0504h
  846. --------E-31050B-----------------------------
  847. INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION
  848.     AX = 050Bh
  849.     ES:(E)DI -> 128-byte buffer for memory information (see below)
  850. Return: CF clear if successful
  851.     CF set on error (DPMI 0.9 only)
  852. Note:    16-bit programs use ES:DI, 32-bit programs must use ES:EDI
  853. SeeAlso: AX=0500h
  854.  
  855. Format of memory information:
  856. Offset    Size    Description
  857.  00h    DWORD    total allocated bytes of physical memory controlled by host
  858.  04h    DWORD    total allocated bytes of virtual memory controlled by host
  859.  08h    DWORD    total available bytes of virtual memory controlled by host
  860.  0Ch    DWORD    total allocated bytes of virtual memory for curr virtual mach
  861.  10h    DWORD    total available bytes of virtual memory for curr virtual mach
  862.  14h    DWORD    total allocated bytes of virtual memory for current client
  863.  18h    DWORD    total available bytes of virtual memory for current client
  864.  1Ch    DWORD    total locked bytes for current client
  865.  20h    DWORD    maximum locked bytes for current client
  866.  24h    DWORD    highest linear address available to current client
  867.  28h    DWORD    largest available memory block in bytes
  868.  2Ch    DWORD    minimum allocation unit in bytes
  869.  30h    DWORD    allocation alignment unit size in bytes
  870.  34h 76 BYTEs    reserved (00h)
  871. --------E-310600-----------------------------
  872. INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION
  873.     AX = 0600h
  874.     BX:CX = starting linear address
  875.     SI:DI = size of region in bytes
  876. Return: CF clear if successful
  877.     CF set on error
  878.         none of the memory is locked
  879.         AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see AX=0000h)
  880. Notes:    pages at beginning and end will be locked if the region overlaps them
  881.     may be called multiple times for a given page; the DPMI host keeps a
  882.       lock count for each page
  883. SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h
  884. --------E-310601-----------------------------
  885. INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION
  886.     AX = 0601h
  887.     BX:CX = starting linear address
  888.     SI:DI = size of region in bytes
  889. Return: CF clear if successful
  890.     CF set on error
  891.         none of the memory is unlocked
  892.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  893. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  894.     memory whose lock count has not reached zero remains locked
  895. SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h
  896. --------E-310602-----------------------------
  897. INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE
  898.     AX = 0602h
  899.     BX:CX = starting linear address
  900.     SI:DI = size of region in bytes
  901. Return: CF clear if successful
  902.     CF set on error
  903.         none of the memory is made pageable
  904.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  905. Notes:    must relock all unlocked real mode memory before terminating process
  906.       for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory
  907.     pages at beginning and end will be unlocked if the region overlaps them
  908.     pageability of real mode pages is binary, not a count
  909. SeeAlso: AX=0600h,AX=0603h
  910. --------E-310603-----------------------------
  911. INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION
  912.     AX = 0603h
  913.     BX:CX = starting linear address
  914.     SI:DI = size of region in bytes
  915. Return: CF clear if successful
  916.     CF set on error
  917.         none of the memory is relocked
  918.         AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see AX=0000h)
  919. Notes:    pages at beginning and end will be relocked if the region overlaps them
  920.     pageability of real mode pages is binary, not a count
  921. SeeAlso: AX=0602h
  922. --------E-310604-----------------------------
  923. INT 31 P - DPMI 0.9+ - GET PAGE SIZE
  924.     AX = 0604h
  925. Return: CF clear if successful
  926.         BX:CX = page size in bytes
  927.     CF set on error
  928.         AX = error code (DPMI 1.0+)
  929.         8001h unsupported, 16-bit host
  930. BUG:    the Borland C++ 3.1 DPMILOAD returns with CF clear but BX and CX
  931.       unchanged
  932. --------E-310700-----------------------------
  933. INT 31 P - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES
  934.     AX = 0700h
  935.     BX:CX = starting linear page number
  936.     SI:DI = number of pages to mark as paging candidates
  937. Return: ???
  938. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  939.       specification, this function is called by MS Windows TASKMAN,
  940.       PROGMAN, and KERNEL
  941. SeeAlso: AX=0701h,AX=0702h
  942. --------E-310701-----------------------------
  943. INT 31 P - DPMI 0.9+ - DISCARD PAGES
  944.     AX = 0701h
  945.     BX:CX = starting linear page number
  946.     SI:DI = number of pages to discard
  947. Return: ???
  948. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  949.       specification, this function is called by MS Windows TASKMAN,
  950.       PROGMAN, and KERNEL
  951. SeeAlso: AX=0700h,AX=0703h
  952. --------E-310702-----------------------------
  953. INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE
  954.     AX = 0702h
  955.     BX:CX = starting linear address
  956.     SI:DI = number of bytes to mark as paging candidates
  957. Return: CF clear if successful
  958.     CF set on error
  959.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  960. Notes:    this function is advisory, and does not force immediate paging
  961.     partial pages will not be discarded
  962. SeeAlso: AX=0700h,AX=0703h
  963. --------E-310703-----------------------------
  964. INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS
  965.     AX = 0703h
  966.     BX:CX = starting linear address
  967.     SI:DI = number of bytes to mark as discarded
  968. Return: CF clear if successful
  969.     CF set on error
  970.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  971. Notes:    this function is advisory, and may be ignored by DPMI implementations
  972.     partial pages will not be discarded
  973. SeeAlso: AX=0701h,AX=0702h
  974. --------E-310800-----------------------------
  975. INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING
  976.     AX = 0800h
  977.     BX:CX = physical address (should be above 1 MB)
  978.     SI:DI = size in bytes
  979. Return: CF clear if successful
  980.         BX:CX = linear address which maps the requested physical memory
  981.     CF set on error
  982.         AX = error code (DPMI 1.0+) (8003h,8021h) (see AX=0000h)
  983. Notes:    implementations may refuse this call because it can circumvent protects
  984.     the caller must build an appropriate selector for the memory
  985.     do not use for memory mapped in the first megabyte
  986. SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h
  987. --------E-310801-----------------------------
  988. INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING
  989.     AX = 0801h
  990.     BX:CX = linear address returned by AX=0800h
  991. Return: CF clear if successful
  992.     CF set on error
  993.         AX = error code (8025h) (see AX=0000h)
  994. Note:    should be called at end of access to device mapped with AX=0800h
  995. SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h
  996. --------E-310900-----------------------------
  997. INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE
  998.     AX = 0900h
  999. Return: CF clear
  1000.     virtual interrupts disabled
  1001.     AL = 00h if previously disabled
  1002.        = 01h if previously enabled
  1003.     AH preserved
  1004. Notes:    the previous state may be restored simply by executing another INT 31
  1005.     a CLI instruction may be used if the previous state is unimportant,
  1006.       but should be assumed to be very slow due to trapping by the host
  1007. SeeAlso: AX=0901h,AX=0902h
  1008. --------E-310901-----------------------------
  1009. INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE
  1010.     AX = 0901h
  1011. Return: CF clear
  1012.     virtual interrupts enabled
  1013.     AL = 00h if previously disabled
  1014.        = 01h if previously enabled
  1015.     AH preserved
  1016. Notes:    the previous state may be restored simply by executing another INT 31
  1017.     a STI instruction may be used if the previous state is unimportant,
  1018.       but should be assumed to be very slow due to trapping by the host
  1019. SeeAlso: AX=0900h,AX=0902h
  1020. --------E-310902-----------------------------
  1021. INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE
  1022.     AX = 0902h
  1023. Return: CF clear
  1024.     AL = 00h if disabled
  1025.        = 01h if enabled
  1026. Note:    should be used rather than PUSHF because that instruction yields the
  1027.       physical interrupt state rather than the per-client virtualized
  1028.       interrupt flag
  1029. SeeAlso: AX=0900h,AX=0901h
  1030. --------E-310A00-----------------------------
  1031. INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT
  1032.     AX = 0A00h
  1033.     DS:SI / DS:ESI -> case-sensitive ASCIZ vendor name or identifier
  1034. Return: CF clear if successful
  1035.         ES:DI / ES:EDI -> FAR extended API entry point
  1036.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  1037.     CF set on error
  1038.         AX = error code (DPMI 1.0+) (8001h) (see AX=0000h)
  1039. Notes:    extended API parameters are vendor-specific
  1040.     DPMI 1.0+ supports this function solely for backward compatibility; use
  1041.       INT 2F/AX=168Ah instead
  1042.     this function is not supported by MS Windows 3.10, BC++ 3.1 DPMILOAD,
  1043.       or QDPMI v1.0x; use INT 2F/AX=168Ah instead.    It is supported by
  1044.       386MAX v7.01.
  1045. SeeAlso: INT 2F/AX=168Ah
  1046. --------E-310B00-----------------------------
  1047. INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT
  1048.     AX = 0B00h
  1049.     BX:CX = linear address
  1050.     DL = size (1,2,4 bytes)
  1051.     DH = type (00h execute, 01h write, 02h read/write)
  1052. Return: CF clear if successful
  1053.         BX = watchpoint handle
  1054.     CF set on error
  1055.         AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see AX=0000h)
  1056. SeeAlso: AX=0212h,AX=0601h
  1057. --------E-310B01-----------------------------
  1058. INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT
  1059.     AX = 0B01h
  1060.     BX = watchpoint handle
  1061. Return: CF clear if successful
  1062.     CF set on error
  1063.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  1064. Note:    the watchpoint handle is freed
  1065. SeeAlso: AX=0B00h
  1066. --------E-310B02-----------------------------
  1067. INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT
  1068.     AX = 0B02h
  1069.     BX = watchpoint handle
  1070. Return: CF clear if successful
  1071.         AX = status flags
  1072.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  1073.     CF set on error
  1074.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  1075. SeeAlso: AX=0B00h,AX=0B03h
  1076. --------E-310B03-----------------------------
  1077. INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT
  1078.     AX = 0B03h
  1079.     BX = watchpoint handle
  1080. Return: CF clear if successful
  1081.     CF set on error
  1082.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  1083. SeeAlso: AX=0B02h
  1084. --------E-310C00-----------------------------
  1085. INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK
  1086.     AX = 0C00h
  1087.     ES:(E)DI -> resident service provider structure (see below)
  1088. Return: CF clear if successful
  1089.     CF set on error
  1090.         AX = error code (8015h,8021h,8025h) (see AX=0000h)
  1091. Note:    calling this function declares an intent to provide resident
  1092.       protected mode services after terminating with AX=0C01h
  1093. SeeAlso: AX=0303h,AX=0C01h
  1094.  
  1095. Format of resident service provider structure:
  1096. Offset    Size    Description
  1097.  00h    QWORD    descriptor for 16-bit data segment
  1098.  08h    QWORD    descriptor for 16-bit code segment (zeros if not supported)
  1099.  10h    WORD    offset of 16-bit callback procedure
  1100.  12h  2 BYTEs    reserved
  1101.  14h    QWORD    descriptor for 32-bit data segment
  1102.  1Ch    QWORD    descriptor for 32-bit code segment (zeros if not supported)
  1103.  24h    DWORD    offset of 32-bit callback procedure
  1104. --------E-310C01-----------------------------
  1105. INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT
  1106.     AX = 0C01h
  1107.     BL = return code
  1108.     DX = number of paragraphs of DOS memory to reserve (0 or >= 6)
  1109. Return: never
  1110. Notes:    should only be used if the program will only provide services to
  1111.       other DPMI programs
  1112.     any protected mode memory remains allocated to the program unless
  1113.       explicitly freed before this call
  1114.     must first call AX=0C00h or program will simply be terminated
  1115. SeeAlso: AX=0C00h,INT 21/AH=31h
  1116. --------E-310D00-----------------------------
  1117. INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY
  1118.     AX = 0D00h
  1119.     ES:(E)DI -> shared memory allocation request structure (see below)
  1120. Return: CF clear if successful
  1121.         request structure updated
  1122.     CF set on error
  1123.         AX = error code (8012h,8013h,8014h,8016h,8021h) (see AX=0000h)
  1124. Note:    first 16 bytes of memory block will be initialized to zeros on the
  1125.       first allocation
  1126. SeeAlso: AX=0501h,AX=0D01h,AX=0D02h
  1127.  
  1128. Format of shared memory allocation request structure:
  1129. Offset    Size    Description
  1130.  00h    DWORD    requested length of shared memory block in bytes
  1131.  04h    DWORD    (return) allocated length of block
  1132.  08h    DWORD    (return) shared memory handle
  1133.  0Ch    DWORD    (return) linear address of memory block
  1134.  10h    PWORD    selector:offset32 of ASCIZ name for memory block
  1135.         (name max 128 bytes)
  1136.  16h  2 BYTEs    reserved
  1137.  18h  4 BYTEs    reserved (00h)
  1138. --------E-310D01-----------------------------
  1139. INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY
  1140.     AX = 0D01h
  1141.     SI:DI = shared memory block handle
  1142. Return: CF clear if successful
  1143.     CF set on error
  1144.         AX = error code (8023h) (see AX=0000h)
  1145. Notes:    handle becomes invalid after this call
  1146.     DPMI maintains separate global and virtual machine use counts for each
  1147.       shared memory block; when the global use counts reaches zero, the
  1148.       block is finally destroyed
  1149. SeeAlso: AX=0502h,AX=0D00h
  1150. --------E-310D02-----------------------------
  1151. INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY
  1152.     AX = 0D02h
  1153.     SI:DI = shared memory block handle
  1154.     DX = flags
  1155.         bit 0: return immediately rather than suspending if serialization
  1156.             unavailable
  1157.         bit 1: shared rather than exclusive serialization
  1158.         bits 2-15 reserved (0)
  1159. Return: CF clear if successful
  1160.     CF set on error
  1161.         AX = error code (8004h,8005h,8017h-8019h,8023h) (see AX=0000h)
  1162. Notes:    an exclusive serialization blocks any other serialization attempts for
  1163.       the same block by another virtual machine; a shared serialization
  1164.       blocks attempts at exclusive serialization by another virtual machine
  1165.     hosts are not required to detect deadlock
  1166.     a client's interrupt handler can cancel a serialization call which
  1167.       caused it to block by calling AX=0D03h
  1168. SeeAlso: AX=0D00h,AX=0D03h
  1169. --------E-310D03-----------------------------
  1170. INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY
  1171.     AX = 0D03h
  1172.     SI:DI = shared memory block handle
  1173.     DX = flags
  1174.         bit 0: release shared serialization rather than exclusive serialztn
  1175.         bit 1: free pending serialization
  1176.         bits 2-15 reserved (0)
  1177. Return: CF clear if successful
  1178.     CF set on error
  1179.         AX = error code (8002h,8023h) (see AX=0000h)
  1180. SeeAlso: AX=0D00h,AX=0D02h
  1181. --------E-310E00-----------------------------
  1182. INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS
  1183.     AX = 0E00h
  1184. Return: CF clear
  1185.     AX = coprocessor status
  1186.         bit 0: numeric coprocessor enabled for current client
  1187.         bit 1: client is emulating coprocessor
  1188.         bit 2: numeric coprocessor is present
  1189.         bit 3: host is emulating coprocessor instructions
  1190.         bits 4-7: coprocessor type
  1191.         0000 none
  1192.         0010 80287
  1193.         0011 80387
  1194.         0100 80486 with numeric coprocessor
  1195.         other reserved
  1196.         bits 8-15 not used
  1197. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  1198. SeeAlso: AX=0E01h
  1199. --------E-310E01-----------------------------
  1200. INT 31 P - DPMI 1.0+ - SET EMULATION
  1201.     AX = 0E01h
  1202.     BX = coprocessor flag bits
  1203.         bit 0: enable numeric coprocessor for current client
  1204.         bit 1: client will emulate coprocessor
  1205.         bits 2-15 not used
  1206. Return: CF clear if successful
  1207.     CF set on error
  1208.         AX = error code (8026h) (see AX=0000h)
  1209. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  1210. SeeAlso: AX=0E00h
  1211. ----------3157-------------------------------
  1212. INT 31 - Netroom3 DPMI.EXE v3.00 - ???
  1213.     AH = 57h
  1214.     AL = subfunction (at least 02h,03h,04h,05h,07h,08h,09h,0Ah)
  1215.     ???
  1216. Return: ???
  1217. SeeAlso: INT 2C/AX=0000h"RM386"
  1218. ----------315702-----------------------------
  1219. INT 31 - Netroom3 DPMI.EXE v3.00 - SWITCH TO PROTECTED MODE
  1220.     AX = 5702h
  1221.     DX = PSP segment of caller
  1222.     STACK: WORD    ???
  1223.            WORD    flags (bit 0 set if 32-bit program)
  1224. Return: as for DPMI mode-switch entry point (see INT 2F/AX=1687h)
  1225. Note:    this function is called by the real-mode DPMI mode-switch entry point
  1226. SeeAlso: INT 2F/AX=1687h
  1227. --------v-32---------------------------------
  1228. INT 32 - VIRUS - reportedly used by "Tiny" Viruses
  1229. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 31"VIRUS",INT 44"VIRUS"
  1230. --------v-32---------------------------------
  1231. INT 32 - VIRUS - "Plovdiv 1.3"/"Damage 1.3" - ORIGINAL INT 21h VECTOR
  1232. SeeAlso: INT 31"VIRUS",INT 9E"VIRUS"
  1233. --------M-330000-----------------------------
  1234. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  1235.     AX = 0000h
  1236. Return: AX = status
  1237.         0000h hardware/driver not installed
  1238.         FFFFh hardware/driver installed
  1239.     BX = number of buttons
  1240.         0000h other than two
  1241.         0002h two buttons (many drivers)
  1242.         0003h Mouse Systems/Logitech three-button mouse
  1243.         FFFFh two buttons
  1244. Notes:    to use mouse on a Hercules-compatible monographics card in graphics
  1245.       mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1,
  1246.       and then call this function.    Logitech drivers v5.01 and v6.00
  1247.       reportedly do not correctly use Hercules graphics in dual-monitor
  1248.       systems, while version 4.10 does.
  1249.     the Logitech mouse driver contains the signature string "LOGITECH"
  1250.       three bytes past the interrupt handler; many of the Logitech mouse
  1251.       utilities check for this signature.
  1252. SeeAlso: AX=0011h,AX=0021h,AX=002Fh,INT 62/AX=007Ah,INT 74
  1253. --------M-330001-----------------------------
  1254. INT 33 - MS MOUSE - SHOW MOUSE CURSOR
  1255.     AX = 0001h
  1256. SeeAlso: AX=0002h,INT 16/AX=FFFEh,INT 62/AX=007Bh
  1257. --------M-330002-----------------------------
  1258. INT 33 - MS MOUSE - HIDE MOUSE CURSOR
  1259.     AX = 0002h
  1260. Note:    multiple calls to hide the cursor will require multiple calls to
  1261.       function 01h to unhide it.
  1262. SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh,INT 62/AX=007Bh
  1263. --------M-330003-----------------------------
  1264. INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS
  1265.     AX = 0003h
  1266. Return: BX = button status
  1267.        bit 0  left button pressed if 1
  1268.        bit 1  right button pressed if 1
  1269.        bit 2  middle button pressed if 1 (Mouse Systems/Logitech mouse)
  1270.     CX = column
  1271.     DX = row
  1272. SeeAlso: AX=0004h,AX=000Bh,INT 2F/AX=D000h"ZWmous"
  1273. --------M-330004-----------------------------
  1274. INT 33 - MS MOUSE - POSITION MOUSE CURSOR
  1275.     AX = 0004h
  1276.     CX = column
  1277.     DX = row
  1278. Note:    the row and column are truncated to the next lower multiple of the cell
  1279.       size; however, some versions of the Microsoft documentation
  1280.       incorrectly state that the coordinates are rounded
  1281. SeeAlso: AX=0003h,INT 62/AX=0081h
  1282. --------M-330005-----------------------------
  1283. INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA
  1284.     AX = 0005h
  1285.     BX = button
  1286.         0000h left
  1287.         0001h right
  1288.         0002h middle (Mouse Systems/Logitech mouse)
  1289. Return: AX = button states
  1290.         bit 0 left button pressed if 1
  1291.         bit 1 right button pressed if 1
  1292.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  1293.     BX = number of times specified button has been pressed since last call
  1294.     CX = column at time specified button was last pressed
  1295.     DX = row at time specified button was last pressed
  1296. SeeAlso: AX=0006h,INT 62/AX=007Ch
  1297. --------M-330006-----------------------------
  1298. INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA
  1299.     AX = 0006h
  1300.     BX = button
  1301.         0000h left
  1302.         0001h right
  1303.         0002h middle (Mouse Systems/Logitech mouse)
  1304. Return: AX = button states
  1305.         bit 0 left button pressed if 1
  1306.         bit 1 right button pressed if 1
  1307.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  1308.     BX = number of times specified button has been released since last call
  1309.     CX = column at time specified button was last released
  1310.     DX = row at time specified button was last released
  1311. SeeAlso: AX=0005h,INT 62/AX=007Ch
  1312. --------M-330007-----------------------------
  1313. INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE
  1314.     AX = 0007h
  1315.     CX = minimum column
  1316.     DX = maximum column
  1317. SeeAlso: AX=0008h,AX=0010h,AX=0031h,INT 62/AX=0080h
  1318. --------M-330008-----------------------------
  1319. INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE
  1320.     AX = 0008h
  1321.     CX = minimum row
  1322.     DX = maximum row
  1323. SeeAlso: AX=0007h,AX=0010h,AX=0031h,INT 62/AX=0080h
  1324. --------M-330009-----------------------------
  1325. INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR
  1326.     AX = 0009h
  1327.     BX = column of cursor hot spot in bitmap (-16 to 16)
  1328.     CX = row of cursor hot spot (-16 to 16)
  1329.     ES:DX -> bitmap
  1330.         16 words screen mask
  1331.         16 words cursor mask
  1332.             each word defines the sixteen pixels of a row, low bit
  1333.             rightmost
  1334. SeeAlso: AX=000Ah,AX=0012h,AX=002Ah,INT 62/AX=007Fh
  1335. --------M-33000A-----------------------------
  1336. INT 33 - MS MOUSE - DEFINE TEXT CURSOR
  1337.     AX = 000Ah
  1338.     BX = hardware/software text cursor
  1339.         0000h software
  1340.         CX = screen mask
  1341.         DX = cursor mask
  1342.         0001h hardware
  1343.         CX = start scan line
  1344.         DX = end scan line
  1345. Note:    when the software cursor is selected, the char/attribute data at the
  1346.       current screen position is ANDed with the screen mask and then XORed
  1347.       with the cursor mask
  1348. SeeAlso: AX=0009h,INT 62/AX=007Eh
  1349. --------M-33000B-----------------------------
  1350. INT 33 - MS MOUSE - READ MOTION COUNTERS
  1351.     AX = 000Bh
  1352. Return: CX = number of mickeys mouse moved horizontally since last call
  1353.     DX = number of mickeys mouse moved vertically
  1354. Notes:    a mickey is the smallest increment the mouse can sense
  1355.     positive values indicate down/right
  1356. SeeAlso: AX=0003h,AX=001Bh,AX=0027h
  1357. --------M-33000C-----------------------------
  1358. INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  1359.     AX = 000Ch
  1360.     CX = call mask
  1361.          bit 0 call if mouse moves
  1362.          bit 1 call if left button pressed
  1363.          bit 2 call if left button released
  1364.          bit 3 call if right button pressed
  1365.          bit 4 call if right button released
  1366.          bit 5 call if middle button pressed (Mouse Systems/Logitech mouse)
  1367.          bit 6 call if middle button released (Mouse Sys/Logitech mouse)
  1368.     ES:DX -> FAR routine
  1369. Notes:    when the subroutine is called, it is passed the following values:
  1370.       AX = condition mask (same bit assignments as call mask)
  1371.       BX = button state
  1372.       CX = cursor column
  1373.       DX = cursor row
  1374.       SI = horizontal mickey count
  1375.       DI = vertical mickey count
  1376.     some versions of the Microsoft documentation incorrectly state that CX
  1377.       bit 0 means call if mouse cursor moves, and swap the meanings of SI
  1378.       and DI
  1379. SeeAlso: AX=0018h
  1380. --------M-33000D-----------------------------
  1381. INT 33 - MS MOUSE - LIGHT PEN EMULATION ON
  1382.     AX = 000Dh
  1383. SeeAlso: AX=000Eh,INT 10/AH=04h
  1384. --------M-33000E-----------------------------
  1385. INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF
  1386.     AX = 000Eh
  1387. SeeAlso: AX=000Dh
  1388. --------M-33000F-----------------------------
  1389. INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO
  1390.     AX = 000Fh
  1391.     CX = number of mickeys per 8 pixels horizontally (default 8)
  1392.     DX = number of mickeys per 8 pixels vertically (default 16)
  1393. SeeAlso: AX=0013h,AX=001Ah,INT 62/AX=0082h
  1394. --------M-330010-----------------------------
  1395. INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING
  1396.     AX = 0010h
  1397.     CX,DX = X,Y coordinates of upper left corner
  1398.     SI,DI = X,Y coordinates of lower right corner
  1399. Note:    mouse cursor is hidden in the specified region, and needs to be
  1400.       explicitly turned on again
  1401. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"Genius MOUSE",AX=0031h
  1402. --------M-330010-----------------------------
  1403. INT 33 - Genius MOUSE - DEFINE SCREEN REGION FOR UPDATING
  1404.     AX = 0010h
  1405.     ES:DX -> update region list (see below)
  1406. Notes:    mouse cursor is hidden in the specified region, and needs to be
  1407.       explicitly turned on again
  1408.     this version of the call is described in an August 1988 version of the
  1409.       Genius Mouse programmer's reference; it has been changed to conform
  1410.       to the Microsoft version shown above by version 9.06 (and possibly
  1411.       earlier versions)
  1412. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"MS MOUSE"
  1413.  
  1414. Format of update region list:
  1415. Offset    Size    Description
  1416.  00h    WORD    left-most column
  1417.  02h    WORD    top-most row
  1418.  04h    WORD    right-most column
  1419.  06h    WORD    bottom-most row
  1420. --------M-330011-----------------------------
  1421. INT 33 - Genius Mouse 9.06 - GET NUMBER OF BUTTONS
  1422.     AX = 0011h
  1423. Return: AX = FFFFh
  1424.     BX = number of buttons
  1425. SeeAlso: AX=0000h
  1426. --------M-330012-----------------------------
  1427. INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  1428.     AX = 0012h
  1429.     BH = cursor width in words
  1430.     CH = rows in cursor
  1431.     BL = horizontal hot spot (-16 to 16)
  1432.     CL = vertical hot spot (-16 to 16)
  1433.     ES:DX -> bit map of screen and cursor maps
  1434. Return: AX = FFFFh if successful
  1435. SeeAlso: AX=0009h,AX=002Ah,AX=0035h
  1436. --------M-330013-----------------------------
  1437. INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD
  1438.     AX = 0013h
  1439.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  1440. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  1441. SeeAlso: AX=000Fh,AX=001Bh,AX=002Ch
  1442. --------M-330014-----------------------------
  1443. INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES
  1444.     AX = 0014h
  1445.     CX = call mask (see AX=000Ch)
  1446.     ES:DX -> FAR routine
  1447. Return: CX = call mask of previous interrupt routine
  1448.     ES:DX = FAR address of previous interrupt routine
  1449. SeeAlso: AX=000Ch,AX=0018h
  1450. --------M-330015-----------------------------
  1451. INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS
  1452.     AX = 0015h
  1453. Return: BX = size of buffer needed to store driver state
  1454. SeeAlso: AX=0016h,AX=0017h,AX=0042h
  1455. --------M-330016-----------------------------
  1456. INT 33 - MS MOUSE - SAVE DRIVER STATE
  1457.     AX = 0016h
  1458.     BX = size of buffer (see AX=0015h)
  1459.     ES:DX -> buffer for driver state
  1460. Note:    although not documented, many drivers appear to require BX on input
  1461. SeeAlso: AX=0015h,AX=0017h
  1462. --------M-330017-----------------------------
  1463. INT 33 - MS MOUSE - RESTORE DRIVER STATE
  1464.     AX = 0017h
  1465.     BX = size of buffer (see AX=0015h)
  1466.     ES:DX -> buffer containing saved state
  1467. Notes:    although not documented, many drivers appear to require BX on input
  1468.     some mouse drivers range-check the values in the saved state based on
  1469.       the current video mode; thus, the video mode should be restored
  1470.       before the mouse driver's state is restored
  1471. SeeAlso: AX=0015h,AX=0016h
  1472. --------M-330018-----------------------------
  1473. INT 33 - MS MOUSE - SET ALTERNATE MOUSE USER HANDLER
  1474.     AX = 0018h
  1475.     CX = call mask (see below)
  1476.     ES:DX -> FAR routine
  1477. Return: AX = 0018h if successful
  1478.        = FFFFh on error
  1479. Notes:    when the subroutine is called, it is passed the following values:
  1480.       AX = condition mask (same bit assignments as call mask)
  1481.       BX = button state
  1482.       CX = cursor column
  1483.       DX = cursor row
  1484.       SI = horizontal mickey count
  1485.       DI = vertical mickey count
  1486.     up to three handlers can be defined by separate calls to this function
  1487.     some versions of the documentation erroneously reverse the order of
  1488.       the bits in the call mask
  1489. SeeAlso: AX=000Ch,AX=0014h,AX=0019h
  1490.  
  1491. Bitfields for call mask:
  1492.  bit 0    call if mouse moves
  1493.  bit 1    call if left button pressed
  1494.  bit 2    call if left button released
  1495.  bit 3    call if right button pressed
  1496.  bit 4    call if right button released
  1497.  bit 5    call if shift button pressed during event
  1498.  bit 6    call if ctrl key pressed during event
  1499.  bit 7    call if alt key pressed during event
  1500. --------M-330019-----------------------------
  1501. INT 33 - MS MOUSE - RETURN USER ALTERNATE INTERRUPT VECTOR
  1502.     AX = 0019h
  1503.     CX = call mask (see AX=0018h)
  1504. Return: BX:DX = user interrupt vector
  1505.     CX = call mask (0000h if not found)
  1506. Note:    attempts to find a user event handler (defined by function 18h)
  1507.       whose call mask matches CX
  1508. SeeAlso: AX=0018h
  1509. --------M-33001A-----------------------------
  1510. INT 33 - MS MOUSE - SET MOUSE SENSITIVITY
  1511.     AX = 001Ah
  1512.     BX = horizontal speed \
  1513.     CX = vertical speed   / (see AX=000Fh)
  1514.     DX = double speed threshold (see AX=0013h)
  1515. SeeAlso: AX=0013h,AX=001Bh,INT 62/AX=0082h
  1516. --------M-33001B-----------------------------
  1517. INT 33 - MS MOUSE - RETURN MOUSE SENSITIVITY
  1518.     AX = 001Bh
  1519. Return: BX = horizontal speed
  1520.     CX = vertical speed
  1521.     DX = double speed threshold
  1522. SeeAlso: AX=000Bh,AX=001Ah
  1523. --------M-33001C-----------------------------
  1524. INT 33 - MS MOUSE - SET INTERRUPT RATE
  1525.     AX = 001Ch
  1526.     BX = rate
  1527.         00h no interrupts allowed
  1528.         01h 30 per second
  1529.         02h 50 per second
  1530.         03h 100 per second
  1531.         04h 200 per second
  1532. Notes:    only available on InPort mouse
  1533.     values greater than 4 may cause unpredictable driver behavior
  1534. --------M-33001D-----------------------------
  1535. INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER
  1536.     AX = 001Dh
  1537.     BX = display page number
  1538. Note:    the cursor will be displayed on the specified page
  1539. SeeAlso: AX=001Eh
  1540. --------M-33001E-----------------------------
  1541. INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER
  1542.     AX = 001Eh
  1543. Return: BX = display page number
  1544. SeeAlso: AX=001Dh
  1545. --------M-33001F-----------------------------
  1546. INT 33 - MS MOUSE - DISABLE MOUSE DRIVER
  1547.     AX = 001Fh
  1548. Return: AX = 001Fh unsuccessful
  1549.          FFFFh successful
  1550.     ES:BX = vector for INT 33 before mouse driver was first installed
  1551. Notes:    restores vectors for INT 10 and INT 71 (8086) or INT 74 (286/386)
  1552.     if you restore INT 33 to ES:BX, driver will be completely disabled
  1553.     many drivers return AX=001Fh even though the driver has been disabled
  1554. SeeAlso: AX=0020h
  1555. --------M-330020-----------------------------
  1556. INT 33 - MS MOUSE - ENABLE MOUSE DRIVER
  1557.     AX = 0020h
  1558. Return: AX = 0020h unsuccessful (or driver not installed)
  1559.          FFFFh successful
  1560. Notes:    restores vectors for INT 10h and INT 71h (8086) or INT 74h (286/386)
  1561.       which were removed by function 1Fh
  1562.     many drivers return AX=0020h even though the driver has been enabled
  1563. SeeAlso: AX=001Fh
  1564. --------M-330021-----------------------------
  1565. INT 33 - MS MOUSE - SOFTWARE RESET
  1566.     AX = 0021h
  1567. Return: AX = FFFFh if mouse driver installed
  1568.         BX = number of buttons (FFFFh = two buttons)
  1569.          0021h if mouse driver not installed
  1570. Note:    identical to funtion 00h, but does not reset the mouse
  1571. SeeAlso: AX=0000h
  1572. --------M-330022-----------------------------
  1573. INT 33 - MS MOUSE - SET LANGUAGE FOR MESSAGES
  1574.     AX = 0022h
  1575.     BX = language (see below)
  1576. Note:    only available on international versions of the driver; US versions
  1577.       ignore this call
  1578. SeeAlso: AX=0023h
  1579.  
  1580. Values for language:
  1581.  00h    English
  1582.  01h    French
  1583.  02h    Dutch
  1584.  03h    German
  1585.  04h    Swedish
  1586.  05h    Finnish
  1587.  06h    Spanish
  1588.  07h    Portugese
  1589.  08h    Italian
  1590. --------M-330023-----------------------------
  1591. INT 33 - MS MOUSE - GET LANGUAGE FOR MESSAGES
  1592.     AX = 0023h
  1593. Return: BX = language (see AX=0022h)
  1594. Note:    the US version of the driver always returns zero
  1595. SeeAlso: AX=0022h
  1596. --------M-330024-----------------------------
  1597. INT 33 - MS MOUSE v6.26+ - GET SOFTWARE VERSION, MOUSE TYPE, AND IRQ NUMBER
  1598.     AX = 0024h
  1599. Return: AX = FFFFh on error
  1600.     otherwise,
  1601.         BH = major version
  1602.         BL = minor version
  1603.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  1604.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  1605. SeeAlso: AX=004Dh,AX=006Dh
  1606. --------M-330025-----------------------------
  1607. INT 33 - MS MOUSE v6.26+ - GET GENERAL DRIVER INFORMATION
  1608.     AX = 0025h
  1609. Return: AX = general information
  1610.         bit 15: driver loaded as device driver rather than TSR
  1611.         bit 14: driver is newer integrated type
  1612.         bits 13,12: current cursor type
  1613.             00 software text cursor
  1614.             01 hardware text cursor
  1615.             1X graphics cursor
  1616.         bits 11-8: interrupt rate (see AX=001Ch)
  1617.         bits 7-0:  count of currently-active Mouse Display Drivers (MDD),
  1618.             the newer integrated driver type
  1619.     BX = cursor lock flag for OS/2 to prevent reentrancy problems
  1620.     CX = mouse code active flag (for OS/2)
  1621.     DX = mouse driver busy flag (for OS/2)
  1622. --------M-330026-----------------------------
  1623. INT 33 - MS MOUSE v6.26+ - GET MAXIMUM VIRTUAL COORDINATES
  1624.     AX = 0026h
  1625. Return: BX = mouse-disabled flag
  1626.     CX = maximum virtual X (for current video mode)
  1627.     DX = maximum virtual Y
  1628. SeeAlso: AX=0031h
  1629. --------M-330026-----------------------------
  1630. INT 33 - Genius Mouse 9.06 - ???
  1631.     AX = 0026h
  1632. Return: CX = 0204h if CX was 0105h on entry, else unchanged
  1633. --------M-330027-----------------------------
  1634. INT 33 - MS MOUSE v7.01+ - GET SCREEN/CURSOR MASKS AND MICKEY COUNTS
  1635.     AX = 0027h
  1636. Return: AX = screen-mask value (or hardware cursor scan-line start for v7.02+)
  1637.     BX = cursor-mask value (or hardware cursor scan-line stop for v7.02+)
  1638.     CX = horizontal mickeys moved since last call
  1639.     DX = vertical mickeys moved since last call
  1640. SeeAlso: AX=000Bh
  1641. --------M-330028-----------------------------
  1642. INT 33 - MS MOUSE v7.0+ - SET VIDEO MODE
  1643.     AX = 0028h
  1644.     CX = new video mode (call is NOP if 0000h)
  1645.     DH = Y font size (00h = default)
  1646.     DL = X font size (00h = default)
  1647. Return: CL = status (00h = successful)
  1648. Note:    DX is ignored unless the selected video mode supports font size control
  1649. SeeAlso: AX=0029h,INT 10/AH=00h
  1650. --------M-330029-----------------------------
  1651. INT 33 - MS MOUSE v7.0+ - ENUMERATE VIDEO MODES
  1652.     AX = 0029h
  1653.     CX = previous video mode
  1654.         0000h get first supported video mode
  1655.         other get next supported mode after mode CX
  1656. Return: CX = first/next video mode (0000h = no more video modes)
  1657.     DS:DX -> description of video mode or 0000h:0000h if none
  1658. Notes:    the enumerated video modes may be in any order and may repeat
  1659.     the description string (if available) is terminated by '$' followed by
  1660.       a NUL byte
  1661. SeeAlso: AX=0028h
  1662. --------M-33002A-----------------------------
  1663. INT 33 - MS MOUSE v7.02+ - GET CURSOR HOT SPOT
  1664.     AX = 002Ah
  1665. Return: AX = internal counter controlling cursor visibility
  1666.     BX = cursor hot spot column
  1667.     CX = cursor hot spot row
  1668.     DX = mouse type (00h none, 01h bus, 02h serial, 03h InPort, 04h IBM,
  1669.              05h Hewlett-Packard)
  1670. Note:    the hot spot location is relative to the upper left corner of the
  1671.       cursor block and may range from -128 to +127 both horizontally and
  1672.       vertically
  1673. SeeAlso: AX=0009h,AX=0012h,AX=0035h
  1674. --------M-33002B-----------------------------
  1675. INT 33 - MS MOUSE v7.0+ - LOAD ACCELERATION PROFILES
  1676.     AX = 002Bh
  1677.     BX = active acceleration profile
  1678.         0001h-0004h or FFFFh to restore default curves
  1679.     ES:SI -> buffer containing acceleration profile data (see below)
  1680. Return: AX = success flag
  1681. SeeAlso: AX=002Ch,AX=002Dh,AX=0033h
  1682.  
  1683. Format of acceleration profile data:
  1684. Offset    Size    Description
  1685.  00h    BYTE    length of acceleration profile 1
  1686.  01h    BYTE    length of acceleration profile 2
  1687.  02h    BYTE    length of acceleration profile 3
  1688.  03h    BYTE    length of acceleration profile 4
  1689.  04h 32 BYTEs    threshold speeds for acceleration profile 1
  1690.  24h 32 BYTEs    threshold speeds for acceleration profile 2
  1691.  44h 32 BYTEs    threshold speeds for acceleration profile 3
  1692.  64h 32 BYTEs    threshold speeds for acceleration profile 4
  1693.  84h 32 BYTEs    speedup factor for acceleration profile 1
  1694.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  1695.  A4h 32 BYTEs    speedup factor for acceleration profile 2
  1696.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  1697.  C4h 32 BYTEs    speedup factor for acceleration profile 3
  1698.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  1699.  E4h 32 BYTEs    speedup factor for acceleration profile 4
  1700.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  1701. 104h 16 BYTEs    name of acceleration profile 1 (blank-padded)
  1702. 114h 16 BYTEs    name of acceleration profile 2 (blank-padded)
  1703. 124h 16 BYTEs    name of acceleration profile 3 (blank-padded)
  1704. 134h 16 BYTEs    name of acceleration profile 4 (blank-padded)
  1705. Note:    unused bytes in the threshold speed fields are filled with 7Fh and
  1706.       unused bytes in the speedup factor fields are filled with 10h
  1707. --------M-33002C-----------------------------
  1708. INT 33 - MS MOUSE v7.0+ - GET ACCELERATION PROFILES
  1709.     AX = 002Ch
  1710. Return: AX = status (0000h success)
  1711.     BX = currently-active acceleration profile
  1712.     ES:SI -> acceleration profile data (see AX=002Bh)
  1713. SeeAlso: AX=002Bh,AX=002Dh,AX=0033h
  1714. --------M-33002D-----------------------------
  1715. INT 33 - MS MOUSE v7.0+ - SELECT ACCELERATION PROFILE
  1716.     AX = 002Dh
  1717.     BX = acceleration level
  1718.         0001h-0004h to set profile, or FFFFh to get current profile
  1719. Return: AX = status
  1720.         0000h successful
  1721.         ES:SI -> 16-byte blank-padded name of acceleration profile
  1722.         FFFEh invalid acceleration curve number
  1723.         ES:SI destroyed
  1724.     BX = active acceleration curve number
  1725. SeeAlso: AX=0013h,AX=002Bh,AX=002Ch,AX=002Eh
  1726. --------M-33002E-----------------------------
  1727. INT 33 - MS MOUSE v8.10+ - SET ACCELERATION PROFILE NAMES
  1728.     AX = 002Eh
  1729.     BL = flag (if nonzero, fill ES:SI buffer with default names on return)
  1730.     ES:SI -> 64-byte buffer for profile names (16 bytes per name)
  1731. Return: AX = status (0000h success)
  1732.     ES:SI buffer filled with default names if BL nonzero on entry
  1733. Note:    not supported by Logitech driver v6.10
  1734. SeeAlso: AX=002Ch,AX=002Dh,AX=012Eh,AX=022Eh
  1735. --------M-33002F-----------------------------
  1736. INT 33 - MS MOUSE v7.02+ - MOUSE HARDWARE RESET
  1737.     AX = 002Fh
  1738. Return: AX = status
  1739. Note:    invoked by mouse driver v8.20 on being called with INT 2F/AX=530Bh
  1740. SeeAlso: INT 2F/AH=53h
  1741. --------M-330030-----------------------------
  1742. INT 33 - MS MOUSE v7.04+ - GET/SET BallPoint INFORMATION
  1743.     AX = 0030h
  1744.     CX = command
  1745.         0000h get status of BallPoint device
  1746.         other set rotation angle and masks
  1747.         BX = rotation angle (-32768 to 32767 degrees)
  1748.         CH = primary button mask
  1749.         CL = secondary button mask
  1750. Return: AX = button status (FFFFh if no BallPoint)
  1751.         bit 5: button 1
  1752.         bit 4: button 2
  1753.         bit 3: button 3
  1754.         bit 2: button 4
  1755.         other: zero
  1756.     BX = rotation angle (0-360 degrees)
  1757.     CH = primary button mask
  1758.     CL = secondary button mask
  1759. --------M-330031-----------------------------
  1760. INT 33 - MS MOUSE v7.05+ - GET CURRENT MINIMUM/MAXIMUM VIRTUAL COORDINATES
  1761.     AX = 0031h
  1762. Return: AX = virtual X minimum
  1763.     BX = virtual Y minimum
  1764.     CX = virtual X maximum
  1765.     DX = virtual Y maximum
  1766. Note:    the minimum and maximum values are those set by AX=0007h and AX=0008h;
  1767.       the default is minimum = 0 and maximum = absolute maximum
  1768.       (see AX=0026h)
  1769. SeeAlso: AX=0007h,AX=0008h,AX=0010h,AX=0026h
  1770. --------M-330032-----------------------------
  1771. INT 33 - MS MOUSE v7.05+ - GET ACTIVE ADVANCED FUNCTIONS
  1772.     AX = 0032h
  1773. Return: AX = active function flags (FFFFh for v8.10)
  1774.         bit 15: function 0025h supported
  1775.         bit 14: function 0026h supported
  1776.         ...
  1777.         bit 0:    function 0034h supported
  1778.     BX = ??? (0000h) officially unused
  1779.     CX = ??? (E000h) officially unused
  1780.     DX = ??? (0000h) officially unused
  1781. --------M-330033-----------------------------
  1782. INT 33 - MS MOUSE v7.05+ - GET SWITCH SETTINGS AND ACCELERATION PROFILE DATA
  1783.     AX = 0033h
  1784.     CX = size of buffer
  1785.         0000h get required buffer size
  1786.         Return: AX = 0000h
  1787.             CX = required size (0154h for Logitech v6.10, 0159h
  1788.                 for MS v8.10-8.20)
  1789.         other
  1790.         ES:DX -> buffer of CX bytes
  1791.         Return: AX = 0000h
  1792.             CX = number of bytes returned
  1793.             ES:DX buffer filled (see below)
  1794. SeeAlso: AX=002Bh
  1795.  
  1796. Format of data buffer:
  1797. Offset    Size    Description
  1798.  00h    BYTE    mouse type
  1799.  01h    BYTE    current language
  1800.  02h    BYTE    horizontal sensitivity (00h-64h)
  1801.  03h    BYTE    vertical sensitivity (00h-64h)
  1802.  04h    BYTE    double-speed threshold (00h-64h)
  1803.  05h    BYTE    ballistic curve (01h-04h)
  1804.  06h    BYTE    interrupt rate (01h-04h)
  1805.  07h    BYTE    cursor override mask
  1806.  08h    BYTE    laptop adjustment
  1807.  09h    BYTE    memory type (00h-02h)
  1808.  0Ah    BYTE    SuperVGA support (00h,01h)
  1809.  0Bh    BYTE    rotation angle
  1810.  0Ch    BYTE    ???
  1811.  0Dh    BYTE    primary button (01h-04h)
  1812.  0Eh    BYTE    secondary button (01h-04h)
  1813.  0Fh    BYTE    click lock enabled (00h,01h)
  1814.  10h 324 BYTEs    acceleration profile data (see AX=002Bh)
  1815. 154h  5 BYTEs    ??? (Microsoft driver, but not Logitech)
  1816. --------M-330034-----------------------------
  1817. INT 33 - MS MOUSE v8.0+ - GET INITIALIZATION FILE
  1818.     AX = 0034h
  1819. Return: AX = status (0000h successful)
  1820.     ES:DX -> ASCIZ initialization (.INI) file name
  1821. --------M-330035-----------------------------
  1822. INT 33 - MS MOUSE v8.10+ - LCD SCREEN LARGE POINTER SUPPORT
  1823.     AX = 0035h
  1824.     BX = function
  1825.         FFFFh get current settings
  1826.         Return: AX = 0000h
  1827.             BH = style (see below)
  1828.             BL = size (see below)
  1829.             CH = threshold
  1830.             CL = active flag (00h disabled, 01h enabled)
  1831.             DX = delay
  1832.         other
  1833.         BH = style (00h normal, 01h reverse, 02h transparent)
  1834.         BL = size (00h small "1", 01h medium "1.5", 02h large "2")
  1835.         CH = threshold (00h-64h)
  1836.         CL = active flag (00h disable size change, 01h enable)
  1837.         DX = delay (0000h-0064h)
  1838.         Return: AX = 0000h
  1839. Note:    not supported by Logitech driver v6.10
  1840. SeeAlso: AX=0012h,AX=002Ah
  1841. --------M-330042-----------------------------
  1842. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  1843.     AX = 0042h
  1844. Return: AX = FFFFh successful
  1845.         BX = buffer size in bytes for functions 50h and 52h
  1846.        = 0000h MSMOUSE not installed
  1847.        = 0042h functions 42h, 50h, and 52h not supported
  1848. Note:    this function is also supported by the Genius Mouse 9.06 driver
  1849. SeeAlso: AX=0015h,AX=0050h,AX=0052h
  1850. --------M-330043-----------------------------
  1851. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CONFIGURE MOUSE???
  1852.     AX = 0043h
  1853.     CX:BX -> ??? buffer (see below)
  1854.     DL = ???
  1855. Return: ???
  1856. Notes:    also calls routines for INT 33/AX=0053h and INT 33/AX=004Fh
  1857.     this function is also supported by the Genius Mouse 9.06 driver
  1858.  
  1859. Format of buffer:
  1860. Offset    Size    Description
  1861.  00h    WORD    I/O port address
  1862.  02h    BYTE    ???
  1863.  03h    BYTE    interrupt number
  1864.  04h    BYTE    interrupt mask for interrupt controller
  1865.  05h  5 BYTEs    ???
  1866. --------M-330044CXCDEF-----------------------
  1867. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ???
  1868.     AX = 0044h
  1869.     CX = CDEFh
  1870. Return: AX = new state of ???
  1871. Note:    this function is also supported by the Genius Mouse 9.06 driver
  1872. SeeAlso: AX=0045h
  1873. --------M-330045CXCDEF-----------------------
  1874. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ???
  1875.     AX = 0045h
  1876.     CX = CDEFh
  1877. Return: AX = new state of ???
  1878. Note:    this function is also supported by the Genius Mouse 9.06 driver
  1879. SeeAlso: AX=0044h
  1880. --------M-330047-----------------------------
  1881. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET BUTTON ASSIGNMENTS
  1882.     AX = 0047h
  1883.     ES:BX -> button assignments (3 bytes, combinations of "L", "M", "R")
  1884. Return: ???
  1885. Note:    also supported by Genius Mouse 9.06 driver
  1886. SeeAlso: AX=0067h
  1887. --------M-330048BXCDEF-----------------------
  1888. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET ???
  1889.     AX = 0048h
  1890.     BX = CDEFh
  1891. Return: CX = ???
  1892.     BH = ???
  1893.     BL = ??? (if 50h, driver is using PS/2 pointing device BIOS interface)
  1894. Note:    also supported by Genius Mouse 9.06 driver
  1895. --------M-33004B-----------------------------
  1896. INT 33 - Z-NIX MOUSE DRIVER v7.04d - INSTALLATION CHECK
  1897.     AX = 004Bh
  1898. Return: ES:DI -> signature/description string if installed
  1899. Note:    the signature string in v7.04d is
  1900.       "Z-NIX;BUS,AUX,Serial 3-byte and 5-byte Mouse Driver;ZMOUSE;v7.04d"
  1901. --------M-33004CBXCDEF-----------------------
  1902. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ??? FLAG
  1903.     AX = 004Ch
  1904.     BX = CDEFh
  1905. Note:    also supported by Genius Mouse 9.06
  1906. SeeAlso: AX=006Ch
  1907. --------M-33004D-----------------------------
  1908. INT 33 - MS MOUSE - RETURN POINTER TO COPYRIGHT STRING
  1909.     AX = 004Dh
  1910. Return: ES:DI -> copyright message "*** This is Copyright 1983 Microsoft"
  1911. Notes:    also supported by Logitech, Kraft, Genius Mouse, and Mouse Systems
  1912.       mouse drivers
  1913.     in the Genius Mouse 9.06 driver, the ASCIZ signature "KYE" immediately
  1914.       follows the above copyright message (KYE Corp. manufactures the
  1915.       driver)
  1916. SeeAlso: AX=0024h,AX=006Dh
  1917. --------M-33004F-----------------------------
  1918. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ENABLE MOUSE
  1919.     AX = 004Fh
  1920. Return: nothing
  1921. Note:    also supported by Genius Mouse 9.06
  1922. SeeAlso: AX=0043h,AX=0053h
  1923. --------M-330050-----------------------------
  1924. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  1925.     AX = 0050h
  1926.     BX = buffer size (ignored by some driver versions)
  1927.     ES:DX -> buffer
  1928. Return: AX = FFFFh if successful
  1929. Notes:    the buffer must be large enough to hold the entire state, or following
  1930.       data will be overwritten by state data in versions which ignore BX;
  1931.       use INT 33/AX=0042h to get the required size
  1932.     this function is also supported by the Genius Mouse 9.06 driver
  1933. SeeAlso: AX=0042h,AX=0052h
  1934. --------M-330052-----------------------------
  1935. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  1936.     AX = 0052h
  1937.     BX = buffer size (ignored by some driver versions)
  1938.     ES:DX -> buffer
  1939. Return: AX = FFFFh if successful
  1940. Note:    also supported by Genius Mouse 9.06 driver
  1941. SeeAlso: AX=0050h
  1942. --------M-330053-----------------------------
  1943. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - DISABLE MOUSE
  1944.     AX = 0053h
  1945. Return: nothing
  1946. Note:    also supported by Genius Mouse 9.06
  1947. SeeAlso: AX=0043h,AX=004Fh
  1948. --------M-330054CXCDEF-----------------------
  1949. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SELECT ULTRARES ACCELERATION LEVEL
  1950.     AX = 0054h
  1951.     CX = CDEFh
  1952.     BX = ??? (NOP if <= 0000h)
  1953. Return: ???
  1954. Note:    this function is also supported by the Genius Mouse 9.06 driver
  1955. SeeAlso: AX=005Ah
  1956. --------M-330055-----------------------------
  1957. INT 33 - Kraft Mouse - GET ???
  1958.     AX = 0055h
  1959. Return: CX = ???
  1960.     DX = ???
  1961.     ES = ???
  1962. --------M-330058-----------------------------
  1963. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  1964.     AX = 0058h
  1965. Return: AX = CS of driver
  1966.     CX:BX = original INT 33 vector
  1967.     DX = ???
  1968. Note:    this function is also supported by the Genius Mouse 9.06 driver
  1969. --------M-33005A-----------------------------
  1970. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ULTRARES ACCELERATIONS
  1971.     AX = 005Ah
  1972.     CX = number of WORDs to copy (max 0014h, but not range-checked)
  1973.     DX:SI -> buffer containing thresholds??? (CX words)
  1974.     DX:BX -> buffer containing acceleration values???
  1975.         (9*14h words, only first CX of each 14h used)
  1976.     ???
  1977. Return: CF clear
  1978.     ???
  1979. Note:    this function is also supported by Genius Mouse 9.06
  1980. SeeAlso: AX=0054h
  1981. --------M-330061BXCDEF-----------------------
  1982. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  1983.     AX = 0061h
  1984.     BX = CDEFh
  1985. Return: CX = ???
  1986. Note:    also supported by Genius Mouse 9.06
  1987. --------M-330067-----------------------------
  1988. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET MOUSE BUTTONS???
  1989.     AX = 0067h
  1990. Return: BL = number of buttons???
  1991. Note:    also supported by Genius Mouse 9.06
  1992. SeeAlso: AX=0047h
  1993. --------M-33006CBXCDEF-----------------------
  1994. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CLEAR ??? FLAG
  1995.     AX = 006Ch
  1996.     BX = CDEFh
  1997. Note:    also supported by Genius Mouse 9.06
  1998. SeeAlso: AX=004Ch
  1999. --------M-33006D-----------------------------
  2000. INT 33 - MS MOUSE - GET VERSION STRING
  2001.     AX = 006Dh
  2002. Return: ES:DI -> Microsoft version number of resident driver (see below)
  2003. Notes:    also supported by Logitech, Mouse Systems, Kraft, and Genius mouse
  2004.       drivers
  2005.     the Mouse Systems 7.01 and Genius Mouse 9.06 drivers report their
  2006.       Microsoft version as 7.00 even though they do not support any of the
  2007.       functions from 0025h through 002Dh supported by the MS 7.00 driver
  2008.       (the Genius Mouse driver supports function 0026h, but it differs
  2009.       from the Microsoft function)
  2010. SeeAlso: AX=0024h,AX=004Dh,AX=266Ch
  2011.  
  2012. Format of Microsoft version number:
  2013. Offset    Size    Description
  2014.  00h    BYTE    major version
  2015.  01h    BYTE    minor version (BCD)
  2016. --------M-330070BXABCD-----------------------
  2017. INT 33 - Mouse Systems MOUSE DRIVER - POPUP.COM - INSTALLATION CHECK
  2018.     AX = 0070h
  2019.     BX = ABCDh
  2020. Return: AX = ABCDh if installed
  2021.         BX:CX -> data structure (see below)
  2022. Notes:    this function is also supported by the Genius Mouse 9.06 driver
  2023.     the v7.01 POPUP.COM and menu drivers also check for the signature
  2024.       CDh ABh BAh DCh at offset -2Ch from the interrupt handler
  2025.     if POPUP is not loaded, the returned data structure contains the proper
  2026.       signature at offset 00h, but not at offset 08h
  2027.  
  2028. Format of data structure:
  2029. Offset    Size    Description
  2030.  00h    WORD    signature ABCDh
  2031.  02h    DWORD    pointer to info structure???
  2032.  06h  2 BYTEs    ???
  2033.  08h    WORD    signature ABCDh
  2034.  
  2035. Format of info structure:
  2036. Offset    Size    Description
  2037.  00h    WORD    driver version
  2038.  02h  8 BYTEs    ???
  2039.  0Ah    WORD    segment of ???
  2040.     ???
  2041. --------M-330072BXABCD-----------------------
  2042. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  2043.     AX = 0072h
  2044.     BX = ABCDh
  2045. Return: ???
  2046. Note:    this function is also supported by the Genius Mouse 9.06 driver
  2047. --------M-330073BXCDEF-----------------------
  2048. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET BUTTON ASSIGNMENTS
  2049.     AX = 0073h
  2050.     BX = CDEFh
  2051.     ES:DX -> 3-byte buffer for button assignments
  2052. Return: CX = number of buttons???
  2053.     ES:DX buffer filled (default is "LMR")
  2054. Note:    also supported by Genius Mouse 9.06
  2055. SeeAlso: AX=0067h
  2056. --------M-33012E-----------------------------
  2057. INT 33 - MS MOUSE v8.10+ - ???
  2058.     AX = 012Eh
  2059.     BL = ???
  2060. Return: AX = 0000h
  2061. Note:    not supported by Logitech driver v6.10
  2062. SeeAlso: AX=002Eh,AX=022Eh
  2063. --------M-33022E-----------------------------
  2064. INT 33 - MS MOUSE v8.10+ - ???
  2065.     AX = 022Eh
  2066.     BL = ???
  2067. Return: AX = 0000h
  2068. Note:    not supported by Logitech driver v6.10
  2069. SeeAlso: AX=002Eh,AX=012Eh
  2070. --------M-33136C-----------------------------
  2071. INT 33 - LOGITECH MOUSE v6.10+ - ???
  2072.     AX = 136Ch
  2073.     BX = ???
  2074. Return: AX = ???
  2075.     BX = ???
  2076. --------M-33146C-----------------------------
  2077. INT 33 - LOGITECH MOUSE v6.10+ - GET/SET ???
  2078.     AX = 146Ch
  2079.     BL = function
  2080.         00h set ???
  2081.         BH = new value (zero/nonzero to clear/set)
  2082.         else get ???
  2083.         Return: ???
  2084. --------M-33156C-----------------------------
  2085. INT 33 - LOGITECH MOUSE v6.10+ - GET SIGNATURE AND VERSION STRINGS
  2086.     AX = 156Ch
  2087. Return: ES:DI -> signature "LOGITECH MOUSE DRIVER"
  2088.     ES:SI -> version string, terminated with CRLF
  2089. --------M-33166C-----------------------------
  2090. INT 33 - LOGITECH MOUSE v6.10+ - ???
  2091.     AX = 166Ch
  2092.     BL = ???
  2093.         00h ???
  2094.         01h ???
  2095.         other ???
  2096.         BH = new value of ???
  2097.         Return: AX = FFFFh
  2098. --------M-33176C-----------------------------
  2099. INT 33 - LOGITECH MOUSE v6.10+ - ???
  2100.     AX = 176Ch
  2101.     ???
  2102. Return: ???
  2103. --------M-33186C-----------------------------
  2104. INT 33 - LOGITECH MOUSE v6.10+ - ???
  2105.     AX = 186Ch
  2106.     ???
  2107. Return: ???
  2108. --------M-33196C-----------------------------
  2109. INT 33 - LOGITECH MOUSE v6.10+ - ???
  2110.     AX = 196Ch
  2111.     ???
  2112. Return: ???
  2113. --------M-331A6C-----------------------------
  2114. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  2115.     AX = 1A6Ch
  2116. Return: AX = FFFFh
  2117.     BX = ???
  2118.     CX = ???
  2119. SeeAlso: AX=1B6Ch
  2120. --------M-331B6C-----------------------------
  2121. INT 33 - LOGITECH MOUSE v6.10+ - SET ???
  2122.     AX = 1B6Ch
  2123.     BX = new value for ??? (0000h-0003h)
  2124. Return: AX = FFFFh
  2125. SeeAlso: AX=1A6Ch
  2126. --------M-331C6C-----------------------------
  2127. INT 33 - LOGITECH MOUSE v6.10+ - ???
  2128.     AX = 1C6Ch
  2129.     BX = ???
  2130.         <42h ???
  2131.         =42h ???
  2132.         >42h ???
  2133.             ES:DI -> ???
  2134.             Return: AX = ???
  2135. --------M-331D6C-----------------------------
  2136. INT 33 - LOGITECH MOUSE - GET COMPASS PARAMETER
  2137.     AX = 1D6Ch
  2138. Return: BX = direction (0=north, 1=south, 2=east, 3=west)
  2139. SeeAlso: AX=1E6Ch
  2140. --------M-331E6C-----------------------------
  2141. INT 33 - LOGITECH MOUSE - SET COMPASS PARAMETER
  2142.     AX = 1E6Ch
  2143.     BX = direction (0=north, 1=south, 2=east, 3=west)
  2144. SeeAlso: AX=1D6Ch
  2145. --------M-331F6C-----------------------------
  2146. INT 33 - LOGITECH MOUSE - GET BALLISTICS INFORMATION
  2147.     AX = 1F6Ch
  2148. Return: BX = 0=off, 1=on
  2149.     CX = 1=low, 2=high
  2150. SeeAlso: AX=002Ch,AX=236Ch
  2151. --------M-33206C-----------------------------
  2152. INT 33 - LOGITECH MOUSE - SET LEFT OR RIGHT PARAMETER
  2153.     AX = 206Ch
  2154.     BX = parameter (00h = right, FFh = left)
  2155. SeeAlso: AX=216Ch
  2156. --------M-33216C-----------------------------
  2157. INT 33 - LOGITECH MOUSE - GET LEFT OR RIGHT PARAMETER
  2158.     AX = 216Ch
  2159. Return: BX = parameter (00h = right, FFh = left)
  2160. SeeAlso: AX=206Ch
  2161. --------M-33226C-----------------------------
  2162. INT 33 - LOGITECH MOUSE - REMOVE DRIVER FROM MEMORY
  2163.     AX = 226Ch
  2164. Note:    this only frees memory; does not restore hooked interrupts
  2165. --------M-33236C-----------------------------
  2166. INT 33 - LOGITECH MOUSE - SET BALLISTICS INFORMATION
  2167.     AX = 236Ch
  2168.     BX = 0=off, 1=on
  2169.     CX = 1=low, 2=high
  2170. SeeAlso: AX=002Ch,AX=1F6Ch
  2171. --------M-33246C-----------------------------
  2172. INT 33 - LOGITECH MOUSE - GET PARAMETERS AND RESET SERIAL MOUSE
  2173.     AX = 246Ch
  2174.     ES:DX -> parameter table buffer (see below)
  2175. Return: AX = FFFFh if driver installed for serial mouse
  2176. SeeAlso: AX=0000h,AX=256Ch/BX=0000h,AX=256Ch/BX=0001h,AX=256Ch/BX=0003h
  2177.  
  2178. Format of parameter table:
  2179. Offset    Size    Description
  2180.  00h    WORD    baud rate divided by 100  (serial mouse only)
  2181.  02h    WORD    emulation          (serial mouse only)
  2182.  04h    WORD    report rate          (serial mouse only)
  2183.  06h    WORD    firmware revision      (serial mouse only)
  2184.  08h    WORD    00h              (serial mouse only)
  2185.  0Ah    WORD    port              (serial mouse only)
  2186.  0Ch    WORD    physical buttons
  2187.  0Eh    WORD    logical buttons
  2188. --------M-33256CBX0000-----------------------
  2189. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET BAUD RATE (SERIAL MOUSE ONLY)
  2190.     AX = 256Ch
  2191.     BX = 0000h
  2192.     CX = rate (0=1200, 1=2400, 2=4800, 3=9600)
  2193. Return: AX = FFFFh if driver installed for serial mouse
  2194. SeeAlso: AX=246Ch,AX=256Ch/BX=0001h,AX=256Ch/BX=0002h,AX=276Ch
  2195. --------M-33256CBX0001-----------------------
  2196. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET EMULATION (SERIAL MOUSE ONLY)
  2197.     AX = 256Ch
  2198.     BX = 0001h
  2199.     CX = emulation
  2200.         00h 5 byte packed binary
  2201.         01h 3 byte packed binary
  2202.         02h hexadecimal
  2203.         03h relative bit pad
  2204.         04h not supported
  2205.         05h MM Series
  2206.         06h not supported
  2207.         07h Microsoft
  2208. Return: AX = FFFFh if driver installed for serial mouse
  2209. SeeAlso: AX=246Ch,AX=256Ch/BX=0000h,AX=256Ch/BX=0003h,AX=276Ch
  2210. --------M-33256CBX0002-----------------------
  2211. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET REPORT RATE (SERIAL MOUSE ONLY)
  2212.     AX = 256Ch
  2213.     BX = 0002h
  2214.     CX = rate (0=10, 1=20, 2=35, 3=50, 4=70, 5=100, 6=150)
  2215. Return: AX = FFFFh if driver installed for serial mouse
  2216. SeeAlso: AX=246Ch,AX=256Ch/BX=0001h,AX=256Ch/BX=0003h,AX=276Ch
  2217. --------M-33256CBX0003-----------------------
  2218. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET MOUSE PORT (SERIAL MOUSE ONLY)
  2219.     AX = 256Ch
  2220.     BX = 0003h
  2221.     CX = port (1, 2)
  2222. Return: AX = FFFFh if driver installed for serial mouse
  2223. SeeAlso: AX=246Ch,AX=256Ch/BX=0000h,AX=256Ch/BX=0004h,AX=276Ch
  2224. --------M-33256CBX0004-----------------------
  2225. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET MOUSE LOGICAL BUTTONS
  2226.     AX = 256Ch
  2227.     BX = 0004h
  2228.     CX = buttons (2, 3)
  2229. Return: AX = FFFFh if driver installed for serial mouse
  2230. SeeAlso: AX=246Ch,AX=276Ch
  2231. --------M-33266C-----------------------------
  2232. INT 33 - LOGITECH MOUSE - GET VERSION???
  2233.     AX = 266Ch
  2234. Return: BX = 'SS'
  2235.     CH = '4'  major version number
  2236.     CL = '1'  minor version number
  2237. SeeAlso: AX=006Dh
  2238. --------M-33276C-----------------------------
  2239. INT 33 - LOGITECH MOUSE - ??? Tries MMSeries, Baud 2400
  2240.     AX = 276Ch
  2241. SeeAlso: AX=256Ch
  2242. --------M-333000-----------------------------
  2243. INT 33 - Smooth Mouse Driver, PrecisePoint - INSTALLATION CHECK
  2244.     AX = 3000h
  2245. Return: AX = FFFFh if installed
  2246.         BX = version number (BH = major, BL = minor)
  2247. Program: SMD is a programmer's library by Andy Hakim which provides a
  2248.       graphics-style mouse cursor in text mode.  PrecisePoint is an
  2249.       SMD-based TSR which replaces the block mouse cursor in text
  2250.       applications.
  2251. SeeAlso: AX=0000h,AX=3001h,AX=3003h
  2252. --------M-333001-----------------------------
  2253. INT 33 - Smooth Mouse Driver, PrecisePoint - ENABLE SMOOTH MOUSE
  2254.     AX = 3001h
  2255. Return: AX = status (0000h = disabled, 0001h = enabled)
  2256. Note:    SMD remains disabled if running under Desqview or in graphics mode
  2257. SeeAlso: AX=0001h,AX=0002h,AX=3002h
  2258. --------M-333002-----------------------------
  2259. INT 33 - Smooth Mouse Driver, PrecisePoint - DISABLE SMOOTH MOUSE
  2260.     AX = 3002h
  2261. Return: AX = status (0000h = disabled, 0001h = enabled)
  2262. SeeAlso: AX=0001h,AX=0002h,AX=3000h,AX=3001h
  2263. --------M-333003-----------------------------
  2264. INT 33 - Smooth Mouse Driver, PrecisePoint - GET INFORMATION
  2265.     AX = 3003h
  2266.     BL = data structure selector
  2267.         00h Primary Bitmap (used for 25 line mode)
  2268.         01h Secondary Bitmap (used for 43/50 line modes)
  2269.         02h Sacrifice Character Map
  2270.         03h Program Information
  2271. Return: ES:DX -> selected data structure
  2272. SeeAlso: AX=3000h
  2273.  
  2274. Format of Primary/Secondary Bitmap [SMD_BITMAP_STRUCT]
  2275. Offset    Size    Description
  2276.  00h    BYTE    vertical size of bitmap (00h - 10h)
  2277.  01h    BYTE    horizontal size of bitmap (00h - 10h)
  2278.  02h    BYTE    vertical hotspot position (00h - 10h)
  2279.  03h    BYTE    horizontal hotspot position (00h - 10h)
  2280.  04h 16 WORDs    cursor bitmap data
  2281.  14h 16 WORDs    screen bitmap data
  2282.  
  2283. Format of Sacrifice Character Map [SMD_SMAP_STRUCT]
  2284. Offset    Size    Description
  2285.  00h    BYTE    bytes are character values (00h-FFh) used in place of the
  2286.  01h    BYTE    actual character for the corresponding position on the screen
  2287.  02h    BYTE         +--------------+      occupied by part or all of the mouse
  2288.  03h    BYTE         | 0h | 1h | 2h |      cursor
  2289.  04h    BYTE         |----+----+----|
  2290.  05h    BYTE         | 3h | 4h | 5h |
  2291.  06h    BYTE         |----+----+----|
  2292.  07h    BYTE         | 6h | 7h | 8h |
  2293.  08h    BYTE         +--------------+
  2294.  
  2295. Format of Program Information [SMD_INFO_STRUCT]
  2296. Offset    Size    Description
  2297.  00h    WORD    segment of old interrupt 33h handler
  2298.  02h    WORD    offset of old interrupt 33h handler
  2299.  04h    WORD    PSP of SMD
  2300.  06h    BYTE    ENABLE/DISABLE manual setting status
  2301.  07h    BYTE    ENABLE/DISABLE internal usage status
  2302. --------M-333004-----------------------------
  2303. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  2304.     AX = 3004h
  2305. SeeAlso: AX=3000h
  2306. --------M-333005-----------------------------
  2307. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  2308.     AX = 3005h
  2309. SeeAlso: AX=3000h
  2310. --------M-334F00-----------------------------
  2311. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  2312.     AX = 4F00h
  2313. Return: AX = 004Fh if supported
  2314.     BX = ???
  2315.     ES:DI -> ???
  2316. SeeAlso: AX=4F01h
  2317. --------M-334F01-----------------------------
  2318. INT 33 - LOGITECH MOUSE v6.10+ - ???
  2319.     AX = 4F01h
  2320.     ES = ???
  2321. Return: AX = 004Fh if supported
  2322.     ES:DI -> ???
  2323. SeeAlso: AX=4F00h
  2324. --------T-33FFE6-----------------------------
  2325. INT 33 - Switch-It v3.23 - GET ??? PROGRAM
  2326.     AX = FFE6h
  2327.     CX = length of buffer
  2328.     ES:DI -> buffer for program name
  2329. Return: ES:DI buffer filled
  2330. Program: Switch-It is a task switcher supporting up to 100 programs
  2331.       simultaneously by Better Software Technology, Inc.
  2332. --------T-33FFE7-----------------------------
  2333. INT 33 - Switch-It v3.23 - GET ???
  2334.     AX = FFE7h
  2335. Return: AX = ???
  2336. --------T-33FFE8-----------------------------
  2337. INT 33 - Switch-It v3.23 - ???
  2338.     AX = FFE8h
  2339.     CX = length of name including terminating NUL
  2340.     DS:SI -> ASCIZ program pathname
  2341. --------T-33FFE9-----------------------------
  2342. INT 33 - Switch-It v3.23 - SET ???
  2343.     AX = FFE9h
  2344.     BX = ???
  2345. --------T-33FFEA-----------------------------
  2346. INT 33 - Switch-It v3.23 - SET ???
  2347.     AX = FFEAh
  2348.     BL = ???
  2349. --------T-33FFEB-----------------------------
  2350. INT 33 - Switch-It v3.23 - SET ??? FLAG
  2351.     AX = FFEBh
  2352. --------T-33FFEC-----------------------------
  2353. INT 33 - Switch-It v3.23 - SET ???
  2354.     AX = FFECh
  2355.     BL = ???
  2356. --------T-33FFED-----------------------------
  2357. INT 33 - Switch-It v3.23 - GET ???
  2358.     AX = FFEDh
  2359. Return: AX = ??? (0001h)
  2360.     BX = ???
  2361. Program: Switch-It is a task switcher supporting up to 100 programs
  2362.       simultaneously by Better Software Technology, Inc.
  2363. --------T-33FFEE-----------------------------
  2364. INT 33 - Switch-It v3.23 - GET ???
  2365.     AX = FFEEh
  2366. Return: AX = ???
  2367. --------T-33FFEF-----------------------------
  2368. INT 33 - Switch-It v3.23 - GET ???
  2369.     AX = FFEFh
  2370. Return: BX:AX -> ???
  2371. --------T-33FFF0-----------------------------
  2372. INT 33 - Switch-It v3.23 - SET ???
  2373.     AX = FFF0h
  2374.     BL = ???
  2375. --------T-33FFF1-----------------------------
  2376. INT 33 - Switch-It v3.23 - GET CONFIGURATION FILE
  2377.     AX = FFF1h
  2378. Return: BX:AX -> ASCIZ pathname of configuration file
  2379. Program: Switch-It is a task switcher supporting up to 100 programs
  2380.       simultaneously by Better Software Technology, Inc.
  2381. --------T-33FFF2-----------------------------
  2382. INT 33 - Switch-It v3.23 - SET ??? FLAG
  2383.     AX = FFF2h
  2384. Return: AL = 01h
  2385. --------T-33FFF3-----------------------------
  2386. INT 33 - Switch-It v3.23 - GET ???
  2387.     AX = FFF3h
  2388. Return: AX = ???
  2389. --------T-33FFF4-----------------------------
  2390. INT 33 - Switch-It v3.23 - SET ???
  2391.     AX = FFF4h
  2392.     BX = ???
  2393.     CX = ???
  2394. --------T-33FFF5-----------------------------
  2395. INT 33 - Switch-It v3.23 - GET ???
  2396.     AX = FFF5h
  2397. Return: AX = ???
  2398. --------T-33FFF6-----------------------------
  2399. INT 33 - Switch-It v3.23 - GET ???
  2400.     AX = FFF6h
  2401. Return: AX = ???
  2402. --------T-33FFF7-----------------------------
  2403. INT 33 - Switch-It v3.23 - GET ???
  2404.     AX = FFF7h
  2405.     BX = index of ???
  2406. Return: AX = ???
  2407. --------T-33FFF8-----------------------------
  2408. INT 33 - Switch-It v3.23 - ???
  2409.     AX = FFF8h
  2410.     BX = ???
  2411.     CX = length of program name, including terminating NUL
  2412.     DS:SI -> ASCIZ program pathname
  2413. Return: ???
  2414. Program: Switch-It is a task switcher supporting up to 100 programs
  2415.       simultaneously by Better Software Technology, Inc.
  2416. --------T-33FFF9-----------------------------
  2417. INT 33 - Switch-It v3.23 - NOP
  2418.     AX = FFF9h
  2419. --------T-33FFFA-----------------------------
  2420. INT 33 - Switch-It v3.23 - SET ???
  2421.     AX = FFFAh
  2422.     BX = index of program
  2423. SeeAlso: AX=FFFBh,AX=FFFCh
  2424. --------T-33FFFB-----------------------------
  2425. INT 33 - Switch-It v3.23 - GET ???
  2426.     AX = FFFBh
  2427.     BX = index of program
  2428. Return: AX = ??? (0000h or 0001h)
  2429. SeeAlso: AX=FFFAh,AX=FFFCh
  2430. --------T-33FFFC-----------------------------
  2431. INT 33 - Switch-It v3.23 - CLEAR ???
  2432.     AX = FFFCh
  2433.     BX = index of program
  2434. SeeAlso: AX=FFFAh,AX=FFFCh
  2435. --------T-33FFFD-----------------------------
  2436. INT 33 - Switch-It v3.23 - GET MEMORY ADDRESSES???
  2437.     AX = FFFDh
  2438. Return: AX = first available segment???
  2439.     BX = paragraph of top of conventional memory
  2440.     DX = PSP segment of SI.EXE
  2441. --------T-33FFFE-----------------------------
  2442. INT 33 - Switch-It v3.23 - INSTALLATION CHECK
  2443.     AX = FFFEh
  2444. Return: BX = ???
  2445.     DX = 5349h ("SI")
  2446. --------T-33FFFF-----------------------------
  2447. INT 33 - Switch-It v3.23 - ???
  2448.     AX = FFFFh
  2449.     BX = ???
  2450. Program: Switch-It is a task switcher supporting up to 100 programs
  2451.       simultaneously by Better Software Technology, Inc.
  2452. --------r-34---------------------------------
  2453. INT 34 - FLOATING POINT EMULATION - OPCODE D8h
  2454. Desc:    this interrupt is used to emulate floating-point instructions with
  2455.       an opcode of D8h
  2456. Note:    the floating-point emulators in Borland and Microsoft languages and
  2457.       Lahey FORTRAN use this interrupt
  2458. SeeAlso: INT 35,INT 3E
  2459. --------r-35---------------------------------
  2460. INT 35 - FLOATING POINT EMULATION - OPCODE D9h
  2461. Desc:    this interrupt is used to emulate floating-point instructions with
  2462.       an opcode of D9h
  2463. Note:    the floating-point emulators in Borland and Microsoft languages and
  2464.       Lahey FORTRAN use this interrupt
  2465. SeeAlso: INT 34,INT 36
  2466. --------r-36---------------------------------
  2467. INT 36 - FLOATING POINT EMULATION - OPCODE DAh
  2468. Desc:    this interrupt is used to emulate floating-point instructions with
  2469.       an opcode of DAh
  2470. Note:    the floating-point emulators in Borland and Microsoft languages and
  2471.       Lahey FORTRAN use this interrupt
  2472. SeeAlso: INT 35,INT 37
  2473. --------r-37---------------------------------
  2474. INT 37 - FLOATING POINT EMULATION - OPCODE DBh
  2475. Desc:    this interrupt is used to emulate floating-point instructions with
  2476.       an opcode of DBh
  2477. Note:    the floating-point emulators in Borland and Microsoft languages and
  2478.       Lahey FORTRAN use this interrupt
  2479. SeeAlso: INT 36,INT 38
  2480. --------r-38---------------------------------
  2481. INT 38 - FLOATING POINT EMULATION - OPCODE DCh
  2482. Desc:    this interrupt is used to emulate floating-point instructions with
  2483.       an opcode of DCh
  2484. Note:    the floating-point emulators in Borland and Microsoft languages and
  2485.       Lahey FORTRAN use this interrupt
  2486. SeeAlso: INT 37,INT 39
  2487. --------O-38---------------------------------
  2488. INT 38 - PC-MOS/386 v3.0 - API
  2489. Note:    this API was been moved to INT D4h sometime between versions 3.0 and
  2490.       5.01; v3.0 supported at least functions 02h,04h,0703h,10h,11h, and
  2491.       12h
  2492. SeeAlso: INT D4/AH=02h,INT D4/AH=04h,INT D4/AH=07h,INT D4/AH=10h,INT D4/AH=11h
  2493. --------r-39---------------------------------
  2494. INT 39 - FLOATING POINT EMULATION - OPCODE DDh
  2495. Desc:    this interrupt is used to emulate floating-point instructions with
  2496.       an opcode of DDh
  2497. Note:    the floating-point emulators in Borland and Microsoft languages and
  2498.       Lahey FORTRAN use this interrupt
  2499. SeeAlso: INT 38,INT 3A
  2500. --------r-3A---------------------------------
  2501. INT 3A - FLOATING POINT EMULATION - OPCODE DEh
  2502. Desc:    this interrupt is used to emulate floating-point instructions with
  2503.       an opcode of DEh
  2504. Note:    the floating-point emulators in Borland and Microsoft languages and
  2505.       Lahey FORTRAN use this interrupt
  2506. SeeAlso: INT 39,INT 3B
  2507. --------r-3B---------------------------------
  2508. INT 3B - FLOATING POINT EMULATION - OPCODE DFh
  2509. Desc:    this interrupt is used to emulate floating-point instructions with
  2510.       an opcode of DFh
  2511. Note:    the floating-point emulators in Borland and Microsoft languages and
  2512.       Lahey FORTRAN use this interrupt
  2513. SeeAlso: INT 3A,INT 3C
  2514. --------r-3C---------------------------------
  2515. INT 3C - FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE
  2516. Notes:    the floating-point emulators in Borland and Microsoft languages and
  2517.       Lahey FORTRAN use this interrupt
  2518.     the generated code is  CD 3C xy mm ....
  2519.       where xy is a modified ESC instruction and mm is the modR/M byte.
  2520.       The xy byte appears to be encoded as
  2521.         s s 0 1 1 x x x      or    s s 0 0 0 x x x
  2522.       where "ss" specifies the segment override:
  2523.         00 -> DS:
  2524.         01 -> SS:
  2525.         10 -> CS:
  2526.         11 -> ES:
  2527. SeeAlso: INT 3B,INT 3D
  2528. --------r-3D---------------------------------
  2529. INT 3D - FLOATING POINT EMULATION - STANDALONE FWAIT
  2530. Notes:    the floating-point emulators in Borland and Microsoft languages and
  2531.       Lahey FORTRAN use this interrupt
  2532.     this vector is modified but not restored by Direct Access v4.0, and
  2533.       may be left dangling by other programs written with the same version
  2534.       of compiled BASIC
  2535. SeeAlso: INT 3C,INT 3E
  2536. --------r-3E---------------------------------
  2537. INT 3E - FLOATING POINT EMULATION - Borland LANGUAGES "SHORTCUT" CALL
  2538. Notes:    the two bytes following the INT 3E instruction are the subcode and
  2539.       a NOP (90h), except for subcodes DCh and DEh, where the second byte
  2540.       is a register count (01h-08h)
  2541.     this vector is modified but not restored by Direct Access v4.0, and
  2542.       may be left dangling by other programs written with the same version
  2543.       of compiled BASIC
  2544. SeeAlso: INT 3D
  2545.  
  2546. Values for subcode:
  2547. Subcode        Function
  2548.  DCh    load 8086 stack with 8087 registers; overwrites the 10*N bytes at the
  2549.       top of the stack prior to the INT 3E with the 8087 register contents
  2550.  DEh    load 8087 registers from top of 8086 stack; ST0 is furthest from top
  2551.       of 8086 stack
  2552.  E0h    round TOS and R1 to single precision, compare, pop twice
  2553.       returns AX=8087 status word, FLAGS=8087 condition bits
  2554.  E2h    round TOS and R1 to double precision, compare, pop twice
  2555.       returns AX=8087 status word, FLAGS=8087 condition bits
  2556.     Note: buggy in TPas5.5, because it sets the 8087 precision control
  2557.       field to the undocumented value 01h; this results in actually
  2558.       rounding to single precision
  2559.  E4h    compare TOS/R1 with two POP's
  2560.       returns FLAGS=8087 condition bits
  2561.  E6h    compare TOS/R1 with POP
  2562.       returns FLAGS=8087 condition bits
  2563.  E8h    FTST (check TOS value)
  2564.       returns FLAGS=8087 condition bits
  2565.  EAh    FXAM (check TOS value)
  2566.       returns AX=8087 status word
  2567.  ECh    sine(ST0)
  2568.  EEh    cosine(ST0)
  2569.  F0h    tangent(ST0)
  2570.  F2h    arctangent(ST0)
  2571.  F4h    ST0 = ln(ST0)
  2572.  F6h    ST0 = log2(ST0)
  2573.  F8h    ST0 = log10(ST0)
  2574.  FAh    ST0 = e**ST0
  2575.  FCh    ST0 = 2**ST0
  2576.  FEh    ST0 = 10**ST0
  2577. --------r-3F---------------------------------
  2578. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE, Borland TLINK VROOMM)
  2579. Notes:    INT 3F is the default, and may be overridden while linking
  2580.     this vector is modified but not restored by Direct Access v4.0, and
  2581.       may be left dangling by other programs written with the same version
  2582.       of compiled BASIC
  2583. SeeAlso: INT FE"OVERLAY"
  2584. --------r-3F---------------------------------
  2585. INT 3F - Microsoft Dynamic Link Library manager
  2586. SeeAlso: INT 21/AH=4Bh
  2587. --------B-40---------------------------------
  2588. INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS
  2589. SeeAlso: INT 13,INT 47"SuperBIOS",INT 63
  2590. --------h-40---------------------------------
  2591. INT 40 - Z100 - Master 8259 - Parity error or S100 error
  2592. SeeAlso: INT 41"Z100",INT FF"Z100"
  2593. --------O-40---------------------------------
  2594. INT 40 - Acorn BBC Master 512 - "OSFIND" - OPEN FILE
  2595.     AL = operation
  2596.         00h close file
  2597.         40h open file for reading
  2598.         80h open file for writing
  2599.         C0h open file for random access
  2600.     DS:BX -> CR-terminated filename
  2601. Return: AL = file handle (00h if file closed or could not be opened)
  2602. Note:    the Acorn BBC Master 512 is an 80186-based add-on board for the
  2603.       6502-based Master 128 which uses the original CPU as an I/O processor
  2604. SeeAlso: INT 41"Acorn",INT 42"Acorn",INT 43"Acorn",INT 44"Acorn",INT 4C"Acorn"
  2605. --------B-41---------------------------------
  2606. INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE
  2607. Note:    the default parameter table array is located at F000h:E401h in 100%
  2608.       compatible BIOSes; the pointer may be overridden by the hard disk
  2609.       controller's BIOS to support drive formats unknown to the ROM BIOS
  2610. SeeAlso: INT 13/AH=09h,INT 1E,INT 46
  2611.  
  2612. Format of fixed disk parameters:
  2613. Offset    Size    Description
  2614.  00h    WORD    number of cylinders
  2615.  02h    BYTE    number of heads
  2616.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  2617.  05h    WORD    starting write precompensation cylinder number
  2618.  07h    BYTE    maximum ECC burst length (XT only)
  2619.  08h    BYTE    control byte
  2620.            bits 0-2: drive option (XT only, 0 for others)
  2621.            bit 3:    set if more than 8 heads (AT and later only)
  2622.            bit 4:    always 0
  2623.            bit 5:    set if manufacturer's defect map on max cylinder+1
  2624.                  (AT and later only)
  2625.            bit 6:    disable ECC retries
  2626.            bit 7:    disable access retries
  2627.  09h    BYTE    standard timeout (XT only, 0 for others)
  2628.  0Ah    BYTE    formatting timeout (XT and WD1002 only, 0 for others)
  2629.  0Bh    BYTE    timeout for checking drive (XT and WD1002 only, 0 for others)
  2630.  0Ch    WORD    cylinder number of landing zone (AT and later only)
  2631.  0Eh    BYTE    number of sectors per track (AT and later only)
  2632.  0Fh    BYTE    reserved
  2633. --------h-41---------------------------------
  2634. INT 41 - Z100 - Master 8259 - Processor Swap
  2635. SeeAlso: INT 40"Z100",INT 42"Z100"
  2636. --------O-41---------------------------------
  2637. INT 41 - Acorn BBC Master 512 - "OSGBPB" - MULTI-BYTE GET/PUT
  2638.     AL = function
  2639.         01h put bytes sequentially
  2640.         02h put bytes, ignoring sequential pointer
  2641.         03h get bytes sequentially
  2642.         04h get bytes, ignoring sequential pointer
  2643.         05h get media title and boot option
  2644.         06h get current device and directory
  2645.         07h get current library and device
  2646.         08h search directory
  2647.     DS:BX -> control block (see below)
  2648. Return: CF clear if successful
  2649.     CF set on error
  2650.     AL = 00h if operation attempted
  2651.     AL unchanged if unsupported function
  2652. SeeAlso: INT 40"Acorn",INT 42"Acorn",INT 43"Acorn"
  2653.  
  2654. Format of control block:
  2655. Offset    Size    Description
  2656.  00h    BYTE    file handle
  2657.  01h    DWORD    pointer to data in either I/O processor or Tube processor
  2658.  05h    DWORD    number of bytes to be transferred
  2659.  09h    DWORD    transfer address
  2660. --------G-4112-------------------------------
  2661. INT 41 P - MS Windows debugging kernel - "OutputDebugString"
  2662.     AH = 12h
  2663.     ???
  2664. Return: ???
  2665. SeeAlso: AH=50h
  2666. --------G-4150-------------------------------
  2667. INT 41 P - MS Windows debugging kernel - "DefineDebugSegment"
  2668.     AH = 50h
  2669.     ???
  2670. Return: ???
  2671. SeeAlso: AH=12h
  2672. --------V-42---------------------------------
  2673. INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA)
  2674. SeeAlso: INT 10
  2675. Note:    not used by PS/2 built-in VGA or XGA
  2676. --------h-42---------------------------------
  2677. INT 42 - Z100 - Master 8259 - Timer
  2678. SeeAlso: INT 41"Z100",INT 43"Z100"
  2679. --------b-42---------------------------------
  2680. INT 42 - Western Digital WD1002 SuperBIOS - INT 40 CASCADE
  2681. Note:    if the second WD1002 controller in the system finds INT 40 already in
  2682.       use, it uses this vector to cascade to the first controller's BIOS
  2683. SeeAlso: INT 40"DISKETTE",INT 47"SuperBIOS"
  2684. --------O-42---------------------------------
  2685. INT 42 - Acorn BBS Master 512 - "OSBPUT" - WRITE SINGLE BYTE TO FILE
  2686.     AL = byte to be written
  2687.     BH = file handle
  2688. Return: flags destroyed
  2689. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  2690. --------V-43---------------------------------
  2691. INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA)
  2692.    points at graphics data for characters 00h-7Fh of the current font
  2693. SeeAlso: INT 1F,INT 44"VIDEO"
  2694. --------h-43---------------------------------
  2695. INT 43 - Z100 - Master 8259 - Slave 8259 input
  2696. Note:    slave runs in special fully nested mode
  2697. SeeAlso: INT 42"Z100",INT 44"Z100"
  2698. --------O-43---------------------------------
  2699. INT 43 - Acorn BBC Master 512 - "OSBGET" - READ SINGLE BYTE FROM FILE
  2700.     BH = file handle
  2701. Return: CF clear if successful
  2702.         AL = byte read from file
  2703.     CF set on error
  2704. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 42"Acorn",INT 46"Acorn"
  2705. --------V-44---------------------------------
  2706. INT 44 - VIDEO DATA - ROM BIOS CHARACTER FONT, CHARACTERS 00h-7Fh (PCjr)
  2707.    points at graphics data for current character font
  2708. SeeAlso: INT 1F,INT 43"VIDEO"
  2709. --------N-44---------------------------------
  2710. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  2711. --------I-44---------------------------------
  2712. INT 44 - IBM 3270-PC High Level Language API
  2713.     DS:SI -> parameter control block
  2714. --------h-44---------------------------------
  2715. INT 44 - Z100 - Master 8259 - Serial A
  2716. SeeAlso: INT 43"Z100",INT 45"Z100"
  2717. --------v-44---------------------------------
  2718. INT 44 - VIRUS - "Lehigh" - ORIGINAL INT 21h VECTOR
  2719. SeeAlso: INT 32"VIRUS",INT 60"VIRUS",INT 70"VIRUS",INT 9E"VIRUS"
  2720. --------O-4400-------------------------------
  2721. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  2722.     AH = 00h
  2723.     AL = function
  2724.         00h get current filing system
  2725.         Return: AL = filing system (see below)
  2726.         01h get address of commandline tail
  2727.         Return: BX buffer filled with address of command tail in I/O
  2728.                 processor address space (use INT 4A/AL=05h to
  2729.                 retrieve)
  2730.         FFh flush all files onto secondary storage
  2731.     BX -> 4-byte data buffer
  2732. Note:    the commandline tail is terminated with a carriage return (0Dh)
  2733. SeeAlso: INT 40"Acorn",INT 45"Acorn"
  2734.  
  2735. Values for filing system:
  2736.  00h    none
  2737.  01h    1200 bps cassette
  2738.  02h    300 bps cassette
  2739.  03h    ROM FS
  2740.  04h    DFS
  2741.  05h    ANFS/NFS
  2742.  06h    TFS
  2743.  08h    ADFS
  2744. --------O-44---------------------------------
  2745. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  2746.     AH = nonzero file handle
  2747.         AL = function
  2748.         00h get sequential pointer for file
  2749.         01h set sequential pointer for file
  2750.         02h get length of file
  2751.     BX -> 4-byte data buffer
  2752. Return: BX buffer updated if appropriate
  2753. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44/AH=00h,INT 45"Acorn",INT 4A"Acorn"
  2754. --------h-45---------------------------------
  2755. INT 45 - Z100 - Master 8259 - Serial B
  2756. SeeAlso: INT 44"Z100",INT 46"Z100"
  2757. --------O-45---------------------------------
  2758. INT 45 - Acorn BBC Master 512 - "OSFILE" - READ/WRITE FILE OR DIRECTORY INFO
  2759.     AL = function
  2760.         00h save block of memory as file
  2761.         01h update directory entry for existing file
  2762.         02h set load address for existing file
  2763.         03h set execution address for existing file
  2764.         04h set attributes for existing file
  2765.         05h read directory
  2766.         06h delete file
  2767.         FFh load file
  2768.     DS:BX -> control block (see below)
  2769. Return: FLAGS destroyed
  2770.     AL = file type
  2771.         00h not found
  2772.         01h file found
  2773.         02h directory found
  2774.         FFh protected file
  2775. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44"Acorn",INT 46"Acorn"
  2776.  
  2777. Format of control block:
  2778. Offset    Size    Description
  2779.  00h    WORD    address of CR-terminated filename
  2780.  02h    DWORD    load address of file
  2781.  06h    DWORD    execution address of file
  2782.  0Ah    DWORD    start address of data to save
  2783.  0Eh    DWORD    end address of data to save, or file attributes
  2784.         file attributes in low byte (see below)
  2785.         other three bytes are filing-system specific file attributes
  2786.  
  2787. Bitfields for file attributes:
  2788.  bit 0    no owner read access
  2789.  bit 1    no owner write access
  2790.  bit 2    not executable by owner
  2791.  bit 3    not deletable by owner
  2792.  bit 4    no public read access
  2793.  bit 5    no public write access
  2794.  bit 6    not executable with public access
  2795.  bit 7    not deletable with public access
  2796. --------B-46---------------------------------
  2797. INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE
  2798. SeeAlso: INT 13/AH=09h,INT 41
  2799. --------h-46---------------------------------
  2800. INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen
  2801. SeeAlso: INT 45"Z100",INT 47"Z100"
  2802. --------O-46---------------------------------
  2803. INT 46 - Acorn BBC Master 512 - "OSRDCH" - GET CHARACTER FROM CUR INPUT STREAM
  2804. Return: CF clear if successful
  2805.         AL = character read
  2806.     CF set on error
  2807.         AL = error code
  2808. SeeAlso: INT 40"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  2809. --------h-47---------------------------------
  2810. INT 47 - Z100 - Master 8259 - Printer
  2811. SeeAlso: INT 46"Z100",INT 48"Z100"
  2812. --------O-47---------------------------------
  2813. INT 47 - Acorn BBC Master 512 - "OSWRCH" - WRITE CHARACTER TO CUR OUTPUT STREAM
  2814.     AL = character to be written
  2815. Return: FLAGS destroyed
  2816. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 49"Acorn"
  2817. --------b-47---------------------------------
  2818. INT 47 - Western Digital WD1002-27X SuperBIOS - INT 40 CASCADE
  2819. Desc:    used by the second WD1002-27X controller to cascade to the first
  2820.       controller's INT 40
  2821. SeeAlso: INT 40"DISKETTE",INT 42"SuperBIOS",INT 48"SuperBIOS"
  2822. ----------478000-----------------------------
  2823. INT 47 - SQL Base - DATABASE ENGINE API
  2824.     AX = 8000h
  2825.     DS:BX -> parameter block, first word is function number
  2826. Program: SQL Base is a network-oriented database engine by Gupta Technologies
  2827. SeeAlso: AX=8001h
  2828.  
  2829. Values for function number:
  2830.  01h    "SQLFINI" initalialize application's use of the database
  2831.  02h    "SQLFDON" application is done using the database
  2832.  03h    "SQLFCON" connect to a cursor/database
  2833.  04h    "SQLFDIS" disconnect from a cursor/database
  2834.  05h    "SQLFCOM" compile a SQL command
  2835.  06h    "SQLFEXE" execute a SQL command
  2836.  07h    "SQLFCEX" compile and execute a SQL command
  2837.  08h    "SQLFCMT" commit a transaction to the database
  2838.  09h    "SQLFDES" describe the items of a SELECT statement
  2839.  0Ah    "SQLFGFI" get fetch information
  2840.  0Bh    "SQLFFBK" fetch previous result row from SELECT statement
  2841.  0Ch    "SQLFFET" fetch next result row from SELECT statement
  2842.  0Dh    "SQLFEFB" enable fetch backwards
  2843.  0Eh    "SQLFPRS" position in result set
  2844.  0Fh    "SQLFURS" undo result set
  2845.  10h    "SQLFNBV" get number of bind variables
  2846.  11h    "SQLFBND" bind data variables
  2847.  12h    "SQLFBNN" bind numerics
  2848.  13h    "SQLFBLN" bind long number
  2849.  14h    "SQLFBLD" bind long data variables
  2850.  15h    "SQLFSRS" start restriction set processing
  2851.  16h    "SQLFRRS" restart restriction set processing
  2852.  17h    "SQLFCRS" close restriction set
  2853.  18h    "SQLFDRS" drop restriction set
  2854.  19h    "SQLFARF" apply Roll Forward journal
  2855.  1Ah    "SQLFERF" end Roll Forward journal
  2856.  1Bh    "SQLFSRF" start Roll Forward journal
  2857.  1Ch    "SQLFSTO" store a compiled SQL command
  2858.  1Dh    "SQLFRET" retrieve a compiled SQL command
  2859.  1Eh    "SQLFDST" drop a stored command
  2860.  1Fh    "SQLFCTY" get command type
  2861.  20h    "SQLFEPO" get error position
  2862.  21h    "SQLFGNR" get number of rows
  2863.  22h    "SQLFNSI" get number of select items
  2864.  23h    "SQLFRBF" get Roll Back flag
  2865.  24h    "SQLFRCD" get return code
  2866.  25h    "SQLFROW" get number of ROWs
  2867.  26h    "SQLFSCN" set cursor name
  2868.  27h    "SQLFSIL" set isolation level
  2869.  28h    "SQLFSLP" set log parameters
  2870.  29h    "SQLFSSB" set select buffer
  2871.  2Ah    "SQLFSSS" set sort space
  2872.  2Bh    "SQLFRLO" read long
  2873.  2Ch    "SQLFWLO" write long
  2874.  2Dh    "SQLFLSK" long seek
  2875.  2Eh    "SQLFGLS" get long size
  2876.  2Fh    "SQLFELO" end long operation
  2877.  30h    "SQLFRBK" roll back a transaction from the database
  2878.  31h    "SQLFERR" error message
  2879.  32h    "SQLFCPY" copy
  2880.  33h    "SQLFR01" reserved
  2881.  34h    "SQLFSYS" system
  2882.  35h    "SQLFSTA" statistics
  2883.  36h    "SQLFR02" reserved
  2884.  37h    "SQLFXAD" extra add
  2885.  38h    "SQLFXCN" extra character to number
  2886.  39h    "SQLFXDA" extra date add
  2887.  3Ah    "SQLFXDP" extra date picture
  2888.  3Bh    "SQLFXDV" extra divide
  2889.  3Ch    "SQLFXML" extra multiply
  2890.  3Dh    "SQLFXNP" extra number picture
  2891.  3Eh    "SQLFXPD" extra picture date
  2892.  3Fh    "SQLFXSB" extra subtract
  2893.  40h    "SQLFINS" install database
  2894.  41h    "SQLFDIN" deinstall database
  2895.  42h    "SQLFDIR" directory of databases
  2896.  43h    "SQLFTIO" timeout
  2897.  44h    "SQLFFQN" get fully qualified column name
  2898.  45h    "SQLFEXP" explain execution plan
  2899.  46h    "SQLFFER" get full error
  2900.  47h    "SQLFBKP" begin online backup
  2901.  48h    "SQLFRDC" read backup data chunk
  2902.  49h    "SQLFEBK" end backup
  2903.  4Ah    "SQLFRES" begin restore from backup
  2904.  4Bh    "SQLFWDC" write backup data chunk for restore
  2905.  4Ch    "SQLFRRD" recover restored database to consistent state
  2906.  4Dh    "SQLFERS" end restore
  2907.  4Eh    "SQLFNRR" return number of result set rows
  2908.  4Fh    "SQLFSTR" start restriction mode
  2909.  50h    "SQLFSPR" stop restriction mode
  2910.  51h    "SQLFCNC" connect 2
  2911.  52h    "SQLFCNR" connect with no recovery
  2912.  53h    "SQLFOMS" set output message size
  2913.  54h    "SQLFIMS" set input message size
  2914.  55h    "SQLFSCP" set cache pages
  2915.  56h    "SQLFDSC" describe items of a SELECT statement (external)
  2916.  57h    "SQLFLAB" get label info for items in SELECT statement
  2917.  58h    "SQLFCBV" clear bind variables
  2918.  59h    "SQLFGET" get database information
  2919.  5Ah    "SQLFSET" set database information
  2920.  5Bh    "SQLFTEC" translate error code
  2921. ----------478001-----------------------------
  2922. INT 47 - SQL Base - GET VERSION NUMBER
  2923.     AX = 8001h
  2924. Return: ???
  2925. Program: SQL Base is a network-oriented database engine by Gupta Technologies
  2926. SeeAlso: AX=8000h
  2927. --------B-48---------------------------------
  2928. INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr)
  2929. SeeAlso: INT 49"PCjr"
  2930. --------h-48---------------------------------
  2931. INT 48 - Z100 - Slave 8259 - S100 vectored line 0
  2932. SeeAlso: INT 47"Z100",INT 49"Z100"
  2933. --------N-48---------------------------------
  2934. INT 48 - Watstar PC Network data pointer 1
  2935. SeeAlso: INT 49"Watstar"
  2936. --------O-48---------------------------------
  2937. INT 48 - Acorn BBC Master 512 - "OSNEWL" - SEND NEWLINE TO OUTPUT STREAM
  2938. Return: FLAGS destroyed
  2939. Note:    writes a carriage return (0Dh) followed by a linefeed (0Ah)
  2940. SeeAlso: INT 40"Acorn",INT 47"Acorn",INT 49"Acorn"
  2941. --------b-48---------------------------------
  2942. INT 48 - Western Digital WD1002-27X SuperBIOS - DRIVE DATA (NOT A VECTOR!)
  2943. Note:    the second WD1002-27X controller in a system uses the low byte to
  2944.       store the number of drives controlled by the second controller,
  2945.       and the high word for temporary storage during track recalculation;
  2946.       the first controller uses offsets 74h-77h in the BIOS data area
  2947.       (see MEMORY.LST) to store data
  2948. SeeAlso: INT 47"SuperBIOS"
  2949. ----------48---------------------------------
  2950. INT 48 U - Compaq UILIB.EXE - API
  2951.     AX = function (see below)
  2952.     BX = call type (0002h) (see AX=1A70h)
  2953.     ???
  2954. Return: ???
  2955. Note:    returns AX=FFFFh if 1000h<=AX<=2000h and AX is not one of the functions
  2956.       listed below
  2957. SeeAlso: AX=1A70h
  2958.  
  2959. Values for function:
  2960.  1000h    1160h    12D0h    1430h    1570h    1680h    17F0h    1920h    1A90h
  2961.  1010h    1170h    12E0h    1440h    1578h    1690h    1800h    1930h    1AA0h
  2962.  1020h    1180h    12F0h    1450h    1580h    16A0h    1810h    1940h
  2963.  1030h    1190h    1300h    1460h    1590h    16B0h    1820h    1950h
  2964.  1040h    11A0h    1310h    1470h    1594h    16C0h    1830h    1960h
  2965.  1050h    11B0h    1320h    1480h    1598h    16D0h    1840h    1970h
  2966.  1060h    11C0h    1330h    1490h    15A0h    16E0h    1848h    1980h
  2967.  1070h    11D0h    1340h    14A0h    15B0h    16F0h    1850h    1990h
  2968.  1080h    11E0h    1350h    14B0h    15C0h    1700h    1860h    19A0h
  2969.  1090h    11F0h    1360h    14B8h    15D0h    1710h    1870h    19B0h
  2970.  1095h    1200h    1370h    14BBh    15D4h    1720h    1878h    19C0h
  2971.  1098h    1210h    1380h    14C0h    15D8h    1730h    1880h    19D0h
  2972.  10A0h    1220h    1390h    14D0h    15E0h    1735h    1890h    19E0h
  2973.  10C0h    1230h    13A0h    14E0h    15F0h    1740h    1898h    19F0h
  2974.  10D0h    1240h    13B0h    14F0h    1600h    1750h    18A0h    1A00h
  2975.  10E0h    1250h    13B8h    1500h    1610h    1770h    18B0h    1A10h
  2976.  10F0h    1260h    13C0h    1508h    1620h    1780h    18C0h    1A20h
  2977.  1100h    1270h    13D0h    1510h    1630h    1790h    18D0h    1A30h
  2978.  1110h    1280h    13E0h    1520h    1640h    17A0h    18E0h    1A40h
  2979.  1120h    1290h    13F0h    1530h    1650h    17B0h    18F0h    1A50h
  2980.  1130h    12A0h    1400h    1540h    1660h    17C0h    1900h    1A60h
  2981.  1140h    12B0h    1410h    1550h    1664h    17D0h    1909h    1A70h
  2982.  1150h    12C0h    1420h    1560h    1670h    17E0h    1910h    1A80h
  2983. ----------481A70-----------------------------
  2984. INT 48 U - Compaq UILIB.EXE - INSTALLATION CHECK
  2985.     AX = 1A70h
  2986.     BX = call type (see below)
  2987. Return: CX = 5649h ('VI') if installed
  2988.     DX = 4557h ('EW') if installed
  2989.         AX = version??? (0106h)
  2990.  
  2991. Values for call type:
  2992.  0000h    near
  2993.  0001h    far
  2994.  0002h    INT (only valid call type when using INT 48)
  2995.  0003h    near
  2996. --------B-49---------------------------------
  2997. INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr)
  2998. SeeAlso: INT 48"PCjr"
  2999.  
  3000. Format of translation table:
  3001. Offset    Size    Description
  3002.  00h    BYTE    number of nonkeyboard scancodes in the table
  3003.  01h  N WORDs    high byte 00h (NUL) byte scancode with low order byte
  3004.         representing the scancode mapped values relative to their
  3005.         input values within the range of 56h through 7Eh
  3006. --------h-49---------------------------------
  3007. INT 49 - Z100 - Slave 8259 - S100 vectored line 1
  3008. SeeAlso: INT 48"Z100",INT 4A"Z100"
  3009. ----------49---------------------------------
  3010. INT 49 - Texas Instruments PC - VIDEO I/O???
  3011.     apparently provides direct video display on the TI Professional PC
  3012. --------N-49---------------------------------
  3013. INT 49 - Watstar PC Network data pointer 2
  3014. SeeAlso: INT 49"Watstar"
  3015. --------O-49---------------------------------
  3016. INT 49 - Acorn BBC Master 512 - "OSASCI" - WRITE CHARACTER TO CUR OUTPUT STREAM
  3017.     AL = character to be written
  3018. Return: FLAGS destroyed
  3019. Note:    converts carriage return (0Dh) into CRLF sequence (0Dh 0Ah)
  3020. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 47"Acorn",INT 48"Acorn"
  3021. --------a-490001-----------------------------
  3022. INT 49 - MAGic v1.16+ - TURN ON MAGNIFICATION
  3023.     AX = 0001h
  3024. Return: AX = status (see below)
  3025.     BX,CX,DX destroyed
  3026. Program: MAGic (MAGnification In Color) is a TSR by Microsystems Software, Inc.
  3027.       providing 2x2 text and graphics magnification on VGA, XGA, and SVGA
  3028. Note:    INT 49 is the default, but may be overridden on the commandline.  The
  3029.       actual interrupt in use may be found by searching for the signature
  3030.       "MAGic" or "xMAGic" (for the deluxe version) immediately preceding
  3031.       the interrupt handler (this is also the installation check).    MAGic
  3032.       uses CodeRunneR, which places the signature "RT" at offset 0000h in
  3033.       the interrupt handler's segment, followed by MAGic's TSR ID of
  3034.       "VMAG".
  3035. SeeAlso: AX=0002h,AX=0003h,AX=0004h,AX=0008h
  3036. Index:    installation check;MAGic
  3037.  
  3038. Values for status:
  3039.  0000h    cannot magnify current video mode
  3040.  0002h    magnified (text mode)
  3041.  0003h    magnified (graphics mode)
  3042.  FFFDh    function works only in magnified mode
  3043.  FFFFh    MAGic busy, retry later
  3044. --------a-490002-----------------------------
  3045. INT 49 - MAGic v1.16+ - TURN OFF MAGNIFICATION
  3046.     AX = 0002h
  3047. Return: AX = status (see AX=0001h)
  3048.     BX,CX,DX destroyed
  3049. SeeAlso: AX=0001h
  3050. --------a-490003-----------------------------
  3051. INT 49 - MAGic v1.16+ - SHIFT MAGNIFIED WINDOW TO INCLUDE SPECIFIED LOCATION
  3052.     AX = 0003h
  3053.     BX = vertical position (character row [text] or pixel row [graphics])
  3054.     DX = horizontal position (char column [text] or 8-pixel units [gr])
  3055. Return: AX = status
  3056.         0000h successful
  3057.         FFFFh MAGic busy, retry later
  3058.     BX,CX,DX destroyed
  3059. Note:    window is not moved if the position is inside the current window
  3060. SeeAlso: AX=0001h,AX=0004h,AX=0005h
  3061. --------a-490004-----------------------------
  3062. INT 49 - MAGic v1.16+ - REPOSITION MAGNIFIED WINDOW
  3063.     AX = 0004h
  3064.     BX = vertical position of upper left corner
  3065.     DX = horizontal position
  3066. Return: AX = status (see AX=0003h)
  3067.     BX,CX,DX destroyed
  3068. SeeAlso: AX=0001h,AX=0003h,AX=0005h
  3069. --------a-490005-----------------------------
  3070. INT 49 - MAGic v1.16+ - GET POSITION OF MAGNIFIED WINDOW
  3071.     AX = 0005h
  3072. Return: AX = status
  3073.         0000h successful
  3074.         BX = vertical position (char row or pixel row)
  3075.         DX = horizontal position (char column or 8-pixel units)
  3076.         FFFFh MAGic busy, retry later
  3077.         BX,DX destroyed
  3078.     CX destroyed
  3079. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0006h,AX=0007h
  3080. --------a-490006-----------------------------
  3081. INT 49 - MAGic v1.16+ - GET SIZE OF FULL SCREEN
  3082.     AX = 0006h
  3083. Return: AX = status
  3084.         0000h successful
  3085.         BX = vertical size (char rows or pixel rows)
  3086.         DX = horizontal size (char cols or 8-pixel units)
  3087.         FFFFh MAGic busy, retry later
  3088.         BX,DX destroyed
  3089.     CX destroyed
  3090. SeeAlso: AX=0001h,AX=0005h,AX=0007h
  3091. --------a-490007-----------------------------
  3092. INT 49 - MAGic v1.16+ - GET SIZE OF MAGNIFICATION WINDOW
  3093.     AX = 0007h
  3094. Return: AX = status
  3095.         0000h successful
  3096.         BX = vertical size (char rows or pixel rows)
  3097.         DX = horizontal size (char cols or 8-pixel units)
  3098.         FFFEh invalid function
  3099.         FFFFh MAGic busy, retry later
  3100.         BX,DX destroyed
  3101.     CX destroyed
  3102. BUG:    in v1.16 and v1.17, this function is not recognized as valid, but
  3103.       AX=0000h is accepted and will branch into hyperspace
  3104. SeeAlso: AX=0001h,AX=0006h
  3105. --------a-490008-----------------------------
  3106. INT 49 - MAGic v1.23+ - SET TEXT MODE MAGNIFICATION SIZE
  3107.     AX = 0008h
  3108.     BX = scaling factor (01h=1.4 times, 02h, 04h, 06h, 08h, 09h=12 times)
  3109. Return: AX = status
  3110.         0000h successful
  3111.         FFFBh scaling factor only available in MAGic Deluxe
  3112.         FFFCh already in magnified state, can't set size
  3113. Notes:    this call specifies the amount a subsequent call to AX=0001h should
  3114.       magnify the display
  3115.     scaling factors greater than 2 are only available in MAGic Deluxe
  3116. SeeAlso: AX=0001h
  3117. --------B-4A---------------------------------
  3118. INT 4A C - SYSTEM - USER ALARM HANDLER
  3119. Desc:    This interrupt is invoked by the BIOS when a real-time clock alarm
  3120.       occurs; an application may use it to perform an action at a
  3121.       predetermined time.
  3122. Note:    this interrupt is called from within a hardware interrupt handler,
  3123.       so all usual precautions against reentering DOS must be taken
  3124. SeeAlso: INT 1A/AH=06h
  3125. --------h-4A---------------------------------
  3126. INT 4A - Z100 - Slave 8259 - S100 vectored line 2
  3127. SeeAlso: INT 49"Z100",INT 4B"Z100"
  3128. --------O-4A---------------------------------
  3129. INT 4A - Acorn BBC Master 512 - "OSWORD" - MISC FUNCTIONS USING CONTROL BLOCK
  3130.     AL = function code
  3131.         FAh transfer data between 80186 and 65C12 I/O processor
  3132.     DS:BX -> control block (see below)
  3133. Return: FLAGS destroyed
  3134.     control block updated
  3135. Note:    there are more functions than are listed here, but details are not
  3136.       available
  3137. SeeAlso: INT 40"Acorn",INT 4B"Acorn",INT 4C"Acorn"
  3138.  
  3139. Format of control block for function FAh:
  3140. Offset    Size    Description
  3141.  00h    BYTE    number of parameters sent to I/O processor (0Dh,0Eh)
  3142.  01h    BYTE    number of parameters read from I/O processor (01h)
  3143.  02h    DWORD    I/O processor address
  3144.  06h    DWORD    80186 segment:offset address
  3145.  0Ah    WORD    number of bytes to transfer
  3146.  0Ch    BYTE    operation type
  3147.         00h write to 65C12 at 24 us/byte
  3148.         01h read from 65C12 at 24 us/byte
  3149.         02h write to 65C12 at 26 us/word
  3150.         03h read from 65C12 at 26 us/word
  3151.         04h write to 65C12 at 10 us/byte using 256-byte blocks
  3152.         05h read from 65C12 at 10 us/byte using 256-byte blocks
  3153.  0Dh    BYTE    65C12 memory access control (only used if offset 00h = 0Eh)
  3154.         bit 7: unused
  3155.         bit 6: always use main screen memory if I/O addr 3000h-7FFFh
  3156.             (overrides bit 5)
  3157.         bit 5: use shadow screen memory if screen address specified
  3158.         bit 4: use current ROM rather than ROM selected by bits 3-0
  3159.             (only if I/O address between 8000h and BFFFh)
  3160.         bits 3-0: paged ROM number
  3161. --------h-4B---------------------------------
  3162. INT 4B - Z100 - Slave 8259 - S100 vectored line 3
  3163. SeeAlso: INT 4A"Z100",INT 4C"Z100"
  3164. --------d-4B---------------------------------
  3165. INT 4B - Common Access Method SCSI interface (draft revision 1.9)
  3166.     ES:DI -> CAM Control Block (see INT 4F/AX=8100h)
  3167. Notes:    the CAM committee moved the interface to INT 4F after revision 1.9
  3168.       to avoid conflicting with the IBM SCSI interface and the Virtual
  3169.       DMA specification
  3170.     the installation check for the driver is the string "SCSI_CAM" eight
  3171.       bytes past the INT 4Bh handler
  3172.     it is not known whether any drivers actually implemented this
  3173.       interface on INT 4B instead of INT 4F
  3174. SeeAlso: INT 4F/AX=8100h
  3175. Index:    installation check;Common Access Method SCSI interface
  3176. --------O-4B---------------------------------
  3177. INT 4B - Acorn BBC Master 512 - "OSBYTE" - MISC FUNCTIONS USING REGISTER PARAMS
  3178.     AL = function code
  3179.     BL = first parameter
  3180.     BH = second parameter (if needed)
  3181. Return: BL = first return parameter
  3182.     BH = second return parameter
  3183.     CF depends on function
  3184. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4C"Acorn"
  3185. --------d-4B80-------------------------------
  3186. INT 4B - IBM SCSI interface
  3187.     AH = 80h
  3188.     details not yet available
  3189. --------d-4B8102DX0000-----------------------
  3190. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  3191.     AX = 8102h
  3192.     DX = 0000h
  3193. Return: CF clear if successful
  3194.         AH = major version number
  3195.         AL = minor version number
  3196.         BX = product number (see below)
  3197.         CX = product revision number
  3198.         always 0000h for QMAPS and HPMM.SYS
  3199.         always 0001h for Microsoft's EMM386.EXE v4.20-4.41
  3200.         SI:DI = maximum DMA buffer size
  3201.         DX = flags
  3202.         bit 0: PC/XT bus (DMA in first megabyte only)
  3203.         bit 1: physical buffer/remap region in first megabyte
  3204.         bit 2: automatic remap enabled
  3205.         bit 3: all memory is physically contiguous
  3206.         bits 4-15 reserved (zero)
  3207.     CF set on error
  3208.         AL = error code (see below)
  3209. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  3210.       apparently not always the case
  3211. SeeAlso: INT 2C/AX=002Bh,INT 31
  3212. Index:    installation check;Virtual DMA Spec
  3213.  
  3214. Values for product number:
  3215.  0000h    for Quadtel's QMAPS and Hewlett-Packard's HPMM.SYS
  3216.  0001h    for Microsoft's EMM386.EXE
  3217.  0003h    for Windows 3.x WIN386.EXE
  3218.  0EDCh    for DR-DOS 6.0 EMM386.SYS
  3219.  4560h    ("E`") for Qualitas' 386MAX
  3220.  4D43h    ("MC") for V Communication's Memory Commander
  3221.  5145h    ("QE") for Quarterdeck's QEMM-386
  3222.  524Dh    ("RM") for Helix's Netroom RM386
  3223.  
  3224. Values for error code:
  3225.  01h    region not in contiguous memory
  3226.  02h    region crossed a physical alignment boundary
  3227.  03h    unable to lock pages
  3228.  04h    no buffer available
  3229.  05h    region too large for buffer
  3230.  06h    buffer currently in use
  3231.  07h    invalid memory region
  3232.  08h    region was not locked
  3233.  09h    number of physical pages greater than table length
  3234.  0Ah    invalid buffer ID
  3235.  0Bh    copy out of buffer range
  3236.  0Ch    invalid DMA channel number
  3237.  0Dh    disable count overflow
  3238.  0Eh    disable count underflow
  3239.  0Fh    function not supported
  3240.  10h    reserved flag bits set in DX
  3241.  
  3242. Format of DMA descriptor structure (DDS):
  3243. Offset    Size    Description
  3244.  00h    DWORD    region size
  3245.  04h    DWORD    offset
  3246.  08h    WORD    segment/selector
  3247.  0Ah    WORD    buffer ID
  3248.  0Ch    DWORD    physical address
  3249.  
  3250. Format of Extended DMA descriptor structure (EDDS):
  3251. Offset    Size    Description
  3252.  00h    DWORD    region size
  3253.  04h    DWORD    offset
  3254.  08h    WORD    segment/selector
  3255.  0Ah    WORD    reserved
  3256.  0Ch    WORD    number available
  3257.  0Eh    WORD    number used
  3258.  10h    DWORD    region 0 physical address
  3259.  14h    DWORD    region 0 size in bytes
  3260.  18h    DWORD    region 1 physical address
  3261.  1Ch    DWORD    region 1 size in bytes
  3262.     ...
  3263.  
  3264. Format of Extended DMA descriptor structure (EDDS) with page table entries:
  3265. Offset    Size    Description
  3266.  00h    DWORD    region size
  3267.  04h    DWORD    offset
  3268.  08h    WORD    segment/selector
  3269.  0Ah    WORD    reserved
  3270.  0Ch    WORD    number available
  3271.  0Eh    WORD    number used
  3272.  10h    DWORD    page table entry 0 (same as 80386 page table entry)
  3273.  14h    DWORD    page table entry 1
  3274.     ...
  3275. Note:    bits 1-11 of the page table entries should be zero; bit 0 set if page
  3276.       is present and locked
  3277. --------d-4B8103-----------------------------
  3278. INT 4B - Virtual DMA Specification - LOCK DMA REGION
  3279.     AX = 8103h
  3280.     DX = flags (see below)
  3281.     ES:DI -> DMA descriptor structure (see AX=8102h)
  3282. Return: CF clear if successful
  3283.         DDS physical address field filled in
  3284.         DDS buffer ID field filled (0000h if no buffer allocated)
  3285.     CF set on error
  3286.         AL = error code (see AX=8102h)
  3287.         DDS region size field filled wth maximum contiguous length in bytes
  3288. BUGS:    Windows 3.0 does not correctly support automatic remapping or copying
  3289.       in enhanced mode
  3290.     Windows 3.0 in enhanced mode does not return a correct code on error
  3291. SeeAlso: AX=8104h,AX=8105h
  3292.  
  3293. Bitfields for flags:
  3294.  bit 0    reserved (zero)
  3295.  bit 1    data should be copied into buffer (ignored if bit 2 set)
  3296.  bit 2    buffer should not be allocated if region noncontiguous or crosses
  3297.     physical alignment boundary specified by bits 4-5
  3298.  bit 3    don't attempt automatic remap
  3299.  bit 4    region must not cross 64K physical alignment boundary
  3300.  bit 5    region must not cross 128K physical alignment boundary
  3301.  bits 6-15 reserved (zero)
  3302. --------d-4B8104-----------------------------
  3303. INT 4B - Virtual DMA Specification - UNLOCK DMA REGION
  3304.     AX = 8104h
  3305.     DX = flags
  3306.         bit 0: reserved (zero)
  3307.         bit 1: data should be copied out of buffer
  3308.         bits 2-15 reserved (zero)
  3309.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size,
  3310.         physical address, and buffer ID fields set
  3311. Return: CF clear if successful
  3312.         DDS physical address field set
  3313.         DDS buffer ID field set (0000h if no buffer allocated)
  3314.     CF set on error
  3315.         AL = error code (see AX=8102h)
  3316.         DDS region size field filled wth maximum contiguous length in bytes
  3317. Note:    Windows 3.0 does not check whether the region extends beyond the end of
  3318.       a segment
  3319. BUG:    Windows 3.0 in enhanced mode does not return a correct code on error
  3320. SeeAlso: AX=8103h,AX=8106h
  3321. --------d-4B8105-----------------------------
  3322. INT 4B - Virtual DMA Specification - SCATTER/GATHER LOCK REGION
  3323.     AX = 8105h
  3324.     DX = flags
  3325.         bits 0-5 reserved (zero)
  3326.         bit 6: EDDS should be returned with page table entries
  3327.         bit 7: only present pages should be locked (not-present pages
  3328.             receive entry of 0000h)
  3329.         bits 8-15 reserved (zero)
  3330.     ES:DI -> Extended DMA descriptor structure (see AX=8102h)
  3331.         region size, linear segment, linear offset, and number avail
  3332.         fields set
  3333. Return: CF clear if successful
  3334.         EDDS number used field set
  3335.         if DX bit 6 set, lower 12 bits of BX = offset in first page
  3336.     CF set on error
  3337.         AL = error code (see AX=8102h)
  3338.         EDDS region size field filled with max length in bytes that can be
  3339.         locked and described in the EDDS table
  3340. BUG:    Windows 3.0 in enhanced mode may return zero instead of the physical
  3341.       page address for pages which were originally not present
  3342. SeeAlso: AX=8103h,AX=8106h
  3343. --------d-4B8106-----------------------------
  3344. INT 4B - Virtual DMA Specification - SCATTER/GATHER UNLOCK REGION
  3345.     AX = 8106h
  3346.     DX = flags
  3347.         bits 0-5 reserved (zero)
  3348.         bit 6: EDDS contains page table entries
  3349.         bit 7: EDDS may contain not-present pages (entry = 0000h)
  3350.         bits 8-15 reserved (zero)
  3351.     ES:DI -> Extended DMA descriptor structure (see AX=8102h) returned
  3352.         by AX=8105h
  3353. Return: CF clear if successful
  3354.     CF set on error
  3355.         AL = error code (see AX=8102h)
  3356. Note:    according to the Microsoft version of the VDS specification, the
  3357.       actual scatter/gather list is ignored, while according to the IBM
  3358.       version of the specification, "the result of a LOCK operation"
  3359.       must be provided to this function
  3360. SeeAlso: AX=8104h,AX=8105h
  3361. --------d-4B8107-----------------------------
  3362. INT 4B - Virtual DMA Specification - REQUEST DMA BUFFER
  3363.     AX = 8107h
  3364.     DX = flags
  3365.         bit 0: reserved (zero)
  3366.         bit 1: data should be copied into buffer
  3367.         bits  2-15 reserved (zero)
  3368.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size set
  3369.         (also region offset and region segment if DX bit 1 set)
  3370. Return: CF clear if successful
  3371.         DDS physical address and buffer ID set
  3372.         DDS region size filled with length of buffer
  3373.     CF set on error
  3374.         AL = error code (see AX=8102h)
  3375. SeeAlso: AX=8108h
  3376. --------d-4B8108-----------------------------
  3377. INT 4B - Virtual DMA Specification - RELEASE DMA BUFFFER
  3378.     AX = 8108h
  3379.     DX = flags
  3380.         bit 0: reserved (zero)
  3381.         bit 1: data should be copied out of buffer
  3382.         bits 2-15 reserved (zero)
  3383.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID set
  3384.         (also region size/region offset/segment if DX bit 1 set)
  3385. Return: CF clear if successful
  3386.     CF set on error
  3387.         AL = error code (see AX=8102h)
  3388. BUG:    under Windows 3.0 Enhanced mode, you must specify that data be copied
  3389.       for this function to work correctly
  3390. SeeAlso: AX=8107h
  3391. --------d-4B8109DX0000-----------------------
  3392. INT 4B - Virtual DMA Specification - COPY INTO DMA BUFFER
  3393.     AX = 8109h
  3394.     DX = 0000h
  3395.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  3396.         region segment/offset, and region size fields set
  3397.     BX:CX = starting offset into DMA buffer
  3398. Return: CF clear if successful
  3399.     CF set on error
  3400.         AL = error code (see AX=8102h)
  3401. BUG:    Windows 3.0 Enhanced mode does not correctly interpret the copy count
  3402. SeeAlso: AX=810Ah
  3403. --------d-4B810ADX0000-----------------------
  3404. INT 4B - Virtual DMA Specification - COPY OUT OF DMA BUFFER
  3405.     AX = 810Ah
  3406.     DX = 0000h
  3407.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  3408.         region segment/offset, and region size fields set
  3409.     BX:CX = starting offset into DMA buffer
  3410. Return: CF clear if successful
  3411.     CF set on error
  3412.         AL = error code (see AX=8102h)
  3413. BUG:    Windows 3.0 Enhanced mode does not correctly interpret the copy count
  3414. SeeAlso: AX=8109h
  3415. --------d-4B810B-----------------------------
  3416. INT 4B - Virtual DMA Specification - DISABLE DMA TRANSLATION
  3417.     AX = 810Bh
  3418.     BX = DMA channel number
  3419.     DX = 0000h
  3420. Return: CF clear if successful
  3421.     CF set on error
  3422.         AL = error code (see AX=8102h)
  3423. SeeAlso: AX=810Ch
  3424. --------d-4B810C-----------------------------
  3425. INT 4B - Virtual DMA Specification - ENABLE DMA TRANSLATION
  3426.     AX = 810Ch
  3427.     BX = DMA channel number
  3428.     DX = 0000h
  3429. Return: CF clear if successful
  3430.         ZF set if disable count decremented to zero
  3431.     CF set on error
  3432.         AL = error code (see AX=8102h)
  3433. SeeAlso: AX=810Bh
  3434. --------Q-4B810D-----------------------------
  3435. INT 4B - QEMM-386 - BUG
  3436.     AX = 810Dh
  3437. Note:    the code in QEMM v5.11 and 6.00 jumps to an invalid location on this
  3438.       call
  3439. --------h-4C---------------------------------
  3440. INT 4C - Z100 - Slave 8259 - S100 vectored line 4
  3441. SeeAlso: INT 4B"Z100",INT 4D"Z100"
  3442. --------O-4C---------------------------------
  3443. INT 4C - Acorn BBC Master 512 - "OSCLI" - INTERPRET COMMAND LINE
  3444.     DS:BX -> CR-terminated command string
  3445. Return: FLAGS destroyed
  3446. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4B"Acorn"
  3447. --------h-4D---------------------------------
  3448. INT 4D - Z100 - Slave 8259 - S100 vectored line 5
  3449. SeeAlso: INT 4C"Z100",INT 4E"Z100"
  3450. --------d-4E---------------------------------
  3451. INT 4E - TI Professional PC - DISK I/O
  3452.     used instead of INT 13 on the TI Professional PC
  3453. SeeAlso: INT 13
  3454. --------h-4E---------------------------------
  3455. INT 4E - Z100 - Slave 8259 - S100 vectored line 6
  3456. SeeAlso: INT 4D"Z100",INT 4F"Z100"
  3457. --------h-4F---------------------------------
  3458. INT 4F - Z100 - Slave 8259 - S100 vectored line 7
  3459. SeeAlso: INT 4E"Z100"
  3460. --------d-4F8100-----------------------------
  3461. INT 4F - Common Access Method SCSI interface rev 2.3 - SEND CCB TO XPT/SIM
  3462.     AX = 8100h
  3463.     ES:BX -> CAM Control Block (CCB) (see below)
  3464. Return: AH = status
  3465.         00h successful
  3466.         01h invalid CCB address (0000h:0000h)
  3467. Note:    the SCSI Interface Module (SIM) may complete the requested function
  3468.       and invoke the completion callback function before this call returns
  3469. SeeAlso: AX=8200h,INT 2F/AX=7F01h,INT 4B"Common Access Method"
  3470.  
  3471. Values for CAM function code:
  3472.  00h    NOP
  3473.  01h    execute SCSI I/O
  3474.  02h    get device type
  3475.  03h    path inquiry
  3476.  04h    release SIM queue
  3477.  05h    set async callback
  3478.  06h    set device type
  3479.  07h-0Fh reserved
  3480.  10h    abort SCSI command
  3481.  11h    reset SCSI bus
  3482.  12h    reset SCSI device
  3483.  13h    terminate I/O process
  3484.  14h-1Fh reserved
  3485.  20h    engine inquiry
  3486.  21h    execute engine request
  3487.  22h-2Fh reserved
  3488.  30h    enable logical unit number
  3489.  31h    execute target I/O
  3490.  32h-7Fh reserved
  3491.  80h-FFh vendor-specific functions
  3492.  
  3493. Format of CAM Control Block:
  3494. Offset    Size    Description
  3495.  00h    DWORD    physical address of this CCB
  3496.  04h    WORD    CAM control block length
  3497.  06h    BYTE    function code (see above)
  3498.  07h    BYTE    CAM status (see below)
  3499.  08h    BYTE    SCSI status
  3500.  09h    BYTE    path ID (FFh = XPT)
  3501.  0Ah    BYTE    target ID
  3502.  0Bh    BYTE    logical unit number
  3503.  0Ch    WORD    CAM flags (see below)
  3504.  0Eh    BYTE    CAM address flags (see below)
  3505.  0Fh    BYTE    target-mode flags (see below)
  3506. ---function 02h---
  3507.  10h    DWORD    pointer to 36-byte buffer for inquiry data or 0000h:0000h
  3508.  14h    BYTE    peripheral device type of target logical unit number
  3509. ---function 03h---
  3510.  10h    BYTE    version number (00h-07h prior to rev 1.7, 08h = rev 1.7,
  3511.         09h-FFh = rev no, i.e. 23h = rev 2.3)
  3512.  11h    BYTE    SCSI capabilities (see below)
  3513.  12h    BYTE    target mode support
  3514.         bit 7: processor mode
  3515.         bit 6: phase-cognizant mode
  3516.         bit 5-0: reserved
  3517.  13h    BYTE    miscellaneous flags
  3518.         bit 7: scanned high to low instead of low to high
  3519.         bit 6: removables not included in scan
  3520.         bit 5: inquiry data not kept by XPT
  3521.         bits 4-0: reserved
  3522.  14h    WORD    engine count
  3523.  16h 14 BYTEs    vendor-specific data
  3524.  24h    DWORD    size of private data area
  3525.  28h    DWORD    asynchronous event capabilities (see below)
  3526.  2Ch    BYTE    highest path ID assigned
  3527.  2Dh    BYTE    SCSI device ID of initiator
  3528.  2Eh  2 BYTEs    reserved
  3529.  30h 16 BYTEs    SIM vendor ID
  3530.  40h 16 BYTEs    HBA (host bus adaptor) vendor ID
  3531.  50h  4 BYTEs    operating-system dependant usage
  3532. ---functions 00h,04h,11h,12h---
  3533.  no additional fields
  3534. ---function 05h---
  3535.  10h    DWORD    asynchronous event enables (see function 03h above)
  3536.  14h    DWORD    pointer to asynchronous callback routine
  3537.  18h    DWORD    pointer to peripheral driver buffer
  3538.  1Ch    BYTE    size of peripheral buffer
  3539. ---function 06h---
  3540.  10h    BYTE    peripheral device type of target
  3541. ---functions 10h,13h---
  3542.  10h    DWORD    pointer to CCB to be aborted
  3543. ---function 20h---
  3544.  10h    WORD    engine number
  3545.  12h    BYTE    engine type
  3546.         00h buffer memory
  3547.         01h lossless compression
  3548.         02h lossy compression
  3549.         03h encryption
  3550.  13h    BYTE    engine algorithm ID
  3551.         00h vendor-unique
  3552.         01h LZ1 variation 1 (STAC)
  3553.         02h LZ2 variation 1 (HP DCZL)
  3554.         03h LZ2 variation 2 (Infochip)
  3555.  14h    DWORD    engine memory size
  3556. ---function 21h---
  3557.  10h    DWORD    pointer to peripheral driver
  3558.  14h  4 BYTEs    reserved
  3559.  18h    DWORD    OS-dependent request-mapping info
  3560.  1Ch    DWORD    address of completion callback routine
  3561.  20h    DWORD    pointer to scatter/gather list or data buffer
  3562.  24h    DWORD    length of data transfer
  3563.  28h    DWORD    pointer to engine buffer data
  3564.  2Ch  2 BYTEs    reserved
  3565.  2Eh    WORD    number of scatter/gather entries
  3566.  30h    DWORD    maximum destination data length
  3567.  34h    DWORD    length of destination data
  3568.  38h    DWORD    source residual length
  3569.  3Ch 12 BYTEs    reserved
  3570.  48h    DWORD    OS-dependent timeout value
  3571.  4Ch  4 BYTEs    reserved
  3572.  50h    WORD    engine number
  3573.  52h    WORD    vendor-unique flags
  3574.  54h  4 BYTEs    reserved
  3575.  58h  N BYTEs    private data area for SIM
  3576. ---function 30h---
  3577.  10h    WORD    group 6 vendor-unique CDB length
  3578.  12h    WORD    group 7 vendor-unique CDB length
  3579.  14h    DWORD    pointer to target CCB list
  3580.  18h    WORD    number of target CCBs
  3581. ---other functions---
  3582.  10h    DWORD    pointer to peripheral driver
  3583.  14h    DWORD    pointer to next CCB
  3584.  18h    DWORD    OS-dependent request mapping information
  3585.  1Ch    DWORD    address of completion callback routine
  3586.  20h    DWORD    pointer to scatter/gather list or data buffer
  3587.  24h    DWORD    length of data transfer
  3588.  28h    DWORD    pointer to sense info buffer
  3589.  2Ch    BYTE    length of sense info buffer
  3590.  2Dh    BYTE    CDB length
  3591.  2Eh    WORD    number of scatter/gather entries
  3592.  30h  4 BYTEs    reserved
  3593.  34h    BYTE    SCSI status
  3594.  35h  3 BYTEs    reserved
  3595.  38h    DWORD    residual length
  3596.  40h 12 BYTEs    Command Descriptor Block (CDB)
  3597.  44h    DWORD    OS-dependent timeout value
  3598.  48h    DWORD    pointer to message buffer
  3599.  4Ch    WORD    length of message buffer
  3600.  4Eh    WORD    vendor-unique flags
  3601.  50h    BYTE    tag queue action
  3602.  51h  3 BYTEs    reserved
  3603.  54h  N BYTEs    private data area for SIM
  3604.  
  3605. Bitfields for CAM flags:
  3606.  bit 0    CDB is a pointer
  3607.  bit 1    tagged queue action enable
  3608.  bit 2    linked CDB
  3609.  bit 3    disable callback on completion
  3610.  bit 4    scatter/gather
  3611.  bit 5    disable autosense
  3612.  bits 7-6 direction (00 reserved, 01 in, 10 out, 11 no data transfer)
  3613.  bits 9-8 reserved
  3614.  bit 10 engine synchronize
  3615.  bit 11 SIM queue freeze
  3616.  bit 12 SIM queue priority
  3617.     1 head insertion
  3618.     0 tail insertion (normal)
  3619.  bit 13 disable synchronous transfers    / exclusive
  3620.  bit 14 initiate synchronous transfers    \ mutually
  3621.  bit 15 disable disconnect
  3622.  
  3623. Bitfields for CAM address flags:
  3624.  bit 7    SG list/data (0 = host, 1 = engine)
  3625.  bit 6    CDB pointer    (bits 6-1: 0=virtual addr, 1=phys addr)
  3626.  bit 5    SG list/data
  3627.  bit 4    sense buffer
  3628.  bit 3    message buffer
  3629.  bit 2    next CCB
  3630.  bit 1    callback on completion
  3631.  bit 0    reserved
  3632.  
  3633. Values for CAM status:
  3634.  00h    request in progress
  3635.  01h    request successful
  3636.  02h    host aborted request
  3637.  03h    unable to abort request
  3638.  04h    request completed with error
  3639.  05h    CAM is busy
  3640.  06h    invalid request
  3641.  07h    invalid path ID
  3642.  08h    no such SCSI device
  3643.  09h    unable to terminate I/O process
  3644.  0Ah    timeout on target selection
  3645.  0Bh    timeout on command
  3646.  0Dh    receive message rejection
  3647.  0Eh    sent/received SCSI bus reset
  3648.  0Fh    detected uncorrectable parity error
  3649.  10h    Autosense request failed
  3650.  11h    no HBA detected
  3651.  12h    data over/underrun
  3652.  13h    bus freed unexpectedly
  3653.  14h    target bus phase sequence failure
  3654.  15h    CCB too small
  3655.  16h    requested capability not available
  3656.  17h    sent bus device reset
  3657.  18h    terminate I/O process
  3658.  38h    invalid LUN
  3659.  39h    invalid target ID
  3660.  3Ah    unimplemented function
  3661.  3Bh    nexus not established
  3662.  3Ch    invalid initiator ID
  3663.  3Dh    received SCSI Command Descriptor Block
  3664.  3Eh    LUN already enabled
  3665.  3Fh    SCSI bus busy
  3666. Note:    bit 6 set to indicate frozen SIM queue
  3667.     bit 7 set to indicate valid autosense
  3668.  
  3669. Bitfields for target-mode flags:
  3670.  bit 7    data buffer valid
  3671.  bit 6    status valid
  3672.  bit 5    message buffer valid
  3673.  bit 4    reserved
  3674.  bit 3    phase-cognizant mode
  3675.  bit 2    target CCB available
  3676.  bit 1    disable autodisconnect
  3677.  bit 0    disable autosave/restore
  3678.  
  3679. Bitfields for SCSI capabilities:
  3680.  bit 7    modify data pointers
  3681.  bit 6    wide bus (32 bits)
  3682.  bit 5    wide bus (16 bits)
  3683.  bit 4    synchronous transfers
  3684.  bit 3    linked commands
  3685.  bit 2    reserved
  3686.  bit 1    tagged queueing
  3687.  bit 0    soft reset
  3688.  
  3689. Bitfields for asynchronous event capabilities:
  3690.  bits 31-24    vendor-specific
  3691.  bits 23-8    reserved
  3692.  bit 7    new devices found during rescan
  3693.  bit 6    SIM module deregistered
  3694.  bit 5    SIM module registered
  3695.  bit 4    sent bus device reset to target
  3696.  bit 3    SCSI AEN
  3697.  bit 2    reserved
  3698.  bit 1    unsolicited reselection
  3699.  bit 0    unsolicited SCSI bus reset
  3700.  
  3701. Completion callback function called with:
  3702.     interrupts disabled
  3703.     ES:BX -> completed CCB
  3704.  
  3705. Asynchronous callback function called with:
  3706.     AH = opcode
  3707.     AL = path ID generating callback
  3708.     DH = target ID causing event
  3709.     DL = LUN causing event
  3710.     CX = data byte count (if applicable)
  3711.     ES:BX -> data buffer (if applicable)
  3712. Return: all registers preserved
  3713. --------d-4F8200CX8765-----------------------
  3714. INT 4F - Common Access Method SCSI interface rev 2.3 - INSTALLATION CHECK
  3715.     AX = 8200h
  3716.     CX = 8765h
  3717.     DX = CBA9h
  3718. Return: AH = 00h if installed
  3719.         CX = 9ABCh
  3720.         DX = 5678h
  3721.         ES:DI -> "SCSI_CAM"
  3722. SeeAlso: AX=8100h,INT 4B"Common Access Method"
  3723. --------N-50---------------------------------
  3724. INT 50 - TIL Xpert AIM (X.25)
  3725.     AH = function
  3726. --------H-50---------------------------------
  3727. INT 50 - IRQ0 relocated by DESQview
  3728. Notes:    this is the default location for older versions; DESQview v2.26+
  3729.       searches for unused ranges of interrupts and uses the lowest
  3730.       available range in its list for relocating these IRQs and the next
  3731.       lowest for relocating IRQ8-IRQ15
  3732.     a range of eight interrupts starting at a multiple of 8 is considered
  3733.       available if all vectors are identical and it has not been excluded
  3734.       with an /XB:nn commandline switch
  3735.     the list of ranges for v2.26 is 50h,58h,68h,78h,F8h (if < two of these
  3736.       are available, F8h and then 50h are used anyway)
  3737.     the list of ranges for v2.31+ is 68h,78h,88h-B8h,F8h (if < two of these
  3738.       are available, F8h and then F0h are used anyway)
  3739. SeeAlso: INT 08"IRQ0",INT 51"DESQview",INT 54"DESQview",INT 58"DESQview"
  3740. SeeAlso: INT D8"Screen Thief"
  3741. --------H-50---------------------------------
  3742. INT 50 - IRQ0 relocated by IBM 3278 emulation control program
  3743. SeeAlso: INT 51"IBM 3278"
  3744. --------H-50---------------------------------
  3745. INT 50 - IRQ0 relocated by OS/2 v1.x
  3746. SeeAlso: INT 51"OS/2"
  3747. --------V-500000-----------------------------
  3748. INT 50 - Vanderaart TEXT WINDOWS, PC Thuis Shell - OPEN TEXT WINDOW
  3749.     AX = 0000h
  3750.     ES:BX -> name string or ES:0000h if none
  3751.     CH,CL = row,column of upper left corner
  3752.     DH,DL = row,column of lower right corner
  3753. Return: AX = window handle or
  3754.         0000h if not installed
  3755.         FFFFh on error
  3756. SeeAlso: AX=0001h,AX=0002h"TEXT WINDOWS"
  3757. --------V-500001-----------------------------
  3758. INT 50 - Vanderaart TEXT WINDOWS, PC Thuis Shell - CLOSE TEXT WINDOW
  3759.     AX = 0001h
  3760.     DI = window handle
  3761. SeeAlso: AX=0000h
  3762. --------V-500002-----------------------------
  3763. INT 50 - Vanderaart TEXT WINDOWS - PUT CHARACTER IN WINDOW
  3764.     AX = 0002h
  3765.     BL = character
  3766.     BH = attribute
  3767.     DL = column
  3768.     DH = row
  3769.     DI = window handle
  3770. Return: AX = status
  3771.         0000h if successful
  3772.         FFFFh if outside window
  3773. SeeAlso: AX=0000h
  3774. --------l-500002-----------------------------
  3775. INT 50 - PC Thuis Organizer Shell - PLOT TEXT
  3776.     AX = 0002h
  3777.     ES:BX -> text string
  3778.     DH,DL = row,column of upper left corner
  3779.     DI = window handle
  3780. Return: AX = status
  3781.         0000h successful (text fits in window)
  3782.         FFFFh error
  3783. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  3784.       published in the June/July 1990 issue of PC Thuis Power magazine
  3785. --------V-500003-----------------------------
  3786. INT 50 - Vanderaart TEXT WINDOWS - OUTPUT LINE TO WINDOW
  3787.     AX = 0003h
  3788.     ES:BX -> text string
  3789.     CX = string length (0000h if ASCIZ string)
  3790.     DL = position (FFh centered, else flush left)
  3791.     DH = starting row
  3792.     DI = window handle
  3793. Return: AX = status
  3794.         0000h successful
  3795.         FFFFh did not fit in window
  3796. --------l-500003-----------------------------
  3797. INT 50 - PC Thuis Organizer Shell - WRITE FILE
  3798.     AX = 0003h
  3799.     ES:BX -> data to be written
  3800.     CX = number of bytes to write
  3801.     DS:SI -> filename
  3802. Return: AX = status
  3803.         0000h successful
  3804.         FFFFh error
  3805. SeeAlso: AX=0004h"Shell"
  3806. --------V-500004-----------------------------
  3807. INT 50 - Vanderaart TEXT WINDOWS - GET KEY
  3808.     AX = 0004h
  3809.     CH = type
  3810.         00h any key
  3811.         01h 'J' or 'N' (Dutch for yes/no)
  3812. Return: AX = key
  3813. SeeAlso: INT 16/AH=00h
  3814. --------l-500004-----------------------------
  3815. INT 50 - PC Thuis Organizer Shell - READ FILE
  3816.     AX = 0004h
  3817.     ES:BX -> buffer for data
  3818.     CX = number of bytes to read or 0000h for entire file
  3819.     DL = file type
  3820.         01h setting shell
  3821.         02h setting sterm
  3822.         03h INT21 file
  3823.     DS:SI -> filename
  3824. Return: AX = status
  3825.         0000h successful
  3826.         FFFFh error
  3827. Note:    file type numbers are maintained by John Vanderaart; if a new file type
  3828.       is needed, a type number should be requested from him through the
  3829.       magazine:
  3830.         PC Thuis BV
  3831.         Spaarne 55
  3832.         2011 CE HAARLEM
  3833.         The Netherlands
  3834. SeeAlso: AX=0003h"Shell"
  3835. --------V-500005-----------------------------
  3836. INT 50 - Vanderaart TEXT WINDOWS - CHANGE ATTRIBUTE
  3837.     AX = 0005h
  3838.     BL = new attribute
  3839.     CH,CL = row,column of upper left corner
  3840.     DH,DL = row,column of lower right corner
  3841.     DI = window handle
  3842. --------l-500005-----------------------------
  3843. INT 50 - PC Thuis Organizer Shell - PROMPT YES/NO
  3844.     AX = 0005h
  3845.     ES:BX -> prompt string (ES:0000h if no prompt)
  3846. Return: AX = key pressed
  3847.         0000h "J" (Dutch "Ja" = "Yes")
  3848.         FFFFh "N" (Dutch "Nee" = "No")
  3849. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  3850.       published in the June/July 1990 issue of PC Thuis Power magazine
  3851. SeeAlso: AX=0008h"PC Thuis"
  3852. --------V-500006-----------------------------
  3853. INT 50 - Vanderaart TEXT WINDOWS - EDIT LINE IN WINDOW
  3854.     AX = 0006h
  3855.     ES:BX -> text string
  3856.     CH = type of input (see below)
  3857.     DH,DL = row,column of upper left corner
  3858.     DI = window handle
  3859. Return: AX = key which terminated entry
  3860.         0000h Enter
  3861.         0001h Esc
  3862.         0002h Down arrow
  3863.         0003h Up arrow
  3864.         0004h F10
  3865.  
  3866. Values for type of input:
  3867.  00h    everything
  3868.  01h    uppercase only
  3869.  02h    positive numbers
  3870.  03h    Dutch postal code ("9999 AA")
  3871.  04h    'J' or 'N' (Dutch yes/no)
  3872.  05h    telephone or FAX number
  3873.  06h    positive or negative number
  3874.  07h    date (dd/mm/yy)
  3875.  08h    money
  3876.  09h    '1' through '8'
  3877.  0Ah    '1' through '4'
  3878.  0Bh    uppercase filenames
  3879. --------l-500006-----------------------------
  3880. INT 50 - PC Thuis Organizer Shell - ALERT USER
  3881.     AX = 0006h
  3882.     ES:BX -> string
  3883. --------l-500007-----------------------------
  3884. INT 50 - PC Thuis Organizer Shell - DO LINE
  3885.     AX = 0007h
  3886.     ES:BX -> text string
  3887.     CX = string length in bytes (0000h if NUL-terminated)
  3888.     DL = FFh to center string, else flush left
  3889.     DH = upper left row
  3890.     DI = window handle
  3891. Return: AX = status
  3892.         0000h successful
  3893.         FFFFh error
  3894. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  3895.       published in the June/July 1990 issue of PC Thuis Power magazine
  3896. SeeAlso: AX=0008h
  3897. --------l-500008-----------------------------
  3898. INT 50 - PC Thuis Organizer Shell - DO MENU
  3899.     AX = 0008h
  3900.     ES:BX -> menu structure
  3901. Return: AL = index 1 or FFh if not selected
  3902.     AH = index 2 or FFh if not selected
  3903.     BL = index 3 or FFh if not selected
  3904.     BH = index 4 or FFh if not selected
  3905. SeeAlso: AX=0005h"PC Thuis",AX=0007h,AX=000Ch
  3906. --------l-500009-----------------------------
  3907. INT 50 - PC Thuis Organizer Shell - MESSAGE ON
  3908.     AX = 0009h
  3909.     ES:BX -> message string
  3910. SeeAlso: AX=000Ah
  3911. --------l-50000A-----------------------------
  3912. INT 50 - PC Thuis Organizer Shell - MESSAGE OFF
  3913.     AX = 000Ah
  3914. SeeAlso: AX=0009h
  3915. --------l-50000B-----------------------------
  3916. INT 50 - PC Thuis Organizer Shell - CHANGE ATTRIBUTE
  3917.     AX = 000Bh
  3918.     BL = new attribute
  3919.     CH,CL = row,column of upper left corner
  3920.     DH,DL = row,column of lower right corner
  3921.     DI = window handle
  3922. --------l-50000C-----------------------------
  3923. INT 50 - PC Thuis Organizer Shell - DO REQUEST
  3924.     AX = 000Ch
  3925.     ES:BX -> request structure
  3926. Return: AX = status
  3927.         0000h confirmed
  3928.         FFFFh denied
  3929. SeeAlso: AX=0008h
  3930. --------l-50000D-----------------------------
  3931. INT 50 - PC Thuis Organizer Shell - EDIT LINE
  3932.     AX = 000Dh
  3933.     ES:BX -> text string
  3934.     CL = length
  3935.     CH = type
  3936.         bit 0: force uppercase
  3937.         bit 1: integer
  3938.         bit 2: no spaces allowed
  3939.         bit 3: no cursor keys
  3940.     DH,DL = row,column of upper left corner
  3941.     DI = window handle
  3942. Return: AX = result code
  3943. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  3944.       published in the June/July 1990 issue of PC Thuis Power magazine
  3945. --------l-50000E-----------------------------
  3946. INT 50 - PC Thuis Organizer Shell - PLOT CHARACTER
  3947.     AX = 000Eh
  3948.     BL = character
  3949.     BH = attribute
  3950.     DH,DL = row,column at which to plot
  3951.     DI = window handle
  3952. Return: AX = status
  3953.         0000h successful
  3954.         FFFFh errror
  3955. --------l-50000F-----------------------------
  3956. INT 50 - PC Thuis Organizer Shell - EMPTY WINDOW
  3957.     AX = 000Fh
  3958.     BL = character
  3959.     BH = attribute
  3960.     DI = window handle
  3961. --------l-500010-----------------------------
  3962. INT 50 - PC Thuis Organizer Shell - TRACE MENU
  3963.     AX = 0010h
  3964.     ES:BX -> first menu structure
  3965.     CL = hotkey to look up
  3966. Return: AL = index 1 or FFh if not selected
  3967.     AH = index 2 or FFh if not selected
  3968.     BL = index 3 or FFh if not selected
  3969.     BH = index 4 or FFh if not selected
  3970. Index:    hotkeys;PC Thuis Organizer Shell
  3971. --------l-500011-----------------------------
  3972. INT 50 - PC Thuis Organizer Shell - MOVE MEMORY
  3973.     AX = 0011h
  3974.     DS:SI -> source
  3975.     ES:DI -> destination
  3976.     CX = number of bytes to move (0000h = until NUL string terminator???)
  3977. SeeAlso: AX=0012h
  3978. --------l-500012-----------------------------
  3979. INT 50 - PC Thuis Organizer Shell - COMPARE MEMORY
  3980.     AX = 0012h
  3981.     DS:SI -> source
  3982.     ES:DI -> destination
  3983.     CX = number of bytes to compare (0000h=until NUL string terminator???)
  3984. Return: AX = status
  3985.         0000h same
  3986.         FFFFh different
  3987. SeeAlso: AX=0011h
  3988. --------l-500013-----------------------------
  3989. INT 50 - PC Thuis Organizer Shell - GET KEY
  3990.     AX = 0013h
  3991.     CH = type flags
  3992.         bit 0: force uppercase
  3993.         bit 1: integer
  3994.         bit 2: no spaces
  3995. Return: AX = keystroke
  3996. --------l-500014-----------------------------
  3997. INT 50 - PC Thuis Organizer Shell - SCROLL WINDOW
  3998.     AX = 0014h
  3999.     BL = direction
  4000.         06h up
  4001.         07h down
  4002.     BH = attribute
  4003.     DI = window handle
  4004. SeeAlso: INT 10/AH=06h,INT 10/AH=07h
  4005. --------l-500015-----------------------------
  4006. INT 50 - PC Thuis Organizer Shell - GET MEMORY HANDLE
  4007.     AX = 0015h
  4008.     BL = handle size
  4009.         00h 65536 bytes (64K)
  4010.         01h 65535 bytes (64K-1)
  4011.         02h 32768 bytes (32K)
  4012.         03h 32767 bytes (32K-1)
  4013. Return: AX = segment
  4014. Program: The PC Thuis Organizer Shell was written by John Vanderaart and
  4015.       published in the June/July 1990 issue of PC Thuis Power magazine
  4016. SeeAlso: INT 21/AH=48h
  4017. --------H-51---------------------------------
  4018. INT 51 - IRQ1 relocated by DESQview
  4019. Note:    this is the default location for older versions; see INT 50"DESQview"
  4020.       for details of interrupt relocation
  4021. SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
  4022. --------H-51---------------------------------
  4023. INT 51 - IRQ1 relocated by IBM 3278 emulation control program
  4024. SeeAlso: INT 50"IBM 3278",INT 54"IBM 3278"
  4025. --------H-51---------------------------------
  4026. INT 51 - IRQ1 relocated by OS/2 v1.x
  4027. SeeAlso: INT 50"OS/2",INT 54"OS/2"
  4028. --------H-52---------------------------------
  4029. INT 52 - IRQ2 relocated by DESQview
  4030. Note:    this is the default location for older versions; see INT 50"DESQview"
  4031.       for details of interrupt relocation
  4032. SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
  4033. --------H-52---------------------------------
  4034. INT 52 - IRQ2 relocated by IBM 3278 emulation control program, OS/2 v1.x
  4035. SeeAlso: INT 50"IBM 3278",INT 51"OS/2"
  4036. --------H-53---------------------------------
  4037. INT 53 - IRQ3 relocated by DESQview
  4038. Note:    this is the default location for older versions; see INT 50"DESQview"
  4039.       for details of interrupt relocation
  4040. SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
  4041. --------H-53---------------------------------
  4042. INT 53 - IRQ3 relocated by IBM 3278 emulation control program, OS/2 v1.x
  4043. SeeAlso: INT 50"IBM 3278",INT 51"OS/2"
  4044. --------N-53---------------------------------
  4045. INT 53 - WEB??? - API
  4046.     BX = function
  4047.         0000h ???
  4048.         AX = ???
  4049.         Return: AX = ???
  4050.         0004h ???
  4051.         0009h ???
  4052.         0015h
  4053.         AX = ???
  4054.         DX = ???
  4055.         0017h
  4056. Return: ???
  4057. Notes:    the installation check consists of looking for the signature "WEBCO"
  4058.       immediately prior to the interrupt handler
  4059.     the above calls are made by Show Partner F/X v3.6 (see INT 10/AH=53h)
  4060. Index:    installation check;unknown|installation check;WEBCO
  4061. --------H-54---------------------------------
  4062. INT 54 - IRQ4 relocated by DESQview
  4063. Note:    this is the default location for older versions; see INT 50"DESQview"
  4064.       for details of interrupt relocation
  4065. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  4066. --------H-54---------------------------------
  4067. INT 54 - IRQ4 relocated by IBM 3278 emulation control program, OS/2 v1.x
  4068. SeeAlso: INT 51"IBM 3278",INT 51"OS/2"
  4069. --------H-55---------------------------------
  4070. INT 55 - IRQ5 relocated by DESQview
  4071. Note:    this is the default location for older versions; see INT 50"DESQview"
  4072.       for details of interrupt relocation
  4073. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  4074. --------H-55---------------------------------
  4075. INT 55 - IRQ5 relocated by IBM 3278 emulation control program, OS/2 v1.x
  4076. SeeAlso: INT 51"IBM 3278",INT 51"OS/2"
  4077. --------H-56---------------------------------
  4078. INT 56 - IRQ6 relocated by DESQview
  4079. Note:    this is the default location for older versions; see INT 50"DESQview"
  4080.       for details of interrupt relocation
  4081. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  4082. --------H-56---------------------------------
  4083. INT 56 - IRQ6 relocated by IBM 3278 emulation control program, OS/2 v1.x
  4084. SeeAlso: INT 51"IBM 3278",INT 51"OS/2"
  4085. --------H-57---------------------------------
  4086. INT 57 - IRQ7 relocated by DESQview
  4087. Note:    this is the default location for older versions; see INT 50"DESQview"
  4088.       for details of interrupt relocation
  4089. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  4090. --------H-57---------------------------------
  4091. INT 57 - IRQ7 relocated by IBM 3278 emulation control program, OS/2 v1.x
  4092. SeeAlso: INT 51"IBM 3278",INT 51"OS/2"
  4093. --------H-58---------------------------------
  4094. INT 58 - IRQ8 relocated by DESQview 2.26+
  4095. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4096. SeeAlso: INT 50"DESQview",INT 70
  4097. --------H-58---------------------------------
  4098. INT 58 - IRQ0 relocated by DoubleDOS
  4099. SeeAlso: INT 08
  4100. --------H-59---------------------------------
  4101. INT 59 - IRQ9 relocated by DESQview 2.26+
  4102. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4103. SeeAlso: INT 50"DESQview",INT 71
  4104. --------H-59---------------------------------
  4105. INT 59 - IRQ1 relocated by DoubleDOS
  4106. SeeAlso: INT 09
  4107. --------V-59---------------------------------
  4108. INT 59 - GSS Computer Graphics Interface (GSS*CGI)
  4109.     DS:DX -> block of 5 array pointers
  4110. Return: CF set on error
  4111.         AX = error code
  4112.     CF clear if successful
  4113.         AX = return code
  4114. Note:    INT 59 is the means by which GSS*CGI language bindings communicate with
  4115.       GSS*CGI device drivers and the GSS*CGI device driver controller.
  4116.     also used by the IBM Graphic Development Toolkit
  4117. --------H-5A---------------------------------
  4118. INT 5A - IRQ10 relocated by DESQview 2.26+
  4119. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4120. SeeAlso: INT 50"DESQview",INT 72
  4121. --------H-5A---------------------------------
  4122. INT 5A - IRQ2 relocated by DoubleDOS
  4123. SeeAlso: INT 0A
  4124. --------N-5A---------------------------------
  4125. INT 5A - Cluster adapter BIOS entry address
  4126.     ???
  4127. --------H-5B---------------------------------
  4128. INT 5B - IRQ11 relocated by DESQview 2.26+
  4129. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4130. SeeAlso: INT 50"DESQview",INT 73
  4131. --------H-5B---------------------------------
  4132. INT 5B - IRQ3 relocated by DoubleDOS
  4133. SeeAlso: INT 0B
  4134. --------N-5B---------------------------------
  4135. INT 5B - Used by cluster adapter
  4136. --------N-5B---------------------------------
  4137. INT 5B - AT&T Starlan Extended NetBIOS (variable length names)
  4138.     ES:BX -> Network Control Block (see below)
  4139. Return: AL = status (see INT 5C)
  4140. SeeAlso: INT 5C
  4141.  
  4142. Format of Network Control Block
  4143. Offset    Size    Description
  4144.  00h    BYTE    ncb_command (see below)
  4145.  01h    BYTE    ncb_retcode
  4146.  02h    BYTE    ncb_lsn
  4147.  03h    BYTE    ncb_num
  4148.  04h    DWORD    -> ncb_buffer
  4149.  08h    WORD    ncb_length
  4150.  0Ah 16 BYTEs    ncb_callname
  4151.  1Ah 16 BYTEs    ncb_name
  4152.  2Ah    BYTE    ncb_rto
  4153.  2Bh    BYTE    ncb_sto
  4154.  2Ch    DWORD    -> ncb_post    /* int (far *ncb_post)(); */
  4155.  30h    BYTE    ncb_lana_num
  4156.  31h    BYTE    ncb_cmd_cplt
  4157.  32h    DWORD    -> ncb_vname
  4158.  36h    BYTE    ncb_vnamelen
  4159.  37h  9 BYTEs    ncb_reserve
  4160. Note: fields 00h-31h are the same as for a standard NetBIOS NCB (see INT 5C)
  4161.  
  4162. Values for ncb_command field same as for INT 5C, except
  4163.  70h    send net Break
  4164. --------N-5B---------------------------------
  4165. INT 5B - Microsoft Network Transport Layer Interface
  4166. Note:    used by MS-NET for executing network commands
  4167. SeeAlso: INT 5C"NetBIOS"
  4168. --------N-5B---------------------------------
  4169. INT 5B - used by Alloy NTNX
  4170. --------N-5B---------------------------------
  4171. INT 5B - ISOLAN Multi Protocol Software
  4172.     ES:BX -> Transfer Control Block
  4173. Return: AL - status
  4174. Note:    this software interface allows multiple protocols/software packages
  4175.       to access a BICC 411x network card
  4176.  
  4177. Format of Transfer Control Block:
  4178. Offset    Type    Description
  4179.  00h    BYTE    command code
  4180.         B3h Status
  4181.         F2h Activate
  4182.         F3h Deactivate
  4183.         F4h Send Data
  4184.  01h    BYTE    command identity
  4185.  02h    BYTE    virtual circuit ID
  4186.  03h    WORD    buffer length
  4187.  05h    DWORD    buffer pointer
  4188.  09h    BYTE    expedited data flag
  4189.  0Ah    BYTE    cancelable flag
  4190.  0Bh 16 BYTEs    local network address
  4191.  1Bh 16 BYTEs    remote network address
  4192.  2Bh    DWORD    asynchronous notification routine
  4193.  30h    DWORD    local network number
  4194.  34h    DWORD    remote network number
  4195.  38h    BYTE    call timeout
  4196.  39h    BYTE    not used
  4197.  3Ah  8 BYTEs    reserved
  4198.  42h    BYTE    command code extension
  4199.  43h    WORD    Blue Book MAC type
  4200. ----------5B5254DL04-------------------------
  4201. INT 5B U - SitBack v3.02R - GET ???
  4202.     AX = 5254h
  4203.     DL = 04h
  4204. Return: ES:BX -> ??? in resident portion
  4205. Program: SitBack is a background file backup utility by SitBack Technologies,
  4206.       Inc. which initiates backups whenever the system is idle
  4207. SeeAlso: AX=8485h/DL=71h,AX=8485h/DL=72h
  4208. ----------5B8485DL70-------------------------
  4209. INT 5B U - SitBack v3.02R - INSTALLATION CHECK
  4210.     AX = 8485h
  4211.     DL = 70h
  4212. Return: CX = 8485h if installed
  4213.         DX:AX -> ??? (configuration data?)
  4214. Program: SitBack is a background file backup utility by SitBack Technologies,
  4215.       Inc. which initiates backups whenever the system is idle
  4216. SeeAlso: AX=5254h/DL=04h,AX=8485h/DL=78h
  4217. ----------5B8485DL71-------------------------
  4218. INT 5B U - SitBack v3.02R - SET ??? FLAG AND GET ??? ADDRESS
  4219.     AX = 8485h
  4220.     DL = 71h
  4221. Return: ES:BX -> FAR entry point to ???
  4222. Note:    the flag which is modified is located at the address returned by
  4223.        AX=5254h/DL=04h
  4224. SeeAlso: AX=8485h/DL=72h
  4225. ----------5B8485DL72-------------------------
  4226. INT 5B U - SitBack v3.02R - CLEAR ??? FLAG
  4227.     AX = 8485h
  4228.     DL = 72h
  4229. Note:    the flag which is modified is located at the address returned by
  4230.        AX=5254h/DL=04h
  4231. SeeAlso: AX=8485h/DL=71h
  4232. ----------5B8485DL73-------------------------
  4233. INT 5B U - SitBack v3.02R - ???
  4234.     AX = 8485h
  4235.     DL = 73h
  4236.     ???
  4237. Return: ???
  4238. ----------5B8485DL74-------------------------
  4239. INT 5B U - SitBack v3.02R - ???
  4240.     AX = 8485h
  4241.     DL = 74h
  4242.     ???
  4243. Return: ???
  4244. ----------5B8485DL75-------------------------
  4245. INT 5B U - SitBack v3.02R - ???
  4246.     AX = 8485h
  4247.     DL = 75h
  4248.     CX = ???
  4249. Return: ???
  4250. SeeAlso: AX=8485h/DL=76h
  4251. ----------5B8485DL76-------------------------
  4252. INT 5B U - SitBack v3.02R - ???
  4253.     AX = 8485h
  4254.     DL = 76h
  4255.     CX = ???
  4256. Return: ???
  4257. Note:    conditionally calls the code for AX=8485h/DL=75h
  4258. SeeAlso: AX=8485h/DL=75h
  4259. ----------5B8485DL77-------------------------
  4260. INT 5B U - SitBack v3.02R - SET ??? FLAG
  4261.     AX = 8485h
  4262.     DL = 77h
  4263. ----------5B8485DL78-------------------------
  4264. INT 5B U - SitBack v3.02R - GET RESIDENT DATA SEGMENT
  4265.     AX = 8485h
  4266.     DL = 78h
  4267. Return: CX = 5342h if supported
  4268.         ES = AX = segment of TSR data
  4269. SeeAlso: AX=8485h/DL=70h,AX=8485h/DL=79h
  4270. ----------5B8485DL79-------------------------
  4271. INT 5B U - SitBack v3.02R - GET DTA
  4272.     AX = 8485h
  4273.     DL = 79h
  4274. Return: CX = 5342h if supported
  4275.         ES:BX -> DTA set by last INT 21/AH=1Ah
  4276. Note:    this function is provided by SBOS.EXE rather than SB.EXE
  4277. SeeAlso: INT 21/AH=1Ah
  4278. ----------5B8485DL7A-------------------------
  4279. INT 5B U - SitBack v3.02R - TOGGLE ???
  4280.     AX = 8485h
  4281.     DL = 7Ah
  4282. Return: CX = 5342h if supported
  4283.         AL = new value of ??? (00h or 01h)
  4284. --------H-5C---------------------------------
  4285. INT 5C - IRQ12 relocated by DESQview 2.26+
  4286. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4287. SeeAlso: INT 50"DESQview",INT 74
  4288. --------H-5C---------------------------------
  4289. INT 5C - IRQ4 relocated by DoubleDOS
  4290. SeeAlso: INT 0C
  4291. --------N-5C---------------------------------
  4292. INT 5C - NetBIOS INTERFACE
  4293.     ES:BX -> network control block (NCB) (see below)
  4294. Return: AL = status (see below)
  4295. Note:    Sytek PCnet card uses DMA 3.
  4296. SeeAlso: INT 2A/AH=01h,INT 2A/AH=04h,INT 5B
  4297.  
  4298. Values for NetBIOS status:
  4299.  00h    successful
  4300.  01h    bad buffer size
  4301.  03h    invalid NETBIOS command
  4302.  05h    timeout
  4303.  06h    receive buffer too small
  4304.  07h    No-ACK command failed
  4305.  08h    bad session number
  4306.  09h    LAN card out of memory
  4307.  0Ah    session closed
  4308.  0Bh    command has been cancelled
  4309.  0Dh    name already exists
  4310.  0Eh    local name table full
  4311.  0Fh    name still in use, can't delete
  4312.  11h    local session table full
  4313.  12h    remote PC not listening
  4314.  13h    bad NCB_NUM field
  4315.  14h    no answer to CALL or no such remote
  4316.  15h    name not in local name table
  4317.  16h    duplicate name
  4318.  17h    bad delete
  4319.  18h    abnormal end
  4320.  19h    name error, multiple identical names in use
  4321.  1Ah    bad packet
  4322.  21h    network card busy
  4323.  22h    too many commands queued
  4324.  23h    bad LAN card number
  4325.  24h    command finished while cancelling
  4326.  26h    command can't be cancelled
  4327.  30h    name defined by another process (OS/2)
  4328.  34h    NetBIOS environment not defined, must issue reset (OS/2)
  4329.  35h    required operating system resources exhausted (OS/2)
  4330.  36h    maximum applications exceeded (OS/2)
  4331.  37h    no SAPs available for NetBIOS (OS/2)
  4332.  38h    requested resources not available (OS/2)
  4333.  40h    Lana System Error
  4334.  41h    Lana Remote Hot Carrier
  4335.  42h    Lana Local Hot Carrier
  4336.  43h    Lana No Carrier Detected
  4337.  44h    unusual network condition
  4338.  45h-4Dh hardware error
  4339.  4Eh    token ring is broken
  4340.  4Fh    token ring error
  4341.  50h    adapter malfunction
  4342.  F7h    error in explicit INITIALIZE
  4343.  F8h    error in implicit OPEN
  4344.  F9h    TOKREUI internal error
  4345.  FAh    hardware adapter testing
  4346.  FBh    NetBIOS emulator not found
  4347.  FCh    OPEN or OPEN_SAP failure
  4348.  FDh    unexpected adapter closure
  4349.  FFh    NetBIOS busy (command pending)
  4350.  
  4351. Format of Network Control Block:
  4352. Offset    Size    Description
  4353.  00h    BYTE    command code (see below)
  4354.  01h    BYTE    return code
  4355.  02h    BYTE    local session number (LSN)
  4356.  03h    BYTE    "ncb_num" datagram table entry from ADD NAME
  4357.  04h    DWORD    -> I/O buffer
  4358.  08h    WORD    length of data in buffer
  4359.  0Ah 16 BYTEs    remote system to call
  4360.  1Ah 16 BYTEs    network name of local machine
  4361.  2Ah    BYTE    receive timeout in 1/2 seconds
  4362.  2Bh    BYTE    send timeout in 1/2 seconds
  4363.  2Ch    DWORD    -> FAR post handler    /* int (far *ncb_post)(); */
  4364.  30h    BYTE    network adapter number on which to execute command
  4365.         00h-03h IBM NetBIOS specs
  4366.         F0h-FFh Eicon NABios interface (see also INT 7B"Eicon")
  4367.  31h    BYTE    command completion code (see returned status above)
  4368.  32h 14 BYTEs    reserved for network card
  4369.  
  4370. Values for command code field in NCB (OR with 80h for non-waiting call):
  4371.  10h    start session with NCB_NAME name (call)
  4372.  11h    listen for call
  4373.  12h    end session with NCB_NAME name (hangup)
  4374.  14h    send data via NCB_LSN
  4375.  15h    receive data from a session
  4376.  16h    receive data from any session
  4377.  17h    send multiple data buffers
  4378.  20h    send unACKed message (datagram)
  4379.  21h    receive datagram
  4380.  22h    send broadcast datagram
  4381.  23h    receive broadcast datagram
  4382.  30h    add name to name table
  4383.  31h    delete name from name table
  4384.  32h    reset adapter card and tables
  4385.  33h    get adapter status (see structure "astatus" below)
  4386.  34h    status of all sessions for name (see structure "sstatus" below)
  4387.  35h    cancel
  4388.  36h    add group name to name table
  4389.  48h    send data and receive data (LAN Manager NETBEUI.DOS)
  4390.  70h    unlink from IBM remote program (no F0h function)
  4391.  71h    send data without ACK
  4392.  72h    send multiple buffers without ACK
  4393.  72h    UngermannBass Register (conflicts with above function)
  4394.  73h    UngermannBass SendNmc
  4395.  74h    UngermannBass Callniu
  4396.  75h    UngermannBass Calladdr
  4397.  76h    UngermannBass Listenaddr
  4398.  77h    UngermannBass SendPkt
  4399.  78h    find name
  4400.  78h    UngermannBass RcvPkt (conflicts with above function)
  4401.  79h    token-ring protocol trace
  4402.  79h    UngermannBass SendAttn (conflicts with above function)
  4403.  7Ah    UngermannBass RcvAttn
  4404.  7Bh    UngermannBass Listenniu
  4405.  7Ch    UngermannBass RcvRaw
  4406.  7Dh    UngermannBass SendNmc2
  4407.  7Fh    Beame&Whiteside BWNB installation check (returns with return code and
  4408.     completion code both set to 03h, while invalid functions return only
  4409.     return code field set to 03h)
  4410.  
  4411. Format of structure "name":
  4412. Offset    Size    Description
  4413.  00h 16 BYTEs "nm_name" symbolic name
  4414.  10h    BYTE  "nm_num" number associated with name
  4415.  11h    BYTE  nm_status
  4416.  
  4417. Format of structure "astatus":
  4418. Offset    Size    Description
  4419.  00h  6 BYTEs as_id
  4420.  06h    BYTE  as_jumpers
  4421.  07h    BYTE  as_post
  4422.  08h    BYTE  as_major
  4423.  09h    BYTE  as_minor
  4424.  0Ah    WORD  as_interval
  4425.  0Ch    WORD  as_crcerr
  4426.  0Eh    WORD  as_algerr
  4427.  10h    WORD  as_colerr
  4428.  12h    WORD  as_abterr
  4429.  14h    DWORD as_tcount
  4430.  18h    DWORD as_rcount
  4431.  1Ch    WORD  as_retran
  4432.  1Eh    WORD  as_xresrc
  4433.  20h  8 BYTEs as_res0
  4434.  28h    WORD  as_ncbfree
  4435.  2Ah    WORD  as_ncbmax
  4436.  2Ch    WORD  as_ncbx
  4437.  2Eh  4 BYTEs as_res1
  4438.  32h    WORD  as_sespend
  4439.  34h    WORD  as_msp
  4440.  36h    WORD  as_sesmax
  4441.  38h    WORD  as_bufsize
  4442.  3Ah    WORD  as_names
  4443.  3Ch 16 name structures     as_name
  4444.  
  4445. Format of structure "sstatus":
  4446. Offset    Size    Description
  4447.  00h    BYTE    number of sessions being reported
  4448.  01h    BYTE    number of sessions with this name
  4449.  02h    BYTE    number of outstanding receive datagrams
  4450.  03h    BYTE    number of outstanding ReceiveAnys
  4451.  04h    var    session structures (see below)
  4452.  
  4453. Format of structure "session":
  4454. Offset    Size    Description
  4455.  00h    BYTE    local session number
  4456.  01h    BYTE    state
  4457.         01h listen pending
  4458.         02h call pending
  4459.         03h session established
  4460.         04h hangup pending
  4461.         05h hangup done
  4462.         06h session aborted
  4463.  02h 16 BYTEs    local name
  4464.  12h 16 BYTEs    remote name
  4465.  22h    BYTE    number of outstanding receives
  4466.  23h    BYTE    number of outstanding sends/chainsends
  4467. --------N-5C---------------------------------
  4468. INT 5C - TOPS INTERFACE
  4469.     ES:BX -> Network Control Block
  4470. Note:    TOPS card uses DMA 1, 3 or none.
  4471. --------N-5C---------------------------------
  4472. INT 5C - ATALK.SYS - AppleTalk INTERFACE
  4473.     DX:BX -> control block (see below)
  4474. Return: none
  4475. Notes:    this driver can use any interrupt from 5Ch to 70h
  4476.     the signature 'AppleTalk' appears 16 bytes prior to the interrupt
  4477.       handler; this serves as the installation check
  4478. Index:    installation check;ATALK.SYS|installation check;AppleTalk interface
  4479.  
  4480. Values for command code:
  4481.  01h    "AT_INIT"        initialize the driver
  4482.  02h    "AT_KILL"
  4483.  03h    "AT_GETNETINFO" get current network info incl init status
  4484.  04h    "AT_GETCLOCKTICKS"
  4485.  05h    "AT_STARTTIMER"
  4486.  06h    "AT_RESETTIMER"
  4487.  07h    "AT_CANCELTIMER"
  4488.  10h    "LAP_INSTALL"
  4489.  11h    "LAP_REMOVE"
  4490.  12h    "LAP_WRITE"
  4491.  13h    "LAP_READ"
  4492.  14h    "LAP_CANCEL"
  4493.  20h    "DDP_OPENSOCKET"
  4494.  21h    "DDP_CLOSESOCKET"
  4495.  22h    "DDP_WRITE"
  4496.  23h    "DDP_READ"
  4497.  24h    "DDP_CANCEL"
  4498.  30h    "NBP_REGISTER"
  4499.  31h    "NBP_REMOVE"
  4500.  32h    "NBP_LOOKUP"
  4501.  33h    "NBP_CONFIRM"
  4502.  34h    "NBP_CANCEL"
  4503.  35h    "ZIP_GETZONELIST"
  4504.  36h    "ZIP_GETMYZONE"
  4505.  37h    "ZIP_TAKEDOWN"
  4506.  38h    "ZIP_BRINGUP"
  4507.  40h    "ATP_OPENSOCKET"
  4508.  41h    "ATP_CLOSESOCKET"
  4509.  42h    "ATP_SENDREQUEST"
  4510.  43h    "ATP_GETREQUEST"
  4511.  44h    "ATP_SENDRESPONSE"
  4512.  45h    "ATP_ADDRESPONSE"
  4513.  46h    "ATP_CANCELTRANS"
  4514.  47h    "ATP_CANCELRESPONSE"
  4515.  48h    "ATP_CANCELREQUEST"
  4516.  50h    "ASP_GETPARMS"
  4517.  51h    "ASP_CLOSESESSION"
  4518.  52h    "ASP_CANCEL"
  4519.  53h    "ASP_INIT"
  4520.  54h    "ASP_KILL"
  4521.  55h    "ASP_GETSESSION"
  4522.  56h    "ASP_GETREQUEST"
  4523.  57h    "ASP_CMDREPLY"
  4524.  58h    "ASP_WRTCONTINUE"
  4525.  59h    "ASP_WRTREPLY"
  4526.  5Ah    "ASP_CLOSEREPLY"
  4527.  5Bh    "ASP_NEWSTATUS"
  4528.  5Ch    "ASP_ATTENTION"
  4529.  5Dh    "ASP_GETSTATUS"
  4530.  5Eh    "ASP_OPENSESSION"
  4531.  5Fh    "ASP_COMMAND"
  4532.  60h    "ASP_WRITE"
  4533.  61h    "ASP_GETATTENTION"
  4534.  70h    "PAP_OPEN"
  4535.  71h    "PAP_CLOSE"
  4536.  72h    "PAP_READ"
  4537.  73h    "PAP_WRITE"
  4538.  74h    "PAP_STATUS"
  4539.  75h    "PAP_REGNAME"
  4540.  76h    "PAP_REMNAME"
  4541.  77h    "PAP_INIT"
  4542.  78h    "PAP_NEWSTATUS"
  4543.  79h    "PAP_GETNEXTJOB"
  4544.  7Ah    "PAP_KILL"
  4545.  7Bh    "PAP_CANCEL"
  4546.  
  4547. Format of AppleTalk control block:
  4548. Offset    Size    Description
  4549.  00h    WORD    command code (see above)
  4550.         OR with the following flags
  4551.         8000h start command then return
  4552.         4000h wait for interrupt service to complete
  4553.  02h    WORD    returned status
  4554.         0000h success (already initialized if func 01h)
  4555.  04h    DWORD    pointer to completion function
  4556.  08h    WORD    network number
  4557.  0Ah    BYTE    node ID
  4558. ---if general func (01h,03h), control block continues:
  4559.  0Bh    BYTE    "inf_abridge"
  4560.  0Ch    WORD    "inf_config"
  4561.  0Eh    DWORD    pointer to buffer
  4562.  12h    WORD    buffer size
  4563. ---if DDP function (20h-24h), control block continues:
  4564.  0Bh    BYTE    "ddp_addr_socket"
  4565.  0Ch    BYTE    "ddp_socket"
  4566.  0Dh    BYTE    "ddp_type"
  4567.  0Eh    DWORD    pointer to buffer
  4568.  12h    WORD    buffer size
  4569.  14h    BYTE    "ddp_chksum"
  4570. ---if Name Binding Protocol (30h-34h), control block continues:
  4571.  0Bh    BYTE    "nbp_addr_socket"
  4572.  0Ch    WORD    "nbp_toget"
  4573.  0Eh    DWORD    pointer to buffer
  4574.  12h    WORD    buffer size
  4575.  14h    BYTE    "nbp_interval"
  4576.  15h    BYTE    "nbp_retry"
  4577.  16h    DWORD    "nbp_entptr"
  4578. ---if AppleTalk Transaction Protocol (42h), control block continues:
  4579.  0Bh    BYTE    "atp_addr_socket"
  4580.  0Ch    WORD    "atp_socket"
  4581.  0Eh    DWORD    pointer to buffer
  4582.  12h    WORD    buffer size
  4583.  14h    BYTE    "atp_interval"
  4584.  15h    BYTE    "atp_retry"
  4585.  16h    BYTE    ATP flags
  4586.         bit 5: exactly one transaction
  4587.  17h    BYTE    "atp_seqbit"
  4588.  18h    BYTE    transaction ID
  4589.  19h  4 BYTEs    ATP user bytes
  4590.  1Dh    BYTE    number of BDS buffers
  4591.  1Eh    BYTE    number of BDS responses
  4592.  1Fh    DWORD    pointer to BDS buffers (see below)
  4593.  
  4594. Format of Name Binding Protocol Name-to-Address binding entries for NBP_LOOKUP:
  4595. Offset    Size    Description
  4596.  00h    WORD    "tup_address_network"
  4597.  02h    BYTE    "tup_address_notid"
  4598.  03h    BYTE    "tup_address_socket"
  4599.  04h    BYTE    "tup_enum"
  4600.  05h 99 BYTEs    name
  4601.  
  4602. Format of BDS entries:
  4603. Offset    Size    Description
  4604.  00h    DWORD    pointer to buffer
  4605.  04h    WORD    size of buffer
  4606.  06h    WORD    BDS data size
  4607.  08h  4 BYTEs    "bds_userbytes"
  4608. --------N-5C---------------------------------
  4609. INT 5C - IBM 802.2 INTERFACE (LLC)
  4610.     ES:BX -> CCB (see below)
  4611. Return: none
  4612.  
  4613. Format of CCB:
  4614. Offset    Size    Description
  4615.  00h    BYTE    adapter
  4616.  01h    BYTE    command code
  4617.  02h    BYTE    return code
  4618.  03h    BYTE    work
  4619.  04h    DWORD    pointer to ???
  4620.  08h    DWORD    pointer to completion function???
  4621.  0Ch    DWORD    pointer to parameters???
  4622. --------N-5C---------------------------------
  4623. INT 5C - $25 LAN - INSTALLATION CHECK
  4624. Notes:    current versions only check whether the vector is 0000h:0000h or not
  4625.     future versions are supposed to have the signature "NET" in the three
  4626.       bytes preceding the INT 5C handler
  4627. --------N-5C04-------------------------------
  4628. INT 5C - $25 LAN - CHECK IF CONNECTION ALIVE
  4629.     AH = 04h
  4630.     AL = COM port (0 = default)
  4631.     CX = wait count in character times (should be at least 100)
  4632. Return: ZF set if link alive
  4633. --------H-5D---------------------------------
  4634. INT 5D - IRQ13 relocated by DESQview 2.26+
  4635. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4636. SeeAlso: INT 50"DESQview",INT 75
  4637. --------H-5D---------------------------------
  4638. INT 5D - IRQ5 relocated by DoubleDOS
  4639. SeeAlso: INT 0D,INT 5C"DoubleDOS"
  4640. --------H-5E---------------------------------
  4641. INT 5E - IRQ14 relocated by DESQview 2.26+
  4642. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4643. SeeAlso: INT 50"DESQview",INT 76
  4644. --------H-5E---------------------------------
  4645. INT 5E - IRQ6 relocated by DoubleDOS
  4646. SeeAlso: INT 0E,INT 5D"DoubleDOS"
  4647. --------H-5F---------------------------------
  4648. INT 5F - IRQ15 relocated by DESQview 2.26+
  4649. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4650. SeeAlso: INT 50"DESQview",INT 77
  4651. --------H-5F---------------------------------
  4652. INT 5F - IRQ7 relocated by DoubleDOS
  4653. SeeAlso: INT 0F,INT 5E"DoubleDOS"
  4654. --------b-5F00-------------------------------
  4655. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET VIDEO MODE
  4656.     AH = 00h
  4657.     AL = video mode
  4658.         07h text, system manager compliant
  4659.         20h 240x128 mono graphics, system manager compliant
  4660.         87h text, not system manager compliant
  4661.         A0h 240x128 mono graphics, not system manager compliant
  4662. Note:    the defaults after setting the mode to graphics are (0,0) logical
  4663.       origin, full-screen clip region, (0,0) pen location, pen color 1,
  4664.       pixel replacement FORCE, line type and fill mask all bits set
  4665. SeeAlso: INT 0F"HP 95LX",INT 10/AH=00h,INT 15/AX=4DD4h
  4666. --------b-5F01-------------------------------
  4667. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET FILL MASK
  4668.     AH = 01h
  4669.     ES:DI -> 8-byte fill mask
  4670. Note:    the fill mask represents an 8x8 pixel box and is repeated as necessary
  4671.       when drawing filled rectangles; it is always aligned with the byte
  4672.       boundaries of video memory, regardless of the actual boundaries of
  4673.       the rectangle
  4674. SeeAlso: AH=02h
  4675. --------b-5F02-------------------------------
  4676. INT 5F - HP 95LX GRAPHICS PRIMITIVES - GET CURRENT GRAPHICS INFORMATION
  4677.     AH = 02h
  4678.     ES:DI -> graphics info record (see below)
  4679. Return: DX:AX -> filled graphics info record (for return to high-level langs)
  4680.  
  4681. Format of graphics info record:
  4682. Offset    Size    Description
  4683.  00h    BYTE    current video mode
  4684.  01h    BYTE    default video mode
  4685.  02h    WORD    display width in pixels
  4686.  04h    WORD    display height in pixels
  4687.  06h    WORD    current pen column
  4688.  08h    WORD    current pen row
  4689.  0Ah    WORD    current line type
  4690.  0Ch    WORD    current replacement rule
  4691.  0Eh    WORD    current pen color
  4692.  10h    WORD    current leftmost column of clip region
  4693.  12h    WORD    current rightmost column of clip region
  4694.  14h    WORD    current topmost row of clip region
  4695.  16h    WORD    current bottommost row of clip region
  4696.  18h    WORD    current column of logical origin
  4697.  1Ah    WORD    current row of logical origin
  4698.  1Ch  8 BYTEs    current fill mask
  4699. --------b-5F03-------------------------------
  4700. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET LOGICAL ORIGIN
  4701.     AH = 03h
  4702.     CX = column
  4703.     DX = row
  4704. SeeAlso: AH=04h
  4705. --------b-5F04-------------------------------
  4706. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET CLIP REGION
  4707.     AH = 04h
  4708.     CX = left-most column
  4709.     DX = top-most row
  4710.     SI = right-most column
  4711.     DI = bottom-most row
  4712. SeeAlso: AH=03h
  4713. --------b-5F05-------------------------------
  4714. INT 5F - HP 95LX GRAPHICS PRIMITIVES - DRAW RECTANGLE
  4715.     AH = 05h
  4716.     AL = fill type
  4717.         00h outline, using current line type and color
  4718.         01h solid, using current color
  4719.         02h pattern, using current fill mask and color
  4720.     DX,CX = row,column of other corner of rectangle
  4721. Note:    the rectangle is drawn starting at the current pen position
  4722. SeeAlso: AH=01h,AH=06h,AH=07h
  4723. --------b-5F06-------------------------------
  4724. INT 5F - HP 95LX GRAPHICS PRIMITIVES - DRAW LINE
  4725.     AH = 06h
  4726.     DX,CX = row,column of end point
  4727. Note:    the line is drawn starting at the current pen position
  4728. SeeAlso: AH=05h,AH=07h
  4729. --------b-5F07-------------------------------
  4730. INT 5F - HP 95LX GRAPHICS PRIMITIVES - PLOT POINT
  4731.     AH = 07h
  4732.     DX,CX = row,column of point
  4733. Note:    also sets pen position to the specified point
  4734. SeeAlso: AH=06h,AH=08h,AH=0Ch
  4735. --------b-5F08-------------------------------
  4736. INT 5F - HP 95LX GRAPHICS PRIMITIVES - MOVE PEN
  4737.     AH = 08h
  4738.     DX,CX = row,column of new pen position
  4739. SeeAlso: AH=07h,AH=09h
  4740. --------b-5F09-------------------------------
  4741. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET PEN COLOR
  4742.     AH = 09h
  4743.     AL = new color (00h = white, 01h = black)
  4744. SeeAlso: AH=08h,AH=0Ah,AH=0Bh
  4745. --------b-5F0A-------------------------------
  4746. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET REPLACEMENT RULE
  4747.     AH = 0Ah
  4748.     AL = new replacement rule
  4749.         00h force
  4750.         01h AND
  4751.         02h OR
  4752.         03h XOR
  4753. SeeAlso: AH=01h,AH=09h,AH=0Bh
  4754. --------b-5F0B-------------------------------
  4755. INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET LINE TYPE
  4756.     AH = 0Bh
  4757.     CX = new line type
  4758. Note:    the line type specifies 16 bits which are repeated over and over while
  4759.       drawing the pixels of a line
  4760. SeeAlso: AH=09h,AH=0Ah
  4761. --------b-5F0C-------------------------------
  4762. INT 5F - HP 95LX GRAPHICS PRIMITIVES - GET PIXEL
  4763.     AH = 0Ch
  4764.     DX,CX = row,column of pixel to read
  4765. Return: AX = pixel color
  4766. SeeAlso: AH=07h
  4767. --------b-5F0D-------------------------------
  4768. INT 5F - HP 95LX GRAPHICS PRIMITIVES - GET IMAGE
  4769.     AH = 0Dh
  4770.     DX,CX = row,column of first corner
  4771.     BP,SI = row,column of second corner
  4772.     ES:DI -> image buffer (see below)
  4773. Note:    the specified corners are included in the saved image
  4774. SeeAlso: AH=0Eh
  4775.  
  4776. Format of image buffer:
  4777. Offset    Size    Description
  4778.  00h    WORD    number of planes (always 01h on HP 95LX)
  4779.  02h    WORD    number of bits/pixel (always 01h on HP 95LX)
  4780.  04h    WORD    image width in pixels
  4781.  06h    WORD    image height in pixels
  4782.  08h  N BYTEs    image data
  4783.         requires (WIDTH+7)/8 * HEIGHT bytes
  4784. --------b-5F0E-------------------------------
  4785. INT 5F - HP 95LX GRAPHICS PRIMITIVES - PUT IMAGE
  4786.     AH = 0Eh
  4787.     AL = replacement rule
  4788.         bit 2: invert image before applying rule
  4789.         bits 1-0:  00 force
  4790.                01 AND
  4791.                10 OR
  4792.                11 XOR
  4793.     DX,CX = row,column of top left corner
  4794.     ES:DI -> image buffer (see AH=0Dh)
  4795. Note:    if the specified image does not fit completely on the screen, this call
  4796.       does nothing
  4797. SeeAlso: AH=0Dh
  4798. --------b-5F0F-------------------------------
  4799. INT 5F - HP 95LX GRAPHICS PRIMITIVES - WRITE TEXT
  4800.     AH = 0Fh
  4801.     AL = rotate flag (if nonzero, rotate 90 degrees counter-clockwise)
  4802.     DX,CX = row,column of first character's top left corner
  4803.     ES:DI -> ASCIZ text
  4804. --------!------------------------------------
  4805.