home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 12 / CD_ASCQ_12_0294.iso / maj / 108 / chapter.005 < prev    next >
Text File  |  1994-01-19  |  181KB  |  3,594 lines

  1.  
  2.    **  Programmer's Technical Reference for MSDOS and the IBM PC **
  3.             USA copyright TXG 392-616  ALL RIGHTS RESERVED
  4.  ──────────────────────────┤ DOSREF (tm) ├───────────────────────────
  5.                  ISBN 1-878830-02-3 (disk-based text)
  6.                 Copyright (c) 1987, 1994 Dave Williams
  7.                    ┌─────────────────────────────┐
  8.                    │ Shareware Version, 01/20/94 │
  9.                    │  Please Register Your Copy  │
  10.                    └─────────────────────────────┘
  11.  
  12.                         C H A P T E R   F I V E
  13.  
  14.                       INTERRUPTS 22H THROUGH 0FFH
  15.  
  16.  
  17.                             C O N T E N T S
  18.  
  19. Interrupt 22h   Terminate Address .............................. 5**1
  20. Interrupt 23h   Ctrl-Break Exit Address ........................ 5**2
  21. Interrupt 24h   Critical Error Handler ......................... 5**3
  22. Interrupt 25h   Absolute Disk Read ............................. 5**4
  23. Interrupt 26h   Absolute Disk Write ............................ 5**5
  24. Interrupt 27h   Terminate And Stay Resident .................... 5**6
  25. Interrupt 28h   DOS Idle Interrupt ............................. 5**7
  26. Interrupt 29h   Fast Screen Write .............................. 5**8
  27. Interrupt 2Ah   Microsoft Networks - Session Layer Interrupt ... 5**9
  28. Interrupt 2Bh   Unknown ........................................ 5**10
  29. Interrupt 2Ch   Unknown ........................................ 5**11
  30. Interrupt 2Dh   Unknown ........................................ 5**12
  31. Interrupt 2Eh   Alternate EXEC (DOS 2.0+) ...................... 5**13
  32. Interrupt 2Fh   Multiplex Interrupt ............................ 5**14
  33. Interrupt 30h   FAR jump instruction for CP/M-style calls ...... 5**15
  34. Interrupt 31h   Unknown ........................................ 5**16
  35. Interrupt 32h   Unknown ........................................ 5**17
  36. Interrupt 33h   Used by Microsoft Mouse Driver Function Calls .. 5**18
  37. Interrupt 34h   Turbo/Microsoft langs - Floating Point emul. ... 5**19
  38. Interrupt 35h   Turbo/Microsoft langs - Floating Point emul. ... 5**20
  39. Interrupt 36h   Turbo/Microsoft langs - Floating Point emul. ... 5**21
  40. Interrupt 37h   Turbo/Microsoft langs - Floating Point emul. ... 5**22
  41. Interrupt 38h   Turbo/Microsoft langs - Floating Point emul. ... 5**23
  42. Interrupt 39h   Turbo/Microsoft langs - Floating Point emul. ... 5**24
  43. Interrupt 3Ah   Turbo/Microsoft langs - Floating Point emul. ... 5**25
  44. Interrupt 3Bh   Turbo/Microsoft langs - Floating Point emul. ... 5**26
  45. Interrupt 3Ch   Turbo/Microsoft langs - Floating Point emul. ... 5**27
  46. Interrupt 3Dh   Turbo/Microsoft langs - Floating Point emul. ... 5**28
  47. Interrupt 3Eh   Turbo/Microsoft langs - Floating Point emul. ... 5**29
  48. Interrupt 3Fh   Overlay Manager Interrupt (Microsoft LINK.EXE) . 5**30
  49. Interrupt 40h   Hard Disk BIOS ................................. 5**31
  50. Interrupt 41h   Hard Disk Parameters ........................... 5**32
  51. Interrupt 42h   Pointer to screen BIOS entry ................... 5**33
  52. Interrupt 43h   Pointer to EGA Graphics Character Table ........ 5**34
  53. Interrupt 44h   Pointer to graphics character table ............ 5**35
  54. Interrupt 45h   Reserved by IBM  (not initialized) ............. 5**36
  55. Interrupt 46h   Pointer to second hard disk parameter block .... 5**37
  56. Interrupt 47h   Reserved by IBM  (not initialized) ............. 5**38
  57. Interrupt 48h   Cordless Keyboard Translation .................. 5**39
  58. Interrupt 49h   Non-kbd Scan Code Translation Table Addr (PCjr)  5**40
  59. Interrupt 4Ah   Real-Time Clock Alarm (Convertible, PS/2) ...... 5**41
  60. Interrupt 4Bh   Reserved by IBM  (not initialized) ............. 5**42
  61. Interrupt 4Ch   Reserved by IBM  (not initialized) ............. 5**43
  62. Interrupt 4Dh   Reserved by IBM  (not initialized) ............. 5**44
  63. Interrupt 4Eh   Reserved by IBM  (not initialized) ............. 5**45
  64. Interrupt 4Fh   Reserved by IBM  (not initialized) ............. 5**46
  65. Interrupt 50-57 IRQ0-IRQ7 Relocation ........................... 5**47
  66. Interrupt 58h   Reserved by IBM  (not initialized) ............. 5**48
  67. Interrupt 59h   Reserved by IBM  (not initialized) ............. 5**49
  68. Interrupt 5Ah   Reserved by IBM  (not initialized)  ............ 5**50
  69. Interrupt 5Bh   Reserved by IBM  (not initialized) ............. 5**51
  70. Interrupt 5Ah   Cluster Adapter BIOS entry address ............. 5**52
  71. Interrupt 5Bh   Reserved by IBM  (not initialized) ............. 5**53
  72. Interrupt 5Ch   NETBIOS interface entry port, TOPS ............. 5**54
  73. Interrupt 5Dh   Reserved by IBM  (not initialized) ............. 5**55
  74. Interrupt 5Eh   Reserved by IBM  (not initialized) ............. 5**56
  75. Interrupt 5Fh   Reserved by IBM  (not initialized) ............. 5**57
  76. Interrupt 60h-67h  User Program Interrupts ..................... 5**58
  77. Interrupt 60h   Network OS Interface ........................... 5**59
  78. Interrupt 67h   Expanded Memory Board Driver Interrupt ......... 5**60
  79. Interrupt 68h   Not Used  (not initialized) .................... 5**61
  80. Interrupt 69h   Not Used  (not initialized) .................... 5**62
  81. Interrupt 6Ah   Not Used  (not initialized) .................... 5**63
  82. Interrupt 6Bh   Not Used  (not initialized) .................... 5**64
  83. Interrupt 6Ch   System Resume Vector (Convertible) ............. 5**65
  84. Interrupt 6Dh   Not Used  (not initialized) .................... 5**66
  85. Interrupt 6Eh   Not Used  (not initialized) .................... 5**67
  86. Interrupt 6Fh   10-Net API...................................... 5**68
  87. Interrupt 70h   IRQ 8, Real Time Clock Int (AT, XT/286, PS/2) .. 5**69
  88. Interrupt 71h   IRQ 9, Redirected to IRQ 8 (AT, XT/286, PS/2) .. 5**70
  89. Interrupt 72h   IRQ 10  (AT, XT/286, PS/2)  Reserved ........... 5**71
  90. Interrupt 73h   IRQ 11  (AT, XT/286, PS/2)  Reserved ........... 5**72
  91. Interrupt 74h   IRQ 12  Mouse Interrupt (PS/2) ................. 5**73
  92. Interrupt 75h   IRQ 13, Coprocessor Error (AT) ................. 5**74
  93. Interrupt 76h   IRQ 14, Hard Disk Controller (AT, XT/286, PS/2)  5**75
  94. Interrupt 77h   IRQ 15 (AT, XT/286, PS/2)  Reserved ............ 5**76
  95. Interrupt 78h   Not Used ....................................... 5**77
  96. Interrupt 79h   Not Used ....................................... 5**78
  97. Interrupt 7Ah   Reserved ....................................... 5**79
  98. Interrupt 7Bh-7Eh  Not Used by IBM ............................. 5**80
  99. Interrupt 7Ch   REXX-PC API .................................... 5**81
  100. Interrupt 7Fh   IBM 8514/A Graphics Adapter API ................ 5**82
  101. Interrupt 80h-85h  Reserved by BASIC ........................... 5**83
  102. Interrupt 86h   Int 18 when relocated by NETBIOS ............... 5**84
  103. Interrupt 86h-0F0h  Used by BASIC when interpreter is running .. 5**85
  104. Interrupt 0A4h  Right Hand Man API ............................. 5**86
  105. Interrupt 0D4h  PC-MOS/386 API ................................. 5**87
  106. Interrupt 0E0h  Digital Research CP/M-86 function calls ........ 5**88
  107. Interrupt 0E1h  PC Cluster Disk Server Information ............. 5**89
  108. Interrupt 0E2h  PC Cluster Program ............................. 5**90
  109. Interrupt 0E4h  Logitech Modula-2 v2.0   Monitor Entry ......... 5**91
  110. Interrupt 0E5h  Not Used ....................................... 5**92
  111. Interrupt 0E6h  Not Used ....................................... 5**93
  112. Interrupt 0E7h  Not Used ....................................... 5**94
  113. Interrupt 0E8h  Not Used ....................................... 5**95
  114. Interrupt 0E9h  Not Used ....................................... 5**96
  115. Interrupt 0EAh  Not Used ....................................... 5**97
  116. Interrupt 0EBh  Not Used ....................................... 5**98
  117. Interrupt 0ECh  Not Used ....................................... 5**99
  118. Interrupt 0EDh  Not Used ....................................... 5**100
  119. Interrupt 0EEh  Not Used ....................................... 5**101
  120. Interrupt 0EFh  GEM interface (Digital Research) ............... 5**102
  121. Interrupt 0F0h  unknown ........................................ 5**103
  122. Interrupts 0F1h-0FFh  (absolute addresses 3C4h-3FFh) ........... 5**104
  123. Interrupt 0F4h  Not Used ............ .......................... 5**105
  124. Interrupt 0F5h  Not Used ............ .......................... 5**106
  125. Interrupt 0F8h  Set Shell Interrupt (OEM) ...................... 5**107
  126. Interrupt 0F9h  Reserved ....................................... 5**108
  127. Interrupt 0FAh  USART ready (RS-232C) .......................... 5**109
  128. Interrupt 0FBh  USART RS ready (keyboard) ...................... 5**110
  129. Interrupt 0FCh  Unknown ........................................ 5**111
  130. Interrupt 0FDh  reserved for user interrupt .................... 5**112
  131. Interrupt 0FEh  reserved by IBM ................................ 5**113
  132. Interrupt 0FFh  reserved by IBM ................................ 5**114
  133.  
  134.  
  135. ┌─────────────────────────────────────────────────────────────────────┐
  136. │Interrupt 22h   Terminate Address ............................. 5**1 │
  137. └─────────────────────────────────────────────────────────────────────┘
  138. (0:0088h)
  139.   This interrupt transfers control to the far (dword) address at this 
  140. interrupt location when an application program terminates.  The default 
  141. address for this interrupt is 0:0088h through 0:008Bh.  This address is 
  142. copied into the program's Program Segment Prefix at bytes 0Ah through 
  143. 0Dh at the time the segment is created and is restored from the PSP 
  144. when the program terminates.  The calling program is normally 
  145. COMMAND.COM or an application.  Do not issue this interrupt directly, 
  146. as the EXEC function call does this for you.  If an application spawns 
  147. a child process, it must set the Terminate Address prior to issuing 
  148. the EXEC function call, otherwise when the second program terminated 
  149. it would return to the calling program's Terminate Address rather than 
  150. its own.  This address may be set with int 21, function 25h. 
  151.  
  152.  
  153. ┌─────────────────────────────────────────────────────────────────────┐
  154. │Interrupt 23h   Ctrl-Break Exit Address ....................... 5**2 │
  155. └─────────────────────────────────────────────────────────────────────┘
  156. (0:008Ch)
  157.   If the user enters a Ctrl-Break during STDIN, STDOUT, STDPRN, or 
  158. STDAUX, int 23h is executed.  If BREAK is on, int 23h is checked on 
  159. MOST function calls (notably 06h).  If the user written Ctrl-Break 
  160. routine saves all registers, it may end with a return-from-interrupt 
  161. instruction (IRET) to continue program execution.  If the user-written 
  162. interrupt program returns with a long return, the carry flag is used 
  163. to determine whether the program will be aborted.  If the carry flag is 
  164. set, the program is aborted, otherwise execution continues (as with a 
  165. return by IRET).  If the user-written Ctrl-Break interrupt uses 
  166. function calls 09h or 0Ah, (Display String or Buffered Keyboard Input) 
  167. then a three-byte string of 03h-0Dh-0Ah (ETX/CR/LF) is sent to STDOUT. 
  168. If execution is continued with an IRET, I/O continues from the start 
  169. of the line.  When the interrupt occurs, all registers are set to the 
  170. value they had when the original function call to DOS was made. 
  171.  
  172.   There are no restrictions on what the Ctrl-Break handler is allowed 
  173. to do, including DOS function calls, as long as the registers are 
  174. unchanged if an IRET is used. 
  175.  
  176.   If the program creates a new segment and loads a second program 
  177. which itself changes the Ctrl-Break address, the termination of the 
  178. second program and return to the first causes the Ctrl-Break address 
  179. to be restored from the PSP to the value it had before execution of 
  180. the second program. 
  181.  
  182.   DOS can check for a Ctrl-C at a couple of different places.  In at 
  183. least some cases, the value in the AX register on entry to the int 23h 
  184. handler is the same as it was on the original entry to int 21h. 
  185.  
  186.   COMMAND.COM makes use of this fact in its int 23h handler.  When 
  187. running a batch file, if you press Ctrl-C it prompts you with the 
  188. "Terminate batch job (Y/N)?" question.  If you press Ctrl-C in 
  189. response to that question, the int 23h handler notices that it's being 
  190. called recursively (having set an internal flag), and uses the value 
  191. of AX to determine how far it had gotten on the previous pass.  If you 
  192. have not responded to the query yet, it asks it again; otherwise it 
  193. just terminates the current program. 
  194.  
  195.   This could cause a problem in a program which was catching int 23h 
  196. so that it could release EMS or other resources  on exit, then pass it 
  197. on to the original handler.  When called a second time, it would 
  198. correctly notice that it had already cleaned up and wouldn't do it 
  199. again, but by the time it got to the original handler, AX would be 
  200. trashed.  The result would be the standard "Memory allocation 
  201. error/Cannot load COMMAND, system halted". 
  202.  
  203.   Apparently, if you want to catch int 23h but also pass it on to the 
  204. original handler, you should either save and restore registers, or 
  205. restore the original vector on the first trap so you don't get invoked 
  206. again. 
  207.  
  208.  
  209.  
  210. ┌─────────────────────────────────────────────────────────────────────┐
  211. │Interrupt 24h   Critical Error Handler ........................ 5**3 │
  212. └─────────────────────────────────────────────────────────────────────┘
  213. (0:0090h)
  214.  
  215.   When an unrecoverable I/O error occurs, control is transferred to an 
  216. error handler in the resident part of COMMAND.COM with an int 24h.  
  217. This may be the standard DOS error handler (Abort, Retry, Ignore, 
  218. Fail?) or a user-written routine. 
  219.  
  220.   On entry to the error handler, AH will have its bit 7=0 (high order 
  221. bit) if the error was a disk error (probably the most common error), 
  222. bit 7=1 if not. 
  223.  
  224.   BP:SI contains the address of a Device Header Control Block from 
  225. which additional information can be retrieved (see below).  The 
  226. register is set up for a retry operation and an error code is in the 
  227. lower half of the DI register with the upper half undefined. 
  228.  
  229.   DOS places the following items on the user stack.  The stack 
  230. contains the following from top to bottom: 
  231.  
  232.         IP   │   DOS registers from the issuing int 24h
  233.         CS   │
  234.       flags  │
  235.       ───────┼───────────────────────────────────────────────────────
  236.         AX   │   user registers at time of original int 21h request
  237.         BX   │
  238.         CX   │
  239.         SI   │
  240.         DI   │
  241.         BP   │
  242.         DS   │
  243.         ES   │
  244.       ───────┼───────────────────────────────────────────────────────
  245.         IP   │   original int 21h from the user to DOS
  246.         CS   │
  247.       flags  │
  248.  
  249.   To reroute the critical error handler to a user-written critical
  250. error handler, the following should be done:
  251.  
  252. Before an int 24h occurs:
  253. 1) The user application initialization code should save the int 24h
  254.    vector and replace the vector with one pointing to the user error
  255.    routine.
  256.  
  257. When the int 24h occurs:
  258. 2) When the user error routine received control it should push the flag
  259.    registers onto the stack and execute a far call to the original int
  260.    24h vector saved in step 1.
  261. 3) DOS gives the appropriate prompt, and waits for user input (Abort,
  262.    Retry, Ignore, Fail).  After the user input, DOS returns control to
  263.    the user error routine instruction following the far call.
  264. 4) The user error routine can now do any tasks necessary.  To return
  265.    to the original application at the point the error occurred, the
  266.    error routine needs to execute an IRET instruction.  Otherwise, the
  267.    user error routine should remove the IP, CS, and flag registers from
  268.    the stack.  Control can then be passed to the desired routine.
  269.  
  270.   Int 24h provides the following values in registers on entry to the
  271. interrupt handler:
  272.  
  273. entry   AH      status byte (bits)
  274.                 7       0       disk I/O hard error
  275.                         1       other error - if block device, bad FAT
  276.                                 - if char device, code in DI
  277.                 6       unused
  278.                 5       0       if IGNORE is not allowed
  279.                         1       if IGNORE is allowed
  280.                 4       0       if RETRY  is not allowed
  281.                         1       if RETRY  is allowed
  282.                 3       0       if FAIL   is not allowed
  283.                         1       if FAIL   is allowed
  284.                 2 \     disk area of error  00 = DOS area  01 = FAT
  285.                 1 /                         10 = root dir  11 = data area
  286.                 0       0       if read operation
  287.                         1       if write operation
  288.         AL      drive number if AH bit 7 = 1, otherwise undefined
  289.                 If it is a hard error on disk (AH bit 7=0), register AL
  290.                 contains the failing drive number (0=A:, 1=B:, etc.).
  291.         BP:SI   address of a Device Header Control Block for which error
  292.                 occurred. Block device if high bit of BP:SI+4 = 1
  293.         DI      (low byte) error code (note: high byte is undefined)
  294.                error code                 description
  295.                 00h             attempt to write on write-protected diskette
  296.                 01h             unknown unit
  297.                 02h             drive not ready
  298.                 03h             unknown command
  299.                 04h             data error (bad CRC)
  300.                 05h             bad request structure length
  301.                 06h             seek error
  302.                 07h             unknown media type
  303.                 08h             sector not found
  304.                 09h             printer out of paper
  305.                 0Ah             write fault
  306.                 0Bh             read fault
  307.                 0Ch             general failure
  308.                 0Fh             invalid disk change      (DOS 3.0+)
  309.                 10h             FCB unavailable          (DOS 3.0+)
  310.                 11h             sharing buffer overflow  (DOS 3.0+)
  311.  
  312.         note: Only codes 00h through 0Ch are defined in DR-DOS 3.32.
  313.  
  314. The handler must return this information:
  315.  
  316.   The registers are set such that if an IRET is executed, DOS responds
  317. according to (AL) as follows:
  318. AL      00h     IGNORE the error
  319.         01h     RETRY the operation
  320.         02h     ABORT via int 22h (jump to terminate address)
  321.         03h     FAIL the system call that is in progress (DOS 3.0+)
  322. note 1) Be careful when choosing to ignore a response because this
  323.         causes DOS to think that an operation has completed
  324.         successfully when it may not have.
  325.      2) If the error was a character device, the contents of AL are
  326.         invalid.
  327.      3) Early PS/2 BIOSes did not perform a retry on disk errors until
  328.         a disk had been read at least once after boot-up.
  329.  
  330.  
  331. Other Errors
  332.  
  333.   If AH bit 7=1, the error occurred on a character device, or was the 
  334. result of a bad memory image of the FAT.  The device header passed in 
  335. BP:SI can be examined to determine which case exists.  If the 
  336. attribute byte high-order bit indicates a block device, then the error 
  337. was a bad FAT.  Otherwise, the error is on a character device. 
  338.  
  339.   If a character device is involved, the contents of AL are 
  340. unpredictable, and the error code is in DI as above. 
  341.  
  342. note 1) Before giving this routine control for disk errors, DOS 
  343.         performs several retries.  The number of retries varies 
  344.         according to the DOS version. 
  345.      2) For disk errors, this exit is taken only for errors occurring 
  346.         during an int 21h function call.  It is not used for errors 
  347.         during an int 25h or 26h. 
  348.      3) This routine is entered in a disabled state. 
  349.      4) All registers must be preserved. 
  350.      5) This interrupt handler should refrain from using DOS function 
  351.         calls.  If necessary, it may use calls 01h through 12h.  Use 
  352.         of any other call destroys the DOS stack and leaves DOS in an 
  353.         unpredictable state. 
  354.      6) The interrupt handler must not change the contents of the 
  355.         device header. 
  356.      7) If the interrupt handler handles errors itself rather than 
  357.         returning to DOS, it should restore the application program's 
  358.         registers from the stack, remove all but the last three words 
  359.         on the stack, then issue an IRET.  This will return to the 
  360.         program immediately after the int 21h that experienced the 
  361.         error.  Note that if this is done DOS will be in an unstable 
  362.         state until a function call higher than 12h is issued, 
  363.         therefore not recommended. 
  364.      8) For DOS 3.x+, IGNORE requests (AL=0) are converted to FAIL for 
  365.         critical errors that occur on FAT or DIR sectors. 
  366.      9) For DOS 3.10 up, IGNORE requests (AL=0) are converted to FAIL 
  367.         requests for network critical errors (50-79). 
  368.     10) The device header pointed to by BP:SI is as follows: 
  369.        dword    pointer to next device (0FFFFh if last device)
  370.         word    attributes:
  371.                 bit     15      1  if character device.
  372.                                    If bit 15 is 1:
  373.                                    bit 0 = 1 if current standard input
  374.                                    bit 1 = 1 if current standard output
  375.                                    bit 2 = 1 if current NULL device
  376.                                    bit 3 = 1 if current CLOCK device
  377.                                 0  if block device.
  378.                 bit     14      is the IOCTL bit
  379.         word    pointer to device driver strategy entry point
  380.         word    pointer to device driver interrupt entry point
  381.       8 bytes   character device named field for block devices.  The
  382.                 first byte is the number of units.
  383.     11) To tell if the error occurred on a block or character device,
  384.         look at bit 15 in the attribute field (WORD at BP:SI+4).
  385.     12) If the name of the character device is desired, look at the
  386.         eight bytes starting at BP:SI+10.
  387.  
  388.  
  389. Handling of Invalid Responses (DOS 3.0+)
  390.  
  391.      A) If IGNORE (AL=0) is specified by the user and IGNORE is not 
  392.         allowed (bit 5=0), make the response FAIL (AL=3). 
  393.      B) If RETRY (AL=1) is specified by the user and RETRY is not 
  394.         allowed (bit 4=0), make the response FAIL (AL=3). 
  395.      C) If FAIL (AL=3) is specified by the user and FAIL is not 
  396.         allowed (bit 3=0), make the response ABORT. (AL=2) 
  397.  
  398.  
  399.  
  400.  
  401. ┌─────────────────────────────────────────────────────────────────────┐
  402. │Interrupt 25h   Absolute Disk Read ............................ 5**4 │
  403. │Interrupt 26h   Absolute Disk Write ........................... 5**5 │
  404. └─────────────────────────────────────────────────────────────────────┘
  405. (0:0094h, 0:0098h)
  406.  
  407.   These transfer control directly to the disk device driver.  On 
  408. return, the original flags are still on the stack (put there by the 
  409. INT instruction).  This is necessary because return information is 
  410. passed back in the current flags. All registers except the segment 
  411. registers are destroyed by these calls. 
  412.  
  413.   These interrupts should be avoided for software that is intended to 
  414. run on a network, as they may cause troubles in network environments. 
  415.  
  416.   PC-MOS/386 provides these services only for compatibility with 
  417. existing DOS-mode apps.  25h/26h are not available for native mode 
  418. 386-mode DOS apps. 
  419.  
  420.   The number of sectors specified is transferred between the given 
  421. drive and the transfer address.  Logical sector numbers are obtained 
  422. by numbering each sector sequentially starting from track 0, head 0, 
  423. sector 1 (logical sector 0) and continuing along the same head, then 
  424. to the next head until the last sector on the last head of the track 
  425. is counted.  Thus, logical sector 1 is track 0, head 0, sector 2; 
  426. logical sector 2 is track 0, head 0, sector 3; and so on.  Numbering 
  427. then continues wih sector 1 on head 0 of the next track.  Note that 
  428. although the sectors are sequentially numbered (for example, sectors 2 
  429. and 3 on track 0 in the example above), they may not be physically 
  430. adjacent on disk, due to interleaving.  Note that the mapping is 
  431. different from that used by DOS 1.10 for double-sided diskettes. 
  432.  
  433.  The request is as follows:
  434.  
  435. int 25h for Absolute Disk Read,      | except Compaq DOS 3.31 or DOS 4.0+
  436. int 26h for Absolute Disk Write      | over-32Mb partitions
  437. entry   AL      drive number (0=A:, 1=B:, etc)
  438.         CX      number of sectors to read (int 25h) or write (int 26h)
  439.         DS:BX   segment/offset of disk transfer address buffer (DTA)
  440.         DX      first relative sector to read - beginning logical sector
  441.                 number
  442. return  CF      set if error
  443.         AL      error code issued to int 24h in low half of DI
  444.         AH      01h     bad command
  445.                 02h     bad address mark
  446.                 03h     write-protected disk
  447.                 04h     requested sector not found
  448.                 08h     DMA failure
  449.                 10h     data error (bad CRC)
  450.                 20h     controller failed
  451.                 40h     seek operation failed
  452.                 80h     attachment failed to respond
  453. note 1) DOS returns with a far ret which leave the original flags on 
  454.         the stack.  Be sure to pop the stack to prevent uncontrolled 
  455.         growth. 
  456.      2) MSC 3.0's int86() was a straight interrupt call.  MSC 4.0 and 
  457.         later make special provision for adjusting the stack on int 
  458.         25h and 26h.  This probably won't hurt anything but you should 
  459.         be aware of it. 
  460.      3) Ints 25h and 26h will try rereading a disk if they get an 
  461.         error the first time. 
  462.  
  463.   To address partition sizes greater than 32Mb an extended format is 
  464. provided in Compaq DOS 3.31, DOS 4.0, and DR-DOS.  This format passes 
  465. a 32-bit address value by means of a parameter block.  The extended 
  466. format may be used to address disks smaller than 32Mb as well as 
  467. larger. 
  468.  
  469.  The request is as follows:
  470.  
  471. int 25h for Absolute Disk Read,            | Compaq DOS 3.31 or DOS 4.0+
  472. int 26h for Absolute Disk Write            | over-32Mb partitions
  473. entry   AL      drive number (0=A:, 1=B:, etc)
  474.         CX      0FFFFh
  475.         DS:BX   address of parameter block. Block format:
  476.               4 bytes    sector number
  477.               2 bytes    number of sectors to read
  478.               4 bytes    FAR pointer to buffer
  479. return  CF      set if error
  480.         AL      error code issued to int 24h in low half of DI
  481.         AH      01h     bad command
  482.                 02h     bad address mark
  483.                 03h     write-protected disk
  484.                 04h     requested sector not found
  485.                 08h     DMA failure
  486.                 10h     data error (bad CRC)
  487.                 20h     controller failed
  488.                 40h     seek operation failed
  489.                 80h     attachment failed to respond
  490. note 1) DOS returns with a far ret which leave the original flags on 
  491.         the stack. Be sure to pop the stack to prevent uncontrolled 
  492.         growth. 
  493.      2) MSC 3.0's int86() was a straight interrupt call.  MSC 4.0 and 
  494.         later make special provision for adjusting the stack on int 
  495.         25h and 26h.  This probably won't hurt anything but you should 
  496.         be aware of it. 
  497.      3) Ints 25h and 26h will try rereading a disk if they get an 
  498.         error the first time. 
  499.      4) Partition is potentially >32M (and requires this form of the 
  500.         call) if bit 1 of device attribute word in device driver is 
  501.         set. 
  502.      5) In the IBM OS/2 Tech Ref Volume 1, page 7-33, under "DOS 
  503.         Environment Software Interrupt Support", it lists:
  504.         25h  direct read       supported
  505.         26h  direct write      an error is returned on requests for 
  506.                                non-removable media 
  507.  
  508.   Interrupts 25h and 26h can read logical sectors only.  They cannot 
  509. read hidden sectors. 
  510.  
  511.   Critical errors are not processed by ints 25h and 26h.  Should one 
  512. happen, the  interrupt routine will return an error value to the 
  513. program but will not itself call the critical error handler at int 
  514. 24h. 
  515.   
  516.  The Microsoft DOS 5.0 Technical Reference refers to this call as 
  517. "superceded" and directs you to int 21h, fn 440Dh, minor code 61h, 
  518. "Read Track on Logical Drive" and minor code 41h, "Write Track on 
  519. Logical Drive."  See Chapter 4. 
  520.  
  521.  
  522. ┌─────────────────────────────────────────────────────────────────────┐
  523. │Interrupt 27h   Terminate And Stay Resident ................... 5**6 │
  524. └─────────────────────────────────────────────────────────────────────┘
  525. (0:009Ch)       (obsolete)
  526.   This vector is used by programs that are to remain resident when 
  527. COMMAND.COM regains control. 
  528.  
  529.   After initializing itself, the program must set DX to its last 
  530. address plus one relative to the program's initial DS or ES value (the 
  531. offset at which other programs can be loaded), then execute interrupt 
  532. 27h.  DOS then considers the program as an extension of itself, so the 
  533. program is not overlaid when other programs are executed.  This is 
  534. useful for loading programs such as utilities and interrupt handlers 
  535. that must remain resident. 
  536.  
  537. entry   CS      current program segment
  538.         DX      last program byte + 1
  539. return  none
  540. note 1) This interrupt must not be used by .EXE programs that are 
  541.         loaded into the high end of memory. 
  542.      2) This interrupt restores the interrupt 22h, 23h, and 24h 
  543.         vectors in the same manner as interrupt 20h.  Therefore, it 
  544.         cannot be used to install permanently resident Ctrl-Break or 
  545.         critical error handler routines. 
  546.      3) The maximum size of memory that can be made resident by this 
  547.         method is 64K. 
  548.      4) Memory can be more efficiently used if the block containing a 
  549.         copy of the environment is deallocated before terminating.  
  550.         This can be done by loading ES with the segment contained in 
  551.         2Ch of the PSP, and issuing function call 49h (Free Allocated 
  552.         Memory). 
  553.      5) DOS function call 4Ch allows a program to pass a completion 
  554.         code to DOS, which can be interpreted with processing (see 
  555.         function call 31h). 
  556.      6) If int 27h is called by a program linked with the /HIGH 
  557.         switch, it will occupy the top of memory and prevent 
  558.         COMMAND.COM from reloading, which is probably not what you 
  559.         want. 
  560.      7) Int 21, function 31h is the preferred method to cause a 
  561.         program to remain resident because this allows return 
  562.         information to be passed and allows a program larger than 64K 
  563.         to remain resident. 
  564.      8) It is possible to make an EXE program resident with this call 
  565.         by putting a 27h in the second byte of the PSP and terminating 
  566.         with a RET FAR. 
  567.      9) Programs terminating with int 27h do not close files on exit. 
  568.         Your program must explicitly close any opened files before 
  569.         going resident. 
  570.     10) Int 27h does not work correctly when DX contains values from 
  571.         0FFF1h to 0FFFFh.  In this case, DOS discards the high bit of 
  572.         the contents of DX, resulting in 32k less resident memory than 
  573.         was requested by the program. 
  574.     11) This interrupt will work with PC-MOS/386, but there are a 
  575.         number of MOS-specific advantages to using int 21h/31h 
  576.         instead.  See Chapter 4 for further explanation. 
  577.  
  578.  
  579. ┌─────────────────────────────────────────────────────────────────────┐
  580. │Interrupt 28h   (not documented by Microsoft) ................. 5**7 │
  581. └─────────────────────────────────────────────────────────────────────┘
  582.            *    DOS Idle Interrupt
  583.  
  584.   Int 28h has been provided by DOS since release 2.0.  The int 28h 
  585. process is similar to the "Timer Tick" process provided by BIOS via 
  586. int 1Ch in that it is an "outbound" (from DOS) call which an 
  587. application can "hook onto" to get service at a particular entry 
  588. point.  DOS normally only issues int 28h when it recieves a function 
  589. call (int 21h) from a foreground application with an argument in the 
  590. range of 0 thru 12 (0Ch) in the AH register, or when it is idling 
  591. waiting for keyboard input.  In effect, when DOS issues int 28h, it is 
  592. saying to the background task "I'm not doing anything hot right now, 
  593. if you can use the time, go ahead."  This means that a foreground 
  594. application which doesn't do many low-number DOS functions can preempt 
  595. CPU time easily. 
  596.  
  597.   When int 28h is being issued it is usually safe to do DOS calls.  
  598. You won't get int 28hs if a program is running that doesn't do its 
  599. keyboard input through DOS.  You should rely on the timer interrupt 
  600. for these.  It is used primarily by the PRINT.COM routines, but any 
  601. number of other routines can be chained to it by saving the original 
  602. vector and calling it with a FAR call (or just JMPing to it) at the 
  603. end of the new routine. 
  604.  
  605.   Int 28h is not called at all when any non-trivial foreground task is 
  606. running. As soon as a foreground program has a file open, int 28h no 
  607. longer gets called. Could make a good driver for for a background 
  608. program that works as long as there is nothing else going on in the 
  609. machine. 
  610.  
  611.   DOS uses 3 separate internal stacks: one for calls 01h through 0Ch; 
  612. another for calls 0Dh and above; and a third for calls 01h through 0Ch 
  613. when a Critical Error is in progress.  When int 28h is called, any 
  614. calls above 0Ch can be executed without destroying the internal stack 
  615. used by DOS at the time. 
  616.  
  617.   The byte which is pushed on the stack before an int 28h just 
  618. indicates which stack area is being used by the current int 21h call.  
  619. In DOS 3.1, the code sequence that calls int 28h looks like this: 
  620.  
  621.         PUSH    SS:[0304]
  622.         INT     28
  623.         POP     SS:[0304]
  624.  
  625.   The low-order byte of the word pushed contains 1 if the int 21h call 
  626. currently in progress is for services 1 through 0Ch, and 0 for service 
  627. 0 and for 0Dh and up.  Assuming that the last DOS call was not a 
  628. reentrant one, this tells you which set of DOS services should be safe 
  629. to call. 
  630.  
  631. entry   no parameters available
  632. return  none
  633. note 1) The int 28h handler may invoke any int 21h function except 
  634.         functions 00h through 0Ch (and 50h/51h under DOS 2.x unless 
  635.         DOS CritErr flag is set). 
  636.      2) Apparently int 28h is also called during screen writes. 
  637.      3) Until some program installs its own routine, this interrupt 
  638.         vector simply points to an IRET opcode. 
  639.      4) Supported in OS/2 1.0's DOS Compatibility Box. 
  640.      5) It is possible, if you are careful, to enhance the background 
  641.         priority by providing more int 28h calls than DOS normally 
  642.         would issue. 
  643.      6) If the InDOS flag is zero on int 28h, then it was called by 
  644.         someone other than DOS, and the word on the stack should NOT 
  645.         be examined. 
  646.      7) From Quarterdeck Tech Support: "Turbo Pascal 4.0 uses int 28h 
  647.         as a convenience for its SideKick product users.  Interrupt 28 
  648.         is the DOS busy flag which DESQview treats as a pause and 
  649.         gives up time... foreground gets little time and background 
  650.         gets a lot...reverse of normal." 
  651.      8) This interrupt is supported by PC-MOS/386 and MS Windows 3.0+. 
  652.  
  653.  
  654. ┌─────────────────────────────────────────────────────────────────────┐
  655. │Interrupt 29h   (not documented by Microsoft) ................. 5**8 │
  656. └─────────────────────────────────────────────────────────────────────┘
  657.            *    Internal - Quick Screen Output
  658.  
  659.   This method is extremely fast (much faster than DOS 21h subfunctions 
  660. 2 and 9, for example), and it is portable, even to "non-compatible" 
  661. MS-DOS computers. 
  662.  
  663. entry   AL      ASCII value for character to output to screen
  664. return  unknown
  665. note 1) Documented by Digital Equipment's DOS Reference as provided 
  666.         with the DEC Rainbow.  Also documented by Digital Research in 
  667.         the DR-DOS manual. 
  668.      2) If ANSI.SYS is installed, character output is filtered through 
  669.         it. 
  670.      3) Works on the IBM PC and compatibles, Wang PC, HP-150 and 
  671.         Vectra, DEC Rainbow, NEC APC, Texas Instruments PC and others. 
  672.      4) This interrupt is called from the DOS's output routines if 
  673.         output is going to a device rather than a file, and the device 
  674.         driver's attribute word has bit 3 (04h) set to "1". 
  675.      5) This call has been tested with MSDOS 2.11, PCDOS 2.1, PCDOS 
  676.         3.1, PCDOS 3.2, PCDOS 3.3, PCDOS 4.01, and Compaq DOS 3.31. 
  677.      6) Used in IBMBIO.COM as a vector to int 10, function 0Eh (write 
  678.         TTY) followed by an IRET. 
  679.      7) Most of the fast ANSI device drivers use this interrupt - 
  680.         ZANSI.SYS, NANSI.SYS, and PCMag's ANSI.COM, Quarterdeck's 
  681.         DVANSI.SYS. 
  682.      8) When using int 29h to output characters the ASCII 7 (BELL) 
  683.         will suppress character output while the bell is sounding. 
  684.      9) When device drivers (or the SYSINIT module which loads the 
  685.         drivers) need to do console output, they use int 29h, to call 
  686.         the console device driver directly.  For example, messages 
  687.         telling you about errors in your CONFIG.SYS file are printed 
  688.         using this service. 
  689.  
  690.  
  691.  
  692. ┌─────────────────────────────────────────────────────────────────────┐
  693. │Interrupt 2Ah   Microsoft Networks - Session Layer Interrupt .. 5**9 │
  694. └─────────────────────────────────────────────────────────────────────┘
  695.         1)  This interrupt was not officially documented by Microsoft 
  696.             until the release of Windows 3.0, which has setup 
  697.             parameters for int 2Ah. 
  698.         2)  LANtastic NetBIOS interface, original IBM PC LAN 
  699.             interface. 
  700.         3)  NetBIOS alternate interface.  The alternate interface 
  701.             (2Ah) was originally designed as a "higher" level 
  702.             interface to network communications rather than the "low" 
  703.             level interface (5Ch) provided by the NETBIOS.  The 2Ah 
  704.             interface, however, does not support any higher level 
  705.             functions than does the 5Ch interface and therefore has 
  706.             not become a de facto standard as has the 5Ch interface. 
  707.         4)  Most DOS 4.0 external programs (SHARE, etc) check this 
  708.             interrupt during installation. 
  709.  
  710. entry   AH      00h     Check for Int 2Ah Network BIOS Installation
  711.                         return  AH      nonzero if installed
  712.                 01h     Execute NETBIOS Request (no error retry)
  713.                         ES:BX   pointer to NCB
  714. return          AL      NETBIOS error code
  715.                 AH      00h     if no error
  716.                         01h     if error
  717.                 02h     Set Net Printer Mode
  718.                 03h     Get Shared-Device Direct I/O Status
  719.                         AL      00h
  720.                         DS:SI   pointer to ASCIIZ disk device name
  721.                         return  CF      clear   if allowed
  722.                                         set     if denied
  723.                         note 1) Direct I/O is through ints 13h, 25h, or 
  724.                                 26h. 
  725.                              2) If the device is redirected (see int 
  726.                                 21h/5F02h) or this call returns with 
  727.                                 carry set, the program should not 
  728.                                 perform direct disk I/O. 
  729.                              3) The device pointed to by DS:SI must 
  730.                                 include the colon in the drive:pathname. 
  731.                              4) It may take some time for this call to 
  732.                                 return to the calling program. Do not 
  733.                                 use in time-sensitive applications. 
  734.                 04h     Execute NETBIOS
  735.                         AL      00h     retry on error
  736.                                 01h     no retry on error
  737.                         ES:BX   pointer to network control block
  738.                         return  AX      0000h   for no error
  739.                                 AH      01h     if error
  740.                                         AL      error code (unknown)
  741.                         note 1) IBM PC LAN says, "for adapter 
  742.                                 independence, use int 2Ah. No not use 
  743.                                 5Ch function provided by the network 
  744.                                 adapter." 
  745.                              2) Error codes that are automatically 
  746.                                 retried are: 
  747.                                 09h     no session resources available
  748.                                 12h     session open rejected
  749.                                 21h     interface busy
  750.                 05h     Get Network Resource Information
  751.                         AL      00h
  752.                         return  AX      reserved
  753.                                 BX      # of network names (16 - names in 
  754.                                         use) 
  755.                                 CX      number of available NCB commands 
  756.                                 DX      number of sessions (max - pending) 
  757.                 06h     Network Print-Stream Control
  758.                 (IBM PC LAN)
  759.                         AL      01h     Set spooled output to
  760.                                         concatenation mode
  761.                                 02h     Set spooled output to
  762.                                         truncation mode
  763.                                 03h     Trunate printer stream
  764.                         return  CF      clear   no error
  765.                                         set     AX      DOS error code
  766.                 (LANtastic)
  767.                         AL      01h     Set spooled output to combined
  768.                                         mode
  769.                                 return  none
  770.                                 02h     Set spooled output in separate
  771.                                         mode
  772.                                 return  none
  773.                                 note    Printer output is not combined 
  774.                                         when multiple programs are run or 
  775.                                         when the printer is opened or 
  776.                                         closed. This cmd. implicitly 
  777.                                         starts a new print job. 
  778.                                 03h     Flush printer output 
  779.                                 return  none 
  780.                                 note 1) Printer output is flushed and a 
  781.                                         new print job is started. If no 
  782.                                         output exists to be flushed then 
  783.                                         this function has no affect. 
  784.                                      2) 03h is equivalent to 
  785.                                         Ctrl/Alt/keypad-* 
  786.                         note    NETBIOS 1.10
  787.                 07h-19h unknown
  788.                 20h     unknown
  789.                         note    AL=01h intercepted by DESQview 2.0.
  790.                 23h     Receive Broadcast Datagram
  791.                         IBM PC LAN 1.2. Manual says "use is not allowed".
  792.                 80h     Begin DOS Critical Section
  793.                         AL      critical section number (1 to 6)
  794.                 note    SHARE.EXE uses critical section number 01h.
  795.                 81h     End DOS Critical Section
  796.                         AL      critical section number (1 to 6)
  797.                 note    SHARE.EXE uses critical section number 01h.
  798.                 82h     Server Hook
  799.                         stack   AX from call to int 21h
  800.                         return  stack unchanged
  801.                         note    Called by the int 21h function dispatcher
  802.                                 in DOS 3.10+ for function 0 and functions
  803.                                 greater than 0Ch except 59h.
  804.                 84h     Keyboard Busy Loop
  805.                         note    Same functionality as DOS's int 28h?
  806.                 87h     Used by DOS PRINT to mark Critical Regions:
  807.                         AL      00h     Begin Critical Region
  808.                                 01h     End Critical Region
  809.                         return  CF      set     region already active
  810.                0A3h     Receive Broadcast Datagram
  811.                         IBM PC LAN 1.2. Manual says "use is not allowed".
  812.  
  813.  
  814. ┌─────────────────────────────────────────────────────────────────────┐
  815. │Interrupt 2Bh   (not documented by Microsoft) ................. 5**10│
  816. └─────────────────────────────────────────────────────────────────────┘
  817.            *    Unknown - Internal Routine for DOS (IRET)
  818.  
  819.  
  820. ┌─────────────────────────────────────────────────────────────────────┐
  821. │Interrupt 2Ch   (not documented by Microsoft) ................. 5**11│
  822. └─────────────────────────────────────────────────────────────────────┘
  823.            *    Unknown - Internal Routine for DOS (IRET)
  824.  
  825.  
  826. ┌─────────────────────────────────────────────────────────────────────┐
  827. │Interrupt 2Dh   (not documented by Microsoft) ................. 5**12│
  828. └─────────────────────────────────────────────────────────────────────┘
  829.            *    Unknown - Internal Routine for DOS (IRET)
  830.  
  831.  
  832. ┌─────────────────────────────────────────────────────────────────────┐
  833. │Interrupt 2Eh   (undocumented by Microsoft)  (DOS 2.0+) ....... 5**13│
  834. └─────────────────────────────────────────────────────────────────────┘
  835.            *    Internal Routine for DOS  (Alternate EXEC)
  836.  
  837.   This interrupt passes a command line addressed by DS:SI to 
  838. COMMAND.COM.  The command line must be formatted just like the 
  839. unformatted parameter area of a Program Segment Prefix.  That is, the 
  840. first byte must be a count of characters, and the second and 
  841. subsequent bytes must be a command line with parameters, terminated by 
  842. a carriage return character. 
  843.  
  844.   When executed, int 2Eh will reload the transient part of the command 
  845. interpreter if it is not currently in memory.  If called from a 
  846. program that was called from a batch file, it will abort the batch 
  847. file.  If executed from a program which has been spawned by the EXEC 
  848. function, it will abort the whole chain and probably lock up the 
  849. computer.  Int 2Eh also destroys all registers including the stack 
  850. pointer. 
  851.  
  852.   Int 2Eh is called from the transient portion of the program to reset 
  853. the DOS PSP pointers using the above Functions #81 & #80, and then 
  854. reenters the resident program. 
  855.  
  856.   When called with a valid command line, the command will be carried 
  857. out by COMMAND.COM just as though you had typed it in at the DOS 
  858. prompt.  Note that the count does not include the carriage return.  
  859. This is an elegant way to perform a SET from an application program 
  860. against the master environment block for example. 
  861.  
  862. entry   DS:SI   pointer to an ASCIIZ command line in the form:
  863.                         count byte
  864.                         ASCII string
  865.                         carriage return
  866.                         null byte
  867. note 1) Destroys all registers including stack pointer. 
  868.      2) Seems to work OK in both DOS 2.x and 3.x. 
  869.      3) It is reportedly not used by DOS. 
  870.      4) As far as known, int 2Eh is not used by DOS 3.1, although it 
  871.         was called by COMMAND.COM of PCDOS 3.0, so it appears to be in 
  872.         3.1 only for the sake of compatibility. 
  873.      5) Not used by the aftermarket 4DOS command interpreter prior to 
  874.         version 3.0. 3.0 merely hooks this vector and does nothing 
  875.         with it.  3.02 and later provide a TSR to add 2Eh capability. 
  876.      6) Trapped by PC-MOS/386 to prevent illegal entry into the 
  877.         command processor. 
  878.  
  879.  
  880. ┌─────────────────────────────────────────────────────────────────────┐
  881. │Interrupt 2Fh   Multiplex Interrupt ........................... 5**14│
  882. └─────────────────────────────────────────────────────────────────────┘
  883.  
  884.  Interrupt 2Fh is the multiplex interrupt.  A general interface is 
  885. defined between two processes.  It is up to the specific application 
  886. using interrupt 2Fh to define specific functions and parameters. 
  887.  
  888.  This interrupt is becoming more commonly used as the available 
  889. interrupt 21 functions are getting to be in short supply.  Int 2Fh 
  890. doesn't require any support from DOS itself for it to be used in 
  891. application programs.  It's not handled by DOS, but by the programs 
  892. themselves. 
  893.  
  894.  Every multiplex interrupt handler is assigned a specific multiplex 
  895. number. The multiplex number is specified in the AH register; the AH 
  896. value tells which program your request is directed toward.  The 
  897. specific function that the handler is to perform is placed in the AL 
  898. register.  Other parameters are places in the other registers as 
  899. needed.  The handlers are chained into the 2Fh interrupt vector and 
  900. the multiplex number is checked to see if any other application is 
  901. using the same multiplex number.  There is no predefined method for 
  902. assigning a multiplex number to a handler.  You must just pick one.  
  903. To avoid a conflict if two applications choose the same multiplex 
  904. number, the multiplex numbers used by an application should be 
  905. patchable.  In order to check for a previous installation of the 
  906. current application, you can search memory for a unique string 
  907. included in your program.  If the value you wanted in AH is taken but 
  908. you don't find the string, then another application has grabbed that 
  909. location. 
  910.  
  911.   Int 2Fh was not documented under DOS 2.x.  There is no reason not to 
  912. use int 2Fh as the multiplex interrupt in DOS 2.x.  The only problem 
  913. is that DOS 2.x does not initialize the int 2Fh vector, so when you 
  914. try to chain to it like you are supposed to, it will crash.  If your 
  915. program checks the vector for being zero and initializes it itself or 
  916. doesn't chain in that case, it will work for you n 2.x just the same 
  917. as 3.x. 
  918.  
  919.   DOS 3.2 itself contains some int 2Fh handlers - it uses values of 
  920. 08h, 13h, and 0F8h.  There may be more.  NLSFUNC from DOS 3.3 up uses 
  921. part of int 2Fh and so does GRAFTABL. 
  922.  
  923.   For int 2Fh calls, register AH identifies which program is to handle 
  924. the interrupt.  AH values 00h-7Fh are reserved for DOS, not that 
  925. anyone cares much. Values 0C0h-0FFh are reserved for applications.  
  926. Register AL contains the subfunction code if used. 
  927.  
  928.   IBM has reported that PC-DOS 4.0 will sometimes hang when 
  929. substituting int 2Fh for int 67h for network calls.  Most of DOS 4.0's 
  930. external commands check the 2Fh PRINT and other statuses while 
  931. operating for enhanced network support. DOS 4.0 SHARE.EXE traps the 
  932. 2Fh interrupt.  IBM and Microsoft DOS programming information for 
  933. versions prior to 4.0 strongly imply that 2Fh functions not used by 
  934. PRINT.COM are open for general use.  DOS 4.0 uses quite a few 2Fh 
  935. functions and this may be a cause of incompatibility with some 
  936. software. 
  937.  
  938.   LANtastic NOS SERVER.EXE v2.49s and earlier will not run under DOS 
  939. 4.x due to int 2Fh conflicts.  This conflict also occurs under DR-DOS 
  940. versions 3.40 and 3.41.  DR-DOS is internally similar to DOS 4.0. 
  941.  
  942.  
  943. Function   01h  PRINT.COM
  944.            PC-DOS 3.3's PRINT.COM hooks the following interrupt vectors:
  945.                 05h     PrintScreen Interrupt
  946.                 13h     BIOS Disk Interrupt
  947.                 14h     BIOS Serial Communications Interrupt
  948.                 15h     BIOS "System Services" Interrupt
  949.                 17h     BIOS Printer Interrupt
  950.                 19h     Bootstrap Loader Interrupt
  951.                 1Ch     Timer Tick
  952.                 23h     Control-C Terminate Address
  953.                 24h     Critical Error Handler Address
  954.                 28h     DOS Idle Interrupt (undocumented)
  955.                 2Fh     Multiplex Interrupt
  956.  
  957. entry   AH      01h
  958.                 AL      00h     PRINT  Get Installed State
  959.                         This call must be defined by all int 2Fh 
  960.                         handlers. It is used by the caller of the 
  961.                         handler to determine if the handler is present. 
  962.                         On entry, AL=0. On return, AL contains the 
  963.                         installed state as follows: 
  964.                 return  AL      0FFh    installed
  965.                                 01h     not installed, not OK to install
  966.                                 00h     not installed, OK to install
  967.  
  968.                         01h     PRINT  Submit File
  969.                         DS:DX   pointer to submit packet
  970.                                 format  byte    level
  971.                                         dword   pointer to ASCIIZ filename
  972.                 return  CF      set if error
  973.                                 AX      error code
  974.                 note 1) A submit packet contains the level (BYTE) and a 
  975.                         pointer to the ASCIIZ string (DWORD in 
  976.                         offset:segment form). The ASCIIZ string must 
  977.                         contain the drive, path, and filename of the 
  978.                         file you want to print. The filename cannot 
  979.                         contain global filename characters. 
  980.                 return  CF      set if error
  981.                                 AX      error code
  982.  
  983.                         02h     PRINT Cancel File
  984.                         On entry, AL=2 and DS:DX points to the ASCIIZ 
  985.                         string for the print file you want to cancel. 
  986.                         Global filename characters are allowed in the 
  987.                         filename. 
  988.                 DS:DX   pointer to ASCIIZ file name to cancel (wildcards 
  989.                         OK) 
  990.                 return  CF      set if error
  991.                                 AX      error code
  992.  
  993.                         03h     PRINT Remove All Files
  994.                 return  CF      set if error
  995.                                 AX      error code
  996.  
  997.                         04h     PRINT Hold Queue/Get Status
  998.                         This call holds the jobs in the print queue so 
  999.                         that you can scan the queue. Issuing any other 
  1000.                         code releases the jobs. On entry, AL=4. On 
  1001.                         return, DX contains the error count. DS:SI 
  1002.                         points to the print queue. The print queue 
  1003.                         consists of a series of filename entries. Each 
  1004.                         entry is 64 bytes long. The first entry in the 
  1005.                         queue is the file currently being printed. The 
  1006.                         end of the queue is marked by the entry having a 
  1007.                         null as the first character. 
  1008.                return   DX      error count
  1009.                         DS:SI   pointer to print queue (null-string 
  1010.                                 terminated list of 64-byte ASCIIZ 
  1011.                                 filenames) 
  1012.                         CF      set if error
  1013.                                 AX      error code
  1014.                                         01h     function invalid
  1015.                                         02h     file not found
  1016.                                         03h     path not found
  1017.                                         04h     too many open files
  1018.                                         05h     access denied
  1019.                                         08h     queue full
  1020.                                         09h     spooler busy
  1021.                                         0Ch     name too long
  1022.                                         0Fh     drive invalid
  1023.  
  1024.                         05h     PRINT release print jobs
  1025.                 return  none
  1026.                 note 1) This call has no parameters.
  1027.                      2) Restarts the print queue.  This call must be 
  1028.                         called to restart the current print job or after 
  1029.                         calling function 04h to pause the print job. 
  1030.  
  1031.                         06h     PRINT get printer device (DOS 3.3+)
  1032.                 return  CF      clear   OK
  1033.                                 AX      0000h
  1034.                         CF      set
  1035.                                 AX      0008h   (ERROR_QUEUE_FULL)
  1036.                                 DS:SI   pointer to printer device header 
  1037.                                         struc.
  1038.                 note 1) This call has no parameters.
  1039.                      2) 
  1040.  
  1041.  
  1042. Function  02h   PC LAN Program
  1043. entry   AH      02h
  1044. other parameters unknown
  1045.  
  1046.  
  1047. Function  05h   DOS 3.0+ Critical Error Handler
  1048. entry   AH      05h
  1049.         AL      00h     Installation Check
  1050.                 return  AL      00h     not installed, OK to install
  1051.                                 01h     not installed, not OK to install
  1052.                                 0FFh    installed
  1053.                 note    This set of functions allows a user program to
  1054.                         partially or completely override the default
  1055.                         critical error handler in COMMAND.COM.
  1056.         AL      xxh     Handle Error - nonzero error code in AL
  1057.                         (xxh indicates nonzero extended error code)
  1058.                 return  CF      clear
  1059.                         ES:DI   pointer to ASCIIZ error message
  1060.                         AL      (?)
  1061.                         CF      set     use default error handler
  1062. for LANtastic LANOS:
  1063. entry   AH      05h
  1064.         AL      00h     for installation check
  1065.                 #       for error code (in pre DOS 4.00)
  1066.                 1 or 2  for error code in DOS 4.00
  1067.         BX      in      Error code
  1068. return  CF      clear   if error code converted to text
  1069.                 set     if error code can't be converted
  1070.         ES:DI   pointer to ASCIIZ text buffer containing error text. 
  1071.                 This is a read-only text buffer and you must not alter 
  1072.                 the text in this buffer. 
  1073.  
  1074.  
  1075. Function  06h   ASSIGN
  1076. entry   AH      06h
  1077.         AL      00h     Installation Check
  1078.                 01h     Get Memory Segment
  1079. return (AH=00h) AL      (to 4.01) nonzero if ASSIGN is installed
  1080.                         (5.0)      0FFh if ASSIGN is installed
  1081.        (AH=01h) ES      segment of ASSIGN work area
  1082. note 1) Many references report the return value in AH, but this call 
  1083.         appears to return its information in AL. 
  1084.      2) Microsoft Press' "Advanced MSDOS Programming" (Second Edition) 
  1085.         documents int 2Fh, AX=2000 to check for ASSIGN, but according 
  1086.         to Ray Duncan (the author) this is a typo. 
  1087.  
  1088.  
  1089. Function   08h  DRIVER.SYS
  1090. entry   AH      08h
  1091.         AL      00h     Installation Check
  1092.                 return  AL      00h     not installed, OK to install
  1093.                                 01h     not installed, not OK to install
  1094.                                 0FFh    installed
  1095.                 01h     Add New Block Device
  1096.                         DS:DI   pointer to device driver header
  1097.                 note    Moves down list of drivers, copying and 
  1098.                         modifying word at offset 29h.  Device driver 
  1099.                         appended to driver chain. 
  1100.                 02h     Execute Device Driver Request
  1101.                         ES:BX   pointer to device driver request header
  1102.                 return  Request header updated as per requested 
  1103.                         operation. 
  1104.  
  1105.  
  1106. Function   10h  SHARE                                   (DOS 3.0+)
  1107. entry   AH      10h
  1108.         AL      00h     Installation Check
  1109. return  AL      00h     not installed, OK to install
  1110.                 01h     not installed, not OK to install
  1111.                 0FFh    installed
  1112. note 1) Values of AL other than 00h appear to put DOS 3.3 SHARE into 
  1113.         an infinite loop. 
  1114.      2) PC-MOS/386 will always report SHARE.EXE as being present, as 
  1115.         its functions are duplicated within the PC-MOS/386 kernel. 
  1116.      3) If DOS 4.0's SHARE is loaded manually, either in the CONFIG or 
  1117.         AUTOEXEC file, it can't access the NUL device if 4DOS 3.x is 
  1118.         installed.  If SHARE.EXE is in the root, the problem doesn't 
  1119.         usually occur.  It's been reported that 4DOS is not the only 
  1120.         program that has problems with SHARE.EXE and the NUL device, 
  1121.         so it's more likely to be an MS-DOS problem than a 4DOS 
  1122.         problem.  (dgh on BIX) 
  1123.      4) MS Windows intercepts this call and always returns nonzero 
  1124.         regardless of SHARE's presence.  If your program uses file 
  1125.         sharing you should try locking and reading a file and watch 
  1126.         for the error codes returned by int 21h/5Ch. (Lock/Unlock 
  1127.         File) 
  1128.      5) SHARE function is built into DR-DOS 3.4x, but was removed to a 
  1129.         separate TSR module in 5.0 and 6.0. 
  1130.  
  1131.  
  1132. Function   11h  Multiplex - Network Redirection
  1133. note    In DOS 4.0+, the 11xx calls are all in IFSFUNC.EXE, not in the 
  1134.         PC LAN Program redirector. 
  1135.  
  1136. entry   AH      11h
  1137.         AL      00h     Installation Check
  1138.                         return  AL      00h    not installed, OK to 
  1139.                                                install 
  1140.                                         01h    not installed, not OK to 
  1141.                                                install 
  1142.                                         0FFh   installed 
  1143.                 06h     Close Remote File
  1144.                 08h     Read From Remote File
  1145.                 09h     Write to Remote File
  1146.                 0Ah     Lock Region of File
  1147.                         BX      file handle
  1148.                         CX:DX   starting offset
  1149.                         SI      high word of size
  1150.                         stack   word    low word of size
  1151.                         return  CF      set on error
  1152.                                         AL      DOS error code
  1153.                                 stack   unchanged
  1154.                 0Bh     Unlock a File Region
  1155.                         BX      file handle
  1156.                         CX:DX   starting offset
  1157.                         SI      high word of size
  1158.                         stack   word    low word of size
  1159.                         return  CF      set on error
  1160.                                         AL      DOS error code
  1161.                                         stack   unchanged
  1162.                 0Ch     Get Disk Space
  1163.                         return  AL      sectors per cluster
  1164.                                 BX      total clusters
  1165.                                 CX      bytes per sector
  1166.                                 DX      number of available clusters
  1167.                 0Dh     unknown
  1168.                 0Eh     Set Remote File's Attributes
  1169.                 0Fh     Get Remote File's Attributes
  1170.                 10h     unknown
  1171.                 11h     Rename Remote File
  1172.                 12h     unknown
  1173.                 13h     Delete Remote File?
  1174.                 14h     unknown
  1175.                 15h     unknown
  1176.                 16h     Open Existing Remote File?
  1177.                 17h     unknown
  1178.                 18h     unknown
  1179.                 19h     CHDIR?
  1180.                 1Ah     unknown
  1181.                 1Bh     Find First?
  1182.                 1Ch     Find Next?
  1183.                 1Dh     Close All Remote Files for Process?
  1184.                 1Eh     Do Redirection
  1185.                         stack   word    function to execute
  1186.                                 5F02h   get redirection list entry
  1187.                                         BX      redirection list index 
  1188.                                         DS:SI   pointer to 16-byte local 
  1189.                                                 device name buffer 
  1190.                                         ES:DI   pointer to 128-byte 
  1191.                                                 network name buffer 
  1192.                                 5F03h   redirect device
  1193.                                         BL      device type (see 
  1194.                                                 21h/5F03h) 
  1195.                                         CX      stored parameter value 
  1196.                                         DS:SI   pointer to ASCIIZ source 
  1197.                                                 device name 
  1198.                                         ES:DI   pointer to destination 
  1199.                                                 ASCIIZ network path + 
  1200.                                                 ASCIIZ password 
  1201.                                 5F04h   cancel redirection
  1202.                                         DS:SI   pointer to ASCIIZ device 
  1203.                                                 name or network path 
  1204.                         return  CF      set on error
  1205.                 1Fh     Printer Setup
  1206.                         stack   word    function
  1207.                                 5E02h   set printer setup
  1208.                                 5E03h   get printer setup
  1209.                         return  CF      set on error
  1210.                 20h     Reset Disks and Flush Buffers?
  1211.                 21h     Seek on Remote File?
  1212.                         return  CF      set     on error
  1213.                                         clear   if successful
  1214.                                 DX:AX   new file position?
  1215.                 22h     Process Termination Hook?
  1216.                 23h-26h unknown
  1217.  
  1218.  
  1219. Function   12h  Multiplex, DOS 3.0+ Internal Services
  1220.  
  1221.  
  1222. Function   13h  DOS 3.3+(?) Monitor Int 19h
  1223. entry   AH      13h
  1224.         DS:DX   pointer to the int13h vector to be restored when doing 
  1225.                 an int19h call 
  1226.         ES:BX   pointer to the int13h vector to be used when DOS 
  1227.                 passes the int13h call along 
  1228. return  DS:DX   the original int13h vector used by int19h 
  1229.         ES:BX   the original int13h vector to which DOS passed the 
  1230.                 calls along 
  1231. note    Usually, the original vectors will be the same thing, either 
  1232.         F000:EC59 for floppy disk systems, or maybe F000:A343 for hard 
  1233.         disk systems, but these guys could vary, especially if you're 
  1234.         using a non-standard controller. 
  1235.  
  1236.  
  1237. Function   14h  NLSFUNC.COM
  1238. entry   AH      14h
  1239.         AL      00h     installation check
  1240.                 return  AL      00h     not installed, OK to install
  1241.                                 01h     not installed, not OK to install
  1242.                                 0FFh    installed
  1243.                 01h     unknown
  1244.                 note    Calls int 2Fh/1227h under certain circumstances.
  1245.                 02h     unknown
  1246.                 note    Calls int 2Fh/1227h under certain circumstances.
  1247.                 03h     unknown
  1248.                 note    In DOS 3.3, appears to be identical to
  1249.                         subfunction 01h.
  1250. other parameters unknown
  1251.  
  1252.  
  1253. Function   15h  CD-ROM extensions
  1254.                 Microsoft CD-ROM driver versions 1.0 through 2.0 will 
  1255.                 work only up to DOS 3.31.  DOS 4.0 and up require 2.1 
  1256.                 drivers. MSCDEX abandons INT 13; and redirection 
  1257.                 within DOS to do its work. Some LAN software, such as 
  1258.                 LANtastic, uses the same mechanism to implement 
  1259.                 network drives.  MSCDEX provides IFS functionality in 
  1260.                 any version of DOS back to 3.0. 
  1261.  
  1262. entry   AH      15h     CD-ROM services
  1263.         AL      subfunctions
  1264.                 00h     Get Number of CD-ROM Drives (Installation Check)
  1265.                 BX      00h
  1266.                 return  BX      number of CD-ROM drive letters used
  1267.                                 0000h   MSCDEX not installed
  1268.                         CX      starting drive letter (0=A:, 1=B:, etc)
  1269.                 note    This installation check does not follow the 
  1270.                         format used by other software. 
  1271.  
  1272.                 01h     Get Drive Device List
  1273.                 ES:BX   pointer to buffer to hold drive letter list
  1274.                         (5 bytes per drive letter)
  1275.                 return  buffer filled, for each drive letter:
  1276.                         byte    subunit number in driver
  1277.                         dword   address of device driver header
  1278.  
  1279.                 02h     Get Copyright File Name
  1280.                 CX      drive number (0=A:)
  1281.                 ES:BX   pointer to 38-byte buffer for name of copyright 
  1282.                         file 
  1283.                 return  CF      set if drive is not a CD-ROM drive
  1284.                                 AX      error code  (15h)
  1285.  
  1286.                 03h     Get Abstract File Name
  1287.                 ES:BX   pointer to 38-byte buffer for name of abstract
  1288.                         file
  1289.                 CX      drive number (0=A:)
  1290.                 return  CF      set if drive is not a CD-ROM drive
  1291.                                 AX      error code  (15h)
  1292.  
  1293.                 04h     Get Bibliographic Doc File Name
  1294.                 CX      drive number (0=A:)
  1295.                 ES:BX   pointer to 38-byte buffer for name of
  1296.                         bibliographic documentation file
  1297.                 return  CF      set if drive is not a CD-ROM drive
  1298.                                 AX      error code  (15h)
  1299.  
  1300.                 05h     Read VTOC (Volume Table of Contents)
  1301.                 CX      drive number (0=A:)
  1302.                 DX      sector index (0=first volume descriptor, 
  1303.                         1=second,...) 
  1304.                 ES:BX   pointer to 2048-byte buffer
  1305.                 return  CF      set on error
  1306.                                 AX      error code (15h, 21h)
  1307.                         CF      clear if successful
  1308.                                 AX      volume descriptor type
  1309.                                         00h     other
  1310.                                         01h     standard
  1311.                                         0FFh    terminator
  1312.  
  1313.                 06h     Turn Debugging On
  1314.                 BX      debugging function to enable
  1315.                 note    Reserved for development.
  1316.  
  1317.                 07h     Turn Debugging Off
  1318.                 BX      debugging function to disable
  1319.                 note    Reserved for development.
  1320.  
  1321.                 08h     Absolute Disk Read
  1322.                 CX      drive number (0=A:)
  1323.                 DX      number of sectors to read
  1324.                 ES:BX   pointer to buffer
  1325.                 SI:DI   starting sector number
  1326.                 return  CF      set on error
  1327.                                 AL      error code  (15h, 21h)
  1328.  
  1329.                 09h     Absolute Disk Write
  1330.                 CX      drive number (0=A:)
  1331.                 DX      number of sectors to write
  1332.                 ES:BX   pointer to buffer
  1333.                 SI:DI   starting sector number
  1334.                 note    Corresponds to int 26h and is currently reserved 
  1335.                         and nonfunctional. 
  1336.  
  1337.                 0Ah     Reserved by Microsoft
  1338.  
  1339.                 0Bh     CD-ROM 2.00 - Drive Check
  1340.                 CX      drive number (0=A:)
  1341.                 return  BX      0ADADh if MSCDEX.EXE installed
  1342.                         AX      0000h   if drive not supported
  1343.                                 <>0     if supported
  1344.  
  1345.                 0Ch     CD-ROM 2.00 - Get MSCDEX.EXE Version
  1346.                 return  BH      major version
  1347.                         BL      minor version
  1348.                 note    MSCDEX.EXE versions prior to 1.02 return BX=0.
  1349.  
  1350.                 0Dh     CD-ROM 2.00 - Get CD-ROM Drive Letters
  1351.                 ES:BX   pointer to buffer for drive letter list
  1352.                         (1 byte per drive)
  1353.                 return  Buffer filled with drive numbers (0=A:). Each 
  1354.                         byte corresponds to the drive in the same 
  1355.                         position for function 1501h. 
  1356.  
  1357.                 0Eh     CDROM 2.00 - Get/Set Volume Descriptor 
  1358.                         Preference 
  1359.                 BX      subfunction
  1360.                         00h     Get Preference
  1361.                         DX      0000h
  1362.                         return  DX      preference settings
  1363.                         01h     Set Preference
  1364.                         DH      volume descriptor preference
  1365.                                 01h     primary volume descriptor
  1366.                                 02h     supplementary volume descriptor
  1367.                         DL      Supplementary Volume Descriptor
  1368.                                 Preference
  1369.                                 01h     shift-Kanji
  1370.                         CX      drive number (0=A:)
  1371.                         return  CF      set on error
  1372.                                         AX      error code  (01h, 15h)
  1373.  
  1374.                 0Fh     CD-ROM 2.00 - Get Directory Entry
  1375.                 CX      drive number (0=A:)
  1376.                 ES:BX   pointer to ASCIIZ pathname
  1377.                 SI:DI   pointer to 255-byte buffer for directory entry
  1378.                 return  CF      set on error
  1379.                                 AX      error code
  1380.                         CF      clear if succesful
  1381.                                 AX      disk format (0=High Sierra,
  1382.                                                      1=ISO 9660)
  1383.                 note    Directory entry format:
  1384.                         byte    length of directory entry
  1385.                         byte    length of XAR in LBN's
  1386.                         dword   LBN of data, Intel (little-Endian) format
  1387.                         dword   LBN of data, Motorola (big-Endian) format
  1388.                         dword   length of file, Intel format
  1389.                         dword   length of file, Motorola format
  1390.                ---High Sierra---
  1391.                       6 bytes   date and time
  1392.                         byte    bit flags
  1393.                         byte    reserved
  1394.                ---ISO 9660---
  1395.                       7 bytes   data and time
  1396.                         byte    bit flags
  1397.                ---both formats---
  1398.                         byte    interleave size
  1399.                         byte    interleave skip factor
  1400.                         word    volume set sequence number, Intel format
  1401.                         word    volume set sequence number, Motorola
  1402.                                 format
  1403.                         byte    length of file name
  1404.                       n bytes   file name
  1405.                         byte    (optional) padding if filename is odd
  1406.                                 length
  1407.                       n bytes   system data
  1408.  
  1409.                 Error codes:
  1410.                         01h     invalid function
  1411.                         15h     invalid drive
  1412.                         21h     not ready
  1413.  
  1414.  
  1415. Function   16h  MS-DOS Idle Call  (DOS 5.0+, OS/2 2.0, Windows 3.0+)
  1416. entry   AH      16h     idle call
  1417.         AL      80h     
  1418. return  AL      00h     idle call is supported
  1419.                 nonzero idle call is not supported
  1420. note 1) When your program is waiting for user input or otherwise not 
  1421.         doing useful work, you can call this function in a loop.  
  1422.         Properly written background programs can monitor this call to 
  1423.         determine if it is safe to do processing.  This call 
  1424.         originated in Windows 3.0, then the OS/2 2.0 DOS box, and 
  1425.         finally in DOS 5, where DOSSHELL uses it so processes can tell 
  1426.         the shell when it is safe to swap tasks.  It's also used by 
  1427.         the Microsoft Laptop Power Management API.
  1428.      2) The MS 5.0 Technical Reference recommends making sure the int 
  1429.         2Fh vector is nonzero before calling this function.  This 
  1430.         would be to ensure you are running a DOS version that has 2Fh 
  1431.         support. 
  1432.      3) This call is nonblocking, that is, the system does not suspend 
  1433.         the program unless another program is ready to run.  Usually 
  1434.         the call returns immediately and the program continues 
  1435.         running. 
  1436.      4) Windows apps should NOT issue this interrupt.
  1437.  
  1438.  
  1439. Function   17h  MS Windows Clipboard API                            (3.0+)
  1440. no registers known
  1441. note    This is the interface to the Clipboard.  You can open the 
  1442.         Clipboard, determine the size of the data in the Clipboard, 
  1443.         read the Clipboard, write the Clipboard, clear the Clipboard, 
  1444.         and close the Clipboard. 
  1445.  
  1446.  
  1447. Function   19h  SHELLB.COM  (DOS 4.0+)
  1448. entry   AH      00h     SHELLB.COM - Installation Check
  1449.                 return  AL      00h     not installed
  1450.                         0FFh    installed
  1451.                 01h     SHELLC.EXE Interface
  1452.                         BL      00h     if SHELLC transient
  1453.                                 01h     if SHELLC resident
  1454.                         DS:DX   pointer to far call entry point for
  1455.                                 resident SHELLC.EXE
  1456.                 return  ES:DI   ptr to SHELLC.EXE workspace within
  1457.                                 SHELLB.COM
  1458.                 note    SHELLB.COM and SHELLC.EXE are parts of the DOS
  1459.                         4.x shell
  1460.                 02h     SHELLB.COM - COMMAND.COM Interface
  1461.                         ES:DI   pointer to ASCIIZ full filename of 
  1462.                                 current batch file, with at least the 
  1463.                                 final filename element uppercased 
  1464.                         DS:DX   pointer to buffer for results
  1465.                 return  AL      00h     failed, either
  1466.                                         (a) final filename element 
  1467.                                             quoted at ES:DI does not 
  1468.                                             match identity of shell 
  1469.                                             batch file quoted as parm of 
  1470.                                             most recent call of SHELLB 
  1471.                                             command, 
  1472.                                         or
  1473.                                         (b) no more Program Start 
  1474.                                             Commands 
  1475.                                              available. 
  1476.                                 0FFh    success, then:
  1477.                                         memory at DS:[DX+1] onwards 
  1478.                                         filled as: 
  1479.                                         DX+1:   byte  count of bytes of 
  1480.                                                       PSC 
  1481.                                         DX+2: n bytes Program Start 
  1482.                                                       Command text 
  1483.                                         byte    0Dh   terminator 
  1484.                 note    COMMAND.COM executes the result of this call 
  1485.                         in preference to reading a command from a 
  1486.                         batch file. Thus the batch file does not 
  1487.                         advance in execution for so long as SHELLB 
  1488.                         provides PSCs from its workspace. The PSCs are 
  1489.                         planted in SHELLB workspace by SHELLC, the 
  1490.                         user menu interface. The final PSC of a 
  1491.                         sequence is finished with a GOTO COMMON, which 
  1492.                         causes a loop back in the batch file which 
  1493.                         called SHELLC so as to execute SHELLC again. 
  1494.                         The check on batch file name permits PSCs to 
  1495.                         CALL nested batch files while PSCs are still 
  1496.                         stacked up for subsequent execution. 
  1497.                 03h     SHELLB.COM - COMMAND.COM Interface
  1498.                         ES:DI   pointer to ASCIIZ batch file name as
  1499.                                 for fn 02h
  1500.                 return  AL      00h     quoted batch files does not 
  1501.                                         match last SHELLB parameter 
  1502.                                 0FFh    quoted batch file name matches 
  1503.                                         last SHELLB parameter 
  1504.                 04h     SHELLB.COM - SHELLB.COM transient to TSR
  1505.                         interface
  1506.                 return  ES:DI   pointer to name of current shell batch
  1507.                                 file:
  1508.                                 word    number of bytes of name 
  1509.                                         following 
  1510.                                 bytes   (8 max) uppercase name of 
  1511.                                         shell batch file 
  1512.  
  1513.  
  1514. Function   1Ah  ANSI.SYS   (DOS 4.0+)
  1515. entry   AH      00h     Installation Check
  1516.                 return  AL      00h     not installed
  1517.                                 0FFh    if installed
  1518.                 01h     Get/Set Display Information
  1519.                         CL      5Fh     set information
  1520.                                 7Fh     get information
  1521.                                 DS:DX   pointer to parameter block as
  1522.                                         for int 21h, AX=440Ch, CX=037Fh/
  1523.                                         035Fh respectively
  1524.                 return  CF      set     on error
  1525.                                         AX      error code (unknown)
  1526.                                 clear   if successful
  1527.                 note 1) AX is destroyed.
  1528.                      2) May be the DOS IOCTL interface to ANSI.SYS.
  1529.  
  1530.  
  1531. Function   1Bh  XMA2EMS.SYS   (DOS 4.0+)
  1532. entry   AH      00h     Installation Check
  1533.                 return  AL      0FFh    if installed
  1534.                 01h     Get Hidden Frame Information
  1535.                         DI      hidden physical page number
  1536.                 return  AX      0000h if successful
  1537.                                         ES      segment of page frame
  1538.                                         DI      physical page number
  1539.                                 0FFFFh if failed (no such hidden page)
  1540. note 1) XMA2EMS.SYS extension is only installed if DOS has page frames 
  1541.         to hide.  This extension hooks onto int 67h fn 58h and returns 
  1542.         from that call data which excludes the physical pages being 
  1543.         used by DOS. 
  1544.      2) Function 02h corresponds to the data edited out of the int 
  1545.         67h/fn 58h call. 
  1546.  
  1547.  
  1548. Function  43h   Microsoft Extended Memory Specification (XMS)
  1549.                 The XMS version 2.00 for MS-DOS allows DOS programs
  1550.                 to utilize additional memory found in 80286 and 80386
  1551.                 machines.  With some restrictions, XMS adds about 64K
  1552.                 to the 640K which DOS programs can access directly.
  1553.                 XMS also provides DOS programs with a standard method
  1554.                 for storing data in extended memory.
  1555.                 See Chapter 10 for API.
  1556.  
  1557.  
  1558. Function  48h   DOSKEY.COM (DOS 5.0+)
  1559. entry   AH      48h     DOSKEY.COM
  1560.         AL      00h     Get Installed State
  1561. return  AL      00h     not installed
  1562.                 0FFh    installed
  1563.  
  1564.         AL      10h     Read Command Line
  1565.                 DS:DX   pointer to buffer to take the command line
  1566.                         buffer:
  1567.                         offset  description
  1568.                         00h     buffer size (max 128 bytes)
  1569.                         01h     the number of characters, minus 1.  The
  1570.                                 final CR is copied to the buffer but
  1571.                                 not included in the byte count.
  1572.                         02h     the first byte of the input line.
  1573. return  AX      0000h
  1574.                 DS:DX   filled with command line
  1575. note    AX=0 if the user types a macro name, and the buffer is not
  1576.         filled.  Your program must call the function a second time to
  1577.         expand the macro and copy the macro text to the buffer.
  1578.  
  1579.  
  1580. Function  4Ah   DOS 5.0 HMA Services (undocumented)
  1581. entry   AH      4Ah
  1582.         AL      01h     Get Size
  1583. return  BX      number of bytes (possibly 0) of available HMA
  1584.         ES:DI   start of the available HMA
  1585.  
  1586.  
  1587. Function  4Bh   Microsoft Task Switcher API (DOS 5.0+)
  1588. entry   AH      4Bh
  1589.  
  1590. entry   AL      01h     Build_Callout_Chain
  1591.         ES:BX   0:0
  1592.         CX:DX   switcher call-in address
  1593. return  ES:BX   address of the app's Switch_Call_Back_Info data
  1594.                 structure
  1595. note    All other registers must be preserved.
  1596.  
  1597. entry   AL      02h     Detect Switcher
  1598.  
  1599. entry   AL      03h     Allocate Switcher ID
  1600.  
  1601. entry   AL      04h     Free Switcher ID
  1602.  
  1603. entry   AL      05h     Identify Instance Data
  1604.  
  1605.  
  1606.  
  1607.  
  1608. Function  64h   SCRNSAV2
  1609. entry   AH      64h
  1610.         AL      00h     installation check
  1611. return  AL      00h     not installed
  1612.                 0FFh    installed
  1613. note    SCRNSAV2.COM is a screen blanker for PS/2s with VGA by Alan
  1614.         Ballard.
  1615.  
  1616.  
  1617. Function  7Ah   Novell NetWare
  1618. entry   AH      7Ah
  1619.         AL      00h     installation check
  1620. return  AL      00h     not installed
  1621.                 0FFh    installed
  1622.         ES:DI   pointer to FAR entry point for routines otherwise
  1623.                 accessed through int 21h
  1624. note 1) Returns address of entry point for IPX and SPX.
  1625.      2) Parameters are listed in Chapter 13.
  1626.  
  1627.  
  1628.  
  1629. Function  87h   APPEND
  1630. entry   AH      87h
  1631.         AL      00h     APPEND installation check
  1632.                 return  AH <> 0 if installed
  1633.                 01h     APPEND - unknown
  1634.                 02h     APPEND - version check
  1635. return  unknown
  1636.  
  1637.  
  1638. Function  88h   Microsoft Networks
  1639. entry   AH      88h
  1640.         AL      00h     network program installation check
  1641.                 return  AH <> 0 if installed
  1642.                         BX      installed component flags
  1643.                                 (test in this order!)
  1644.                            bits 2       messenger
  1645.                                 3       redirector
  1646.                                 6       server
  1647.                                 7       receiver
  1648.                                 other bits not used, do not test
  1649.                 01h     unknown
  1650.                 02h     unknown
  1651.                 03h     get current POST address
  1652.                         return  ES:BX   POST address
  1653.                 04h     set new POST address
  1654.                         ES:BX   new POST address
  1655.                 09h     network version check
  1656.  
  1657.  
  1658. Function  89h   WHOA!           (slows system down for games)
  1659. entry   AH      89h
  1660.         AL      00h     installation check
  1661.                 return  AL      00h     not installed
  1662.                                 0FFh    installed
  1663.                 01h     uninstall
  1664.                 return  AL      0FDh    successful
  1665.                                 0FEh    error
  1666.                 02h     set delay count
  1667.                 BX = delay count (larger values slow system down more)
  1668.                 return  AL      0FDh    successful
  1669.                                 0FEh    error
  1670. note    WHOA!.COM is copyright COMPUTE! Publications and Brad Crandall.
  1671.  
  1672.  
  1673. Function  0AAh  VIDCLOCK.COM
  1674. entry   AH      0AAh
  1675.         AL      00h     installation check
  1676. return  AL      00h     not installed
  1677.                 0FFh    installed
  1678. note    VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III.
  1679.  
  1680.  
  1681. Function  0ADh  KEYB.COM                                     (DOS 3.3+)
  1682. entry   AH      0ADh
  1683.         AL      80h     Get KEYB.COM Version Number
  1684. return
  1685.         BX      00h     not installed
  1686.                 nonzero installed
  1687.                         BH      major version number
  1688.                         BL      minor version number
  1689. ---
  1690.         AL      81h     Set KEYB.COM Active Code Page
  1691.         BX      code page ID
  1692.                 437     USA
  1693.                 850     Multilingual (Latin I)
  1694.                 852     Multilingual (Latin II)
  1695.                 860     Portuguese
  1696.                 863     French-Canadian
  1697.                 865     Nordic
  1698. return  CF      clear   successful
  1699.                 set
  1700.                 AX      0001h   if code page is not valid
  1701. ---
  1702.         AL      82h     Set KEYB.COM Country Flag
  1703.         BL      00h     domestic (USA) keyboard
  1704.                 0FFh    not USA keyboard
  1705. return  CF      clear   successful
  1706.                 set     invalid value was passed in BL
  1707. ---
  1708.         AL      83h     Get KEYB.COM Country Flag
  1709. return  BL      current country flag value (should be 00h or 0FFh)
  1710.  
  1711. note    Some of these functions are available in DOS 3.3 and 4.0, but
  1712.         were not documented.  These descriptions are for DOS 5.0.
  1713.  
  1714.  
  1715. Function  0AEh  DOS Installable Command                      (DOS 3.3+)
  1716. entry   AH      0AEh
  1717.         AL      00h     installation check
  1718.                 DX      0FFFFh
  1719.                 DS:BX   pointer to command line
  1720.                 return  AL      00h     execute command normally
  1721.                                 0FFh    command is TSR extension to
  1722.                                         COMMAND.COM
  1723.                 01h     execute installed command
  1724.                 DX      0FFFFh
  1725.                 DS:SI   pointer to ?
  1726.                 return  DS:SI   unknown
  1727. note 1) This apparently provides a mechanism for TSRs to install
  1728.         permanent extensions to COMMAND.COM.  It seems that
  1729.         COMMAND.COM makes this call before executing the current
  1730.         command line, and does not execute the command itself if the
  1731.         return is 0FFh.
  1732.      2) Fn 01h apparently requests execution of a previous command
  1733.         which a call to fn 01h indicated was resident.
  1734.      3) Format of command line:
  1735.         offset  size    description
  1736.         00h     byte    max length of command line?
  1737.         01h     byte    count of bytes to follow
  1738.         03h   n bytes   command line text, terminated by 0Dh
  1739.  
  1740.  
  1741. Function  0B0h  GRAFTABL.COM                                 (DOS 3.3+)
  1742. entry   AH      0B0h
  1743.         AL      00h     installation check
  1744.         return  AL      00h     not installed, OK to install
  1745.                         0FFh    installed
  1746. note 1) Also used by DISPLAY.SYS.
  1747.  
  1748.                                               
  1749. Function  0B7h  APPEND.EXE                                   (DOS 3.3+)
  1750. entry   AH      0B7h
  1751.         AL      00h     installation check
  1752.                 return  AH      00h     not installed
  1753.                                 nonzero installed (3.3-4.0)
  1754.                                 0FFh    installed (5.0)
  1755.  
  1756.                 01h     unknown
  1757.  
  1758.                 02h     version check
  1759.                 return  AH      minor version number, otherwise
  1760.                         AL      major version number
  1761.                 note    The MS 5.0 TR reports AX should be 0FFFFh for
  1762.                         versions compatible with DOS 5.0.  However,
  1763.                         DOS 4.0 returns the same value.
  1764.  
  1765.                 03h     unknown
  1766.  
  1767.                 04h     get APPEND directory list address    (DOS 4.0+)
  1768.                 return  ES:DI   pointer to active APPEND path (128
  1769.                                 bytes max) in ASCIIZ format
  1770.  
  1771.                 05h     unknown
  1772.  
  1773.                 06h     get APPEND modes flag                (DOS 4.0+)
  1774.                 return  BX      APPEND state
  1775.                            bits 0       set if APPEND enabled 
  1776.                                 1-B     reserved, must be zero 
  1777.                                 C       appends dirs to file requests 
  1778.                                         that already specify a drive 
  1779.                                 D       applies dirs to file requests 
  1780.                                         that already specify a PATH.  
  1781.                                         Set if /PATH flag active 
  1782.                                 E       stores the appended dirs in the 
  1783.                                         APPEND environment variable.  
  1784.                                         Set if /E flag active 
  1785.                                 F       applies dirs to functions like 
  1786.                                         EXEC (21h/4B00h) or FIND FIRST 
  1787.                                         (21h/4Eh). Set if /X flag 
  1788.                                         active. 
  1789.                 note    Returns the current operation modes for APPEND.
  1790.  
  1791.                 07h     set APPEND modes flag                   (DOS 4.0+)
  1792.                         BX      APPEND state bits (see 06h)
  1793.                 return  none
  1794.  
  1795.                 08h     unknown
  1796.                 09h     unknown
  1797.                 0Ah     unknown
  1798.                 10h     unknown
  1799.  
  1800.                 11h     set TRUENAME flag                    (DOS 4.0+)
  1801.                 note 1) This call has no parameters.
  1802.                      2) If the next int 21h call is function 3Dh, 43h, 
  1803.                         4Eh or 6Ch, the fully qualified filename is 
  1804.                         written over top of the filename passed to the 
  1805.                         int 21h call. The application must provide a 
  1806.                         sufficiently large buffer. This state is reset 
  1807.                         after APPEND processes the call. 
  1808.  
  1809. note 1) (4.0+) The full path name can be retrieved by doing a int 2Fh 
  1810.         fn 0B711h before an open (int 21h 3Dh or 6Ch).  The full path 
  1811.         is put in your ASCIIZ string when you do the open, so be sure 
  1812.         it is long enough. 
  1813.      2) The APPEND command apparently covers parts of int 21h/6Ch even 
  1814.         though Microsoft's 4.01 User's Reference says it covers only 
  1815.         0Fh, 23h, 2Dh, 11h, 4Eh & 4Bh, some of those do require 
  1816.         special switches.  For 6Ch, it may be a function of the DX 
  1817.         register.  If DX=xx1x it looks only in the current directory, 
  1818.         if DX=xx0x it will search the full append path.  DX is called 
  1819.         the open flag and gives what action to take if the file exits 
  1820.         or does not exist. 
  1821.  
  1822.  
  1823. Function  0BFh  PC-LAN Network
  1824. entry   AH      0BFh
  1825.         AL      00h     installation check        (REDIREFS.EXE)
  1826.         return  AL      0FFh    if installed
  1827.         AL      80h     set REDIRIFS entry point  (REDIR.SYS)
  1828.                 ES:DI   pointer to FAR entry point to IFS handler in 
  1829.                         REDIRIFS 
  1830.         return  AL      0FFh    if installed
  1831.                 ES:DI   pointer to internal workspace
  1832. note    All future IFS calls to REDIR.SYS are passed to the ES:DI entry
  1833.         point.
  1834.  
  1835.  
  1836. Function  0C7h  Artisoft LANtastic AI-LANBIOS
  1837. note    This is the default entry point for the LANtastic NOS serial 
  1838.         and parallel port drivers. 
  1839.  
  1840.  
  1841. Function 0D44Dh 4DOS v3.01,+ Command Interpreter  (COMMAND.COM replacement)
  1842. entry   AX      0D44Dh  4DOS installation check
  1843. return  If 4DOS is present in memory the following values will be 
  1844.         returned: 
  1845.         AX      44DDh
  1846.         BH      minor 4DOS version number
  1847.         BL      major 4DOS version number (same format as DOS int 
  1848.                 21h/fn 30h) 
  1849.         CX      4DOS PSP segment address
  1850.         DL      4DOS shell number (0 for the first shell, 1 for the 
  1851.                 second, etc.; incremented each time a new copy of 4DOS 
  1852.                 is loaded over a root copy, either in a different 
  1853.                 multitasker window or via nested shells) 
  1854. note 1) (excerpted from 4DOS 3.01 manual) 4DOS now generates two 
  1855.         different INT 2F calls to allow TSRs to tell when 4DOS is back 
  1856.         at the prompt.  These calls have AX = D44Eh.  The first occurs 
  1857.         immediately before displaying the prompt, with BX = 0; the 
  1858.         second occurs after displaying the prompt and immediately 
  1859.         before accepting keyboard input, with BX = 1.  Any routine 
  1860.         intercepting these calls should preserve at least the SI, DI, 
  1861.         BP, SP, DS, ES, and SS registers. 
  1862.      2) This function (440Dh) is only available in swapping mode.  It 
  1863.         tells you if 4DOS is loaded in memory, but not whether it is 
  1864.         the parent process of your program.  You can determine if 4DOS 
  1865.         is the parent process by comparing the PSP value returned in 
  1866.         CX to the PSP chain pointer at offset 16h in your program's 
  1867.         PSP. 
  1868.  
  1869.  
  1870. Function  0E3h  AnarKey    (keyboard command stack and alias program)
  1871. entry   AH      0E3h
  1872.         AL      00h     installation check
  1873.         return  AL      00h     not installed
  1874.                         0FFh    installed
  1875. note    (excerpted from the AnarKey documentation)
  1876.         Upon installation, ANARKEY hooks into two interrupts:
  1877.         1) Interrupt used to install program signature
  1878.                 -DOS versions before 3.1 use one interrupt between 60h-67h
  1879.                 -DOS 3.1 and later use interrupt 2Fh
  1880.         2) Interrupt 21h, function 0Ah
  1881.         Upon initial program execution, a program "signature" is 
  1882.         installed which is used by ANARKEY to prevent itself from 
  1883.         being installed more than once. Depending upon the DOS 
  1884.         version, a different method of signature installation is 
  1885.         performed. 
  1886.          Under DOS 2.x thru 3.0, ANARKEY scans interrupt vectors 60h 
  1887.         thru 67h searching for an unused vector (signified by a null 
  1888.         value).  If an unused vector is found, ANARKEY takes it and 
  1889.         installs its program signature there. If all the vectors are 
  1890.         in use, ANARKEY does not install a program signature. 
  1891.          Running DOS 3.1 and later, ANARKEY chains into interrupt 2Fh. 
  1892.         By default, ANARKEY appropriates process number 0E3h. 
  1893.  
  1894.  
  1895. Function  0F7h  AUTOPARK.COM  (PD TSR hard disk parking utility)
  1896. entry   AH      0F7h
  1897.         AL      00h     installation check
  1898.                 return  AL      00h     not installed
  1899.                                 0FFh    installed
  1900.         01h     set parking delay
  1901.                 BX:CX   32 bit count of 55ms timer ticks
  1902. note    AUTOPARK is a TSR HD parker by Alan D. Jones.
  1903.  
  1904.  
  1905. Function        Intel Communicating Applications Standard (CAS 1.01A)
  1906. entry   AH              (default; CAS multiplex number can be user-adjusted)
  1907.         AL      00h     Get Installed State
  1908.                         return  AL      00h     not installed
  1909.                                         01h     not installed, not
  1910.                                                 OK to install
  1911.                                         0FFh    installed
  1912.                         note    No errors are returned.
  1913.                 01h     Submit a Task
  1914.                         DS:DX   ptr to ASCIIZ path and name of Task 
  1915.                                 Control File 
  1916.                         return  AX      positive event handle or neg. 
  1917.                                         error code 
  1918.                         note    Files associated with a task must stay 
  1919.                                 in existence until the task is complete 
  1920.                                 or an error will result. 
  1921.                 02h     Abort the Current Event
  1922.                         return  AX      event handle of aborted event or
  1923.                                         negative error code
  1924.                         note    Terminating an event is not 
  1925.                                 instantaneous. It might take up to 30 
  1926.                                 seconds. 
  1927.                 03h     reserved
  1928.                 04h     reserved
  1929.                 05h     Find First Entry in Queue
  1930.                         CX      Status of the event you are seeking. 
  1931.                                 This value is compared with the field 
  1932.                                 at offset 2 of the Control File 
  1933.                                 0 - event has successfully completed
  1934.                                 1 - event is waiting to be processed
  1935.                                 2 - number has been dialed
  1936.                                 3 - connection has been made (sending)
  1937.                                 4 - connection has been made (receiving)
  1938.                                 5 - event was aborted
  1939.                                -1 - chooses an event without regard to 
  1940.                                     status This value will probably be 
  1941.                                     used most often 
  1942.                                 Other negative values match error codes 
  1943.                                 in Control File. 
  1944.                         DH      direction:
  1945.                                 0 - Search forward chronologically 
  1946.                                     (from the first to the last 
  1947.                                     occurring event) 
  1948.                                 1 - Search backward chronologically 
  1949.                                     (from the last to the first 
  1950.                                     occurring event) 
  1951.                         DL      queue to search:
  1952.                                 0 - Find first control file in Task 
  1953.                                     Queue 
  1954.                                 1 - Find first control file in Receive 
  1955.                                     Queue 
  1956.                                 2 - Find first control file in Log 
  1957.                                     Queue 
  1958.                         return  AX      0 if successful, or negative
  1959.                                         error code
  1960.                                 BX      event handle for this file
  1961.                 06h     Find Next Entry in Queue
  1962.                         DL      queue to search:
  1963.                                 0 - Find next control file in Task 
  1964.                                     Queue 
  1965.                                 1 - Find next control file in Receive 
  1966.                                     Queue 
  1967.                                 2 - Find next control file in Log Queue 
  1968.                         return  AX      0 if successful, or negative
  1969.                                         error code
  1970.                                 BX      event handle for this file
  1971.                 07h     Open a File
  1972.                         BX      event handle
  1973.                         CX      receive file number
  1974.                                 0 - the Receive Control File
  1975.                                 1 - first received file
  1976.                                 2 - second received file
  1977.                                 3 - third received file
  1978.                                 n - nth received file
  1979.                         DL      queue:
  1980.                                 0 - open control file in Task Queue 
  1981.                                 1 - open control file in Receive Queue 
  1982.                                     or the received data 
  1983.                  file specified in the CX register.
  1984.                                 2 - Open control file in Log Queue.
  1985.                         return  AX      0 if successful, or negative
  1986.                                         error code
  1987.                                 BX      DOS file handle for the requested
  1988.                                         file
  1989.                 08h     Delete a File
  1990.                         BX      event handle
  1991.                         CX      receive file number
  1992.                                 0 - delete all files associated with a 
  1993.                                     specific Receive Control File 
  1994.                                     (including the RCF) 
  1995.                                 1 - delete first received file 
  1996.                                     associated with the event handle 
  1997.                                 2 - delete the second received file 
  1998.                                     associated with the event handle. 
  1999.                                 n - delete the nth received file 
  2000.                                     associated with the event handle 
  2001.                         DL      queue:
  2002.                                 0 - delete control file in Task Queue 
  2003.                                 1 - delete a file or files associated 
  2004.                                     with an event in the Receive Queue. 
  2005.                                 2 - delete control file in Log Queue 
  2006.                                     note   It is strongly recommended 
  2007.                                     that this function NOT be used to 
  2008.                                     delete individual Log Control Files 
  2009.                                     to maintain the integrity of the 
  2010.                                     log. 
  2011.                         return  AX      0 if successful, or negative
  2012.                                         error code
  2013.                 09h     Delete All Files (in a queue)
  2014.                         DL      queue:
  2015.                                 0 - delete all control files in the 
  2016.                                     Task Queue 
  2017.                                 1 - delete all control files in the 
  2018.                                     Receive Queue and all received 
  2019.                                     files 
  2020.                                 2 - delete all control files in the Log 
  2021.                                     Queue 
  2022.                         return  AX      0 if successful or negative
  2023.                                         error code
  2024.                 0Ah     Get Event Date
  2025.                         BX      event handle of event whose date you 
  2026.                                 want to get 
  2027.                         DL      queue:
  2028.                                 0 - task queue
  2029.                                 1 - receive queue
  2030.                                 2 - log queue
  2031.                         return  AX      0 if successful or negative
  2032.                                         error code
  2033.                                 CX      year  (1980-2099)
  2034.                                 DH      month (1-12)
  2035.                                 DL      day   (1-31)
  2036.                 0Bh     Set Task Date
  2037.                         BX      event handle
  2038.                         CX      year  (1980-2099)
  2039.                         DH      month (1-12)
  2040.                         DL      day   (1-31)
  2041.                         return  AX      0 if successful or negative
  2042.                                         error code
  2043.                 0CH     Get Event Time
  2044.                         BX      event handle
  2045.                         DL      queue:
  2046.                                 0 - task queue
  2047.                                 1 - receive queue
  2048.                                 2 - log queue
  2049.                         return  AX      0 if successful or negative
  2050.                                         error code
  2051.                                 CH      hour    (0-23)
  2052.                                 CL      minutes (0-59)
  2053.                                 DH      seconds (0-59)
  2054.                                 DL      0
  2055.                 0DH     Set Task Time
  2056.                         BX      event handle
  2057.                         CH      hour    (0-23)
  2058.                         CL      minutes (0-59)
  2059.                         DH      seconds (0-59)
  2060.                         DL      unused
  2061.                         return  AX      0 if successful or negative
  2062.                                         error code
  2063.                 0EH     Get External Data Block
  2064.                         DS:DX points to a 256-byte EDB area
  2065.                         return  AX      0 if successful or negative
  2066.                                         error code
  2067.                         note    EDB area is filled with the External 
  2068.                                 Data Block 
  2069.                                 block format: (values in decimal)
  2070.                               Offset Length        Description
  2071.                                  0    1    CAS major version number 
  2072.                                  1    1    CAS minor version number 
  2073.                                  2    68   ASCIIZ path to directory 
  2074.                                            containing Resident Manager 
  2075.                                            and CAS software. The path 
  2076.                                            must end with a backslash 
  2077.                                  70   13   ASCIIZ name of current 
  2078.                                            phonebook (the CAS 
  2079.                                            subdirectory is assumed) 
  2080.                                  83   13   AZCIIZ name of current logo 
  2081.                                            file (the CAS subdirectory is 
  2082.                                            assumed) 
  2083.                                  96   32   ASCIIZ default sender name 
  2084.                                  128  21   ASCIIZ CSID (CCITT fax device 
  2085.                                            ID) 
  2086.                                  149  107  Reserved 
  2087.                 0Fh     Get/Set Autoreceive State
  2088.                         DL      function code:
  2089.                                 0 - get current autoreceive state 
  2090.                                 1 - set current state to value in DH 
  2091.                                 DH      # rings before answer or 0 to
  2092.                                         disable
  2093.                         return  AX      current state or negative error
  2094.                                         code
  2095.                                         0 - Autoreceive disabled
  2096.                                         positive # - # rings before hdw
  2097.                                                      answers
  2098.                 10h     Get Current Event Status
  2099.                         DS:DX   pointer to a 444 byte status area
  2100.                         return  AX      0 if successful or negative
  2101.                                         error code
  2102.                                 BX      number of the current event (AX=0)
  2103.                 11h     Get Queue Status
  2104.                         DL      queue:
  2105.                                 0 - find status of Task Queue
  2106.                                 1 - find status of Receive Queue
  2107.                                 2 - find status of Log Queue
  2108.                         return  AX      # changes to queue since 
  2109.                                         Resident Manager started or 
  2110.                                         negative error code If changes 
  2111.                                         exceeds 7FFFH, the count begins 
  2112.                                         again at 0. 
  2113.                                 BX      current # of Control Files in 
  2114.                                         queue 
  2115.                                 CX      current # of received files 
  2116.                 12h     Get Hardware Status
  2117.                         DS:DX   pointer to a 128-byte status area
  2118.                         return  AX      0 if successful, negative if not
  2119.                         DS:DX   pointer to filled 128-byte status area
  2120.                 13h     Run Diagnostics
  2121.                         DL      Mode
  2122.                                 0 - report progress of diagnostics
  2123.                                 1 - start running diagnostics
  2124.                         return  if DL=1, AX=0 or a negative error code.
  2125.                                 if DL=0, AX=40h or positive number 
  2126.                                 indicating diagnostics passed. A 
  2127.                                 negative value indicates failure and 
  2128.                                 contains the error code 
  2129.                 14h     Move Received File
  2130.                         BX      event handle
  2131.                         CX      receive file number
  2132.                                 (must be nonzero to specify a received 
  2133.                                 file) 
  2134.                                 1 - first received file
  2135.                                 2 - second received file
  2136.                                 3 - third received file
  2137.                                 n - nth received file
  2138.                         DS:DX   pointer to new ASCIIZ pathname and 
  2139.                                 filename.  This file must not exist 
  2140.                                 already 
  2141.                         return  AX      0 if successful or negative
  2142.                                         error code
  2143.                         note    The path to the new directory must 
  2144.                                 exist.  This function cannot create 
  2145.                                 directories. 
  2146.                 15h     Submit a Single File to Send
  2147.                         DS:DX   pointer to variable-length data area
  2148.                         return  AX      positive event handle or 
  2149.                                         negative error code
  2150.                         note 1) variable-length data area format:
  2151.                              Offset Length    Description
  2152.                                 0    1    Transfer type:
  2153.                                           0 - 200x200 dpi, facsimile mode
  2154.                                           1 - 100x200 dpi, facsimile mode
  2155.                                           2 - file transfer mode
  2156.                                           3-127 - Reserved.
  2157.                                 1    1    Text size (if ASCII file, fax
  2158.                                           mode)
  2159.                                           0 - 80-column
  2160.                                           1 - 132-column
  2161.                                           2-127 - reserved
  2162.                                 2    2    time to send, in DOS file time 
  2163.                                           format 
  2164.                                 4    2    date to send, in DOS file time 
  2165.                                           format note: Setting both the 
  2166.                                           time and date fields to 0 
  2167.                                           schedules the file to be sent 
  2168.                                           immediately 
  2169.                                 6    32   ASCIIZ Destination Name  (To: 
  2170.                                           field) 
  2171.                                 38   80   ASCIIZ pathname of the file to 
  2172.                                           send 
  2173.                                 118  47   ASCIIZ phone number to call 
  2174.                                 165  64   ASCIIZ application-specific 
  2175.                                           tag field 
  2176.                                 229  1    reserved; set to zero
  2177.                                 230  1    cover page flag:
  2178.                                           0 - don't send cover page
  2179.                                           1 - send cover page
  2180.                                           2-127 - Reserved
  2181.                                 231  23   reserved; set to zero
  2182.                                 254  var  ASCIIZ cover text (if offset
  2183.                                           230=1)
  2184.                              2) The individual fields have the same 
  2185.                                 meaning as in a Task Control File 
  2186.                              3) You must set all fields, except for the 
  2187.                                 Appli-cation-Specific Tag field, before 
  2188.                                 calling this function. However, you can 
  2189.                                 set the Destination Name and Cover Text 
  2190.                                 fields to an empty string 
  2191.                 16h-80h Reserved by Intel for future expansion
  2192.  
  2193.  
  2194.  
  2195. DOS 2Fh functions 01h (PRINT), 02h (ASSIGN), 10h (SHARE):
  2196. return  AX      Error
  2197.                 Codes       Description
  2198.                 01h     invalid function number
  2199.                 02h     file not found
  2200.                 03h     path not found
  2201.                 04h     too many open files
  2202.                 05h     access denied
  2203.                 06h     invalid handle
  2204.                 08h     queue full
  2205.                 09h     busy
  2206.                 0Ch     name too long
  2207.                 0Fh     invalid drive was specified
  2208.         CF      clear (0) if OK
  2209.                 set   (1) if error - error returned in AX
  2210. note 1) The multiplex numbers AH=0h through AH=7Fh are reserved for 
  2211.         DOS. Applications should use multiplex numbers 80h through 
  2212.         0FFh. 
  2213.      2) When in the chain for int 2Fh, if your code calls DOS or if 
  2214.         you execute with interrupts enabled, your code must be 
  2215.         reentrant or recursive. 
  2216.      3) Important!  In versions of DOS prior to 3.0, the int 2Fh 
  2217.         vector was initialized to zero rather than being pointed into 
  2218.         the DOS service area.  You must initialize this vector 
  2219.         manually under DOS 2.x. 
  2220.  
  2221.  
  2222.  
  2223. ┌─────────────────────────────────────────────────────────────────────┐
  2224. │ Miscellaneous Interrupts - in numeric order                         │
  2225. └─────────────────────────────────────────────────────────────────────┘
  2226.  
  2227.  
  2228. ┌─────────────────────────────────────────────────────────────────────┐
  2229. │Interrupt 30h   FAR jump instruction for CP/M-style calls ..... 5**15│
  2230. └─────────────────────────────────────────────────────────────────────┘
  2231. note 1) The CALL 5 entry point does a FAR jump to here  (not a vector!)
  2232.      2) PC-Tools PC-Cache 5.1 hooks this vector on XTs but not on ATs.
  2233.  
  2234.  
  2235. ┌─────────────────────────────────────────────────────────────────────┐
  2236. │Interrupt 31h   Unknown ....................................... 5**16│
  2237. └─────────────────────────────────────────────────────────────────────┘
  2238. note    PC-Tools PC-Cache 5.1 hooks this vector on ATs but not on XTs.
  2239.  
  2240.  
  2241. ┌─────────────────────────────────────────────────────────────────────┐
  2242. │Interrupt 32h   Unknown ....................................... 5**17│
  2243. └─────────────────────────────────────────────────────────────────────┘
  2244.  
  2245.  
  2246. ┌─────────────────────────────────────────────────────────────────────┐
  2247. │Interrupt 33h   Used by Microsoft Mouse Driver Function Calls . 5**18│
  2248. └─────────────────────────────────────────────────────────────────────┘
  2249. note    See Chapter 14 for mouse programming.
  2250.  
  2251.  
  2252. ┌─────────────────────────────────────────────────────────────────────┐
  2253. │Interrupt 34h   Turbo/Microsoft langs - Floating Point emul. .. 5**19│
  2254. └─────────────────────────────────────────────────────────────────────┘
  2255. note    This interrupt emulates opcode 0D8h.
  2256.  
  2257.  
  2258. ┌─────────────────────────────────────────────────────────────────────┐
  2259. │Interrupt 35h   Turbo/Microsoft langs - Floating Point emul. .. 5**20│
  2260. └─────────────────────────────────────────────────────────────────────┘
  2261. note    This interrupt emulates opcode 0D9h.
  2262.  
  2263.  
  2264. ┌─────────────────────────────────────────────────────────────────────┐
  2265. │Interrupt 36h   Turbo/Microsoft langs - Floating Point emul. .. 5**21│
  2266. └─────────────────────────────────────────────────────────────────────┘
  2267. note    This interrupt emulates opcode 0DAh.
  2268.  
  2269.  
  2270. ┌─────────────────────────────────────────────────────────────────────┐
  2271. │Interrupt 37h   Turbo/Microsoft langs - Floating Point emul. .. 5**22│
  2272. └─────────────────────────────────────────────────────────────────────┘
  2273. note    This interrupt emulates opcode 0DBh.
  2274.  
  2275.  
  2276. ┌─────────────────────────────────────────────────────────────────────┐
  2277. │Interrupt 38h   Turbo/Microsoft langs - Floating Point emul. .. 5**23│
  2278. └─────────────────────────────────────────────────────────────────────┘
  2279. note 1) This interrupt emulates opcode 0DCh.
  2280.      2) PC-MOS/386 versions prior to 4.00 use this interrupt to 
  2281.         interface with the PC-MOS API.  Version 4.00 and later use int 
  2282.         0D4h for the API.  See the Chapter 13 for the PC-MOS API. 
  2283.  
  2284.  
  2285. ┌─────────────────────────────────────────────────────────────────────┐
  2286. │Interrupt 39h   Turbo/Microsoft langs - Floating Point emul. .. 5**24│
  2287. └─────────────────────────────────────────────────────────────────────┘
  2288. note    This interrupt emulates opcode 0DDh.
  2289.  
  2290.  
  2291. ┌─────────────────────────────────────────────────────────────────────┐
  2292. │Interrupt 3Ah   Turbo/Microsoft langs - Floating Point emul. .. 5**25│
  2293. └─────────────────────────────────────────────────────────────────────┘
  2294. note    This interrupt emulates opcode 0DEh.
  2295.  
  2296.  
  2297. ┌─────────────────────────────────────────────────────────────────────┐
  2298. │Interrupt 3Bh   Turbo/Microsoft langs - Floating Point emul. .. 5**26│
  2299. └─────────────────────────────────────────────────────────────────────┘
  2300. note    This interrupt emulates opcode 0DFh.
  2301.  
  2302.  
  2303. ┌─────────────────────────────────────────────────────────────────────┐
  2304. │Interrupt 3Ch   Turbo/Microsoft langs - Floating Point emul. .. 5**27│
  2305. └─────────────────────────────────────────────────────────────────────┘
  2306. note    This interrupt emulates instructions with an ES segment
  2307.         override.
  2308.  
  2309.  
  2310. ┌─────────────────────────────────────────────────────────────────────┐
  2311. │Interrupt 3Dh   Turbo/Microsoft langs - Floating Point emul. .. 5**28│
  2312. └─────────────────────────────────────────────────────────────────────┘
  2313. note    This interrupt emulates a standalone FWAIT instruction
  2314.  
  2315.  
  2316. ┌─────────────────────────────────────────────────────────────────────┐
  2317. │Interrupt 3Eh   Turbo/Microsoft langs - Floating Point emul. .. 5**29│
  2318. └─────────────────────────────────────────────────────────────────────┘
  2319. note    Unknown.
  2320.  
  2321.  
  2322. ┌─────────────────────────────────────────────────────────────────────┐
  2323. │Interrupt 3Fh   Overlay Manager Interrupt (Microsoft LINK.EXE)  5**30│
  2324. └─────────────────────────────────────────────────────────────────────┘
  2325. note 1) Default overlay manager interrupt; may be changed with LINK 
  2326.         command line switch. (Microsoft/IBM LINK.EXE) 
  2327.      2) The Microsoft Dynamic Link Library manager uses this 
  2328.         interrupt. 
  2329.  
  2330.  
  2331. ┌─────────────────────────────────────────────────────────────────────┐
  2332. │Interrupt 40h   Hard Disk BIOS ................................ 5**31│
  2333. └─────────────────────────────────────────────────────────────────────┘
  2334.                 Pointer to disk BIOS entry when a hard disk controller
  2335.                 is installed.  The BIOS routines use int 30h to
  2336.                 revector the diskette handler (original int 13h) here
  2337.                 so int 40h may be used for hard disk control.
  2338. note 1) Keyboard interrupt for DEC Rainbow.
  2339.  
  2340.  
  2341. ┌─────────────────────────────────────────────────────────────────────┐
  2342. │Interrupt 41h   Hard Disk Parameters .......................... 5**32│
  2343. └─────────────────────────────────────────────────────────────────────┘
  2344.                 Pointer to first Hard Disk Parameter Block, normally
  2345.                 located in the controller card's ROM.  This table may
  2346.                 be copied to RAM and changed, and this pointer
  2347.                 revectored to the new table.
  2348. note 1) XT, AT,XT/2, XT/286, PS/2 except ESDI disks
  2349.      2) format of parameter table is:
  2350.         word    cylinders
  2351.         byte    heads
  2352.         word    starting reduced write current cylinder
  2353.                 (XT only, 0 for others)
  2354.         word    starting write pre-comp cylinder
  2355.         byte    maximum ECC burst length
  2356.         byte    control byte
  2357.            bits 0-2     drive option (XT only, 0 for others)
  2358.                 3       set if more than 8 heads
  2359.                 4       always 0
  2360.                 5       set if manufacturer's defect map on
  2361.                         max cylinder+1
  2362.                 6       disable ECC retries
  2363.                 7       disable access retries
  2364.         byte    standard timeout (XT only, 0 for others)
  2365.         byte    formatting timeout (XT only, 0 for others)
  2366.         byte    timeout for checking drive (XT only, 0 for others)
  2367.         word    landing zone    (AT, PS/2)
  2368.         byte    sectors/track   (AT, PS/2)
  2369.         byte    0  (zeroes)
  2370.      3) normally vectored to ROM table when system is initialized.
  2371.  
  2372.  
  2373. ┌─────────────────────────────────────────────────────────────────────┐
  2374. │Interrupt 42h   Pointer to screen BIOS entry .................. 5**33│
  2375. └─────────────────────────────────────────────────────────────────────┘
  2376.                 Used by EGA, VGA, PS/2.
  2377.                 Relocated (by EGA, etc.) video handler (original int 10h).
  2378.                 Revectors int 10 (BIOS video) calls to EGA BIOS.
  2379.                 Also used by Zenith Z-100.
  2380.                 MCT (Modular Circuit Technology, Taiwan) 4-drive floppy
  2381.                   controller revectors int 13h to here.
  2382.  
  2383.  
  2384. ┌─────────────────────────────────────────────────────────────────────┐
  2385. │Interrupt 43h   Pointer to EGA Graphics Character Table ....... 5**34│
  2386. └─────────────────────────────────────────────────────────────────────┘
  2387. note 1) The POST initializes this vector pointing to the default table 
  2388.         located in the EGA ROM BIOS.  (PC-2 and up).  Not initialized
  2389.         if EGA is not present. 
  2390.      2) This vector was referred to (mistakenly) as the Video
  2391.         Parameters table in the original EGA BIOS listings. 
  2392.  
  2393.  
  2394. ┌─────────────────────────────────────────────────────────────────────┐
  2395. │Interrupt 44h   Pointer to graphics character table ........... 5**35│
  2396. └─────────────────────────────────────────────────────────────────────┘
  2397. (0:0110h)       This table contains the dot patterns for the first 128
  2398.                 characters in video modes 4,5, and 6, and all 256
  2399.                 characters in all additional graphics modes.  Not
  2400.                 initialized if EGA is not present.
  2401. note 1) EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh.
  2402.      2) Novell NetWare - High-Level Language API.
  2403.      3) Also used by Zenith Z-100.
  2404.  
  2405.  
  2406. ┌─────────────────────────────────────────────────────────────────────┐
  2407. │Interrupt 45h   Reserved by IBM  (not initialized) ............ 5**36│
  2408. └─────────────────────────────────────────────────────────────────────┘
  2409. note    Also used by Zenith Z-100, purpose unknown.
  2410.  
  2411.  
  2412. ┌─────────────────────────────────────────────────────────────────────┐
  2413. │Interrupt 46h   Pointer to second hard disk parameter block ... 5**37│
  2414. └─────────────────────────────────────────────────────────────────────┘
  2415. note 1) AT, XT/286, PS/2.
  2416.      2) (see int 41h) (except ESDI hard disks) (not initialized unless
  2417.         specific user software calls for it)
  2418.      3) Also used by Zenith Z-100.
  2419.  
  2420.  
  2421. ┌─────────────────────────────────────────────────────────────────────┐
  2422. │Interrupt 47h   Reserved by IBM  (not initialized) ............ 5**38│
  2423. └─────────────────────────────────────────────────────────────────────┘
  2424.  
  2425.  
  2426. ┌─────────────────────────────────────────────────────────────────────┐
  2427. │Interrupt 48h   Cordless Keyboard Translation ................. 5**39│
  2428. └─────────────────────────────────────────────────────────────────────┘
  2429. (0:0120h)
  2430. This vector points to code to translate the cordless keyboard 
  2431. scancodes into normal 83-key values.  The translated scancodes are 
  2432. then passed to int 9.  (not initialized on PC or AT) This is valid on 
  2433. the IBM PCjr only.  IBM built a number of prototype XT/2 machines with 
  2434. infrared keyboards which were later sold through salvage outlets, but 
  2435. this was never a production option. 
  2436.  
  2437.  
  2438. ┌─────────────────────────────────────────────────────────────────────┐
  2439. │Interrupt 49h   Non-kbd Scan Code Translation Table Addr (PCjr) 5**40│
  2440. └─────────────────────────────────────────────────────────────────────┘
  2441. (0:0124h)       PCjr translate table, TI Pro video
  2442.  
  2443.     1)  This interrupt is used for operation of non-keyboard devices 
  2444.         on the PCjr, such as the Keytronic Numeric Keypad. This 
  2445.         interrupt has the address of a table used to translate non-
  2446.         keyboard scancodes (greater than 85 excepting 255). This 
  2447.         interrupt can be revectored by a user application. IBM 
  2448.         recommends that the default table be stored at the beginning 
  2449.         of an application that required revectoring this interrupt, 
  2450.         and that the default table be restored when the application 
  2451.         terminates. (not initialized on PC or AT) 
  2452.  
  2453.         The PCjr BIOS can interpret scancodes other than those 
  2454.         generated by the keyboard to allow for expansion. The keyboard 
  2455.         generates scancodes from 01h to 055h, including 0FFh. Any 
  2456.         scancodes above 55h (56h through 7Eh for make codes and 0D6h 
  2457.         through 0FEh for break codes) are processed in the following 
  2458.         manner: 
  2459.           1) if the incoming make code falls within the range of the 
  2460.              translate table whose address is pointed to by int 49h, 
  2461.              it is translated into the corresponding scancode. Any 
  2462.              incoming break codes above 0D5h are ignored. 
  2463.           2) if the new translated scancode is less than 56h, it is 
  2464.              processed by the BIOS as a keyboard scancode and the same 
  2465.              data is placed in the BIOS keyboard buffer. 
  2466.           3) if the translated scancode is higher than 55h or the 
  2467.              incoming scancode is outside the range of the translate 
  2468.              table, 40h is added creating a new extended scancode. The 
  2469.              extended scancode is placed in the BIOS keyboard buffer 
  2470.              with the character code of 00h (NUL). This utilitizes the 
  2471.              range of 96h through 0BEh for scancodes 56h through 7Eh. 
  2472.  
  2473.              The default translate-table maps scancodes 56h through 
  2474.              6Ah to existing keyboard values. Codes 6Bh theough 0BEh 
  2475.              are mapped (by adding 40h) to extended codes 0ABh through 
  2476.              0FEh since they are outside the range of the default 
  2477.              translate table. 
  2478.  
  2479.              The format of the translate table is:
  2480.  
  2481.              0       length - the number of nonkeyboard scancodes that 
  2482.                      are mapped within the table (from 1 to n). 
  2483.              1 to n  word  high byte 00h (NUL) byte scancode with low 
  2484.                      order byte representing the scancode mapped 
  2485.                      values relative to their input values within the 
  2486.                      range of 56h through 7Eh. 
  2487.  
  2488.              With this layout, all keyboard scancodes can be intercepted
  2489.              through int 9h and and nonkeyboard scancodes can be
  2490.              intercepted through int 48h.
  2491.  
  2492.     2)  On the TI Professional, this interrupt is used for some video 
  2493.         services. 
  2494.         entry   AH      17h     Get Display Offset
  2495.         return  ES:DI   segment/offset of current display buffer
  2496.         note    The TI Pro has only 2048 bytes of character RAM, but it
  2497.                 is followed by another 2048 bytes of "phantom" RAM
  2498.                 (i.e. the same 2048 bytes are available at two
  2499.                 different addresses) so that wraparound checks need not
  2500.                 be made when writing to the screen. The attribute RAM
  2501.                 is "shadowed" behind the character RAM through the
  2502.                 attribute register.
  2503.  
  2504.     3)  Most of the TI Pro functions are identical to the IBM int 16h 
  2505.         functions, particularly 0 through 0Eh, although 6 and 7 
  2506.         (scroll) are quite different and all cursor addressing has the 
  2507.         rows and columns flipped (i.e. IBM uses DH for row, but TI 
  2508.         uses DH for column). 
  2509.  
  2510.  
  2511. ┌─────────────────────────────────────────────────────────────────────┐
  2512. │Interrupt 4Ah   Real-Time Clock Alarm (Convertible, PS/2, EISA) 5**41│
  2513. └─────────────────────────────────────────────────────────────────────┘
  2514. 1)   Not initialized on PC or AT. 
  2515. 2)   Invoked by PS/2 and Convertible BIOS when real-time clock alarm 
  2516.      occurs. 
  2517. 3)   Used by TI Professional PC for keyboard DSR interface (keyboard 
  2518.      BIOS interrupt)  Functions for AH=0, 1, 2 and 5 are identical to 
  2519.      IBM's int 16h. 
  2520.  
  2521.  
  2522. ┌─────────────────────────────────────────────────────────────────────┐
  2523. │Interrupt 4Bh   Reserved by IBM  (not initialized) ............ 5**42│
  2524. └─────────────────────────────────────────────────────────────────────┘
  2525. note 1) Used by IBM Micro Channel SCSI hard disk controllers.
  2526.      2) Used by Virtual DMA Services Specification  (see Chapter 21 for
  2527.         VDS programming information)
  2528.  
  2529.  
  2530. ┌─────────────────────────────────────────────────────────────────────┐
  2531. │Interrupt 4Ch   Reserved by IBM  (not initialized) ............ 5**43│
  2532. └─────────────────────────────────────────────────────────────────────┘
  2533.  
  2534.  
  2535. ┌─────────────────────────────────────────────────────────────────────┐
  2536. │Interrupt 4Dh   Reserved by IBM  (not initialized) ............ 5**44│
  2537. └─────────────────────────────────────────────────────────────────────┘
  2538.  
  2539.  
  2540. ┌─────────────────────────────────────────────────────────────────────┐
  2541. │Interrupt 4Eh   Reserved by IBM  (not initialized) ............ 5**45│
  2542. └─────────────────────────────────────────────────────────────────────┘
  2543. note    Used instead of int 13h for disk I/O on TI Professional PC.
  2544.  
  2545.  
  2546. ┌─────────────────────────────────────────────────────────────────────┐
  2547. │Interrupt 4Fh   Reserved by IBM  (not initialized) ............ 5**46│
  2548. └─────────────────────────────────────────────────────────────────────┘
  2549.  
  2550.  
  2551. ┌─────────────────────────────────────────────────────────────────────┐
  2552. │Interrupt 50-57 IRQ0-IRQ7 Relocation .......................... 5**47│
  2553. └─────────────────────────────────────────────────────────────────────┘
  2554. note 1) Normally not initialized.
  2555.      2) IRQ0-IRQ7 relocated by DesQview.
  2556.      3) IRQ0-IRQ7 relocated by IBM 3278 Emulation Control Program.
  2557.  
  2558.  
  2559. ┌─────────────────────────────────────────────────────────────────────┐
  2560. │Interrupt 58h   Reserved by IBM  (not initialized) ............ 5**48│
  2561. └─────────────────────────────────────────────────────────────────────┘
  2562.  
  2563.  
  2564. ┌─────────────────────────────────────────────────────────────────────┐
  2565. │Interrupt 59h   Reserved by IBM  (not initialized) ............ 5**49│
  2566. └─────────────────────────────────────────────────────────────────────┘
  2567.         GSS Computer Graphics Interface (GSS*CGI)
  2568. entry   DS:DX   pointer to block of 5 array pointers
  2569. return  CF      clear
  2570.                 AX      return code
  2571.         CF      set
  2572.                 AX      error code
  2573. note 1) Int 59h is the means by which GSS*CGI language bindings
  2574.         communicate with GSS*CGI device drivers and the GSS*CGI device
  2575.         driver controller.
  2576.      2) Also used by the IBM Graphic Development Toolkit.
  2577.  
  2578.  
  2579. ┌─────────────────────────────────────────────────────────────────────┐
  2580. │Interrupt 5Ah   Reserved by IBM  (not initialized)  ........... 5**50│
  2581. └─────────────────────────────────────────────────────────────────────┘
  2582. note    IBM Cluster Adapter BIOS entry address.
  2583.  
  2584.  
  2585. ┌─────────────────────────────────────────────────────────────────────┐
  2586. │Interrupt 5Bh   Reserved by IBM  (not initialized) ............ 5**51│
  2587. └─────────────────────────────────────────────────────────────────────┘
  2588. note    Used by IBM Cluster Adapter.
  2589.  
  2590.  
  2591. ┌─────────────────────────────────────────────────────────────────────┐
  2592. │Interrupt 5Ah   Cluster Adapter BIOS entry address ............ 5**52│
  2593. └─────────────────────────────────────────────────────────────────────┘
  2594. note    Normally not initialized.
  2595.  
  2596.  
  2597. ┌─────────────────────────────────────────────────────────────────────┐
  2598. │Interrupt 5Bh   Reserved by IBM  (not initialized) ............ 5**53│
  2599. └─────────────────────────────────────────────────────────────────────┘
  2600. note    Used by cluster adapter?
  2601.  
  2602.  
  2603. ┌─────────────────────────────────────────────────────────────────────┐
  2604. │Interrupt 5Ch   NETBIOS interface entry port, TOPS ............ 5**54│
  2605. └─────────────────────────────────────────────────────────────────────┘
  2606. note 1) See Chapter 13 for information on network programming. 
  2607.      2) The Texas Instruments Professional PC (TI Pro) uses 5Ch for 
  2608.         the Pause key on the keyboard.  The TI BIOS allows any user 
  2609.         routine to execute from the Pause interrupt as long as it 
  2610.         eventually returns. 
  2611.      3) Used by Windows/386 by Virtual Machine routines. 
  2612.      4) Used by Novell Netware 2.0. 
  2613.  
  2614.  
  2615. ┌─────────────────────────────────────────────────────────────────────┐
  2616. │Interrupt 5Dh   Reserved by IBM  (not initialized) ............ 5**55│
  2617. └─────────────────────────────────────────────────────────────────────┘
  2618. note    The Texas Instruments Professional PC (TI Pro) uses 5Ch for the
  2619.         keyboard services.
  2620.  
  2621.  
  2622. ┌─────────────────────────────────────────────────────────────────────┐
  2623. │Interrupt 5Eh   Reserved by IBM  (not initialized) ............ 5**56│
  2624. └─────────────────────────────────────────────────────────────────────┘
  2625. note    TI Professional PC - Program Break.
  2626.  
  2627.  
  2628. ┌─────────────────────────────────────────────────────────────────────┐
  2629. │Interrupt 5Fh   Reserved by IBM  (not initialized) ............ 5**57│
  2630. └─────────────────────────────────────────────────────────────────────┘
  2631. note    TI Professional PC - Keyboard queueing.
  2632.  
  2633.  
  2634. ┌─────────────────────────────────────────────────────────────────────┐
  2635. │Interrupt 60h-67h  User Program Interrupts .................... 5**58│
  2636. └─────────────────────────────────────────────────────────────────────┘
  2637. note 1) Available for general use. 
  2638.      2) Some Adaptec hard disk controllers used these interrupts.  
  2639.         Models and usages unknown. 
  2640.      3) Various major programs make standardized use of this group of 
  2641.         interrupts.  Details of common use follows: 
  2642.  
  2643.  
  2644. ┌─────────────────────────────────────────────────────────────────────┐
  2645. │Interrupt 60h   User Program Interrupt ........................ 5**59│
  2646. └─────────────────────────────────────────────────────────────────────┘
  2647. note 1) Used by 10-Net Network OS Interface. 
  2648.      2) Used by FTP Driver - PC/TCP Packet Driver Specification. 
  2649.      3) See Chapter 13 for network programming calls. 
  2650.      4) Used by TOPS netork (TTALK.EXE). 
  2651.      5) The 2-The-Max VGA-16 board TSR zoom utility uses this 
  2652.         interrupt by default.  (see int 61h for details) 
  2653.      6) Versa-Spool print spooler revectors int 17h to here when 
  2654.         installing its own 17h handler.  (see int 61h also) 
  2655.      7) Some older OMTI and Adaptec hard disk controllers used the 
  2656.         interrupts from 60h to 63h as 16 bytes of scratch RAM. 
  2657.      8) Used by GDOSMEM Windows TSR skeleton. 
  2658.         entry   AX      GTSR Identification #
  2659.                 BX      00h     GTSR Installation Check
  2660.         return  BX      GTSR Identification #
  2661.  
  2662.         entry   AX      GTSR Identification #
  2663.                 BX      01h     GTSR Increment WORD in CX:DX
  2664.                 CX      Segment => WORD
  2665.                 DX      Offset  => WORD
  2666.         return  none
  2667.      9) Used by TDOSMEM Windows TSR skeleton.
  2668.         entry   AX      TTSR Identification #
  2669.                 BX      00h     GTSR Installation Check
  2670.         return  BX      GTSR Identification #
  2671.                 CX      Segment => local WORD
  2672.                 DX      Offset  => local WORD
  2673.  
  2674.         entry   AX      TTSR Identification #
  2675.                 BX      01h     GTSR Increment WORD in CX:DX
  2676.         return  none
  2677.  
  2678.  
  2679. ┌─────────────────────────────────────────────────────────────────────┐
  2680. │Interrupt 61h  User Interrupt ................................. 5**  │
  2681. └─────────────────────────────────────────────────────────────────────┘
  2682.      1) Default interrupt used by Chris Dunford's PCED 2.0 API.
  2683.      2) Used by Mike Geary's DENYNONE.ASM SHARE.EXE controller.
  2684.  
  2685.         Function  00h   Get Current Mode Value
  2686.         entry   AH      00h
  2687.         return  AL      current mode value
  2688.  
  2689.         Function  01h   Set New Open-Mode Value
  2690.         entry   AH      01h
  2691.                 AL      new value to set
  2692.         return  none
  2693.  
  2694.      3) The 2-The-Max VGA-16 board TSR zoom utility uses this interrupt
  2695.         by default.
  2696.  
  2697.         Function  00h   Zoom
  2698.         entry   AX      0000h
  2699.                 BX      zoom factor (0-7x)
  2700.         return  none
  2701.  
  2702.         Function  01h   Center Zoomed Window
  2703.         entry   AX      0001h
  2704.                 BX      x coordinate to center
  2705.                 CX      y coordinate to center
  2706.         return  none
  2707.         note    'x' and 'y' will be positioned as close to the center of
  2708.                 the display as possible.
  2709.  
  2710.         Function  02h   End Zoom
  2711.         entry   AX      0002h
  2712.         return  none
  2713.         note    Restores screen to original state.
  2714.  
  2715.         Function  03h   Report Zoom
  2716.         entry   AX      0003h
  2717.         return  AX      zoom factor (0-7)
  2718.  
  2719.         Function  04h   Enter Specify Mode
  2720.         entry   AX      0004h
  2721.         return  none
  2722.         note    This mode is entered whenever the predefined hotkey is
  2723.                 pressed.
  2724.  
  2725.         Function  05h   Query Zoom Window
  2726.         entry   AX      0005h
  2727.                 BX      segment address of return argument array
  2728.                 CX      offset address of return argument array
  2729.         return  BX:CX   14 byte array
  2730.                         offset[0]  x start of zoom window
  2731.                               [1]  y start of zoom window
  2732.                               [2]  x end of zoom window
  2733.                               [3]  y end of zoom window
  2734.                               [4]  current zoom factor
  2735.                               [5]  zoom offset start x
  2736.                               [6]  zoom offset start y
  2737.  
  2738.         Function  06h   Set Zoom Window
  2739.         entry   AX      0006h
  2740.                 BX      segment address of window coordinate array
  2741.                 CX      offset address of window coordinate array
  2742.         return  BX:CX   array
  2743.                         offset[0]  x start of zoom window
  2744.                               [1]  y start of zoom window
  2745.                               [2]  x end of zoom window
  2746.                               [3]  y end of zoom window
  2747.      4) Versa-Spool print spooler revectors int 1Ch to here when
  2748.         installing its own 1Ch handler.
  2749.  
  2750.  
  2751. ┌─────────────────────────────────────────────────────────────────────┐
  2752. │Interrupt 63h  User Program Interrupt                                │
  2753. └─────────────────────────────────────────────────────────────────────┘
  2754. This interrupt is used by Novell NetWare v2.0.
  2755.  
  2756.  
  2757. ┌─────────────────────────────────────────────────────────────────────┐
  2758. │Interrupt 64h  User Program Interrupt                                │
  2759. └─────────────────────────────────────────────────────────────────────┘
  2760. This interrupt is used by Novell NetWare IPX versions 1.02-2.0 TBMI.
  2761.  
  2762.  
  2763. ┌─────────────────────────────────────────────────────────────────────┐
  2764. │Interrupt 65h  User Program Interrupt                                │
  2765. └─────────────────────────────────────────────────────────────────────┘
  2766. This interrupt is used by Novell NetWare v2.0.
  2767.  
  2768.  
  2769. ┌─────────────────────────────────────────────────────────────────────┐
  2770. │Interrupt 67h   User Program Interrupt ........................ 5**60│
  2771. └─────────────────────────────────────────────────────────────────────┘
  2772. note 1) Used by Lotus-Intel-Microsoft Expanded Memory Specification 
  2773.         3.1 and higher.  (EMS and LIM) 
  2774.      2) Used by Ashton-Tate/Quadram/AST Enhanced Expanded Memory 
  2775.         Specification 3.1 and higher.  (EEMS) 
  2776.      3) Used by Phar Lap/Quarterdeck VCPI v1.0. 
  2777.      4) See Chapter 10 for EMS/EEMS programming information. 
  2778.      5) The Advanced Digital PC Slave board (also marketed by Alloy) 
  2779.         contains its own 8mHz 8086, up to 768K of on-card memory and a 
  2780.         built-in monochrome monitor adapter, communicating with an 
  2781.         RS232 terminal at 19.2KBaud.  Their operating system is an 
  2782.         adaptation of MSDOS 2.11 called RTNX or ATNX.  ?TNX uses 
  2783.         interrupt 67h for record locking, using an "interrupt 67h 
  2784.         semaphore" system in which a data record access must be 
  2785.         preceded by a call to int 67h with a string that contains a 
  2786.         filename and a record number to lock. 
  2787.      6) Some Adaptec hard disk controllers have problems related to 
  2788.         their use of int 67h.  Supposedly the Adaptec can be made to 
  2789.         use a driver instead of ROM.  The driver is generated by 
  2790.         running the ROM program at C800:5 and this fixes the problem.  
  2791.         Apparently this driver is called ADAPTEC.DRV.  Check with 
  2792.         Adaptec if you suspect a problem. 
  2793.      7) IBM issued a known bug report listing a fault in DOS 4.0's 
  2794.         network handling within IBMBIO.COM.  The exact wording of the 
  2795.         report is: 
  2796.         IR79404   WAIT   IBMBIO   INT 2FH for INT 67H causes hang
  2797.      8) Used by PC-Net semaphore calls.
  2798.  
  2799. ┌─────────────────────────────────────────────────────────────────────┐
  2800. │Interrupt 68h   Not Used  (not initialized) ................... 5**61│
  2801. └─────────────────────────────────────────────────────────────────────┘
  2802. note 1) APPC/PC Network Interface. See Chapter 13.
  2803.      2) Some Toshiba laptop hard disk controllers use this interrupt.
  2804.      3) Used by HDTest to communicate with BIOS entry point.
  2805.      4) Used by Mike Geary's EGA720.ASM (forces EGA into 720x348 mode)
  2806.  
  2807.  
  2808. ┌─────────────────────────────────────────────────────────────────────┐
  2809. │Interrupt 69h   Not Used  (not initialized) ................... 5**62│
  2810. └─────────────────────────────────────────────────────────────────────┘
  2811.  
  2812.  
  2813. ┌─────────────────────────────────────────────────────────────────────┐
  2814. │Interrupt 6Ah   Not Used  (not initialized) ................... 5**63│
  2815. └─────────────────────────────────────────────────────────────────────┘
  2816. note    Used by SLR System's OPTHELP.COM, a TSR help system for their 
  2817.         OPTASM assembler.  OPTHELP may be configured to interrupts 
  2818.         from 60h to 7Fh. 
  2819.  
  2820.  
  2821. ┌─────────────────────────────────────────────────────────────────────┐
  2822. │Interrupt 6Bh   Not Used  (not initialized) ................... 5**64│
  2823. └─────────────────────────────────────────────────────────────────────┘
  2824.  
  2825.  
  2826. ┌─────────────────────────────────────────────────────────────────────┐
  2827. │Interrupt 6Ch   System Resume Vector (Convertible) ............ 5**65│
  2828. └─────────────────────────────────────────────────────────────────────┘
  2829. note 1) This vector is not initialized on the PC, XT, or PCJr.
  2830.      2) DOS 3.2 Realtime Clock update uses this interrupt.
  2831.  
  2832.  
  2833. ┌─────────────────────────────────────────────────────────────────────┐
  2834. │Interrupt 6Dh   Not Used  (not initialized) ................... 5**66│
  2835. └─────────────────────────────────────────────────────────────────────┘
  2836. note    Used internally by VGA adapter -  IBM, Paradise, Video 7, NCR
  2837.  
  2838.  
  2839. ┌─────────────────────────────────────────────────────────────────────┐
  2840. │Interrupt 6Eh   Not Used  (not initialized) ................... 5**67│
  2841. └─────────────────────────────────────────────────────────────────────┘
  2842.  
  2843.  
  2844.  
  2845. ┌─────────────────────────────────────────────────────────────────────┐
  2846. │Interrupt 6Fh   10-Net API..................................... 5**68│
  2847. └─────────────────────────────────────────────────────────────────────┘
  2848. note 1) See Chapter 13 for information on the 10-Net API.
  2849.      2) HP ES-12 Extended BIOS
  2850.         a) Read CMOS Memory
  2851.         entry   AH      22h
  2852.                 BL      address of CMOS byte to read
  2853.                 BP      0012h
  2854.         return  AH      status
  2855.                 AL      byte read
  2856.                 BP, DS  destroyed
  2857.         b) Write CMOS Memory
  2858.         entry   AH      24h
  2859.                 AL      new value
  2860.                 BL      address of CMOS byte to write
  2861.                 BP      0012h
  2862.         return  AH      status
  2863.                 BP, DS  destroyed
  2864.      3) Novell NetWare - PCOX API (3270 PC terminal interface).
  2865.  
  2866.  
  2867. ┌─────────────────────────────────────────────────────────────────────┐
  2868. │Interrupt 70h   IRQ 8, Real Time Clock Int (AT, XT/286, PS/2) . 5**69│
  2869. └─────────────────────────────────────────────────────────────────────┘
  2870.  
  2871.         This interrupt services the real-time clock hardware.  The 
  2872.         hardware supports 2 modes of operation, an interrupt at a 
  2873.         specific 24 hour interval (i.e 9:42 am), or repeatedly every 
  2874.         0.976 ms (1,024 kHz). Both modes can operate at the same time 
  2875.         if needed. 
  2876.  
  2877.         In the 24 hour alarm mode, the interrupt is vectored here by 
  2878.         hardware and interrupt 4Ah is called to alert the application 
  2879.         program of the alarm.  Int 4Ah is not handled by the BIOS 
  2880.         other than to return, and is normally revectored by a 
  2881.         particular application using the alarm. 
  2882.  
  2883.         When repeating interrupt mode is active, the 32-bit 
  2884.         microsecond counter consisting of timer_clk_low and 
  2885.         timer_clk_hi is decremented by 976 us on every interrupt.  
  2886.         When the timer reaches zero, the byte pointed to by the offset 
  2887.         @timer_wait_off and and segment @timer_wait_seg is set to 80h 
  2888.         (this pointer is set by an application program through int 1Ah 
  2889.         function ah=6). 
  2890.  
  2891.         The Motorola MC146818A real time clock chip, or its 
  2892.         equivalent, can be programmed to generate the real time clock 
  2893.         interrupt (int 70h) approximately 1024 times per second.  The 
  2894.         BIOS Real Time Clock ISR is invoked on each real time clock 
  2895.         interrupt.  Only AT BIOSs support the Real Time Clock ISR. 
  2896.  
  2897.         The BIOS initializes the int 70h vector to address F000:5124h. 
  2898.  
  2899.         Three AT BIOS functions interface with the int 70h Real Time
  2900.         Clock ISR.  These are:
  2901.                 int 15h, AH 83h   Event Wait Interval
  2902.                 int 15h, AH 86h   Wait
  2903.                 int 1Ah, AH 06h   Set User Alarm
  2904.  
  2905.  
  2906. ┌─────────────────────────────────────────────────────────────────────┐
  2907. │Interrupt 71h   IRQ 9, Redirected to IRQ 8 (AT, XT/286, PS/2) . 5**70│
  2908. └─────────────────────────────────────────────────────────────────────┘
  2909. note    LAN Adapter 1 (rerouted to int 0Ah [IRQ2] by BIOS).
  2910.  
  2911.  
  2912. ┌─────────────────────────────────────────────────────────────────────┐
  2913. │Interrupt 72h   IRQ 10  (AT, XT/286, PS/2)  Reserved .......... 5**71│
  2914. └─────────────────────────────────────────────────────────────────────┘
  2915. note    Hardware servicer (called by hardware 8259-2, IRQ 10).
  2916.  
  2917.  
  2918. ┌─────────────────────────────────────────────────────────────────────┐
  2919. │Interrupt 73h   IRQ 11  (AT, XT/286, PS/2)  Reserved .......... 5**72│
  2920. └─────────────────────────────────────────────────────────────────────┘
  2921. note    Hardware servicer (called by hardware 8259-2, IRQ 11).
  2922.  
  2923.  
  2924. ┌─────────────────────────────────────────────────────────────────────┐
  2925. │Interrupt 74h   IRQ 12  Mouse Interrupt (PS/2) ................ 5**73│
  2926. └─────────────────────────────────────────────────────────────────────┘
  2927. note    Hardware servicer (called by hardware 8259-2, IRQ 12).
  2928.  
  2929.  
  2930. ┌─────────────────────────────────────────────────────────────────────┐
  2931. │Interrupt 75h   IRQ 13, Coprocessor Error (AT) ................ 5**74│
  2932. └─────────────────────────────────────────────────────────────────────┘
  2933. note 1) BIOS redirects math coprocessor errors to int 2 (NMI). 
  2934.      2) The math co-processor 80287 invokes this interrupt.  Int 75h 
  2935.         calls the non-maskable interrupt int 2 to halt the system. 
  2936.         (80287 is not used if this vector is left pointing here). 
  2937.         Programs which use the 80287 must re-vector this interrupt to 
  2938.         use the 80287. 
  2939.      3) Under DOS 3.2, this interrupt is routed through the DOS 
  2940.         interrupt stack pool like device interrupts.  However, 
  2941.         coprocessor exceptions generally do not resume via IRET and 
  2942.         this fill the interrupt pool (stacks allocated and never 
  2943.         deallocated) on exceptions.  Microsoft has a patch available 
  2944.         for DOS 3.2. 
  2945.      4) Weitek ABACUS x167 math coprocessor exception handler shares 
  2946.         this interrupt with Intel 80x87 if present. 
  2947.  
  2948.  
  2949. ┌─────────────────────────────────────────────────────────────────────┐
  2950. │Interrupt 76h   IRQ 14, Hard Disk Controller (AT, XT/286, PS/2) 5**75│
  2951. └─────────────────────────────────────────────────────────────────────┘
  2952. note 1) Called by hardware 8259-2 IRQ 14.
  2953.      2) When the hard disk controller has completed its task, it 
  2954.         signals completion though hardware activation of int 76h. The 
  2955.         status in hdsk_int_flags is set to "done", a value of 0FFh. 
  2956.         Int 15/fn91h may also be called to signal the interrupt is 
  2957.         done. 
  2958.  
  2959.  
  2960. ┌─────────────────────────────────────────────────────────────────────┐
  2961. │Interrupt 77h   IRQ 15 (AT, XT/286, PS/2)  Reserved ........... 5**76│
  2962. └─────────────────────────────────────────────────────────────────────┘
  2963. note    Future services (called by hardware 8259-2 IRQ 15).
  2964.  
  2965.  
  2966. ┌─────────────────────────────────────────────────────────────────────┐
  2967. │Interrupt 78h   Not Used ...................................... 5**77│
  2968. └─────────────────────────────────────────────────────────────────────┘
  2969. note 1) Used by Novell Netware 2.0 - non-dedicated shell. 
  2970.      2) DESQview uses ints 78h-7Fh for itself to revector the 8259 
  2971.         interrupt controllers. 
  2972.  
  2973.  
  2974. ┌─────────────────────────────────────────────────────────────────────┐
  2975. │Interrupt 79h   Not Used ...................................... 5**78│
  2976. └─────────────────────────────────────────────────────────────────────┘
  2977.  
  2978. note 1) Used by LAN:Datacore runtimes for BASIC and C by Lanquest 
  2979.         Group in releases after late '86. 
  2980.      2) Used by AutoCAD 2.5/2.6 ADI Digitizer interface (default). 
  2981.  
  2982.  
  2983. ┌─────────────────────────────────────────────────────────────────────┐
  2984. │Interrupt 7Ah   Reserved ...................................... 5**79│
  2985. └─────────────────────────────────────────────────────────────────────┘
  2986. note 1) Novell NetWare - Low-Level API APX, versions 2.0a+.  See 
  2987.         Chapter 13. 
  2988.      2) AutoCAD Device Interface, used by various video boards. 
  2989.      3) IBM 3270 Emulator program. 
  2990.      4) Also used by early versions of "File Access Utility" by 
  2991.         Automated Insurance Resource Systems.  AIRS changed to a 
  2992.         different interrupt in late '86 to eliminate conflict with 
  2993.         Novell. 
  2994.      5) Used by LAN:Datacore runtimes for BASIC and C by Lanquest 
  2995.         Group in versions 2.5 and higher before late '86.  Lanquest 
  2996.         changed to int 79h to prevent Novell conflict. 
  2997.  
  2998.  
  2999. ┌─────────────────────────────────────────────────────────────────────┐
  3000. │Interrupt 7Bh-7Eh  Not Used by IBM ............................ 5**80│
  3001. └─────────────────────────────────────────────────────────────────────┘
  3002.         Btrieve API
  3003. entry   register unknown
  3004.         functions:
  3005.         00h     open
  3006.         01h     close
  3007.         02h     insert
  3008.         03h     update
  3009.         04h     delete
  3010.         05h     get_equal
  3011.         06h     get_next
  3012.         07h     get_prev
  3013.         08h     get_greater
  3014.         09h     get_gr_eql
  3015.         0Ah     get_less
  3016.         0Bh     get_less_eq
  3017.         0Ch     get_first
  3018.         0Dh     get_last
  3019.         0Eh     create
  3020.         0Fh     stat
  3021.         10h     extend
  3022.         11h     set_dir: set directory information
  3023.         12h     get_dir: get directory information
  3024.         13h     begin_trans
  3025.         14h     end_trans
  3026.         15h     abort_trans
  3027.         16h     get_pos: get record position number
  3028.         17h     get_direct: get data by sending record position
  3029.         18h     step_direct
  3030.         19h     stop
  3031.         1Ah     version
  3032.         1Bh     unlock
  3033.         1Ch     reset
  3034. return  unknown
  3035. note    Btrieve sets low byte of vector to 33h; this serves as the 
  3036.         installation check. 
  3037.  
  3038.  
  3039. ┌─────────────────────────────────────────────────────────────────────┐
  3040. │Interrupt 7Bh   Novell ........................................ 5**  │
  3041. └─────────────────────────────────────────────────────────────────────┘
  3042. note 1) BTRIEVE from Softcraft, Inc.
  3043.      2) IPX on Proteon networks with ANW 2.0 or greater.
  3044.      3) Air File by Automated Insurance Resource Systems.
  3045.  
  3046.  
  3047. ┌─────────────────────────────────────────────────────────────────────┐
  3048. │Interrupt 7Ch   REXX-PC API ................................... 5**81│
  3049. └─────────────────────────────────────────────────────────────────────┘
  3050.         IBM REXX-PC macro language
  3051. entry   AX      0000h   Initialize
  3052.         DS:SI   pointer to null terminated name of program to be 
  3053.                 executed 
  3054.         EB:BX   pointer to null terminated argument string to be passed 
  3055.                 to the program 
  3056.         DX:DI   pointer to an environment control block in the format:
  3057.                 dword   offset in segment to signature string The 
  3058.                         segment is that contained in DX and the 
  3059.                         signature is the uppercase ASCIIZ string 
  3060.                         "REXX". 
  3061.                 dword   offset in DX to environment name ASCIIZ string 
  3062.                         note: The environment name will be truncated if
  3063.                               longer than 32 characters.
  3064.                 dword   offset in DX to the file extension ASCIIZ 
  3065.                         string 
  3066.                 dword   path search - word value of 0 or non-zero. This 
  3067.                         controls the searching of the path for commands 
  3068.                         that might be REXX programs. 0 means no search 
  3069.                         made, non-zero means search first. 
  3070.                 dword   x'AAAA'
  3071.                         This is a signature that allows REXXPC88 to 
  3072.                         call your own defined routine when a command 
  3073.                         expression needs to be processed. 
  3074.                 DD      Segment:offset (standard INTEL format) of 
  3075.                         environment work buffer, the first double word 
  3076.                         of the buffer MUST be the entry point address 
  3077.                         of the environment service routine to be 
  3078.                         called.  The rest of the buffer may be used in 
  3079.                         any way you choose and will NOT be examined or 
  3080.                         modified by REXXPC88. 
  3081. return  none 
  3082. note 1) The only way to tell if the program exists and can be executed 
  3083.         is by examining a value returned by the program in the next 
  3084.         call described below.  If the program returns an end of 
  3085.         program indication and a string was expected instead, it means 
  3086.         that the program was not found or could not be executed for 
  3087.         some reason. 
  3088.      2) All registers except SS and SP are destroyed.  The caller must 
  3089.         save any other registers of interest. 
  3090.  
  3091.  
  3092. Function 01h Interpret REXX Command
  3093.         This call tells REXXPC88 to interpret the REXXPC88 program 
  3094.         until a value is produced. 
  3095. entry   AX      0001h 
  3096. return  DS:DX   points to a result string, terminated by a CR + LF + 
  3097.                 NULL. The final result string (which marks the end of 
  3098.                 the program) consists of nothing but EOF + NULL. 
  3099.                 REXXPC88 will continue to return this "end of program" 
  3100.                 string until reinitialized via an AX=01h call as 
  3101.                 described above. 
  3102. note    All registers except SS and SP are destroyed.  The caller must 
  3103.         save any other registers of interest. 
  3104.  
  3105.  
  3106. Function 02h  Termination
  3107.         This call allows resident REXXPC88 extensions to terminate 
  3108.         execution of a REXXPC88 program, typically after detecting an 
  3109.         error. 
  3110. entry   AX      0002h
  3111.         DS:SI   points to null terminated string to be displayed as an 
  3112.                 error message before terminating the REXXPC88 program. 
  3113. return  none 
  3114. note    Terminates the REXXPC88 program and returns control to DOS.
  3115.  
  3116.  
  3117. Function 03h  Load
  3118.         This call tells REXXPC88 to look up a program variable and 
  3119.         return its current value (if any). 
  3120. entry   AX      0003h
  3121.         DS:SI   points to null terminated name of REXXPC88 program 
  3122.                 variable. 
  3123.         DS:DX   points to the null terminated string value of the 
  3124.                 program variable. DX is zero if the program variable is 
  3125.                 currently undefined. This string is in REXXPC88's data 
  3126.                 area and must be treated as read-only. 
  3127. return  none
  3128. note 1) All registers except SS and SP are destroyed. The caller must 
  3129.         save any other registers of interest. 
  3130.  
  3131.  
  3132. Function 04h  Store
  3133.         This call tells REXXPC88 to store a null terminated string as 
  3134.         the value of a program variable. 
  3135. entry   AX      0004h
  3136.         DS:SI   points to null terminated name of REXXPC88 program 
  3137.                 variable 
  3138.         ES:BX   points to null terminated string to be assigned to the 
  3139.                 variable 
  3140. return  none 
  3141. note 1) The string is copied into REXXPC88's data dictionary.  If 
  3142.         there is insufficient storage to store the string, REXXPC88 
  3143.         terminates execution of the program with an error message and 
  3144.         returns to DOS. 
  3145.      2) Registers: all registers except SS and SP are destroyed.  The 
  3146.         caller must save any other registers of interest. 
  3147.  
  3148.  
  3149. Function 05h  User-Written Extensions
  3150. entry   AX       0005h
  3151.         SS:BP   points to a C stack frame containing a two-byte pointer 
  3152.                 to the null terminated function name, a two-byte integer 
  3153.                 specifying the number of arguments, and a two-byte 
  3154.                 pointer to an array of pointers (each two bytes) to the 
  3155.                 arguments (each argument is a null terminated string). 
  3156. return  DS:SI   must point to a null terminated result string. A pointer 
  3157.                 of NIL (DS = 0, SI = 0) is reserved by REXXPC88 and 
  3158.                 indicates that "no REXXPC88 extensions answered the 
  3159.                 function". 
  3160. note 1) Registers: all registers except SS, SP, and BP are available 
  3161.         for use. 
  3162.      2) Stack: Since the amount of REXXPC88 stack space remaining for 
  3163.         growth can't be ascertained by the user extension program, the 
  3164.         user may wish to switch to a local stack if he requires more 
  3165.         than about 128 bytes of stack growth. 
  3166.  
  3167.  
  3168. Function 06h Queue
  3169.         This call tells REXXPC88 to place data on the data or external 
  3170.         interrupt queue either FIFO or LIFO. 
  3171. entry   AX      06h
  3172.         BH      00h     Internal data queue accessible via PULL and 
  3173.                         PARSE PULL 
  3174.                 01h     External interrupt queue accessible via 
  3175.                         LINEIN(EXQUE) 
  3176.         BL      00h     Queue data FIFO on selected queue 
  3177.                 01h     Queue data LIFO on selected queue 
  3178.         DS:SI   points to null terminated string to be queued. 
  3179. return  AX      0000h   Message queued successfully. 
  3180.                 0001h   No REXXPC88 program running at current time. 
  3181.                         Message not queued. 
  3182.                 0002h   Not enough storage available for message.  
  3183.                         Message not queued. 
  3184.                 0003h   Either BH (queue number) or BL (FIFO/LIFO flag) 
  3185.                         out of range. Message not queued. 
  3186. note 1) For the Internal data queue a string may not exceed 127 
  3187.         characters. 
  3188.      2) For the External int. queue a string may not exceed available 
  3189.         storage. 
  3190.      3) Registers: all registers except SS and SP are destroyed.  The 
  3191.         caller must save any other registers of interest. 
  3192.  
  3193.  
  3194. Function 07h  Check for Loaded Extension
  3195.         This call provides a way for a REXXPC88 extension to find out 
  3196.         if a copy is already loaded, and to exchange information with 
  3197.         a resident version. 
  3198. entry   AX      0007h
  3199.         SS:BP   points to a C stack frame containing a two-byte pointer 
  3200.                 to the null terminated name of the REXXPC88 extension. 
  3201. return  If the extension is already loaded, then DS:SI points to an 
  3202.         ASCIIZ string '1', and other registers are used as desired by 
  3203.         the extension to communicate with its non-resident copy. 
  3204.         (Generally, this involves pointing ES:BX to the resident 
  3205.         portion's entry point).  If the extension is not yet resident, 
  3206.         then DS:SI points to an ASCIIZ '0'. 
  3207. note    Registers: all registers except SS, SP and BP are available 
  3208.         for use. 
  3209.  
  3210.  
  3211. Function 08h Reserved
  3212.         This call is reserved for communication between REXXSYS.SYS 
  3213.         and REXXIBMR. 
  3214. entry   AX      0008h
  3215. return  none
  3216.  
  3217.  
  3218. Function 09h Check for REXX Installed
  3219.         This call provides external applications a way to determine if 
  3220.         REXXIBMR is installed. 
  3221. entry   AX      09h
  3222. return  AX      0FFFFh  REXXIBMR is not installed
  3223.         AX      0AAAAh  REXXIBMR is installed
  3224. note    It is assumed that your application will inspect the value of 
  3225.         the 7Ch interrupt vector prior to issuing this interrupt.  If 
  3226.         the vector is 0000:0000 then REXXIBMR is not installed and 
  3227.         this function will cause the system to crash. 
  3228.  
  3229.  
  3230. Function 0Ah  Uninstall resident version of REXX
  3231.         This call is used to uninstall a resident version
  3232. entry   AX      000Ah
  3233.         BX      0AAAAh
  3234. return  AX      0000h   Resident version uninstalled 
  3235.                 0001h   Resident version cannot uninstall, as one 
  3236.                         interrupt vector has been modified by some 
  3237.                         other program in a non-conforming manner. 
  3238.                 0FFFFh  The installed resident version does NOT support 
  3239.                         the uninstall request code (i.e., it is pre 
  3240.                         0.55 level). 
  3241.  
  3242.  
  3243. ┌─────────────────────────────────────────────────────────────────────┐
  3244. │Interrupt 7Fh   IBM 8514/A Graphics Adapter API ............... 5**82│
  3245. └─────────────────────────────────────────────────────────────────────┘
  3246. note 1) 59 8514/A API functions available (HDILOAD.EXE) parameters 
  3247.         unknown. 
  3248.      2) Used by second copy of COMMAND set with SHELL=. 
  3249.      3) Not used by COMMAND /C at DOS prompt. 
  3250.      4) The IBM RTIC (Real Time Interface Coprocessor) Multiport (and 
  3251.         Multiport/2) use int 7Fh as a method of communication between 
  3252.         the system-unit resident interrupt handler and the RTIC card's 
  3253.         operating system.  There is a convention for using it in which 
  3254.         register AX contains the signature of the handler that should 
  3255.         handle the interrupt. Some signatures are: 
  3256.                 AX    0200h    is a call to the current task dispatcher 
  3257.                                (from the BTRIEVE application 
  3258.                                interface). 
  3259.                 AX    0101h    is a call from an application to the 
  3260.                                RTIC function request mechanism. 
  3261.                 AX    0FEEDh   is a call from the ICAINTH.SYS interrupt 
  3262.                                handler. 
  3263.      5) MultiLink Advanced (a custom version of PC-MOS/386), versions 
  3264.         3.03 and higher, from The Software Link, Inc. 
  3265.         Function  02h   Invoke user interface (multitasking DOS shell)
  3266.         entry   AH      02h
  3267.                 AL      00h
  3268.         return  unknown
  3269.         Function  0Dh   Set new spooler parameters
  3270.         entry   AH      0Dh
  3271.                 AL      ASCII code for disposition (D,S,H,N)
  3272.                 BH      ASCII code for priority    (0-9)
  3273.                 BL      ASCII code for class       (A-Z)
  3274.         return  AL      Error
  3275.                         00h     OK
  3276.                         01h     no spooler installed
  3277.                         02h     invalid request
  3278.         Function  0Eh   Get spooler parameters
  3279.         entry   AH      0Eh
  3280.         return  AL      01h     if no spooler installed, otherwise:
  3281.                 AL      ASCII code for disposition (D,S,H,N)
  3282.                 BH      ASCII code for priority    (0-9)
  3283.                 BL      ASCII code for class       (A-Z)
  3284.      6) There have been mentions of assorted other little-known 
  3285.         programs using this interrupt.  In view of its use by DOS and 
  3286.         the increasingly-popular 8514/A adapter, it would probably be 
  3287.         wise to avoid int 7Fh for aftermarket application software. 
  3288.      7) Also used by IBM HLLAPI. 
  3289.      8) Used internally by later versions of Tom Mack's RBBS-PC BBS 
  3290.         system. 
  3291.      9) Used by Novell Netware 2.0+ to switch non-dedicated shell to 
  3292.         console mode. 
  3293.  
  3294.  
  3295. ┌─────────────────────────────────────────────────────────────────────┐
  3296. │Interrupt 80h-85h  Reserved by BASIC .......................... 5**83│
  3297. └─────────────────────────────────────────────────────────────────────┘
  3298. note    Interrupts 80h through 0ECh are apparently unused and not
  3299.         initialized in most clone systems.  Not known if GWBASIC or
  3300.         MBASIC use any of these interrupts.
  3301.  
  3302.  
  3303. ┌─────────────────────────────────────────────────────────────────────┐
  3304. │Interrupt 80h   Novell Netware 2.0 ............................ 5**  │
  3305. └─────────────────────────────────────────────────────────────────────┘
  3306.  
  3307.  
  3308. ┌─────────────────────────────────────────────────────────────────────┐
  3309. │Interrupt 81h   Novell Netware 2.0 ............................ 5**  │
  3310. └─────────────────────────────────────────────────────────────────────┘
  3311.  
  3312.  
  3313. ┌─────────────────────────────────────────────────────────────────────┐
  3314. │Interrupt 82h   Reserved by BASIC ............................. 5**  │
  3315. └─────────────────────────────────────────────────────────────────────┘
  3316. note 1) Used in some early versions of NEC Multispeed laptop for ROM
  3317.         application management.
  3318.      2) Used by Pecan Software's Pascal compiler (P-system).
  3319.  
  3320.  
  3321. ┌─────────────────────────────────────────────────────────────────────┐
  3322. │Interrupt 81h   Used by Proteon Network ....................... 5**  │
  3323. └─────────────────────────────────────────────────────────────────────┘
  3324.  
  3325.  
  3326. ┌─────────────────────────────────────────────────────────────────────┐
  3327. │Interrupt 86h   Int 18 when relocated by NETBIOS .............. 5**84│
  3328. └─────────────────────────────────────────────────────────────────────┘
  3329.  
  3330.  
  3331. ┌─────────────────────────────────────────────────────────────────────┐
  3332. │Interrupt 86h-0F0h  Used by BASIC when interpreter is running . 5**85│
  3333. └─────────────────────────────────────────────────────────────────────┘
  3334.  
  3335.  
  3336. ┌─────────────────────────────────────────────────────────────────────┐
  3337. │Interrupt 0A0h-0D0h  TI Professional - free interrupt pool .... 5**  │
  3338. └─────────────────────────────────────────────────────────────────────┘
  3339.  
  3340.  
  3341. ┌─────────────────────────────────────────────────────────────────────┐
  3342. │Interrupt 0A4h  Right Hand Man API ............................ 5**86│
  3343. └─────────────────────────────────────────────────────────────────────┘
  3344. entry   AH      RHM function  (unknown)
  3345. return  unknown
  3346. note    Right-Hand Man is a shareware TSR desktop utility similar
  3347.         to SideKick.
  3348.  
  3349.  
  3350. ┌─────────────────────────────────────────────────────────────────────┐
  3351. │Interrupt  0D4h PC-MOS/386 API ................................ 5**87│
  3352. └─────────────────────────────────────────────────────────────────────┘
  3353. note    This interrupt is used for access to the PC-MOS/386 4.x
  3354.         operating system's user API.  Previous versions of the OS
  3355.         used interrupt 38h.  See Chapter 13 for MOS API programming
  3356.         information.
  3357.  
  3358.  
  3359. ┌─────────────────────────────────────────────────────────────────────┐
  3360. │Interrupt  0E0h Digital Research CP/M-86 function calls ....... 5**88│
  3361. └─────────────────────────────────────────────────────────────────────┘
  3362. note 1) Lotus 123 Release 2 reportedly alters the int 0E0h vector
  3363.         during operation and leaves it pointing somewhere in the TPA
  3364.         on exit.  Perhaps used by the mysterious Lotus add-on program
  3365.         hook?
  3366.      2) Used by Digital Research CP/M-86, Concurrent CP/M and
  3367.         Concurrent DOS API entry points.  Values are typically passed
  3368.         in the DX register and returned in the AX register.
  3369.      3) Used by Larry Himes' PD TBACK background timeslicer for DOS.
  3370.         (very old)
  3371.      4) Used by American Data Technology SmartFAX products.
  3372. entry   AH      20h     Send FAX
  3373.         AL      02h     for FAX format file
  3374.                 03h     for ASCII format file
  3375.         CH      number of redials (0-9). Defaults to 9 if input out of 
  3376.                 range. 
  3377.         CL      backoff time (1-99). 1 unit is 15 sec, value is set to 
  3378.                 99 if out of range 
  3379.         DS:DX   input filename (ASCII). 20 bytes max.
  3380.         DX:BX   dial number. Speed dial number is allowed
  3381. return  AL      (if bit 7 set)  number of files transmitted
  3382.                 (bit 7 not set) 0FFh    file not found
  3383.                                 0FEh    no dial tone
  3384.                                 0FDh    line busy or non-FAX tone
  3385.                                 0FCh    other error
  3386. entry   AH      21h     reserved
  3387.  
  3388. entry   AH      22h     Auto/Manual Transmission Toggle
  3389.         AL      00h     switch to Auto mode (default)
  3390.                 01h     switch to Manual mode
  3391. return  none
  3392.  
  3393. entry   AH      23h     Set Manual Receive Mode
  3394.         AL      00h     switch to Auto mode (default)
  3395.                 01h     switch to Manual mode.  SmartFAX will not
  3396.                         answer phone
  3397. return  none
  3398.  
  3399. entry   AH      24h     Send FAX Handshake to Remote
  3400. note    No other parameters are necessary. No returns.
  3401.  
  3402. entry   AH      25h     Enable/Disable Background Task for Spooling 
  3403.         AL      00h     enabled background operation. Program will put 
  3404.                         the received data in the 80188 to spool. 
  3405.                 01h     disables background operation. Does not spool 
  3406.                         data. Data can be recovered by fns 26h and 27h. 
  3407. return  none 
  3408.  
  3409. entry   AH      26h     Check 80188 Buffer
  3410.         AX      data length
  3411.         BL      00h     some data of the same page appears in the next 
  3412.                         buffer 
  3413.                 01h     end of page, more to follow 
  3414.                 02h     end of page, last page 
  3415.  
  3416. entry   AH      27h     Get Data from 80188 Buffer
  3417.         DS:DX   pointer to buffer to be saved, minimum size 12Kb.
  3418. return  AX      data length
  3419.         BL      00h     some data of the same page appears in the next 
  3420.                         buffer 
  3421.                 01h     end of page, more to follow 
  3422.                 02h     end of page, last page 
  3423.  
  3424. entry   AH      28h     Reset After Receive
  3425. note    Resets SmartFAX for next call. No other parameters.
  3426.  
  3427. entry   AH      29h     Enable/Disable Communication Function
  3428.         AL      00h     enable communication
  3429.                 01h     disable communication
  3430. note    In disable mode, SmartFAX will not send or receive.
  3431.  
  3432.                                                               
  3433. ┌─────────────────────────────────────────────────────────────────────┐
  3434. │Interrupt  0E1h PC Cluster Program ............................ 5**89│
  3435. └─────────────────────────────────────────────────────────────────────┘
  3436. note    This is a pointer to the disk server data table.
  3437.  
  3438.  
  3439. ┌─────────────────────────────────────────────────────────────────────┐
  3440. │Interrupt  0E2h PC Cluster Program ............................ 5**90│
  3441. └─────────────────────────────────────────────────────────────────────┘
  3442. note    Interrupt 1Ch is revectored to here.
  3443.  
  3444.  
  3445. ┌─────────────────────────────────────────────────────────────────────┐
  3446. │Interrupt 0E4h  Logitech Modula-2 v2.0   Monitor Entry ........ 5**91│
  3447. └─────────────────────────────────────────────────────────────────────┘
  3448. entry   AX      05h     monitor entry
  3449.                 06h     monitor exit
  3450.         BX      priority
  3451. return  unknown
  3452.  
  3453.  
  3454. ┌─────────────────────────────────────────────────────────────────────┐
  3455. │Interrupt 0E5h  Not Used ...................................... 5**92│
  3456. └─────────────────────────────────────────────────────────────────────┘
  3457.  
  3458.  
  3459. ┌─────────────────────────────────────────────────────────────────────┐
  3460. │Interrupt 0E6h  Not Used ...................................... 5**93│
  3461. └─────────────────────────────────────────────────────────────────────┘
  3462. note    Used by PKzip file compressor.
  3463.  
  3464.  
  3465. ┌─────────────────────────────────────────────────────────────────────┐
  3466. │Interrupt 0E7h  Not Used ...................................... 5**94│
  3467. └─────────────────────────────────────────────────────────────────────┘
  3468.  
  3469.  
  3470. ┌─────────────────────────────────────────────────────────────────────┐
  3471. │Interrupt 0E8h  Not Used ...................................... 5**95│
  3472. └─────────────────────────────────────────────────────────────────────┘
  3473.  
  3474.  
  3475. ┌─────────────────────────────────────────────────────────────────────┐
  3476. │Interrupt 0E9h  Not Used ...................................... 5**96│
  3477. └─────────────────────────────────────────────────────────────────────┘
  3478.  
  3479.  
  3480. ┌─────────────────────────────────────────────────────────────────────┐
  3481. │Interrupt 0EAh  Not Used ...................................... 5**97│
  3482. └─────────────────────────────────────────────────────────────────────┘
  3483.  
  3484.  
  3485. ┌─────────────────────────────────────────────────────────────────────┐
  3486. │Interrupt 0EBh  Not Used ...................................... 5**98│
  3487. └─────────────────────────────────────────────────────────────────────┘
  3488.  
  3489.  
  3490. ┌─────────────────────────────────────────────────────────────────────┐
  3491. │Interrupt 0ECh  Not Used ...................................... 5**99│
  3492. └─────────────────────────────────────────────────────────────────────┘
  3493.  
  3494.  
  3495. ┌─────────────────────────────────────────────────────────────────────┐
  3496. │Interrupt 0EDh  Not Used ..................................... 5**100│
  3497. └─────────────────────────────────────────────────────────────────────┘
  3498.  
  3499.  
  3500. ┌─────────────────────────────────────────────────────────────────────┐
  3501. │Interrupt 0EEh  Not Used ..................................... 5**101│
  3502. └─────────────────────────────────────────────────────────────────────┘
  3503.  
  3504.  
  3505. ┌─────────────────────────────────────────────────────────────────────┐
  3506. │Interrupt 0EFh  GEM interface (Digital Research) ............. 5**102│
  3507. └─────────────────────────────────────────────────────────────────────┘
  3508. entry   CX      0473h
  3509.         DS:DX   pointer to GEM parameter block
  3510. note    no other parameters are known
  3511.  
  3512.  
  3513. ┌─────────────────────────────────────────────────────────────────────┐
  3514. │Interrupt 0F0h  unknown ...................................... 5**103│
  3515. └─────────────────────────────────────────────────────────────────────┘
  3516. note    1) Used by secondary copy of COMMAND when SHELL= set.
  3517.         2) Not used by COMMAND /C at DOS prompt.
  3518.         3) Used by BASIC while in interpreter.
  3519.  
  3520.  
  3521. ┌─────────────────────────────────────────────────────────────────────┐
  3522. │Interrupts 0F1h-0FFh  (absolute addresses 3C4h-3FFh) ......... 5**104│
  3523. └─────────────────────────────────────────────────────────────────────┘
  3524. note    Location of Interprocess Communications Area.
  3525.  
  3526.  
  3527. ┌─────────────────────────────────────────────────────────────────────┐
  3528. │Interrupt 0F4h  Not Used ............ ........................ 5**105│
  3529. └─────────────────────────────────────────────────────────────────────┘
  3530.  
  3531.  
  3532. ┌─────────────────────────────────────────────────────────────────────┐
  3533. │Interrupt 0F5h  Not Used ............ ........................ 5**106│
  3534. └─────────────────────────────────────────────────────────────────────┘
  3535.  
  3536.  
  3537. ┌─────────────────────────────────────────────────────────────────────┐
  3538. │Interrupt 0F8h  Set Shell Interrupt (OEM) .................... 5**107│
  3539. └─────────────────────────────────────────────────────────────────────┘
  3540.      Set OEM handler for int 21h calls from 0F9h through 0FFh
  3541. entry   AH      0F8h
  3542.         DS:DX   pointer to handler for Functions 0F9h thru 0FFh
  3543. note 1) To reset these calls, pass DS and DX with 0FFFFh.  DOS is set 
  3544.         up to allow ONE handler for all 7 of these calls.  Any call to 
  3545.         these handlers will result in the carry bit being set and AX 
  3546.         will contain 1 if they are not initialized.  The handling 
  3547.         routine is passed all registers just as the user set them.  
  3548.         The OEM handler routine should be exited through an IRET. 
  3549.      2) 10 ms interval timer (Tandy?) 
  3550.  
  3551.  
  3552. ┌─────────────────────────────────────────────────────────────────────┐
  3553. │Interrupt 0F9h  Reserved ..................................... 5**108│
  3554. └─────────────────────────────────────────────────────────────────────┘
  3555. note    First of 8 SHELL service codes, reserved for OEM shell
  3556.         (WINDOW); use like HP Vectra user interface?
  3557.  
  3558.  
  3559. ┌─────────────────────────────────────────────────────────────────────┐
  3560. │Interrupt 0FAh  USART ready (RS-232C) ........................ 5**109│
  3561. └─────────────────────────────────────────────────────────────────────┘
  3562.  
  3563.  
  3564. ┌─────────────────────────────────────────────────────────────────────┐
  3565. │Interrupt 0FBh  USART RS ready (keyboard) .................... 5**110│
  3566. └─────────────────────────────────────────────────────────────────────┘
  3567.  
  3568.  
  3569. ┌─────────────────────────────────────────────────────────────────────┐
  3570. │Interrupt 0FCh  Unknown .......................................5**111│
  3571. └─────────────────────────────────────────────────────────────────────┘
  3572.  
  3573.  
  3574. ┌─────────────────────────────────────────────────────────────────────┐
  3575. │Interrupt 0FDh  reserved for user interrupt .................. 5**112│
  3576. └─────────────────────────────────────────────────────────────────────┘
  3577.  
  3578.  
  3579. ┌─────────────────────────────────────────────────────────────────────┐
  3580. │Interrupt 0FEh  reserved by IBM .............................. 5**113│
  3581. └─────────────────────────────────────────────────────────────────────┘
  3582. note    AT/XT286/PS50+ - vector destroyed by return from protected
  3583.         mode.
  3584.  
  3585.  
  3586. ┌─────────────────────────────────────────────────────────────────────┐
  3587. │Interrupt 0FFh  reserved by IBM .............................. 5**114│
  3588. └─────────────────────────────────────────────────────────────────────┘
  3589. note 1) AT/XT286/PS50+ - vector destroyed by return from protected 
  3590.         mode. 
  3591.      2) Zenith Z-100 (S-100 bus MSDOS) warm boot. 
  3592.  
  3593.  
  3594.