home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 15 / CD_ASCQ_15_070894.iso / maj / 4266 / interrup.d < prev    next >
Text File  |  1994-06-05  |  361KB  |  9,631 lines

  1. Interrupt List, part 4 of 11
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
  3. --------B-1A00-------------------------------
  4. INT 1A - TIME - GET SYSTEM TIME
  5.     AH = 00h
  6. Return: CX:DX = number of clock ticks since midnight
  7.     AL = midnight flag, nonzero if midnight passed since time last read
  8. Notes:    there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
  9.     IBM and many clone BIOSes set the flag for AL rather than incrementing
  10.       it, leading to loss of a day if two consecutive midnights pass
  11.       without a request for the time (e.g. if the system is on but idle)
  12. SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch,INT 62/AX=0099h
  13. --------B-1A01-------------------------------
  14. INT 1A - TIME - SET SYSTEM TIME
  15.     AH = 01h
  16.     CX:DX = number of clock ticks since midnight
  17. SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
  18. --------B-1A02-------------------------------
  19. INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
  20.     AH = 02h
  21. Return: CF clear if successful
  22.         CH = hour (BCD)
  23.         CL = minutes (BCD)
  24.         DH = seconds (BCD)
  25.         DL = daylight savings flag (00h standard time, 01h daylight time)
  26.     CF set on error (i.e. clock not running or in middle of update)
  27. SeeAlso: AH=00h
  28. --------B-1A03-------------------------------
  29. INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
  30.     AH = 03h
  31.     CH = hour (BCD)
  32.     CL = minutes (BCD)
  33.     DH = seconds (BCD)
  34.     DL = daylight savings flag (00h standard time, 01h daylight time)
  35. SeeAlso: AH=01h
  36. --------B-1A04-------------------------------
  37. INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
  38.     AH = 04h
  39. Return: CF clear if successful
  40.         CH = century (BCD)
  41.         CL = year (BCD)
  42.         DH = month (BCD)
  43.         DL = day (BCD)
  44.     CF set on error
  45. SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah
  46. --------B-1A05-------------------------------
  47. INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
  48.     AH = 05h
  49.     CH = century (BCD)
  50.     CL = year (BCD)
  51.     DH = month (BCD)
  52.     DL = day (BCD)
  53. SeeAlso: AH=04h,INT 21/AH=2Bh
  54. --------B-1A06-------------------------------
  55. INT 1A - TIME - SET ALARM (AT,XT286,PS)
  56.     AH = 06h
  57.     CH = hour (BCD)
  58.     CL = minutes (BCD)
  59.     DH = seconds (BCD)
  60. Return: CF set on error (alarm already set or clock stopped for update)
  61.     CF clear if successful
  62. Note:    the alarm occurs every 24 hours until turned off, invoking INT 4A each
  63.       time
  64. SeeAlso: AH=07h,INT 4A
  65. --------B-1A07-------------------------------
  66. INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
  67.     AH = 07h
  68. Return: alarm disabled
  69. Note:    does not disable the real-time clock's IRQ
  70. SeeAlso: AH=06h,INT 70
  71. --------B-1A08-------------------------------
  72. INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
  73.     AH = 08h
  74.     CH = hours in BCD
  75.     CL = minutes in BCD
  76.     DH = seconds in BCD
  77. SeeAlso: AH=09h
  78. --------B-1A09-------------------------------
  79. INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
  80.     AH = 09h
  81. Return: CH = hours in BCD
  82.     CL = minutes in BCD
  83.     DH = seconds in BCD
  84.     DL = alarm status
  85.         00h alarm not enabled
  86.         01h alarm enabled but will not power up system
  87.         02h alarm will power up system
  88. SeeAlso: AH=08h
  89. --------B-1A0A-------------------------------
  90. INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
  91.     AH = 0Ah
  92. Return: CF set on error
  93.     CF clear if successful
  94.         CX = count of days since Jan 1,1980
  95. SeeAlso: AH=04h,AH=0Bh
  96. --------B-1A0B-------------------------------
  97. INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
  98.     AH = 0Bh
  99.     CX = count of days since Jan 1,1980
  100. Return: CF set on error
  101.     CF clear if successful
  102. SeeAlso: AH=05h,AH=0Ah
  103. --------J-1A10-------------------------------
  104. INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE
  105.     AH = 10h
  106.     ???
  107. Return: ???
  108. SeeAlso: AH=11h,AH=12h,INT 17/AH=01h
  109. --------J-1A11-------------------------------
  110. INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER
  111.     AH = 11h
  112.     ???
  113. Return: ???
  114. SeeAlso: AH=10h,AH=12h,INT 17/AH=00h
  115. --------J-1A12-------------------------------
  116. INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS
  117.     AH = 12h
  118.     ???
  119. Return: ???
  120. SeeAlso: AH=10h,AH=11h,INT 17/AH=02h
  121. --------A-1A3601-----------------------------
  122. INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK
  123.     AX = 3601h
  124. Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
  125.         ASCIZ string "WPCORP\0"
  126. Notes:    WordPerfect 5.0 will call this interrupt at start up to determine if a
  127.       third party product wants to interface with it.  The third party
  128.       product must intercept this interrupt and return the address of a
  129.       keyboard monitor routine.
  130.     Before checking for keyboard input, and after every key entered by the
  131.       user, Word Perfect will call the routine whose address was provided
  132.       in DS:SI with the following parameters:
  133.         Entry:    AX = key code or 0
  134.             BX = WordPerfect state flag
  135.         Exit:    AX = 0 or key code
  136.             BX = 0 or segment address of buffer with key codes
  137.     See the "WordPerfect 5.0 Developer's Toolkit" for further information.
  138. SeeAlso: INT 16/AX=5500h
  139. --------N-1A6108-----------------------------
  140. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDWITHREPLY" - SEND MSG AND GET REPLY
  141.     AX = 6108h
  142.     STACK:    WORD    conversation ID (0000h-0009h)
  143.         DWORD    pointer to message buffer
  144.         WORD    length of message
  145.         DWORD    pointer to reply buffer
  146.         WORD    length of reply buffer
  147.         WORD    0000h (use default "Cparams" structure)
  148. Return: AX = status (see #0421)
  149.     STACK unchanged
  150. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  151.       which implements the Simple Network Application Protocol
  152. SeeAlso: AX=6205h
  153.  
  154. (Table 0421)
  155. Values for SNAP.EXE status:
  156.  0000h    successful
  157.  F830h    "SNAP_ABORTED"
  158.  FC04h    "SNAP_SERVERDIED"
  159.  FC05h    "SNAP_RESEND"
  160.  FC06h    "SNAP_SELECTFAILED"
  161.  FC07h    "SNAP_WRONGVERSION"
  162.  FC08h    "SNAP_INVALIDACK"
  163.  FC09h    "SNAP_TIMEOUT"
  164.  FC0Ah    "SNAP_SERVERREJECT"
  165.  FC0Bh    "SNAP_NOREPLYDUE"
  166.  FC0Ch    "SNAP_NOAUTHENTICATE"/"SNAP_GUARDIAN_ERROR"
  167.  FC0Dh    "SNAP_NOINIT"
  168.  FC0Eh    "SNAP_SOCKETERROR"
  169.  FC0Fh    "SNAP_BUFFERLIMIT"
  170.  FC10h    "SNAP_INVALIDCID"
  171.  FC11h    "SNAP_INVALIDOP"
  172.  FC12h    "SNAP_XMITFAIL"
  173.  FC13h    "SNAP_NOMORERETRIES"
  174.  FC14h    "SNAP_BADPARMS"
  175.  FC15h    "SNAP_NOMEMORY"
  176.  FC16h    "SNAP_NOMORECONVS"
  177.  FFFFh    failed (invalid function/parameter)
  178. --------N-1A6205-----------------------------
  179. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDNOREPLY" - SEND MSG, DON'T AWAIT REPLY
  180.     AX = 6205h
  181.     STACK:    WORD    conversation ID (0000h-0009h)
  182.         DWORD    pointer to message
  183.         WORD    length of message
  184.         WORD    0000h (use default "Cparms" structure)
  185. Return: AX = status (see #0421)
  186.     STACK unchanged
  187. SeeAlso: AX=6108h
  188. --------N-1A6308-----------------------------
  189. INT 1A - SNAP.EXE 3.2+ - "SNAP_BEGINCONV" - BEGIN CONVERSATION
  190.     AX = 6308h
  191.     STACK:    WORD    offset of ASCIZ "guardian"
  192.         WORD    offset of ASCIZ hostname
  193.         WORD    offset of ASCIZ server name
  194.         WORD    offset of ASCIZ userid
  195.         WORD    offset of ASCIZ password
  196.         WORD    offset of password length
  197.         WORD    offset of password type
  198.         WORD    offset of "Cparms" structure (see #0422)
  199. Return: ???
  200.     STACK unchanged
  201. Note:    all stacked offsets are within the SNAP data segment (use AX=6A01h
  202.       to allocate a buffer)
  203. SeeAlso: AX=6405h,AX=7202h
  204.  
  205. Format of SNAP.EXE Cparms structure:
  206. Offset    Size    Description    (Table 0422)
  207.  00h    WORD    retry delay in seconds
  208.  02h    WORD    timeout delay in seconds
  209.  04h    WORD    maximum buffer size
  210.  06h    WORD    encryption level
  211. --------N-1A6405-----------------------------
  212. INT 1A - SNAP.EXE 3.2+ - "SNAP_ENDCONV" - END CONVERSATION
  213.     AX = 6405h
  214.     STACK:    WORD    conversation ID (0000h-0009h)
  215.         DWORD    pointer to message buffer
  216.         WORD    length of message
  217.         WORD    0000h (use default "Cparms" structure)
  218. Return: AX = status (see #0421)
  219.     STACK unchanged
  220. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  221.       which implements the Simple Network Application Protocol
  222. SeeAlso: AX=6308h
  223. --------N-1A6900-----------------------------
  224. INT 1A - SNAP.EXE 3.2+ - "SNAP_DATASEG" - GET RESIDENT DATA SEGMENT
  225.     AX = 6900h
  226. Return: AX = value used for DS by resident code
  227. SeeAlso: AX=6A01h,AX=6F01h
  228. --------N-1A6A01-----------------------------
  229. INT 1A - SNAP.EXE 3.2+ - "SNAP_ALLOC" - ALLOCATE BUFFER IN SNAP DATA SEGMENT
  230.     AX = 6A01h
  231.     STACK:    WORD    number of bytes to allocate
  232. Return: AX = offset of allocated buffer or 0000h if out of memory
  233.     STACK unchanged
  234. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  235.       which implements the Simple Network Application Protocol
  236. SeeAlso: AX=6B01h
  237. --------N-1A6B01-----------------------------
  238. INT 1A - SNAP.EXE 3.2+ - "SNAP_FREE" - DEALLOCATE BUFFER IN SNAP DATA SEGMENT
  239.     AX = 6B01h
  240.     STACK:    WORD    offset within SNAP data segment of previously allocated
  241.             buffer
  242. Return: STACK unchanged
  243. Note:    this call is a NOP if the specified offset is 0000h
  244. SeeAlso: AX=6A01h
  245. --------N-1A6C04-----------------------------
  246. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYTO" - COPY DATA TO RESIDENT SNAP PACKAGE
  247.     AX = 6C04h
  248.     STACK:    WORD    offset within SNAP data segment of dest (nonzero)
  249.         WORD    segment of source buffer
  250.         WORD    offset of source buffer
  251.         WORD    number of bytes to copy
  252. Return: AX = offset of byte after last one copied to destination
  253.     STACK unchanged
  254. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  255.       which implements the Simple Network Application Protocol
  256. SeeAlso: AX=6D04h
  257. --------N-1A6D04-----------------------------
  258. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYFROM" - COPY DATA FROM RESIDENT SNAP PACKAGE
  259.     AX = 6D04h
  260.     STACK:    WORD    offset within SNAP data segment of source buffer
  261.         WORD    segment of destination buffer
  262.         WORD    offset of destination buffer
  263.         WORD    number of bytes to copy
  264. Return: AX = offset of byte after last one copied from source
  265.     buffer filled
  266.     STACK unchanged
  267. SeeAlso: AX=6C04h
  268. --------N-1A6E01-----------------------------
  269. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETDEBUG" - SET ???
  270.     AX = 6E01h
  271.     STACK:    WORD    new value for ???
  272. Return: AX = old value of ???
  273.     STACK unchanged
  274. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  275.       which implements the Simple Network Application Protocol
  276. --------N-1A6F01-----------------------------
  277. INT 1A - SNAP.EXE 3.2+ - "SNAP_CHKINSTALL" - INSTALLATION CHECK
  278.     AX = 6F01h
  279.     STACK: WORD 0000h
  280. Return: AX = status
  281.         0000h SNAP is resident
  282.         other SNAP not present
  283.     STACK unchanged
  284. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  285.       which implements the Simple Network Application Protocol, and is
  286.       required by PCVENUS (a network shell).  The combination of SNAP and
  287.       PCVENUS allows the use of the Andrew File System as one or more
  288.       networked drives.
  289. SeeAlso: AX=6900h,AX=7400h
  290. --------N-1A7002-----------------------------
  291. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETANCHOR"
  292.     AX = 7002h
  293.     STACK:    WORD    anchor number (0000h-0009h)
  294.         WORD    new value for the anchor
  295. Return: AX = status
  296.         0000h successful
  297.         FFFFh failed (top word on stack not in range 00h-09h)
  298.     STACK unchanged
  299. SeeAlso: AX=7101h
  300. --------N-1A7101-----------------------------
  301. INT 1A - SNAP.EXE 3.2+ - "SNAP_GETANCHOR"
  302.     AX = 7101h
  303.     STACK:    WORD    anchor number (0000h-0009h)
  304. Return: AX = anchor's value
  305.     STACK unchanged
  306. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  307.       which implements the Simple Network Application Protocol
  308. SeeAlso: AX=7002h
  309. --------N-1A7202-----------------------------
  310. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETCONVPARMS" - SET CONVERSATION PARAMETERS
  311.     AX = 7202h
  312.     STACK:    WORD    conversation ID (0000h-0009h)
  313.         WORD    offset within resident data segment of "Cparms"
  314.               structure (see #0422)
  315. Return: AX = status???
  316.     STACK unchanged
  317. SeeAlso: AX=6308h
  318. --------N-1A7302-----------------------------
  319. INT 1A - SNAP.EXE 3.2+ - "SNAP_CLIENTVERSION" - ???
  320.     AX = 7302h
  321.     STACK:    WORD    conversation ID (0000h-0009h)
  322.         WORD    offset within resident data segment of ???
  323. Return: AX = ???
  324.     ???
  325.     STACK unchanged
  326. SeeAlso: AX=7400h
  327. --------N-1A7400-----------------------------
  328. INT 1A - SNAP.EXE 3.2+ - "SNAP_VERSION" - GET VERSION
  329.     AX = 7400h
  330. Return: AX = version (AH=major, AL=minor)
  331. Note:    this call is only valid if SNAP is installed
  332. SeeAlso: AX=7302h,INT 1A/AX=6F01h
  333. --------N-1A75-------------------------------
  334. INT 1A - SNAP.EXE 3.2+ - "SNAP_NOP" - ???
  335.     AH = 75h
  336.     AL = ???
  337. Return: AX = ??? (0000h)
  338. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  339.       which implements the Simple Network Application Protocol
  340. --------N-1A76-------------------------------
  341. INT 1A - SNAP.EXE 3.2+ - "SNAP_802_5" - ???
  342.     AH = 76h
  343.     AL = ???
  344. Return: AX = ???
  345. --------N-1A77-------------------------------
  346. INT 1A - SNAP.EXE 3.4 - ???
  347.     AH = 77h
  348.     AL = ??? (at least 01h)
  349.     STACK:    WORD    ???
  350.         ???
  351. Return: ???
  352.     STACK unchanged
  353. --------N-1A7802-----------------------------
  354. INT 1A - SNAP.EXE 3.4 - ???
  355.     AX = 7802h
  356.     STACK:    WORD    ???
  357.         WORD    ???
  358. Return: ???
  359.     STACK unchanged
  360. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  361.       which implements the Simple Network Application Protocol
  362. --------s-1A7F-------------------------------
  363. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  364.     AH = 7Fh
  365.     ???
  366. Return: ???
  367. Note:    this function is not supported by the Tandy 1000SL/TL BIOS
  368. SeeAlso: AH=80h,AH=83h,AH=85h
  369. --------s-1A80-------------------------------
  370. INT 1A - PCjr, Tandy 2500???, Tandy 1000SL/TL - SET UP SOUND MULTIPLEXOR
  371.     AH = 80h
  372.     AL = 00h source is 8253 channel 2
  373.          01h source is cassette input
  374.          02h source is I/O channel "Audio IN"
  375.          03h source is sound generator chip
  376. Note:    although documented in the 1000TL Technical Reference, the 1000TL
  377.       BIOS has just an IRET for this call
  378. SeeAlso: AH=7Fh,AH=83h
  379. --------X-1A80-------------------------------
  380. INT 1A - PCMCIA Socket Services v1.00 - GET NUMBER OF ADAPTERS
  381.     AH = 80h
  382. Return: CF clear if successful
  383.         CX = 5353h ('SS') if Socket Services installed
  384.         AL = number of adapters present (0-16)
  385.         AH destroyed
  386.     CF set on error
  387.         AH = error code (see #0423)
  388. SeeAlso: AH=83h"PCMCIA"
  389.  
  390. (Table 0423)
  391. Values for PCMCIA error codes:
  392.  01h    "BAD_ADAPTER" nonexistent adapter
  393.  02h    "BAD_ATTRIBUTE" invalid attribute specified
  394.  03h    "BAD_BASE" invalid system memory base address
  395.  04h    "BAD_EDC" invalid EDC generator specified
  396.  05h    "BAD_INDICATOR" invalid indicator specified
  397.  06h    "BAD_IRQ" invalid IRQ channel specified
  398.  07h    "BAD_OFFSET" invalid PCMCIA card offset specified
  399.  08h    "BAD_PAGE" invalid page specified
  400.  09h    "BAD_READ" unable to complete request
  401.  0Ah    "BAD_SIZE" invalid window size specified
  402.  0Bh    "BAD_SOCKET" nonexistent socket specified
  403.  0Ch    "BAD_TECHNOLOGY" unsupported Card Technology for writes
  404.  0Dh    "BAD_TYPE" unavailable window type specified
  405.  0Eh    "BAD_VCC" invalid Vcc power level index specified
  406.  0Fh    "BAD_VPP" invalid Vpp1 or Vpp2 power level index specified
  407.  10h    "BAD_WAIT" invalid number of wait states specified
  408.  11h    "BAD_WINDOW" nonexistent window specified
  409.  12h    "BAD_WRITE" unable to complete request
  410.  13h    "NO_ADAPTERS" no adapters installed, but Socket Services is present
  411.  14h    "NO_CARD" no card in socket
  412. --------X-1A81-------------------------------
  413. INT 1A - PCMCIA Socket Services v1.00 - REGISTER STATUS CHANGE CALLBACK
  414.     AH = 81h
  415.     DS:DX -> callback routine (see #0424) or 0000h:0000h to disable
  416. Return: CF clear if successful
  417.         AH destroyed
  418.     CF set on error
  419.         AH = error code (see #0423)
  420. Note:    the callback will be invoked on any socket changes whose notification
  421.       has not been disabled with the status change enable mask; it may be
  422.       invoked either while processing a hardware interrupt from the adapter
  423.       or while processing the following Socket Services request
  424. SeeAlso: AH=80h"PCMCIA",AH=82h"PCMCIA"
  425.  
  426. (Table 0424)
  427. Values PCMCIA callback routine is invoked with:
  428.     AL = adapter number
  429.     BH = status change interrupt enable mask (see #0425)
  430.     BL = socket number
  431.     DH = current socket status (see #0426)
  432.     DL = current card status (see #0427)
  433. Return: all registers preserved
  434. Notes:    the callback may be invoked during a hardware interrupt, and may not
  435.       call on Socket Services
  436.     the callback will be invoked once for each socket with a status change
  437.  
  438. Bitfields for PCMCIA status change interrupt enable mask:
  439. Bit(s)    Description    (Table 0425)
  440.  7    card detect change
  441.  6    ready change
  442.  5    battery warning change
  443.  4    battery dead change
  444.  3    insertion request
  445.  2    ejection request
  446.  1-0    reserved (0)
  447.  
  448. Bitfields for PCMCIA current socket status:
  449. Bit(s)    Description    (Table 0426)
  450.  7    card changed
  451.  6    reserved (0)
  452.  5    card insertion complete
  453.  4    card ejection complete
  454.  3    card insertion request pending
  455.  2    card ejection request pending
  456.  1    card locked
  457.  0    reserved (0)
  458.  
  459. Bitfields for PCMCIA current card status:
  460. Bit(s)    Description    (Table 0427)
  461.  7    card detect
  462.  6    ready
  463.  5    battery voltage detect 2 (battery warning)
  464.  4    battery voltage detect 1 (battery dead)
  465.  3-1    reserved (0)
  466.  0    write protected
  467. --------s-1A8100-----------------------------
  468. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND - INSTALLATION CHECK
  469.     AX = 8100h
  470. Return: AL > 80h if supported
  471.     AX = 00C4h if supported (1000SL/TL)
  472.         CF set if sound chip is busy
  473.         CF clear  if sound chip is free
  474. Note:    the value of CF is not definitive; call this function until CF is
  475.       clear on return, then call AH=84h"Tandy"
  476. --------s-1A82-------------------------------
  477. INT 1A - Tandy 2500???, Tandy 1000SL/TL - DIGITAL SOUND - RECORD SOUND
  478.     AH = 82h
  479.     ES:BX -> buffer for sound samples
  480.     CX = length of buffer
  481.     DX = transfer rate (1-4095, 1 is fastest)
  482. Return: AH = 00h
  483.     CF set if sound busy
  484.     CF clear if sound chip free
  485. Note:    the value in DX should be 1/10 the corresponding value for
  486.       INT 1A/AH=83h on the 1000TL, 1/11.5 on the 1000SL.  Call
  487.       INT 1A/AX=8100h and INT 1A/AH=84h before invoking this function.
  488.     The BIOS issues an INT 15/AX=91FBh when the input is complete
  489.     DMA across a 64K boundary is masked by the BIOS
  490. --------X-1A82-------------------------------
  491. INT 1A - PCMCIA Socket Services v1.00 - REGISTER CARD TECHNOLOGY CALLBACK
  492.     AH = 82h
  493.     DS:DX -> callback routine (see #0428) or 0000h:0000h
  494. Return: CF clear if successful
  495.         AH destroyed
  496.     CF set on error
  497.         AH = error code (see #0423)
  498. Note:    the callback is invoked on a Write Multiple request with an unsupported
  499.       card technology type
  500. SeeAlso: AH=81h"PCMCIA",AH=94h
  501.  
  502. (Table 0428)
  503. Values PCMCIA callback routine is invoked with:
  504.     ES:AX -> Low-Level Socket Services Routines (see #0430)
  505.     BH = socket attributes (see #0429)
  506.     CX = number of bytes or words to write
  507.     DS:SI -> data buffer to be written
  508.     DX:DI -> 26-bit linear card address
  509.     BP = card technology type
  510. Return: CF clear if successful
  511.     CF set on error
  512.         AH = error code (07h,0Ch,12h,14h) (see #0423)
  513.  
  514. Bitfields for PCMCIA socket attributes:
  515. Bit(s)    Description    (Table 0429)
  516.  7-4    reserved (0)
  517.  3    packed buffer
  518.  2    even bytes only (only valid if 1 set)
  519.  1    data width (clear = byte, set = word)
  520.  0    memory type (clear = common, set = attribute)
  521.  
  522. Format of PCMCIA Low-Level Socket Services Routines:
  523. Offset    Size    Description    (Table 0430)
  524.  00h    WORD    offset of Write Many routine (see #0431)
  525.  02h    WORD    offset of Write One routine (see #0432)
  526.  04h    WORD    offset of Read One routine (see #0433)
  527.  06h    WORD    offset of Increment Offset routine (see #0434)
  528.  08h    WORD    offset of Set Offset routine (see #0435)
  529.  0Ah    WORD    offset of Get Status routine (see #0436)
  530.  
  531. (Table 0431)
  532. Call Write Many routine with:
  533.     BH = socket attributes (see #0429)
  534.     CX = number of bytes or words to write
  535.     DS:SI -> data to be written
  536. Return: CF clear if successful
  537.     CF set on error
  538.  
  539. (Table 0432)
  540. Call Write One routine with:
  541.     AL/AX = data to be written
  542.     BH = socket attributes (see #0429)
  543. Return: CF clear if successful
  544.     CF set on error
  545.  
  546. (Table 0433)
  547. Call Read One routine with:
  548.     BH = socket attributes (see #0429)
  549. Return: CF clear if successful
  550.         AL/AX = data read
  551.     CF set on error
  552.  
  553. (Table 0434)
  554. Call Increment Offset routine with:
  555.     BH = socket attributes (see #0429)
  556. Return: CF clear if successful
  557.     CF set on error
  558.  
  559. (Table 0435)
  560. Call Set Offset routine with:
  561.     DX:DI = new offset address
  562. Return: CF clear if successful
  563.     CF set on error
  564.  
  565. (Table 0436)
  566. Call Get Status routine with:
  567.     nothing
  568. Return: AL = current card status (see #0427)
  569. --------s-1A83-------------------------------
  570. INT 1A - Tandy 2500, Tandy 1000L series - START PLAYING DIGITAL SOUND
  571.     AH = 83h
  572.     AL = volume (0=silence, 7=highest)
  573.     CX = number of bytes to play
  574.     DX = time between sound samples (multiples of 273 nanoseconds)
  575.         only bits 11-0 used
  576.     ES:BX -> sound data (array of 8-bit unsigned PCM samples)
  577. Return: AH = 00h
  578.     CF set if sound is busy
  579.     CF clear if sound chip is free
  580. Notes:    this call returns immediately while the sound plays in the
  581.       background; the sound chip is clocked at 3.57 MHz, with the low 12
  582.       bits of DX specifying the clock divisor
  583.     The BIOS appears to call INT 15/AX=91FBh when the sound device
  584.       underflows to allow another INT 1A/AH=83h for seamless playing of
  585.       long sounds.
  586. SeeAlso: AH=84h"Tandy",INT 15/AH=91h
  587. --------X-1A83-------------------------------
  588. INT 1A - PCMCIA Socket Services v1.00 - GET SOCKET SERVICES VERSION NUMBER
  589.     AH = 83h
  590.     AL = adapter number
  591. Return: CF clear if successful
  592.         AX = Socket Services version (BCD)
  593.         BX = implementation version (BCD)
  594.         CX = 5353h ("SS")
  595.         DS:SI -> ASCIZ implementor description
  596.     CF set on error
  597.         AH = error code (01h) (see #0423)
  598. Note:    the current version (from the Revision A.00 documentation) of Socket
  599.       Services is 1.00 (AX=0100h)
  600. SeeAlso: AH=80h"PCMCIA"
  601. --------s-1A84-------------------------------
  602. INT 1A - Tandy 2500, Tandy 1000L series - STOP PLAYING DIGITAL SOUND
  603.     AH = 84h
  604. Return: ???
  605. Note:    the BIOS will call INT 15/AX=91FBh when the sound has stopped playing
  606. SeeAlso: AH=83h"Tandy",AH=85h"Tandy"
  607. --------X-1A84-------------------------------
  608. INT 1A - PCMCIA Socket Services v1.00 - INQUIRE ADAPTER
  609.     AH = 84h
  610.     AL = adapter number
  611. Return: CF clear if successful
  612.         AH destroyed
  613.         BH = number of windows
  614.         BL = number of sockets (1-16)
  615.         CX = number of EDCs
  616.         DH = capabilities (see #0437)
  617.         DL = status change interrupt used (only if DH bit 3 set)(see #0438)
  618.     CF set on error
  619.         AH = error code (01h) (see #0423)
  620. SeeAlso: AH=80h"PCMCIA",AH=85h"PCMCIA",AH=87h
  621.  
  622. Bitfields for PCMCIA capabilities:
  623. Bit(s)    Description    (Table 0437)
  624.  7-6    reserved (0)
  625.  5    status change interrupt is hardware shareable
  626.  4    status change interrupt is software shareable
  627.  3    status change interrupt
  628.  2    data bus width is per-socket rather than per-window
  629.  1    power management is per-adapter rather than per-socket
  630.  0    indicators are per-adapter rather than per-socket
  631.  
  632. (Table 0438)
  633. Values for PCMCIA status change interrupt usage:
  634.  00h-0Fh IRQ level
  635.  10h    NMI
  636.  11h    I/O check
  637.  12h    bus error
  638.  13h    vendor specific
  639.  14h-FFh reserved
  640. --------s-1A85-------------------------------
  641. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  642.     AH = 85h
  643.     ???
  644. Return: ???
  645. Note:    this function is not supported by the Tandy 1000SL/TL BIOS
  646. SeeAlso: AH=7Fh,AH=83h"Tandy"
  647. --------X-1A85-------------------------------
  648. INT 1A - PCMCIA Socket Services v1.00 - GET ADAPTER
  649.     AH = 85h
  650.     AL = adapter number
  651. Return: CF clear if successful
  652.         AH destroyed
  653.         DH = adapter attributes (see #0439)
  654.     CF set on error
  655.         AH = error code (01h) (see #0423)
  656. SeeAlso: AH=84h"PCMCIA",AH=86h
  657.  
  658. Bitfields for PCMCIA adapter attributes:
  659. Bit(s)    Description    (Table 0439)
  660.  7-5    reserved (0)
  661.  4    hardware share status change
  662.  3    software share status change
  663.  2    enable status change interrupts
  664.  1    adapter preserves state information during reduced power consumption
  665.  0    attempting to reduce power consumption
  666. --------X-1A86-------------------------------
  667. INT 1A - PCMCIA Socket Services v1.00 - SET ADAPTER
  668.     AH = 86h
  669.     AL = adapter number
  670.     DH = new adapter attributes (see #0439)
  671. Return: CF clear if successful
  672.         AH destroyed
  673.     CF set on error
  674.         AH = error code (01h) (see #0423)
  675. SeeAlso: AH=84h"PCMCIA",AH=85h"PCMCIA"
  676. --------X-1A87-------------------------------
  677. INT 1A - PCMCIA Socket Services v1.00 - INQUIRE WINDOW
  678.     AH = 87h
  679.     AL = adapter number
  680.     BH = window number
  681. Return: CF clear if successful
  682.         AH destroyed
  683.         BL = capabilities (see #0440)
  684.         CX = bitmap of assignable sockets
  685.         DH = EISA A15-A12 address lines (in bits 7-4, bits 3-0 = 0)
  686.         DL = supported access speeds (see #0441)
  687.         DS:SI -> Memory Window Characteristics table (see #0442)
  688.         DS:DI -> I/O Window Characteristics table (see #0443)
  689.     CF set on error
  690.         AH = error code (01h,11h) (see #0423)
  691. SeeAlso: AH=84h"PCMCIA",AH=88h,AH=89h,AH=8Ch
  692.  
  693. Bitfields for PCMCIA window capabilities:
  694. Bit(s)    Description    (Table 0440)
  695.  7-5    reserved (0)
  696.  4    separate enable for EISA comon space
  697.  3    EISA I/O mappable
  698.  2    I/O space
  699.  1    attribute memory
  700.  0    common memory
  701.  
  702. Bitfields for PCMCIA supported access speeds:
  703. Bit(s)    Description    (Table 0441)
  704.  7    reserved (0)
  705.  6    600 ns
  706.  5    300 ns
  707.  4    250 ns
  708.  3    200 ns
  709.  2    150 ns
  710.  1    100 ns
  711.  0    WAIT line monitoring
  712.  
  713. Format of PCMCIA Memory Window Characteristics table:
  714. Offset    Size    Description    (Table 0442)
  715.  00h    WORD    window capabilities (see #0444)
  716.  02h    WORD    minimum base address in 4K pages
  717.  04h    WORD    maximum base address in 4K pages
  718.  06h    WORD    minimum window size in 4K pages
  719.  08h    WORD    maximum window size in 4K pages
  720.  0Ah    WORD    window size granularity (4K units)
  721.  0Ch    WORD    required base address alignment (4K units)
  722.  0Eh    WORD    required card offset alignment (4K units)
  723.  
  724. Format of PCMCIA I/O Window Characteristics table:
  725. Offset    Size    Description    (Table 0443)
  726.  00h    WORD    window capabilities (see #0444)
  727.  02h    WORD    minimum base address in bytes
  728.  04h    WORD    maximum base address in bytes
  729.  06h    WORD    minimum window size in bytes
  730.  08h    WORD    maximum window size in bytes
  731.  0Ah    WORD    window size granularity (bytes)
  732.  
  733. Bitfields for PCMCIA window capabilities:
  734. Bit(s)    Description    (Table 0444)
  735.  0    programmable base address
  736.  1    programmable window size
  737.  2    window disable/enable supported
  738.  3    8-data bus
  739.  4    16-data bus
  740.  5    base address alignment on size boundary required
  741.  6    power-of-two size granularity
  742. ---memory windows---
  743.  7    card offset must be aligned on size boundary
  744.  8    paging hardware available
  745.  9    paging hardware shared
  746.  10    page disable/enable supported
  747.  11-15    reserved (0)
  748. ---I/O windows---
  749.  7-15    reserved (0)
  750. --------X-1A88-------------------------------
  751. INT 1A - PCMCIA Socket Services v1.00 - GET WINDOW
  752.     AH = 88h
  753.     AL = adapter number
  754.     BH = window number
  755. Return: CF clear if successful
  756.         AH destroyed
  757.         BL = socket number (0-16) (0 = not assigned)
  758.         CX = window size (bytes for I/O window, 4K units for memory window)
  759.         DH = window attributes (see #0445)
  760.         DL = access speed (only one bit set) (see #0441)
  761.         SI = window base address (bytes if I/O, 4K units if memory)
  762.         DI = card offset address (memory only, 4K units)
  763.     CF set on error
  764.         AH = error code (01h,11h) (see #0423)
  765. SeeAlso: AH=87h,AH=89h,AH=8Ah
  766.  
  767. Bitfields for PCMCIA window attributes:
  768. Bit(s)    Description    (Table 0445)
  769.  0    memory-mapped rather than I/O-mapped
  770.  1    attribute memory rather than common (memory-mapped)
  771.     EISA mapped (I/O)
  772.  2    enabled
  773.  3    16-data path
  774.  4    subdivided into pages (memory-mapped only)
  775.  5    non-specific access slot enable (EISA-mapped only)
  776.  6-7    reserved (0)
  777. --------X-1A89-------------------------------
  778. INT 1A - PCMCIA Socket Services v1.00 - SET WINDOW
  779.     AH = 89h
  780.     AL = adapter number
  781.     BH = window number
  782.     BL = socket number
  783.     CX = window size (bytes if I/O window, 4K units if memory window)
  784.     DH = window attributes (see #0445)
  785.     DL = access speed (only one bit set) (see #0441)
  786.     SI = window base address (bytes if I/O, 4K units if memory window)
  787.     DI = card offset addrress (memory only, 4K units)
  788. Return: CF clear if successful
  789.         AH destroyed
  790.     CF set on error
  791.         AH = error code (01h,03h,07h,08h,0Ah,0Bh,0Dh,10h,11h) (see #0423)
  792. SeeAlso: AH=87h,AH=88h,AH=8Bh
  793. --------X-1A8A-------------------------------
  794. INT 1A - PCMCIA Socket Services v1.00 - GET PAGE
  795.     AH = 8Ah
  796.     AL = adapter number
  797.     BH = window number
  798.     BL = page number
  799. Return: CF clear if successful
  800.         AH destroyed
  801.         DX = page attributes (see #0446)
  802.         DI = memory card offset (4K units)
  803.     CF set on error
  804.         AH = error code (01h,08h,11h) (see #0423)
  805. Notes:    this function is only valid for memory-mapped windows
  806.     the socket being operated on is implied by the previous AH=89h call
  807. SeeAlso: AH=88h,AH=8Bh
  808.  
  809. Bitfields for PCMCIA page attributes:
  810. Bit(s)    Description    (Table 0446)
  811.  0    page enabled
  812.  15-1    reserved (0)
  813. --------X-1A8B-------------------------------
  814. INT 1A - PCMCIA Socket Services v1.00 - SET PAGE
  815.     AH = 8Bh
  816.     AL = adapter number
  817.     BH = window number
  818.     BL = page number
  819.     DX = page attributes (see #0446)
  820.     DI = memory card offset (4K units)
  821. Return: CF clear if successful
  822.         AH destroyed
  823.     CF set on error
  824.         AH = error code (01h,02h,07h,08h,11h) (see #0423)
  825. Notes:    this function is only valid for memory-mapped windows
  826.     the socket being operated on is implied by the previous AH=89h call
  827. SeeAlso: AH=89h,AH=8Ah
  828. --------X-1A8C-------------------------------
  829. INT 1A - PCMCIA Socket Services v1.00 - INQUIRE SOCKET
  830.     AH = 8Ch
  831.     AL = adapter number
  832.     BL = socket number (01h to maximum supported by adapter)
  833. Return: CF clear if successful
  834.         AH destroyed
  835.         DH = capabilities (see #0447)
  836.         DL = hardware indicators (see #0448)
  837.         DS:SI -> Socket Characteristics table (see #0449)
  838.         DS:DI -> Power Management table (see #0451)
  839.     CF set on error
  840.         AH = error code (01h,0Bh) (see #0423)
  841. SeeAlso: AH=87h,AH=8Dh,AH=8Eh
  842.  
  843. Bitfields for PCMCIA socket capabilities:
  844. Bit(s)    Description    (Table 0447)
  845.  0    card change
  846.  1    card lock
  847.  2    insert card (motor control)
  848.  3    eject card (motor control)
  849.  4-7    reserved (0)
  850.  
  851. Bitfields for PCMCIA socket hardware indicators:
  852. Bit(s)    Description    (Table 0448)
  853.  0    busy status
  854.  1    write-protected
  855.  2    battery status
  856.  3    card lock status
  857.  4    XIP status (eXecute-In-Place)
  858.  5-7    reserved (0)
  859.  
  860. Format of PCMCIA Socket Characteristics table:
  861. Offset    Size    Description    (Table 0449)
  862.  00h    WORD    supported card types (see #0450)
  863.  02h    WORD    steerable IRQ levels (bit 0 = IRQ0 to bit 15 = IRQ15)
  864.  04h    WORD    additional steerable IRQ levels
  865.         bit 0: NMI
  866.         bit 1: I/O check
  867.         bit 2: bus error
  868.         bit 3: vendor-unique
  869.         bits 4-7 reserved (0)
  870.  
  871. Bitfields for supported card types:
  872. Bit(s)    Description    (Table 0450)
  873.  0    memory card
  874.  1    I/O card
  875.  2-7    reserved (0)
  876.  
  877. Format of PCMCIA Power Management table:
  878. Offset    Size    Description    (Table 0451)
  879.  00h    WORD    number of entries in table (0 if power management not avail)
  880.  02h 2N BYTEs    power levels
  881.         byte 0: voltage in 0.1V units
  882.         byte 1: power supply
  883.             bit 7: Vcc
  884.             bit 6: Vpp1
  885.             bit 5: Vpp2
  886. --------X-1A8D-------------------------------
  887. INT 1A - PCMCIA Socket Services v1.00 - GET SOCKET
  888.     AH = 8Dh
  889.     AL = adapter number
  890.     BL = socket number (01h to maximum supported by adapter)
  891. Return: CF clear if successful
  892.         AH destroyed
  893.         BH = status change interrupt enable mask (see #0425)
  894.         CH = Vcc level (lower nybble) (see #0451)
  895.         CL = Vpp1 level (upper nybble) and Vpp2 level (lower nybble)
  896.         DH = current socket status (see #0426)
  897.         DL = indicators (see #0448)
  898.         SI = card type (see #0452)
  899.         DI = IRQ level steering (I/O only) (see #0453)
  900.     CF set on error
  901.         AH = error code (01h,0Bh) (see #0423)
  902. SeeAlso: AH=8Ch,AH=8Eh
  903.  
  904. Bitfields for PCMCIA card type:
  905. Bit(s)    Description    (Table 0452)
  906.  0    memory
  907.  1    I/O
  908.  2-15    reserved (0)
  909.  
  910. Bitfields for PCMCIA I/O level steering:
  911. Bit(s)    Description    (Table 0453)
  912.  15    interrupt steering enabled
  913.  14-5    reserved (0)
  914.  4-0    IRQ level (0-15=IRQ,16=NMI,17=I/O check,18=bus error,19=vendor)
  915. --------X-1A8E-------------------------------
  916. INT 1A - PCMCIA Socket Services v1.00 - SET SOCKET
  917.     AH = 8Eh
  918.     AL = adapter number
  919.     BL = socket number (01h to maximum supported by adapter)
  920.     BH = status change interrupt enable mask (see #0425)
  921.     CL = Vpp1 level (upper nybble) and Vpp2 level (lower nybble)
  922.     DH = current socket status (see #0426)
  923.     DL = indicators (see #0448)
  924.     SI = card type (see #0452)
  925.     DI = IRQ level steering (I/O only) (see #0453)
  926. Return: CF clear if successful
  927.         AH destroyed
  928.     CF set on error
  929.         AH = error code (01h,02h,05h,06h,0Bh,0Eh,0Fh) (see #0423)
  930. SeeAlso: AH=8Ch,AH=8Dh
  931. --------X-1A8F-------------------------------
  932. INT 1A - PCMCIA Socket Services v1.00 - GET CARD
  933.     AH = 8Fh
  934.     AL = adapter number
  935.     BL = socket number (01h to maximum supported by adapter)
  936. Return: CF clear if successful
  937.         AH destroyed
  938.         DL = current card status (see #0427)
  939.     CF set on error
  940.         AH = error code (01h,0Bh) (see #0423)
  941. SeeAlso: AH=8Dh,AH=90h
  942. --------X-1A90-------------------------------
  943. INT 1A - PCMCIA Socket Services v1.00 - RESET CARD
  944.     AH = 90h
  945.     AL = adapter number
  946.     BL = socket number (01h to maximum supported by adapter)
  947. Return: CF clear if successful
  948.         AH destroyed
  949.     CF set on error
  950.         AH = error code (01h,0Bh,14h) (see #0423)
  951. Note:    toggles RESET pin of the specified card, but does not wait after
  952.       toggling the pin; it is the caller's responsibility to avoid
  953.       accessing the card before it is ready again
  954. --------X-1A91-------------------------------
  955. INT 1A - PCMCIA Socket Services v1.00 - READ ONE
  956.     AH = 91h
  957.     AL = adapter number
  958.     BL = socket number (01h to maximum supported by adapter)
  959.     BH = attributes (see #0454)
  960.     DX:SI = card address
  961. Return: CF clear if successful
  962.         AH destroyed
  963.         CL/CX = value read
  964.     CF set on error
  965.         AH = error code (01h,07h,09h,0Bh,14h) (see #0423)
  966.         CX may be destroyed
  967. Note:    this function is only valid for I/O-mapped sockets
  968. SeeAlso: AH=92h,AH=93h,INT 21/AX=440Dh"IOCTL"
  969.  
  970. Bitfields for PCMCIA attributes:
  971. Bit(s)    Description    (Table 0454)
  972.  2    even bytes only
  973.  1    word rather than byte
  974.  0    attribute memory instead of common memory
  975. --------X-1A92-------------------------------
  976. INT 1A - PCMCIA Socket Services v1.00 - WRITE ONE
  977.     AH = 92h
  978.     AL = adapter number
  979.     BL = socket number (01h to maximum supported by adapter)
  980.     BH = attributes (see #0454)
  981.     CL/CX = value to write
  982.     DX:SI = card address
  983. Return: CF clear if successful
  984.         AH destroyed
  985.     CF set on error
  986.         AH = error code (01h,07h,0Bh,12h,14h) (see #0423)
  987. Note:    this function is only valid for I/O-mapped sockets; it also does not
  988.       implement Card Technology handling--use AH=94h when writing to
  989.       non-RAM technologies
  990. SeeAlso: AH=91h,AH=94h,INT 21/AX=440Dh"IOCTL"
  991. --------X-1A93-------------------------------
  992. INT 1A - PCMCIA Socket Services v1.00 - READ MULTIPLE
  993.     AH = 93h
  994.     AL = adapter number
  995.     BL = socket number (01h to maximum supported by adapter)
  996.     BH = attributes (see #0454)
  997.     CX = number of bytes or words to read
  998.     DX:SI = card address
  999.     DS:DI -> data buffer to be filled
  1000. Return: CF clear if successful
  1001.         AH destroyed
  1002.     CF set on error
  1003.         AH = error code (01h,07h,09h,0Bh,14h) (see #0423)
  1004. Note:    this function is only available on I/O-mapped sockets
  1005. SeeAlso: AH=91h,AH=94h,INT 21/AX=440Dh"IOCTL"
  1006. --------X-1A94-------------------------------
  1007. INT 1A - PCMCIA Socket Services v1.00 - WRITE MULTIPLE
  1008.     AH = 94h
  1009.     AL = adapter number
  1010.     BL = socket number (01h to maximum supported by adapter)
  1011.     BH = attributes (see #0454)
  1012.     CX = number of bytes or words to read
  1013.     DX:DI = card address
  1014.     DS:SI -> buffer containing data
  1015.     BP = Card Technology type (0000h = RAM)
  1016. Return: CF clear if successful
  1017.         AH destroyed
  1018.     CF set on error
  1019.         AH = error code (01h,07h,0Bh,0Ch,12h,14h) (see #0423)
  1020. Notes:    this function is only available on I/O-mapped sockets
  1021.     Socket Services calls the Card Technology callback (see #0428) for
  1022.       any card technology it does not directly support
  1023. SeeAlso: AH=82h"PCMCIA",AH=92h,AH=93h,INT 21/AX=440Dh"IOCTL"
  1024. --------X-1A95-------------------------------
  1025. INT 1A - PCMCIA Socket Services v1.00 - INQUIRE ERROR DETECTION CODE
  1026.     AH = 95h
  1027.     AL = adapter number
  1028.     BH = EDC generator number
  1029. Return: CF clear if successful
  1030.         AH destroyed
  1031.         CX = bitmap of assignable sockets
  1032.         DH = EDC capabilities (see #0455)
  1033.         DL = supported EDC types (see #0456)
  1034.     CF set on error
  1035.         AH = error code (01h,04h) (see #0423)
  1036. SeeAlso: AH=96h,AH=9Ch
  1037.  
  1038. Bitfields for EDC capabilities:
  1039. Bit(s)    Description    (Table 0455)
  1040.  0    unidirectional only generation
  1041.  1    bidirectional only generation
  1042.  2    register-based (I/O-mapped) support
  1043.  3    memory-mapped support
  1044.  4    pausable
  1045.  5-7    reserved (0)
  1046.  
  1047. Bitfields for supported EDC types:
  1048. Bit(s)    Description    (Table 0456)
  1049.  0    8-checksum
  1050.  1    16-CRC-SDLC
  1051.  2-7    reserved (0)
  1052. --------X-1A96-------------------------------
  1053. INT 1A - PCMCIA Socket Services v1.00 - GET ERROR DETECTION CODE
  1054.     AH = 96h
  1055.     AL = adapter number
  1056.     BH = EDC generator number
  1057. Return: CF clear if successful
  1058.         AH destroyed
  1059.         BL = socket number
  1060.         DH = EDC attributes (see #0457)
  1061.         DL = EDC type (see #0456) (only one bit set)
  1062.     CF set on error
  1063.         AH = error code (01h,04h) (see #0423)
  1064. SeeAlso: AH=95h,AH=97h,AH=9Ch
  1065.  
  1066. Bitfields for EDC attributes:
  1067. Bit(s)    Description    (Table 0457)
  1068.  0    unidirectional only
  1069.  1    (if 0 set) clear=read, set=write
  1070.  2-7    reserved (0)
  1071. --------X-1A97-------------------------------
  1072. INT 1A - PCMCIA Socket Services v1.00 - SET ERROR DETECTION CODE
  1073.     AH = 97h
  1074.     AL = adapter number
  1075.     BH = EDC generator
  1076.     BL = socket number
  1077.     DH = EDC attributes (see #0457)
  1078.     DL = EDC type (see #0456) (only one bit may be set)
  1079. Return: CF clear if successful
  1080.         AH destroyed
  1081.     CF set on error
  1082.         AH = error code (01h,02h,04h,0Bh) (see #0423)
  1083. SeeAlso: AH=96h,AH=9Ch
  1084. --------X-1A98-------------------------------
  1085. INT 1A - PCMCIA Socket Services v1.00 - START ERROR DETECTION CODE
  1086.     AH = 98h
  1087.     AL = adapter number
  1088.     BH = EDC generator
  1089. Return: CF clear if successful
  1090.         AH destroyed
  1091.     CF set on error
  1092.         AH = error code (01h,04h) (see #0423)
  1093. SeeAlso: AH=96h,AH=99h,AH=9Bh,AH=9Ch
  1094. --------X-1A99-------------------------------
  1095. INT 1A - PCMCIA Socket Services v1.00 - PAUSE ERROR DETECTION CODE
  1096.     AH = 99h
  1097.     AL = adapter number
  1098.     BH = EDC generator
  1099. Return: CF clear if successful
  1100.         AH destroyed
  1101.     CF set on error
  1102.         AH = error code (01h,04h) (see #0423)
  1103. SeeAlso: AH=9Ah
  1104. --------X-1A9A-------------------------------
  1105. INT 1A - PCMCIA Socket Services v1.00 - RESUME ERROR DETECTION CODE
  1106.     AH = 9Ah
  1107.     AL = adapter number
  1108.     BH = EDC generator
  1109. Return: CF clear if successful
  1110.         AH destroyed
  1111.     CF set on error
  1112.         AH = error code (01h,04h) (see #0423)
  1113. SeeAlso: AH=99h,AH=98h
  1114. --------X-1A9B-------------------------------
  1115. INT 1A - PCMCIA Socket Services v1.00 - STOP ERROR DETECTION CODE
  1116.     AH = 9Bh
  1117.     AL = adapter number
  1118.     BH = EDC generator
  1119. Return: CF clear if successful
  1120.         AH destroyed
  1121.     CF set on error
  1122.         AH = error code (see #0423)
  1123. SeeAlso: AH=98h,AH=99h,AH=9Ch
  1124. --------X-1A9C-------------------------------
  1125. INT 1A - PCMCIA Socket Services v1.00 - READ ERROR DETECTION CODE
  1126.     AH = 9Ch
  1127.     AL = adapter number
  1128.     BH = EDC generator
  1129. Return: CF clear if successful
  1130.         AH destroyed
  1131.         DL/DX = computed checksum or CRC
  1132.     CF set on error
  1133.         AH = error code (01h,04h) (see #0423)
  1134. SeeAlso: AH=95h,AH=96h,AH=98h,AH=99h,AH=9Bh
  1135. --------c-1AA0-------------------------------
  1136. INT 1A U - Disk Spool II v2.07+ - INSTALLATION CHECK
  1137.     AH = A0h
  1138. Return: AH = B0h if installed
  1139.         AL = pending INT 1A/AH=D0h subfunction if nonzero???
  1140.         ES = code segment
  1141.         ES:BX -> name of current spool file
  1142.         ES:SI -> current despool file
  1143.         CL = despooler state (00h disabled, 41h enabled)
  1144.         CH = spooler state (00h disabled, 41h enabled)
  1145.         DL = despooler activity
  1146.         00h currently active printing a file
  1147.             41h standing by
  1148.         DH = 00h ???
  1149.            = 41h ???
  1150.         DI = 0000h ???
  1151.          0001h ???
  1152. Program: Disk Spool II is a shareware disk-based print spooler by Budget
  1153.       Software Company
  1154. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1155.       as that is a licensed version of Disk Spool II
  1156. SeeAlso: AH=ABh,AH=C0h,AH=D0h,AH=E1h
  1157. --------c-1AAB-------------------------------
  1158. INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
  1159.     AH = ABh
  1160. Return: AH = BAh if installed
  1161.         AL = pending INT 1A/AH=ADh subfunction if nonzero???
  1162.         ES = code segment
  1163.         ES:BX -> name of current spool file
  1164.         ES:SI -> current despool file
  1165.         CL = despooler state (00h disabled, 41h enabled)
  1166.         CH = spooler state (00h disabled, 41h enabled)
  1167.         DL = despooler activity
  1168.         00h currently active printing a file
  1169.             41h standing by
  1170.         DH = 00h ???
  1171.            = 41h ???
  1172.         DI = 0000h ???
  1173.          0001h ???
  1174. Program: Disk Spool II is a shareware disk-based print spooler by Budget
  1175.       Software Company
  1176. SeeAlso: AH=A0h,AH=ACh,AH=ADh,AH=E1h
  1177. --------c-1AAC-------------------------------
  1178. INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
  1179.     AH = ACh
  1180. Return: (see AH=ABh)
  1181. Note:    this function is identical to AH=ABh
  1182. SeeAlso: AH=A0h,AH=ABh,AH=ADh
  1183. --------c-1AAD-------------------------------
  1184. INT 1A U - Disk Spool II v1.83 - FUNCTION CALLS
  1185.     AH = ADh
  1186.     AL = function code (see #0458)
  1187. Return: AH = 00h if successful
  1188. SeeAlso: AH=ABh
  1189.  
  1190. (Table 0458)
  1191. Values for Disk Spool function code:
  1192.  02h    enable spooler only
  1193.  03h    enable the despooler
  1194.  04h    disable the despooler
  1195.  08h    inhibit popup menu
  1196.  09h    enable popup menu
  1197.  0Ah    ???
  1198.  0Bh    disable the spooler
  1199.  0Ch    start despooler after last successfully printed document???
  1200.  0Dh    start despooler at the exact point where it last left off???
  1201.  0Eh    pop up the menu
  1202.  0Fh    ???
  1203.  11h    ???
  1204.  14h    ???
  1205.  15h    ???
  1206.  16h    ???
  1207.  17h    ???
  1208.  18h    ???
  1209.  19h    ???
  1210.  20h    clear file pointed to by the despooler???
  1211.  21h    ???
  1212.  22h    ???
  1213.  23h    ???
  1214.  30h    ???
  1215. --------d-1AB001CX4D52-----------------------
  1216. INT 1A - Microsoft Real-Time Compression Interface (MRCI) - ROM-BASED SERVER
  1217.     AX = B001h
  1218.     CX = 4D52h ("MR")
  1219.     DX = 4349h ("CI")
  1220. Return: CX = 4943h ("IC") if installed
  1221.     DX = 524Dh ("RM") if installed
  1222.         ES:DI -> MRCINFO structure (see #0459)
  1223. Note:    this call is functionally identical to INT 2F/AX=4A12h, which should
  1224.       be called first, as this call is used for the first, ROM-based
  1225.       MRCI server, while the other call is used for RAM-based servers
  1226.       which may be partially or entirely replacing a prior server
  1227. SeeAlso: INT 2F/AX=4A12h
  1228.  
  1229. Format of MRCINFO structure:
  1230. Offset    Size    Description    (Table 0459)
  1231.  00h  4 BYTEs    vendor signature
  1232.         "MSFT" Microsoft
  1233.  04h    WORD    server version (high=major)
  1234.  06h    WORD    MRCI specification version
  1235.  08h    DWORD    address of server entry point (see #0461)
  1236.  0Ch    WORD    bit flags: server capabilities (see #0460)
  1237.  0Eh    WORD    bit flags: hardware assisted capabilities (see #0460)
  1238.  10h    WORD    maximum block size supported by server (at least 8192 bytes)
  1239.  
  1240. Bitfields for MRCI capabilities:
  1241. Bit(s)    Description    (Table 0460)
  1242.  0    standard compress
  1243.  1    standard decompress
  1244.  2    update compress
  1245.  3    MaxCompress (not present in initial public release)
  1246.  4    reserved
  1247.  5    incremental decompress
  1248.  6-14    reserved
  1249.  15    this structure is in ROM and can't be modified
  1250.     (server capabilities only)
  1251.  
  1252. (Table 0461)
  1253. Call MRCI entry point with:
  1254.     DS:SI -> MRCREQUEST structure (see #0462)
  1255.     CX = type of client (0000h application, 0001h file system)
  1256.     AX = operation
  1257.         0001h perform standard compression
  1258.         0002h perform standard decompression
  1259.         0004h perform update compression
  1260.         0008h perform MaxCompress
  1261.         0020h perform incremental decompression
  1262.     AX = FFFFh clear flags
  1263.         BX = bitmask of flags to clear (set bits in BX are flags to clear)
  1264. Return: AX = status
  1265.         0000h successful
  1266.         0001h invalid function
  1267.         0002h server busy, try again
  1268.         0003h destination buffer too small
  1269.         0004h incompressible data
  1270.         0005h bad compressed data format
  1271.     BP destroyed (MS-DOS 6.2)
  1272. Note:    MRCI driver may chain to a previous driver
  1273.  
  1274. Format of MRCREQUEST structure:
  1275. Offset    Size    Description    (Table 0462)
  1276.  00h    DWORD    pointer to source buffer
  1277.  04h    WORD    size of source buffer (0000h = 64K)
  1278.  06h    WORD    (UpdateCompress only)
  1279.         (call) offset in source buffer of beginning of changed data
  1280.         (return) offset in destination buffer of beginning of changed
  1281.               compressed data
  1282.  08h    DWORD    pointer to destination buffer
  1283.         must contain original compressed data for UpdateCompress
  1284.  0Ch    WORD    size of destination buffer (0000h = 64K)
  1285.         any compression: size of buffer for compressed data
  1286.         standard decompression: number of bytes to be decompressed
  1287.         incremental decompression: number of byte to decompress now
  1288.         (return) actual size of resulting data
  1289.  0Eh    WORD    client compressed data storage allocation size
  1290.  10h    DWORD    incremental decompression state data
  1291.         set to 00000000h before first incremental decompression call
  1292. Notes:    the source and destination buffers may not overlap
  1293.     the source and destination buffer sizes should normally be the same
  1294.     application should not update the contents of the MRCREQUEST structure
  1295.       between incremental decompression calls
  1296. --------X-1AB101-----------------------------
  1297. INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK
  1298.     AX = B101h
  1299. Return: AH = 00h if installed
  1300.         CF clear
  1301.         EDX = 20494350h (' ICP')
  1302.         EDI = physical address of protected-mode entry point (see #0464)
  1303.         AL = PCI hardware characteristics (see #0463)
  1304.         BH = PCI interface level major version (BCD)
  1305.         BL = PCI interface level minor version (BCD)
  1306.         CL = number of last PCI bus in system
  1307.     EAX, EBX, ECX, and EDX may be modified
  1308.     all other flags (except IF) may be modified
  1309. Note:    this function may require up to 1024 byte of stack; it will not enable
  1310.       interrupts if they were disabled before making the call
  1311. SeeAlso: AX=B181h
  1312.  
  1313. Bitfields for PCI hardware characteristics:
  1314. Bit(s)    Description    (Table 0463)
  1315.  0    configuration space access mechanism 1 supported
  1316.  1    configuration space access mechanism 2 supported
  1317.  2-3    reserved
  1318.  4    Special Cycle generation mechanism 1 supported
  1319.  5    Special Cycle generation mechanism 2 supported
  1320.  6-7    reserved
  1321.  
  1322. (Table 0464)
  1323. Call protected-mode entry point with:
  1324.     registers as for real/V86-mode INT call
  1325.     CS = ring 0 descriptor with access to full address space
  1326. Return: as for real/V86-mode call
  1327. --------X-1AB102-----------------------------
  1328. INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE
  1329.     AX = B102h
  1330.     CX = device ID
  1331.     DX = vendor ID
  1332.     SI = device index (0-n)
  1333. Return: CF clear if successful
  1334.     CF set on error
  1335.     AH = status
  1336.         00h successful
  1337.         BL = bus number
  1338.         BH = device/function number (bits 7-3 device, bits 2-0 func)
  1339.         83h bad vendor ID
  1340.         86h device not found
  1341.     EAX, EBX, ECX, and EDX may be modified
  1342.     all other flags (except IF) may be modified
  1343. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1344.       interrupts if they were disabled before making the call
  1345.     device ID FFFFh may be reserved as a wildcard in future implementations
  1346.     the meanings of BL and BH on return may be exchanged in future
  1347.       implementations
  1348.     all devices sharing a single vendor ID and device ID may be enumerated
  1349.       by incrementing SI from 0 until error 86h is returned
  1350. SeeAlso: AX=B182h
  1351. --------X-1AB103-----------------------------
  1352. INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE
  1353.     AX = B103h
  1354.     ECX = class code (bits 23-0)
  1355.     SI = device index (0-n)
  1356. Return: CF clear if successful
  1357.     CF set on error
  1358.     AH = status
  1359.         00h successful
  1360.         BL = bus number
  1361.         BH = device/function number (bits 7-3 device, bits 2-0 func)
  1362.         86h device not found
  1363.     EAX, EBX, ECX, and EDX may be modified
  1364.     all other flags (except IF) may be modified
  1365. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1366.       interrupts if they were disabled before making the call
  1367.     the meanings of BL and BH on return may be exchanged in future
  1368.       implementations
  1369.     all devices sharing the same Class Code may be enumerated by
  1370.       incrementing SI from 0 until error 86h is returned
  1371. SeeAlso: AX=B183h
  1372. --------X-1AB106-----------------------------
  1373. INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS
  1374.     AX = B106h
  1375.     BL = bus number
  1376.     EDX = Special Cycle data
  1377. Return: CF clear if successful
  1378.     CF set on error
  1379.     AH = status
  1380.         00h successful
  1381.         81h unsupported function
  1382.     EAX, EBX, ECX, and EDX may be modified
  1383.     all other flags (except IF) may be modified
  1384. Note:    this function may require up to 1024 byte of stack; it will not enable
  1385.       interrupts if they were disabled before making the call
  1386. SeeAlso: AX=B186h
  1387. --------X-1AB108-----------------------------
  1388. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE
  1389.     AX = B108h
  1390.     BL = bus number
  1391.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1392.     DI = register number (0000h-00FFh)
  1393. Return: CF clear if successful
  1394.         CL = byte read
  1395.     CF set on error
  1396.     AH = status
  1397.         00h successful
  1398.         87h bad register number
  1399.     EAX, EBX, ECX, and EDX may be modified
  1400.     all other flags (except IF) may be modified
  1401. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1402.       interrupts if they were disabled before making the call
  1403.     the meanings of BL and BH on entry may be exchanged in future
  1404.       implementations
  1405. SeeAlso: AX=B188h
  1406. --------X-1AB109-----------------------------
  1407. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD
  1408.     AX = B109h
  1409.     BL = bus number
  1410.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1411.     DI = register number (0000h-00FFh)
  1412. Return: CF clear if successful
  1413.         CX = word read
  1414.     CF set on error
  1415.     AH = status
  1416.         00h successful
  1417.         87h bad register number
  1418.     EAX, EBX, ECX, and EDX may be modified
  1419.     all other flags (except IF) may be modified
  1420. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1421.       interrupts if they were disabled before making the call
  1422.     the meanings of BL and BH on entry may be exchanged in future
  1423.       implementations
  1424. SeeAlso: AX=B189h
  1425. --------X-1AB10A-----------------------------
  1426. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD
  1427.     AX = B10Ah
  1428.     BL = bus number
  1429.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1430.     DI = register number (0000h-00FFh)
  1431. Return: CF clear if successful
  1432.         ECX = dword read
  1433.     CF set on error
  1434.     AH = status
  1435.         00h successful
  1436.         87h bad register number
  1437.     EAX, EBX, ECX, and EDX may be modified
  1438.     all other flags (except IF) may be modified
  1439. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1440.       interrupts if they were disabled before making the call
  1441.     the meanings of BL and BH on entry may be exchanged in future
  1442.       implementations
  1443. SeeAlso: AX=B18Ah
  1444. --------X-1AB10B-----------------------------
  1445. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE
  1446.     AX = B10Bh
  1447.     BL = bus number
  1448.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1449.     DI = register number (0000h-00FFh)
  1450.     CL = byte to write
  1451. Return: CF clear if successful
  1452.     CF set on error
  1453.     AH = status
  1454.         00h successful
  1455.         87h bad register number
  1456.     EAX, EBX, ECX, and EDX may be modified
  1457.     all other flags (except IF) may be modified
  1458. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1459.       interrupts if they were disabled before making the call
  1460.     the meanings of BL and BH on entry may be exchanged in future
  1461.       implementations
  1462. SeeAlso: AX=B18Bh
  1463. --------X-1AB10C-----------------------------
  1464. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD
  1465.     AX = B10Ch
  1466.     BL = bus number
  1467.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1468.     DI = register number (multiple of 2 less than 0100h)
  1469.     CX = word to write
  1470. Return: CF clear if successful
  1471.     CF set on error
  1472.     AH = status
  1473.         00h successful
  1474.         87h bad register number
  1475.     EAX, EBX, ECX, and EDX may be modified
  1476.     all other flags (except IF) may be modified
  1477. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1478.       interrupts if they were disabled before making the call
  1479.     the meanings of BL and BH on entry may be exchanged in future
  1480.       implementations
  1481. SeeAlso: AX=B18Ch
  1482. --------X-1AB10D-----------------------------
  1483. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD
  1484.     AX = B10Dh
  1485.     BL = bus number
  1486.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1487.     DI = register number (multiple of 4 less than 0100h)
  1488.     ECX = dword to write
  1489. Return: CF clear if successful
  1490.     CF set on error
  1491.     AH = status
  1492.         00h successful
  1493.         87h bad register number
  1494.     EAX, EBX, ECX, and EDX may be modified
  1495.     all other flags (except IF) may be modified
  1496. Notes:    this function may require up to 1024 byte of stack; it will not enable
  1497.       interrupts if they were disabled before making the call
  1498.     the meanings of BL and BH on entry may be exchanged in future
  1499.       implementations
  1500. SeeAlso: AX=B18Dh
  1501. --------X-1AB181-----------------------------
  1502. INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK (32-bit)
  1503.     AX = B181h
  1504. Return: as for AX=B101h
  1505. SeeAlso: AX=B101h
  1506. --------X-1AB182-----------------------------
  1507. INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE (32-bit)
  1508.     AX = B182h
  1509.     CX = device ID
  1510.     DX = vendor ID
  1511.     SI = device index (0-n)
  1512. Return: as for AX=B102h
  1513. SeeAlso: AX=B102h
  1514. --------X-1AB183-----------------------------
  1515. INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE (32-bit)
  1516.     AX = B183h
  1517.     ECX = class code (bits 23-0)
  1518.     SI = device index (0-n)
  1519. Return: as for AX=B103h
  1520. SeeAlso: AX=B103h
  1521. --------X-1AB186-----------------------------
  1522. INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS (32-bit)
  1523.     AX = B186h
  1524.     BL = bus number
  1525.     EDX = Special Cycle data
  1526. Return: as for AX=B106h
  1527. SeeAlso: AX=B106h
  1528. --------X-1AB188-----------------------------
  1529. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE (32-bit)
  1530.     AX = B188h
  1531.     BL = bus number
  1532.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1533.     DI = register number (0000h-00FFh)
  1534. Return: as for AX=B108h
  1535. SeeAlso: AX=B108h
  1536. --------X-1AB189-----------------------------
  1537. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD (32-bit)
  1538.     AX = B189h
  1539.     BL = bus number
  1540.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1541.     DI = register number (0000h-00FFh)
  1542. Return: as for AX=B109h
  1543. SeeAlso: AX=B109h
  1544. --------X-1AB18A-----------------------------
  1545. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD (32-bit)
  1546.     AX = B18Ah
  1547.     BL = bus number
  1548.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1549.     DI = register number (0000h-00FFh)
  1550. Return: as for AX=B10Ah
  1551. SeeAlso: AX=B10Ah
  1552. --------X-1AB18B-----------------------------
  1553. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE (32-bit)
  1554.     AX = B18Bh
  1555.     BL = bus number
  1556.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1557.     DI = register number (0000h-00FFh)
  1558.     CL = byte to write
  1559. Return: as for AX=B10Bh
  1560. SeeAlso: AX=B10Bh
  1561. --------X-1AB18C-----------------------------
  1562. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD (32-bit)
  1563.     AX = B18Ch
  1564.     BL = bus number
  1565.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1566.     DI = register number (multiple of 2 less than 0100h)
  1567.     CX = word to write
  1568. Return: as for AX=B10Ch
  1569. SeeAlso: AX=B10Ch
  1570. --------X-1AB18D-----------------------------
  1571. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD (32-bit)
  1572.     AX = B18Dh
  1573.     BL = bus number
  1574.     BH = device/function number (bits 7-3 device, bits 2-0 function)
  1575.     DI = register number (multiple of 4 less than 0100h)
  1576.     ECX = dword to write
  1577. Return: as for AX=B10Dh
  1578. SeeAlso: AX=B10Dh
  1579. --------c-1AC0-------------------------------
  1580. INT 1A U - Disk Spool II v2.07+ - ALTERNATE INSTALLATION CHECK
  1581.     AH = C0h
  1582. Return: (see AH=A0h)
  1583. Notes:    this call is identical to AH=A0h
  1584.     this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1585.       as that is a licensed version of Disk Spool II
  1586. SeeAlso: AH=A0h,AH=ABh,AH=D0h
  1587. --------U-1ACCCCBXCCCC-----------------------
  1588. INT 1A U - DATEFIX - INSTALLATION CHECK
  1589.     AX = CCCCh
  1590.     BX = CCCCh
  1591.     CX = 0000h
  1592. Return: CX = CCCCh if installed
  1593.         ES:BX -> original interrupt handler
  1594. Program: DATEFIX is a public-domain TSR to correct the date on AT&T 6300
  1595.       machines, where the realtime clock's calendar wraps after 1991
  1596. SeeAlso: AH=FEh,AH=FFh"AT&T"
  1597. --------c-1AD0-------------------------------
  1598. INT 1A U - Disk Spool II v2.07+ - FUNCTION CALLS
  1599.     AH = D0h
  1600.     AL = function code
  1601.         01h enable spooler and despooler
  1602.         02h enable spooler only
  1603.         03h enable despooler at beginning of file
  1604.         04h disable the despooler
  1605.         05h disable the despooler and spooler
  1606.         06h clear the spool file
  1607.         08h inhibit the popup menu
  1608.         09h enable the popup menu
  1609.         0Ah ??? (called by Disk Spool's INT 21 handler)
  1610.         0Bh disable the spooler
  1611.         0Ch start despooler after last successfully printed document
  1612.         0Dh start despooler at the exact point where it last left off
  1613.         0Eh pop up the menu
  1614.         0Fh ???
  1615.         11h start new spool file??? (called by Disk Spool's INT 21 handler
  1616.             when a program terminates)
  1617.         14h ???
  1618.         15h delete despool file and reset ???
  1619.         16h ??? (writes something to unknown file)
  1620.         17h ??? (writes something to despool file, then reads something
  1621.             else and ???)
  1622.         18h ??? (reads something from despool file, and then ???)
  1623.         19h ??? (creates/truncates spool file)
  1624.         20h clear file pointed to by the despooler
  1625.         21h ??? (writes something to unknown file)
  1626.         22h ??? (writes something to spool file if spooler/despooler using
  1627.             same file)
  1628.         23h ??? (opens/creates unknown file, then ???)
  1629.         30h ???
  1630.         31h ???
  1631.         32h beep
  1632.         33h append CRLF to spool file???
  1633.         34h ???
  1634.         35h ???
  1635.         36h ???
  1636.         37h append CRLF to spool file and start a new spool file???
  1637.         38h ???
  1638.         40h ??? (v4.05)
  1639.         41h ??? (v4.05)
  1640.         51h ??? (called by Disk Spool's INT 21 handler)
  1641.         52h ??? (called by Disk Spool's INT 21 handler)
  1642.         57h ???
  1643.         5Ah ??? (v4.05)
  1644.         5Bh ??? (v4.05)
  1645.         5Ch ??? (v4.05)
  1646. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1647.       as that is a licensed version of Disk Spool II
  1648. SeeAlso: AH=A0h,AH=ADh
  1649. --------c-1AE0-------------------------------
  1650. INT 1A - Disk Spool II v4.0x - ENABLE/DISABLE
  1651.     AH = E0h
  1652.     AL = subfunction
  1653.         01h enable spooler
  1654.         02h disable spooler
  1655.         03h enable despooler
  1656.         04h disable despooler
  1657.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  1658. Return: AH = status
  1659.         00h successful
  1660.         F0h printer port not managed by Disk Spool II
  1661.         FFH failed
  1662. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1663.       as that is a licensed version of Disk Spool II
  1664. SeeAlso: AH=A0h,AH=E1h,AX=E301h,AX=E401h
  1665. --------c-1AE1-------------------------------
  1666. INT 1A - Disk Spool II v4.0x - GET STATUS
  1667.     AH = E1h
  1668.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  1669. Return: AH = status
  1670.         00h successful
  1671.         CL = despooler state (00h disabled, 41h enabled)
  1672.         CH = spooler state (00h disabled, 41h enabled)
  1673.         DL = despooler activity (00h standing by, 41h printing)
  1674.         ES:BX -> ASCIZ name of current spool file (or next if AutoSpool
  1675.             or AutoDespool enabled)
  1676.         ES:SI -> ASCIZ name of current despool file
  1677.         ES:DI -> 3-byte file extension used by Disk Spool II
  1678.         F0h printer port not managed by Disk Spool II
  1679. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1680.       as that is a licensed version of Disk Spool II
  1681. SeeAlso: AH=A0h,AH=E0h,AH=E2h
  1682. --------c-1AE2-------------------------------
  1683. INT 1A - Disk Spool II v4.0x - GET SPOOL FILES
  1684.     AH = E2h
  1685.     AL = which
  1686.         01h first
  1687.         02h next (can only call after "first")
  1688.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  1689. Return: AH = status
  1690.         00h successful
  1691.         ES:BX -> ASCIZ filename
  1692.         F0h no (more) spool files
  1693.         FFh failed
  1694. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1695.       as that is a licensed version of Disk Spool II
  1696. SeeAlso: AH=E0h,AH=E1h
  1697. --------c-1AE301-----------------------------
  1698. INT 1A - Disk Spool II v4.0x - GET SPOOL FILE STATUS
  1699.     AX = E301h
  1700.     ES:BX -> ASCIZ filename (max 32 chars)
  1701. Return: AH = status
  1702.         00h successful
  1703.         ES:SI -> spool file status record (see #0465)
  1704.         F0h not a spool file
  1705.         FFh failed
  1706. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1707.       as that is a licensed version of Disk Spool II
  1708. SeeAlso: AH=E0h,AX=E302h,AX=E401h
  1709.  
  1710. Format of Disk Spool II spool file status record:
  1711. Offset    Size    Description    (Table 0465)
  1712.  00h    BYTE    hour of creation or last update
  1713.  01h    BYTE    minute of creation or last update
  1714.  02h    BYTE    year-1980 of creation or last update
  1715.  03h    BYTE    month of creation or last update
  1716.  04h    BYTE    day of creation or last update
  1717.  05h    BYTE    total number of copies to print
  1718.  06h    BYTE    number of copies already printed
  1719.  07h    BYTE    printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  1720.  08h    BYTE    save status (00h delete after printing, 01h save)
  1721.  09h    BYTE    file status
  1722.         01h done printing, but being saved
  1723.         02h on hold
  1724.         03h queued for printing
  1725.         04h being spooled
  1726.         05h being despooled (i.e. printed)
  1727.  0Ah 16 BYTEs    ASCIZ description
  1728.  1Ah  2 WORDs    file size in bytes (high,low)
  1729.  1Eh  2 WORDs    bytes left to print (high,low)
  1730. --------c-1AE302-----------------------------
  1731. INT 1A - Disk Spool II v4.0x - UPDATE SPOOL FILE
  1732.     AX = E302h
  1733.     ES:BX -> ASCIZ filename (max 32 chars)
  1734.     ES:SI -> spool file status record (see #0465)
  1735. Return: AH = status
  1736.         00h successful
  1737.         F0h not a spool file
  1738.         FFh failed
  1739. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1740.       as that is a licensed version of Disk Spool II
  1741. SeeAlso: AH=E0h,AX=E301h,AX=E401h
  1742. --------c-1AE401-----------------------------
  1743. INT 1A - Disk Spool II v4.0x - SPOOL EXISTING FILE
  1744.     AX = E401h
  1745.     ES:BX -> ASCIZ filename (max 32 chars)
  1746.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  1747. Return: AH = status
  1748.         00h successful
  1749.         FFh failed
  1750. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1751.       as that is a licensed version of Disk Spool II
  1752. SeeAlso: AH=E1h,AX=E302h,AX=E402h
  1753. --------c-1AE402-----------------------------
  1754. INT 1A U - Disk Spool II v4.0x - SPOOL EXISTING FILE???
  1755.     AX = E402h
  1756.     ES:BX -> ASCIZ filename (max 32 chars)
  1757.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  1758. Return: AH = status
  1759.         00h successful
  1760.         FFh failed
  1761. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1762.       as that is a licensed version of Disk Spool II
  1763. SeeAlso: AH=E1h,AX=E302h,AX=E401h
  1764. --------c-1AE5-------------------------------
  1765. INT 1A U - Emulaser ELSPL.COM - ???
  1766.     AH = E5h
  1767.     ???
  1768. Return: ???
  1769. Program: ELSPL.COM is a licensed version of Disk Spool II which is distributed
  1770.       as part of Vertisoft's Emulaser PostScript emulator
  1771. SeeAlso: AH=A0h,INT 17/AH=03h
  1772. --------c-1AEE-------------------------------
  1773. INT 1A U - Disk Spool II v4.05 - ???
  1774.     AH = EEh
  1775.     AL = printer port???
  1776.     ???
  1777. Return: ???
  1778. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  1779.       as that is a licensed version of Disk Spool II
  1780. SeeAlso: AH=E1h
  1781. --------U-1AF7-------------------------------
  1782. INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
  1783.     AH = F7h
  1784. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  1785.       time to correct for clock drift
  1786. Note:    any AH value from F0h-F7h or F9h-FEh will perform this function in
  1787.       version 1.1, but F7h is the function called by transient portion
  1788. SeeAlso: AH=F8h,AH=FFh"RighTime"
  1789. --------U-1AF8-------------------------------
  1790. INT 1A - RighTime v1.1 - ENABLE
  1791.     AH = F8h
  1792. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  1793.       time to correct for clock drift
  1794. Note:    RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
  1795.       TeSseRact program identifier based on its current state: "RighTime"
  1796.       when enabled, "RighTim"F7h when disabled.
  1797. SeeAlso: AH=F7h,AH=FFh"RighTime"
  1798. --------b-1AFE-------------------------------
  1799. INT 1A - AT&T 6300 - READ TIME AND DATE
  1800.     AH = FEh
  1801. Return: BX = day count (0 = Jan 1, 1984)
  1802.     CH = hour
  1803.     CL = minute
  1804.     DH = second
  1805.     DL = hundredths
  1806. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
  1807. --------b-1AFF-------------------------------
  1808. INT 1A - AT&T 6300 - SET TIME AND DATE
  1809.     AH = FFh
  1810.     BX = day count (0 = Jan 1, 1984)
  1811.     CH = hour
  1812.     CL = minute
  1813.     DH = second
  1814.     DL = hundredths
  1815. Return: ???
  1816. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
  1817. --------U-1AFF-------------------------------
  1818. INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
  1819.     AH = FFh
  1820. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  1821.       time to correct for clock drift
  1822. Note:    upon being permanently disabled, RighTime closes the file handle
  1823.       referencing its executable (which is updated with time correction
  1824.       information every two minutes while RighTime is enabled).
  1825. --------s-1AFF00-----------------------------
  1826. INT 1A - SND - INSTALLATION CHECK???
  1827.     AX = FF00h
  1828. Return: AL = version??? (02h)
  1829.     AH = busy flag (00h if not in a SND call, 01h if SND currently active)
  1830. Note:    the SND API is also supported by IC (Internal Commands) v2.0, a
  1831.       shareware TSR by Geoff Friesen which extends COMMAND.COM's internal
  1832.       command set
  1833. SeeAlso: AX=FF01h,AX=FF02h,AX=FF04h,AX=FF05h
  1834. --------s-1AFF01-----------------------------
  1835. INT 1A - SND - PAUSE
  1836.     AX = FF01h
  1837.     DX = number of clock ticks to delay
  1838. Return: AH = status
  1839.         00h successful
  1840.         01h SND busy
  1841. Notes:    if successful, execution returns to the caller after the delay expires;
  1842.       if SND is busy, execution returns immediately
  1843.     the IC v2.0 implementation of this API makes no special allowance for
  1844.       time rollover at midnight, which can cause the delay to be over one
  1845.       hour if this function is called just before the BIOS time count
  1846.       rolls over and the delay extends into the next day
  1847. SeeAlso: AX=FF00h,INT 15/AH=86h,INT 62/AX=0096h,INT 7F/AH=E8h,INT 80/BX=0009h
  1848. SeeAlso: INT E0/CL=BDh
  1849. --------s-1AFF02-----------------------------
  1850. INT 1A - SND - START SOUND
  1851.     AX = FF02h
  1852.     DX = frequency in Hertz (14h-FFFFh)
  1853. Return: AH = status
  1854.         00h successful
  1855.         01h SND busy
  1856. SeeAlso: AX=FF00h,AX=FF01h,AX=FF03h
  1857. --------s-1AFF03-----------------------------
  1858. INT 1A - SND - STOP SOUND
  1859.     AX = FF03h
  1860. Return: AH = status
  1861.         00h successful
  1862.         01h busy
  1863. Note:    turns off any sound currently being emitted by the PC's speaker unless
  1864.       SND is currently busy processing an API call (this includes
  1865.       background music).  Use AX=FF05h to stop the sound even if an API
  1866.       call is in progress.
  1867. SeeAlso: AX=FF00h,AX=FF02h,AX=FF05h
  1868. --------s-1AFF04-----------------------------
  1869. INT 1A - SND - PLAY MUSIC STRING IN BACKGROUND
  1870.     AX = FF04h
  1871.     DS:DX -> ASCIZ music string
  1872. Return: AH = status
  1873.         00h successful (music begins playing in background)
  1874.         01h busy
  1875. Note:    the music string accepted by SND is not the same as that accepted by
  1876.       BASIC and other programs which process music strings
  1877. SeeAlso: AX=FF00h,AX=FF05h,INT 80/BX=0006h
  1878. --------s-1AFF05-----------------------------
  1879. INT 1A - SND - UNCONDITIONALLY STOP SOUND
  1880.     AX = FF05h
  1881. Return: AH = 00h (successful)
  1882. Note:    this function is the same as AX=FF03h, but will stop the sound even if
  1883.       SND is currently busy, such as playing background music
  1884. SeeAlso: AX=FF00h,AX=FF03h,INT 80/BX=0007h
  1885. --------B-1B---------------------------------
  1886. INT 1B C - KEYBOARD - CONTROL-BREAK HANDLER
  1887. Desc:    this interrupt is automatically called when INT 09 determines that
  1888.       Control-Break has been pressed
  1889. Note:    normally points to a short routine in DOS which sets the Ctrl-C flag,
  1890.       thus invoking INT 23h the next time DOS checks for Ctrl-C.
  1891. SeeAlso: INT 23
  1892. --------B-1C---------------------------------
  1893. INT 1C - TIME - SYSTEM TIMER TICK
  1894. Desc:    this interrupt is automatically called on each clock tick by the INT 08
  1895.       handler
  1896. Notes:    this is the preferred interrupt to chain when a program needs to be
  1897.       invoked regularly
  1898.     not available on NEC 9800-series PCs
  1899. SeeAlso: INT 08
  1900. --------B-1D---------------------------------
  1901. INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
  1902. Note:    the default parameter table (see #0466) is located at F000h:F0A4h for
  1903.       100% compatible BIOSes
  1904. SeeAlso: INT 10/AH=00h
  1905.  
  1906. Format of video parameters:
  1907. Offset    Size    Description    (Table 0466)
  1908.  00h 16 BYTEs    6845 register values for modes 00h and 01h
  1909.  10h 16 BYTEs    6845 register values for modes 02h and 03h
  1910.  20h 16 BYTEs    6845 register values for modes 04h and 05h
  1911.  30h 16 BYTEs    6845 register values for modes 06h and 07h
  1912.  40h    WORD    bytes in video buffer for modes 00h and 01h
  1913.  42h    WORD    bytes in video buffer for modes 02h and 03h
  1914.  44h    WORD    bytes in video buffer for modes 04h and 05h
  1915.  46h    WORD    bytes in video buffer for modes 06h and 07h
  1916.  48h  8 BYTEs    columns on screen for each of modes 00h through 07h
  1917.  50h  8 BYTEs    CRT controller mode bytes for each of modes 00h through 07h
  1918. --------B-1E---------------------------------
  1919. INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
  1920. Note:    the default parameter table (see #0467) is located at F000h:EFC7h for
  1921.       100% compatible BIOSes
  1922. SeeAlso: INT 13/AH=0Fh,INT 41
  1923.  
  1924. Format of diskette parameter table:
  1925. Offset    Size    Description    (Table 0467)
  1926.  00h    BYTE    first specify byte
  1927.         bits 7-4: step rate
  1928.         bits 3-0: head unload time (0Fh = 240 ms)
  1929.  01h    BYTE    second specify byte
  1930.         bits 7-1: head load time (01h = 4 ms)
  1931.         bit    0: non-DMA mode (always 0)
  1932.  02h    BYTE    delay until motor turned off (in clock ticks)
  1933.  03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
  1934.  04h    BYTE    sectors per track
  1935.  05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
  1936.  06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
  1937.  07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
  1938.  08h    BYTE    format filler byte (default F6h)
  1939.  09h    BYTE    head settle time in milliseconds
  1940.  0Ah    BYTE    motor start time in 1/8 seconds
  1941. --------B-1F---------------------------------
  1942. INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  1943. Desc:    this vector points at 1024 bytes of graphics data, 8 bytes for each
  1944.       character 80h-FFh
  1945. Note:    graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
  1946.       compatible BIOSes
  1947. SeeAlso: INT 10/AX=5000h,INT 43
  1948. --------J-1F90-------------------------------
  1949. INT 1F - NEC PC-9801 - COPY EXTENDED MEMORY
  1950.     AH = 90h
  1951.     ES:BX -> global descriptor table (see #0319 at INT 15/AH=87h)
  1952.     CX = number of bytes to copy
  1953.     SI = 0000h
  1954.     DI = 0000h
  1955. Return: CF clear if successful
  1956.     CF set on error
  1957.     ???
  1958. SeeAlso: INT 15/AH=87h
  1959. --------O-20---------------------------------
  1960. INT 20 - Minix - SEND/RECEIVE MESSAGE
  1961.     AX = process ID of other process
  1962.     BX -> message
  1963.     CX = operation (1 send, 2 receive, 3 send&receive)
  1964. Program: Minix is a Version 7 Unix-compatible operating system by Andrew
  1965.       Tanenbaum
  1966. Note:    the message contains the system call number (numbered as in V7
  1967.       Unix(tm)) and the call parameters
  1968. --------D-20---------------------------------
  1969. INT 20 - DOS 1+ - TERMINATE PROGRAM
  1970.     CS = PSP segment
  1971. Return: never
  1972. Note:    (see INT 21/AH=00h)
  1973. SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
  1974. --------G-20---------------------------------
  1975. INT 20 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE FIRMWARE DEBUGGER
  1976.     ???
  1977. Return: ???
  1978. SeeAlso: INT 21"COMTROL"
  1979. --------G-21---------------------------------
  1980. INT 21 - COMTROL HOSTESS i/ISA DEBUGGER - GET SEGMENT FOR CONTROL PROGRAM USE
  1981.     ???
  1982. Return: AX = first segment available for control program use
  1983. SeeAlso: INT 20"COMTROL",INT 22"COMTROL"
  1984. --------D-2100-------------------------------
  1985. INT 21 - DOS 1+ - TERMINATE PROGRAM
  1986.     AH = 00h
  1987.     CS = PSP segment
  1988. Notes:    Microsoft recommends using INT 21/AH=4Ch for DOS 2+
  1989.     execution continues at the address stored in INT 22 after DOS performs
  1990.       whatever cleanup it needs to do
  1991.     if the PSP is its own parent, the process's memory is not freed; if
  1992.       INT 22 additionally points into the terminating program, the
  1993.       process is effectively NOT terminated
  1994.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1995. SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
  1996. --------D-2101-------------------------------
  1997. INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
  1998.     AH = 01h
  1999. Return: AL = character read
  2000. Notes:    ^C/^Break are checked, and INT 23 executed if read
  2001.     character is echoed to standard output
  2002.     standard input is always the keyboard and standard output the screen
  2003.       under DOS 1.x, but they may be redirected under DOS 2+
  2004. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  2005. --------D-2102-------------------------------
  2006. INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
  2007.     AH = 02h
  2008.     DL = character to write
  2009. Return: AL = last character output (despite the official docs which state
  2010.         nothing is returned) (at least DOS 3.3-5.0)
  2011. Notes:    ^C/^Break are checked, and INT 23 executed if pressed
  2012.     standard output is always the screen under DOS 1.x, but may be
  2013.       redirected under DOS 2+
  2014.     the last character output will be the character in DL unless DL=09h
  2015.       on entry, in which case AL=20h as tabs are expanded to blanks
  2016. SeeAlso: AH=06h,AH=09h
  2017. --------D-2103-------------------------------
  2018. INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX
  2019.     AH = 03h
  2020. Return: AL = character read
  2021. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  2022.     STDAUX is usually the first serial port
  2023. SeeAlso: AH=04h,INT 14/AH=02h,INT E0/CL=03h
  2024. --------D-2104-------------------------------
  2025. INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX
  2026.     AH = 04h
  2027.     DL = character to write
  2028. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  2029.     STDAUX is usually the first serial port
  2030.     if STDAUX is busy, this function will wait until it becomes free
  2031. SeeAlso: AH=03h,INT 14/AH=01h,INT E0/CL=04h
  2032. --------D-2105-------------------------------
  2033. INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER
  2034.     AH = 05h
  2035.     DL = character to print
  2036. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  2037.     STDPRN is usually the first parallel port, but may be redirected under
  2038.       DOS 2+
  2039.     if the printer is busy, this function will wait
  2040. SeeAlso: INT 17/AH=00h
  2041. --------D-2106-------------------------------
  2042. INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT
  2043.     AH = 06h
  2044.     DL = character (except FFh)
  2045. Return: AL = character output (despite official docs which state nothing is
  2046.         returned) (at least DOS 3.3-5.0)
  2047. Notes:    does not check ^C/^Break
  2048.     writes to standard output, which is always the screen under DOS 1.x,
  2049.       but may be redirected under DOS 2+
  2050. SeeAlso: AH=02h,AH=09h
  2051. --------D-2106--DLFF-------------------------
  2052. INT 21 - DOS 1+ - DIRECT CONSOLE INPUT
  2053.     AH = 06h
  2054.     DL = FFh
  2055. Return: ZF set if no character available
  2056.         AL = 00h
  2057.     ZF clear if character available
  2058.         AL = character read
  2059. Notes:    ^C/^Break are NOT checked
  2060.     if the returned character is 00h, the user pressed a key with an
  2061.       extended keycode, which will be returned by the next call of this
  2062.       function
  2063.     this function reads from standard input, which is always the keyboard
  2064.       under DOS 1.x, but may be redirected under DOS 2+
  2065.     although the return of AL=00h when no characters are available is not
  2066.       documented, some programs rely on this behavior
  2067. SeeAlso: AH=0Bh
  2068. --------D-2107-------------------------------
  2069. INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO
  2070.     AH = 07h
  2071. Return: AL = character read from standard input
  2072. Notes:    does not check ^C/^Break
  2073.     standard input is always the keyboard under DOS 1.x, but may be
  2074.       redirected under DOS 2+
  2075.     if the interim console flag is set (see AX=6301h), partially-formed
  2076.       double-byte characters may be returned
  2077. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  2078. --------D-2108-------------------------------
  2079. INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO
  2080.     AH = 08h
  2081. Return: AL = character read from standard input
  2082. Notes:    ^C/^Break are checked, and INT 23 executed if detected
  2083.     standard input is always the keyboard under DOS 1.x, but may be
  2084.       redirected under DOS 2+
  2085.     if the interim console flag is set (see AX=6301h), partially-formed
  2086.       double-byte characters may be returned
  2087. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
  2088. --------D-2109-------------------------------
  2089. INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT
  2090.     AH = 09h
  2091.     DS:DX -> '$'-terminated string
  2092. Return: AL = 24h (the '$' terminating the string, despite official docs which
  2093.         state that nothing is returned) (at least DOS 3.3-5.0)
  2094. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  2095.     standard output is always the screen under DOS 1.x, but may be
  2096.       redirected under DOS 2+
  2097.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  2098. SeeAlso: AH=02h,AH=06h"OUTPUT"
  2099. --------D-210A-------------------------------
  2100. INT 21 - DOS 1+ - BUFFERED INPUT
  2101.     AH = 0Ah
  2102.     DS:DX -> buffer (see #0468)
  2103. Return: buffer filled with user input
  2104. Notes:    ^C/^Break are checked, and INT 23 is called if either detected
  2105.     reads from standard input, which may be redirected under DOS 2+
  2106.     if the maximum buffer size (see #0468) is set to 00h, this call returns
  2107.       immediately without reading any input
  2108. SeeAlso: AH=0Ch,INT 2F/AX=4810h
  2109.  
  2110. Format of DOS input buffer:
  2111. Offset    Size    Description    (Table 0468)
  2112.  00h    BYTE    maximum characters buffer can hold
  2113.  01h    BYTE    (call) number of chars from last input which may be recalled
  2114.         (return) number of characters actually read, excluding CR
  2115.  02h  N BYTEs    actual characters read, including the final carriage return
  2116. --------K-210A00-----------------------------
  2117. INT 21 - WCED v1.6+ - INSTALLATION CHECK
  2118.     AX = 0A00h
  2119.     DS:DX -> 6-byte buffer whose first two bytes must be 00h
  2120. Return: buffer offset 02h-05h filled with "Wced" if installed
  2121. Program: WCED is a free command-line editor and history utility by Stuart
  2122.       Russell
  2123. SeeAlso: AH=FFh"CED"
  2124. --------D-210B-------------------------------
  2125. INT 21 - DOS 1+ - GET STDIN STATUS
  2126.     AH = 0Bh
  2127. Return: AL = status
  2128.         00h if no character available
  2129.         FFh if character is available
  2130. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  2131.     standard input is always the keyboard under DOS 1.x, but may be
  2132.       redirected under DOS 2+
  2133.     if the interim console flag is set (see AX=6301h), this function
  2134.       returns AL=FFh if a partially-formed double-byte character is
  2135.       available
  2136. SeeAlso: AH=06h"INPUT",AX=4406h
  2137. --------v-210B56-----------------------------
  2138. INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
  2139.     AX = 0B56h
  2140. Return: AX = 4952h if resident
  2141. SeeAlso: AX=0D20h,INT 12/AX=4350h/BX=4920h
  2142. --------D-210C-------------------------------
  2143. INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT
  2144.     AH = 0Ch
  2145.     AL = STDIN input function to execute after flushing buffer
  2146.     other registers as appropriate for the input function
  2147. Return: as appropriate for the specified input function
  2148. Note:    if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
  2149.       no input is attempted
  2150. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  2151. --------D-210D-------------------------------
  2152. INT 21 - DOS 1+ - DISK RESET
  2153.     AH = 0Dh
  2154. Return: (DOS 6 only) CF clear (earlier versions preserve CF)
  2155. Notes:    This function writes all modified disk buffers to disk, but does not
  2156.       update the directory information (that is only done when files are
  2157.       closed or a SYNC call is issued)
  2158. SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h
  2159. --------v-210D20-----------------------------
  2160. INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
  2161.     AX = 0D20h
  2162. Return: AX = 1971h if resident
  2163. SeeAlso: AX=0B56h,AH=30h/DX=ABCDh
  2164. --------D-210E-------------------------------
  2165. INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
  2166.     AH = 0Eh
  2167.     DL = new default drive (00h = A:, 01h = B:, etc)
  2168. Return: AL = number of potentially valid drive letters
  2169. Notes:    under Novell NetWare, the return value is always 32, the number of
  2170.       drives that NetWare supports
  2171.     under DOS 3+, the return value is the greatest of 5, the value of
  2172.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  2173.     on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
  2174.       may be accessed as either A: or B:
  2175.     otherwise, the return value is the highest drive actually present
  2176.     DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
  2177.       and 3+ a maximum of 26 drives
  2178. SeeAlso: AH=19h,AH=3Bh,AH=DBh
  2179. --------v-210E--DLAD-------------------------
  2180. INT 21 U - Novell DOS 7 - SDRes v27.03 - INSTALLATION CHECK
  2181.     AH = 0Eh
  2182.     DL = ADh
  2183. Return: AL = BAh if installed
  2184. Program: SDRes is the resident portion of the Search&Destroy antiviral by
  2185.       Fifth Generation Systems, as bundled with Novell DOS 7
  2186. SeeAlso: AH=0Eh/DL=AEh,AH=0Eh/DL=AFh,AH=4Ah/BX=00B6h,INT 13/AX=A759h
  2187. --------v-210E--DLAD-------------------------
  2188. INT 21 U - Novell DOS 7 - SDRes v27.03 - CLEAR ??? FLAG
  2189.     AH = 0Eh
  2190.     DL = ADh
  2191. SeeAlso: AH=0Eh/DL=ADh,AH=0Eh/DL=AFh,INT 13/AX=A759h
  2192. --------v-210E--DLAF-------------------------
  2193. INT 21 U - Novell DOS 7 - SDRes v27.03 - SET ??? FLAG
  2194.     AH = 0Eh
  2195.     DL = AFh
  2196. SeeAlso: AH=0Eh/DL=ADh,AH=0Eh/DL=AEh,INT 13/AX=A759h
  2197. --------D-210F-------------------------------
  2198. INT 21 - DOS 1+ - OPEN FILE USING FCB
  2199.     AH = 0Fh
  2200.     DS:DX -> unopened File Control Block (see #0469)
  2201. Return: AL = status
  2202.         00h successful
  2203.         FFh file not found or access denied
  2204. Notes:    (DOS 3.1+) file opened for read/write in compatibility mode
  2205.     an unopened FCB has the drive, filename, and extension fields filled
  2206.       in and all other bytes cleared
  2207.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2208.     DR-DOS checks password attached with AX=4303h
  2209. BUG:    APPEND for DOS 3.3+ corrupts DX if the file is not found
  2210. SeeAlso: AH=10h,AH=16h,AH=3Dh,4303h
  2211.  
  2212. Format of File Control Block:
  2213. Offset    Size    Description    (Table 0469)
  2214.  -7    BYTE    extended FCB if FFh
  2215.  -6   5 BYTEs    reserved
  2216.  -1    BYTE    file attribute if extended FCB
  2217.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  2218.  01h  8 BYTEs    blank-padded file name
  2219.  09h  3 BYTEs    blank-padded file extension
  2220.  0Ch    WORD    current block number
  2221.  0Eh    WORD    logical record size
  2222.  10h    DWORD    file size
  2223.  14h    WORD    date of last write (see #0762 at AX=5700h)
  2224.  16h    WORD    time of last write (see #0761 at AX=5700h) (DOS 1.1+)
  2225.  18h  8 BYTEs    reserved (see #0470,#0471,#0472,#0473,#0474)
  2226.  20h    BYTE    record within current block
  2227.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  2228.           byte is omitted)
  2229. Note:    to use an extended FCB, you must specify the address of the FFh flag at
  2230.       offset -7, rather than the address of the drive number field
  2231.  
  2232. Format of FCB reserved field for DOS 1.0:
  2233. Offset    Size    Description    (Table 0470)
  2234.  16h    WORD    location in directory (if high byte = FFh, low byte is device
  2235.           ID)
  2236.  18h    WORD    number of first cluster in file
  2237.  1Ah    WORD    current absolute cluster number on disk
  2238.  1Ch    WORD    current relative cluster number within file
  2239.         (0 = first cluster of file, 1 = second cluster, etc.)
  2240.  1Eh    BYTE    dirty flag (00h = not dirty)
  2241.  1Fh    BYTE    unused
  2242.  
  2243. Format of FCB reserved field for DOS 1.10-1.25:
  2244. Offset    Size    Description    (Table 0471)
  2245.  18h    BYTE    bit 7: set if logical device
  2246.         bit 6: not dirty
  2247.         bits 5-0: disk number or logical device ID
  2248.  19h    WORD    starting cluster number on disk
  2249.  1Bh    WORD    current absolute cluster number on disk
  2250.  1Dh    WORD    current relative cluster number within file
  2251.  1Fh    BYTE    unused
  2252.  
  2253. Format of FCB reserved field for DOS 2.x:
  2254. Offset    Size    Description    (Table 0472)
  2255.  18h    BYTE    bit 7: set if logical device
  2256.         bit 6: set if open???
  2257.         bits 5-0: ???
  2258.  19h    WORD    starting cluster number on disk
  2259.  1Bh    WORD    ???
  2260.  1Dh    BYTE    ???
  2261.  1Eh    BYTE    ???
  2262.  1Fh    BYTE    ???
  2263.  
  2264. Format of FCB reserved field for DOS 3.x:
  2265. Offset    Size    Description    (Table 0473)
  2266.  18h    BYTE    number of system file table entry for file
  2267.  19h    BYTE    attributes
  2268.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  2269.               01 = SHARE.EXE not loaded, character device
  2270.               10 = SHARE.EXE loaded, remote file
  2271.               11 = SHARE.EXE loaded, local file or device
  2272.         bits 5-0: low six bits of device attribute word
  2273. ---SHARE.EXE loaded, local file---
  2274.  1Ah    WORD    starting cluster of file on disk
  2275.  1Ch    WORD    (DOS 3.x) offset within SHARE of sharing record
  2276.           (see #0733 at AH=52h)
  2277.  1Eh    BYTE    file attribute
  2278.  1Fh    BYTE    ???
  2279. ---SHARE.EXE loaded, remote file---
  2280.  1Ah    WORD    number of sector containing directory entry
  2281.  1Ch    WORD    relative cluster within file of last cluster accessed
  2282.  1Eh    BYTE    absolute cluster number of last cluster accessed
  2283.  1Fh    BYTE    ???
  2284. ---SHARE.EXE not loaded---
  2285.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  2286.  1Bh    WORD    starting cluster of file
  2287.  1Dh    WORD    number of sector containing directory entry
  2288.  1Fh    BYTE    number of directory entry within sector
  2289. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  2290.       of the device driver header, then the BYTE at 1Ah is overwritten.
  2291.  
  2292. Format of FCB reserved field for DOS 5.0:
  2293. Offset    Size    Description    (Table 0474)
  2294.  18h    BYTE    number of system file table entry for file
  2295.  19h    BYTE    attributes
  2296.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  2297.               01 = SHARE.EXE not loaded, character device
  2298.               10 = SHARE.EXE loaded, remote file
  2299.               11 = SHARE.EXE loaded, local file or device
  2300.         bits 5-0: low six bits of device attribute word
  2301. ---SHARE.EXE loaded, local file---
  2302.  1Ah    WORD    starting cluster of file on disk
  2303.  1Ch    WORD    unique sequence number of sharing record
  2304.  1Eh    BYTE    file attributes
  2305.  1Fh    BYTE    unused???
  2306. ---SHARE.EXE loaded, remote file---
  2307.  1Ah    WORD    network handle
  2308.  1Ch    DWORD    network ID
  2309. ---SHARE not loaded, local device---
  2310.  1Ah    DWORD    pointer to device driver header
  2311.  1Eh  2 BYTEs    unused???
  2312. ---SHARE not loaded, local file---
  2313.  1Ah    BYTE    extra info
  2314.         bit 7: read-only attribute from SFT
  2315.         bit 6: archive attribute from SFT
  2316.         bits 5-0: high bits of sector number
  2317.  1Bh    WORD    starting cluster of file
  2318.  1Dh    WORD    low word of sector number containing directory entry
  2319.  1Fh    BYTE    number of directory entry within sector
  2320. --------D-2110-------------------------------
  2321. INT 21 - DOS 1+ - CLOSE FILE USING FCB
  2322.     AH = 10h
  2323.     DS:DX -> File Control Block (see #0469)
  2324. Return: AL = status
  2325.         00h successful
  2326.         FFh failed
  2327. Notes:    a successful close forces all disk buffers used by the file to be
  2328.       written and the directory entry to be updated
  2329.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2330. SeeAlso: AH=0Fh,AH=16h,AH=3Eh
  2331. --------D-2111-------------------------------
  2332. INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
  2333.     AH = 11h
  2334.     DS:DX -> unopened FCB (see #0469), may contain '?' wildcards
  2335. Return: AL = status
  2336.         00h successful
  2337.         [DTA] unopened FCB for first matching file
  2338.         FFh no matching filename, or bad FCB
  2339. Notes:    the type of the returned FCB depends on whether the input FCB was a
  2340.       normal or an extended FCB
  2341.     the data returned in the DTA is actually the drive number (or extended
  2342.       FCB header and drive number) followed by the file's directory entry
  2343.       (see #0475); this format happens to be compatible with an unopened
  2344.       FCB
  2345.     for extended FCBs with search attribute 08h, the volume label (if any)
  2346.       will be returned even if the current directory is not the root dir.
  2347.     DOS 3+ also allows the '*' wildcard
  2348.     the search FCB must not be modified if AH=12h will be used to continue
  2349.       searching; DOS 3.3 has set the following parts of the FCB:
  2350.          0Ch    BYTE    ???
  2351.          0Dh    WORD    directory entry number of matching file
  2352.          0Fh    WORD    cluster number of current directory
  2353.          11h  4 BYTEs    ???
  2354.          15h    BYTE    drive number (1=A:)
  2355.     this function is used by many copy protection schemes to obtain the
  2356.       starting cluster of a file
  2357. SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
  2358.  
  2359. Format of DOS directory entry:
  2360. Offset    Size    Description    (Table 0475)
  2361.  00h  8 BYTEs    blank-padded filename
  2362.  08h  3 BYTEs    blank-padded file extension
  2363.  0Bh    BYTE    attributes
  2364.  0Ch 10 BYTEs    reserved
  2365.         used by DR-DOS to store file password
  2366.  16h    WORD    time of creation or last update (see #0761 at AX=5700h)
  2367.  18h    WORD    date of creation or last update (see #0762 at AX=5700h)
  2368.  1Ah    WORD    starting cluster number
  2369.  1Ch    DWORD    file size
  2370. --------D-2112-------------------------------
  2371. INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
  2372.     AH = 12h
  2373.     DS:DX -> unopened FCB (see #0469)
  2374. Return: AL = status
  2375.         00h successful
  2376.         [DTA] = unopened FCB
  2377.         FFh no more matching filenames
  2378. Note:    (see AH=11h)
  2379.     assumes that successful FindFirst executed on search FCB before call
  2380. SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
  2381. --------D-2113-------------------------------
  2382. INT 21 - DOS 1+ - DELETE FILE USING FCB
  2383.     AH = 13h
  2384.     DS:DX -> unopened FCB (see #0469), filename filled with template for
  2385.         deletion ('?' wildcards allowed)
  2386. Return: AL = status
  2387.         00h one or more files successfully deleted
  2388.         FFh no matching files or all were read-only or locked
  2389. Notes:    DOS 1.25+ deletes everything in the current directory (including
  2390.       subdirectories) and sets the first byte of the name to 00h (entry
  2391.       never used) instead of E5h if called on an extended FCB with
  2392.       filename '???????????' and bits 0-4 of the attribute set (bits 1 and
  2393.       2 for DOS 1.x).  This may have originally been an optimization to
  2394.       minimize directory searching after a mass deletion (DOS 1.25+ stop
  2395.       the directory search upon encountering a never-used entry), but can
  2396.       corrupt the filesystem under DOS 2+ because subdirectories are
  2397.       removed without deleting the files they contain.
  2398.     currently-open files should not be deleted
  2399.     MS-DOS allows deletion of read-only files with an extended FCB, whereas
  2400.       Novell NetWare does not
  2401. SeeAlso: AH=41h,INT 2F/AX=1113h
  2402. --------D-2114-------------------------------
  2403. INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE
  2404.     AH = 14h
  2405.     DS:DX -> opened FCB (see #0469)
  2406. Return: AL = status
  2407.         00h successful
  2408.         01h end of file (no data)
  2409.         02h segment wrap in DTA
  2410.         03h end of file, partial record read
  2411.     [DTA] = record read from file
  2412. Notes:    reads a record of the size specified in the FCB beginning at the
  2413.       current file position, then updates the current block and current
  2414.       record fields in the FCB
  2415.     if a partial record was read, it is zero-padded to the full size
  2416.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2417. SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh,INT 2F/AX=1108h
  2418. --------D-2115-------------------------------
  2419. INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE
  2420.     AH = 15h
  2421.     DS:DX -> opened FCB (see #0469)
  2422.     [DTA] = record to write
  2423. Return: AL = status
  2424.         00h successful
  2425.         01h disk full
  2426.         02h segment wrap in DTA
  2427. Notes:    writes a record of the size specified in the FCB beginning at the
  2428.       current file position, then updates the current block and current
  2429.       record fields in the FCB
  2430.     if less than a full sector is written, the data is placed in a DOS
  2431.       buffer to be written out at a later time
  2432.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2433. SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
  2434. --------D-2116-------------------------------
  2435. INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB
  2436.     AH = 16h
  2437.     DS:DX -> unopened FCB (see #0469), wildcards not allowed
  2438. Return: AL = status
  2439.         00h successful
  2440.         FFh directory full or file exists and is read-only or locked
  2441. Notes:    if file already exists, it is truncated to zero length
  2442.     if an extended FCB is used, the file is given the attribute in the
  2443.       FCB; this is how to create a volume label in the disk's root dir
  2444.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2445. SeeAlso: AH=0Fh,AH=10h,AH=3Ch
  2446. --------D-2117-------------------------------
  2447. INT 21 - DOS 1+ - RENAME FILE USING FCB
  2448.     AH = 17h
  2449.     DS:DX -> modified FCB (see also #0469)
  2450.         the old filename ('?' wildcards OK) is in the standard location
  2451.         while the new filename ('?' wildcards OK) is stored in the 11
  2452.         bytes beginning at offset 11h
  2453. Return: AL = status
  2454.         00h successfully renamed
  2455.         FFh no matching files,file is read-only, or new name already exists
  2456. Notes:    subdirectories may be renamed using an extended FCB with the
  2457.       appropriate attribute, as may volume labels
  2458.     DR-DOS checks password attached with AX=4303h before permitting rename
  2459. SeeAlso: AH=0Fh,AH=13h,AX=4303h,AH=56h,INT 2F/AX=1111h
  2460. --------D-2118-------------------------------
  2461. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  2462.     AH = 18h
  2463. Return: AL = 00h
  2464. Note:    corresponds to the CP/M BDOS function "get bit map of logged drives",
  2465.       which is meaningless under MS-DOS
  2466. SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h,INT 60/DI=0513h
  2467. --------D-2119-------------------------------
  2468. INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
  2469.     AH = 19h
  2470. Return: AL = drive (00h = A:, 01h = B:, etc)
  2471. Note:    Novell NetWare uses the fact that DOS 2.x COMMAND.COM issues this call
  2472.       from a particular location every time it starts a command to
  2473.       determine when to issue an automatic EOJ
  2474. SeeAlso: AH=0Eh,AH=47h,AH=BBh
  2475. --------D-211A-------------------------------
  2476. INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
  2477.     AH = 1Ah
  2478.     DS:DX -> Disk Transfer Area (DTA)
  2479. Notes:    the DTA is set to PSP:0080h when a program is started
  2480.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  2481. SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
  2482. --------D-211B-------------------------------
  2483. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE
  2484.     AH = 1Bh
  2485. Return: AL = sectors per cluster (allocation unit)
  2486.     CX = bytes per sector
  2487.     DX = total number of clusters
  2488.     DS:BX -> media ID byte (see #0476)
  2489. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  2490.       versions return a pointer to a copy of the FAT's ID byte
  2491. SeeAlso: AH=1Ch,AH=36h
  2492.  
  2493. (Table 0476)
  2494. Values for media ID byte:
  2495.  FFh    floppy, double-sided, 8 sectors per track (320K)
  2496.  FEh    floppy, single-sided, 8 sectors per track (160K)
  2497.  FDh    floppy, double-sided, 9 sectors per track (360K)
  2498.  FCh    floppy, single-sided, 9 sectors per track (180K)
  2499.  F9h    floppy, double-sided, 15 sectors per track (1.2M)
  2500.  F8h    hard disk
  2501.  F0h    other
  2502. --------D-211C-------------------------------
  2503. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE
  2504.     AH = 1Ch
  2505.     DL = drive (00h = default, 01h = A:, etc)
  2506. Return: AL = sectors per cluster (allocation unit), or FFh if invalid drive
  2507.     CX = bytes per sector
  2508.     DX = total number of clusters
  2509.     DS:BX -> media ID byte (see #0476)
  2510. Notes:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  2511.       versions return a pointer to a copy of the FAT's ID byte
  2512.     on a DBLSPACE drive, the total number of clusters is based on the
  2513.       estimated compression ratio
  2514. SeeAlso: AH=1Bh,AH=36h
  2515. --------D-211D-------------------------------
  2516. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  2517.     AH = 1Dh
  2518. Return: AL = 00h
  2519. Note:    corresponds to the CP/M BDOS function "get bit map of read-only
  2520.       drives", which is meaningless under MS-DOS
  2521. SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
  2522. --------D-211E-------------------------------
  2523. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  2524.     AH = 1Eh
  2525. Return: AL = 00h
  2526. Note:    corresponds to the CP/M BDOS function "set file attributes" which was
  2527.      meaningless under MS-DOS 1.x
  2528. SeeAlso: AH=18h,AH=1Dh,AH=20h
  2529. --------D-211F-------------------------------
  2530. INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE
  2531.     AH = 1Fh
  2532. Return: AL = status
  2533.         00h successful
  2534.         DS:BX -> Drive Parameter Block (DPB) (see #0477 for DOS 1.x,
  2535.             AH=32h for DOS 2+)
  2536.         FFh invalid drive
  2537. Note:    this call was undocumented prior to the release of DOS 5.0; however,
  2538.       only the DOS 4+ version of the DPB has been documented
  2539. SeeAlso: AH=32h
  2540.  
  2541. Format of DOS 1.1 and MS-DOS 1.25 drive parameter block:
  2542. Offset    Size    Description    (Table 0477)
  2543.  00h    BYTE    sequential device ID
  2544.  01h    BYTE    logical drive number (0=A:)
  2545.  02h    WORD    bytes per sector
  2546.  04h    BYTE    highest sector number within a cluster
  2547.  05h    BYTE    shift count to convert clusters into sectors
  2548.  06h    WORD    starting sector number of first FAT
  2549.  08h    BYTE    number of copies of FAT
  2550.  09h    WORD    number of directory entries
  2551.  0Bh    WORD    number of first data sector
  2552.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  2553.  0Fh    BYTE    sectors per FAT
  2554.  10h    WORD    starting sector of directory
  2555.  12h    WORD    address of allocation table
  2556. Note:    the DOS 1.0 table is the same except that the first and last fields
  2557.       are missing; see INT 21/AH=32h for the DOS 2+ version
  2558. --------D-2120-------------------------------
  2559. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  2560.     AH = 20h
  2561. Return: AL = 00h
  2562. Note:    corresponds to the CP/M BDOS function "get/set default user
  2563.       (sublibrary) number", which is meaningless under MS-DOS
  2564. SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
  2565. --------D-2121-------------------------------
  2566. INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE
  2567.     AH = 21h
  2568.     DS:DX -> opened FCB (see #0469)
  2569. Return: AL = status
  2570.         00h successful
  2571.         01h end of file, no data read
  2572.         02h segment wrap in DTA, no data read
  2573.         03h end of file, partial record read
  2574.     [DTA] = record read from file
  2575. Notes:    the record is read from the current file position as specified by the
  2576.       random record and record size fields of the FCB
  2577.     the file position is not updated after reading the record
  2578.     if a partial record is read, it is zero-padded to the full size
  2579.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2580. SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh
  2581. --------D-2122-------------------------------
  2582. INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE
  2583.     AH = 22h
  2584.     DS:DX -> opened FCB (see #0469)
  2585.     [DTA] = record to write
  2586. Return: AL = status
  2587.         00h successful
  2588.         01h disk full
  2589.         02h segment wrap in DTA
  2590. Notes:    the record is written to the current file position as specified by the
  2591.       random record and record size fields of the FCB
  2592.     the file position is not updated after writing the record
  2593.     if the record is located beyond the end of the file, the file is
  2594.       extended but the intervening data remains uninitialized
  2595.     if the record only partially fills a disk sector, it is copied to a
  2596.       DOS disk buffer to be written out to disk at a later time
  2597.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2598. SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
  2599. --------D-2123-------------------------------
  2600. INT 21 - DOS 1+ - GET FILE SIZE FOR FCB
  2601.     AH = 23h
  2602.     DS:DX -> unopened FCB (see #0469), wildcards not allowed
  2603. Return: AL = status
  2604.         00h successful (matching file found)
  2605.         FCB random record field filled with size in records, rounded up
  2606.         to next full record
  2607.         FFh failed (no matching file found)
  2608. Notes:    not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2609.     MS-DOS returns nonsense if the FCB record number field is set to a very
  2610.       large positive number, and status FFh if negative; DR-DOS returns the
  2611.       correct file size in both cases
  2612. BUG:    APPEND for DOS 3.3+ corrupts DX if the file is not found
  2613. SeeAlso: AH=42h
  2614. --------D-2124-------------------------------
  2615. INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
  2616.     AH = 24h
  2617.     DS:DX -> opened FCB (see #0469)
  2618. Notes:    computes the random record number corresponding to the current record
  2619.       number and record size, then stores the result in the FCB
  2620.     normally used when switching from sequential to random access
  2621.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2622. SeeAlso: AH=21h,AH=27h,AH=42h
  2623. --------D-2125-------------------------------
  2624. INT 21 - DOS 1+ - SET INTERRUPT VECTOR
  2625.     AH = 25h
  2626.     AL = interrupt number
  2627.     DS:DX -> new interrupt handler
  2628. Notes:    this function is preferred over direct modification of the interrupt
  2629.       vector table
  2630.     some DOS extenders place an API on this function, as it is not
  2631.       directly meaningful in protected mode
  2632.     under DR-DOS 5.0+, this function does not use any of the DOS-internal
  2633.       stacks and may thus be called at any time
  2634.     Novell NetWare (except the new DOS Requester) monitors the offset of
  2635.       any INT 24 set, and if equal to the value at startup, substitutes
  2636.       its own handler to allow handling of network errors; this introduces
  2637.       the potential bug that any program whose INT 24 handler offset
  2638.       happens to be the same as COMMAND.COM's will not have its INT 24
  2639.       handler installed
  2640. SeeAlso: AX=2501h,AH=35h
  2641. --------E-212501-----------------------------
  2642. INT 21 P - Phar Lap 386/DOS-Extender - RESET DOS EXTENDER DATA STRUCTURES
  2643.     AX = 2501h
  2644.     SS = application's original SS or DS (FlashTek X-32VM)
  2645. Return: CF clear if successful
  2646.     CF set on error
  2647.         caller is operating on X-32 stack (FlashTek X-32VM)
  2648. Notes:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  2649.       system calls.     Only available when directly using 386/DOS-Extender or
  2650.       a compatible DOS extender, or when using a product that was created
  2651.       using 386-DOS/Extender or a compatible
  2652.     this function is also supported by FlashTek X-32VM
  2653. SeeAlso: AH=30h"Phar Lap"
  2654. --------E-212502-----------------------------
  2655. INT 21 P - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  2656.     AX = 2502h
  2657.     CL = interrupt number
  2658. Return: CF clear
  2659.     ES:EBX = CS:EIP of protected-mode interrupt handler
  2660. Note:    this function is also supported by FlashTek X-32VM
  2661. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
  2662. --------E-212503-----------------------------
  2663. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  2664.     AX = 2503h
  2665.     CL = interrupt number
  2666. Return: CF clear
  2667.     EBX = CS:IP of real-mode interrupt handler
  2668. Note:    this function is also supported by FlashTek X-32VM
  2669. SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
  2670. --------E-212504-----------------------------
  2671. INT 21 P - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  2672.     AX = 2504h
  2673.     CL = interrupt number
  2674.     DS:EDX = CS:EIP of protected-mode interrupt handler
  2675. Return: CF clear
  2676. Note:    this function is also supported by FlashTek X-32VM
  2677. SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
  2678. --------E-212505-----------------------------
  2679. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  2680.     AX = 2505h
  2681.     CL = interrupt number
  2682.     EBX = CS:IP of real-mode interrupt handler
  2683. Return: CF clear
  2684. Note:    this function is also supported by FlashTek X-32VM
  2685. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
  2686. --------E-212506-----------------------------
  2687. INT 21 P - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CNTRL IN PR. MODE
  2688.     AX = 2506h
  2689.     CL = interrupt number
  2690.     DS:EDX = CS:EIP of protected-mode interrupt handler
  2691. Return: CF clear
  2692. Notes:    this function modifies both the real-mode low-memory interrupt
  2693.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  2694.     interrupts occurring in real mode are resignaled in protected mode
  2695.     this function is also supported by FlashTek X-32VM
  2696. --------E-212507-----------------------------
  2697. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  2698.     AX = 2507h
  2699.     CL = interrupt number
  2700.     DS:EDX = CS:EIP of protected-mode interrupt handler
  2701.     EBX = CS:IP of real-mode interrupt handler
  2702. Return: CF clear
  2703. Notes:    interrupts are disabled until both vectors have been modified
  2704.     this function is also supported by FlashTek X-32VM
  2705. SeeAlso: AX=2504h,AX=2505h
  2706. --------E-212508-----------------------------
  2707. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  2708.     AX = 2508h
  2709.     BX = segment selector
  2710. Return: CF clear if successful
  2711.         ECX = linear base address of segment
  2712.     CF set if invalid segment selector
  2713. Note:    this function is also supported by FlashTek X-32VM
  2714. SeeAlso: AX=2509h
  2715. --------E-212509-----------------------------
  2716. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  2717.     AX = 2509h
  2718.     EBX = linear address to convert
  2719. Return: CF clear if successful
  2720.         ECX = physical address (carry flag clear)
  2721.     CF set if linear address not mapped in page tables
  2722. SeeAlso: AX=2508h
  2723. --------E-212509-----------------------------
  2724. INT 21 P - FlashTek X-32VM - GET SYSTEM SEGMENTS AND SELECTORS
  2725.     AX = 2509h
  2726. Return: CF clear
  2727.     EAX high word = default DS
  2728.     AX = alias for 16-bit data segment
  2729.     BX = real mode code segment
  2730.     EDX high word = selector covering full 4GB address space
  2731.     DX = default SS
  2732.     ESI high word = PSP selector
  2733.     SI = environment selector
  2734. --------E-21250A-----------------------------
  2735. INT 21 P - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  2736.     AX = 250Ah
  2737.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  2738.          to modify
  2739.     EBX = physical base address of memory to map (multiple of 4K)
  2740.     ECX = number of physical 4K pages to map
  2741. Return: CF clear if successful
  2742.         EAX = 32-bit offset in segment of mapped memory
  2743.     CF set on error
  2744.         EAX = error code
  2745.         08h insufficient memory to create page tables
  2746.         09h invalid segment selector
  2747. SeeAlso: INT 31/AX=0800h
  2748. --------E-21250C-----------------------------
  2749. INT 21 P - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  2750.     AX = 250Ch
  2751. Return: CF clear
  2752.     AL = base interrupt vector for IRQ0-IRQ7
  2753.     AH = base interrupt vector for IRQ8-IRQ15
  2754.     BL = interrupt vector for BIOS print screen function (Phar Lap only)
  2755. Note:    this function is also supported by FlashTek X-32VM
  2756. SeeAlso: INT 31/AX=0400h,INT 67/AX=DE0Ah
  2757. --------E-21250D-----------------------------
  2758. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  2759.     AX = 250Dh
  2760. Return: CF clear
  2761.     EAX = CS:IP of real-mode callback procedure (see #0478) that will
  2762.           call through from real mode to a protected-mode routine
  2763.     EBX = 32-bit real-mode address of intermode call data buffer
  2764.     ECX = size in bytes of intermode call data buffer
  2765.     ES:EDX = protected-mode address of intermode call data buffer
  2766. Notes:    this function is also supported by FlashTek X-32VM
  2767.     X-32VM guarantees the intermode buffer to be at least 4 KB
  2768. SeeAlso: AX=250Eh
  2769.  
  2770. (Table 0478)
  2771. Call Phar Lap real-mode callback with:
  2772.     STACK:    DWORD    offset to protected-mode code
  2773.         WORD    placeholder for protected-mode CS
  2774.         DWORD    pointer to selector structure (see #0479)
  2775.             or 0000h:0000h for defaults
  2776.         var    parameters for protected-mode procedure
  2777. Return: via FAR return
  2778.  
  2779. Format of Phar Lap selector structure:
  2780. Offset    Size    Description    (Table 0479)
  2781.  00h    WORD    protected-mode GS selector
  2782.  02h    WORD    protected-mode FS selector
  2783.  04h    WORD    protected-mode ES selector
  2784.  06h    WORD    protected-mode DS selector
  2785. --------E-21250E-----------------------------
  2786. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  2787.     AX = 250Eh
  2788.     EBX = CS:IP of real-mode procedure to call
  2789.     ECX = number of two-byte words to copy from protected-mode stack
  2790.           to real-mode stack
  2791. Return: CF clear if successful
  2792.         all segment registers unchanged
  2793.         all general registers contain values set by real-mode procedure
  2794.         all other flags set as they were left by real-mode procedure
  2795.         stack unchanged
  2796.     CF set on error
  2797.         EAX = error code
  2798.         01h not enough real-mode stack space
  2799. Note:    this function is also supported by FlashTek X-32VM; under X-32VM, the
  2800.       call will fail if ECX > 0000003Fh
  2801. SeeAlso: AX=250Dh,AX=2510h,AH=E1h"OS/286",INT 31/AX=0301h
  2802. --------E-21250F-----------------------------
  2803. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  2804.     AX = 250Fh
  2805.     ES:EBX = 48-bit protected-mode address to convert
  2806.     ECX = 00000000h or length of data in bytes
  2807. Return: CF clear if successful (address < 1MB and contiguous)
  2808.         ECX = 32-bit real-mode MS-DOS address
  2809.     CF set on error (address >= 1MB or not contiguous)
  2810.         ECX = linear address
  2811. Note:    this function is also supported by FlashTek X-32VM
  2812. SeeAlso: AX=2510h
  2813. --------E-212510-----------------------------
  2814. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  2815.     AX = 2510h
  2816.     EBX = CS:IP of real-mode procedure to call
  2817.     ECX = number of two-byte words to copy to protected-mode stack to
  2818.           real-mode stack
  2819.     DS:EDX -> pointer to parameter block (see #0480)
  2820. Return: CF clear if successful
  2821.         all segment registers unchanged,
  2822.         EDX unchanged
  2823.         all other general registers contain values set by real-mode proc
  2824.         all other flags are set as they were left by real-mode procedure
  2825.         real-mode register values are returned in the parameter block
  2826.     CF set on error
  2827.         EAX = error code
  2828.         01h not enough real-mode stack space
  2829. Note:    unlike most of the preceding 25xxh functions, this one is not
  2830.       supported by FlashTek X-32VM
  2831. SeeAlso: AX=250Eh,AX=250Fh
  2832.  
  2833. Format of Phar Lap real-mode call parameter block:
  2834. Offset    Size    Description    (Table 0480)
  2835.  00h    WORD    real-mode DS value
  2836.  02h    WORD    real-mode ES value
  2837.  04h    WORD    real-mode FS value
  2838.  06h    WORD    real-mode GS value
  2839.  08h    DWORD    real-mode EAX value
  2840.  0Ch    DWORD    real-mode EBX value
  2841.  10h    DWORD    real-mode ECX value
  2842.  14h    DWORD    real-mode EDX value
  2843. --------E-212511-----------------------------
  2844. INT 21 P - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  2845.     AX = 2511h
  2846.     DS:EDX -> parameter block (see #0481)
  2847. Return: all segment registers unchanged
  2848.     EDX unchanged
  2849.     all other registers contain values set by the real-mode int handler
  2850.     the flags are set as they were left by the real-mode interrupt handler
  2851.     real-mode register values are returned in the parameter block
  2852. Note:    this function is also supported by FlashTek X-32VM
  2853. SeeAlso: AX=2503h,AX=2505h,AX=250Eh,AH=E3h"OS/286",INT 31/AX=0300h
  2854.  
  2855. Format of Phar Lap real-mode interrupt parameter block:
  2856. Offset    Size    Description    (Table 0481)
  2857.  00h    WORD    interrupt number
  2858.  02h    WORD    real-mode DS value
  2859.  04h    WORD    real-mode ES value
  2860.  06h    WORD    real-mode FS value
  2861.  08h    WORD    real-mode GS value
  2862.  0Ah    DWORD    real-mode EAX value
  2863.  0Eh    DWORD    real-mode EDX value
  2864. Note: all other real-mode values set from protected-mode registers
  2865. --------E-212512-----------------------------
  2866. INT 21 P - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  2867.     AX = 2512h
  2868.     DS:EDX -> pointer to ASCIZ program name
  2869.     ES:EBX -> pointer to parameter block (see #0483)
  2870.     ECX = size in bytes of LDT buffer
  2871. Return: CF clear if successful
  2872.         EAX = number of segment descriptors in LDT
  2873.     CF set on error
  2874.         EAX = error code (see #0482)
  2875. SeeAlso: AX=2517h
  2876.  
  2877. (Table 0482)
  2878. Values for Phar Lap error code:
  2879.  02h    file not found or path invalid
  2880.  05h    access denied
  2881.  08h    insufficient memory
  2882.  0Ah    environment invalid
  2883.  0Bh    invalid file format
  2884.  80h    LDT too small
  2885.  
  2886. Format of Phar Lap program load parameter block:
  2887. Offset    Size    Description    (Table 0483)
  2888. Input:
  2889.  00h    DWORD    32-bit offset of environment string
  2890.  04h    WORD    segment of environment string
  2891.  06h    DWORD    32-bit offset of command-tail string
  2892.  0Ah    WORD    segment of command-tail string
  2893.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  2894.  10h    WORD    segment of LDT buffer
  2895. Output:
  2896.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  2897.  14h    WORD    real/protected mode flag
  2898.         0000h  real mode
  2899.         0001h  protected mode
  2900.  16h    DWORD    initial EIP value
  2901.  1Ah    WORD    initial CS value
  2902.  1Ch    DWORD    initial ESP value
  2903.  20h    WORD    initial SS value
  2904.  22h    WORD    initial DS value
  2905.  24h    WORD    initial ES value
  2906.  26h    WORD    initial FS value
  2907.  28h    WORD    initial GS value
  2908. --------E-212513-----------------------------
  2909. INT 21 P - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  2910.     AX = 2513h
  2911.     BX = segment selector of descriptor in GDT or LDT
  2912.     CL = access-rights byte for alias descriptor
  2913.     CH = use-type bit (USE16 or USE32) for alias descriptor
  2914. Return: CF clear if successful
  2915.         AX = segment selector for created alias
  2916.     CF set on error
  2917.         EAX = error code
  2918.         08h insufficient memory (can't grow LDT)
  2919.         09h invalid segment selector in BX
  2920. --------E-212514-----------------------------
  2921. INT 21 P - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  2922.     AX = 2514h
  2923.     BX = segment selector of descriptor in GDT or LDT
  2924.     CL = new access-rights byte
  2925.     CH = new use-type bit (USE16 or USE32)
  2926. Return: CF clear if successful
  2927.     CF set on error
  2928.         EAX = error code
  2929.         09h invalid selector in BX
  2930. SeeAlso: AX=2515h,INT 31/AX=0009h
  2931. --------E-212515-----------------------------
  2932. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  2933.     AX = 2515h
  2934.     BX = segment selector of descriptor in GDT or LDT
  2935. Return: CF clear if successful
  2936.         CL = access-rights byte for segment
  2937.         CH = use-type bit (USE16 or USE32)
  2938.     ECX<16-31> destroyed
  2939.     CF set on error
  2940.         EAX = error code
  2941.         09h invalid segment selector in BX
  2942. SeeAlso: AX=2514h
  2943. --------E-212516-----------------------------
  2944. INT 21 P - Phar Lap 386/DOS-Extender v2.2+ - FREE ALL MEMORY OWNED BY LDT
  2945.     AX = 2516h
  2946. Return: CF clear
  2947. Note:    this function must be called from Ring 0 or the CS descriptor is freed
  2948. --------E-212517-----------------------------
  2949. INT 21 P - Phar Lap 386/DOS-Extender v2.1c+ - GET INFO ON DOS DATA BUFFER
  2950.     AX = 2517h
  2951. Return: CF clear
  2952.     ES:EBX -> data buffer (protected mode address)
  2953.     ECX -> data buffer (real mode address)
  2954.     EDX = size of data buffer in bytes
  2955. Note:    the data buffer's address changes after calls to AX=2512h and AX=252Ah
  2956. SeeAlso: AX=2512h,AX=252Ah,AX=2530h
  2957. --------E-212518-----------------------------
  2958. INT 21 P - Phar Lap 386/DOS-Extender 2.1c+ - SPECIFY HANDLER FOR MOVED SEGMENTS
  2959.     AX = 2518h
  2960.     ES:EBX -> function to call when a segment is moved
  2961. Return: CF clear
  2962.     ES:EBX -> previous handler
  2963. --------E-212519-----------------------------
  2964. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  2965.     AX = 2519h
  2966. Return: CF clear
  2967.     EAX = error code
  2968.         0000h  no error
  2969.         0001h  out of physical memory
  2970.         0002h  out of swap space (unable to grow swap file)
  2971.         0003h  out of LDT entries and unable to grow LDT
  2972.         0004h  unable to change extended memory allocation mark
  2973.         FFFFFFFFh    paging disabled
  2974. Note:    VMM is the Virtual Memory Manager option
  2975. --------E-21251A-----------------------------
  2976. INT 21 P - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  2977.     AX = 251Ah
  2978.     EDX = number of 4k pages to lock
  2979.     if BL = 00h
  2980.         ECX = linear address of first page to lock
  2981.     if BL = 01h
  2982.         ES:ECX -> pointer to first page to lock
  2983. Return: CF clear if successful
  2984.     CF set on error
  2985.         EAX = error code
  2986.         08h insufficient memory
  2987.         09h invalid address range
  2988. SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
  2989. --------E-21251B-----------------------------
  2990. INT 21 P - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  2991.     AX = 251Bh
  2992.     EDX = number of pages to unlock
  2993.     if BL = 00h
  2994.         ECX = linear address of first page to unlock
  2995.     if BL = 01h
  2996.         ES:ECX -> pointer to first page to unlock
  2997. Return: CF clear if successful
  2998.     CF set on error
  2999.         EAX = error code
  3000.         09h invalid address range
  3001. SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
  3002. --------E-21251C-----------------------------
  3003. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.1c+ - FREE PHYSICAL MEMORY PAGES
  3004.     AX = 251Ch
  3005.     BH = preservation flag (00h preserve contents, 01h discard contents)
  3006.     EDX = number of pages to free
  3007.     BL = address type
  3008.         00h linear address
  3009.         ECX = linear address of first page to be freed
  3010.         01h pointer
  3011.         ES:ECX -> first page to be freed
  3012. Return: CF clear if successful
  3013.     CF set on error
  3014.         EAX = error code
  3015.         08h memory error, swap space full, no VMM or DPMI
  3016.         09h invalid address
  3017. --------E-21251D-----------------------------
  3018. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - READ PAGE-TABLE ENTRY
  3019.     AX = 251Dh
  3020.     BL = address type
  3021.         00h linear address
  3022.         ECX = linear address of page table entry to read
  3023.         01h pointer
  3024.         ES:ECX -> page table entry to read
  3025. Return: CF clear if successful
  3026.         EAX = contents of page table entry
  3027.     CF set on error
  3028.         EAX = error code
  3029.         09h invalid address or NOPAGE option set
  3030.         78h invalid under DPMI
  3031. Note:    this function is obsolete; use AX=252Bh/BH=09h instead
  3032. SeeAlso: AX=251Eh,AX=252Bh/BH=09h,AX=EB00h,INT 31/AX=0506h
  3033. --------E-21251E-----------------------------
  3034. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - WRITE PAGE-TABLE ENTRY
  3035.     AX = 251Eh
  3036.     BL = address type
  3037.         00h linear address
  3038.         ECX = linear address of page table entry to read
  3039.         01h pointer
  3040.         ES:ECX -> page table entry to read
  3041.     EDX = new value for page table entry
  3042. Return: CF clear if successful
  3043.     CF set on error
  3044.         EAX = error code
  3045.         09h invalid address or NOPAGE option set
  3046.         82h not compatible with DPMI
  3047. Note:    this call is obsolete; use AX=252Bh/BH=0Ah instead
  3048. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah,INT 31/AX=0507h
  3049. --------E-21251F-----------------------------
  3050. INT 21 P - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  3051.     AX = 251Fh
  3052.     BL = address type
  3053.         00h linear address
  3054.         ECX = linear address of first page table entry
  3055.         EDX = linear address of second page table entry
  3056.         01h pointer
  3057.         ES:ECX -> first page table entry
  3058.         ES:EDX -> second page table entry
  3059. Return: CF clear if successful
  3060.     CF set on error
  3061.         EAX = error code
  3062.         09h invalid address or NOPAGE option set
  3063.         82h not compatible with DPMI
  3064. SeeAlso: AX=251Dh,AX=251Eh
  3065. --------E-212520-----------------------------
  3066. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  3067.     AX = 2520h
  3068.     DS:EDX -> pointer to buffer at least 100 bytes in size (see #0484)
  3069.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  3070. Return: carry flag clear
  3071.  
  3072. Format of Phar Lap VM statistics buffer:
  3073. Offset    Size    Description    (Table 0484)
  3074.  00h    DWORD    VM status
  3075.         0001h VM subsystem is present
  3076.         0000h VM not present
  3077.  04h    DWORD    "nconvpg" number of conventional memory pages available
  3078.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  3079.  0Ch    DWORD    "nextpg" total number of extended memory pages
  3080.  10h    DWORD    "extlim" extender memory pages limit
  3081.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  3082.  18h    DWORD    "alockpg" number of locked pages owned by application
  3083.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  3084.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  3085.  24h    DWORD    linear address of beginning of application address space
  3086.  28h    DWORD    linear address of end of application address space
  3087.  2Ch    DWORD    number of seconds since last time VM stats were reset
  3088.  30h    DWORD    number of page faults since last time
  3089.  34h    DWORD    number of pages written to swap file since last time
  3090.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  3091.  3Ch    DWORD    number of virtual pages allocated to the application
  3092.  40h    DWORD    size in pages of swap file
  3093.  44h    DWORD    number of system pages allocated with EMS calls
  3094.  48h    DWORD    minimum number of conventional memory pages
  3095.  4Ch    DWORD    maximum size in pages to which swap file can be increased
  3096.  50h    DWORD    "vmflags"
  3097.         bit 0 = 1 if page fault in progress
  3098. ---v4.0+ ---
  3099.  54h    DWORD    number of physical pages guaranteed to be free
  3100.  58h    DWORD    number of free physical pages currently available
  3101.  5Ch    DWORD    size in pages of largest free block of memory (including disk
  3102.           swap space)
  3103.  60h    DWORD    reserved
  3104. --------E-212521-----------------------------
  3105. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEM USAGE
  3106.     AX = 2521h
  3107.     EBX = max 4k pages of physical extended memory which program may use
  3108. Return: CF clear if successful
  3109.        EBX = maximum limit in pages
  3110.        ECX = minimum limit in pages
  3111.     CF set on error
  3112.         EAX = error code
  3113.         08h insufficient memory or -nopage switch used
  3114. SeeAlso: AX=2522h
  3115. --------E-212522-----------------------------
  3116. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY ALTERNATE PAGE-FAULT HANDLR
  3117.     AX = 2522h
  3118.     ES:EBX -> alternate handler for page faults
  3119. Return: CF clear
  3120.     ES:EBX -> previous page-fault handler
  3121. SeeAlso: AX=2523h
  3122. --------E-212523-----------------------------
  3123. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  3124.     AX = 2523h
  3125.     ???
  3126. Return: ???
  3127. Note:    this function takes a DWORD pointer and a DWORD pointer to a DWORD
  3128.       pointer as arguments
  3129. SeeAlso: AX=2522h
  3130. --------E-212524-----------------------------
  3131. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - INSTALL PAGE-REPLACEMENT HANDLERS
  3132.     AX = 2524h
  3133.     ???
  3134. Return: ???
  3135. Note:    this function takes three DWORD pointers and three DWORD pointers to
  3136.       DWORD pointers as arguments
  3137. --------E-212525-----------------------------
  3138. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENT'L MEM USAGE
  3139.     AX = 2525h
  3140.     EBX = limit in 4k pages of physical conventional memory which program
  3141.           may use
  3142. Return: CF clear if successful
  3143.         EBX = maximum limit in pages
  3144.         ECX = minimum limit in pages
  3145.     CF set on error
  3146.         EAX = error code
  3147.         08h insufficient memory or -nopage switch used
  3148. SeeAlso: AX=2521h
  3149. --------E-212526-----------------------------
  3150. INT 21 P - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  3151.     AX = 2526h
  3152.     ???
  3153. Return: ???
  3154. Notes:    details are not yet available
  3155.     this function takes a pointer to the configuration buffer (see #0485)
  3156.       and a poitner to a BYTE as arguments
  3157.  
  3158. Format of Phar Lap configuration buffer:
  3159. Offset    Size    Description    (Table 0485)
  3160.  00h    DWORD    flags 1 (see #0486)
  3161.  04h    DWORD    flags 2 (unused through v5.0)
  3162.  08h    DWORD    flags 3 (unused through v5.0)
  3163.  0Ch    DWORD    386|DOS-Extender major version
  3164.  10h    DWORD    386|DOS-Extender minor version
  3165.  14h    DWORD    first letter of text after minor version number in version str
  3166.  18h    DWORD    beta flag (00h normal release, 01h beta release)
  3167.  1Ch    DWORD    processor (3 = 386, 4 = 486)
  3168.  20h    DWORD    coprocessor (4 = none, 6 = 287, 7 = 387/486)
  3169.  24h    DWORD    Weitek coprocessor flag (0 = none, 1 = present)
  3170.  28h    DWORD    machine type (0 = IBM PC compatible, 1 = NEC 9800 series)
  3171.  2Ch    DWORD    machine class
  3172.         IBM: bus type (0=ISA, 1=MCA, 2=XT, 3=EISA)
  3173.         NEC: 0=normal mode, 1=high-res mode
  3174.  30h    DWORD    VCPI flag (0 = none, 1 = present)
  3175.  34h    DWORD    -WEITEK/-1167 switch (0 = AUTO, 1 = ON, 2 = OFF)
  3176.  38h    DWORD    -MINREAL setting
  3177.  3Ch    DWORD    -MAXREAL setting
  3178.  40h    DWORD    -MINIBUF setting
  3179.  44h    DWORD    -MAXIBUF setting
  3180.  48h    DWORD    size in bytes of DOS call data buffer
  3181.  4Ch    DWORD    number of interrupt stacks (-NISTACK)
  3182.  50h    DWORD    interrupt stack size (-ISTKSIZE)
  3183.  54h    DWORD    -REALBREAK setting
  3184.  58h    DWORD    -CALLBUFS
  3185.  5Ch    DWORD    -HWIVEC
  3186.  60h    DWORD    -PRIVEC
  3187.  64h    DWORD    -INTMAP
  3188.  68h    DWORD    -PRIMAP
  3189.  6Ch    DWORD    VCPI: master 8259 interrupt vector base (IRQ0 mapping)
  3190.  70h    DWORD    VCPI: slave 8259 interrupt vector base (IRQ8 mapping)
  3191.  74h    DWORD    BIOS print screen interrupt vector (0 if NEC)
  3192.  78h    DWORD    -EXTLOW setting
  3193.  7Ch    DWORD    -EXTHIGH setting
  3194.  80h    DWORD    lowest physical extended-memory address allocatable
  3195.  84h    DWORD    highest physical extended-memory address allocatable + 1
  3196.  88h    DWORD    special memory's physical base address (00000000h if none)
  3197.  8Ch    DWORD    special memory size in bytes (00000000h if none)
  3198.  90h    DWORD    -MAXVCPIMEM setting
  3199.  94h    DWORD    -VSCAN
  3200.  98h    DWORD    -SWAPCHK (0 = OFF, 1 = ON, 2 = FORCE, 3 = MAX)
  3201.  9Ch    DWORD    -CODESIZE setting
  3202.  A0h    DWORD    minimum swap file size (-MINSWFSIZE)
  3203.  A4h    DWORD    maximum swap fiel size (-MAXSWFSIZE)
  3204.  A8h    DWORD    page replacement policy (0 = LFU, 1 = NUR)
  3205.  ACh    DWORD    number of GDT entries (-NGDTENT)
  3206.  B0h    DWORD    number of LDT entries (-NLDTENT)
  3207.  B4h    DWORD    program's privilege level (0-3)
  3208. ---386|DOS-Extender v3.0+ ---
  3209.  B8h    DWORD    -LOCKSTACK setting
  3210.  BCh    DWORD    -MAXEXTMEM
  3211.  C0h    DWORD    -MAXXMSMEM
  3212.  C4h    DWORD    -MAXPGMMEM
  3213.  C8h    DWORD    -DATATHRESHOLD
  3214.  CCh    DWORD    virtual memory manager flag (0 = not present, 1 = present)
  3215.  D0h    DWORD    Cyrix coprocessor flag (0 = no Cyrix EMC387, 1 = present)
  3216.  D4h    DWORD    -CYRIX setting (0 = AUTO, 1 = ON, 2 = OFF)
  3217.  D8h    DWORD    DPMI flag (0 = not present, 1 = present)
  3218.  DCh    DWORD    DPMI major version
  3219.  E0h    DWORD    DPMI minor version
  3220.  E4h    DWORD    DPMI capabilities flags (see #0487)
  3221.  E8h    DWORD    VCPI major version
  3222.  ECh    DWORD    VCPI minor version
  3223.  F0h    WORD    VCPI: IRQ0-7 physical base interrupt vector
  3224.  F2h    WORD    VCPI: IRQ8-15 physical base interrupt vector
  3225.  F4h    DWORD    XMS flag (0 = none, 1 = present)
  3226.  F8h    DWORD    XMS major version
  3227.  FCh    DWORD    XMS minor version
  3228. 100h    WORD    application's CS selector
  3229. 102h    WORD    application's DS selector
  3230. 104h    WORD    application's PSP selector
  3231. 106h    WORD    application's environment selector
  3232. 108h    WORD    selector mapping entire first megabyte
  3233. 10Ah    WORD    selector mapping text video memory
  3234. 10Ch    WORD    selector mapping video memory (text for IBM, graphics for NEC)
  3235. 10Eh    WORD    selector mapping Weitek address space, 0000h if not present
  3236. 110h    WORD    selector mapping Cyrix EMC387 address space, 0000h if none
  3237. 112h    WORD    reserved (0)
  3238. 114h    DWORD    real-mode FAR entry point to call to switch to protected mode
  3239.           with no saved context
  3240. 118h    DWORD    size of LDT in bytes
  3241. ---386|DOS-Extender v5.0+ ---
  3242. 11Ch    DWORD    Windows flag (0 = not present, 1 = Windows present)
  3243. 120h    DWORD    Windows major version
  3244. 124h    DWORD    Windows minor version
  3245. 128h    DWORD    Windows mode (0 = real/standard, 1 = enhanced)
  3246. 12Ch    DWORD    OS/2 flag (0 = not present, 1 = OS/2 present)
  3247. 130h    DWORD    OS/2 major version
  3248. 134h    DWORD    OS/2 minor version
  3249. 138h 50 DWORDs    reserved (0)
  3250.  
  3251. Bitfields for flags 1:
  3252. Bit(s)    Description    (Table 0486)
  3253.  0    -NOPAGE specified
  3254.  1    -A20 specified
  3255.  2    -VDISK specified
  3256.  3    -XT specified
  3257.  4    -AT specified
  3258.  5    -MCA specified
  3259.  6    -EISA specified
  3260.  7    -NORMRES specified (NEC only)
  3261.  8    -HIGHRES specified (NEC only)
  3262.  9    set if -SWFGROW1ST, clear if -NOSWFGROW1ST
  3263.  10    -NOVM specified
  3264.  11    -SAVEREGS specified
  3265.  12    unused (clear)
  3266.  13    -NOVCPI specified
  3267.  14    -NOMUL specified
  3268.  15    -NOBMCHK specified
  3269.  16    -NOSPCLMEM or -NOBIM
  3270.  17    -NOPGEXP specified
  3271.  18    -SWAPDEFDISK specified
  3272. ---v3.0+ ---
  3273.  19    -SAVEINTS specified
  3274.  20    -NOLOAD specified
  3275.  21    -PAGELOG specified
  3276.  22    -OPENDENY specified
  3277.  23    -ERRATA17 specified
  3278. ---v4.1+ ---
  3279.  24    -NESTDPMI specified
  3280.  25    -NONESTDPMI specified
  3281.  26    -NODPMI specified
  3282.  27    -NOPCDWEITEK specified
  3283. ---v4.2+ ---
  3284.  28    -WININT21 specified
  3285.  
  3286. Bitfields for DPMI capabilities flags:
  3287. Bit(s)    Description    (Table 0487)
  3288.  0    paging supported
  3289.  1    physical device mapping
  3290.  2    conventional memory mapping
  3291.  3    exceptions restartable
  3292. --------E-212527-----------------------------
  3293. INT 21 P - Phar Lap 386/DOS-Extender VMM - EN/DISABLE STATE SAVE ON INTERRUPTS
  3294.     AX = 2527h
  3295.     EBX = new status (00h disabled, 01h enabled)
  3296. Return: CF clear
  3297.     EBX = previous state save flag
  3298. SeeAlso: AX=2528h
  3299. --------E-212528-----------------------------
  3300. INT 21 P - Phar Lap 386/DOS-Extender VMM - READ REGISTERS AFTER CTRL-C INT
  3301.     AX = 2528h
  3302.     DS:EBX -> buffer for registers (see #0488)
  3303. Return: CF clear if successful
  3304.         DS:EBX buffer filled
  3305.     CF set on error
  3306.         EAX = error code
  3307.         83h interrupt state save not enabled
  3308.         84h no active interrupt
  3309. SeeAlso: AX=2527h
  3310.  
  3311. Format of Phar Lap buffer for registers:
  3312. Offset    Size    Description    (Table 0488)
  3313.  00h  8 BYTEs    unused
  3314.  08h  4    DWORDs    EAX,EBX,ECX,EDX
  3315.  18h  4 DWORDs    ESI,EDI,EBP,ESP
  3316.  28h  6 WORDs    CS,DS,SS,ES,FS,GS
  3317.  34h    DWORD    EIP
  3318.  38h    DWORD    EFLAGS
  3319. --------E-212529-----------------------------
  3320. INT 21 P - Phar Lap 386/DOS-Extender - LOAD FLAT MODEL .EXP or .REX FILE
  3321.     AX = 2529h
  3322.     ???
  3323. Return: ES:EBX -> parameter block (see #0489)
  3324.     ???
  3325. Note:    details not available at this time
  3326. SeeAlso: AX=252Ah
  3327.  
  3328. Format of Phar Lap program load parameter block:
  3329. Offset    Size    Description    (Table 0489)
  3330.  00h    DWORD    initial EIP
  3331.  04h    WORD    initial CS
  3332.  06h    DWORD    initial ESP
  3333.  0Ah    WORD    initial SS
  3334.  0Ch  4 WORDs    initial DS, ES, FS, GS
  3335.  14h    DWORD    minimum size in bytes of program segment
  3336.  18h    DWORD    bytes of additional memory allocated
  3337.  1Ch    DWORD    flags
  3338.         bit 0: child linked with -UNPRIVILEGED
  3339.         ---v6.0+ ---
  3340.         bit 1: child is PE file instead of .EXP
  3341.         bit 2: loaded file is a DLL
  3342.         bits 3-31 reserved
  3343. ---v6.0+ ---
  3344.  20h    DWORD    module handles (PE files only)
  3345.  24h  7 DWORDs    reserved (0)
  3346. --------E-21252A-----------------------------
  3347. INT 21 P - Phar Lap 386/DOS-Extender VMM - NEW LOAD PROGRAM FOR DEBUG
  3348.     AX = 252Ah
  3349.     DS:EDX -> ASCIZ program name
  3350.     ES:EBX -> parameter block (see #0483)
  3351.     ECX = size of LDT buffer in bytes
  3352.     ESI = bit flags
  3353.         bit 0: allow demand paging rather than loading entire program
  3354.         bit 1: demand page from swap file rather than from .EXP
  3355. Return: CF clear if successful
  3356.         EAX = VMM handle or FFFFFFFFh if none
  3357.         ECX = number of descriptors in LDT buffer
  3358.     CF set on error
  3359.         EAX = error code
  3360.         02h file error
  3361.             EBX = file error code (see #0490)
  3362.             ECX = DOS error code if EBX=1,2,3, or 8
  3363.         08h insufficient memory
  3364.             EBX = memory error code (see #0491)
  3365.         80h LDT buffer too small
  3366.         87h called twice without intervening call to AX=2531h
  3367. SeeAlso: AX=2512h,AX=2517h,AX=2529h,AX=2531h
  3368.  
  3369. (Table 0490)
  3370. Values for Phar Lap file error code:
  3371.  01h    DOS open error
  3372.  02h    DOS seek error
  3373.  03h    DOS read error
  3374.  04h    not an .EXP or .REX file
  3375.  05h    invalid file format
  3376.  06h    -OFFSET is not a multiple of 64K
  3377.  07h    -NOPAGE incompatible with -REALBREAK/-OFFSET
  3378.  08h    DOS error loading .EXE file
  3379.  
  3380. (Table 0491)
  3381. Values for Phar Lap memory error code:
  3382.  01h    out of physical memory
  3383.  02h    out of swap space
  3384.  04h    unable to change extended memory allocation
  3385.  05h    -MAXPGMMEM exceeded
  3386.  06h    insufficient low memory to REALBREAK value
  3387.  07h    insufficient low memory for PSP and environment
  3388. --------E-21252BBL00-------------------------
  3389. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE UNMAPPED PAGES
  3390.     AX = 252Bh
  3391.     BL = 00h
  3392.     ???
  3393. Return: ???
  3394. --------E-21252BBL01-------------------------
  3395. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE ALLOCATED PAGES
  3396.     AX = 252Bh
  3397.     BL = 01h
  3398.     ???
  3399. Return: ???
  3400. --------E-21252BBL02-------------------------
  3401. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE PHYSICAL DEVICE PAGES
  3402.     AX = 252Bh
  3403.     BL = 02h
  3404.     ???
  3405. Return: ???
  3406. --------E-21252BBL03-------------------------
  3407. INT 21 Pu - Phar Lap 386/DOS-Extender - MAP DATA FILE
  3408.     AX = 252Bh
  3409.     BL = 03h
  3410.     ???
  3411. Return: ???
  3412. SeeAlso: AX=252Bh/BL=0Bh
  3413. --------E-21252BBL04-------------------------
  3414. INT 21 Pu - Phar Lap 386/DOS-Extender - GET PAGE TYPES
  3415.     AX = 252Bh
  3416.     BL = 04h
  3417.     ???
  3418. Return: ???
  3419. Note:    returns one word per page
  3420. SeeAlso: #0492
  3421.  
  3422. Bitfields for Phar Lap page information:
  3423. Bit(s)    Description    (Table 0492)
  3424.  7    mapped to read/write data file
  3425.  6    mapped to read-only data file
  3426.  5    swapped to disk
  3427.  4    locked
  3428.  3-0    page type
  3429.     0 unmapped
  3430.     1 allocated
  3431.     2 physical device page
  3432. --------E-21252B-----------------------------
  3433. INT 21 P - Phar Lap 386/DOS-Extender - VIRTUAL MEMORY MANAGEMENT - PAGE LOCKING
  3434.     AX = 252Bh
  3435.     BH = function
  3436.         05h lock pages
  3437.         06h unlock pages
  3438.     BL = address type
  3439.         00h linear address
  3440.         ECX = linear start address of memory region
  3441.         01h segmented address
  3442.         ES:ECX -> start of memory region
  3443.     EDX = size of memory region in bytes
  3444. Return: CF clear if successful
  3445.     CF set on error
  3446. Note:    this function is also supported by FlashTek X-32VM; if X-32 is not
  3447.       using virtual memory, this function always succeeds
  3448. --------E-21252B-----------------------------
  3449. INT 21 Pu - Phar Lap 386/DOS-Extender - FREE PHYSICAL PAGES
  3450.     AX = 252Bh
  3451.     BL = function (07h,08h)
  3452.     ???
  3453. Return: ???
  3454. --------E-21252BBH09-------------------------
  3455. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - GET PAGETABLE ENTRY/PAGE TABLE INFO
  3456.     AX = 252Bh
  3457.     BH = 09h
  3458.     BL = subfunction
  3459.         00h get page table entry by linear address
  3460.         ECX = linear address for which to get page table entry
  3461.         01h get page table entry by logical address
  3462.         ES:ECX = address for which to get page table entry
  3463. Return: CF clear if successful
  3464.         EAX = page table entry
  3465.         EBX = additional page table information
  3466.     CF set on error
  3467.         EAX = error code
  3468.         0009h invalid address
  3469.         0082h running under DPMI
  3470. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah
  3471. --------E-21252BBH0A-------------------------
  3472. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - SET PAGETABLE ENTRY/PAGE TABLE INFO
  3473.     AX = 252Bh
  3474.     BH = 0Ah
  3475.     BL = subfunction
  3476.         00h set page table entry for linear address
  3477.         ECX = linear address for which to get page table entry
  3478.         01h set page table entry for logical address
  3479.         ES:ECX = address for which to get page table entry
  3480.     ESI = page table entry
  3481.     EDI = additional page table information
  3482. Return: CF clear if successful
  3483.     CF set on error
  3484.         EAX = error code
  3485.         0009h invalid address
  3486.         0082h running under DPMI
  3487. SeeAlso: AX=252Bh/BH=09h
  3488. --------E-21252BBH0B-------------------------
  3489. INT 21 P - Phar Lap 386/DOS-Extender v4.1+ - MAP DATA FILE AT FILE OFFSET
  3490.     AX = 252Bh
  3491.     BH = 0Bh
  3492.     BL = subfunction
  3493.         00h by linear address
  3494.         ECX = linear address at which to map data file
  3495.         01h by logical address
  3496.         ES:ECX = logical address at which to map data file
  3497.     EDX = number of bytes to map
  3498.     DS:ESI -> mapping structure (see #0493)
  3499.     DS:EDI -> ASCIZ filename
  3500. Return: CF clear if successful
  3501.     CF set on error
  3502.         EAX = error code
  3503.         0002h file error
  3504.             ECX = phase (01h opening file, 02h seeking, 03h reading)
  3505.             EDX = error code returned by DOS
  3506.         0009h invalid address
  3507.         0081h invalid parameters or 386|VMM not present
  3508.         0086h all 386|VMM file handles already in use
  3509. SeeAlso: AX=252Bh/BH=03h,AX=252Bh/BH=09h
  3510.  
  3511. Format of Phar Lap mapping structure:
  3512. Offset    Size    Description    (Table 0493)
  3513.  00h    DWORD    starting file offset to be mapped
  3514.  04h    DWORD    DOS file access and sharing modes (see #0522 at INT 21/AH=3Dh)
  3515. --------E-21252C-----------------------------
  3516. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ADD UNMAPPED PAGES AT END OF SEGMENT
  3517.     AX = 252Ch
  3518.     BX = segment selector
  3519.     ECX = number of 4K pages to add
  3520. Return: CF clear if successful
  3521.         EAX = offset in segment of beginning of unmapped pages
  3522.     CF set on error
  3523.         EAX = error code
  3524.         08h insufficent memory
  3525.         09h invalid selector
  3526.         82h not supported by current DPMI
  3527. --------E-21252D-----------------------------
  3528. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - CLOSE VMM FILE HANDLE
  3529.     AX = 252Dh
  3530.     EBX = VMM file handle
  3531. Return: CF clear if successful
  3532.     CF set on error
  3533.         EAX = error code (81h invalid VMM handle)
  3534. --------E-21252E-----------------------------
  3535. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - GET/SET VMM PARAMETERS
  3536.     AX = 252Eh
  3537.     CL = direction (00h get parameters, 01h set parameters)
  3538.     DS:EBX -> parameter buffer (see #0494)
  3539. Return: CF clear if successful
  3540.     CF set on error
  3541.         EAX = error code (81h bad parameter value)
  3542.  
  3543. Format of Phar Lap VMM parameter buffer:
  3544. Offset    Size    Description    (Table 0494)
  3545.  00h    DWORD    flags
  3546.         bit 0: page fault logging enabled
  3547.         ---v5.0+ ---
  3548.         bit 1: swap extender to disk during DOS EXEC call
  3549.         bit 2: don't zero allocated memory
  3550.  04h    DWORD    scan period for page aging, in milliseconds
  3551.  08h    DWORD    maximum size (in bytes) to check on each page scan
  3552.  0Ch 52 BYTEs    unused
  3553. --------E-21252F-----------------------------
  3554. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - WRITE RECORD TO VMM PAGE LOG FILE
  3555.     AX = 252Fh
  3556.     DS:EBX -> data to be written
  3557.     CX = size of data in bytes
  3558. Return: CF clear if successful
  3559.     CF set on error
  3560.         EAX = error code (85h no page log file or not 386/VMM)
  3561. --------E-212530-----------------------------
  3562. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.3+ - SET SIZE OF BUFFER FOR DOS CALLS
  3563.     AX = 2530h
  3564.     ECX = size of data buffer in bytes (1024 to 65536)
  3565. Return: CF clear if successful
  3566.     CF set on error
  3567.         EAX = error code
  3568.         08h insufficient low memory
  3569.         81h invalid size
  3570. SeeAlso: AX=2517h
  3571. --------E-212531-----------------------------
  3572. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0 - READ/WRITE LDT DESCRIPTOR
  3573.     AX = 2531h
  3574.     BX = segment selector
  3575.     ECX = direction (00h read, 01h write)
  3576.     DS:EDX -> 8-byte buffer for descriptor contents
  3577. Return: CF clear if successful
  3578.     CF set on error
  3579.         EAX = error code
  3580.         81h invalid selector
  3581.         82h DPMI running, or not a code or data segment
  3582. --------E-212532-----------------------------
  3583. INT 21 P - Phar Lap 386/DOS-Extender - GET EXCEPTION HANDLER VECTOR
  3584.     AX = 2532h
  3585.     CL = exception number (00h-0Fh)
  3586. Return: CF clear if successful
  3587.         ES:EBX = CS:EIP of current exception handler
  3588.     CF set on error (CL > 0Fh)
  3589. Notes:    this call is also supported by the FlashTek X-32VM extender
  3590.     this function is incompatible with 386|VMM; use AX=2522h instead
  3591. SeeAlso: AX=2522h,AX=2533h
  3592. --------E-212533-----------------------------
  3593. INT 21 P - Phar Lap 386/DOS-Extender - SET EXCEPTION HANDLER VECTOR
  3594.     AX = 2533h
  3595.     CL = exception number (00h-0Fh)
  3596.     DS:EDX = CS:EIP of new exception handler
  3597. Return: CF clear if successful
  3598.     CF set on error (CL > 0Fh)
  3599. Notes:    this call is also supported by the FlashTek X-32VM extender
  3600.     this function is incompatible with 386|VMM; use AX=2522h instead
  3601. SeeAlso: AX=2522h,AX=2532h
  3602. --------E-212534-----------------------------
  3603. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - GET INTERRUPT FLAG
  3604.     AX = 2534h
  3605. Return: CF clear
  3606.     EAX = interrupt state (00h disabled, 01h enabled)
  3607. --------E-212535-----------------------------
  3608. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - READ/WRITE SYSTEM REGISTERS
  3609.     AX = 2535h
  3610.     EBX = direction (00h read registers, 01h write)
  3611.     DS:EDX -> system register record (see #0495)
  3612. Return: CF clear
  3613. Note:    this call is only available under MS Windows if PHARLAP.386 VDD is
  3614.       installed
  3615.  
  3616. Format of Phar Lap system register record:
  3617. Offset    Size    Description    (Table 0495)
  3618.  00h    DWORD    CR0
  3619.  04h  4 DWORDs    DR0,DR1,DR2,DR3
  3620.  14h  2 DWORDs    reserved
  3621.  1Ch  2 DWORDs    DR6,DR7
  3622.  24h  3 DWORDs    reserved
  3623. --------E-212536----------------------------
  3624. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0+ - MIN/MAX EXTENDED/CONV MEMORY USAGE
  3625.     AX = 2536h
  3626.     EBX = bit flags
  3627.         bit 0: modifying conventional memory rather than extended memory
  3628.         bit 1: setting maximum memory usage rather than minimum
  3629.     ECX = new limit in 4K pages
  3630. Return: CF clear if successful
  3631.         EAX = new limit
  3632.     CF set on error
  3633.         EAX = error code (08h memory error or -NOPAGE set)
  3634.         EBX = maximum limit in pages
  3635.         ECX = minimum limit in pages
  3636. --------E-212537----------------------------
  3637. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ALLOCATE DOS MEMORY ABOVE DOS BUFFER
  3638.     AX = 2537h
  3639.     BX = number of paragraphs to allocate
  3640. Return: CF clear if successful
  3641.         AX = real-mode segment of allocated block
  3642.     CF set on error
  3643.         AX = error code
  3644.         07h MS-DOS memory chain corrupted
  3645.         08h insufficient low memory
  3646.         BX = size in paragraphs of largest free block
  3647. SeeAlso: AH=48h
  3648. --------E-212538----------------------------
  3649. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - READ PROTMODE REGS AFTER SFTWARE INT
  3650.     AX = 2538h
  3651.     DS:EBX -> buffer for registers (see #0488)
  3652.     ECX = register record to retrieve
  3653.         00h first interrupt state
  3654.         01h next interrupt state
  3655.         EDX = handle for current interrupt state
  3656. Return: CF clear if successful
  3657.         DS:EBX buffer filled
  3658.         EDX = handle of current interrupt state
  3659.         ESI = number of interrupt which occurred
  3660.     CF set on error
  3661.         EAX = error code
  3662.         81h invalid handle in EDX
  3663.         83h register saving not enabled
  3664.         84h no more interrupt states
  3665. SeeAlso: AX=2527h,AX=2528h
  3666. --------E-212539----------------------------
  3667. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - GET OFFSET OF .EXP FILE HEADER
  3668.     AX = 2539h
  3669.     BX = MS-DOS file handle for open file
  3670. Return: CF clear if successful
  3671.         EAX = offset of .EXP header in file
  3672.     CF set on error
  3673.         EAX = error code (02h file error)
  3674.         EBX = file error code
  3675.         02h DOS error seeking
  3676.         03h DOS error reading
  3677.         04h invalid file type    
  3678.         05h invalid file format
  3679.         ECX = DOS error code if EBX=02h or 03h
  3680.     current file position in file modified
  3681. --------E-21253A----------------------------
  3682. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - INSTALL MOD. SEG FAILURE HANDLER
  3683.     AX = 253Ah
  3684.     ES:EBX -> function to be called when INT 21/AH=4Ah is about to return
  3685.         an error
  3686. Return: CF clear
  3687.     ES:EBX -> previous handler
  3688. SeeAlso: AH=4Ah
  3689. --------E-21253B----------------------------
  3690. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - JUMP TO REAL MODE CODE, NO CONTEXT
  3691.     AX = 253Bh
  3692.     DS:EBX -> buffer containing register contents (see #0488)
  3693. Return: never returns
  3694. SeeAlso: AX=2528h
  3695. --------E-21253C-----------------------------
  3696. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0+ - SHRINK 386|VMM SWAP FILE
  3697.     AX = 253Ch
  3698. Return: CF clear
  3699.     EAX = old size of swap file in bytes
  3700.     EBX = new size of swap file in bytes
  3701. --------E-21253D-----------------------------
  3702. INT 21 P - Phar Lap 386/DOS-Extender v4.0+ - READ/WRITE IDT DESCRIPTOR
  3703.     AX = 253Dh
  3704.     BL = interrupt number
  3705.     ECX = direction (0 = read, 1 = write)
  3706.     DS:EDX -> 8-byte buffer for descriptor
  3707. Return: CF clear if successful
  3708.         DS:EDX filled if reading
  3709.     CF set on error
  3710.         EAX = error code (0082h if running under DPMI)
  3711. Desc:    access hardware-level IDT rather than the internal 386/DOS-Extender
  3712.       shadow IDT
  3713. Notes:    this call will always fail under DPMI because it is not possible to
  3714.       access the IDT
  3715.     the descriptor is not checked when writing
  3716.     this call can normally be used only by programs running in ring 0
  3717.       because the processor does not allow an interrupt to be vectored to
  3718.       a less privileged ring
  3719. --------E-21253F-----------------------------
  3720. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - ALLOCATE LDT DESCRIPTOR
  3721.     AX = 253Fh
  3722.     BX = LDT descriptor to allocate (0000h for any)
  3723.     ???
  3724. Return: ???
  3725. --------E-212540-----------------------------
  3726. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - FORCE ALIAS OF SEGMENT
  3727.     AX = 2540h
  3728.     ???
  3729. Return: ???
  3730. --------E-212544-----------------------------
  3731. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - FREE DLL
  3732.     AX = 2544h
  3733.     ???
  3734. Return: ???
  3735. --------E-212545-----------------------------
  3736. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - GET/SET PROCEDURE ADDRESS
  3737.     AX = 2545h
  3738.     ECX = direction (00h get, 01h set)
  3739.     ???
  3740. Return: ???
  3741. --------E-212546-----------------------------
  3742. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - GET MODULE HANDLE
  3743.     AX = 2546h
  3744.     ???
  3745. Return: ???
  3746. --------E-2125C0-----------------------------
  3747. INT 21 P - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  3748.     AX = 25C0h
  3749.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  3750. Return: CF clear if successful
  3751.         AX = real-mode paragraph address of memory
  3752.     CF set on error
  3753.         AX = error code
  3754.         07h MS-DOS memory control blocks destroyed
  3755.         08h insufficient memory
  3756.         BX = size in paragraphs of largest available memory block
  3757. SeeAlso: AX=25C1h,AX=25C2h
  3758. --------E-2125C1-----------------------------
  3759. INT 21 P - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  3760.     AX = 25C1h
  3761.     CX = real-mode paragraph address of memory block to free
  3762. Return: CF clear if successful
  3763.         EAX destroyed
  3764.     CF set on error
  3765.         AX = error code
  3766.         07h MS-DOS memory control blocks destroyed
  3767.         09h invalid memory block address in CX
  3768. SeeAlso: AX=25C0h,AX=25C2h
  3769. --------E-2125C2-----------------------------
  3770. INT 21 P - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  3771.     AX = 25C2h
  3772.     BX = new requested block size in paragraphs
  3773.     CX = real-mode paragraph address of memory block to modify
  3774. Return: CF clear if successful
  3775.         EAX destroyed
  3776.     CF set on error
  3777.         AX = error code
  3778.         07h MS-DOS memory control blocks destroyed
  3779.         08h insufficient memory
  3780.         09h invalid memory block address in CX
  3781.         BX = size in paragraphs of largest available memory block
  3782. SeeAlso: AX=25C0h,AX=25C1h
  3783. --------E-2125C3-----------------------------
  3784. INT 21 P - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  3785.     AX = 25C3h
  3786.     ES:EBX -> pointer to parameter block (see #0497)
  3787.     DS:EDX -> pointer to ASCIZ program filename
  3788. Return: CF clear if successful
  3789.         all registers unchanged
  3790.     CF set on error
  3791.         EAX = error code (see #0496)
  3792.  
  3793. (Table 0496)
  3794. Values for Phar Lap error code:
  3795.  01h    function code in AL is invalid ???
  3796.  02h    file not found or path invalid
  3797.  05h    access denied
  3798.  08h    insufficient memory to load program
  3799.  0Ah    environment invalid
  3800.  0Bh    invalid file format
  3801.  
  3802. Format of parameter block:
  3803. Offset    Size    Description    (Table 0497)
  3804.  00h    DWORD    32-bit offset of environment string
  3805.  04h    WORD    segment selector of environment string
  3806.  06h    DWORD    32-bit offset of command-tail string
  3807.  0Ah    WORD    segment selector of command-tail string
  3808. --------D-2126-------------------------------
  3809. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  3810.     AH = 26h
  3811.     DX = segment at which to create PSP (see #0498)
  3812. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  3813.       taken from interrupt vector table; the parent PSP field is set to 0
  3814.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  3815.       copy
  3816. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  3817.  
  3818. Format of Program Segment Prefix (PSP):
  3819. Offset    Size    Description    (Table 0498)
  3820.  00h  2 BYTEs    INT 20 instruction for CP/M CALL 0 program termination
  3821.         the CDh 20h here is often used as a signature for a valid PSP
  3822.  02h    WORD    segment of first byte beyond memory allocated to program
  3823.  04h    BYTE    unused filler
  3824.  05h    BYTE    CP/M CALL 5 service request (FAR CALL to absolute 000C0h)
  3825.         BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
  3826.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  3827.  08h  2 BYTEs    remainder of FAR JMP at 05h
  3828.  0Ah    DWORD    stored INT 22 termination address
  3829.  0Eh    DWORD    stored INT 23 control-Break handler address
  3830.  12h    DWORD    DOS 1.1+ stored INT 24 critical error handler address
  3831.  16h    WORD    segment of parent PSP
  3832.  18h 20 BYTEs    DOS 2+ Job File Table, one byte per file handle, FFh = closed
  3833.  2Ch    WORD    DOS 2+ segment of environment for process (see #0499)
  3834.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  3835.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  3836.  34h    DWORD    DOS 3+ pointer to JFT (default PSP:0018h)
  3837.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  3838.         used by SHARE in DOS 3.3
  3839.  3Ch    BYTE    apparently unused by MS-DOS versions <= 6.00
  3840.         (Novell DOS 7) interim console flag (see AX=6301h)
  3841.  3Dh    BYTE    (APPEND) TrueName flag (see INT 2F/AX=B711h)
  3842.  3Eh    BYTE    (Novell NetWare) flag: next byte initialized if CEh
  3843.  3Fh    BYTE    (Novell NetWare) Novell task number if previous byte is CEh
  3844.  40h  2 BYTEs    DOS 5+ version to return on INT 21/AH=30h
  3845.  42h    WORD    (MSWindows3) selector of next PSP (PDB) in linked list
  3846.         Windows keeps a linked list of Windows programs only
  3847.  44h  4 BYTEs    unused by DOS versions <= 6.00
  3848.  48h    BYTE    (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
  3849.  49h  7 BYTEs    unused by DOS versions <= 6.00
  3850.  50h  3 BYTEs    DOS 2+ service request (INT 21/RETF instructions)
  3851.  53h  2 BYTEs    unused in DOS versions <= 6.00
  3852.  55h  7 BYTEs    unused in DOS versions <= 6.00; can be used to make first FCB
  3853.           into an extended FCB
  3854.  5Ch 16 BYTEs    first default FCB, filled in from first commandline argument
  3855.         overwrites second FCB if opened
  3856.  6Ch 16 BYTEs    second default FCB, filled in from second commandline argument
  3857.           overwrites beginning of commandline if opened
  3858.  7Ch  4 BYTEs    unused
  3859.  80h 128 BYTEs    commandline / default DTA
  3860.         command tail is BYTE for length of tail, N BYTEs for the tail,
  3861.           followed by a BYTE containing 0Dh
  3862. Notes:    in DOS v3+, the limit on simultaneously open files may be increased by
  3863.       allocating memory for a new open file table, filling it with FFh,
  3864.       copying the first 20 bytes from the default table, and adjusting the
  3865.       pointer and count at 34h and 32h.  However, DOS will only copy the
  3866.       first 20 file handles into a child PSP (including the one created on
  3867.       EXEC).
  3868.     network redirectors based on the original MS-Net implementation use
  3869.       values of 80h-FEh in the open file table to indicate remote files;
  3870.       Novell NetWare also uses values from FEh down to 80h or one more than
  3871.       FILES= (whichever is greater) to indicate remote files
  3872.     MS-DOS 5.00 incorrectly fills the FCB fields when loading a program
  3873.       high; the first FCB is empty and the second contains the first
  3874.       parameter
  3875.     some DOS extenders place protected-mode values in various PSP fields
  3876.       such as the "parent" field, which can confuse PSP walkers.  Always
  3877.       check either for the CDh 20h signature or that the suspected PSP is
  3878.       at the beginning of a memory block which owns itself (the preceding
  3879.       paragraph should be a valid MCB with "owner" the same as the
  3880.       suspected PSP).
  3881.     Novell NetWare updates the fields at offsets 3Eh and 3Fh without
  3882.       checking that a legal PSP segment is current; see AH=50h for further
  3883.       discussion
  3884.  
  3885. Format of environment block:
  3886. Offset    Size    Description    (Table 0499)
  3887.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  3888.       N BYTEs    second environment variable, ASCIZ string
  3889.     ...
  3890.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  3891.     BYTE    00h
  3892. ---DOS 3+---
  3893.     WORD    number of strings following environment (normally 1)
  3894.       N BYTEs    ASCIZ full pathname of program owning this environment
  3895.         other strings may follow
  3896. --------D-2127-------------------------------
  3897. INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE
  3898.     AH = 27h
  3899.     CX = number of records to read
  3900.     DS:DX -> opened FCB (see #0469)
  3901. Return: AL = status
  3902.         00h successful, all records read
  3903.         01h end of file, no data read
  3904.         02h segment wrap in DTA, no data read
  3905.         03h end of file, partial read
  3906.     [DTA] = records read from file
  3907.     CX = number of records read (return AL = 00h or 03h)
  3908. Notes:    read begins at current file position as specified in FCB; the file
  3909.       position is updated after reading
  3910.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3911. SeeAlso: AH=21h,AH=28h,AH=3Fh
  3912. --------D-2128-------------------------------
  3913. INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE
  3914.     AH = 28h
  3915.     CX = number of records to write
  3916.     DS:DX -> opened FCB (see #0469)
  3917.     [DTA] = records to write
  3918. Return: AL = status
  3919.         00h successful
  3920.         01h disk full or file read-only
  3921.         02h segment wrap in DTA
  3922.     CX = number of records written
  3923. Notes:    write begins at current file position as specified in FCB; the file
  3924.       position is updated after writing
  3925.     if CX = 0000h on entry, no data is written; instead the file size is
  3926.       adjusted to be the same as the file position specified by the random
  3927.       record and record size fields of the FCB
  3928.     if the data to be written is less than a disk sector, it is copied into
  3929.       a DOS disk buffer, to be written out to disk at a later time
  3930.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3931. SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h
  3932. --------D-2129-------------------------------
  3933. INT 21 - DOS 1+ - PARSE FILENAME INTO FCB
  3934.     AH = 29h
  3935.     AL = parsing options (see #0500)
  3936.     DS:SI -> filename string (both '*' and '?' wildcards OK)
  3937.     ES:DI -> buffer for unopened FCB
  3938. Return: AL = result code
  3939.         00h successful parse, no wildcards encountered
  3940.         01h successful parse, wildcards present
  3941.         FFh failed (invalid drive specifier)
  3942.     DS:SI -> first unparsed character
  3943.     ES:DI buffer filled with unopened FCB (see #0469)
  3944. Notes:    asterisks expanded to question marks in the FCB
  3945.     all processing stops when a filename terminator is encountered
  3946.     cannot be used with filespecs which include a path (DOS 2+)
  3947.     Novell NetWare monitors the result code since an 'invalid drive' may
  3948.       signal an attempt to reconnect a network drive; if there are no
  3949.       connections to the specified drive, NetWare attempts to build a
  3950.       connection and map the drive to the SYS:LOGIN directory
  3951. SeeAlso: AH=0Fh,AH=16h,AH=26h
  3952.  
  3953. Bitfields for parsing options:
  3954. Bit(s)    Description    (Table 0500)
  3955.  0    skip leading separators
  3956.  1    use existing drive number in FCB if no drive is specified, instead of
  3957.       setting field to zero
  3958.  2    use existing filename in FCB if no base name is specified, instead of
  3959.       filling field with blanks
  3960.  3    use existing extension in FCB if no extension is specified, instead of
  3961.       filling field with blanks
  3962.  4-7    reserved (0)
  3963. --------D-212A-------------------------------
  3964. INT 21 - DOS 1+ - GET SYSTEM DATE
  3965.     AH = 2Ah
  3966. Return: CX = year (1980-2099)
  3967.     DH = month
  3968.     DL = day
  3969. ---DOS 1.10+---
  3970.     AL = day of week (00h=Sunday)
  3971. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h,INT 1A/AH=04h,INT 2F/AX=120Dh
  3972. --------D-212B-------------------------------
  3973. INT 21 - DOS 1+ - SET SYSTEM DATE
  3974.     AH = 2Bh
  3975.     CX = year (1980-2099)
  3976.     DH = month
  3977.     DL = day
  3978. Return: AL = status
  3979.         00h successful
  3980.         FFh invalid date, system date unchanged
  3981. Note:    DOS 3.3+ also sets CMOS clock
  3982. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  3983. --------E-212B--CX4149-----------------------
  3984. INT 21 - AI Architects - ??? - INSTALLATION CHECK
  3985.     AH = 2Bh
  3986.     CX = 4149h ('AI')
  3987.     DX = 413Fh ('A?')
  3988. Return: AL <> FFh if installed
  3989. Note:    Borland's TKERNEL makes this call
  3990. --------c-212B--CX4358-----------------------
  3991. INT 21 - Super PC-Kwik v3.20+ - INSTALLATION CHECK
  3992.     AH = 2Bh
  3993.     CX = 4358h ('CX')
  3994. Return: AL = FFh if PC-Kwik/PC-Cache not installed
  3995.     AL = 00h if installed
  3996.         CF clear
  3997.         CX = 6378h ('cx')
  3998.         BX = ???
  3999.         DX = version (DH = major version, DL = binary minor version)
  4000. Note:    PC Tools PC-Cache v5.x and Qualitas Qcache v4.00 are OEM versions of
  4001.       Super PC-Kwik, and thus support this call (PC-Cache 5.1 corresponds
  4002.       to PC-Kwik v3.20)
  4003. SeeAlso: INT 13/AH=A0h,INT 13/AH=B0h,INT 16/AX=FFA5h/CX=1111h
  4004. Index:    PC-Cache;installation check|Qualitas Qcache;installation check
  4005. Index:    installation check;PC-Cache 5.x|installation check;Qualitas Qcache
  4006. --------Q-212B--CX4445-----------------------
  4007. INT 21 - DESQview - INSTALLATION CHECK
  4008.     AH = 2Bh
  4009.     CX = 4445h ('DE')
  4010.     DX = 5351h ('SQ')
  4011.     AL = subfunction (DV v2.00+)
  4012.         01h get version
  4013.         Return: BX = version (BH = major, BL = minor)
  4014.         Note: early copies of v2.00 return 0002h
  4015.         02h get shadow buffer info, and start shadowing
  4016.         Return: BH = rows in shadow buffer
  4017.             BL = columns in shadow buffer
  4018.             DX = segment of shadow buffer
  4019.         04h get shadow buffer info
  4020.         Return: BH = rows in shadow buffer
  4021.             BL = columns in shadow buffer
  4022.             DX = segment of shadow buffer
  4023.         05h stop shadowing
  4024. Return: AL = FFh if DESQview not installed
  4025. Notes:    in DESQview v1.x, there were no subfunctions; this call only identified
  4026.       whether or not DESQview was loaded.  DESQview v2.52 performs function
  4027.       01h for all subfunction requests 0Ch and higher and appears to ignore
  4028.       all lower-numbered functions not listed here.
  4029.     DESQview versions 2.50-2.52 are part of DESQview/X v1.0x; version 2.53
  4030.       is part of DESQview/X v1.10; and version 2.63 is part of DESQview/X
  4031.       v2.00.
  4032. BUG:    subfunction 05h does not appear to work correctly in DESQview 2.52
  4033. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
  4034. --------U-212B--CX454C-----------------------
  4035. INT 21 - ELRES v1.1 - INSTALLATION CHECK
  4036.     AH = 2Bh
  4037.     CX = 454Ch ('EL')
  4038.     DX = 5253h ('RS')
  4039. Return: ES:BX -> ELRES history structure (see #0501)
  4040.     DX = DABEh (signature, DAve BEnnett)
  4041. Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
  4042.       Bennett which stores recent errorlevel values, allows them to be
  4043.       retrieved for use in batch files, and can place them in an
  4044.       environment variable
  4045. SeeAlso: AH=4Bh"ELRES",AH=4Dh
  4046.  
  4047. Format of ELRES history structure:
  4048. Offset    Size    Description    (Table 0501)
  4049.  00h    WORD    number of return codes which can be stored by following buffer
  4050.  02h    WORD    current position in buffer (treated as a ring)
  4051.  04h  N BYTEs    ELRES buffer
  4052. --------m-212B01CX444D-----------------------
  4053. INT 21 - Quarterdeck DOS-UP.SYS v2.00 - INSTALLATION CHECK
  4054.     AX = 2B01h
  4055.     CX = 444Dh ('DM')
  4056.     DX = 4158h ('AX')
  4057. Return: AX = 0000h if installed
  4058.         BX = version??? (0002h)
  4059.         CX = 4845h ('HE')
  4060.         DX = 5245h ('RE')
  4061.         ES = DOS-UP driver segment
  4062. --------T-212B01CX5441-----------------------
  4063. INT 21 - TAME v2.10+ - INSTALLATION CHECK
  4064.     AX = 2B01h
  4065.     CX = 5441h ('TA')
  4066.     DX = 4D45h ('ME')
  4067. ---v2.60---
  4068.     BH = ???
  4069.         00h skip ???, else do
  4070. Return: AL = 02h if installed
  4071.     ES:DX -> data area in TAME-RES (see #0502,#0506,#0507)
  4072. Program: TAME is a shareware program by David G. Thomas which gives up CPU time
  4073.       to other partitions under a multitasker when the current partition's
  4074.       program incessantly polls the keyboard or system time
  4075.  
  4076. Format of TAME 2.10-2.20 data area:
  4077. Offset    Size    Description    (Table 0502)
  4078.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  4079.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  4080.  02h    DWORD    number of task switches
  4081.  06h    DWORD    number of keyboard polls
  4082.  0Ah    DWORD    number of time polls
  4083.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  4084.  12h    DWORD    original INT 10h
  4085.  16h    DWORD    original INT 14h
  4086.  1Ah    DWORD    original INT 15h
  4087.  1Eh    DWORD    original INT 16h
  4088.  22h    DWORD    original INT 17h
  4089.  26h    DWORD    original INT 21h
  4090.  2Ah    DWORD    original INT 28h
  4091.  2Eh    WORD    offset of TAME INT 10h handler
  4092.  30h    WORD    offset of TAME INT 14h handler
  4093.  32h    WORD    offset of TAME INT 15h handler
  4094.  34h    WORD    offset of TAME INT 16h handler
  4095.  36h    WORD    offset of TAME INT 17h handler
  4096.  38h    WORD    offset of TAME INT 21h handler
  4097.  3Ah    WORD    offset of TAME INT 28h handler
  4098.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  4099.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  4100.  40h    WORD    number of polls remaining before next task switch
  4101.  42h    WORD    /KEYIDLE value
  4102.  44h    BYTE    interrupts already grabbed by TAME (see #0503)
  4103.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  4104.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  4105.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  4106.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  4107.  49h    BYTE    window or task number for this task
  4108.  4Ah    BYTE    multitasker type (see #0504)
  4109.  4Bh    BYTE    type of task switching selected
  4110.         bit 0: DESQview???
  4111.         bit 1: DoubleDOS???
  4112.         bit 2: TopView???
  4113.         bit 3: KeySwitch
  4114.         bit 4: HLT instruction
  4115.  4Ch    BYTE    ???
  4116.  4Dh    BYTE    flags
  4117.         bit 1: /FREQ instead of /MAX
  4118.  4Eh    BYTE    /FG: value
  4119.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  4120.  50h    BYTE    ???
  4121.  
  4122. Bitfields for interrupts already grabbed by TAME:
  4123. Bit(s)    Description    (Table 0503)
  4124.  0    INT 10h
  4125.  1    INT 14h
  4126.  2    INT 15h
  4127.  3    INT 16h
  4128.  4    INT 17h
  4129.  5    INT 21h
  4130.  6    INT 28h
  4131.  
  4132. (Table 0504)
  4133. Values for multitasker type:
  4134.  01h    DESQview
  4135.  02h    DoubleDOS
  4136.  03h    TopView
  4137.  04h    OmniView
  4138.  05h    VM/386
  4139.  
  4140. Bitfields for type of task switching selected:
  4141. Bit(s)    Description    (Table 0505)
  4142.  0    DESQview
  4143.  1    DoubleDOS
  4144.  2    TopView
  4145.  3    OmniView
  4146.  4    KeySwitch
  4147.  5    HLT instruction
  4148.  
  4149. Format of TAME 2.30 data area:
  4150. Offset    Size    Description    (Table 0506)
  4151.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  4152.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  4153.  02h    DWORD    number of task switches
  4154.  06h    DWORD    number of keyboard polls
  4155.  0Ah    DWORD    number of time polls
  4156.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  4157.  12h    DWORD    time of last /CLEAR or TAME-RES load
  4158.  16h    DWORD    time yielded
  4159.  1Ah    DWORD    time spent polling
  4160.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  4161.  22h    DWORD    original INT 10h
  4162.  26h    DWORD    original INT 14h
  4163.  2Ah    DWORD    original INT 15h
  4164.  2Eh    DWORD    original INT 16h
  4165.  32h    DWORD    original INT 17h
  4166.  36h    DWORD    original INT 21h
  4167.  3Ah    DWORD    original INT 28h
  4168.  3Eh    WORD    offset of TAME INT 10h handler
  4169.  40h    WORD    offset of TAME INT 14h handler
  4170.  42h    WORD    offset of TAME INT 15h handler
  4171.  44h    WORD    offset of TAME INT 16h handler
  4172.  46h    WORD    offset of TAME INT 17h handler
  4173.  48h    WORD    offset of TAME INT 21h handler
  4174.  4Ah    WORD    offset of TAME INT 28h handler
  4175.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  4176.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  4177.  50h    WORD    number of polls remaining before next task switch
  4178.  52h    WORD    /KEYIDLE value
  4179.  54h    WORD    /FG: value
  4180.  56h    WORD    task switches left until next FGONLY DESQview API call
  4181.  58h    WORD    multitasker version
  4182.  5Ah    WORD    virtual screen segment
  4183.  5Ch    BYTE    interrupts already grabbed by TAME (see #0503)
  4184.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  4185.  5Eh    BYTE    window or task number for this task
  4186.  5Fh    BYTE    multitasker type (see #0504)
  4187.  60h    BYTE    type of task switching selected (bit flags) (see #0505)
  4188.  61h    BYTE    watch_DOS
  4189.  62h    BYTE    bit flags
  4190.         bit 0: TAME enabled
  4191.         bit 1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick)
  4192.         bit 2: /TIMEPOLL
  4193.         bit 3: /KEYPOLL
  4194.         bit 4: inhibit timer
  4195.         bit 5: enable status monitoring
  4196.  63h    BYTE    old status
  4197.  64h    WORD    signature DA34h
  4198.  
  4199. Format of TAME 2.60 data area:
  4200. Offset    Size    Description    (Table 0507)
  4201.  00h    BYTE    data structure minor version number (02h in TAME 2.60)
  4202.  01h    BYTE    data structure major version number (0Bh in TAME 2.60)
  4203.  02h    DWORD    number of task switches
  4204.  06h    DWORD    number of keyboard polls
  4205.  0Ah    DWORD    number of time polls
  4206.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  4207.  12h    DWORD    time of last /CLEAR or TAME-RES load
  4208.  16h    DWORD    time yielded
  4209.  1Ah    DWORD    time spent polling
  4210.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  4211.  22h  4 BYTEs    ???
  4212.  26h    DWORD    original INT 10h
  4213.  2Ah    DWORD    original INT 14h
  4214.  2Eh    DWORD    original INT 15h
  4215.  32h    DWORD    original INT 16h
  4216.  36h    DWORD    original INT 17h
  4217.  3Ah    DWORD    original INT 21h
  4218.  3Eh    DWORD    original INT 28h
  4219.  42h    WORD    offset of TAME INT 10h handler
  4220.  44h    WORD    offset of TAME INT 14h handler
  4221.  46h    WORD    offset of TAME INT 15h handler
  4222.  48h    WORD    offset of TAME INT 16h handler
  4223.  4Ah    WORD    offset of TAME INT 17h handler
  4224.  4Ch    WORD    offset of TAME INT 21h handler
  4225.  4Eh    WORD    offset of TAME INT 28h handler
  4226.  50h    WORD    X in /max:X,Y or /freq:X,Y
  4227.  52h    WORD    Y in /max:X,Y or /freq:X,Y
  4228.  54h    WORD    number of polls remaining before next task switch
  4229.  56h    WORD    /KEYIDLE value
  4230.  58h  4 BYTEs    ???
  4231.  5Ch    WORD    X in /boost:X,Y
  4232.  5Eh    WORD    Y in /boost:X,Y
  4233.  60h    WORD    /FG: value
  4234.  62h    WORD    task switches remaining until next FGONLY DESQview API call
  4235.  64h    WORD    multitasker version ???
  4236.  66h    WORD    virtual screen segment
  4237.  68h    BYTE    interrupts already grabbed by TAME (see #0503)
  4238.  69h    BYTE    flags for interrupts which may be acted on (same bits as above)
  4239.  6Ah    BYTE    window or task number for this task
  4240.  6Bh    BYTE    multitasker type (see #0504)
  4241.  6Ch    BYTE    type of task switching selected (bit flags) (see #0505)
  4242.  6Dh    BYTE    watch_DOS
  4243.  6Eh    BYTE    bit flags
  4244.         bit 0: TAME enabled
  4245.         bit 1: /FREQ instead of /MAX (counts in 50h and 52h per tick)
  4246.         bit 2: /TIMEPOLL
  4247.         bit 3: /KEYPOLL
  4248.         bit 4: inhibit timer
  4249.         bit 5: enable status monitoring
  4250.  6Fh    BYTE    old status
  4251.  70h    WORD    signature DA34h
  4252. --------v-212B16CX0643-----------------------
  4253. INT 21 - VIRUS - "Maltese Amoeba" - INSTALLATION CHECK
  4254.     AX = 2B16h
  4255.     CX = 0643h
  4256. Return: AX = 1603h if installed
  4257. --------R-212B44BX4D41-----------------------
  4258. INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK
  4259.     AX = 2B44h ('D')
  4260.     BX = 4D41h ('MA')
  4261.     CX = 7063h ('pc')
  4262.     DX = 4157h ('AW')
  4263. Return: AX = resident program
  4264.         4F4Bh ('OK') if large host resident
  4265.         6F6Bh ('ok') if small host resident
  4266.     CX:DX -> API entry point (see #0508)
  4267. SeeAlso: INT 16/AH=79h
  4268.  
  4269. (Table 0508)
  4270. Call pcANYWHERE API entry point with:
  4271.     AX = 0000h get pcANYWHERE IV version
  4272.         DS:SI -> BYTE buffer for host type code
  4273.         Return: AH = version number
  4274.             AL = revision number
  4275.             DS:DI buffer byte filled with
  4276.             00h full-featured host
  4277.             01h limited-feature LAN host
  4278.             other API may not be supported
  4279.     AX = 0001h initialize operation
  4280.         DS:SI -> initialization request structure (see #0509)
  4281.         Return: AX = function status (see #0512)
  4282.     AX = 0002h get status
  4283.         Return: AH = current operating mode (see init req structure below)
  4284.             AL = current connection status (see #0511)
  4285.     AX = 0003h suspend remote screen updates
  4286.         Return: AX = function status (see #0512)
  4287.     AX = 0004h resume screen updates
  4288.         Return: AX = function status (see #0512)
  4289.     AX = 0005h end current remote access session
  4290.         DS:SI -> termination request structure (see #0510)
  4291.         Return: AX = function status (see #0512)
  4292.     AX = 0006h remove pcANYWHERE IV from memory
  4293.         Return: AX = status (see #0512)
  4294.     AX = 8000h read data from communications channel
  4295.         DS:BX -> buffer
  4296.         CX = buffer size
  4297.         Return: AX >= number of characters read/available
  4298.             AX < 0 on error
  4299.     AX = 8001h write data to communications channel
  4300.         DS:BX -> buffer
  4301.         CX = buffer size
  4302.         Return: AX >= number of characters written
  4303.             AX < 0 on error
  4304.     AX = 8002h get connection status
  4305.         Return: AX = status
  4306.             > 0000h if connection active
  4307.             = 0000h if connection lost
  4308.             < 0000h on error
  4309.  
  4310. Format of pcANYWHERE initialization request structure:
  4311. Offset    Size    Description    (Table 0509)
  4312.  00h    BYTE    operating mode
  4313.         00h wait for a call
  4314.         01h hot key activates
  4315.         02h incoming call activates
  4316.         03h initiate a call
  4317.  01h  3 BYTEs    user ID to append to config file names
  4318.  04h    WORD    DS-relative pointer to path for config files
  4319.  06h    WORD    DS-relative pointer to path for program files
  4320.  
  4321. Format of pcANYWHERE termination request structure:
  4322. Offset    Size    Description    (Table 0510)
  4323.  00h    BYTE    operating mode after termination
  4324.         00h wait for a call
  4325.         01h hot key activates
  4326.         02h incoming call activates
  4327.         80h use current mode
  4328.         FFh remove from memory
  4329.  
  4330. Bitfields for current connection status:
  4331. Bit(s)    Description    (Table 0511)
  4332.  0    a physical connection is active
  4333.  1    remove screen updating is active
  4334.  2    connection checking is active
  4335.  3    hot key detection is active
  4336.  4    background file transfer is active
  4337.  
  4338. (Table 0512)
  4339. Values for pcANYWHERE function status:
  4340.  0000h    function completed successfully
  4341.  FFD1h    unable to release interrupt vectors
  4342.  FFD2h    unable to release allocated memory
  4343.  FFF2h    unable to establish a connection when operating mode is
  4344.       "Initiate a call"
  4345.  FFF3h    modem configuration is invalid (corrupt config)
  4346.  FFF4h    modem initialization failed (no modem response)
  4347.  FFF5h    the communications device could not be initialized
  4348.  FFF6h    the host operator aborted the function
  4349.  FFF7h    the communications driver type specified in the configuration file is
  4350.       different than the one loaded when pcANYWHERE IV was started
  4351.  FFF9h    the configuration file is invalid
  4352.  FFFAh    the configuration file could not be found
  4353.  FFFBh    no session is active
  4354.  FFFCh    a remote access session is active
  4355.  FFFDh    the specified operating mode is invalid
  4356. ----------212B--CX6269-----------------------
  4357. INT 21 - WDTSR.COM - INSTALLATION CHECK
  4358.     AH = 2Bh
  4359.     CX = 6269h ('bi')
  4360.     DX = 742Dh ('t-')
  4361. Return: AL = FFh if not installed
  4362.     AL = 77h ('w') if WDTSR is installed
  4363.         CX = 6174h ('at')
  4364.         DX = 6368h ('ch')
  4365.         ES = resident code segment
  4366.         ES:DI -> identification and configuration data
  4367. Program: WDTSR is a driver for the bitWatch watchdog hardware by bit-design
  4368.       GmbH
  4369. SeeAlso: AH=2Bh/CX=6269h/DX=7449h,INT 14/AH=14h"FOSSIL",INT 15/AH=C3h
  4370. --------S-212B--CX6269-----------------------
  4371. INT 21 - bitFOSS - INSTALLATION CHECK
  4372.     AH = 2Bh
  4373.     CX = 6269h ('bi')
  4374.     DX = 7446h ('tF')
  4375. Return: AL = FFh if not installed
  4376.     AL = 4Fh ('O') if bitFOSS is installed
  4377.         CX = 5353h ('SS')
  4378.         DX = 494Ch ('IL')
  4379.         ES = resident code segment
  4380.         ES:DI -> identification data
  4381. Program: bitFOSS is a revision 5 FOSSIL driver
  4382. SeeAlso: AH=2Bh/CX=6269h/DX=7449h,INT 11/AH=BCh
  4383. --------S-212B--CX6269-----------------------
  4384. INT 21 - bitFOSSI - INSTALLATION CHECK
  4385.     AH = 2Bh
  4386.     CX = 6269h ('bi')
  4387.     DX = 7449h ('tI')
  4388. Return: AL = FFh if not installed
  4389.     AL = 53h ('S') if bitFOSSI is installed
  4390.         CX = 444Eh ('DN')
  4391.         DX = 2D46h ('-F')
  4392.         ES = resident code segment
  4393.         ES:DI -> identification data
  4394. Program: bitFOSSI is a revision 5 FOSSIL driver for ???'s ISDN board
  4395. SeeAlso: AH=2Bh/CX=6269h/DX=7446h,INT 11/AH=BCh
  4396. --------D-212C-------------------------------
  4397. INT 21 - DOS 1+ - GET SYSTEM TIME
  4398.     AH = 2Ch
  4399. Return: CH = hour
  4400.     CL = minute
  4401.     DH = second
  4402.     DL = 1/100 seconds
  4403. Note:    on most systems, the resolution of the system clock is about 5/100sec,
  4404.       so returned times generally do not increment by 1
  4405.     on some systems, DL may always return 00h
  4406. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
  4407. SeeAlso: INT 2F/AX=120Dh
  4408. --------v-212C00-----------------------------
  4409. INT 21 - SKUDO - INSTALLATION CHECK
  4410.     AX = 2C00h
  4411.     CX = 534Bh ('SK')
  4412.     DX = 5544h ('UD')
  4413.     BX = 4F21h ('O!')
  4414. Return: AX = 5349h ('SI') if installed
  4415.         CH = version number
  4416.         CL = subversion
  4417. Program: SKUDO is an antivirus TSR by Jordi Mas
  4418. --------D-212D-------------------------------
  4419. INT 21 - DOS 1+ - SET SYSTEM TIME
  4420.     AH = 2Dh
  4421.     CH = hour
  4422.     CL = minute
  4423.     DH = second
  4424.     DL = 1/100 seconds
  4425. Return: AL = result
  4426.         00h successful
  4427.         FFh invalid time, system time unchanged
  4428. Note:    DOS 3.3+ also sets CMOS clock
  4429. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
  4430. --------T-212D01CX7820-----------------------
  4431. INT 21 - PC-Mix - INSTALLATION CHECK
  4432.     AX = 2D01h
  4433.     CX = 7820h ('X ')
  4434.     DX = 6D69h ('MI')
  4435. Return: AL = 00h if installed
  4436. --------D-212E--DL00-------------------------
  4437. INT 21 - DOS 1+ - SET VERIFY FLAG
  4438.     AH = 2Eh
  4439.     DL = 00h (DOS 1.x/2.x only)
  4440.     AL = new state of verify flag
  4441.         00h off
  4442.         01h on
  4443. Notes:    default state at system boot is OFF
  4444.     when ON, all disk writes are verified provided the device driver
  4445.       supports read-after-write verification
  4446. SeeAlso: AH=54h
  4447. --------D-212F-------------------------------
  4448. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  4449.     AH = 2Fh
  4450. Return: ES:BX -> current DTA
  4451. Note:    under the FlashTek X-32 DOS extender, the pointer is in ES:EBX
  4452. SeeAlso: AH=1Ah
  4453. --------D-2130-------------------------------
  4454. INT 21 - DOS 2+ - GET DOS VERSION
  4455.     AH = 30h
  4456. ---DOS 5+ ---
  4457.     AL = what to return in BH
  4458.         00h OEM number (as for DOS 2.0-4.0x)
  4459.         01h version flag
  4460. Return: AL = major version number (00h if DOS 1.x)
  4461.     AH = minor version number
  4462.     BL:CX = 24-bit user serial number (most versions do not use this)
  4463. ---if DOS <5 or AL=00h---
  4464.     BH = MS-DOS OEM number (see #0513)
  4465. ---if DOS 5+ and AL=01h---
  4466.     BH = version flag
  4467.         bit 3: DOS is in ROM
  4468.         other: reserved (0)
  4469. Notes:    the OS/2 v1.x Compatibility Box returns major version 0Ah (10)
  4470.     the OS/2 v2.x Compatibility Box returns major version 14h (20)
  4471.     the Windows/NT DOS box returns version 5.00, subject to SETVER
  4472.     DOS 4.01 and 4.02 identify themselves as version 4.00; use
  4473.       INT 21/AH=87h to distinguish between the original European MS-DOS 4.0
  4474.       and the later PC-DOS 4.0x and MS-DOS 4.0x
  4475.     IBM DOS 6.1 reports its version as 6.00; use the OEM number to
  4476.       distinguish between MS-DOS 6.00 and IBM DOS 6.1 (there was never an
  4477.       IBM DOS 6.0)
  4478.     DR-DOS 5.0 and 6.0 report version 3.31; Novell DOS 7 reports v6.00.
  4479.     generic MS-DOS 3.30, Compaq MS-DOS 3.31, and others identify themselves
  4480.       as PC-DOS by returning OEM number 00h
  4481.     the version returned under DOS 4.0x may be modified by entries in
  4482.       the special program list (see #0759 at AH=52h); the version returned
  4483.       under DOS 5+ may be modified by SETVER--use AX=3306h to get the true
  4484.       version number
  4485. SeeAlso: AX=3000h/BX=3000h,AX=3306h,AX=4452h,AH=87h,INT 15/AX=4900h
  4486. SeeAlso: INT 2F/AX=122Fh,INT 2F/AX=E002h
  4487.  
  4488. (Table 0513)
  4489. Values for DOS OEM number:
  4490.  00h    IBM
  4491.  01h    Compaq
  4492.  02h    MS Packaged Product
  4493.  04h    AT&T
  4494.  05h    Zenith
  4495.  06h    Hewlett-Packard
  4496.  0Dh    Packard-Bell
  4497.  16h    DEC
  4498.  23h    Olivetti
  4499.  29h    Toshiba
  4500.  33h    Novell (Windows/386 device IDs only)
  4501.  34h    MS Multimedia Systems (Windows/386 device IDs only)
  4502.  35h    MS Multimedia Systems (Windows/386 device IDs only)
  4503.  4Dh    Hewlett-Packard
  4504.  66h    PhysTechSoft (PTS-DOS)
  4505.  99h    General Software's Embedded DOS
  4506.  EEh    DR-DOS
  4507.  EFh    Novell DOS
  4508.  FFh    Microsoft, Phoenix
  4509. --------E-2130-------------------------------
  4510. INT 21 - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK
  4511.     AH = 30h
  4512.     EAX = 00003000h
  4513.     EBX = 50484152h ("PHAR")
  4514. Return: AL = major DOS version
  4515.     AH = minor DOS version
  4516.     EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed
  4517.         BL = ASCII major version number
  4518.     EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed
  4519.         EDX = address of GDA
  4520. SeeAlso: AX=2501h,AX=FF00h,INT 2F/AX=F100h
  4521. --------v-2130--DXABCD-----------------------
  4522. INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
  4523.     AH = 30h
  4524.     DX = ABCDh
  4525. Return: DX = DCBAh if installed
  4526. SeeAlso: AX=0D20h,AX=30F1h
  4527. --------T-213000BX1234-----------------------
  4528. INT 21 - CTask 2.0+ - INSTALLATION CHECK
  4529.     AX = 3000h
  4530.     BX = 1234h
  4531.     DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
  4532. Return: AL = DOS major version
  4533.     AH = DOS minor version
  4534.     CX:BX -> Ctask global data block
  4535. Program: CTask is a multitasking kernel for C written by Thomas Wagner
  4536. Note:    if first eight bytes of returned data block equal eight bytes passed
  4537.       in, CTask is resident
  4538. --------O-213000BX3000-----------------------
  4539. INT 21 - PC-MOS/386 v3.0 - INSTALLATION CHECK/GET VERSION
  4540.     AX = 3000h
  4541.     BX = 3000h
  4542.     CX = DX = 3000h
  4543. Return: AX = PC-MOS version
  4544. Program: PC-MOS/386 is a multitasking/multiuser MS-DOS-compatible operating
  4545.       system by The Software Link, Inc.
  4546. SeeAlso: AH=30h,INT 38/AH=02h,INT 38/AH=10h
  4547. --------G-213022-----------------------------
  4548. INT 21 - StopPrg v2.0 - INSTALLATION CHECK
  4549.     AX = 3022h
  4550. Return: AX = DOS version (see AH=30h)
  4551.     CX = 1112h if StopPrg installed
  4552.         BX = segment of resident code
  4553. Program: StopPrg is a resident program aborter by MAK-TRAXON's Prophet
  4554. Note:    StopPrg may be temporarily disabled by storing 9090h in the word at
  4555.       0000h:04FEh
  4556. --------v-2130F1-----------------------------
  4557. INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
  4558.     AX = 30F1h
  4559. Return: AL = 00h if resident
  4560. SeeAlso: AH=30h/DX=ABCDh,AX=330Fh
  4561. ----------2130FFCX4445-----------------------
  4562. INT 21 - DESQ??? - INSTALLATION CHECK
  4563.     AX = 30FFh
  4564.     CX = 4445h ("DE")
  4565.     DX = 5351h ("SQ")
  4566. Return: BH = 05h if installed
  4567.     ???
  4568. Note:    called by DUBLDISK.COM v2.6; this function is not supported by
  4569.       DESQview, so it may be for DESQview's precursor DESQ.
  4570. SeeAlso: AX=4404h"DUBLDISK"
  4571. --------D-2131-------------------------------
  4572. INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
  4573.     AH = 31h
  4574.     AL = return code
  4575.     DX = number of paragraphs to keep resident
  4576. Return: never
  4577. Notes:    the value in DX only affects the memory block containing the PSP;
  4578.       additional memory allocated via AH=48h is not affected
  4579.     the minimum number of paragraphs which will remain resident is 11h
  4580.       for DOS 2.x and 06h for DOS 3+
  4581.     most TSRs can save some memory by releasing their environment block
  4582.       before terminating (see #0498 at AH=26h,AH=49h)
  4583. SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
  4584. --------D-2132-------------------------------
  4585. INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE
  4586.     AH = 32h
  4587.     DL = drive number (00h = default, 01h = A:, etc)
  4588. Return: AL = status
  4589.         00h successful
  4590.         DS:BX -> Drive Parameter Block (DPB) (see #0514) for specified
  4591.               drive
  4592.         FFh invalid or network drive
  4593. Notes:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  4594.       except for the DWORD at offset 12h
  4595.     this call updates the DPB by reading the disk; the DPB may be accessed
  4596.       via the DOS list of lists (see #0724 at AH=52h) if disk access is not
  4597.       desirable.
  4598.     undocumented prior to the release of DOS 5.0; only the DOS 4+ version
  4599.       of the DPB has been documented, however
  4600.     supported by DR-DOS 3.41+; DR-DOS 3.41-6.0 return the same data as
  4601.       MS-DOS 3.31
  4602. SeeAlso: AH=1Fh,AH=52h
  4603.  
  4604. Format of DOS Drive Parameter Block:
  4605. Offset    Size    Description    (Table 0514)
  4606.  00h    BYTE    drive number (00h = A:, 01h = B:, etc)
  4607.  01h    BYTE    unit number within device driver
  4608.  02h    WORD    bytes per sector
  4609.  04h    BYTE    highest sector number within a cluster
  4610.  05h    BYTE    shift count to convert clusters into sectors
  4611.  06h    WORD    number of reserved sectors at beginning of drive
  4612.  08h    BYTE    number of FATs
  4613.  09h    WORD    number of root directory entries
  4614.  0Bh    WORD    number of first sector containing user data
  4615.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  4616.         16-bit FAT if greater than 0FF6h, else 12-bit FAT
  4617.  0Fh    BYTE    number of sectors per FAT
  4618.  10h    WORD    sector number of first directory sector
  4619.  12h    DWORD    address of device driver header
  4620.  16h    BYTE    media ID byte
  4621.  17h    BYTE    00h if disk accessed, FFh if not
  4622.  18h    DWORD    pointer to next DPB
  4623. ---DOS 2.x---
  4624.  1Ch    WORD    cluster containing start of current directory, 0000h=root,
  4625.         FFFFh = unknown
  4626.  1Eh 64 BYTEs    ASCIZ pathname of current directory for drive
  4627. ---DOS 3.x---
  4628.  1Ch    WORD    cluster at which to start search for free space when writing
  4629.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  4630. ---DOS 4.0-6.0---
  4631.  0Fh    WORD    number of sectors per FAT
  4632.  11h    WORD    sector number of first directory sector
  4633.  13h    DWORD    address of device driver header
  4634.  17h    BYTE    media ID byte
  4635.  18h    BYTE    00h if disk accessed, FFh if not
  4636.  19h    DWORD    pointer to next DPB
  4637.  1Dh    WORD    cluster at which to start search for free space when writing,
  4638.         usually the last cluster allocated
  4639.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  4640. SeeAlso: #0760
  4641. --------D-2133-------------------------------
  4642. INT 21 - DOS 2+ - EXTENDED BREAK CHECKING
  4643.     AH = 33h
  4644.     AL = subfunction
  4645.         00h get current extended break state
  4646.         Return: DL = current state, 00h = off, 01h = on
  4647.         01h set state of extended ^C/^Break checking
  4648.         DL = new state
  4649.             00h off, check only on character I/O functions
  4650.             01h on, check on all DOS functions
  4651.         Return: (Novell DOS 7) DL = old state of extended Break checks
  4652. Note:    under DOS 3.1+ and DR-DOS, this function does not use any of the
  4653.       DOS-internal stacks and may thus be called at any time
  4654. SeeAlso: AX=3302h
  4655. --------D-213302-----------------------------
  4656. INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  4657.     AX = 3302h
  4658.     DL = new state (00h for OFF, 01h for ON)
  4659. Return: DL = old state of extended BREAK checking
  4660. Notes:    this function does not use any of the DOS-internal stacks and may thus
  4661.       be called at any time; one possible use is modifying Control-Break
  4662.       checking from within an interrupt handler or TSR
  4663.     not supported by DR-DOS through version 6.0; newly-supported by
  4664.       Novell DOS 7
  4665. SeeAlso: AH=33h
  4666. --------D-213303-----------------------------
  4667. INT 21 - DOS 4+ - UNUSED
  4668.     AX = 3303h
  4669. Return: nothing
  4670. Note:    this function and AX=3304h were apparently intended to support a
  4671.       code-page switching flag for OS/2 compatibility (OS/2 allows a file
  4672.       to have a code page as an attribute); however, this function has
  4673.       always been a NOP in public releases of DOS.    See _DOS_Internals_
  4674.       Chapter 2 for more information
  4675. SeeAlso: AX=3304h
  4676. --------D-213304-----------------------------
  4677. INT 21 - DOS 4+ - UNUSED
  4678.     AX = 3304h
  4679. Return: nothing
  4680. Note:    this function and AX=3303h were apparently intended to support a
  4681.       code-page switching flag for OS/2 compatibility (OS/2 allows a file
  4682.       to have a code page as an attribute); however, this function has
  4683.       always been a NOP in public releases of DOS.    See _DOS_Internals_
  4684.       Chapter 2 for more information
  4685. SeeAlso: AX=3303h
  4686. --------D-213305-----------------------------
  4687. INT 21 - DOS 4+ - GET BOOT DRIVE
  4688.     AX = 3305h
  4689. Return: DL = boot drive (1=A:,...)
  4690. Notes:    fully reentrant
  4691.     NEC 9800-series PCs always call the boot drive A: and assign the other
  4692.       drive letters sequentially to the other drives in the system
  4693. --------D-213306-----------------------------
  4694. INT 21 - DOS 5+ - GET TRUE VERSION NUMBER
  4695.     AX = 3306h
  4696. Return: BL = major version
  4697.     BH = minor version
  4698.     DL = revision (bits 2-0, all others 0)
  4699.     DH = version flags
  4700.         bit 3: DOS is in ROM
  4701.         bit 4: DOS is in HMA
  4702.     AL = FFh if true DOS version < 5.0
  4703. Notes:    this function always returns the true version number, unlike AH=30h,
  4704.       whose return value may be changed with SETVER
  4705.     because of the conflict from the CBIS PowerLAN redirector (see next
  4706.       entry), programs should check whether BH is less than 100 (64h)
  4707.       and BL is at least 5 before accepting the returned BX as the true
  4708.       version number; however, even this is not entirely reliable when
  4709.       that redirector is loaded
  4710.     fully reentrant
  4711.     OS/2 v2.1 will return BX=0A14h (version 20.10)
  4712.     the Windows NT DOS box returns BX=3205h (version 5.50)
  4713.     Novell DOS 7 returns version 6.00
  4714. BUG:    DR-DOS 5.0 and 6.0 return CF set/AX=0001h for INT 21/AH=33h
  4715.       subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh
  4716.       for invalid subfunctions
  4717. SeeAlso: AH=30h,INT 2F/AX=122Fh
  4718. --------N-213306-----------------------------
  4719. INT 21 - CBIS POWERLAN - NETWORK REDIRECTOR - ???
  4720.     AX = 3306h
  4721. Return: AX = 3306h
  4722.     BL = ??? (usually 00h)
  4723.     BH = ??? (usually 00h or FFh)
  4724. Note:    unknown function, is in conflict with DOS 5+ version call
  4725. SeeAlso: AX=3306h"DOS"
  4726. --------v-21330F-----------------------------
  4727. INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
  4728.     AX = 330Fh
  4729. Return: AL = 0Fh if resident (DOS returns AL=FFh)
  4730. SeeAlso: AX=30F1h,AX=33E0h
  4731. --------k-213341-----------------------------
  4732. INT 21 - Diet Disk v1.0 - INSTALLATION CHECK
  4733.     AX = 3341h
  4734. Return: DX = 1234h if installed
  4735.         CX = resident code segment
  4736. Program: Diet Disk is a public domain transparent data file compressor by
  4737.       Barry Nance
  4738. --------v-2133E0-----------------------------
  4739. INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
  4740.     AX = 33E0h
  4741. Return: AL = E0h if resident (DOS returns AL=FFh)
  4742. SeeAlso: AX=330Fh,AX=357Fh
  4743. --------D-2134-------------------------------
  4744. INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
  4745.     AH = 34h
  4746. Return: ES:BX -> one-byte InDOS flag
  4747. Notes:    this function executes on the DOS stack, and thus cannot be called
  4748.       while another DOS function is already executing; you should use
  4749.       this function once at the beginning of the program and store the
  4750.       returned pointer rather than calling it when requiring DOS access
  4751.     the value of InDOS is incremented whenever an INT 21 function begins
  4752.       and decremented whenever one completes
  4753.     during an INT 28 call, it is safe to call some INT 21 functions even
  4754.       though InDOS may be 01h instead of zero
  4755.     InDOS alone is not sufficient for determining when it is safe to
  4756.       enter DOS, as the critical error handling decrements InDOS and
  4757.       increments the critical error flag for the duration of the critical
  4758.       error.  Thus, it is possible for InDOS to be zero even if DOS is
  4759.       busy.
  4760.     SMARTDRV 4.0 sets the InDOS flag while flushing its buffers to disk,
  4761.       then zeros it on completion
  4762.     the critical error flag is the byte immediately following InDOS in
  4763.       DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ and
  4764.       DR-DOS 3.41+ (except COMPAQ DOS 3.0, where the critical error flag
  4765.       is located 1AAh bytes BEFORE the critical section flag)
  4766.     for DOS 3.1+, an undocumented call exists to get the address of the
  4767.       critical error flag (see AX=5D06h)
  4768.     this function was undocumented prior to the release of DOS 5.0.
  4769. SeeAlso: AX=5D06h,AX=5D0Bh,INT 15/AX=DE1Fh,INT 28
  4770. --------D-2135-------------------------------
  4771. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  4772.     AH = 35h
  4773.     AL = interrupt number
  4774. Return: ES:BX -> current interrupt handler
  4775. Note:    under DR-DOS 5.0+, this function does not use any of the DOS-internal
  4776.       stacks and may thus be called at any time
  4777. SeeAlso: AH=25h,AX=2503h
  4778. --------E-213501-----------------------------
  4779. INT 21 P - FlashTek X-32VM - ALLOCATE PROTECTED-MODE SELECTOR
  4780.     AX = 3501h
  4781. Return: CF clear if successful
  4782.         BX = new selector
  4783.     CF set on error (no more selectors available)
  4784. Note:    the new selector will be an expand-up read/write data selector with
  4785.       undefined base and limit
  4786. SeeAlso: AX=3502h,INT 31/AX=0000h
  4787. --------E-213502-----------------------------
  4788. INT 21 P - FlashTek X-32VM - DEALLOCATE PROTECTED-MODE SELECTOR
  4789.     AX = 3502h
  4790.     BX = selector
  4791. Return: CF clear if successful
  4792.     CF set on error (invalid selector)
  4793. Note:    only selectors allocated via AX=3501h should be deallocated
  4794. SeeAlso: AX=3501h,INT 31/AX=0001h
  4795. --------E-213503-----------------------------
  4796. INT 21 P - FlashTek X-32VM - SET SELECTOR BASE ADDRESS
  4797.     AX = 3503h
  4798.     BX = selector
  4799.     ECX = base address
  4800. Return: CF clear if successful
  4801.     CF set on error (invalid selector)
  4802. SeeAlso: AX=3504h,AX=3505h,INT 31/AX=0007h
  4803. --------E-213504-----------------------------
  4804. INT 21 P - FlashTek X-32VM - GET SELECTOR BASE ADDRESS
  4805.     AX = 3504h
  4806.     BX = selector
  4807. Return: CF clear if successful
  4808.         ECX = absolute base address of selector
  4809.     CF set on error (invalid selector)
  4810. SeeAlso: AX=3503h,INT 31/AX=0006h
  4811. --------E-213505-----------------------------
  4812. INT 21 P - FlashTek X-32VM - SET SELECTOR LIMIT
  4813.     AX = 3505h
  4814.     BX = selector
  4815.     ECX = desired limit
  4816. Return: CF clear if successful
  4817.         ECX = actual limit set
  4818.     CF set on error (no more selectors available)
  4819. Note:    the limit will be rounded down to nearest 4K boundary if the requested
  4820.       limit is greater than 1MB
  4821. SeeAlso: AX=3503h,INT 31/AX=0008h
  4822. --------E-21350A-----------------------------
  4823. INT 21 P - FlashTek X-32VM - PHYSICAL ADDRESS MAPPING
  4824.     AX = 350Ah
  4825.     EBX = absolute physical address
  4826.     ECX = size in bytes of area to map
  4827. Return: CF clear if successful
  4828.     CF set on error (insufficient memory or service refused by DPMI host)
  4829. Notes:    should not make repeated calls for the same physical address
  4830.     there is no provision for unmapping memory
  4831. --------E-21350B-----------------------------
  4832. INT 21 P - FlashTek X-32VM - UPDATE AND RETURN AVAILABLE FREE MEMORY
  4833.     AX = 350Bh
  4834.     DS = default selector for DS
  4835. Return: CF clear
  4836.     EAX = maximum amount of memory which can be allocated via AX=350Ch
  4837. SeeAlso: AX=350Ch
  4838. --------E-21350C-----------------------------
  4839. INT 21 P - FlashTek X-32VM - ALLOCATE A BLOCK OF MEMORY
  4840.     AX = 350Ch
  4841.     ECX = size of block in bytes
  4842.     DS = default DS
  4843. Return: CF clear if successful
  4844.         EAX = near pointer to new block
  4845.         EDX = new lowest legal value for stack
  4846.     CF set on error (requested size not multiple of 4K)
  4847. SeeAlso: AX=350Bh,AX=350Dh
  4848. --------E-21350D-----------------------------
  4849. INT 21 P - FlashTek X-32VM - RESERVE BLOCK OF MEMORY FOR 32-BIT STACK
  4850.     AX = 350Dh
  4851.     EBX = current ESP value
  4852.     ECX = size of block in bytes
  4853.     DS = default DS
  4854. Return: CF clear if successful
  4855.         EBX = new value for ESP
  4856.         EDX = suggested new limit for SS
  4857.     CF set on error
  4858. Note:    this function should only be called once during initialization
  4859. SeeAlso: AX=350Bh,AX=350Ch
  4860. --------v-21357F-----------------------------
  4861. INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
  4862.     AX = 357Fh
  4863. Return: DX = FFFFh if installed
  4864. SeeAlso: AX=33E0h,AX=3DFFh
  4865. --------D-2136-------------------------------
  4866. INT 21 - DOS 2+ - GET FREE DISK SPACE
  4867.     AH = 36h
  4868.     DL = drive number (00h = default, 01h = A:, etc)
  4869. Return: AX = FFFFh if invalid drive
  4870.     else
  4871.         AX = sectors per cluster
  4872.         BX = number of free clusters
  4873.         CX = bytes per sector
  4874.         DX = total clusters on drive
  4875. Notes:    free space on drive in bytes is AX * BX * CX
  4876.     total space on drive in bytes is AX * CX * DX
  4877.     "lost clusters" are considered to be in use
  4878.     according to Dave Williams' MS-DOS reference, the value in DX is
  4879.       incorrect for non-default drives after ASSIGN is run
  4880. SeeAlso: AH=1Bh,AH=1Ch
  4881. --------D-213700-----------------------------
  4882. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  4883.     AX = 3700h
  4884. Return: AL = status
  4885.         00h successful
  4886.         DL = current switch character
  4887.         FFh unsupported subfunction
  4888. Desc:    Determine the character which is used to introduce command switches.
  4889.       This setting is ignored by DOS commands in version 4.0 and higher,
  4890.       but is honored by many third-party programs.
  4891. Notes:    documented in some OEM versions of some releases of DOS
  4892.     supported by OS/2 compatibility box
  4893.     always returns AL=00h/DL=2Fh for MS-DOS 5+ and DR-DOS 3.41+
  4894. SeeAlso: AX=3701h
  4895. --------D-213701-----------------------------
  4896. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  4897.     AX = 3701h
  4898.     DL = new switch character
  4899. Return: AL = status
  4900.         00h successful
  4901.         FFh unsupported subfunction
  4902. Notes:    documented in some OEM versions of some releases of DOS
  4903.     supported by OS/2 compatibility box
  4904.     ignored by MS-DOS 5+ and DR-DOS 3.41+; DR-DOS 6.0 leaves AX unchanged
  4905. SeeAlso: AX=3700h
  4906. --------D-2137-------------------------------
  4907. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  4908.     AH = 37h
  4909.     AL = subfunction
  4910.         02h get availdev flag
  4911.         Return: DL = 00h \DEV\ must precede character device names
  4912.                = nonzero \DEV\ is optional
  4913.         03h set availdev flag
  4914.         DL = 00h    \DEV\ is mandatory
  4915.            = nonzero    \DEV\ is optional
  4916. Return: AL = status
  4917.         00h successful
  4918.         FFh unsupported subfunction
  4919. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  4920.       names without generating an error even if the directory \DEV does
  4921.       not actually exist (other paths generate an error if they do not
  4922.       exist).
  4923.     although MS-DOS 3.3+ and DR-DOS 3.41+ accept these calls, they have no
  4924.       effect, and AL=02h always returns DL=FFh
  4925. --------k-2137D0BX899D-----------------------
  4926. INT 21 - DIET v1.43e - TSR INSTALLATION CHECK
  4927.     AX = 37D0h
  4928.     BX = 899Dh ('DI' + 'ET')
  4929. Return: AL = FFh if not present as TSR (default return value from DOS)
  4930.     AX = 0000h if installed as a TSR
  4931.         CX = 899Dh
  4932.         DX = version ID
  4933. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  4934. SeeAlso: AX=37D1h,AX=37D2h,AX=37D4h,AX=37D6h,AX=37DFh,AX=4BF0h,AX=4BF1h
  4935. --------k-2137D1BX899D-----------------------
  4936. INT 21 - DIET v1.43e - GET DIET.EXE RESIDENT SEGMENT
  4937.     AX = 37D1h
  4938.     BX = 899Dh ('DI' + 'ET')
  4939. Return: AX = 0000h
  4940.     CX = code segment of TSR part of DIET.EXE
  4941.     DX = memory block segment of TSR DIET.EXE
  4942.         (0000h if installed as device driver)
  4943. SeeAlso: AX=37D0h,AX=37DFh
  4944. --------k-2137D2BX899D-----------------------
  4945. INT 21 - DIET v1.43e - GET TSR CONTROL FLAGS
  4946.     AX = 37D2h
  4947.     BX = 899Dh ('DI' + 'ET')
  4948. Return: AX = 0000h
  4949.     DL = control flag (00h active, else disabled)
  4950.     DH = skip flag (nonzero while TSR active)
  4951. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  4952. --------k-2137D3BX899D-----------------------
  4953. INT 21 - DIET v1.43e - SET TSR CONTROL FLAGS
  4954.     AX = 37D3h
  4955.     BX = 899Dh ('DI' + 'ET')
  4956.     DL = control flag (00h active, else disabled)
  4957.     DH = skip flag (00h)
  4958. Return: AX = 0000h
  4959. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  4960. --------k-2137D4BX899D-----------------------
  4961. INT 21 - DIET v1.43e - GET TSR OPTIONS
  4962.     AX = 37D4h
  4963.     BX = 899Dh ('DI' + 'ET')
  4964. Return: AX = 0000h
  4965.     DX = TSR options (see #0515)
  4966. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  4967.  
  4968. Bitfields for DIET TSR options:
  4969. Bit(s)    Description    (Table 0515)
  4970.  0    automated compression of DIETed file
  4971.  1    automated compression of newly-created file
  4972.  2    suppress DIET message
  4973.  3    display original file size
  4974.  4-15    reserved (0)
  4975. --------k-2137D5BX899D-----------------------
  4976. INT 21 - DIET v1.43e - SET TSR OPTIONS
  4977.     AX = 37D5h
  4978.     BX = 899Dh ('DI' + 'ET')
  4979.     DX = TSR options (see #0515)
  4980. Return: AX = 0000h
  4981. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  4982. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  4983. --------k-2137D6BX899D-----------------------
  4984. INT 21 - DIET v1.43e - GET TEMPORARY DIRECTORY NAMES
  4985.     AX = 37D6h
  4986.     BX = 899Dh ('DI' + 'ET')
  4987. Return: AX = 0000h
  4988.     DS:DX -> name of temporary directory or 0000h:0000h for current dir
  4989. SeeAlso: AX=37D0h,AX=37D7h
  4990. --------k-2137D7BX899D-----------------------
  4991. INT 21 - DIET v1.43e - SET TEMPORARY DIRECTORY NAMES
  4992.     AX = 37D7h
  4993.     BX = 899Dh ('DI' + 'ET')
  4994.     DS:DX -> ASCIZ name of temporary directory (max 61 chars)
  4995.         0000h:0000h for current directory
  4996. Return: AX = 0000h
  4997. Note:    the specified directory name must include a drive letter and end with
  4998.       a backslash
  4999. SeeAlso: AX=37D0h,AX=37D6h
  5000. --------k-2137DCBX899D-----------------------
  5001. INT 21 - DIET v1.43e - SET ADDRESS OF EXTERNAL PROCEDURE
  5002.     AX = 37DCh
  5003.     BX = 899Dh ('DI' + 'ET')
  5004.     DS:DX -> external procedure
  5005. Return: AX = 0000h
  5006. Note:    the resident code will call the specified external procedure at the
  5007.       beginning of decompression and when compression is exited on failure
  5008. SeeAlso: AX=37DDh
  5009.  
  5010. (Table 0516)
  5011. Values DIET external procedure is called with:
  5012.     STACK:    WORD    class
  5013.             FFFDh creation failed for unknown reasons
  5014.             FFFEh creation failed due to lack of space
  5015.             FFFFh file creation error
  5016.             else file handle of DIETed file to be decompressed
  5017.         DWORD    -> compressed filename
  5018.         DWORD    -> decompressed or temporary filename
  5019. Return: SI,DI,BP,DS,ES must be preserved by external procedure
  5020. --------k-2137DDBX899D-----------------------
  5021. INT 21 - DIET v1.43e - RELEASE EXTERNAL PROCEDURE
  5022.     AX = 37DDh
  5023.     BX = 899Dh ('DI' + 'ET')
  5024. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  5025. Note:    unlinks the external procedure specified by AX=37DCh
  5026. SeeAlso: AX=37DCh
  5027. --------k-2137DEBX899D-----------------------
  5028. INT 21 - DIET v1.43e - READ EMS STATUS
  5029.     AX = 37DEh
  5030.     BX = 899Dh ('DI' + 'ET')
  5031. Return: AX = 0000h
  5032.     CX = EMS status
  5033.         0000h not used
  5034.         0001h used as work area
  5035.         0002h used for code and as work area
  5036.     DX = EMM handle when EMS is in use
  5037. --------k-2137DFBX899D-----------------------
  5038. INT 21 - DIET v1.43e - UNLOAD TSR
  5039.     AX = 37DFh
  5040.     BX = 899Dh ('DI' + 'ET')
  5041. Return: AX = status
  5042.         0000h successful
  5043.         00FFh failed
  5044. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  5045. SeeAlso: AX=37D0h
  5046. Index:    uninstall;DIET
  5047. --------D-2138-------------------------------
  5048. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  5049.     AH = 38h
  5050. --DOS 2.x--
  5051.     AL = 00h get current-country info
  5052.     DS:DX -> buffer for returned info (see #0517,#0518)
  5053. Return: CF set on error
  5054.         AX = error code (02h)
  5055.     CF clear if successful
  5056.         AX = country code (MS-DOS 2.11 only)
  5057.         buffer at DS:DX filled
  5058. --DOS 3+--
  5059.     AL = 00h for current country
  5060.     AL = 01h thru 0FEh for specific country with code <255
  5061.     AL = 0FFh for specific country with code >= 255
  5062.        BX = 16-bit country code
  5063.     DS:DX -> buffer for returned info (see #0518)
  5064. Return: CF set on error
  5065.         AX = error code (02h)
  5066.     CF clear if successful
  5067.         BX = country code
  5068.         DS:DX buffer filled
  5069. Note:    this function is not supported by the Borland DPMI host, but no error
  5070.       is returned; as a workaround, one should allocate a buffer in
  5071.       conventional memory with INT 31/AX=0100h and simulate an INT 21 with
  5072.       INT 31/AX=0300h
  5073. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  5074.  
  5075. Format of DOS 2.00-2.10 country info:
  5076. Offset    Size    Description    (Table 0517)
  5077.  00h    WORD    date format  0 = USA    mm dd yy
  5078.                  1 = Europe dd mm yy
  5079.                  2 = Japan    yy mm dd
  5080.  02h    BYTE    currency symbol
  5081.  03h    BYTE    00h
  5082.  04h    BYTE    thousands separator char
  5083.  05h    BYTE    00h
  5084.  06h    BYTE    decimal separator char
  5085.  07h    BYTE    00h
  5086.  08h 24 BYTEs    reserved
  5087.  
  5088. Format of DOS 2.11+ country info:
  5089. Offset    Size    Description    (Table 0518)
  5090.  00h    WORD    date format (see #0517)
  5091.  02h  5 BYTEs    ASCIZ currency symbol string
  5092.  07h  2 BYTEs    ASCIZ thousands separator
  5093.  09h  2 BYTEs    ASCIZ decimal separator
  5094.  0Bh  2 BYTEs    ASCIZ date separator
  5095.  0Dh  2 BYTEs    ASCIZ time separator
  5096.  0Fh    BYTE    currency format
  5097.         bit 2 = set if currency symbol replaces decimal point
  5098.         bit 1 = number of spaces between value and currency symbol
  5099.         bit 0 = 0 if currency symbol precedes value
  5100.             1 if currency symbol follows value
  5101.  10h    BYTE    number of digits after decimal in currency
  5102.  11h    BYTE    time format
  5103.         bit 0 = 0 if 12-hour clock
  5104.             1 if 24-hour clock
  5105.  12h    DWORD    address of case map routine
  5106.         (FAR CALL, AL = character to map to upper case [>= 80h])
  5107.  16h  2 BYTEs    ASCIZ data-list separator
  5108.  18h 10 BYTEs    reserved
  5109.  
  5110. (Table 0519)
  5111. Values for country code:
  5112.  001h    United States
  5113.  002h    Canadian-French
  5114.  003h    Latin America
  5115.  01Fh    Netherlands
  5116.  020h    Belgium
  5117.  021h    France
  5118.  022h    Spain
  5119.  024h    Hungary (not supported by DR-DOS 5.0)
  5120.  026h    Yugoslavia (not supported by DR-DOS 5.0)
  5121.  027h    Italy
  5122.  029h    Switzerland
  5123.  02Ah    Czechoslovakia/Tjekia (not supported by DR-DOS 5.0)
  5124.  02Bh    Austria (DR-DOS 5.0)
  5125.  02Ch    United Kingdom
  5126.  02Dh    Denmark
  5127.  02Eh    Sweden
  5128.  02Fh    Norway
  5129.  030h    Poland (not supported by DR-DOS 5.0)
  5130.  031h    Germany
  5131.  037h    Brazil (not supported by DR-DOS 5.0)
  5132.  03Dh    International English [Australia in DR-DOS 5.0]
  5133.  051h    Japan (DR-DOS 5.0, MS-DOS 5.0+)
  5134.  052h    Korea (DR-DOS 5.0)
  5135.  056h    China (MS-DOS 5.0+)
  5136.  058h    Taiwan (MS-DOS 5.0+)
  5137.  05Ah    Turkey (MS-DOS 5.0+)
  5138.  15Fh    Portugal
  5139.  162h    Iceland
  5140.  166h    Finland
  5141.  311h    Middle East/Saudi Arabia (DR-DOS 5.0,MS-DOS 5.0+)
  5142.  3CCh    Israel (DR-DOS 5.0,MS-DOS 5.0+)
  5143. --------D-2138--DXFFFF-----------------------
  5144. INT 21 - DOS 3+ - SET COUNTRY CODE
  5145.     AH = 38h
  5146.     DX = FFFFh
  5147.     AL = 01h thru FEh for specific country with code <255
  5148.     AL = FFh for specific country with code >= 255
  5149.        BX = 16-bit country code (see #0519)
  5150. Return: CF set on error
  5151.         AX = error code (see #0770 at AH=59h)
  5152.     CF clear if successful
  5153. Note:    not supported by OS/2
  5154. SeeAlso: INT 2F/AX=1403h
  5155. --------D-2139-------------------------------
  5156. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  5157.     AH = 39h
  5158.     DS:DX -> ASCIZ pathname
  5159. Return: CF clear if successful
  5160.         AX destroyed
  5161.     CF set on error
  5162.         AX = error code (03h,05h) (see #0770 at AH=59h)
  5163. Notes:    all directories in the given path except the last must exist
  5164.     fails if the parent directory is the root and is full
  5165.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  5166.       it is not possible to make that directory the current directory
  5167.       because the path would exceed 64 characters
  5168.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5169. SeeAlso: AH=3Ah,AH=3Bh,AH=6Dh,AH=71h,AH=E2h/SF=0Ah,INT 2F/AX=1103h
  5170. SeeAlso: INT 60/DI=0511h
  5171. --------D-213A-------------------------------
  5172. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  5173.     AH = 3Ah
  5174.     DS:DX -> ASCIZ pathname of directory to be removed
  5175. Return: CF clear if successful
  5176.         AX destroyed
  5177.     CF set on error
  5178.         AX = error code (03h,05h,06h,10h) (see #0770 at AH=59h)
  5179. Notes:    directory must be empty (contain only '.' and '..' entries)
  5180.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5181. SeeAlso: AH=39h,AH=3Bh,AH=71h,AH=E2h/SF=0Bh,INT 2F/AX=1101h,INT 60/DI=0512h
  5182. --------D-213B-------------------------------
  5183. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  5184.     AH = 3Bh
  5185.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  5186. Return: CF clear if successful
  5187.         AX destroyed
  5188.     CF set on error
  5189.         AX = error code (03h) (see #0770 at AH=59h)
  5190. Notes:    if new directory name includes a drive letter, the default drive is
  5191.       not changed, only the current directory on that drive
  5192.     changing the current directory also changes the directory in which
  5193.       FCB file calls operate
  5194.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5195. SeeAlso: AH=47h,AH=71h,INT 2F/AX=1105h
  5196. --------D-213C-------------------------------
  5197. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  5198.     AH = 3Ch
  5199.     CX = file attributes (see #0520)
  5200.     DS:DX -> ASCIZ filename
  5201. Return: CF clear if successful
  5202.         AX = file handle
  5203.     CF set on error
  5204.         AX = error code (03h,04h,05h) (see #0770 at AH=59h)
  5205. Notes:    if a file with the given name exists, it is truncated to zero length
  5206.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5207.     DR-DOS checks the system password or explicitly supplied password at
  5208.       the end of the filename against the reserved field in the directory
  5209.       entry before allowing access
  5210. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h,INT 2F/AX=1117h
  5211.  
  5212. Bitfields for file attributes:
  5213. Bit(s)    Description    (Table 0520)
  5214.  0    read-only
  5215.  1    hidden
  5216.  2    system
  5217.  3    volume label (ignored)
  5218.  4    reserved, must be zero (directory)
  5219.  5    archive bit
  5220.  7    if set, file is shareable under Novell NetWare
  5221. --------D-213D-------------------------------
  5222. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  5223.     AH = 3Dh
  5224.     AL = access and sharing modes (see #0521)
  5225.     DS:DX -> ASCIZ filename
  5226.     CL = attribute mask of files to look for (server call only)
  5227. Return: CF clear if successful
  5228.         AX = file handle
  5229.     CF set on error
  5230.         AX = error code (01h,02h,03h,04h,05h,0Ch,56h) (see #0770 at AH=59h)
  5231. Notes:    file pointer is set to start of file
  5232.     file handles which are inherited from a parent also inherit sharing
  5233.       and access restrictions
  5234.     files may be opened even if given the hidden or system attributes
  5235.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5236.     DR-DOS checks the system password or explicitly supplied password at
  5237.       the end of the filename against the reserved field in the directory
  5238.       entry before allowing access
  5239.     sharing modes are only effective on local drives if SHARE is loaded
  5240. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1116h,INT 2F/AX=1226h
  5241.  
  5242. Bitfields for access and sharing modes:
  5243. Bit(s)    Description    (Table 0521)
  5244.  2-0    access mode
  5245.     000 read only
  5246.     001 write only
  5247.     010 read/write
  5248.     011 (DOS 5+ internal) passed to redirector on EXEC to allow
  5249.         case-sensitive filenames
  5250.  3    reserved (0)
  5251.  6-4    sharing mode (DOS 3+)
  5252.     000 compatibility mode
  5253.     001 "DENYALL" prohiboth read and write access by others
  5254.     010 "DENYWRITE" prohiwrite access by others
  5255.     011 "DENYREAD" prohiread access by others
  5256.     100 "DENYNONE" allow full access by others
  5257.     111 network FCB (only available during server call)
  5258.  7    inheritance
  5259.     if set, file is private to current process and will not be inherited
  5260.       by child processes
  5261.  
  5262. (Table 0522)
  5263. Values of DOS file sharing behavior:
  5264.       |    Second and subsequent Opens
  5265.  First      |Compat  Deny      Deny     Deny    Deny
  5266.  Open      |       All      Write     Read    None
  5267.       |R W RW R W RW R W RW R W RW R W RW
  5268.  - - - - -| - - - - - - - - - - - - - - - - -
  5269.  Compat R |Y Y Y  N N N     1 N N    N N N  1 N N
  5270.     W |Y Y Y  N N N     N N N    N N N  N N N
  5271.     RW|Y Y Y  N N N     N N N    N N N  N N N
  5272.  - - - - -|
  5273.  Deny    R |C C C  N N N     N N N    N N N  N N N
  5274.  All    W |C C C  N N N     N N N    N N N  N N N
  5275.     RW|C C C  N N N     N N N    N N N  N N N
  5276.  - - - - -|
  5277.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N
  5278.  Write    W |C C C  N N N     N N N    Y N N  Y N N
  5279.     RW|C C C  N N N     N N N    N N N  Y N N
  5280.  - - - - -|
  5281.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  5282.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  5283.     RW|C C C  N N N     N N N    N N N  N Y N
  5284.  - - - - -|
  5285.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  5286.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  5287.     RW|C C C  N N N     N N N    N N N  Y Y Y
  5288. Legend: Y = open succeeds, N = open fails with error code 05h
  5289.     C = open fails, INT 24 generated
  5290.     1 = open succeeds if file read-only, else fails with error code
  5291.     2 = open succeeds if file read-only, else fails with INT 24
  5292. --------v-213DFF-----------------------------
  5293. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  5294.     AX = 3DFFh
  5295. Return: AX = 4A44h if resident
  5296. SeeAlso: AX=357Fh,AX=4203h
  5297. --------D-213E-------------------------------
  5298. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  5299.     AH = 3Eh
  5300.     BX = file handle
  5301. Return: CF clear if successful
  5302.         AX destroyed
  5303.     CF set on error
  5304.         AX = error code (06h) (see #0770 at AH=59h)
  5305. Note:    if the file was written to, any pending disk writes are performed, the
  5306.       time and date stamps are set to the current time, and the directory
  5307.       entry is updated
  5308. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  5309. --------D-213F-------------------------------
  5310. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  5311.     AH = 3Fh
  5312.     BX = file handle
  5313.     CX = number of bytes to read
  5314.     DS:DX -> buffer for data
  5315. Return: CF clear if successful
  5316.         AX = number of bytes actually read (0 if at EOF before call)
  5317.     CF set on error
  5318.         AX = error code (05h,06h) (see #0770 at AH=59h)
  5319. Notes:    data is read beginning at current file position, and the file position
  5320.       is updated after a successful read
  5321.     the returned AX may be smaller than the request in CX if a partial
  5322.       read occurred
  5323.     if reading from CON, read stops at first CR
  5324.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5325. BUG:    Novell NETX.EXE v3.26 and 3.31 do not set CF if the read fails due to
  5326.       a record lock (see AH=5Ch), though it does return AX=0005h; this
  5327.       has been documented by Novell
  5328. SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
  5329. --------G-213F-------------------------------
  5330. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  5331.     AH = 3Fh
  5332.     BX = handle for character device "TDHDEBUG"
  5333.     CX = number of bytes to read
  5334.     DS:DX -> buffer for status block (see #0524)
  5335. Return: CF clear if successful
  5336.         AX = number of bytes actually read
  5337.     CF set on error
  5338.         AX = error code (05h,06h) (see #0770 at AH=59h)
  5339. SeeAlso: AH=40h"Turbo Debug"
  5340.  
  5341. (Table 0523)
  5342. Values for status of Turbo Debugger command:
  5343.  00h    successful
  5344.  01h    invalid handle
  5345.  02h    no more breakpoints available
  5346.  03h    hardware does not support specified breakpoint type
  5347.  04h    previous command prevents execution
  5348.  05h    debugger hardware not found
  5349.  06h    hardware failure
  5350.  07h    invalid command
  5351.  08h    driver not initialized yet
  5352.  FEh    recursive entry (hardware breakpoint inside hw bp handler)
  5353.  
  5354. Format of Turbo Debugger status block:
  5355. Offset    Size    Description    (Table 0524)
  5356.  00h    BYTE    status of command (see #0523)
  5357. ---status for command 01h---
  5358.  01h    WORD    device driver interface version number (currently 1)
  5359.  03h    WORD    device driver software version
  5360.  05h    BYTE    maximum simultaneous hardware breakpoints
  5361.  06h    BYTE    configuration bits (see #0525)
  5362.  07h    BYTE    supported breakpoint types (see #0526)
  5363.  08h    WORD    supported addressing match modes (see #0527)
  5364.  0Ah    WORD    supported data matches (see #0528)
  5365.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  5366.  0Dh    WORD    size of onboard memory (in KB)
  5367.  0Fh    WORD    maximum number of trace-back events
  5368.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  5369.           supported)
  5370. ---status for command 04h---
  5371.  01h    BYTE    handle to use when referring to the just-set breakpoint
  5372.  
  5373. Bitfields for Turbo Debugger configuration bits:
  5374. Bit(s)    Description    (Table 0525)
  5375.  0    CPU and DMA accesses are distinct
  5376.  1    can detect DMA transfers
  5377.  2    supports data mask
  5378.  3    hardware pass counter on breakpoints
  5379.  4    can match on data as well as addresses
  5380.  
  5381. Bitfields for Turbo Debugger supported breakpoint types:
  5382. Bit(s)    Description    (Table 0526)
  5383.  0    memory read
  5384.  1    memory write
  5385.  2    memory read/write
  5386.  3    I/O read
  5387.  4    I/O write
  5388.  5    I/O read/write
  5389.  6    instruction fetch
  5390.  
  5391. Bitfields for Turbo Debugger supported addressing match modes:
  5392. Bit(s)    Description    (Table 0527)
  5393.  0    any address
  5394.  1    equal to test value
  5395.  2    not equal
  5396.  3    above test value
  5397.  4    below test value
  5398.  5    below or equal
  5399.  6    above or equal
  5400.  7    within range
  5401.  8    outside range
  5402.  
  5403. Bitfields for Turbo Debugger supported data matches:
  5404. Bit(s)    Description    (Table 0528)
  5405.  0    any data
  5406.  1    equal to test value
  5407.  2    not equal
  5408.  3    above test value
  5409.  4    below test value
  5410.  5    below or equal
  5411.  6    above or equal
  5412.  7    within range
  5413.  8    outside range
  5414. --------N-213F-------------------------------
  5415. INT 21 - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA
  5416.     AH = 3Fh
  5417.     BX = handle for character device "$IPCUST"
  5418.     CX = number of bytes to read
  5419.     DS:DX -> buffer for configuration data (see #0529)
  5420. Return: CF clear if successful
  5421.         AX = number of bytes actually read
  5422.     CF set on error
  5423.         AX = error code (05h,06h) (see #0770 at AH=59h)
  5424. Notes:    if less than the entire data is read or written, the next read/write
  5425.       continues where the previous one ended; IOCTL calls AX=4402h and
  5426.       AX=4403h both reset the location at which the next operation starts
  5427.       to zero
  5428.     the data pointer is also reset to zero if the previous read or write
  5429.       reached or exceeded the end of the data, when the current function
  5430.       is read and the previous was write, or vice versa
  5431.     v2.1+ uses a new configuration method, but allows the installation
  5432.       of IPCUST.SYS for backward compatibility with other software which
  5433.       must read the PC/TCP configuration
  5434. SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST",AX=4402h"FTPSOFT"
  5435.  
  5436. Format of PC/TCP configuration data:
  5437. Offset    Size    Description    (Table 0529)
  5438.  00h 12 BYTEs    IPCUST.SYS device driver header
  5439.  12h    BYTE    ???
  5440.  13h    BYTE    ???
  5441.  14h    WORD    ???
  5442.  16h    BYTE    bit flags
  5443.         bit 0: send BS rather than DEL for BackSpace key
  5444.         bit 1: wrap long lines
  5445.  17h    BYTE    ???
  5446.  18h 64 BYTEs    ASCIZ hostname
  5447.  58h 64 BYTEs    ASCIZ domain name
  5448.         (fully qualified domain name is hostname.domain-name)
  5449.  98h 16 BYTEs    ASCIZ username
  5450.  A8h 64 BYTEs    ASCIZ full name
  5451.  E8h 64 BYTEs    ASCIZ office address
  5452. 128h 32 BYTEs    ASCIZ phone number
  5453. 148h    WORD    offset from GMT in minutes
  5454. 14Ah  4 BYTEs    ASCIZ timezone name
  5455. 14Eh    WORD    number of time servers
  5456. 150h  ? DWORDs    (big-endian) IP addresses for time servers
  5457.     ???
  5458. 164h    WORD    number of old-style name servers
  5459. 166h  3 DWORDs    (big-endian) IP addresses for name servers
  5460. 172h    WORD    number of domain name servers
  5461. 174h  3 DWORDs    (big-endian) IP addresses for domain name servers
  5462. 180h    DWORD    (big-endian) IP address of default gateway
  5463. 184h    DWORD    (big-endian) IP address of log server
  5464. 188h    DWORD    (big-endian) IP address of cookie server
  5465. 18Ch    DWORD    (big-endian) IP address of lpr server
  5466. 190h    DWORD    (big-endian) IP address of imagen print server
  5467. 194h 54 BYTEs    ???
  5468. 1E8h    WORD    TCP default window size in bytes
  5469. 1EAh    WORD    TCP low window size
  5470. 1ECh 64 BYTEs    ASCIZ host tabel filename
  5471. 22Ch  2 BYTEs    ???
  5472. 22Eh 80 BYTEs    ASCIZ mail relay host name
  5473. 27Eh    BYTE    ???
  5474. 27Fh    BYTE    ??? bit flags
  5475. 280h 44 BYTEs    ???
  5476. 2ACh    WORD    ???
  5477. 2AEh 202 BYTEs    ???
  5478. --------N-213F-------------------------------
  5479. INT 21 - WORKGRP.SYS - GET ENTRY POINT
  5480.     AH = 3Fh
  5481.     BX = file handle for device "NET$HLP$"
  5482.     CX = 0008h
  5483.     DS:DX -> buffer for entry point record (see #0597)
  5484. Return: CF clear if successful
  5485.         AX = number of bytes actually read (0 if at EOF before call)
  5486.     CF set on error
  5487.         AX = error code (05h,06h) (see #0770 at AH=59h)
  5488. Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
  5489.       permits communication with PCs running Windows for Workgroups or
  5490.       LAN Manager
  5491. SeeAlso: AX=4402h"WORKGRP.SYS",INT 2F/AX=9400h
  5492. --------N-213F-------------------------------
  5493. INT 21 - BW-TCP - GET DRIVER INFO
  5494.     AH = 3Fh
  5495.     BX = file handle for device "ETHDEV27"
  5496.     CX = 002Bh
  5497.     DS:DX -> buffer for driver info (see #0530)
  5498. Return: CF clear if successful
  5499.         AX = number of bytes actually read (0 if at EOF before call)
  5500.     CF set on error
  5501.         AX = error code (05h,06h) (see #0770 at AH=59h)
  5502. Program: BW-TCP is a TCP/IP protocol stack by Beame & Whiteside Software
  5503. Notes:    the B&W socket library performs an INT 21/AX=4401h with DX=0060h before
  5504.       making this call to retrieve the driver information; one should also
  5505.       call the private API interrupt with AH=15h
  5506.     the installation check for the TCP/IP stack is to test for the
  5507.       existence of the character device UDP-IP10
  5508. SeeAlso: INT 14/AH=56h,INT 62/AH=00h"ETHDEV",INT 63/AH=03h,INT 64/AH=00h
  5509. Index:    installation check;BW-TCP hardware driver
  5510. Index:    installation check;BW-TCP TCPIP.SYS
  5511.  
  5512. Format of BW-TCP driver info:
  5513. Offset    Size    Description    (Table 0530)
  5514.  00h    WORD    I/O base address
  5515.  02h    BYTE    shared memory page (01h = segment 0100h, etc.)
  5516.  03h    BYTE    interrupt vector for private API
  5517.  04h    BYTE    IRQ used by board
  5518.  05h    WORD    size of data buffer
  5519.  07h    WORD    maximum transfer window
  5520.  09h    WORD    time zone
  5521.  0Bh    BYTE    address type (01h user, 04h RARP, 05h BOOTP)
  5522.  0Ch    DWORD    internet address
  5523.  10h    WORD    "value" ???
  5524.  12h    BYTE    subnet mask
  5525.  13h    WORD    "ether_pointer" ???
  5526.  15h    WORD    offset in device driver of log server records
  5527.  17h    WORD    offset in device driver of name server records
  5528.  19h    WORD    offset in device driver of print server records
  5529.  1Bh    WORD    offset in device driver of time server records
  5530.  1Dh    WORD    offset in device driver of gateway records
  5531.  1Fh    WORD    segment address of device driver
  5532.  21h    BYTE    transfer size
  5533.  22h  9 BYTEs    network adapter board name
  5534. ---11/21/91+ ---
  5535.  23h    BYTE    ETHDEV version (major in high nybble, minor in low nybble)
  5536.  24h    BYTE    ETHDEV revision
  5537.  25h    BYTE    TCPIP version (major in high nybble, minor in low nybble)
  5538.  26h    BYTE    TCPIP revision
  5539.  27h    BYTE    BWRPC version (major in high nybble, minor in low nybble)
  5540.  28h    BYTE    BWRPC revision
  5541.  29h    BYTE    BWNFS version (major in high nybble, minor in low nybble)
  5542.  2Ah    BYTE    BWNFS revision
  5543.  2Bh    BYTE    Telnet version (major in high nybble, minor in low nybble)
  5544.  2Ch    BYTE    Telnet revision
  5545.  2Dh    BYTE    NETBIOS version (major in high nybble, minor in low nybble)
  5546.  2Eh    BYTE    NETBIOS revision
  5547. Note:    for each driver, if version=0, the driver is not installed or does
  5548.       not support the version check
  5549.  
  5550. Format of BW-TCP server records:
  5551. Offset    Size    Description    (Table 0531)
  5552.  00h    BYTE    number of server records following
  5553.  01h  N DWORDs    internet addresses of servers
  5554. --------y-213F-------------------------------
  5555. INT 21 - Trusted Access - NB.SYS - GET STATE
  5556.     AH = 3Fh
  5557.     BX = file handle for device "$$NB$$NB"
  5558.     CX = 0002h (size of state)
  5559.     DS:DX -> buffer for state record (see #0532)
  5560. Return: CF clear if successful
  5561.         AX = number of bytes actually read (0 if at EOF before call)
  5562.     CF set on error
  5563.         AX = error code (05h,06h) (see #0770 at AH=59h)
  5564. Program: Trusted Access is a security and access-control package by Lassen
  5565.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  5566.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  5567. SeeAlso: AH=40h"NB.SYS",AX=4101h
  5568.  
  5569. Format of Trusted Access state record:
  5570. Offset    Size    Description    (Table 0532)
  5571.  00h    BYTE    00h off, 01h on
  5572.  01h    BYTE    keys being disabled
  5573.         bit 0: Ctrl-Break
  5574.         bit 1: SysReq
  5575.         bit 2: Ctrl and Alt
  5576.         bit 3: Ctrl-Alt-Del
  5577.         bit 7: all keys (overrides other bits)
  5578. --------D-2140-------------------------------
  5579. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  5580.     AH = 40h
  5581.     BX = file handle
  5582.     CX = number of bytes to write
  5583.     DS:DX -> data to write
  5584. Return: CF clear if successful
  5585.         AX = number of bytes actually written
  5586.     CF set on error
  5587.         AX = error code (05h,06h) (see #0770 at AH=59h)
  5588. Notes:    if CX is zero, no data is written, and the file is truncated or
  5589.       extended to the current position
  5590.     data is written beginning at the current file position, and the file
  5591.       position is updated after a successful write
  5592.     the usual cause for AX < CX on return is a full disk
  5593. BUG:    a write of zero bytes will appear to succeed when it actually failed
  5594.       if the write is extending the file and there is not enough disk
  5595.       space for the expanded file (DOS 5.0-6.0); one should therefore check
  5596.       whether the file was in fact extended by seeking to 0 bytes from
  5597.       the end of the file (INT 21/AX=4202h/CX=0/DX=0)
  5598.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5599. SeeAlso: AH=28h,AH=3Fh,AH=93h,INT 2F/AX=1109h
  5600. --------G-2140-------------------------------
  5601. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  5602.     AH = 40h
  5603.     BX = handle for character device "TDHDEBUG"
  5604.     CX = number of bytes to write
  5605.     DS:DX -> hardware breakpoint command (see #0533)
  5606. Return: CF clear if successful
  5607.         AX = number of bytes actually written
  5608.     CF set on error
  5609.         AX = error code (05h,06h) (see #0770 at AH=59h)
  5610. Note:    results are retrieved by reading from the device
  5611. SeeAlso: AH=3Fh"Turbo Debug"
  5612.  
  5613. Format of Turbo Debugger hardware breakpoint commands:
  5614. Offset    Size    Description    (Table 0533)
  5615.  00h    BYTE    command code
  5616.         00h install interrupt vectors
  5617.         01h get hardware capabilities
  5618.         02h enable hardware breakpoints
  5619.         03h disable hardware breakpoints
  5620.         04h set hardware breakpoint
  5621.         05h clear hardware breakpoint
  5622.         06h set I/O base address and reset hardware
  5623.         07h restore interrupt vectors
  5624. ---command code 00h---
  5625.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  5626.           hardware breakpoint; call with CPU state the same as on
  5627.           the breakpoint except for pushing AX and placing an entry
  5628.           code (FFh if breakout button or breakpoint handle) in AH
  5629. ---command code 04h---
  5630.  01h    BYTE    breakpoint type
  5631.         00h memory read
  5632.         01h memory write
  5633.         02h memory read/write
  5634.         03h I/O read
  5635.         04h I/O write
  5636.         05h I/O read/write
  5637.         06h instruction fetch
  5638.  02h    BYTE    address matching mode (see #0534)
  5639.  03h    DWORD    32-bit linear low address
  5640.  07h    DWORD    32-bit linear high address
  5641.  0Bh    WORD    pass count
  5642.  0Dh    BYTE    data size (01h, 02h, or 04h)
  5643.  0Eh    BYTE    source of matched bus cycle (01h CPU, 02h DMA, 03h either)
  5644.  0Fh    BYTE    data-matching mode (see #0534)
  5645.  10h    DWORD    low data value
  5646.  14h    DWORD    high data value
  5647.  18h    DWORD    data mask specifying which bits of the data are tested
  5648. ---command code 05h---
  5649.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  5650.           04h)
  5651. ---command code 06h---
  5652.  01h    WORD    base address of hardware debugger board
  5653.  
  5654. (Table 0534)
  5655. Values for Turbo Debugger address/data matching mode:
  5656.  00h    match any
  5657.  01h    equal to test value
  5658.  02h    different from test value
  5659.  03h    above test value
  5660.  04h    below test value
  5661.  05h    below or equal to test value
  5662.  06h    above or equal to test value
  5663.  07h    within inclusive range
  5664.  08h    outside specified range
  5665. --------N-2140-------------------------------
  5666. INT 21 - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA
  5667.     AH = 40h
  5668.     BX = handle for character device "$IPCUST"
  5669.     CX = number of bytes to write
  5670.     DS:DX -> buffer for configuration data (AH=3Fh"IPCUST")
  5671. Return: CF clear if successful
  5672.         AX = number of bytes actually written
  5673.     CF set on error
  5674.         AX = error code (05h,06h) (see #0770 at AH=59h)
  5675. Notes:    if less than the entire data is read or written, the next read/write
  5676.       continues where the previous one ended; IOCTL calls AX=4402h and
  5677.       AX=4403h both reset the location at which the next operation starts
  5678.       to zero
  5679.     the data pointer is also reset to zero if the previous read or write
  5680.       reached or exceeded the end of the data, when the current function
  5681.       is read and the previous was write, or vice versa
  5682.     v2.1+ uses a new configuration method, but allows the installation
  5683.       of IPCUST.SYS for backward compatibility with other software which
  5684.       must read the PC/TCP configuration
  5685. SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST"
  5686. --------y-2140-------------------------------
  5687. INT 21 U - Trusted Access - NB.SYS - SET STATE
  5688.     AH = 40h
  5689.     BX = handle for character device "$$NB$$NB"
  5690.     DS:DX -> state record (see #0532)
  5691.     CX ignored
  5692. Return: CF clear if successful
  5693.         AX = number of bytes actually written
  5694.     CF set on error
  5695.         AX = error code (05h,06h) (see #0770 at AH=59h)
  5696. Program: Trusted Access is a security and access-control package by Lassen
  5697.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  5698.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  5699. SeeAlso: AH=3Fh"NB.SYS"
  5700. --------j-214000BX0002-----------------------
  5701. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  5702.     AX = 4000h
  5703.     BX = 0002h
  5704.     CX = 0000h
  5705.     DS:DX = 0000h:0000h
  5706. Return: CF clear if installed
  5707.         AX = CS of resident code
  5708. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  5709.       noises when programs output a bell
  5710. SeeAlso: AX=4001h
  5711. --------j-214001BX0002-----------------------
  5712. INT 21 - FARTBELL.EXE - FORCE NOISE
  5713.     AX = 4001h
  5714.     BX = 0002h
  5715.     CX = 0000h
  5716.     DS:DX = 0000h:0000h
  5717. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  5718.       noises when programs output a bell
  5719. SeeAlso: AX=4000h
  5720. --------D-2141-------------------------------
  5721. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  5722.     AH = 41h
  5723.     DS:DX -> ASCIZ filename (no wildcards, but see below)
  5724.     CL = attribute mask for deletion (server call only, see below)
  5725. Return: CF clear if successful
  5726.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  5727.     CF set on error
  5728.         AX = error code (02h,03h,05h) (see #0770 at AH=59h)
  5729. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  5730.       the filespec must be canonical (as returned by AH=60h), and only
  5731.       files matching the attribute mask in CL are deleted
  5732.     DR-DOS 5.0-6.0 returns error code 03h if invoked via AX=5D00h
  5733.     DOS does not erase the file's data; it merely becomes inaccessible
  5734.       because the FAT chain for the file is cleared
  5735.     deleting a file which is currently open may lead to filesystem
  5736.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  5737.       referencing the deleted file, thus allowing writes to a nonexistant
  5738.       file.
  5739.     under DRDOS and DR Multiuser DOS, this function will fail if the file
  5740.       is currently open
  5741.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5742. BUG:    DR-DOS 3.41 crashes if called via AX=5D00h
  5743. SeeAlso: AH=13h,AX=4301h,AX=4380h,AX=5D00h,AH=60h,AH=71h,AX=F244h
  5744. SeeAlso: INT 2F/AX=1113h
  5745. --------y-214101DXFFFE-----------------------
  5746. INT 21 - SoftLogic Data Guardian - ???
  5747.     AX = 4101h
  5748.     DX = FFFEh
  5749. Return: AX = 0000h if installed
  5750. Note:    resident code sets several internal variables on this call
  5751. SeeAlso: AH=3Fh"NB.SYS",INT 16/AX=FFA3h/BX=0000h
  5752. --------D-2142-------------------------------
  5753. INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION
  5754.     AH = 42h
  5755.     AL = origin of move
  5756.         00h start of file
  5757.         01h current file position
  5758.         02h end of file
  5759.     BX = file handle
  5760.     CX:DX = offset from origin of new file position
  5761. Return: CF clear if successful
  5762.         DX:AX = new file position in bytes from start of file
  5763.     CF set on error
  5764.         AX = error code (01h,06h) (see #0770 at AH=59h)
  5765. Notes:    for origins 01h and 02h, the pointer may be positioned before the
  5766.       start of the file; no error is returned in that case, but subsequent
  5767.       attempts at I/O will produce errors
  5768.     if the new position is beyond the current end of file, the file will
  5769.       be extended by the next write (see AH=40h)
  5770. BUG:    using this method to grow a file from zero bytes to a very large size
  5771.       can corrupt the FAT in some versions of DOS; the file should first
  5772.       be grown from zero to one byte and then to the desired large size
  5773. SeeAlso: AH=24h,INT 2F/AX=1228h
  5774. --------v-214203-----------------------------
  5775. INT 21 - VIRUS - "Shake" - INSTALLATION CHECK
  5776.     AX = 4203h
  5777. Return: AX = 1234h if resident
  5778. SeeAlso: AX=3DFFh,AX=4243h
  5779. --------v-214243-----------------------------
  5780. INT 21 - VIRUS - "Invader" - INSTALLATION CHECK
  5781.     AX = 4243h
  5782. Return: AX = 5678h if resident
  5783. SeeAlso: AX=4203h,AX=4B04h
  5784. --------D-214300-----------------------------
  5785. INT 21 - DOS 2+ - GET FILE ATTRIBUTES
  5786.     AX = 4300h
  5787.     DS:DX -> ASCIZ filename
  5788. Return: CF clear if successful
  5789.         CX = file attributes (see #0535)
  5790.         AX = CX (DR-DOS 5.0)
  5791.     CF set on error
  5792.         AX = error code (01h,02h,03h,05h) (see #0770 at AH=59h)
  5793. Notes:    under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  5794.     under DR-DOS 3.41 and 5.0, attempts to change the subdirectory bit are
  5795.       simply ignored without an error
  5796. BUG:    Windows for Workgroups returns error code 05h (access denied) instead
  5797.       of error code 02h (file not found) when attempting to get the
  5798.       attributes of a nonexistent file.  This causes open() with O_CREAT
  5799.       and fopen() with the "w" mode to fail in Borland C++.
  5800. SeeAlso: AX=4301h,AX=4310h,AH=71h,AH=B6h,INT 2F/AX=110Fh,INT 60/DI=0517h
  5801. --------D-214301-----------------------------
  5802. INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES
  5803.     AX = 4301h
  5804.     CX = new file attributes (see #0535)
  5805.     DS:DX -> ASCIZ filename
  5806. Return: CF clear if successful
  5807.         AX destroyed
  5808.     CF set on error
  5809.         AX = error code (01h,02h,03h,05h) (see #0770 at AH=59h)
  5810. Notes:    will not change volume label or directory attribute bits, but will
  5811.       change the other attribute bits of a directory (the directory
  5812.       bit must be cleared to successfully change the other attributes of a
  5813.       directory, but the directory will not be changed to a normal file as
  5814.       a result)
  5815.     MS-DOS 4.01 reportedly closes the file if it is currently open
  5816.     for security reasons, the Novell NetWare execute-only bit can never
  5817.       be cleared; the file must be deleted and recreated
  5818.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  5819.     DOS 5.0 SHARE will close the file if it is currently open in sharing-
  5820.       compatibility mode, otherwise a sharing violation critical error is
  5821.       generated if the file is currently open
  5822. SeeAlso: AX=4300h,AX=4311h,AH=71h,INT 2F/AX=110Eh
  5823.  
  5824. Bitfields for file attributes:
  5825. Bit(s)    Description    (Table 0535)
  5826.  7    shareable (Novell NetWare)
  5827.  6    unused
  5828.  5    archive
  5829.  4    directory
  5830.  3    volume label
  5831.     execute-only (Novell NetWare)
  5832.  2    system
  5833.  1    hidden
  5834.  0    read-only
  5835. --------D-214302-----------------------------
  5836. INT 21 - DOS 7 (Chicago) - GET VOLUME INFORMATION
  5837.     AX = 4302h
  5838.     details not yet available
  5839. SeeAlso: AH=71h,AH=72h
  5840. --------O-214302-----------------------------
  5841. INT 21 - DR-DOS 3.41+ internal - GET ACCESS RIGHTS
  5842.     AX = 4302h
  5843.     DS:DX -> ASCIZ pathname
  5844. Return: CF clear if successful
  5845.         CX = access rights (see #0536)
  5846.         AX = CX (DR-DOS 5.0)
  5847.     CF set on error
  5848.         AX = error code
  5849. Desc:    Determine which operations the calling program may perform on a
  5850.       specified file without being required to provide a password.
  5851. Notes:    this protection scheme has been coordinated on all current Digital
  5852.       Research/Novell operating systems (DR-DOS 3.41+, DRMDOS 5.x, and
  5853.       FlexOS 2+)
  5854.     this function is documented in DR-DOS 6.0 and corresponds to the
  5855.       "Get/Set File Attributes" function, subfunction 2, documented in
  5856.       Concurrent DOS.
  5857.     only FlexOS actually uses the "execution" bits; DR-DOS 3.41+ treats
  5858.       them as "read" bits.
  5859.     DR-DOS 3.41-5.x only use bits 0-3.  Only DR-DOS 6.0 using a
  5860.       DRMDOS 5.x security system allowing for users and groups uses bits
  5861.       4-11.
  5862. SeeAlso: AX=4303h
  5863.  
  5864. Bitfields for DR-DOS file access rights:
  5865. Bit(s)    Description    (Table 0536)
  5866.  0    owner delete requires password
  5867.  1    owner execution requires password (FlexOS)
  5868.  2    owner write requires password
  5869.  3    owner read requires password
  5870.  4    group delete requires password
  5871.  5    group execution requires password (FlexOS)
  5872.  6    group write requires password
  5873.  7    group read requires password
  5874.  8    world delete requires password
  5875.  9    world execution requires password (FlexOS)
  5876.  10    world write requires password
  5877.  11    world read requires password
  5878. --------O-214303-----------------------------
  5879. INT 21 - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
  5880.     AX = 4303h
  5881.     CX = access rights
  5882.          bits 11-0: access rights (see #0536)
  5883.          bit 15: new password is to be set
  5884.     DS:DX -> ASCIZ pathname
  5885.     [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
  5886. Return: CF clear if successful
  5887.     CF set on error
  5888.         AX = error code
  5889. Notes:    if the file is already protected, the old password must be added after
  5890.       the pathname, separated by a ";"
  5891.     this function is documented in DR-DOS 6.0 and corresponds to the
  5892.       "Get/Set File Attributes" function, subfunction 3, documented in
  5893.       Concurrent DOS.
  5894. SeeAlso: AH=0Fh,AH=17h,AX=4302h"DR-DOS",AX=4305h,AX=4454h
  5895. --------O-214304-----------------------------
  5896. INT 21 U - DR-DOS 5.0-6.0 internal - GET ENCRYPTED PASSWORD
  5897.     AX = 4304h
  5898.     DS:DX -> ASCIZ filename
  5899.     ???
  5900. Return: CF clear if successful
  5901.         CX = AX = 0000h if no password assigned to file
  5902.     CF set on error
  5903.         AX = error code (see #0770 at AH=59h)
  5904. Note:    this function is only supported by DR-DOS 5.0 and 6.0 and DRMDOS 5.1
  5905. SeeAlso: AX=4303h,AX=4305h
  5906. --------O-214305-----------------------------
  5907. INT 21 U - DR-DOS 5.0-6.0 internal - SET EXTENDED FILE ATTRIBUTES
  5908.     AX = 4305h
  5909.     DS:DX -> ASCIZ filename
  5910.     ???
  5911. Return: CF clear if successful
  5912.     CF set on error
  5913.         AX = error code (see #0770 at AH=59h)
  5914. Desc:    this function allows the extended attributes, and optionally the
  5915.       encrypted password, of a file to be set.
  5916. Note:    this function is only supported by DR-DOS 5.0 and 6.0 and DRMDOS 5.1
  5917. SeeAlso: AX=4304h,AX=4311h
  5918. --------O-214306-----------------------------
  5919. INT 21 - DR-DOS 6.0 - GET FILE OWNER
  5920.     AX = 4306h
  5921.     DS:DX -> ASCIZ filename
  5922. Return: CF clear if successful
  5923.         AX = CX = value set with AX=4307h
  5924.     CF set on error
  5925.         AX = error code (see #0770 at AH=59h)
  5926. SeeAlso: AX=4307h
  5927. --------O-214307-----------------------------
  5928. INT 21 - DR-DOS 6.0 - SET FILE OWNER
  5929.     AX = 4307h
  5930.     CX = ??? (owner identification number?)
  5931.     DS:DX -> ASCIZ filename
  5932. Return: CF clear if successful
  5933.     CF set on error
  5934.         AX = error code (see #0770 at AH=59h)
  5935. SeeAlso: AX=4306h
  5936. --------N-214310-----------------------------
  5937. INT 21 - Banyan VINES 2.1+ - GET EXTENDED FILE ATTRIBUTES
  5938.     AX = 4310h
  5939.     DS:DX -> ASCIZ filename
  5940. Return: CF clear if successful
  5941.         CH = attributes (see #0537)
  5942.     CF set on error
  5943.         AX = error code (01h,02h,03h,05h) (see #0770 at AH=59h)
  5944. Note:    the filename may be a directory but must be on a VINES file service
  5945. SeeAlso: AX=4300h,AX=4311h,AH=B6h,INT 2F/AX=110Fh
  5946. --------N-214311-----------------------------
  5947. INT 21 - Banyan VINES 2.1+ - SET EXTENDED FILE ATTRIBUTES
  5948.     AX = 4311h
  5949.     CH = new attributes (see #0537)
  5950.     DS:DX -> ASCIZ filename
  5951. Return: CF clear if successful
  5952.     CF set on error
  5953.         AX = error code (01h,02h,03h,05h) (see #0770 at AH=59h)
  5954. Note:    the filename may be a directory but must be on a VINES file service
  5955. SeeAlso: AX=4301h,AX=4305h,AX=4310h,INT 2F/AX=110Eh
  5956.  
  5957. Bitfields for VINES extended file attributes:
  5958. Bit(s)    Description    (Table 0537)
  5959.  7    unused
  5960.  6    shareable
  5961.  5    execute-only
  5962.  4-0    unused
  5963. --------O-214380-----------------------------
  5964. INT 21 - Novell DOS 7 - UNDELETE PENDING DELETE FILE
  5965.     AX = 4380h
  5966.     ???
  5967. Return: ???
  5968. SeeAlso: AH=41h,AX=4381h
  5969. --------O-214381-----------------------------
  5970. INT 21 - Novell DOS 7 - PURGE PENDING DELETE FILE
  5971.     AX = 4381h
  5972.     ???
  5973. Return: ???
  5974. SeeAlso: AH=41h,AX=4380h
  5975. --------D-214400-----------------------------
  5976. INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
  5977.     AX = 4400h
  5978.     BX = handle
  5979. Return: CF clear if successful
  5980.         DX = device information word (see #0538)
  5981.         AX destroyed
  5982.     CF set on error
  5983.         AX = error code (01h,05h,06h) (see #0770 at AH=59h)
  5984. Notes:    value in DH corresponds to high byte of device driver's attribute word
  5985.       if handle refers to a character device
  5986.     Novell NetWare reportedly does not return a drive number in bits 5-0
  5987.       for a disk file
  5988. SeeAlso: AX=4401h,INT 2F/AX=122Bh
  5989.  
  5990. Bitfields for device information word:
  5991. Bit(s)    Description    (Table 0538)
  5992.  character device
  5993.   14    device driver can process IOCTL requests (see AX=4402h)
  5994.   13    output until busy supported
  5995.   11    driver supports OPEN/CLOSE calls
  5996.    7    set (indicates device)
  5997.    6    EOF on input
  5998.    5    raw (binary) mode
  5999.    4    device is special (uses INT 29)
  6000.    3    clock device
  6001.    2    NUL device
  6002.    1    standard output
  6003.    0    standard input
  6004.  disk file
  6005.   15    file is remote (DOS 3+)
  6006.   14    don't set file date/time on closing (DOS 3+)
  6007.   11    media not removable
  6008.    8    (DOS 4 only) generate INT 24 if no disk space on write or read past
  6009.       end of file
  6010.    7    clear (indicates file)
  6011.    6    file has not been written
  6012.   5-0    drive number (0 = A:)
  6013. --------D-214401-----------------------------
  6014. INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
  6015.     AX = 4401h
  6016.     BX = handle (must refer to character device)
  6017.     DX = device information word (see #0538)
  6018.         (DH must be zero)
  6019. Return: CF clear if successful
  6020.     CF set on error
  6021.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  6022. SeeAlso: AX=4400h,INT 2F/AX=122Bh
  6023. --------D-214402-----------------------------
  6024. INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL
  6025.     AX = 4402h
  6026.     BX = file handle referencing character device
  6027.     CX = number of bytes to read
  6028.     DS:DX -> buffer
  6029. Return: CF clear if successful
  6030.         AX = number of bytes actually read
  6031.     CF set on error
  6032.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  6033. Note:    format of data is driver-specific (see below for some specific cases)
  6034. SeeAlso: AX=4400h,AX=4403h,AX=4404h,INT 2F/AX=122Bh
  6035. --------N-214402-----------------------------
  6036. INT 21 - Network Driver Interface Specification (NDIS) 2.0.1 - PROTOCOL MANAGER
  6037.     AX = 4402h
  6038.     BX = file handle for device "PROTMAN$"
  6039.     CX = 000Eh (size of request block)
  6040.     DS:DX -> request block (see #0539,#0540,#0541,#0542,#0543,#0547,#0548)
  6041. Return: CF clear if successful
  6042.         AX = number of bytes actually read
  6043.     CF set on error
  6044.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  6045. SeeAlso: AX=4402h"FTPSOFT"
  6046.  
  6047. Format of NDIS request block for GetProtocolManagerInfo:
  6048. Offset    Size    Description    (Table 0539)
  6049.  00h    WORD    01h
  6050.  02h    WORD    returned status (see #0549)
  6051.  04h    DWORD    returned pointer to structure representing parsed user config
  6052.  08h    DWORD    unused
  6053.  0Ch    WORD    returned BCD version of NDIS on which Protocol Manager is based
  6054. SeeAlso: #0540,#0541,#0542,#0543,#0544,#0545,#0546,#0547,#0548
  6055.  
  6056. Format of NDIS request block for RegisterModule:
  6057. Offset    Size    Description    (Table 0540)
  6058.  00h    WORD    02h
  6059.  02h    WORD    returned status (see #0549)
  6060.  04h    DWORD    pointer to module's common characteristics table (see #0550)
  6061.  08h    DWORD    pointer to list of modules to which the module is to be bound
  6062.  0Ch    WORD    unused
  6063. SeeAlso: #0539,#0541,#0542,#0543,#0544,#0545,#0546,#0547,#0548
  6064.  
  6065. Format of NDIS request block for BindAndStart:
  6066. Offset    Size    Description    (Table 0541)
  6067.  00h    WORD    03h
  6068.  02h    WORD    returned status (see #0549)
  6069.  04h    DWORD    caller's virtual address in FailingModules structure
  6070.  08h    DWORD    unused
  6071.  0Ch    WORD    unused
  6072. SeeAlso: #0539,#0540,#0542,#0543,#0544,#0545,#0546,#0547,#0548
  6073.  
  6074. Format of NDIS request block for GetProtocolManagerLinkage:
  6075. Offset    Size    Description    (Table 0542)
  6076.  00h    WORD    04h
  6077.  02h    WORD    returned status (see #0549)
  6078.  04h    DWORD    returned dispatch point
  6079.  08h    DWORD    unused
  6080.  0Ch    WORD    returned protocol manager DS
  6081. Note:    the dispatch point may be called as follows instead of using this IOCTL
  6082.     STACK: WORD  protocol manager DS
  6083.            DWORD pointer to request block
  6084.     Return: AX = returned status
  6085.         STACK popped
  6086. SeeAlso: #0539,#0540,#0541,#0543,#0544,#0545,#0546,#0547,#0548
  6087.  
  6088. Format of NDIS request block for GetProtocolIniPath:
  6089. Offset    Size    Description    (Table 0543)
  6090.  00h    WORD    05h
  6091.  02h    WORD    returned status (see #0549)
  6092.  04h    DWORD    pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
  6093.  08h    DWORD    unused
  6094.  0Ch    WORD    buffer length
  6095. SeeAlso: #0539,#0540,#0541,#0542,#0544,#0545,#0546,#0547,#0548
  6096.  
  6097. Format of NDIS request block for RegisterProtocolManagerInfo:
  6098. Offset    Size    Description    (Table 0544)
  6099.  00h    WORD    06h
  6100.  02h    WORD    returned status (see #0549)
  6101.  04h    DWORD    pointer to structure containing parsed user config file
  6102.  08h    DWORD    unused
  6103.  0Ch    WORD    length of structure
  6104. SeeAlso: #0539,#0540,#0541,#0542,#0543,#0545,#0546,#0547,#0548
  6105.  
  6106. Format of NDIS request block for InitAndRegister:
  6107. Offset    Size    Description    (Table 0545)
  6108.  00h    WORD    07h
  6109.  02h    WORD    returned status (see #0549)
  6110.  04h    DWORD    unused
  6111.  08h    DWORD    poitner to ASCIZ name of the module to be prebind initialized
  6112.  0Ch    WORD    unused
  6113. SeeAlso: #0539,#0540,#0541,#0542,#0543,#0544,#0546,#0547,#0548
  6114.  
  6115. Format of NDIS request block for UnbindAndStop:
  6116. Offset    Size    Description    (Table 0546)
  6117.  00h    WORD    08h
  6118.  02h    WORD    returned status (see #0549)
  6119.  04h    DWORD    failing modules as for BindAndStart
  6120.  08h    DWORD    if not 0000h:0000h, pointer to ASCIZ name of module to unbind
  6121.         if 0000h:0000h, terminate a set of previously dynamically
  6122.           bound protocol modules
  6123.  0Ch    WORD    unused
  6124. SeeAlso: #0539,#0540,#0541,#0542,#0543,#0544,#0545,#0547,#0548
  6125.  
  6126. Format of NDIS request block for BindStatus:
  6127. Offset    Size    Description    (Table 0547)
  6128.  00h    WORD    09h
  6129.  02h    WORD    returned status (see #0549)
  6130.  04h    DWORD    must be 0000h:0000h
  6131.         on return, points to root tree
  6132.  08h    DWORD    0000h:0000h
  6133.  0Ch    WORD    unused under DOS
  6134. SeeAlso: #0539,#0540,#0541,#0542,#0543,#0544,#0545,#0546,#0548
  6135.  
  6136. Format of NDIS request block for RegisterStatus:
  6137. Offset    Size    Description    (Table 0548)
  6138.  00h    WORD    0Ah
  6139.  02h    WORD    returned status (0000h, 0008h, 002Ch) (see #0549)
  6140.  04h    DWORD    0000h:0000h
  6141.  08h    DWORD    pointer to 16-byte ASCIZ module name
  6142.  0Ch    WORD    0000h
  6143. Note:    not supported by the 10NET v5.0 PROTMAN$ driver
  6144. SeeAlso: #0539,#0540,#0541,#0542,#0543,#0544,#0545,#0546,#0547
  6145.  
  6146. (Table 0549)
  6147. Values for NDIS status code:
  6148.  0000h    success
  6149.  0001h    wait for release--protocol has retained control of the data buffer
  6150.  0002h    request queued
  6151.  0003h    frame not recognized
  6152.  0004h    frame rejected
  6153.  0005h    frame should be forwarded
  6154.  0006h    out of resource
  6155.  0007h    invalid parameter
  6156.  0008h    invalid function
  6157.  0009h    not supported
  6158.  000Ah    hardware error
  6159.  000Bh    transmit error
  6160.  000Ch    unrecognized destination
  6161.  000Dh    buffer too small
  6162.  0020h    already started
  6163.  0021h    binding incomplete
  6164.  0022h    driver not initialized
  6165.  0023h    hardware not found
  6166.  0024h    hardware failure
  6167.  0025h    configuration failure
  6168.  0026h    interrupt conflict
  6169.  0027h    MAC incompatible
  6170.  0028h    initialization failed
  6171.  0029h    no binding
  6172.  002Ah    network may be disconnected
  6173.  002Bh    incompatible OS version
  6174.  002Ch    already registered
  6175.  002Dh    path not found
  6176.  002Eh    insufficient memory
  6177.  002Fh    info not found
  6178.  00FFh    general failure
  6179.  F000h-FFFFh reserved for vendor-specific codes, treated as general failure
  6180.  
  6181. Format of NDIS common characteristics table:
  6182. Offset    Size    Description    (Table 0550)
  6183.  00h    WORD    size of table in bytes
  6184.  02h    BYTE    NDIS major version
  6185.  03h    BYTE    NDIS minor version
  6186.  04h    WORD    reserved
  6187.  06h    BYTE    module major version
  6188.  07h    BYTE    module minor version
  6189.  08h    DWORD    module function flag bits
  6190.         bit 0: binding at upper boundary supported
  6191.         bit 1: binding at lower boundary supported
  6192.         bit 2: dynamically bound
  6193.         bits 3-31 reserved, must be 0
  6194.  0Ch 16 BYTEs    ASCIZ module name
  6195.  1Ch    BYTE    upper boundary protocol level (see #0551)
  6196.  1Dh    BYTE    upper boundary interface type
  6197.         for MACs: 1 = MAC
  6198.         for data links and transports: to be defined
  6199.         for session: 1 = NCB
  6200.         any level: 0 = private (ISV-defined)
  6201.  1Eh    BYTE    lower boundary protocol level (see #0551)
  6202.  1Fh    BYTE    lower boundary interface type
  6203.         same as offset 1Dh
  6204.  20h    WORD    module ID filled in by protocol manager
  6205.  22h    WORD    module DS
  6206.  24h    DWORD    system request entry point
  6207.  28h    DWORD    pointer to service-specific characteristics (see #0553,#0555)
  6208.         0000h:0000h if none
  6209.  2Ch    DWORD    pointer to service-specific status, or 0000h:0000h if none
  6210.  30h    DWORD    pointer to upper dispatch table (see #0552)
  6211.         0000h:0000h if none
  6212.  34h    DWORD    pointer to lower dispatch table (see #0552)
  6213.         0000h:0000h if none
  6214.  38h  2 DWORDs    reserved, must be 0
  6215. Note:    for compatibility with NDIS 1.x.x, a major version of 00h is
  6216.       interpreted as 01h
  6217.  
  6218. (Table 0551)
  6219. Values for NDIS boundary protocol level:
  6220.  00h    physical
  6221.  01h    Media Access Control
  6222.  02h    Data link
  6223.  03h    network
  6224.  04h    transport
  6225.  05h    session
  6226.  FFh    not specified
  6227.  
  6228. Format of NDIS dispatch table:
  6229. Offset    Size    Description    (Table 0552)
  6230.  00h    DWORD    -> common characteristics table (see #0550)
  6231.  04h  4 BYTEs    ???
  6232.  08h    DWORD    -> ??? function (called with 12 bytes of stack arguments)
  6233.  0Ch    DWORD    -> ??? function (called with 10 bytes of stack arguments)
  6234.  10h    DWORD    -> ??? function (called with 16 bytes of stack arguments)
  6235.  14h    DWORD    -> ??? function (called with 4 bytes of stack arguments)
  6236.  18h    DWORD    -> ??? function (called with 18 bytes of stack arguments)
  6237.  1Ch    DWORD    -> ??? function (called with 12 bytes of stack arguments)
  6238.  
  6239. Format of MAC Service-Specific Characteristics Table:
  6240. Offset    Size    Description    (Table 0553)
  6241.  00h    WORD    length of table in bytes
  6242.  02h 16 BYTEs    ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX",
  6243.           "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC",
  6244.           "HDLC", or "ISDN"
  6245.  12h    WORD    length of station addresses in bytes
  6246.  14h 16 BYTEs    permanent station address
  6247.  24h 16 BYTEs    current station address
  6248.  34h    DWORD    current functional adapter address (00000000h if none)
  6249.  38h    DWORD    pointer to multicast address list
  6250.  3Ch    DWORD    link speed in bits/sec
  6251.  40h    DWORD    service flags (see #0554)
  6252.  44h    WORD    maximum frame size which may be both sent and received
  6253.  46h    DWORD    total transmit buffer capacity in bytes
  6254.  4Ah    WORD    transmit buffer allocation block size in bytes
  6255.  4Ch    DWORD    total receive buffer capacity in bytes
  6256.  50h    WORD    receive buffer allocation block size in bytes
  6257.  52h  3 BYTEs    IEEE vendor code
  6258.  55h    BYTE    vendor adapter code
  6259.  56h    DWORD    pointer to ASCIZ vendor adapter description
  6260.  5Ah    WORD    IRQ used by adapter
  6261.  5Ch    WORD    transmit queue depth
  6262.  5Eh    WORD    maximum supported number of data blocks in buffer descriptors
  6263.  60h  N BYTEs    vendor-specific info
  6264.  
  6265. Bitfields for service flags:
  6266. Bit(s)    Description    (Table 0554)
  6267.  0    supports broadcast
  6268.  1    supports multicast
  6269.  2    supports functional/group addressing
  6270.  3    supports promiscuous mode
  6271.  4    station address software settable
  6272.  5    statistics always current
  6273.  6    supports InitiateDiagnostics
  6274.  7    supports loopback
  6275.  8    MAC does primarily ReceiveChain indications instead of ReceiveLookahead
  6276.     indications
  6277.  9    supports IBM source routing
  6278.  10    supports MAC reset
  6279.  11    supports Open/Close adapter
  6280.  12    supports interrupt request
  6281.  13    supports source routing bridge
  6282.  14    supports GDT virtual addresses (OS/2 version)
  6283.  15    multiple TransferDatas allowed durign a single indication
  6284.  16    MAC normally sets FrameSize = 0 in ReceiveLookahead
  6285.  17-31    reserved, must be 0
  6286.  
  6287. Format of NetBIOS Service-Specific Characteristics Table:
  6288. Offset    Size    Description    (Table 0555)
  6289.  00h    WORD    length of table in bytes
  6290.  02h 16 BYTEs    ASCIZ type name of NetBIOS module
  6291.  12h    WORD    NetBIOS module code
  6292.  14h  N BYTEs    vendor-specific info
  6293.  
  6294. Format of MAC Service-Specific Status Table:
  6295. Offset    Size    Description    (Table 0556)
  6296.  00h    WORD    length of table in bytes
  6297.  02h    DWORD    seconds since 0:00 1/1/70 when diagnostics last run
  6298.         (FFFFFFFFh = never)
  6299.  06h    DWORD    MAC status bits (see #0557)
  6300.  0Ah    WORD    current packet filter flags (see #0558)
  6301.  0Ch    DWORD    pointer to media-specific status table or 0000h:0000h
  6302.  10h    DWORD    seconds past 0:00 1/1/70 of last ClearStatistics
  6303.  14h    DWORD    total frames received (FFFFFFFFh = not counted)
  6304.  18h    DWORD    frames with CRC error (FFFFFFFFh = not counted)
  6305.  1Ch    DWORD    total bytes received (FFFFFFFFh = not counted)
  6306.  20h    DWORD    frames discarded--no buffer space (FFFFFFFFh = not counted)
  6307.  24h    DWORD    multicast frames received (FFFFFFFFh = not counted)
  6308.  28h    DWORD    broadcast frames received (FFFFFFFFh = not counted)
  6309.  2Ch    DWORD    frames with errors (FFFFFFFFh = not counted)
  6310.  30h    DWORD    overly large frames (FFFFFFFFh = not counted)
  6311.  34h    DWORD    frames less than minimum size (FFFFFFFFh = not counted)
  6312.  38h    DWORD    multicast bytes received (FFFFFFFFh = not counted)
  6313.  3Ch    DWORD    broadcast bytes received (FFFFFFFFh = not counted)
  6314.  40h    DWORD    frames discarded--hardware error (FFFFFFFFh = not counted)
  6315.  44h    DWORD    total frames transmitted (FFFFFFFFh = not counted)
  6316.  48h    DWORD    total bytes transmitted (FFFFFFFFh = not counted)
  6317.  4Ch    DWORD    multicast frames transmitted (FFFFFFFFh = not counted)
  6318.  50h    DWORD    broadcast frames transmitted (FFFFFFFFh = not counted)
  6319.  54h    DWORD    broadcast bytes transmitted (FFFFFFFFh = not counted)
  6320.  58h    DWORD    multicast bytes transmitted (FFFFFFFFh = not counted)
  6321.  5Ch    DWORD    frames not transmitted--timeout (FFFFFFFFh = not counted)
  6322.  60h    DWORD    frames not transmitted--hardware error (FFFFFFFFh = not countd)
  6323.  64h  N BYTEs    vendor-specific info
  6324.  
  6325. Bitfields for MAC status bits:
  6326. Bit(s)    Description    (Table 0557)
  6327.  0-2    operational status
  6328.     000 hardware not installed
  6329.     001 hardware failed startup diagnostics
  6330.     010 hardware configuration problem
  6331.     011 hardware fault
  6332.     100 operating marginally due to soft faults
  6333.     101 reserved
  6334.     110 reserved
  6335.     111 hardware fully operational
  6336.  3    MAC bound
  6337.  4    MAC open
  6338.  5    diagnostics in progress
  6339.  6-31    reserved
  6340.  
  6341. Bitfields for packet filter flags:
  6342. Bit(s)    Description    (Table 0558)
  6343.  0    directed/multicast or group/functional
  6344.  1    broadcast
  6345.  2    promiscuous
  6346.  3    all source routing
  6347.  4-15    reserved, must be zero
  6348. --------I-214402-----------------------------
  6349. INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
  6350.     AX = 4402h
  6351.     BX = handle for character device "GDMS"
  6352.     CX = number of bytes to read (>= 4)
  6353.     DS:DX -> buffer (see #0559)
  6354. Return: CF set on error
  6355.         AX = error code (see #0770 at AH=59h)
  6356.     CF clear if successful
  6357.         AX = number of bytes read
  6358.  
  6359. Format of System 36/38 emulator returned data:
  6360. Offset    Size    Description    (Table 0559)
  6361.  00h  4 BYTEs    ???
  6362.  04h    DWORD    pointer to ???
  6363.  08h  4 BYTEs    ???
  6364. --------m-214402-----------------------------
  6365. INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE
  6366.     AX = 4402h
  6367.     BX = handle for device "LA$TBYTE"
  6368.     CX = 0004h
  6369.     DS:DX -> DWORD to hold address of 39-byte table of ???
  6370. Return: CF set on error
  6371.         AX = error code (see #0770 at AH=59h)
  6372.     CF clear if successful
  6373.         AX = number of bytes read
  6374. Program: LASTBYTE.SYS is part of the shareware "The Last Byte" memory
  6375.       management package by Key Software Products
  6376. SeeAlso: AX=4402h"HIGHUMM"
  6377. --------m-214402-----------------------------
  6378. INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS
  6379.     AX = 4402h
  6380.     BX = handle for device "KSP$UMM"
  6381.     CX = 0004h
  6382.     DS:DX -> DWORD to hold entry point
  6383. Return: CF set on error
  6384.         AX = error code (see #0770 at AH=59h)
  6385.     CF clear if successful
  6386.         AX = number of bytes read
  6387. Program: HIGHUMM.SYS is part of the shareware "The Last Byte" memory management
  6388.       package by Key Software Products
  6389. SeeAlso: AX=4402h"LASTBYTE"
  6390.  
  6391. (Table 0560)
  6392. Call HIGHUMM.SYS entry point with:
  6393.     AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h)
  6394.         DX = size in paragraphs
  6395.         Return: BX = segment number (if successful)
  6396.             DX = size of requested block/size of largest block
  6397.     AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h)
  6398.         DX = segment number of UMB
  6399.     AH = 02h request a bank-switched memory block
  6400.         DX = size in paragraphs
  6401.         Return: BX = segment number (if successful)
  6402.             DX = size of requested block/size of largest block
  6403.     AH = 03h release a bank-switched memory block
  6404.         DX = segment number
  6405.     AH = 04h transfer data to/from high memory
  6406.         DS:SI -> source
  6407.         ES:DI -> destination
  6408.         CX = length in bytes
  6409.         Note: enables bank-switched memory, does the copy, then disables
  6410.         bank-switched memory
  6411.     AH = 05h get a word from bank-switched memory
  6412.         ES:DI -> word to read
  6413.         Return: DX = word
  6414.     AH = 06h put a word to bank-switched memory
  6415.         ES:DI -> word to write
  6416.         DX = word
  6417.     AH = 07h put a byte to bank-switched memory
  6418.         ES:DI -> byte to write
  6419.         DL = byte
  6420.     AH = 08h enable bank-switched memory
  6421.         DS:SI -> 6-byte status save area
  6422.     AH = 09h disable bank-switched memory
  6423.         DS:SI -> 6-byte save area from enable call (AH=08h)
  6424.     AH = 0Ah assign name to UMB or high bank-switched block
  6425.         DX = segment number
  6426.         DS:SI -> 8-byte blank-padded name
  6427.     AH = 0Bh locate UMB block by name
  6428.         DS:SI -> 8-byte blank-padded name
  6429.         Return: BX = segment number (if successful)
  6430.             DX = size of block
  6431.     AH = 0Ch locate bank-switched block by name
  6432.         DS:SI -> 8-byte blank-padded name
  6433.         Return: BX = segment number (if successful)
  6434.             DX = size of block
  6435. Return: AX = status code
  6436.         0001h successful
  6437.         0000h failed
  6438.         BL = error code
  6439.             80h not implemented
  6440.             B0h insufficient memory, smaller block available
  6441.             B1h insufficient memory, no blocks available
  6442.             B2h invalid segment number
  6443. Note:    only functions 00h and 01h are always available; the remaining
  6444.       functions are only enabled if the proper commandline switch is given
  6445. --------c-214402-----------------------------
  6446. INT 21 - SMARTDRV.SYS v3.x only - IOCTL - GET CACHE STATUS
  6447.     AX = 4402h
  6448.     BX = file handle for device "SMARTAAR"
  6449.     CX = number of bytes to read (min 28h)
  6450.     DS:DX -> buffer for status record (see #0561)
  6451. Return: CF clear if successful
  6452.         AX = number of bytes actually read
  6453.     CF set on error
  6454.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  6455. SeeAlso: AX=4403h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
  6456.  
  6457. Format of SMARTDRV status record:
  6458. Offset    Size    Description    (Table 0561)
  6459.  00h    BYTE    write-through flag (always 01h)
  6460.  01h    BYTE    writes should be buffered (always 00h)
  6461.  02h    BYTE    cache enabled if 01h
  6462.  03h    BYTE    driver type (01h extended memory, 02h expanded)
  6463.  04h    WORD    clock ticks between cache flushes (currently unused)
  6464.  06h    BYTE    cache contains locked tracks if nonzero
  6465.  07h    BYTE    flush cache on INT 19 reboot if nonzero
  6466.  08h    BYTE    cache full track writes if nonzero
  6467.  09h    BYTE    double buffering (for VDS) state (00h off, 01h on, 02h dynamic)
  6468.  0Ah    DWORD    original INT 13 vector
  6469.  0Eh    BYTE    minor version number
  6470.  0Fh    BYTE    major version number
  6471.  10h    WORD    unused
  6472.  12h    WORD    sectors read            \
  6473.  14h    WORD    sectors already in cache     > may be scaled rather than
  6474.  16h    WORD    sectors already in track buffer /  absolute counts
  6475.  18h    BYTE    cache hit rate in percent
  6476.  19h    BYTE    track buffer hit rate in percent
  6477.  1Ah    WORD    total tracks in cache
  6478.  1Ch    WORD    number of tracks in use
  6479.  1Eh    WORD    number of locked tracks
  6480.  20h    WORD    number of dirty tracks
  6481.  22h    WORD    current cache size in 16K pages
  6482.  24h    WORD    original (maximum) cache size in 16K pages
  6483.  26h    WORD    minimum cache size in 16K pages
  6484.  28h    DWORD    pointer to byte flag to increment for locking cache contents
  6485. --------d-214402-----------------------------
  6486. INT 21 - CD-ROM device driver - IOCTL INPUT
  6487.     AX = 4402h
  6488.     BX = file handle referencing character device for CD-ROM driver
  6489.     CX = number of bytes to read
  6490.     DS:DX -> control block (see #0563)
  6491. Return: CF clear if successful
  6492.         AX = number of bytes actually read
  6493.     CF set on error
  6494.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  6495. Note:    the data returned depends on the first byte of the control block; the
  6496.       remainder of the control block is filled by the driver
  6497. SeeAlso: AX=4403h"CD-ROM",INT 2F/AX=0802h
  6498.  
  6499. (Table 0562)
  6500. Values for CD-ROM data being requested:
  6501.  00h    device driver header address
  6502.  01h    drive head location
  6503.  02h    reserved
  6504.  03h    error statistics
  6505.  04h    audio channel info
  6506.  05h    raw drive bytes (uninterpreted and device-specific)
  6507.  06h    device status
  6508.  07h    sector size
  6509.  08h    volume size
  6510.  09h    media change status
  6511.  0Ah    audio disk info
  6512.  0Bh    audio track info
  6513.  0Ch    audio Q-Channel info
  6514.  0Dh    audio sub-channel info
  6515.  0Eh    UPC code
  6516.  
  6517. Format of CD-ROM control block:
  6518. Offset    Size    Description    (Table 0563)
  6519.  00h    BYTE    data being requested (see #0562)
  6520. ---function 00h---
  6521.  01h    DWORD    device driver header address (see also AH=52h)
  6522. ---function 01h---
  6523.  01h    BYTE    addressing mode
  6524.         00h HSG
  6525.         01h Red Book
  6526.  02h    DWORD    current location of drive's head
  6527.         logical sector number in HSG mode
  6528.         frame/second/minute/unused in Red Book mode
  6529.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  6530. ---function 03h---
  6531.  01h  N BYTEs    undefined as of 5 Aug 88 specification
  6532. ---function 04h---
  6533.  01h    BYTE    input channel (0-3) for output channel 0
  6534.  02h    BYTE    volume for output channel 0
  6535.  03h    BYTE    input channel (0-3) for output channel 1
  6536.  04h    BYTE    volume for output channel 1
  6537.  05h    BYTE    input channel (0-3) for output channel 2
  6538.  06h    BYTE    volume for output channel 2
  6539.  07h    BYTE    input channel (0-3) for output channel 3
  6540.  08h    BYTE    volume for output channel 3
  6541. Notes:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  6542.       right prime; a volume of 00h is off
  6543.     the default setting is for each input channel to be assigned to the
  6544.       same-numbered output channel at full (FFh) volume
  6545. ---function 05h---
  6546.  01h    BYTE    number of bytes read
  6547.  02h 128 BYTEs    buffer for drive bytes
  6548. ---function 06h---
  6549.  01h    DWORD    device parameters (see #0564)
  6550. ---function 07h---
  6551.  01h    BYTE    read mode
  6552.         00h cooked
  6553.         01h raw
  6554.  02h    WORD    sector size in bytes
  6555. ---function 08h---
  6556.  01h    DWORD    volume size in sectors
  6557. ---function 09h---
  6558.  01h    BYTE    media change status
  6559.         00h don't know
  6560.         01h media unchanged
  6561.         FFh media has been changed
  6562. ---function 0Ah---
  6563.  01h    BYTE    lowest audio track number
  6564.  02h    BYTE    highest audio track number
  6565.  03h    DWORD    start address of lead-out track (Red Book format)
  6566. --function 0Bh---
  6567.  01h    BYTE    track number (set by caller)
  6568.  02h    DWORD    starting point of track (Red Book format)
  6569.  06h    BYTE    track control info
  6570.         bits 15,14,12: track type (notice: bits not contiguous!)
  6571.             000 two audio channels, no pre-emphasis
  6572.             001 two audio channels with pre-emphasis
  6573.             010 data track
  6574.             100 four audio channels, no pre-emphasis
  6575.             101 four audio channels with pre-emphasis
  6576.             other reserved
  6577.         bit 13: digital copy permitted
  6578. ---function 0Ch---
  6579.  01h    BYTE    CONTROL and ADR byte (as received from drive)
  6580.  02h    BYTE    track number
  6581.  03h    BYTE    point or index
  6582.  04h    BYTE    minute    \
  6583.  05h    BYTE    second     > running time within track
  6584.  06h    BYTE    frame    /
  6585.  07h    BYTE    zero
  6586.  08h    BYTE    "AMIN" or "PMIN"     \
  6587.  09h    BYTE    "ASEC" or "PSEC"      > running time on disk
  6588.  0Ah    BYTE    "AFRAME" or "PFRAME" /
  6589. ---function 0Dh---
  6590.  01h    DWORD    starting frame address (Red Book format)
  6591.  05h    DWORD    transfer address
  6592.  09h    DWORD    number of sectors to read
  6593. Note:    copies 96 bytes of sub-channel info per sector into buffer
  6594. ---function 0Eh---
  6595.  01h    BYTE    CONTROL and ADR byte
  6596.  02h  7 BYTEs    UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0)
  6597.  09h    BYTE    zero
  6598.  0Ah    BYTE    "AFRAME"
  6599.  
  6600. Bitfields for CD-ROM device parameters:
  6601. Bit(s)    Description    (Table 0564)
  6602.  0    door open
  6603.  1    door unlocked
  6604.  2    supports raw reading in addition to cooked
  6605.  3    writable
  6606.  4    can play audio/video tracks
  6607.  5    supports interleaving
  6608.  6    reserved
  6609.  7    supports prefetch requests
  6610.  8    supports audio channel control
  6611.  9    supports Red Book addressing in addition to HSG
  6612.  10    audio is playing
  6613. --------m-214402-----------------------------
  6614. INT 21 - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT
  6615.     AX = 4402h
  6616.     BX = file handle for device "QEMM386$"
  6617.     CX = 0004h
  6618.     DS:DX -> DWORD buffer for API entry point
  6619. Return: CF clear if successful
  6620.         buffer filled (see INT 67/AH=3Fh for entry point parameters)
  6621.     CF set on error
  6622.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  6623. Note:    Quarterdeck recently (June 1993) documented this function, but the
  6624.       documentation incorrectly states that it is only available for
  6625.       QEMM 6+
  6626. SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  6627. --------Q-214402-----------------------------
  6628. INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
  6629.     AX = 4402h
  6630.     BX = file handle for device "HOOKROM$"
  6631.     CX = 0004h
  6632.     DS:DX -> DWORD buffer for address of hooked vector table (see #0565)
  6633. Return: CF clear if successful
  6634.         DS:DX buffer filled
  6635.     CF set on error
  6636.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  6637. SeeAlso: AX=4402h/SF=01h
  6638.  
  6639. Format of HOOKROM.SYS hooked vector table entry:
  6640. Offset    Size    Description    (Table 0565)
  6641.  00h  5 BYTEs    FAR jump to actual interrupt handler
  6642.         (end of table if first byte is not EAh)
  6643.  05h    BYTE    interrupt vector number
  6644. --------d-214402-----------------------------
  6645. INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE
  6646.     AX = 4402h
  6647.     BX = file handle for device "SCSIMGR$"
  6648.     CX = 0004h or 0005h (see notes)
  6649.     DS:DX -> buffer for result (see #0566), set to zeros before call
  6650. Return: CF clear if successful
  6651.         AX = 0004h or 0005h (see notes)
  6652.     CF set on error
  6653.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  6654. Note:    the variant of the call requesting five bytes is an UNDOCUMENTED
  6655.       extension supported by Adaptec's ASPI2DOS.SYS, ASPI4DOS.SYS, and
  6656.       ASPI7DOS.SYS; if made of a host manager which does not support the
  6657.       variant, only four bytes will be returned.  If the variant is
  6658.       supported, Adaptec's WINASPI.DLL assumes that the host manager is
  6659.       an "advanced" one which operates in either real or protected mode
  6660.       (and thus does not require a DPMI INT 31/AX=0301h call to be invoked
  6661.       from protected mode).     Support of the five-byte variant also appears
  6662.       to imply that an advanced ASPI host manager uses no temporary storage
  6663.       space except the SRB and the stack, and that it is fully reentrant.
  6664.     if called with a standard request for four bytes, even Adaptec's
  6665.       advanced drivers return only the requested four bytes containing the
  6666.       ASPI entry point address
  6667.     the function address is called with the address of a SCSI Request
  6668.       Block on the stack and the caller must clean up the stack
  6669. SeeAlso: AX=440Ch"ASPITAPE",INT 11/AH=FFh"WD7000"
  6670.  
  6671. Format of ASPI IOCTL result:
  6672. Offset    Size    Description    (Table 0566)
  6673.  00h    DWORD    function address
  6674.  04h    BYTE    number of SCSI host adapters supported by host manager
  6675.  
  6676. (Table 0567)
  6677. Values for ASPI request number:
  6678.  00h    "HA_INQ"    host adapter inquiry
  6679.  01h    "GET_TYPE"    get device type
  6680.  02h    "EXEC_SIO"    execute SCSI I/O
  6681.  03h    "ABORT_SRB"    abort SRB
  6682.  04h    "RESET_DEV"    reset SCSI device
  6683.  05h    "SET_HAPRMS"    set host adapter parameters
  6684.  06h    get disk drive information
  6685.  
  6686. Format of SCSI Request Block (64 bytes):
  6687. Offset    Size    Description    (Table 0568)
  6688.  00h    BYTE    request number (see #0567)
  6689.  01h    BYTE    request status (see #0569)
  6690.  02h    BYTE    host adapter ID
  6691.  03h    BYTE    request flags (see #0570)
  6692.  04h    DWORD    reserved
  6693. ---request 00h---
  6694.  08h    BYTE    (return) number of host adapters
  6695.  09h    BYTE    (return) target adapter ID
  6696.  0Ah 16 BYTEs    (return) SCSI manager ID
  6697.  1Ah 16 BYTEs    (return) host adapter ID
  6698.  2Ah 16 BYTEs    (return) host adapter-unique parameters
  6699. ---request 01h---
  6700.  08h    BYTE    target ID
  6701.  09h    BYTE    logical unit number
  6702.  0Ah    BYTE    (return) device type (see #0573)
  6703. ---request 02h---
  6704.  08h    BYTE    target ID
  6705.  09h    BYTE    logical unit number
  6706.  0Ah    DWORD    data allocation length
  6707.  0Eh    BYTE    sense allocation length
  6708.  0Fh    DWORD    data buffer pointer
  6709.  13h    DWORD    next request pointer (for linking)
  6710.  17h    BYTE    CDB length
  6711.  18h    BYTE    (return) host adapter status (see #0568)
  6712.  19h    BYTE    (return) target status (see #0572)
  6713.  1Ah    DWORD    post routine address
  6714.  1Eh    WORD    real mode Post DS
  6715.  20h    DWORD    SRB pointer
  6716.  24h    WORD    reserved
  6717.  26h    DWORD    SRB physical address
  6718.  2Ah 22 BYTEs    SCSIMGR$ workspace
  6719.  40h  N BYTEs    CCB, including sense data (20-24 bytes)
  6720. ---request 03h---
  6721.  08h    DWORD    address of SRB to abort
  6722. ---request 04h---
  6723.  08h    BYTE    target ID
  6724.  09h    BYTE    logical unit number
  6725.  0Ah 14 BYTEs    reserved
  6726.  18h    BYTE    (return) host adapter status (see #0571)
  6727.  19h    BYTE    (return) target status (see #0572)
  6728.  1Ah    DWORD    post routine address
  6729.  1Eh 34 BYTEs    workspace
  6730. ---request 05h---
  6731.  08h 16 BYTEs    host adapter-unique parameters
  6732. ---request 06h---
  6733.  08h    BYTE    target ID
  6734.  09h    BYTE    logical unit number
  6735.  0Ah    BYTE    disk drive flags
  6736.  0Bh    BYTE    INT 13h drive number
  6737.  0Ch    BYTE    preferred head number translation
  6738.  0Dh    BYTE    preferred sector size translation
  6739.  0Eh 10 BYTEs    reserved
  6740.  
  6741. (Table 0569)
  6742. Values for ASPI request status:
  6743.  00h    not done yet
  6744.  01h    completed successfully
  6745.  02h    aborted by host
  6746.  04h    SCSI I/O error
  6747.  80h    invalid
  6748.  81h    no adapter
  6749.  82h    no device attached
  6750.  else    status
  6751.  
  6752. Bitfields for ASPI request flags:
  6753. Bit(s)    Description    (Table 0570)
  6754.  0    posting enabled
  6755.  1    linking enabled
  6756.  2    direction
  6757.  3    transfer from SCSI target to host
  6758.  4    transfer from host to SCSI target
  6759. Note:    no data is transferred if both bits 3 and 4 are set
  6760.  
  6761. (Table 0571)
  6762. Values for host adapter status:
  6763.  00h    no error detected
  6764.  11h    select timeout
  6765.  12h    data overrun
  6766.  13h    bus error
  6767.  14h    bus failure
  6768.  
  6769. (Table 0572)
  6770. Values for target status:
  6771.  00h    no status
  6772.  02h    sense data stored in SRB
  6773.  08h    target busy
  6774.  18h    reservation error
  6775.  
  6776. (Table 0573)
  6777. Values for device type:
  6778.  00h    disk drive
  6779.  01h    tape drive (streamer)
  6780.  02h    printer
  6781.  03h    processor
  6782.  04h    WORM drive
  6783.  05h    CD-ROM drive
  6784.  06h    scanner
  6785.  07h    optical drive
  6786.  08h    autochanger
  6787.  09h    communications device
  6788.  
  6789. (Table 0574)
  6790. Values for disk drive flags:
  6791.  00h    no INT 13 access
  6792.  01h    INT 13 with DOS access
  6793.  02h    INT 13 without DOS access
  6794.  03h    invalid flags
  6795.  
  6796. Format of CCB:
  6797. Offset    Size    Description    (Table 0575)
  6798.  00h    BYTE    command code (see #0576)
  6799.  01h    BYTE    flags
  6800.         bits 4-0: vary by function
  6801.         bits 7-5: logical unit number
  6802.  02h    BYTE    "adr_1"
  6803.  03h    BYTE    "adr_0"
  6804.  04h    BYTE    length
  6805.  05h    BYTE    control
  6806.     ...
  6807.  06h/0Ah 14 BYTEs buffer for sense data (see #0577)
  6808.  
  6809. (Table 0576)
  6810. Values for CCB command code:
  6811.  00h    test unit ready
  6812.  01h    rewind
  6813.  03h    request sense data
  6814.  05h    get block size limits
  6815.  08h    Group 0 read
  6816.  0Ah    Group 0 write
  6817.  10h    write file marks
  6818.  11h    SCSI Space (set position?)
  6819.  12h    SCSI Inquire
  6820.  15h    set mode information
  6821.  16h    reserve SCSI device
  6822.  17h    release SCSI device
  6823.  19h    erase
  6824.  1Ah    request mode information
  6825.  1Bh    load/unload media
  6826.  1Dh    request target self-check
  6827.  24h    set window parameters
  6828.  25h    get window parameters
  6829.  28h    Group 1 read
  6830.  2Ah    Group 1 write
  6831.  31h    document feeder control
  6832.  34h    get scan data status
  6833. ---vendor-specific commands---
  6834.  D3h    get document feeder status
  6835.  D4h    set document feeder mode
  6836.  
  6837. Format of sense data:
  6838. Offset    Size    Description    (Table 0577)
  6839.  00h    BYTE    error code (bit 7 set if valid)
  6840.  01h    BYTE    segment number
  6841.  02h    BYTE    sense key
  6842.         bit 6: EOM
  6843.         bit 5: ILI
  6844.         bits 0-3: sense key (see #0578)
  6845.  03h  4 BYTEs    information bytes
  6846.  07h    BYTE    additional sense length (0Ah)
  6847.  08h  4 BYTEs    command-specific information
  6848.  0Ch    BYTE    additional sense code
  6849.  0Dh    BYTE    additional sense code qualifier
  6850.  0Eh    BYTE    field replaceable unit code
  6851.  0Fh  3 BYTEs    sense key specific bytes
  6852.  
  6853. (Table 0578)
  6854. Values for sense key:
  6855.  00h    no sense data
  6856.  02h    SCSI unit not ready
  6857.  03h    media error
  6858.  04h    unrecoverable hardware error
  6859.  05h    illegal parameter in CDB
  6860.  06h    target has been reset
  6861.  0Bh    target aborted command
  6862. --------m-214402-----------------------------
  6863. INT 21 U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE
  6864.     AX = 4402h
  6865.     BX = file handle for device "386MAX$$"
  6866.     CX = number of bytes to read
  6867.     DS:DX -> BYTE 03h followed by 386MAX state buffer (see #0579)
  6868. Return: CF clear if successful
  6869.         buffer at DS:DX+1 filled
  6870.         AX = number of bytes actually copied
  6871.     CF set on error
  6872.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  6873. Notes:    if the value given in CX is less than the size of the state record
  6874.       (5Ah for v6.01, 66h for v7.00), only a partial state record will be
  6875.       returned
  6876.     the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 ("386MAX$$"
  6877.       did not exist yet, use "QMMXXXX0" and then "EMMXXXX0" instead) and
  6878.       56h bytes for v5.11.
  6879.     to invoke 386MAX API functions, push DX onto the stack, load DX with
  6880.       the word at offset 25h in the returned state, load all other
  6881.       registers as needed for the desired function, and execute an
  6882.       OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return
  6883.       if it is not otherwise modified by the API function.    For safety,
  6884.       in case a function is not supported or 386MAX is not present, SP
  6885.       should be saved and restored around the API call.
  6886.     Windows 3.1 Standard mode, LAN Manager, and Windows for Workgroups all
  6887.       use the 386MAX API; LAN Manager and Windows for Workgroups reportedly
  6888.       make some calls incorrectly
  6889. SeeAlso: AX=4403h/SF=03h"386MAX",INT 67/AH=3Fh
  6890.  
  6891. Format of 386MAX v6.01+ state:
  6892. Offset    Size    Description    (Table 0579)
  6893.  -1    BYTE    (call) 03h
  6894.  00h  6 BYTEs    signature "386MAX"
  6895.  06h  4 BYTEs    version string "N;NN" or "N.NN" (i.e. "6;01" for v6.01)
  6896.         (';' by default; apparently changed to a period when 386MAX
  6897.         has linked high RAM into DOS's memory chain)
  6898.  0Ah    WORD    segment of low-memory portion of 386MAX.SYS
  6899.  0Ch  2 BYTEs    ???
  6900.  0Eh    WORD    segment of ??? memory block or 0000h
  6901.  10h    WORD    bit flags 1 (see #0580)
  6902.  12h    WORD    starting address of video memory in KB
  6903.  14h  2 BYTEs    ???
  6904.  16h    WORD    total high DOS memory in KB
  6905.  18h  2 BYTEs    ???
  6906.  1Ah    WORD    available shared memory in KB
  6907.  1Ch    WORD    KBytes extended memory used by 386MAX
  6908.  1Eh  2 BYTEs    ???
  6909.  20h    WORD    total extended memory in KB
  6910.  22h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions
  6911.  24h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX API functions
  6912.  26h    WORD    ??? (depends on DOS version)
  6913.  28h    WORD    size of ??? in paragraphs
  6914.  2Ah    DWORD    machine type (see #0588)
  6915.  2Eh    DWORD    -> first DOS memory control block
  6916.  32h    WORD    system configuration flags (see #0581)
  6917.  34h    WORD    debugging flags 1 (see #0582)
  6918.  36h    WORD    debugging flags 2 (see #0583)
  6919.  38h  2 BYTEs    ???
  6920.  3Ah    WORD    segment of first MCB in high memory chain
  6921.  3Ch    WORD    feature flags 1 (see #0585)
  6922.  3Eh    WORD    feature flags 2 (see #0586)
  6923.  40h    WORD    feature flags 3 (see #0587)
  6924.  42h    WORD    segment of first 386MAX control block??? (see #0589)
  6925.  44h    WORD    amount of memory to report available on INT 15/AH=88h
  6926.  46h  4 BYTEs    ???
  6927.  4Ah    WORD    number of K at start of address space swapped with fast
  6928.           extended memory (SWAP= parameter)
  6929.  4Ch  2 BYTEs    ???
  6930.  4Eh    WORD    segment address of ???
  6931.  50h    WORD    debugging flags 3 (see #0584)
  6932.  52h    DWORD    old INT 21h
  6933.  56h    DWORD    pointer to 386MAX's EMS (INT 67h) handler
  6934. ---386MAX v7.00---
  6935.  5Ah    DWORD    KB of extended memory managed by 386MAX
  6936.  5Eh    DWORD    bytes of extended memory (EXT= parameter)
  6937.  62h  4 BYTEs    ???
  6938.  
  6939. Bitfields for 386MAX bit flags 1:
  6940. Bit(s)    Description    (Table 0580)
  6941.  1    ???
  6942.  2    allow A20 to be enabled/disabled???
  6943.  3    ??? (cleared by calling INT 67 functions or starting MSWindows)
  6944.  4    high RAM present???
  6945.  5    386MAX in AUTO mode
  6946.  6    386MAX enabled
  6947.  7    386MAX is providing EMS services
  6948.  8    ??? (affects API function 08h)
  6949.  9    A20 gate closed (A20 disabled) (see INT 15/AX=2402h)
  6950.  10    Weitek support enabled
  6951.  11    ???
  6952.  12    ROMs not shadowed???
  6953.  13    QPMS has been used
  6954.  14    ???
  6955.  15    ???
  6956.  
  6957. Bitfields for 386MAX system configuration flags:
  6958. Bit(s)    Description    (Table 0581)
  6959.  1    ROM compressed???
  6960.  3    ???
  6961.  5    386MAX loaded into high memory
  6962.  6    Microchannel bus
  6963.  7    Weitek math coprocessor detected
  6964.  9    ??? (also generates INT 01 on ??? and INT 03 on ???)
  6965.  11    PC/XT (thus only single 8259 interrupt controller present, DMA only
  6966.         in 1st megabyte, etc)
  6967.  13    LMLTOP= specified
  6968.  14    enable A20 control???
  6969.  15    ???
  6970.  
  6971. Bitfields for 386MAX debugging flags 1:
  6972. Bit(s)    Description    (Table 0582)
  6973.  0    DEBUG=LED
  6974.  1    DEBUG=X67
  6975.  2    DEBUG=INV
  6976.  3    DEBUG=EMSPTED
  6977.  4    DEBUG=JMP
  6978.  5    DEBUG=CALL
  6979.  6    DEBUG=HLT
  6980.  7    DEBUG=PMR
  6981.  8    DEBUG=CR3
  6982.  9    DEBUG=CAPS or DEBUG=INT
  6983.  10    DEBUG=RC
  6984.  11    DEBUG=ROM
  6985.  12    DEBUG=XM
  6986.  13    DEBUG=SOR
  6987.  14    DEBUG=XR
  6988.  15    DEBUG=EMSERR (generate INT 01 on returning error from EMS call)
  6989.  
  6990. Bitfields for 386MAX debugging flags 2:
  6991. Bit(s)    Description    (Table 0583)
  6992.  0    DEBUG=ROMSWAP
  6993.  1    DEBUG=UNSHADOWROM
  6994.  2    DEBUG=COMPROM
  6995.  3    DEBUG=DPMIPHYS
  6996.  4    DEBUG=ALLROM
  6997.  5    DEBUG=VMS
  6998.  6    DEBUG=XMS (generate INT 01 on XMS calls)
  6999.  7    DEBUG=I06
  7000.  8    DEBUG=VCPI
  7001.  9    DEBUG=XDMA
  7002.  10    DEBUG=X09
  7003.  13    DEBUG=I67 (generate INT 01 on every INT 67 call)
  7004.  14    DEBUG=EVM (generate INT 01 on entering V86 mode)
  7005.  15    DEBUG=EMSSAVE or DEBUG=VDS
  7006.  
  7007. Bitfields for 386MAX debugging flags 3:
  7008. Bit(s)    Description    (Table 0584)
  7009.  10    DEBUG=EPM
  7010.  12    DEBUG=ABIOS
  7011.  13    DEBUG=XMSPTED
  7012.  14    DEBUG=TIME
  7013.  15    DEBUG=SCRUB
  7014.  
  7015. Bitfields for 386MAX feature flags 1:
  7016. Bit(s)    Description    (Table 0585)
  7017.  1    Weitek present
  7018.  2    no DPMI services
  7019.  3    NODMA
  7020.  4    TERSE
  7021.  5    NOROM
  7022.  6    NOPARITY
  7023.  8    NOFLEX (IGNOREFLEXFRAME)
  7024.  11    don't create UMBs
  7025.  12    don't backfill below video memory (NOLOW)
  7026.  13    FRAME= specified
  7027.  14    EXT= specified
  7028.  15    NOEMS, allow prior expanded memory manager to provide EMS
  7029.  
  7030. Bitfields for 386MAX feature flags 2:
  7031. Bit(s)    Description    (Table 0586)
  7032.  0    UNSHIFT specified (FORCEA20 disabled)
  7033.  1    NOXRAM
  7034.  2    NOSCSI specified
  7035.  3    SCREEN specified
  7036.  4    enabled EISADMA
  7037.  5    slow DMA
  7038.  6    RESETKEYB specified
  7039.  7    ???
  7040.  9    TOP384
  7041.  10    ???
  7042.  11    NOWARMBOOT
  7043.  12    USE= specified
  7044.  13    ROM= specified
  7045.  
  7046. Bitfields for 386MAX feature flags 3:
  7047. Bit(s)    Description    (Table 0587)
  7048.  0    Windows3 support enabled
  7049.  1    SHADOWROM
  7050.  2    don't compress ROM (NOCOMPROM)
  7051.  3    ??? (related to PRGREG=)
  7052.  4    ??? (related to PRGREG=)
  7053.  5    SHADOWRAM
  7054.  6    DOS4 specified
  7055.  7    NOLOADHIGH
  7056.  8    NOPULSE
  7057.  11    FORCEA20
  7058.  12    DMA buffer enabled
  7059.  13    NOSCRUB
  7060.  15    NOFRAME
  7061.  
  7062. Bitfields for 386MAX machine type:
  7063. Bit(s)    Description    (Table 0588)
  7064.  12    Amstrad
  7065.  13    Epson
  7066.  14    Zenith Data Systems
  7067.  15    "ASEM"
  7068.  16    NEC
  7069.  17    "HPRS" model codes 69h and 6Ah
  7070.  18    Dell
  7071.  19    "CA"
  7072.  20    ITT (Xtra Business Systems/Alcatel)
  7073.  21    Toshiba 5100
  7074.  22    Olivetti
  7075.  23    Quadram Quad386 (BIOS model FEh, submodel A6h)
  7076.  24    Tandy???
  7077.  25    AST 386
  7078.  26    INBOARD, ??? version
  7079.  27    INBOARD, ??? version
  7080.  28    INBOARD, ??? version
  7081.  29    "HPRS"
  7082.  30    Compaq 386
  7083.  31    JET386
  7084.  
  7085. Format of 386MAX control block:
  7086. Offset    Size    Description    (Table 0589)
  7087.  00h    WORD    segment of next block (FFFFh if last)
  7088.  02h    WORD    segment of previous block (FFFFh if first)
  7089.  04h 12 BYTEs    filename
  7090.  10h    WORD    resident size in paragraphs
  7091.  12h    WORD    environment size???
  7092.  14h    WORD    real prsent environment size + 1 (0000h if ENVSAVE used)
  7093.  16h  2 BYTEs    ???
  7094.  18h    DWORD    initial size or SIZE=n in 386LOAD commandline
  7095.  1Ch    DWORD    SIZE=-1 ???
  7096.  20h    DWORD    SIZE= ???
  7097.  24h    BYTE    PRGREG= if specified, else FFh
  7098.  25h    BYTE    ENVREG= if specified, else FFh
  7099.  26h    BYTE    FlexFrame (00h not present, 01h present)
  7100.  27h  3 BYTEs    ???
  7101.  2Ah    BYTE    GROUP= or 00h if not present
  7102.  2Bh    BYTE    ???
  7103.  2Ch    WORD    PSP
  7104.  
  7105. Format of 386MAX high memory info record:
  7106. Offset    Size    Description    (Table 0590)
  7107.  00h    WORD    segment address of memory region
  7108.  02h    WORD    size of memory region in paragraphs
  7109.  04h    BYTE    type or flags???
  7110.         00h if locked out
  7111.         02h if EMS page frame
  7112.         04h if high RAM
  7113.         42h if ROM
  7114.  05h    BYTE    ???
  7115.  
  7116. Format of 386MAX ROM shadowing record:
  7117. Offset    Size    Description    (Table 0591)
  7118.  00h    WORD    logical start segment of ROM??? (may be used by BlueMAX when it
  7119.           squeezes together the ROMs to make room)
  7120.  02h    WORD    physical start segment of ROM
  7121.  04h  2 BYTEs    ???
  7122.  06h    WORD    size of shadowed ROM in paragraphs
  7123.  08h  2 BYTEs    ???
  7124.  0Ah    WORD    flags
  7125.         bit 15: shadowing enabled for this ROM???
  7126.         bit 14: ???
  7127.         bit 13: ???
  7128.         bit 12: ???
  7129.         bit 10: ???
  7130.  
  7131. (Table 0592)
  7132. Values for 386MAX memory type:
  7133.  00h    unused by EMS
  7134.  01h    DOS
  7135.  04h    page frame overlapping ROM???
  7136.  80h    high memory
  7137.  84h    page frame???
  7138.  87h    video ROM???
  7139. Note:    the type may be 00h (unused) if the 16K page is split among different
  7140.       uses (such as ROM and high RAM)
  7141.  
  7142. (Table 0593)
  7143. Call 386MAX API (via OUT DX,AL) with:
  7144.     STACK: WORD value for DX
  7145.     AH = 00h unused
  7146.         Return: AH = 84h (unsupported function)
  7147.     AH = 01h get high memory information
  7148.         ES:DI -> buffer for array of high memory info records
  7149.             (see #0590)
  7150.         Return: CX = number of records placed in buffer
  7151.     AH = 02h get shadowed ROM info
  7152.         ES:DI -> buffer for array of ROM shadowing records (see #0591)
  7153.         Return: CX = number of records placed in buffer
  7154.     AH = 03h get 386MAX state
  7155.         ES:DI -> 90-byte buffer for state (see #0579)
  7156.         Return: AH = 00h (successful)
  7157.             buffer filled
  7158.     AH = 04h get memory types???
  7159.         ES:DI -> buffer for memory type info (array of bytes, one per
  7160.             16K page) (see #0592)
  7161.         Return:    CX = number of bytes placed in buffer
  7162.     AH = 05h get page table entries
  7163.         AL = A20 control (00h enable A20 first, 01h leave unchanged)
  7164.         CX = buffer size in bytes (0000h = enough for all memory from
  7165.             given start to end of memory managed by 386MAX)
  7166.         SI = first K to report (rounded down to 4K page)
  7167.         ES:DI -> buffer for returned page table entries
  7168.         Return: CX = number of bytes returned (four per 4K page)
  7169.             ES:DI buffer filled
  7170.     AH = 06h get memory speed info
  7171.         ES:DI -> buffer for memory speed records (see #0594)
  7172.         Return: AH = 00h (successful)
  7173.             CX = number of bytes placed in buffer
  7174.         Note:    this function can take over a second to execute
  7175.     AH = 07h map/unmap multiple handle pages
  7176.         DX = EMS handle (on stack)
  7177.         STACK: DWORD -> EMS mapping record
  7178.         Return:    AH = status (00h,80h,83h,8Ah,8Bh)
  7179.         Format of EMS mapping record:
  7180.         Offset    Size    Description
  7181.          00h    WORD    function
  7182.                 0000h use physical page numbers
  7183.                 0001h use segment addresses
  7184.          02h    WORD    EMS handle
  7185.          04h    WORD    number of mapping entries following
  7186.          06h 2N WORDs    logical page number and physical page/segment
  7187.                 logical page FFFFh means unmap physical page
  7188.         SeeAlso: INT 67/AH=50h
  7189.     AH = 08h "EMM2_GOREAL" check whether possible to disable 386MAX
  7190.         AL = ??? (00h or nonzero)
  7191.         Return: AH = status (00h OK, A4h not possible at this time)
  7192.         Note:    if AL=00h, this function always returns success
  7193.     AH = 09h toggle Bit Flags 1 flags
  7194.         BX = bitmask of bit flags 1's flags to toggle (see #0580)
  7195.         Return: AH = 00h (successful)
  7196.         Note:    enables A20 first
  7197.     AH = 0Ah toggle Debugging Flags 1 flags
  7198.         BX = bitmask of Debugging Flags 1's bits to toggle (see #0582)
  7199.         Return: AH = 00h (successful)
  7200.         Notes:    enables A20 first
  7201.             does ??? if bit 3 on after specified bits are toggled
  7202.     AH = 0Bh toggle Debugging Flags 2 flags
  7203.         BX = bitmask of Debugging Flags 2's bits to toggle (see #0583)
  7204.         Return: AH = 00h (successful)
  7205.         Note:    enables A20 first
  7206.     AH = 0Ch toggle feature flags 3
  7207.         BX = bitmask of feature flags 3's bits to toggle (see #0587)
  7208.         Return: AH = 00h (successful)
  7209.         Note:    enables A20 first
  7210.     AH = 0Dh specify 386MAX high-memory location
  7211.         BX = segment address of high-memory real-mode portion of 386MAX
  7212.         CX = current segment of real-mode stub???
  7213.         Return: AH = status (00h successful)
  7214.             ???
  7215.     AH = 0Eh CRT controller register virtualization
  7216.         AL = subfunction
  7217.             00h allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h
  7218.             01h trap accesses to CRTC I/O ports
  7219.     AH = 0Fh reboot system
  7220.         Return: never
  7221.     AH = 10h unused
  7222.         Return: AH = 84h (unsupported function)
  7223.     AH = 11h get high memory information
  7224.         ES:DI -> 96-byte buffer for high memory info
  7225.         Return: AH = 00h (successful)
  7226.             ES:DI buffer filled
  7227.         Notes:    each byte in buffer contains bit flags for a 4K page in
  7228.               the A000h-FFFFh region
  7229.                 bit 0: page is writeable
  7230.                 bit 1: physical address same as linear address
  7231.                 bit 2: EMS page frame
  7232.                 bit 6: page is part of the QPMS window
  7233.             this function can take over a second to execute,
  7234.               because it does a 128K read for each page in an
  7235.               attempt to flush any RAM cache the system may have
  7236.     AH = 12h shadow RAM mapping
  7237.         AL = subfunction
  7238.             00h unshadow ROMs (except page FFh if NOWARMBOOT set)
  7239.             01h map shadow RAM into ROM regions???
  7240.         Return: AH = 00h (successful) if AL=00h or 01h
  7241.             AH = 8Fh otherwise
  7242.     AH = 13h shadow RAM page protection
  7243.         AL = subfunction
  7244.             00h set all shadowed ROM 4K pages to read-only
  7245.             01h set all shadowed ROM 4K pages to read-write
  7246.         Return: AH = 00h (successful) if AL=00h or 01h
  7247.             AH = 8Fh otherwise
  7248.     AH = 14h get Programmable Option Select info???
  7249.         ES:DI -> 54-byte buffer for POS data???
  7250.         Return: AH = 00h if successful
  7251.             AH = A4h on error
  7252.         Note:    the buffer consists of nine 6-byte fields; the first
  7253.               eight for slots 1-8, the last for the system board
  7254.     AH = 15h ???
  7255.         ???
  7256.         Return: ???
  7257.     AH = 16h get 386MAX memory usage screen
  7258.         ES:DI -> buffer for memory info display
  7259.         CX = size of buffer in bytes
  7260.         Return:    ES:DI buffer filled with '$'-terminated string (if
  7261.                 large enough to hold entire usage screen)
  7262.         Note:    the screen is 0303h bytes in v7.00
  7263.     AH = 17h Windows 3 startup/termination
  7264.         AL = subfunction
  7265.             00h Windows3 initializing
  7266.             DX (on stack) = Windows startup flags
  7267.             DI = Windows version number (major in upper byte)
  7268.             ES:BX = 0000h:0000h
  7269.             DS:SI = 0000h:0000h
  7270.             Return: CX = 0000h if OK for Windows to load
  7271.                    <> 0 if Windows should not load
  7272.                 ES:BX -> startup info structure
  7273.                 DS:SI -> Virtual86 mode enable/disable callback
  7274.             01h Windows3 terminating
  7275.             ES:BX -> ???
  7276.             DX (on stack) = Windows exit flags
  7277.             Return: ???
  7278.     AH = 18h QPMS (Qualitas Protected Memory Services)
  7279.         AL = subfunction
  7280.             00h get QPMS configuration
  7281.             Return: BX = starting segment of QPMS memory window
  7282.                 CX = number of 4K pages reserved for QPMS???
  7283.                 DX = number of 4K pages in QPMS window???
  7284.             01h map QPMS memory page???
  7285.             BX = 4K page number within memory reserved for QPMS???
  7286.             CL = 4K page number within QPMS memory window???
  7287.             02h mark all QPMS memory read-only
  7288.             03h mark all QPMS memory read-write
  7289.         Return: AH = status (00h,8Ah,8Bh,8Fh)
  7290.     AH = 19h get linear address for physical address
  7291.         EDX = physical address (low word on stack)
  7292.         Return: AH = status
  7293.                 00h successful
  7294.                 EDX = linear address at which physical address
  7295.                     may be accessed
  7296.                 8Bh physical address currently not addressable
  7297.         Note:    enables A20 first
  7298.     AH = 1Ah set page table entry
  7299.         EDX = new page table entry (low word on stack)
  7300.         ESI = linear address of page to map (bits 0-11 clear)
  7301.         Return: AH = status (00h,8Bh)
  7302.         Note:    enables A20 first
  7303.     AH = 1Bh get ???
  7304.         Return: AH = status
  7305.             BX = ???
  7306.             CX = number of ???
  7307.             EDX = physical address of ???
  7308.     AH = 1Ch get original interrupt vector
  7309.         AL = interrupt vector (00h-7Fh)
  7310.         Return: AH = 00h (successful)
  7311.             EDX = original vector before 386MAX loaded (segment in
  7312.                 high word, offset in low word)
  7313.         Note:    no range checking is performed; requests for INTs 80h-
  7314.               FFh will return random values
  7315.     AH = 1Dh display string???
  7316.         SI = ???
  7317.         Return: AH = 00h (successful)
  7318.             ???
  7319.         Note:    this function appears to be broken in v7.00
  7320.     AH = 1Eh get memory info
  7321.         ES:DI -> memory info (see #0595)
  7322.         Return: ???
  7323.     AH = 1Fh get DPMI host information
  7324.         Return: AX = 0000h if successful
  7325.             BX = DPMI flags (see #1605 at INT 31/AX=0400h)
  7326.             CL = CPU type (02h = 80286, 03h = 80386, etc.)
  7327.             DX = DPMI ver supported (DH=major, DL=2-digit minor)
  7328.             SI = ???
  7329.             ES???:DI -> ???
  7330.         Note:    NOP if NODPMI switch specified
  7331.     AH = 20h (v7.00) get ???
  7332.         AL = index of ???
  7333.         Return: EDX = ??? for specified ???
  7334.     AH = 21h (v7.00) STACKS support
  7335.         AL = 00h get STACKS parameters
  7336.         Return: BX = ??? (0060h for v7.00)
  7337.             CX = number of stacks for hardware interrupts
  7338.             DX = size of each stack in bytes
  7339.             SI = ??? (low and high bytes are separate values)
  7340.             DI = ??? (low and high bytes are separate values)
  7341.                 low byte = logical page number set by subfn 02h
  7342.             ES = ???
  7343.         AL = 01h set ??? "EMM2_DSTKS"
  7344.         EBX = ???
  7345.         ECX = ???
  7346.         AL = 02h set ???
  7347.         BL = logical page number for ??? (00h-03h)
  7348.         Return: AH = status (00h,8Ah)
  7349.     AH = 22h (v7.00) call ??? for every load module
  7350.         AL = which function to call
  7351.         00h call ???
  7352.         else call ????
  7353.         Return: AH = 00h
  7354.         Note: if AL=00h, calls the protected-mode function pointed at by
  7355.         the DWORD at offset 22h from the start of each module installed
  7356.         by a LOAD= directive; if AL<>00h, it calls the function
  7357.         pointed at by the DWORD at offset 28h of the load module
  7358.     AH = 23h (v7.00) ???
  7359.         AL = 00h set ???
  7360.         BL = ???
  7361.         Return:    AH = 00h or unchanged (depending on ???)
  7362.         AL = 01h set ???
  7363.         BL = ???
  7364.         BH = ???
  7365.         CX = ???
  7366.         DX = ??? (on top of stack)
  7367.         Return: AH = status (00h if successful, 8Fh once table full)
  7368.         Note:    this call adds one entry to an internal table on each
  7369.               call, until the table is full
  7370.         AL = 02h get ???
  7371.         CX = size of buffer
  7372.         ES:DI -> buffer for ??? (60 bytes total data)
  7373.         Return: CX = number of bytes actually returned
  7374.         Note:    returns the array storing the values set with AX=2301h
  7375.         Format of one entry in array:
  7376.         Offset    Size    Description
  7377.          00h    BYTE    ??? (BL from subfn 01h)
  7378.          01h    WORD    ??? (CX from subfn 01h)
  7379.          03h    BYTE    ??? (BH from subfn 01h)
  7380.          04h    WORD    ??? (DX from subfn 01h)
  7381.         AL = 03h set ??? name/path
  7382.         ES:DI -> buffer containing ASCIZ ???
  7383.         AL = 04h get ???
  7384.         ES:DI -> buffer for ASCIZ ???
  7385.         Note: the ASCIZ string for subfunctions 03h and 04h does not appear
  7386.         to be used by 386MAX, and may serve merely for communication
  7387.         between two other Qualitas programs
  7388.     AH = 24h (v7.00) high memory control
  7389.         AL = 00h get high memory state
  7390.         Return: BX = current state
  7391.                 00h high memory removed from DOS memory chain
  7392.                 01h high memory included in DOS memory chain
  7393.         AL = 01h set high memory state
  7394.         BX = new state
  7395.             00h high memory removed from DOS memory chain
  7396.             01h high memory included in DOS memory chain
  7397.             else
  7398.             Return: ??? (error, but return varies according to ???)
  7399.     AH = 25h (v7.00) remove high RAM from DOS memory chain
  7400.     AH = 26h (v7.00) ???
  7401.         BX = ???
  7402.         CX = ???
  7403.         SI = ???
  7404.         DI = ???
  7405.         Return: AH = status
  7406.             BX = ???
  7407.             CX = ???
  7408.     AH = 27h (v7.00) ???
  7409.         AL = 00h get ???
  7410.         Return: BX = number of paragraphs for ???
  7411.         AL = 01h ???
  7412.         BX = ???
  7413.         ES??? = ???
  7414.         AL = 02h ???
  7415.         ???
  7416.         AL = 03h ???
  7417.         CX = ???
  7418.         DX = ???
  7419.         ES??? = ???
  7420.         Return: ???
  7421.     AH = 28h (v7.00) get ???
  7422.         Return: AH = status (00h,8Fh) (see #1891 at INT 67/AH=40h)
  7423.             if AH=00h,
  7424.                 CX = ???
  7425.                 DX = ???
  7426.     AH = 29h (v7.00) get ???
  7427.         Return: AX = ???
  7428.     AH = 40h-5Dh EMS services (see INT 67/AH=40h etc)
  7429.     AH = DEh VCPI services (see INT 67/AX=DE00h etc)
  7430. Return: AH = status (as for EMS INT 67 calls)
  7431.         00h successful
  7432.         80h internal error
  7433.         81h hardware malfunction
  7434.         83h invalid handle
  7435.         84h    undefined function
  7436.         8Ah invalid logical page nuber
  7437.         8Bh illegal physical page number
  7438.         8Fh undefined subfunction
  7439.         A4h access denied
  7440.         etc.
  7441.     STACK popped (value placed in DX if no specific return value for DX)
  7442.  
  7443. Format of 386MAX memory speed record:
  7444. Offset    Size    Description    (Table 0594)
  7445.  00h    DWORD    page table entry for 4K page
  7446.  04h    WORD    number of microticks (840ns units) required for REP LODSD of
  7447.           entire 4K page
  7448.  
  7449. Format of 386MAX memory info [array]:
  7450. Offset    Size    Description    (Table 0595)
  7451.  00h    DWORD    linear start address
  7452.  04h    DWORD    size in bytes
  7453.  08h    WORD    XMS handle (if next byte = 04h)
  7454.         ??? (if next byte = 05h)
  7455.         ??? (if next byte = 06h)
  7456.         ??? (if next byte = 13h)
  7457.         ??? (if next byte = 14h)
  7458.         ??? (if next byte = 15h)
  7459.         ??? (if next byte = 23h)
  7460.         ??? (if next byte = 24h)
  7461.         ??? (if next byte = 26h)
  7462.         else unused
  7463.  0Ah    BYTE    type
  7464.         00h = ???, 01h = VDISK,
  7465.         02h = INT 15h extended memory, 03h = ??? extended,
  7466.         04h = XMS handle's memory, 05h = ???, 06h = ???, 07h = ???,
  7467.         08h = ???, 09h = ???, 0Ah = ???, 0Bh = ???,
  7468.         11h = ???, 12h = ???, 14h = ???, 15h = ???,
  7469.         19h = ???, 1Ah = ???, 1Bh = ???,
  7470.         1Ch = ???, 1Dh = ???, 1Eh = ???, 1Fh = ???,
  7471.         20h = ???, 21h = ???, 23h = ???, 24h = ???,
  7472.         26h = ???
  7473.  0Bh    BYTE    ??? (00h for types 00h-03h, 07h-0Bh, 19h-21h;
  7474.              80h for types 04h/13h-15h/23h-26h;
  7475.             ??? for type 05h)
  7476. --------V-214402-----------------------------
  7477. INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO
  7478.     AX = 4402h
  7479.     BX = file handle for device "PGS1600$"
  7480.     CX = 0018h (size of buffer)
  7481.     DS:DX -> configuration buffer (see #0596)
  7482. Return: CF clear if successful
  7483.         buffer filled
  7484.         AX = number of bytes actually copied
  7485.     CF set on error
  7486.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  7487. Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  7488.       display adapter, which provides a 1600x1200 monochrome display as
  7489.       well as one of two emulations, MDA or CGA.
  7490. SeeAlso: AX=4403h"PGS1600"
  7491.  
  7492. Format of PGS1600.DEV configuration information:
  7493. Offset    Size    Description    (Table 0596)
  7494.  00h    WORD    version (high byte = major, low byte = minor)
  7495.  02h    WORD    board initialisation mode
  7496.  04h    WORD    board I/O address
  7497.         03D0h CGA emulation
  7498.         03B0h MDA emulation
  7499.         0390h no emulation
  7500.         0350h no emulation, alternate
  7501.  06h    WORD    emulation buffer segment
  7502.         B800h    CGA emulation
  7503.         B000h    MDA emulation
  7504.         0000h    no emulation
  7505.  08h    WORD    PG1600 graphics buffer segment
  7506.  0Ah    WORD    number of bytes between consecutive graphic rows
  7507.  0Ch    WORD    horizontal pixel size
  7508.  0Eh    WORD    vertical pixel size
  7509.  10h    WORD    horizontal dots per inch
  7510.  12h    WORD    vertical dots per inch
  7511.  14h    WORD    graphics buffer bits per pixel
  7512.  16h    WORD    monitor bits per pixel
  7513. --------N-214402-----------------------------
  7514. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  7515.     AX = 4402h
  7516.     BX = file handle referencing device "$IPCUST"
  7517.     CX, DS:DX ignored
  7518. Return: CF clear if successful
  7519.         AX destroyed
  7520.     CF set on error
  7521.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  7522. Notes:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  7523.       version 2.05.     If less than the entire data is read or written,
  7524.       the next read/write continues where the previous one ended; this
  7525.       call and AX=4403h both reset the location at which the next
  7526.       operation starts to zero
  7527.     v2.1+ uses a new configuration method, but allows the installation
  7528.       of IPCUST.SYS for backward compatibility with other software which
  7529.       must read the PC/TCP configuration
  7530. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4403h"IPCUST"
  7531. --------N-214402-----------------------------
  7532. INT 21 - WORKGRP.SYS - GET API ENTRY POINT
  7533.     AX = 4402h
  7534.     BX = file handle for device "NET$HLP$"
  7535.     CX = 0008h
  7536.     DS:DX -> buffer for entry point record
  7537. Return: CF clear if successful
  7538.         AX = number of bytes actually read
  7539.     CF set on error
  7540.         AX = error code
  7541. Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
  7542.       permits communication with PCs running Windows for Workgroups or
  7543.       LAN Manager
  7544. SeeAlso: AH=3Fh"WORKGRP.SYS"
  7545.  
  7546. Format of WORKGRP.SYS entry point record:
  7547. Offset    Size    Description    (Table 0597)
  7548.  00h    WORD    3633h  \ signature???
  7549.  02h    WORD    EF6Fh  /
  7550.  04h    DWORD    address of entry point
  7551. Note:    first four bytes of buffer must be 6Fh E9h 33h 36h on entry when using
  7552.       IOCTL rather than READ to get the entry point record
  7553.  
  7554. (Table 0598)
  7555. Call WORKGRP entry point with:
  7556.     STACK:    WORD    function number (0000h-0009h)
  7557. Return: STACK unchanged
  7558.  
  7559. (Table 0599)
  7560. Call WORKGRP function 00h with:
  7561.     STACK:    WORD    0000h (function "get ???")
  7562. Return: DX:AX -> data table
  7563.  
  7564. (Table 0600)
  7565. Call WORKGRP function 01h with:
  7566.     STACK:    WORD    0001h (function "hook ???")
  7567. Return: STACK:    DWORD    pointer to ???
  7568.         WORD    0001h (function number)
  7569.  
  7570. (Table 0601)
  7571. Call WORKGRP function 02h with:
  7572.     STACK:    WORD    0002h (function "unhook ???")
  7573.     ???
  7574. Return: ???
  7575.  
  7576. (Table 0602)
  7577. Call WORKGRP function 03h with:
  7578.     STACK:    WORD    0003h (function "reenable printer port")
  7579.         WORD    LPT port number
  7580. Return: ???
  7581.  
  7582. (Table 0603)
  7583. Call WORKGRP function 04h with:
  7584.     STACK:    WORD    0004h (function "disable printer port")
  7585.         WORD    LPT port number
  7586. Return: ???
  7587.  
  7588. (Table 0604)
  7589. Call WORKGRP function 05h with:
  7590.     STACK:    WORD    0005h (function "???")
  7591.         ???
  7592. Return: ???
  7593.  
  7594. (Table 0605)
  7595. Call WORKGRP function 06h with:
  7596.     STACK:    WORD    0006h (function "???")
  7597. Return: STACK unchanged
  7598.     AX = 0000h
  7599.     DX = 0000h
  7600.  
  7601. (Table 0606)
  7602. Call WORKGRP functions 07h-09h with:
  7603.     STACK:    WORD    0007h-0009h (NOP functions)
  7604. Return: STACK unchanged
  7605.     AX = 0001h
  7606.     DX = 0000h
  7607. --------N-214402-----------------------------
  7608. INT 21 - 10NET v5.0 - 10BEUI.DOS - API
  7609.     AX = 4402h
  7610.     BX = file handle referencing device "10BEUI$"
  7611.     DS:DX -> parameter record (see #0607)
  7612.     CX ignored
  7613. Return: CF clear if successful
  7614.         AX destroyed
  7615.     CF set on error
  7616.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  7617. SeeAlso: AX=4402h"10MEMMGR",INT 6F/AH=00h"10NET"
  7618.  
  7619. Format of 10NET 10BEUI.DOS parameter record:
  7620. Offset    Size    Description    (Table 0607)
  7621.  00h    WORD    000Ah (function number???)
  7622.  02h    WORD    ???
  7623.  04h    DWORD    pointer to buffer for ???
  7624.  08h  4 BYTEs    ???
  7625.  0Ch    WORD    transfer size
  7626. --------N-214402-----------------------------
  7627. INT 21 - 10NET v5.0 - 10MEMMGR.SYS - API
  7628.     AX = 4402h
  7629.     BX = file handle referencing device "MEMMGR0$"
  7630.     DS:DX -> 6-byte buffer for interface info (see #0608)
  7631.     CX ignored
  7632. Return: CF clear if successful
  7633.         AX destroyed
  7634.     CF set on error
  7635.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  7636. SeeAlso: AX=4402h"10BEUI",INT 6F/AH=00h"10NET"
  7637.  
  7638. Format of 10NET 10MEMMGR.SYS interface info:
  7639. Offset    Size    Description    (Table 0608)
  7640.  00h    DWORD    address of entry point (see #0609)
  7641.  04h    WORD    version (0500h for v5.00)
  7642.  
  7643. (Table 0609)
  7644. Call 10NET 10MEMMGR.SYS entry point with:
  7645.     AL = 01h ???
  7646.         BX = ???
  7647.         Return: CF clear if successful
  7648.             CF set on error
  7649.             AX = error code
  7650.     AL = 02h ???
  7651.         ???
  7652.     AL = 03h ???
  7653.         ???
  7654.     AL = 04h set/restore memory allocation strategy
  7655.         BX = subfunction
  7656.         0000h set strategy
  7657.         0001h restore strategy
  7658.         Return: CF clear if successful
  7659.             CF set on error (if function disabled)
  7660.             various registers destroyed
  7661.     AL = other
  7662.         Return: CF set
  7663.             AX = 0000h
  7664.             BL = 01h
  7665. --------V-214402-----------------------------
  7666. INT 21 - Compaq AG1024.SYS - RGDI - GET DRIVER LOCATION
  7667.     AX = 4402h
  7668.     BX = file handle for device "$$$$RGDI"
  7669.     CX = 0006h (size of returned data)
  7670.     DS:DX -> location record (see #0610)
  7671. Return: CF clear if successful
  7672.         buffer filled
  7673.     CF set on error
  7674.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  7675. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  7676. SeeAlso: AX=4403h"RGDI"
  7677.  
  7678. Format of Compaq AG1024.SYS location record:
  7679. Offset    Size    Description    (Table 0610)
  7680.  00h    WORD    signature 55AAh
  7681.  02h    WORD    segment of ???
  7682.  04h    WORD    segment of device driver's code
  7683. --------N-214402-----------------------------
  7684. INT 21 - FTPSOFT.DOS v3.1 - GET ???
  7685.     AX = 4402h
  7686.     BX = file handle for device "FTPSOFT$"
  7687.     CX = size of buffer
  7688.     DS:DX -> buffer for data (see #0611)
  7689. Return: CF clear if successful
  7690.         buffer filled
  7691.     CF set on error
  7692.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  7693. Program: FTPSOFT.DOS is a device driver for Protocol Manager support from
  7694.        FTP Software, Inc.
  7695. SeeAlso: AH=3Fh"PC/TCP",AX=4402h"NDIS"
  7696.  
  7697. Format of FTPSOFT.DOS data:
  7698. Offset    Size    Description    (Table 0611)
  7699.  00h    WORD    (call) BA98h (if different, no data returned)
  7700.  02h    DWORD    -> NDIS common characteristics table
  7701.           (see #0550 at AX=4402h"NDIS")
  7702.  06h    DWORD    (call) -> new dispatch table (see #0552 at AX=4402h"NDIS")
  7703.  0Ah    DWORD    -> 28-byte buffer for ??? data
  7704.  0Eh    DWORD    ???
  7705.  12h    DWORD    -> FAR function to reset dispatch jump table to defaults
  7706.  16h    BYTE    ???
  7707. Note:    the addresses in the new dispatch table are copied into an internal
  7708.       jump table which may be reset by calling the function pointed at by
  7709.       offset 12h
  7710. --------n-214402-----------------------------
  7711. INT 21 U - PenDOS PENDEV.SYS - GET ENTRY POINTS
  7712.     AX = 4402h
  7713.     BX = file handle for device "$$PENDOS" or "$$PD_REG"
  7714.     CX = size of buffer (4 for $$PENDOS and a 4,8,12, or 16 for $$PD_REG)
  7715.     DS:DX -> buffer for entry point record (see #0612)
  7716. Return: CF clear if successful
  7717.         buffer filled
  7718.     CF set on error
  7719.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  7720. Program: A limited version of PenDOS by Communication Intelligence Corporation,
  7721.       which provides pen capability to keyboard-based programs, is bundled
  7722.       with IBM DOS 6.1
  7723. SeeAlso: AX=4403h"PENDEV.SYS"
  7724.  
  7725. Format of PENDEV.SYS entry point record:
  7726. Offset    Size    Description    (Table 0612)
  7727.  00h    DWORD    -> array of jumps
  7728.  04h    WORD    offset of function to retrieve entry point (see #0613)
  7729.  06h  2 BYTEs    signature "Pe"
  7730.  08h    WORD    offset of function to set entry point (see #0614)
  7731.  0Ah  2 BYTEs    signature "nD"
  7732.  0Ch    WORD    offset of function to clear entry point (see #0615)
  7733.  0Eh    WORD    signature "OS"
  7734.  
  7735. (Table 0613)
  7736. Call PENDEV.SYS function to retrieve entry point with:
  7737.     AX = index of entry point (0-9)
  7738. Return: CF clear if successful
  7739.         DX:AX -> desired entry point
  7740.     CF set on error (AX out of range)
  7741.  
  7742. (Table 0614)
  7743. Call PENDEV.SYS function to set entry point with:
  7744.     AX = index of entry point (0-9)
  7745.     DX:SI -> new handler
  7746. Return: CF clear if successful
  7747.     CF set on error (AX out of range)
  7748.  
  7749. (Table 0615)
  7750. Call PENDEV.SYS function to clear entry point with:
  7751.     AX = index of entry point (0-9)
  7752. Return: CF clear if successful
  7753.     CF set on error (AX out of range)
  7754. Note:    resets the jump at the specified entry point to its default target,
  7755.       which simply returns
  7756. --------N-214402-----------------------------
  7757. INT 21 U - LAN Manager - TCPDRV.DOS - API
  7758.     AX = 4402h
  7759.     BX = file handle referencing device "TCPDRV$"
  7760.     CX = 0019h
  7761.     DS:DX -> buffer containing request block
  7762. Return: CF clear if successful
  7763.         buffer filled
  7764.     CF set on error
  7765.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  7766. Program: TCPDRV.DOS is the low-level device driver supporting LAN Manager's
  7767.       TCP/IP protocol stack
  7768.  
  7769. Format of TCPDRV.DOS request block:
  7770. Offset    Size    Description    (Table 0616)
  7771.  00h    BYTE    (call) function number
  7772.         00h initialize ???
  7773.         06h get ???
  7774.         07h get ???
  7775.  01h    BYTE    (call) 00h
  7776.         (return) error code if error, unchanged if successful
  7777.  02h    WORD    signature 4354h ('CT')
  7778. ---function 00h---
  7779.  04h    DWORD    (call) pointer to ??? FAR function
  7780.         function is called with ES:BX -> device driver request used to
  7781.           invoke this function
  7782.  08h  4 BYTEs    ???
  7783.  0Ch    DWORD    (call) pointer to ??? record, WORD at offset 22h is read
  7784.  10h    DWORD    (return) -> ??? buffer if 0000h:0000h on call
  7785. ---function 06h---
  7786.  04h  4 BYTEs    ???
  7787.  08h    DWORD    (return) pointer to ???
  7788. ---function 07h---
  7789.  04h    DWORD    (return) pointer to ??? record
  7790. --------y-214402-----------------------------
  7791. INT 21 U - PC Tools 9 CPRLOW.EXE - GET CODE AND DATA ADDRESSES
  7792.     AX = 4402h
  7793.     BX = file handle referencing device "RECLOWLD"
  7794.     DS:DX -> buffer for address list (see #0617)
  7795.     CX ignored
  7796. Return: CF clear if successful
  7797.         buffer filled
  7798.     CF set on error
  7799.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  7800.  
  7801. Format of CPRLOW address list:
  7802. Offset    Size    Description    (Table 0617)
  7803.  00h    WORD    segment of CPRLOW code
  7804.  02h    WORD    offset in code segment of ??? entry point
  7805.         (switches into protected mode)
  7806.  04h    WORD    offset in code segment of jump array (see #0618)
  7807.  06h    WORD    segment of copy of interrupt vector table at CPRLOW load time
  7808. Note:    neither the entry point nor the jump array is valid until after a
  7809.       CPR /LOAD, because CPR.EXE installs the code into CPRLOW at runtime.
  7810.  
  7811. Format of CPRLOW jump array:
  7812. Offset    Size    Description    (Table 0618)
  7813.  00h  3 BYTEs    initialize CPRLOW interrupt hooks
  7814.  03h  3 BYTEs    reset timers and enable CPR (hotkey enable)
  7815.  06h  3 BYTEs    disable CPR (hotkey disable)
  7816.  09h  3 BYTEs    clear ??? flag, hotkey disable, and ???
  7817.  0Ch  3 BYTEs    initialize delay loop counter (destroys AX,BX,CX,DX)
  7818.  0Fh  3 BYTEs    disable CPR completely (commandline /DISABLE)
  7819.  12h  3 BYTEs    enable ??? if CPR enabled by both cmdline and hotkey
  7820.  15h  3 BYTEs    enable CPR (commandline /ENABLE)
  7821. --------m-214402-----------------------------
  7822. INT 21 U - Novell DOS 7 EMM386.EXE - GET STATE RECORD???
  7823.     AX = 4402h
  7824.     BX = file handle for device "EMMXXXX0"
  7825.     CX = 003Eh (size of state record)
  7826.     DS:DX -> buffer for state record (see #0619)
  7827. Return: CF clear if successful
  7828.         buffer filled (see INT 67/AH=3Fh function 1B00h)
  7829.     CF set on error
  7830.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  7831.  
  7832. Format of Novell DOS 7 EMM386.EXE state record:
  7833. Offset    Size    Description    (Table 0619)
  7834.  00h    WORD    signature EDC0h
  7835.  02h 60 BYTEs    ???
  7836. --------m-214402SF00-------------------------
  7837. INT 21 U - Memory Managers - GET API ENTRY POINT
  7838.     AX = 4402h subfn 00h
  7839.     BX = file handle for device "EMMXXXX0"
  7840.     CX = 0006h (size of buffer in bytes)
  7841.     DS:DX -> buffer for API entry point record (see #0621)
  7842.         first byte must be 00h on entry
  7843. Return: CF clear if successful
  7844.         buffer filled (see INT 67/AH=3Fh function 1B00h)
  7845.     CF set on error
  7846.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  7847. Notes:    this function is supported by Microsoft EMM386.EXE v4.45+ and
  7848.       CEMM v5.10+, and is intended for use by MS Windows as it starts up
  7849.     if no other program has hooked INT 67, an alternate installation
  7850.       check for CEMM is testing for the string
  7851.       "COMPAQ EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  7852.       handler's segment; if present, the word at offset 12h contains the
  7853.       offset of the API entry point
  7854. SeeAlso: AX=4402h/SF=01h,AX=4402h/SF=02h,AX=4402h"EMM386",INT 67/AH=3Fh
  7855.  
  7856. Format of memory manager API entry point record:
  7857. Offset    Size    Description    (Table 0620)
  7858.  00h    WORD    ??? (0022h for CEMM 5.11, 0025h for MS EMM386 v4.45)
  7859.  02h    DWORD    manager's private API entry point
  7860.         (see #0621,#1909 at INT 67/AX=FFA5h)
  7861.  
  7862. (Table 0621)
  7863. Call CEMM v5.10+ entry point with:
  7864.     AH = 00h get memory manager's state
  7865.         Return: AH = state
  7866.             bit 0: turned OFF
  7867.             bit 1: AUTO mode enabled
  7868.     AH = 01h set memory manager's state
  7869.         AL = new state (00h ON, 01h OFF, 02h AUTO)
  7870.         Return: CF clear if successful
  7871.             CF set on error
  7872.     AH = 02h Weitek coprocessor support
  7873.         AL = subfunction
  7874.         00h get Weitek support state
  7875.             Return: AL = status
  7876.                 bit 0: Weitek coprocessor is present
  7877.                 bit 1: Weitek support is enabled
  7878.         01h turn on Weitek support
  7879.         02h turn off Weitek support
  7880.         Return: CF clear if successful
  7881.             CF set on error
  7882.             AH = error code (01h invalid subfunc, 02h no Weitek)
  7883.     AH = 05h get statistics
  7884.         ???
  7885.     AH > 06h
  7886.         Return: CF set
  7887.             AH = 01h (invalid function)
  7888. Notes:    AH=03h,04h,06h are NOPs which return CF clear, presumably for backwards
  7889.       compatibility with earlier versions of CEMM
  7890.     in v5.11, AH=05h merely prints an error message (using INT 21/AH=09h)
  7891.       stating that a different version of CEMM is installed and it is
  7892.       therefore not possible to display the statistics
  7893. --------m-214402SF01-------------------------
  7894. INT 21 U - Memory Managers - GET EMM IMPORT STRUCTURE ADDRESS
  7895.     AX = 4402h subfn 01h
  7896.     BX = file handle for device "EMMXXXX0"
  7897.     CX = 0006h (size of buffer in bytes)
  7898.     DS:DX -> buffer for EMM import structure record (see #0622)
  7899.         first byte must be 01h on entry
  7900. Return: CF clear if successful
  7901.         buffer filled (see also INT 67/AH=3Fh function 1B00h)
  7902.     CF set on error
  7903.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  7904. Notes:    this function is supported by Microsoft EMM386.EXE v4.45+,
  7905.       QEMM-386 v6+, and CEMM v5.10+, and is intended for use by MS Windows
  7906.       as it starts up
  7907.     for QEMM-386, this call always returns an error if Windows3 support
  7908.       has been disabled with the NW3 switch
  7909. SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 2F/AX=D201h/BX=5145h
  7910. SeeAlso: INT 67/AH=3Fh
  7911.  
  7912. Format of EMM import structure record:
  7913. Offset    Size    Description    (Table 0622)
  7914.  00h    DWORD    physical address of EMM import structure (see #0623)
  7915.  04h    BYTE    EMM import structure major version
  7916.  05h    BYTE    EMM import structure minor version
  7917. Note:    version 1.00 contains only EMS information (Windows 3.0+)
  7918.     version 1.10 contains UMB/XMS/HMA/EMS information (Windows 3.1)
  7919.     version 1.11 is version 1.10 plus memory manager maker/product name
  7920. SeeAlso: #1886
  7921.  
  7922. Format of Global EMM Import record:
  7923. Offset    Size    Description    (Table 0623)
  7924.  00h    BYTE    bit flags
  7925.         bit 2: ???
  7926.         bit 3: free EMM386 virtual HMA only if hma_page_table_paddr!=0
  7927.         bit 4: no UMB???
  7928.  01h    BYTE    reserved (0)
  7929.  02h    WORD    size of structure in bytes
  7930.  04h    WORD    structure version
  7931.  06h    DWORD    reserved
  7932.  0Ah 384 BYTEs    64 EMS frame status records (see #0624), one per 16K of
  7933.           real-mode 1M address space
  7934. 18Ah    BYTE    ??? (must be at least 3*number_of_EMS_frames+4)
  7935. 18Bh    BYTE    number of UMB frame descriptors following
  7936. 18Ch 4N DWORDs    UMB frame descriptors
  7937.         each is 4 DWORDs giving physical page numbers for the four
  7938.           4K pages of a 16K EMS frame (00000000h if non-UMB page)
  7939. var    BYTE    number of EMS handle info records following
  7940.     16N BYTEs    EMS handle info records (see #0626)
  7941. ---version 1.10+ ---
  7942.     DWORD    realmode INT 67 vector (used by Windows to set breakpoints)
  7943.     DWORD    physical address of HMA page table values
  7944.     BYTE    number of free page entries following
  7945.      2N DWORDs    free page entries
  7946.         each is:
  7947.             DWORD    physical page number
  7948.             DWORD    number of consecutive physical pages
  7949.     BYTE    number of XMS handle info records following
  7950.         00h if memory manager does not emulate XMS or has real mode
  7951.           XMS code which can execute in the Windows environment
  7952.     12N BYTEs    XMS handle info records (see #0627)
  7953.     BYTE    number of free UMB info records following
  7954.      2N WORDs    free UMB info records
  7955.         each is:
  7956.             WORD    real mode start segment
  7957.             WORD    size in paragraphs
  7958. ---version 1.11---    
  7959.      20 BYTEs    blank-padded maker name
  7960.      20 BYTEs    blank-padded product name
  7961.  
  7962. Format of EMS frame status record:
  7963. Offset    Size    Description    (Table 0624)
  7964.  00h    BYTE    frame type (see #0625)
  7965.  01h    BYTE    owner handle (00h/FFh = none) from frame including UMB
  7966.         index to UMB frame descriptors
  7967.  02h    WORD    logical page for frame, 7FFFh if none, FFFFh if non-EMS frame
  7968.  04h    BYTE    EMS physical page number (FFh for non-EMS = don't care???)
  7969.  05h    BYTE    flags for non-EMS frames (00h for EMS frame)
  7970.         bits 0,1 for first 4K, bits 2,3 for second 4K, etc:
  7971.           10: direct mapping (linear address = physical address)
  7972.           01: UMB mapping
  7973.  
  7974. Bitfields for EMS frame type:
  7975. Bit(s)    Description    (Table 0625)
  7976.  0    EMS frame
  7977.  1    (if EMS frame) in standard 64K page frame
  7978.  2    first 4K of frame is UMB
  7979.  3    second 4K of frame is UMB
  7980.  4    third 4K of frame is UMB
  7981.  5    last 4K of frame is UMB
  7982.  
  7983. Format of EMS handle info record:
  7984. Offset    Size    Description    (Table 0626)
  7985.  00h    BYTE    handle number (00h = system handle)
  7986.  01h    BYTE    flags
  7987.         bit 0: normal handle rather than system handle
  7988.         bit 2: ??? (set by some EMS managers)
  7989.  02h  8 BYTEs    EMS handle's name
  7990.  0Ah    WORD    number of 16K pages for handle
  7991.  0Ch    DWORD    physical address of page table entries forming page map
  7992. Note:    all values should be zero for the system handle if no large frame
  7993.       support is present
  7994.  
  7995. Format of XMS handle info record:
  7996. Offset    Size    Description    (Table 0627)
  7997.  00h    WORD    handle
  7998.  02h    WORD    flags
  7999.         bit 0: handle usable by Windows
  8000.             (already in use when Windows started if clear)
  8001.         bit 1: reserved (0)
  8002.  04h    DWORD    size in KB (may be zero, used only if flags bit 0 set)
  8003.  08h    DWORD    physical address (only if flags bit 0 set)
  8004. --------m-214402SF02-------------------------
  8005. INT 21 U - Memory Managers - GET MEMORY MANAGER VERSION
  8006.     AX = 4402h subfn 02h
  8007.     BX = file handle for device "EMMXXXX0"
  8008.     CX = 0002h (size of buffer in bytes)
  8009.     DS:DX -> buffer for memory manager version (see #0628)
  8010.         first byte must be 02h on entry
  8011. Return: CF clear if successful
  8012.         buffer filled
  8013.     CF set on error
  8014.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8015. Note:    this function is supported by Microsoft EMM386.EXE v4.45+ and
  8016.       CEMM v5.10+, and is intended for use by MS Windows as it starts up
  8017. SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 67/AH=3Fh
  8018.  
  8019. Format of memory manager version:
  8020. Offset    Size    Description    (Table 0628)
  8021.  00h    BYTE    major version
  8022.  01h    BYTE    minor version (binary)
  8023. --------m-214402-----------------------------
  8024. INT 21 U - Microsoft EMM386.EXE v4.45 - GET MEMORY MANAGER INFORMATION
  8025.     AX = 4402h
  8026.     BX = file handle for device "EMMXXXX0"
  8027.     CX = size of buffer in bytes (varies, see below)
  8028.     DS:DX -> buffer for returned data (see #0629)
  8029.         first byte must be set on entry to indicate desired data
  8030. Return: CF clear if successful
  8031.         buffer filled
  8032.     CF set on error
  8033.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8034. Notes:    an error is returned if the number of bytes to be read does not match
  8035.       the number of bytes returned for the specified data item
  8036.     this function is part of the interface which allows MS Windows to
  8037.       cooperate with memory managers
  8038. SeeAlso: AX=4402h/SF=00h,AX=4402h/SF=01h,AX=4402h/SF=02h,INT 67/AX=FFA5h
  8039.  
  8040. Format of EMM386.EXE data buffer:
  8041. Offset    Size    Description    (Table 0629)
  8042.  00h    BYTE    (call) function
  8043.         03h get ???
  8044.         04h get ???
  8045. ---function 03h---
  8046.  00h    WORD    ???
  8047.  02h    WORD    ???
  8048. ---function 04h---
  8049.  00h    WORD    segment of UMB containing EMM386 code/data
  8050.  02h    WORD    number of paragraphs of EMM386 code/data in UMB
  8051.  04h    WORD    ???
  8052. --------D-214403-----------------------------
  8053. INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL
  8054.     AX = 4403h
  8055.     BX = file handle referencing character device
  8056.     CX = number of bytes to write
  8057.     DS:DX -> data to write
  8058. Return: CF clear if successful
  8059.         AX = number of bytes actually written
  8060.     CF set on error
  8061.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8062. Notes:    format of data is driver-specific (see below for some specific cases)
  8063.     if the file handle refers to "4DOSSTAK", the 4DOS (v2.x-3.03)
  8064.       KEYSTACK.SYS driver will push the specified characters on the
  8065.       keyboard stack; similarly for "NDOSSTAK", the NDOS KEYSTACK.SYS
  8066.       driver will push the characters onto the keyboard stack
  8067. SeeAlso: AX=4400h,AX=4402h,AX=4405h,INT 2F/AX=122Bh,INT 2F/AX=D44Dh
  8068. SeeAlso: INT 2F/AX=D44Fh
  8069. --------c-214403-----------------------------
  8070. INT 21 - SMARTDRV.SYS v3.x only - IOCTL - CACHE CONTROL
  8071.     AX = 4403h
  8072.     BX = handle for device "SMARTAAR"
  8073.     CX = number of bytes to write
  8074.     DS:DX -> SMARTDRV control block (see #0631)
  8075. Return: CF clear if successful
  8076.         AX = number of bytes actually written
  8077.             0000h if control block too small for given command
  8078.     CF set on error
  8079.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8080. SeeAlso: AX=4402h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
  8081.  
  8082. (Table 0630)
  8083. Values for SMARTDRV function code:
  8084.  00h    flush cache
  8085.  01h    flush and discard cache
  8086.  02h    disable caching (flushes and discards cache first)
  8087.  03h    enable caching
  8088.  04h    control write caching
  8089.  05h    set flushing tick count
  8090.  06h    lock cache contents
  8091.  07h    unlock cache contents
  8092.  08h    set flush-on-reboot flag
  8093.  09h    unused
  8094.  0Ah    control full-track caching
  8095.  0Bh    reduce cache size
  8096.  0Ch    increase cache size
  8097.  0Dh    set INT 13 chain address
  8098.  
  8099. Format of SMARTDRV control block:
  8100. Offset    Size    Description    (Table 0631)
  8101.  00h    BYTE    function code (see #0630)
  8102. ---functions 00h-03h,06h,07h---
  8103.  no additional fields
  8104. ---function 04h---
  8105.  01h    BYTE    write caching control action
  8106.         00h turn off write-through
  8107.         01h turn on write-through
  8108.         02h turn off write buffering (also flushes cache)
  8109.         03h turn on write buffering (also flushes cache)
  8110. ---function 05h---
  8111.  01h    WORD    number of timer ticks between cache flushes
  8112. ---function 08h---
  8113.  01h    BYTE    new flush-on-reboot flag (00h off, 01h on)
  8114. ---function 0Ah---
  8115.  01h    BYTE    full-track writes are
  8116.         00h not cached
  8117.         01h cached
  8118. ---functions 0Bh,0Ch---
  8119.  01h    WORD    number of 16K pages by which to increase/reduce cache size
  8120. ---function 0Dh---
  8121.  01h    DWORD    new address to which to chain on INT 13
  8122. Note:    the previous address is not preserved
  8123. --------d-214403-----------------------------
  8124. INT 21 - CD-ROM device driver - IOCTL OUTPUT
  8125.     AX = 4403h
  8126.     BX = file handle referencing character device for CD-ROM driver
  8127.     CX = number of bytes to write
  8128.     DS:DX -> control block (see #0632)
  8129. Return: CF clear if successful
  8130.         AX = number of bytes actually written
  8131.     CF set on error
  8132.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8133. SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h
  8134.  
  8135. Format of CR-ROM control block:
  8136. Offset    Size    Description    (Table 0632)
  8137.  00h    BYTE    function code
  8138.         00h eject disk
  8139.         01h lock/unlock door
  8140.         02h reset drive
  8141.         03h control audio channel
  8142.         04h write device control string
  8143.         05h close tray
  8144. ---functions 00h,02h,05h---
  8145.  no further fields
  8146. ---function 01h---
  8147.  01h    BYTE    lock function
  8148.         00h unlock door
  8149.         01h lock door
  8150. ---function 03h---
  8151.  01h    BYTE    input channel (0-3) for output channel 0
  8152.  02h    BYTE    volume for output channel 0
  8153.  03h    BYTE    input channel (0-3) for output channel 1
  8154.  04h    BYTE    volume for output channel 1
  8155.  05h    BYTE    input channel (0-3) for output channel 2
  8156.  06h    BYTE    volume for output channel 2
  8157.  07h    BYTE    input channel (0-3) for output channel 3
  8158.  08h    BYTE    volume for output channel 3
  8159. Note:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  8160.       right prime; a volume of 00h is off
  8161. ---function 04h---
  8162.  01h  N BYTEs    bytes to send directly to the CD-ROM drive without
  8163.           interpretation
  8164. --------d-214403-----------------------------
  8165. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  8166.     AX = 4403h
  8167.     BX = handle for device "SCSITAPE"
  8168.     CX = number of bytes to write
  8169.     DS:DX -> SCSITAPE control block (see #0633)
  8170. Return: CF clear if successful
  8171.         AX = number of bytes actually written
  8172.     CF set on error
  8173.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8174. SeeAlso: AX=4405h"ST-01",INT 78/AH=10h
  8175.  
  8176. Format of SCSITAPE control block:
  8177. Offset    Size    Description    (Table 0633)
  8178.  00h    WORD    command type
  8179.         'F' Format (argument 1 = interleave, argument 2 = format type)
  8180.         'E' Erase
  8181.         'R' Rewind
  8182.         'L' Load
  8183.         'N' No Load
  8184.         'S' Space (argument 1 = count, argument 2 = type)
  8185.         'M' File Mark (argument 1 = count)
  8186.         'A' Reassign
  8187.  02h    WORD    argument 1
  8188.  04h    WORD    argument 2
  8189.  06h    WORD    segment of command buffer
  8190.  08h    WORD    offset of command buffer
  8191.  0Ah    WORD    length of command buffer
  8192. --------E-214403-----------------------------
  8193. INT 21 U - AI Architects - OS/x86??? - API
  8194.     AX = 4403h
  8195.     BX = handle for device "AIA_OS"
  8196.     CX = number of bytes to write (ignored)
  8197.     DS:DX -> 12-byte buffer, first byte is command:
  8198.             81h installation check
  8199.             82h get API entry point
  8200.             84h uninstall
  8201. Return: CF clear if successful
  8202.         AX = number of bytes actually written
  8203.     CF set on error
  8204.         AX = error code (01h,05h,06h,0Ch,0Dh) (see #0770 at AH=59h)
  8205. Notes:    these functions are only available if the DOS extender was loaded as a
  8206.       device driver in CONFIG.SYS
  8207.     called by TKERNEL (a licensed version of AI Architects/Ergo OS/x86)
  8208. SeeAlso: INT 2F/AX=FBA1h/BX=0081h,INT 2F/AX=FBA1h/BX=0082h
  8209. Index:    installation check;OS/x86|entry point;OS/x86|uninstall;OS/x86
  8210.  
  8211. Format of buffer on return:
  8212. Offset    Size    Description    (Table 0634)
  8213.  00h  4 BYTEs    signature "IABH"
  8214. ---if func 81h---
  8215.  (no additional fields)
  8216. ---if func 82h---
  8217.  04h    DWORD    pointer to API entry point (see INT 2F/AX=FBA1h/BX=0082h)
  8218. ---if func 84h---
  8219.  04h    WORD    success indicator
  8220.  06h    WORD    segment of ???
  8221.  08h    WORD    segment of ??? memory block to free if nonzero
  8222.  0Ah    WORD    segment of ??? memory block to free if nonzero
  8223. --------V-214403-----------------------------
  8224. INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION???
  8225.     AX = 4403h
  8226.     BX = file handle for device "PGS1600$"
  8227.     CX = 0018h (size of buffer)
  8228.     DS:DX -> configuration buffer (see #0596 at AX=4402h"PGS1600")
  8229. Return: CF clear if successful
  8230.         AX = number of bytes actually written
  8231.     CF set on error
  8232.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8233. Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  8234.       display adapter, which provides a 1600x1200 monochrome display as
  8235.       well as one of two emulations, MDA or CGA.
  8236. SeeAlso: AX=4402h"PGS1600"
  8237. --------N-214403-----------------------------
  8238. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  8239.     AX = 4403h
  8240.     BX = file handle referencing device "$IPCUST"
  8241.     CX, DS:DX ignored
  8242. Return: CF clear if successful
  8243.         AX destroyed
  8244.     CF set on error
  8245.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8246. Notes:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  8247.       version 2.05.     If less than the entire data is read or written,
  8248.       the next read/write continues where the previous one ended; this
  8249.       call and AX=4402h both reset the location at which the next
  8250.       operation starts to zero
  8251.     v2.1+ uses a new configuration method, but allows the installation
  8252.       of IPCUST.SYS for backward compatibility with other software which
  8253.       must read the PC/TCP configuration
  8254. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4402h"IPCUST"
  8255. --------V-214403-----------------------------
  8256. INT 21 - Compaq AG1024.SYS - CPQ_MGES - IOCTL OUTPUT
  8257.     AX = 4403h
  8258.     BX = file handle referencing device "CPQ_MGES"
  8259.     DS:DX -> request packet (see #0635)
  8260.     CX ignored
  8261. Return: CF clear if successful
  8262.         AX destroyed
  8263.         data buffer filled (if applicable)
  8264.         first word of request packet set to number of bytes of data
  8265.           available (amount returned is smaller of this and requested
  8266.           amount)
  8267.     CF set on error
  8268.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8269. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  8270. SeeAlso: AX=4403h"RGDI"
  8271.  
  8272. Format of Compaq AG1024.SYS request packet:
  8273. Offset    Size    Description    (Table 0635)
  8274.  00h    WORD    function
  8275.         0000h get ??? (26h bytes)
  8276.         0001h get ??? (36h bytes)
  8277.         0002h set ??? (same as returned by function 0001h)
  8278.         0003h get ??? (6 bytes)
  8279.         0004h get ???
  8280.         0005h get ???
  8281.         0006h get ??? (10h bytes)
  8282.         0007h set ??? (same as returned by function 0006h)
  8283. ---functions 00h-03h,06h,07h---
  8284.  02h    WORD    size of data buffer
  8285.  04h    DWORD    -> buffer for function's data
  8286.  ---functions 04h,05h---
  8287.  02h    WORD    ???
  8288.  04h    WORD    size of data buffer
  8289.  06h    DWORD    -> buffer to receive data
  8290. --------V-214403-----------------------------
  8291. INT 21 - Compaq AG1024.SYS - RGDI - IOCTL OUTPUT
  8292.     AX = 4403h
  8293.     BX = file handle referencing device "$$$$RGDI"
  8294.     DS:DX -> request packet (see #0636)
  8295.     CX ignored
  8296. Return: CF clear if successful
  8297.         AX destroyed
  8298.         data buffer filled (if applicable)
  8299.         first word of request packet set to number of bytes of data
  8300.           available (amount returned is smaller of this and requested
  8301.           amount)
  8302.     CF set on error
  8303.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8304. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  8305. SeeAlso: AX=4402h"RGDI",AX=4403h"CPQ_MGES"
  8306.  
  8307. Format of Compaq AG1024.SYS request packet:
  8308. Offset    Size    Description    (Table 0636)
  8309.  00h    WORD    function
  8310.         0000h get entry points
  8311.         0001h get ???
  8312.  02h    DWORD    address of buffer for returned data
  8313. --------m-214403SF01-------------------------
  8314. INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX OFF
  8315.     AX = 4403h subfn 01h
  8316.     BX = handle for device "386MAX$$"
  8317.     DS:DX -> BYTE 01h
  8318.     CX ignored
  8319. Return: DS:DX -> BYTE status (00h = successful)
  8320.     CF clear if successful
  8321.         AX destroyed
  8322.     CF set on error
  8323.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8324. Note:    this function will fail if any EMS or UMBs are in use
  8325. SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=05h
  8326. --------m-214403SF02-------------------------
  8327. INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX ON
  8328.     AX = 4403h subfn 02h
  8329.     BX = handle for device "386MAX$$"
  8330.     DS:DX -> BYTE 02h
  8331.     CX ignored
  8332. Return: DS:DX -> BYTE status (00h = successful)
  8333.     CF clear if successful
  8334.         AX destroyed
  8335.     CF set on error
  8336.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8337. SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h
  8338. --------m-214403SF03-------------------------
  8339. INT 21 U - Qualitas 386MAX v6.01+ - SET STATE
  8340.     AX = 4403h subfn 03h
  8341.     BX = handle for device "386MAX$$"
  8342.     CX = number of bytes to copy (up to size of state buffer)
  8343.     DS:DX -> BYTE 03h followed by state buffer
  8344.           (see #0579 at AX=4402h"386MAX")
  8345. Return: CF clear if successful
  8346.         AX = number of bytes actually written
  8347.     CF set on error
  8348.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8349. Note:    the first byte of the buffer must be either 01h, 02h, or 03h
  8350.       (specifying the version of the state record) and the buffer must
  8351.       contain CX bytes AFTER the initial byte
  8352. SeeAlso: AX=4402h"386MAX"
  8353. --------m-214403SF05-------------------------
  8354. INT 21 U - Qualitas 386MAX v7.00+ - LIMIT AUTOMATIC ACTIVATION TO STD EMS CALLS
  8355.     AX = 4403h subfn 05h
  8356.     BX = handle for device "386MAX$$"
  8357.     DS:DX -> BYTE 05h
  8358.     CX ignored
  8359. Return: CF clear if successful
  8360.         AX destroyed
  8361.     CF set on error
  8362.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8363. Desc:    specifies that 386MAX will only shift from AUTO to ON mode on standard
  8364.       EMS calls INT 67/AH=40h-5Dh
  8365. SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=06h
  8366. --------m-214403SF06-------------------------
  8367. INT 21 U - Qualitas 386MAX v7.00+ - ALLOW AUTOMATIC ACTIVATION ON ANY INT 67
  8368.     AX = 4403h subfn 06h
  8369.     BX = handle for device "386MAX$$"
  8370.     DS:DX -> BYTE 06h
  8371.     CX ignored
  8372. Return: CF clear if successful
  8373.         AX destroyed
  8374.     CF set on error
  8375.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8376. Desc:    specified that 386MAX should shift from AUTO to ON mode on any INT 67
  8377.       call other than INT 67/AH=3Fh
  8378. SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h
  8379. --------n-214403-----------------------------
  8380. INT 21 U - PenDOS PENDEV.SYS - ???
  8381.     AX = 4403h
  8382.     BX = file handle for device "$$PENDOS" or "$$PD_REG"
  8383.     CX = size of buffer
  8384.     DS:DX -> buffer containing ???
  8385. Return: CF clear if successful
  8386.         buffer filled
  8387.     CF set on error
  8388.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8389. Program: A limited version of PenDOS by Communication Intelligence Corporation,
  8390.       which provides pen capability to keyboard-based programs, is bundled
  8391.       with IBM DOS 6.1
  8392. Note:    this call sets the WORD at offset 1Ah into the device driver request
  8393.       header used to call the driver to 0000h.
  8394. SeeAlso: AX=4402h"PENDEV.SYS"
  8395. --------D-214404-----------------------------
  8396. INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL
  8397.     AX = 4404h
  8398.     BL = drive number (00h = default, 01h = A:, etc.)
  8399.     CX = number of bytes to read
  8400.     DS:DX -> buffer
  8401. Return: CF clear if successful
  8402.         AX = number of bytes actually read
  8403.     CF set on error
  8404.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8405. Note:    format of data is driver-specific
  8406. SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh
  8407. --------d-214404-----------------------------
  8408. INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER
  8409.     AX = 4404h
  8410.     BL = drive number (00h = default, 01h = A:, etc.)
  8411.     CX = 0004h
  8412.     DS:DX -> DWORD buffer to receive device driver address
  8413. Note:    In addition to returning the address of the Stacker device driver,
  8414.       this call also sets the volume number at offset 3Eh in the device
  8415.       driver (see INT 25/AX=CDCDh)
  8416. SeeAlso: INT 25/AX=CDCDh
  8417. --------d-214404-----------------------------
  8418. INT 21 - Stacker - GET STACVOL FILE SECTORS
  8419.     AX = 4404h
  8420.     BL = drive number (0 is current drive)
  8421.     CX = byte count (i.e., 200h = 1 sector)
  8422.     DS:DX -> buffer (see #0637)
  8423. Return: Data Buffer contains the number of sectors requested from the
  8424.       STACVOL physical file for the drive specified.
  8425.  
  8426. Format of Stacker buffer:
  8427. Offset    Size    Description    (Table 0637)
  8428.  00h    WORD    01CDh
  8429.  02h    WORD    sector count
  8430.  04h    DWORD    number of starting sector
  8431.  08h    DWORD    far pointer to Data Buffer
  8432. --------d-214404-----------------------------
  8433. INT 21 - DUBLDISK.SYS v2.6 - GET INFO
  8434.     AX = 4404h
  8435.     BL = drive number of DoubleDisk drive (00h = default, 01h = A:, etc.)
  8436.     CX = number of bytes (000Ah-0014h, call ignored otherwise)
  8437.     DS:DX -> data record (see #0638)
  8438. Return: CF clear if successful
  8439.         AX = number of bytes read
  8440.     CF set on error
  8441.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8442. Program: DUBLDISK.SYS is the device driver portion of DoubleDisk, a disk
  8443.       expander by Vertisoft Systems, Inc.
  8444. Note:    the installation check for v2.6 consists of scanning memory for the
  8445.       signature "FAT 2.6  byte:", which is immediately followed by a data
  8446.       table (see #0639)
  8447. BUG:    VOPT (a disk optimizer by Golden Bow Software) assumes that any driver
  8448.       which returns the "correct" number of bytes when the first word of
  8449.       the buffer for the data record contains the signature value 4444h is
  8450.       DoubleDisk; a workaround is for the non-DoubleDisk driver to return
  8451.       no data if the signature is present
  8452. SeeAlso: AX=440Dh
  8453. Index:    installation check;DUBLDISK.SYS
  8454.  
  8455. Format of DUBLDISK data record:
  8456. Offset    Size    Description    (Table 0638)
  8457.  00h    WORD    (call) signature 4444h
  8458.  02h    BYTE    (call) function
  8459.             00h ???
  8460.             01h ???
  8461. ---function 00h---
  8462.  02h    BYTE    (return) ???
  8463.  03h    BYTE    (return) ???
  8464. ---function 01h---
  8465.  02h    WORD    (return) 4444h
  8466.  04h    WORD    allocation unit size???
  8467.  06h    WORD    ???
  8468.  08h    WORD    ???
  8469.  0Ah    BYTE    ???
  8470.  
  8471. Format of DUBLDISK signature data table:
  8472. Offset    Size    Description    (Table 0639)
  8473.  00h  5 BYTEs    ???
  8474.  05h    BYTE    first drive number
  8475.  06h    BYTE    number of drives
  8476.  07h    ???
  8477. --------d-214404-----------------------------
  8478. INT 21 - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
  8479.     AX = 4404h
  8480.     BL = drive number (00h = default, 01h = A:, etc)
  8481.     CX = 000Ah (size of DSPACKET structure)
  8482.     DS:DX -> DSPACKET structure (see #0640)
  8483. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  8484.         AX = number of bytes actually transferred
  8485.     CF set on error
  8486.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8487. SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  8488.  
  8489. Format of DoubleSpace DSPACKET structure:
  8490. Offset    Size    Description    (Table 0640)
  8491.  00h    WORD    signature 444Dh ("DM")
  8492.  02h    BYTE    command code
  8493.         46h ('F') flush internal caches
  8494.         49h ('I') flush and invalidate internal caches
  8495.  03h    WORD    result code
  8496.         (return) 4F4Bh ("OK") if successful, else unchanged
  8497.  05h  5 BYTEs    padding
  8498. --------d-214404-----------------------------
  8499. INT 21 - DBLSPACE.BIN 6.2 - IOCTL - GET ??? FOR SPECIFIED DRIVE
  8500.     AX = 4404h
  8501.     BL = drive number (00h = default, 01h = A:, etc)
  8502.     CX = size of DSPACKET structure (ignored in DOS 6.2)
  8503.     DS:DX -> DSPACKET structure (see #0641)
  8504. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  8505.         AX = number of bytes actually transferred
  8506.     CF set on error
  8507.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8508. SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  8509.  
  8510. Format of DoubleSpace DSPACKET structure:
  8511. Offset    Size    Description    (Table 0641)
  8512.  00h    WORD    signature 444Dh ("DM")
  8513.  02h    BYTE    command code
  8514.         53h ('S') get ??? for specified drive
  8515.  03h    WORD    result code
  8516.         (return) 4F4Bh ("OK") if successful, else unchanged
  8517.  05h    DWORD    (return) pointer to 96-byte ??? data
  8518.  09h    DWORD    (return) pointer to ??? data
  8519.  0Dh  3 BYTEs    reserved
  8520. --------d-214404-----------------------------
  8521. INT 21 U - xDISK v3.31 - CONFIGURE
  8522.     AX = 4404h
  8523.     BL = drive number (00h = default, 01h = A:, etc)
  8524.     CX = 0047h (length of version string)
  8525.     DS:DX -> 79-byte buffer for version string and ???
  8526.     DS:0081h = commandline containing new switches for driver
  8527. Return: CF clear if successful
  8528.         AX = number of bytes actually transferred
  8529.     CF set on error
  8530.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8531. Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
  8532. SeeAlso: AX=4405h"xDISK",INT 2F/AH=DDh/BX=7844h"xDISK"
  8533. --------c-214404-----------------------------
  8534. INT 21 - COMBI-disk v1.13 - GET DATA RECORD
  8535.     AX = 4404h
  8536.     BL = drive number (00h = default, 01h = A:, etc)
  8537.     CX = 0032h (length of data packet)
  8538.     DS:DX -> buffer for data packet (see #0642)
  8539. Return: CF clear if successful
  8540.         AX = number of bytes actually transferred
  8541.     CF set on error
  8542.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8543. Program: COMBI-disk is a shareware combination cache and RAMdisk sharing a
  8544.       single pool of memory by Vadim V. Vlasov
  8545. Note:    the installation check consists of scanning the valid drives for one
  8546.       which returns a correctly-sized data packet with the proper
  8547.       signature in the first field
  8548. SeeAlso: AX=4405h"COMBI"
  8549. Index:    installation check;COMBI-disk
  8550.  
  8551. Format of COMBI-disk data packet:
  8552. Offset    Size    Description    (Table 0642)
  8553.  00h  6 BYTEs    ASCIZ signature "COMBI"
  8554.  06h    WORD    version (high byte = major, low = decimal minor version)
  8555.  08h    BYTE    current options (see below)
  8556.  09h    BYTE    sectors per allocation block
  8557.  0Ah    WORD    maximum buffer in KB
  8558.  0Ch    WORD    current buffer in KB (less than max if XMS memory being lent)
  8559.  0Eh    WORD    total number of allocation blocks
  8560.  10h    WORD    current number of allocation blocks
  8561.  12h    WORD    number of blocks being used by RAM disk
  8562.  14h    WORD    number of blocks being used by cache or unused
  8563.  16h    WORD    number of dirty cache blocks
  8564.  18h    WORD    number of blocks which could not be written out due to errors
  8565.  1Ah    WORD    total number of read requests
  8566.  1Ch    WORD    total number of sectors read
  8567.  1Eh    WORD    number of BIOS read requests (cache misses)
  8568.  20h    WORD    number of sectors read via BIOS (cache misses)
  8569.  22h    WORD    total number of write requests
  8570.  24h    WORD    total number of sectors written
  8571.  26h    WORD    number of BIOS write requests
  8572.  28h    WORD    number of sectors written via BIOS
  8573.  2Ah    WORD    number of RAM disk read requests
  8574.  2Ch    WORD    number of sectors read from RAM disk
  8575.  2Eh    WORD    number of RAM disk write requests
  8576.  30h    WORD    number of sectors written to RAM disk
  8577. --------d-214404-----------------------------
  8578. INT 21 - SFS v1.00 - GET CONFIGURATION INFORMATION
  8579.     AX = 4404h
  8580.     BL = drive number (00h = default, 01h = A:, etc)
  8581.     CX = 001Ah (length of data packet)
  8582.     DS:DX -> buffer for data packet (see #0643)
  8583. Return: CF clear if successful
  8584.         AX = number of bytes actually transferred
  8585.     CF set on error
  8586.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8587. Program: SFS (Secure FileSystem) is a shareware encrypting disk driver by
  8588.       Peter C. Gutmann
  8589. SeeAlso: AX=4405h"SFS"
  8590.  
  8591. Format of SFS data packet:
  8592. Offset    Size    Description    (Table 0643)
  8593.  00h  4 BYTEs    signature string "SFS1"
  8594.  04h    WORD    SFS unit number (0-based)
  8595.  06h    WORD    drive on which the SFS volume is mounted
  8596.  08h    DWORD    sector offset of logical volume from start of physical volume
  8597.         0 if logical volume = physical volume
  8598.  0Ch    WORD    flag: 00h = no disk mounted, 01h = disk mounted
  8599.  0Eh    WORD    flag: 00h read/write, 01h read-only
  8600.  10h    WORD    quick-unmount hotkey (high byte = shift state, low = scan code)
  8601.  12h    WORD    auto-unmount time in minutes, or 0000h if already expired, or
  8602.         FFFFh if not set
  8603.  14h    WORD    time in minutes remaining before auto-unmount
  8604.  16h    WORD    internal driver check code
  8605.         0000h no error
  8606.         0001h driver consistency check failed
  8607.         0002h unit consistency check failed
  8608.  18h    WORD    disk access mode
  8609.         0000h BIOS
  8610.         0001h IDE direct access
  8611.         0002h SCSI direct access
  8612. --------D-214405-----------------------------
  8613. INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL
  8614.     AX = 4405h
  8615.     BL = drive number (00h = default, 01h = A:, etc)
  8616.     CX = number of bytes to write
  8617.     DS:DX -> data to write
  8618. Return: CF clear if successful
  8619.         AX = number of bytes actually written
  8620.     CF set on error
  8621.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8622. Note:    format of data is driver-specific
  8623. SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh
  8624. --------d-214405-----------------------------
  8625. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  8626.     AX = 4405h
  8627.     BX = drive number (00h = default, 01h = A:, etc)
  8628.     CX = number of bytes to write
  8629.     DS:DX -> SCSIDISK control block (see also #0633 at AX=4403h"ST-01")
  8630. Return: CF clear if successful
  8631.         AX = number of bytes actually written
  8632.     CF set on error
  8633.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8634. SeeAlso: AX=4403h"ST-01"
  8635. --------d-214405-----------------------------
  8636. INT 21 U - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
  8637.     AX = 4405h
  8638.     BL = drive number (00h = default, 01h = A:, etc)
  8639.     CX = 000Ah (size of DSPACKET structure)
  8640.     DS:DX -> DSPACKET structure (see #0644)
  8641. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  8642.         AX = number of bytes actually transferred
  8643.     CF set on error
  8644.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8645. Note:    this call is identical to the documented AX=4404h
  8646. SeeAlso: AX=4404h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  8647.  
  8648. Format of DoubleSpace DSPACKET structure:
  8649. Offset    Size    Description    (Table 0644)
  8650.  00h    WORD    signature 444Dh ("DM")
  8651.  02h    BYTE    command code
  8652.         46h ('F') flush internal caches
  8653.         49h ('I') flush and invalidate internal caches
  8654.  03h    WORD    result code
  8655.         (return) 4F4Bh ("OK") if successful, else unchanged
  8656.  05h  5 BYTEs    padding
  8657. --------d-214405-----------------------------
  8658. INT 21 U - xDISK v3.31 - ???
  8659.     AX = 4405h
  8660.     BL = drive number (00h = default, 01h = A:, etc)
  8661.     CX = number of bytes to write
  8662.     DS:DX -> buffer containing version string
  8663.     ???
  8664. Return: CF clear if successful
  8665.         AX = number of bytes actually transferred
  8666.     CF set on error
  8667.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8668. Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
  8669. SeeAlso: AX=4404h"xDISK",INT 2F/AH=DDh/BX=7844h"xDISK"
  8670. --------d-214405-----------------------------
  8671. INT 21 - COMBI-disk v1.13 - CONTROL COMBI-disk
  8672.     AX = 4405h
  8673.     BL = drive number (00h = default, 01h = A:, etc) for RAM disk
  8674.     CX = number of bytes to write
  8675.     DS:DX -> buffer containing command packet (see #0646)
  8676. Return: CF clear if successful
  8677.         AX = number of bytes actually transferred
  8678.     CF set on error
  8679.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8680. SeeAlso: AX=4404h"COMBI"
  8681.  
  8682. (Table 0645)
  8683. Values for COMBI-disk command code:
  8684.  80h    flush cache
  8685.  81h    change options byte
  8686.  82h    shrink memory
  8687.  83h    expand memory
  8688.  84h    get dirty block information
  8689.  85h    reset write errors
  8690.  86h    reset counters
  8691.  
  8692. Format of COMBI-disk command packet:
  8693. Offset    Size    Description    (Table 0646)
  8694.  00h    WORD    version
  8695.  02h    BYTE    command code (see #0645)
  8696. ---command code 80h---
  8697.  no additional fields
  8698. ---command code 81h---
  8699.  03h    BYTE    new options byte (see #0647)
  8700. ---command code 82h---
  8701.  03h    WORD    number of KB to release
  8702. ---command code 83h---
  8703.  03h    WORD    number of KB to expand
  8704. ---command code 84h---
  8705.  03h    DWORD    -> buffer for block info (see #0648)
  8706. ---command code 85h---
  8707.  03h    DWORD    block ID
  8708. ---command code 86h---
  8709.  03h    BYTE    which counters to reset
  8710.         bit 0: hard disk read counts
  8711.         bit 1: hard disk write counts
  8712.         bit 2: RAM disk read/write counts
  8713. Note:    multiple commands may be placed in a single packet by stringing
  8714.       together as many command/argument pairs as desired
  8715.  
  8716. Bitfields for COMBI-disk options byte:
  8717. Bit(s)    Description    (Table 0647)
  8718.  0    cache off
  8719.  1    cache frozen
  8720.  2    write caching enabled
  8721.  3    delayed writing disabled
  8722.  5    fix memory allocation (no XMS lending)
  8723.  6    no 'sector not found' error
  8724.  
  8725. Format of COMBI-disk block info:
  8726. Offset    Size    Description    (Table 0648)
  8727.  00h    DWORD    block ID
  8728.  04h    BYTE    bitmask of valid sectors in block
  8729.  05h    BYTE    bitmask of dirty sectors in block
  8730.  06h    BYTE    last error returned by BIOS
  8731.  07h    BYTE    number of errors
  8732. --------D-214405-----------------------------
  8733. INT 21 - SFS v1.00 - DRIVER CONTROL
  8734.     AX = 4405h
  8735.     BL = drive number (00h = default, 01h = A:, etc)
  8736.     CX = number of bytes to write
  8737.     DS:DX -> data to write (see #0650)
  8738. Return: CF clear if successful
  8739.         AX = number of bytes actually written
  8740.     CF set on error
  8741.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8742. Program: SFS (Secure FileSystem) is a shareware encrypting disk driver by
  8743.       Peter C. Gutmann
  8744. SeeAlso: AX=4404h"SFS"
  8745.  
  8746. (Table 0649)
  8747. Values for SFS control function:
  8748.  00h    "PACKET_SET_DISKINFO"     set disk parameters
  8749.  01h    "PACKET_SET_KEYINFO"     set keying information
  8750.  02h    "PACKET_SET_READONLY"     select read/write or read-only
  8751.  03h    "PACKET_SET_DRIVENO"     set drive number to mount
  8752.  04h    "PACKET_SET_MOUNTSTATUS" set mount status
  8753.  05h    "PACKET_SET_UNMOUNT"     set/clear quick-unmount hotkey
  8754.  06h    "PACKET_SET_TIMEOUT"     set/clear auto-unmount timeout
  8755.  
  8756. Format of SFS control data packet:
  8757. Offset    Size    Description    (Table 0650)
  8758.  00h    WORD    signature 4330h ('C0')
  8759.  02h    WORD    function (see #0649)
  8760. ---function 00h---
  8761.  04h    WORD    sector size in bytes
  8762.  06h    BYTE    sectors per cluster
  8763.  07h    WORD    number of boot sectors
  8764.  09h    BYTE    number of copies of FAT
  8765.  0Ah    WORD    size of root directory in entries
  8766.  0Ch    WORD    number of sectors on disk, 16-bit
  8767.  0Eh    BYTE    media descriptor byte
  8768.  0Fh    WORD    sectors per FAT
  8769.  11h    WORD    sectors per track
  8770.  13h    WORD    number of heads
  8771.  15h    DWORD    number of hidden sectors
  8772.  19h    DWORD    number of sectors on disk, 32-bit
  8773. ---function 01h---
  8774.  04h 20 BYTEs    master IV for encrypted disk
  8775.  18h 64 BYTEs    NDC/SHS keying information
  8776. ---function 02h---
  8777.  04h    WORD    read-only state: 00h read-only, 01h read/write
  8778. ---function 03h---
  8779.  04h    WORD    drive number (see #0651)
  8780.  06h    DWORD    sector offset of logical volume from start of physical volume
  8781.         0 if logical volume = physical volume
  8782. ---function 04h---
  8783.  04h    WORD    mount status (00h unmounted, 01h mounted)
  8784. ---function 05h---
  8785.  04h    WORD    hotkey (high byte = shift state, low byte = scan code or 00h)
  8786.         0000h to disable hotkey
  8787. ---function 06h---
  8788.  04h    WORD    timeout in minutes before automatic unmount
  8789.         0000h to disable auto-unmount
  8790. Notes:    the data for function 00h corresponds to a DOS BPB (see AH=53h)
  8791.     functions 00h, 01h, and 03h automatically unmount the encrypted drive
  8792.     unmounting a drive with function 04h also destroys the encryption
  8793.       information in the driver and forces all dirty buffers to be flushed
  8794.  
  8795. Bitfields for SFS drive number:
  8796. Bit(s)    Description    (Table 0651)
  8797.  15-12    drive access mode
  8798.     0000 BIOS access
  8799.     0001 direct IDE access
  8800.     0010 direct SCSI access
  8801. ---if BIOS access---
  8802.  11-8    unused (0)
  8803.  7-0    BIOS drive number
  8804. ---if IDE access---
  8805.  11-8    unused (0)
  8806.  7-0    IDE drive number
  8807. ---if SCSI access---
  8808.  11-8    SCSI host number
  8809.  7-4    SCSI target ID
  8810.  3-0    SCSI logical unit number
  8811. --------D-214406-----------------------------
  8812. INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
  8813.     AX = 4406h
  8814.     BX = file handle
  8815. Return: CF clear if successful
  8816.         AL = input status
  8817.         00h not ready (device) or at EOF (file)
  8818.         FFh ready
  8819.     CF set on error
  8820.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8821. Note:    files may not register as being at EOF if positioned there by AH=42h
  8822. SeeAlso: AX=4407h,INT 2F/AX=122Bh
  8823. --------D-214407-----------------------------
  8824. INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
  8825.     AX = 4407h
  8826.     BX = file handle
  8827. Return: CF clear if successful
  8828.         AL = input status
  8829.         00h not ready
  8830.         FFh ready
  8831.     CF set on error
  8832.         AX = error code (01h,05h,06h,0Dh) (see #0770 at AH=59h)
  8833. Note:    for DOS 2+, files are always ready for output, even if the disk is
  8834.       full or no media is in the drive
  8835. SeeAlso: AX=4406h,INT 2F/AX=122Bh
  8836. --------D-214408-----------------------------
  8837. INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE
  8838.     AX = 4408h
  8839.     BL = drive number (00h = default, 01h = A:, etc)
  8840. Return: CF clear if successful
  8841.         AX = media type (0000h removable, 0001h fixed)
  8842.     CF set on error
  8843.         AX = error code (01h,0Fh) (see #0770 at AH=59h)
  8844. SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh
  8845. --------D-214409-----------------------------
  8846. INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE
  8847.     AX = 4409h
  8848.     BL = drive number (00h = default, 01h = A:, etc)
  8849. Return: CF clear if successful
  8850.         DX = device attribute word
  8851.         bit 15: drive is SUBSTituted
  8852.         bit 12: drive is remote
  8853.         bit  9: direct I/O not allowed
  8854.     CF set on error
  8855.         AX = error code (01h,0Fh) (see #0770 at AH=59h)
  8856. Note:    on local drives, DX bits not listed above are the attribute word from
  8857.       the device driver header (see #0744 at AH=52h); for remote drives,
  8858.       the other bits appear to be undefined for DOS versions prior to 5.0
  8859.       (they are all cleared in DOS 5+)
  8860. SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh
  8861. --------D-21440A-----------------------------
  8862. INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE
  8863.     AX = 440Ah
  8864.     BX = handle
  8865. Return: CF clear if successful
  8866.         DX = attribute word (as stored in SFT)
  8867.         bit 15: set if remote
  8868.         bit 14: date/time not set on close
  8869.     CF set on error
  8870.         AX = error code (01h,06h) (see #0770 at AH=59h)
  8871. Notes:    if file is remote, Novell Advanced NetWare 2.0 returns the number of
  8872.       the file server on which the handle is located in CX
  8873.     DR-DOS 3.41 and 5.0 clear all bits of DX except bit 15
  8874. SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh
  8875. --------D-21440B-----------------------------
  8876. INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT
  8877.     AX = 440Bh
  8878.     CX = pause between retries (default 1)
  8879.     DX = number of retries (default 3)
  8880. Return: CF clear if successful
  8881.     CF set on error
  8882.         AX = error code (01h) (see #0770 at AH=59h)
  8883. Notes:    delay is dependent on processor speed (value in CX specifies number of
  8884.       64K-iteration empty loops to execute)
  8885.     if DX=0000h on entry, the retry count is left unchanged
  8886. SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh
  8887. --------D-21440C-----------------------------
  8888. INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
  8889.     AX = 440Ch
  8890.     BX = device handle
  8891.     CH = category code (see #0652)
  8892.     CL = function number (see #0653)
  8893.     DS:DX -> parameter block (see #0654,#0655,#0656,#0657,#0658,#0659)
  8894.     SI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
  8895.     DI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
  8896. Return: CF set on error
  8897.         AX = error code (see #0770 at AH=59h)
  8898.     CF clear if successful
  8899.         DS:DX -> iteration count if CL=65h
  8900.         SI = returned value (European MS-DOS 4.0, OS/2 comp box)
  8901.         DI = returned value (European MS-DOS 4.0, OS/2 comp box)
  8902. Note:    DR-DOS 3.41 and 5.0 return error code 16h on CL=45h,65h if the device
  8903.       does not support a retry counter
  8904. SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=14FFh
  8905. SeeAlso: INT 2F/AX=1A01h
  8906.  
  8907. (Table 0652)
  8908. Values for IOCTL category code:
  8909.  00h    unknown (DOS 3.3+)
  8910.  01h    COMn: (DOS 3.3+)
  8911.  03h    CON (DOS 3.3+)
  8912.  05h    LPTn:
  8913.  9Eh    Media Access Control driver (STARLITE)
  8914.  00h-7Fh reserved for Microsoft
  8915.  80h-FFh reserved for OEM/user-defined
  8916.  
  8917. (Table 0653)
  8918. Values for generic character IOCTL function:
  8919.  00h    MAC driver Bind (STARLITE)
  8920.  45h    set iteration (retry) count
  8921.  4Ah    select code page
  8922.  4Ch    start code-page preparation
  8923.  4Dh    end code-page preparation
  8924.  5Fh    set display information (DOS 4+)
  8925.  65h    get iteration (retry) count
  8926.  6Ah    query selected code page
  8927.  6Bh    query prepare list
  8928.  7Fh    get display information (DOS 4+)
  8929. Note:    bit assignments for function code:
  8930.         bit 7: set to ignore if unsupported, clear to return error
  8931.         bit 6: set if passed to driver, clear if intercepted by DOS
  8932.         bit 5: set if queries data from device, clear if sends command
  8933.         bits 4-0: subfunction
  8934.  
  8935. Format of parameter block for function 00h:
  8936. Offset    Size    Description    (Table 0654)
  8937.  00h  8 BYTEs    ASCIZ signature "STARMAC"
  8938.  08h    WORD    version
  8939.  0Ah    WORD    flags
  8940.         bit 0: media requires connect or listen request before use
  8941.         bit 1: network is a LAN (broadcast/multicast supported)
  8942.         bit 2: point-to-point network
  8943.  0Ch    WORD    handle for use with MAC driver's private interface (filled in
  8944.         by MAC driver)
  8945.  0Eh    WORD    context
  8946.  10h    WORD    approximate speed in KB/sec (filled in by MAC driver)
  8947.  12h    WORD    approximate cost in cents per hour (filled in by MAC driver)
  8948.  14h    WORD    maximum packet size in bytes (filled in by MAC driver)
  8949.  16h    WORD    addressing format (filled in by MAC driver)
  8950.         0000h general addressing
  8951.         0001h Ethernet addressing
  8952.         0002h Token Ring addressing
  8953.         0003h Token Bus addressing
  8954.  18h    DWORD    Send entry point (filled in by MAC driver)
  8955.  1Ch    DWORD    RegisterEventHandler entry point (filled in by MAC driver)
  8956.  20h    DWORD    SetPacketFilter entry point (filled in by MAC driver)
  8957.  24h    DWORD    UnBind entry point (filled in by MAC driver)
  8958.  
  8959. Format of parameter block for function 45h:
  8960. Offset    Size    Description    (Table 0655)
  8961.  00h    WORD    number of times output is attempted before driver assumes
  8962.           device is busy
  8963.  
  8964. Format of parameter block for functions 4Ah and 6Ah:
  8965. Offset    Size    Description    (Table 0656)
  8966.  00h    WORD    length of data
  8967.  02h    WORD    code page ID
  8968.  04h 2N BYTEs    DCBS (double byte character set) lead byte range
  8969.           start/end for each of N ranges (DOS 4.0)
  8970.     WORD    0000h  end of data (DOS 4.0)
  8971.  
  8972. Format of parameter block for function 4Ch:
  8973. Offset    Size    Description    (Table 0657)
  8974.  00h    WORD    flags
  8975.         DISPLAY.SYS = 0000h
  8976.         PRINTER.SYS bit 0 clear to prepare downloaded font, set to
  8977.             prepare cartridge selection
  8978.  02h    WORD    length of remainder of parameter block
  8979.  04h    WORD    number of code pages following
  8980.  06h  N WORDs    code page 1,...,N
  8981.  
  8982. Format of parameter block for function 4Dh:
  8983. Offset    Size    Description    (Table 0658)
  8984.  00h    WORD    length of data
  8985.  02h    WORD    code page ID
  8986.  
  8987. Format of parameter block for functions 5Fh and 7Fh:
  8988. Offset    Size    Description    (Table 0659)
  8989.  00h    BYTE    level (0 for DOS 4.x-6.0)
  8990.  01h    BYTE    reserved (0)
  8991.  02h    WORD    length of following data (14)
  8992.  04h    WORD    control flags
  8993.         bit 0 set for blink, clear for intensity
  8994.         bits 1-15 reserved
  8995.  06h    BYTE    mode type (1=text, 2=graphics)
  8996.  07h    BYTE    reserved (0)
  8997.  08h    WORD    colors
  8998.         0000h = monochrome
  8999.         else N bits per pixel
  9000.  0Ah    WORD    pixel columns
  9001.  0Ch    WORD    pixel rows
  9002.  0Eh    WORD    character columns
  9003.  10h    WORD    character rows
  9004.  
  9005. Format of parameter block for function 6Bh:
  9006. Offset    Size    Description    (Table 0660)
  9007.  00h    WORD    length of following data
  9008.  02h    WORD    number of hardware code pages
  9009.  04h  N WORDs    hardware code pages 1,...,N
  9010.     WORD    number of prepared code pages
  9011.       N WORDs    prepared code pages 1,...,N
  9012. --------d-21440C-----------------------------
  9013. INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE
  9014.     AX = 440Ch
  9015.     BX = device handle
  9016.     CH = category code
  9017.         07h tape (ASPITAPE.SYS)
  9018.     CL = function
  9019.         01h "mtop" - perform tape operation
  9020.         02h "mtget" - get tape status
  9021.         03h ignore end-of-tape errors
  9022.         04h enable end-of-tape errors
  9023.     DS:DX -> parameter block (see #0661,#0662)
  9024. Return: CF set on error
  9025.         AX = error code (see #0770 at AH=59h)
  9026.     CF clear if successful
  9027.         DS:DX -> data block
  9028. Notes:    This device driver is a simple DOS interface to the Adaptec Advanced
  9029.       SCSI Programming Interface (ASPI).  It provides the following device
  9030.       names as access to the SCSI tape, 'RMTx' (rewind on close) and
  9031.       'NRMTx' (NO rewind on close) where x can go from 0 to 3.  There may
  9032.       also be the following names 'MTx' and 'NMTx' which default to 1024
  9033.       byte blocks.    The names may also have a '$' appended to try and make
  9034.       them unique from file names of 'RMT0' etc.
  9035.     once opend these devices must be put into RAW mode
  9036. SeeAlso: AX=4402h"ASPI"
  9037.  
  9038. Format of ASPITAPE.SYS mtop parameter block:
  9039. Offset    Size    Description    (Table 0661)
  9040.  00h    WORD    operation code
  9041.         00h "MTWEOF" - write an end-of-file record
  9042.         01h "MTFSF" - forward space file
  9043.         02h "MTBSF" - backward space file
  9044.         03h "MTFSR" - forward space record
  9045.         04h "MTBSR" - backward space record
  9046.         05h "MTREW" - rewind
  9047.         06h "MTOFFL" - rewind and unload
  9048.         07h "MTNOP" - perform TEST UNIT READY
  9049.  02h    DWORD    repetition count
  9050.  
  9051. Format of ASPITAPE.SYS mtget parameter block:
  9052. Offset    Size    Description    (Table 0662)
  9053.  00h    BYTE    ASPI host ID
  9054.  01h    BYTE    SCSI target ID
  9055.  02h    BYTE    SCSI logical unit number
  9056.  03h    BYTE    device parameters
  9057.         bit 0: drive must use fixed-block read and write
  9058.         bit 7: drive is an ASPI device
  9059.  04h    BYTE    current device state (see #0663)
  9060.  05h    BYTE    unit number within driver
  9061.  06h    WORD    fixed block blocksize
  9062.  08h    BYTE    last SCSI status
  9063.  09h    BYTE    last SCSI sense key
  9064.  0Ah    WORD    last SCSI opcode (packed) (see #0664)
  9065.  0Ch    WORD    residual bytes from SCSI opcode
  9066.  
  9067. Bitfields for ASPITAPE.SYS current device state:
  9068. Bit(s)    Description    (Table 0663)
  9069.  0    device currently opened in buffered mode
  9070.  1    drive currently opened in nonbuffered mode
  9071.  2    rewind drive on last close
  9072.  3    drive has been written on
  9073.  4    drive has been read from
  9074.  5    next read will return 0 bytes
  9075.  6    EOM will resemble EOF
  9076.  7    drive may be busy rewinding
  9077.  
  9078. Bitfields for SCSI opcode:
  9079. Bit(s)    Description    (Table 0664)
  9080.  0-7    SCSI operation (SCSI packet byte 0)
  9081.  8-10    SCSI flags (SCSI packet byte 1)
  9082.  11-12    ASPI "Direction Bits" (ASPI SRB byte 3)
  9083. --------D-21440D-----------------------------
  9084. INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
  9085.     AX = 440Dh
  9086.     BL = drive number (00h=default,01h=A:,etc)
  9087.     CH = category code (see #0665)
  9088.     CL = minor code (function) (see #0666)
  9089.     DS:DX -> (DOS) parameter block (see #0667,#0669,#0670,#0671,#0672)
  9090.     SI:DI -> (OS/2 comp box) parameter block (see #0673,#0674,#0675,#0676)
  9091. Return: CF set on error
  9092.         AX = error code (01h,02h) (see #0770 at AH=59h)
  9093.     CF clear if successful
  9094.         DS:DX -> data block if CL=60h or CL=61h
  9095. Notes:    DOS 4.01 seems to ignore the high byte of the number of directory
  9096.       entries in the BPB for diskettes.
  9097.     functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5+
  9098.     the DUBLDISK.SYS v2.6 driver only supports minor codes 60h and 67h
  9099.     DR-DOS 3.41-6.0 only support minor codes 40h-42h and 60h-62h; all
  9100.       other minor codes return error code 16h
  9101.     some PCMCIA calls reportedly appear to be dangerous for MS-DOS versions
  9102.       prior to 5.0
  9103. SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh
  9104.  
  9105. (Table 0665)
  9106. Values for block device IOCTL category code:
  9107.  08h    disk drive
  9108.  00h-7Fh reserved for Microsoft
  9109.  80h-FFh reserved for OEM/user-defined
  9110.  
  9111. (Table 0666)
  9112. Values for generic block IOCTL minor code:
  9113.  00h    (OS/2)    \ used to lock/unlock a drive
  9114.  01h    (OS/2)    /
  9115.  40h    set device parameters
  9116.  41h    write logical device track
  9117.  42h    format and verify logical device track
  9118.  46h    (DOS 4+) set volume serial number (see also AH=69h)
  9119.  47h    (DOS 4+) set access flag
  9120.  50h    (PCMCIA) attribute memory write
  9121.  51h    (PCMCIA) common memory write
  9122.  52h    (PCMCIA) force media change (DOS 5+ ???)
  9123.  53h    (PCMCIA) erase drive
  9124.  54h    (PCMCIA) erase media
  9125.  56h    (PCMCIA) set erase status callback
  9126.  57h    (PCMCIA) append Card Information Structure (CIS) tuple
  9127.  58h    (PCMCIA) erase CIS tuples
  9128.  60h    get device parameters
  9129.  61h    read logical device track
  9130.  62h    verify logical device track
  9131.  66h    (DOS 4+) get volume serial number (see also AH=69h)
  9132.  67h    (DOS 4+) get access flag
  9133.  68h    (DOS 5+) sense media type
  9134.  70h    (PCMCIA) attribute memory read
  9135.  73h    (PCMCIA) get memory media information (DOS 5+ ???)
  9136.  76h    (PCMCIA) get erase status callback
  9137.  77h    (PCMCIA) get first Card Information Structure (CIS) tuple
  9138.  78h    (PCMCIA) get next CIS tuple
  9139.  
  9140. Format of parameter block for functions 40h, 60h:
  9141. Offset    Size    Description    (Table 0667)
  9142.  00h    BYTE    special functions
  9143.         bit 0 set if function to use current BPB, clear if Device
  9144.               BIOS Parameter Block field contains new default BPB
  9145.         bit 1 set if function to use track layout fields only
  9146.             must be clear if CL=60h
  9147.         bit 2 set if all sectors in track same size (should be set)
  9148.         bits 3-7 reserved
  9149.  01h    BYTE    device type (see #0668)
  9150.  02h    WORD    device attributes
  9151.         bit 0 set if nonremovable medium
  9152.         bit 1 set if door lock ("changeline") supported
  9153.         bits 2-15 reserved
  9154.  04h    WORD    number of cylinders
  9155.  06h    BYTE    media type
  9156.         for 1.2M drive
  9157.             00h 1.2M disk (default)
  9158.             01h 320K/360K disk
  9159.         F8h for DUBLDISK.SYS v2.6 expanded drives
  9160.         always 00h for other drive types
  9161.  07h 31 BYTEs    device BPB (see #0760 at AH=53h), bytes after BPB offset 1Eh
  9162.           omitted
  9163. ---function 40h only---
  9164.  26h    WORD    number of sectors per track (start of track layout field)
  9165.         (maximum 63)
  9166.  28h  N word pairs: number,size of each sector in track
  9167.  
  9168. (Table 0668)
  9169. Values for device type:
  9170.  00h    320K/360K disk
  9171.  01h    1.2M disk
  9172.  02h    720K disk
  9173.  03h    single-density 8-inch disk
  9174.  04h    double-density 8-inch disk
  9175.  05h    fixed disk
  9176.  06h    tape drive
  9177.  07h    (DOS 3.3+) other type of block device, normally 1.44M floppy
  9178.  08h    read/write optical disk
  9179.  09h    (DOS 5+) 2.88M floppy
  9180.  
  9181. Format of parameter block for functions 41h, 61h:
  9182. Offset    Size    Description    (Table 0669)
  9183.  00h    BYTE    special functions (reserved, must be zero)
  9184.  01h    WORD    number of disk head
  9185.  03h    WORD    number of disk cylinder
  9186.  05h    WORD    number of first sector to read/write
  9187.  07h    WORD    number of sectors
  9188.  09h    DWORD    transfer address
  9189.  
  9190. Format of parameter block for function 42h:
  9191. Offset    Size    Description    (Table 0670)
  9192.  00h    BYTE    reserved, must be zero (DOS <3.2)
  9193.           bit 0=0: format/verify track
  9194.             1: format status call (DOS 3.2+), don't actually format
  9195.           bits 1-7 reserved, must be zero
  9196.         value on return (DOS 3.3+):
  9197.           00h    specified tracks, sectors/track supported by BIOS
  9198.           01h    function not supported by BIOS
  9199.           02h    specified tracks, sectors/track not allowed for drive
  9200.           03h    no disk in drive
  9201.  01h    WORD    number of disk head
  9202.  03h    WORD    number of disk cylinder
  9203.  
  9204. Format of parameter block for function 62h:
  9205. Offset    Size    Description    (Table 0671)
  9206.  00h    BYTE    reserved, must be zero (DOS <3.2)
  9207.           bit 0=0: verify single track
  9208.             1: verify multiple tracks
  9209.           bits 1-7 reserved, must be zero
  9210.         value on return (DOS 3.3+):
  9211.           00h    specified tracks, sectors/track supported by BIOS
  9212.           01h    function not supported by BIOS
  9213.           02h    specified tracks, sectors/track not allowed for drive
  9214.           03h    no disk in drive
  9215.  01h    WORD    number of disk head
  9216.  03h    WORD    number of disk cylinder
  9217.  05h    WORD    number of tracks to verify (equivalent to 255 or fewer sectors)
  9218.  
  9219. Format of parameter block for functions 46h, 66h:
  9220. Offset    Size    Description    (Table 0672)
  9221.  00h    WORD    (call) info level (should be 0000h)
  9222.  02h    DWORD    disk serial number (binary)
  9223.  06h 11 BYTEs    volume label or "NO NAME    "
  9224.  11h  8 BYTEs    filesystem type "FAT12     " or "FAT16   " (CL=66h only)
  9225.  
  9226. Format of parameter block for functions 47h, 67h:
  9227. Offset    Size    Description    (Table 0673)
  9228.  00h    BYTE    special-function field (must be zero)
  9229.  01h    BYTE    disk-access flag, nonzero if access allowed by driver
  9230.  
  9231. Format of parameter block for function 52h:
  9232.  00h    BYTE    (call) unused???    (Table 0674)
  9233.         (return) 00h if flash/ATA drive but no card inserted
  9234.             unchanged otherwise
  9235. Notes:    the absense of a flash card should be tested by checking the DOS error
  9236.       code rather than the returned byte
  9237.     the parameter byte is cleared to 00h erroneously by the Award
  9238.       PCDISK.EXE v1.02c PCMCIA/ATA driver if no ATA card is inserted
  9239.  
  9240. Format of parameter block for function 68h:
  9241. Offset    Size    Description    (Table 0675)
  9242.  00h    BYTE    01h for default media type, 00h for any other media type
  9243.         (see also INT 13/AH=20h"Compaq")
  9244.  01h    BYTE    02h for 720K, 07h for 1.44M, 09h for 2.88M
  9245.  
  9246. Format of parameter block for function 73h:
  9247. Offset    Size    Description    (Table 0676)
  9248.  00h    BYTE    ???
  9249.         00h ATA card inserted ???
  9250.         80h ATA card not inserted ???
  9251.  01h    BYTE    length of parameter block ???
  9252.         apparently always 40h
  9253.  02h    BYTE    ???
  9254.         00h ATA card not inserted ???
  9255.         0Dh ATA card inserted ???
  9256.  03h  2 BYTEs    ??? (apparently always 00h)
  9257.  05h    BYTE    drive number (0=first) ???
  9258.  06h    BYTE    total number of drives ???
  9259.  07h    BYTE    ???
  9260.         00h ATA card not inserted ???
  9261.         01h ATA card inserted ???
  9262.  08h 17 BYTEs    ???
  9263.  19h    BYTE    ???
  9264.         00h ATA card not inserted ???
  9265.         01h ATA card inserted ???
  9266.  1Ah    BYTE    ??? (apparently always 01h)
  9267.  1Bh    BYTE    ???
  9268.         00h ATA card not inserted ???
  9269.         01h ATA card inserted ???
  9270.  1Ch  2 BYTEs    ??? (apparently always 0015h)
  9271.  1Eh  2 BYTEs    ???
  9272.  20h  2 BYTEs    ??? (apparently always 0110h)
  9273.  22h 15 BYTEs    ???
  9274.  31h  2 BYTEs    ??? (apparently always 7000h)
  9275.  33h 11 BYTEs    driver signature
  9276.         "AWARD PDISK" for Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  9277.  3Eh  2 BYTEs    ???
  9278. --------D-21440E-----------------------------
  9279. INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
  9280.     AX = 440Eh
  9281.     BL = drive number (00h=default,01h=A:,etc)
  9282. Return: CF set on error
  9283.         AX = error code (01h,0Fh) (see #0770 at AH=59h)
  9284.     CF clear if successful
  9285.         AL = 00h block device has only one logical drive assigned
  9286.          1..26 the last letter used to reference the drive (1=A:,etc)
  9287. Note:    DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
  9288.       always returns AL=00h
  9289. SeeAlso: AX=440Fh,INT 2F/AX=122Bh
  9290. --------D-21440F-----------------------------
  9291. INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
  9292.     AX = 440Fh
  9293.     BL = physical drive number (00h=default,01h=A:,etc))
  9294. Return: CF set on error
  9295.         AX = error code (01h,0Fh) (see #0770 at AH=59h)
  9296.     CF clear if successful
  9297.         drive now responds to next logical drive number
  9298. Notes:    maps logical drives to physical drives, similar to DOS's treatment of
  9299.       a single physical floppy drive as both A: and B:
  9300.     DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
  9301.       always returns an error on this function
  9302. SeeAlso: AX=440Eh,INT 2F/AX=122Bh
  9303. --------D-214410-----------------------------
  9304. INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE)
  9305.     AX = 4410h
  9306.     BX = handle for device
  9307.     CH = category code (see #0652)
  9308.     CL = function code (see #0653)
  9309. Return: CF clear if successful
  9310.         AX = 0000h    specified IOCTL function is supported
  9311.     CF set on error
  9312.         AL = 01h    IOCTL capability not available
  9313. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  9314.       standard DOS 3.2 set may use this call first to see whether a
  9315.       particular call is supported
  9316. SeeAlso: AX=440Ch,AX=440Dh,AX=4411h
  9317. --------d-214410BXFFFF-----------------------
  9318. INT 21 U - NewSpace - ENABLE DRIVER
  9319.     AX = 4410h
  9320.     BX = FFFFh
  9321. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  9322.       all files as they are written and decompresses them as they are read
  9323. Note:    compressed files are not accessible unless the driver is enabled
  9324. SeeAlso: AX=4411h/BX=FFFFh
  9325. --------D-214411-----------------------------
  9326. INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE)
  9327.     AX = 4411h
  9328.     BL = drive number
  9329.     CH = category code (see #0665)
  9330.     CL = function code (see #0666)
  9331. Return: CF clear if successful
  9332.         AX = 0000h    specified IOCTL function is supported
  9333.     CF set on error
  9334.         AL = 01h    IOCTL capability not available
  9335. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  9336.       standard DOS 3.2 set may use this call first to see whether a
  9337.       particular call is supported
  9338. SeeAlso: AX=440Ch,AX=440Dh,AX=4410h
  9339. --------d-214411BXFFFF-----------------------
  9340. INT 21 U - NewSpace - DISABLE DRIVER
  9341.     AX = 4411h
  9342.     BX = FFFFh
  9343. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  9344.       all files as they are written and decompresses them as they are read
  9345. Note:    compressed files are not accessible unless the driver is enabled
  9346. SeeAlso: AX=4410h/BX=FFFFh
  9347. --------O-214412-----------------------------
  9348. INT 21 O - DR-DOS 5.0-6.0 - DETERMINE DOS TYPE
  9349.     AX = 4412h
  9350.     CF set
  9351. Return: CF set if not DR-DOS
  9352.         AX = error code (see #0770 at AH=59h)
  9353.     CF clear if DR-DOS
  9354.         DX = AX = version code (see #0678)
  9355. Note:    this obsolete call, which is no longer supported in Novell DOS 7, is
  9356.       identical to AX=4452h
  9357. SeeAlso: AX=4452h
  9358. --------d-214412BXFFFF-----------------------
  9359. INT 21 U - NewSpace - INSTALLATION CHECK???
  9360.     AX = 4412h
  9361.     BX = FFFFh
  9362. Return: AX = PSP segment of NewRes (resident driver for NewSpace)
  9363.     BX:DX -> ???
  9364.     CX = ???
  9365. SeeAlso: AX=4411h/BX=FFFFh
  9366. --------d-214413BXFFFF-----------------------
  9367. INT 21 U - NewSpace - GET ???
  9368.     AX = 4413h
  9369.     BX = FFFFh
  9370. Return: AX = code segment of NewRes (resident driver for NewSpace)
  9371.     BX = offset of ???
  9372. SeeAlso: AX=4412h/BX=FFFFh
  9373. --------O-214414-----------------------------
  9374. INT 21 OU - DR-DOS 5.0-6.0 - SET GLOBAL PASSWORD
  9375.     AX = 4414h
  9376.     DS:DX -> password string (blank-padded to 8 characters)
  9377. Desc:    Specify the master password for accessing files.
  9378. Note:    this obsolete call, which is no longer supported in Novell DOS 7, is
  9379.       identical to AX=4454h
  9380. SeeAlso: AX=4454h
  9381. --------d-214414BXFFFF-----------------------
  9382. INT 21 U - NewSpace - DEBUGGING DUMP
  9383.     AX = 4414h
  9384.     BX = FFFFh
  9385. Return: debugging dump written to X:\NEWSPACE.SMP
  9386. SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh
  9387. --------O-2144-------------------------------
  9388. INT 21 OU - DR-DOS 5.0-6.0 - HISTORY BUFFER, SHARE, AND HILOAD CONTROL
  9389.     AH = 44h
  9390.     AL = 16h to 18h
  9391. Note:    these obsolete subfunctions (which are no longer supported in Novell
  9392.       DOS 7) are identical to AX=4456h through 4458h
  9393. SeeAlso: AX=4456h,AX=4457h,AX=4458h
  9394. --------O-214451-----------------------------
  9395. INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
  9396.     AX = 4451h
  9397. Return: CF set if not Concurrent DOS
  9398.         AX = error code (see #0770 at AH=59h)
  9399.     CF clear if successful
  9400.         AH = single-user/multiuser nature
  9401.         10h single-user
  9402.             AL = operating system version ID (see #0678)
  9403.         14h multiuser
  9404.             AL = operating system version ID (see #0677)
  9405. Notes:    as of Concurrent DOS/XM 5.0 (possibly earlier), the version is stored
  9406.       in the environment variable VER
  9407.     use this function if you are looking for multiuser capabilities,
  9408.       AX=4452h for single-user
  9409.     this function should never return the single-user values
  9410. SeeAlso: AX=4452h,AX=4459h
  9411.  
  9412. (Table 0677)
  9413. Values for Digital Research operating system version ID:
  9414.  32h    Concurrent PC DOS 3.2
  9415.  41h    Concurrent DOS 4.1
  9416.  50h    Concurrent DOS/XM 5.0 or Concurrent DOS/386 1.1
  9417.  60h    Concurrent DOS/XM 6.0 or Concurrent DOS/386 2.0
  9418.  62h    Concurrent DOS/XM 6.2 or Concurrent DOS/386 3.0
  9419.  66h    DR Multiuser DOS 5.1
  9420.  67h    Concurrent DOS 5.1
  9421. --------O-214452-----------------------------
  9422. INT 21 - DR-DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION
  9423.     AX = 4452h ("DR")
  9424.     CF set
  9425. Return: CF set if not DR-DOS
  9426.         AX = error code (see #0770 at AH=59h)
  9427.     CF clear if DR-DOS
  9428.         AX = version code
  9429.         AH = single-user/multiuser nature
  9430.         10h single-user
  9431.             AL = operating system version ID (see #0678)
  9432.         14h multiuser
  9433.             AL = operating system version ID (see #0677)
  9434.         DX modified (see note)
  9435. Notes:    the DR-DOS version is stored in the environment variable VER
  9436.     use this function if looking for single-user capabilities, AX=4451h
  9437.       if looking for multiuser; this call should never return multiuser
  9438.       values
  9439.     in DR-DOS 3.41-6.0, DX=AX on return; for Novell DOS 7, DH=AH but DL=00h
  9440.     Novell DOS 7 returns error code 0001h if SETVER 255.x is in effect for
  9441.       the calling program
  9442. SeeAlso: AX=4412h,AX=4451h,AX=4459h
  9443.  
  9444. (Table 0678)
  9445. Values for Digital Research operating system version ID:
  9446.  60h    DOS Plus
  9447.  63h    DR-DOS 3.41
  9448.  64h    DR-DOS 3.42
  9449.  65h    DR-DOS 5.00
  9450.  67h    DR-DOS 6.00
  9451.  70h    PalmDOS
  9452.  71h    DR-DOS 6.0 March 1993 "business update"
  9453.  72h    Novell DOS 7.0
  9454. --------O-214454-----------------------------
  9455. INT 21 U - DR-DOS 3.41+ - SET GLOBAL PASSWORD
  9456.     AX = 4454h
  9457.     DS:DX -> password string (blank-padded to 8 characters)
  9458. Desc:    Specify the master password for accessing files.
  9459. SeeAlso: AX=4303h,AX=4414h
  9460. --------O-214456-----------------------------
  9461. INT 21 U - DR-DOS 5.0+ - HISTORY BUFFER CONTROL
  9462.     AX = 4456h
  9463.     DL = control flags (see #0679)
  9464. Return: AL = previous value of state flags (see #0680)
  9465. Note:    DR-DOS 6.0 only checks bit 0 and ignores the rest of DL
  9466. SeeAlso: #0681
  9467.  
  9468. Bitfields for control flags:
  9469. Bit(s)    Description    (Table 0679)
  9470.  0    whose buffer: 0=application, 1=COMMAND.COM
  9471. ---Novell DOS 7---
  9472.  1    toggle HISTORY usage
  9473.  2    toggle INSERT state 
  9474. Note:    only one bit at a time may be used
  9475.  
  9476. Bitfields for state flags:
  9477. Bit(s)    Description    (Table 0680)
  9478.  0    HISTORY buffer enabled
  9479.  1    INSERT enabled
  9480.  2-5    unused
  9481.  7    whose buffer: 0=application, 1=COMMAND.COM
  9482. --------O-214457-----------------------------
  9483. INT 21 U - DR-DOS 5.0+ - SHARE/HILOAD CONTROL
  9484.     AX = 4457h
  9485.     DH = subfunction
  9486.         00h enable/disable SHARE
  9487.         DL = 00h disable
  9488.            = 01h enable
  9489.            else Return: AX = ???
  9490.         01h get HILOAD status
  9491.         Return: AX = status
  9492.                 0000h off
  9493.                 0001h on
  9494.         02h set HILOAD status
  9495.         DL = new state (00h off, 01h on)
  9496.         Return: AX = ???
  9497.         other
  9498.         Return: AX = ???
  9499. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0; it does not seem
  9500.       to be supported by Novell DOS 7
  9501. SeeAlso: AX=4457h/DX=FFFFh
  9502. --------O-214457DXFFFF-----------------------
  9503. INT 21 U - DR-DOS 6.0 - GET SHARE STATUS
  9504.     AX = 4457h
  9505.     DX = FFFFh
  9506. Return: AX = SHARE status
  9507. SeeAlso: INT 2F/AX=1000h
  9508. --------O-214458-----------------------------
  9509. INT 21 U - DR-DOS 5.0+ internal - GET POINTER TO INTERNAL VARIABLE TABLE
  9510.     AX = 4458h
  9511. Return: ES:BX -> internal variable table (see #0681,#0682)
  9512.     AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0, 0FE4h for
  9513.           Novell DOS 7)
  9514. SeeAlso: AX=4452h
  9515.  
  9516. Format of DR-DOS 5.0-6.0 internal variable table:
  9517. Offset    Size    Description    (Table 0681)
  9518.  00h    WORD    ???
  9519.  02h    WORD    segment of ???
  9520.  04h    WORD    offset within DOS data segment of history control structure
  9521.           for COMMAND.COM history buffer (see #0683)
  9522.  06h    WORD    offset within DOS data segment of history control structure
  9523.           for application history buffer (see #0683)
  9524.  08h    BYTE    initial history state flags (see #0680)
  9525.  09h  2 BYTEs    ???
  9526.  0Bh    WORD    KB of extended memory at startup
  9527.  0Dh    BYTE    number of far jump entry points
  9528.  0Eh    WORD    segment containing far jumps to DR-DOS entry points (see #0684)
  9529.  10h    WORD    (only if kernel loaded in HMA) offset in HMA of first free HMA
  9530.           memory block (see #0685) or 0000h if none; segment is FFFFh
  9531.  12h    WORD    pointer to segment of environment variables set in CONFIG,
  9532.           or 0000h if already used
  9533. ---DR-DOS 6.0---
  9534.  14h    WORD    (only if kernel loaded in HMA) offset in HMA of first used HMA
  9535.         memory block (see #0685) or 0000h if none; segment is FFFFh
  9536.  16h  8 BYTEs    ???
  9537.  1Eh    WORD    offset in DOS data segment of full COUNTRY.SYS filename
  9538.  20h  8 BYTEs    ???
  9539.  28h    WORD    offset in DOS data segment of SHARE hook table
  9540.  2Ah  2 BYTEs    ???
  9541.  2Ch    WORD    offset in DOS data segment of far pointer to INT 2F/AX=1000h
  9542.           handler
  9543. Note:    the segment used for the DR-DOS 6.0 CONFIG environment variables
  9544.       (excluding COMSPEC, VER and OS) is only useful for programs/drivers
  9545.       called from CONFIG.SYS. The word is set to zero later when the area
  9546.       is copied to the COMMAND.COM environment space.  This allows
  9547.       CONFIG.SYS to pass information to AUTOEXEC.BAT.
  9548.  
  9549. Format of Novell DOS 7 internal variable table:
  9550. Offset    Size    Description    (Table 0682)
  9551.  00h    ???
  9552.  1Eh    WORD    offset of COUNTRY.SYS filename
  9553.  42h 16 DWORDs    pointers to ??? entry points
  9554.     ???
  9555.  
  9556. Format of history control structure:
  9557. Offset    Size    Description    (Table 0683)
  9558.  00h    WORD    segment of buffer
  9559.  02h    WORD    size of buffer in bytes
  9560.  04h    WORD    ???
  9561.  
  9562. Format of kernel entry jump table for DR-DOS 5.0-6.0:
  9563. Offset    Size    Description    (Table 0684)
  9564.  00h  5 BYTEs    far jump to kernel entry point for CP/M CALL 5
  9565.  05h  5 BYTEs    far jump to kernel entry point for INT 20
  9566.  0Ah  5 BYTEs    far jump to kernel entry point for INT 21
  9567.  0Fh  5 BYTEs    far jump to kernel entry point for INT 22 (RETF)
  9568.  14h  5 BYTEs    far jump to kernel entry point for INT 23 (RETF)
  9569.  19h  5 BYTEs    far jump to kernel entry point for INT 24
  9570.  1Eh  5 BYTEs    far jump to kernel entry point for INT 25
  9571.  23h  5 BYTEs    far jump to kernel entry point for INT 26
  9572.  28h  5 BYTEs    far jump to kernel entry point for INT 27
  9573.  2Dh  5 BYTEs    far jump to kernel entry point for INT 28
  9574.  32h  5 BYTEs    far jump to kernel entry point for INT 2A (IRET)
  9575.  37h  5 BYTEs    far jump to kernel entry point for INT 2B (IRET)
  9576.  3Ch  5 BYTEs    far jump to kernel entry point for INT 2C (IRET)
  9577.  41h  5 BYTEs    far jump to kernel entry point for INT 2D (IRET)
  9578.  46h  5 BYTEs    far jump to kernel entry point for INT 2E (IRET)
  9579.  4Bh  5 BYTEs    far jump to kernel entry point for INT 2F
  9580. Notes:    all of these entry points are indirected through this jump table
  9581.       to allow the kernel to be relocated into high memory while leaving
  9582.       the actual entry addresses in low memory for maximum compatibility
  9583.     some of these entry points (22h,23h,24h,2Eh,2Fh) are replaced as soon
  9584.       as COMMAND.COM is loaded, and return immediately to the caller, some
  9585.       returning an error code (the original handler for INT 2F returns
  9586.       AL=03h [fail]).
  9587.  
  9588. Format of HMA Memory Block (DR-DOS 6.0 kernel loaded in HMA):
  9589. Offset    Size    Description    (Table 0685)
  9590.  00h    WORD    offset of next HMA Memory Block (0000h if last block)
  9591.  02h    WORD    size of this block in bytes (at least 10h)
  9592.  04h    BYTE    type of HMA Memory Block (interpreted by MEM)
  9593.         00h system
  9594.         01h KEYB
  9595.         02h NLSFUNC
  9596.         03h SHARE
  9597.         04h TaskMAX
  9598.         05h COMMAND
  9599.  05h    var    TSR (or system) code and data. DR-DOS TSR's, such as KEYB,
  9600.           hooks interrupts using segment FFFEh instead FFFFh.
  9601. --------O-214459-----------------------------
  9602. INT 21 - DR MultiUser DOS 5.0 - API
  9603.     AX = 4459h
  9604.     CL = function (see INT E0"CP/M")
  9605.     DS,DX = parameters
  9606. Notes:    DR-DOS 5.0 and Novell DOS 7 return CF set and AX=0001h
  9607.     this API is also available on INT E0
  9608. SeeAlso: AX=4452h,INT E0"CP/M"
  9609. --------N-2144E0-----------------------------
  9610. INT 21 U - Sun PC-NFS - API???
  9611.     AX = 44E0h
  9612.     DS:DX -> ???
  9613.     SS:BP -> stack frame (see #0686)
  9614. Return: ???
  9615. Note:    this function is also supported by Beame&Whiteside's BWPCNFS shim; the
  9616.       description presented here was derived from that shim
  9617.  
  9618. Format of PC-NFS stack frame:
  9619. Offset    Size    Description    (Table 0686)
  9620.  00h    WORD    -> previous stack frame
  9621.  02h    DWORD    return address
  9622. --------d-2144FFBXFFFF-----------------------
  9623. INT 21 U - NewSpace - ???
  9624.     AX = 44FFh
  9625.     BX = FFFFh
  9626.     DX = ???
  9627. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  9628.       all files as they are written and decompresses them as they are read
  9629. SeeAlso: AX=4414h/BX=FFFFh
  9630. --------!---Section--------------------------
  9631.