home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / TEXT / INFO / INTER30A.ZIP / INTERRUP.B < prev    next >
Encoding:
Text File  |  1992-04-26  |  260.0 KB  |  7,099 lines

  1. Interrupt List, part 2 of 7
  2. This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown
  3. ----------15---------------------------------
  4. INT 15 - Microsoft TSR Specification
  5.     No additional information available at this time.
  6. ----------1500-------------------------------
  7. INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)
  8.     AH = 00h
  9. Return: CF set on error
  10.         AH = 86h no cassette present
  11.     CF clear if successful
  12. SeeAlso: AH=01h"CASSETTE"
  13. ----------1500-------------------------------
  14. INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS
  15.     AH = 00h
  16. Return: CX = signed X count
  17.     DX = signed Y count
  18. ----------1500-------------------------------
  19. INT 15 - VMiX v2+ - INSTALLATION CHECK???
  20.     AH = 00h
  21. Return: DX = 0798h???
  22. ----------1500-------------------------------
  23. INT 15 - MultiDOS Plus - GIVE UP TIME SLICE
  24.     AH = 00h
  25. Note:    if issued by the highest-priority task while MultiDOS is using
  26.       priority-based rather than round-robin scheduling, control will be
  27.       returned to the caller immediately
  28. SeeAlso: AH=03h"MultiDOS",AX=1000h
  29. ----------1501-------------------------------
  30. INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
  31.     AH = 01h
  32. Return: CF set on error
  33.         AH = 86h no cassette present
  34.     CF clear if successful
  35. SeeAlso: AH=00h"CASSETTE"
  36. ----------1501-------------------------------
  37. INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
  38.     AH = 01h
  39.     AL = NVRAM location (00h to 3Fh)
  40.     BL = NVRAM data value
  41. Return: AH = return code
  42.         00h OK
  43.         01h address bad
  44.         02h write error
  45. SeeAlso: AH=02h"Amstrad"
  46.  
  47. Format of NVRAM:
  48. Offset    Size    Description
  49.  00h    BYTE    time of day: seconds
  50.  01h    BYTE    alarm time: seconds
  51.  02h    BYTE    time of day: minutes
  52.  03h    BYTE    alarm time: minutes
  53.  04h    BYTE    time of day: hours
  54.  05h    BYTE    alarm time: hours
  55.  06h    BYTE    day of week, 1 = Sunday
  56.  07h    BYTE    day of month
  57.  08h    BYTE    month
  58.  09h    BYTE    year mod 100
  59.  0Ah    BYTE    RTC status register A
  60.         bit 7: set if date/time being updated
  61.             6-4: time base speed, default 010 = 32768 Hz
  62.             3-0: interrupt rate selection, default 0110 = 1024 Hz
  63.  0Bh    BYTE    RTC status register B
  64.         bit 7: clear if normal update, set if abort update
  65.             6: periodic interrupt enable
  66.             5: alarm interrupt enable
  67.             4: update end interrupt enable
  68.             3: square wave enable
  69.             2: date mode (clear = BCD, set = binary)
  70.             1: 24-hour format
  71.             0: daylight saving time enable
  72.  0Ch    BYTE    RTC status register C (read-only)
  73.         bit 7: IRQF flag
  74.             6: PF flag
  75.             5: AF flag
  76.             4: UF flag
  77.  0Dh    BYTE    RTC status register D
  78.         bit 7: battery good
  79.  0Eh  6 BYTEs    time and date machine last used
  80.  14h    BYTE    user RAM checksum
  81.  15h    WORD    Enter key scancode/ASCII code
  82.  17h    WORD    Forward delete key scancode/ASCII code
  83.  19h    WORD    Joystick fire button 1 scancode/ASCII code
  84.  1Bh    WORD    Joystick fire button 2 scancode/ASCII code
  85.  1Dh    WORD    mouse button 1 scancode/ASCII code
  86.  1Fh    WORD    mouse button 2 scancode/ASCII code
  87.  21h    BYTE    mouse X scaling factor
  88.  22h    BYTE    mouse Y scaling factor
  89.  23h    BYTE    initial VDU mode and drive count
  90.  24h    BYTE    initial VDU character attribute
  91.  25h    BYTE    size of RAM disk in 2K blocks
  92.  26h    BYTE    initial system UART setup byte
  93.  27h    BYTE    initial external UART setup byte
  94.  28h 24 BYTEs    available for user application
  95. Note:    bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
  96.       the clock chip
  97. ----------1501-------------------------------
  98. INT 15 - VMiX - I/O CHANNEL OBJECT MANAGER
  99.     AH = 01h
  100.     STACK: WORD  object ID of requestor
  101.            DWORD pointer to name of requested method
  102.            WORD  arg1
  103.            WORD  arg2
  104.            WORD  arg3
  105.            WORD  arg4
  106. Return: DX:AX??? -> IRP structure or 0000h:0000h 
  107. ----------1501-------------------------------
  108. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE
  109.     AH = 01h
  110.     AL = semaphore number (00h-3Fh)
  111. Return: AH = status
  112.         00h successful
  113.         02h invalid semaphore number
  114. Notes:    if the semaphore is not owned, ownership is assigned to the calling
  115.       task and the call returns immediately
  116.     if the semaphore is already owned by another task, the calling task
  117.       is placed on a queue for the semaphore and suspended until it can
  118.       become owner of the semaphore
  119.     semaphore 0 is used internally by MultiDOS to synchronize DOS access
  120. SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS"
  121. ----------1502-------------------------------
  122. INT 15 - CASSETTE - READ DATA
  123.     AH = 02h
  124.     CX = number of bytes to read
  125.     ES:BX -> buffer
  126. Return:    CF clear if successful
  127.         DX = number of bytes read
  128.         ES:BX -> byte following last byte read
  129.     CF set on error
  130.     AH = status
  131.         00h successful
  132.         01h CRC error
  133.         02h bad tape signals
  134.         04h no data
  135.         80h invalid command
  136.         86h no cassette present
  137. SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE"
  138. ----------1502-------------------------------
  139. INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
  140.     AH = 02h
  141.     AL = NVRAM location (00h to 3Fh)
  142. Return: AH = return code
  143.         00h OK
  144.         01h address bad
  145.         02h checksum error
  146.     AL = NVRAM data value
  147. SeeAlso: AH=01h"Amstrad"
  148. ----------1502-------------------------------
  149. INT 15 - VMiX - MEMORY OBJECT MANAGER
  150.     AH = 02h
  151.     STACK:    WORD    object ID of requestor
  152.         DWORD    pointer to name of requested method
  153.         WORD    arg1
  154.         WORD    arg2
  155.         WORD    arg3
  156.         WORD    arg4
  157.         WORD    arg5
  158. Return: DX:AX??? = pointer to memory block
  159. ----------1502-------------------------------
  160. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE
  161.     AH = 02h
  162.     AL = semaphore number (00h-3Fh)
  163. Return: AH = status
  164.         00h successful
  165.         01h not semaphore owner
  166.         02h invalid semaphore number
  167. Notes:    if any tasks are waiting for the semaphore, the first task on the wait
  168.       queue will become the new owner and be reawakened
  169.     do not use within an interrupt handler
  170. SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS"
  171. ----------1503-------------------------------
  172. INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
  173.     AH = 03h
  174.     CX = number of bytes to write
  175.     ES:BX -> data buffer
  176. Return: CF clear if successful
  177.         ES:BX -> byte following last byte written
  178.     CF set on error
  179.     AH = status (see AH=02h"CASSETTE")
  180.     CX = 0000h
  181. SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"
  182. ----------1503-------------------------------
  183. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
  184.     AH = 03h
  185.     AL = value (I,R,G,B bits)
  186. SeeAlso: AH=04h"Amstrad"
  187. ----------1503-------------------------------
  188. INT 15 - VMiX - PROMPTED CONSOLE INPUT
  189.     AH = 03h
  190.     STACK:    DWORD    pointer to ASCII prompt
  191.         WORD    field outline character
  192.         WORD    length of input field
  193.         DWORD    address of pointer to input buffer
  194.         WORD    number of characters input
  195. Return: AX = length of input (input buffer is padded with blanks)
  196. ----------1503-------------------------------
  197. INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL
  198.     AH = 03h
  199.     DX = number of time slices to remain suspended
  200. Return: after specified interval has elapsed
  201. Note:    when priority-based scheduling is in use, high-priority tasks should
  202.       use this function to yield the processor
  203. SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS"
  204. ----------1504-------------------------------
  205. INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
  206.     AH = 04h
  207.     ES:DI -> results buffer length 20h for System Parameter Table
  208.     DS = segment containing ABIOS RAM extensions (zero if none)
  209. Return: AH = 00h success: results at ES:DI
  210.     CF set on failure
  211. SeeAlso: AH=05h"ABIOS",C1h
  212.  
  213. Format of ABIOS System Parameter Table:
  214. Offset    Size    Description
  215.  00h    DWORD    FAR address of ABIOS Common Start Routine
  216.  04h    DWORD    FAR address of ABIOS Interrupt Routine
  217.  08h    DWORD    FAR address of ABIOS Time-out Routine
  218.  0Ch    WORD    number of bytes of stack required by this ABIOS implementation
  219.  0Eh 16 BYTEs    reserved
  220.  1Eh    WORD    number of entries in initialization table
  221. ----------1504-------------------------------
  222. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
  223.     AH = 04h
  224.     AL = value (RDSEL1 and RDSEL0)
  225. SeeAlso: AH=03h"Amstrad",05h"Amstrad"
  226. ----------1504-------------------------------
  227. INT 15 - VMiX - VPRINTF
  228.     AH = 04h
  229.     STACK:    DWORD    control string
  230.         DWORD    array of arguments
  231. ----------1504-------------------------------
  232. INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK
  233.     AH = 04h
  234.     AL = mailbox number (00h-3Fh)
  235.     CX = message length in bytes
  236.     DS:SI -> message
  237. Return: AH = status
  238.         00h successful
  239.         01h out of message memory
  240.         02h invalid mailbox number
  241. Note:    the message is copied into a system buffer; the caller may immediately
  242.       reuse its buffer
  243. SeeAlso: AH=05h"MultiDOS"
  244. ----------1505-------------------------------
  245. INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
  246.     AH = 05h
  247.     ES:DI -> results buffer length (18h * Number_of_Entries)
  248.     DS = segment containing ABIOS RAM extensions (zero if none)
  249. Return: AH = 00h success: results at ES:DI
  250.     CF set on failure
  251. SeeAlso: AH=04h"ABIOS",C1h
  252.  
  253. Format of one entry of ABIOS Initialization Table:
  254. Offset    Size    Description
  255.  00h    WORD    device ID
  256.  02h    WORD    number of Logical IDs
  257.  04h    WORD    Device Block length (zero for ABIOS patch or extension)
  258.  06h    DWORD    -> init routine for Device Block and Function Transfer Table
  259.  0Ah    WORD    request block length
  260.  0Ch    WORD    Function Transfer Table length (zero for a patch)
  261.  0Eh    WORD    Data Pointers length (in Common Data Area)
  262.  10h    BYTE    secondary device ID (hardware level this ABIOS ver supports)
  263.  11h    BYTE    revision (device driver revision level this ABIOS supports)
  264.  12h  6 BYTEs    reserved
  265. ----------1505-------------------------------
  266. INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
  267.     AH = 05h
  268.     AL = value (I,R,G,B bits)
  269. SeeAlso: AH=04h"Amstrad"
  270. ----------1505-------------------------------
  271. INT 15 - VMiX - GET PROCESS ID OF CURRENT PROCESS
  272.     AH = 05h
  273. Return: AX = process ID
  274. SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX"
  275. ----------1505-------------------------------
  276. INT 15 - MultiDOS Plus - CHECK MAILBOX
  277.     AH = 05h
  278.     AL = mailbox number (00h-3Fh)
  279. Return: AH = status
  280.         00h successful
  281.         DX = length of first message in queue, 0000h if no message
  282.         02h invalid mailbox number
  283. SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS"
  284. ----------1506-------------------------------
  285. INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
  286.     AH = 06h
  287. Return: BX = version number
  288. ----------1506-------------------------------
  289. INT 15 - VMiX - GET POINTER TO PROCESS CONTROL BLOCK
  290.     AH = 06h
  291.     STACK:    WORD    process ID
  292. Return: DX:AX??? -> process control block
  293. SeeAlso: AH=07h"VMiX",AH=08h"VMiX"
  294. ----------1506-------------------------------
  295. INT 15 - MultiDOS Plus - READ MAILBOX
  296.     AH = 06h
  297.     AL = mailbox number (00h-3Fh)
  298.     CX = size of buffer in bytes
  299.     ES:DI -> buffer for message
  300. Return: AH = status
  301.         00h successful
  302.         CX = number of bytes copied
  303.         DX = actual length of message
  304.         02h invalid mailbox number
  305. Note:    if the caller's buffer is not large enough, the message is truncated
  306.       and the remainder is lost
  307. SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS"
  308. ----------1507-------------------------------
  309. INT 15 - VMiX - GET POINTER TO OBJECT CONTROL BLOCK
  310.     AH = 07h
  311.     STACK:    WORD    object type
  312. Return: DX:AX??? -> object control block
  313. SeeAlso: AH=06h"VMiX",AH=08h"VMiX"
  314. ----------1507-------------------------------
  315. INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)
  316.     AH = 07h
  317.     BX:CX = entry point of new task
  318.     DX = stack size in paragraphs
  319. Return: AH = status
  320.         00h successful
  321.         01h no free task control blocks
  322.         02h no free memory for task's stack
  323. Note:    execution returns immediately to calling task
  324. SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS"
  325. ----------1508-------------------------------
  326. INT 15 - VMiX - GET CHANNEL CONTROL BLOCK
  327.     AH = 08h
  328.     STACK:    WORD    channel ID
  329. Return: DX:AX??? -> channel control block
  330. SeeAlso: AH=06h"VMiX",AH=07h"VMiX"
  331. ----------1508-------------------------------
  332. INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)
  333.     AH = 08h
  334. Return: calling task terminated, so execution never returns to caller
  335. Notes:    an internal task must be terminated with this function rather than a
  336.       DOS termination function
  337.     task's stack space is returned to parent task's memory pool
  338. SeeAlso: AH=07h"MultiDOS"
  339. ----------1509-------------------------------
  340. INT 15 - VMiX - GET ID OF QUEUED ELEMENT
  341.     AH = 09h
  342.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  343.         WORD    subqueue ID
  344. Return: AX = ID
  345. SeeAlso: AH=0Ah"VMiX"
  346. ----------1509-------------------------------
  347. INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY
  348.     AH = 09h
  349.     AL = new priority
  350. Note:    the priority has different meanings depending on whether priority-
  351.       based or round-robin scheduling is used
  352. SeeAlso: AH=07h"MultiDOS"
  353. ----------150A-------------------------------
  354. INT 15 - VMiX - GET ID OF NEXT QUEUED ELEMENT
  355.     AH = 0Ah
  356.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  357.         WORD    ID of current element in queue chain
  358. Return: AX = ID of next element
  359. SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX"
  360. ----------150A-------------------------------
  361. INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL
  362.     AH = 0Ah
  363.     AL = new interval
  364.         00h = 55.0 ms (default)
  365.         80h = 27.5 ms
  366.         40h = 13.75 ms
  367.         20h = 6.88 ms
  368.         10h = 3.44 ms
  369.         08h = 1.72 ms
  370. SeeAlso: AH=03h"MultiDOS"
  371. ----------150B-------------------------------
  372. INT 15 - VMiX - GET TOTAL NUMBER OF ACTIVE PROCESSES
  373.     AH = 0Bh
  374. Return: AX = number of active processes
  375. SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX"
  376. ----------150B-------------------------------
  377. INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY
  378.     AH = 0Bh
  379. Notes:    sets calling task's screen pointer to actual screen memory; the pointer
  380.       may be restored with AH=0Ch
  381.     caller's video mode must be same as foreground task's video mode
  382.     any text written while in the background will be saved to the
  383.       foreground task's virtual screen when it switches to the background
  384.     useful if a background task wants to display a message on the
  385.       foreground screen
  386. SeeAlso: AH=0Ch"MultiDOS"
  387. ----------150C-------------------------------
  388. INT 15 - VMiX - GET POINTER TO PROCESS TSS STACK
  389.     AH = 0Ch
  390.     STACK:    WORD    process ID
  391. Return: DX:AX??? -> TSS stack store
  392. ----------150C-------------------------------
  393. INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY
  394.     AH = 0Ch
  395. Note:    restores task's screen pointer saved by AH=0Bh; must not be called
  396.       unless AH=0Bh has been called first
  397. SeeAlso: AH=0Bh"MultiDOS"
  398. ----------150D-------------------------------
  399. INT 15 - VMiX - START A CHILD PROCESS JOB SHELL
  400.     AH = 0Dh
  401.     STACK:    DWORD    ASCIZ string starting with requested I/O channel and
  402.             followed by standard VMiX shell command string
  403. Return: AX = status
  404. SeeAlso: AH=0Eh"VMIX"
  405. ----------150D-------------------------------
  406. INT 15 - MultiDOS Plus - DISABLE MULTITASKING
  407.     AH = 0Dh
  408. Note:    calling task receives all time slices until AH=0Eh is called; this
  409.       allows time-critical events or nonreentrant code to be processed
  410. SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS"
  411. ----------150E-------------------------------
  412. INT 15 - VMiX - TERMINATE PROCESS
  413.     AH = 0Eh
  414.     STACK:    WORD    process ID
  415. Return: AX = status
  416. SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX"
  417. ----------150E-------------------------------
  418. INT 15 - MultiDOS Plus - ENABLE MULTITASKING
  419.     AH = 0Eh
  420. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS"
  421. ----------150F-------------------------------
  422. INT 15 - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
  423.     AH = 0Fh
  424.     AL = phase code
  425.         00h reserved
  426.         01h surface analysis
  427.         02h formatting
  428. Return: CF clear if formatting should continue, set if it should terminate
  429. Note:    called during ESDI drive formatting after each cylinder is completed
  430. SeeAlso: INT 13/AH=1Ah
  431. ----------150F-------------------------------
  432. INT 15 - VMiX - GET KEY FIELD OF QUEUED ELEMENT
  433.     AH = 0Fh
  434.     STACK:    WORD    queue ID (0 = process queue, 1 = object q, 3 = type q)
  435.         WORD    ID of element in queue chain
  436. Return: AX = key
  437. SeeAlso: AH=0Ah"VMiX"
  438. ----------150F-------------------------------
  439. INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND
  440.     AH = 0Fh
  441.     DS:BX -> ASCIZ command
  442. Return: after command has been processed
  443. Notes:    specified string is executed as if it had been typed at the MultiDOS
  444.       command prompt
  445.     the task is placed on a queue which MultiDOS examines periodically and
  446.       is suspended until MultiDOS has processed the command
  447.     all lowercase characters up to the first blank are converted to upper
  448.       case within the given buffer
  449. ----------1510-------------------------------
  450. INT 15 - VMiX - EXECUTE FUNCTION IN PROTECTED MODE
  451.     AH = 10h
  452.     STACK:    DWORD    pointer to function
  453.           N    WORDs    function args
  454. Return: ???
  455. ----------1510-------------------------------
  456. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
  457.     AH = 10h
  458.     AL = semaphore number (00h-3Fh)
  459. Return: AH = status
  460.         00h semaphore not in use
  461.         01h semaphore owned by another task
  462.         02h invalid semaphore number
  463.         03h semaphore owned by caller
  464. SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
  465. ----------151000-----------------------------
  466. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  467.     AX = 1000h
  468. Return: after other processes run
  469. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  470.       the current time-slice is set to expire at the next clock tick rather
  471.       than immediately
  472. SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=EEh"DoubleDOS",INT 2F/AX=1680h
  473. SeeAlso: INT 60/DI=0106h,INT 7A/BX=000Ah,INT 7F/AH=E8h
  474. ----------151001-----------------------------
  475. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  476.     AX = 1001h
  477.     BX = number of bytes to allocate
  478. Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
  479. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  480.       common memory
  481. SeeAlso: AX=1002h,AX=DE0Ch,AX=DE15h
  482. ----------151002-----------------------------
  483. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  484.     AX = 1002h
  485.     ES:DI -> previously allocated block
  486. Return: block freed
  487. SeeAlso: AX=1001h,AX=DE0Dh
  488. ----------151003-----------------------------
  489. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  490.     AX = 1003h
  491.     BH = attribute
  492.     BL = character
  493.     DX = segment of object handle for window
  494. Note:    BX=0 does not display anything, it only positions the hardware cursor
  495. ----------1510-------------------------------
  496. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  497.     AH = 10h
  498.     AL = 04h thru 12h
  499. Return: pops up "Programming error" window in DV 2.x
  500. ----------151013-----------------------------
  501. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  502.     AX = 1013h
  503.     ES:DI -> FAR service routine
  504. Return: BX = bit mask indicating which bit was allocated
  505.          0000h if no more bits available
  506. SeeAlso: AX=1014h,AX=1015h
  507. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  508.       interrupt; if other calls need to be made, the interrupt handler
  509.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  510. ----------151014-----------------------------
  511. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  512.     AX = 1014h
  513.     BX = bit mask from INT 15/AX=1013h
  514. SeeAlso: AX=1013h,AX=1015h
  515. ----------151015-----------------------------
  516. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  517.     AX = 1015h
  518.     BX = bit mask for interrupts to post
  519. Return: indicated routines will be called: (DV 2.0x) at next task switch
  520.                        (DV 2.2x) immediately
  521. SeeAlso: AX=1013h,AX=1014h
  522. Notes:    this is one of the few TopView calls which are allowed from a hardware
  523.       interrupt handler
  524.     the handler will be called with ES containing the segment of the handle
  525.       of the next task to be executed; on return, ES must be the segment of
  526.       a task handle
  527. ----------151016-----------------------------
  528. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  529.     AX = 1016h
  530.     ES:DI = possible object handle
  531. Return: BX = FFFFh if ES:DI is a valid object handle
  532.          0000h if ES:DI is not
  533. SeeAlso: AX=DE14h
  534. ----------151017-----------------------------
  535. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  536.     AX = 1017h
  537. Return: pops up "Programming error" window in DV 2.x
  538. ----------151018-----------------------------
  539. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  540.     AX = 1018h
  541.     BH = column
  542.     BL = row
  543.     ES = segment of object handle for window below which to search
  544.          0000h = start search with topmost window
  545. Return: ES = segment of object handle for window which is visible at the
  546.            indicated position, or covered by indicated window
  547.        = 0000h no window
  548. SeeAlso: AX=1023h,AX=1024h
  549. ----------151019-----------------------------
  550. INT 15 - TopView - "SOUND" - MAKE TONE
  551.     AX = 1019h
  552.     BX = frequency in Hertz (0000h = silence)
  553.     CX = duration in clock ticks (18.2 ticks/sec)
  554. Return: immediately, tone continues to completion
  555. Notes:    if another tone is already playing, the new tone does not start until
  556.       completion of the previous one.  Up to 32 tones may be queued before
  557.       the process is blocked until a note completes.
  558.     in DV 2.00, the lowest tone allowed is 20 Hz
  559.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  560.       notes are also cancelled
  561. SeeAlso: INT 16/AH=73h
  562. ----------15101A-----------------------------
  563. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  564.     AX = 101Ah
  565. Return: stack switched
  566. Notes:    this call may not be nested; a second call must be preceded by a call
  567.       to "USTACK" (AX=1025h)
  568.     while TopView requires many API calls to be executed while on the
  569.       task's internal stack, DESQview allows those calls to be executed
  570.       regardless of the current stack
  571. SeeAlso: AX=1025h
  572. ----------15101B-----------------------------
  573. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  574.     AX = 101Bh
  575. Return: task-switching temporarily disabled
  576. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  577.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  578.       will again be disabled)
  579.     suspends the caller until DOS is free
  580. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  581. SeeAlso: INT 60/DI=0602h
  582. ----------15101C-----------------------------
  583. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  584.     AX = 101Ch
  585. Return: task-switching enabled
  586. Note:    this API call may be made from within a hardware interrupt handler
  587. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
  588. ----------15101D-----------------------------
  589. INT 15 - TopView - "STOP" - STOP TASK
  590.     AX = 101Dh
  591.     ES = segment of object handle for task to be stopped
  592.          (== handle of main window for that task)
  593. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  594. Note:    once a task has been stopped, additional "STOP"s are ignored
  595. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  596.       current task
  597. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX"
  598. ----------15101E-----------------------------
  599. INT 15 - TopView - "START" - START TASK
  600.     AX = 101Eh
  601.     ES = segment of object handle for task to be started
  602.          (== handle of main window for that task)
  603. Return: indicated task is started up again
  604. Note:    once a task has been started, additional "START"s are ignored
  605. SeeAlso: AX=101Dh,AX=102Bh
  606. ----------15101F-----------------------------
  607. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  608.     AX = 101Fh
  609.     BX = bit fields
  610.          bits 0-12: number of characters to display
  611.          bits 13,14: which mouse button may be pressed to remove window
  612.              00 = either
  613.              01 = left
  614.              10 = right
  615.              11 = either
  616.          bit 15: beep if 1
  617.     ES:DI -> text of message
  618.     CH = width of error window (0 = default)
  619.     CL = height of error window (0 = default)
  620.     DX = segment of object handle
  621. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  622. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  623. ----------151020-----------------------------
  624. INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
  625.     AX = 1020h
  626. Return: pops up "Programming error" window in DV v2.00+
  627. ----------151021-----------------------------
  628. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  629.     AX = 1021h
  630.     BX = segment of object handle for task to interrupt (not self)
  631.     DX:CX -> FAR routine to jump to next time task is run
  632. Return: nothing
  633. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  634.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  635.       needs to be preserved
  636.     multiple PGMINTs to a single task are processed last-in first-out
  637.     if the other task is in a DOS or DV API call, the interruption will
  638.       occur on return from that call
  639. ----------151022BX0000-----------------------
  640. INT 15 - TopView - "GETVER" - GET VERSION
  641.     AX = 1022h
  642.     BX = 0000h
  643. Return: BX nonzero, TopView or compatible loaded
  644.     (BL = major version, BH = minor version)
  645. Notes:    TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
  646. ----------151023-----------------------------
  647. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  648.     AX = 1023h
  649.     BX = segment of object handle for parent window within which to
  650.          position the window (0 = full screen)
  651.     ES = segment of object handle for window to be positioned
  652.     DL = bit flags
  653.          bits 0,1: horizontal position
  654.         00 = current
  655.         01 = center
  656.         10 = left
  657.         11 = right
  658.          bits 2,3: vertical position
  659.         00 = current
  660.         01 = center
  661.         10 = top
  662.         11 = bottom
  663.          bit 4: don't redraw screen if set
  664.          bits 5-7 not used
  665.     CH = number of columns to offset from position specified by DL
  666.     CL = number of rows to offset from position specified by DL
  667. Return: nothing
  668. ----------151024-----------------------------
  669. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  670.     AX = 1024h
  671.     BX = segment of object handle for window
  672.           (0 = use default)
  673. Return: ES:DI -> virtual screen
  674.     CX = size of virtual screen in bytes
  675.     DL = 00h text screen
  676.          01h graphics screen
  677. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  678. ----------151025-----------------------------
  679. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  680.     AX = 1025h
  681. Return: stack switched back
  682. Notes:    call only after having switched to internal stack with AX=101Ah
  683.     while TopView requires many API calls to be executed while on the
  684.       task's private stack, DESQview allows those calls to be executed
  685.       regardless of the current stack
  686. SeeAlso: AX=101Ah
  687. ----------1510-------------------------------
  688. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  689.     AH = 10h
  690.     AL = 26h thru 2Ah
  691. Return: pops up "Programming error" window in DV 2.x
  692. ----------15102B-----------------------------
  693. INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
  694.     AX = 102Bh
  695.     BX = segment of object handle for task
  696. Return: nothing
  697. Note:    forces a task which is waiting on its objectq to continue by placing
  698.       the handle for the task on the objectq
  699. SeeAlso: AX=101Dh,AX=101Eh
  700. ----------15102C-----------------------------
  701. INT 15 - DESQview v2.00+ (TopView???) - START NEW APPLICATION IN NEW PROCESS
  702.     AX = 102Ch
  703.     ES:DI -> contents of .PIF/.DVP file (see below)
  704.     BX = size of .PIF/.DVP info
  705. Return: BX = segment of object handle for new task
  706.          0000h on error
  707.  
  708. Format of .PIF/.DVP file:
  709. Offset    Size    Description
  710.  00h    BYTE    reserved (0)
  711.  01h    BYTE    checksum of bytes 02h through 170h
  712.  02h 30 BYTEs    blank-padded program title
  713.  20h    WORD    maximum memory to allocate to partition in K
  714.  22h    WORD    minimum memory required in K
  715.  24h 64 BYTEs    ASCIZ program pathname
  716.  64h    BYTE    default drive letter ('A',...)
  717.  65h 64 BYTEs    ASCIZ default directory name
  718.  A5h 64 BYTEs    ASCIZ program parameters
  719.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  720.  E6h    BYTE    number of text pages used
  721.  E7h    BYTE    number of first interrupt to save
  722.  E8h    BYTE    number of last interrupt to save
  723.  E9h    BYTE    rows in virtual screen buffer
  724.  EAh    BYTE    columns in virtual screen buffer
  725.  EBh    BYTE    initial window position, row
  726.  ECh    BYTE    initial window position, column
  727.  EDh    WORD    system memory in K
  728.  EFh 64 BYTEs    ASCIZ shared program name
  729. 12Fh 64 BYTEs    ASCIZ shared program data file
  730. 16Fh    BYTE    flags1
  731.         bit 7: writes text directly to screen
  732.         bit 6: runs in foreground only
  733.         bit 5: uses math coprocessor
  734.         bit 4: accesses system keyboard buffer directly
  735.         bits 3-1: reserved (0)
  736.         bit 0: swappable
  737. 170h    BYTE    flags2
  738.         bit 6: uses command-line parameters in field at A5h
  739.         bit 5: swaps interrupt vectors
  740. ---information unique to .DVP files---
  741. 171h  2 BYTEs    keys to use on open menu
  742. 173h    WORD    size of script buffer in bytes
  743. 175h    WORD    automatically give up CPU after this many tests for keyboard
  744.         input in one clock tick (default 0 = never)
  745. 177h    BYTE    nonzero = "uses own colors"
  746. 178h    BYTE    nonzero if application swappable
  747. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  748.         in actual .DVP files, frequently 01h
  749. 17Ch    BYTE    nonzero to automatically close on exit
  750. 17Dh    BYTE    nonzero if copy-protect floppy is required
  751. ---information unique to DESQview 2.0+---
  752. 17Eh    BYTE    .DVP version number
  753.         00h DESQview v1.2+
  754.         01h DESQview v2.0+
  755.         02h DESQview v2.2+
  756. 17Fh    BYTE    reserved (0)
  757. 180h    BYTE    initial number of rows in physical window
  758. 181h    BYTE    initial number of columns in physical window
  759. 182h    WORD    maximum expanded memory to allow, in K
  760. 184h    BYTE    flags3
  761.         bit 7: automatically assign window position
  762.         bit 5: maximum memory value has been specified
  763.         bit 4: disallow "Close" command
  764.         bit 3: foreground-only when doing graphics
  765.         bit 2: don't virtualize
  766.         bit 1: ??? set by DV 2.31 when "Runs in Background" = "D"
  767. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  768. 186h    BYTE    number of graphics pages used
  769. 187h    WORD    extra system memory size
  770. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  771. ---information unique to DESQview 2.2+---
  772. 18Ah    BYTE    serial port usage
  773.         FFh uses all serial ports
  774.         00h no serial ports
  775.         01h only COM1
  776.         02h only COM2
  777. 18Bh    BYTE    flags4
  778.         bit 7: automatically close application on exit if .COM or .EXE
  779.             specified
  780.         bit 6: swappable if not using serial ports
  781.         bit 5: start program with window hidden (v2.26+)
  782.         bit 4: start program in background (v2.26+)
  783.         bit 3: virtualize text
  784.         bit 2: virtualize graphics
  785.         bit 1: share CPU when foreground
  786.         bit 0: share EGA when foreground and zoomed
  787. 18Ch    BYTE    protection level for 386 machines
  788. 18Dh 19 BYTEs    reserved (0) for regular DESQview
  789. ---information unique to DESQview/X 1.0---
  790. 18Dh    BYTE    flags5
  791.         bit 0: unused (0)
  792.         bit 1: don't display DOS window
  793.         bit 2: don't wait for windows to open
  794.         bits 3-7: unused (0)
  795. 18Eh    BYTE    X keyboard behavior (0-3)
  796. 18Fh    BYTE    01h = uses scalable fonts
  797. 190h 10 BYTEs    unused (0)
  798. 19Ah    WORD???    sum of all record size fields in records starting at 1A0h
  799. 19Ch  4 BYTEs   signature "XDVP"
  800. 1A0h  N BYTEs   variable length records
  801.         Offset    Size    Description
  802.          00h    BYTE    length of following record, 00h if end of file
  803.          01h    BYTE    always 0??? (or length may be WORD)
  804.          02h    BYTE    record type
  805.                 01h Script filename, up to 64 characters
  806.                 05h Starting... values: ASCII copy of fields
  807.                     as typed into DVPMAN, separated by commas:
  808.                         starting row, starting column, starting
  809.                     height, starting width
  810.          03h  N BYTEs    ASCII data
  811. ----------15102D-----------------------------
  812. INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  813.     AX = 102Dh
  814.     BL = subfunction
  815.          00h determine whether using keyboard mouse
  816.         Return: BL = 00h using real mouse
  817.                  01h using keyboard mouse
  818.          01h turn keyboard mouse on
  819.          02h turn keyboard mouse off
  820. ----------15102E-----------------------------
  821. INT 15 - DESQview v2.40 - ALLOCATE ??? MEMORY
  822.     AX = 102Eh
  823.     BX = number of bytes
  824. Return: AX = status
  825.         0000h successful
  826.         ES = segment of allocated memory
  827.         0001h failed    
  828. ----------1511-------------------------------
  829. INT 15 - TopView commands
  830.     AH = 11h
  831.     AL = various (except 17h)
  832. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  833.       see those below
  834. SeeAlso: AH=DEh
  835. ----------1511-------------------------------
  836. INT 15 - VMiX - EXECUTE SHELL SYSTEM COMMANDS
  837.     AH = 11h
  838.     STACK:    DWORD    pointer to ASCIZ string containing a VMiX shell
  839.             request (max len = 127)
  840. Return: AX = status
  841. ----------1511-------------------------------
  842. INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
  843.     AH = 11h
  844. Note:    disables the Alt-Z MultiDOS command/program-selection hotkey
  845. SeeAlso: AH=12h"MultiDOS"
  846. ----------151117BX0000-----------------------
  847. INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  848.     AX = 1117h
  849.     BX = 0000h    get current mapping context without setting
  850.          nonzero    set new mapping context
  851. Return: BX = mapping context in effect before call
  852.     interrupts enabled
  853. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  854.     mapping contexts determine conventional-memory addressability; setting
  855.       a mapping context ensures that the associated program and data areas
  856.       are in memory for access.  Usable by drivers, TSRs and shared
  857.       programs.
  858.     caller need not be running under DESQview, but must ensure that the
  859.       stack in use will not be mapped out by the call
  860. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  861. ----------1511DE-----------------------------
  862. INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
  863.     AX = 11DEh
  864. Return: CF clear if installed
  865.         AX = segment at which QEXT.SYS is located
  866. Note:    a private entry point may be found by searching the beginning of the
  867.       returned segment for the signature string
  868.       "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  869.       prior to the signature contains the QEXT version number in BCD,
  870.       and the word prior to that contains the offset within the QEXT
  871.       code segment of the private entry point
  872. SeeAlso: INT 67/AH=3Fh
  873.  
  874. Call private entry point with:
  875.     AH = 00h ???
  876.     AH = nonzero ???
  877. ----------1512-------------------------------
  878. INT 15 - VMiX - PUT PROCESS TO SLEEP
  879.     AH = 12h
  880.     STACK:    WORD    process ID
  881. Return: AX = status
  882. SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
  883. ----------1512-------------------------------
  884. INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
  885.     AH = 12h
  886. Note:    enables the Alt-Z MultiDOS command/program-selection hotkey
  887. SeeAlso: AH=11h"MultiDOS"
  888. ----------1512--BH00-------------------------
  889. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  890.     AH = 12h
  891.     BH = 00h
  892.     BL = which handle to return
  893.         00h handle in DWORD on top of stack
  894.         01h current task's window handle
  895.         02h given task's mailbox handle (task's handle on stack)
  896.         03h current task's mailbox handle
  897.         04h given task's keyboard handle (task's handle on stack)
  898.         05h current task's keyboard object handle
  899.         06h given task's OBJECTQ handle (task's handle on stack)
  900.         07h current task's OBJECTQ handle
  901.         08h      \
  902.           thru > return 0000:0000 under DV < 2.26
  903.         10h      /
  904.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  905.         0Dh (2.26+) task handle of owner (parent) of current task
  906. Return: DWORD on top of stack is object handle
  907. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  908.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  909.       window)
  910. ----------1512--BH01-------------------------
  911. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  912.     AH = 12h
  913.     BH = 01h
  914.     BL = object type to create
  915.         00h (DV 2.0x only) handle is DWORD on top of stack
  916.         01h (DV 2.0x only) use task's window handle
  917.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  918.         03h (DV 2.0x only) current task's mailbox
  919.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  920.         05h (DV 2.0x only) current task's keyboard object
  921.         08h WINDOW class
  922.         09h MAILBOX class
  923.         0Ah KEYBOARD class
  924.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  925.         0Fh POINTER object
  926.         10h PANEL object
  927.     STACK: (if window object or WINDOW class)
  928.            DWORD address to jump to (no new task if high word == 0)
  929.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  930.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  931.            DWORD bytes system memory for input buffer for READ/READN
  932.             (0 == none, -1 == default--same as logical window size)
  933.            DWORD window size, columns
  934.            DWORD window size, rows
  935.            DWORD length of window title
  936.            DWORD address of window title
  937. Return: DWORD on top of stack is new object handle
  938. Notes:    if a new task is created, it is started with
  939.       AX = BX = SI = DI = BP = 0
  940.       DX:CX = handle of parent task
  941.       DS = ES = SS = segment of private stack (and new task's handle)
  942.     new windows are orphans, inherit the colors/hidden status of the
  943.       creating task's window, and are placed in the upper left hand corner
  944.       of the screen but not automatically redrawn
  945.     new keyboards are closed, and have all object bits cleared except for
  946.       the hardware cursor bit
  947. SeeAlso: AH=12h/BH=02h
  948. ----------1512--BH02-------------------------
  949. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  950.     AH = 12h
  951.     BH = 02h
  952.     BL = object
  953.         00h handle in DWORD on top of stack
  954.         window: close window and free
  955.         timer: free timer
  956.         panel: free panel object
  957.         pointer: free pointer
  958.         01h task's window handle - kills task, never returns
  959.         02h given task's mailbox (task's handle on top of stack)
  960.         03h current task's mailbox
  961.         04h given task's keyboard (task's handle on top of stack)
  962.         05h current task's keyboard object
  963. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  964.       task windows also free any mailbox, objectq, and panel objects held
  965.       by the task and any child tasks
  966.     if the keyboard being freed is the default keyboard for a task, this
  967.       call is equivalent to CLOSE
  968.     panel and pointer objects are automatically closed if open
  969. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh
  970. ----------1512--BH03-------------------------
  971. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  972.     AH = 12h
  973.     BH = 03h
  974.     BL = object
  975.         00h mailbox handle in DWORD on top of stack
  976.         02h sender of last msg read from mailbox (task's handle on stack)
  977.         03h sender of last msg read from current task's mailbox
  978. Return: DWORD on stack is task handle of message sender
  979. SeeAlso: AH=12h/BH=00h
  980. ----------1512--BH03-------------------------
  981. INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  982.     AH = 12h
  983.     BH = 03h
  984.     BL = window to be connected
  985.         00h handle of window to be attached in DWORD on top of stack
  986.         01h attach current task's main window
  987.     STACK: DWORD handle of window to attach to or 00000000h to detach
  988. Return: ???
  989. Notes:    when two windows are connected, both will move if the user moves either
  990.     multiple windows may be attached to a single window, but each window
  991.       may only be attached to one window at a time
  992. ----------1512--BX0300-----------------------
  993. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  994.     AH = 12h
  995.     BX = 0300h
  996.     STACK: DWORD handle of panel object
  997. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  998.            DWORD address of directory
  999. Note:    a null string is returned if the object is not open
  1000.  
  1001. Format of panel file:
  1002. Offset    Size    Description
  1003.  00h  2 BYTEs    C0h C3h
  1004.  02h    BYTE    number of panels in file
  1005.  03h    for each panel in file:
  1006.         8 BYTEs  blank-padded panel name
  1007.           DWORD  panel offset in file
  1008.           WORD   panel length
  1009.     data for panels (each consists of one or more window/query/manager
  1010.     streams)
  1011.         first byte of each panel must be 1Bh, fifth byte must be E5h
  1012. ----------1512--BH04-------------------------
  1013. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  1014.     AH = 12h
  1015.     BH = 04h
  1016.     BL = window to read from
  1017.         00h handle is DWORD on top of stack
  1018.         01h use calling task's default window
  1019.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1020.         0Dh (DV 2.26+) default window of parent task of current task
  1021. Return: STACK:    DWORD number of bytes read
  1022.         DWORD address of buffer
  1023. Notes:    reading starts at the current logical cursor position; the cursor is
  1024.       updated to point at the character following the last one read
  1025.     any translucent blanks (FFh) which are visible on screen are changed
  1026.       to the character which is seen through them
  1027.     the string produced by the read is placed in an input buffer which may
  1028.       be reused by the next READ or READN of a window
  1029.     window stream opcodes D8h and D9h determine whether the read returns
  1030.       characters or attributes
  1031. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h
  1032. ----------1512--BH04-------------------------
  1033. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  1034.     AH = 12h
  1035.     BH = 04h
  1036.     BL = object
  1037.         00h handle is DWORD on top of stack
  1038.         mailbox: wait for and get next message
  1039.         keyboard: wait for and get pointer to next input buffer
  1040.         pointer: wait for and get next message
  1041.         02h get next message from mailbox (task's handle on top of stack)
  1042.         03h get next message from current task's mailbox
  1043.         04h get the next input from keyboard (handle on top of stack)
  1044.         05h get the next input from task's default keyboard
  1045.         06h wait for input from any object in OBJECTQ (handle on stack)
  1046.         07h wait for input from any object in task's default OBJECTQ
  1047. Return: STACK: (if objectq) DWORD handle of object with input
  1048.            (otherwise)  DWORD number of bytes
  1049.                 DWORD address
  1050. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  1051.       containing the character code as returned by the BIOS; the BIOS scan
  1052.       code is available via the STATUS call if the character is zero
  1053.     for a keyboard in field mode, the input buffer format is determined
  1054.       by the field table header for the window the keyboard is attached to
  1055.     keyboard input buffers and mailbox message buffers may be invalidated
  1056.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  1057. SeeAlso: AH=12h/BH=05h"OBJECT"
  1058.  
  1059. Format of pointer message:
  1060. Offset    Size    Description
  1061.  00h    WORD    row
  1062.  02h    WORD    column
  1063.  04h    BYTE    status
  1064.         bit 6: set when press/release mode active and button released
  1065.         bits 7-2: number of clicks-1 if multiple-click mode active
  1066.         bits 1,0: button pressed (00=none,01=button1,10=button2)
  1067.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  1068. ----------1512--BX0400-----------------------
  1069. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  1070.     AH = 12h
  1071.     BX = 0400h
  1072.     STACK: DWORD timer's handle
  1073. Return: after timer expires
  1074.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  1075. ----------1512--BX0400-----------------------
  1076. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  1077.     AH = 12h
  1078.     BX = 0400h
  1079.     STACK: DWORD handle of panel object
  1080.            DWORD window's handle (or 0 for current task's window)
  1081.            DWORD length of panel name
  1082.            DWORD pointer to panel name
  1083. Return: STACK: DWORD handle of keyboard or 0
  1084.            DWORD handle of window which was used
  1085. Notes:    status of APPLY may be checked with STATUS message
  1086.     panel MUST have the following format
  1087.       first byte must be 1Bh (i.e. must start with a stream)
  1088.       first opcode in stream must be E5h
  1089.         single byte arg of opcode is interpreted thus:
  1090.           bits 7,6    11 means create new window
  1091.             10 means create new field table for existing window
  1092.             01 means use existing window and field table
  1093.           bit 5 if set, panel contains a field table 
  1094.             (creates a new keyboard and puts it in field mode)
  1095.           bit 4 if set, panel contains input fields
  1096.           bit 3 if set, panel contains select fields but no input fields
  1097.     if the panel contains input or select fields, a keyboard handle is
  1098.       returned; either the window's current open keyboard or a
  1099.       newly-created keyboard object.  The caller should read that keyboard
  1100.       to obtain input from the panel.
  1101. ----------1512--BH05------------------------
  1102. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  1103.     AH = 12h
  1104.     BH = 05h
  1105.     BL = object
  1106.         00h handle is DWORD on top of stack
  1107.         timer: start timer to end at a specified time
  1108.         keyboard: add input buffer to queue
  1109.         pointer: move pointer icon to specified position
  1110.         02h send message by value/status=0 to mbox (task's handle on stack)
  1111.         03h send message by value/status=0 to current task's mailbox
  1112.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  1113.         05h add input buffer to task's default KEYBOARD queue
  1114.         06h add an object to OBJECTQ (handle on top of stack)
  1115.         07h add an object to task's default OBJECTQ
  1116.     STACK: (if mailbox)  DWORD length
  1117.                  DWORD address
  1118.            (if keyboard) DWORD status (scan code in keystroke mode)
  1119.                  DWORD length (should be 1 in keystroke mode)
  1120.                  DWORD address
  1121.            (if objectq)  DWORD handle of object to add
  1122.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  1123.                    only accurate to 1/18 sec)
  1124.            (if pointer)  DWORD column relative to origin of window
  1125.                  DWORD row relative to origin of window
  1126. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1127.     the data and status written to a keyboard object must match the format
  1128.       returned by the keyboard object in the current mode
  1129.     the pointer position is scaled according to the current scaling factors
  1130. SeeAlso: AH=12h/BH=04h
  1131. ----------1512--BH05-------------------------
  1132. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  1133.     AH = 12h
  1134.     BH = 05h
  1135.     BL = window to write to
  1136.         00h DWORD on top of stack is window handle
  1137.         01h write string to task's default window
  1138.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1139.         0Dh (DV 2.26+) default window of parent of current task
  1140.     STACK: DWORD object handle if handle passed on stack
  1141.            DWORD total length of string (high word == 0)
  1142.            DWORD address of string to display
  1143. Return: indicated actions performed
  1144.     a. non-control characters are displayed (opcodes DEh and DFh control
  1145.        whether the attributes are left or changed to the current attrib)
  1146.     b. CR/LF/BS/Tab cause the usual cursor movement
  1147.     c. ESC starts a data structure with additional commands if following
  1148.        byte is less than 20h; otherwise, it is written to the window
  1149.     STACK:    DWORD handle of new window if window stream opcode E6h
  1150.         else nothing
  1151.  
  1152. Data Structure:
  1153.     MAGIC  DB  1Bh
  1154.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  1155.     LENGTH DW  ?   ; length of remainder in bytes
  1156.     var-length fields follow, each an OPCODE followed by
  1157.          zero or more args
  1158.  
  1159. MODE 00h (set or display values) "WINDOW STREAM"
  1160.     Opcodes:args
  1161.     00h  display 20h blanks with the default attribute
  1162.     01h-1Fh display OPCODE blanks with the default attribute
  1163.     20h  display char with default attribute 20h times
  1164.          BYTE char to repeat
  1165.     21h-3Fh display char with default attribute OPCODE-20h times
  1166.          BYTE char to repeat
  1167.     40h  display 20h blanks with specified attribute
  1168.          BYTE attribute of blanks
  1169.     41h-5Fh display OPCODE-40h blanks with specified attribute
  1170.          BYTE attribute of blanks
  1171.     60h  display next 20h characters
  1172.          20h BYTEs characters to display
  1173.     61h-7Fh display next OPCODE-60h characters
  1174.          N BYTEs characters to display
  1175.     80h-87h     display N blanks with default attribute
  1176.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1177.               [000h means 800h]
  1178.     88h-8Fh display N copies of the character
  1179.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1180.               [000h means 800h]
  1181.          BYTE character to repeat
  1182.     90h-97h     display N blanks with specified attribute
  1183.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1184.               [000h means 800h]
  1185.          BYTE attribute
  1186.     98h-9FH     display string at logical cursor pos
  1187.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1188.               [000h means 800h]
  1189.          N BYTEs string to display
  1190.     A0h  set logical cursor row
  1191.          BYTE row number (0 is top)
  1192.     A1h  set logical cursor column
  1193.          BYTE column number (0 is leftmost)
  1194.     A2h  set top edge of scrolling region
  1195.          BYTE row
  1196.     A3h  set left edge of scrolling region
  1197.          BYTE column
  1198.     A4h  set row of physical window position
  1199.          BYTE line
  1200.     A5h  set column of physical window position
  1201.          BYTE column
  1202.     A6h  set height of physical window
  1203.          BYTE #rows
  1204.     A7h  set width of physical window
  1205.          BYTE #columns
  1206.     A8h  set viewport row
  1207.          BYTE row
  1208.     A9h  set viewport column
  1209.          BYTE column
  1210.     AAh  set virtual screen height [contents of window unpredictable after]
  1211.          BYTE rows
  1212.     ABh  set virtual screen width [contents of window unpredictable after]
  1213.          BYTE columns
  1214.     ACh-AEh     unused
  1215.     AFh  set compatible/preferred video modes
  1216.          BYTE compatibility/preference mask
  1217.         bit 7    compatible with monochrome
  1218.         bit 6    compatible with color text, EGA/VGA graphics
  1219.         bit 5    compatible with medium-resolution CGA graphics
  1220.         bit 4    compatible with high-resolution CGA graphics
  1221.         bit 3    prefer monochrome
  1222.         bit 2    prefer color text, EGA/VGA graphics
  1223.         bit 1    prefer medium-resolution CGA graphics
  1224.         bit 0    prefer high-resolution CGA graphics
  1225.     B0h  move logical cursor down
  1226.          BYTE #rows (signed, negative values move up)
  1227.             [if #rows=0 and hardware cursor owner, update hw crsr]
  1228.     B1h  move logical cursor right
  1229.          BYTE #cols (signed, negative values move left)
  1230.             [if #cols=0 and hardware cursor owner, update hw crsr]
  1231.     B2h  shift top edge of scrolling region
  1232.          BYTE #rows (signed)
  1233.     B3h  shift left edge of scrolling region
  1234.          BYTE #cols (signed)
  1235.     B4h  shift physical window down
  1236.          BYTE #lines (signed)
  1237.     B5h  shift physical window right
  1238.          BYTE #columns (signed)
  1239.     B6h  expand physical window vertically
  1240.          BYTE #lines (signed)
  1241.     B7h  expand physical window horizontally
  1242.          BYTE #columns (signed)
  1243.     B8h  adjust viewport row
  1244.          BYTE #rows (signed)
  1245.     B9h  adjust viewport column
  1246.          BYTE #columns (signed)
  1247.     BAh  adjust virtual screen height [contents of window unpredict after]
  1248.          BYTE #rows to increase (signed)
  1249.     BBh  adjust virtual screen width [contents of window unpredictbl after]
  1250.          BYTE #cols to increase (signed)
  1251.     BCh-BFh     reserved (currently unused)
  1252.     C0h  set logical cursor position
  1253.          BYTE row number (0 is top border)
  1254.          BYTE column number (0 is left border)
  1255.     C1h  set top left corner of scrolling region
  1256.          BYTE row
  1257.          BYTE column
  1258.     C2h  set physical window pos
  1259.          BYTE upper left row (no top border if 0)
  1260.          BYTE upper left column (no left border if 0)
  1261.     C3h  set current window size
  1262.          BYTE #rows
  1263.          BYTE #cols
  1264.     C4h  set upper left corner of viewport (portion of virtual screen
  1265.          displayed in window)
  1266.          BYTE row
  1267.          BYTE column
  1268.     C5h  set size of virtual screen [contents unpredictable afterwards]
  1269.          BYTE #rows
  1270.          BYTE #cols
  1271.     C6h  unused
  1272.     C7h  unused
  1273.     C8h  set logical cursor relative to current position
  1274.          BYTE number of rows to move down (signed)
  1275.          BYTE number of columns to move right (signed)
  1276.           [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  1277.     C9h  shift top left corner of scrolling region
  1278.          BYTE #rows (signed)
  1279.          BYTE #cols (signed)
  1280.     CAh  set window pos relative to current position
  1281.          BYTE number of rows to shift down (signed)
  1282.          BYTE number of columns to shift right (signed)
  1283.     CBh  set window size relative to current size
  1284.          BYTE number of rows to expand (signed)
  1285.          BYTE number of cols to expand (signed)
  1286.     CCh  shift viewport relative to current position
  1287.          BYTE rows to shift (signed)
  1288.          BYTE cols to shift (signed)
  1289.     CDh  resize virtual screen
  1290.          BYTE #rows to expand (signed)
  1291.          BYTE #cols to expand (signed)
  1292.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  1293.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  1294.     D0h  allow window frame to extend beyond screen
  1295.     D1h  always display a complete frame, even if window extends beyond 
  1296.          edge of screen
  1297.     D2h  allow DV to change logical colors on video mode switch (default)
  1298.     D3h  application changes logical attributes
  1299.     D4h  window is visible [must redraw to actually make visible]
  1300.     D5h  window is hidden [must redraw to actually remove]
  1301.     D6h  window has frame (default)
  1302.     D7h  window unframed [must redraw to actually remove frame]
  1303.     D8h  READ/READN will read characters from window (default)
  1304.     D9h  READ/READN will read attributes from window
  1305.     DAh  use logical attributes, which may be remapped
  1306.         attributes
  1307.            1 normal text
  1308.            2 highlighted normal text
  1309.            3 help text
  1310.            4 highlighted help text
  1311.            5 error message
  1312.            6 highlighted error message
  1313.            7 emphasized text
  1314.            8 marked text
  1315.            9-16 are reverse video versions of 1-8
  1316.     DBh  use physical attributes for characters
  1317.     DCh  enable special actions for control characters (default)
  1318.     DDh  disable special control char handling, all chars displayable by
  1319.          BIOS TTY call
  1320.     DEh  write both character and attribute (default)
  1321.     DFh  write character only, leave attribute untouched
  1322.     E0h  repeat following commands through E1h opcode
  1323.          BYTE number of times to repeat (00h means 256 times)
  1324.     E1h  end of commands to repeat, start repeating them
  1325.     E2h  set current output color
  1326.          BYTE color
  1327.     E3h  clear virtual screen from scroll origin to end using current color
  1328.     E4h  redraw window
  1329.     E5h  select menu style
  1330.          BYTE style (normally 18h)
  1331.         bits 5,4 = 01 use two-letter menu entries for remainder of
  1332.           this stream
  1333.     E5h  (panel file only)
  1334.          BYTE modifier
  1335.         bits 7,6 = 11 panel stream creates new window
  1336.              = 10 panel defines new field table for existing window
  1337.              = 01 panel stream uses existing window & field table
  1338.         bit 5 = 1 stream contains a field table (create kyboard object)
  1339.         bit 4 = 1 stream defines input fields (create keyboard object)
  1340.         bit 3 = 1 stream defines select fields but not input fields
  1341.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  1342.         bit 1 reserved
  1343.         bit 0 reserved
  1344.     E6h  create new window and perform rest of manipulations in new window
  1345.          BYTE number of rows
  1346.          BYTE number of columns
  1347.          Return: DWORD object handle of new window returned on stack at end
  1348.     E7h  no operation
  1349.     E8h  scroll area up (top left corner defined by opcode C1h)
  1350.          BYTE height
  1351.          BYTE width
  1352.     E9h  scroll area down (top left corner defined by opcode C1h)
  1353.          BYTE height
  1354.          BYTE width
  1355.     EAh  scroll area left (top left corner defined by opcode C1h)
  1356.          BYTE height
  1357.          BYTE width
  1358.     EBh  scroll area right (top left corner defined by opcode C1h)
  1359.          BYTE height
  1360.          BYTE width
  1361.     ECh  set logical attributes for window contents
  1362.          BYTE video modes command applies to
  1363.         bit 7    monochrome
  1364.         bit 6    color text, EGA/VGA graphics
  1365.         bit 5    medium-resolution CGA graphics
  1366.         bit 4    high-resolution CGA graphics
  1367.          BYTE which attributes to set
  1368.         bit 7  if set, copy single following byte to indicated attribs
  1369.         bits 4-6  # of first attribute to change - 1
  1370.         bits 0-3  # of consecutive attributes to change
  1371.          N BYTEs new attributes
  1372.     EDh  set logical attributes for window frame
  1373.          BYTE video modes command applies to (see opcode ECh)
  1374.          BYTE which attributes to set
  1375.         bit 7  if set, copy single following byte to indicated attrs
  1376.         bits 4-6  # of first attribute to change - 1
  1377.         bits 0-3  # of consecutive attributes to change
  1378.          N BYTEs new attributes
  1379.           attributes
  1380.                1 = top left corner
  1381.                2 = top right corner
  1382.                3 = bottom left corner
  1383.                4 = bottom right corner
  1384.                5 = top edge
  1385.                6 = bottom edge
  1386.                7 = left edge
  1387.                8 = right edge
  1388.     EEh  set characters for window frame
  1389.          BYTE video modes command applies to (see opcode ECh)
  1390.          BYTE which characters to set
  1391.         bit 7  if set, copy single following byte to indicated chars
  1392.         bits 4-6  # of first char to change - 1
  1393.         bits 0-3  # of consecutive chars to change
  1394.          N BYTEs new chars (same relative position as attributes above)
  1395.     EFh  set window name
  1396.          BYTE length of name (should be in range 0 to logical screen width)
  1397.          N BYTEs name
  1398.     F0h  clear input field to blanks
  1399.          BYTE field number
  1400.     F1h  fill input field with character
  1401.          BYTE field number
  1402.          BYTE char
  1403.     F2h  set color of input field
  1404.          BYTE field number (1-N)
  1405.          BYTE attribute
  1406.     F3h  set initial contents of input field
  1407.          BYTE field number (1-N)
  1408.          N BYTEs enough chars to exactly fill field as defined by op FFh
  1409.     F4h  position cursor to start of specific input field
  1410.          BYTE field number (1-N)
  1411.     F5h  change field table entry
  1412.          BYTE field number
  1413.          7-8 BYTEs field table entry (see opcode FFh below)
  1414.     F6h  set field type
  1415.          BYTE field number
  1416.          BYTE type
  1417.             00h inactive
  1418.             40h output field
  1419.             80h input field
  1420.             C0h deselected field
  1421.             C2h selected field
  1422.     F7h  "broadcast write"    write data to fields with program output bit
  1423.         set in field table entry, in field number order
  1424.          N BYTEs (total length of all program output fields)
  1425.     F8h  scroll field up a line
  1426.          BYTE field number
  1427.     F9h  scroll field down a line
  1428.          BYTE field number
  1429.     FAh  scroll field left
  1430.          BYTE field number
  1431.     FBh  scroll field right
  1432.          BYTE field number
  1433.     FCh  set field table header
  1434.          BYTE number of fields (must be <= existing number of fields)
  1435.          BYTE screen behavior bits
  1436.         bit 7  reserved
  1437.         bit 6  set if menu items may be selected via keyboard
  1438.         bit 5  set if left mouse button may terminate entry
  1439.         bit 4  set if right mouse button may terminate entry
  1440.         bit 3  if set, select fields return contents or blanks rather
  1441.             than 'Y' or 'N'
  1442.         bit 2  if set, modified bits reset on return to application
  1443.         bits 0,1 = 00 no data returned on read of keyboard
  1444.                01 data returned as array of chars containing
  1445.                 all fields packed together, with no field
  1446.                 numbers
  1447.                10 data returned as numbered variable-length
  1448.                 records for all fields
  1449.                11 data returned as numbered variable-length
  1450.                 records for the fields which were modified
  1451.          BYTE current input field (updated by DESQview)
  1452.          BYTE current select field (updated by DESQview)
  1453.          BYTE attribute for select fields when they are pointed at
  1454.          BYTE attribute for select fields which have been selected
  1455.     FDh  reset modified bit for all fields
  1456.     FEh  reset selected and modified bits for all fields
  1457.     FFh  set up input fields
  1458.          6 BYTEs table header (see opcode FCh above)
  1459.          the field table entries, one for each field
  1460.          BYTE start row       \
  1461.          BYTE start column  \ if menu selection and start is to
  1462.          BYTE end row        / right or below end, select from kbd only
  1463.          BYTE end column   /
  1464.          BYTE field type
  1465.             bits 7,6 = 00 inactive (non-entry) field
  1466.                    01 echos keystrokes input to make menu selection
  1467.                    10 fill-in field
  1468.                    11 select field
  1469.             bit 5  field can be filled by broadcast write (F7h opcode)
  1470.             bit 4  reserved
  1471.             bit 3  reserved
  1472.             bit 2  reserved
  1473.             bit 1  set if field selected
  1474.             bit 0  set if field modified
  1475.          BYTE modifier
  1476.               if type is fill-in, then bit flags to determine behavior
  1477.               bit 7     if set, automatically enter CR when field full
  1478.               bit 6     move to next field when current field is full
  1479.               bit 5     if set, enter text from right end (for numbers)
  1480.               bit 4     if set, force input to uppercase
  1481.               bit 3     if set, clear old contents on first keystroke
  1482.               bit 2     if set, input returned when cursor moves out
  1483.                  of modified field (API level 2.02+)
  1484.               bit 1     reserved
  1485.               bit 0     reserved
  1486.               if select field, first key to press to activate
  1487.               00h if have to point-&-click or is an extended-ASCII
  1488.                   keystroke (only if two-key menus enabled)
  1489.          BYTE (select field only) normal color of field
  1490.          BYTE second key for select field.  This byte is present iff
  1491.               two-letter menu entries selected with opcode E5h, and
  1492.               in that case is present regardless of field type
  1493.          Note: DESQview uses and updates the actual copy of the information
  1494.            which is contained in the stream.  Thus this info must remain
  1495.            intact until after the data entry is complete.
  1496.  
  1497. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  1498.     A0h return logical cursor row in next byte
  1499.     A1h return logical cursor column in next byte
  1500.     A2h return top row of scrolling region in next byte
  1501.     A3h return left column of scrolling region in next byte
  1502.     A4h return row of physical window origin in next byte
  1503.     A5h return column of physical window origin in next byte
  1504.     A6h return height of physcial window in next byte
  1505.     A7h return width of physical window in next byte
  1506.     A8h return row of viewport origin in next byte
  1507.     A9h return column of viewport origin in next byte
  1508.     AAh return height of virtual screen in next byte
  1509.     ABh return width of virtual screen in next byte
  1510.     AFh return current video mode in next byte
  1511.     C0h return current logical cursor position in next two bytes
  1512.     C1h return top left corner of scrolling region in next two bytes
  1513.     C2h return current window position in next two bytes
  1514.     C3h return current window size in next two bytes
  1515.     C4h return current viewport origin in next two bytes
  1516.     C5h return current virtual screen size in next two bytes
  1517.     D0h \ overwritten with D0h if frames may fall off screen edge
  1518.     D1h /               D1h if frames always displayed entirely
  1519.     D2h \ overwritten with D2h if DESQview controls color palette
  1520.     D3h /               D3h if application changes color palette
  1521.     D4h \ overwritten with D4h if window visible
  1522.     D5h /               D5h if window hidden
  1523.     D6h \ overwritten with D6h if window has frame
  1524.     D7h /               D7h if window unframed
  1525.     D8h \ overwritten with D8h if reading characters from window
  1526.     D9h /               D9h if reading attributes from window
  1527.     DAh \ overwritten with DAh if using logical attributes
  1528.     DBh /               DBh if using physical attributes
  1529.     DCh \ overwritten with DCh if TTY control char interpretation on
  1530.     DDh /               DDh if TTY control char interpretation off
  1531.     DEh \ overwritten with DEh if writing both characters and attributes
  1532.     DFh /               DFh if leaving attributes untouched
  1533.     E2h return current color in next byte
  1534.     ECh get logical attributes for window contents
  1535.         BYTE execute call if currently in specified video mode
  1536.         bit 7    monochrome
  1537.         bit 6    color text, EGA/VGA graphics
  1538.         bit 5    medium-resolution CGA graphics
  1539.         bit 4    high-resolution CGA graphics
  1540.         BYTE which attributes to get
  1541.         bit 7 unused???
  1542.         bits 4-6 first attribute to get - 1
  1543.         bits 0-3 # consecutive attributes
  1544.         N BYTEs buffer to hold attributes
  1545.     EDh get logical attributes for window frame
  1546.         BYTE execute call if currently in video mode (see opcode ECh)
  1547.         BYTE which attributes to get
  1548.         bit 7 unused???
  1549.         bits 4-6 first attribute to get - 1
  1550.         bits 0-3 # consecutive attributes
  1551.         N BYTEs buffer to hold attributes
  1552.     EEh get characters for window frame
  1553.         BYTE execute call if currently in video mode (see opcode ECh)
  1554.         BYTE which attributes to get
  1555.         bit 7 unused???
  1556.         bits 4-6 first char to get - 1
  1557.         bits 0-3 # consecutive chars
  1558.         N BYTEs buffer to hold chars
  1559.     EFh return first N characters of current window name
  1560.         BYTE    max length of returned name
  1561.         N BYTEs buffer to hold window name
  1562.     F3h return contents of specified field
  1563.         BYTE field number
  1564.         N BYTEs buffer to hold field contents (size exactly equal to field
  1565.             size)
  1566.     F5h get field table entry
  1567.         BYTE field number
  1568.         7-8 BYTEs buffer to hold field table entry
  1569.            Notes: DV < 2.26 always returns 7 bytes
  1570.               DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  1571.             table is using 8-byte entries and eighth byte after
  1572.             F5h is E7h (NOP); otherwise, 7 bytes are returned
  1573.               DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  1574.             depending on the field table entry size
  1575.     F6h get type of a field
  1576.         BYTE field number
  1577.         BYTE type
  1578.     FCh get field table header
  1579.         6 BYTEs buffer to store header
  1580.  
  1581. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  1582.     00h allow window to be moved horizontally
  1583.     01h allow window to be moved vertically
  1584.     02h allow window to change width
  1585.     03h allow window to change height
  1586.     04h allow window to be scrolled horizontally
  1587.     05h allow window to be scrolled vertically
  1588.     06h allow "Close Window" menu selection for application
  1589.     07h allow "Hide Window" menu selection for application
  1590.     08h allow application to be suspended ("Rearrange/Freeze")
  1591.     0Eh allow "Scissors" menu
  1592.     10h allow DESQview main menu to be popped up
  1593.     11h allow "Switch Windows" menu
  1594.     12h allow "Open Window" menu
  1595.     13h allow "Quit" menu selection
  1596.     20h-33h opposite of 00h-13h, disallow specified action
  1597.     40h notify if horizontal position of window changes
  1598.     41h notify if vertical position of window changes
  1599.     42h notify if width of window changes
  1600.     43h notify if height of window changes
  1601.     44h notify if window scrolled horizontally
  1602.     45h notify if window scrolled vertically
  1603.     46h notify if window is closed--program has to clean up and exit itself
  1604.     47h notify if window is hidden
  1605.     48h notify if "?" on main menu selected
  1606.     49h notify if pointer message sent to window
  1607.     4Ah notify if window is placed in foreground
  1608.     4Bh notify if window is placed in background
  1609.     4Ch notify if video mode changes
  1610.     4Dh notify if "Scissors" menu "Cut" option selected
  1611.     4Eh notify if "Scissors" menu "Copy" option selected
  1612.     4Fh notify if "Scissors" menu "Paste" option selected
  1613.     50h notify if DESQview main menu about to pop up
  1614.     51h notify if DESQview main menu popped down
  1615.     60h-71h     opposite of 40h-51h: don't notify on specified event
  1616.     84h attach window to parent task's window (both move together)
  1617.     85h detach window from parent task's window (may move independently)
  1618.     86h disable background operation for application
  1619.     87h enable running in background
  1620.     88h set minimum size of physical window
  1621.         BYTE rows
  1622.         BYTE columns
  1623.     89h set maximum size of physical window
  1624.         BYTE rows
  1625.         BYTE cols
  1626.     8Ah set primary asynchronous notification routine
  1627.         DWORD address of routine, 0000h:0000h means none (see also below)
  1628.     8Bh set async notification parameter
  1629.         DWORD 32-bit value passed to 8Ah async routine in DS:SI
  1630.     ACh (DV2.2+) perform regular select field attribute processing
  1631.     ADh (DV2.2+) protect attributes in selected field from being lost
  1632.     AEh make window default notify window for owning app (API level 2.00+)
  1633.     AFh set selected field marker character
  1634.         BYTE character to display at left edge of selected fields
  1635.     BCh set standard field processing mode 
  1636.     BDh set alternate field processing mode (enables cursor pad for menus)
  1637.     BEh disables changing reverse logical attributes with ECh opcode
  1638.     BFh enables changing reverse logical attributes with ECh opcode
  1639.     C0h make current window topmost in system
  1640.     C1h force current process into foreground
  1641.     C2h make current window topmost in process
  1642.     C3h position mouse pointer relative to origin of current field
  1643.         BYTE rows below upper left corner of field
  1644.         BYTE columns to right of upper left corner of field
  1645.     C4h position mouse pointer relative to origin of given field
  1646.         BYTE field number
  1647.         BYTE rows below upper left corner of field
  1648.         BYTE columns to right of upper left corner of field
  1649.     C5h orphan current window (also hides it)
  1650.         Note: must be last in stream; all subsequent commands ignored
  1651.     C6h show all windows for this process
  1652.     C7h hide all windows for this process
  1653.     C8h suspend process and hide all its windows
  1654.     C9h force current process into background
  1655.     CAh make current window bottom-most in process
  1656.     CBh cancel current window manager operation, remove DV menu, give 
  1657.         control to topmost application
  1658.     CCh orphan window and give it to the system for use as paste data
  1659.     CEh reorder windows
  1660.         DWORD pointer to null-terminated list of words
  1661.           each word is segment of object handle for a window
  1662.     FFh no operation
  1663.  
  1664. MODES 14h to 1Fh "USER STREAMS"
  1665.     normally NOPs, but may be defined by SETESC message to invoke FAR
  1666.     routines, one for each mode number
  1667.       on entry to handler,
  1668.         DS:SI -> first byte of actual stream (not header)
  1669.         CX = #bytes in stream
  1670.         ES:DI = window's handle
  1671.  
  1672. Asynchronous notification routine defined by manager stream 8Ah called with:
  1673.     ES:DI = handle of window
  1674.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  1675.        mailbox contains message indicating event
  1676.           Opcode
  1677.            40h  horizontal movement
  1678.            DWORD object handle of window
  1679.            BYTE     new row
  1680.            BYTE     new col
  1681.            41h  vertical movement
  1682.            DWORD object handle of window
  1683.            BYTE     new row
  1684.            BYTE     new col
  1685.            42h  horizontal size change
  1686.            DWORD object handle of window
  1687.            BYTE     new rows
  1688.            BYTE     new cols
  1689.            43h  vertical size change
  1690.            DWORD object handle of window
  1691.            BYTE     new rows
  1692.            BYTE     new cols
  1693.            44h  scrolled horizontally
  1694.            DWORD object handle of window
  1695.            BYTE     mouse row within window
  1696.            BYTE     mouse column within window
  1697.            BYTE     field mouse is on, 0 if none
  1698.            BYTE     amount moved: >0 right, <0 left, 0 done
  1699.            45h  scrolled vertically
  1700.            DWORD object hande of window
  1701.            BYTE     mouse row within window
  1702.            BYTE     mouse column within window
  1703.            BYTE     field mouse is on, 0 if none
  1704.            BYTE     amount moved: >0 down, <0 up, 0 done
  1705.            46h  window close request
  1706.            DWORD object handle of window
  1707.            BYTE     mouse pointer row
  1708.            BYTE     mouse pointer column
  1709.            BYTE     field mouse is on, 0 if none
  1710.            47h  application's windows hidden
  1711.            48h  Help for Program selected
  1712.            DWORD object handle of window
  1713.            BYTE     mouse pointer row
  1714.            BYTE     mouse pointer column
  1715.            BYTE     field mouse is on, 0 if none
  1716.            49h  pointer message sent to window
  1717.            DWORD pointer handle which received message
  1718.            4Ah  switched to window from another ("raise")
  1719.            4Bh  switched away from the window ("lower")
  1720.            4Ch  video mode changed
  1721.            BYTE new BIOS video mode
  1722.            4Dh  Scissors/cUt selected
  1723.            DWORD object handle of window
  1724.            BYTE     row of upper left corner
  1725.            BYTE     column of upper left corner
  1726.            BYTE     field number ul corner is in, 0=none
  1727.            DWORD handle of orphaned window created with
  1728.              copy of data from specified region
  1729.            BYTE     height of region
  1730.            BYTE     width of region
  1731.            4Eh  Scissors/Copy selected
  1732.            DWORD object handle of window
  1733.            BYTE     row of upper left corner
  1734.            BYTE     column of upper left corner
  1735.            BYTE     field number ul corner is in, 0=none
  1736.            DWORD handle of orphaned window created with
  1737.              copy of data from specified region
  1738.            BYTE     height of region
  1739.            BYTE     width of region
  1740.            4Fh  Scissors/Paste selected
  1741.            DWORD object handle of window
  1742.            BYTE     row of upper left corner
  1743.            BYTE     column of upper left corner
  1744.            BYTE     field number ul corner is in, 0=none
  1745.            DWORD handle of orphaned window with data
  1746.            BYTE     height of region
  1747.            BYTE     width of region
  1748.             Note: orphaned data window should be adopted or freed
  1749.                 when done
  1750.            50h  main menu about to pop up
  1751.            51h  main menu popped down
  1752. Return: all registers unchanged
  1753. ----------1512--BH06-------------------------
  1754. INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  1755.     AH = 12h
  1756.     BH = 06h
  1757.     BL = object
  1758.         00h object handle in DWORD on top of stack
  1759.         mailbox, keyboard, pointer, or timer
  1760.         04h given task's keyboard (task's handle on top of stack)
  1761.         05h current task's default keyboard
  1762.     STACK: DWORD new priority of object in task's OBJECTQ 
  1763. Notes:    initially all objects have the same default value.  Should only make 
  1764.       relative adjustments to this default value.
  1765.     when changing priorities, all objects already on the objectq are
  1766.       reordered
  1767. SeeAlso: AH=12h/BH=07h
  1768. ----------1512--BH07-------------------------
  1769. INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  1770.     AH = 12h
  1771.     BH = 07h
  1772.     BL = object
  1773.         00h object handle in DWORD on top of stack
  1774.         mailbox, keyboard, pointer, or timer
  1775.         04h given task's keyboard (task's handle on top of stack)
  1776.         05h current task's default keyboard
  1777. Return: STACK: DWORD object priority
  1778. Note:    initially all objects have the same default value.  Should only make 
  1779.       relative adjustments to this default value.
  1780. SeeAlso: AH=12h/BH=06h
  1781. ----------1512--BH08-------------------------
  1782. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  1783.     AH = 12h
  1784.     BH = 08h
  1785.     BL = object
  1786.         00h handle in DWORD on top of stack
  1787.         window: total character positions in window
  1788.         timer: elapsed time since timer started
  1789.         pointer: number of messages queued to pointer object
  1790.         panel: number of panels in panel file
  1791.         keyboard: number of input buffers queued
  1792.         01h total chars in current task's default window
  1793.         02h number of messages in task's mailbox (task's handle on stack)
  1794.         03h number of messages in current task's mailbox
  1795.         04h number of input buffers queued in task's kbd (handle on stack)
  1796.         05h number of input buffers queued for current task's default kbd
  1797.         06h number of objects queued in OBJECTQ (task's handle on stack)
  1798.         07h number of objects queued in current task's OBJECTQ
  1799.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  1800.         0Dh (DV 2.26+) total chars in parent task's window
  1801. Return: DWORD on top of stack is result
  1802. Note:    for panel objects, a count of zero is returned if no panel file is open
  1803.       for the object
  1804. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  1805. ----------1512--BH09-------------------------
  1806. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  1807.     AH = 12h
  1808.     BH = 09h
  1809.     BL = object
  1810.         00h handle in DWORD on top of stack
  1811.         window: get chars/line
  1812.         timer: get 1/100 seconds remaining before timer expires
  1813.         01h get number of chars/line in current task's default window
  1814.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  1815.         0Dh (DV 2.26+) get chars/line in parent task's window
  1816. Return: DWORD on top of stack is length
  1817. SeeAlso: AH=12h/BH=08h
  1818. ----------1512--BH0A-------------------------
  1819. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  1820.     AH = 12h
  1821.     BH = 0Ah
  1822.     BL = window to write to
  1823.         00h window handle is DWORD on top of stack
  1824.         01h current task's default window
  1825.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1826.         0Dh (DV 2.26+) default window of parent of current task
  1827.     STACK:    DWORD count of attributes
  1828.         DWORD address of attribute string
  1829.         DWORD count of characters
  1830.         DWORD address of character string
  1831. Notes:    if one string is longer than the other, the shorter one will be reused
  1832.       until the longer one is exhausted
  1833.     the cursor is left just after the last character written
  1834. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  1835. ----------1512--BH0A-------------------------
  1836. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  1837.     AH = 12h
  1838.     BH = 0Ah
  1839.     BL = mailbox to write to
  1840.         00h handle is DWORD on top of stack
  1841.         02h default mailbox of task whose handle is on top of stack
  1842.         03h current task's default mailbox
  1843.     STACK:    DWORD    status (low byte)
  1844.         DWORD    length of message
  1845.         DWORD    address of message
  1846. Notes:    the message is copied into either system or common memory
  1847.     insufficient memory normally causes the process to be aborted; under
  1848.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  1849. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  1850. ----------1512--BH0A-------------------------
  1851. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  1852.     AH = 12h
  1853.     BH = 0Ah
  1854.     BL = object
  1855.         00h handle is DWORD on top of stack
  1856.         timer: start timer for specified interval
  1857.         pointer: set control flags
  1858.         keyboard: set control flags
  1859.         04h set control flags on KEYBOARD object (handle on top of stack)
  1860.         05h set control flags on task's default KEYBOARD object
  1861.     STACK: (if timer)   DWORD duration in 1/100 seconds
  1862.            (otherwise)  DWORD bits to set
  1863. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  1864.  
  1865. For keyboard objects, the bits have the following significance:
  1866.     bit 15 reserved, can't be set
  1867.     bit 14 unused
  1868.     bit 13 reserved, can't be set
  1869.     bit 12-6 unused
  1870.     bit 5  (DV 2.2+) exclusive input
  1871.     bit 4  filter all keys (used with handler established by SETESC)
  1872.         if 0, only keys that would normally be displayed are filtered
  1873.     bit 3  program continues executing while input in progress
  1874.     bit 2  insert mode active for field mode
  1875.     bit 1  hardware cursor displayed when task is hardware cursor owner
  1876.         must be set if keyboard in field mode and field table includes
  1877.         input fields
  1878.     bit 0  keyboard is in field mode rather than keystroke mode
  1879.  
  1880. For pointer objects, the bits have the following significance:
  1881.     bit 15 reserved, can't be set
  1882.     bit 14-8 unused
  1883.     bit 7  mouse pointer is hidden while in window
  1884.     bit 6  get messages even if window not topmost
  1885.     bit 5  get messages even if window not foreground
  1886.     bit 4  multiple clicks separated by less than 1/3 second are counted
  1887.         and returned in a single message
  1888.     bit 3  pointer position is relative to screen origin, not window origin
  1889.     bit 2  send message on button release as well as button press
  1890.     bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  1891.         pointer leaves the window
  1892.     bit 0  send message only on button activity, not movement
  1893.            DV-specific, and INT 15/AX=DE0Fh must have been called first
  1894. ----------1512--BH0B-------------------------
  1895. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  1896.     AH = 12h
  1897.     BH = 0Bh
  1898.     BL = window to write attributes to
  1899.         00h handle is DWORD on top of stack
  1900.         01h current task's default window
  1901.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1902.         0Dh (DV 2.26+) default window of parent of current task
  1903.     STACK:    DWORD number of attributes to write
  1904.         DWORD address of attributes
  1905. Note:    the attributes are written starting at the current cursor position; the
  1906.       cursor is left just after the last position written
  1907. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  1908. ----------1512--BH0B-------------------------
  1909. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  1910.     AH = 12h
  1911.     BH = 0Bh
  1912.     BL = mailbox to write to
  1913.         00h handle is DWORD on top of stack
  1914.         02h default mailbox of task whose handle is on top of stack
  1915.         03h current task's default mailbox
  1916.     STACK:    DWORD    status (low byte)
  1917.         DWORD    length of message
  1918.         DWORD    address of message
  1919. Notes:    only a pointer to the message is stored, but the write may still fail
  1920.       due to insufficient memory
  1921.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1922. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  1923. ----------1512--BH0B-------------------------
  1924. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  1925.     AH = 12h
  1926.     BH = 0Bh
  1927.     BL = OBJECTQ from which to remove all copies of a particular object
  1928.         06h OBJECTQ of task whose handle is on top of stack
  1929.         07h task's default OBJECTQ
  1930.     STACK:    DWORD    handle of object to remove
  1931. Note:    should be sent whenever an object is erased or closed
  1932. ----------1512--BH0B-------------------------
  1933. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  1934.     AH = 12h
  1935.     BH = 0Bh
  1936.     BL = object
  1937.         00h handle is DWORD on top of stack
  1938.         pointer: reset control flags
  1939.         keyboard: reset control flags
  1940.         04h clear control flags on KEYBOARD object (handle on top of stack)
  1941.         05h clear control flags on task's default KEYBOARD object
  1942.     STACK:    DWORD    which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  1943. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  1944. ----------1512--BH0C-------------------------
  1945. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  1946.     AH = 12h
  1947.     BH = 0Ch
  1948.     BL = object
  1949.         00h handle is DWORD on top of stack
  1950.         window:      fill with given character from scroll origin to end
  1951.         keyboard: attach to a window
  1952.         timer:      open
  1953.         pointer:  start taking input for window
  1954.         panel:      associate with a panel file
  1955.         01h fill task's default window with given char from scrl org to end
  1956.         02h open given task's mailbox for input (task's handle on stack)
  1957.         03h open current task's mailbox
  1958.         04h attach a KEYBOARD to a window (handle on top of stack)
  1959.         05h attach task's default KEYBOARD to a window
  1960.         06h open a task's OBJECTQ (task's handle on top of stack)
  1961.         07h open current task's OBJECTQ
  1962.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  1963.         0Dh (DV 2.26+) fill default window of parent of current task
  1964.      STACK: (if window)   DWORD character to fill with
  1965.         (if keyboard) DWORD handle of window to attach to
  1966.         (if pointer)  DWORD handle of window to attach to
  1967.         (if panel)    DWORD length of filename or resident panel
  1968.                   DWORD address of filename or resident panel
  1969.         (otherwise)   nothing
  1970. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  1971.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  1972.       the panel file
  1973.     result code of open may be retrieved with STATUS message
  1974.     logical cursor is left at scroll origin after filling window
  1975.     the task opening a mailbox becomes its owner, and the only task allowed
  1976.       to read the mailbox
  1977.     messages are only sent to a pointer object when the mouse is positioned
  1978.       in the window to which the pointer has been attached
  1979.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  1980.       messages automatically open the timer
  1981. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  1982. ----------1512--BH0D-------------------------
  1983. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  1984.     AH = 12h
  1985.     BH = 0Dh
  1986.     BL = object
  1987.         00h handle is DWORD on top of stack
  1988.         timer:      close
  1989.         keyboard: detach from window and discard queued input
  1990.         pointer:  stop taking input
  1991.         panel:      close
  1992.         mailbox:  close, unlock, and discard any pending messages
  1993.         02h close given task's mailbox (task's handle on top of stack)
  1994.         03h close task's default mailbox
  1995.         04h close KEYBOARD object (handle on top of stack)
  1996.         05h close task's default KEYBOARD
  1997.         06h close givent task's OBJECTQ (task's handle on top of stack)
  1998.         07h close current task's OBJECTQ
  1999. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  2000.       ERASE message (AH=12h/BH=0Eh)
  2001.     when a panel object is closed, the panel file and any panels currently
  2002.       in use are freed; window and keyboard objects created by APPLY are
  2003.       not affected, but field mode input ceases
  2004.     open but idle timer objects consume a small amount of CPU time
  2005. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  2006. ----------1512--BH0E-------------------------
  2007. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  2008.     AH = 12h
  2009.     BH = 0Eh
  2010.     BL = object
  2011.         00h handle is DWORD on top of stack
  2012.         window:      clear from scroll origin to end of window
  2013.         keyboard: discard input
  2014.         timer:      cancel current interval
  2015.         pointer:  discard all pending messages
  2016.         mailbox:  discard all pending messages
  2017.         01h clear task's default window from scroll origin to end
  2018.         02h discard all queued messages in mailbox (handle on top of stack)
  2019.         03h discard all queued messages in current task's default mailbox
  2020.         04h discard all input queued to KEYBOARD (handle on top of stack)
  2021.         05h discard all input queued to task's default KEYBOARD
  2022.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  2023.         07h remove all objects from current task's OBJECTQ
  2024.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  2025.         0Dh (DV 2.26+) clear default window of parent of current task
  2026. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  2027. SeeAlso: AH=12h/BH=02h
  2028. ----------1512--BH0F-------------------------
  2029. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  2030.     AH = 12h
  2031.     BH = 0Fh
  2032.     BL = object
  2033.         00h handle is DWORD on top of stack
  2034.         timer:     is it running?
  2035.         pointer: return status of last message
  2036.         panel:     verify success of last OPEN or APPLY
  2037.         02h return status of last msg READ from mailbox (handle on stack)
  2038.         03h return status of last msg READ from task's default mailbox
  2039.         04h get status of last msg from task's KEYBOARD (task handle on stk)
  2040.         05h get status of last msg from task's default KEYBOARD
  2041.         06h return whether OBJECTQ is open or not (handle on top of stack)
  2042.         07h return whether task's default OBJECTQ is open or not
  2043. Return: DWORD on top of stack is status
  2044. Notes:    if object is a panel object, the status indicates the error code:
  2045.       00h successful
  2046.       14h panel name not in panel directory
  2047.       15h not enough memory to apply panel
  2048.       16h invalid panel format
  2049.       17h panel file already open
  2050.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  2051.       95h not enough memory to open panel file     > that the panel was
  2052.       98h null panel file name            /  not opened
  2053.     if object is a timer, the status is:
  2054.       00000000h open but not running
  2055.       40000000h open and running
  2056.       80000000h closed
  2057.     if object is an OBJECTQ, the status is:
  2058.       00000000h open
  2059.       80000000h closed
  2060.     if object is a keyboard in keystroke mode, the status is the extended
  2061.       character code (scan code) of teh last keystroke
  2062.     if object is a keyboard in field mode, the status indicates the reason
  2063.       for the last return from the field manager
  2064.       00h Enter key pressed
  2065.       01h Button 1 or keystroke selection
  2066.       02h Button 2
  2067.       03h validation
  2068.       04h auto Enter on field
  2069.       1Bh Escape pressed
  2070.       46h ^Break pressed
  2071.       other: extended code for key terminating input
  2072.     the status of mailbox messages sent by the window manager is always 80h
  2073.     the status of a pointer message is the same as the status field in the
  2074.       message
  2075. SeeAlso: AH=12h/BH=04h"READ"
  2076. ----------1512--BH10-------------------------
  2077. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  2078.     AH = 12h
  2079.     BH = 10h
  2080.     BL = object
  2081.         00h handle is DWORD on top of stack
  2082.         window: return TRUE if logical cursor past end of window
  2083.         mailbox: ???
  2084.         01h returns TRUE if logical cursor past end of task's def window
  2085.         02h return ??? for task's mailbox (task's handle on top of stack)
  2086.         03h return ??? for current task's mailbox
  2087.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  2088.         0Dh (DV 2.26+) check log cursor of window of parent task
  2089. Return: DWORD on top of stack is status
  2090. ----------1512--BH11-------------------------
  2091. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  2092.     AH = 12h
  2093.     BH = 11h
  2094.     BL = window for which to move cursor
  2095.         00h window's handle is DWORD on top of stack
  2096.         01h task's default window
  2097.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2098.         0Dh (DV 2.26+) default window of parent of current task
  2099.     STACK: DWORD column
  2100.            DWORD row
  2101. ----------1512--BH11-------------------------
  2102. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  2103.     AH = 12h
  2104.     BH = 11h
  2105.     BL = mailbox to name
  2106.         00h DWORD on top of stack is mailbox handle
  2107.         02h use given task's mailbox (task's handle on top of stack)
  2108.         03h use current task's default mailbox
  2109.     STACK: DWORD length of name
  2110.            DWORD address of name
  2111. SeeAlso: AX=DE0Eh
  2112. ----------1512--BX1100-----------------------
  2113. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  2114.     AH = 12h
  2115.     BX = 1100h
  2116.     STACK: DWORD object handle for pointer object
  2117.            DWORD number of colums to scale pointer position to
  2118.            DWORD number of rows to scale pointer position to
  2119. SeeAlso: AH=12h/BX=1200h
  2120. ----------1512--BH12-------------------------
  2121. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  2122.     AH = 12h
  2123.     BH = 12h
  2124.     BL = window to read from
  2125.         00h handle is DWORD on top of stack
  2126.         01h read next N chars or attributes on task's default window
  2127.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  2128.         0Dh (DV 2.26+) read default window of parent of current task
  2129.     STACK: DWORD count
  2130. Return: STACK: DWORD width of screen line
  2131.            DWORD address
  2132.            DWORD count actually read
  2133. Notes:    reading starts at the current logical cursor position; the cursor is
  2134.       updated to point at the character following the last one read
  2135.     any translucent blanks (FFh) which are visible on screen are changed
  2136.       to the character which is seen through them
  2137.     the string produced by the read is placed in an input buffer which may
  2138.       be reused by the next READ or READN of a window
  2139.     window stream opcodes D8h and D9h determine whether the read returns
  2140.       characters or attributes
  2141. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  2142. ----------1512--BX1200-----------------------
  2143. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  2144.     AH = 12h
  2145.     BX = 1200h
  2146.     STACK: DWORD object handle for pointer
  2147. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  2148.            DWORD pointer pos scaled as if window were this many rows high
  2149. SeeAlso: AH=12h/BX=1100h
  2150. ----------1512--BH13-------------------------
  2151. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  2152.     AH = 12h
  2153.     BH = 13h
  2154.     BL = window object
  2155.         00h DWORD on top of stack is handle for window to redraw
  2156.         01h redraw task's default window
  2157.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  2158.         0Dh (DV 2.26+) redraw default window of parent of current task
  2159. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  2160. ----------1512--BX1300-----------------------
  2161. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  2162.     AH = 12h
  2163.     BX = 1300h
  2164.     STACK: DWORD object handle for pointer
  2165.            DWORD character to use for pointer
  2166. ----------1512--BH14-------------------------
  2167. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  2168.     AH = 12h
  2169.     BH = 14h
  2170.     BL = message modifier
  2171.         00h handle is DWORD on top of stack
  2172.         01h define user stream
  2173.         04h intercept keystrokes from KEYBOARD to a window (handle on stack)
  2174.         05h intercept keystrokes from task's default KEYBOARD to a window
  2175.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  2176.                  DWORD address of FAR user stream handler
  2177.            (if keyboard) DWORD address of FAR filter function
  2178.  
  2179. The keyboard filter function is called when the keyboard is in field mode.  On
  2180. entry,
  2181.     AL = character
  2182.     AH = 00h or extended ASCII code if AL = 00h
  2183.     BL = field number
  2184.     CH = cursor column
  2185.     CL = cursor row
  2186.     DL = field type modifier (sixth item in field table entry)
  2187.     DH = seventh item in field table entry
  2188.     ES:SI = window's handle
  2189.     DS:DI -> field table entry for field containing the cursor
  2190. The filter function should return
  2191.     AH = 00h use keystroke
  2192.          01h ignore keystroke
  2193.          FFh beep and ignore keystroke
  2194. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  2195. ----------1512--BH14-------------------------
  2196. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  2197.     AH = 12h
  2198.     BH = 14h
  2199.     BL = object
  2200.         00h mailbox handle is DWORD on top of stack
  2201.         02h use given task's mailbox (task's handle on top of stack)
  2202.         03h use current task's default mailbox
  2203. Note:    release exclusive access by sending CLOSE message to mailbox
  2204.     access may be requested multiple times, and requires multiple CLOSEs
  2205. SeeAlso: AH=12h/BH=0Dh
  2206. ----------1512--BH15-------------------------
  2207. INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  2208.     AH = 12h
  2209.     BH = 15h
  2210.     BL = object
  2211.         00h DWORD on top of stack
  2212.         mailbox, keyboard, or pointer only
  2213.         02h mailbox for task whose handle is on top of stack
  2214.         03h mailbox for current task
  2215.         04h keyboard for task whose handle is on top of stack
  2216.         05h keyboard for current task
  2217.     STACK: DWORD flags
  2218.         if mailbox:
  2219.             bit 0: all mail messages in common memory
  2220.             bit 1: allow write even if closed
  2221.             bit 2: don't erase messages when mailbox closed
  2222.         if keyboard:
  2223.             bit 5: exclusive input when keyboard in use for input
  2224. Return: nothing
  2225. Notes:    only available if the API level has been set to at least 2.20
  2226.     equivalent to performing SUBFROM and ADDTO calls on the object
  2227. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  2228. ----------1512--BH16-------------------------
  2229. INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  2230.     AH = 12h 
  2231.     BH = 16h
  2232.     BL = object
  2233.         00h DWORD on top of stack
  2234.         mailbox, keyboard, or pointer only
  2235.         02h mailbox for task whose handle is on top of stack
  2236.         03h mailbox for current task
  2237.         04h keyboard for task whose handle is on top of stack
  2238.         05h keyboard for current task
  2239. Return: STACK: DWORD current control flags
  2240. Note:    only available if the API level has been set to at least 2.20
  2241. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=15h
  2242. ----------1513-------------------------------
  2243. INT 15 - VMiX - WAKE PROCESS
  2244.     AH = 13h
  2245.     STACK:    WORD    process ID
  2246. Return: AX = status
  2247. SeeAlso: AH=12h"VMiX"
  2248. ----------1513-------------------------------
  2249. INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
  2250.     AH = 13h
  2251. Return: BX:AX -> task control block (see below)
  2252. SeeAlso: AH=15h"MultiDOS"
  2253.  
  2254. Format of MultiDOS Plus v4.0 task control block:
  2255. Offset    Size    Description
  2256.  00h    DWORD    pointer to next TCB
  2257.  04h  8 BYTEs    ASCIZ task name
  2258.  0Ch  2 BYTEs    ???
  2259.  0Eh    WORD    task PSP segment
  2260.  10h    WORD    abort/suspend flags
  2261.  12h    WORD    current screen segment (see AH=0Bh,AH=0Ch)
  2262.  14h    WORD    priority level (0000h-FFFEh)
  2263.  16h    WORD    time slice counter
  2264.  18h  2 BYTEs    ???
  2265.  1Ah    WORD    suspend timer value
  2266.  1Ch    WORD    stack segment
  2267.  1Eh    WORD    stack pointer
  2268.  20h    WORD    display type
  2269.  22h    WORD    display memory
  2270.  24h  2 BYTEs    ???
  2271.  26h    WORD    termination count
  2272.  28h    WORD    equipment flag for BIO10 driver
  2273.  2Ah    BYTE    background CRT mode
  2274.  2Bh    WORD    screen width in columns
  2275.  2Dh    WORD    screen size in bytes
  2276.  2Fh    WORD    segment of physical screen memory
  2277.  31h 16 BYTEs    eight cursor positions
  2278.  41h    WORD    current cursor shape
  2279.  43h    BYTE    active display page
  2280.  44h    WORD    CRT controller I/O port base
  2281.  46h  2 BYTEs    ???
  2282.  48h    WORD    foreground task flag
  2283.  4Ah  6 BYTEs    ???
  2284.  50h    WORD    saved video segment (see AH=0Bh,AH=0Ch)
  2285.  52h    DWORD    old INT 22
  2286.  56h    DWORD    old INT 23
  2287.  5Ah    DWORD    old INT 24
  2288.  5Eh    WORD    top of memory for task
  2289.  60h  4 BYTEs    ???
  2290.  64h    WORD    DTA segment (see INT 21/AH=1Ah)
  2291.  66h    WORD    DTA offset
  2292.  68h  4 BYTEs    ???
  2293.  6Ch    BYTE    current ANSI.SYS attribute
  2294.  6Dh    BYTE    current ANSI.SYS column
  2295.  6Eh    BYTE    current ANSI.SYS row
  2296.  6Fh    BYTE    current ANSI.SYS display state
  2297.  70h    BYTE    maximum ANSI.SYS columns
  2298.  71h    BYTE    current ANSI.SYS page
  2299.  72h    WORD    saved ANSI.SYS cursor position
  2300.  74h    BYTE    ANSI.SYS parameter buffer index
  2301.  75h    BYTE    current ANSI.SYS screen mode
  2302.  76h    BYTE    ANSI.SYS wrap flag
  2303.  77h  6 BYTEs    ANSI.SYS parameter buffer
  2304.  7Dh    BYTE    ANSI.SYS keyboard DSR state
  2305.  7Eh  7 BYTEs    ANSI.SYS keyboard DSR buffer
  2306.  85h  3 BYTEs    ???
  2307.  88h 16 BYTEs    request header for DOS driver calls
  2308.  98h 14 BYTEs    ???
  2309.  A6h    WORD    segment of EMS map if EMS task
  2310.  A8h    WORD    flag: task makes EMS calls
  2311.  AAh    WORD    EMS handle for task
  2312.  ACh    WORD    keyboard shift state
  2313.  AEh 12 BYTEs    ???
  2314.  BAh    WORD    TCB of parent if child task
  2315.  BCh    WORD    termination code
  2316.  BEh    WORD    COM port number
  2317.  C0h  4 BYTEs    ???
  2318.  C4h    WORD    current IRQ number
  2319.  C6h  2 BYTEs    ???
  2320.  C8h    WORD    miscellaneous flag word
  2321.  CAh  2 BYTEs    ???
  2322.  CCh    DWORD    old INT 10
  2323.  D0h    WORD    EMS alternate map set number
  2324.  D2h 414 BYTEs    DOS current disk and directory context (optional)
  2325. ----------1514-------------------------------
  2326. INT 15 - VMiX - CLEAR WINDOW
  2327.     AH = 14h
  2328.     STACK:    WORD    top left corner of window
  2329.         WORD    bottom right corner of window
  2330. Return: AX = status
  2331. SeeAlso: AH=15h"VMiX"
  2332. ----------1514-------------------------------
  2333. INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
  2334.     AH = 14h
  2335. Return: AX = current state
  2336.         0000h MultiDOS Plus command prompt is background task
  2337.         0001h command prompt is foreground task
  2338. SeeAlso: AH=0Bh"MultiDOS"
  2339. ----------1515-------------------------------
  2340. INT 15 - VMiX - SET BANNER WINDOW MESSAGE
  2341.     AH = 15h
  2342.     STACK:    DWORD    pointer to ASCIZ banner    message
  2343. Return: AX = status
  2344. SeeAlso: AH=14h"VMiX"
  2345. ----------1515-------------------------------
  2346. INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
  2347.     AH = 15h
  2348. Return: BX:AX -> system block (see below)
  2349. SeeAlso: AH=13h"MultiDOS"
  2350.  
  2351. Format of MultiDOS Plus 4.0 system block:
  2352. Offset    Size    Description
  2353.  00h    WORD    segment of system control block
  2354.  02h    WORD    redirection flag set by /NOREDIRECT
  2355.  04h    WORD    no-INT 10 flag set by /NO10
  2356.  06h    DWORD    old INT 10
  2357.  0Ah    DWORD    new INT 10
  2358.  0Eh    DWORD    pointer to WORD with current TCB offset (see AH=13h)
  2359.  12h    DWORD    pointer to WORD with idle task TCB offset
  2360.  16h    DWORD    pointer to WORD with foreground TCB offset
  2361.  1Ah    DWORD    pointer to WORD with MultiDOS TCB offset
  2362.  1Eh    WORD    Task Control Block size
  2363.  20h    WORD    number of TCBs
  2364.  22h    WORD    flag: EMS present
  2365.  24h    WORD    EMS page frame base segment
  2366.  26h    WORD    16K pages in EMS page frame
  2367.  28h    WORD    base segment for conventional memory tasks
  2368.  2Ah    WORD    conventional memory size in paragraphs
  2369.  2Ch    DWORD    pointer to list of queue pointers
  2370. ----------1516-------------------------------
  2371. INT 15 - VMiX - SET ROOT WINDOW SIZE AND HOME CURSOR
  2372.     AH = 16h
  2373.     STACK:    DWORD    pointer to I/O Request Packet
  2374.         WORD    top left corner of window
  2375.         WORD    bottom right corner of window
  2376. Return: AX = status
  2377. SeeAlso: AH=17h"VMiX"
  2378. ----------1516-------------------------------
  2379. INT 15 - MultiDOS Plus - INITIALIZATION
  2380.     AH = 16h
  2381. Note:    used internally during initialization; any other calls will cause
  2382.       unpredicatable results
  2383. ----------1517-------------------------------
  2384. INT 15 - VMiX - GET CONSOLE WINDOW COLORS
  2385.     AH = 17h
  2386. Return: AH = foreground color
  2387.     AL = background color
  2388. SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
  2389. ----------1517-------------------------------
  2390. INT 15 - MultiDOS Plus - MAP IRQ
  2391.     AH = 17h
  2392.     AL = IRQ to map (01h-0Fh)
  2393.     BX = offset of task control block (see AH=13h) to associate with IRQ
  2394. Return: AX = status
  2395.         0000h successful
  2396.         other invalid IRQ
  2397. Note:    the EMS map of the specified TCB is associated with the given interrupt
  2398. SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
  2399. ----------1518-------------------------------
  2400. INT 15 - VMiX - SET CONSOLE COLORS
  2401.     AH = 18h
  2402.     STACK:    WORD    new background/foreground colors
  2403. Return: AX = color
  2404. SeeAlso: AH=17h"VMiX"
  2405. ----------1518-------------------------------
  2406. INT 15 - MultiDOS Plus - UNMAP IRQ
  2407.     AH = 18h
  2408.     AL = IRQ to unmap (01h-0Fh)
  2409. Return: AX = status
  2410.         0000h successful
  2411.         0001h invalid IRQ
  2412. Note:    results are unpredictable if the IRQ has not been mapped
  2413. SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
  2414. ----------1519-------------------------------
  2415. INT 15 - VMiX v2+ - ???
  2416.     AH = 19h
  2417.     STACK: WORD ???
  2418. Return: ???
  2419. ----------1519-------------------------------
  2420. INT 15 - MultiDOS Plus - UNMAP ALL IRQs
  2421.     AH = 19h
  2422. Return: AX destroyed
  2423. Note:    for MultiDOS internal use only
  2424. SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
  2425. ----------151A-------------------------------
  2426. INT 15 - VMiX v2+ - ???
  2427.     AH = 1Ah
  2428.     STACK: 3 WORDs ???
  2429. Return: ???
  2430. ----------151A-------------------------------
  2431. INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
  2432.     AH = 1Ah
  2433.     DS:SI -> 8-byte name
  2434. Return: AL = status
  2435.         00h successful
  2436.         AH = semaphore number (20h-3Fh)
  2437.         04h out of string space
  2438. Notes:    all eight bytes of the name are significant
  2439.     if the name does not already exist, it is added to the name table and
  2440.       associated with a free semaphore number
  2441.     names cannot be destroyed
  2442. SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  2443. ----------151B-------------------------------
  2444. INT 15 - VMiX v2+ - ???
  2445.     AH = 1Bh
  2446.     STACK: 5 WORDs ???
  2447. Return: ???
  2448. ----------151B-------------------------------
  2449. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
  2450.     AH = 1Bh
  2451.     DS:SI -> 8-byte name
  2452. Return: AH = status
  2453.         00h successful
  2454.         02h invalid semaphore number
  2455.         03h caller already owns semaphore
  2456.         04h out of string space
  2457. Notes:    (see notes for AH=01h"MultiDOS")
  2458.     equivalent to AH=1Ah followed by AH=01h
  2459. SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  2460. ----------151C-------------------------------
  2461. INT 15 - VMiX v2+ - ???
  2462.     AH = 1Ch
  2463.     STACK: 5 WORDs ???
  2464. Return: ???
  2465. ----------151C-------------------------------
  2466. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
  2467.     AH = 1Ch
  2468.     DS:SI -> 8-byte name
  2469. Return: AH = status
  2470.         00h successful
  2471.         01h not semaphore owner
  2472.         02h invalid semaphore number
  2473.         04h out of string space
  2474. Notes:    (see notes for AH=02h"MultiDOS")
  2475.     equivalent to AH=1Ah followed by AH=02h
  2476. SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
  2477. ----------151D-------------------------------
  2478. INT 15 - VMiX v2+ - ???
  2479.     AH = 1Dh
  2480.     ???
  2481. Return: ???
  2482. ----------151D-------------------------------
  2483. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
  2484.     AH = 1Dh
  2485.     DS:SI -> 8-byte name
  2486. Return; AH = status
  2487.         00h semaphore not in use
  2488.         01h semaphore owned by another task
  2489.         02h invalid semaphore number
  2490.         03h caller owns semaphore
  2491.         04h out of string space
  2492. Notes:    (see notes for AH=10h"MultiDOS")
  2493.     equivalent to AH=1Ah followed by AH=10h
  2494. SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
  2495. ----------151E-------------------------------
  2496. INT 15 - VMiX v2+ - ???
  2497.     AH = 1Eh
  2498.     STACK: WORD ???
  2499. Return: ???
  2500. ----------151E00-----------------------------
  2501. INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
  2502.     AX = 1E00h
  2503.     DX = event/trigger number (00h-3Fh)
  2504. Return: AH = status
  2505.         00h successful
  2506. SeeAlso: AX=1E01h,AX=1E02h
  2507. ----------151E01-----------------------------
  2508. INT 15 - MultiDOS Plus - TRIGGER EVENT
  2509.     AX = 1E01h
  2510.     DX = event/trigger number (00h-3Fh)
  2511. Return: AH = status
  2512.         00h successful
  2513.         01h invalid event/trigger number
  2514. Notes:    schedules any task waiting for event; if no task is waiting, the event
  2515.       counter is incremented (and will roll over if it was 65535)
  2516.     may be invoked by interrupt handler
  2517. SeeAlso: AX=1E00h,AX=1E02h
  2518. ----------151E02-----------------------------
  2519. INT 15 - MultiDOS Plus - WAIT FOR EVENT
  2520.     AX = 1E02h
  2521.     DX = event/trigger number (00h-3Fh)
  2522. Return: AH = status
  2523.         00h successful
  2524.         01h invalid event/trigger number
  2525. Note:    if the event counter is zero, the task is suspended until the event is
  2526.       triggered with AX=1E01h; else, the counter is decremented and the
  2527.       call returns immediately
  2528. SeeAlso: AX=1E00h,AX=1E01h
  2529. ----------151F-------------------------------
  2530. INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS
  2531.     AH = 1Fh
  2532. Return: BX = first segment of conventional memory
  2533.     DX = first segment of EMS swap frame into which MultiDOS will load
  2534.         programs
  2535. ----------1520-------------------------------
  2536. INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED
  2537.     AH = 20h
  2538. Return: AX = current state
  2539.         0000h multitasking enabled
  2540.         other TCB of task that disabled multitasking
  2541. SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
  2542. ----------152000-----------------------------
  2543. INT 15 - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG
  2544.     AX = 2000h
  2545. SeeAlso: AX=2001h
  2546. ----------152001-----------------------------
  2547. INT 15 - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG
  2548.     AX = 2001h
  2549.     ES:BX -> byte which is to be incremented while in a DOS call
  2550. SeeAlso: AX=2000h
  2551. ----------152010-----------------------------
  2552. INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
  2553.     AX = 2010h
  2554.     ???
  2555. Return: ???
  2556. SeeAlso: AX=2011h
  2557. ----------152011-----------------------------
  2558. INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
  2559.     AX = 2011h
  2560.     ???
  2561. Return: ???
  2562. SeeAlso: AX=2010h
  2563. ----------1521-------------------------------
  2564. INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
  2565.     AH = 21h
  2566.     AL = subfunction
  2567.         00h read POST log
  2568.         01h write POST log
  2569.         BH = device ID
  2570.         BL = error code
  2571. Return: CF set on error
  2572.     AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
  2573.     if function 00h:
  2574.        BX = number of error codes stored
  2575.        ES:DI -> error log
  2576. Note:    the log is a series of words, the first byte of which identifies the
  2577.       error code and the second the device.
  2578. ----------152400-----------------------------
  2579. INT 15 - Qualitas 386MAX v6.01 - TURN ON ???
  2580.     AX = 2400h
  2581. Return: CF clear
  2582.     AH = 00h
  2583. ----------152401-----------------------------
  2584. INT 15 - Qualitas 386MAX v6.01 - TURN OFF ???
  2585.     AX = 2401h
  2586. Return: CF clear
  2587.     AH = 00h
  2588. ----------152402-----------------------------
  2589. INT 15 - Qualitas 386MAX v6.01 - GET STATE OF ???
  2590.     AX = 2402h
  2591. Return: CF clear
  2592.     AH = 00h
  2593.     AL = current state (00h off, 01h on)
  2594. ----------152403-----------------------------
  2595. INT 15 - Qualitas 386MAX v6.01 - GET ???
  2596.     AX = 2403h
  2597.     ???
  2598. Return: CF clear
  2599.     AH = 00h
  2600.     BX = bit flags???
  2601.         bit 0: ???
  2602.         bit 1: ???
  2603. Note:    reportedly also used by some PS/2 models
  2604. ----------1540-------------------------------
  2605. INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
  2606.     AH = 40h
  2607.     AL = subfunction
  2608.         00h get system profile in CX and BX
  2609.         01h set system profile from CX and BX
  2610.         02h get internal modem profile in BX
  2611.         03h set internal modem profile from BX
  2612. ----------154000-----------------------------
  2613. INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
  2614.     AX = 4000h
  2615. Return: AX = 4000h
  2616.     CL = 00h timeout disabled
  2617.        else timeout in minutes
  2618. SeeAlso: AX=4001h,AX=4600h
  2619. ----------154001CL00-------------------------
  2620. INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
  2621.     AX = 4001h
  2622.     CL = 00h timeout disabled
  2623.        else     timeout in minutes
  2624. Return: AL = 00h timeout modified
  2625.          01h timeout cannot be modified
  2626.          40h timeout cannot be modified
  2627.     CL = 00h timeout disabled
  2628.        else timeout in minutes
  2629. SeeAlso: AX=4000h,AX=4601h
  2630. ----------1541-------------------------------
  2631. INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE)
  2632.     AH = 41h
  2633.     AL = condition type
  2634.         bits 0-2: condition to wait for
  2635.              0 any external event
  2636.              1 compare and return if equal
  2637.              2 compare and return if not equal
  2638.              3 test and return if not zero
  2639.              4 test and return if zero
  2640.         bit 3:    reserved
  2641.         bit 4:    1=port address, 0=user byte
  2642.         bits 5-7: reserved
  2643.     BH = condition compare or mask value
  2644.     BL = timeout value times 55 milliseconds
  2645.         00h means no timeout
  2646.     DX = I/O port address if AL bit 4 set
  2647.     ES:DI -> user byte if AL bit 4 clear
  2648. ----------1542-------------------------------
  2649. INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE)
  2650.     AH = 42h
  2651.     AL = 00h to use system profile
  2652.          01h to force suspend regardless of system profile
  2653. SeeAlso: AH=44h
  2654. ----------154280-----------------------------
  2655. INT 15 - Compaq SLT/286 - ENTER STANDBY
  2656.     AX = 4280h
  2657. Return: AH = 42h
  2658.     CF clear if successful
  2659.     CF set if unable to enter standby
  2660. SeeAlso: AX=4600h,AX=5307h/BX=0001h/CX=0001h
  2661. ----------1543-------------------------------
  2662. INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
  2663.     AH = 43h
  2664. Return: AL = status bits
  2665.         bit 0: LCD detached
  2666.         bit 1: reserved
  2667.         bit 2: RS232/parallel adapter powered on
  2668.         bit 3: internal modem powered on
  2669.         bit 4: power activated by alarm
  2670.         bit 5: standby power lost
  2671.         bit 6: external power in use
  2672.         bit 7: power low
  2673. ----------1544-------------------------------
  2674. INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
  2675.     AH = 44h
  2676.     AL = 00h to power off
  2677.          01h to power on
  2678. SeeAlso: AH=42h
  2679. ----------154600-----------------------------
  2680. INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
  2681.     AX = 4600h
  2682. Return: AH = modem configuration information
  2683.         bit 0 powerup state
  2684.             0 off
  2685.             1 on
  2686.         1 modem installed
  2687.         2 IRQ line assignment
  2688.             0 IRQ 4
  2689.             1 IRQ 3
  2690.         3 COM port assignment
  2691.             0 = COM 2
  2692.             1 = COM 1
  2693.         4 modem state
  2694.             0 not assigned
  2695.             1 assigned
  2696.         5 modem is on
  2697.     AL = power conservation status information
  2698.         bit 0  power source (0 internal, 1 external)
  2699.            1-2 low battery state
  2700.             00 no low battery condition
  2701.             01 low battery 1
  2702.             10 reserved
  2703.             11 low battery 2
  2704.            3-4 power conservation mode
  2705.             00 automatic
  2706.             01 on
  2707.             10 off
  2708.             11 reserved
  2709.     BH = default system inactivity timeout (1-21 minutes)
  2710.     BL = current system inactivity timeout (1-21 minutes)
  2711.     CH = default video display inactivity timeout (1-63 minutes)
  2712.     CL = current video display inactivity timeout (1-63 minutes)        
  2713.     DH = default fixed disk drive inactivity timeout (1-21 minutes)
  2714.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  2715. SeeAlso: AX=4280h,AX=4601h,INT 77
  2716. ----------154601-----------------------------
  2717. INT 15 - Compaq SLT/286 - Modify Power Conservation/Modem Configuration
  2718.     AX = 4601h
  2719.     BL = system inactivity timeout (1-21 minutes)
  2720.        = FFh do not change
  2721.     CL = video display inactivity timeout (1-63 minutes)        
  2722.        = FFh do not change
  2723.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  2724.        = FFh do not change
  2725.     DH = 00h turn modem OFF
  2726.        = 01h turn modem ON
  2727.        = FFh do not change modem state
  2728. Return: CF clear if successful
  2729.         AH = 00h
  2730.         BL = current system inactivity timeout (1-21 minutes)
  2731.         CL = current video display inactivity timeout (1-63 minutes)    
  2732.         DL = current fixed disk drive inactivity timeout (1-21 minutes)
  2733.         DH = FFh modem state unchanged
  2734.            = 00h modem turned OFF
  2735.            = 01h modem turned ON
  2736.     CF set on error
  2737.         AH = 01h input is out of range
  2738.            = 02h - No modem present
  2739. SeeAlso: AX=4600h,INT 77
  2740. ----------154DD4-----------------------------
  2741. INT 15 - HP 95LX - INSTALLATION CHECK
  2742.     AX = 4DD4h
  2743. Return: BX = 4850h ("HP") if HP 95LX
  2744.         CX = ??? (0101h)
  2745.         DL = ??? (00h)
  2746. SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h
  2747. SeeAlso: INT 61"HP 95LX"
  2748. ----------154E-------------------------------
  2749. INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP
  2750.     AH = 4Eh
  2751.     AL = light sleep
  2752.         00h disabled
  2753.         01h enabled
  2754. Note:    when light sleep is disabled, the system will continue running at full
  2755.       speed; when enabled, it may automatically slow to conserve batteries
  2756. SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h
  2757. ----------154F-------------------------------
  2758. INT 15 - OS HOOK - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
  2759.     AH = 4Fh
  2760.     AL = hardware scan code
  2761.     CF set
  2762. Return: CF set
  2763.        AL = hardware scan code
  2764.     CF clear
  2765.        scan code should be ignored
  2766. Note:    called by INT 9 handler to translate scan codes; the INT 09 code does
  2767.       not examine the scan code it reads from the keyboard until after
  2768.       this function returns.  This permits software to rearrange the
  2769.       keyboard; for example, swapping the CapsLock and Control keys, or
  2770.       turning the right Shift key into Enter.
  2771. SeeAlso: INT 09,INT 15/AH=C0h
  2772. ----------155300BX0000-----------------------
  2773. INT 15 - Advanced Power Management Specification - INSTALLATION CHECK
  2774.     AX = 5300h
  2775.     BX = 0000h (device ID of system BIOS)
  2776. Return: CF clear if successful
  2777.         AH = major version (BCD)
  2778.         AL = minor version (BCD)
  2779.         BX = 504Dh ("PM")
  2780.         CX = flags
  2781.             bit 0: 16-bit protected mode interface supported
  2782.         bit 1: 32-bit protected mode interface supported
  2783.         bit 2: CPU idle call reduces processor speed
  2784.         bit 3: BIOS power management disabled
  2785.         bits 4-7 reserved
  2786.     CF set on error
  2787.         AH = error code (86h) (see below)
  2788.  
  2789. Values for error code:
  2790.  01h    power management functionality disabled
  2791.  02h    interface connection already in effect
  2792.  03h    interface not connected
  2793.  04h    real-mode interface not connected
  2794.  05h    16-bit protected-mode interface already connected
  2795.  06h    16-bit protected-mode interface not supported
  2796.  07h    32-bit protected-mode interface already connected
  2797.  08h    32-bit protected-mode interface not supported
  2798.  09h    unrecognized device ID
  2799.  0Ah    invalid parameter value in CX
  2800.  0Bh-1Fh reserved for other interface and general errors
  2801.  20h-3Fh reserved for CPU errors
  2802.  40h-5Fh reserved for device errors
  2803.  60h    can't enter requested state
  2804.  61h-7Fh reserved for other system errors
  2805.  80h    no power management events pending
  2806.  81h-85h reserved for other power management event errors
  2807.  86h    APM not present
  2808.  87h-9Fh reserved for other power management event errors
  2809. ----------155301BX0000-----------------------
  2810. INT 15 - Advanced Power Management Specification - CONNECT REAL-MODE INTERFACE
  2811.     AX = 5301h
  2812.     BX = 0000h (device ID of system BIOS)
  2813. Return: CF clear if successful
  2814.     CF set on error
  2815.         AH = error code (02h,09h) (see AX=5300h)
  2816. SeeAlso: AX=5302h,AX=5303h,AX=5304h
  2817. ----------155302BX0000-----------------------
  2818. INT 15 R - Advanced Power Management Spec - CONNECT 16-BIT PROTMODE INTERFACE
  2819.     AX = 5302h
  2820.     BX = 0000h (device ID of system BIOS)
  2821. Return: CF clear if successful
  2822.         AX = real-mode segment base address of protected-mode 16-bit code
  2823.             segment
  2824.         BX = offset of entry point
  2825.         CX = real-mode segment base address of protected-mode 16-bit data
  2826.             segment
  2827.     CF set on error
  2828.         AH = error code (05h,06h,09h) (see AX=5300h)
  2829. Notes:    the caller must initialize two consecutive descriptors with the
  2830.       returned segment base addresses; these descriptors must be valid
  2831.       whenever the protected-mode interface is called, and will have
  2832.       their limits arbitrarily set to 64K.
  2833.     the protected mode interface is invoked by making a far call with the
  2834.       same register values as for INT 15; it must be invoked while CPL=0,
  2835.       the code segment descriptor must have a DPL of 0, the stack must be
  2836.       in a 16-bit segment and have enough room for BIOS use and possible
  2837.       interrupts, and the current I/O permission bit map must allow access
  2838.       to the I/O ports used for power management.
  2839.     functions 00h-03h are not available from protected mode
  2840. SeeAlso: AX=5301h,AX=5303h,AX=5304h
  2841. ----------155303BX0000-----------------------
  2842. INT 15 - Advanced Power Management Spec - CONNECT 32-BIT PROTMODE INTERFACE
  2843.     AX = 5303h
  2844.     BX = 0000h (device ID of system BIOS)
  2845. Return: CF clear if successful
  2846.         AX = real-mode segment base address of protected-mode 32-bit code
  2847.             segment
  2848.         EBX = offset of entry point
  2849.         CX = real-mode segment base address of protected-mode 16-bit code
  2850.             segment
  2851.         DX = real-mode segment base address of protected-mode 16-bit data
  2852.             segment
  2853.     CF set on error
  2854.         AH = error code (07h,08h,09h) (see AX=5300h)
  2855. Notes:    the caller must initialize three consecutive descriptors with the
  2856.       returned segment base addresses for 32-bit code, 16-bit code, and
  2857.       16-bit data, respectively; these descriptors must be valid whenever
  2858.       the protected-mode interface is called, and will have their limits
  2859.       arbitrarily set to 64K.
  2860.     the protected mode interface is invoked by making a far call to the
  2861.       32-bit code segment with the same register values as for INT 15; it
  2862.       must be invoked while CPL=0, the code segment descriptor must have a
  2863.       DPL of 0, the stack must be in a 32-bit segment and have enough room
  2864.       for BIOS use and possible interrupts, and the current I/O permission
  2865.       bit map must allow access to the I/O ports used for power management.
  2866.     functions 00h-03h are not available from protected mode
  2867. SeeAlso: AX=5301h,AX=5302h,AX=5304h
  2868. ----------155304BX0000-----------------------
  2869. INT 15 - Advanced Power Management Specification - DISCONNECT INTERFACE
  2870.     AX = 5304h
  2871.     BX = 0000h (device ID of system BIOS)
  2872. Return: CF clear if successful
  2873.     CF set on error
  2874.         AH = error code (03h,09h) (see AX=5300h)
  2875. SeeAlso: AX=5301h,AX=5302h,AX=5303h
  2876. ----------155305-----------------------------
  2877. INT 15 - Advanced Power Management Specification - CPU IDLE
  2878.     AX = 5305h
  2879. Return: after system leaves idle state
  2880.     CF clear
  2881. Notes:    call when the system is idle and should be suspended until the next
  2882.       system event or interrupt
  2883.     should not be called from within a hardware interrupt handler to avoid
  2884.       reentrance problems
  2885.     if an interrupt causes the system to resume normal processing, the
  2886.       interrupt may or may not have been handled when the BIOS returns
  2887.       from this call; thus, the caller should allow interrupts on return
  2888.     interrupt handlers may not retain control if the BIOS allows
  2889.       interrupts while in idle mode even if they are able to determine
  2890.       that they were called from idle mode
  2891.     the caller should issue this call continuously in a loop until it needs
  2892.       to perform some processing of its own
  2893. SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h
  2894. ----------155306-----------------------------
  2895. INT 15 - Advanced Power Management Specification - CPU BUSY
  2896.     AX = 5306h
  2897. Return: CF clear
  2898. Notes:    called to ensure that the system runs at full speed even on systems
  2899.       where the BIOS is unable to recognize increased activity (especially
  2900.       if interrupts are hooked by other programs and not chained to the
  2901.       BIOS)
  2902.     this call may be made even when the system is already running at full
  2903.       speed, but it will create unnecessary overhead
  2904.     should not be called from within a hardware interrupt handler to avoid
  2905.       reentrance problems
  2906. SeeAlso: AX=5305h
  2907. ----------155307-----------------------------
  2908. INT 15 - Advanced Power Management Specification - SET POWER STATE
  2909.     AX = 5307h
  2910.     BX = device ID (see below)
  2911.     CX = system state ID
  2912.         0000h ready (not supported for device ID 0001h)
  2913.         0001h stand-by
  2914.         0002h suspend
  2915.         0003h off (not supported for device ID 0001h)
  2916.         0004h-FFFFh reserved
  2917. Return: CF clear if successful
  2918.     CF set on error
  2919.         AH = error code (01h,09h,0Ah,60h) (see AX=5300h)
  2920. Note:    should not be called from within a hardware interrupt handler to avoid
  2921.       reentrance problems
  2922.  
  2923. Values for device IDs:
  2924.  0000h    system BIOS
  2925.  0001h    all devices for which the system BIOS manages power
  2926.  01xxh    display (01FFh for all attached display devices)
  2927.  02xxh    secondary storage (02FFh for all attached secondary storage devices)
  2928.  03xxh    parallel ports (03FFh for all attached parallel ports)
  2929.  04xxh    serial ports (04FFh for all attached serial ports)
  2930.  0500h-FFFFh reserved
  2931. ----------155307BX0001-----------------------
  2932. INT 15 - Advanced Power Management Specification - SYSTEM STAND-BY
  2933.     AX = 5307h
  2934.     BX = 0001h
  2935.     CX = 0001h
  2936. Return: CF clear
  2937. Notes:    puts the entire system into stand-by mode; normally called in response
  2938.       to a System Stand-by Request notification after any necessary
  2939.       processing, but may also be invoked at the caller's discretion
  2940.     should not be called from within a hardware interrupt handler to avoid
  2941.       reentrance problems
  2942.     the stand-by state is typically exited on an interrupt
  2943. SeeAlso: AX=4280h,AX=5307h/BX=0001h/CX=0002h,AX=530Bh
  2944. ----------155307BX0001-----------------------
  2945. INT 15 - Advanced Power Management Specification - SUSPEND SYSTEM
  2946.     AX = 5307h
  2947.     BX = 0001h
  2948.     CX = 0002h
  2949. Return: after system is resumed
  2950.     CF clear
  2951. Notes:    puts the entire system into a low-power suspended state; normally
  2952.       called in response to a Suspend System Request notification after
  2953.       any necessary processing, but may also be invoked at the caller's
  2954.       discretion
  2955.     should not be called from within a hardware interrupt handler to avoid
  2956.       reentrance problems
  2957.     the caller may need to update its date and time values because the
  2958.       system could have been suspended for a long period of time
  2959. SeeAlso: AX=5307h/BX=0001h/CX=0001h,AX=530Bh
  2960. ----------155308BXFFFF-----------------------
  2961. INT 15 - Advanced Power Management Spec - ENABLE/DISABLE POWER MANAGEMENT
  2962.     AX = 5308h
  2963.     BX = FFFFh
  2964.     CX = new state
  2965.         0000h disabled
  2966.         0001h enabled
  2967. Return: CF clear if successful
  2968.     CF set on error
  2969.         AH = error code (01h,09h,0Ah) (see AX=5300h)
  2970. Notes:    when power management is disabled, the system BIOS will not
  2971.       automatically power down devices, enter stand-by or suspended mode,
  2972.       or perform any power-saving actions in response to AX=5305h calls
  2973.     should not be called from within a hardware interrupt handler to avoid
  2974.       reentrance problems
  2975. SeeAlso: AX=5309h
  2976. ----------155309BXFFFF-----------------------
  2977. INT 15 - Advanced Power Management Specification - RESTORE POWER-ON DEFAULTS
  2978.     AX = 5309h
  2979.     BX = FFFFh
  2980. Return: CF clear if successful
  2981.     CF set on error
  2982.         AH = error code (09h) (see AX=5300h)
  2983. Note:    should not be called from within a hardware interrupt handler to avoid
  2984.       reentrance problems
  2985. SeeAlso: AX=5308h
  2986. ----------15530ABX0001-----------------------
  2987. INT 15 - Advanced Power Management Specification - GET POWER STATUS
  2988.     AX = 530Ah
  2989.     BX = 0001h
  2990. Return: CF clear if successful
  2991.         BH = AC line status
  2992.             00h off-line
  2993.         01h on-line
  2994.         FFh unknown
  2995.         other reserved
  2996.         BL = battery status
  2997.             00h high
  2998.         01h low
  2999.         02h critical
  3000.         03h charging
  3001.         FFh unknown
  3002.         other reserved
  3003.         CL = remaining battery life
  3004.             00h-64h (0-100) percentage of full charge
  3005.         FFh unknown
  3006.     CF set on error
  3007.         AH = error code (09h) (see AX=5300h)
  3008. Note:    should not be called from within a hardware interrupt handler to avoid
  3009.       reentrance problems
  3010. ----------15530B-----------------------------
  3011. INT 15 - Advanced Power Management Specification - GET POWER MANAGEMENT EVENT
  3012.     AX = 530Bh
  3013. Return: CF clear if successful
  3014.         BX = event code
  3015.             0001h system stand-by request
  3016.         0002h system suspend request
  3017.         0003h normal resume system notification
  3018.         0004h critical resume system notification
  3019.         0005h battery low notification
  3020.     CF set on error
  3021.         AH = error code (03h,80h) (see AX=5300h)
  3022. Notes:    although power management events are often asynchronous, notification
  3023.       will not be made until polled via this call to permit software to
  3024.       only receive event notification when it is prepared to process
  3025.       power management events; since these events are not very time-
  3026.       critical, it should be sufficient to poll once or twice per second
  3027.     the critical resume notification is made after the system resumes
  3028.       from an emergency suspension; normally, the system BIOS only notifies
  3029.       its partner that it wishes to suspend and relies on the partner to
  3030.       actually request the suspension, but no notification is made on an
  3031.       emergency suspension
  3032.     should not be called from within a hardware interrupt handler to avoid
  3033.       reentrance problems
  3034. SeeAlso: AX=5307h,AX=5307h/BX=0001h/CX=0001h,AX=5307h/BX=0001h/CX=0002h
  3035. ----------155400-----------------------------
  3036. INT 15 - Omniview Multitasker - INSTALLATION NOTIFICATION
  3037.     AX = 5400h
  3038.     ES:BX -> device information tables
  3039.     DI:DX -> dispatcher entry point
  3040. Note:    called by OmniView to notify programs loaded before OmniView of state
  3041.       changes inside OmniView
  3042. SeeAlso: AX=5407h
  3043. ----------155401-----------------------------
  3044. INT 15 - Omniview Multitasker - PROCESS CREATION
  3045.     AX = 5401h
  3046.     ES:BX = process handle
  3047. Note:    called by OmniView to notify programs loaded before OmniView of state
  3048.       changes inside OmniView
  3049. SeeAlso: AX=5402h
  3050. ----------155402-----------------------------
  3051. INT 15 - Omniview Multitasker - PROCESS DESTRUCTION
  3052.     AX = 5402h
  3053.     ES:DX = process handle
  3054. Note:    called by OmniView to notify programs loaded before OmniView of state
  3055.       changes inside OmniView
  3056. SeeAlso: AX=5401h
  3057. ----------155403-----------------------------
  3058. INT 15 - Omniview Multitasker - SAVE
  3059.     AX = 5403h
  3060.     ES:DX = process swapping out
  3061. Note:    called by OmniView to notify programs loaded before OmniView of state
  3062.       changes inside OmniView
  3063. SeeAlso: AX=5404h
  3064. ----------155404-----------------------------
  3065. INT 15 - Omniview Multitasker - RESTORE
  3066.     AX = 5404h
  3067.     ES:DX = process swapping in
  3068. Note:    called by OmniView to notify programs loaded before OmniView of state
  3069.       changes inside OmniView
  3070. SeeAlso: AX=5403h
  3071. ----------155405-----------------------------
  3072. INT 15 - Omniview Multitasker - SWITCHING TO BACKGROUND
  3073.     AX = 5405h
  3074.     ES:DX = process swapping in
  3075. Note:    called by OmniView to notify programs loaded before OmniView of state
  3076.       changes inside OmniView
  3077. SeeAlso: AX=5406h
  3078. ----------155406-----------------------------
  3079. INT 15 - Omniview Multitasker - SWITCHING TO FOREGROUND
  3080.     AX = 5406h
  3081.     ES:DX = process swapping in
  3082. Note:    called by OmniView to notify programs loaded before OmniView of state
  3083.       changes inside OmniView
  3084. SeeAlso: AX=5405h
  3085. ----------155407-----------------------------
  3086. INT 15 - Omniview Multitasker - EXIT NOTIFICATION
  3087.     AX = 5407h
  3088. Note:    called by OmniView to notify programs loaded before OmniView of state
  3089.       changes inside OmniView
  3090. SeeAlso: AX=5400h
  3091. ----------1580-------------------------------
  3092. INT 15 - OS HOOK - DEVICE OPEN (AT,XT286,PS)
  3093.     AH = 80h
  3094.     BX = device ID
  3095.     CX = process ID
  3096.     CF clear
  3097. Return: CF clear if successful
  3098.         AH = 00h
  3099.     CF set on error
  3100.         AH = status
  3101.         80h invalid command (PC,PCjr)
  3102.         86h function not supported (XT)
  3103. Note:    this function should be hooked by a multitasker which wishes to keep
  3104.       track of device ownership; the default BIOS handler merely returns
  3105.       successfully
  3106. SeeAlso: AH=81h,AH=82h
  3107. ----------1581-------------------------------
  3108. INT 15 - OS HOOK - DEVICE CLOSE
  3109.     AH = 81h
  3110.     BX = device ID
  3111.     CX = process ID
  3112.     CF clear
  3113. Return: CF clear if successful
  3114.         AH = 00h
  3115.     CF set on error
  3116.         AH = status (see AH=80h)
  3117. Note:    this function should be hooked by a multitasker which wishes to keep
  3118.       track of device ownership; the default BIOS handler merely returns
  3119.       successfully
  3120. SeeAlso: AH=80h,AH=82h
  3121. ----------1582-------------------------------
  3122. INT 15 - OS HOOK - PROGRAM TERMINATION
  3123.     AH = 82h
  3124.     BX = process ID
  3125.     CF clear
  3126. Return: CF clear if successful
  3127.         AH = 00h
  3128.     CF set on error
  3129.         AH = status (see AH=80h)
  3130. Notes:    closes all devices opened by the given process ID with function 80h
  3131.     this function should be hooked by a multitasker which wishes to keep
  3132.       track of device ownership; the default BIOS handler merely returns
  3133.       successfully
  3134. SeeAlso: AH=80h,AH=81h
  3135. ----------1583-------------------------------
  3136. INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
  3137.     AH = 83h
  3138.     AL = subfunction
  3139.         00h set interval
  3140.         CX:DX = microseconds to delay
  3141.         ES:BX -> byte whose high bit is to be set at end of interval
  3142.         01h cancel wait interval
  3143. Return: CF set on error or function already busy
  3144.         AH = status
  3145.         80h invalid command (PC,PCjr)
  3146.         86h function not supported (XT and later)
  3147.     CF clear if successful
  3148. Note:    the resolution of the wait period is 977 microseconds on most systems
  3149.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  3150.       real-time clock chip which is available on INT 70
  3151. SeeAlso: AH=86h,INT 70
  3152. ----------1584-------------------------------
  3153. INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)
  3154.     AH = 84h
  3155.     DX = subfunction
  3156.         0000h read joystick switches
  3157.         Return: AL bits 7-4 = switch settings
  3158.         0001h read positions of joysticks
  3159.         Return: AX = X position of joystick A
  3160.             BX = Y position of joystick A
  3161.             CX = X position of joystick B
  3162.             DX = Y position of joystick B
  3163. Return: CF set on error
  3164.         AH = status
  3165.         80h invalid command (PC,PCjr)
  3166.         86h function not supported (other)
  3167.     CF clear if successful
  3168. Notes:    if no game port is installed, subfunction 0000h returns AL=00h (all
  3169.       switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
  3170.     a 250kOhm joystick typically returns 0000h-01A0h
  3171. ----------1585-------------------------------
  3172. INT 15 - OS HOOK - SysRq KEY ACTIVITY (AT,PS)
  3173.     AH = 85h
  3174.     AL = 00h SysRq key pressed
  3175.        = 01h SysRq key released
  3176.     CF clear
  3177. Return: CF clear if successful
  3178.         AH = 00h
  3179.     CF set on error
  3180.         AH = status (see AH=84h)
  3181. Notes:    called by keyboard decode routine
  3182.     the default handler simply returns successfully; programs which wish
  3183.       to monitor the SysRq key must hook this call
  3184. SeeAlso: INT 09
  3185. ----------1586-------------------------------
  3186. INT 15 - BIOS - WAIT (AT,PS)
  3187.     AH = 86h
  3188.     CX:DX = interval in microseconds
  3189. Return: CF clear if successful (wait interval elapsed)
  3190.     CF set on error or AH=83h wait already in progress
  3191.         AH = status (see AH=84h)
  3192. Note:    the resolution of the wait period is 977 microseconds on most systems
  3193.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  3194.       real-time clock chip which is available on INT 70
  3195. SeeAlso: AH=83h,INT 70
  3196. ----------1587-------------------------------
  3197. INT 15 - SYSTEM - COPY EXTENDED MEMORY
  3198.     AH = 87h
  3199.     CX = number of words to copy (max 8000h)
  3200.     ES:SI -> global descriptor table
  3201. Return: CF set on error
  3202.     CF clear if successful
  3203.     AH = status
  3204.         00h source copied into destination
  3205.         01h parity error
  3206.         02h interrupt error
  3207.         03h address line 20 gating failed
  3208.         80h invalid command (PC,PCjr)
  3209.         86h unsupported function (XT,PS30)
  3210. Notes:    copy is done in protected mode with interrupts disabled
  3211.     this function is incompatible with the OS/2 compatibility box
  3212. SeeAlso: AH=88h,AH=89h
  3213.  
  3214. Format of global descriptor table:
  3215. Offset    Size    Description
  3216.  00h 16 BYTEs    zeros
  3217.  10h    WORD    source segment length in bytes (2*CX-1 or greater)
  3218.  12h  3 BYTEs    24-bit linear source address, low byte first
  3219.  15h    BYTE    source segment access rights (93h)
  3220.  16h    WORD    zero
  3221.  18h    WORD    destination segment length in bytes (2*CX-1 or greater)
  3222.  1Ah  3 BYTEs    24-bit linear destination address, low byte first
  3223.  1Dh    BYTE    destination segment access rights (93h)
  3224.  1Eh 18 BYTEs    zeros
  3225. ----------1588-------------------------------
  3226. INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
  3227.     AH = 88h
  3228. Return: CF clear if successful
  3229.         AX = number of contiguous KB starting at absolute address 100000h
  3230.     CF set on error
  3231.         AH = status
  3232.         80h invalid command (PC,PCjr)
  3233.         86h unsupported function (XT,PS30)
  3234. Note:    TSRs which wish to allocate extended memory to themselves often hook
  3235.       this call, and return a reduced memory size.    They are then free to
  3236.       use the memory between the new and old sizes at will.
  3237. SeeAlso: AH=87h
  3238. ----------1589-------------------------------
  3239. INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
  3240.     AH = 89h
  3241.     BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
  3242.     BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
  3243.     ES:SI -> GDT for protected mode
  3244.            offset 0h  null descriptor (initialize to zeros)
  3245.               8h  GDT descriptor
  3246.              10h  IDT descriptor
  3247.              18h  DS
  3248.              20h  ES
  3249.              28h  SS
  3250.              30h  CS
  3251.              38h  uninitialized, used to build descriptor for BIOS CS
  3252.     CX = offset into protected-mode CS to jump to
  3253. Return: CF set on error
  3254.        AH = FFh  error enabling address line 20
  3255.     CF clear if successful
  3256.        AH = 00h
  3257.        in protected mode at specified address
  3258. Note:    BL and BH must be multiples of 8
  3259. SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
  3260. ----------1590-------------------------------
  3261. INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
  3262.     AH = 90h
  3263.     AL = device type
  3264.         00h disk
  3265.         01h diskette
  3266.         02h keyboard
  3267.         03h PS/2 pointing device
  3268.         21h waiting for keyboard input (Phoenix BIOS)
  3269.         80h network
  3270.         FCh disk reset (PS)
  3271.         FDh diskette motor start
  3272.         FEh printer
  3273.     ES:BX -> request block for type codes 80h through BFh
  3274.     CF clear
  3275. Return: CF set if wait time satisfied
  3276.     CF clear if driver must perform wait
  3277.         AH = 00h
  3278. Notes:    type codes are allocated as follows:
  3279.       00-7F non-reentrant devices; OS must arbitrate access
  3280.       80-BF reentrant devices; ES:BX points to a unique control block
  3281.       C0-FF wait-only calls, no complementary INT 15/AH=91h call
  3282.     floppy and hard disk BIOS code uses this call to implement a timeout;
  3283.       for device types 00h and 01h, a return of CF set means that the
  3284.       timeout expired before the disk responded.
  3285.     this function should be hooked by a multitasker to allow other tasks
  3286.       to execute while the BIOS is waiting for I/O completion; the default
  3287.       handler merely returns with AH=00h and CF clear
  3288. SeeAlso: AH=91h
  3289. ----------1591-------------------------------
  3290. INT 15 - OS HOOK - DEVICE POST (AT,PS)
  3291.     AH = 91h
  3292.     AL = device type (see AH=90h)
  3293.     ES:BX -> request block for type codes 80h through BFh
  3294.     CF clear
  3295. Return: AH = 00h
  3296. Note:    this function should be hooked by a multitasker to allow other tasks
  3297.       to execute while the BIOS is waiting for I/O completion; the default
  3298.       handler merely returns with AH=00h and CF clear
  3299. SeeAlso: AH=90h
  3300. ----------15BC-------------------------------
  3301. INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED
  3302.     AH = BCh
  3303. Return: CF clear
  3304.     BYTE 0040h:00B0h set to ??? (43 on my 386/33)
  3305. Note:    reads system timer channel 0 twice, then does calculations on returned
  3306.       values
  3307. ----------15BF02DX0000-----------------------
  3308. INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
  3309.     AX = BF02h
  3310.     DX = 0000h
  3311. Return: DX = nonzero if installed
  3312.         DX:SI -> XBRK structure
  3313. SeeAlso: INT 21/AX=FF00h,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
  3314. ----------15C0-------------------------------
  3315. INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
  3316.     AH = C0h
  3317. Return: CF set if BIOS doesn't support call
  3318.     CF clear on success
  3319.         ES:BX -> ROM table (see below)
  3320.     AH = status
  3321.         00h successful
  3322.         86h unsupported function
  3323. Notes:    the 1/10/86 XT BIOS returns an incorrect value for the feature byte
  3324.     the configuration table is at F000h:E6F5h in 100% compatible BIOSes
  3325.     Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
  3326.       and a model byte at absolute address FE845h
  3327.     Tandy 1000 machines contain 21h in the byte at F000h:C000h
  3328.     some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
  3329.       past the end of the configuration table
  3330.  
  3331. Format of ROM configuration table:
  3332. Offset    Size    Description
  3333.  00h    WORD    number of bytes following
  3334.  02h    BYTE    model (see below)
  3335.  03h    BYTE    submodel (see below)
  3336.  04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
  3337.  05h    BYTE    feature byte 1:
  3338.         bit 7 = DMA channel 3 used by hard disk BIOS
  3339.         bit 6 = 2nd 8259 installed
  3340.         bit 5 = Real-Time Clock installed
  3341.         bit 4 = INT 15/AH=4Fh called upon INT 9h
  3342.         bit 3 = wait for external event supported
  3343.         bit 2 = extended BIOS area allocated (usually at top of RAM)
  3344.         bit 1 = bus is Micro Channel instead of ISA
  3345.         bit 0 reserved
  3346.  06h    BYTE    feature byte 2:
  3347.         bit 7 = ???
  3348.         bit 6 = INT 16/AH=09h (keyboard functionality) supported
  3349.         bits 5-0 = ???
  3350.  07h    BYTE    feature byte 3:
  3351.         reserved (0)
  3352.  08h    BYTE    feature byte 4:
  3353.         reserved (0)
  3354.  09h    BYTE    feature byte 5:
  3355.         reserved (0) (IBM)
  3356.         ??? (08h) (Phoenix 386 v1.10)
  3357. ---AWARD BIOS---
  3358.  0Ah  N BYTEs    AWARD copyright notice
  3359. ---Phoenix BIOS---
  3360.  0Ah    BYTE    ??? (00h)
  3361.  0Bh    BYTE    major version
  3362.  0Ch    BYTE    minor version (BCD)
  3363.  0Dh  4 BYTEs    ASCIZ string "PTL" (Phoenix Technologies Ltd)
  3364.  
  3365. Values for model/submodel/revision:
  3366. Model  Submdl  Rev    BIOS date    System
  3367.  FFh    *    *    04/24/81    PC (original)
  3368.  FFh    *    *    10/19/81    PC (some bugfixes)
  3369.  FFh    *    *    10/27/82    PC (HD, 640K, EGA support)
  3370.  FFh    46h    ***      ???        Olivetti M15
  3371.  FEh    *    *    08/16/82    PC XT
  3372.  FEh    *    *    11/08/82    PC XT and Portable
  3373.  FEh    43h    ***      ???        Olivetti M240
  3374.  FEh    A6h    ???      ???        ??? (checked for by 386MAX v6.01)
  3375.  FDh    *    *    06/01/83    PCjr
  3376.  FCh    *    *    01/10/84    AT models 068,099 6 MHz 20MB
  3377.  FCh    00h    01h    06/10/85    AT model  239      6 MHz 30MB
  3378.  FCh    00h    <> 01h      ???        7531/2 Industrial AT
  3379.  FCh    01h    00h    11/15/85    AT models 319,339 8 MHz, Enh Keyb, 3.5"
  3380.  FCh    01h    00h    09/17/87    Tandy 3000
  3381.  FCh    01h    00h    01/15&88    Toshiba T5200/100
  3382.  FCh    01h    00h    12/26*89    Toshiba T1200/XE
  3383.             (Those date characters are not typos)
  3384.  FCh    01h    30h      ???        Tandy 3000NL
  3385.  FCh    01h    ???      ???        Compaq 286/386
  3386.  FCh    02h    00h    04/21/86    PC XT-286
  3387.  FCh    04h    00h    02/13/87     ** PS/2 Model 50 (10 MHz/1 ws 286)
  3388.  FCh    04h    03h    04/18/88    PS/2 Model 50Z (10 MHz/0 ws 286)
  3389.  FCh    05h    00h    02/13/87     ** PS/2 Model 60 (10 MHz 286)
  3390.  FCh    06h    ???      ???        7552 "Gearbox"
  3391.  FCh    08h    ***      ???        Epson, unknown model
  3392.  FCh    09h    00h      ???        PS/2 Model 25 (10 MHz 286)
  3393.  FCh    09h    02h    06/28/89    PS/2 Model 30-286
  3394.  FCh    0Bh    00h    02/16/90    PS/1 Model 2011 (10 MHz 286)
  3395.  FCh    30h    ***      ???        Epson, unknown model
  3396.  FCh    31h    ***      ???        Epson, unknown model
  3397.  FCh    33h    ***      ???        Epson, unknown model
  3398.  FCh    42h    ***      ???        Olivetti M280
  3399.  FCh    45h    ***      ???        Olivetti M380 (XP 1, XP3, XP 5)
  3400.  FCh    48h    ***      ???        Olivetti M290
  3401.  FCh    4Fh    ***      ???        Olivetti M250
  3402.  FCh    50h    ***      ???        Olivetti M380 (XP 7)
  3403.  FCh    51h    ***      ???        Olivetti PCS286
  3404.  FCh    52h    ***      ???        Olivetti M300
  3405.  FCh    81h    00h    01/15/88    Phoenix 386 BIOS v1.10 10a
  3406.  FBh    00h    01h    01/10/86    PC XT, Enh Keyb, 3.5" support
  3407.  FBh    00h    02h    05/09/86    PC XT
  3408.  FBh    4Ch    ***      ???        Olivetti M200
  3409.  FAh    00h    00h    09/02/86    PS/2 Model 30 (8 MHz 8086)
  3410.  FAh    00h    01h    12/12/86    PS/2 Model 30
  3411.  FAh    01h    00h      ???        PS/2 Model 25/25L (8 MHz 8086)
  3412.  FAh    4Eh    ***      ???        Olivetti M111
  3413.  F9h    00h    00h    09/13/85    PC Convertible
  3414.  F8h    00h    00h    03/30/87     ** PS/2 Model 80 (16MHz 386)
  3415.  F8h    01h    00h    10/07/87    PS/2 Model 80 (20MHz 386)
  3416.  F8h    04h    02h    04/11/88    PS/2 Model 70 20MHz, type 2 system brd
  3417.  F8h    04h    03h    03/17/89    PS/2 Model 70 20MHz, type 2 system brd
  3418.  F8h    09h    00h      ???        PS/2 Model 70 16MHz, type 1 system brd
  3419.  F8h    09h    02h    04/11/88    PS/2 Model 70 some models
  3420.  F8h    09h    03h    03/17/89    PS/2 Model 70 some models
  3421.  F8h    0Bh    00h    01/18/89    PS/2 Model P70 (8573-121) typ 2 sys brd
  3422.  F8h    0Bh    02h    12/16/89    PS/2 Model P70 ??
  3423.  F8h    0Ch    00h    11/02/88    PS/2 Model 55SX (16 MHz 386SX)
  3424.  F8h    0Dh    00h      ???        PS/2 Model 70 25MHz, type 3 system brd
  3425.  F8h    11h    00h    10/01/90    PS/2 Model 90 (25 MHz 486)
  3426.  F8h    13h    00h    10/01/90    PS/2 Model 90 (33 MHz 486)
  3427.  F8h    14h    00h    10/01/90    PS/2 Model 90-AK9 (25 MHz 486)
  3428.  F8h    16h    00h    10/01/90    PS/2 Model 90-AKD (33 MHz 486)
  3429.  F8h    19h    05h      ???        PS/2 Model 35/35LS or 40 (20 MHz 386SX)
  3430.  F8h    1Bh    00h    10/02/89    PS/2 Model 70-486 (25 MHz 486)
  3431.  F8h    1Ch    00h    02/08/90    PS/2 Model 65-121 (16 MHz 386SX)
  3432.  F8h    1Eh    00h    02/08/90    PS/2 Model 55LS (16 MHz 386SX)
  3433.  F8h    23h    01h      ???        PS/2 Model L40 (20 MHz 386SX)
  3434.  F8h    25h    06h      ???        PS/2 Model M57 (20 MHz 386SLC)
  3435.  F8h    26h    01h      ???        PS/2 Model 57 (20 MHz 386SX)
  3436.  F8h    2Ah    00h      ???        PS/2 Model 95 (50 MHz 486)
  3437.  F8h    2Bh    00h      ???        PS/2 Model 90 (50 MHz 486)
  3438.  F8h    2Ch    01h      ???        PS/2 Model 95 (20 MHz 486SX)
  3439.  F8h    2Dh    00h      ???        PS/2 Model 90 (20 MHz 486SX)
  3440.  F8h    2Eh    01h      ???        PS/2 Model 95 (20 MHz 486SX + 487SX)
  3441.  F8h    2Fh    00h      ???        PS/2 Model 90 (20 MHz 486SX + 487SX)
  3442.  F8h    30h    00h      ???        PS/1 Model 2121 (16 MHz 386SX)
  3443.  F8h    50h    00h      ???        PS/2 Model P70 (8573) (16 MHz 386)
  3444.  F8h    50h    01h    12/16/89    PS/2 Model P70 (8570-031)
  3445.  F8h    52h    00h      ???        PS/2 Model P75 (33 MHz 486)
  3446.  F8h    61h    ***      ???        Olivetti P500
  3447.  F8h    62h    ***      ???        Olivetti P800
  3448.  F8h    80h    00h      ???        PS/2 Model 80 (25 MHz 386)
  3449.  F8h    80h    01h    11/21/89    PS/2 Model 80-A21
  3450.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX)
  3451.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX)
  3452.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX + 487SX)
  3453.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX + 487SX)
  3454.  9Ah    *    *      ???        Compaq XT/Compaq Plus
  3455.  30h    ???    ???      ???        Sperry PC
  3456.  2Dh    *    *      ???        Compaq PC/Compaq Deskpro
  3457.  ???    56h    ???      ???        Olivetti, unknown model
  3458.  ???    74h    ???      ???        Olivetti, unknown model
  3459.     * This BIOS call is not implemented in these early versions.
  3460.       Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.
  3461.    ** These BIOS versions require the DASDDRVR.SYS patches.
  3462.   *** These Olivetti and Epson machines store the submodel in the byte at
  3463.       F000h:FFFDh.
  3464.  
  3465. Values for Dell model byte:
  3466.  02h    Dell 200
  3467.  03h    Dell 300
  3468.  05h    Dell 220
  3469.  06h    Dell 310
  3470.  07h    Dell 325
  3471.  09h    Dell 310A
  3472.  0Ah    Dell 316
  3473.  0Bh    Dell 220E
  3474.  0Ch    Dell 210
  3475.  0Dh    Dell 316SX
  3476.  0Eh    Dell 316LT
  3477.  0Fh    Dell 320LX
  3478.  11h    Dell 425E
  3479. ----------15C1-------------------------------
  3480. INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
  3481.     AH = C1h
  3482. Return: CF set on error
  3483.     CF clear if successful
  3484.         ES = segment of data area
  3485. SeeAlso: AH=04h"ABIOS"
  3486. ----------15C200BH00-------------------------
  3487. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
  3488.     AX = C200h
  3489.     BH = 00h disable
  3490.          01h enable
  3491. Return: CF set on error
  3492.     AH = status
  3493.         00h successful
  3494.         01h invalid function
  3495.         02h invalid input
  3496.         03h interface error
  3497.         04h need to resend
  3498.         05h no device handler installed
  3499. ----------15C201-----------------------------
  3500. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
  3501.     AX = C201h
  3502. Return: CF set on error
  3503.         AH = status (see AX=C200h)
  3504.     CF clear if successful
  3505.         BH = device ID
  3506. SeeAlso: INT 33/AX=0000h
  3507. ----------15C202-----------------------------
  3508. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
  3509.     AX = C202h
  3510.     BH = sampling rate
  3511.         00h 10/second
  3512.         01h 20/second
  3513.         02h 40/second
  3514.         03h 60/second
  3515.         04h 80/second
  3516.         05h 100/second
  3517.         06h 200/second
  3518. Return: CF set on error
  3519.         AH = status (see AX=C200h)
  3520. SeeAlso: INT 33/AX=001Ch
  3521. ----------15C203-----------------------------
  3522. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
  3523.     AX = C203h
  3524.     BH = resolution
  3525.         00h one count per mm
  3526.         01h two counts per mm
  3527.         02h four counts per mm
  3528.         03h eight counts per mm
  3529. Return: CF set on error
  3530.         AH = status (see AX=C200h)
  3531. ----------15C204-----------------------------
  3532. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
  3533.     AX = C204h
  3534. Return: CF set on error
  3535.         AH = status (see AX=C200h)
  3536.     CF clear if successful
  3537.         BH = device ID
  3538. ----------15C205-----------------------------
  3539. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
  3540.     AX = C205h
  3541.     BH = data package size (1 - 8 bytes)
  3542. Return: CF set on error
  3543.         AH = status (see AX=C200h)
  3544. SeeAlso: AX=C201h
  3545. ----------15C206-----------------------------
  3546. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET/SET SCALING FACTOR
  3547.     AX = C206h
  3548.     BH = subfunction
  3549.         00h return device status
  3550.         Return: BL = status
  3551.                bit 0: right button pressed
  3552.                bit 1: reserved
  3553.                bit 2: left button pressed
  3554.                bit 3: reserved
  3555.                bit 4: 0 if 1:1 scaling, 1 if 2:1 scaling
  3556.                bit 5: device enabled
  3557.                bit 6: 0 if stream mode, 1 if remote mode
  3558.                bit 7: reserved
  3559.             CL = resolution (see AX=C203h)
  3560.             DL = sample rate, reports per second
  3561.         01h set scaling at 1:1
  3562.         02h set scaling at 2:1
  3563. Return: CF set on error
  3564.         AH = status (see AX=C200h)
  3565. ----------15C207-----------------------------
  3566. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
  3567.     AX = C207h
  3568.     ES:BX = user device handler
  3569. Return: CF set on error
  3570.         AH = status (see AX=C200h)
  3571. SeeAlso: INT 33/AX=000Ch
  3572. ----------15C3------------------------------
  3573. INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
  3574.     AH = C3h
  3575.     AL = 00h disable
  3576.          01h enable
  3577.         BX = timer counter
  3578. Return: CF set on error
  3579.     CF clear if successful
  3580. Note:    the watchdog timer generates an NMI
  3581. ----------15C4-------------------------------
  3582. INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
  3583.     AH = C4h
  3584.     AL = 00h return base POS register address
  3585.          01h enable slot
  3586.          BL = slot number
  3587.          02h enable adapter
  3588. Return: CF set on error
  3589.     DX = base POS register address (if function 00h)
  3590. ----------15C5-------------------------------
  3591. INT 15 U - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
  3592.     AH = C5h
  3593.     AL = interrupt being invoked
  3594.         01h INT 19
  3595.         02h INT 14
  3596.         03h INT 16
  3597.         04h INT 40 (floppy INT 13)
  3598.         05h INT 17
  3599.         06h INT 10
  3600.         07h INT 12
  3601.         08h INT 11
  3602.         09h INT 1A
  3603. Return: all registers except AX must be preserved
  3604. Notes:    called as the very first action of the indicated ROM BIOS interrupt
  3605.       handlers on the PS/2 Models 30/286, 50Z, and 95
  3606.     default handler does nothing and returns CF clear for the above
  3607.       subfunctions, CF set and AH=86h for all other subfunctions
  3608.     value of AX passed to the original interrupt handler is pushed on
  3609.       stack immediately prior to call
  3610. ----------15C6-------------------------------
  3611. INT 15 U - PS/2 Model 95 - ???
  3612.     AH = C6h
  3613.     ???
  3614. Return: ???
  3615. ----------15C7-------------------------------
  3616. INT 15 U - PS/2 Model 95 - ???
  3617.     AH = C7h
  3618.     ???
  3619. Return: ???
  3620. ----------15C8-------------------------------
  3621. INT 15 U - PS/2 Model 95 - ???
  3622.     AH = C8h
  3623.     ???
  3624. Return: ???
  3625. ----------15C9-------------------------------
  3626. INT 15 U - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
  3627.         AH = C9h
  3628.     AL = 10h (may be required on some non-PS BIOSes)
  3629. Return: AH = 00h
  3630.     CH = CPU type
  3631.         03h 80386
  3632.             04h 80486
  3633.         CL = mask revision
  3634.         23h 386SX
  3635. Notes:    the BIOS must save DX at startup in order to be able to support this
  3636.       call; PS/2 Models 56, 57, 90, and 95 are known to support it
  3637.     the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)
  3638. ----------15CA-------------------------------
  3639. INT 15 U - PS/2 Model 95 - ???
  3640.     AH = CAh
  3641.     ???
  3642. Return: ???
  3643. ----------15CB-------------------------------
  3644. INT 15 U - PS/2 Model 95 - ???
  3645.     AH = CBh
  3646.     ???
  3647. Return: ???
  3648. ----------15CC-------------------------------
  3649. INT 15 U - PS/2 Model 95 - ???
  3650.     AH = CCh
  3651.     ???
  3652. Return: ???
  3653. ----------15CD-------------------------------
  3654. INT 15 U - PS/2 Model 95 - ???
  3655.     AH = CDh
  3656.     ???
  3657. Return: ???
  3658. ----------15CE-------------------------------
  3659. INT 15 U - PS/2 Model 95 - ???
  3660.     AH = CEh
  3661.     ???
  3662. Return: ???
  3663. ----------15CF-------------------------------
  3664. INT 15 U - PS/2 Model 95 - ???
  3665.     AH = CFh
  3666.     ???
  3667. Return: ???
  3668. ----------15D800-----------------------------
  3669. INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
  3670.     AX = D800h
  3671.     CL = slot number (including embedded and virtual)
  3672. Return: CF clear if successful
  3673.         AH = 00h
  3674.     CF set on error
  3675.         AH = error code
  3676.         80h invalid slot number
  3677.         82h EISA CMOS corrupt
  3678.         83h empty slot
  3679.         86h invalid BIOS-FW function call
  3680.         87h invalid system configuration
  3681.     AL bit flags
  3682.         bit 7: set if duplicate IDs
  3683.         6: set if product ID readable
  3684.           4,5: slot type (00=expansion, 01=embedded, 10=virtual device)
  3685.           0-3: duplicate ID number if bit 7 set
  3686.     BH = major revision level of configuration utility
  3687.     BL = minor revision level of configuration utility
  3688.     CX = checksum of configuration file
  3689.     DH = number of device functions
  3690.     DL = combined function information byte
  3691.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  3692. Note:    call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
  3693. SeeAlso: AX=D801h,AX=D804h
  3694. ----------15D801-----------------------------
  3695. INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
  3696.     AX = D801h
  3697.     CH = function number to read
  3698.     CL = slot number (including embedded and virtual)
  3699.     DS:SI -> 320-byte buffer for standard configuration data block
  3700. Return: CF clear if successful
  3701.         AH = 00h
  3702.         DS:SI buffer filled
  3703.     CF set on error
  3704.         AH = error code
  3705.         80h invalid slot number
  3706.         81h invalid function number
  3707.         82h EISA CMOS corrupt
  3708.         83h empty slot
  3709.         86h invalid BIOS-FW function call
  3710.         87h invalid system configuration
  3711.     BX destroyed
  3712. Note:    call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
  3713. ----------15D802-----------------------------
  3714. INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
  3715.     AX = D802h
  3716.     BH = EISA config utility major revision level
  3717.     BL = EISA config utility minor revision level
  3718. Return: CF clear if successful
  3719.         AH = 00h
  3720.     CF set on error
  3721.         AH = error code
  3722.         84h error clearing CMOS
  3723.         86h invalid BIOS-FW function call
  3724.         88h config utility version not supported
  3725. Note:    call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
  3726. SeeAlso: AX=D803h
  3727. ----------15D803-----------------------------
  3728. INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
  3729.     AX = D803h
  3730.     CX = length of data structure (0000h = empty slot)
  3731.         includes two bytes for config file checksum
  3732.     DS:SI -> configuration data
  3733. Return: CF clear if successful
  3734.         AH = 00h
  3735.     CF set on error
  3736.         AH = error code
  3737.         84h error clearing CMOS
  3738.         85h EISA CMOS is full
  3739.         86h invalid BIOS-FW function call
  3740. Note:    call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
  3741. SeeAlso: AX=D802h
  3742. ----------15D804-----------------------------
  3743. INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
  3744.     AX = D804h
  3745.     CL = slot number (including embedded and virtual)
  3746. Return: CF clear if successful
  3747.         AH = 00h
  3748.     CF set on error
  3749.         AH = error code
  3750.         80h invalid slot number
  3751.         83h empty slot
  3752.         86h invalid BIOS-FW function call
  3753.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  3754. Note:    call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
  3755. SeeAlso: AX=D800h
  3756. ----------15D8-------------------------------
  3757. INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
  3758.     AH = D8h
  3759.     AL = 80h to 84h
  3760.     other registers as appropriate for AL=00h to 04h
  3761. Return: as appropriate for AL=00h to 04h
  3762. Note:    these functions are identical to AX=D800h to D804h, except that they
  3763.       should be called when using 32-bit CS addressing mode (pointers use
  3764.       ESI rather than SI as offset) instead of 16-bit addressing mode
  3765. SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
  3766. ----------15DE00-----------------------------
  3767. INT 15 - DESQview - GET PROGRAM NAME
  3768.     AX = DE00h
  3769. Return: AX = offset into DESQVIEW.DVO of program most recently selected from
  3770.         the "Switch Windows" menu (see below)
  3771. SeeAlso: AX=DE07h
  3772.  
  3773. Format of program entry in DESQVIEW.DVO:
  3774. Offset    Size    Description
  3775.  00h    BYTE    length of name (FFh if end of file)
  3776.  01h  N BYTEs    name
  3777.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  3778.     BYTE    program type
  3779.         00h normal program
  3780.         04h divider
  3781.         80h Delete a Program
  3782.         81h Change a Program
  3783.     WORD    ??? apparently always 0000h
  3784. ----------15DE01-----------------------------
  3785. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  3786.     AX = DE01h
  3787. Return: nothing
  3788. Note:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  3789. ----------15DE02-----------------------------
  3790. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  3791.     AX = DE02h
  3792. Return: nothing
  3793. Note:    this call is a NOP in DV 2.x
  3794. SeeAlso: AX=DE03h
  3795. ----------15DE03-----------------------------
  3796. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  3797.     AX = DE03h
  3798. Return: AX = ??? for current window
  3799.     BX = ??? for current window
  3800. Note:    this call is a NOP in DV 2.x
  3801. SeeAlso: AX=DE02h
  3802. ----------15DE04-----------------------------
  3803. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  3804.     AX = DE04h
  3805. Return: BX = bytes of common memory available
  3806.     CX = largest block available
  3807.     DX = total common memory in bytes
  3808. SeeAlso: AX=DE05h,AX=DE06h
  3809. ----------15DE05-----------------------------
  3810. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  3811.     AX = DE05h
  3812. Return: BX = K of memory available
  3813.     CX = largest block available
  3814.     DX = total conventional memory in K
  3815. SeeAlso: AX=DE04h,AX=DE06h
  3816. ----------15DE06-----------------------------
  3817. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  3818.     AX = DE06h
  3819. Return: BX = K of expanded memory available
  3820.     CX = largest block available
  3821.     DX = total expanded memory in K
  3822. SeeAlso: AX=DE04h,AX=DE05h
  3823. ----------15DE07-----------------------------
  3824. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  3825.     AX = DE07h
  3826. Return: AX = number of program as it appears on the "Switch Windows" menu
  3827. Note:    this API call may be made from a hardware interrupt handler
  3828. SeeAlso: AX=DE00h
  3829. ----------15DE08-----------------------------
  3830. INT 15 - DESQview - GET ???
  3831.     AX = DE08h
  3832. Return: AX = 0000h if ??? is not set to the current task
  3833.          0001h if ??? is set to the current task
  3834. ----------15DE09-----------------------------
  3835. INT 15 - DESQview - UNIMPLEMENTED
  3836.     AX = DE09h
  3837. Return: nothing (NOP in DV 1.x and 2.x)
  3838. ----------15DE0A-----------------------------
  3839. INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  3840.     AX = DE0Ah
  3841.     BL = character
  3842. Return: character displayed, next call will display in next position (which
  3843.     wraps back to the start of the line if off the right edge of screen)
  3844. Notes:    displays character on bottom line of *physical* screen, regardless
  3845.       of current size of window (even entirely hidden)
  3846.     does not know about graphics display modes, just pokes the characters
  3847.       into display memory
  3848.     this API call may be made from a hardware interrupt handler
  3849. SeeAlso: AX=1003h
  3850. ----------15DE0B-----------------------------
  3851. INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  3852.     AX = DE0Bh
  3853.     BL = API level minor version number
  3854.     BH = API level major version number
  3855. Return: AX = maximum API level (AH = major, AL = minor)
  3856. Notes:    if the requested API level is greater than the version of DESQview, a
  3857.       "You need a newer version" error window is popped up
  3858.     the API level defaults to 1.00, and is inherited by child tasks
  3859. ----------15DE0C-----------------------------
  3860. INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  3861.     AX = DE0Ch
  3862.     BX = number of bytes
  3863. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  3864. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  3865.       system memory
  3866. SeeAlso: AX=1001h,AX=DE0Dh,AX=DE15h
  3867. ----------15DE0D-----------------------------
  3868. INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  3869.     AX = DE0Dh
  3870.     ES:DI -> previously allocated block
  3871. Return: nothing
  3872. SeeAlso: AX=1002h,AX=DE0Ch
  3873. ----------15DE0E-----------------------------
  3874. INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
  3875.     AX = DE0Eh
  3876.     ES:DI -> name to find
  3877.     CX = length of name
  3878. Return: BX = 0000h not found
  3879.          0001h found
  3880.         DS:SI = object handle
  3881. SeeAlso: AH=12h/BH=11h
  3882. ----------15DE0F-----------------------------
  3883. INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
  3884.     AX = DE0Fh
  3885. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  3886. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  3887.     enables an additional mouse mode
  3888. ----------15DE10-----------------------------
  3889. INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  3890.     AX = DE10h
  3891.     BH = scan code
  3892.     BL = character
  3893. Return: nothing
  3894. Notes:    a later read will get the keystroke as if it had been typed by the user
  3895.     multiple pushes are read last-in first-out
  3896.     if a script exists for the pushed key in the current application, the
  3897.       script will be executed
  3898.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  3899. SeeAlso: INT 16/AH=05h
  3900. ----------15DE11BL00-------------------------
  3901. INT 15 - DESQview 2.00+ - "JUSTIFY" - EN/DISABLE AUTOMATIC WINDOW JUSTIFICATION
  3902.     AX = DE11h
  3903.     BL = 00h      viewport will not move automatically
  3904.          nonzero  viewport will move to keep cursor visible (default)
  3905. Return: nothing
  3906. ----------15DE12BX0000-----------------------
  3907. INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  3908.     AX = DE12h
  3909.     BX = 0000h    select normal style (linefeed only moves down)
  3910.          nonzero  select C style (linefeed moves to start of next line)
  3911. Return: nothing
  3912. Note:    set on a per-task basis, and inherited from the parent task
  3913. ----------15DE13-----------------------------
  3914. INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  3915.     AX = DE13h
  3916. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  3917.          without matching ENDC (see INT 15/AX=101Ch)
  3918. Note:    this API call may be made from within a hardware interrupt handler
  3919. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  3920. ----------15DE14-----------------------------
  3921. INT 15 - DESQview v2.20+ - GET OBJECT TYPE
  3922.     AX = DE14h
  3923.     ES:DI -> object
  3924. Return: BL = 00h not an object
  3925.          08h window or task
  3926.          09h mailbox
  3927.          0Ah keyboard
  3928.          0Bh timer
  3929.          0Ch objectq
  3930.          0Fh pointer
  3931.          10h panel
  3932. SeeAlso: AX=1016h
  3933. ----------15DE15BL00-------------------------
  3934. INT 15 - DESQview v2.20+ - SET ERROR HANDLING
  3935.     AX = DE15h
  3936.     BL = 00h post system error on all error conditions
  3937.          01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  3938.          messages sent to mailboxes which fail due to lack of system
  3939.          or common memory
  3940.          02h (v2.26+) same as 01h, but return null pointer for GETMEM
  3941.          calls which fail due to lack of system memory
  3942. Return: nothing
  3943. SeeAlso: AX=DE16h
  3944. ----------15DE16-----------------------------
  3945. INT 15 - DESQview v2.20+ - GET ERROR HANDLING
  3946.     AX = DE16h
  3947. Return: BL = 00h always post system error
  3948.          01h return carry flag set on failed mailbox writes
  3949.          02h return CF set on failed mailbox writes and NULL on failed
  3950.          GETMEM calls
  3951. SeeAlso: AX=DE15h
  3952. ----------15DE17-----------------------------
  3953. INT 15 - DESQview v2.20-2.25 - reserved
  3954.     AX = DE17h
  3955. Return: pops up "Programming error" window
  3956. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  3957. SeeAlso: AX=1117h
  3958. ----------15DE17BX0000-----------------------
  3959. INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  3960.     AX = DE17h
  3961.     BX = 0000h    get current mapping context without setting
  3962.          nonzero    set new mapping context
  3963. Return: BX = mapping context in effect before call
  3964. Notes:    mapping contexts determine conventional-memory addressability; setting
  3965.       a mapping context ensures that the associated program and data areas
  3966.       are in memory for access.  Usable by drivers, TSRs and shared
  3967.       programs.
  3968.     caller need not be running under DESQview
  3969.     this API call may be made from a hardware interrupt handler
  3970. SeeAlso: AX=1117h,INT 2F/AX=1685h
  3971. ----------15DE18-----------------------------
  3972. INT 15 - DESQview v2.20+ - internal - ???
  3973.     AX = DE18h
  3974.     BP = function number
  3975.         high byte must be 10h
  3976.         low byte is function
  3977.         00h set ???
  3978.             BL = ???  (00h-10h, video mode???)
  3979.             BH = value to store
  3980.         03h set ???
  3981.             BL = ??? (stored in driver)
  3982.         0Ah get ???
  3983.             ES:DI -> 18-byte buffer to hold ???
  3984. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  3985. ----------15DE19-----------------------------
  3986. INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  3987.     AX = DE19h
  3988.     BX = number of bytes to allocate
  3989. Return: AX = 0000h successful
  3990.         ES:DI -> allocated block
  3991.          nonzero insufficient memory
  3992. Note:    this API call may be made from within a hardware interrupt handler
  3993. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  3994. ----------15DE1A-----------------------------
  3995. INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  3996.     AX = DE1Ah
  3997.     DS:SI -> previously allocated block
  3998. Note:    this function may be called from within a hardware interrupt handler
  3999. SeeAlso: AX=DE0Dh,AX=DE19h
  4000. ----------15DE1B-----------------------------
  4001. INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  4002.     AX = DE1Bh
  4003. Return: nothing
  4004. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  4005. ----------15DE1C-----------------------------
  4006. INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  4007.     AX = DE1Ch
  4008. Return: nothing
  4009. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  4010.       that DOS is free
  4011.     the official documentation states that this call should be paired with
  4012.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  4013.     this API call may be made from within a hardware interrupt handler
  4014. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  4015. ----------15DE1D-----------------------------
  4016. INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  4017.     AX = DE1Dh
  4018.     DX = segment of handle for task to receive keystroke
  4019.     BL = character
  4020.     BH = scan code
  4021. Return: AX = 0000h if successful
  4022.        nonzero if receiver's keyboard buffer was full
  4023. Notes:    the key is treated as though the user had pressed it, ignoring any
  4024.       script which may be bound to the key, and using the current field
  4025.       table if the keyboard object is in field processing mode
  4026.     multiple PUTKEYs are seen in the order in which they are executed
  4027. SeeAlso: AX=DE10h
  4028. ----------15DE1E-----------------------------
  4029. INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  4030.     AX = DE1Eh
  4031. Return:    CL = actual number of rows on screen
  4032.     CH = actual number of columns on screen
  4033.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  4034. Note:    this API call may be made from a hardware interrupt handler
  4035. SeeAlso: INT 10/AH=0Fh
  4036. ----------15DE1F-----------------------------
  4037. INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  4038.     AX = DE1Fh
  4039. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  4040. Note:    this API call may be made from within a hardware interrupt handler
  4041. SeeAlso: AX=DE13h
  4042. ----------15DE20-----------------------------
  4043. INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  4044.     AX = DE20h
  4045.     BX = segment of handle of task to interupt
  4046.     DX:CX -> FAR interrupt routine
  4047. Return: nothing
  4048. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  4049.       making the DISPATCHINT call
  4050.     multiple "DISPATCHINT" calls are processed in the order in which they
  4051.       were executed
  4052.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  4053.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  4054.       needs to be preserved
  4055.     this API call may be made from within a hardware interrupt handler
  4056. SeeAlso: AX=1021h
  4057. ----------15DE21BX0000-----------------------
  4058. INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  4059.     AX = DE21h
  4060.     BX = 0000h turn off
  4061.          nonzero turn on
  4062. Return: BX = old state of virtualization
  4063. Note:    this API call may be made from within a hardware interrupt handler
  4064. ----------15DE22-----------------------------
  4065. INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  4066.     AX = DE22h
  4067.     DX = segment of task handle
  4068. Return: DX = total amount of memory in paragraphs
  4069.     BX = amount of system memory in paragraphs
  4070.     CX = largest block of system memory available in paragraphs
  4071.     AX = flags
  4072.         bit 0: system memory resides in shared memory
  4073.         1: process's memory is swapped out
  4074.         2: process's system memory is swapped out
  4075. Notes:    if the task handle is a child task, the returned values will be for the
  4076.       process containing the task, rather than the task itself
  4077.     if the process's system memory is swapped out, BX,CX,DX remain
  4078.       unchanged, because the memory usage cannot be determined
  4079. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  4080. ----------15DE23-----------------------------
  4081. INT 15 - DESQview v2.31+ - ???
  4082.     AX = DE23h
  4083.     BX = ??? IRQ number on first PIC?
  4084.     CX = ??? IRQ number on second PIC?
  4085. Return: ???
  4086. Note:    called by QEMM 6.00+
  4087. ----------15DE24-----------------------------
  4088. INT 15 - DESQview v2.40 - ???
  4089.     AX = DE24h
  4090. Return: BX = ??? (0000h for v2.40)
  4091. ----------15DE25-----------------------------
  4092. INT 15 - DESQview v2.40 - ???
  4093.     AX = DE25h
  4094.     ???
  4095. Return: nothing
  4096. ----------15DE26-----------------------------
  4097. INT 15 - DESQview v2.40 - GET ???
  4098.     AX = DE26h
  4099. Return: BX = segment of handle for ??? (current window?)
  4100. ----------15E00F-----------------------------
  4101. INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
  4102.     AX = E00Fh
  4103.     ES:BX -> start of 2nd processor's execution
  4104. Return: AL = 0Fh successful
  4105.        = 00h failure    
  4106. SeeAlso: AX=E10Eh,AX=E200h
  4107. ----------15E10E-----------------------------
  4108. INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
  4109.     AX = E10Eh
  4110.     ES:BX -> start of 2nd processor's execution
  4111. Return: AL = 0Fh successful (halted)
  4112.        = 00h failure (not halted)
  4113. SeeAlso: AX=E00Fh,AX=E200h
  4114. ----------15E200-----------------------------
  4115. INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
  4116.     AX = E200h
  4117. Return: AX = 8000h if 2nd processor available
  4118. SeeAlso: AX=E00Fh,AX=E10Eh
  4119. ----------15E4-------------------------------
  4120. INT 15 - ???
  4121.     AH = E4h
  4122.     AL = subfunction
  4123.         21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
  4124.     DL = ???
  4125. Return: ???
  4126. ----------15F200CX454D-----------------------
  4127. INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALISATION CHECK ???
  4128.     AX = F200h
  4129.     CX = 454Dh
  4130. Return: CF clear if hardware already initialised
  4131.         BX = upper RAM areas in use
  4132.         bit 0: C000-C3FF
  4133.         bit 1: C400-C7FF
  4134.         ...
  4135.         bit 11: EC00-EFFF
  4136.     CF set if hardware not initialised yet
  4137. ----------1600-------------------------------
  4138. INT 16 - KEYBOARD - GET KEYSTROKE
  4139.     AH = 00h
  4140. Return: AH = BIOS scan code
  4141.     AL = ASCII character
  4142. Notes:    on extended keyboards, this function discards any extended keystrokes,
  4143.       returning only when a non-extended keystroke is available
  4144.     the BIOS scan code is usually, but not always, the same as the hardware
  4145.       scan code processed by INT 09.  It is the same for ASCII keystrokes
  4146.       and most unshifted special keys (F-keys, arrow keys, etc.), but
  4147.       differs for shifted special keys.
  4148. SeeAlso: AH=01h,AH=05h,AH=10h,AH=20h,INT 18/AH=00h
  4149. ----------1601-------------------------------
  4150. INT 16 - KEYBOARD - CHECK FOR KEYSTROKE
  4151.     AH = 01h
  4152. Return: ZF set if no keystroke available
  4153.     ZF clear if keystroke available
  4154.         AH = BIOS scan code
  4155.         AL = ASCII character
  4156. Note:    if a keystroke is present, it is not removed from the keyboard buffer;
  4157.       however, any extended keystrokes which are not compatible with 83/84-
  4158.       key keyboards are removed in the process of checking whether a
  4159.       non-extended keystroke is available
  4160. SeeAlso: AH=00h,AH=11h,AH=21h,INT 18/AH=01h
  4161. ----------1602-------------------------------
  4162. INT 16 - KEYBOARD - GET SHIFT FLAGS
  4163.     AH = 02h
  4164. Return: AL = shift flags
  4165.         bit 7: Insert active
  4166.         6: CapsLock active
  4167.         5: NumLock active
  4168.         4: ScrollLock active
  4169.         3: Alt key pressed (either Alt on 101/102-key keyboards)
  4170.         2: Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  4171.         1: left shift key pressed
  4172.         0: right shift key pressed
  4173. SeeAlso: AH=12h,AH=22h,INT 18/AH=02h
  4174. ----------1603-------------------------------
  4175. INT 16 - KEYBOARD - SET TYPEMATIC RATE AND DELAY
  4176.     AH = 03h
  4177.     AL = subfunction
  4178.         00h set default delay and rate (PCjr and some PS/2)
  4179.         01h increase delay before repeat (PCjr)
  4180.         02h decrease repeat rate by factor of 2 (PCjr)
  4181.         03h increase delay and decrease repeat rate (PCjr)
  4182.         04h turn off typematic repeat (PCjr and some PS/2)
  4183.         05h set repeat rate and delay (AT,PS)
  4184.         BH = delay value (00h = 250ms to 03h = 1000ms)
  4185.         BL = repeat rate (00h=30/sec to 0Ch=10/sec [def] to 1Fh=2/sec)
  4186.         06h get current typematic rate and delay (newer PS/2s)
  4187.         Return: BL = repeat rate (see above)
  4188.             BH = delay (see above)
  4189. Note:    use INT 16/AH=09h to determine whether some of the subfunctions are
  4190.       supported
  4191. SeeAlso: INT 16/AH=09h
  4192. ----------1604-------------------------------
  4193. INT 16 - KEYBOARD - SET KEYCLICK (PCjr only)
  4194.     AH = 04h
  4195.     AL = keyclick state
  4196.         00h off
  4197.         01h on
  4198. SeeAlso: AH=03h
  4199. ----------1605-------------------------------
  4200. INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
  4201.     AH = 05h
  4202.     CH = scan code
  4203.     CL = ASCII character
  4204. Return: AL = 00h if successful
  4205.          01h if keyboard buffer full
  4206. Note:    under DESQview, the following "keystrokes" invoke the following
  4207.       actions when they are read from the keyboard buffer:
  4208.         38FBh or FB00h    switch to next window (only if main menu
  4209.                 popped up)
  4210.         38FCh or FC00h    pop up DESQview main menu
  4211.         38FEh or FE00h    close the current window
  4212.         38FFh or FF00h    pop up DESQview learn menu
  4213. SeeAlso: AH=00h,AH=71h,AH=FFh,INT 15/AX=DE10h
  4214. ----------1609-------------------------------
  4215. INT 16 - KEYBOARD - GET KEYBOARD FUNCTIONALITY
  4216.     AH = 09h
  4217. Return: AL = keyboard functions supported
  4218.         bit 7: reserved
  4219.         bit 6: 
  4220.         bit 5:
  4221.         bit 4: INT 16/AH=0Ah supported
  4222.         bit 3: INT 16/AX=0306h supported
  4223.         bit 2: INT 16/AX=0305h supported
  4224.         bit 1: INT 16/AX=0304h supported
  4225.         bit 0: INT 16/AX=0300h supported
  4226. Note:    this function is only available if bit 6 of the second feature byte
  4227.       returned by INT 15/AH=C0h is set
  4228. SeeAlso: AH=03h,AH=0Ah,INT 15/AH=C0h
  4229. ----------160A-------------------------------
  4230. INT 16 - KEYBOARD - GET KEYBOARD ID
  4231.     AH = 0Ah
  4232. Return: BX = keyboard ID
  4233. Note:    check return value from AH=09h to determine whether this function is
  4234.       supported
  4235. SeeAlso: AH=09h
  4236. ----------1610-------------------------------
  4237. INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (enhanced kbd support only)
  4238.     AH = 10h
  4239. Return: AH = BIOS scan code
  4240.     AL = ASCII character
  4241. Notes:    if no keystroke is available, this function waits until one is placed
  4242.       in the keyboard buffer
  4243.     the BIOS scan code is usually, but not always, the same as the hardware
  4244.       scan code processed by INT 09.  It is the same for ASCII keystrokes
  4245.       and most unshifted special keys (F-keys, arrow keys, etc.), but
  4246.       differs for shifted special keys.
  4247.     unlike AH=00h, this function does not discard extended keystrokes
  4248. SeeAlso: AH=00h,AH=11h,AH=20h
  4249. ----------1611-------------------------------
  4250. INT 16 - KEYBOARD - CHECK FOR ENHANCED KEYSTROKE (enh kbd support only)
  4251.     AH = 11h
  4252. Return: ZF set if no keystroke available
  4253.     ZF clear if keystroke available
  4254.         AH = BIOS scan code
  4255.         AL = ASCII character
  4256. Notes:    if a keystroke is available, it is not removed from the keyboard buffer
  4257.     unlike AH=01h, this function does not discard extended keystrokes
  4258. SeeAlso: AH=01h,AH=10h,AH=21h
  4259. ----------1612-------------------------------
  4260. INT 16 - KEYBOARD - GET EXTENDED SHIFT STATES (enh kbd support only)
  4261.     AH = 12h
  4262. Return: AL = shift flags 1 (same as returned by AH=02h)
  4263.         bit 7: Insert active
  4264.         6: CapsLock active
  4265.         5: NumLock active
  4266.         4: ScrollLock active
  4267.         3: Alt key pressed (either Alt on 101/102-key keyboards)
  4268.         2: Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  4269.         1: left shift key pressed
  4270.         0: right shift key pressed
  4271.     AH = shift flags 2
  4272.         bit 7: SysRq key pressed
  4273.         6: CapsLock pressed
  4274.         5: NumLock pressed
  4275.         4: ScrollLock pressed
  4276.         3: right Alt key pressed
  4277.         2: right Ctrl key pressed
  4278.         1: left Alt key pressed
  4279.         0: left Ctrl key pressed
  4280. Notes:    AL bit 3 set only for left Alt key on many machines
  4281.     AH bits 7 through 4 always clear on a Compaq SLT/286
  4282. SeeAlso: AH=02h,AH=22h
  4283. ----------1620-------------------------------
  4284. INT 16 - KEYBOARD - GET 122-KEY KEYSTROKE???
  4285.     AH = 20h
  4286. Return: ??? see AH=10h
  4287. Note:    use AH=09h to determine whether this function is supported
  4288. SeeAlso: AH=00h,AH=10h,AH=21h
  4289. ----------1621-------------------------------
  4290. INT 16 - KEYBOARD - CHECK FOR 122-KEY KEYSTROKE???
  4291.     AH = 21h
  4292. Return: ??? see AH=11h
  4293. Note:    use AH=09h to determine whether this function is supported
  4294. SeeAlso: AH=01h,AH=11h,AH=20h
  4295. ----------1622-------------------------------
  4296. INT 16 - KEYBOARD - GET 122-KEY SHIFT STATUS???
  4297.     AH = 22h
  4298. Return: ??? see AH=12h
  4299. Note:    use AH=09h to determine whether this function is supported
  4300. SeeAlso: AH=02h,AH=12h
  4301. ----------164252-----------------------------
  4302. INT 16 - TEXTCAP 2.0 - INSTALLATION CHECK
  4303.     AX = 4252h
  4304. Return: AX = 5242h if installed
  4305. Note:    TEXTCAP 2.0 is a heavily modified (by Gisbert W. Selke) version of the
  4306.       PC Magazine utility CAPTURE written by Tom Kihlken
  4307. SeeAlso: AX=4253h,AX=4254h
  4308. ----------164253-----------------------------
  4309. INT 16 - TEXTCAP 2.0 - UNINSTALL
  4310.     AX = 4253h
  4311. Return: AX = segment of resident code
  4312. Notes:    the uninstall code does not check whether interrupt vectors have been
  4313.       chained by other programs
  4314.     the caller must free the main memory block (using the returned segment)
  4315. SeeAlso: AX=4252h,AX=4254h
  4316. ----------164254-----------------------------
  4317. INT 16 - TEXTCAP 2.0 - DUMP TEXT SCREEN TO FILE
  4318.     AX = 4254h
  4319. Return: AX = status
  4320.         4254h if screen dump will be written as soon as disk becomes idle
  4321.         5442h if screen dump written
  4322. SeeAlso: AX=4252h,AX=4253h
  4323. ----------164500-----------------------------
  4324. INT 16 - Shamrock Software EMAIL - GET STATUS
  4325.     AX = 4500h
  4326.     DL = port number (01h = COM1)
  4327.     ES:BX -> 13-byte buffer for ASCIZ name
  4328. Return: AX = 4D00h if EMAIL installed on specified port
  4329.         ES:BX -> "" if no connection
  4330.           -> "*" if connection but caller has not identified name
  4331.           -> name otherwise
  4332.         CX = version (CH = major, CL = minor)
  4333.         DL = privilege level of user (00h = guest)
  4334.         DH = chosen language (00h German, 01h English)
  4335. SeeAlso: AX=4501h,AX=4502h
  4336. ----------164501-----------------------------
  4337. INT 16 - Shamrock Software EMAIL - GET ELAPSED ONLINE TIME AND MAXIMUM TIME
  4338.     AX = 4501h
  4339.     DL = port number (01h = COM1)
  4340. Return: AX = 4D00h if EMAIL installed on specified port
  4341.         BX = maximum connect time in clock ticks
  4342.         CX = maximum connect time for guests (without name) in clock ticks
  4343.         DX = elapsed connect time of current user in clock ticks
  4344. SeeAlso: AX=4500h    
  4345. ----------164502-----------------------------
  4346. INT 16 - Shamrock Software EMAIL - GET CURRENT COMMUNICATIONS PARAMETERS
  4347.     AX = 4502h
  4348.     DL = port number (01h = COM1)
  4349. Return: AX = 4D00h if EMAIL installed on specified port
  4350.         BL = current value of serial port's Line Control Register
  4351.         BH = flags
  4352.         bit 0: ISO code
  4353.             1: pause
  4354.             2: linefeed
  4355.             3: ANSI sequences
  4356.         CX = selected country code (33 = France, 49 = Germany, etc)
  4357.         DX = baudrate divisor (115200/DX = baudrate)
  4358. SeeAlso: AX=4500h
  4359. ----------164503-----------------------------
  4360. INT 16 - Shamrock Software EMAIL - SPECIFY COMMAND-WORD FOR USER FUNCTION
  4361.     AX = 4503h
  4362.     DL = port number (01h = COM1)
  4363.     DH = maximum execution time in clock ticks (00h = 5 seconds)
  4364.     ES:BX -> ASCIZ string with new user command-word
  4365. Return: AX = 4D00h if EMAIL installed on specified port
  4366. Notes:    a single user command (consisting of only uppercase letters and digits)
  4367.       may be defined, and remains valid until it is overwritten or the
  4368.       EMAIL program terminates; the user command must be activated by
  4369.       calling AX=4504h at least once.
  4370.     an existing command word may be redefined with this function
  4371. SeeAlso: AX=4504h,AX=4505h
  4372. ----------164504-----------------------------
  4373. INT 16 - Shamrock Software EMAIL - CHECK FOR USER FUNCTION COMMAND-WORD
  4374.     AX = 4504h
  4375.     DL = port number (01h = COM1)
  4376.     ES:BX -> 80-byte buffer for ASCIZ user input line
  4377. Return: AX = 4D00h if EMAIL installed on specified port
  4378.         DL = flags
  4379.         bit 0: user function supported (always set)
  4380.             1: user entered user-function command word
  4381.         if DL bit 1 set,
  4382.         ES:BX buffer contains line entered by user which begins with
  4383.             the defined command word and has been converted to all
  4384.             caps
  4385. Note:    caller must process the returned commandline and invoke AX=4505h
  4386.       within five seconds with the result of that processing
  4387. SeeAlso: AX=4503h,AX=4505h
  4388. ----------164505-----------------------------
  4389. INT 16 - Shamrock Software EMAIL - SEND RESULT OF USER FUNCTION
  4390.     AX = 4505h
  4391.     DL = port number (01h = COM1)
  4392.     DH = error flag
  4393.         bit 3: set on error
  4394.     ES:BX -> ASCIZ text to return to user, max 1024 bytes
  4395. Return: AH = 4Dh if EMAIL installed on specified port
  4396.     AL = status
  4397.         00h successful
  4398.         02h unable to perform function (timeout, prev call not complete)
  4399.         other error
  4400. Notes:    if the error flag in DH is set, the string is not sent and an error
  4401.       message is generated instead; if this function is not called within
  4402.       five seconds of AX=4504h, EMAIL automatically generates an error
  4403.       message
  4404.     the string is copied into an internal buffer, allowing this function's
  4405.       caller to continue immediately
  4406. SeeAlso: AX=4503h,AX=4504h,INT 17/AX=2400h
  4407. ----------164506-----------------------------
  4408. INT 16 - Shamrock Software EMAIL - MONITOR XMODEM DOWNLOAD
  4409.     AX = 4506h
  4410.     DL = port number (01h = COM1)
  4411.     ES:BX -> 13-byte buffer for ASCIZ filename
  4412. Return: AX = 4D00h if EMAIL installed on specified port
  4413.         DH = Xmodem status
  4414.         00h no XGET command given
  4415.         01h XGET in progress
  4416.         02h XGET completed successfully
  4417.         ES:BX buffer filled with last filename given to XGET command
  4418.         (without path)
  4419. Note:    DH=02h will only be returned once per XGET; subsequent calls will
  4420.       return DH=00h
  4421. SeeAlso: AX=4500h,INT 17/AX=2408h
  4422. ----------165500-----------------------------
  4423. INT 16 - Microsoft Word internal - MICROSOFT WORD COOPERATION WITH TSR
  4424.     AX = 5500h
  4425. Return: AX = 4D53h ('MS') if keyboard TSR present
  4426. Notes:    during startup, Microsoft Word tries to communicate with any TSRs
  4427.       that are present through this call.
  4428.     if the return is not 4D53h, Word installs its own INT 09 and INT 16
  4429.       handlers; otherwise it assumes that the TSR will handle the keyboard
  4430. SeeAlso: INT 1A/AX=3601h
  4431. ----------1655FF-----------------------------
  4432. INT 16 - Swap Utilities - ???
  4433.     AX = 55FFh
  4434.     BX >= 0004h
  4435.     CX = function
  4436.         0000h set ??? flag
  4437.         other clear ??? flag
  4438. Note:    present in SWAPSH and SWAPDT v1.77j, distributed with PC Tools 7
  4439. ----------166969BX6968-----------------------
  4440. INT 16 - PC Tools v5.1+ BACKTALK - UNHOOK
  4441.     AX = 6969h
  4442.     BX = 6968h
  4443. Return: resident code unhooked, but not removed from memory
  4444. ----------166969BX6969-----------------------
  4445. INT 16 - PC Tools v5.1+ BACKTALK - INSTALLATION CHECK
  4446.     AX = 6969h
  4447.     BX = 6969h
  4448.     DX = 0000h
  4449. Return: DX nonzero if installed
  4450.         BX = CS of resident code
  4451.         DX = PSP segment of resident code
  4452.         DS:SI -> ASCIZ identification string "CPoint Talk"
  4453. ----------166F00BX0000-----------------------
  4454. INT 16 - HP Vectra - ??? - INSTALLATION CHECK
  4455.     AX = 6F00h
  4456.     BX = 0000h
  4457. Return: BX = 4850h if present
  4458. Note:    called by recent MS Mouse drivers
  4459. ----------166F0D-----------------------------
  4460. INT 16 - HP Vectra - ???
  4461.     AX = 6F0Dh
  4462.     ???
  4463. Return: ???
  4464. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386
  4465. SeeAlso: AX=6F0Eh
  4466. ----------166F0E-----------------------------
  4467. INT 16 - HP Vectra - ???
  4468.     AX = 6F0Eh
  4469.     ???
  4470. Return: ???
  4471. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386
  4472. SeeAlso: AX=6F0Dh
  4473. ----------1670-------------------------------
  4474. INT 16 - FAKEY.COM - INSTALLATION CHECK
  4475.     AH = 70h
  4476. Return: AX = 1954h if installed
  4477. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  4478. ----------1671-------------------------------
  4479. INT 16 - FAKEY.COM - PUSH KEYSTROKES
  4480.     AH = 71h
  4481.     CX = number of keystrokes
  4482.     DS:SI -> array of words containing keystrokes to be returned by AH=00h
  4483. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  4484. SeeAlso: AH=05h,AH=72h
  4485. ----------1672-------------------------------
  4486. INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
  4487.     AH = 72h
  4488. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  4489. SeeAlso: AH=71h
  4490. ----------1673-------------------------------
  4491. INT 16 - FAKEY.COM - PLAY TONES
  4492.     AH = 73h
  4493.     CX = number of tones to play
  4494.     DS:SI -> array of tones (see below)
  4495. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  4496. SeeAlso: INT 15/AX=1019h
  4497.  
  4498. Format of tone array entries:
  4499. Offset    Size    Description
  4500.  00h    WORD    divisor for timer channel 2
  4501.  02h    WORD    duration in clock ticks
  4502. ----------1675-------------------------------
  4503. INT 16 - pcANYWHERE III - SET TICK COUNT FOR SCANNING
  4504.     AH = 75h
  4505.     AL = number of ticks between checks for new screen changes
  4506. ----------1676-------------------------------
  4507. INT 16 - pcANYWHERE III - SET ERROR CHECKING TYPE
  4508.     AH = 76h
  4509.     AL = error checking type
  4510.         00h none
  4511.         01h fast
  4512.         02h slow
  4513. ----------1677-------------------------------
  4514. INT 16 - pcANYWHERE III - LOG OFF
  4515.     AH = 77h
  4516.     AL = mode
  4517.         00h wait for another call
  4518.         01h leave in Memory Resident Mode
  4519.         02h leave in Automatic Mode
  4520.         FFh leave in current operating mode
  4521. ----------167761-----------------------------
  4522. INT 16 - WATCH.COM v2.x-v3.0 - INSTALLATION CHECK
  4523.     AX = 7761h ('wa')
  4524. Return: AX = 5741h ('WA') if installed
  4525. Note:    WATCH.COM is part of the "TSR" package by Kim Kokkonen
  4526. SeeAlso: INT 21/AX=7761h
  4527. ----------167788BX7789-----------------------
  4528. INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
  4529.     AX = 7788h
  4530.     BX = 7789h
  4531.     DS:SI -> signature "PUSHDIR VERSION 1.0"
  4532. Return: AX = 7789h if installed and signature correct
  4533.     BX = 7788h
  4534.     SI destroyed          
  4535. ----------1679-------------------------------
  4536. INT 16 - pcANYWHERE III - CHECK STATUS
  4537.     AH = 79h
  4538. Return: AX = status
  4539.         FFFFh if resident and active
  4540.         FFFEh if resident but not active
  4541.         FFFDh if in Memory Resident mode
  4542.         FFFCh if in Automatic mode
  4543.         other value if not resident
  4544. SeeAlso: AX=7B00h,INT 21/AX=2B44h
  4545. ----------167A-------------------------------
  4546. INT 16 - pcANYWHERE III - CANCEL SESSION
  4547.     AH = 7Ah
  4548. ----------167B00-----------------------------
  4549. INT 16 - pcANYWHERE III - SUSPEND
  4550.     AX = 7B00h
  4551. SeeAlso: AH=79h,AX=7B01h
  4552. ----------167B01-----------------------------
  4553. INT 16 - pcANYWHERE III - RESUME
  4554.     AX = 7B01h
  4555. SeeAlso: AH=79h,AX=7B00h
  4556. ----------167C-------------------------------
  4557. INT 16 - pcANYWHERE III - GET PORT CONFIGURATION
  4558.     AH = 7Ch
  4559. Return: AH = port number
  4560.     AL = baud rate
  4561.         00h = 50 baud
  4562.         01h = 75 baud
  4563.         02h = 110 baud
  4564.         03h = 134.5 baud
  4565.         04h = 150 baud
  4566.         05h = 300 baud
  4567.         06h = 600 baud
  4568.         07h = 1200 baud
  4569.         08h = 1800 baud
  4570.         09h = 2000 baud
  4571.         0Ah = 2400 baud
  4572.         0Bh = 4800 baud
  4573.         0Ch = 7200 baud
  4574.         0Dh = 9600 baud
  4575.         0Eh = 19200 baud
  4576. ----------167D-------------------------------
  4577. INT 16 - pcANYWHERE III - GET/SET TERMINAL PARAMETERS
  4578.     AH = 7Dh
  4579.     AL = subfunction
  4580.         00h set terminal parameters
  4581.         01h get terminal parameters
  4582.         02h get configuration header and terminal parameters
  4583.     DS:CX -> terminal parameter block
  4584. ----------167E-------------------------------
  4585. INT 16 - pcANYWHERE III - COMMUNICATIONS I/O THROUGH PORT
  4586.     AH = 7Eh
  4587.     AL = subfunction
  4588.         01h port input status
  4589.         Return AX = 0 if no characer ready,
  4590.                AX = 1 if character ready
  4591.         02h port input character
  4592.         Return AL = received character
  4593.         03h port output character in CX
  4594.         11h hang up phone
  4595. ----------167F-------------------------------
  4596. INT 16 - pcANYWHERE III - SET KEYBOARD/SCREEN MODE
  4597.     AH = 7Fh
  4598.     AL = subfunction
  4599.         00h enable remote keyboard only
  4600.         01h enable host keyboard only
  4601.         02h enable both keyboards
  4602.         08h display top 24 lines
  4603.         09h display bottom 24 lines
  4604.         10h Hayes modem
  4605.         11h other modem
  4606.         12h direct connect
  4607. ----------1680-------------------------------
  4608. INT 16 - MAKEY.COM - INSTALLATION CHECK
  4609.     AH = 80h
  4610. Return: AX = 1954h if installed
  4611. Note:    MAKEY is a utility by System Enhancement Associates
  4612. ----------168765BX4321-----------------------
  4613. INT 16 - AT.COM version 8/26/87 - API
  4614.     AX = 8765h
  4615.     BX = 4321h
  4616.     CX = ??? or FFFFh
  4617.     if CX = FFFFh
  4618.         DX = number of event to remove or FFFFh
  4619. Return: ES:BX -> event record array
  4620. Note:    AT.COM is a resident scheduler by Bill Frolik
  4621.  
  4622. Format of event record:
  4623. Offset    Size    Description
  4624.  00h    BYTE    in-use flag (00h free, 01h in use, FFh end of array)
  4625.  01h    BYTE    day of date on which to trigger
  4626.  02h    BYTE    month of date on which to trigger
  4627.  03h    BYTE    trigger time, minute
  4628.  04h    BYTE    trigger time, hour
  4629.  05h    WORD    offset of command to be executed
  4630. ----------1699-------------------------------
  4631. INT 16 - SCOUT v5.4 - GET ???
  4632.     AH = 99h
  4633. Return: AX = ABCDh
  4634.     BX:CX -> ??? (appears to be start of PSP for resident portion)
  4635. Note:    Scout is a memory-resident file manager by New-Ware
  4636. SeeAlso: AH=9Eh
  4637. ----------169E-------------------------------
  4638. INT 16 - SCOUT v5.4 - INSTALLATION CHECK
  4639.     AH = 9Eh
  4640. Return: AX = ABCDh if installed
  4641. Note:    Scout is a memory-resident file manager by New-Ware
  4642. SeeAlso: AH=99h
  4643. ----------16AA-------------------------------
  4644. INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS
  4645.     AH = AAh
  4646.     Various registers set up by high level language.
  4647. Return: Graphics performed
  4648. Note:    PT stands for Paint Tools which is a graphics library for Turbo Pascal,
  4649.       Modula 2 and others from DataBiten in Sweden. The library is
  4650.       installed as a memory resident driver.
  4651. ----------16CA--BX736B-----------------------
  4652. INT 16 - CtrlAlt Associates STACKEY.COM v3.00 - API
  4653.     AH = CAh
  4654.     BX = 736Bh ("sk")
  4655.     CX = 736Bh
  4656.     AL = function
  4657.         00h installation check
  4658.             Return: DX = words available in keyboard buffer
  4659.         01h place keystroke in buffer
  4660.             DX = keystroke (DH = scan code, DL = ASCII character)
  4661.         Return: DX = words available in keyboard buffer
  4662.                 FFFFh on error
  4663.         02h flush STACKEY and BIOS keyboard buffers
  4664. Return: AX = CAFFh if installed
  4665.         BX = segment of resident code
  4666.         CX = STACKEY version (CH = major, CL = minor)
  4667. Note:    STACKEY is a shareware keyboard-input faking TSR
  4668. ----------16CA00BX6570-----------------------
  4669. INT 16 - CtrlAlt Associates EGAPAL.COM v1.00 - INSTALLATION CHECK
  4670.     AX = CA00h
  4671.     BX = 6570h ("ep")
  4672.     CX = 6570h
  4673. Return: AX = CAFFh if installed
  4674.         BX = segment of resident code
  4675.         CX = ??? (0090h)
  4676. Note:    EGAPAL is a TSR supplied with STACKEY which makes EGA palette settings
  4677.       permanent across mode switches
  4678. SeeAlso: AX=CA00h/BX=7670h
  4679. ----------16CA--BX7670-----------------------
  4680. INT 16 - CtrlAlt Associates VGAPAL.COM v1.00 - INSTALLATION CHECK
  4681.     AX = CA00h
  4682.     BX = 7670h ("vp")
  4683.     CX = 7670h
  4684. Return: AX = CAFFh if installed
  4685.         BX = segment of resident code
  4686.         CX = ??? (0090h)
  4687. Note:    VGAPAL is a TSR supplied with STACKEY which makes VGA palette settings
  4688.       permanent across mode switches
  4689. SeeAlso: AX=CA00h/BX=6570h
  4690. ----------16E0E0-----------------------------
  4691. INT 16 - TurboPower TSRs - ALTERNATE INSTALLATION CHECK
  4692.     AX = E0E0h
  4693. Return: AX = 1F1Fh if installed
  4694.         DWORD 0040h:00F0h -> last data block in TSR list (see AX=F0F0h)
  4695. Note:    the returned TSR list provides support for communication among TSRs
  4696.       built with TurboPower's Turbo Professional and Object Professional
  4697.       libraries for Turbo Pascal
  4698. SeeAlso: AX=F0F0h
  4699. ----------16F0-------------------------------
  4700. INT 16 - Compaq 386 - SET CPU SPEED
  4701.     AH = F0h
  4702.     AL = speed
  4703.         00h equivalent to 6 MHz 80286 (COMMON)
  4704.         01h equivalent to 8 MHz 80286 (FAST)
  4705.         02h full 16 MHz (HIGH)
  4706.         03h toggles between 8 MHz-equivalent and speed set by system board
  4707.         switch (AUTO or HIGH)
  4708.         08h full 16 MHz except 8 MHz-equivalent during floppy disk access
  4709.         09h specify speed directly
  4710.         CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
  4711. SeeAlso: AH=F1h,AH=F3h
  4712. ----------16F0F0-----------------------------
  4713. INT 16 - TurboPower TSRs - INSTALLATION CHECK
  4714.     AX = F0F0h
  4715. Return: AX = 0F0Fh if installed
  4716.         ES:DI -> last data block in TSR list
  4717. Note:    the returned TSR list provides support for communication among TSRs
  4718.       built with TurboPower's Turbo Professional and Object Professional
  4719.       libraries for Turbo Pascal
  4720. SeeAlso: AX=E0E0h
  4721.  
  4722. Format of data block:
  4723. Offset    Size    Description
  4724.  00h    DWORD    pointer to program tag (counted ASCII string)
  4725.  04h    WORD    interface version number (0400h)
  4726.  06h    DWORD    pointer to command entry point
  4727.  0Ah    DWORD    pointer to previous data block (0000h:0000h if none)
  4728.  0Eh    DWORD    pointer to next data block (0000h:0000h if none)
  4729. ---swappable TSRs only---
  4730.  12h    DWORD    pointer to swapping data
  4731.  16h    DWORD    pointer to user data
  4732.     more???
  4733. ----------16F1-------------------------------
  4734. INT 16 - Compaq 386 - READ CURRENT CPU SPEED
  4735.     AH = F1h
  4736. Return:    AL = speed code (see AH=F0h)
  4737.          if AL = 09h, CX = speed code
  4738. SeeAlso: AH=F0h,AH=F3h
  4739. ----------16F2-------------------------------
  4740. INT 16 - Compaq 386 - DETERMINE ATTACHED KEYBOARD TYPE
  4741.     AH = F2h
  4742. Return: AL = type
  4743.         00h if 11-bit AT keyboard is in use
  4744.         01h if 9-bit PC keyboard is in use 
  4745. ----------16F3-------------------------------
  4746. INT 16 - Compaq 80286s - SET CPU SPEED LIMIT (OVERRIDE JUMPER)
  4747.     AH = F3h
  4748.     AL = 00h limit is 6 Mhz
  4749.        = 01h limit is 8 Mhz/6 Mhz
  4750. SeeAlso: AH=F0h,AH=F1h
  4751. ----------16F400-----------------------------
  4752. INT 16 - Compaq Systempro - CACHE CONTROLLER STATUS
  4753.     AX = F400h
  4754. Return: AH = E2h
  4755.     AL = status
  4756.         00h not present
  4757.         01h enabled
  4758.         02h disabled
  4759. SeeAlso: AX=F401h,AX=F402h
  4760. ----------16F401-----------------------------
  4761. INT 16 - Compaq Systempro - ENABLE CACHE CONTROLLER
  4762.     AX = F401h
  4763. Return: AX = E201h
  4764. SeeAlso: AX=F400h,AX=F402h
  4765. ----------16F402-----------------------------
  4766. INT 16 - Compaq Systempro - DISABLE CACHE CONTROLLER
  4767.     AX = F402h
  4768. Return: AX = E202h
  4769. SeeAlso: AX=F400h,AX=F401h
  4770. ----------16FEA4-----------------------------
  4771. INT 16 - PC Tools 7 CPSCHED/DESKTOP - ???
  4772.     AX = FEA4h
  4773.     ???
  4774. Return: ???
  4775. ----------16FEC6-----------------------------
  4776. INT 16 - PC Tools 7 CPSCHED - ???
  4777.     AX = FEC6h
  4778.     DL = ???
  4779.     ???
  4780. Return: ???
  4781. ----------16FED3-----------------------------
  4782. INT 16 - PC Tools 7 CPSCHED/DESKTOP - ???
  4783.     AX = FED3h
  4784.     ???
  4785. Return: ???
  4786. ----------16FEDC-----------------------------
  4787. INT 16 - PC Tools 7 CPSCHED - ???
  4788.     AX = FEDCh
  4789.     ???
  4790. Return: ???
  4791. ----------16FEEFCX0000-----------------------
  4792. INT 16 - PC Tools 7 CPSCHED/DESKTOP - INSTALLATION CHECK
  4793.     AX = FEEFh
  4794.     CX = 0000h
  4795. Return: CX = ABCDh if PC Tools scheduler (CPSCHED or DESKTOP) installed
  4796.         BX = segment of resident portion
  4797. SeeAlso: AX=FFEFh
  4798. ----------16FEF1-----------------------------
  4799. INT 16 - PC Tools 7 CPSCHED/DESKTOP - ???
  4800.     AX = FEF1h
  4801.     ???
  4802. Return: ???
  4803. ----------16FF-------------------------------
  4804. INT 16 - KEYBOARD - KBUF extensions - ADD KEY TO TAIL OF KEYBOARD BUFFER
  4805.     AH = FFh
  4806.     DX = scan code
  4807. Return: AL = status
  4808.         00h success
  4809.         01h failure
  4810. Note:    KBUF is a keyboard buffer expander by Mark Adler
  4811. SeeAlso: AH=05h
  4812. ----------16FF-------------------------------
  4813. INT 16 - OPTIMA 1024 VGA-Sync - QUERY ZOOM INTERRUPT
  4814.     AH = FFh
  4815. Return: AL = interrupt number to which BIOS keyboard handler has been relocated
  4816.     AL+1 = Zoom interrupt number
  4817.     BX = hotkey
  4818. Note:    The default interrupts are 60h for keyboard and 61h for Zoom interrupt;
  4819.       the default hot key is F10
  4820. SeeAlso: INT 60"OPTIMA"
  4821. ----------16FF91-----------------------------
  4822. INT 16 - PC Tools 7 DESKTOP - ???
  4823.     AX = FF91h
  4824.     ???
  4825. Return: AX = 0000h
  4826. SeeAlso: AX=FF92h
  4827. ----------16FF92-----------------------------
  4828. INT 16 - PC Tools 7 DESKTOP - ???
  4829.     AX = FF92h
  4830.     ???
  4831. Return: AX = 0000h
  4832. Note:    like AX=FF91h, but temporarily sets ??? to 3
  4833. SeeAlso: AX=FF91h
  4834. ----------16FF93-----------------------------
  4835. INT 16 - PC Tools 7 DESKTOP - SET ??? FLAG
  4836.     AX = FF93h
  4837.     ???
  4838. Return: ???
  4839. ----------16FF94-----------------------------
  4840. INT 16 - PC Tools 7 DESKTOP - SET ???
  4841.     AX = FF94h
  4842.     CX = ???
  4843.     ???
  4844. Return: ???
  4845. ----------16FF95-----------------------------
  4846. INT 16 - PC Tools 7 DESKTOP - SET ???
  4847.     AX = FF95h
  4848.     BX = ???
  4849.     ???
  4850. Return: ???
  4851. ----------16FF96-----------------------------
  4852. INT 16 - PC Tools 7 DESKTOP - ???
  4853.     AX = FF96h
  4854.     CL = ???
  4855. Return: ???
  4856. ----------16FF97-----------------------------
  4857. INT 16 - PC Tools 7 DESKTOP - ???
  4858.     AX = FF97h
  4859.     ???
  4860. Return: ???
  4861. ----------16FF98-----------------------------
  4862. INT 16 - PC Tools 7 DESKTOP - READ ??? FROM \DESK.OVL FILE
  4863.     AX = FF98h
  4864.     DX = offset in file
  4865.     ???
  4866. Return: ???
  4867. ----------16FF99-----------------------------
  4868. INT 16 - PC Tools 7 DESKTOP - ???
  4869.     AX = FF99h
  4870.     ???
  4871. Return: ???
  4872. ----------16FF9A-----------------------------
  4873. INT 16 - PC Tools 7 DESKTOP - GET NAME OF COLOR SCHEME
  4874.     AX = FF9Ah
  4875. Return: ES:BX -> name of current color scheme
  4876. Note:    available even if not popped up
  4877. ----------16FF9B-----------------------------
  4878. INT 16 - PC Tools 7 DESKTOP - UNUSED???
  4879.     AX = FF9Bh
  4880.     ???
  4881. Return: ???
  4882. Note:    sounds triple-length beep
  4883. ----------16FF9E-----------------------------
  4884. INT 16 - PC Tools 7 DESKTOP - ???
  4885.     AX = FF9Eh
  4886.     DL = ???
  4887.     ???
  4888. Return: ???
  4889. ----------16FFA1-----------------------------
  4890. INT 16 - PC Tools 7 DESKTOP - ???
  4891.     AX = FFA1h
  4892.     ???
  4893. Return: ???
  4894. ----------16FFA2-----------------------------
  4895. INT 16 - PC Tools 7 DESKTOP - ???
  4896.     AX = FFA2h
  4897.     ???
  4898. Return: ???
  4899. ----------16FFA3BX0000-----------------------
  4900. INT 16 - PC Tools 7 DATAMON - INSTALLATION CHECK
  4901.     AX = FFA3h
  4902.     BX = 0000h
  4903.     CX = 0000h
  4904. Return: AX = segment of resident code
  4905.     BX = 5555h
  4906.     CX = 5555h
  4907. ----------16FFA3BX0001-----------------------
  4908. INT 16 - PC Tools 7 DATAMON - GET ???
  4909.     AX = FFA3h
  4910.     BX = 0001h
  4911.     CX = 0001h
  4912. Return: AX:BX -> ???
  4913.     CX = BX
  4914. ----------16FFA3BX0002-----------------------
  4915. INT 16 - PC Tools 7 DATAMON - GET ???
  4916.     AX = FFA3h
  4917.     BX = 0002h
  4918.     CX = 0002h
  4919. Return: AX = ??? (0 or 1)
  4920.     CX = BX = AX
  4921. ----------16FFA3BX0003-----------------------
  4922. INT 16 - PC Tools 7 DATAMON - GET ???
  4923.     AX = FFA3h
  4924.     BX = 0003h
  4925.     CX = 0003h
  4926. Return: AX = ??? (0 or 1)
  4927.     CX = BX = AX
  4928. ----------16FFA3BX0004-----------------------
  4929. INT 16 - PC Tools 7 DATAMON - SET ??? FLAG
  4930.     AX = FFA3h
  4931.     BX = 0004h
  4932.     CX = 0004h
  4933. SeeAlso: AX=FFA3h/BX=0005h
  4934. ----------16FFA3BX0005-----------------------
  4935. INT 16 - PC Tools 7 DATAMON - CLEAR ??? FLAG
  4936.     AX = FFA3h
  4937.     BX = 0005h
  4938.     CX = 0005h
  4939. SeeAlso: AX=FFA3h/BX=0004h
  4940. ----------16FFA3BX0006-----------------------
  4941. INT 16 - PC Tools 7 DATAMON - SET PSP SEGMENT ???
  4942.     AX = FFA3h
  4943.     BX = 0006h
  4944.     CX = 0006h
  4945.     DX = current PSP segment as known to DOS??? or 0000h
  4946. ----------16FFA4-----------------------------
  4947. INT 16 - PC Tools 7 DESKTOP - ???
  4948.     AX = FFA4h
  4949.     ???
  4950. Return: ???
  4951. Note:    available even when not popped up
  4952. ----------16FFA5CX1111-----------------------
  4953. INT 16 - PC-Cache v6+ - INSTALLATION CHECK
  4954.     AX = FFA5h
  4955.     CX = 1111h
  4956. Return: CH = 00h if installed
  4957.         ES:DI -> internal data (see below)
  4958.         CL = cache state
  4959.         01h enabled
  4960.         02h disabled
  4961. SeeAlso: INT 13/AH=A0h,INT 21/AH=2Bh/CX=4358h
  4962.  
  4963. Format of internal data:
  4964. Offset    Size    Description
  4965. -1Ch 20 BYTEs    cached drive list, one byte per drive A: to T:
  4966.         each byte is either blank (20h) or drive letter (41h-54h)
  4967.  -8    BYTE    ???
  4968.  -7    WORD    number of physical transfers (scaled down to 0000h-7FFFh)
  4969.  -5    WORD    number of saved transfers (scaled down to 0000h-7FFFh)
  4970.  -3   3 BYTEs    ???
  4971. ----------16FFA5CXAAAA-----------------------
  4972. INT 16 - PC-Cache v6+ - ENABLE DELAYED WRITES
  4973.     AX = FFA5h
  4974.     CX = AAAAh
  4975. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  4976. SeeAlso: AX=FFA5h/CX=CCCCh
  4977. ----------16FFA5CXCCCC-----------------------
  4978. INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES
  4979.     AX = FFA5h
  4980.     CX = CCCCh
  4981. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  4982. Note:    delayed writes are automatically disabled on EXECing
  4983.       (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??;
  4984.       however, delayed writes are not automatically reenabled upon the
  4985.       program's termination in v6.
  4986. SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh
  4987. ----------16FFA5CXDDDD-----------------------
  4988. INT 16 - PC-Cache v6+ - FLUSH AND DISABLE CACHE
  4989.     AX = FFA5h
  4990.     CX = DDDDh
  4991. SeeAlso: AX=FFA5h/CX=EEEEh,AX=FFA5h/CX=FFFFh
  4992. ----------16FFA5CXEEEE-----------------------
  4993. INT 16 - PC-Cache v6+ - ENABLE CACHE
  4994.     AX = FFA5h
  4995.     CX = EEEEh
  4996. SeeAlso: AX=FFA5h/CX=DDDDh
  4997. ----------16FFA5CXFFFF-----------------------
  4998. INT 16 - PC-Cache v6+ - FLUSH CACHE
  4999.     AX = FFA5h
  5000.     CX = FFFFh
  5001. SeeAlso: AX=FFA5h/CX=CCCCh,AX=FFA5h/CX=DDDDh,INT 13/AH=A1h
  5002. ----------16FFA6-----------------------------
  5003. INT 16 - PC Tools v6.0+ DESKTOP API - GET ???
  5004.     AX = FFA6h
  5005. Return: DS:SI -> ???
  5006. Note:    available only when popped up
  5007. ----------16FFA7-----------------------------
  5008. INT 16 - PC Tools v6.0+ DESKTOP API - GET ??? PATH
  5009.     AX = FFA7h
  5010. Return: DS:SI -> ASCIZ path (directory from which PCTools was run???)
  5011. ----------16FFA8-----------------------------
  5012. INT 16 - PC Tools v6.0+ DESKTOP API - ???
  5013.     AX = FFA8h
  5014.     DS:SI -> three consecutive ASCIZ strings for ??? (max 256 bytes total)
  5015.     ???
  5016. Return: ???
  5017. Notes:    available only when popped up
  5018.     strings copied into internal buffer, among other actions
  5019. ----------16FFA9-----------------------------
  5020. INT 16 - PC Tools v6.0+ DESKTOP API - GET VERSION STRING
  5021.     AX = FFA9h
  5022. Return: DS:SI -> version string
  5023. ----------16FFAA-----------------------------
  5024. INT 16 - PC Tools v6.0+ DESKTOP API - ???
  5025.     AX = FFAAh
  5026.     ???
  5027. Return: ???
  5028. Note:    available only when popped up
  5029. ----------16FFAB-----------------------------
  5030. INT 16 - PC Tools v6.0+ DESKTOP API - GET EDITOR SETTINGS???
  5031.     AX = FFABh
  5032. Return: DS:SI -> editor setting strings???
  5033. ----------16FFAC-----------------------------
  5034. INT 16 - PC Tools v6.0+ DESKTOP API - SET ???
  5035.     AX = FFACh
  5036.     DL = ???
  5037. Note:    available only when popped up
  5038. ----------16FFAD-----------------------------
  5039. INT 16 - PC Tools v6.0+ DESKTOP API - SET ???
  5040.     AX = FFADh
  5041.     DL = ???
  5042. ----------16FFAE-----------------------------
  5043. INT 16 - PC Tools v6.0+ DESKTOP API - GET ???
  5044.     AX = FFAEh
  5045. Return: AL = ???
  5046. ----------16FFAF-----------------------------
  5047. INT 16 - PC Tools v6.0+ DESKTOP API - SET ???
  5048.     AX = FFAFh
  5049.     DL = ???
  5050. ----------16FFB0-----------------------------
  5051. INT 16 - PC Tools v6.0+ DESKTOP API - SET ???
  5052.     AX = FFB0h
  5053.     BL = ???
  5054. ----------16FFB1-----------------------------
  5055. INT 16 - PC Tools v6.0+ DESKTOP API - ???
  5056.     AX = FFB1h
  5057.     ???
  5058. Return: ???
  5059. ----------16FFB2-----------------------------
  5060. INT 16 - PC Tools v5.5+ DESKTOP API - GET ???
  5061.     AX = FFB2h
  5062. Return: DS:SI -> ???
  5063. ----------16FFB3-----------------------------
  5064. INT 16 - PC Tools v5.5+ DESKTOP API - ???
  5065.     AX = FFB3h
  5066.     ???
  5067. Return: ???
  5068. Note:    available only when popped up
  5069. ----------16FFB4-----------------------------
  5070. INT 16 - PC Tools v5.5+ DESKTOP API - SET ??? FLAG
  5071.     AX = FFB4h
  5072. Note:    available only when popped up
  5073. SeeAlso: AX=FFBBh
  5074. ----------16FFB5-----------------------------
  5075. INT 16 - PC Tools v5.5+ DESKTOP API - GET/SET WINDOW PARAMETERS
  5076.     AX = FFB5h
  5077.     BX = window specifier (000Fh to 0019h) (see below)
  5078.     DX = 0000h get, nonzero = set
  5079.     ES:DI -> window parameter buffer (see below)
  5080. SeeAlso: AX=FFCBh
  5081.  
  5082. Values for window specifier:
  5083.  000Fh    comm/FAX
  5084.  0014h    hotkey selection
  5085.  0015h    ASCII table
  5086.  0016h    system colors menu
  5087.  
  5088. Format of window parameters:
  5089. Offset    Size    Description
  5090.  00h    BYTE    rows in window, not counting frame
  5091.  01h    BYTE    columns in window, not counting frame
  5092.  02h    BYTE    row number of top of window
  5093.  03h    BYTE    2*column number of left of window
  5094.  04h    BYTE    character attribute for ???
  5095.  05h    BYTE    character attribute for background/border
  5096.  06h    BYTE    character attribute for ???
  5097.  07h    DWORD    pointer to ??? on screen
  5098.  0Bh  4 BYTEs    ???
  5099.  0Fh    BYTE    nonzero if window may be resized
  5100. Note:    if running in monochrome mode, character attributes at offsets 04h to
  5101.       06h are stored unchanged, but attributes other than 07h, 0Fh, or 70h
  5102.       are changed to 07h on reading
  5103. ----------16FFB6-----------------------------
  5104. INT 16 - PC Tools v5.5+ DESKTOP API - GET ???
  5105.     AX = FFB6h
  5106. Return: AH = ???
  5107.     AL = ???
  5108. ----------16FFB7-----------------------------
  5109. INT 16 - PC Tools v5.5+ DESKTOP API - GET/SET ???
  5110.     AX = FFB7h
  5111.     BX = direction
  5112.         0000h copy to buffer
  5113.         else  copy from buffer
  5114.     DS:SI -> 70-byte buffer with ???
  5115. Return: data copied
  5116. Note:    available only when popped up under v6.0+
  5117. ----------16FFB8-----------------------------
  5118. INT 16 - PC Tools v5.1+ DESKTOP API - GET/SET???
  5119.     AX = FFB8h
  5120.     BH = subfunction
  5121.         00h get
  5122.         Return: BL = old value of ???
  5123.             CL = old value of ??? (v6.0+)
  5124.             CH = old value of ??? (v6.0+)
  5125.         nonzero set
  5126.         BL = new value for ???
  5127.         CL = new value for ??? (v6.0+)
  5128.         CH = new value for ??? (v6.0+)
  5129.         DH = ???
  5130.         Return: AL = old value replaced by CL (v6.0+)
  5131.             AH = old value replaced by CH (v6.0+)
  5132. ----------16FFB9-----------------------------
  5133. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5134.     AX = FFB9h
  5135.     ???
  5136. Return: AX = ???
  5137.     CX = ???
  5138.     DS:SI -> ???
  5139.     ES:DI -> ???
  5140. ----------16FFBA-----------------------------
  5141. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5142.     AX = FFBAh
  5143.     ???
  5144. Return: AX = ???
  5145. Note:    available only when popped up
  5146. ----------16FFBB-----------------------------
  5147. INT 16 - PC Tools v5.1+ DESKTOP API - CLEAR ??? FLAG
  5148.     AX = FFBBh
  5149. Note:    available only when popped up
  5150. SeeAlso: AX=FFB4h
  5151. ----------16FFBC-----------------------------
  5152. INT 16 - PC Tools v5.1+ DESKTOP API - RESTORE ORIGINAL SCREEN???
  5153.     AX = FFBCh
  5154. ----------16FFBD-----------------------------
  5155. INT 16 - PC Tools v5.1+ DESKTOP API - ??? DATABASE INDEXING MESSAGES
  5156.     AX = FFBDh
  5157.     ???
  5158. Return: ???
  5159. ----------16FFBE-----------------------------
  5160. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5161.     AX = FFBEh
  5162.     ???
  5163. Return: ???
  5164. Note:    available only when popped up
  5165. ----------16FFBF-----------------------------
  5166. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5167.     AX = FFBFh
  5168.     BX = DOS file handle to write on
  5169.     ???
  5170. Return: ???
  5171. Note:    available only when popped up
  5172. ----------16FFC0-----------------------------
  5173. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5174.     AX = FFC0h
  5175.     ???
  5176. Return: AX = 0000h if successful
  5177.     AX = FFFFh on error
  5178. Note:    available only when popped up
  5179. ----------16FFC1-----------------------------
  5180. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5181.     AX = FFC1h
  5182.     BL = ???
  5183.     ES:DI -> data structure (see below)
  5184.     ???
  5185. Return: AX = ???
  5186. Note:    available only when popped up
  5187.  
  5188. Format of data structure:
  5189. Offset    Size    Description
  5190.  00h    WORD    ???
  5191.  02h    WORD    ???
  5192.  04h    WORD    ???
  5193.  06h    WORD    ???
  5194.  08h    WORD    ???
  5195.  0Ah    BYTE    ???
  5196.  0Bh    BYTE    ???
  5197.     ???
  5198. ----------16FFC2-----------------------------
  5199. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5200.     AX = FFC2h
  5201.     ???
  5202. Return: AH = ???
  5203.     CX = ???
  5204.     DH = ???
  5205.     DL = ???
  5206. Note:    available only when popped up
  5207. SeeAlso: AX=FFC3h
  5208. ----------16FFC3-----------------------------
  5209. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5210.     AX = FFC3h
  5211.     ???
  5212. Return: AH = ???
  5213.     CX = ???
  5214.     DH = ???
  5215.     DL = ???
  5216. Note:    available only when popped up
  5217. SeeAlso: AX=FFC2h
  5218. ----------16FFC4-----------------------------
  5219. INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
  5220.     AX = FFC4h
  5221. Return: AL = ???
  5222.     BX = segment of scratch space???
  5223.     CX = segment of stored screen data (section covered by window???)
  5224.     DX = segment of window parameters for ???
  5225.     ES:BP -> ???
  5226. Note:    available only when popped up in versions prior to 6.0
  5227. ----------16FFC5-----------------------------
  5228. INT 16 - PC Tools v5.1+ DESKTOP API - CHECK WHETHER DESKTOP LOADED RESIDENT
  5229.     AX = FFC5h
  5230. Return: BL = nonzero if loaded resident
  5231.        = 00h if nonresident
  5232. Note:    available only when popped up; should call AX=FFEFh first to ensure
  5233.       that DESKTOP is active
  5234. SeeAlso: AX=FFEFh,AX=FFF3h
  5235. ----------16FFC6-----------------------------
  5236. INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
  5237.     AX = FFC6h
  5238.     BL = new value for ???
  5239. ----------16FFC7-----------------------------
  5240. INT 16 - PC Tools v5.1+ DESKTOP API - REMOVE WINDOW
  5241.     AX = FFC7h
  5242.     ???
  5243. Return: ???
  5244. ----------16FFC8-----------------------------
  5245. INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
  5246.     AX = FFC8h
  5247. Return: DS:SI -> ???
  5248. Note:    valid only while popped up
  5249. ----------16FFC9-----------------------------
  5250. INT 16 - PC Tools v5.1+ DESKTOP API - COPY DATA TO CLIPBOARD
  5251.     AX = FFC9h
  5252.     DS:SI -> characters to store in clipboard
  5253.     CX = size in bytes
  5254. Return: CF set on error
  5255. Notes:    available only when popped up
  5256.     while copying, bytes of 00h and 0Ah are skipped
  5257. ----------16FFCA-----------------------------
  5258. INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
  5259.     AX = FFCAh
  5260.     DX = ???
  5261. Return: AX destroyed
  5262. Note:    available only when popped up
  5263. ----------16FFCB-----------------------------
  5264. INT 16 - PC Tools v5.1+ DESKTOP API - SELECT WINDOW PARAMETERS???
  5265.     AX = FFCBh
  5266.     DX = window specifier???
  5267. Return: AX destroyed
  5268. Note:    available only when popped up
  5269. SeeAlso: AX=FFB5h
  5270. ----------16FFCC-----------------------------
  5271. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY ASCIZ STRING CENTERED IN WINDOW
  5272.     AX = FFCCh
  5273.     DS:SI -> ASCIZ string
  5274. Return: AX = ???
  5275.     CX = ???
  5276.     ES:DI -> address past last character displayed (v5.1/5.5)
  5277.           -> ??? on menu bar (v6.0)
  5278. ----------16FFCD-----------------------------
  5279. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5280.     AX = FFCDh
  5281.     DS:DX -> ???
  5282. Return: ???
  5283. Note:    available only when popped up
  5284. ----------16FFCE-----------------------------
  5285. INT 16 - PC Tools v5.1+ DESKTOP API - SET ??? DELAYS
  5286.     AX = FFCEh
  5287.     CX = ???
  5288. Return: nothing???
  5289. ----------16FFCF-----------------------------
  5290. INT 16 - PC Tools v5.1+ DESKTOP API - CLOSE PRINTER/PRINT FILE
  5291.     AX = FFCFh
  5292. Note:    available only when popped up
  5293. ----------16FFD0-----------------------------
  5294. INT 16 - PC Tools v5.1+ DESKTOP API - PREPARE TO PRINT???
  5295.     AX = FFD0h
  5296.     ???
  5297. Return: ???
  5298. Note:    available only when popped up
  5299. ----------16FFD1-----------------------------
  5300. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY PRINT OPTIONS MENU
  5301.     AX = FFD1h
  5302. Return: BX = number of copies
  5303.     DX = destination
  5304.         00h cancel
  5305.         01h LPT1
  5306.         02h LPT2
  5307.         03h    LPT3
  5308.         04h    COM1
  5309.         05h    COM2
  5310.         06h disk file
  5311. Note:    available only when popped up
  5312. ----------16FFD2-----------------------------
  5313. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5314.     AX = FFD2h
  5315.     BX = ???
  5316. Return: BL = ???
  5317. Note:    available only when popped up
  5318. ----------16FFD3-----------------------------
  5319. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5320.     AX = FFD3h
  5321.     DS:SI -> 92-byte data record for ???
  5322. Return: ???
  5323. ----------16FFD4BH3C-------------------------
  5324. INT 16 - PC Tools v5.1+ DESKTOP API - CREATE/OPEN/DELETE FILE
  5325.     AX = FFD4h
  5326.     BH = 3Ch create file (with no attributes)
  5327.          3Dh open file
  5328.          41h delete file
  5329.     BL = access mode
  5330.          00h read only
  5331.          01h write only
  5332.          02h read/write
  5333.     DS:SI -> ASCIZ filename
  5334. Return: BX = file handle
  5335.         0000h on error
  5336. Note:    operation is attempted in (in order) the directory from which the
  5337.       desktop was started/run???, the directory specified with the
  5338.       filename, X:\PCTOOLS\, and X:\
  5339. ----------16FFD5-----------------------------
  5340. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5341.     AX = FFD5h
  5342.     ???
  5343. Return: ???
  5344. Note:    available only when popped up
  5345. ----------16FFD6-----------------------------
  5346. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5347.     AX = FFD6h
  5348.     BX = ???
  5349.     CX = ???
  5350.     DX = offset in ???
  5351.     ???
  5352. Return: ???
  5353. Note:    available only when popped up
  5354. ----------16FFD7-----------------------------
  5355. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5356.     AX = FFD7h
  5357.     ???
  5358. Return: BL = ???
  5359. Note:    available only when popped up
  5360. ----------16FFD8-----------------------------
  5361. INT 16 - PC Tools v5.1+ DESKTOP API - SAFE CREATE FILE
  5362.     AX = FFD8h
  5363.     DS:BX -> ASCIZ filename
  5364. Return: BX = file handle
  5365.         0000h on error
  5366. Note:    pops up confirmation menu if file already exists
  5367.     only available when popped up???
  5368. ----------16FFD9-----------------------------
  5369. INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
  5370.     AX = FFD9h
  5371. Return: AX = ???
  5372. Note:    available only when popped up
  5373. ----------16FFDA-----------------------------
  5374. INT 16 - PC Tools v5.1+ DESKTOP API - GET NAME OF LAST FILE OPENED
  5375.     AX = FFDAh
  5376.     DS:SI -> ??? (v5.1/5.5 only)
  5377. Return: DS:SI -> filename
  5378. ----------16FFDB-----------------------------
  5379. INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
  5380.     AX = FFDBh
  5381.     BL = ???
  5382. Note:    available only when popped up
  5383. ----------16FFDC-----------------------------
  5384. INT 16 - PC Tools v5.1+ DESKTOP API - UNHOOK
  5385.     AX = FFDCh
  5386. Return: interrupt vectors 09h, 10h (v6.0+), 16h, 1Ch, and 21h restored to
  5387.       original values
  5388. ----------16FFDDBX0000-----------------------
  5389. INT 16 - PC Tools v5.1+ PCShell API - INSTALLATION CHECK
  5390.     AX = FFDDh
  5391.     BX = 0000h
  5392. Return: CX = 5555h 
  5393.     DX = 5555h if PCShell installed in resident mode
  5394. ----------16FFDDBX0001-----------------------
  5395. INT 16 - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  5396.     AX = FFDDh
  5397.     BX = 0001h
  5398. SeeAlso: AX=FFDDh/BX=0003h
  5399. ----------16FFDDBX0002-----------------------
  5400. INT 16 - PC Tools v5.1-5.5 PCShell API - GET ???
  5401.     AX = FFDDh
  5402.     BX = 0002h
  5403. Return: AL = 
  5404.         00h ???
  5405.         01h ???
  5406. Note:    PCShell v6.0+ displays the error message "Incorrect PCRUN version",
  5407.       awaits a keystroke, and aborts the current process
  5408. ----------16FFDDBX0003-----------------------
  5409. INT 16 - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  5410.     AX = FFDDh
  5411.     BX = 0003h
  5412. SeeAlso: AX=FFDDh/BX=0001h
  5413. ----------16FFDDBX0004-----------------------
  5414. INT 16 - PC Tools v5.1+ PCShell API - GET ???
  5415.     AX = FFDDh
  5416.     BX = 0004h
  5417. Return: CF clear if successful
  5418.         DS:SI -> ???
  5419. ----------16FFDDBX0005-----------------------
  5420. INT 16 - PC Tools v5.1+ PCShell API - ???
  5421.     AX = FFDDh
  5422.     BX = 0005h
  5423.     ???
  5424. Return: ???
  5425. ----------16FFDDBX0006-----------------------
  5426. INT 16 - PC Tools v5.1+ PCShell API - ???
  5427.     AX = FFDDh
  5428.     BX = 0006h
  5429.     ???
  5430. Return: ???
  5431. ----------16FFDDBX0007-----------------------
  5432. INT 16 - PC Tools v5.1+ PCShell API - SET ??? FLAG
  5433.     AX = FFDDh
  5434.     BX = 0007h
  5435. Return: CF clear if successful
  5436. SeeAlso: AX=FFDDh/BX=0008h
  5437. ----------16FFDDBX0008-----------------------
  5438. INT 16 - PC Tools v5.1+ PCShell API - CLEAR ??? FLAG
  5439.     AX = FFDDh
  5440.     BX = 0008h
  5441. Return: ???
  5442. SeeAlso: AX=FFDDh/BX=0007h
  5443. ----------16FFDDBX0009-----------------------
  5444. INT 16 - PC Tools v6.0+ PCShell API - GET PCRUN PARAMETERS
  5445.     AX = FFDDh
  5446.     BX = 0009h
  5447. Return: CF clear if successful
  5448.         DS:SI -> list of pointers (see below)
  5449.  
  5450. Format of returned pointer list:
  5451. Offset    Size    Description
  5452.  00h    WORD    offset of WORD containing ???
  5453.  02h    WORD    offset of name of program to execute
  5454.  04h    WORD    offset of 80-byte buffer for ???
  5455.  06h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  5456.  08h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  5457. ----------16FFDDBX000A-----------------------
  5458. INT 16 - PC Tools v6.0+ PCRUN API - INSTALLATION CHECK
  5459.     AX = FFDDh
  5460.     BX = 000Ah
  5461. Return: CX = 5555h if running
  5462.     DX = 5555h
  5463. Note:    also sets a flag
  5464. ----------16FFDDBX000B-----------------------
  5465. INT 16 - PC Tools v6.0+ PCRUN API - ???
  5466.     AX = FFDDh
  5467.     BX = 000Bh
  5468.     ???
  5469. Return: CX = 5555h if PCRUN active
  5470.     DX = 5555h
  5471. Note:    also clears flag set by AX=FFDDh/BX=000Ah
  5472. ----------16FFDE-----------------------------
  5473. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY POPUP MENU
  5474.     AX = FFDEh
  5475.     DS:DX -> menu description (must be on a paragraph boundary)
  5476. Return: AX = ???
  5477.         AL seems to be the number of the selected button
  5478. Note:    available only when popped up
  5479. SeeAlso: AX=FFEEh
  5480. ----------16FFDF-----------------------------
  5481. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5482.     AX = FFDFh
  5483.     ???
  5484. Return: ???
  5485. ----------16FFE0-----------------------------
  5486. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5487.     AX = FFE0h
  5488.     CX = ???
  5489.     DX = ???
  5490. Note:    available only when popped up
  5491. ----------16FFE1-----------------------------
  5492. INT 16 - PC Tools v5.1+ DESKTOP API - BEEP
  5493.     AX = FFE1h
  5494. ----------16FFE2-----------------------------
  5495. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5496.     AX = FFE2h
  5497.     DX = ???
  5498. Return: ???
  5499. Note:    available only when popped up
  5500. ----------16FFE3-----------------------------
  5501. INT 16 - PC Tools v5.1+ DESKTOP API - PRINT CHARACTER
  5502.     AX = FFE3h
  5503.     BL = character to print to currently open printer or print file
  5504. Return: CF set on error
  5505. Note:    available only when popped up
  5506. SeeAlso: INT 17/AH=00h
  5507. ----------16FFE4-----------------------------
  5508. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5509.     AX = FFE4h
  5510.     DX = segment of ???
  5511. Return: ???
  5512. Note:    available only when popped up
  5513. ----------16FFE5-----------------------------
  5514. INT 16 - PC Tools v5.1+ DESKTOP API - POP UP FILE SELECTION MENU
  5515.     AX = FFE5h
  5516.     DS:SI -> ASCIZ wildcard filespec followed by ASCIZ menu title
  5517.     DX = segment of window parameters???
  5518. Return: AX = DOS file handle for file
  5519.         DS:DX -> filename???
  5520.        = FFFFh if cancelled by user
  5521. Note:    available only when popped up
  5522. SeeAlso: AX=FFDAh
  5523. ----------16FFE6-----------------------------
  5524. INT 16 - PC Tools v5.1+ DESKTOP API - CHECK FOR AND GET KEYSTROKE
  5525.     AX = FFE6h
  5526. Return: AX = 0000h if no key available
  5527.          else  BIOS keycode
  5528. Notes:    available only when popped up
  5529.     invokes INT 28 idle interrupt before checking for key
  5530. ----------16FFE7-----------------------------
  5531. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5532.     AX = FFE7h
  5533.     BX = segment of ???
  5534. Return: ???
  5535. Note:    available only when popped up
  5536. ----------16FFE8-----------------------------
  5537. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY NUMBER
  5538.     AX = FFE8h
  5539.     CX = number
  5540.     DH = attribute
  5541.     DS:SI -> destination for ASCII number
  5542. Return: DS:SI buffer filled in with alternating characters and attributes
  5543. ----------16FFE9-----------------------------
  5544. INT 16 - PC Tools v5.1+ DESKTOP API - GET FILE LIST???
  5545.     AX = FFE9h
  5546. Return: BX = segment of file/directory list (14 bytes per file, NUL-padded)
  5547. Note:    available only when popped up
  5548. ----------16FFEA-----------------------------
  5549. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY COUNTED STRING
  5550.     AX = FFEAh
  5551.     DS:SI -> counted string (count byte followed by string)
  5552. Return: ???
  5553. Note:    available only when popped up
  5554. ----------16FFEB-----------------------------
  5555. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5556.     AX = FFEBh
  5557.     ???
  5558. Return: ???
  5559. ----------16FFEC-----------------------------
  5560. INT 16 - PC Tools v5.1+ DESKTOP API - GET KEY
  5561.     AX = FFECh
  5562.     DS:SI -> FAR routine to ???
  5563.     BX = ???
  5564.     ???
  5565. Return: AX = keystroke
  5566.         FFFFh if F10 pressed to go to menu
  5567. Notes:    available only when popped up
  5568.     invokes INT 28 while waiting for keystroke
  5569.     F10 is hotkey to Desktop menu
  5570. ----------16FFED-----------------------------
  5571. INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
  5572.     AX = FFEDh
  5573. Return: AX = ???
  5574. Note:    available only when popped up
  5575. ----------16FFEE-----------------------------
  5576. INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE PULLDOWN MENUS
  5577.     AX = FFEEh
  5578.     DS:SI -> pulldown menu system description (see below)
  5579. Return: AX destroyed
  5580. Notes:    available only when popped up
  5581.     if the accessory does not need any menu items of its own, it should
  5582.       call AX=FFFAh instead
  5583. SeeAlso: AX=FFF7h,AX=FFFAh
  5584.  
  5585. Format of pulldown menu system description:
  5586. Offset    Size    Description
  5587.  00h    WORD    offset of menu bar contents (counted string)
  5588.  02h    WORD    number of items on menu bar
  5589.  04h 10 BYTEs    scan codes for hotkeying to each of up to ten menu items
  5590.  0Eh 10    BYTEs    which character to highlight in each menu item (01h=first)
  5591.  18h    WORD    offset of first menu definition (see below)
  5592.  1Ah    WORD    offset of second menu definition
  5593.     ...
  5594.  
  5595. Format of menu definition:
  5596. Offset    Size    Description
  5597.  00h    WORD    offset of menu contents (see below)
  5598.  02h    WORD    number of entries in menu
  5599.  04h    for each entry:
  5600.         Offset    Size    Description
  5601.          00h    BYTE    scancode of Alt-key to invoke entry
  5602.          01h    BYTE    character to highlight (01h=first, etc)
  5603.          02h    WORD    offset of FAR routine to handle selection
  5604.  
  5605. Format of menu contents:
  5606. Offset    Size    Description
  5607.  00h    BYTE    number of lines in menu
  5608.  01h    BYTE    width of menu
  5609.  02h  N BYTEs    counted strings, one for each line in menu
  5610. ----------16FFEFCX0000-----------------------
  5611. INT 16 - PC Tools v5.1+ DESKTOP API - INSTALLATION CHECK
  5612.     AX = FFEFh
  5613.     CX = 0000h
  5614. Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
  5615.         BX = segment of resident portion
  5616.         AX = ??? (v5.1/5.5 only)
  5617. SeeAlso: AX=FEEFh,AX=FFC5h,AX=FFF3h
  5618. ----------16FFF0-----------------------------
  5619. INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
  5620.     AX = FFF0h
  5621.     DX = ???
  5622. Return: AX destroyed
  5623. Note:    available only when popped up
  5624. ----------16FFF1BX0000-----------------------
  5625. INT 16 - PC Tools v5.1+ DESKTOP API - ALTERNATE INSTALLATION CHECK
  5626.     AX = FFF1h
  5627.     BX = 0000h  leave ??? flag as is
  5628.         nonzero set ??? flag
  5629. Return: CX = 5555h if installed
  5630.     DX = 5555h
  5631. ----------16FFF2-----------------------------
  5632. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY HELP LINE
  5633.     AX = FFF2h
  5634.     DS:SI -> ASCIZ function key label string (each label preceded by '[')
  5635.         or help text
  5636. Return: AX destroyed
  5637. Notes:    available only when popped up
  5638.     if the specified string does not start with '[', it is displayed
  5639.       centered on the bottom line, else the function key labels are shown
  5640. ----------16FFF3-----------------------------
  5641. INT 16 - PC Tools v5.1+ DESKTOP API - PREPARE TO UNLOAD RESIDENT DESKTOP
  5642.     AX = FFF3h
  5643. Note:    releases any EMS being used; restores video mode, page, and cursor
  5644.       shape; and restores interrupt vectors
  5645. SeeAlso: AX=FFC5h,AX=FFEFh
  5646. ----------16FFF4-----------------------------
  5647. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  5648.     AX = FFF4h
  5649.     ???
  5650. Return: ???
  5651. Note:    available only when popped up
  5652. SeeAlso: AX=FFF6h
  5653. ----------16FFF5-----------------------------
  5654. INT 16 - PC Tools v5.1+ DESKTOP API - GET SCREEN ATTRIBUTE ARRAY
  5655.     AX = FFF5h
  5656. Return: ES:BX -> screen attributes data structure (see below)
  5657.     AL = ??? (v6.0+)
  5658.  
  5659. Format of attribute data structure:
  5660. Offset    Size    Description
  5661.  -1    BYTE    attribute for desktop background
  5662.  00h    BYTE    attribute for normal characters on desktop menu
  5663.  01h    BYTE    attribute for highlighted characters on desktop menu
  5664.  02h  5    BYTEs    ???
  5665.  07h    BYTE    attribute for dialog boxes
  5666.  08h 15 BYTEs    ???
  5667.  17h    BYTE    attribute for message boxes
  5668. ----------16FFF6-----------------------------
  5669. INT 16 - PC Tools v5.1+ DESKTOP API - INVOKE NOTEPAD EDITOR
  5670.     AX = FFF6h
  5671.     DS = segment of editor buffer structure (see below)
  5672.     BX = ???
  5673.     DX = segment of window parameters structure (see AX=FFB5h)
  5674. Return: ???
  5675. Note:    available only when popped up
  5676. SeeAlso: AX=FFF4h
  5677.  
  5678. Format of editor buffer structure:
  5679. Offset    Size    Description
  5680.  00h    WORD    offset of current cursor position in buffer segment
  5681.  02h  2 BYTEs    ???
  5682.  04h    WORD    offset of beginning of file data in buffer segment
  5683.  06h 10 BYTEs    ???
  5684.  10h  N BYTEs    ASCIZ name of file being edited
  5685. ----------16FFF7-----------------------------
  5686. INT 16 - PC Tools v5.1+ DESKTOP API - PROCESS MENU BAR ENTRY???
  5687.     AX = FFF7h
  5688.     DS:SI -> ???
  5689.     ???
  5690. Return: ???
  5691. Notes:    available only when popped up
  5692.     performs input processing on the menu bar set up with AX=FFEEh
  5693. SeeAlso: AX=FFEEh,AX=FFFBh
  5694. ----------16FFF8-----------------------------
  5695. INT 16 - PC Tools v5.1+ DESKTOP API - DRAW EMPTY WINDOW
  5696.     AX = FFF8h
  5697.     DS:0000h -> window parameters structure (see AX=FFB5h)
  5698.     DS:BX -> DWORD to store address of ??? on screen
  5699. Return: ???
  5700. ----------16FFF9-----------------------------
  5701. INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE SCREEN REFRESH ROUTINE
  5702.     AX = FFF9h
  5703.     ES:BX -> FAR routine to redisplay the utility's window
  5704. Note:    available only when popped up
  5705. ----------16FFFA-----------------------------
  5706. INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE STANDARD PULLDOWN MENUS
  5707.     AX = FFFAh
  5708. Notes:    available only when popped up
  5709.     adds the "Window" option to the "Desktop" option which is the only one
  5710.       available when no accessories are active.  Unlike AX=FFEEh, no
  5711.       additional menu items are added between "Desktop" and "Window"
  5712. SeeAlso: AX=FFEEh,AX=FFFBh
  5713. ----------16FFFB-----------------------------
  5714. INT 16 - PC Tools v5.1+ DESKTOP API - PROCESS STANDARD MENU BAR
  5715.     AX = FFFBh
  5716. Return: ???
  5717. Notes:    available only when popped up
  5718.     performs input processing on the standard menu bar set up with AX=FFFAh
  5719. SeeAlso: AX=FFF7h
  5720. ----------16FFFC-----------------------------
  5721. INT 16 - PC Tools v5.1+ DESKTOP API - GET HOTKEYS AND KEYBOARD VECTOR
  5722.     AX = FFFCh
  5723. Return: ES:BX -> hotkey table (see below)
  5724.     DS:DX = original INT 9 vector
  5725.  
  5726. Format of hotkey table:
  5727. Offset    Size    Description
  5728.  00h  2 BYTEs    scancode/shift state for desktop hotkey
  5729.  02h  2 BYTEs    scancode/shift state for clipboard paste key
  5730.  04h  2 BYTEs    scancode/shift state for clipboard copy key
  5731.  06h  2 BYTEs    scancode/shift state for screen autodial key
  5732. ----------16FFFD-----------------------------
  5733. INT 16 - PC Tools v5.1+ DESKTOP API - COPY ???
  5734.     AX = FFFDh
  5735. Return: AX destroyed
  5736. Note:    copies 4000 bytes from ??? to ??? under certain circumstances
  5737. ----------16FFFE-----------------------------
  5738. INT 16 - PC Tools v5.1+ DESKTOP API - SHOW MOUSE CURSOR
  5739.     AX = FFFEh
  5740. SeeAlso: AX=FFFFh,INT 33/AX=0001h
  5741. ----------16FFFF-----------------------------
  5742. INT 16 - PC Tools v5.1+ DESKTOP API - HIDE MOUSE CURSOR
  5743.     AX = FFFFh
  5744. SeeAlso: AX=FFFEh,INT 33/AX=0002h
  5745. ----------17----DX0ABC-----------------------
  5746. INT 17 - PRINTER - LPTx v5.x INSTALLATION CHECK
  5747.     DX = 0ABCh
  5748. Return: AX = AAAAh
  5749.     DX = BAAAh
  5750.     ES = code segment of resident portion
  5751. ----------17----DX0B90-----------------------
  5752. INT 17 - PRINTER - LPTx v6.x INSTALLATION CHECK
  5753.     DX = 0B90h
  5754. Return: DX = ABBBh
  5755.     ES = code segment of resident portion
  5756. ----------17----DX0B91-----------------------
  5757. INT 17 - PRINTER - LPTx v7.x INSTALLATION CHECK
  5758.     DX = 0B91h
  5759. Return: DX = ABCBh
  5760.     ES = code segment of resident portion
  5761. ----------17----DX0F5F-----------------------
  5762. INT 17 - PRINTER - LPTx v4.x INSTALLATION CHECK
  5763.     DX = 0F5Fh
  5764. Return: AX = AAAAh
  5765.     DX = F555h
  5766.     ES = code segment of resident portion
  5767. ----------1700-------------------------------
  5768. INT 17 - PRINTER - WRITE CHARACTER
  5769.     AH = 00h
  5770.     AL = character to write
  5771.     DX = printer number (00h-02h)
  5772. Return: AH = printer status
  5773.         bit 7: not busy
  5774.         6: acknowledge
  5775.         5: out of paper
  5776.         4: selected
  5777.         3: I/O error
  5778.         2: unused
  5779.         1: unused
  5780.         0: timeout
  5781. SeeAlso: AH=F1h,INT 16/AX=FFE3h,INT 1A/AH=11h"NEC"
  5782. ----------1701-------------------------------
  5783. INT 17 - PRINTER - INITIALIZE PORT
  5784.     AH = 01h
  5785.     DX = printer number (00h-02h)
  5786. Return: AH = printer status (see AH=00h)
  5787. SeeAlso: AH=02h,INT 1A/AH=10h"NEC"
  5788. ----------1702-------------------------------
  5789. INT 17 - PRINTER - GET STATUS
  5790.     AH = 02h
  5791.     DX = printer number (00h-02h)
  5792. Return: AH = printer status (see AH=00h)
  5793. SeeAlso: AH=01h,AH=F2h,INT 1A/AH=12h"NEC"
  5794. ----------1702--DX0000-----------------------
  5795. INT 17 - INSET - INSTALLATION CHECK
  5796.     AH = 02h
  5797.     DX = 0000h
  5798.     CX = 07C3h (1987d)
  5799. Return: CX = 07C2h (1986d) if installed
  5800. Note:    INSET is a text/graphics integration program
  5801. ----------1720-------------------------------
  5802. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER
  5803.     AH = 20h
  5804.     AL = function number
  5805.         00h installation check
  5806.             Return: BX = driver version number (BH=major,BL=minor)
  5807.             CH = ??? (00h)
  5808.             CL = ???
  5809.             DX = ??? (0100h)
  5810.         Note: also enables the remaining functions
  5811.         01h set ??? flag
  5812.         02h get information
  5813.             CL = subfunction
  5814.             00h get printer type
  5815.                 Return: ES:DI -> ASCIZ printer name
  5816.             01h get paper size
  5817.                 DX = size index
  5818.             Return: ES:DI -> ASCIZ paper size description
  5819.             02h get ???
  5820.                 Return: BX = ???
  5821.             03h get printer information???
  5822.                 DX = ???
  5823.             ES:BX -> buffer for ??? (min 134 bytes)
  5824.         03h ???
  5825.             ES:BX -> ???
  5826.         04h get ???
  5827.             Return: ES:DI -> ???
  5828.         05h advance printer to next page
  5829.             Note: also clears flag set by function 01h
  5830.         06h advance printer to next page and shut down
  5831.             Note:    also clears flag set by function 01h and disables
  5832.               functions other than 00h
  5833.         07h not implemented, AX returned unchanged
  5834.     BL = printer number???
  5835. Return: AX = status
  5836.         0000h successful
  5837.         0001h invalid printer???
  5838.         0002h ???
  5839.         0003h invalid subfunction
  5840.         0005h driver disabled, must call function 00h first
  5841.         0009h unknown printer error
  5842.         000Bh printer not selected
  5843.         000Ch printer out of paper
  5844.         000Eh error while writing to serial printer
  5845.         000Fh ???
  5846.         0010h invalid function number
  5847.         0011h value out of range
  5848. ----------172400-----------------------------
  5849. INT 17 - Shamrock Software NET.24 v3.11+ - ENABLE/DISABLE API FUNCTIONS
  5850.     AX = 2400h
  5851.     DL = new state
  5852.         00h disabled
  5853.         01h enabled
  5854. Return: DL = 24h if installed
  5855.     DH = minor version number
  5856.     CX = network address of this machine
  5857.     AL = status
  5858.         00h successful
  5859.         01h timeout
  5860.         02h header error
  5861.         03h data error
  5862.         04h busy
  5863.         05h invalid parameters
  5864. SeeAlso: AX=2403h,INT 16/AX=4500h
  5865. ----------172401-----------------------------
  5866. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, NO HANDSHAKE
  5867.     AX = 2401h
  5868.     BL = timeout in clock ticks
  5869. Return: AL = status (see AX=2400h)
  5870.     DX:BX -> receive buffer
  5871. SeeAlso: AX=2402h,AX=2404h,AX=2408h
  5872. ----------172402-----------------------------
  5873. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT BLOCK, NO HANDSHAKE
  5874.     AX = 2402h
  5875.     transmit buffer filled (see AX=2403h)
  5876. Return: AL = status (see AX=2400h)
  5877. SeeAlso: AX=2401h,AX=2403h,AX=2404h,AX=2409h
  5878. ----------172403-----------------------------
  5879. INT 17 - Shamrock Software NET.24 v3.11+ - GET STATUS AND TRANSMISSION BUFFER
  5880.     AX = 2403h
  5881. Return: AL = status (see AX=2400h)
  5882.     CX = number of characters in receive ring buffer
  5883.     DX:BX -> transmit buffer
  5884. SeeAlso: AX=2400h,AX=2402h
  5885. ----------172404-----------------------------
  5886. INT 17 - Shamrock Software NET.24 v3.11+ - SEND ACK BLOCK
  5887.     AX = 2404h
  5888.     BX = target address
  5889. Return: AL = status (see AX=2400h)
  5890. SeeAlso: AX=2402h,AX=2405h
  5891. ----------172405-----------------------------
  5892. INT 17 - Shamrock Software NET.24 v3.11+ - SEND NAK BLOCK
  5893.     AX = 2405h
  5894.     BX = target address
  5895. Return: AL = status (see AX=2400h)
  5896. SeeAlso: AX=2402h,AX=2404h
  5897. ----------172406-----------------------------
  5898. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED RECEIVE
  5899.     AX = 2406h
  5900. Return: AL = status (see AX=2400h)
  5901. SeeAlso: AX=2407h,AX=240Ah
  5902. ----------172407-----------------------------
  5903. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE CHARACTER FROM REMOTE
  5904.     AX = 2407h
  5905. Return: AL = status (see also AX=2400h)
  5906.         06h end of data
  5907.     DL = received character
  5908. SeeAlso: AX=2406h
  5909. ----------172408-----------------------------
  5910. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, WITH HANDSHAKE
  5911.     AX = 2408h
  5912. Return: AL = status (see also AX=2400h)
  5913.         06h end of data
  5914.     CX = number of bytes in receive buffer
  5915.     DX:SI -> receive buffer
  5916. SeeAlso: AX=2401h,AX=2405h,AX=2409h
  5917. ----------172409-----------------------------
  5918. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT COMMAND, WITH HANDSHAKE
  5919.     AX = 2409h
  5920.     BX = target address
  5921.     CX = number of data bytes
  5922.     DL = command code to send
  5923.     DS:SI -> data bytes for command
  5924. Return: AL = status (see also AX=2400h)
  5925.         03h no response
  5926.         06h remote currently unable to perform command
  5927. SeeAlso: AX=2405h,AX=2408h
  5928. ----------17240A-----------------------------
  5929. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED TRANSMIT
  5930.     AX = 240Ah
  5931. Return: AL = status (see AX=2400h)
  5932. SeeAlso: AX=2406h,AX=240Bh,AX=240Ch
  5933. ----------17240B-----------------------------
  5934. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT SINGLE CHARACTER TO REMOTE
  5935.     AX = 240Bh
  5936.     DL = character to send
  5937. Return: AL = status (see also AX=2400h)
  5938.         03h transmission error
  5939.         06h write error
  5940. SeeAlso: AX=2407h,AX=240Ah,AX=240Ch
  5941. ----------17240C-----------------------------
  5942. INT 17 - Shamrock Software NET.24 v3.11+ - END CHARACTER-ORIENTED TRANSMIT
  5943.     AX = 240Ch
  5944. Return: AL = status (see also AX=2400h)
  5945.         03h transmission error
  5946.         06h remote breaks connection
  5947. SeeAlso: AX=240Ah,AX=240Bh
  5948. ----------1751-------------------------------
  5949. INT 17 - AX (Japanese AT) PRINTER - JIS/Shift-JIS CONVERSION
  5950.     AH = 51h
  5951.     ???
  5952. Return: ???
  5953. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  5954.       characters to Shift-JIS characters, and the other performs the
  5955.       opposite conversion
  5956. SeeAlso: AH=52h
  5957. ----------1752-------------------------------
  5958. INT 17 - AX (Japanese AT) PRINTER - JIS/Shift-JIS CONVERSION
  5959.     AH = 52h
  5960.     ???
  5961. Return: ???
  5962. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  5963.       characters to Shift-JIS characters, and the other performs the
  5964.       opposite conversion
  5965. SeeAlso: AH=51h
  5966. ----------1760-------------------------------
  5967. INT 17 - FLASHUP.COM - INSTALLATION CHECK
  5968.     AH = 60h
  5969. Return: AL = 60h
  5970.     DX = CS of resident code
  5971. Notes:    FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co.
  5972.     FLASHUP also hooks INT 10 and receives commands via INT 10/AH=09h,0Ah
  5973.       consisting of an 80h followed by the actual command
  5974. SeeAlso: INT 10/AH=09h,INT 10/AH=0Ah
  5975. ----------1761-------------------------------
  5976. INT 17 - SPEEDSCR.COM - INSTALLATION CHECK
  5977.     AH = 61h
  5978. Return: AL = 61h
  5979.     DX = CS of resident code
  5980. Note:    SPEEDSCR.COM is by The Software Bottling Co.
  5981. ----------1781-------------------------------
  5982. INT 17 - Alloy NTNX, MW386 - CANCEL JOBS FOR CURRENT USER
  5983.     AH = 81h
  5984.     AL = 00h (NTNX compatibility mode)
  5985.     CL = number of jobs to cancel
  5986. Return: AL = status
  5987.         00h success
  5988.         01h..7Fh warning
  5989.         80h general failure
  5990.         81h host overloaded (NTNX only)
  5991.         82h module busy (NTNX only)
  5992.         83h host busy (NTNX only)
  5993.         84h re-entry flag set
  5994.         85h invalid request
  5995.         86h invalid printer
  5996.         87h invalid process ID
  5997.         89h access denied
  5998.         8Ah option not available for given port type
  5999.         8Bh option not available for given task type
  6000.         91h printer busy
  6001.         C2h file not found
  6002.         C3h path not found
  6003.         C4h file access failure
  6004. Note:    cancels the last CL printouts for the current task
  6005. SeeAlso: AH=82h
  6006. ----------1782-------------------------------
  6007. INT 17 - Alloy NTNX, MW386 - CANCEL ALL JOBS FOR CURRENT USER
  6008.     AH = 82h
  6009.     AL = 00h (NTNX compatibility mode)
  6010. Return: AL = status (see AH=81h)
  6011. SeeAlso: AH=81h
  6012. ----------1783-------------------------------
  6013. INT 17 - Alloy NTNX, MW386 - SET NUMBER OF COPIES
  6014.     AH = 83h
  6015.     AL = mode
  6016.         00h NTNX compatibility
  6017.         CL = number of copies (max 99, default 1)
  6018.         02h MW386 v2+
  6019.         BX = logical device number
  6020.             00h-03h = LPT1-LPT4
  6021.             04h-07h = COM1-COM4
  6022.         CX = number of copies
  6023. Return: AL = status (see AH=81h)
  6024. Note:    in NTNX compatibility mode, this function only affects LPT1
  6025. ----------1784-------------------------------
  6026. INT 17 - Alloy NTNX, MW386 - GENERATE PRINT BREAK
  6027.     AH = 84h
  6028.     AL = mode
  6029.         00h NTNX compatibility
  6030.         02h MW386 v2+
  6031.         BX = logical device number
  6032.             00h-03h = LPT1-LPT4
  6033.             04h-07h = COM1-COM4
  6034. Note:    closes spool file and tells spooler to queue the print job (LPT1 only
  6035.       under MW386 in NTNX compatibility mode)
  6036. ----------1787-------------------------------
  6037. INT 17 - Alloy NTNX - SET INDOS POINTER
  6038.     AH = 87h
  6039.     AL = 00h
  6040.     CX:BX -> buffer for user-written printer drivers
  6041. Return: BX,CX destroyed
  6042. Note:    must be executed before the printer is enabled
  6043. SeeAlso: AH=8Ah
  6044. ----------1788-------------------------------
  6045. INT 17 - Alloy NTNX, MW386 - REMOVE PRINTER FROM SPOOLER
  6046.     AH = 88h
  6047.     AL = mode
  6048.         00h NTNX compatibility
  6049.         DX = NTNX printer number
  6050.             00h host LPT1
  6051.             01h host LPT2
  6052.             02h host LPT3
  6053.             03h host LPT4
  6054.             04h host COM1
  6055.             05h host COM2
  6056.             06h user's logical COM2
  6057.             07h user's terminal AUX port
  6058.             08h user's logical COM1 (MW386 only)
  6059.         01h MW386
  6060.         DX = MW386 printer number
  6061. Return: AH = status (see AH=81h)
  6062. Note:    removes specified printer from the spooler's list of printers
  6063. SeeAlso: AH=89h,AH=8Bh
  6064. ----------1789-------------------------------
  6065. INT 17 - Alloy NTNX, MW386 - ADD PRINTER TO SPOOLER
  6066.     AH = 89h
  6067.     AL = mode
  6068.         00h NTNX compatibility
  6069.         DX = NTNX printer number (see AH=88h)
  6070.         01h MW386
  6071.         DX = MW386 printer number
  6072. Return: AL = status (see AH=81h)
  6073. Note:    the specified printer is added to the spooler's list of available
  6074.       printers
  6075. SeeAlso: AH=88h,AH=8Bh
  6076. ----------178A-------------------------------
  6077. INT 17 - Alloy NTNX - ACTIVATE USER-WRITTEN PRINTER DRIVER
  6078.     AH = 8Ah
  6079.     ???
  6080. SeeAlso: AH=92h
  6081. ----------178B-------------------------------
  6082. INT 17 - Alloy MW386 - GET PHYSICAL DEVICE NUMBER FROM NAME
  6083.     AH = 8Bh
  6084.     DS:DX -> ASCIZ printer name
  6085. Return: AL = status (see also AH=81h)
  6086.         00h successful
  6087.         DX = physical device number
  6088. SeeAlso: AH=89h,AH=8Ch,INT 14/AH=20h"Alloy"
  6089. ----------178C-------------------------------
  6090. INT 17 - Alloy MW386 - GET DEVICE NAME FROM PHYSICAL DEVICE NUMBER
  6091.     AH = 8Ch
  6092.     DX = physical device number
  6093.     ES:DI -> 17-byte buffer for ASCIZ device name
  6094. Return: AL = status (see also AH=81h)
  6095.         00h successful
  6096.         ES:DI buffer filled
  6097. SeeAlso: AH=88h,AH=8Bh
  6098. ----------178D-------------------------------
  6099. INT 17 - Alloy NTNX,MW386 - RESET SPOOLER
  6100.     AH = 8Dh
  6101.     AL = 00h
  6102. Notes:    clears all buffers and resets spooler to boot-up values
  6103.     MW386 supports this function for compatibility only; it is a NOP
  6104. Return: AL = status (see AH=81h)
  6105. ----------178E-------------------------------
  6106. INT 17 - Alloy NTNX - GET INT 28 ENTRY POINT
  6107.     AH = 8Eh
  6108.     AL = 00h
  6109. Return: CX:BX -> INT 28 entry point
  6110. SeeAlso: AH=8Fh
  6111. ----------178F-------------------------------
  6112. INT 17 - Alloy NTNX - GET DOS INTERCEPT ENTRY POINT
  6113.     AH = 8Fh
  6114.     AL = 00h
  6115. Return: CX:BX -> DOS intercept routine
  6116. SeeAlso: AH=8Eh
  6117. ----------1790-------------------------------
  6118. INT 17 - Alloy NTNX, MW386 - SPOOL FILE BY NAME
  6119.     AH = 90h
  6120.     AL = mode
  6121.         00h NTNX compatibility
  6122.         DL = printer code (FFh=current) (NTNX, MW386 v1.x only)
  6123.         DH = number of copies (FFh=current) (NTNX, MW386 v1.x only)
  6124.         02h MW386 v2+
  6125.         BX = logical device number
  6126.             00h-03h = LPT1-LPT4
  6127.             04h-07h = COM1-COM4
  6128.     CX:SI -> ASCIZ pathname
  6129. Return: AL = status (see AH=81h)
  6130. Note:    in mode 00h, the file is always sent to logical LPT1
  6131. SeeAlso: AH=A0h
  6132. ----------1791-------------------------------
  6133. INT 17 - Alloy NTNX, MW386 - GET USER NUMBER AND CURRENT PRINTER
  6134.     AH = 91h
  6135.     AL = mode
  6136.         00h NTNX compatibility
  6137.         Return: CX = user number (00h = host)
  6138.             DX = currently selected printer number (00h-08h)
  6139.         01h MW386
  6140.         Return: CX = user number
  6141.             DX = physical dev number of currently selected printer
  6142.         02h MW386 v2+
  6143.         BX = logical device number
  6144.             00h-03h = LPT1-LPT4
  6145.             04h-07h = COM1-COM4
  6146.         Return: CX = user number
  6147.             DX = physical device number
  6148. Return: AL = status (see AH=81h)
  6149. SeeAlso: AH=8Ch
  6150. ----------1792-------------------------------
  6151. INT 17 - Alloy NTNX - CHECK PRINTER DRIVER
  6152.     AH = 92h
  6153.     AL = 00h
  6154.     CL = 00h
  6155. Return: CL = driver state
  6156.         01h initialized
  6157.         80h not initialized
  6158.     AX = status (see AH=81h)
  6159. SeeAlso: AH=8Ah
  6160. ----------1794-------------------------------
  6161. INT 17 - Alloy NTNX, MW386 - SELECT PRINTER
  6162.     AH = 94h
  6163.     AL = mode
  6164.         00h NTNX compatibility
  6165.         DX = NTNX printer number (see AH=88h)
  6166.         01h MW386
  6167.         DX = MW386 printer number
  6168.         02h MW386 v2+
  6169.         BX = logical printer number
  6170.         DX = MW386 printer number
  6171. Return: AL = status (see AH=81h)
  6172. Note:    modes 00h and 01h affect only logical LPT1
  6173. SeeAlso: AH=8Bh,AH=95h
  6174. ----------1795-------------------------------
  6175. INT 17 - Alloy NTNX, MW386 - GET CURRENT PRINTER
  6176.     AH = 95h
  6177.     AL = mode
  6178.         00h NTNX compatibility
  6179.         Return: DX = NTNX printer number (see AH=88h)
  6180.                 (FFFFh if current printer not compatible with NTNX)
  6181.         01h MW386
  6182.         Return: DX = MW386 printer number
  6183.         02h MW386 v2+
  6184.         BX = logical device number
  6185.             00h-03h = LPT1-LPT4
  6186.             04h-07h = COM1-COM4
  6187.         Return: DX = MW386 printer number (FFFFh = none)
  6188. Return: AL = status (see AH=81h)
  6189. Note:    modes 00h and 01h return the printer number of logical LPT1 only
  6190. SeeAlso: AH=94h
  6191. ----------1796-------------------------------
  6192. INT 17 - Alloy NTNX - SET SERIAL PORT PARAMETERS
  6193.     AH = 96h
  6194.     AL = 00h
  6195. Note:    documentation states that this is a NOP, doing only XOR AX,AX before
  6196.       returning
  6197. SeeAlso: INT 14/AH=24h
  6198. ----------1797-------------------------------
  6199. INT 17 - Alloy NTNX, MW386 - SET DATA DRIVEN PRINT BREAK
  6200.     AH = 97h
  6201.     AL = mode
  6202.         00h NTNX compatibility
  6203.         02h MW386 v2+
  6204.         BX = logical device number
  6205.             00h-03h = LPT1-LPT4
  6206.             04h-07h = COM1-COM4
  6207.     CH,CL,DH = three character break sequence
  6208.     DL = subfunction
  6209.         00h set break string
  6210.         else reset break
  6211. Return: AL = status (see AH=81h)
  6212. Notes:    mode 00h affects only logical LPT1
  6213.     when the break string is encountered, the spool file will be closed and
  6214.       queued for printing automatically
  6215.     the break string is not permanently saved, and will be reset each time
  6216.       MW386 or the user is rebooted
  6217. SeeAlso: AH=9Bh
  6218. ----------1798-------------------------------
  6219. INT 17 - Alloy NTNX,MW386 - RESTART PRINTER
  6220.     AH = 98h
  6221.     AL = 00h
  6222.     DL = printer number (FFh=current)
  6223. Return: AL = status
  6224.         00h successful
  6225.         01h incorrect printer
  6226.         02h task not found
  6227. Note:    MW386 supports this function for compatibility only; it is a NOP
  6228. ----------1799-------------------------------
  6229. INT 17 - Alloy NTNX, MW386 - GET/SET PRINTER MODE
  6230.     AH = 99h
  6231.     AL = mode
  6232.         00h NTNX compatibility
  6233.         DL = NTNX printer number (see AH=88h)
  6234.             (FFh = task's current logical LPT1)
  6235.         DH = mode
  6236.             bit 0: get mode if 1, set mode if 0
  6237.             1: private ("attached")
  6238.             2: direct instead of spooled
  6239.             3-7 reserved (0)
  6240.         01h MW386
  6241.         DX = MW386 printer number
  6242.         CL = mode (as for DH above)
  6243. Return: AL = status (see AH=81h)
  6244.     DH = mode (bits 1 and 2 set as above)
  6245.     DL = printer owner's user number if not spooled
  6246. ----------179A-------------------------------
  6247. INT 17 - Alloy NTNX,MW386 - SET TAB EXPANSION
  6248.     AH = 9Ah
  6249.     AL = mode
  6250.         00h NTNX compatibility
  6251.         DX = NTNX printer number (see AH=88h)
  6252.             (FFFFh = current logical LPT1)
  6253.         01h MW386
  6254.         DX = MW386 printer number
  6255.     CL = tab length (00h = no expansion, 01h-63h = spaces per tab)
  6256. Return: AL = status (see AH=81h)
  6257. Note:    beginning with MW386 v2.0, tab expansion is set on a per-printer basis
  6258.       rather than a per-user basis; NTNX and MW386 v1.x ignore DX
  6259. SeeAlso: AH=A4h
  6260. ----------179B-------------------------------
  6261. INT 17 - Alloy NTNX,MW386 - SET PRINT BREAK TIMEOUT
  6262.     AH = 9Bh
  6263.     AL = mode
  6264.         00h NTNX compatibility
  6265.         CX = timeout value in clock ticks (1/18 sec) (00h = never)
  6266.         01h MW386
  6267.         CX = timeout value in seconds (00h = never)
  6268.         02h MW386 v2+
  6269.         BX = logical device number
  6270.             00h-03h = LPT1-LPT4
  6271.             04h-07h = COM1-COM4
  6272.         CX = timeout value in seconds (00h = never)
  6273. Return: AL = status (see AH=81h)
  6274. Notes:    modes 00h and 01h affect only the current logical LPT1
  6275.     if no data is sent to a printer for the specified amount of time, the
  6276.       spool file will be closed and queued for printing automatically
  6277. SeeAlso: AH=97h
  6278. ----------17A0-------------------------------
  6279. INT 17 - Alloy MW386 - SPOOL COPY OF FILE
  6280.     AH = A0h
  6281.     AL = mode
  6282.         00h NTNX compatibility
  6283.         DX = ??? (NTNX, MW386 v1.x only)
  6284.         02h MW386 v2+
  6285.         BX = logical device number
  6286.             00h-03h = LPT1-LPT4
  6287.             04h-07h = COM1-COM4
  6288.     CX:SI -> ASCIZ pathname
  6289. Return: AL = status (see AH=81h)
  6290. Notes:    makes a copy of the specified file in the spooler's directory, allowing
  6291.       the original file to be modified or deleted while the copy is printed
  6292.     in mode 00h, the file is printed on logical LPT1
  6293. SeeAlso: AH=90h
  6294. ----------17A4-------------------------------
  6295. INT 17 - Alloy MW386 - ENABLE/DISABLE FORM FEED
  6296.     AH = A4h
  6297.     AL = new state
  6298.         00h form feed after end of print job disabled
  6299.         01h form feed enabled
  6300. Return: AL = status (see AH=81h)
  6301. Note:    only affects the current logical LPT1
  6302. SeeAlso: AH=9Ah,AH=A6h,INT 7F/AH=05h"NTNX (Host)"
  6303. ----------17A6-------------------------------
  6304. INT 17 - Alloy MW386 - ENABLE/DISABLE BANNER PAGE
  6305.     AH = A6h
  6306.     AL = new state
  6307.         00h banner page before print job disabled
  6308.         01h banner page enabled
  6309. Return: AL = status (see AH=81h)
  6310. Note:    only affects the current logical LPT1
  6311. SeeAlso: AH=A4h
  6312. ----------17A7-------------------------------
  6313. INT 17 - Alloy MW386 v2+ - GET/SET SPOOL FLAGS
  6314.     AH = A7h
  6315.     AL = spool flags
  6316.         bit 0: banner page enabled (see AH=A4h)
  6317.         1: form feed enabled (see AH=A6h)
  6318.         2-6: reserved (0)
  6319.         7: set flags if 1, get flags if 0
  6320.     BX = logical device number
  6321.         00h-03h = LPT1-LPT4
  6322.         04h-07h = COM1-COM4
  6323. Return: AL = status (see AH=81h)
  6324. Note:    the documentation does not state which register contains the result of
  6325.       a GET
  6326. SeeAlso: AH=A4h,AH=A6h
  6327. ----------17A8-------------------------------
  6328. INT 17 - Alloy MW386 - DEFINE TEMPORARY FILENAME
  6329.     AH = A8h
  6330.     CX:SI -> ASCIZ filename without extension (max 8 chars)
  6331. Return: AL = status (see AH=81h)
  6332. Note:    allows application to specify banner page filename for spool files
  6333.       collected from the application's printer output
  6334. SeeAlso: AH=A9h
  6335. ----------17A9-------------------------------
  6336. INT 17 - Alloy MW386 - CHANGE TEMPORARY SPOOL DRIVE
  6337.     AH = A9h
  6338.     AL = new spool drive (2=C:,3=D:,etc)
  6339. Return: AL = status (see AH=81h)
  6340. Note:    does not remove previous spooling directory since jobs may be pending
  6341. SeeAlso: AH=A8h
  6342. ----------17AA-------------------------------
  6343. INT 17 - Alloy MW386 v2+ - GET REAL-TIME PRINTER STATUS
  6344.     AH = AAh
  6345.     AL = mode
  6346.         00h NTNX
  6347.         DX = NTNX printer number (see AH=88h)
  6348.         01h MW386
  6349.         DX = MW386 printer number
  6350. Return: AH = instantaneous printer status
  6351.         00h printer ready
  6352.         01h not ready
  6353.         12h off line
  6354.         13h out of paper
  6355.         14h general device failure
  6356.         15h device timeout
  6357.         16h bad device number
  6358. ----------17AF-------------------------------
  6359. INT 17 - Alloy MW386 - CHECK SPOOLER
  6360.     AH = AFh
  6361. Return: AX = 55AAh if spooler available
  6362. ----------17C0-------------------------------
  6363. INT 17 - PC Magazine PCSpool - GET CONTROL BLOCK ADDRESS
  6364.     AH = C0h
  6365.     DX = printer port (0-3)
  6366. Return: ES:BX -> control block (see below)
  6367. SeeAlso: AH=C1h
  6368.  
  6369. Format of control block:
  6370. Offset    Size    Description
  6371.  00h    WORD    printer number
  6372.  02h    WORD    address of printer status port
  6373.  04h    WORD    number of first record in queue
  6374.  06h    WORD    number of last record in queue
  6375.  08h    DWORD    characters already printed
  6376.  0Ch    DWORD    number of characters remaining
  6377.  10h    DWORD    pointer to dequeue buffer
  6378.  14h    DWORD    previous count of characters printed
  6379.  18h    DWORD    number of clock ticks taken to print them
  6380.  1Ch    WORD    offset of next character to output
  6381.  1Eh    WORD    offset of next character to print
  6382.  20h    WORD    pointer to spooling queue record
  6383.  22h    BYTE    current spooling status
  6384.  23h    BYTE    current printer status:
  6385.         00h OK
  6386.         01h not ready
  6387.         02h paused with message
  6388.         03h paused
  6389.         04h initializing
  6390.         FEh non-existent port
  6391.         FFh not spooled
  6392.  24h    BYTE    current control record type
  6393.  25h    WORD    observed printer speed
  6394.  27h    WORD    characters to print per service
  6395.  29h    BYTE    01h if disk write needed
  6396.  2Ah    BYTE    01h if queued data should be flushed
  6397.  2Bh    BYTE    01h to update cps status
  6398. ----------17C1--------------------------------
  6399. INT 17 - PC Magazine PCSpool - BUILD PAUSE CONTROL RECORD
  6400.     AH = C1h
  6401.     DX = printer port (0-3)
  6402.     DS:SI -> ASCIIZ string to save for display
  6403. Note:    flushes pending writes
  6404. SeeAlso: AH=C0h,AH=C2h
  6405. ----------17C2-------------------------------
  6406. INT 17 - PC Magazine PCSpool - FLUSH PENDING WRITES
  6407.     AH = C2h
  6408.     DX = printer port (0-3)
  6409. SeeAlso: AH=C3h
  6410. ----------17C3-------------------------------
  6411. INT 17 - PC Magazine PCSpool - CANCEL PRINTER QUEUE (FLUSH ALL QUEUED OUTPUT)
  6412.     AH = C3h
  6413.     DX = printer port (0-3)
  6414. SeeAlso: AH=C2h,AH=C7h
  6415. ----------17C4-------------------------------
  6416. INT 17 - PC Magazine PCSpool - QUERY SPOOLER ACTIVE
  6417.     AH = C4h
  6418. Return: DI = B0BFh
  6419.     SI = segment
  6420. ----------17C5-------------------------------
  6421. INT 17 - PC Magazine PCSpool - JOB SKIP PRINTER QUEUE
  6422.     AH = C5h
  6423.     DX = printer port (0-3)
  6424. Note:    cancels up to the pause record 
  6425. ----------17C6-------------------------------
  6426. INT 17 - PC Magazine PCSpool - CHECK PRINTER QUEUE STATUS
  6427.     AH = C6h
  6428.     DX = printer port (0-3)
  6429. Return: AX = 0 printer not active or at pause
  6430.        = 1 printer busy
  6431. ----------17C7-------------------------------
  6432. INT 17 - PC Magazine PCSpool - CLOSE QUEUE
  6433.     AH = C7h
  6434.     DX = printer port (0-3)
  6435. SeeAlso: AH=C3h
  6436. ----------17CD00-----------------------------
  6437. INT 17 - INSET - EXECUTE COMMAND STRING
  6438.     AX = CD00h
  6439.     DS:DX -> ASCIZ command string (max 80 bytes)
  6440. Return: CX = 07C2h (1986d)
  6441. Note:    user interface menus pop up after last command, unless that command
  6442.     exits INSET
  6443. ----------17CD01-----------------------------
  6444. INT 17 - INSET - GET IMAGE SIZE
  6445.     AX = CD01h
  6446.     DS:DX -> ASCIZ name of image file
  6447. Return: AX = height in 1/720th inch
  6448.     BX = width in 1/720th inch
  6449.     CX = 07C2h (1986d)
  6450. ----------17CD02-----------------------------
  6451. INT 17 - INSET - INITIALIZE
  6452.     AX = CD02h
  6453. Return: CX = 07C2h (1986d)
  6454. Note:    all open files are closed and the printer is reset
  6455. SeeAlso: AX=CD04h
  6456. ----------17CD03-----------------------------
  6457. INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE
  6458.     AX = CD03h
  6459. Return: CX = 07C2h (1986d)
  6460. ----------17CD04-----------------------------
  6461. INT 17 - INSET - INITIALIZE LINKED MODE
  6462.     AX = CD04h
  6463.     ES:SI -> FAR routine for linked mode
  6464. Return: CX = 07C2h
  6465. Note:    calling sequence for linked-mode routine
  6466.     AL = 00h send character in BL to printer
  6467.        = 01h send CX bytes from DS:DX to printer
  6468.        = 02h move print head to horizontal starting position of image
  6469.     return code for linked-mode routine:
  6470.     AX = 0000h success
  6471.        = 0001h failure
  6472. SeeAlso: AX=CD02h,AX=CD08h
  6473. ----------17CD05-----------------------------
  6474. INT 17 - INSET - START MERGING IMAGE INTO TEXT
  6475.     AX = CD05h
  6476.     DS:DX -> ASCIZ name of PIX file
  6477.     CX = left margin of text in 1/720th inch
  6478. Return: AH = printer type
  6479.         00h page-oriented (multiple images may be placed side-by-side)
  6480.         01h line-oriented (use AX=CD06h for vertical paper movement)
  6481.     CX = 07C2h (1986d)
  6482. SeeAlso: AX=CD07h
  6483. ----------17CD06-----------------------------
  6484. INT 17 - INSET - GRAPHICS LINE FEED
  6485.     AX = CD06h
  6486. Return: AH = completion status
  6487.         00h image complete
  6488.         01h image incomplete
  6489.     CX = 07C2h (1986d)
  6490. SeeAlso: AX=CD09h
  6491. ----------17CD07-----------------------------
  6492. INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER
  6493.     AX = CD07h
  6494. Return: CX = 07C2h
  6495. SeeAlso: AX=CD05h
  6496. ----------17CD08-----------------------------
  6497. INT 17 - INSET - CANCEL LINK MODE
  6498.     AX = CD08h
  6499. Return: CX = 07C2h
  6500. SeeAlso: AX=CD04h
  6501. ----------17CD09-----------------------------
  6502. INT 17 - INSET - ALTER TEXT LINE SPACING
  6503.     AX = CD09h
  6504.     CX = line spacing in 1/720th inch
  6505. Return: CX = 07C2h
  6506. Note:    not yet implemented, line spacing is currently fixed at 1/6 inch
  6507. SeeAlso: AX=CD06h
  6508. ----------17CD0A-----------------------------
  6509. INT 17 - INSET - GET SETUP
  6510.     AX = CD0Ah
  6511.     DS:DX -> buffer for IN.SET data
  6512. Return: CX = 07C2h
  6513. ----------17CD0B-----------------------------
  6514. INT 17 - INSET - START GETTING SCALED IMAGE
  6515.     AX = CD0Bh
  6516.     DS:SI -> ASCIZ pathname of .PIX file
  6517.     BX = number of bitplanes
  6518.     CX = number of rows in output bitmap
  6519.     DX = number of columns in output bitmap
  6520. Return: AX = status
  6521.         0000h OK
  6522.         FFFFh error    
  6523. Note:    image is returned in strips by repeated calls to AX=CD0Ch
  6524. ----------17CD0C-----------------------------
  6525. INT 17 - INSET - GET NEXT IMAGE STRIP
  6526.     AX = CD0Ch
  6527. Return:    AX = status
  6528.         0000h OK but not complete
  6529.         0001h OK and image complete
  6530.         FFFFh error
  6531.     DS:SI -> buffer (max 4K) for bit map strip 
  6532.     CX = start row
  6533.     DX = number of rows
  6534.     BX = offset in bytes between bit planes
  6535. Note:    buffer may be overwritten by subsequent calls
  6536. SeeAlso: AX=CD0Bh
  6537. ----------17F0-------------------------------
  6538. INT 17 - NorthNet Jetstream API - INSTALLATION CHECK
  6539.     AH = F0h
  6540.     DX = printer port (0-3)
  6541. Return: AX = 0001h Jetstream present
  6542.          else  non-Jetstream port
  6543. Note:    NorthNet Jetstream is a high-performance DMA-driven parallel card able
  6544.       to drive printers at up to 80000 characters per second
  6545. ----------17F1-------------------------------
  6546. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER
  6547.     AH = F1h
  6548.     CX = data buffer length
  6549.     DX = printer port (0-3)
  6550.     DS:SI -> data buffer
  6551. Return: AX = status
  6552.         0000h printer not ready (see also AH=02h)
  6553.         other printing started
  6554. SeeAlso: AH=00h,AH=F2h,AH=F3h,AH=F5h
  6555. ----------17F2-------------------------------
  6556. INT 17 - NorthNet Jetstream API - GET PRINT PROGRESS STATUS
  6557.     AH = F2h
  6558.     DX = printer port (0-3)
  6559. Return: AX = status
  6560.         0000h prior print request finished
  6561.         other number of characters left to print
  6562. SeeAlso: AH=02h,AH=F1h,AH=F3h
  6563. ----------17F3-------------------------------
  6564. INT 17 - NorthNet Jetstream API - ABORT PRINT OPERATION
  6565.     AH = F3h
  6566.     DX = printer port (0-3)
  6567. Return: AX = number of unprinted characters due to abort
  6568. SeeAlso: AH=F1h,AH=F4h
  6569. ----------17F4-------------------------------
  6570. INT 17 - NorthNet Jetstream API - SET COMPLETION (POST) ADDRESS
  6571.     AH = F4h
  6572.     DX = printer port (0-3)
  6573.     DS:DS -> FAR post address (called with interrupts on)
  6574. SeeAlso: AH=F1h,AH=F3h
  6575. ----------17F5-------------------------------
  6576. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER FROM EXTENDED MEMORY
  6577.     AH = F5h
  6578.     CX = data buffer length
  6579.     DX = printer port (0-3)
  6580.     DS:SI -> data buffer (32-bit physical address)
  6581. Return: AX = status
  6582.         0000h printer not ready (see also AH=02h)
  6583.         other printing started
  6584. SeeAlso: AH=F1h
  6585. ----------18---------------------------------
  6586. INT 18 - START CASSETTE BASIC
  6587. Note:    only PCs produced by IBM contain BASIC in ROM, so the action is
  6588.       unpredicatable on compatibles; this interrupt often reboots the
  6589.       system, and often has no effect at all
  6590. SeeAlso: INT 86"NetBIOS"
  6591. ----------1800-------------------------------
  6592. INT 18 - NEC PC-9800 series - KEYBOARD - GET KEYSTROKE
  6593.     AH = 00h
  6594. Return: AX = keystroke
  6595. SeeAlso: AH=01h,AH=02h,INT 16/AH=00h
  6596. ----------1801-------------------------------
  6597. INT 18 - NEC PC-9800 series - KEYBOARD - CHECK FOR KEYSTROKE
  6598.     AH = 01h
  6599. Return: ZF set if no keystroke available
  6600.     ZF clear if keystroke available
  6601.         AX = keystroke
  6602. SeeAlso: AH=00h,AH=02h,INT 16/AH=01h
  6603. ----------1802-------------------------------
  6604. INT 18 - NEC PC-9800 series - KEYBOARD - GET SHIFT STATUS
  6605.     AH = 02h
  6606. Return: AL = shift flags
  6607. SeeAlso: AH=00h,AH=02h,AH=03h,AH=04h,INT 16/AH=02h
  6608. ----------18---------------------------------
  6609. INT 18 - NEC PC-9800 series - KEYBOARD
  6610.     AH = function
  6611.         03h initialize keyboard
  6612.         04h key pressed
  6613.     ???
  6614. Return: ???
  6615. Note:    details are not available at this time
  6616. SeeAlso: INT 16/AH=00h,INT 16/AH=01h,INT 16/AH=02h
  6617. ----------18---------------------------------
  6618. INT 18 - NEC PC-9800 series - VIDEO
  6619.     AH = function
  6620.         0Ah set video mode
  6621.         0Bh get video mode
  6622.         0Ch start text screen display
  6623.         0Dh end text screen display
  6624.         0Eh set single display area
  6625.         0Fh set multiple display area
  6626.         10h set cursor shape
  6627.         11h display cursor
  6628.         12h terminate cursor
  6629.         13h set cursor position
  6630.         14h read font patter
  6631.         16h initialize text video RAM
  6632.         1Ah define user character
  6633.     ???
  6634. Return: ???
  6635. Notes:    details are not available at this time
  6636.     text video RAM is located at segments A000h (characters) and A200h
  6637.       (attributes)
  6638. ----------19---------------------------------
  6639. INT 19 - SYSTEM - BOOTSTRAP LOADER
  6640.    Reboot the system without clearing memory or restoring interrupt vectors.
  6641.    Because interrupt vectors are preserved, this interrupt usually causes a
  6642.    system hang if any TSRs have hooked vectors from 00h through 1Ch,
  6643.    particularly INT 08.
  6644.  
  6645.    Usually, the BIOS will try to read sector 1, head 0, track 0 from drive A:
  6646.    to 0000h:7C00h.  If this fails, and a hard disk is installed, the BIOS will
  6647.    read sector 1, head 0, track 0 of the first hard disk.  This sector should
  6648.    contain a master bootstrap loader and a partition table.  After loading the
  6649.    master boot sector at 0000h:7C00h, the master bootstrap loader is given
  6650.    control.  It will scan the partition table for an active partition, and will
  6651.    then load the operating system's bootstrap loader (contained in the first
  6652.    sector of the active partition) and give it control.
  6653.  
  6654.    True IBM PCs issue an INT 18 if neither floppy nor hard disk have a valid
  6655.    boot sector.
  6656.  
  6657. Notes:    to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
  6658.       0040h:0072h and jump to FFFFh:0000h.    For a cold boot equivalent to
  6659.       a reset, store 0000h at 0040h:0072h before jumping.
  6660.     VDISK.SYS hooks this interrupt to allow applications to find out how
  6661.       much extended memory has been used by VDISKs (see below).  DOS 3.3+
  6662.       PRINT hooks INT 19 but does not set up a correct VDISK header block
  6663.       at the beginning of its INT 19 handler segment, thus causing some
  6664.       programs to overwrite extended memory which is already in use.
  6665.     default handler is at F000h:E6F2h for 100% compatible BIOSes
  6666. SeeAlso: INT 14/AH=17h,INT 18
  6667.  
  6668. Format of VDISK header block (at beginning of INT 19 handler's segment):
  6669. Offset    Size    Description
  6670.  00h 18 BYTEs    n/a (for VDISK.SYS, the device driver header)
  6671.  12h 11 BYTEs    signature string "VDISK  Vn.m" for VDISK.SYS version n.m
  6672.  1Dh 15 BYTEs    n/a
  6673.  2Ch  3 BYTEs    linear address of first byte of available extended memory
  6674.  
  6675. Format of hard disk master boot sector:
  6676. Offset    Size    Description
  6677.  00h 446 BYTEs    Master bootstrap loader code
  6678. 1BEh 16 BYTEs    partition record for partition 1 (see below)
  6679. 1CEh 16 BYTEs    partition record for partition 2
  6680. 1DEh 16 BYTEs    partition record for partition 3
  6681. 1EEh 16 BYTEs    partition record for partition 4
  6682. 1FEh    WORD    signature, AA55h indicates valid boot block
  6683.  
  6684. Format of partition record:
  6685. Offset    Size    Description
  6686.  00h    BYTE    boot indicator (80h = active partition)
  6687.  01h    BYTE    partition start head
  6688.  02h    BYTE    partition start sector (bits 0-5)
  6689.  03h    BYTE    partition start track (bits 8,9 in bits 6,7 of sector)
  6690.  04h    BYTE    operating system indicator (see below)
  6691.  05h    BYTE    partition end head
  6692.  06h    BYTE    partition end sector (bits 0-5)
  6693.  07h    BYTE    partition end track (bits 8,9 in bits 6,7 of sector)
  6694.  08h    DWORD    sectors preceding partition
  6695.  0Ch    DWORD    length of partition in sectors
  6696.  
  6697. Values for operating system indicator:
  6698.  00h empty
  6699.  01h DOS 12-bit FAT
  6700.  02h XENIX file system
  6701.  03h XENIX /usr file system (obsolete)
  6702.  04h DOS 16-bit FAT
  6703.  05h DOS 3.3+ extended partition
  6704.  06h DOS Large File System
  6705.  07h QNX, OS/2 HPFS
  6706.  08h AIX bootable partition, SplitDrive
  6707.  09h AIX data partition
  6708.  50h Disk Manager, read-only partition
  6709.  51h Disk Manager, read/write partition
  6710.  52h CP/M
  6711.  56h GoldenBow VFeature
  6712.  61h SpeedStor
  6713.  63h SysV/386, 386/ix
  6714.  64h Novell NetWare
  6715.  75h PC/IX
  6716.  80h Minix v1.3 and below
  6717.  81h Minix v1.5+
  6718.  C6h DR-DOS 6.0 LOGIN.EXE-secured partition
  6719.  DBh CP/M
  6720.  E1h SpeedStor 12-bit FAT extended partition
  6721.  E4h SpeedStor 16-bit FAT extended partition
  6722.  FEh LANstep
  6723.  FFh Xenix bad block table
  6724. ----------1A00-------------------------------
  6725. INT 1A - TIME - GET SYSTEM TIME
  6726.     AH = 00h
  6727. Return: CX:DX = number of clock ticks since midnight
  6728.     AL = midnight flag, nonzero if midnight passed since time last read
  6729. Notes:    there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
  6730.     IBM and many clone BIOSes set the flag for AL rather than incrementing
  6731.       it, leading to loss of a day if two consecutive midnights pass
  6732.       without a request for the time (e.g. if the system is on but idle)
  6733. SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch
  6734. ----------1A01-------------------------------
  6735. INT 1A - TIME - SET SYSTEM TIME
  6736.     AH = 01h
  6737.     CX:DX = number of clock ticks since midnight
  6738. SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
  6739. ----------1A02-------------------------------
  6740. INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
  6741.     AH = 02h
  6742. Return: CF clear if successful
  6743.         CH = hour (BCD)
  6744.         CL = minutes (BCD)
  6745.         DH = seconds (BCD)    
  6746.         DL = daylight savings flag (00h standard time, 01h daylight time)
  6747.     CF set on error (i.e. clock not running or in middle of update)
  6748. SeeAlso: AH=00h
  6749. ----------1A03-------------------------------
  6750. INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
  6751.     AH = 03h
  6752.     CH = hour (BCD)
  6753.     CL = minutes (BCD)
  6754.     DH = seconds (BCD)
  6755.     DL = daylight savings flag (00h standard time, 01h daylight time)
  6756. SeeAlso: AH=01h
  6757. ----------1A04-------------------------------
  6758. INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
  6759.     AH = 04h
  6760. Return: CF clear if successful
  6761.         CH = century (BCD)
  6762.         CL = year (BCD)
  6763.         DH = month (BCD)
  6764.         DL = day (BCD)
  6765.     CF set on error
  6766. SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah
  6767. ----------1A05-------------------------------
  6768. INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
  6769.     AH = 05h
  6770.     CH = century (BCD)
  6771.     CL = year (BCD)
  6772.     DH = month (BCD)
  6773.     DL = day (BCD)
  6774. SeeAlso: AH=04h,INT 21/AH=2Bh
  6775. ----------1A06-------------------------------
  6776. INT 1A - TIME - SET ALARM (AT,XT286,PS)
  6777.     AH = 06h
  6778.     CH = hour (BCD)
  6779.     CL = minutes (BCD)
  6780.     DH = seconds (BCD)
  6781. Return: CF set on error (alarm already set or clock stopped for update)
  6782.     CF clear if successful
  6783. Note:    the alarm occurs every 24 hours until turned off, invoking INT 4A each
  6784.       time
  6785. SeeAlso: AH=07h,INT 4A
  6786. ----------1A07-------------------------------
  6787. INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
  6788.     AH = 07h
  6789. Return: alarm disabled
  6790. Note:    does not disable the real-time clock's IRQ
  6791. SeeAlso: AH=06h,INT 70
  6792. ----------1A08-------------------------------
  6793. INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
  6794.     AH = 08h
  6795.     CH = hours in BCD
  6796.     CL = minutes in BCD
  6797.     DH = seconds in BCD
  6798. ----------1A09-------------------------------
  6799. INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
  6800.     AH = 09h
  6801. Return: CH = hours in BCD
  6802.     CL = minutes in BCD
  6803.     DH = seconds in BCD
  6804.     DL = alarm status
  6805.         00h alarm not enabled
  6806.         01h alarm enabled but will not power up system
  6807.         02h alarm will power up system
  6808. ----------1A0A-------------------------------
  6809. INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
  6810.     AH = 0Ah
  6811. Return: CF set on error
  6812.     CF clear if successful
  6813.         CX = count of days since Jan 1,1980
  6814. SeeAlso: AH=04h,AH=0Bh
  6815. ----------1A0B-------------------------------
  6816. INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
  6817.     AH = 0Bh
  6818.     CX = count of days since Jan 1,1980
  6819. Return: CF set on error
  6820.     CF clear if successful
  6821. SeeAlso: AH=05h,AH=0Ah
  6822. ----------1A10-------------------------------
  6823. INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE
  6824.     AH = 10h
  6825.     ???
  6826. Return: ???
  6827. SeeAlso: AH=11h,AH=12h,INT 17/AH=01h
  6828. ----------1A11-------------------------------
  6829. INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER
  6830.     AH = 11h
  6831.     ???
  6832. Return: ???
  6833. SeeAlso: AH=10h,AH=12h,INT 17/AH=00h
  6834. ----------1A12-------------------------------
  6835. INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS
  6836.     AH = 12h
  6837.     ???
  6838. Return: ???
  6839. SeeAlso: AH=10h,AH=11h,INT 17/AH=02h
  6840. ----------1A3601-----------------------------
  6841. INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK
  6842.     AX = 3601h
  6843. Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
  6844.         ASCIZ string "WPCORP\0"
  6845. Notes:    WordPerfect 5.0 will call this interrupt at start up to determine if a
  6846.       third party product wants to interface with it.  The third party
  6847.       product must intercept this interrupt and return the address of a
  6848.       keyboard monitor routine.
  6849.     Before checking for keyboard input, and after every key entered by the
  6850.       user, Word Perfect will call the routine whose address was provided
  6851.       in DS:SI with the following parameters:
  6852.         Entry:    AX = key code or 0
  6853.             BX = WordPerfect state flag
  6854.         Exit:    AX = 0 or key code
  6855.             BX = 0 or segment address of buffer with key codes
  6856.     See the "WordPerfect 5.0 Developer's Toolkit" for further information.
  6857. SeeAlso: INT 16/AX=5500h
  6858. ----------1A80-------------------------------
  6859. INT 1A - PCjr - SET UP SOUND MULTIPLEXOR
  6860.     AH = 80h
  6861.     AL = 00h source is 8253 channel 2
  6862.          01h source is cassette input
  6863.          02h source is I/O channel "Audio IN"
  6864.          03h source is sound generator chip
  6865. ----------1A8100-----------------------------
  6866. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND
  6867.     AX = 8100h
  6868. Return: AH > 80h if supported
  6869. ----------1AA0-------------------------------
  6870. INT 1A - Disk Spool II v2.07 - INSTALLATION CHECK
  6871.     AH = A0h
  6872. Return: AH = B0h if installed
  6873.         AL = pending INT 1A/AH=D0h subfunction if nonzero???
  6874.         ES = code segment
  6875.         ES:BX -> name of current spool file
  6876.         ES:SI -> current despool file
  6877.         CL = 00h despooler is disabled
  6878.            = 41h despooler is enabled
  6879.         CH = 00h spooler is disabled
  6880.            = 41h spooler is enabled
  6881.         DL = 00h despooler is currently active printing a file
  6882.            = 41h despooler is standing by
  6883.         DH = 00h ???
  6884.            = 41h ???
  6885.         DI = 0000h ???
  6886.          0001h ???
  6887. Note:    Disk Spool II is a shareware disk-based print spooler by Budget
  6888.       Software Company
  6889. SeeAlso: AH=ABh,AH=C0h,AH=D0h
  6890. ----------1AAB-------------------------------
  6891. INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK
  6892.     AH = ABh
  6893. Return:    AH = BAh if installed
  6894.         AL = pending INT 1A/AH=ADh subfunction if nonzero???
  6895.         ES = code segment
  6896.         ES:BX -> name of current spool file
  6897.         ES:SI -> current despool file
  6898.         CL = 00h despooler is disabled
  6899.            = 41h despooler is enabled
  6900.         CH = 00h spooler is disabled
  6901.            = 41h spooler is enabled
  6902.         DL = 00h despooler is currently active printing a file
  6903.            = 41h despooler is standing by
  6904.         DH = 00h ???
  6905.            = 41h ???
  6906.         DI = 0000h ???
  6907.          0001h ???
  6908. Note:    Disk Spool II is a shareware disk-based print spooler by Budget
  6909.       Software Company
  6910. SeeAlso: AH=A0h,AH=ACh,AH=ADh
  6911. ----------1AAC-------------------------------
  6912. INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK
  6913.     AH = ACh
  6914. Return: (see AH=ABh)
  6915. Note:    this function is identical to AH=ABh
  6916. SeeAlso: AH=A0h,AH=ABh,AH=ADh
  6917. ----------1AAD-------------------------------
  6918. INT 1A - Disk Spool II v1.83 - FUNCTION CALLS
  6919.     AH = ADh
  6920.     AL = function code
  6921.         02h enable spooler only
  6922.         03h enable the despooler
  6923.         04h disable the despooler
  6924.         08h inhibit popup menu
  6925.         09h enable popup menu
  6926.         0Ah ???
  6927.         0Bh disable the spooler
  6928.         0Ch start despooler after last successfully printed document???
  6929.         0Dh start despooler at the exact point where it last left off???
  6930.         0Eh pop up the menu
  6931.         0Fh ???
  6932.         11h ???
  6933.         14h ???
  6934.         15h ???
  6935.         16h ???
  6936.         17h ???
  6937.         18h ???
  6938.         19h ???
  6939.         20h clear file pointed to by the despooler???
  6940.         21h    ???
  6941.         22h    ???
  6942.         23h ???
  6943.         30h ???
  6944. Return: AH = 00h if successful
  6945. SeeAlso: AH=ABh
  6946. ----------1AC0-------------------------------
  6947. INT 1A - Disk Spool II v2.07 - ALTERNATE INSTALLATION CHECK
  6948.     AH = C0h
  6949. Return: (see AH=A0h)
  6950. Note:    this call is identical to AH=A0h
  6951. SeeAlso: AH=A0h,AH=ABh,AH=D0h
  6952. ----------1AD0-------------------------------
  6953. INT 1A - Disk Spool II v2.07 - FUNCTION CALLS
  6954.     AH = D0h
  6955.     AL = function code
  6956.         01h enable spooler and despooler
  6957.         02h enable spooler only
  6958.         03h enable despooler at beginning of file
  6959.         04h disable the despooler
  6960.         05h disable the despooler and spooler
  6961.         06h clear the spool file
  6962.         08h inhibit the popup menu
  6963.         09h enable the popup menu
  6964.         0Ah ??? (called by Disk Spool's INT 21 handler)
  6965.         0Bh disable the spooler
  6966.         0Ch start despooler after last successfully printed document
  6967.         0Dh start despooler at the exact point where it last left off
  6968.         0Eh pop up the menu
  6969.         0Fh ???
  6970.         11h start new spool file??? (called by Disk Spool's INT 21 handler
  6971.                 when a program terminates)
  6972.         14h ???
  6973.         15h delete despool file and reset ???
  6974.         16h ??? (writes something to unknown file)
  6975.         17h ??? (writes something to despool file, then reads something
  6976.                 else and ???)
  6977.         18h ??? (reads something from despool file, and then ???)
  6978.         19h ??? (creates/truncates spool file)
  6979.         20h clear file pointed to by the despooler
  6980.         21h ??? (writes something to unknown file)
  6981.         22h ??? (writes something to spool file if spooler/despooler using
  6982.                 same file)
  6983.         23h ??? (opens/creates unknown file, then ???)
  6984.         30h ???
  6985.         31h ???
  6986.         32h beep
  6987.         33h append CRLF to spool file???
  6988.         34h ???
  6989.         35h ???
  6990.         36h ???
  6991.         37h append CRLF to spool file and start a new spool file???
  6992.         38h ???
  6993.         51h ??? (called by Disk Spool's INT 21 handler)
  6994.         52h ??? (called by Disk Spool's INT 21 handler)
  6995.         57h ???
  6996. SeeAlso: AH=A0h,AH=ADh
  6997. ----------1AF7-------------------------------
  6998. INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
  6999.     AH = F7h
  7000. Notes:    RighTime is a TSR by G.T. Becker which continuously adjusts the system
  7001.       time to correct for clock drift
  7002.     any AH value from F0h-F7h or F9h-FEh will perform this function in
  7003.       version 1.1, but F7h is the function called by transient portion
  7004. SeeAlso: AH=F8h,AH=FFh"RighTime"
  7005. ----------1AF8-------------------------------
  7006. INT 1A - RighTime v1.1 - ENABLE
  7007.     AH = F8h
  7008. Notes:    RighTime is a TSR by G.T. Becker which continuously adjusts the system
  7009.       time to correct for clock drift
  7010.     RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
  7011.       TeSseRact program identifier based on its current state: "RighTime"
  7012.       when enabled, "RighTim"F7h when disabled.
  7013. SeeAlso: AH=F7h,AH=FFh"RighTime"
  7014. ----------1AFE-------------------------------
  7015. INT 1A - AT&T 6300 - READ TIME AND DATE
  7016.     AH = FEh
  7017. Return: BX = day count (0 = Jan 1, 1984)
  7018.     CH = hour
  7019.     CL = minute
  7020.     DH = second
  7021.     DL = hundredths
  7022. SeeAlso: AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
  7023. ----------1AFF-------------------------------
  7024. INT 1A - AT&T 6300 - SET TIME AND DATE
  7025.     AH = FFh
  7026.     BX = day count (0 = Jan 1, 1984)
  7027.     CH = hour
  7028.     CL = minute
  7029.     DH = second
  7030.     DL = hundredths
  7031. Return: ???
  7032. SeeAlso: AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
  7033. ----------1AFF-------------------------------
  7034. INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
  7035.     AH = FFh
  7036. Notes:    RighTime is a TSR by G.T. Becker which continuously adjusts the system
  7037.       time to correct for clock drift
  7038.     upon being permanently disabled, RighTime closes the file handle
  7039.       referencing its executable (which is updated with time correction
  7040.       information every two minutes while RighTime is enabled).
  7041. ----------1B---------------------------------
  7042. INT 1B - KEYBOARD - CONTROL-BREAK HANDLER
  7043.    called when INT 09 determines that Control-Break has been pressed
  7044. Note:    normally points to a short routine in DOS which sets the Ctrl-C flag,
  7045.       thus invoking INT 23h the next time DOS checks for Ctrl-C.
  7046. SeeAlso: INT 23
  7047. ----------1C---------------------------------
  7048. INT 1C - TIME - SYSTEM TIMER TICK
  7049.    called on each clock tick by the INT 08 handler
  7050. Notes:    preferred interrupt to chain when a program needs to be invoked
  7051.       regularly
  7052.     not available on NEC 9800-series PCs
  7053. SeeAlso: INT 08
  7054. ----------1D---------------------------------
  7055. INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
  7056. Note:    default parameter table at F000h:F0A4h for 100% compatible BIOSes
  7057. SeeAlso: INT 10/AH=00h
  7058.  
  7059. Format of video parameters:
  7060. Offset    Size    Description
  7061.  00h 16 BYTEs    6845 register values for modes 00h and 01h
  7062.  10h 16 BYTEs    6845 register values for modes 02h and 03h
  7063.  20h 16 BYTEs    6845 register values for modes 04h and 05h
  7064.  30h 16 BYTEs    6845 register values for modes 06h and 07h
  7065.  40h    WORD    bytes in video buffer for modes 00h and 01h
  7066.  42h    WORD    bytes in video buffer for modes 02h and 03h
  7067.  44h    WORD    bytes in video buffer for modes 04h and 05h
  7068.  46h    WORD    bytes in video buffer for modes 06h and 07h
  7069.  48h  8 BYTEs    columns on screen for each of modes 00h through 07h
  7070.  50h  8 BYTEs    CRT controller mode bytes for each of modes 00h through 07h
  7071. ----------1E---------------------------------
  7072. INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
  7073. Note:    default parameter table at F000h:EFC7h for 100% compatible BIOSes
  7074. SeeAlso: INT 13/AH=0Fh,INT 41
  7075.  
  7076. Format of diskette parameter table:
  7077. Offset    Size    Description
  7078.  00h    BYTE    first specify byte
  7079.         bits 7-4: step rate
  7080.              3-0: head unload time (0Fh = 240 ms)
  7081.  01h    BYTE    second specify byte
  7082.         bits 7-1: head load time (01h = 4 ms)
  7083.                0: non-DMA mode (always 0)
  7084.  02h    BYTE    delay until motor turned off (in clock ticks)
  7085.  03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
  7086.  04h    BYTE    sectors per track
  7087.  05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
  7088.  06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
  7089.  07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
  7090.  08h    BYTE    format filler byte (default F6h)
  7091.  09h    BYTE    head settle time in milliseconds
  7092.  0Ah    BYTE    motor start time in 1/8 seconds
  7093. ----------1F---------------------------------
  7094. INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  7095.    points at 1024 bytes of graphics data, 8 bytes for each character 80h-FFh
  7096. Note:    graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
  7097.       compatible BIOSes
  7098. ---------------------------------------------
  7099.