Interrupt List Release 31 Last change 7/12/92 This compilation is Copyright (c) 1989, 1990, 1991, 1992 Ralf Brown --------------------------------------------- Please redistribute the following files unmodified as a group, in a pair of archives named INTER31A and INTER31B (preferably the original authenticated PKZIP archives): INTERRUP.1ST the read-me file, containing credits, availability info INTERRUP.A INT 00 through INT 14 \ INTERRUP.B INT 15 through INT 1F \ total 879 pages at INTERRUP.C INT 20 thru INT 21/7F \ 60 lines per page, INTERRUP.D INT 21/80 thru INT 2F/7F > 941 with INTPRINT -p INTERRUP.E INT 2F/80 thru INT 3F / (4077 entries) INTERRUP.F INT 40 through INT 67 / INTERRUP.G INT 68 through INT FF / INTERRUP.PRI a brief introduction to interrupts INTPRINT.COM a simple formatter that also generates a list summary INTPRINT.DOC instructions for INTPRINT MEMORY.LST format of the BIOS data area The following files should be distributed in an archive called INTER31C: INT.COM invoke interrupts from commandline INT2GUID.* convert list into TurboPower GUIDE or POPHELP database INT2HLP.BAT Perl script to convert list into QuickHelp database INT2QH.* program to convert list into QuickHelp database INTHELP.* convert list into TurboPower GUIDE database INTLIST.E Epsilon extension for handling list INTPRINT.C source code for INTPRINT --------------------------------------------- If you notice any mistakes or omissions, please let me know! It is only with YOUR help that the list can continue to grow at the current rate. Please send all changes to me rather than distributing a modified version of the list. Please read the file INTERRUP.1ST before asking me any questions. You may find that they have already been addressed. Ralf Brown ARPA: ralf@cs.cmu.edu UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf BIT: ralf%cs.cmu.edu@carnegie FIDO: Ralf Brown 1:129/26.1 or post a message to me in the DR_DEBUG echo CIS: >INTERNET:ralf@cs.cmu.edu I reply to all e-mail submissions and inquiries, but some of my replies bounce because of bad return paths. If you don't get a response from me within a reasonable period of time, send it again with a better return path (starting at harvard or ucbvax for UUCP, from the ARPA Internet for others). --------------------------------------------- See INTERRUP.1ST for the key to system abbreviations and a list of the trademarks mentioned here. --------------------------------------------- DISCLAIMER: THIS MATERIAL IS PROVIDED "AS IS". I verify the information contained in this list to the best of my ability, but I cannot be held responsible for any problems caused by use or misuse of the information, especially for those functions not officially documented. If it is marked "internal" or undocumented, you should check it carefully to make sure it works the same way in your version of the software (and please let me know whether or not it works the same way). Information marked with "???" is known to be incomplete or guesswork. --------------------------------------------- The use of -> instead of = signifies that the indicated register or register pair contains a pointer to the specified item, rather than the item itself. One or more letters may follow the interrupt number; they have the following meanings: U - undocumented function, u - partially documented function, P - available only in protected mode, R - available only in real or V86 mode ----------00--------------------------------- INT 00 - CPU-generated - DIVIDE ERROR Notes: generated if the divisor of a DIV or IDIV instruction is zero or the quotient overflows the result register; DX and AX will be unchanged. on an 8086/8088, the return address points to the following instruction on an 80286+, the return address points to the divide instruction SeeAlso: INT 04 ----------01--------------------------------- INT 01 - CPU-generated - SINGLE STEP Notes: generated after each instruction if TF (trap flag) is set; TF is cleared on invoking the single-step interrupt handler interrupts are prioritized such that external interrupts are invoked after the INT 01 pushes CS:IP/FLAGS and clears TF, but before the first instruction of the handler executes used by debuggers for single-instruction execution tracing, such as MSDOS DEBUG's T command SeeAlso: INT 03 ----------01--------------------------------- INT 01 - CPU-generated (80386+) - DEBUGGING EXCEPTIONS Instruction address breakpoint fault - will return to execute instruction Data address breakpoint trap - will return to following instruction General detect fault, debug registers in use Task-switch breakpoint trap SeeAlso: INT 03 ----------02--------------------------------- INT 02 - external hardware - NON-MASKABLE INTERRUPT Notes: generated by the CPU when the input to the NMI pin is asserted return address points to start of interrupted instruction on 80286+ although the Intel documentation states that this interrupt is typically used for power-failure procedures, it has many other uses on IBM-compatible machines: Memory parity error: all except Jr, CONV, and some machines without memory parity Breakout switch on hardware debuggers Coprocessor interrupt: all except Jr and CONV Keyboard interrupt: Jr, CONV I/O channel check: CONV, PS50+ Disk-controller power-on request: CONV System suspend: CONV Real-time clock: CONV System watch-dog timer, time-out interrupt: PS50+ DMA timer time-out interrupt: PS50+ Low battery: HP 95LX Module pulled: HP 95LX ----------03--------------------------------- INT 03 - CPU-generated - BREAKPOINT Notes: generated by the one-byte breakpoint instruction (opcode CCh) used by debuggers to implement breakpoints, such as MSDOS DEBUG's G command also used by Turbo Pascal versions 1,2,3 when {$U+} specified return address points to byte following the breakpoint instruction SeeAlso: INT 01 ----------0309--SI4647----------------------- INT 03 - Soft-ICE BACK DOOR COMMANDS AH = 09h SI = 4647h ('FG') DI = 4A4Dh ('JM') AL = function 10h display string in Soft-ICE window DS:DX -> ASCIZ string to display (max 100 bytes, 0Dh OK) 11h execute Soft-ICE command DS:DX -> ASCIZ command string (max 100 bytes, 0Dh OK) 12h get breakpoint information Return: BH = entry number of last breakpoint set BL = type of last breakpoint set 00h BPM (breakpoint register types) 01h I/O 02h INTerrupt 03h BPX (INT 03h-style breakpoint) 04h reserved 05h range DH = entry number of last breakpoint to be triggered DL = type of last triggered breakpoint (see above) ----------04--------------------------------- INT 04 - CPU-generated - INTO DETECTED OVERFLOW Notes: the INTO instruction will generate this interrupt if OF (Overflow Flag) is set; otherwise, INTO is effectively a NOP may be used for convenient overflow testing (to prevent errors from propagating) instead of JO or a JNO/JMP combination SeeAlso: INT 00 ----------05--------------------------------- INT 05 - PRINT SCREEN Notes: normally invoked by the INT 09 handler when PrtSc key is pressed, but may be invoked directly by applications byte at 0050h:0000h contains status used by default handler 00h not active 01h PrtSc in progress FFh last PrtSc encountered error default handler is at F000h:FF54h in IBM PC and 100%-compatible BIOSes SeeAlso: INT 10/AH=12h/BL=20h ----------05--------------------------------- INT 05 - CPU-generated (80186+) - BOUND RANGE EXCEEDED Notes: generated by BOUND instruction when the value to be tested is less than the indicated lower bound or greater than the indicated upper bound. returning from this interrupt re-executes the failing BOUND instruction ----------06--------------------------------- INT 06 - CPU-generated (80286+) - INVALID OPCODE Notes: generated when the CPU attempts to execute an invalid opcode (most protected-mode instructions are considered invalid in real mode) generated on BOUND, LDS, LES, or LIDT instructions which specify a register rather than a memory address return address points to beginning of invalid instruction with proper programming, this interrupt may be used to emulate instructions which do not exist; many 386 BIOSes emulate the 80286 undocumented LOADALL instruction which was removed from the 80386+ SeeAlso: INT 0C"CPU",INT 0D"CPU" ----------06--------------------------------- INT 06 - HP 95LX - SLEEP/WAKEUP Note: called just before going into light or deep (shutdown) sleep and just after returning from light or deep sleep SeeAlso: INT 0B"HP 95LX",INT 15/AX=4DD4h,INT 15/AH=4Eh ----------07--------------------------------- INT 07 - CPU-generated (80286+) - PROCESSOR EXTENSION NOT AVAILABLE Notes: automatically called if a coprocessor instruction is encountered when no coprocessor is installed can be used to emulate a numeric coprocessor in software SeeAlso: INT 09"MATH UNIT PROTECTION" ----------08--------------------------------- INT 08 - IRQ0 - SYSTEM TIMER Notes: generated 18.2 times per second by channel 0 of the 8254 system timer, this interrupt is used to keep the time-of-day clock updated programs which need to be invoked regularly should use INT 1C unless they need to reprogram the timer while still keeping the time-of-day clock running at the proper rate default handler is at F000h:FEA5h in IBM PC and 100%-compatible BIOSes may be masked by setting bit 0 on I/O port 21h SeeAlso: INT 1C,INT 4A,INT 50"DESQview",INT 58"DoubleDOS",INT 70,INT 78"GO32" ----------08--------------------------------- INT 08 - CPU-generated (80286+) - DOUBLE EXCEPTION DETECTED Notes: called when multiple exceptions occur on one instruction, or an exception occurs in an exception handler called in protected mode if an interrupt above the defined limit of the interrupt vector table occurs return address points at beginning of instruction with errors or the beginning of the instruction which was about to execute when the external interrupt caused the exception if an exception occurs in the double fault handler, the CPU goes into SHUTDOWN mode (which circuitry in the PC/AT converts to a reset); this "triple fault" is a faster way of returning to real mode on many 80286 machines than the standard keyboard controller reset ----------09--------------------------------- INT 09 - IRQ1 - KEYBOARD DATA READY Notes: generated when data is received from the keyboard. This is normally a scan code (from either a keypress *or* a key release), but may also be an ACK or NAK of a command on AT-class keyboards. may be masked by setting bit 1 on I/O port 21h if the BIOS supports an enhanced (101/102-key) keyboard, it calls INT 15/AH=4Fh after reading the scan code from the keyboard and before further processing the interrupt handler performs the following actions for certain special keystrokes: Ctrl-Break clear keyboard buffer, place word 0000h in buffer, invoke INT 1B, and set flag at 0040h:0071h SysRq invoke INT 15/AH=85h Ctrl-Numlock place system in a tight wait loop until next INT 09 Ctrl-Alt-Del jump to BIOS startup code (either F000h:FFF0h or the destination of the jump at that address) Shift-PrtSc invoke INT 05 SeeAlso: INT 05,INT 0B"HP 95LX",INT 15/AH=4Fh,INT 15/AH=85h,INT 16,INT 1B SeeAlso: INT 2F/AX=A901h,INT 51"DESQview",INT 59"DoubleDOS",INT 79"GO32" ----------09--------------------------------- INT 09 - CPU-generated (80286+) - PROCESSOR EXTENSION PROTECTION ERROR Notes: called if the coprocessor attempts to access memory outside a segment boundary; it may occur at an arbitrary time after the coprocessor instruction was issued until the condition is cleared or the coprocessor is reset, the only coprocessor instruction which may be used is FNINIT; WAIT or other coprocessor instructions will cause a deadlock because the coprocessor is still busy waiting for data SeeAlso: INT 07"CPU" ----------09--------------------------------- INT 09 P - internal hardware - RESERVED BY Intel (80486) Note: this exception has been moved to INT 0D SeeAlso: INT 09"MATH",INT 0D ----------0A--------------------------------- INT 0A - IRQ2 - LPT2 (PC), VERTICAL RETRACE INTERRUPT (EGA,VGA) Notes: the TOPS and PCnet adapters use this interrupt request line by default DOS 3.2 revectors IRQ2 to a stack-switching routine on ATs and above, the physical data line for IRQ2 is labeled IRQ9 and connects to the slave 8259. The BIOS redirects the interrupt for IRQ9 back here. under DESQview, only the INT 15h vector and BASIC segment address (the word at 0000h:0510h) may be assumed to be valid for the handler's process many VGA boards do not implement the vertical retrace interrupt, including the IBM VGA Adapter where the traces are either cut or removed SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71,INT 7A"GO32" ----------0A--------------------------------- INT 0A - IRQ2 - Tandy 1000-series HARD DISK Note: may be masked by setting bit 2 on I/O port 21h SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71 ----------0A--------------------------------- INT 0A - IRQ2 - ROLAND MPU MIDI INTERFACE Note: newer Roland cards and MIDI interfaces by other manufacturers use a jumper-selectable IRQ, but software and hardware generally defaults to IRQ2 SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71,INT 7A"GO32" ----------0A--------------------------------- INT 0A P - CPU-generated (80286+) - INVALID TASK STATE SEGMENT Notes: automatically called during a task switch if the new TSS specified by the task gate is invalid for any of the following reasons: TSS limit is less than 43 (80286) or 103 (80386/80486) LDT selector invalid or segment not present null SS selector, or SS selector outside LDT/GDT limit stack segment is read-only stack segment DPL differs from new CPL, or RPL <> CPL CS selector is outside LDT/GDT limit or not code non-conforming code segment's DPL differs from CPL conforming code segment's DPL > CPL DS/ES selectors outside LDT/GDT limit or not readable segments the handler must use a task gate in order to have a valid TSS under which to execute; it must also reset the busy bit in the new TSS SeeAlso: INT 0B"CPU" ----------0B--------------------------------- INT 0B - IRQ3 - SERIAL COMMUNICATIONS (COM2) Notes: the TOPS and PCnet adapters use this interrupt request line as an alternate on PS/2's, COM2 through COM8 share this interrupt; on many PC's, COM4 shares this interrupt may be masked by setting bit 3 on I/O port 21h SeeAlso: INT 0C"COM1",INT 53"DESQview",INT 5B"DoubleDOS",INT 7B"GO32" ----------0B--------------------------------- INT 0B P - CPU-generated (80286+) - SEGMENT NOT PRESENT Notes: generated when loading a segment register if the segment descriptor indicates that the segment is not currently in memory, unless the segment is an LDT (see INT 0A"CPU") or stack segment (see INT 0C"CPU") needed by a task switch may be used to implement virtual memory by loading in segments as they are accessed, clearing the "not present" bit after loading SeeAlso: INT 0A"CPU",INT 0E"hardware" ----------0B--------------------------------- INT 0B - HP 95LX - LOW-LEVEL KEYBOARD HANDLER Note: debounces key, places the keycode in I/O register 60h, and calls INT 09 SeeAlso: INT 09,INT 0D"HP 95LX",INT 15/AX=4DD4h ----------0C--------------------------------- INT 0C - IRQ4 - SERIAL COMMUNICATIONS (COM1) Notes: on many PC's, COM3 shares this interrupt may be masked by setting bit 4 on I/O port 21h SeeAlso: INT 0B"COM2",INT 54"DESQview",INT 5C"DoubleDOS",INT 7C"GO32" ----------0C--------------------------------- INT 0C - CPU-generated (80286+) - STACK FAULT Notes: generated on stack overflow/underflow in protected mode generated in protected mode if an inter-level transition or task switch references a stack segment marked "not present" generated on accessing a word operand at SS:FFFFh in real mode the 80286 will shut down in real mode if SP=1 before a push. On the PC AT and compatibles, external circuitry generates a reset on shutdown. SeeAlso: INT 0B"CPU",INT 0D"CPU" ----------0C--------------------------------- INT 0C - IBM SYSTEM 36/38 WORKSTATION EMULATION - API POINTER Call offset 100h in the interrupt handler's segment with AH = function 03h update screen 05h select next session AL = session number (00h-03h) Return: AL = session type code 00h not active 01h display session 02h printer session FEh invalid session number DS = requested session's data segment (0 if not active) Return: ??? Format of emulator's data area (offset from interrupt handler's segment): Offset Size Description 13Eh BYTE bit flags for status line indicators turned on since this byte last zerod 13Fh BYTE bit flags for status line indicators turned off since this byte last set to FFh 140h WORD offset of EBCDIC to ASCII translation 146h WORD offset of EBCDIC screen buffer 148h WORD offset of EC (engineering change) level signature 150h BYTE "KEYI" 151h BYTE 5250 key scan code to be sent to remote 15Bh BYTE "SYSAV" 15Dh BYTE 5250 cursor column 15Eh BYTE 5250 cursor row 167h BYTE "DVCTAD" 178h BYTE "FLAGS" 184h BYTE "SESSNOAD" 193h BYTE "STNAD" 198h BYTE "NSDS" ----------0D--------------------------------- INT 0D - IRQ5 - FIXED DISK (PC,XT), LPT2 (AT), reserved (PS/2) Notes: under DESQview, only the INT 15h vector and BASIC segment address (the word at 0000h:0510h) may be assumed to be valid for the handler's process may be masked by setting bit 5 on I/O port 21h SeeAlso: INT 0E"IRQ6",INT 0F"IRQ7",INT 55"DESQview",INT 5D"DoubleDOS" SeeAlso: INT 7D"GO32" ----------0D--------------------------------- INT 0D - IRQ5 - Tandy 1000 60 Hz RAM REFRESH SeeAlso: INT 55 ----------0D--------------------------------- INT 0D - HP 95LX - INFRARED INTERRUPT SeeAlso: INT 0B"HP 95LX",INT 0E"HP 95LX",INT 15/AX=4DD4h ----------0D--------------------------------- INT 0D - CPU-generated (80286+) - GENERAL PROTECTION VIOLATION Notes: called in real mode when an instruction accesses a word operand located at offset FFFFh in segment CS, DS, ES, FG, or GS a PUSH MEM or POP MEM instruction contains an invalid bit encoding in the second byte an instruction exceeds the maximum length allowed (10 bytes for 80286, 15 bytes for 80386/80486) an instruction wraps from offset FFFFh to offset 0000h called in protected mode on protection violations not covered by INT 06 through INT 0C, including segment limit violations write to read-only segments accesses using null DS or ES selectors accesses to segments with privilege greater than CPL wrong descriptor type called on 80486 protected-mode floating-point protection fault SeeAlso: INT 09"80486",INT 0C"STACK" ----------0E--------------------------------- INT 0E - IRQ6 - DISKETTE CONTROLLER Notes: generated by floppy disk controller on completion of an operation default handler is at F000h:EF57h in IBM PC and 100%-compatible BIOSes may be masked by setting bit 6 on I/O port 21h SeeAlso: INT 0D"IRQ5",INT 56"DESQview",INT 5E"DoubleDOS",INT 7E"GO32" ----------0E--------------------------------- INT 0E - CPU-generated (80386+ native mode) - PAGE FAULT Note: used to implement virtual memory SeeAlso: INT 0B"hardware" ----------0E--------------------------------- INT 0E - HP 95LX - EXTERNAL CARD INTERRUPT SeeAlso: INT 0D"HP 95LX",INT 0F"HP 95LX",INT 15/AX=4DD4h ----------0F--------------------------------- INT 0F - IRQ7 - PARALLEL PRINTER Notes: generated by the LPT1 printer adapter when printer becomes ready most printer adapters do not reliably generate this interrupt the 8259 interrupt controller generates an interrupt corresponding to IRQ7 when an error condition occurs SeeAlso: INT 0D"LPT2",INT 57"DESQview",INT 5F"DoubleDOS",INT 7F"GO32" ----------0F--------------------------------- INT 0F - HP 95LX - REAL-TIME CLOCK SeeAlso: INT 0E"HP 95LX",INT 15/AX=4DD4h,INT 70 ----------10--------------------------------- INT 10 - CPU-generated (80286+) - COPROCESSOR ERROR Notes: generated by the CPU when the -ERROR pin is asserted by the coprocessor AT's and clones usually wire the coprocessor to use IRQ13, but not all get it right SeeAlso: INT 09"hardware",INT 75 ----------1000------------------------------- INT 10 - VIDEO - SET VIDEO MODE AH = 00h AL = mode (see below) Return: AL = video mode flag (Phoenix BIOS) 20h mode > 7 30h modes 0-5 and 7 3Fh mode 6 AL = CRT controller mode byte (Phoenix 386 BIOS v1.10) Notes: IBM standard modes do not clear the screen if the high bit of AL is set (EGA or higher only) the Tseng ET4000 chipset is used by the Orchid Prodesigner II, Diamond SpeedSTAR VGA, Groundhog Graphics Shadow VGA, Boca Super X VGA the installation check for Ahead adapters is the signature "AHEAD" at C000h:0025h the installation check for ATI adapters is the signature "761295520" at C000h:0031h; the byte at C000h:0043h indicates the chipset revision: 31h for 18800 32h for 18800-1 33h for 18800-2 34h for 18800-4 35h for 18800-5 the two bytes at C000h:0040h indicate the adapter type "31" VGA Wonder "32" EGA Wonder800+ the byte at C000h:0042h contains feature flags bit 1: mouse port present bit 4: programmable video clock the byte at C000h:0044h contains additional feature flags if chipset byte > 30h bit 0: 70 Hz non-interlaced display bit 1: Korean (double-byte) characters bit 2: 45 MHz memory clock rather than 40 MHz bit 3: zero wait states bit 4: paged ROMs bit 6: no 8514/A monitor support bit 7: HiColor DAC the installation check for Genoa video adapters is the signature 77h XXh 99h 66h at C000h:0037h, where XXh is 00h for Genoa 6200/6300 11h for Genoa 6400/6600 22h for Genoa 6100 33h for Genoa 5100/5200 55h for Genoa 5300/5400 the installation check for Paradise adapters is the signature "VGA=" at C000h:007Dh SeeAlso: AX=0070h,AX=007Eh,AX=10F0h,AX=6F05h,AH=FFh"GO32",INT 5F/AH=00h SeeAlso: INT 62/AX=0001h Values for video mode: text/ text pixel pixel colors disply scrn system grph resol box resoltn pages addr 00h = T 40x25 8x8 16gray 8 B800 CGA,PCjr = T 40x25 8x14 16gray 8 B800 EGA = T 40x25 8x16 16 8 B800 MCGA = T 40x25 9x16 16 8 B800 VGA 01h = T 40x25 8x8 16 8 B800 CGA,PCjr = T 40x25 8x14 16 8 B800 EGA = T 40x25 8x16 16 8 B800 MCGA = T 40x25 9x16 16 8 B800 VGA 02h = T 80x25 8x8 16gray 4 B800 CGA,PCjr = T 80x25 8x14 16gray 4 B800 EGA = T 80x25 8x16 16 4 B800 MCGA = T 80x25 9x16 16 4 B800 VGA 03h = T 80x25 8x8 16 4 B800 CGA,PCjr = T 80x25 8x14 16 4 B800 EGA = T 80x25 8x16 16 4 B800 MCGA = T 80x25 9x16 16 4 B800 VGA 04h = G 40x25 8x8 320x200 4 B800 CGA,PCjr,EGA,MCGA,VGA 05h = G 40x25 8x8 320x200 4gray B800 CGA,PCjr,EGA = G 40x25 8x8 320x200 4 B800 MCGA,VGA 06h = G 80x25 8x8 640x200 2 B800 CGA,PCjr,EGA,MCGA,VGA 07h = T 80x25 9x14 mono var B000 MDA,Hercules,EGA = T 80x25 9x16 mono B000 VGA 08h = G 20x25 8x8 160x200 16 PCjr, Tandy 1000 = T 132x25 8x8 16 B800 ATI EGA/VGA Wonder [1] = T 132x25 8x8 mono B000 ATI EGA/VGA Wonder [1] = G 90x43 8x8 720x352 mono B000 Hercules + MSHERC.COM 09h = G 40x25 8x8 320x200 16 PCjr 0Ah = G 80x25 8x8 640x200 4 PCjr, Tandy 1000 0Bh = reserved (used internally by EGA BIOS) = G 640x200 16 Tandy 1000 SL/TL 0Ch = reserved (used internally by EGA BIOS) 0Dh = G 40x25 8x8 320x200 16 8 A000 EGA,VGA 0Eh = G 80x25 8x8 640x200 16 4 A000 EGA,VGA 0Fh = G 80x25 8x14 640x350 mono 2 A000 EGA,VGA 10h = G 80x25 8x14 640x350 4 2 A000 64k EGA = G 640x350 16 A000 256k EGA,VGA 11h = G 80x30 8x16 640x480 mono A000 VGA,MCGA,ATI EGA,ATI VIP 12h = G 80x30 8x16 640x480 16/256k A000 VGA,ATI VIP = G 80x30 8x16 640x480 16/64 A000 ATI EGA Wonder = G 640x480 16 UltraVision+256K EGA 13h = G 40x25 8x8 320x200 256/256k A000 VGA,MCGA,ATI VIP 14h = T 132x25 Nx16 16 XGA, IBM Enhanced VGA [2] = G 80x25 8x8 640x200 Lava Chrome II EGA = G 640x400 16 Tecmar VGA/AD 15h = G 80x25 8x14 640x350 Lava Chrome II EGA 16h = G 80x25 8x14 640x350 Lava Chrome II EGA = G 800x600 16 Tecmar VGA/AD 17h = G 80x34 8x14 640x480 Lava Chrome II EGA = T 132x25 Tecmar VGA/AD 18h = T 132x44 8x8 mono Tseng Labs EVA = T 132x44 8x8 16/256 2 B000 Tseng ET4000 chipset = G 80x34 8x14 640x480 Lava Chrome II EGA = G 1024x768 16 Tecmar VGA/AD 19h = T 132x25 8x14 mono Tseng Labs EVA = T 132x25 8x14 16/256 4 B000 Tseng ET4000 chipset 1Ah = T 132x28 8x13 mono Tseng Labs EVA = T 132x28 8x13 16/256 4 B000 Tseng ET4000 chipset = G 640x350 256 Tecmar VGA/AD 1Bh = G 640x400 256 Tecmar VGA/AD 1Ch = G 640x480 256 Tecmar VGA/AD 1Dh = G 800x600 256 Tecmar VGA/AD 20h = G 240x128 B000 HP 95LX 21h = T 132x60 16 2 B800 Tseng ET4000 chipset = G 80x43 8x8 720x348 mono B000 DESQview 2.x+Hercules [3] 22h = T 132x44 8x8 Tseng Labs EVA = T 132x44 8x8 16/256 2 B800 Tseng ET4000 chipset = T 132x44 8x8 Ahead Systems EGA2001 = T 132x44 8x8 16 2 B800 Ahead B = T 132x44 16 Orchid Prodesigner VGA = T 132x43 Allstar Peacock (VGA) = G 80x43 8x8 720x348 mono B800 DESQview 2.x+Hercules [3] 23h = T 132x25 6x14 Tseng Labs EVA = T 132x25 8x14 16/256 4 B800 Tseng ET4000 chipset = T 132x25 8x14 Ahead Systems EGA2001 = T 132x25 8x14 16 4 B800 Ahead B = T 132x25 8x8 16 B800 ATI EGA Wonder,ATI VIP = T 132x28 Allstar Peacock (VGA) = T 132x28 16 Orchid Prodesigner VGA 24h = T 132x28 6x13 Tseng Labs EVA = T 132x28 8x13 16/256 4 B800 Tseng ET4000 chipset = T 132x28 8x12 16 1 B800 Ahead B = T 132x25 Allstar Peacock (VGA) = T 132x25 16 Orchid Prodesigner VGA 25h = G 80x60 8x8 640x480 Tseng Labs EVA = G 80x60 8x8 640x480 16/256 1 A000 Tseng ET4000 chipset = G 640x480 16 VEGA VGA = G 80x60 8x8 640x480 16 A000 Orchid Prodesigner VGA = G 80x60 8x8 640x480 16 1 A000 Ahead B (same as 26h) = G 640x480 16 NEC GB-1 26h = T 80x60 8x8 Tseng Labs EVA = T 80x60 8x8 16/256 2 B800 Tseng ET4000 chipset = T 80x60 Allstar Peacock (VGA) = T 80x60 16 Orchid ProDesigner VGA = G 80x60 8x8 640x480 Ahead Systems EGA2001 = G 80x60 8x8 640x480 16 1 A000 Ahead B (same as 25h) 27h = T 132x25 8x8 mono B000 ATI EGA Wonder,ATI VIP = G 720x512 16 VEGA VGA = G 720x512 16 Genoa 28h = T ???x??? VEGA VGA 29h = G 800x600 16 VEGA VGA = G 100x37 8x16 800x600 16 A000 Orchid = G 800x600 16 A000 STB,Genoa,Sigma = G 800x600 16 Allstar Peacock (VGA) = G 100x37 8x16 800x600 16/256 1 A000 Tseng ET3000/4000 chipset = G 800x600 ??? EIZO MDB10 2Ah = T 100x40 Allstar Peacock (VGA) = T 100x40 8x16 16 Orchid Prodesigner VGA = T 100x40 8x15 16/256 4 B800 Tseng ET4000 chipset 2Dh = G 640x350 256 VEGA VGA = G 640x350 256/256k A000 Orchid, Genoa, STB = G 80x25 8x14 640x350 256/256k 1 A000 Tseng ET3000/4000 chipset 2Eh = G 640x480 256 VEGA VGA = G 80x30 8x16 640x480 256/256k A000 Orchid = G 640x480 256/256k A000 STB,Genoa,Sigma = G 80x30 8x16 640x480 256/256k 1 A000 Tseng ET3000/4000 chipset 2Fh = T 160x50 8x8 1280x400 16 4 B800 Ahead B (Wizard/3270) = G 720x512 256 VEGA VGA = G 720x512 256 Genoa = G 80x25 8x16 640x400 256/256k 1 A000 Tseng ET4000 chipset 30h = G 800x600 256 VEGA VGA = G 100x37 8x16 800x600 256/256k A000 Orchid = G 800x600 256/256k A000 STB,Genoa,Sigma = G 720x350 2 3270 PC = G 800x600 256 Cardinal = G ???x??? B800 AT&T 6300 = G 100x37 8x16 800x600 256/256k 1 A000 Tseng ET3000/4000 chipset 32h = T 80x34 8x10 16 4 B800 Ahead B (Wizard/3270) 33h = T 132x44 8x8 16 B800 ATI EGA Wonder,ATI VIP = T 80x34 8x8 16 4 B800 Ahead B (Wizard/3270) 34h = T 80x66 8x8 16 4 B800 Ahead B (Wizard/3270) 36h = G 960x720 16 VEGA VGA = G 960x720 16 STB = G 960x720 16 Tseng ET3000 only 37h = G 1024x768 16 VEGA VGA = G 128x48 8x16 1024x768 16 A000 Orchid = G 1024x768 16 A000 STB,Genoa,Sigma = G 1024x768 16 Definicon = G 128x48 8x16 1024x768 16 1 A000 Tseng ET3000/4000 = T 132x44 8x8 mono B800 ATI EGA Wonder,ATI VIP 38h = G 1024x768 256 STB VGA/EM-16 Plus (1MB) = G 128x48 8x16 1024x768 256/256k 1 A000 Tseng ET4000 chipset = G 1024x768 256 Orchid ProDesigner II 3Dh = G 1280x1024 16 Definicon = G 128x64 8x16 1280x1024 16 1 A000 Tseng ET4000 BIOS v3.00[6] 3Eh = G 1280x961 16 Definicon 40h = G 80x25 8x16 640x400 2 1 B800 AT&T 6300, AT&T VDC600 = G 80x25 8x16 640x400 2 1 B800 Compaq Portable = T 80x43 VEGA VGA, Tecmar VGA/AD = T 80x43 Video7 V-RAM VGA = T 80x43 Tatung VGA = T 100x30 16 MORSE VGA 41h = G 640x200 16 1 AT&T 6300 = T 132x25 VEGA VGA = T 132x25 Tatung VGA = T 132x25 Video7 V-RAM VGA = T 100x50 16 MORSE VGA 42h = G 80x25 8x16 640x400 16 AT&T 6300, AT&T VDC600 = T 132x43 VEGA VGA = T 132x43 Tatung VGA = T 132x43 Video7 V-RAM VGA = T 80x34 9x10 4 4 B800 Ahead B (Wizard/3270) = T 100x60 16 MORSE VGA 43h = G 640x200 of 640x400 viewport AT&T 6300 (unsupported) = T 80x60 VEGA VGA = T 80x60 Tatung VGA = T 80x60 Video7 V-RAM VGA = T 80x45 9x8 4 4 B800 Ahead B (Wizard/3270) = T 100x75 16 MORSE VGA 44h = disable VDC and DEB output AT&T 6300 = T 100x60 VEGA VGA = T 100x60 Tatung VGA = T 100x60 Video7 V-RAM VGA 45h = T 132x28 Tatung VGA = T 132x28 Video7 V-RAM VGA 46h = G 100x40 8x15 800x600 2 AT&T VDC600 47h = G 100x37 8x16 800x600 16 AT&T VDC600 48h = G 80x50 8x8 640x400 2 B800 AT&T 6300, AT&T VDC600 49h = G 80x30 8x16 640x480 Lava Chrome II EGA 4Dh = T 120x25 VEGA VGA 4Eh = T 120x43 VEGA VGA 4Fh = T 132x25 VEGA VGA = T 132x60 some Oak Tech VGA 50h = G 80x30 8x16 640x480 16 Paradise EGA-480 = T 80x30 8x16 16/256k B800 Trident TVGA 8800/8900 = T 80x34 Lava Chrome II EGA = T 80x43 mono VEGA VGA = G 640x480 mono??? Taxan 565 EGA = T 132x25 9x14 mono Ahead Systems EGA2001 = T 132x25 9x14 4 4 B800 Ahead B = T 132x25 8x14 16 8 B800 OAK Technologies VGA-16 = T 132x30 16 MORSE VGA 51h = T 80x30 8x16 Paradise EGA-480 = T 80x30 Lava Chrome II EGA = G 80x34 8x14 640x480 16 ATI EGA Wonder = T 80x43 8x11 16/256k B800 Trident TVGA 8800/8900 = T 132x25 mono VEGA VGA = T 132x43 8x8 16 5 B800 OAK Technologies VGA-16 = T 132x28 9x12 4 4 B800 Ahead B = T 132x50 16 MORSE VGA 52h = T 80x60 Lava Chrome II EGA = T 80x60 8x8 16/256k B800 Trident TVGA 8800/8900 = G 94x29 8x14 752x410 16 ATI EGA Wonder = G 100x75 8x8 800x600 16 1 A000 OAK Technologies VGA-16 = T 132x43 mono VEGA VGA = T 132x44 9x8 mono Ahead Systems EGA2001 = T 132x44 9x8 4 2 B800 Ahead B = T 132x60 16 MORSE VGA 53h = G 100x40 8x14 800x560 16 ATI EGA Wonder,ATI VIP = G 640x480 256 Oak VGA = T 132x25 8x14 16/256k B800 Trident TVGA 8800/8900 = T 132x43 Lava Chrome II EGA = T 80x60 16 MORSE VGA = G AX PC 54h = G 100x42 8x14 800x600 16 A000 ATI EGA Wonder, VGA Wonder = G 800x600 256 Oak VGA = T 132x25 Lava Chrome II EGA = T 132x30 8x16 16/256k B800 Trident TVGA 8800/8900 = T 132x43 8x8 Paradise EGA-480 = T 132x43 7x9 16/256k B800 Paradise VGA = T 132x43 8x9 16/256k B800 Paradise VGA on multisync = T 132x43 Taxan 565 EGA = T 132x43 AST VGA Plus = T 132x43 Hewlett-Packard D1180A = T 132x43 7x9 16 AT&T VDC600 55h = T 80x66 8x8 16/256k A000 ATI VIP = T 132x25 8x14 Paradise EGA-480 = T 132x25 7x16 16/256k B800 Paradise VGA = T 132x25 8x16 16/256k B800 Paradise VGA on multisync = T 132x25 Taxan 565 EGA = T 132x25 AST VGA Plus = T 132x25 Hewlett-Packard D1180A = T 132x25 7x16 16 AT&T VDC600 = T 132x43 8x11 16/256k B800 Trident TVGA 8800/8900 = G 94x29 8x14 752x410 Lava Chrome II EGA = G 128x48 8x16 1024x768 16/256k A000 ATI VGA Wonder v4+ [4] = G 1024x768 16/256h ATI VGA Wonder Plus 56h = T 132x43 8x8 3??? 2 B000 NSI Smart EGA+ = T 132x43 7x9 4 B000 Paradise VGA = T 132x43 8x9 4 B000 Paradise VGA on multisync = T 132x43 mono Taxan 565 EGA = T 132x43 7x9 2 AT&T VDC600 = T 132x60 8x8 16/256k B800 Trident TVGA 8800/8900 = G 1024x768 16 Oak VGA 57h = T 132x25 8x14 3??? 4 B000 NSI Smart EGA+ = T 132x25 7x16 4 B000 Paradise VGA = T 132x25 8x16 4 B000 Paradise VGA on multisync = T 132x25 mono Taxan 565 EGA = T 132x25 7x16 2 AT&T VDC600 = T 132x25 9x14 16/256k B800 Trident TVGA 8800/8900 58h = G 100x75 8x8 800x600 16/256k A000 Paradise VGA = G 100x75 8x8 800x600 16 AT&T VDC600 = T 80x33 8x14 16 B800 ATI EGA Wonder,ATI VIP = G 800x600 16 AST VGA Plus, Compaq VGA = G 800x600 16 Dell VGA = G 800x600 16 Hewlett-Packard D1180A = G 800x600 ??? ELT VGA PLUS 16 = T 132x30 9x16 16/256k B800 Trident TVGA 8800/8900 59h = G 100x75 8x8 800x600 2 A000 Paradise VGA = G 100x75 8x8 800x600 2 AT&T VDC600 = T 80x66 8x8 16/256k A000 ATI VIP = G 800x600 2 AST VGA Plus, Compaq VGA = G 800x600 2 Dell VGA = G 800x600 2 Hewlett-Packard D1180A = T 132x43 9x11 16/256k B800 Trident TVGA 8800/8900 5Ah = T 132x60 9x8 16/256k B800 Trident TVGA 8800/8900 5Bh = G 800x600 16 Maxxon, SEFCO TVGA, Imtec = G 640x350 256 Genoa 6400 = T 80x30 8x16 B800 ATI VGA Wonder (undoc) = G 100x75 8x8 800x600 16/256k A000 Trident TVGA 8800, 8900 = G 800x600 ??? Vobis MVGA 5Ch = G 640x400 256 Logix, ATI Prism Elite = G 640x400 256 Maxxon, SEFCO TVGA, Imtec = G 80x25 8x16 640x400 256/256k A000 Zymos Poach, Hi Res 512 = G 80x25 8x16 640x400 256/256k A000 Trident TVGA 8800/8900 = G 640x480 256 Genoa 6400 5Dh = G 640x480 256 Logix, ATI Prism Elite = G 640x480 256 Maxxon, SEFCO TVGA, Imtec = G 80x30 8x16 640x480 256/256k A000 Zymos Poach, Hi Res 512 = G 80x30 8x16 640x480 256/256k A000 Trident TVGA 8800 (512K) 5Eh = G 640x400 256 Paradise VGA,VEGA VGA = G 640x400 256 AST VGA Plus = G 640x400 256 Compaq VGA, Dell VGA = G 80x25 8x16 640x400 256 AT&T VDC600 = G 800x600 16 Logix, ATI Prism Elite = G 800x600 256 Genoa 6400 = G 100x75 8x8 800x600 256/256k A000 Zymos Poach, Trident 8900 = G 100x75 8x8 800x600 256/256k A000 Hi Res 512 5Fh = G 640x480 256 Paradise VGA = G 640x480 256 AST VGA Plus = G 640x480 256 Compaq VGA, Dell VGA = G 640x480 256 Hewlett-Packard D1180A = G 80x30 8x16 640x480 256 AT&T VDC600 (512K) = G 1024x768 16 Logix, ATI Prism Elite = G 1024x768 16 Maxxon, Genoa 6400, Imtec = G 128x48 8x16 1024x768 16/256k A000 Zymos Poach, Hi Res 512 = G 128x48 8x16 1024x768 16/256k A000 Trident TVGA 88/8900 512K 60h = G 80x??? ???x400 Corona/Cordata BIOS 4.10+ = G 752x410 VEGA VGA = G 752x410 16 Tatung VGA = G 752x410 16 Video7 V-RAM VGA = G 80x25 8x16 640x400 256 1 A000 Ahead A, Ahead B = G 128x48 8x16 1024x768 4/256k A000 Trident TVGA 8900 = T 132x25 8x14 16/64 8 B800 Quadram Ultra VGA 61h = G ???x400 Corona/Cordata BIOS 4.10+ = G 720x540 VEGA VGA = G 720x540 16 Tatung VGA = G 720x540 16 Video7 V-RAM VGA = G 80x25 8x16 640x400 256 A000 ATI VGA Wonder,VGA Wonder+ = G 80x30 8x16 640x480 256 1 A000 Ahead A, Ahead B (512K) = G 96x64 8x16 768x1024 16/256k A000 Trident TVGA 88/8900 512K = T 132x29 8x12 16/64 8 B800 Quadram Ultra VGA 62h = G 800x600 VEGA VGA = G 800x600 16 Tatung VGA = G 800x600 16 Video7 V-RAM VGA = G 80x30 8x16 640x480 256 A000 ATI VGA Wonder,VGA Wonder+ = G 100x75 8x8 800x600 256 1 A000 Ahead A, Ahead B (512K) = G 128x48 8x16 1024x768 256/256k A000 Trident TVGA 8900, Zymos = T 132x32 8x11 16/64 6 B800 Quadram Ultra VGA 63h = G 1024x768 2 Video7 V-RAM VGA = G 100x42 8x14 800x600 256 A000 ATI VGA Wonder,VGA Wonder+ = G 128x48 7x16 1024x768 256 1 A000 Ahead B (1MB) = T 132x44 8x8 16/64 5 B800 Quadram Ultra VGA = G 720x540 16 MORSE VGA 64h = G 1024x768 4 Video7 V-RAM VGA = G 128x48 8x16 1024x768 256 A000 ATI VGA Wonder Plus = G 800x600 16 MORSE VGA = G 800x600 ??? SAMPO-Mira VGA 65h = G 1024x768 16 Video7 V-RAM VGA = G 128x48 8x16 1024x768 16 A000 ATI VGA Wonder 66h = G 640x400 256 Tatung VGA = G 640x400 256 Video7 V-RAM VGA 67h = G 640x480 256 Video7 V-RAM VGA = G 128x48 8x16 1024x768 4 A000 ATI VGA Wonder 69h = G 720x540 256 Video7 V-RAM VGA 6Ah = G 800x600 16 A000 VESA standard interface = G 800x600 16 Genoa 6400 = G 800x600 16 A000 Ahead A = G 100x75 8x8 800x600 16 1 A000 Ahead B (VESA) (see 71h) = G 800x600 16 Zymos Poach, Hi Res 512 = G 800x600 16 Epson LT-386SX in CRT Mode = G 800x600 16 Compuadd 316SL in CRT Mode = G 100x42 8x14 800x600 A000 ATI VGA Wonder (undoc) 70h = G 800x600 16 C&T chipset, Cardinal = G 90x28 8x14 720x392 16 1 A000 Ahead B = T 40x25 8x8 16 8 B800 Quadram (CGA double scan) = extended mode set (see AX=0070h) Everex Micro Enhancer EGA 71h = G 100x35 8x16 800x600 16of64 A000 NSI Smart EGA+ = G 960x720 16 C&T chipset, Cardinal = G 100x75 8x8 800x600 16 1 A000 Ahead B (same as 6Ah) = T 80x25 8x8 16 8 B800 Quadram (CGA double scan) 72h = G 1024x768 16 C&T chipset, Cardinal = T 80x60 8x8 16 B800 Quadram Ultra VGA = G 640x480 32768 A000 ATI 73h = G 80x60 8x8 640x480 16??? A000 Quadram Ultra VGA 74h = G 640x400 2 B800 Toshiba 3100 AT&T mode = G 128x48 8x16 1024x768 16 1 A000 Ahead A, Ahead B (512K) = T 80x66 8x8 16 B800 Quadram Ultra VGA 75h = G 128x48 8x16 1024x768 4 1 A000 Ahead B = G 80x66 640x528 16??? A000 Quadram Ultra VGA = G 640x528 16 Geno Super EGA Hirez+ 76h = G 128x48 8x16 1024x768 2 1 A000 Ahead B = T 94x29 8x14 16 B800 Quadram Ultra VGA 77h = G 94x29 752x410 16??? A000 Quadram Ultra VGA = G 752x410 16 Genoa Super EGA Hirez+ 78h = G 640x400 256 STB VGA/EM-16 Plus = G 640x400 256 Cardinal, C&T chipset = T 100x75 8x8 16 B800 Quadram Ultra VGA 79h = G 640x480 256 Cardinal, C&T chipset = G 100x75 800x600 16??? A000 Quadram Ultra VGA = G 800x600 16 Genoa Super EGA Hirez+ 7Ah = G 720x540 256 C&T chipset, Cardinal = T 114x60 8x8 16 B800 Quadram Ultra VGA 7Bh = G 800x600 256 C&T chipset, Cardinal = G 114x60 912x480 16??? A000 Quadram Ultra VGA = G 912x480 16 Genoa Super EGA Hirez+ 7Ch = G 512x512 16 Genoa 7Dh = G 512x512 256 Genoa 7Eh = special mode set (see AX=007Eh) Paradise VGA, AT&T VDC600 7Fh = special function set (see AX=007Fh) Paradise VGA, AT&T VDC600 82h = T 80x25 B&W AT&T VDC overlay mode [5] 83h = T 80x25 AT&T VDC overlay mode [5] 86h = G 640x200 B&W AT&T VDC overlay mode [5] 88h = G 90x43 8x8 720x352 mono B000 Hercules + MSHERC.COM C0h = G 640x400 2/prog pallet AT&T VDC overlay mode [5] C4h = disable output AT&T VDC overlay mode [5] D0h = G 640x400 2 B800 DEC VAXmate AT&T mode Notes: [1] for ATI EGA Wonder, mode 08h is only valid if SMS.COM is loaded resident. SMS maps mode 08h to mode 27h if the byte at location 0040:0063 is 0B4h, otherwise to mode 23h, thus selecting the appropriate (monochrome or color) 132x25 character mode. for ATI VGA Wonder, mode 08h is the same, and only valid if VCONFIG loaded resident [2] early XGA boards support 132-column text but do not have this BIOS mode [3] DESQview intercepts calls to change into these two modes (21h is page 0, 22h is page 1) even if there is no Hercules graphics board installed [4] ATI BIOS v4-1.00 has a text-scrolling bug in this mode [5] for AT&T VDC overlay modes, BL contains the DEB mode, which may be 06h, 40h, or 44h [6] BIOS text support is broken in this undocumented mode; scrolling moves only about 1/3 of the screen (and does even that portion incorrectly), while screen clears only clear about 3/4. ----------100070----------------------------- INT 10 - VIDEO - Everex Micro Enhancer EGA/Viewpoint VGA - EXTENDED MODE SET AX = 0070h BL = mode (see below) SeeAlso: AH=00h,AX=6F05h,AX=7000h/BX=0004h,AH=FFh"GO32" Values for video mode: text/ text pixel pixel colors disp scrn monitor adapter grph resol box resoltn page addr 00h = G 640x480 16 multsync EGA,VGA 01h = G 752x410 16 multsync EGA,VGA 02h = G 800x600 16 multsync EGA,VGA 03h = T 80x34 multsync EGA,VGA 04h = T 80x60 multsync EGA,VGA 05h = T 94x29 multsync EGA only 06h = T 94x51 multsync EGA only 07h = T 100x43 8x14 16 VGA only 08h = T 100x75 8x8 16 VGA only 09h = T 80x44 EGA EGA only 0Ah = T 132x25 EGA EGA,VGA 0Bh = T 132x44 EGA EGA,VGA 0Ch = T 132x25 CGA EGA only 0Dh = T 80x44 mono EGA only 0Eh = T 132x25 mono 0Fh = T 132x44 mono 10h = reserved 11h = G 1280x350 4 EGA only 12h = G 1280x600 4 EGA only 13h = G 640x350 256 EGA,EV673 14h = G 640x400 256 15h = G 512x480 256 16h = T 80x30 8x16 256 VGA only 18h = T 100x27 8x16 16 VGA only 20h = G 1024x768 16 Everex 629,678 Everex EV-673 21h = T 160x64 8x16 1280x1024 16 1MB VGA only 30h = G 640x480 256 Everex 629,678 Everex EV-673 31h = G 800x600 256 Everex 629,678 Everex EV-673 32h = G 128x48 8x16 1024x768 256 1MB VGA only 40h = T 132x30 8x16 16 VGA only 50h = T 132x32 8x16 mono VGA only 62h = G 40x25 8x8 320x200 32K Vwpt TC (EV629) 70h = G 64x30 8x16 512x480 32K Viewpoint TC 71h = G 80x30 8x16 640x480 32K Viewpoint TC 76h = G 64x30 8x16 512x480 16M Viewpoint TC 77h = G 80x30 8x16 640x480 16M Viewpoint TC ----------10007E----------------------------- INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - SET SPECIAL MODE AX = 007Eh BX = horizontal dimension of the mode desired CX = vertical dimension of the mode desired (both BX/CX in pixels for graphics modes, rows for alpha modes) DX = number of colors of the mode desired (0000h for monochrome modes) Return: BH = 7Eh if successful (Paradise VGA) AL = 7Eh if successful (AT&T VDC600) SeeAlso: AH=00h,AX=0070h,AX=007Fh,AX=6F05h,AH=FFh"GO32" ----------10007F----------------------------- INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - EXTENDED FUNCTIONS AX = 007Fh BH = function 00h set VGA operation 01h set non-VGA operation color modes (0,1,2,3,4,5,6) will set non-VGA CGA operation monochrome mode 7 will set non-VGA MDA/Hercules operation 02h query mode status Return: BL = 00h if operating in VGA mode, 01h if non-VGA mode CH = total video RAM size in 64k byte units CL = video RAM used by the current mode 03h lock current mode allows current mode (VGA or non-VGA) to survive re-boot 04h enter CGA mode (AT&T VDC600 only) 05h enter MDA mode (AT&T VDC600 only) 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh WRITE PARADISE REGISTERS 0,1,2,3,4,5 (port 03CEh indices 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh) BL = value to set in the paradise register 1Ah,1Bh,1Ch,1Dh,1Eh,1Fh READ PARADISE REGISTERS 0,1,2,3,4,5 (port 03CEh indices 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh) Return: BL = value of the paradise register BH = 7Fh if successful Return: AL = 7Fh if successful (AT&T VDC600) SeeAlso: AX=007Eh ----------1001------------------------------- INT 10 - VIDEO - SET TEXT-MODE CURSOR SHAPE AH = 01h CH = bit 7 should be zero bits 6,5 cursor blink (00=normal, 01=invisible, 10=erratic, 11=slow) (00=normal, other=invisible on EGA/VGA) bits 4-0 top scan line containing cursor CL = bottom scan line containing cursor (bits 0-4) Notes: buggy on EGA systems--BIOS remaps cursor shape in 43 line modes, but returns unmapped cursor shape UltraVision scales size to the current font height by assuming 14-line monochrome and 8-line color fonts; this call is not valid if cursor emulation has been disabled applications which wish to change the cursor by programming the hardware directly on EGA or abovve should call INT 10/AX=1130h or read 0040h:0085h first to determine the current font height BUG: AMI 386 BIOS and AST Premier 386 BIOS will lock up the system if AL is not equal to the current video mode SeeAlso: AH=03h,AX=CD05h ----------1002------------------------------- INT 10 - VIDEO - SET CURSOR POSITION AH = 02h BH = page number 0-3 in modes 2&3 0-7 in modes 0&1 0 in graphics modes DH = row (00h is top) DL = column (00h is left) SeeAlso: AH=03h,AH=05h,INT 60/DI=030Bh ----------1003------------------------------- INT 10 - VIDEO - GET CURSOR POSITION AND SIZE AH = 03h BH = page number 0-3 in modes 2&3 0-7 in modes 0&1 0 in graphics modes Return: AX = 0000h (Phoenix BIOS) CH = start scan line CL = end scan line DH = row (00h is top) DL = column (00h is left) Notes: a separate cursor is maintained for each of up to 8 display pages many ROM BIOSes incorrectly return the default size for a color display (start 06h, end 07h) when a monochrome display is attached SeeAlso: AH=01h,AH=02h ----------1004------------------------------- INT 10 - VIDEO - READ LIGHT PEN POSITION (except VGA) AH = 04h Return: AH = light pen trigger flag 00h not down/triggered 01h down/triggered DH,DL = row,column of character light pen is on CH = pixel row (graphics modes 04h-06h) CX = pixel row (graphics modes with >200 rows) BX = pixel column Notes: on a CGA, returned column numbers are always multiples of 2 (320- column modes) or 4 (640-column modes) returned row numbers are only accurate to two lines ----------1005------------------------------- INT 10 - VIDEO - SELECT ACTIVE DISPLAY PAGE AH = 05h AL = new page number (00h to number of pages - 1) (see AH=00h) Note: to determine whether the requested page actually exists, use AH=0Fh to query the current page after making this call SeeAlso: AH=0Fh ----------1005------------------------------- INT 10 - VIDEO - MANIPULATE CRT/CPU PAGE REGISTERS (PCjr) AH = 05h AL = subfunction 80h read CRT and CPU page registers Return: BH = CRT page register BL = CPU page register 81h set CPU page register BL = CPU page 82h set CRT page register BH = CRT page 83h set both CPU and CRT page registers BL = CPU page BH = CRT page Notes: the CPU page determines which 16K block of the first 128K of physical memory will be mapped at B800h by the hardware the CRT page determines the start address of the memory used by the video controller ----------1005------------------------------- INT 10 - VIDEO - GRAPHICS BITMAP BUFFER (Corona/Cordata BIOS v4.10+) AH = 05h AL = 00h set address of graphics bitmap buffer (video modes 60h,61h) BX = segment of buffer 0Fh get address of graphics bitmap buffer (video modes 60h,61h) Return: DX = segment of graphics bitmap buffer ----------1006------------------------------- INT 10 - VIDEO - SCROLL UP WINDOW AH = 06h AL = number of lines by which to scroll up (00h = clear entire window) BH = attribute used to write blank lines at bottom of window CH,CL = row,column of window's upper left corner DH,DL = row,column of window's lower right corner Note: affects only the currently active page (see AH=05h) Warning: some implementations have a bug which destroys BP SeeAlso: AH=07h,AH=72h,AH=73h,AX=7F07h ----------1007------------------------------- INT 10 - VIDEO - SCROLL DOWN WINDOW AH = 07h AL = number of lines by which to scroll down (00h=clear entire window) BH = attribute used to write blank lines at top of window CH,CL = row,column of window's upper left corner DH,DL = row,column of window's lower right corner Note: affects only the currently active page (see AH=05h) Warning: some implementations have a bug which destroys BP SeeAlso: AH=06h,AH=72h,AH=73h ----------1008------------------------------- INT 10 - VIDEO - READ CHARACTER AND ATTRIBUTE AT CURSOR POSITION AH = 08h BH = page number (00h to number of pages - 1) (see AH=00h) Return: AH = attribute bit 7: blink bits 6-4: background color 000 black 001 blue 010 green 011 cyan 100 red 101 magenta 110 brown 111 white bits 3-0: foreground color 0000 black 1000 dark gray 0001 blue 1001 light blue 0010 green 1010 light green 0011 cyan 1011 light cyan 0100 red 1100 light red 0101 magenta 1101 light magenta 0110 brown 1110 yellow 0111 light gray 1111 white AL = character Notes: for monochrome displays, a foreground of 1 with background 0 is underlined the blink bit may be reprogrammed to enable intense background colors using AX=1003h or by programming the CRT controller SeeAlso: AH=09h,AX=1003h,AX=5001h ----------1009------------------------------- INT 10 - VIDEO - WRITE CHARACTER AND ATTRIBUTE AT CURSOR POSITION AH = 09h AL = character to display BH = page number (00h to number of pages - 1) (see AH=00h) BL = attribute (text mode) or color (graphics mode) if bit 7 set in graphics mode, character is xor'ed onto screen CX = number of times to write character Notes: all characters are displayed, including CR, LF, and BS replication count in CX may produce an unpredictable result in graphics modes if it is greater than the number of positions remaining in the current row SeeAlso: AH=08h,AH=0Ah,AH=4Bh,INT 17/AH=60h,INT 1F,INT 43,INT 44 ----------100A------------------------------- INT 10 - VIDEO - WRITE CHARACTER ONLY AT CURSOR POSITION AH = 0Ah AL = character to display BH = page number (00h to number of pages - 1) (see AH=00h) BL = attribute (PCjr only) or color (graphics mode) if bit 7 set in graphics mode, character is xor'ed onto screen CX = number of times to write character Notes: all characters are displayed, including CR, LF, and BS replication count in CX may produce an unpredictable result in graphics modes if it is greater than the number of positions remaining in the current row SeeAlso: AH=08h,AH=09h,AH=4Bh,INT 17/AH=60h,INT 1F,INT 43,INT 44 ----------100B--BH00------------------------- INT 10 - VIDEO - SET BACKGROUND/BORDER COLOR AH = 0Bh BH = 00h BL = background/border color (border only in text modes) SeeAlso: AH=0Bh/BH=01h ----------100B--BH01------------------------- INT 10 - VIDEO - SET PALETTE AH = 0BH BH = 01h BL = palette ID 00h background, green, red, and brown/yellow 01h background, cyan, magenta, and white SeeAlso: AH=0Bh/BH=00h ----------100C------------------------------- INT 10 - VIDEO - WRITE GRAPHICS PIXEL AH = 0Ch BH = page number AL = pixel color (if bit 7 set, value is xor'ed onto screen) CX = column DX = row Notes: valid only in graphics modes BH is ignored if the current video mode supports only one page SeeAlso: AH=0Dh,AH=46h ----------100D------------------------------- INT 10 - VIDEO - READ GRAPHICS PIXEL AH = 0Dh BH = page number CX = column DX = row Return: AL = pixel color Notes: valid only in graphics modes BH is ignored if the current video mode supports only one page SeeAlso: AH=0Ch,AH=47h ----------100E------------------------------- INT 10 - VIDEO - TELETYPE OUTPUT AH = 0Eh AL = character to write BH = page number BL = foreground color (graphics modes only) Notes: characters 07h (BEL), 08h (BS), 0Ah (LF), and 0Dh (CR) are interpreted and do the expected things IBM PC ROMs dated 4/24/81 and 10/19/81 require that BH be the same as the current active page SeeAlso: AH=02h,AH=0Ah ----------100F------------------------------- INT 10 - VIDEO - GET CURRENT VIDEO MODE AH = 0Fh Return: AH = number of character columns AL = display mode (see AH=00h) BH = active page (see AH=05h) Notes: if mode was set with bit 7 set ("no blanking"), the returned mode will also have bit 7 set EGA, VGA, and UltraVision return either AL=03h (color) or AL=07h (monochrome) in all extended-row text modes SeeAlso: AH=00h,AH=05h,AX=1130h,AX=CD04h ----------100F56BX4756----------------------- INT 10 - VUIMAGE DISPLAY DRIVER (v2.20 and below) AX = 0F56h BX = 4756h CX = 4944h DL = function 01h installation check Return: AX = 5649h BX = 4443h CX = 5647h DH = 01h 02h get first video mode's parameters Return: AX = BIOS mode number BX = width in pixels CX = height in pixels DX = number of colors 03h get next video mode's parameters Return: as for DL=02h 04h display line??? ES:DI -> record (see below) ??? Return: ??? Notes: VUIMAGE is a shareware GIF/TIFF image viewer by Offe Enterprises the use of TSR display drivers was discontinued after v2.20 Format of record for DL=04h: Offset Size Description 00h WORD row number 02h WORD starting column??? 04h WORD ending column??? ??? ----------100F--SIF123----------------------- INT 10 - FRIEZE v7.41+ - INSTALLATION CHECK AH = 0Fh SI = F123h DI = 321Fh Return: AH = number of character columns AL = display mode (see AH=00h) BH = active page (see AH=05h) SI = DI = F345h if installed Notes: if mode was set with bit 7 set ("no blanking"), the returned mode will also have bit 7 set EGA, VGA, and UltraVision return either AL=03h (color) or AL=07h (monochrome) in all extended-row text modes SeeAlso: AH=0Fh"VIDEO",AH=4Bh"FRIEZE" ----------1010------------------------------- INT 10 - BIOS Window Extension v1.1 - SET WINDOW COORDINATES AH = 10h CH,CL = row,column of upper left corner of window DH,DL = row,column of lower right corner of window Return: AL = status 00h successful 01h failed AH destroyed Notes: BWE is a TSR by John J. Seal published in May 1986 Dr. Dobb's Journal when a window has been set, all output via AH=0Eh is restricted to the specified window SeeAlso: AH=11h"Window",AH=12h"Window" ----------1010------------------------------- INT 10 - VIDEO - Eagle PC2 BIOS Rev. C - SET SCROLL SPEED AH = 10h AL = speed 00h fast 01h slow (only moves characters during vertical retrace) Return: AH = previous speed ----------101000---------------------------- INT 10 - VIDEO - SET SINGLE PALETTE REGISTER (PCjr,EGA,MCGA,VGA) AX = 1000h BL = palette register number (00h-0Fh) = attribute register number (undocumented) 10h attribute mode control register (should let BIOS control this) 11h overscan color register (see also AX=1001h) 12h color plane enable register (bits 3-0 enable corresponding text attribute bit) 13h horizontal PEL panning register 14h color select register BH = color or attribute register value Notes: on MCGA, only BX = 0712h is supported under UltraVision, the palette locking status (see AX=CD01h) determines the outcome SeeAlso: AX=1002h,AX=1007h,AX=CD01h ----------101001----------------------------- INT 10 - VIDEO - SET BORDER (OVERSCAN) COLOR (PCjr,EGA,VGA) AX = 1001h BH = border color (00h-3Fh) BUG: the original IBM VGA BIOS incorrectly updates the parameter save area and places the border color at offset 11h of the palette table rather than offset 10h Note: under UltraVision, the palette locking status (see AX=CD01h) determines the outcome SeeAlso: AX=1002h,AX=1008h,AX=CD01h ----------101002----------------------------- INT 10 - VIDEO - SET ALL PALETTE REGISTERS (PCjr,EGA,VGA) AX = 1002h ES:DX -> palette register list Note: under UltraVision, the palette locking status (see AX=CD01h) determines the outcome SeeAlso: AX=1000h,AX=1001h,AX=1009h,AX=CD01h Format of palette register list: Offset Size Description 00h 16 BYTEs colors for palette registers 00h through 0Fh 10h BYTE border color ----------101003----------------------------- INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA) AX = 1003h BL = new state 00h background intensity enabled 01h blink enabled BH = 00h to avoid problems on some adapters Notes: although there is no function to get the current status, bit 5 of 0040h:0065h indicates the state when configured for a monochrome display, the Boca Research Multi-EGA with ROM v M1.1 Type D has its screen disrupted if BH is not clear SeeAlso: AH=08h ----------101007----------------------------- INT 10 - VIDEO - GET INDIVIDUAL PALETTE REGISTER (VGA,UltraVision v2+) AX = 1007h BL = palette or attribute (undoc) register number (see AX=1000h) Return: BH = palette or attribute register value Notes: UltraVision v2+ supports this function even on color EGA systems in video modes 00h-03h, 10h, and 12h; direct programming of the palette registers will cause incorrect results because the EGA registers are write-only. To guard against older versions or unsupported video modes, programs which expect to use this function on EGA systems should set BH to FFh on entry. SeeAlso: AX=1000h,AX=1009h ----------101008----------------------------- INT 10 - VIDEO - READ OVERSCAN (BORDER COLOR) REGISTER (VGA,UltraVision v2+) AX = 1008h Return: BH = border color (00h-3Fh) Notes: UltraVision v2+ supports this function even on color EGA systems in video modes 00h-03h, 10h, and 12h; direct programming of the palette registers will cause incorrect results because the EGA registers are write-only. To guard against older versions or unsupported video modes, programs which expect to use this function on EGA systems should set BH to FFh on entry. SeeAlso: AX=1001h ----------101009----------------------------- INT 10 - VIDEO - READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER (VGA) AX = 1009h ES:DX -> 17-byte buffer (see AX=1002h) Notes: UltraVision v2+ supports this function even on color EGA systems in video modes 00h-03h, 10h, and 12h; direct programming of the palette registers will cause incorrect results because the EGA registers are write-only. To guard against older versions or unsupported video modes, programs which expect to use this function on EGA systems should set the ES:DX buffer to FFh before calling. SeeAlso: AX=1002h,AX=1007h,AX=CD02h ----------101010----------------------------- INT 10 - VIDEO - SET INDIVIDUAL DAC REGISTER (VGA/MCGA) AX = 1010h BX = register number CH = new value for green (0-63) CL = new value for blue (0-63) DH = new value for red (0-63) SeeAlso: AX=1012h,AX=1015h ----------101012----------------------------- INT 10 - VIDEO - SET BLOCK OF DAC REGISTERS (VGA/MCGA) AX = 1012h BX = starting color register CX = number of registers to set ES:DX -> table of 3*CX bytes where each 3 byte group represents one byte each of red, green and blue (0-63) SeeAlso: AX=1010h,AX=1017h ----------101013----------------------------- INT 10 - VIDEO - SELECT VIDEO DAC COLOR PAGE (VGA) AX = 1013h BL = subfunction 00h select paging mode BH = 00h select 4 blocks of 64 BH = 01h select 16 blocks of 16 01h select page BH = page number (00h to 03h) or (00h to 0Fh) Note: not valid in mode 13h SeeAlso: AX=101Ah ----------101015----------------------------- INT 10 - VIDEO - READ INDIVIDUAL DAC REGISTER (VGA/MCGA) AX = 1015h BL = palette register number Return: DH = red value CH = green value CL = blue value SeeAlso: AX=1010h,AX=1017h ----------101017----------------------------- INT 10 - VIDEO - READ BLOCK OF DAC REGISTERS (VGA/MCGA) AX = 1017h BX = starting palette register CX = number of palette registers to read ES:DX -> buffer (3 * CX bytes in size) (see also AX=1012h) Return: buffer filled with CX red, green and blue triples SeeAlso: AX=1012h,AX=1015h ----------101018----------------------------- INT 10 U - VIDEO - SET PEL MASK (VGA/MCGA) AX = 1018h BL = new PEL value SeeAlso: AX=1019h ----------101019----------------------------- INT 10 U - VIDEO - READ PEL MASK (VGA/MCGA) AX = 1019h Return: BL = value read SeeAlso: AX=1018h ----------10101A----------------------------- INT 10 - VIDEO - GET VIDEO DAC COLOR-PAGE STATE (VGA) AX = 101Ah Return: BL = paging mode 00h four pages of 64 01h sixteen pages of 16 BH = current page SeeAlso: AX=1013h ----------10101B----------------------------- INT 10 - VIDEO - PERFORM GRAY-SCALE SUMMING (VGA/MCGA) AX = 101Bh BX = starting palette register CX = number of registers to convert SeeAlso: AH=12h/BL=33h ----------1010F0----------------------------- INT 10 - VIDEO - Tseng ET-4000 BIOS - SET HiColor GRAPHICS MODE AX = 10F0h BL = video mode (see also AH=00h) 32768-color modes: 13h = 320x200 2Dh = 640x350 2Eh = 640x480 2Fh = 640x400 30h = 800x600 Return: AL = 10h if supported AH = status 00h if successful other on error Note: the Tseng HiColor BIOS extensions are supported by: Diamond Computer Systems SpeedStar HiColor VGA Everex Systems HC VGA Focus Information Systems 2theMax 4000 Cardinal Technologies VGA732 Orchid ProDesigner IIs SeeAlso: AX=10F1h,AX=10F2h ----------1010F1----------------------------- INT 10 - VIDEO - Tseng ET-4000 BIOS - GET DAC TYPE AX = 10F1h Return: AL = 10h if supported BL = type of digital/analog converter 00h normal VGA DAC 01h Sierra SC1148x HiColor DAC 02h new Sierra DAC else other HiColor DAC SeeAlso: AX=10F0h,AX=10F2h ----------1010F2----------------------------- INT 10 - VIDEO - Tseng ET-4000 BIOS v3.00 - ??? AX = 10F2h BL = ??? Return: AL = 10h if supported AH = status??? 00h ??? 01h ??? BL = ??? SeeAlso: AX=10F0h,AX=10F1h ----------1011------------------------------- INT 10 - BIOS Window Extension v1.1 - GET WINDOW COORDINATES AH = 11h Return: CH,CL = row,column of upper left corner DH,DL = row,column of lower right corner Note: BWE is a TSR by John J. Seal published in May 1986 Dr. Dobb's Journal SeeAlso: AH=10h"Window",AH=12h"Window" ----------1011------------------------------- INT 10 - VIDEO - TEXT-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA) AH = 11h The following functions will cause a mode set, completely resetting the video environment, but without clearing the video buffer AL = 00h, 10h: load user-specified patterns ES:BP -> user table CX = count of patterns to store DX = character offset into map 2 block BL = block to load in map 2 BH = number of bytes per character pattern AL = 01h, 11h: load ROM monochrome patterns (8 by 14) BL = block to load AL = 02h, 12h: load ROM 8 by 8 double-dot patterns BL = block to load AL = 03h: set block specifier BL = block specifier (EGA/MCGA) bits 0,1 = block selected by chars with attribute bit 3 = 0 bits 2,3 = block selected by chars with attribute bit 3 = 1 (VGA) bits 0,1,4 = block selected by attribute bit 3 = 0 bits 2,3,5 = block selected by attribute bit 3 = 1 AL = 04h, 14h: load ROM 8x16 character set (VGA) BL = block to load The routines called with AL=1xh are designed to be called only immediately after a mode set and are similar to the routines called with AL=0xh, except that: Page 0 must be active. Bytes/character is recalculated. Max character rows is recalculated. CRT buffer length is recalculated. CRTC registers are reprogrammed as follows: R09 = bytes/char-1 ; max scan line (mode 7 only) R0A = bytes/char-2 ; cursor start R0B = 0 ; cursor end R12 = ((rows+1)*(bytes/char))-1 ; vertical display end R14 = bytes/char ; underline loc (*** BUG: should be 1 less ***) SeeAlso: AX=CD10h ----------1011------------------------------- INT 10 - VIDEO - GRAPHICS-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA) AH = 11h AL = 20h: set user 8 by 8 graphics characters (INT 1F) ES:BP -> user table AL = 21h: set user graphics characters ES:BP -> user table CX = bytes per character BL = row specifier 00h user set DL = number of rows 01h 14 rows 02h 25 rows 03h 43 rows AL = 22h: ROM 8 by 14 set BL = row specifier (see above) AL = 23h: ROM 8 by 8 double dot BL = row specifier (see above) AL = 24h: load 8x16 graphics characters (VGA/MCGA) BL = row specifier (see above) AL = 29h: load 8x16 graphics characters (Compaq Systempro) BL = row specifier (see above) Notes: these functions are meant to be called only after a mode set UltraVision v2+ sets INT 43 to the appropriate font for AL=22h,23h,24h, and 29h SeeAlso: INT 1F, INT 43 ----------101130----------------------------- INT 10 - VIDEO - GET FONT INFORMATION (EGA, MCGA, VGA) AX = 1130h BH = pointer specifier 00h INT 1Fh pointer 01h INT 43h pointer 02h ROM 8x14 character font pointer 03h ROM 8x8 double dot font pointer 04h ROM 8x8 double dot font (high 128 characters) 05h ROM alpha alternate (9 by 14) pointer (EGA,VGA) 06h ROM 8x16 font (MCGA, VGA) 07h ROM alternate 9x16 font (VGA only) 11h (UltraVision v2+) 8x20 font (VGA) or 8x19 font (autosync EGA) 12h (UltraVision v2+) 8x10 font (VGA) or 8x11 font (autosync EGA) Return: ES:BP = specified pointer CX = bytes/character of on-screen font (not the requested font!) DL = character rows on screen - 1 (VGA) = character rows on screen (EGA) Note: for UltraVision v2+, the 9xN alternate fonts follow the corresponding 8xN font at ES:BP+256N SeeAlso: AX=1100h,AX=1120h,INT 1F,INT 43 ----------1012------------------------------- INT 10 - BIOS Window Extension v1.1 - GET BLANKING ATTRIBUTE AH = 12h Return: BH = attribute to use on blanked lines when scrolling Note: BWE is a TSR by John J. Seal published in May 1986 Dr. Dobb's Journal SeeAlso: AH=11h"Window",AH=12h"Window" ----------1012--BL10------------------------- INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, EGA, VGA, MCGA) - GET EGA INFO AH = 12h BL = 10h Return: BH = 00h color mode in effect (I/O port 3Dxh) 01h mono mode in effect (I/O port 3Bxh) BL = 00h 64k bytes memory installed 01h 128k bytes memory installed 02h 192k bytes memory installed 03h 256k bytes memory installed CH = feature bits CL = switch settings Note: one possible check for the presence of an EGA or later display card is to call this function with BH=FFh; if not present, BH will be unchanged on return ----------1012--BL20------------------------- INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS,EGA,VGA,MCGA) - ALTERNATE PRTSC AH = 12h BL = 20h select alternate print screen routine Notes: installs a PrtSc routine from the video card's BIOS to replace the default PrtSc handler from the ROM BIOS, which usually does not understand screen heights other than 25 lines some adapters disable print-screen instead of enhancing it SeeAlso: INT 05 ----------1012--BL2E------------------------- INT 10 - Tseng ET-4000 BIOS v3.00 - BUG AH = 12h BL = 2Eh Note: due to an omitted end-of-list marker, this version of the BIOS will crash the system on this function ----------1012--BL30------------------------- INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA) - SELECT VERTICAL RESOLUTION AH = 12h BL = 30h AL = vertical resolution 00h 200 scan lines 01h 350 scan lines 02h 400 scan lines Return: AL = 12h if function supported ----------1012--BL31------------------------- INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - PALETTE LOADING AH = 12h BL = 31h AL = 00h enable default palette loading 01h disable default palette loading Return: AL = 12h if function supported ----------1012--BL32------------------------- INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - VIDEO ADDRESSING AH = 12h BL = 32h AL = 00h enable video addressing 01h disable video addressing Return: AL = 12h if function supported ----------1012--BL33------------------------- INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - GRAY-SCALE SUMMING AH = 12h BL = 33h AL = 00h enable gray scale summing 01h disable gray scale summing Return: AL = 12h if function supported SeeAlso: AX=101Bh,AX=BF06h ----------1012--BL34------------------------- INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA) - CURSOR EMULATION AH = 12h BL = 34h AL = 00h enable alphanumeric cursor emulation 01h disable alphanumeric cursor emulation Return: AL = 12h if function supported ----------1012--BL35------------------------- INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS) - DISPLAY-SWITCH INTERFACE AH = 12h BL = 35h AL = 00h initial adapter video off 01h initial planar video on 02h switch active video off 03h switch inactive video on 80h *UNDOCUMENTED* set system board video active flag ES:DX -> buffer (128 byte save area if AL = 0, 2 or 3) Return: AL = 12h if function supported ----------1012--BL36------------------------- INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, VGA) - VIDEO REFRESH CONTROL AH = 12h BL = 36h AL = 00h enable refresh 01h disable refresh Return: AL = 12h if function supported ----------1012--BH55------------------------- INT 10 - VIDEO - ALTERNATE FUNC SELECT (ATI,Tatung,Taxan) - ENHANCED FEATURES AH = 12h BH = 55h BL = subfunction 00h disabled enhanced features 01h enable enhanced features 02h get status Return: AL = status flags bit 3: set if enhanced features enabled bits 7-5 monitor type 000 PS/2 mono 001 PS/2 color 010 multi-sync 011 Taxan 650 25kHz 100 RGB 101 mono 110 EGA 111 Compaq internal 03h disable register trapping (CGA emulation) 04h enable register trapping 05h program mode described by table at ES:BP 06h get mode table AL = video mode Return: ES:BP -> table suitable for mode AL (and subfnc BL=05h) BP = FFFFh on error Format of ATI VGA Wonder video mode table: Offset Size Description 00h BYTE number of columns 01h BYTE maximum row (number of rows - 1) 02h BYTE scan lines per row 03h WORD video buffer size in bytes 05h 4 BYTEs values for Sequencer registers 1-4 09h BYTE value for Miscellaneous Output register 0Ah 25 BYTEs values for CRTC registers 00h-18h 00h horizontal total size (chars) 01h horizontal displayed (chars) 02h horizontal sync position (chars) 03h horizontal sync width (chars) 04h vertical total size (char rows) 05h vertical total adjust (scan lines) 06h vertical displayed (char rows) 07h vertical sync position (char rows) 08h interlace mode 09h max scan line in row 0Ah cursor start scan line 0Bh cursor end scan line 0Ch screen memory start (high) 0Dh screen memory start (low) 0Eh cursor address (high) 0Fh cursor address (low) 10h light pen (high) 11h light pen (low) 23h 20 BYTEs default palette (values for Attribute Controller regs 00h-13h) 37h 9 BYTEs values for Graphics Controller registers 00h-08h ----------1012--BL74------------------------- INT 10 - Tseng ET-4000 BIOS v3.00 - BUG AH = 12h BL = 74h Note: due to an omitted end-of-list marker, this version of the BIOS will crash the system on this function ----------1012--BL80------------------------- INT 10 - Tseng ET-4000 BIOS v3.00 - BUG AH = 12h BL = 80h Note: due to an omitted end-of-list marker, this version of the BIOS will crash the system on this function ----------1012--BLBE------------------------- INT 10 - Tseng ET-4000 BIOS v3.00 - BUG AH = 12h BL = BEh Note: due to an omitted end-of-list marker, this version of the BIOS will crash the system on this function ----------1012--BLC6------------------------- INT 10 - Tseng ET-4000 BIOS v3.00 - BUG AH = 12h BL = C6h Note: due to an omitted end-of-list marker, this version of the BIOS will crash the system on this function ----------1012--BLF0------------------------- INT 10 - Tseng ET-4000 BIOS v3.00 - BUG AH = 12h BL = F0h Note: due to an omitted end-of-list marker, this version of the BIOS will crash the system on this function ----------1013------------------------------- INT 10 - VIDEO - WRITE STRING (AT and later,EGA) AH = 13h AL = write mode bit 0: update cursor after writing 1: string contains alternating characters and attributes BH = page number BL = attribute if string contains only characters CX = number of characters in string DH,DL = row,column at which to start writing ES:BP -> string to write Notes: recognizes CR, LF, BS, and bell also available PC or XT with EGA or higher HP 95LX only supports write mode 00h BUG: on the IBM VGA Adapter, any scrolling which may occur is performed on the active page rather than the requested page SeeAlso: AH=09h,AH=0Ah ----------101400----------------------------- INT 10 - VIDEO - LOAD USER-SPECIFIED LCD CHARACTER FONT (CONV,Compaq Port 386) AX = 1400h ES:DI -> character font BH = number of bytes per character 08h or 10h (Compaq) BL = 00h load main font (block 0) 01h load alternate font (block 1) CX = number of characters to store DX = character offset into RAM font area SeeAlso: AH=11h,AX=1401h ----------101401----------------------------- INT 10 - VIDEO - LOAD SYSTEM ROM DEFAULT LCD CHARACTER FONT (CONV,CP386) AX = 1401h BL = font to load 00h main font (block 0) 01h alternate font (block 1) SeeAlso: AH=11h,AX=1400h ----------101402----------------------------- INT 10 - VIDEO - SET MAPPING OF LCD HIGH INTENSITY ATTRIBUTES (CONV,CP386) AX = 1402h BL = function 00h ignore high intensity attribute 01h map high intensity to underscore 02h map high intensity to reverse video 03h map high intensity to selected alternate font B0h half intensity (Compaq) B1h toggle active intensity bit interpretation (CP386) ----------1015------------------------------- INT 10 - VIDEO - GET PHYSICAL DISPLAY PARAMETERS (CONVERTIBLE) AH = 15h Return: AX = alternate display adapter type 0000h none 5140h LCD 5153h CGA 5151h mono ES:DI -> parameter table (see below) SeeAlso: AH=1Bh Format of display parameter table: Offset Size Description 00h WORD monitor model number 02h WORD vertical pixels per meter 04h WORD horizontal pixels per meter 06h WORD total vertical pixels 08h WORD total horizontal pixels 0Ah WORD horizontal pixel separation in micrometers 0Ch WORD vertical pixel separation in micrometers ----------1015------------------------------- INT 10 - VIDEO - SET SUPERIMPOSE MODE (Sperry PC) AH = 15h AL = superimpose mode 00h show graphics screen 01h show text screen 02h show text screen superimposed on graphics screen ----------101A------------------------------- INT 10 - VIDEO - DISPLAY COMBINATION (PS,VGA/MCGA) AH = 1Ah AL = 00h read display combination code Return: BL = active display code (see below) BH = alternate display code 01h set display combination code BL = active display code (see below) BH = alternate display code Return: AL = 1Ah if function was supported Values for display combination code: 00h no display 01h monochrome adapter w/ monochrome display 02h CGA w/ color display 03h reserved 04h EGA w/ color display 05h EGA w/ monochrome display 06h PGA w/ color display 07h VGA w/ monochrome analog display 08h VGA w/ color analog display 09h reserved 0Ah MCGA w/ digital color display 0Bh MCGA w/ monochrome analog display 0Ch MCGA w/ color analog display FFh unknown display type ----------101B------------------------------- INT 10 - VIDEO - FUNCTIONALITY/STATE INFORMATION (PS,VGA/MCGA) AH = 1Bh BX = implementation type 0000h return funtionality/state information ES:DI -> 64 byte buffer for state information (see below) Return: AL = 1Bh if function supported ES:DI buffer filled with state information SeeAlso: AH=15h Format of state information: Offset Size Description 00h DWORD address of static funtionality table (see below) 04h BYTE video mode in effect 05h WORD number of columns 07h WORD length of regen buffer in bytes 09h WORD starting address of regen buffer 0Bh WORD cursor position for page 0 0Dh WORD cursor position for page 1 0Fh WORD cursor position for page 2 11h WORD cursor position for page 3 13h WORD cursor position for page 4 15h WORD cursor position for page 5 17h WORD cursor position for page 6 19h WORD cursor position for page 7 1Bh WORD cursor type 1Dh BYTE active display page 1Eh WORD CRTC port address 20h BYTE current setting of register (3?8) 21h BYTE current setting of register (3?9) 22h BYTE number of rows 23h WORD bytes/character 25h BYTE display combination code of active display 26h BYTE DCC of alternate display 27h WORD number of colors supported in current mode 29h BYTE number of pages supported in current mode 2Ah BYTE number of scan lines active (0,1,2,3) = (200,350,400,480) 2Bh BYTE primary character block 2Ch BYTE secondary character block 2Dh BYTE miscellaneous flags bit 0 all modes on all displays on 1 gray summing on 2 monochrome display attached 3 default palette loading disabled 4 cursor emulation enabled 5 0 = intensity; 1 = blinking 6 PS/2 P70 plasma display (without 9-dot wide font) active 7 reserved 2Eh 3 BYTEs reserved (00h) 31h BYTE video memory available 00h = 64K, 01h = 128K, 02h = 192K, 03h = 256K 32h BYTE save pointer state flags bit 0 512 character set active 1 dynamic save area present 2 alpha font override active 3 graphics font override active 4 palette override active 5 DCC override active 6 reserved 7 reserved 33h 13 BYTEs reserved (00h) Format of Static Functionality Table: Offset Size Description 00h BYTE modes supported #1 bit 0 to bit 7 = 1 modes 0,1,2,3,4,5,6 supported 01h BYTE modes supported #2 bit 0 to bit 7 = 1 modes 8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh supported 02h BYTE modes supported #3 bit 0 to bit 3 = 1 modes 10h,11h,12h,13h supported bit 4 to bit 7 reserved 03h 4 BYTEs reserved 07h BYTE scan lines supported bit 0 to bit 2 = 1 if scan lines 200,350,400 supported 08h BYTE total number of character blocks available in text modes 09h BYTE maximum number of active character blocks in text modes 0Ah BYTE miscellaneous function flags #1 bit 0 all modes on all displays function supported 1 gray summing function supported 2 character font loading function supported 3 default palette loading enable/disable supported 4 cursor emulation function supported 5 EGA palette present 6 color palette present 7 color paging function supported 0Bh BYTE miscellaneous function flags #2 bit 0 light pen supported 1 save/restore state function 1Ch supported 2 intensity blinking function supported 3 Display Combination Code supported 4-7 reserved 0Ch WORD reserved 0Eh BYTE save pointer function flags bit 0 512 character set supported 1 dynamic save area supported 2 alpha font override supported 3 graphics font override supported 4 palette override supported 5 DCC extension supported 6 reserved 7 reserved 0Fh BYTE reserved ----------101C------------------------------- INT 10 - VIDEO - SAVE/RESTORE VIDEO STATE (PS50+,VGA) AH = 1Ch AL = 00h return state buffer size Return: BX = number of 64-byte blocks needed 01h save video state ES:BX -> buffer 02h restore video state ES:BX -> buffer containing previously saved state CX = requested states bit 0 video hardware 1 BIOS data areas 2 color registers and DAC state 3-15 reserved Return: AL = 1Ch if function supported ----------101D------------------------------- INT 10 - Tseng ET-4000 BIOS v3.00 - BUG AH = 1Dh Note: this version of the BIOS jumps to a random location on this function due to a fencepost error ----------103000CX0000----------------------- INT 10 - VIDEO - LOCATE 3270PC CONFIGURATION TABLE (INSTALLATION CHECK) AX = 3000h CX = 0000h DX = 0000h Return: CX:DX -> 3270PC configuration table (see below for format) CX:DX = 0000h:0000h if 3270PC Control Program not active Format of 3270 PC configuration table: Offset Size Description 00h BYTE aspect ratio X 01h BYTE aspect ratio Y 02h BYTE monitor type 00h = 5151 (mono) or 5272 (color) 01h = 3295 02h = 5151 or 5272 with XGA (???) graphics adapter 03h = 5279 with 3270PC G adapter 04h = 5379 model C01 with 3270PC GX adapter 05h = 5379 model M01 with 3270PC GX adapter 07h = non-3270PC with 3270 Workstation Program FFh = 3270PC Control Program not loaded 03h BYTE reserved 04h BYTE adapter ID 00h = 5151/5272 adapter 04h = 5151/5272 with XGA adapter 30h = 3295 or 3270PC G/GX adapter 05h BYTE reserved 06h BYTE function flags 1 bit 7: mono text, 1 page 6: color text, 1 page 5: color text, 4 pages 4: CGA color graphics 3: 720x350 two-color graphics 2: 360x350 four-color graphics 1: 720x350 eight-color graphics 07h BYTE function flags 2 bit 6: GPI graphics supported 08h WORD segment address of Control Program Level table (see below) 0Ah 10 BYTEs reserved Format of Control Program Level table: Offset Size Description 00h WORD program version 02xxh = 3270PC Control Program v2.xx 03xxh = 3270PC Control Program v3.xx 04xxh = 3270 Workstation Program v1.xx 02h BYTE Control Program ID (00h) 03h 27 BYTEs Control Program Descriptor ("IBM 3270 PC CONTROL PROGRAM") ----------1038------------------------------- INT 10 - Tinytalk Personal v1.09f - GET CONFIGURATION INFO AH = 38h Return: ES:DI -> configuration info (see below) Notes: Tinytalk is a shareware screen reader by OMS Development/Eric Bohlman this call is also used as the installation check by verifying that the returned ES:DI points at valid configuration info SeeAlso: INT 14/AX=F0F1h,INT 2F/FB00h"AutoBraille" Format of configuration info: Offset Size Description 00h 8 BYTEs signature "TTCONFIG" 08h WORD size of configuration data, not counting signature, this WORD, or the following byte 0Ah BYTE ??? 0Bh ??? configuration data ----------1040------------------------------- INT 10 - VIDEO - SET GRAPHICS MODE (Hercules GRAFIX) AH = 40h SeeAlso: AH=41h ----------1041------------------------------- INT 10 - VIDEO - SET TEXT MODE (Hercules GRAFIX) AH = 41h SeeAlso: AH=40h ----------1042------------------------------- INT 10 - VIDEO - CLEAR CURRENT PAGE (Hercules GRAFIX) AH = 42h SeeAlso: AH=45h ----------1043------------------------------- INT 10 - VIDEO - SELECT DRAWING PAGE (Hercules GRAFIX) AH = 43h AL = page number (0,1) SeeAlso: AH=44h,AH=45h ----------1044------------------------------- INT 10 - VIDEO - SELECT DRAWING FUNCTION (Hercules GRAFIX) AH = 44h AL = drawing function 00h clear pixels 01h set pixels 02h invert pixels SeeAlso: AH=45h,AH=46h,AH=4Ch,AH=4Dh ----------1045------------------------------- INT 10 - VIDEO - SELECT PAGE TO DISPLAY (Hercules GRAFIX) AH = 45h AL = page number (0,1) SeeAlso: AH=42h,AH=43h ----------1046------------------------------- INT 10 - VIDEO - DRAW ONE PIXEL (Hercules GRAFIX) AH = 46h DI = x (0-720) BP = y (0-347) Note: function 44h determines operation and function 43h which page to use SeeAlso: AH=0Ch,AH=47h,AH=49h,AH=4Ch,AH=4Dh ----------1047------------------------------- INT 10 - VIDEO - FIND PIXEL VALUE (Hercules GRAFIX) AH = 47h DI = x (0-720) BP = y (0-347) Return: AL = 00h pixel clear AL = 01h pixel set Note: function 43h specifies which page is used SeeAlso: AH=0Dh,AH=46h ----------1048------------------------------- INT 10 - VIDEO - MOVE TO POINT (Hercules GRAFIX) AH = 48h DI = x (0-720) BP = y (0-347) SeeAlso: AH=49h ----------1049------------------------------- INT 10 - VIDEO - DRAW TO POINT (Hercules GRAFIX) AH = 49h DI = x (0-720) BP = y (0-347) Note: function 48h or 49h specify first point, 44h operation and 43h page to use SeeAlso: AH=43h,AH=44h,AH=48h,AH=4Ch,AH=4Dh ----------104A------------------------------- INT 10 - VIDEO - BLOCK FILL (Hercules GRAFIX) AH = 4Ah DI = x coordinate of lower left corner BP = y coordinate of lower left corner BX = height in pixels CX = width in pixels Note: draws a solid rectangle SeeAlso: AH=4Eh ----------104B------------------------------- INT 10 - VIDEO - DISPLAY CHARACTER (Hercules GRAFIX) AH = 4Bh AL = character to display DI = x (0-720) BP = y (0-347) Note: unlike the other BIOS character functions character position is specified in pixels rather than rows and columns SeeAlso: AH=09h,AH=0Ah ----------104B------------------------------- INT 10 - FRIEZE v7.0+ - API AH = 4Bh CL = function 00h reserved 01h load window ES:BX -> ASCIZ filename from which to read 02h save window ES:BX -> ASCIZ filename to which to write 03h (v7.41) set ??? AL = ??? 04h (v7.41) set ??? AL = ??? 06h (v7.41) ??? AL = ??? 07h set window size ES:BX -> four-WORD structure with Xmin, Ymin, Xmax, Ymax 09h set patterns ES:BX -> 16-BYTE vector of screen->printer color correspondnces 0Ah get patterns ES:BX -> 16-BYTE buffer for color correspondences 0Bh set mode AL = mode 0Ch (v7.41) ??? AL = ??? 00h ??? (calls original INT 05) else ??? 0Dh (v7.41) ??? AL = ??? 00h ??? (calls original INT 05) else ??? 0Eh (v7.41) ??? ??? 0Fh get window ES:BX -> four-WORD buffer for Xmin, Ymin, Xmax, Ymax 10h set print options ES:BX -> printer options in same format as FRIEZE cmdline 11h (v7.41) ??? ??? 12h (v7.41) ??? ??? 13h (v7.41) ??? ??? 14h get version Return: AH = major version (00h if FRIEZE version before 7) AL = minor version 15h set parameters ES:BX -> parameter table (see below) 16h get parameters ES:BX -> buffer for parameter table (see below) 17h get printer resolution ES:BX -> 12-WORD table for six horizontal/vertical resol pairs 18h reserved (v8.0 only) 50h (v7.41) get ??? Return: AX = ??? 51h (v7.41) get ??? Return: ES = ??? (seen 2348h) AX = ??? (seen 8432h) Return: AX = status 00h successful 01h user aborted printout with ESC 02h reserved 03h file read error 04h file write error 05h file not found 06h invalid header (not an image or wrong screen mode) 07h file close error 08h disk error 09h printer error 0Ah invalid function 0Bh can't create file 0Ch wrong video mode SeeAlso: AH=0Fh/SI=F123h Format of parameter table: Offset Size Description 00h WORD top margin (1/100 inch) 02h WORD left margin (1/100 inch) 04h WORD horizontal size (1/100 inch) 06h WORD vertical size (1/100 inch) 08h WORD quality/draft mode 00h draft mode 01h quality mode 02h use horizontal/vertical resolution for output resolution 0Ah WORD printer horizontal resolution (dots per inch) 0Ch WORD printer vertical resolution (dots per inch) 0Eh WORD reserved (FFFFh) Note: any field which should remain unchanged may be filled with FFFFh ----------104C------------------------------- INT 10 - VIDEO - DRAW ARC (Hercules GRAFIX) AH = 4Ch AL = quadrant (1 = upper right, 2 = upper left, etc) DI = x coordinate of center BP = y coordinate of center BX = radius SeeAlso: AH=49h,AH=4Dh ----------104D------------------------------- INT 10 - VIDEO - DRAW CIRCLE (Hercules GRAFIX) AH = 4Dh DI = x of center BP = y of center BX = radius SeeAlso: AH=49h,AH=4Ch ----------104E------------------------------- INT 10 - VIDEO - FILL AREA (Hercules GRAFIX) AH = 4Eh DI = x coordinate of an interior point BP = y coordinate of an interior point Notes: fills convex polygonal areas the first fill makes the figure solid, the second erases it SeeAlso: AH=4Ah ----------104F00----------------------------- INT 10 - VESA SuperVGA BIOS - GET SuperVGA INFORMATION AX = 4F00h ES:DI -> 256-byte buffer for SuperVGA information (see below) Return: AL = 4Fh function supported AH = status 00h successful 01h failed SeeAlso: AX=4F01h,AX=7F00h Format of SuperVGA information: Offset Size Description 00h 4 BYTEs signature ('VESA') 04h WORD VESA version number 06h DWORD pointer to OEM name "761295520" for ATI 0Ah 4 BYTEs capabilities 0Eh DWORD pointer to list of supported VESA and OEM video modes (list of words terminated with FFFFh) 12h 238 BYTEs reserved ----------104F01----------------------------- INT 10 - VESA SuperVGA BIOS - GET SuperVGA MODE INFORMATION AX = 4F01h CX = SuperVGA video mode ES:DI -> 256-byte buffer mode information (see below) Return: AL = 4Fh function supported AH = status 00h successful 01h failed SeeAlso: AX=4F00h,AX=4F02h Format of mode information: Offset Size Description 00h WORD mode attributes bit 0: mode supported bit 1: optional information available bit 2: BIOS output supported bit 3: set if color, clear if monochrome bit 4: set if graphics mode, clear if text mode 02h BYTE window A attributes bit 0: exists bit 1: readable bit 2: writable bits 3-7 reserved 03h BYTE window B attributes (as for window A) 04h WORD window granularity in K 06h WORD window size in K 08h WORD start segment of window A 0Ah WORD start segment of window B 0Ch DWORD -> FAR window positioning function (equivalent to AX=4F05h) 10h WORD bytes per scan line ---remainder is optional for VESA modes in v1.0/1.1, needed for OEM modes--- 12h WORD width in pixels 14h WORD height in pixels 16h BYTE width of character cell in pixels 17h BYTE height of character cell in pixels 18h BYTE number of memory planes 19h BYTE number of bits per pixel 1Ah BYTE number of banks 1Bh BYTE memory model type 00h text 01h CGA graphics 02h HGC graphics 03h 16-color (EGA) graphics 04h packed pixel graphics 05h "sequ 256" (non-chain 4) graphics 06h direct color (HiColor, 24-bit color) 07h YUV 08h-0Fh reserved for VESA 10h-FFh OEM memory models 1Ch BYTE size of bank in K 1Dh BYTE number of image pages 1Eh BYTE reserved (0) ---VBE v1.2+--- 1Fh BYTE red mask size 20h BYTE red field position 21h BYTE green mask size 22h BYTE green field size 23h BYTE blue mask size 24h BYTE blue field size 25h BYTE reserved mask size 26h BYTE reserved mask position 27h BYTE direct color mode info 28h BYTE reserved (0) ----------104F02----------------------------- INT 10 - VESA SuperVGA BIOS - SET SuperVGA VIDEO MODE AX = 4F02h BX = mode bit 15 set means don't clear video memory Return: AL = 4Fh function supported AH = status 00h successful 01h failed SeeAlso: AX=4F01h,AX=4F03h Values for VESA video mode: 00h-FFh OEM video modes (see AH=00h) 100h 640x400x256 101h 640x480x256 102h 800x600x16 103h 800x600x256 104h 1024x768x16 105h 1024x768x256 106h 1280x1024x16 107h 1280x1024x256 108h 80x60 text 109h 132x25 text 10Ah 132x43 text 10Bh 132x50 text 10Ch 132x60 text ---VBE v1.2--- 10Dh 320x200x32K 10Eh 320x200x64K 10Fh 320x200x16M 110h 640x480x32K 111h 640x480x64K 112h 640x480x16M 113h 800x600x32K 114h 800x600x64K 115h 800x600x16M 116h 1024x768x32K 117h 1024x768x64K 118h 1024x768x16M 119h 1280x1024x32K 11Ah 1280x1024x64K 11Bh 1280x1024x16M ----------104F03----------------------------- INT 10 - VESA SuperVGA BIOS - GET CURRENT VIDEO MODE AX = 4F03h Return: AL = 4Fh function supported AH = status 00h successful 01h failed BX = video mode (see AX=4F02h) SeeAlso: AX=4F02h ----------104F04----------------------------- INT 10 - VESA SuperVGA BIOS - SAVE/RESTORE SuperVGA VIDEO STATE AX = 4F04h DL = subfunction 00h get state buffer size Return: BX = number of 64-byte blocks needed 01h save video states ES:BX -> buffer 02h restore video states ES:BX -> buffer CX = flags for states to save/restore bit 0: video hardware state bit 1: video BIOS data state bit 2: video DAC state bit 3: SuperVGA state Return: AL = 4Fh function supported AH = status 00h successful 01h failed ----------104F05----------------------------- INT 10 - VESA SuperVGA BIOS - CPU VIDEO MEMORY CONTROL AX = 4F05h BH = subfunction 00h select video memory window DX = window address in video memory (in granularity units) 01h get video memory window Return: DX = window address in video memory (in gran. units) BL = window number 00h window A 01h window B Return: AL = 4Fh function supported AH = status 00h successful 01h failed SeeAlso: AX=4F01h,AX=4F06h,AX=4F07h,AX=7000h/BX=0004h ----------104F06----------------------------- INT 10 - VESA SuperVGA BIOS v1.1 - GET/SET LOGICAL SCAN LINE LENGTH AX = 4F06h BL = function 00h set scan line length CX = desired width in pixels 01h get scan line length Return: AL = 4Fh if function supported AH = status 00h successful 01h failed BX = bytes per scan line CX = number of pixels per scan line DX = maximum number of scan lines Notes: if the desired width is not achievable, the next larger width will be set the scan line may be wider than the visible area of the screen this function is valid in text modes, provided that values are multiplied by the character cell width/height SeeAlso: AX=4F01h,AX=4F05h,AX=4F07h ----------104F07BH00------------------------- INT 10 - VESA SuperVGA BIOS v1.1 - GET/SET DISPLAY START AX = 4F07h BH = 00h (reserved) BL = 00h set display start CX = leftmost displayed pixel in scan line DX = first displayed scan line = 01h get display start Return: BH = 00h CX = leftmost displayed pixel in scan line DX = first displayed scan line Return: AL = 4Fh if function supported AH = status 00h successful 01h failed Note: this function is valid in text modes, provided that values are multiplied by the character cell width/height SeeAlso: AX=4F01h,AX=4F05h,AX=4F06h ----------104F08----------------------------- INT 10 - VESA SuperVGA BIOS v1.2+ - GET/SET DAC PALETTE CONTROL AX = 4F08h BL = function 00h set DAC palette width BH = desired number of bits per primary color 01h get DAC palette width Return: AL = 4Fh if function supported AH = status BH = current number of bits per primary (06h = standard VGA) ----------104FFF----------------------------- INT 10 - VESA SuperVGA BIOS - Everex - TURN VESA ON/OFF AX = 4FFFh DL = new state (00h off, 01h on) Return: AX = 0000h if successful ----------1050------------------------------- INT 10 - SCROLOCK.COM - INSTALLATION CHECK AH = 50h Return: BX = 1954h if installed AL = 00 if inactive, nonzero if active Note: SCROLOCK is a utility supplied with System Enhancement Associates' ARC SeeAlso: AH=51h ----------105000----------------------------- INT 10 - VIDEO - AX PC - SET SCREEN COUNTRY CODE AX = 5000h BX = country code 0001h USA (English), 0051h Japan Return: AL = status 00h successful 01h bad country code 02h other error SeeAlso: AX=5001h,INT 16/AX=5000h ----------105001----------------------------- INT 10 - VIDEO - AX PC - GET SCREEN COUNTRY CODE AX = 5001h Return: AL = status 00h successful BX = country code 02h error SeeAlso: AH=00h,AX=5000h,INT 16/AX=5001h,INT 21/AH=38h ----------1051------------------------------- INT 10 - SCROLOCK.COM - ENABLE/DISABLE AH = 51h AL = state 00h disable nonzero enable Note: SCROLOCK is a utility supplied with System Enhancement Associates' ARC SeeAlso: AH=50h"SCROLOCK" ----------105100----------------------------- INT 10 - VIDEO - AX PC - REGISTER EXTERNAL CHARACTER AX = 5100h BH = character width in bits (10h) BL = character height (10h) DX = character code (DH = F0h-F3h, DL=40h-7Eh,80h-FCh) ES:BP -> character bitmap Return: AL = status (00h successful, 01h failed) SeeAlso: AX=5101h,INT 1F ----------105101----------------------------- INT 10 - VIDEO - AX PC - READ CHARACTER AX = 5101h BH = character width in bits BL = character height DX = character code (DH = 00h if 8-bit character) ES:BP -> buffer for character bitmap Return: AL = status (00h successful, 01h failed) SeeAlso: AH=09h,AX=5100h ----------105200----------------------------- INT 10 - VIDEO - AX PC - SET VIRTUAL TEXT RAM BUFFER AX = 5200h BX = segment of buffer SeeAlso: AX=5201h ----------105201----------------------------- INT 10 - VIDEO - AX PC - GET VIRTUAL TEXT RAM BUFFER AX = 5201h Return: BX = segment of buffer or 0000h if failed SeeAlso: AX=8300h,AH=FEh ----------1053------------------------------- INT 10 - Show Partner F/X v3.6 - START PRESENTATION AH = 53h DS:DX -> ASCIZ name of presentation file (no path, extension forced to .PR2) Return: ??? SeeAlso: AH=55h ----------1055------------------------------- INT 10 - Show Partner F/X v3.6 - UNINSTALL AH = 55h Return: FXSHOW.EXE removed from memory SeeAlso: AH=53h ----------105555----------------------------- INT 10 - VIDEO - ATI EGA/VGA Wonder Super Switch - INSTALLATION CHECK AX = 5555h Return: AX = AAAAh if installed BX:CX -> ??? routine in SMS.COM resident portion -> data area in VCONFIG Note: Super Switch (SMS.COM) is a video mode switch program supplied with ATI EGA Wonder. It also maps video mode 08h to 27h or 23h. SeeAlso: INT 10/AH=00h,INT 2F/AX=6400h Format of data area: Offset Size Description 00h DWORD original INT 09 vector 04h DWORD original INT 10 vector 08h DWORD original INT 1C vector 0Ch WORD screen saver state, 0=off, 1=on 0Eh WORD blanking interval in clock ticks ----------106A00BX0000----------------------- INT 10 - Direct Graphics Interface Standard (DGIS) - INQUIRE AVAILABLE DEVICES AX = 6A00h BX = 0000h CX = 0000h DX = buffer length (may be 0) ES:DI -> buffer Return: BX = number of bytes stored in buffer CX = bytes required for all descriptions (0 if no DGIS) Note: buffer contains descriptions and addresses of DGIS-compatible display(s) and printer(s) SeeAlso: AX=6A02h ----------106A01CX0000----------------------- INT 10 - DGIS - REDIRECT CHARACTER OUTPUT AX = 6A01h CX = 0000h ES:DI = address of device to send INT 10 output to Return: CX = 0000h output could not be redirected else INT 10h output now routed to requested display SeeAlso: AX=6A02h ----------106A02----------------------------- INT 10 - DGIS - INQUIRE INT 10 OUTPUT DEVICE AX = 6A02h ES:DI = 0000h:0000h Return: ES:DI = 0000h:0000h if current display is non-DGIS else address of the current DGIS INT 10 display SeeAlso: AX=6A00h,AX=6A01h ----------106E00------------------------------------ INT 10 - Paradise VGA internal - GET ??? AX = 6E00h Return: AH = ??? (depends on serial number) AL = ??? BX = ??? CL = ??? CH = ??? DX = ??? SeeAlso: AX=6E04,AX=6E05 ----------106E04------------------------------------- INT 10 - Paradise VGA internal - GET SCREEN SIZE AND ??? AX = 6E04h Return: BX = screen width (columns) CX = screen height (lines) AH = ??? (05h or FFh) AL = ??? (04h or video mode) SeeAlso: AX=6E00,AX=6E05 ----------106E05------------------------------------- INT 10 - Paradise VGA internal - SET MODE AX = 6E05h BL = mode Note: like AH=0, AL=BL. SeeAlso: AH=00,AX=6E00,AX=6E04,AX=6F05h ----------106F00----------------------------- INT 10 - VIDEO - INSTALLATION CHECK (Video7 VGA,VEGA VGA) AX = 6F00h Return: BX = 5637h ('V7') indicates Video7 VGA/VEGA VGA extensions are present ----------106F01----------------------------- INT 10 - VIDEO - GET MONITOR INFO (Video7 VGA,VEGA VGA) AX = 6F01h Return: AL = monitor type code (VEGA VGA only) AH = status register information bit 0 = display enable 0 = display enabled 1 = vertical or horizontal retrace in progress bit 1 = light pen flip flop set bit 2 = light pen switch activated bit 3 = vertical sync bit 4 = monitor resolution 0 = high resolution (>200 lines) 1 = low resolution (<=200 lines) bit 5 = display type 0 = color 1 = monochrome bits6,7= diagnostic bits Note: bits 0-3 are the same as the EGA/VGA status register bits 0-3 ----------106F04----------------------------- INT 10 - VIDEO - GET MODE AND SCREEN RESOLUTION (Video7 VGA, VEGA VGA) AX = 6F04h Return: AL = current video mode (see AX=6F05h) BX = horizontal columns (text) or pixels (graphics) CX = vertical columns (text) or pixels (graphics) SeeAlso: AX=6F05h ----------106F05----------------------------- INT 10 - VIDEO - SET VIDEO MODE (Video7 VGA, VEGA EXTENDED EGA/VGA) AX = 6F05h BL = mode (see below) SeeAlso: AH=00h,AX=0070h Values for video mode: text/ text pixel pixel colors disp scrn system grph resol box resoltn page addr 00h-13h = standard IBM modes (see AH=00h) 40h = T 80x43 8x8 Video7/VEGA VGA 41h = T 132x25 8x14 Video7/VEGA VGA 42h = T 132x43 8x8 Video7/VEGA VGA 43h = T 80x60 8x8 Video7/VEGA VGA 44h = T 100x60 8x8 Video7/VEGA VGA 45h = T 132x28 8x8 Video7/VEGA VGA 60h = G 752x410 16 Video7 VGA, VEGA VGA 61h = G 720x540 16 Video7 VGA, VEGA VGA = G 720x540 16 Northgate, Headland 1024i 62h = G 800x600 16 Video7 VGA, VEGA Ext EGA = G 800x600 16 Headland 1024i 63h = G 1024x768 2 Video7 VGA 64h = G 1024x768 4 Video7 VGA 65h = G 1024x768 16 Video7 VGA, VEGA Ext EGA = G 1024x768 16 Headland 1024i 66h = G 640x400 256 Video7 VGA, VEGA Ext VGA = G 640x400 256 Northgate, Headland 1024i 67h = G 640x480 256 Video7 VGA, VEGA Ext VGA = G 640x480 256 Headland 1024i 68h = G 720x540 256 Video7 VGA, VEGA Ext VGA = G 720x540 256 Headland 1024i 69h = G 800x600 256 Video7 VGA, VEGA Ext VGA = G 800x600 256 Headland 1024i 70h = G 752x410 16gray Video7 VGA, VEGA VGA 71h = G 720x540 16gray Video7 VGA, VEGA VGA 72h = G 800x600 16gray Video7 VGA 73h = G 1024x768 2gray Video7 VGA 74h = G 1024x768 4gray Video7 VGA 75h = G 1024x768 16gray Video7 VGA 76h = G 640x400 256gray Video7 VGA 77h = G 640x480 256gray Video7 VGA 78h = G 720x540 256gray Video7 VGA 79h = G 800x600 256gray (future) SeeAlso: AH=00h,AX=0070h,AX=007Eh,AX=6F04h ----------106F06----------------------------- INT 10 - VIDEO - SELECT AUTOSWITCH MODE (V7VGA,VEGA VGA) AX = 6F06h BL = Autoswitch mode select 00h select EGA/VGA-only modes 01h select Autoswitched VGA/EGA/CGA/MGA modes 02h select 'bootup' CGA/MGA modes BH = enable/disable (00h enable, 01h = disable selection) ----------106F07----------------------------- INT 10 - VIDEO - GET VIDEO MEMORY CONFIGURATION (V7VGA,VEGA VGA) AX = 6F07h Return: AL = 6Fh AH = bits 0-6 = number of 256K blocks of video memory bit 7 = DRAM/VRAM (0: DRAM, 1: VRAM) BH = chip revision (SR8F) (S/C Chip in VEGA VGA) BL = chip revision (SR8E) (G/A Chip in VEGA VGA) CX = 0000h SeeAlso: AH=12h/BL=10h ----------1070------------------------------- INT 10 - VIDEO - GET ADDRESS OF VIDEO RAM (TANDY 2000 only) AH = 70h Return: AX:BX -> WORD containing green plane's offset AX:CX -> WORD containing green plane's segment AX:DX -> WORD containing segment of red (offset 0) and blue (offset 4000) planes SeeAlso: AH=71h ----------107000BX0000----------------------- INT 10 - Everex Extended Video BIOS - RETURN EMULATION STATUS AX = 7000h BX = 0000h Return: AL = 70h if Trident-based Everex card CL = monitor type 00h mono 01h CGA 02h EGA 03h digital multifrequency 04h IBM PS/2 05h IBM 8514 06h SuperVGA 07h analog multifrequency 08h super multifrequency CH = feature bits bits 7,6: 00 = 256K memory 01 = 512K memory 10 = 1024K 11 = 2048K memory bit 5: special oscillator present bit 4: VGA protect enabled bit 0: 6845 emulation DX = video board info bits 4-15: board ID model bits 0-3: board ID revision DI = BCD BIOS version number Note: board models for Trident-based Everex cards: 236h Ultragraphics II 620h Vision VGA 673h EVGA 678h Viewpoint ----------107000BX0004----------------------- INT 10 - Everex Extended Video BIOS - GET PAGING FUNCTION POINTER FOR CURR MODE AX = 7000h BX = 0004h Return: ES:DI -> FAR paging function (call with DL = page to set) Note: the word preceding ES:DI is the length of the function in bytes, and the last byte of the function is a FAR return instruction. SeeAlso: AX=4F05h,AX=7000h/BX=0000h,AX=7000h/BX=0005h ----------107000BX0005----------------------- INT 10 - Everex Extended Video BIOS - GET SUPPORTED MODE INFO AX = 7000h BX = 0005h CL = maximum number of modes to get info for CH = mode type to get info for (see below) DL = monitor type to get info for ES:DI -> buffer for mode info (see below) Return: CL = total number of modes fitting criteria CH = size of each info record SeeAlso: AX=7000h/BX=0000h,AX=7000h/BX=0004h Values for mode type: 00h all modes 01h monochrome text modes 02h color text modes 03h four-color CGA graphics modes 04h two-color CGA graphics modes 05h 16-color graphics modes 06h 256-color graphics modes Format of mode information record: Offset Size Description 00h BYTE mode number (bit 7 set if extended mode) 01h BYTE mode type (see above) 02h BYTE info bits bits 7,6 reserved 5 monochrome mode 4 interlaced display 3 requires special oscillator 2,1 memory required 00 = 256K 01 = 512K 10 = 1024K 11 = 2048K 0 reserved 03h BYTE font height 04h BYTE text columns on screen 05h BYTE text rows on screen 06h WORD number of scan lines 08h BYTE color information bits 7-4 reserved 3-0 bits per pixel ----------1071------------------------------- INT 10 - VIDEO - GET ADDRESS OF INCRAM (TANDY 2000 only) AH = 71h Return: AX:BX -> WORD containing segment address of INCRAM AX:CX -> WORD containing offset of INCRAM SeeAlso: AH=70h ----------1072------------------------------- INT 10 - VIDEO - SCROLL RIGHT PART OR ALL OF SCREEN (TANDY 2000 only) AH = 72h AL = number of columns to shift scroll area, 00h to clear entire area BH = new attributes for blanked columns at left CH,CL = row, column of upper left corner of scroll area DH,DL = row, column of lower right corner of scroll area SeeAlso: AH=06h,AH=07h,AH=73h,INT 15/AH=12h/BH=05h ----------1073------------------------------ INT 10 - VIDEO - SCROLL LEFT PART OR ALL OF SCREEN (TANDY 2000 only) AH = 73h AL = number of columns to shift scroll area, 00h to clear entire area BH = new attributes for blanked columns at right CH,CL = row, column of upper left corner of scroll area DH,DL = row, column of lower right corner of scroll area SeeAlso: AH=06h,AH=07h,AH=72h,INT 15/AH=12h/BH=05h ----------107F00----------------------------- INT 10 - SOLLEX SuperVGA - GET EXTENSIONS INFO AX = 7F00h Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful ES:DI -> info structure (see below) 01h failed SeeAlso: AX=4F00h Format of info structure: Offset Size Description 00h DWORD pointer to VESA function dispatch table 04h DWORD pointer to SOLLEX function dispatch table 08h DWORD pointer to VESA SuperVGA info (see AX=4F00h) 0Ch DWORD pointer to mode info structure table, consisting of alternating ResInfo (see below) and VESA mode information (see AX=4F01h) blocks, terminated with an FFFFh word 10h DWORD pointer to font info structure table (see below) 14h WORD high resolution crystal frequency in Hz (0000h = not present) 16h DWORD pointer to ASCIZ ID string 1Ah DWORD pointer to timeout reset table array of bytes, each a multiple of the minimum time increment 1Eh WORD minimum time increment in timer ticks 20h BYTE inverse options supported bit 0: inverse supported bits 1-7: reserved 21h BYTE normal color value 22h BYTE inverse color value 23h WORD port to be accessed for normal/inverse settings 25h WORD type of interface chip (currently undefined) 27h WORD program operational mode bits 1-0: 00 no preference 01 terse (minimum detail in program messages) 10 verbose 11 use menus if supported, verbose mode otherwise bits 7-2: reserved 29h WORD SOLLEX specification version 2Bh WORD version of VESA/SOLLEX implementation 2Dh DWORD offset to relocatable portion of SOLLEX extensions (for CONFIG) 2Eh DWORD offset to unused section of the extensions ROM 31h 16 BYTEs reserved Note: all DWORD pointers initially require segment fixups; if the segment is 0000h, it should be changed to the returned ES, otherwise it may be assumed to be correct Format of ResInfo: Offset Size Description 00h WORD 16-bit mode number 02h WORD adapter type (00h VGA, 01h EGA, 02h CGA, 03h MDA) 04h WORD display info (see AX=7F01h/BL=01h) 06h DWORD pointer to video parameter table 0Ah BYTE replacement entry in master Video Parameter 0Bh BYTE mode requested for mode set by BIOS 0Ch DWORD pointer to LoadReg table 10h BYTE index into table of clock values (see below) Format of font info table [array] entry: Offset Size Description 00h BYTE required font height 01h BYTE parameter to load text mode font 02h BYTE parameter to load graphics mode font Values for clock value index: 00h 25 MHz 01h 28 MHz 02h PCLK 03h 31.5 MHz (VESA 640x480) 04h reserved 05h 16 MHz (EGA) 06h PCLK 07h 24 MHz (EGA) 08h 25 MHz 09h 28 MHz 0Ah 36 MHz 0Bh 45 MHz (for 1024x768) 0Ch 80 MHz 0Dh 40 MHz 0Eh 65 MHz 0Fh 1 MHz (for powerdown) ----------107F01BL00------------------------- INT 10 - SOLLEX SuperVGA - ADAPTER CONTROL - SET ADAPTER AX = 7F01h BL = 00h CX = adapter request bits 1-0: adapter type (00 VGA, 01 EGA, 10 CGA, 11 MDA) bit 2: reserved bits 4-3: change displays (00 none, 01 analog 10 digital 11 panel) bits 6-5: desired monitor sense (01 color, 10 mono, 11=8514) bit 7: lock override bit 8: alternate adapter mode bits 15-9: reserved Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful 01h failed Note: initializes video hardware to a particular standard SeeAlso: AX=7F00h,AX=7F01h/BL=01h,AX=7F01h/BL=02h ----------107F01BL01------------------------- INT 10 - SOLLEX SuperVGA - ADAPTER CONTROL - GET ADAPTER AX = 7F01h BL = 01h Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful 01h failed BX = adapter type (see AX=7F01h/BL=00h) DX = display type bits 1-0: monitor sense (00 none, 01 color, 10 mono, 11=8514) bit 2: multi-frequency analog monitor active bit 3: LCD panel active bit 4: plasma/electroluminescent panel active bit 5: PS/2-type monitor active bit 6: multi-frequency digital monitor active bit 7: Enhanced Color Display monitor active bit 8: alternate display active bits 15-9: reserved SeeAlso: AX=7F00h,AX=7F01h/BL=00h,AX=7F01h/BL=02h ----------107F01BL02------------------------- INT 10 - SOLLEX SuperVGA - ADAPTER CONTROL - DETERMINE ADAPTER SUPPORT AX = 7F01h BL = 02h CX = adapter request (see AX=7F01h/BL=00h) Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h requested setting can successfully be made 01h requested setting not available in this configuration SeeAlso: AX=7F00h,AX=7F01h/BL=00h ----------107F02BL00------------------------- INT 10 - SOLLEX SuperVGA - DISPLAY OUTPUT CONTROL - SET DISPLAY OUTPUT AX = 7F02h BL = 00h CX = display output setting bit 0: CRTC control in bits 2,1 valid bit 1: enable digital output bit 2: enable analog output bit 3: panel control in bits 5,4 valid bit 4: enable LCD output bit 5: enable plasma/EL output bit 6: inverse control in bit 7 valid bit 7: 0=normal, 1=inverse bits 15-8 reserved Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful 01h failed SeeAlso: AX=7F00h,AX=7F02h/BL=00h ----------107F02BL01------------------------- INT 10 - SOLLEX SuperVGA - DISPLAY OUTPUT CONTROL - GET DISPLAY OUTPUT AX = 7F02h BL = 01h Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful BX = display output setting (see AX=7F02h/BL=00h) CX = displays attached bit 0: PS/2 display on analog output bit 1: multi-frequency monitor on analog output bit 2: LCD panel attached bit 3: plasma/electroluminescent panel attached bit 4: multi-frequency monitor on digital output bit 5: Enhanced Color Display attached to digital outpt bit 6: alternate display bits 15-7: reserved 01h failed SeeAlso: AX=7F00h,AX=7F02h/BL=00h ----------107F03BL00------------------------- INT 10 - SOLLEX SuperVGA - VIDEO SUPPORT CONTROL - GET SUPPORT INFO AX = 7F03h BL = 00h CX = support type 0000h VGA, 0001h EGA, 0002h CGA, 0003h MDA, 0004h extensions, 0005h-0012h reserved for SOLLEX, 0013h Hercules, 0014h-001Fh reserved for SOLLEX, 0020h-00FFh reserved for OEM Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful CX = size of video support code DX = segment of physical video support (0000h if no ROM) ES = segment of active video support ES:DI -> information block (DI = 0000h if none available) 01h failed SeeAlso: AX=7F03h/BL=01h ----------107F03BL01------------------------- INT 10 - SOLLEX SuperVGA - VIDEO SUPPORT CONTROL - INITIALIZE VIDEO SUPPORT AX = 7F03h BL = 01h CX = support request ES = segment of support code Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful 01h failed Note: initializes the indicated video support by calling ES:0003h; this function may be used to switch the active video support back to ROM after AX=7F03h/BL=02h SeeAlso: AX=7F03h/BL=00h ----------107F03BL02------------------------- INT 10 - SOLLEX SuperVGA - VIDEO SUPPORT CONTROL - GO RAM RESIDENT AX = 7F03h BL = 02h CX = support request ES = destination segment Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful 01h failed SeeAlso: AX=7F00h,AX=7F03h/BL=01h ----------107F04BL00------------------------- INT 10 - SOLLEX SuperVGA - POWER CONTROL - SET POWER STATE AX = 7F04h BL = 00h CX = new power state Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful 01h failed Note: higher values progressively reduce the operations available on the video adapter while yielding increasing power savings SeeAlso: AX=7F00h,AX=7F04h/BL=01h ----------107F04BL01------------------------- INT 10 - SOLLEX SuperVGA - POWER CONTROL - GET POWER STATE AX = 7F04h BL = 01h Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful CX = current power state DX = maximum state 01h failed SeeAlso: AX=7F00h,AX=7F04h/BL=00h ----------107F04BL02------------------------- INT 10 - SOLLEX SuperVGA - POWER CONTROL - SET TIMEOUT RESET AX = 7F04h BL = 02h CX = timeout reset Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful 01h failed SeeAlso: AX=7F00h,AX=7F04h/BL=03h ----------107F04BL03------------------------- INT 10 - SOLLEX SuperVGA - POWER CONTROL - GET TIMEOUT RESET AX = 7F04h BL = 03h Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful BX = time increment CX = current timeout reset DX = maximum timeout reset ES:DI -> timeout reset table (array of bytes) 01h failed Note: the timeout period is computed as (BYTE ES:[DI+CX]) * BX timer ticks SeeAlso: AX=7F00h,AX=7F04h/BL=02h ----------107F05----------------------------- INT 10 - SOLLEX SuperVGA - LOAD REGISTER AX = 7F05h ES:DI -> register value table (see below) Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful 01h failed SeeAlso: AH=F1h,AH=F3h,AH=F5h Format of register value table: Offset Size Description 00h WORD base I/O register (FFFFh = end of list) 02h 2N BYTEs pairs of values to be written to the base I/O register as an index value and the following register as a data byte 2N+2 WORD FFFFh (end of data list) ... (repeats until FFFFh base address) ----------107F06----------------------------- INT 10 - SOLLEX SuperVGA - MULTIPLE FONT CONTROL AX = 7F06h BL = subfunction 00h set multiple font state CX = new state (00h off, 01h on) 01h get multiple font state Return: BL = current state (00h off, 01h on) Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful 01h failed SeeAlso: AH=11h ----------107F07----------------------------- INT 10 - SOLLEX SuperVGA - FILL VIDEO RAM AX = 7F07h BL = how much to fill 00h regen size 01h all video memory CX = pattern to write (normally 0720h for text modes and 0000h for gr) Return: AL != 7Fh if not supported AL = 7Fh if supported AH = status 00h successful 01h failed SeeAlso: AH=06h ----------1080--DX4456----------------------- INT 10 U - VIDEO (DESQview 2.0x only) - internal - SET ??? HANDLER AH = 80h DX = 4456h ('DV') ES:DI -> FAR subroutine to be called on ??? Return: DS = segment of DESQview data structure for video buffer Note: this function is probably meant for internal use only, due to the magic value required in DX the subroutine seems to be called when the DESQview menu is accessed; on entry, AL = 03h or 04h ----------1081--DX4456----------------------- INT 10 U - VIDEO (DESQview 2.0x only) - internal - GET ??? AH = 81h DX = 4456h ('DV') Return: ES = segment of DESQview data structure for video buffer BYTE ES:[0] = current window number in DV 2.0x Note: this function is probably meant for internal use only, due to the magic value required in DX SeeAlso: AH=82h ----------1082--DX4456----------------------- INT 10 U - VIDEO (DESQview 2.0x only) - internal - GET CURRENT WINDOW INFO AH = 82h DX = 4456h ('DV') Return: DS = segment in DESQview for data structure in DV 2.00, BYTE DS:[0] = window number WORD DS:[1] = segment of other data structure WORD DS:[3] = segment of window's object handle ES = segment of DESQview data structure for video buffer AL = current window number AH = ??? BL = direct screen writes 00h program does not do direct writes 01h program does direct writes, so shadow buffer not usable BH = ??? CL = current video mode CH = ??? Note: this function is probably meant for internal use only, due to the magic value required in DX SeeAlso: AH=81h ----------108200----------------------------- INT 10 - VIDEO - AX PC - GET/SET SCROLL MODE AX = 8200h BL = new scroll mode or FFh to get current mode 00h dynamic, 01h software Return: AL = scroll mode (current mode if BL=FFh, previous mode otherwise) SeeAlso: AH=06h,AH=07h ----------108300----------------------------- INT 10 - VIDEO - AX PC - GET VIDEO RAM ADDRESS AX = 8300h Return: AX = offset of video RAM ES:BX -> virtual text RAM buffer SeeAlso: AX=5201h ----------108B------------------------------- INT 10 - Alloy MW386 - FORCE WORKSTATION SCREEN UPDATE AH = 8Bh SeeAlso: AH=92h,AH=93h ----------1090------------------------------- INT 10 - Alloy MW386 - GET PHYSICAL WORKSTATION DISPLAY MODE AH = 90h Return: AL = current video mode (see AH=00h) SeeAlso: AH=91h ----------1091------------------------------- INT 10 - Alloy MW386 - GET PHYSICAL WORKSTATION ADAPTER TYPE AH = 91h Return: AL = video adapter type 00h monochrome 01h Hercules monochrome graphics 02h CGA 03h EGA 04h VGA 80h monochrome text terminal 81h Hercules graphics terminal 82h color graphics terminal Note: types less than 80h do not imply that the current user is on the host SeeAlso: AH=90h ----------1092------------------------------- INT 10 - Alloy MW386 - INHIBIT WORKSTATION SCREEN UPDATES AH = 92h Note: the terminal will be updated even when screen updates are inhibited if TTY output is used SeeAlso: AH=8Bh ----------1093------------------------------- INT 10 - Alloy MW386 - REDRAW SCREEN AH = 93h SeeAlso: AH=8Bh ----------10BF00----------------------------- INT 10 - VIDEO - Compaq Portable Extensions - SELECT EXTERNAL MONITOR AX = BF00h Note: all registers preserved and the internal monitor is blanked the external monitor becomes the active monitor SeeAlso: AX=BF01h ----------10BF01----------------------------- INT 10 - VIDEO - Compaq Portable Extensions - SELECT INTERNAL MONITOR AX = BF01h Note: all registers preserved and the external monitor is blanked the internal monitor becomes the active monitor SeeAlso: AX=BF00h ----------10BF02----------------------------- INT 10 - VIDEO - Compaq Portable Extensions - SET MASTER MODE OF CURRENT CTRLR AX = BF02h BH = master mode 04h CGA 05h EGA 07h MDA SeeAlso: AX=BF03h ----------10BF03BX0000----------------------- INT 10 - VIDEO - Compaq Portable/Systempro Extensions - GET ENVIRONMENT AX = BF03h BX = 0000h Return: BH = active monitor 00h = external 01h = internal BL = master mode 00h = switchable VDU not present 04h = CGA 05h = EGA 07h = MDA 08h = switchable LCD controller present CH = 00h (reserved) CL = switchable VDU mode supported bit 0 = CGA supported bits 1,2 = reserved (1) bit 3 = MDA supported bits 4-7 = reserved (1) DH = internal monitor type 00h = none 01h = Dual-mode monitor 02h = 5153 RGB monitor 03h = Compaq Color monitor 04h = 640x400 flat panel 07h = LCD VGA DL = external monitor type 00h = none 01h = dual-mode monitor 02h = 5153 RGB monitor 03h = Compaq Color monitor 04h = 640x400 flat panel 05h = VGC monochrome 06h = VGC color SeeAlso: AH=1Ah,AX=BF00h,AX=BF01h,AX=BF02h ----------10BF04----------------------------- INT 10 - VIDEO - Compaq Portable Extensions - SET MODE SWITCH DELAY AX = BF04h BH = new state of delay 00h enabled 01h disabled SeeAlso: AX=BF05h ----------10BF05----------------------------- INT 10 - VIDEO - Compaq Systempro Extensions - ENABLE/DISABLE DISPLAY AX = BF05h BH = new state of video 00h off 01h on SeeAlso: AX=BF04h ----------10BF06----------------------------- INT 10 - VIDEO - Compaq SLT/286 - READ GRAY SCALE TABLE AX = BF06h CL = address to be read from gray scale table Return: AL = bit 3-0 - Value read from gray scale table CL = address to be read from gray scale table SeeAlso: AH=12h/BL=33h,AX=BF07h ----------10BF07----------------------------- INT 10 - VIDEO - Compaq SLT/286 - WRITE GRAY SCALE TABLE AX = BF07h CH = value to write to gray scale table CL = address to be written to gray scale table SeeAlso: AX=BF06h ----------10BF08----------------------------- INT 10 - VIDEO - Compaq SLT/286 - WRITE COLOR MIX REGISTERS AX = BF08h CH = bits 7-4 - Green weight bits 3-0 - Blue weight CL = bits 7-4 - unused bits 3-0 - Red weight ----------10CC00SI0000----------------------- INT 10 - VIDEO - UltraVision - GET STATUS (INSTALLATION CHECK) AX = CC00h SI = 0000h (if checking version) Return: CX = ABCDh AL = Ultravision extensions 00h enabled FFh disabled AH = card designator BX:00F0h -> palette values (for compatibility with NEWFONT) DX = support for high resolution modes 00h not active 01h active SI = UltraVision version number (v1.2+), high byte=major,low byte=minor = unchanged for versions <1.2 SeeAlso: AX=CC01h,AX=CC02h ----------10CC01----------------------------- INT 10 - VIDEO - UltraVision - DISABLE EXTENSIONS AX = CC01h Notes: subsequent BIOS calls will be passed through to previous handler should be followed immediately by mode set to restore normal EGA/VGA state SeeAlso: AX=CC02h ----------10CC02----------------------------- INT 10 - VIDEO - UltraVision - ENABLE EXTENSIONS AX = CC02h Note: should be followed immediately by mode set to restore previous UltraVision state SeeAlso: AX=CC01h ----------10CD00----------------------------- INT 10 - VIDEO - UltraVision - LOAD ULTRAVISION PALETTE (color EGA,VGA) AX = CD00h CL = palette table number (01h-07h for v1.x, 01h-0Fh for v2+) DS:DX -> 16-byte palette register list (colors for registers 00h-0Fh) Notes: if palette locking is in effect for the current mode, the new colors will be displayed immediately; otherwise, the system reverts to the default palette palette table 0 is reserved for the default palette and cannot be set UltraVision always sets the border color to black SeeAlso: AX=CD01h,AX=CD02h ----------10CD01----------------------------- INT 10 - VIDEO - UltraVision - SET PALETTE LOCKING STATUS (color EGA,VGA) AX = CD01h CL = palette locking value 00h none 01h text modes only (02h,03h) FFh all modes (all standard color text and graphics modes) Notes: intended for video modes with 16 or fewer colors SeeAlso: AX=1000h,AX=1002h,AX=CD00h,AX=CD03h ----------10CD02----------------------------- INT 10 - VIDEO - UltraVision - GET ULTRAVISION PALETTE (EGA,VGA) AX = CD02h Return: CL = palette table number DS:DX -> 17-byte palette register list DS:SI -> current font names table (see below) Note: only the font names are valid on monochrome EGA systems SeeAlso: AX=1009h,AX=CD00h Format of palette register list: Offset Size Description 00h 16 BYTEs colors for palette registers 00h through 0Fh 10h BYTE border color Format of current font names table (v2+): Offset Size standard EGA HiRes EGA VGA 00h 8 BYTEs N/A F19 font F20 font 08h 8 BYTEs F14 font F14 font F14 font 10h 8 BYTEs N/A F11 font F10 font 18h 8 BYTEs F8 font F8 font F8 font Format of current font names table (v1.x): Offset Size HiRes EGA 00h 8 BYTEs F19/F14 font 08h 8 BYTEs F11/F8 font ----------10CD03----------------------------- INT 10 - VIDEO - UltraVision - GET PALETTE LOCKING STATUS (color EGA,VGA) AX = CD03h Return: CL = palette locking value 00h none 01h text modes only FFh all modes SeeAlso: AX=CD01h ----------10CD04----------------------------- INT 10 - VIDEO - UltraVision - GET UltraVision TEXT MODE (EGA,VGA) AX = CD04h Return: AL = mode number 11h 80x25 12h 80x43, 80x50 13h 80x34, 80x36 14h 80x60, 80x63 19h 94x25 1Ah 94x43, 94x50 1Bh 94x36 1Ch 94x63 21h 108x25 22h 108x43, 108x50 23h 107x34, 108x36 24h 108x60, 108x63 31h 120x25 32h 120x43, 120x50 33h 132x25 34h 132x44, 132x50 39h 120x36 3Ah 120x63 3Bh 132x36 3Ch 132x60 SeeAlso: AH=0Fh,AX=CC00h,AH=CDh ----------10CD05----------------------------- INT 10 - VIDEO - UltraVision - SET CURSOR TYPE (EGA,VGA) AX = CD05h CL = type 00h line cursor FFh box cursor Note: sets default cursor type for text-based programs SeeAlso: AH=01h,AX=CD06h ----------10CD06----------------------------- INT 10 - VIDEO - UltraVision - GET CURSOR TYPE (EGA,VGA) AX = CD06h Return: CL = type 00h line cursor FFh box cursor SeeAlso: AH=03h,AX=CD05h ----------10CD07----------------------------- INT 10 - VIDEO - UltraVision v1.2+ - SET UNDERLINE STATUS (EGA,VGA) AX = CD07h CL = hardware underline status 00h off (color systems only) 01h underline below characters 02h strike through characters BL = foreground color for normal text (FFh = current) BH = foreground color for bright text (FFh = current) Return: CL = hardware underline status BL = current foreground color for normal text BH = current foreground color for bright text Notes: when underline or strikeout is enabled in color text modes, the specified colors will be assigned temporarily to colors 01h and 09h, allowing affected text to match non-underlined text. The color remapping uses values from the current onscreen palette regardless of the palette locking status (see AX=CD01h) specify the standard colors (BL=01h,BH=09h) to enable underline or strikeout without color remapping SeeAlso: AX=CD08h ----------10CD08----------------------------- INT 10 - VIDEO - UltraVision v1.2+ - GET UNDERLINE STATUS (EGA,VGA) AX = CD08h Return: CL = hardware underline status (see AX=CD07h) BL = foreground color for normal text BH = foreground color for bright text Note: only CL is valid on monochrome EGA systems SeeAlso: AX=CD07h ----------10CD10----------------------------- INT 10 - VIDEO - UltraVision - LOAD USER FONT (EGA,VGA) AX = CD10h BH = bytes per character (08h,0Ah,0Bh,0Eh,13h,14h) CX = ABCDh load 9xN alternate font (v2+) else number of characters to load DX = character offset into font table DS:SI -> 8-byte ASCII font name ES:BP -> font definitions Return: AX = FFFFh if invalid font parameters Notes: loads the designated characters into UltraVision's resident font area should be followed by a video mode set to reload character generator SeeAlso: AX=1100h ----------10CD------------------------------- INT 10 - VIDEO - UltraVision - SET ULTRAVISION TEXT MODE (EGA,VGA) AH = CDh AL = text mode number (see AX=CD04h) Return: AX = CDCDh if invalid mode SeeAlso: AX=CD04h ----------10EF------------------------------- INT 10 - VIDEO - MSHERC.COM - INSTALLATION CHECK??? AH = EFh Return: DL = video adapter type 00h original Hercules 01h ??? \ one is probably Hercules Plus, the other 02h ??? / Hercules InColor FFh non-Hercules DH = memory mode byte 01h "half" mode 03h "full" mode Note: MSHERC.COM is a support program for the Microsoft Quick languages which makes their graphics libraries compatible with a Hercules card by adding video modes 08h and 88h, and supporting text in the new graphics modes. While in mode 08h or 88h, INT 10 supports the Hercules card much like a CGA. ----------10F0------------------------------- INT 10 - EGA Register Interface Library - READ ONE REGISTER AH = F0h BL = register number BH = 00h DX = group index Pointer/data chips 00h CRT Controller (25 reg) 3B4h mono modes, 3D4h color modes 08h Sequencer (5 registers) 3C4h 10h Graphics Controller (9 registers) 3CEh 18h Attribute Controller (20 registers) 3C0h Single registers 20h Miscellaneous Output register 3C2h 28h Feature Control register (3BAh mono modes, 3DAh color modes) 30h Graphics 1 Position register 3CCh 38h Graphics 2 Position register 3CAh Return: BL = data Note: provided by the Microsoft Mouse driver, OS/2 compatibility box, and others SeeAlso: AH=F1h,AH=F2h,INT 2F/AX=BC00h ----------10F1------------------------------- INT 10 - EGA Register Interface Library - WRITE ONE REGISTER AH = F1h DX = group index (see AH=F0h) if single register: BL = value to write otherwise BL = register number BH = value to write Return: BL = data Note: provided by the Microsoft Mouse driver, OS/2 compatibility box, and others SeeAlso: AX=7F05h,AH=F0h,AH=F3h ----------10F2------------------------------- INT 10 - EGA Register Interface Library - READ REGISTER RANGE AH = F2h CH = starting register number CL = Number of registers (>1) DX = group index 00h CRTC (3B4h mono modes, 3D4h color modes) 08h Sequencer 3C4h 10h Graphics Controller 3CEh 18h Attribute Controller 3C0h ES:BX -> buffer, CL bytes Note: provided by the Microsoft Mouse driver, OS/2 compatibility box, and others SeeAlso: AH=F0h,AH=F3h ----------10F3------------------------------- INT 10 - EGA Register Interface Library - WRITE REGISTER RANGE AH = F3h CH = starting register CL = number of registers (>1) DX = group index (see AH=F2h) ES:BX -> buffer, CL bytes Note: provided by the Microsoft Mouse driver, OS/2 compatibility box, and others SeeAlso: AX=7F05h,AH=F1h,AH=F2h ----------10F4------------------------------- INT 10 - EGA Register Interface Library - READ REGISTER SET AH = F4h CX = number of registers to read (>1) ES:BX -> table of records (see below) Return: register values in table filled in Note: provided by the Microsoft Mouse driver, OS/2 compatibility box, and others SeeAlso: AH=F0h,AH=F2h,AH=F5h Format of entries in table of register records: Offset Size Description 00h WORD group index Pointer/data chips 00h CRTC (3B4h mono modes, 3D4h color modes) 08h Sequencer 3C4h 10h Graphics Controller 3CEh 18h Attribute Controller 3C0h Single registers 20h Miscellaneous Output register 3C2h 28h Feature Control register (3BAh mono modes, 3DAh color) 30h Graphics 1 Position register 3CCh 38h Graphics 2 Position register 3CAh 02h BYTE register number (0 for single registers) 03h BYTE register value ----------10F5------------------------------- INT 10 - EGA Register Interface Library - WRITE REGISTER SET AH = F5h CX = number of registers to write (>1) ES:BX -> table of records (see AH=F4h) Note: provided by the Microsoft Mouse driver, OS/2 compatibility box, and others SeeAlso: AX=7F05h,AH=F1h,AH=F3h,AH=F4h ----------10F6------------------------------ INT 10 - EGA Register Interface Library - REVERT TO DEFAULT REGISTERS AH = F6h Note: provided by the Microsoft Mouse driver, OS/2 compatibility box, and others SeeAlso: AH=F7h ----------10F7------------------------------ INT 10 - EGA Register Interface Library - DEFINE DEFAULT REGISTER TABLE AH = F7h DX = port number Pointer/data chips 00h CRTC (3B4h mono modes, 3D4h color modes) 08h Sequencer 3C4h 10h Graphics Controller 3CEh 18h Attribute Controller 3C0h Single registers 20h Miscellaneous Output register 3C2h 28h Feature Control register (3BAh mono modes, 3DAh color modes) 30h Graphics 1 Position register 3CCh 38h Graphics 2 Position register 3CAh ES:BX -> table of one-byte entries, one byte to be written to each register Note: provided by the Microsoft Mouse driver, OS/2 compatibility box, and others SeeAlso: AH=F6h ----------10FA--BX0000---------------------- INT 10 - EGA Register Interface Library - INTERROGATE DRIVER AH = FAh BX = 0000h Return: BX = 0000h if mouse driver not present ES:BX -> EGA Register Interface version number, if present: byte 0 = major release number byte 1 = minor release number Note: provided by the Microsoft Mouse driver, OS/2 compatibility box, and others SeeAlso: AH=F6h,INT 2F/AX=BC00h ----------10FA------------------------------ INT 10 - FASTBUFF.COM - INSTALLATION CHECK AH = FAh Return: AX = 00FAh if installed ES = segment of resident code Note: FASTBUFF.COM is a keyboard speedup/screen blanking utility by David Steiner ----------10FE------------------------------ INT 10 - TopView - GET SHADOW BUFFER AH = FEh ES:DI -> assumed video buffer B800h:0000h color text/CGA graphics, B000h:0000h mono text, or A000h:0000h EGA/VGA graphics (RSIS environments only) Return: ES:DI -> actual video buffer for calling process Notes: if no multitasker or RSIS-compliant environment is installed, ES:DI is returned unchanged; RSIS is the Relocated Screen Interface Specification for display pages other than 0, use AH=05h and AH=0Fh to determine whether a particular page exists TopView requires a call to AH=FFh to notify it that the screen has changed; DESQview will check for changes itself until the first call to AH=FFh SeeAlso: AH=05h,AX=5201h,AH=FFh,INT 15/AX=1024h,INT 21/AH=2Bh"DESQview" ----------10FF------------------------------- INT 10 - TopView - UPDATE SCREEN FROM SHADOW BUFFER AH = FFh CX = number of consecutive changed characters ES:DI -> first changed character in shadow buffer Notes: avoid CX=0000h DESQview will discontinue the automatic screen updating initiated by AH=FEh after this call SeeAlso: AH=FEh ----------10FF------------------------------- INT 10 - DJ GO32.EXE 80386+ DOS extender - VIDEO EXTENSIONS AH = FFh AL = video mode 00h 80x25 text 01h default text 02h CXxDX text 03h biggest text 04h 320x200 graphics 05h default graphics 06h CXxDX graphics 07h biggest non-interlaced graphics 08h biggest graphics SeeAlso: AH=00h,INT 21/AH=FFh"GO32" ----------10FF00----------------------------- INT 10 - CARBON COPY PLUS v5.0 - CHECK IF CC CONNECTED TO CCHELP AX = FF00h Return: BL = 00h not connected = 01h connected ----------10FF01----------------------------- INT 10 - CARBON COPY PLUS v5.0 - DISCONNECT AND RESET LINE AX = FF01h ----------10FF02----------------------------- INT 10 - CARBON COPY PLUS v5.0 - GET LAST PHONE NUMBER DIALED AX = FF02h Return: ES:DI -> ASCIZ phone number ----------11--------------------------------- INT 11 - CPU-generated (80486+) - ALIGNMENT CHECK Bit AC in the EFLAGS register enables this interrupt on a memory reference on a mis-aligned address when in privilege mode 3. ----------11--------------------------------- INT 11 - BIOS - GET EQUIPMENT LIST Return: AX = BIOS equipment list word bits 0 floppy disk(s) installed (see bits 6-7) 1 80x87 coprocessor installed 2,3 number of 16K banks of RAM on motherboard (PC only) number of 64K banks of RAM on motherboard (XT only) 2 pointing device installed (PS) 3 unused (PS) 4-5 initial video mode 00 EGA, VGA, or PGA 01 40x25 color 10 80x25 color 11 80x25 monochrome 6-7 number of floppies installed less 1 (if bit 0 set) 8 DMA support installed (PCjr, some Tandy 1000s, 1400LT) 9-11 number of serial ports installed 12 game port installed 13 serial printer attached (PCjr) internal modem installed (PC/Convertible) 14-15 number of parallel ports installed ---Compaq and many other 386/486 machines-- EAX bit 23: page tables set so that Weitek coprocessor addressable in real mode bit 24: Weitek math coprocessor present ---Compaq Systempro EAX bit 25: internal DMA parallel port available 26: IRQ for internal DMA parallel port (if bit 25 set) 0 = IRQ5 1 = IRQ7 27,28: parallel port DMA channel 00 DMA channel 0 01 DMA channel 0 ??? 10 reserved 11 DMA channel 3 SeeAlso: INT 12 ----------11BC--DX1954----------------------- INT 11 - BNU FOSSIL - INSTALLATION CHECK AH = BCh DX = 1954h Return: AX = 1954h ES:DX -> entry point of driver (instead of INT 14) ----------11FF--SI6A6A----------------------- INT 11 - WD7000 SDLP interface - EXECUTE GENERIC SCSI COMMAND AH = FFh SI = 6A6Ah AL = SCSI Addressing bits 2-0 SCSI Target LUN (logical unit number) bits 5-3 SCSI Target ID bit 7 write flag, set for write operations, clear otherwise CX = bytes of data to be transmitted (max FFF0h) DH = 00h DL = length of SCSI Command Descriptor Block DS:DI -> SCSI Command Descriptor Block ES:BX -> data buffer Return: CF set on error AL = error code CF clear if successful Note: because of busmaster operations with WD7000FASST avoid accessing video memory directly; check 386 memory manager for VDS support. The WD7000XTAT works with programmed IO and does not have this limitation. SeeAlso: INT 21/AX=4402"ASPI" ----------11FFFECXFFFE----------------------- INT 11 - BACK&FORTH (before v1.62) API AX = FFFEh CX = FFFEh BX = function 00h installation check Return: AX = 0001h BNFHIGH and BNFLOW both loaded = 0003h only BNFHIGH loaded else neither loaded 01h ??? Return: DX:AX -> ??? 02h ??? 03h ??? 04h ??? 05h ??? switches current PSP segment and stack if BNFLOW has not yet announced itself installed 06h ??? Return: AX = ??? SeeAlso: INT 12/AX=FFFEh ----------12--------------------------------- INT 12 - BIOS - GET MEMORY SIZE Return: AX = kilobytes of contiguous memory starting at absolute address 00000h Note: this call returns the contents of the word at 0040h:0013h; in PC and XT, this value is set from the switches on the motherboard SeeAlso: INT 11,INT 2F/AX=4A06h ----------12----CX1806----------------------- INT 12 - KEYBUI v2.0+ - INSTALLATION CHECK CX = 1806h Return: AX = kilobytes of contiguous memory starting at absolute address 00000h CX = 1960h if installed Note: KEYBUI is a resident keyboard driver by Johan Zwiekhorst which allows accented characters and box drawing on standard QWERTY keyboards; it also provides break-to-DOS and screen blanking capabilities ----------12----CX1807----------------------- INT 12 - PARKER v2.0+ - INSTALLATION CHECK CX = 1807h Return: AX = kilobytes of contiguous memory starting at absolute address 00000h CX = 1961h if installed Note: PARKER is an optionally-resident hard disk parking program by Johan Zwiekhorst ----------12FFFECXFFFE----------------------- INT 12 - Back&Forth v1.62+ - API AX = FFFEh CX = FFFEh BX = function 00h installation check Return: AX = 0001h installed else not loaded 02h build program ID list ES:DI -> buffer of at least 100 bytes, to be filled with words Return: AX = number of programs defined ES:DI buffer filled with AX words 03h switch to specified task (task need not be open yet) DX = two-letter program ID Return: AX = 0000h if task undefined 04h ??? 05h ??? 06h get version (undoc) Return: AX = version * 100 (v1.71 = 00ABh) 07h ??? 08h get open tasks (undoc) ES:DI -> task info buffer (see below) Return: AX = number of open tasks (max 20) 09h ??? Note: Back & Forth is a task switcher by Progressive Solutions, Inc. SeeAlso: INT 11/AX=FFFEh Format of task info buffer: Offset Size Description 00h 21 BYTEs ASCIZ task name 15h BYTE hotkey shift state (as for INT 16/AH=02h) 16h WORD hotkey scan code 18h WORD program ID ----------1300------------------------------- INT 13 - DISK - RESET DISK SYSTEM AH = 00h DL = drive (if bit 7 is set both hard disks and floppy disks reset) Return: AH = status (see AH=01h) CF clear if successful (returned AH=00h) CF set on error Note: forces controller to recalibrate drive heads (seek to track 0) SeeAlso: AH=0Dh,AH=11h,INT 21/AH=0Dh,INT 4E"TI Professional" ----------1301------------------------------- INT 13 - DISK - GET STATUS OF LAST OPERATION AH = 01h DL = drive (bit 7 set for hard disk) Return: CF clear if successful (returned status 00h) CF set on error AH = status of previous operation 00h successful completion 01h invalid function in AH or invalid parameter 02h address mark not found 03h disk write-protected (floppy) 04h sector not found 05h reset failed (hard disk) 06h disk changed (floppy) 07h drive parameter activity failed (hard disk) 08h DMA overrun 09h attempted DMA across 64K boundary 0Ah bad sector detected (hard disk) 0Bh bad track detected (hard disk) 0Ch unsupported track or invalid media 0Dh invalid number of sectors on format (hard disk) 0Eh control data address mark detected (hard disk) 0Fh DMA arbitration level out of range (hard disk) 10h uncorrectable CRC or ECC error on read 11h data ECC corrected (hard disk) 20h controller failure 40h seek failed 80h timeout (not ready) AAh drive not ready (hard disk) BBh undefined error (hard disk) CCh write fault (hard disk) E0h status register error (hard disk) FFh sense operation failed (hard disk) Note: some BIOSes return the status in AL; the PS/2 Model 30/286 returns the status in both AH and AL ----------1302------------------------------- INT 13 - DISK - READ SECTOR(S) INTO MEMORY AH = 02h AL = number of sectors to read (must be nonzero) CH = low eight bits of cylinder number CL = sector number (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive number (bit 7 set for hard disk) ES:BX -> data buffer Return: CF set on error if AH = 11h (corrected ECC error), AL = burst length CF clear if successful AH = status (see AH=01h) AL = number of sectors transferred Notes: errors on a floppy may be due to the motor failing to spin up quickly enough; the read should be retried at least three times, resetting the disk with AH=00h between attempts AWARD AT BIOS extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH SeeAlso: AH=03h,AH=0Ah ----------1303------------------------------- INT 13 - DISK - WRITE DISK SECTOR(S) AH = 03h AL = number of sectors to write (must be nonzero) CH = low eight bits of cylinder number CL = sector number (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive number (bit 7 set for hard disk) ES:BX -> data buffer Return: CF set on error CF clear if successful AH = status (see AH=01h) AL = number of sectors transferred Notes: errors on a floppy may be due to the motor failing to spin up quickly enough; the write should be retried at least three times, resetting the disk with AH=00h between attempts AWARD AT BIOS extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH SeeAlso: AH=02h,AH=0Bh ----------1304------------------------------- INT 13 - DISK - VERIFY DISK SECTOR(S) AH = 04h AL = number of sectors to verify (must be nonzero) CH = low eight bits of cylinder number CL = sector number (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive number (bit 7 set for hard disk) ES:BX -> data buffer (PC,XT,AT with BIOS prior to 11/15/85) Return: CF set on error CF clear if successful AH = status (see AH=01h) AL = number of sectors verified Notes: errors on a floppy may be due to the motor failing to spin up quickly enough; the write should be retried at least three times, resetting the disk with AH=00h between attempts this function does not compare the disk with memory, it merely checks whether the sector's stored CRC matches the data's actual CRC AWARD AT BIOS extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH SeeAlso: AH=02h ----------1305------------------------------- INT 13 - FLOPPY - FORMAT TRACK AH = 05h AL = number of sectors to format CH = track number DH = head number DL = drive number ES:BX -> address field buffer (see below) Return: CF set on error CF clear if successful AH = status (see AH=01h) Notes: on AT or higher, call AH=17h first the number of sectors per track is read from the diskette parameter table pointed at by INT 1E SeeAlso: AH=05h"FIXED",AH=17h,AH=18h,INT 1E Format of address field buffer entry (one per sector in track): Offset Size Description 00h BYTE track number 01h BYTE head number (0-based) 02h BYTE sector number 03h BYTE sector size (00h=128 bytes, 01h=256 bytes, 02h=512, 03h=1024) ----------1305------------------------------- INT 13 - FIXED DISK - FORMAT TRACK AH = 05h AL = interleave value (XT-type controllers only) ES:BX = 512-byte format buffer the first 2*(sectors/track) bytes contain F,N for each sector F = 00h for good sector, 80h for bad sector N = sector number CH = cylinder number (bits 8,9 in high bits of CL) CL = high bits of cylinder number (bits 7,6) DH = head DL = drive Return: AH = status code (see AH=01h) Notes: AWARD AT BIOS extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH for XT-type controllers on an AT or higher, AH=0Fh should be called first SeeAlso: AH=05h"FLOPPY",AH=06h,AH=07h,AH=0Fh,AH=18h,AH=1Ah ----------1306------------------------------- INT 13 - FIXED DISK - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT,PORT) AH = 06h AL = interleave value CH = cylinder number (bits 8,9 in high bits of CL) CL = sector number DH = head DL = drive Return: AH = status code (see AH=01h) Note: AWARD AT BIOS extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH ----------1307------------------------------- INT 13 - FIXED DISK - FORMAT DRIVE STARTING AT GIVEN TRACK (XT,PORT) AH = 07h AL = interleave value (XT only) ES:BX = 512-byte format buffer (see AH=05h) CH = cylinder number (bits 8,9 in high bits of CL) CL = sector number DH = head DL = drive Return: AH = status code (see AH=01h) Note: AWARD AT BIOS extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH SeeAlso: AH=1Ah ----------1308------------------------------- INT 13 - DISK - GET DRIVE PARAMETERS (PC,XT286,CONV,PS,ESDI,SCSI) AH = 08h DL = drive (bit 7 set for hard disk) Return: CF set on error AH = status (07h) (see AH=01h) CF clear if successful AH = 00h BL = drive type (AT/PS2 floppies only) 01h 360K 02h 1.2M 03h 720K 04h 1.44M 06h ??? (checked by 386MAX v6.01) CH = low eight bits of maximum cylinder number CL = maximum sector number (bits 5-0) high two bits of maximum cylinder number (bits 7-6) DH = maximum head number DL = number of drives ES:DI -> drive parameter table (floppies only) Notes: may return successful even though specified drive is greater than the number of attached drives of that type (floppy/hard); check DL to ensure validity for systems predating the IBM AT, this call is only valid for hard disks, as it is implemented by the hard disk BIOS rather than the ROM BIOS Toshiba laptops with HardRAM return DL=02h when called with DL=80h, but fail on DL=81h. The BIOS data at 40h:75h correctly reports 01h. SeeAlso: AH=15h,INT 1E,INT 41 ----------1309------------------------------- INT 13 - HARD DISK - INITIALIZE CONTROLLER WITH DRIVE PARAMETERS (AT,PS) AH = 09h DL = drive (80h for first, 81h for second) Return: CF clear if successful CF set on error AH = status (see AH=01h) Notes: on the PC and XT, this function uses the parameter table pointed at by INT 41 on the AT and later, this function uses the parameter table pointed at by INT 41 if DL=80h, and the parameter table pointed at by INT 46 if DL=81h SeeAlso: INT 41,INT 46 ----------130A------------------------------- INT 13 - HARD DISK - READ LONG SECTOR(S) (AT and later) AH = 0Ah AL = number of sectors CH = low eight bits of cylinder number CL = sector number (bits 5-0) high two bits of cylinder number (bits 7-6) DH = head number DL = drive number (80h = first, 81h = second) ES:BX -> data buffer Return: CF clear if successful CF set on error AH = status (see AH=01h) AL = number of sectors transferred Notes: this function reads in four to seven bytes of error-correcting code along with each sector's worth of information data errors are not automatically corrected, and the read is aborted after the first sector with an ECC error used for diagnostics only on PS/2 systems SeeAlso: AH=02h,AH=0Bh ----------130B------------------------------- INT 13 - HARD DISK - WRITE LONG SECTOR(S) (AT and later) AH = 0Bh AL = number of sectors CH = low eight bits of cylinder number CL = sector number (bits 5-0) high two bits of cylinder number (bits 7-6) DH = head number DL = drive number (80h = first, 81h = second) ES:BX -> data buffer Return: CF clear if successful CF set on error AH = status (see AH=01h) AL = number of sectors transferred Notes: each sector's worth of data must be followed by four to seven bytes of error-correction information used for diagnostics only on PS/2 systems SeeAlso: AH=03h,AH=0Ah ----------130C------------------------------- INT 13 - HARD DISK - SEEK TO CYLINDER AH = 0Ch CH = low eight bits of cylinder number CL = sector number (bits 5-0) high two bits of cylinder number (bits 7-6) DH = head number DL = drive number (80h = first, 81h = second hard disk) Return: CF set on error CF clear if successful AH = status (see AH=01h) SeeAlso: AH=00h,AH=02h,AH=0Ah ----------130D------------------------------- INT 13 - HARD DISK - RESET HARD DISKS AH = 0Dh DL = drive number (80h = first, 81h = second hard disk) Return: CF set on error CF clear if successful AH = status (see AH=01h) Notes: reinitializes the hard disk controller, resets the specified drive's parameters, and recalibrates the drive's heads (seek to track 0) not for PS/2 ESDI drives SeeAlso: AH=00h,INT 21/AH=0Dh ----------130E------------------------------- INT 13 - HARD DISK - READ SECTOR BUFFER (XT only) AH = 0Eh DL = drive number (80h = first, 81h = second hard disk) ES:BX -> buffer Return: CF set on error CF clear if successful AH = status code (see AH=01h) Notes: transfers controller's sector buffer. No data is read from the drive used for diagnostics only on PS/2 systems SeeAlso: AH=0Ah ----------130F------------------------------- INT 13 - HARD DISK - WRITE SECTOR BUFFER (XT only) AH = 0Fh DL = drive number (80h = first, 81h = second hard disk) ES:BX -> buffer Return: CF set on error CF clear if successful AH = status code (see AH=01h) Notes: does not write data to the drive should be called before formatting to initialize an XT-type controller's sector buffer used for diagnostics only on PS/2 systems SeeAlso: AH=0Bh ----------1310------------------------------- INT 13 - HARD DISK - CHECK IF DRIVE READY AH = 10h DL = drive number (80h = first, 81h = second hard disk) Return: CF set on error CF clear if successful AH = status (see AH=01h) ----------1311------------------------------- INT 13 - HARD DISK - RECALIBRATE DRIVE AH = 11h DL = drive number (80h = first, 81h = second hard disk) Return: CF set on error CF clear if successful AH = status (see AH=01h) Note: causes hard disk controller to seek the specified drive to cylinder 0 SeeAlso: AH=00h,AH=0Ch,AH=19h"FIXED DISK" ----------1312------------------------------- INT 13 - HARD DISK - CONTROLLER RAM DIAGNOSTIC (XT,PS) AH = 12h DL = drive number (80h = first, 81h = second hard disk) Return: CF set on error CF clear if successful AH = status code (see AH=01h) SeeAlso: AH=13h,AH=14h ----------1312------------------------------- INT 13 - Future Domain SCSI CONTROLLER - STOP SCSI DISK AH = 12h DL = hard drive ID Return: CF set on error AH = status code (see AH=01h) Notes: available at least on the TMC-870 8-bit SCSI controller BIOS v6.0A if the given drive is a SCSI device, the SCSI Stop Unit command is sent and either "Disk prepared for shipping" or "Disk Stop command failed" is displayed ----------1313------------------------------- INT 13 - HARD DISK - DRIVE DIAGNOSTIC (XT,PS) AH = 13h DL = drive number (80h = first, 81h = second hard disk) Return: CF set on error CF clear if successful AH = status code (see AH=01h) SeeAlso: AH=12h,AH=14h ----------1314------------------------------- INT 13 - HARD DISK - CONTROLLER INTERNAL DIAGNOSTIC AH = 14h Return: CF set on error CF clear if successful AH = status code (see AH=01h) SeeAlso: AH=12h,AH=13h ----------1315------------------------------- INT 13 - DISK - GET DISK TYPE (XT 1/10/86 or later,XT286,AT,PS) AH = 15h DL = drive number (bit 7 set for hard disk) Return: CF clear if successful AH = type code 00h no such drive 01h floppy without change-line support 02h floppy with change-line support 03h hard disk CX:DX = number of 512-byte sectors CF set on error AH = status (see AH=01h) SeeAlso: AH=08h,AH=16h,AH=17h,AH=19h"SCSI" ----------1316------------------------------- INT 13 - FLOPPY DISK - DETECT DISK CHANGE (XT 1/10/86 or later,XT286,AT,PS) AH = 16h DL = drive number Return: CF clear if change line inactive AH = 00h (disk not changed) CF set if change line active AH = 06h change line active or not supported = 80h drive not ready or not present Note: call AH=15h first to determine whether the drive supports a change line SeeAlso: AH=15h ----------1317------------------------------- INT 13 - FLOPPY DISK - SET DISK TYPE FOR FORMAT (AT,PS) AH = 17h AL = format type 01h = 320/360K disk in 360K drive 02h = 320/360K disk in 1.2M drive 03h = 1.2M disk in 1.2M drive 04h = 720K disk in 720K drive DL = drive number Return: CF set on error CF clear if successful AH = status (see AH=01h) Note: this function does not handle 1.44M drives; use AH=18h instead SeeAlso: AH=15h,AH=18h ----------1318------------------------------- INT 13 - DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS) AH = 18h DL = drive number CH = lower 8 bits of highest cylinder number (number of cylinders - 1) CL = sectors per track (bits 0-5) top 2 bits of highest cylinder number (bits 6,7) Return: AH = status 00h requested combination supported 01h function not available 0Ch not supported or drive type unknown 80h there is no disk in the drive ES:DI -> 11-byte parameter table SeeAlso: AH=05h,AH=07h,AH=17h ----------1318------------------------------- INT 13 - Future Domain SCSI BIOS - GET SCSI CONTROLLER INFORMATION AH = 18h DL = hard drive ID Return: CF set on error AH = status code (see AH=01h) CF clear if successful AX = 4321h (magic number???) BH = number of SCSI drives connected BL = SCSI device number for specified drive CX = 040Ah (magic number???) Note: also sets an internal flag (non-resettable) which prevents some controller messages from being displayed, allows writes to removable devices, and enables the INT 13 interface for more than one drive (i.e. DL >= 81h) SeeAlso: AH=1Bh"SCSI" ----------1319------------------------------- INT 13 - FIXED DISK - PARK HEADS (XT286,PS) AH = 19h DL = drive Return: CF set on error AH = status (see AH=01h) SeeAlso: AH=11h ----------1319------------------------------- INT 13 - Future Domain SCSI CONTROLLER - REINITIALIZE DRIVE AH = 19h DL = hard drive ID Return: CF set on error AH = status code (see AH=01h) CF clear if successful AH = disk type (03h = fixed disk) CX:DX = number of 512-byte sectors Notes: sends SCSI Read Capacity command to get number of logical blocks and adjusts the result for 512-byte sectors displays either "Error in Read Capacity Command" or "nnn Bytes per sector" (nnn=256 or 512, the only sizes supported in the translation code) should probably be called when a removable device has its media changed returns the same values as AH=15h SeeAlso: AH=15h,AH=1Ah ----------131A------------------------------- INT 13 - ESDI FIXED DISK - FORMAT UNIT (PS) AH = 1Ah AL = defect table count CL = format modifiers bit 4: generate periodic interrupt bit 3: perform surface analysis bit 2: update secondary defect map bit 1: ignore secondary defect map bit 0: ignore primary defect map DL = drive ES:BX -> defect table Return: CF set on error AH = status (see AH=01h) Note: if periodic interrupt selected, INT 15/AH=0Fh is called after each cylinder is formatted SeeAlso: AH=07h,INT 15/AH=0Fh ----------131A------------------------------- INT 13 - Future Domain SCSI CONTROLLER - GET SCSI PARTIAL MEDIUM CAPACITY AH = 1Ah CH = track (bits 8,9 in high bits of CL) CL = sector (01h to number of sectors/track for drive) DH = head DL = hard drive ID Return: CF set on error AH = status code (see AH=01h) CX:DX = logical block number of last quickly-accessible block after given block Note: sends SCSI Read Capacity command with the PMI bit set to obtain the logical block address of the last block after which a substantial delay in data transfer will be encountered (usually the last block on the current cylinder). No translation to 512 byte sectors is performed on the result if data is stored on the disk in other than 512 byte sectors. SeeAlso: AH=15h,AH=19h"SCSI" ----------131B------------------------------- INT 13 - ESDI FIXED DISK - GET MANUFACTURING HEADER AH = 1Bh AL = number of record DL = drive ES:BX -> buffer for manufacturing header (defect list) Return: CF set on error AH = status Note: manufacturing header format (Defect Map Record format) can be found in IBM 70MB, 115MB Fixed Disk Drives Technical Reference ----------131B------------------------------- INT 13 - Future Domain SCSI CONTROLLER - GET POINTER TO SCSI DISK INFO BLOCK AH = 1Bh DL = hard drive ID Return: CF set on error AH = status code (see AH=01h) CF clear if successful ES:BX -> SCSI disk information block Note: also sets a non-resettable flag which prevents some controller messages from being displayed SeeAlso: AH=18h"SCSI",AH=1Ch"SCSI" Format of SCSI disk information block: Offset Size Description 00h BYTE drive physical information bit 0: ??? bit 1: device uses parity bit 2: 256 bytes per sector instead of 512 bit 3: don't have capacity yet??? bit 4: disk is removable bit 5: logical unit number is not present 01h WORD translated number of cylinders 03h BYTE translated number of heads 04h BYTE translated number of sectors per track (17, 34, or 63) 05h BYTE drive address bits 0-2: logical unit number bits 3-5: device number 06h BYTE 01h at initialization 07h BYTE sense code byte 00h, or extended sense code byte 0Ch 08h BYTE 00h 09h BYTE 00h or extended sense code byte 02h (sense key) 0Ah BYTE 00h 0Bh 10 BYTEs copy of Command Descriptor Block (CDB) 15h DWORD translated number of sectors on device ----------131C------------------------------- INT 13 - Future Domain SCSI CONTROLLER - GET POINTER TO FREE CONTROLLER RAM AH = 1Ch DL = hard drive ID (any valid SCSI hard disk) Return: CF set on error AH = status code (see AH=01h) CF clear if successful ES:BX -> first byte of free RAM on controller Notes: the Future Domain TMC-870 contains 1024 bytes of RAM at offsets 1800h to 1BFFh on-bard the controller for storing drive information and controller status; ES:BX points to the first byte available for other uses ES contains the segment at which the controller resides; the controller's two memory-mapped I/O ports are at offsets 1C00h, 1E00h SeeAlso: AH=1Bh"SCSI" ----------131C0A----------------------------- INT 13 - ESDI FIXED DISK - GET DEVICE CONFIGURATION AX = 1C0Ah DL = drive ES:BX -> buffer for device configuration (drive physical parameter) Return: CF set on error AH = status Note: device configuration format can be found in IBM ESDI Fixed Disk Drive Adapter/A Technical Reference ----------131C0B----------------------------- INT 13 - ESDI FIXED DISK - GET ADAPTER CONFIGURATION AX = 1C0Bh ES:BX -> buffer for adapter configuration Return: CF set on error AH = status SeeAlso: AX=1C0Ch ----------131C0C----------------------------- INT 13 - ESDI FIXED DISK - GET POS INFORMATION AX = 1C0Ch ES:BX -> POS information Return: CF set on error AH = status SeeAlso: AX=1C0Bh ----------131C0E----------------------------- INT 13 - ESDI FIXED DISK - TRANSLATE RBA TO ABA AX = 1C0Eh CH = low 8 bits of cylinder number CL = sector number, high two bits of cylinder number in bits 6 and 7 DH = head number DL = drive number ES:BX -> ABA number Return: CF set on error AH = status Note: ABA (absolute block address) format can be found in IBM ESDI Adapter Technical Reference by using its Device Configuration Status Block ----------131D------------------------------- INT 13 - IBMCACHE.SYS - CACHE STATUS AH = 1Dh AL = subfunction 01h get status record DL = drive??? Return: ES:BX -> status record CF set on error AH = error code 02h set cache status ES:BX -> status record DL = drive??? Return: CF set on error Format of status record: Offset Size Description 00h DWORD total number of read requests 04h DWORD total number of hits 08h DWORD number of physical disk reads 0Ch DWORD total number of sectors requested by physical disk reads 10h 6 bytes ??? 16h DWORD pointer to start of error list 1Ah DWORD pointer to end of error list 1Eh WORD ??? 20h BYTE using extended memory if nonzero 21h BYTE ??? 22h 4 BYTEs ASCII version number 26h WORD cache size in K 28h WORD sectors per page Format of error list: Offset Size Description 00h DWORD relative block address of bad page 04h BYTE drive 05h BYTE sector bit-map 06h WORD next error ----------1320------------------------------- INT 13 - DISK - ??? (Western Digital "Super BIOS") AH = 20h ??? Return: ??? Note: seems to return some kind of status ----------1320FF----------------------------- INT 13 - QCACHE - DISMOUNT AX = 20FFh Return: ??? ----------1321------------------------------- INT 13 - QCACHE - FLUSH CACHE AH = 21h Return: ??? SeeAlso: AH=25h,AH=2Eh ----------1322------------------------------- INT 13 - QCACHE - ENABLE/DISABLE CACHE AH = 22h AL = 00h disable cache 01h enable cache ----------1324------------------------------- INT 13 - QCACHE - SET SECTORS AH = 24h BX = number of sectors Return: ??? ----------1325------------------------------- INT 13 - QCACHE - SET FLUSH INTERVAL AH = 25h BC = interval Return: ??? SeeAlso: AH=21h,AH=2Eh ----------1327--BX0000----------------------- INT 13 - QCACHE - INSTALLATION CHECK AH = 27h BX = 0000h Return: BX nonzero if installed ----------132A------------------------------- INT 13 - QCACHE - SET BUFFER SIZE AH = 2Ah AL = buffer size Return: ??? ----------132C------------------------------- INT 13 - QCACHE - SET BUFFERED WRITES AH = 2Ch AL = state 00h disable 01h enable Return: ??? SeeAlso: AH=2Dh ----------132D------------------------------- INT 13 - QCACHE - SET BUFFERED READ AH = 2Dh AL = state 00h disable 01h enable Return: ??? SeeAlso: AH=2Ch ----------132E------------------------------- INT 13 - QCACHE - SET FLUSH COUNT AH = 2Eh BX = flush count Return: ??? SeeAlso: AH=21h,AH=25h ----------1330------------------------------- INT 13 - QCACHE - GET INFO AH = 30h AL = what to get 00h system info 01h drive info DS:DX -> buffer for info Return: ??? ----------1370------------------------------- INT 13 - Priam EDVR.SYS DISK PARTITIONING SOFTWARE??? AH = 70h ??? Return: ??? Note: Priam's EDISK.EXE (FDISK replacement) and EFMT.EXE (low-level formatting program) make this call, presumably to EDVR.SYS (the partitioning driver) SeeAlso: AH=ADh ----------1375------------------------------- INT 13 - ??? AH = 75h ??? Return: AH = ??? ??? Note: intercepted by PC-Cache (v5.1 only) ----------1376------------------------------- INT 13 - ??? AH = 76h ??? Return: AH = ??? ??? Note: intercepted by PC-Cache (v5.1 only) ----------1380--CX6572----------------------- INT 13 - FAST! - API AH = 80h CX = 6572h DX = 1970h ES:BX -> data structure (see below) AL = function 01h ??? 04h ??? 05h ??? 06h installation check Return: AX = 1965h if installed 07h ??? 09h ??? 0Ah ??? 0Bh ??? 0Ch set ??? flag 0Dh clear ??? flag Return: AH = 00h if successful (except function 06h) Format of data structure: Offset Size Description 00h DWORD pointer to 19-byte signature string 13h 07h 06h 08h 11h 18h 0Fh 0Eh 02h 18h 13h 08h 0Bh 08h 01h 00h 04h 08h 15h (v4.04) 04h ??? ??? ----------1381--SI4358----------------------- INT 13 - Super PC Kwik/PC-Cache 5.x - ??? AH = 81h SI = 4358h ??? Return: ??? Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of Super PC Kwik, and thus support this call returns immediately in PC-Cache v5.x ----------1382--SI4358----------------------- INT 13 - Super PC Kwik/PC-Cache 5.x - ??? AH = 82h SI = 4358h ??? Return: AL = ??? Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of Super PC Kwik, and thus support this call SeeAlso: AH=84h ----------1383--SI4358----------------------- INT 13 - Super PC Kwik/PC-Cache 5.x - ??? AH = 83h SI = 4358h AL = ??? ES:BX -> ??? ??? Return: ??? Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of Super PC Kwik, and thus support this call SeeAlso: AH=85h ----------1384--SI4358----------------------- INT 13 - Super PC Kwik/PC-Cache 5.x - ??? AH = 84h SI = 4358h AL = ??? ??? Return: AL = ??? Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of Super PC Kwik, and thus support this call SeeAlso: AH=82h ----------1385--SI4358----------------------- INT 13 - Super PC Kwik/PC-Cache 5.x - ??? AH = 85h SI = 4358h AL = ??? DL = ??? ??? Return: ??? Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of Super PC Kwik, and thus support this call SeeAlso: AH=83h ----------1386--SI4358----------------------- INT 13 - Qualitas Qcache v4.00 - ??? AH = 86h SI = 4358h ??? Return: ??? ----------1387--SI4358----------------------- INT 13 - Qualitas Qcache v4.00 - ??? AH = 87h SI = 4358h ??? Return: ??? ----------1388--SI4358----------------------- INT 13 - Qualitas Qcache v4.00 - ??? AH = 88h SI = 4358h ??? Return: ??? ----------138EED----------------------------- INT 13 - HyperDisk v4.01+ - ??? AX = 8EEDh ??? Return: ??? Note: HyperDisk is a shareware disk cache by HyperWare (Roger Cross) SeeAlso: AX=8EEEh,AX=8EEFh,AH=EEh,INT 2F/AH=DFh ----------138EEE----------------------------- INT 13 - HyperDisk v4.01+ - ??? AX = 8EEEh Return: CF set AX = CS of HyperDisk resident code ??? Note: identical to AX=8EEFh in HYPERDKX v4.21-4.30 SeeAlso: AX=8EEDh,AX=8EEFh,AH=EEh ----------138EEF----------------------------- INT 13 - HyperDisk v4.01+ - ??? AX = 8EEFh Return: CF set AX = CS of HyperDisk resident code ??? Note: identical to AX=8EEEh in HYPERDKX v4.21-4.30 SeeAlso: AX=8EEDh,AX=8EEEh,AH=EEh ----------13A0--SI4358----------------------- INT 13 - Super PC Kwik - GET RESIDENT CODE SEGMENT AH = A0h SI = 4358h Return: AX = segment of resident code Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of Super PC Kwik, and thus support this call SeeAlso: INT 16/AX=FFA5h/CX=1111h ----------13A1--SI4358----------------------- INT 13 - Super PC Kwik - FLUSH CACHE AH = A1h SI = 4358h Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of Super PC Kwik, and thus support this call SeeAlso: INT 16/AX=FFA5h/CX=FFFFh ----------13A2--SI4358----------------------- INT 13 - Super PC Kwik - ??? AH = A2h SI = 4358h ??? Return: ??? Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of Super PC Kwik, and thus support this call ----------13A5------------------------------- INT 13 - Super PC Kwik - ??? AH = A5h SI = ??? Return: AX = ??? SI = ??? Notes: called when a program terminates but stays resident (see INT 21/AH=31h) this call is not supported by Qualitas Qcache 4.00 ----------13AA--SI4358----------------------- INT 13 - Qualitas Qcache v4.00 - ??? AH = AAh SI = 4358h ??? Return: ??? ----------13AB--SI4358----------------------- INT 13 - Qualitas Qcache v4.00 - ??? AH = ABh SI = 4358h ??? Return: ??? ----------13AC--SI4358----------------------- INT 13 - Qualitas Qcache v4.00 - ??? AH = ACh SI = 4358h ??? Return: ??? ----------13AD------------------------------- INT 13 - Priam HARD DISK CONTROLLER??? AH = ADh ??? Return: ??? Note: this call is made from Priam's EFMT.EXE (low-level formatter), probably to check the ROM type on the controller for their hard disk kits SeeAlso: AH=70h ----------13AD--SI4358----------------------- INT 13 - Qualitas Qcache v4.00 - ??? AH = ADh SI = 4358h ??? Return: ??? ----------13B0--SI4358----------------------- INT 13 - Super PC Kwik - ??? AH = B0h SI = 4358h ??? Return: ??? Note: PC Tools PC-Cache 5.x is an OEM version of Super PC Kwik, and thus supports this call; Qualitas Qcache does not support it ----------13EE------------------------------- INT 13 - SWBIOS - SET 1024 CYLINDER FLAG AH = EEh DL = drive number (80h, 81h) Return: CF clear AH = 00h Notes: the following INT 13 call will interpret the cylinder number as 1024 less than the desired cylinder flag cleared by all INT 13 calls except AH=EEh SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports these calls also supported by HyperDisk v4.01+ and PC-Cache v5.5+, in order to allow caching of drives using SWBIOS to access more than 1024 cylinders SeeAlso: AH=F9h,AH=FEh,INT 16/AX=FFA5h/CX=1111h,INT 2F/AH=DFh ----------13F9------------------------------- INT 13 - SWBIOS - INSTALLATION CHECK AH = F9h DL = drive number (80h,81h) Return: CF clear DX = configuration word bit 15 set if other SWBIOS extensions available CF set on error Note: SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports these calls SeeAlso: AH=EEh ----------13FE------------------------------- INT 13 - SWBIOS - GET EXTENDED CYLINDER COUNT AH = FEh DL = drive number (80h, 81h) Return: CF clear DX = number of cylinders beyond 1024 on drive Notes: standard INT 13/AH=08h will return a cylinder count truncated to 1024 BIOS without this extension would return count modulo 1024 SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports these calls SeeAlso: AH=EEh ----------14--------------------------------- INT 14 - SERIAL I/O- Digiboard DigiCHANNEL PC/X* Extender INT 14 (XAPCM232.SYS) Note: the installation check for this driver is to determine whether the "~DOSXAM~" character device exists ----------1400------------------------------- INT 14 - SERIAL - INITIALIZE PORT AH = 00h AL = port parameters bits 7-5 data rate (110,150,300,600,1200,2400,4800,9600 bps) bits 4-3 parity (00 or 10 = none, 01 = odd, 11 = even) bit 2 stop bits (set = 2, clear = 1) bits 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8) DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS) Return: AH = line status (see AH=03h) FFh if error on Digiboard XAPCM232.SYS AL = modem status (see AH=03h) Notes: default handler is at F000h:E739h in IBM PC and 100% compatible BIOSes since the PCjr supports a maximum of 4800 bps, attempting to set 9600 bps will result in 4800 bps SeeAlso: AH=04h"SERIAL",AH=04h"MultiDOS",AH=05h"SERIAL",AH=81h"COMM-DRV" SeeAlso: AH=82h"COURIERS",AH=8Ch ----------1400------------------------------- INT 14 - FOSSIL (Fido/Opus/Seadog Standard Interface Level) - INITIALIZE AH = 00h AL = initializing parameters 7 - 6 - 5 4 - 3 2 1 - 0 -BAUD RATE- PARITY STOP WORD BITS LENGTH 000 19200 bd 00 none 0: 1 00: 5 001 38400 bd 01 odd 1: 2 01: 6 010 300 bd 11 even 10: 7 011 600 bd 11: 8 100 1200 bd 101 2400 bd 110 4800 bd 111 9600 bd (4800 on PCjr) DX = port number (0-3 or FFh if only performing non-I/O setup) Return: AH = RS-232 status code bits 0: RDA - input data is available in buffer 1: OVRN - data has been lost 5: THRE - room is available in output buffer 6: TSRE - output buffer empty AL = modem status bits 3: always 1 7: DCD - carrier detect SeeAlso: AH=05h"FOSSIL",AH=81h"COMM-DRV",AH=82h"COURIERS" ----------1400------------------------------- INT 14 - MBBIOS - INITIALIZE PORT AH = 00h AL = port parameters bits 7-5 data rate (normally 110,150,300,600,1200,2400,4800,9600 bps; 9600,14400,19200,28800,38400,57600,115200,330400 bps if the high-speed option is set) bits 4-3 parity (00 or 10 = none, 01 = odd, 11 = even) bit 2 stop bits (set = 2, clear = 1) bits 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8) DX = port number Return: AH = line status (see AH=03h) AL = modem status (see AH=03h) Note: MBBIOS was written by H. Roy Engehausen SeeAlso: AH=04h"MBBIOS",AH=05h"MBBIOS" ----------1401------------------------------- INT 14 - SERIAL - WRITE CHARACTER TO PORT AH = 01h AL = character to write DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS) Return: AH bit 7 clear if successful AH bit 7 set on error AH bits 6-0 = port status (see AH=03h) SeeAlso: AH=02h,AH=0Bh"FOSSIL",AH=89h ----------1402------------------------------- INT 14 - SERIAL - READ CHARACTER FROM PORT AH = 02h DX = port number (00h-03h (04h-43h for Digiboard XAPCM232.SYS)) Return: AH = line status (see AH=03h) AL = received character if AH bit 7 clear Note: will timeout if DSR is not asserted, even if function 03h returns data ready SeeAlso: AH=01h,AH=02h"FOSSIL",AH=84h,AH=FCh ----------1402------------------------------- INT 14 - FOSSIL - RECEIVE CHARACTER WITH WAIT AH = 02h DX = port number (0-3) Return: AL = character received AH = 00h SeeAlso: AH=01h,AH=02h"SERIAL" ----------1403------------------------------- INT 14 - SERIAL - GET PORT STATUS AH = 03h DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS) Return: AH = line status bit 7: timeout 6: transmit shift register empty 5: transmit holding register empty 4: break detected 3: framing error 2: parity error 1: overrun error 0: receive data ready AL = modem status bit 7: carrier detect 6: ring indicator 5: data set ready 4: clear to send 3: delta carrier detect 2: trailing edge of ring indicator 1: delta data set ready 0: delta clear to send SeeAlso: AH=00h,AH=07h"MultiDOS",AH=81h"COURIERS",AX=FD02h ----------1404------------------------------- INT 14 - SERIAL I/O - EXTENDED INITIALIZE (CONVERTIBLE,PS) AH = 04h AL = break status 00h if break 01h if no break BH = parity 00h no parity 01h odd parity 02h even parity 03h stick parity odd 04h stick parity even BL = number of stop bits 00h one stop bit 01h two stop bits (1.5 if 5 bit word length) CH = word length 00h 5 bits 01h 6 bits 02h 7 bits 03h 8 bits CL = bps rate 00h 110 01h 150 02h 300 03h 600 04h 1200 05h 2400 06h 4800 07h 9600 08h 19200 DX = port number Return: AX = port status code (see AH=00h) SeeAlso: AH=00h,AH=1Eh ----------1404------------------------------- INT 14 - FOSSIL - INITIALIZE DRIVER AH = 04h DX = port number optionally BX=4F50h ES:CX -> byte to be set upon ^C Return: AX = 1954h (if successful) BL = maximum function number supported (excluding 7Eh and above) BH = revision of FOSSIL supported DTR is raised Note: the word at offset 6 in the interrupt handler contains 1954h, and the following byte contains the maximum function number supported SeeAlso: AH=05h"FOSSIL",AH=1Ch ----------1404------------------------------- INT 14 - MultiDOS Plus IODRV - INITIALIZE PORT AH = 04h Return: port initialized; if Hayes-compatible modem, a connection has been established Note: the port number is stored at offset BEh in the Task Control Block (see INT 15/AH=13h"MultiDOS") SeeAlso: AH=00h,AH=05h"MultiDOS",AH=20h"MultiDOS",INT 15/AH=13h"MultiDOS" ----------1404------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - CHANGE BAUD RATE AH = 04h AL = initializing parameters bits 7-5 unused bits 4,3: parity (00 none, 01 odd, 11 even) bit 2: stop bits (0 = one, 1 = two) bits 1,0: data bits (00 = five, 01 = six, 10 = seven, 11 = eight) BX = baud rate DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AH = status 00h successful FFh error SeeAlso: AH=05h"Digiboard" ----------1404------------------------------- INT 14 - MBBIOS - INQUIRY AH = 04h Return: AH = AAh AL = 55h SeeAlso: AH=00h"MBBIOS",AH=09h"MBBIOS" ----------1405------------------------------- INT 14 - SERIAL I/O - EXTENDED COMMUNICATION PORT CONTROL (CONVERTIBLE,PS) AH = 05h AL = 00h read modem control register Return: BL = modem control register (see below) AH = status AL = 01h write modem control register BL = modem control register bit 0: data terminal ready bit 1: request to send bit 2: OUT1 bit 3: OUT2 bit 4: LOOP bits 5-7 reserved Return: AX = status DX = port number SeeAlso: AH=00h,AH=1Fh ----------1405------------------------------- INT 14 - FOSSIL - DEINITIALIZE DRIVER AH = 05h DX = port number Return: none DTR is not affected SeeAlso: AH=00h,AH=04h"FOSSIL",AH=1Dh,AH=8Dh ----------1405------------------------------- INT 14 - MultiDOS Plus IODRV - READ CHARACTER FROM PORT AH = 05h AL = timeout in seconds (00h = never) Return: AL = status 00h successful AH = character read 01h read error 02h timed out other modem status (CTS, DSR) changed Note: the port number is stored at offset BEh in the Task Control Block SeeAlso: AH=02h,AH=04h"MultiDOS",AH=06h"MultiDOS",AH=22h"MultiDOS" SeeAlso: INT 15/AH=13h"MultiDOS" ----------1405------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - CHANGE PROTOCOL AH = 05h AL = protocol bits 7-4 unused bit 3: RTS/CTS bit 2: DSR bits 1,0: XON/XOFF BH = new XOFF character (00h = current) BL = new XON character (00h = current) DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AH = status 00h successful FFh error SeeAlso: AH=04h"Digiboard" ----------1405------------------------------- INT 14 - MBBIOS - DROP DTR AND RTS AH = 05h DX = port number Return: none SeeAlso: AH=00h"MBBIOS",AH=06h"MBBIOS",AH=06h"FOSSIL" ----------1406------------------------------- INT 14 - FOSSIL - RAISE/LOWER DTR AH = 06h DX = port AL = DTR state to be set 00h = lower 01h = raise SeeAlso: AH=05h"MBBIOS",AH=1Ah ----------1406------------------------------- INT 14 - MultiDOS Plus IODRV - WRITE CHARACTER TO PORT AH = 06h AL = character Return: AL = status 00h successful Notes: the port number is stored at offset BEh in the Task Control Block if output queue is full, the calling task is blocked until the character can be stored SeeAlso: AH=01h,AH=04h"MultiDOS",AH=05h"MultiDOS",AH=21h"MultiDOS" SeeAlso: INT 15/AH=13h"MultiDOS" ----------1406------------------------------- INT 14 - MBBIOS - RAISE DTR AND RTS AH = 06h DX = port number Return: none SeeAlso: AH=05h"MBBIOS",AH=07h"MBBIOS" ----------1407------------------------------- INT 14 - FOSSIL - RETURN TIMER TICK PARAMETERS AH = 07h Return: AL = timer tick interrupt number AH = ticks per second on interrupt number in AL DX = approximate number of milliseconds per tick SeeAlso: AH=16h ----------1407------------------------------- INT 14 - MultiDOS Plus IODRV - GET PORT STATUS AH = 07h Return: CL = modem status (see AH=03h) CH = character at head of input queue (if any) DX = number of characters in input queue Note: the port number is stored at offset BEh in the Task Control Block SeeAlso: AH=03h,AH=05h"MultiDOS",AH=08h"MultiDOS",AH=09h"MultiDOS" SeeAlso: AH=23h"MultiDOS",INT 15/AH=13h"MultiDOS" ----------1407------------------------------- INT 14 - MBBIOS - SEND BREAK AH = 07h DX = port number Return: none SeeAlso: AH=06h"MBBIOS" ----------1408------------------------------- INT 14 - FOSSIL - FLUSH OUTPUT BUFFER WAITING TILL ALL OUTPUT IS DONE AH = 08h DX = port number SeeAlso: AH=09h"FOSSIL" ----------1408------------------------------- INT 14 - MultiDOS Plus 4.0 IODRV - GET AND RESET PORT LINE STATUS AH = 08h Return: AL = line status (see AH=03h) AH destroyed Notes: the port number is stored at offset BEh in the Task Control Block on every line status change, the line status is ORed with the line status accumulator; this function returns the accumulator and clears it SeeAlso: AH=03h,AH=04h"MultiDOS",AH=07h"MultiDOS",INT 15/AH=13h"MultiDOS" ----------1408------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - ALTERNATE STATUS CHECK AH = 08h DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AH = RS232 status bits (see AH=03h) ZF set if no characters queued ZF clear if character available AL = next character SeeAlso: AH=03h,AH=09h"Digiboard" ----------1408------------------------------- INT 14 - MBBIOS - NON-DESTRUCTIVE READ AH = 08h DX = port number Return: AL = character AH = status (see AH=02h) SeeAlso: AH=0Bh"MBBIOS",AH=0Ch"FOSSIL" ----------1409------------------------------- INT 14 - FOSSIL - PURGE OUTPUT BUFFER THROWING AWAY ALL PENDING OUTPUT AH = 09h DX = port number SeeAlso: AH=08h"FOSSIL",AH=0Ah"FOSSIL",AH=88h ----------1409------------------------------- INT 14 - MultiDOS Plus IODRV - RESET PORT STATUS AH = 09h Return: modem status byte cleared Note: the port number is stored at offset BEh in the Task Control Block SeeAlso: AH=04h"MultiDOS",AH=07h"MultiDOS",INT 15/AH=13h"MultiDOS" ----------1409------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR BUFFERS AH = 09h DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AH = status 00h successful FFh error SeeAlso: AH=08h"Digiboard",AH=0Ah"Digiboard",AH=10h"Digiboard" ----------1409------------------------------- INT 14 - MBBIOS - GET/SET OPTIONS AH = 09h AL = option byte 00000001b - Transmit Buffering Enabled 00000101b - Hardware Handshaking Enabled 00100000b - High Speed Option Enabled DX = port number??? Return: AL = old option byte SeeAlso: AH=04h"MBBIOS",AH=10h"FOSSIL" ----------140A------------------------------- INT 14 - FOSSIL - PURGE INPUT BUFFER THROWING AWAY ALL PENDING INPUT AH = 0Ah DX = port number SeeAlso: AH=09h"FOSSIL",AH=85h ----------140A------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - INPUT QUEUE CHECK AH = 0Ah DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AX = number of characters available in buffer SeeAlso: AH=09h"Digiboard",AH=0Dh"Digiboard" ----------140A------------------------------- INT 14 - MBBIOS - WRITE BUFFER AH = 0Ah CX = count ES:DI -> buffer Return: AX = status (see AH=03h) DI = is updated CX = unsent character count SeeAlso: AH=0Bh"MBBIOS",AH=19h"FOSSIL" ----------140B------------------------------- INT 14 - FOSSIL - TRANSMIT NO WAIT AH = 0Bh AL = character DX = port number Return: AX = 0000h character not accepted = 0001h character accepted SeeAlso: AH=01h ----------140B------------------------------- INT 14 - MBBIOS - READ BUFFER AH = 0Bh CX = size of buffer ES:DI -> buffer Return: AH = LSR AL = MSR CX = count of characters DI = is updated SeeAlso: AH=08h"MBBIOS",AH=0Ah"MBBIOS",AH=18h"FOSSIL" ----------140C------------------------------- INT 14 - FOSSIL - NON-DESTRUCTIVE READ AHEAD AH = 0Ch DX = port number Return: AX = FFFFh character not available AX = 00xxh character xx available SeeAlso: AH=08h"MBBIOS",AH=20h"FOSSIL" ----------140D------------------------------- INT 14 - FOSSIL - KEYBOARD READ WITHOUT WAIT AH = 0Dh Return: AX = FFFFh character not available = xxyyh standard IBM-style scan code SeeAlso: AH=0Eh ----------140D------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - GET POINTER TO CH_KEY_RDY FLAG AH = 0Dh DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: ES:BX -> CH_KEY_RDY flag SeeAlso: AH=0Ah"Digiboard" Values for CH_KEY_RDY flag: 00h receive buffer empty FFh characters available ----------140E------------------------------- INT 14 - FOSSIL - KEYBOARD READ WITH WAIT AH = 0Eh Return: AX = xxyyh standard IBM-style scan code SeeAlso: AH=0Dh"FOSSIL" ----------140E------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - WRITE STRING AH = 0EH CX = number of characters to write ES:BX -> string DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AX = number of characters actually written ZF clear if successful ZF set on error SeeAlso: AH=0Fh"Digiboard" ----------140F------------------------------- INT 14 - FOSSIL - ENABLE/DISABLE FLOW CONTROL AH = 0Fh AL = bit mask describing flow control requested 0: xon/xoff on transmit (watch for xoff while sending) 1: CTS/RTS (CTS on transmit/RTS on receive) 2: reserved 3: xon/xoff on receive (send xoff when buffer near full) 4-7: all 1 DX = port number SeeAlso: AH=09h"MBBIOS",AH=10h"FOSSIL" ----------140F------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - READ STRING AH = 0Fh CX = number of characters to read ES:BX -> buffer DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AX = number of characters read ZF clear if successful ZF set on error (line status or wrong number of characters) SeeAlso: AH=0Eh"Digiboard" ----------1410------------------------------- INT 14 - FOSSIL - EXTENDED ^C/^K CHECKING AND TRANSMIT ON/OFF AH = 10h AL = bit mask 0: enable/disable ^C/^K checking 1: enable/disable the transmitter DX = port number SeeAlso: AH=0Fh"FOSSIL" ----------1410------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR RECEIVE BUFFER AH = 10h DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AH = status 00h successful FFh error SeeAlso: AH=09h"Digiboard",AH=11h"Digiboard" ----------1411------------------------------- INT 14 - FOSSIL - SET CURRENT CURSOR LOCATION AH = 11h DH = row DL = column Note: this is the same as INT 10/AH=02h SeeAlso: AH=12h"FOSSIL" ----------1411------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR TRANSMIT BUFFER AH = 11h DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AH = status 00h successful FFh error SeeAlso: AH=09h"Digiboard",AH=10h"Digiboard" ----------1412------------------------------- INT 14 - FOSSIL - READ CURRENT CURSOR LOCATION AH = 12h Return: DH = row DL = column Note: this is the same as INT 10/AH=03h SeeAlso: AH=11h"FOSSIL" ----------1412------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - GET TRANSMIT BUFFER FREE SPACE AH = 12h DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AX = number of bytes free SeeAlso: AH=0Ah"Digiboard" ----------1413------------------------------- INT 14 - FOSSIL - SINGLE CHARACTER ANSI WRITE TO SCREEN AH = 13h AL = character Note: should not be called if it is unsafe to call DOS SeeAlso: AH=15h ----------1414------------------------------- INT 14 - FOSSIL - ENABLE OR DISABLE WATCHDOG PROCESSING AH = 14h AL = 01h enable watchdog 00h disable watchdog DX = port number ----------1415------------------------------- INT 14 - FOSSIL - WRITE CHARACTER TO SCREEN USING BIOS SUPPORT ROUTINES AH = 15h AL = character SeeAlso: AH=13h ----------1416------------------------------- INT 14 - FOSSIL - INSERT/DELETE FUNCTION FROM TIMER TICK CHAIN AH = 16h AL = function 00h = delete 01h = add ES:DX -> routine to call Return: AX = status 0000h successful 0001h unsuccessful SeeAlso: AH=07h"FOSSIL" ----------1416------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - CCB COMMAND AH = 16h AL = CCB command number (see below) BL = byte 2 BH = byte 3 CL = byte 1 (for all channel functions except 4Eh and 4Fh) DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AH = status 00h successful FFh error SeeAlso: AH=18h"Digiboard" Values for CCB command number: 40h Set Receive Mid Water Mark 41h Set Receive High Water Mark 42h Flush Receive Buffer 43h Flush Transmit Buffer 44h Transmit Pause 45h Transmit Resume 46h Set Interrupt to Host Mask 47h Set Baud, Data, Stop and Parity 48h Send Break 49h Set Modem Lines 4Ah Set Break Count 4Bh Set Handshake 4Ch Set Xon/Xoff Characters 4Dh Set Transmit Mid Water Mark 4Eh IRQ Polling Timer to Host 4Fh Buffer Set All 50h Port On 51h Port Off 52h Receive Pause 53h Special Character Interrupt 54h RS-422 Enable ----------1417------------------------------- INT 14 - FOSSIL - REBOOT SYSTEM AH = 17h AL = method 00h = cold boot 01h = warm boot SeeAlso: INT 19 ----------1418------------------------------- INT 14 - FOSSIL - READ BLOCK AH = 18h CX = maximum number of characters to transfer DX = port number ES:DI -> user buffer Return: AX = number of characters transferred SeeAlso: AH=19h"FOSSIL",AH=83h"COURIERS",AX=FF02h,INT 6B/AX=0100h ----------1418------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - SEND BIOS COMMAND AH = 18h ES:BX -> 16-byte command string DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AH = status 00h successful 80h timeout AL = mailbox status 00h no errors 8Xh BIOS error ES:BX buffer filled in with mailbox string ZF clear if no errors ZF set if either status byte contains an error code SeeAlso: AH=16h"Digiboard" ----------1419------------------------------- INT 14 - FOSSIL - WRITE BLOCK AH = 19h CX = maximum number of characters to transfer DX = port number ES:DI -> user buffer Return: AX = number of characters transferred SeeAlso: AH=18h"FOSSIL",AH=86h,INT 6B/AX=0000h ----------1419------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X* - SPECIAL CHARACTER INTERRUPT AH = 19h BL = flag 00h disable special character interrupt FFh enable interrupt DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: AH = status 00h successful FFh failed SeeAlso: AH=1Ah"Digiboard" ----------141A------------------------------- INT 14 - FOSSIL - BREAK BEGIN OR END AH = 1Ah AL = 00h stop sending 'break' 01h start sending 'break' DX = port number SeeAlso: AH=06h"FOSSIL",AH=8Ah,AH=FAh ----------141A------------------------------- INT 14 - Digiboard DigiCHANNEL PC/X - SPECIAL CHARACTER FLAG/COUNTER AH = 1Ah BX = subfunction 00h return pointer to special character flag byte 01h return pointer to special character counter word DX = port number (00h-03h) (04h-43h for XAPCM232.SYS) Return: ES:BX -> special character flag or counter Notes: flag is FFh if one or more special characters are in the receive buffer; it is 00h and the counter is invalid if no special characters are in the receive buffer counter (if valid) contains the number of characters in the receive buffer up to and including the last-received special character ----------141B------------------------------- INT 14 - FOSSIL - RETURN INFORMATION ABOUT THE DRIVER AH = 1Bh DX = port number CX = size of user buffer ES:DI -> user buffer for driver info (see below) Return: AX = number of characters transferred CX = 3058h ("0X") (X00 FOSSIL only) DX = 2030h (" 0") (X00 FOSSIL only) Format of driver info: Offset Size Description 00h WORD size of structure in bytes 02h BYTE FOSSIL spec driver conforms to 03h BYTE revision level of this specific driver 04h DWORD pointer to ASCIZ identification string 08h WORD size of the input buffer 0Ah WORD number of bytes left in buffer 0Ch WORD size of the output buffer 0Eh WORD number of bytes left in buffer 10h BYTE width of screen 11h BYTE length of screen 12h BYTE actual baud rate, computer to modem ----------141C------------------------------- INT 14 - X00 FOSSIL - ACTIVATE PORT AH = 1Ch DX = port number Return: AX = 1954h if successful BL = maximum function number supported (not including 7Eh and above) BH = revision of FOSSIL specification supported Note: this is a duplicate of AH=04h, so that AH=04h may be made compatible with the PS/2 BIOS in a future release SeeAlso: AH=04h"FOSSIL",AH=1Dh ----------141D------------------------------- INT 14 - X00 FOSSIL - DEACTIVATE PORT AH = 1Dh DX = port number Return: none Notes: this is a duplicate of AH=05h, so that AH=05h may be made compatible with the PS/2 BIOS in a future release ignored if the port was never activated with AH=04h or AH=1Ch SeeAlso: AH=05h"FOSSIL",AH=1Ch ----------141E------------------------------- INT 14 - X00 FOSSIL - EXTENDED LINE CONTROL INITIALIZATION AH = 1Eh AL = break status 00h if break 01h if no break BH = parity 00h no parity 01h odd parity 02h even parity 03h stick parity odd 04h stick parity even BL = number of stop bits 00h one stop bit 01h two stop bits (1.5 if 5 bit word length) CH = word length 00h 5 bits 01h 6 bits 02h 7 bits 03h 8 bits CL = bps rate 00h 110 01h 150 02h 300 03h 600 04h 1200 05h 2400 06h 4800 07h 9600 08h 19200 DX = port number Return: AX = port status code (see AH=00h) Notes: this function is intended to exactly emulate the PS/2 BIOS AH=04h call if the port was locked at X00 load time, the appropriate parameters are ignored SeeAlso: AH=00h,AH=04h"SERIAL I/O" ----------141F------------------------------- INT 14 - X00 FOSSIL - EXTENDED SERIAL PORT STATUS/CONTROL AH = 1Fh AL = 00h read modem control register Return: BL = modem control register (see below) AH = status AL = 01h write modem control register BL = modem control register bit 0: data terminal ready bit 1: request to send bit 2: OUT1 bit 3: OUT2 (interrupts) enabled bit 4: LOOP bits 5-7 reserved Return: AX = status DX = port number SeeAlso: AH=00h,AH=05h"SERIAL I/O" Notes: this function is intended to exactly emulate the PS/2 BIOS AH=05h call X00 forces BL bit 3 set (interrupts cannot be disabled) ----------1420------------------------------- INT 14 - X00 FOSSIL - DESTRUCTIVE READ WITH NO WAIT AH = 20h DX = port number Return: AH = 00h if character was available AL = next character (removed from receive buffer) AX = FFFFh if no character available SeeAlso: AH=0Ch,AH=21h"X00" ----------1420------------------------------- INT 14 - Alloy MW386 - ATTACH LOGICAL COMMUNICATIONS PORT TO PHYSICAL PORT AH = 20h AL = logical port (01h COM1, 02h COM2) DX = physical port number Return: AX = status 0000h successful FFFFh failed SeeAlso: AH=21h"Alloy",AH=22h"Alloy",AH=23h"Alloy",INT 17/AH=8Bh"Alloy" ----------1420------------------------------- INT 14 - MultiDOS Plus - INITIALIZE PORT AH = 20h AL = port parameters (see AH=00h"SERIAL") DX = port number (0-3) Return: AH = status 00h successful 41h no such port 64h monitor mode already active SeeAlso: AH=00h"SERIAL",AH=04h"MultiDOS",AH=21h"MultiDOS",AH=23h"MultiDOS" ----------1421------------------------------- INT 14 - X00 FOSSIL - STUFF RECEIVE BUFFER AH = 21h AL = character DX = port number Notes: the given character is inserted at the end of the receive buffer as if it had just arrived from the serial port; all normal receive processing (XON/XOFF, ^C/^K) is performed on the character fully re-entrant SeeAlso: AH=20h"X00" ----------1421------------------------------- INT 14 - Alloy MW386 v1.x only - RELEASE PHYSICAL COMMUNICATIONS PORT AH = 21h DX = physical port number Return: AX = status 0000h successful FFFFh failed SeeAlso: AH=20h"Alloy",AH=22h"Alloy" ----------1421------------------------------- INT 14 - MultiDOS Plus - TRANSMIT CHARACTER AH = 21h AL = character to send DX = port number Return: AH = status 00h successful 39h no DSR or CTS 3Ch no DSR 3Bh no CTS 41h no such port 42h monitor mode not active 97h timed out Note: monitor mode must have been turned on with AH=24h before calling SeeAlso: AH=20h"MultiDOS",AH=22h"MultiDOS",AH=24h"MultiDOS" ----------1422------------------------------- INT 14 - Alloy MW386 v2+ - RELEASE LOGICAL COMMUNICATIONS PORT AH = 22h AL = logical port (01h COM1, 02h COM2) Return: AX = status (0000h successful) SeeAlso: AH=20h"Alloy",AH=21h"Alloy" ----------1422------------------------------- INT 14 - MultiDOS Plus - RECEIVE CHARACTER AH = 22h DX = port number Return: AH = status (see also AH=21h"MultiDOS") 00h successful AL = character 3Dh framing and parity error 3Eh overrun error 3Fh framing error 40h parity error 96h ring buffer overflow Note: if no character is available, this function waits until a character arrives or an implementation-dependent timeout elapses SeeAlso: AH=20h"MultiDOS",AH=21h"MultiDOS",AH=27h ----------1423------------------------------- INT 14 - Alloy MW386 v2+ - GET PORT NUMBER FROM LOGICAL PORT ID AH = 23h AL = logical port (01h COM1, 02h COM2) DH = user ID DL = process ID (DH,DL both FFh for current task) Return: AL = MW386 port mode bit 0: port is shared (spooler only) 1: port is spooled instead of direct (spooler only) 2: port is assigned as logical COM device, not in spooler 3: port is free CX = MW386 port number DH = owner's user ID DL = owner's task ID SeeAlso: AH=20h"Alloy",INT 17/AH=8Bh"Alloy" ----------1423------------------------------- INT 14 - MultiDOS Plus - GET PORT STATUS AH = 23h DX = port number Return: AH = line status (see AH=03h) AL = modem status (see AH=03h) SeeAlso: AH=03h,AH=07h"MultiDOS",AH=20h"MultiDOS" ----------1424------------------------------- INT 14 - Alloy MW386 v2+ - CHANGE PHYSICAL PORT PARAMETERS AH = 24h CX = physical I/O port number DS:DX -> configuration table (see below) Return: AH = 00h Note: invalid port numbers are merely ignored SeeAlso: INT 17/AH=96h Format of configuration table: Offset Size Description 00h BYTE baud rate 00h 38400 01h 19200 02h 9600 03h 7200 04h 4800 05h 3600 06h 2400 07h 2000 08h 1200 09h 600 0Ah 300 0Bh 150 0Ch 134.5 01h BYTE data bits (00h=5, 01h=6, 02h=7, 03h=8) 02h BYTE parity (00h none, 01h odd, 02h even) 03h BYTE stop bits (00h=1, 01h=2) 04h BYTE receive flow control 00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC, 04h RTS/CTS 05h BYTE transmit flow control (as for receive) ----------1424------------------------------- INT 14 - MultiDOS Plus - SET MONITOR MODE AH = 24h AL = port status storage 00h single status for entire receive buffer 01h separate status kept for each byte in receive buffer DX = port number Return: AH = status 00h successful 3Ah invalid status storage specified 41h no such port 64h monitor mode already active Note: in monitor mode, MultiDOS redirects all BIOS video output to a serial port SeeAlso: AH=20h"MultiDOS",AH=25h ----------1425------------------------------- INT 14 - MultiDOS Plus - CLEAR BUFFERS AH = 25h AL = function 00h only clear buffers 01h clear buffers and deactivate DX = port number Return: AH = status 00h successful 3Ah invalid function 41h no such port 42h monitor mode not active SeeAlso: AH=20h"MultiDOS",AH=24h"MultiDOS" ----------1427------------------------------- INT 14 - MultiDOS Plus - GET BUFFER CHARACTER COUNT AH = 27h DX = port number Return: AH = status 00h successful 41h no such port 42h monitor mode not active AL = number of characters in receive buffer ----------147E------------------------------- INT 14 - FOSSIL - INSTALL AN EXTERNAL APPLICATION FUNCTION AH = 7Eh AL = code assigned to external application (80h-BFh) 80h reserved for communications FOSSIL 81h video FOSSIL 82h reserved for keyboard FOSSIL 83h reserved for system FOSSIL ES:DX -> entry point Return: AX = 1954h BL = code assigned to application (same as input AL) DH = 00h failed 01h successful SeeAlso: AH=7Fh,AH=80h"FOSSIL",AX=8100h,AH=82h"FOSSIL",AH=83h"FOSSIL" ----------147F------------------------------- INT 14 - FOSSIL - REMOVE AN EXTERNAL APPLICATION FUNCTION AH = 7Fh AL = code assigned to external application ES:DX -> entry point Return: AX = 1954h BL = code assigned to application (same as input AL) DH = 00h failed 01h successful SeeAlso: AH=7Eh ----------1480------------------------------- INT 14 - COMMUNICATIONS FOSSIL AH = 80h SeeAlso: AH=7Eh ----------1480------------------------------- INT 14 - COURIERS.COM - INSTALLATION CHECK AH = 80h Return: AH = E8h if loaded Note: COURIERS is a TSR utility by PC Magazine ----------1481------------------------------- INT 14 - COURIERS.COM - CHECK IF PORT BUSY AH = 81h AL = port number (1-4) Return: AH = 00h port available 01h port exists but already in use 02h port nonexistent Note: COURIERS is a TSR utility by PC Magazine SeeAlso: AH=83h,AH=8Dh ----------1481------------------------------- INT 14 - Egberto Willies COMM-DRV - EXTENDED INITIALIZATION AH = 81h BX:DI -> port control block Return: ??? SeeAlso: AH=00h Format of port control block: Offset Type Description 00h WORD port IO address 02h WORD port IRQ 04h WORD baud rate 06h WORD parity 08h WORD data bits 0Ah WORD stop bits 0Ch WORD break status 0000h off 0Eh WORD flow control protocol 10h BYTE input block 11h BYTE output block 12h WORD low threshold 14h WORD high threshold 16h WORD segment of buffer 18h WORD offset of buffer 1Ah WORD input buffer length 1Ch WORD output buffer length 1Eh BYTE auxiliary address 1Fh BYTE spare 20h 4 WORDs spares ----------148100----------------------------- INT 14 - VIDEO FOSSIL - RETURN VFOSSIL INFORMATION AX = 8100h ES:DI -> buffer for VFOSSIL information (see below) Return: AX = 1954h if installed SeeAlso: AH=7Eh,AX=8101h Format of VFOSSIL information: Offset Size Description 00h WORD size of information in bytes, including this field 02h WORD VFOSSIL major version 04h WORD VFOSSIL revision level 06h WORD highest VFOSSIL application function supported ----------148101----------------------------- INT 14 - VIDEO FOSSIL - OPEN VFOSSIL AX = 8101h ES:DI -> buffer for application function table (see below) CX = length of buffer in bytes Return: AX = 1954h if installed BH = highest VFOSSIL application function supported Note: the number of initialized pointers in the application function table will never exceed CX/4; if the buffer is large enough, BH+1 pointers will be initialized SeeAlso: AX=8102h Format of application function table: Offset Size Description 00h DWORD -> function to query current video mode (VioGetMode) 04h DWORD -> function to set video mode (VioSetMode) 08h DWORD -> function to query hardware config (VioGetConfig) 0Ch DWORD -> function to write data in TTY mode (VioWrtTTY) 10h DWORD -> function to get current ANSI state (VioGetANSI) 14h DWORD -> function to set new ANSI state (VioSetANSI) 18h DWORD -> function to get curr cursor position (VioGetCurPos) 1Ch DWORD -> function to set cursor position (VioSetCurPos) 20h DWORD -> function to get cursor shape (VioGetCurType) 24h DWORD -> function to set cursor shape (VioSetCurType) 28h DWORD -> function to scroll screen up (VioScrollUp) 2Ch DWORD -> function to scroll screen down (VioScrollDn) 30h DWORD -> function to read cell string from screen (VioReadCellStr) 34h DWORD -> function to read char string from screen (VioReadCharStr) 38h DWORD -> function to write a cell string (VioWrtCellStr) 3Ch DWORD -> function to write char string, leaving attr (VioWrtCharStr) 40h DWORD -> function to write char string,const attr (VioWrtCharStrAttr) 44h DWORD -> function to replicate an attribute (VioWrtNAttr) 48h DWORD -> function to replicate a cell (VioWrtNCell) 4Ch DWORD -> function to replicate a character (VioWrtNChar) Format of video mode data structure: Offset Size Description 00h WORD length of structure including this field 02h BYTE mode characteristics bit 0: clear if MDA, set otherwise bit 1: graphics mode bit 2: color disabled (black-and-white) 03h BYTE number of colors supported (1=2 colors, 4=16 colors, etc) 04h WORD number of text columns 06h WORD number of text rows 08h WORD reserved 0Ah WORD reserved 0Ch DWORD reserved Format of video configuration data: Offset Size Description 00h WORD structure length including this field 02h WORD adapter type 00h monochrome/printer 01h CGA 02h EGA 03h VGA 07h 8514/A 04h WORD display type 00h monochrome 01h color 02h enhanced color 09h 8514 06h DWORD adapter memory size Format of cursor type record: Offset Size Description 00h WORD cursor start line 02h WORD cursor end line 04h WORD cursor width (always 01h) 06h WORD cursor attribute (FFFFh = hidden) Call VioGetMode with: STACK: WORD VIO handle (must be 00h) DWORD pointer to video mode data structure (see above) Return: AX = error code (00h, 74h, 17Eh, 1B4h) 0000h successful 0074h internal VIO failure 0163h unsupported mode 0166h invalid row value 0167h invalid column value 017Eh buffer too small 01A5h invalid VIO parameter 01B4h invalid VIO handle Call VioSetMode with: STACK: WORD VIO handle (must be 00h) DWORD pointer to video mode data structure (see above) Return: AX = error code (00h, 74h, 163h, 17Eh, 1A5h, 1B4h) (see above) Call VioGetConfig with: STACK: WORD VIO handle (must be 00h) DWORD pointer to video configuration data buffer (see above) Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see above) Call VioWrtTTY with: STACK: WORD VIO handle (must be 00h) WORD length of string DWORD pointer to character string to be written to screen Return: AX = error code (00h, 74h, 1B4h) (see above) Notes: write wraps at end of line and terminates if it reaches end of screen in ANSI mode, ANSI control sequences are interpreted, and this func is not required to be reentrant; in non-ANSI mode, the function is reentrant and may be called from within an MSDOS function call Call VioGetANSI with: STACK: WORD VIO handle (must be 00h) DWORD pointer to WORD which will be set to 00h if ANSI is off or 01h if ANSI is on Return: AX = error code (00h, 74h, 1B4h) (see above) Call VioSetANSI with: STACK: WORD VIO handle (must be 00h) DWORD pointer to WORD indicating new state of ANSI 00h off 01h on Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above) Call VioGetCurPos with: STACK: WORD VIO handle (must be 00h) DWORD pointer to WORD to hold current cursor column (0-based) DWORD pointer to WORD to hold current cursor row (0-based) Return: AX = error code (00h, 74h, 1B4h) (see above) Call VioSetCurPos with: STACK: WORD VIO handle (must be 00h) WORD cursor column WORD cursor row Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: if either coordinate is invalid, the cursor is not moved Call VioGetCurType with: STACK: WORD VIO handle (must be 00h) DWORD pointer to cursor type record (see above) Return: AX = error code (00h, 74h, 1B4h) (see above) Call VioSetCurType with: STACK: WORD VIO handle (must be 00h) DWORD pointer to cursor type record (see above) Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above) Call VioScrollUp with: STACK: WORD VIO handle (must be 00h) DWORD pointer to char/attr cell for filling emptied rows WORD number or rows to scroll (FFFFh = clear area) WORD right column of scroll area WORD bottom row of scroll area WORD left column of scroll area WORD top row of scroll area Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Call VioScrollDn with: STACK: WORD VIO handle (must be 00h) DWORD pointer to char/attr cell for filling emptied rows WORD number or rows to scroll (FFFFh = clear area) WORD right column of scroll area WORD bottom row of scroll area WORD left column of scroll area WORD top row of scroll area Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Call VioReadCellStr with: STACK: WORD VIO handle (must be 00h) WORD column at which to start reading WORD row at which to start reading DWORD pointer to WORD containing length of buffer in bytes on return, WORD contains number of bytes actually read DWORD pointer to buffer for cell string Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above) Call VioReadCharStr with: STACK: WORD VIO handle (must be 00h) WORD column at which to start reading WORD row at which to start reading DWORD pointer to WORD containing length of buffer in bytes on return, WORD contains number of bytes actually read DWORD pointer to buffer for character string Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above) Call VioWrtCellStr with: STACK: WORD VIO handle (must be 00h) WORD column at which to start writing WORD row at which to start writing WORD length of cell string in bytes DWORD pointer to cell string to write Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: write wraps at end of line and terminates if it reaches end of screen Call VioWrtCharStr with: STACK: WORD VIO handle (must be 00h) WORD column at which to start writing WORD row at which to start writing WORD length of character string DWORD pointer to character string to write Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: write wraps at end of line and terminates if it reaches end of screen Call VioWrtCharStrAttr with: STACK: WORD VIO handle (must be 00h) DWORD pointer to attribute to be applied to each character WORD column at which to start writing WORD row at which to start writing WORD length of character string DWORD pointer to character string to write Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: write wraps at end of line and terminates if it reaches end of screen Call VioWrtNAttr with: STACK: WORD VIO handle (must be 00h) WORD column at which to start writing WORD row at which to start writing WORD number of times to write attribute DWORD pointer to display attribute to replicate Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: write wraps at end of line and terminates if it reaches end of screen Call VioWrtNCell with: STACK: WORD VIO handle (must be 00h) WORD column at which to start writing WORD row at which to start writing WORD number of times to write cell DWORD pointer to cell to replicate Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: write wraps at end of line and terminates if it reaches end of screen Call VioWrtNChar with: STACK: WORD VIO handle (must be 00h) WORD column at which to start writing WORD row at which to start writing WORD number of times to write character DWORD pointer to character to replicate Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: write wraps at end of line and terminates if it reaches end of screen ----------148102----------------------------- INT 14 - VIDEO FOSSIL - CLOSE VFOSSIL AX = 8102h Return: AX = 1954h Note: terminates all operations; after this call, the video FOSSIL may either be removed from memory or reinitialized SeeAlso: AX=8101h,AX=8103h ----------148103----------------------------- INT 14 - VIDEO FOSSIL - UNINSTALL AX = 8103h Return: AX = 1954h Note: this is an extension to the VFOSSIL spec by Bob Hartman's VFOS_IBM ----------1482------------------------------- INT 14 - KEYBOARD FOSSIL AH = 82h SeeAlso: AH=7Eh ----------1482------------------------------- INT 14 - COURIERS.COM - CONFIGURE PORT AH = 82h AL = port number (1-4) BX = speed (bps) CX = bit flags bit 0: enable input flow control bit 1: enable output flow control bit 2: use X.PC protocol (not yet implemented) SeeAlso: AH=00h,AH=8Ch,INT 7A"X.PC" ----------1483------------------------------- INT 14 - SYSTEM FOSSIL AH = 83h SeeAlso: AH=7Eh ----------1483------------------------------- INT 14 - COURIERS.COM - START INPUT AH = 83h ES:BX -> circular input buffer CX = length of buffer (should be at least 128 bytes if input flow control enabled) SeeAlso: AH=18h,AH=87h,AH=8Dh,AH=A5h"BAPI" ----------1484------------------------------- INT 14 - COURIERS.COM - READ CHARACTER AH = 84h Return: ZF set if no characters available ZF clear AL = character AH = modem status bits bit 7: set on input buffer overflow SeeAlso: AH=02h,AH=86h,AH=89h ----------1485------------------------------- INT 14 - COURIERS.COM - FLUSH PENDING INPUT AH = 85h SeeAlso: AH=0Ah,AH=88h ----------1486------------------------------- INT 14 - COURIERS.COM - START OUTPUT AH = 86h ES:BX -> output buffer CX = length of output buffer SeeAlso: AH=19h,AH=83h"COURIERS",AH=A4h"BAPI" ----------1487------------------------------- INT 14 - COURIERS.COM - OUTPUT STATUS AH = 87h Return: AX = number of unsent characters ----------1488------------------------------- INT 14 - COURIERS.COM - ABORT OUTPUT AH = 88h SeeAlso: AH=09h,AH=85h ----------1489------------------------------- INT 14 - COURIERS.COM - SEND SINGLE CHARACTER AH = 89h CL = character to send SeeAlso: AH=01h,AH=84h ----------148A------------------------------- INT 14 - COURIERS.COM - SEND BREAK AH = 8Ah SeeAlso: AH=89h,AH=FAh ----------148C------------------------------- INT 14 - COURIERS.COM - SET SPEED AH = 8Ch BX = speed in bps SeeAlso: AH=00h,AH=82h"COURIERS" ----------148D------------------------------- INT 14 - COURIERS.COM - DECONFIGURE PORT AH = 8Dh SeeAlso: AH=82h"COURIERS" ----------14A0------------------------------- INT 14 - 3com BAPI SERIAL I/O - CONNECT TO PORT AH = A0h ??? Return: ??? SeeAlso: AH=A1h"BAPI" ----------14A0--CXFFFF----------------------- INT 14 - Interconnections Inc. TES - INSTALLATION CHECK/STATUS REPORT AH = A0h CX = FFFFh Return: CF clear if successful AX = 5445h ('TE') CX <> FFFFh DX = port number CF set on error Note: TES is a network serial port emulation program SeeAlso: AH=A1h"TES" ----------14A1------------------------------- INT 14 - 3com BAPI SERIAL I/O - DISCONNECT FROM PORT AH = A1h ??? Return: ??? SeeAlso: AH=A0h"BAPI" ----------14A1------------------------------- INT 14 - Interconnections Inc. TES - GET LIST OF SESSIONS WITH STATUS AH = A1h Return: CX = number of active sessions ES:SI -> status array (see below) SeeAlso: AH=A2h"TES",AH=A3h"TES" Format of status array entry: Offset Size Description 00h BYTE status 01h WORD offset of name ----------14A2------------------------------- INT 14 - Interconnections Inc. TES - GET LIST OF SERVER NAMES AH = A2h Return: CX = number of servers ES:SI -> array of offsets from ES for server names SeeAlso: AH=A1h"TES" ----------14A3------------------------------- INT 14 - Interconnections Inc. TES - START A NEW SESSION AH = A3h ES:SI -> ??? Return: CF clear if successful AX = 5445h ('TE') CX <> FFFFh DX = port number CF set on error SeeAlso: AH=A1h"TES",AH=A4h"TES",AH=A6h"TES" ----------14A4------------------------------- INT 14 - 3com BAPI SERIAL I/O - WRITE BLOCK AH = A4h CX = length DH = session number (00h) ES:BX -> buffer Return: CX = number of bytes sent SeeAlso: AH=19h,AH=86h,AH=A5h"BAPI" ----------14A4------------------------------- INT 14 - Interconnections Inc. TES - HOLD CURRENTLY ACTIVE SESSION AH = A4h ??? Return: ??? SeeAlso: AH=A3h"TES",AH=A5h"TES" ----------14A5------------------------------- INT 14 - 3com BAPI SERIAL I/O - READ BLOCK AH = A5h CX = length DH = session number (00h) ES:BX -> buffer Return: CX = number of bytes read SeeAlso: AH=18h,AH=83h"COURIERS",AH=A4h"BAPI",AX=FF02h ----------14A5------------------------------- INT 14 - Interconnections Inc. TES - RESUME A SESSION AH = A5h AL = session number Return: ??? SeeAlso: AH=A4h"TES",AH=A6h"TES" ----------14A6------------------------------- INT 14 - 3com BAPI SERIAL I/O - SEND SHORT BREAK AH = A6h DH = session number (00h) SeeAlso: AH=1Ah,AH=8Ah,AH=FAh ----------14A6------------------------------- INT 14 - Interconnections Inc. TES - DROP A SESSION AH = A6h AL = session number Return: AH = status 00h successful else error SeeAlso: AH=A3h"TES",AH=A5h"TES" ----------14A7------------------------------- INT 14 - 3com BAPI SERIAL I/O - READ STATUS AH = A7h ??? Return: ??? ----------14A7------------------------------- INT 14 - Interconnections Inc. TES - SWITCH TO NEXT ACTIVE SESSION AH = A7h ??? Return: ??? SeeAlso: AH=A3h"TES",AH=A5h"TES" ----------14A8------------------------------- INT 14 - Interconnections Inc. TES - SEND STRING TO COMMAND INTERPRETER AH = A8h AL = 00h no visible response ES:SI -> ASCIZ command Return: ??? ----------14AF00BXAAAA----------------------- INT 14 - 3com BAPI SERIAL I/O - INSTALLATION CHECK AX = AF00h BX = AAAAh Return: AX = AF01h if installed ----------14B0------------------------------- INT 14 - 3com BAPI SERIAL I/O - ENABLE/DISABLE "ENTER COMMAND MODE" CHARACTER AH = B0h AL = 00h disable = 01h enable ----------14B1------------------------------- INT 14 - 3com BAPI SERIAL I/O - ENTER COMMAND MODE AH = B1h ----------14F0F0----------------------------- INT 14 - ASAP v1.0 - ??? AX = F0F0h DX = ??? ??? Return: ??? Note: ASAP (Automatic Screen Access Program) is a shareware screen reader by MicroTalk SeeAlso: AX=F0F1h ----------14F0F1DX0000----------------------- INT 14 - ASAP v1.0 - INSTALLATION CHECK AX = F0F1h DX = 0000h Return: DX = segment of resident code = 0000h if not installed Note: ASAP (Automatic Screen Access Program) is a shareware screen reader by MicroTalk SeeAlso: AX=F0F0h,INT 10/AH=38h ----------14F4FF----------------------------- INT 14 - IBM/Yale EBIOS SERIAL I/O - INSTALLATION CHECK AX = F4FFh DX = port (00h-03h) Return: CF clear if present AX = 0000h CF set if not present AX <> 0000h ----------14F9------------------------------- INT 14 - IBM/Yale EBIOS SERIAL I/O - REGAIN CONTROL AH = F9h DX = port (00h-03h) ----------14FA------------------------------- INT 14 - IBM/Yale EBIOS SERIAL I/O - SEND BREAK AH = FAh DX = port (00h-03h) SeeAlso: AH=1Ah,AH=8Ah ----------14FB------------------------------- INT 14 - IBM/Yale EBIOS SERIAL I/O - SET OUTGOING MODEM SIGNALS AH = FBh AL = modem control register bit 0: data terminal ready 1: request to send 2: OUT1 3: OUT2 4: loopback bits 5-7 unused DX = port (00h-03h) ----------14FC------------------------------- INT 14 - IBM/Yale EBIOS SERIAL I/O - READ CHARACTER, NO WAIT AH = FCh DX = port (00h-03h) Return: AH = RS232 status bits (see AH=00h) AL = character SeeAlso: AH=02h,AH=0Ch,AX=FF02h ----------14FD02----------------------------- INT 14 - IBM/Yale EBIOS SERIAL I/O - READ STATUS AX = FD02h Return: CX = number of characters available ----------14FF02----------------------------- INT 14 - IBM/Yale EBIOS SERIAL I/O - BUFFERED READ AX = FF02h CX = length DX = port (00h-03h) ES:BX -> buffer Return: CX = number of characters read SeeAlso: AH=18h,AH=83h"COURIERS",AH=A5h"BAPI",AH=FCh --------------------------------------------- Interrupt List, part 2 of 7 This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown ----------15--------------------------------- INT 15 - Microsoft TSR Specification No additional information available at this time. ----------1500------------------------------- INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only) AH = 00h Return: CF set on error AH = 86h no cassette present CF clear if successful SeeAlso: AH=01h"CASSETTE" ----------1500------------------------------- INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS AH = 00h Return: CX = signed X count DX = signed Y count ----------1500------------------------------- INT 15 - VMiX v2+ - INSTALLATION CHECK??? AH = 00h Return: DX = 0798h??? ----------1500------------------------------- INT 15 - MultiDOS Plus - GIVE UP TIME SLICE AH = 00h Note: if issued by the highest-priority task while MultiDOS is using priority-based rather than round-robin scheduling, control will be returned to the caller immediately SeeAlso: AH=03h"MultiDOS",AX=1000h ----------1501------------------------------- INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only) AH = 01h Return: CF set on error AH = 86h no cassette present CF clear if successful SeeAlso: AH=00h"CASSETTE" ----------1501------------------------------- INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM AH = 01h AL = NVRAM location (00h to 3Fh) BL = NVRAM data value Return: AH = return code 00h OK 01h address bad 02h write error SeeAlso: AH=02h"Amstrad" Format of NVRAM: Offset Size Description 00h BYTE time of day: seconds 01h BYTE alarm time: seconds 02h BYTE time of day: minutes 03h BYTE alarm time: minutes 04h BYTE time of day: hours 05h BYTE alarm time: hours 06h BYTE day of week, 1 = Sunday 07h BYTE day of month 08h BYTE month 09h BYTE year mod 100 0Ah BYTE RTC status register A bit 7: set if date/time being updated 6-4: time base speed, default 010 = 32768 Hz 3-0: interrupt rate selection, default 0110 = 1024 Hz 0Bh BYTE RTC status register B bit 7: clear if normal update, set if abort update 6: periodic interrupt enable 5: alarm interrupt enable 4: update end interrupt enable 3: square wave enable 2: date mode (clear = BCD, set = binary) 1: 24-hour format 0: daylight saving time enable 0Ch BYTE RTC status register C (read-only) bit 7: IRQF flag 6: PF flag 5: AF flag 4: UF flag 0Dh BYTE RTC status register D bit 7: battery good 0Eh 6 BYTEs time and date machine last used 14h BYTE user RAM checksum 15h WORD Enter key scancode/ASCII code 17h WORD Forward delete key scancode/ASCII code 19h WORD Joystick fire button 1 scancode/ASCII code 1Bh WORD Joystick fire button 2 scancode/ASCII code 1Dh WORD mouse button 1 scancode/ASCII code 1Fh WORD mouse button 2 scancode/ASCII code 21h BYTE mouse X scaling factor 22h BYTE mouse Y scaling factor 23h BYTE initial VDU mode and drive count 24h BYTE initial VDU character attribute 25h BYTE size of RAM disk in 2K blocks 26h BYTE initial system UART setup byte 27h BYTE initial external UART setup byte 28h 24 BYTEs available for user application Note: bytes 00h-0Dh are the same on the IBM AT as they are used/updated by the clock chip ----------1501------------------------------- INT 15 - VMiX - I/O CHANNEL OBJECT MANAGER AH = 01h STACK: WORD object ID of requestor DWORD pointer to name of requested method WORD arg1 WORD arg2 WORD arg3 WORD arg4 Return: DX:AX??? -> IRP structure or 0000h:0000h ----------1501------------------------------- INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE AH = 01h AL = semaphore number (00h-3Fh) Return: AH = status 00h successful 02h invalid semaphore number Notes: if the semaphore is not owned, ownership is assigned to the calling task and the call returns immediately if the semaphore is already owned by another task, the calling task is placed on a queue for the semaphore and suspended until it can become owner of the semaphore semaphore 0 is used internally by MultiDOS to synchronize DOS access SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS" ----------1502------------------------------- INT 15 - CASSETTE - READ DATA AH = 02h CX = number of bytes to read ES:BX -> buffer Return: CF clear if successful DX = number of bytes read ES:BX -> byte following last byte read CF set on error AH = status 00h successful 01h CRC error 02h bad tape signals 04h no data 80h invalid command 86h no cassette present SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE" ----------1502------------------------------- INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM AH = 02h AL = NVRAM location (00h to 3Fh) Return: AH = return code 00h OK 01h address bad 02h checksum error AL = NVRAM data value SeeAlso: AH=01h"Amstrad" ----------1502------------------------------- INT 15 - VMiX - MEMORY OBJECT MANAGER AH = 02h STACK: WORD object ID of requestor DWORD pointer to name of requested method WORD arg1 WORD arg2 WORD arg3 WORD arg4 WORD arg5 Return: DX:AX??? = pointer to memory block ----------1502------------------------------- INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE AH = 02h AL = semaphore number (00h-3Fh) Return: AH = status 00h successful 01h not semaphore owner 02h invalid semaphore number Notes: if any tasks are waiting for the semaphore, the first task on the wait queue will become the new owner and be reawakened do not use within an interrupt handler SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS" ----------1503------------------------------- INT 15 - CASSETTE - WRITE DATA (PC and PCjr only) AH = 03h CX = number of bytes to write ES:BX -> data buffer Return: CF clear if successful ES:BX -> byte following last byte written CF set on error AH = status (see AH=02h"CASSETTE") CX = 0000h SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE" ----------1503------------------------------- INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER AH = 03h AL = value (I,R,G,B bits) SeeAlso: AH=04h"Amstrad" ----------1503------------------------------- INT 15 - VMiX - PROMPTED CONSOLE INPUT AH = 03h STACK: DWORD pointer to ASCII prompt WORD field outline character WORD length of input field DWORD address of pointer to input buffer WORD number of characters input Return: AX = length of input (input buffer is padded with blanks) ----------1503------------------------------- INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL AH = 03h DX = number of time slices to remain suspended Return: after specified interval has elapsed Note: when priority-based scheduling is in use, high-priority tasks should use this function to yield the processor SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS" ----------1504------------------------------- INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS) AH = 04h ES:DI -> results buffer length 20h for System Parameter Table DS = segment containing ABIOS RAM extensions (zero if none) Return: AH = 00h success: results at ES:DI CF set on failure SeeAlso: AH=05h"ABIOS",C1h Format of ABIOS System Parameter Table: Offset Size Description 00h DWORD FAR address of ABIOS Common Start Routine 04h DWORD FAR address of ABIOS Interrupt Routine 08h DWORD FAR address of ABIOS Time-out Routine 0Ch WORD number of bytes of stack required by this ABIOS implementation 0Eh 16 BYTEs reserved 1Eh WORD number of entries in initialization table ----------1504------------------------------- INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER AH = 04h AL = value (RDSEL1 and RDSEL0) SeeAlso: AH=03h"Amstrad",05h"Amstrad" ----------1504------------------------------- INT 15 - VMiX - VPRINTF AH = 04h STACK: DWORD control string DWORD array of arguments ----------1504------------------------------- INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK AH = 04h AL = mailbox number (00h-3Fh) CX = message length in bytes DS:SI -> message Return: AH = status 00h successful 01h out of message memory 02h invalid mailbox number Note: the message is copied into a system buffer; the caller may immediately reuse its buffer SeeAlso: AH=05h"MultiDOS" ----------1505------------------------------- INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS) AH = 05h ES:DI -> results buffer length (18h * Number_of_Entries) DS = segment containing ABIOS RAM extensions (zero if none) Return: AH = 00h success: results at ES:DI CF set on failure SeeAlso: AH=04h"ABIOS",C1h Format of one entry of ABIOS Initialization Table: Offset Size Description 00h WORD device ID 02h WORD number of Logical IDs 04h WORD Device Block length (zero for ABIOS patch or extension) 06h DWORD -> init routine for Device Block and Function Transfer Table 0Ah WORD request block length 0Ch WORD Function Transfer Table length (zero for a patch) 0Eh WORD Data Pointers length (in Common Data Area) 10h BYTE secondary device ID (hardware level this ABIOS ver supports) 11h BYTE revision (device driver revision level this ABIOS supports) 12h 6 BYTEs reserved ----------1505------------------------------- INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER AH = 05h AL = value (I,R,G,B bits) SeeAlso: AH=04h"Amstrad" ----------1505------------------------------- INT 15 - VMiX - GET PROCESS ID OF CURRENT PROCESS AH = 05h Return: AX = process ID SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX" ----------1505------------------------------- INT 15 - MultiDOS Plus - CHECK MAILBOX AH = 05h AL = mailbox number (00h-3Fh) Return: AH = status 00h successful DX = length of first message in queue, 0000h if no message 02h invalid mailbox number SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS" ----------1506------------------------------- INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER AH = 06h Return: BX = version number ----------1506------------------------------- INT 15 - VMiX - GET POINTER TO PROCESS CONTROL BLOCK AH = 06h STACK: WORD process ID Return: DX:AX??? -> process control block SeeAlso: AH=07h"VMiX",AH=08h"VMiX" ----------1506------------------------------- INT 15 - MultiDOS Plus - READ MAILBOX AH = 06h AL = mailbox number (00h-3Fh) CX = size of buffer in bytes ES:DI -> buffer for message Return: AH = status 00h successful CX = number of bytes copied DX = actual length of message 02h invalid mailbox number Note: if the caller's buffer is not large enough, the message is truncated and the remainder is lost SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS" ----------1507------------------------------- INT 15 - VMiX - GET POINTER TO OBJECT CONTROL BLOCK AH = 07h STACK: WORD object type Return: DX:AX??? -> object control block SeeAlso: AH=06h"VMiX",AH=08h"VMiX" ----------1507------------------------------- INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD) AH = 07h BX:CX = entry point of new task DX = stack size in paragraphs Return: AH = status 00h successful 01h no free task control blocks 02h no free memory for task's stack Note: execution returns immediately to calling task SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS" ----------1508------------------------------- INT 15 - VMiX - GET CHANNEL CONTROL BLOCK AH = 08h STACK: WORD channel ID Return: DX:AX??? -> channel control block SeeAlso: AH=06h"VMiX",AH=07h"VMiX" ----------1508------------------------------- INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD) AH = 08h Return: calling task terminated, so execution never returns to caller Notes: an internal task must be terminated with this function rather than a DOS termination function task's stack space is returned to parent task's memory pool SeeAlso: AH=07h"MultiDOS" ----------1509------------------------------- INT 15 - VMiX - GET ID OF QUEUED ELEMENT AH = 09h STACK: WORD queue ID (0 = process queue, 1 = object, 3 = type) WORD subqueue ID Return: AX = ID SeeAlso: AH=0Ah"VMiX" ----------1509------------------------------- INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY AH = 09h AL = new priority Note: the priority has different meanings depending on whether priority- based or round-robin scheduling is used SeeAlso: AH=07h"MultiDOS" ----------150A------------------------------- INT 15 - VMiX - GET ID OF NEXT QUEUED ELEMENT AH = 0Ah STACK: WORD queue ID (0 = process queue, 1 = object, 3 = type) WORD ID of current element in queue chain Return: AX = ID of next element SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX" ----------150A------------------------------- INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL AH = 0Ah AL = new interval 00h = 55.0 ms (default) 80h = 27.5 ms 40h = 13.75 ms 20h = 6.88 ms 10h = 3.44 ms 08h = 1.72 ms SeeAlso: AH=03h"MultiDOS" ----------150B------------------------------- INT 15 - VMiX - GET TOTAL NUMBER OF ACTIVE PROCESSES AH = 0Bh Return: AX = number of active processes SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX" ----------150B------------------------------- INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY AH = 0Bh Notes: sets calling task's screen pointer to actual screen memory; the pointer may be restored with AH=0Ch caller's video mode must be same as foreground task's video mode any text written while in the background will be saved to the foreground task's virtual screen when it switches to the background useful if a background task wants to display a message on the foreground screen SeeAlso: AH=0Ch"MultiDOS" ----------150C------------------------------- INT 15 - VMiX - GET POINTER TO PROCESS TSS STACK AH = 0Ch STACK: WORD process ID Return: DX:AX??? -> TSS stack store ----------150C------------------------------- INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY AH = 0Ch Note: restores task's screen pointer saved by AH=0Bh; must not be called unless AH=0Bh has been called first SeeAlso: AH=0Bh"MultiDOS" ----------150D------------------------------- INT 15 - VMiX - START A CHILD PROCESS JOB SHELL AH = 0Dh STACK: DWORD ASCIZ string starting with requested I/O channel and followed by standard VMiX shell command string Return: AX = status SeeAlso: AH=0Eh"VMIX" ----------150D------------------------------- INT 15 - MultiDOS Plus - DISABLE MULTITASKING AH = 0Dh Note: calling task receives all time slices until AH=0Eh is called; this allows time-critical events or nonreentrant code to be processed SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS" ----------150E------------------------------- INT 15 - VMiX - TERMINATE PROCESS AH = 0Eh STACK: WORD process ID Return: AX = status SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX" ----------150E------------------------------- INT 15 - MultiDOS Plus - ENABLE MULTITASKING AH = 0Eh SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS" ----------150F------------------------------- INT 15 - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only) AH = 0Fh AL = phase code 00h reserved 01h surface analysis 02h formatting Return: CF clear if formatting should continue, set if it should terminate Note: called during ESDI drive formatting after each cylinder is completed SeeAlso: INT 13/AH=1Ah ----------150F------------------------------- INT 15 - VMiX - GET KEY FIELD OF QUEUED ELEMENT AH = 0Fh STACK: WORD queue ID (0 = process queue, 1 = object q, 3 = type q) WORD ID of element in queue chain Return: AX = key SeeAlso: AH=0Ah"VMiX" ----------150F------------------------------- INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND AH = 0Fh DS:BX -> ASCIZ command Return: after command has been processed Notes: specified string is executed as if it had been typed at the MultiDOS command prompt the task is placed on a queue which MultiDOS examines periodically and is suspended until MultiDOS has processed the command all lowercase characters up to the first blank are converted to upper case within the given buffer ----------1510------------------------------- INT 15 - VMiX - EXECUTE FUNCTION IN PROTECTED MODE AH = 10h STACK: DWORD pointer to function N WORDs function args Return: ??? ----------1510------------------------------- INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE AH = 10h AL = semaphore number (00h-3Fh) Return: AH = status 00h semaphore not in use 01h semaphore owned by another task 02h invalid semaphore number 03h semaphore owned by caller SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS" ----------151000----------------------------- INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME AX = 1000h Return: after other processes run Note: under DESQview, if the process issuing this call has hooked INT 08h, the current time-slice is set to expire at the next clock tick rather than immediately SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=EEh"DoubleDOS",INT 2F/AX=1680h SeeAlso: INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah,INT 7F/AH=E8h ----------151001----------------------------- INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY AX = 1001h BX = number of bytes to allocate Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+) Note: use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient common memory SeeAlso: AX=1002h,AX=DE0Ch,AX=DE15h ----------151002----------------------------- INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY AX = 1002h ES:DI -> previously allocated block Return: block freed SeeAlso: AX=1001h,AX=DE0Dh ----------151003----------------------------- INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN AX = 1003h BH = attribute BL = character DX = segment of object handle for window Note: BX=0 does not display anything, it only positions the hardware cursor ----------1510------------------------------- INT 15 - TopView - UNIMPLEMENTED IN DV 2.x AH = 10h AL = 04h thru 12h Return: pops up "Programming error" window in DV 2.x ----------151013----------------------------- INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER AX = 1013h ES:DI -> FAR service routine Return: BX = bit mask indicating which bit was allocated 0000h if no more bits available SeeAlso: AX=1014h,AX=1015h Note: only a few TopView/DESQview API calls are allowed during a hardware interrupt; if other calls need to be made, the interrupt handler must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h) ----------151014----------------------------- INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER AX = 1014h BX = bit mask from INT 15/AX=1013h SeeAlso: AX=1013h,AX=1015h ----------151015----------------------------- INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS AX = 1015h BX = bit mask for interrupts to post Return: indicated routines will be called: (DV 2.0x) at next task switch (DV 2.2x) immediately SeeAlso: AX=1013h,AX=1014h Notes: this is one of the few TopView calls which are allowed from a hardware interrupt handler the handler will be called with ES containing the segment of the handle of the next task to be executed; on return, ES must be the segment of a task handle ----------151016----------------------------- INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE AX = 1016h ES:DI = possible object handle Return: BX = FFFFh if ES:DI is a valid object handle 0000h if ES:DI is not SeeAlso: AX=DE14h,AX=DE2Bh ----------151017----------------------------- INT 15 - TopView - UNIMPLEMENTED IN DV 2.x AX = 1017h Return: pops up "Programming error" window in DV 2.x ----------151018----------------------------- INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION AX = 1018h BH = column BL = row ES = segment of object handle for window below which to search 0000h = start search with topmost window Return: ES = segment of object handle for window which is visible at the indicated position, or covered by indicated window = 0000h no window SeeAlso: AX=1023h,AX=1024h ----------151019----------------------------- INT 15 - TopView - "SOUND" - MAKE TONE AX = 1019h BX = frequency in Hertz (0000h = silence) CX = duration in clock ticks (18.2 ticks/sec) Return: immediately, tone continues to completion Notes: if another tone is already playing, the new tone does not start until completion of the previous one. Up to 32 tones may be queued before the process is blocked until a note completes. in DV 2.00, the lowest tone allowed is 20 Hz if CX = 0, the current note is cancelled; if BX = 0 as well, all queued notes are also cancelled SeeAlso: INT 16/AH=73h ----------15101A----------------------------- INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK AX = 101Ah Return: stack switched Notes: this call may not be nested; a second call must be preceded by a call to "USTACK" (AX=1025h) while TopView requires many API calls to be executed while on the task's internal stack, DESQview allows those calls to be executed regardless of the current stack SeeAlso: AX=1025h ----------15101B----------------------------- INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION AX = 101Bh Return: task-switching temporarily disabled Notes: will not task-switch until "ENDC" (AX = 101Ch) called unless task voluntarily releases the CPU (upon regaining the CPU, task-switching will again be disabled) suspends the caller until DOS is free SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h SeeAlso: INT 60/DI=0602h ----------15101C----------------------------- INT 15 - TopView - "ENDC" - END CRITICAL REGION AX = 101Ch Return: task-switching enabled Note: this API call may be made from within a hardware interrupt handler SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h ----------15101D----------------------------- INT 15 - TopView - "STOP" - STOP TASK AX = 101Dh ES = segment of object handle for task to be stopped (== handle of main window for that task) Return: indicated task will not get any CPU time until restarted with AX=101Eh Note: once a task has been stopped, additional "STOP"s are ignored BUG: in DV 2.00, this function is ignored unless the indicated task is the current task SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX" ----------15101E----------------------------- INT 15 - TopView - "START" - START TASK AX = 101Eh ES = segment of object handle for task to be started (== handle of main window for that task) Return: indicated task is started up again Note: once a task has been started, additional "START"s are ignored SeeAlso: AX=101Dh,AX=102Bh ----------15101F----------------------------- INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW AX = 101Fh BX = bit fields bits 0-12: number of characters to display bits 13,14: which mouse button may be pressed to remove window 00 = either 01 = left 10 = right 11 = either bit 15: beep if 1 ES:DI -> text of message CH = width of error window (0 = default) CL = height of error window (0 = default) DX = segment of object handle Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed Note: window remains on-screen until ESC or indicated mouse button is pressed ----------151020----------------------------- INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+ AX = 1020h Return: pops up "Programming error" window in DV v2.00+ ----------151021----------------------------- INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK AX = 1021h BX = segment of object handle for task to interrupt (not self) DX:CX -> FAR routine to jump to next time task is run Return: nothing Notes: the FAR routine is entered with the current ES, DS, SI, DI, and BP values, using the task's internal stack (see AX=101Ah); only SS:SP needs to be preserved multiple PGMINTs to a single task are processed last-in first-out if the other task is in a DOS or DV API call, the interruption will occur on return from that call ----------151022BX0000----------------------- INT 15 - TopView - "GETVER" - GET VERSION AX = 1022h BX = 0000h Return: BX nonzero, TopView or compatible loaded (BL = major version, BH = minor version) Notes: TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h ----------151023----------------------------- INT 15 - TopView - "POSWIN" - POSITION WINDOW AX = 1023h BX = segment of object handle for parent window within which to position the window (0 = full screen) ES = segment of object handle for window to be positioned DL = bit flags bits 0,1: horizontal position 00 = current 01 = center 10 = left 11 = right bits 2,3: vertical position 00 = current 01 = center 10 = top 11 = bottom bit 4: don't redraw screen if set bits 5-7 not used CH = number of columns to offset from position specified by DL CL = number of rows to offset from position specified by DL Return: nothing ----------151024----------------------------- INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO AX = 1024h BX = segment of object handle for window (0 = use default) Return: ES:DI -> virtual screen CX = size of virtual screen in bytes DL = 00h text screen 01h graphics screen SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h ----------151025----------------------------- INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK AX = 1025h Return: stack switched back Notes: call only after having switched to internal stack with AX=101Ah while TopView requires many API calls to be executed while on the task's private stack, DESQview allows those calls to be executed regardless of the current stack SeeAlso: AX=101Ah ----------1510------------------------------- INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x AH = 10h AL = 26h thru 2Ah Return: pops up "Programming error" window in DV 2.x ----------15102B----------------------------- INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK AX = 102Bh BX = segment of object handle for task Return: nothing Note: forces a task which is waiting on its objectq to continue by placing the handle for the task on the objectq SeeAlso: AX=101Dh,AX=101Eh ----------15102C----------------------------- INT 15 - DESQview v2.00+ (TopView???) - START NEW APPLICATION IN NEW PROCESS AX = 102Ch ES:DI -> contents of .PIF/.DVP file (see below) BX = size of .PIF/.DVP info Return: BX = segment of object handle for new task 0000h on error Format of .PIF/.DVP file: Offset Size Description 00h BYTE reserved (0) 01h BYTE checksum of bytes 02h through 170h 02h 30 BYTEs blank-padded program title 20h WORD maximum memory to allocate to partition in K 22h WORD minimum memory required in K 24h 64 BYTEs ASCIZ program pathname 64h BYTE default drive letter ('A',...) 65h 64 BYTEs ASCIZ default directory name A5h 64 BYTEs ASCIZ program parameters E5h BYTE initial screen mode (0-7) (see also offset 189h) E6h BYTE number of text pages used E7h BYTE number of first interrupt to save E8h BYTE number of last interrupt to save E9h BYTE rows in virtual screen buffer EAh BYTE columns in virtual screen buffer EBh BYTE initial window position, row ECh BYTE initial window position, column EDh WORD system memory in K EFh 64 BYTEs ASCIZ shared program name 12Fh 64 BYTEs ASCIZ shared program data file 16Fh BYTE flags1 bit 7: writes text directly to screen bit 6: runs in foreground only bit 5: uses math coprocessor bit 4: accesses system keyboard buffer directly bits 3-1: reserved (0) bit 0: swappable 170h BYTE flags2 bit 6: uses command-line parameters in field at A5h bit 5: swaps interrupt vectors ---information unique to .DVP files--- 171h 2 BYTEs keys to use on open menu 173h WORD size of script buffer in bytes 175h WORD automatically give up CPU after this many tests for keyboard input in one clock tick (default 0 = never) 177h BYTE nonzero = "uses own colors" 178h BYTE nonzero if application swappable 179h 3 BYTEs reserved (0) according to Quarterdeck documentation in actual .DVP files, frequently 01h 17Ch BYTE nonzero to automatically close on exit 17Dh BYTE nonzero if copy-protect floppy is required ---information unique to DESQview 2.0+--- 17Eh BYTE .DVP version number 00h DESQview v1.2+ 01h DESQview v2.0+ 02h DESQview v2.2+ 17Fh BYTE reserved (0) 180h BYTE initial number of rows in physical window 181h BYTE initial number of columns in physical window 182h WORD maximum expanded memory to allow, in K 184h BYTE flags3 bit 7: automatically assign window position bit 5: maximum memory value has been specified bit 4: disallow "Close" command bit 3: foreground-only when doing graphics bit 2: don't virtualize bit 1: ??? set by DV 2.31 when "Runs in Background" = "D" 185h BYTE keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+) 186h BYTE number of graphics pages used 187h WORD extra system memory size 189h BYTE initial screen mode (FFh = default) (overrides offset E5h) ---information unique to DESQview 2.2+--- 18Ah BYTE serial port usage FFh uses all serial ports 00h no serial ports 01h only COM1 02h only COM2 18Bh BYTE flags4 bit 7: automatically close application on exit if .COM or .EXE specified bit 6: swappable if not using serial ports bit 5: start program with window hidden (v2.26+) bit 4: start program in background (v2.26+) bit 3: virtualize text bit 2: virtualize graphics bit 1: share CPU when foreground bit 0: share EGA when foreground and zoomed 18Ch BYTE protection level for 386 machines 18Dh 19 BYTEs reserved (0) for regular DESQview ---information unique to DESQview/X 1.0--- 18Dh BYTE flags5 bit 0: unused (0) bit 1: don't display DOS window bit 2: don't wait for windows to open bits 3-7: unused (0) 18Eh BYTE X keyboard behavior (0-3) 18Fh BYTE 01h = uses scalable fonts 190h 10 BYTEs unused (0) 19Ah WORD??? sum of all record size fields in records starting at 1A0h 19Ch 4 BYTEs signature "XDVP" 1A0h N BYTEs variable length records Offset Size Description 00h BYTE length of following record, 00h if end of file 01h BYTE always 0??? (or length may be WORD) 02h BYTE record type 01h Script filename, up to 64 characters 05h Starting... values: ASCII copy of fields as typed into DVPMAN, separated by commas: starting row, starting column, starting height, starting width 03h N BYTEs ASCII data ----------15102D----------------------------- INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL AX = 102Dh BL = subfunction 00h determine whether using keyboard mouse Return: BL = 00h using real mouse 01h using keyboard mouse 01h turn keyboard mouse on 02h turn keyboard mouse off ----------15102E----------------------------- INT 15 - DESQview v2.40 - ALLOCATE ??? MEMORY AX = 102Eh BX = number of bytes Return: AX = status 0000h successful ES = segment of allocated memory 0001h failed ----------1511------------------------------- INT 15 - TopView commands AH = 11h AL = various (except 17h) Note: in DESQview 2.x, these function calls are identical to AH=DEh, so see those below SeeAlso: AH=DEh ----------1511------------------------------- INT 15 - VMiX - EXECUTE SHELL SYSTEM COMMANDS AH = 11h STACK: DWORD pointer to ASCIZ string containing a VMiX shell request (max len = 127) Return: AX = status ----------1511------------------------------- INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE AH = 11h Note: disables the Alt-Z MultiDOS command/program-selection hotkey SeeAlso: AH=12h"MultiDOS" ----------151117BX0000----------------------- INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT AX = 1117h BX = 0000h get current mapping context without setting nonzero set new mapping context Return: BX = mapping context in effect before call interrupts enabled Notes: this function differs from AX = DE17h for DESQview v2.20 through 2.25 mapping contexts determine conventional-memory addressability; setting a mapping context ensures that the associated program and data areas are in memory for access. Usable by drivers, TSRs and shared programs. caller need not be running under DESQview, but must ensure that the stack in use will not be mapped out by the call SeeAlso: AX=DE17h,INT 2F/AX=1685h ----------1511DE----------------------------- INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK AX = 11DEh Return: CF clear if installed AX = segment at which QEXT.SYS is located Note: a private entry point may be found by searching the beginning of the returned segment for the signature string "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately prior to the signature contains the QEXT version number in BCD, and the word prior to that contains the offset within the QEXT code segment of the private entry point SeeAlso: INT 67/AH=3Fh Call private entry point with: AH = 00h ??? AH = nonzero ??? ----------1512------------------------------- INT 15 - VMiX - PUT PROCESS TO SLEEP AH = 12h STACK: WORD process ID Return: AX = status SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX" ----------1512------------------------------- INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE AH = 12h Note: enables the Alt-Z MultiDOS command/program-selection hotkey SeeAlso: AH=11h"MultiDOS" ----------1512--BH00------------------------- INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE AH = 12h BH = 00h BL = which handle to return 00h handle in DWORD on top of stack 01h current task's window handle 02h given task's mailbox handle (task's handle on stack) 03h current task's mailbox handle 04h given task's keyboard handle (task's handle on stack) 05h current task's keyboard object handle 06h given task's OBJECTQ handle (task's handle on stack) 07h current task's OBJECTQ handle 08h \ thru > return 0000:0000 under DV < 2.26 10h / 0Ch (2.26+) task owning object with handle in DWORD on top of stack 0Dh (2.26+) task handle of owner (parent) of current task Return: DWORD on top of stack is object handle Note: BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard, mailbox, panel, pointer, and timer objects) or is an orphan (task, window) ----------1512--BH01------------------------- INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT AH = 12h BH = 01h BL = object type to create 00h (DV 2.0x only) handle is DWORD on top of stack 01h (DV 2.0x only) use task's window handle 02h (DV 2.0x only) given task's mailbox (task's handle on stack) 03h (DV 2.0x only) current task's mailbox 04h (DV 2.0x only) given task's keyboard (task's handle on stack) 05h (DV 2.0x only) current task's keyboard object 08h WINDOW class 09h MAILBOX class 0Ah KEYBOARD class 0Bh TIMER object (counts down 32-bit time in 10ms increments) 0Fh POINTER object 10h PANEL object STACK: (if window object or WINDOW class) DWORD address to jump to (no new task if high word == 0) DWORD (reserved) 0 = non-task window, FFFFh = task window DWORD bytes for task's private stack (FFFFh == default of 0100h) DWORD bytes system memory for input buffer for READ/READN (0 == none, -1 == default--same as logical window size) DWORD window size, columns DWORD window size, rows DWORD length of window title DWORD address of window title Return: DWORD on top of stack is new object handle Notes: if a new task is created, it is started with AX = BX = SI = DI = BP = 0 DX:CX = handle of parent task DS = ES = SS = segment of private stack (and new task's handle) new windows are orphans, inherit the colors/hidden status of the creating task's window, and are placed in the upper left hand corner of the screen but not automatically redrawn new keyboards are closed, and have all object bits cleared except for the hardware cursor bit SeeAlso: AH=12h/BH=02h ----------1512--BH02------------------------- INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT AH = 12h BH = 02h BL = object 00h handle in DWORD on top of stack window: close window and free timer: free timer panel: free panel object pointer: free pointer 01h task's window handle - kills task, never returns 02h given task's mailbox (task's handle on top of stack) 03h current task's mailbox 04h given task's keyboard (task's handle on top of stack) 05h current task's keyboard object Notes: when a window is freed, its keyboard and pointer objects are freed; task windows also free any mailbox, objectq, and panel objects held by the task and any child tasks if the keyboard being freed is the default keyboard for a task, this call is equivalent to CLOSE panel and pointer objects are automatically closed if open SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh ----------1512--BH03------------------------- INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER AH = 12h BH = 03h BL = object 00h mailbox handle in DWORD on top of stack 02h sender of last msg read from mailbox (task's handle on stack) 03h sender of last msg read from current task's mailbox Return: DWORD on stack is task handle of message sender SeeAlso: AH=12h/BH=00h ----------1512--BH03------------------------- INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS AH = 12h BH = 03h BL = window to be connected 00h handle of window to be attached in DWORD on top of stack 01h attach current task's main window STACK: DWORD handle of window to attach to or 00000000h to detach Return: ??? Notes: when two windows are connected, both will move if the user moves either multiple windows may be attached to a single window, but each window may only be attached to one window at a time ----------1512--BX0300----------------------- INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY AH = 12h BX = 0300h STACK: DWORD handle of panel object Return: STACK: DWORD length of directory (always multiple of 14 bytes) DWORD address of directory Note: a null string is returned if the object is not open Format of panel file: Offset Size Description 00h 2 BYTEs C0h C3h 02h BYTE number of panels in file 03h for each panel in file: 8 BYTEs blank-padded panel name DWORD panel offset in file WORD panel length data for panels (each consists of one or more window/query/manager streams) first byte of each panel must be 1Bh, fifth byte must be E5h ----------1512--BH04------------------------- INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW AH = 12h BH = 04h BL = window to read from 00h handle is DWORD on top of stack 01h use calling task's default window 0Ch (DV 2.26+) default window of task owning handle on top of stack 0Dh (DV 2.26+) default window of parent task of current task Return: STACK: DWORD number of bytes read DWORD address of buffer Notes: reading starts at the current logical cursor position; the cursor is updated to point at the character following the last one read any translucent blanks (FFh) which are visible on screen are changed to the character which is seen through them the string produced by the read is placed in an input buffer which may be reused by the next READ or READN of a window window stream opcodes D8h and D9h determine whether the read returns characters or attributes SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h ----------1512--BH04------------------------- INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT AH = 12h BH = 04h BL = object 00h handle is DWORD on top of stack mailbox: wait for and get next message keyboard: wait for and get pointer to next input buffer pointer: wait for and get next message 02h get next message from mailbox (task's handle on top of stack) 03h get next message from current task's mailbox 04h get the next input from keyboard (handle on top of stack) 05h get the next input from task's default keyboard 06h wait for input from any object in OBJECTQ (handle on stack) 07h wait for input from any object in task's default OBJECTQ Return: STACK: (if objectq) DWORD handle of object with input (otherwise) DWORD number of bytes DWORD address Notes: for a keyboard in keystroke mode, the input buffer is a single byte containing the character code as returned by the BIOS; the BIOS scan code is available via the STATUS call if the character is zero for a keyboard in field mode, the input buffer format is determined by the field table header for the window the keyboard is attached to keyboard input buffers and mailbox message buffers may be invalidated by the next READ, ERASE, CLOSE, or FREE message to the same object SeeAlso: AH=12h/BH=05h"OBJECT" Format of pointer message: Offset Size Description 00h WORD row 02h WORD column 04h BYTE status bit 6: set when press/release mode active and button released bits 7-2: number of clicks-1 if multiple-click mode active bits 1,0: button pressed (00=none,01=button1,10=button2) 05h BYTE field number or zero (APILEVEL >= 2.00 only) ----------1512--BX0400----------------------- INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE AH = 12h BX = 0400h STACK: DWORD timer's handle Return: after timer expires STACK: DWORD time in 1/100 sec after midnight when timer expired ----------1512--BX0400----------------------- INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW AH = 12h BX = 0400h STACK: DWORD handle of panel object DWORD window's handle (or 0 for current task's window) DWORD length of panel name DWORD pointer to panel name Return: STACK: DWORD handle of keyboard or 0 DWORD handle of window which was used Notes: status of APPLY may be checked with STATUS message panel MUST have the following format first byte must be 1Bh (i.e. must start with a stream) first opcode in stream must be E5h single byte arg of opcode is interpreted thus: bits 7,6 11 means create new window 10 means create new field table for existing window 01 means use existing window and field table bit 5 if set, panel contains a field table (creates a new keyboard and puts it in field mode) bit 4 if set, panel contains input fields bit 3 if set, panel contains select fields but no input fields if the panel contains input or select fields, a keyboard handle is returned; either the window's current open keyboard or a newly-created keyboard object. The caller should read that keyboard to obtain input from the panel. ----------1512--BH05------------------------ INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT AH = 12h BH = 05h BL = object 00h handle is DWORD on top of stack timer: start timer to end at a specified time keyboard: add input buffer to queue pointer: move pointer icon to specified position 02h send message by value/status=0 to mbox (task's handle on stack) 03h send message by value/status=0 to current task's mailbox 04h add input buffer to KEYBOARD queue (handle on top of stack) 05h add input buffer to task's default KEYBOARD queue 06h add an object to OBJECTQ (handle on top of stack) 07h add an object to task's default OBJECTQ STACK: (if mailbox) DWORD length DWORD address (if keyboard) DWORD status (scan code in keystroke mode) DWORD length (should be 1 in keystroke mode) DWORD address (if objectq) DWORD handle of object to add (if timer) DWORD 1/100ths seconds since midnight (actually only accurate to 1/18 sec) (if pointer) DWORD column relative to origin of window DWORD row relative to origin of window Notes: under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h) the data and status written to a keyboard object must match the format returned by the keyboard object in the current mode the pointer position is scaled according to the current scaling factors SeeAlso: AH=12h/BH=04h ----------1512--BH05------------------------- INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW AH = 12h BH = 05h BL = window to write to 00h DWORD on top of stack is window handle 01h write string to task's default window 0Ch (DV 2.26+) default window of task owning handle on top of stack 0Dh (DV 2.26+) default window of parent of current task STACK: DWORD object handle if handle passed on stack DWORD total length of string (high word == 0) DWORD address of string to display Return: indicated actions performed a. non-control characters are displayed (opcodes DEh and DFh control whether the attributes are left or changed to the current attrib) b. CR/LF/BS/Tab cause the usual cursor movement c. ESC starts a data structure with additional commands if following byte is less than 20h; otherwise, it is written to the window STACK: DWORD handle of new window if window stream opcode E6h else nothing Data Structure: MAGIC DB 1Bh MODE DB ? ; 00h, 01h, 10h, 14h-1Fh legal LENGTH DW ? ; length of remainder in bytes var-length fields follow, each an OPCODE followed by zero or more args MODE 00h (set or display values) "WINDOW STREAM" Opcodes:args 00h display 20h blanks with the default attribute 01h-1Fh display OPCODE blanks with the default attribute 20h display char with default attribute 20h times BYTE char to repeat 21h-3Fh display char with default attribute OPCODE-20h times BYTE char to repeat 40h display 20h blanks with specified attribute BYTE attribute of blanks 41h-5Fh display OPCODE-40h blanks with specified attribute BYTE attribute of blanks 60h display next 20h characters 20h BYTEs characters to display 61h-7Fh display next OPCODE-60h characters N BYTEs characters to display 80h-87h display N blanks with default attribute BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE) [000h means 800h] 88h-8Fh display N copies of the character BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE) [000h means 800h] BYTE character to repeat 90h-97h display N blanks with specified attribute BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE) [000h means 800h] BYTE attribute 98h-9FH display string at logical cursor pos BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE) [000h means 800h] N BYTEs string to display A0h set logical cursor row BYTE row number (0 is top) A1h set logical cursor column BYTE column number (0 is leftmost) A2h set top edge of scrolling region BYTE row A3h set left edge of scrolling region BYTE column A4h set row of physical window position BYTE line A5h set column of physical window position BYTE column A6h set height of physical window BYTE #rows A7h set width of physical window BYTE #columns A8h set viewport row BYTE row A9h set viewport column BYTE column AAh set virtual screen height [contents of window unpredictable after] BYTE rows ABh set virtual screen width [contents of window unpredictable after] BYTE columns ACh-AEh unused AFh set compatible/preferred video modes BYTE compatibility/preference mask bit 7 compatible with monochrome bit 6 compatible with color text, EGA/VGA graphics bit 5 compatible with medium-resolution CGA graphics bit 4 compatible with high-resolution CGA graphics bit 3 prefer monochrome bit 2 prefer color text, EGA/VGA graphics bit 1 prefer medium-resolution CGA graphics bit 0 prefer high-resolution CGA graphics B0h move logical cursor down BYTE #rows (signed, negative values move up) [if #rows=0 and hardware cursor owner, update hw crsr] B1h move logical cursor right BYTE #cols (signed, negative values move left) [if #cols=0 and hardware cursor owner, update hw crsr] B2h shift top edge of scrolling region BYTE #rows (signed) B3h shift left edge of scrolling region BYTE #cols (signed) B4h shift physical window down BYTE #lines (signed) B5h shift physical window right BYTE #columns (signed) B6h expand physical window vertically BYTE #lines (signed) B7h expand physical window horizontally BYTE #columns (signed) B8h adjust viewport row BYTE #rows (signed) B9h adjust viewport column BYTE #columns (signed) BAh adjust virtual screen height [contents of window unpredict after] BYTE #rows to increase (signed) BBh adjust virtual screen width [contents of window unpredictbl after] BYTE #cols to increase (signed) BCh-BFh reserved (currently unused) C0h set logical cursor position BYTE row number (0 is top border) BYTE column number (0 is left border) C1h set top left corner of scrolling region BYTE row BYTE column C2h set physical window pos BYTE upper left row (no top border if 0) BYTE upper left column (no left border if 0) C3h set current window size BYTE #rows BYTE #cols C4h set upper left corner of viewport (portion of virtual screen displayed in window) BYTE row BYTE column C5h set size of virtual screen [contents unpredictable afterwards] BYTE #rows BYTE #cols C6h unused C7h unused C8h set logical cursor relative to current position BYTE number of rows to move down (signed) BYTE number of columns to move right (signed) [if #rows=#cols=0 and hardware cursor owner, update hw cursr] C9h shift top left corner of scrolling region BYTE #rows (signed) BYTE #cols (signed) CAh set window pos relative to current position BYTE number of rows to shift down (signed) BYTE number of columns to shift right (signed) CBh set window size relative to current size BYTE number of rows to expand (signed) BYTE number of cols to expand (signed) CCh shift viewport relative to current position BYTE rows to shift (signed) BYTE cols to shift (signed) CDh resize virtual screen BYTE #rows to expand (signed) BYTE #cols to expand (signed) CEh scroll text when using E8h-EBh/F8h-FBh opcodes (default) CFh scroll attributes when using E8h-EBh/F8h-FBh opcodes D0h allow window frame to extend beyond screen D1h always display a complete frame, even if window extends beyond edge of screen D2h allow DV to change logical colors on video mode switch (default) D3h application changes logical attributes D4h window is visible [must redraw to actually make visible] D5h window is hidden [must redraw to actually remove] D6h window has frame (default) D7h window unframed [must redraw to actually remove frame] D8h READ/READN will read characters from window (default) D9h READ/READN will read attributes from window DAh use logical attributes, which may be remapped attributes 1 normal text 2 highlighted normal text 3 help text 4 highlighted help text 5 error message 6 highlighted error message 7 emphasized text 8 marked text 9-16 are reverse video versions of 1-8 DBh use physical attributes for characters DCh enable special actions for control characters (default) DDh disable special control char handling, all chars displayable by BIOS TTY call DEh write both character and attribute (default) DFh write character only, leave attribute untouched E0h repeat following commands through E1h opcode BYTE number of times to repeat (00h means 256 times) E1h end of commands to repeat, start repeating them E2h set current output color BYTE color E3h clear virtual screen from scroll origin to end using current color E4h redraw window E5h select menu style BYTE style (normally 18h) bits 5,4 = 01 use two-letter menu entries for remainder of this stream E5h (panel file only) BYTE modifier bits 7,6 = 11 panel stream creates new window = 10 panel defines new field table for existing window = 01 panel stream uses existing window & field table bit 5 = 1 stream contains a field table (create kyboard object) bit 4 = 1 stream defines input fields (create keyboard object) bit 3 = 1 stream defines select fields but not input fields bit 2 = 1 stream defines exclusive input window (DV 2.2) bit 1 reserved bit 0 reserved E6h create new window and perform rest of manipulations in new window BYTE number of rows BYTE number of columns Return: DWORD object handle of new window returned on stack at end E7h no operation E8h scroll area up (top left corner defined by opcode C1h) BYTE height BYTE width E9h scroll area down (top left corner defined by opcode C1h) BYTE height BYTE width EAh scroll area left (top left corner defined by opcode C1h) BYTE height BYTE width EBh scroll area right (top left corner defined by opcode C1h) BYTE height BYTE width ECh set logical attributes for window contents BYTE video modes command applies to bit 7 monochrome bit 6 color text, EGA/VGA graphics bit 5 medium-resolution CGA graphics bit 4 high-resolution CGA graphics BYTE which attributes to set bit 7 if set, copy single following byte to indicated attribs bits 4-6 # of first attribute to change - 1 bits 0-3 # of consecutive attributes to change N BYTEs new attributes EDh set logical attributes for window frame BYTE video modes command applies to (see opcode ECh) BYTE which attributes to set bit 7 if set, copy single following byte to indicated attrs bits 4-6 # of first attribute to change - 1 bits 0-3 # of consecutive attributes to change N BYTEs new attributes attributes 1 = top left corner 2 = top right corner 3 = bottom left corner 4 = bottom right corner 5 = top edge 6 = bottom edge 7 = left edge 8 = right edge EEh set characters for window frame BYTE video modes command applies to (see opcode ECh) BYTE which characters to set bit 7 if set, copy single following byte to indicated chars bits 4-6 # of first char to change - 1 bits 0-3 # of consecutive chars to change N BYTEs new chars (same relative position as attributes above) EFh set window name BYTE length of name (should be in range 0 to logical screen width) N BYTEs name F0h clear input field to blanks BYTE field number F1h fill input field with character BYTE field number BYTE char F2h set color of input field BYTE field number (1-N) BYTE attribute F3h set initial contents of input field BYTE field number (1-N) N BYTEs enough chars to exactly fill field as defined by op FFh F4h position cursor to start of specific input field BYTE field number (1-N) F5h change field table entry BYTE field number 7-8 BYTEs field table entry (see opcode FFh below) F6h set field type BYTE field number BYTE type 00h inactive 40h output field 80h input field C0h deselected field C2h selected field F7h "broadcast write" write data to fields with program output bit set in field table entry, in field number order N BYTEs (total length of all program output fields) F8h scroll field up a line BYTE field number F9h scroll field down a line BYTE field number FAh scroll field left BYTE field number FBh scroll field right BYTE field number FCh set field table header BYTE number of fields (must be <= existing number of fields) BYTE screen behavior bits bit 7 reserved bit 6 set if menu items may be selected via keyboard bit 5 set if left mouse button may terminate entry bit 4 set if right mouse button may terminate entry bit 3 if set, select fields return contents or blanks rather than 'Y' or 'N' bit 2 if set, modified bits reset on return to application bits 0,1 = 00 no data returned on read of keyboard 01 data returned as array of chars containing all fields packed together, with no field numbers 10 data returned as numbered variable-length records for all fields 11 data returned as numbered variable-length records for the fields which were modified BYTE current input field (updated by DESQview) BYTE current select field (updated by DESQview) BYTE attribute for select fields when they are pointed at BYTE attribute for select fields which have been selected FDh reset modified bit for all fields FEh reset selected and modified bits for all fields FFh set up input fields 6 BYTEs table header (see opcode FCh above) the field table entries, one for each field BYTE start row \ BYTE start column \ if menu selection and start is to BYTE end row / right or below end, select from kbd only BYTE end column / BYTE field type bits 7,6 = 00 inactive (non-entry) field 01 echos keystrokes input to make menu selection 10 fill-in field 11 select field bit 5 field can be filled by broadcast write (F7h opcode) bit 4 reserved bit 3 reserved bit 2 reserved bit 1 set if field selected bit 0 set if field modified BYTE modifier if type is fill-in, then bit flags to determine behavior bit 7 if set, automatically enter CR when field full bit 6 move to next field when current field is full bit 5 if set, enter text from right end (for numbers) bit 4 if set, force input to uppercase bit 3 if set, clear old contents on first keystroke bit 2 if set, input returned when cursor moves out of modified field (API level 2.02+) bit 1 reserved bit 0 reserved if select field, first key to press to activate 00h if have to point-&-click or is an extended-ASCII keystroke (only if two-key menus enabled) BYTE (select field only) normal color of field BYTE second key for select field. This byte is present iff two-letter menu entries selected with opcode E5h, and in that case is present regardless of field type Note: DESQview uses and updates the actual copy of the information which is contained in the stream. Thus this info must remain intact until after the data entry is complete. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here) A0h return logical cursor row in next byte A1h return logical cursor column in next byte A2h return top row of scrolling region in next byte A3h return left column of scrolling region in next byte A4h return row of physical window origin in next byte A5h return column of physical window origin in next byte A6h return height of physcial window in next byte A7h return width of physical window in next byte A8h return row of viewport origin in next byte A9h return column of viewport origin in next byte AAh return height of virtual screen in next byte ABh return width of virtual screen in next byte AFh return current video mode in next byte C0h return current logical cursor position in next two bytes C1h return top left corner of scrolling region in next two bytes C2h return current window position in next two bytes C3h return current window size in next two bytes C4h return current viewport origin in next two bytes C5h return current virtual screen size in next two bytes D0h \ overwritten with D0h if frames may fall off screen edge D1h / D1h if frames always displayed entirely D2h \ overwritten with D2h if DESQview controls color palette D3h / D3h if application changes color palette D4h \ overwritten with D4h if window visible D5h / D5h if window hidden D6h \ overwritten with D6h if window has frame D7h / D7h if window unframed D8h \ overwritten with D8h if reading characters from window D9h / D9h if reading attributes from window DAh \ overwritten with DAh if using logical attributes DBh / DBh if using physical attributes DCh \ overwritten with DCh if TTY control char interpretation on DDh / DDh if TTY control char interpretation off DEh \ overwritten with DEh if writing both characters and attributes DFh / DFh if leaving attributes untouched E2h return current color in next byte ECh get logical attributes for window contents BYTE execute call if currently in specified video mode bit 7 monochrome bit 6 color text, EGA/VGA graphics bit 5 medium-resolution CGA graphics bit 4 high-resolution CGA graphics BYTE which attributes to get bit 7 unused??? bits 4-6 first attribute to get - 1 bits 0-3 # consecutive attributes N BYTEs buffer to hold attributes EDh get logical attributes for window frame BYTE execute call if currently in video mode (see opcode ECh) BYTE which attributes to get bit 7 unused??? bits 4-6 first attribute to get - 1 bits 0-3 # consecutive attributes N BYTEs buffer to hold attributes EEh get characters for window frame BYTE execute call if currently in video mode (see opcode ECh) BYTE which attributes to get bit 7 unused??? bits 4-6 first char to get - 1 bits 0-3 # consecutive chars N BYTEs buffer to hold chars EFh return first N characters of current window name BYTE max length of returned name N BYTEs buffer to hold window name F3h return contents of specified field BYTE field number N BYTEs buffer to hold field contents (size exactly equal to field size) F5h get field table entry BYTE field number 7-8 BYTEs buffer to hold field table entry Notes: DV < 2.26 always returns 7 bytes DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field table is using 8-byte entries and eighth byte after F5h is E7h (NOP); otherwise, 7 bytes are returned DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes depending on the field table entry size F6h get type of a field BYTE field number BYTE type FCh get field table header 6 BYTEs buffer to store header MODE 10h "MANAGER STREAM" (valid only for opcodes listed here) 00h allow window to be moved horizontally 01h allow window to be moved vertically 02h allow window to change width 03h allow window to change height 04h allow window to be scrolled horizontally 05h allow window to be scrolled vertically 06h allow "Close Window" menu selection for application 07h allow "Hide Window" menu selection for application 08h allow application to be suspended ("Rearrange/Freeze") 0Eh allow "Scissors" menu 10h allow DESQview main menu to be popped up 11h allow "Switch Windows" menu 12h allow "Open Window" menu 13h allow "Quit" menu selection 20h-33h opposite of 00h-13h, disallow specified action 40h notify if horizontal position of window changes 41h notify if vertical position of window changes 42h notify if width of window changes 43h notify if height of window changes 44h notify if window scrolled horizontally 45h notify if window scrolled vertically 46h notify if window is closed--program has to clean up and exit itself 47h notify if window is hidden 48h notify if "?" on main menu selected 49h notify if pointer message sent to window 4Ah notify if window is placed in foreground 4Bh notify if window is placed in background 4Ch notify if video mode changes 4Dh notify if "Scissors" menu "Cut" option selected 4Eh notify if "Scissors" menu "Copy" option selected 4Fh notify if "Scissors" menu "Paste" option selected 50h notify if DESQview main menu about to pop up 51h notify if DESQview main menu popped down 60h-71h opposite of 40h-51h: don't notify on specified event 84h attach window to parent task's window (both move together) 85h detach window from parent task's window (may move independently) 86h disable background operation for application 87h enable running in background 88h set minimum size of physical window BYTE rows BYTE columns 89h set maximum size of physical window BYTE rows BYTE cols 8Ah set primary asynchronous notification routine DWORD address of routine, 0000h:0000h means none (see also below) 8Bh set async notification parameter DWORD 32-bit value passed to 8Ah async routine in DS:SI ACh (DV2.2+) perform regular select field attribute processing ADh (DV2.2+) protect attributes in selected field from being lost AEh make window default notify window for owning app (API level 2.00+) AFh set selected field marker character BYTE character to display at left edge of selected fields BCh set standard field processing mode BDh set alternate field processing mode (enables cursor pad for menus) BEh disables changing reverse logical attributes with ECh opcode BFh enables changing reverse logical attributes with ECh opcode C0h make current window topmost in system C1h force current process into foreground C2h make current window topmost in process C3h position mouse pointer relative to origin of current field BYTE rows below upper left corner of field BYTE columns to right of upper left corner of field C4h position mouse pointer relative to origin of given field BYTE field number BYTE rows below upper left corner of field BYTE columns to right of upper left corner of field C5h orphan current window (also hides it) Note: must be last in stream; all subsequent commands ignored C6h show all windows for this process C7h hide all windows for this process C8h suspend process and hide all its windows C9h force current process into background CAh make current window bottom-most in process CBh cancel current window manager operation, remove DV menu, give control to topmost application CCh orphan window and give it to the system for use as paste data CEh reorder windows DWORD pointer to null-terminated list of words each word is segment of object handle for a window FFh no operation MODES 14h to 1Fh "USER STREAMS" normally NOPs, but may be defined by SETESC message to invoke FAR routines, one for each mode number on entry to handler, DS:SI -> first byte of actual stream (not header) CX = #bytes in stream ES:DI = window's handle Asynchronous notification routine defined by manager stream 8Ah called with: ES:DI = handle of window DS:SI is 32-bit value set by 8Bh manager stream opcode mailbox contains message indicating event Opcode 40h horizontal movement DWORD object handle of window BYTE new row BYTE new col 41h vertical movement DWORD object handle of window BYTE new row BYTE new col 42h horizontal size change DWORD object handle of window BYTE new rows BYTE new cols 43h vertical size change DWORD object handle of window BYTE new rows BYTE new cols 44h scrolled horizontally DWORD object handle of window BYTE mouse row within window BYTE mouse column within window BYTE field mouse is on, 0 if none BYTE amount moved: >0 right, <0 left, 0 done 45h scrolled vertically DWORD object hande of window BYTE mouse row within window BYTE mouse column within window BYTE field mouse is on, 0 if none BYTE amount moved: >0 down, <0 up, 0 done 46h window close request DWORD object handle of window BYTE mouse pointer row BYTE mouse pointer column BYTE field mouse is on, 0 if none 47h application's windows hidden 48h Help for Program selected DWORD object handle of window BYTE mouse pointer row BYTE mouse pointer column BYTE field mouse is on, 0 if none 49h pointer message sent to window DWORD pointer handle which received message 4Ah switched to window from another ("raise") 4Bh switched away from the window ("lower") 4Ch video mode changed BYTE new BIOS video mode 4Dh Scissors/cUt selected DWORD object handle of window BYTE row of upper left corner BYTE column of upper left corner BYTE field number ul corner is in, 0=none DWORD handle of orphaned window created with copy of data from specified region BYTE height of region BYTE width of region 4Eh Scissors/Copy selected DWORD object handle of window BYTE row of upper left corner BYTE column of upper left corner BYTE field number ul corner is in, 0=none DWORD handle of orphaned window created with copy of data from specified region BYTE height of region BYTE width of region 4Fh Scissors/Paste selected DWORD object handle of window BYTE row of upper left corner BYTE column of upper left corner BYTE field number ul corner is in, 0=none DWORD handle of orphaned window with data BYTE height of region BYTE width of region Note: orphaned data window should be adopted or freed when done 50h main menu about to pop up 51h main menu popped down Return: all registers unchanged ----------1512--BH06------------------------- INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ AH = 12h BH = 06h BL = object 00h object handle in DWORD on top of stack mailbox, keyboard, pointer, or timer 04h given task's keyboard (task's handle on top of stack) 05h current task's default keyboard STACK: DWORD new priority of object in task's OBJECTQ Notes: initially all objects have the same default value. Should only make relative adjustments to this default value. when changing priorities, all objects already on the objectq are reordered SeeAlso: AH=12h/BH=07h ----------1512--BH07------------------------- INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ AH = 12h BH = 07h BL = object 00h object handle in DWORD on top of stack mailbox, keyboard, pointer, or timer 04h given task's keyboard (task's handle on top of stack) 05h current task's default keyboard Return: STACK: DWORD object priority Note: initially all objects have the same default value. Should only make relative adjustments to this default value. SeeAlso: AH=12h/BH=06h ----------1512--BH08------------------------- INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE AH = 12h BH = 08h BL = object 00h handle in DWORD on top of stack window: total character positions in window timer: elapsed time since timer started pointer: number of messages queued to pointer object panel: number of panels in panel file keyboard: number of input buffers queued 01h total chars in current task's default window 02h number of messages in task's mailbox (task's handle on stack) 03h number of messages in current task's mailbox 04h number of input buffers queued in task's kbd (handle on stack) 05h number of input buffers queued for current task's default kbd 06h number of objects queued in OBJECTQ (task's handle on stack) 07h number of objects queued in current task's OBJECTQ 0Ch (DV 2.26+) total chars in window owning handle on top of stack 0Dh (DV 2.26+) total chars in parent task's window Return: DWORD on top of stack is result Note: for panel objects, a count of zero is returned if no panel file is open for the object SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h ----------1512--BH09------------------------- INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH AH = 12h BH = 09h BL = object 00h handle in DWORD on top of stack window: get chars/line timer: get 1/100 seconds remaining before timer expires 01h get number of chars/line in current task's default window 0Ch (DV 2.26+) get chars/line in window owning handle on top of stk 0Dh (DV 2.26+) get chars/line in parent task's window Return: DWORD on top of stack is length SeeAlso: AH=12h/BH=08h ----------1512--BH0A------------------------- INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW AH = 12h BH = 0Ah BL = window to write to 00h window handle is DWORD on top of stack 01h current task's default window 0Ch (DV 2.26+) default window of task owning handle on top of stack 0Dh (DV 2.26+) default window of parent of current task STACK: DWORD count of attributes DWORD address of attribute string DWORD count of characters DWORD address of character string Notes: if one string is longer than the other, the shorter one will be reused until the longer one is exhausted the cursor is left just after the last character written SeeAlso: AH=12h/BH=0Bh"WINDOW" ----------1512--BH0A------------------------- INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE AH = 12h BH = 0Ah BL = mailbox to write to 00h handle is DWORD on top of stack 02h default mailbox of task whose handle is on top of stack 03h current task's default mailbox STACK: DWORD status (low byte) DWORD length of message DWORD address of message Notes: the message is copied into either system or common memory insufficient memory normally causes the process to be aborted; under DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h) SeeAlso: AH=12h/BH=0Bh"MAILBOX" ----------1512--BH0A------------------------- INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS AH = 12h BH = 0Ah BL = object 00h handle is DWORD on top of stack timer: start timer for specified interval pointer: set control flags keyboard: set control flags 04h set control flags on KEYBOARD object (handle on top of stack) 05h set control flags on task's default KEYBOARD object STACK: (if timer) DWORD duration in 1/100 seconds (otherwise) DWORD bits to set SeeAlso: AH=12h/BH=0Bh"OBJECT" For keyboard objects, the bits have the following significance: bit 15 reserved, can't be set bit 14 unused bit 13 reserved, can't be set bit 12-6 unused bit 5 (DV 2.2+) exclusive input bit 4 filter all keys (used with handler established by SETESC) if 0, only keys that would normally be displayed are filtered bit 3 program continues executing while input in progress bit 2 insert mode active for field mode bit 1 hardware cursor displayed when task is hardware cursor owner must be set if keyboard in field mode and field table includes input fields bit 0 keyboard is in field mode rather than keystroke mode For pointer objects, the bits have the following significance: bit 15 reserved, can't be set bit 14-8 unused bit 7 mouse pointer is hidden while in window bit 6 get messages even if window not topmost bit 5 get messages even if window not foreground bit 4 multiple clicks separated by less than 1/3 second are counted and returned in a single message bit 3 pointer position is relative to screen origin, not window origin bit 2 send message on button release as well as button press bit 1 (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever pointer leaves the window bit 0 send message only on button activity, not movement DV-specific, and INT 15/AX=DE0Fh must have been called first ----------1512--BH0B------------------------- INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW AH = 12h BH = 0Bh BL = window to write attributes to 00h handle is DWORD on top of stack 01h current task's default window 0Ch (DV 2.26+) default window of task owning handle on top of stack 0Dh (DV 2.26+) default window of parent of current task STACK: DWORD number of attributes to write DWORD address of attributes Note: the attributes are written starting at the current cursor position; the cursor is left just after the last position written SeeAlso: AH=12h/BH=0Ah"WINDOW" ----------1512--BH0B------------------------- INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF AH = 12h BH = 0Bh BL = mailbox to write to 00h handle is DWORD on top of stack 02h default mailbox of task whose handle is on top of stack 03h current task's default mailbox STACK: DWORD status (low byte) DWORD length of message DWORD address of message Notes: only a pointer to the message is stored, but the write may still fail due to insufficient memory under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h) SeeAlso: AH=12h/BH=0Ah"MAILBOX" ----------1512--BH0B------------------------- INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ AH = 12h BH = 0Bh BL = OBJECTQ from which to remove all copies of a particular object 06h OBJECTQ of task whose handle is on top of stack 07h task's default OBJECTQ STACK: DWORD handle of object to remove Note: should be sent whenever an object is erased or closed ----------1512--BH0B------------------------- INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS AH = 12h BH = 0Bh BL = object 00h handle is DWORD on top of stack pointer: reset control flags keyboard: reset control flags 04h clear control flags on KEYBOARD object (handle on top of stack) 05h clear control flags on task's default KEYBOARD object STACK: DWORD which bits to clear (see AH=12h/BH=0Ah"OBJECT") SeeAlso: AH=12h/BH=0Ah"OBJECT" ----------1512--BH0C------------------------- INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT AH = 12h BH = 0Ch BL = object 00h handle is DWORD on top of stack window: fill with given character from scroll origin to end keyboard: attach to a window timer: open pointer: start taking input for window panel: associate with a panel file 01h fill task's default window with given char from scrl org to end 02h open given task's mailbox for input (task's handle on stack) 03h open current task's mailbox 04h attach a KEYBOARD to a window (handle on top of stack) 05h attach task's default KEYBOARD to a window 06h open a task's OBJECTQ (task's handle on top of stack) 07h open current task's OBJECTQ 0Ch (DV 2.26+) fill def window of task owning handle on top of stck 0Dh (DV 2.26+) fill default window of parent of current task STACK: (if window) DWORD character to fill with (if keyboard) DWORD handle of window to attach to (if pointer) DWORD handle of window to attach to (if panel) DWORD length of filename or resident panel DWORD address of filename or resident panel (otherwise) nothing Notes: if first byte of panel file name is 1Bh, then the "name" IS a panel if first two bytes of panel file "name" are C0hC3h, then the "name" IS the panel file result code of open may be retrieved with STATUS message logical cursor is left at scroll origin after filling window the task opening a mailbox becomes its owner, and the only task allowed to read the mailbox messages are only sent to a pointer object when the mouse is positioned in the window to which the pointer has been attached there is no need to explicitly open a timer object, as ADDTO and WRITE messages automatically open the timer SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK" ----------1512--BH0D------------------------- INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT AH = 12h BH = 0Dh BL = object 00h handle is DWORD on top of stack timer: close keyboard: detach from window and discard queued input pointer: stop taking input panel: close mailbox: close, unlock, and discard any pending messages 02h close given task's mailbox (task's handle on top of stack) 03h close task's default mailbox 04h close KEYBOARD object (handle on top of stack) 05h close task's default KEYBOARD 06h close givent task's OBJECTQ (task's handle on top of stack) 07h close current task's OBJECTQ Notes: when an OBJECTQ is closed, each object in the OBJECTQ is sent an ERASE message (AH=12h/BH=0Eh) when a panel object is closed, the panel file and any panels currently in use are freed; window and keyboard objects created by APPLY are not affected, but field mode input ceases open but idle timer objects consume a small amount of CPU time SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK" ----------1512--BH0E------------------------- INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT AH = 12h BH = 0Eh BL = object 00h handle is DWORD on top of stack window: clear from scroll origin to end of window keyboard: discard input timer: cancel current interval pointer: discard all pending messages mailbox: discard all pending messages 01h clear task's default window from scroll origin to end 02h discard all queued messages in mailbox (handle on top of stack) 03h discard all queued messages in current task's default mailbox 04h discard all input queued to KEYBOARD (handle on top of stack) 05h discard all input queued to task's default KEYBOARD 06h remove all objects from OBJECTQ (task's handle on top of stack) 07h remove all objects from current task's OBJECTQ 0Ch (DV 2.26+) clear window of task owning handle on top of stack 0Dh (DV 2.26+) clear default window of parent of current task Note: when an OBJECTQ is erased, each object in the OBJECTQ is also erased SeeAlso: AH=12h/BH=02h ----------1512--BH0F------------------------- INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS AH = 12h BH = 0Fh BL = object 00h handle is DWORD on top of stack timer: is it running? pointer: return status of last message panel: verify success of last OPEN or APPLY 02h return status of last msg READ from mailbox (handle on stack) 03h return status of last msg READ from task's default mailbox 04h get status of last msg from task's KEYBOARD (task handle on stk) 05h get status of last msg from task's default KEYBOARD 06h return whether OBJECTQ is open or not (handle on top of stack) 07h return whether task's default OBJECTQ is open or not Return: DWORD on top of stack is status Notes: if object is a panel object, the status indicates the error code: 00h successful 14h panel name not in panel directory 15h not enough memory to apply panel 16h invalid panel format 17h panel file already open 81h-92h DOS error codes+80h \ codes > 80h indicate 95h not enough memory to open panel file > that the panel was 98h null panel file name / not opened if object is a timer, the status is: 00000000h open but not running 40000000h open and running 80000000h closed if object is an OBJECTQ, the status is: 00000000h open 80000000h closed if object is a keyboard in keystroke mode, the status is the extended character code (scan code) of teh last keystroke if object is a keyboard in field mode, the status indicates the reason for the last return from the field manager 00h Enter key pressed 01h Button 1 or keystroke selection 02h Button 2 03h validation 04h auto Enter on field 1Bh Escape pressed 46h ^Break pressed other: extended code for key terminating input the status of mailbox messages sent by the window manager is always 80h the status of a pointer message is the same as the status field in the message SeeAlso: AH=12h/BH=04h"READ" ----------1512--BH10------------------------- INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS AH = 12h BH = 10h BL = object 00h handle is DWORD on top of stack window: return TRUE if logical cursor past end of window mailbox: ??? 01h returns TRUE if logical cursor past end of task's def window 02h return ??? for task's mailbox (task's handle on top of stack) 03h return ??? for current task's mailbox 0Ch (DV 2.26+) check log crsr of window owning handle on top of stk 0Dh (DV 2.26+) check log cursor of window of parent task Return: DWORD on top of stack is status ----------1512--BH11------------------------- INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR AH = 12h BH = 11h BL = window for which to move cursor 00h window's handle is DWORD on top of stack 01h task's default window 0Ch (DV 2.26+) default window of task owning handle on top of stack 0Dh (DV 2.26+) default window of parent of current task STACK: DWORD column DWORD row ----------1512--BH11------------------------- INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX AH = 12h BH = 11h BL = mailbox to name 00h DWORD on top of stack is mailbox handle 02h use given task's mailbox (task's handle on top of stack) 03h use current task's default mailbox STACK: DWORD length of name DWORD address of name SeeAlso: AX=DE0Eh ----------1512--BX1100----------------------- INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR AH = 12h BX = 1100h STACK: DWORD object handle for pointer object DWORD number of colums to scale pointer position to DWORD number of rows to scale pointer position to SeeAlso: AH=12h/BX=1200h ----------1512--BH12------------------------- INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES AH = 12h BH = 12h BL = window to read from 00h handle is DWORD on top of stack 01h read next N chars or attributes on task's default window 0Ch (DV 2.26+) read window of task owning handle on top of stack 0Dh (DV 2.26+) read default window of parent of current task STACK: DWORD count Return: STACK: DWORD width of screen line DWORD address DWORD count actually read Notes: reading starts at the current logical cursor position; the cursor is updated to point at the character following the last one read any translucent blanks (FFh) which are visible on screen are changed to the character which is seen through them the string produced by the read is placed in an input buffer which may be reused by the next READ or READN of a window window stream opcodes D8h and D9h determine whether the read returns characters or attributes SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW" ----------1512--BX1200----------------------- INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR AH = 12h BX = 1200h STACK: DWORD object handle for pointer Return: STACK: DWORD pointer pos scaled as if window were this many colums wide DWORD pointer pos scaled as if window were this many rows high SeeAlso: AH=12h/BX=1100h ----------1512--BH13------------------------- INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW AH = 12h BH = 13h BL = window object 00h DWORD on top of stack is handle for window to redraw 01h redraw task's default window 0Ch (DV 2.26+) redraw window of task owning handle on top of stack 0Dh (DV 2.26+) redraw default window of parent of current task SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh ----------1512--BX1300----------------------- INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON AH = 12h BX = 1300h STACK: DWORD object handle for pointer DWORD character to use for pointer ----------1512--BH14------------------------- INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS AH = 12h BH = 14h BL = message modifier 00h handle is DWORD on top of stack 01h define user stream 04h intercept keystrokes from KEYBOARD to a window (handle on stack) 05h intercept keystrokes from task's default KEYBOARD to a window STACK: (if window) DWORD user stream number (14h-1Fh) DWORD address of FAR user stream handler (if keyboard) DWORD address of FAR filter function The keyboard filter function is called when the keyboard is in field mode. On entry, AL = character AH = 00h or extended ASCII code if AL = 00h BL = field number CH = cursor column CL = cursor row DL = field type modifier (sixth item in field table entry) DH = seventh item in field table entry ES:SI = window's handle DS:DI -> field table entry for field containing the cursor The filter function should return AH = 00h use keystroke 01h ignore keystroke FFh beep and ignore keystroke Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls ----------1512--BH14------------------------- INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE AH = 12h BH = 14h BL = object 00h mailbox handle is DWORD on top of stack 02h use given task's mailbox (task's handle on top of stack) 03h use current task's default mailbox Note: release exclusive access by sending CLOSE message to mailbox access may be requested multiple times, and requires multiple CLOSEs SeeAlso: AH=12h/BH=0Dh ----------1512--BH15------------------------- INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS AH = 12h BH = 15h BL = object 00h DWORD on top of stack mailbox, keyboard, or pointer only 02h mailbox for task whose handle is on top of stack 03h mailbox for current task 04h keyboard for task whose handle is on top of stack 05h keyboard for current task STACK: DWORD flags if mailbox: bit 0: all mail messages in common memory bit 1: allow write even if closed bit 2: don't erase messages when mailbox closed if keyboard: bit 5: exclusive input when keyboard in use for input Return: nothing Notes: only available if the API level has been set to at least 2.20 equivalent to performing SUBFROM and ADDTO calls on the object SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h ----------1512--BH16------------------------- INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS AH = 12h BH = 16h BL = object 00h DWORD on top of stack mailbox, keyboard, or pointer only 02h mailbox for task whose handle is on top of stack 03h mailbox for current task 04h keyboard for task whose handle is on top of stack 05h keyboard for current task Return: STACK: DWORD current control flags Note: only available if the API level has been set to at least 2.20 SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=15h ----------1512--BH17------------------------- INT 15 - DESQview v2.42-2.52 - BUG AH = 12h BH = 17h BL = object 00h DWORD on top of stack mailbox, keyboard, or pointer only 02h mailbox for task whose handle is on top of stack 03h mailbox for current task 04h keyboard for task whose handle is on top of stack 05h keyboard for current task Notes: due to a fencepost error, message 17h is accepted for mailboxes, keyboards, and pointers, but causes a random branch DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02 ----------1513------------------------------- INT 15 - VMiX - WAKE PROCESS AH = 13h STACK: WORD process ID Return: AX = status SeeAlso: AH=12h"VMiX" ----------1513------------------------------- INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK AH = 13h Return: BX:AX -> task control block (see below) SeeAlso: AH=15h"MultiDOS" Format of MultiDOS Plus v4.0 task control block: Offset Size Description 00h DWORD pointer to next TCB 04h 8 BYTEs ASCIZ task name 0Ch 2 BYTEs ??? 0Eh WORD task PSP segment 10h WORD abort/suspend flags 12h WORD current screen segment (see AH=0Bh,AH=0Ch) 14h WORD priority level (0000h-FFFEh) 16h WORD time slice counter 18h 2 BYTEs ??? 1Ah WORD suspend timer value 1Ch WORD stack segment 1Eh WORD stack pointer 20h WORD display type 22h WORD display memory 24h 2 BYTEs ??? 26h WORD termination count 28h WORD equipment flag for BIO10 driver 2Ah BYTE background CRT mode 2Bh WORD screen width in columns 2Dh WORD screen size in bytes 2Fh WORD segment of physical screen memory 31h 16 BYTEs eight cursor positions 41h WORD current cursor shape 43h BYTE active display page 44h WORD CRT controller I/O port base 46h 2 BYTEs ??? 48h WORD foreground task flag 4Ah 6 BYTEs ??? 50h WORD saved video segment (see AH=0Bh,AH=0Ch) 52h DWORD old INT 22 56h DWORD old INT 23 5Ah DWORD old INT 24 5Eh WORD top of memory for task 60h 4 BYTEs ??? 64h WORD DTA segment (see INT 21/AH=1Ah) 66h WORD DTA offset 68h 4 BYTEs ??? 6Ch BYTE current ANSI.SYS attribute 6Dh BYTE current ANSI.SYS column 6Eh BYTE current ANSI.SYS row 6Fh BYTE current ANSI.SYS display state 70h BYTE maximum ANSI.SYS columns 71h BYTE current ANSI.SYS page 72h WORD saved ANSI.SYS cursor position 74h BYTE ANSI.SYS parameter buffer index 75h BYTE current ANSI.SYS screen mode 76h BYTE ANSI.SYS wrap flag 77h 6 BYTEs ANSI.SYS parameter buffer 7Dh BYTE ANSI.SYS keyboard DSR state 7Eh 7 BYTEs ANSI.SYS keyboard DSR buffer 85h 3 BYTEs ??? 88h 16 BYTEs request header for DOS driver calls 98h 14 BYTEs ??? A6h WORD segment of EMS map if EMS task A8h WORD flag: task makes EMS calls AAh WORD EMS handle for task ACh WORD keyboard shift state AEh 12 BYTEs ??? BAh WORD TCB of parent if child task BCh WORD termination code BEh WORD COM port number C0h 4 BYTEs ??? C4h WORD current IRQ number C6h 2 BYTEs ??? C8h WORD miscellaneous flag word CAh 2 BYTEs ??? CCh DWORD old INT 10 D0h WORD EMS alternate map set number D2h 414 BYTEs DOS current disk and directory context (optional) ----------1514------------------------------- INT 15 - VMiX - CLEAR WINDOW AH = 14h STACK: WORD top left corner of window WORD bottom right corner of window Return: AX = status SeeAlso: AH=15h"VMiX" ----------1514------------------------------- INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND AH = 14h Return: AX = current state 0000h MultiDOS Plus command prompt is background task 0001h command prompt is foreground task SeeAlso: AH=0Bh"MultiDOS" ----------1515------------------------------- INT 15 - VMiX - SET BANNER WINDOW MESSAGE AH = 15h STACK: DWORD pointer to ASCIZ banner message Return: AX = status SeeAlso: AH=14h"VMiX" ----------1515------------------------------- INT 15 - MultiDOS Plus - GET SYSTEM BLOCK AH = 15h Return: BX:AX -> system block (see below) SeeAlso: AH=13h"MultiDOS" Format of MultiDOS Plus 4.0 system block: Offset Size Description 00h WORD segment of system control block 02h WORD redirection flag set by /NOREDIRECT 04h WORD no-INT 10 flag set by /NO10 06h DWORD old INT 10 0Ah DWORD new INT 10 0Eh DWORD pointer to WORD with current TCB offset (see AH=13h) 12h DWORD pointer to WORD with idle task TCB offset 16h DWORD pointer to WORD with foreground TCB offset 1Ah DWORD pointer to WORD with MultiDOS TCB offset 1Eh WORD Task Control Block size 20h WORD number of TCBs 22h WORD flag: EMS present 24h WORD EMS page frame base segment 26h WORD 16K pages in EMS page frame 28h WORD base segment for conventional memory tasks 2Ah WORD conventional memory size in paragraphs 2Ch DWORD pointer to list of queue pointers ----------1516------------------------------- INT 15 - VMiX - SET ROOT WINDOW SIZE AND HOME CURSOR AH = 16h STACK: DWORD pointer to I/O Request Packet WORD top left corner of window WORD bottom right corner of window Return: AX = status SeeAlso: AH=17h"VMiX" ----------1516------------------------------- INT 15 - MultiDOS Plus - INITIALIZATION AH = 16h Note: used internally during initialization; any other calls will cause unpredicatable results ----------1517------------------------------- INT 15 - VMiX - GET CONSOLE WINDOW COLORS AH = 17h Return: AH = foreground color AL = background color SeeAlso: AH=16h"VMiX",AH=18h"VMiX" ----------1517------------------------------- INT 15 - MultiDOS Plus - MAP IRQ AH = 17h AL = IRQ to map (01h-0Fh) BX = offset of task control block (see AH=13h) to associate with IRQ Return: AX = status 0000h successful other invalid IRQ Note: the EMS map of the specified TCB is associated with the given interrupt SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS" ----------1518------------------------------- INT 15 - VMiX - SET CONSOLE COLORS AH = 18h STACK: WORD new background/foreground colors Return: AX = color SeeAlso: AH=17h"VMiX" ----------1518------------------------------- INT 15 - MultiDOS Plus - UNMAP IRQ AH = 18h AL = IRQ to unmap (01h-0Fh) Return: AX = status 0000h successful 0001h invalid IRQ Note: results are unpredictable if the IRQ has not been mapped SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS" ----------1519------------------------------- INT 15 - VMiX v2+ - ??? AH = 19h STACK: WORD ??? Return: ??? ----------1519------------------------------- INT 15 - MultiDOS Plus - UNMAP ALL IRQs AH = 19h Return: AX destroyed Note: for MultiDOS internal use only SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS" ----------151A------------------------------- INT 15 - VMiX v2+ - ??? AH = 1Ah STACK: 3 WORDs ??? Return: ??? ----------151A------------------------------- INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER AH = 1Ah DS:SI -> 8-byte name Return: AL = status 00h successful AH = semaphore number (20h-3Fh) 04h out of string space Notes: all eight bytes of the name are significant if the name does not already exist, it is added to the name table and associated with a free semaphore number names cannot be destroyed SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS" ----------151B------------------------------- INT 15 - VMiX v2+ - ??? AH = 1Bh STACK: 5 WORDs ??? Return: ??? ----------151B------------------------------- INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME AH = 1Bh DS:SI -> 8-byte name Return: AH = status 00h successful 02h invalid semaphore number 03h caller already owns semaphore 04h out of string space Notes: (see notes for AH=01h"MultiDOS") equivalent to AH=1Ah followed by AH=01h SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS" ----------151C------------------------------- INT 15 - VMiX v2+ - ??? AH = 1Ch STACK: 5 WORDs ??? Return: ??? ----------151C------------------------------- INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME AH = 1Ch DS:SI -> 8-byte name Return: AH = status 00h successful 01h not semaphore owner 02h invalid semaphore number 04h out of string space Notes: (see notes for AH=02h"MultiDOS") equivalent to AH=1Ah followed by AH=02h SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS" ----------151D------------------------------- INT 15 - VMiX v2+ - ??? AH = 1Dh ??? Return: ??? ----------151D------------------------------- INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME AH = 1Dh DS:SI -> 8-byte name Return; AH = status 00h semaphore not in use 01h semaphore owned by another task 02h invalid semaphore number 03h caller owns semaphore 04h out of string space Notes: (see notes for AH=10h"MultiDOS") equivalent to AH=1Ah followed by AH=10h SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS" ----------151E------------------------------- INT 15 - VMiX v2+ - ??? AH = 1Eh STACK: WORD ??? Return: ??? ----------151E00----------------------------- INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER AX = 1E00h DX = event/trigger number (00h-3Fh) Return: AH = status 00h successful SeeAlso: AX=1E01h,AX=1E02h ----------151E01----------------------------- INT 15 - MultiDOS Plus - TRIGGER EVENT AX = 1E01h DX = event/trigger number (00h-3Fh) Return: AH = status 00h successful 01h invalid event/trigger number Notes: schedules any task waiting for event; if no task is waiting, the event counter is incremented (and will roll over if it was 65535) may be invoked by interrupt handler SeeAlso: AX=1E00h,AX=1E02h ----------151E02----------------------------- INT 15 - MultiDOS Plus - WAIT FOR EVENT AX = 1E02h DX = event/trigger number (00h-3Fh) Return: AH = status 00h successful 01h invalid event/trigger number Note: if the event counter is zero, the task is suspended until the event is triggered with AX=1E01h; else, the counter is decremented and the call returns immediately SeeAlso: AX=1E00h,AX=1E01h ----------151F------------------------------- INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS AH = 1Fh Return: BX = first segment of conventional memory DX = first segment of EMS swap frame into which MultiDOS will load programs ----------1520------------------------------- INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED AH = 20h Return: AX = current state 0000h multitasking enabled other TCB of task that disabled multitasking SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS" ----------152000----------------------------- INT 15 - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG AX = 2000h SeeAlso: AX=2001h ----------152001----------------------------- INT 15 - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG AX = 2001h ES:BX -> byte which is to be incremented while in a DOS call SeeAlso: AX=2000h ----------152010----------------------------- INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+) AX = 2010h ??? Return: ??? SeeAlso: AX=2011h ----------152011----------------------------- INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+) AX = 2011h ??? Return: ??? SeeAlso: AX=2010h ----------1521------------------------------- INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+) AH = 21h AL = subfunction 00h read POST log 01h write POST log BH = device ID BL = error code Return: CF set on error AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported) if function 00h: BX = number of error codes stored ES:DI -> error log Note: the log is a series of words, the first byte of which identifies the error code and the second the device. ----------152400----------------------------- INT 15 - Qualitas 386MAX v6.01 - TURN ON ??? AX = 2400h Return: CF clear AH = 00h ----------152401----------------------------- INT 15 - Qualitas 386MAX v6.01 - TURN OFF ??? AX = 2401h Return: CF clear AH = 00h ----------152402----------------------------- INT 15 - Qualitas 386MAX v6.01 - GET STATE OF ??? AX = 2402h Return: CF clear AH = 00h AL = current state (00h off, 01h on) ----------152403----------------------------- INT 15 - Qualitas 386MAX v6.01 - GET ??? AX = 2403h ??? Return: CF clear AH = 00h BX = bit flags??? bit 0: ??? bit 1: ??? Note: reportedly also used by some PS/2 models ----------1540------------------------------- INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE) AH = 40h AL = subfunction 00h get system profile in CX and BX 01h set system profile from CX and BX 02h get internal modem profile in BX 03h set internal modem profile from BX ----------154000----------------------------- INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT AX = 4000h Return: AX = 4000h CL = 00h timeout disabled else timeout in minutes SeeAlso: AX=4001h,AX=4600h ----------154001CL00------------------------- INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT AX = 4001h CL = 00h timeout disabled else timeout in minutes Return: AL = 00h timeout modified 01h timeout cannot be modified 40h timeout cannot be modified CL = 00h timeout disabled else timeout in minutes SeeAlso: AX=4000h,AX=4601h ----------1541------------------------------- INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE) AH = 41h AL = condition type bits 0-2: condition to wait for 0 any external event 1 compare and return if equal 2 compare and return if not equal 3 test and return if not zero 4 test and return if zero bit 3: reserved bit 4: 1=port address, 0=user byte bits 5-7: reserved BH = condition compare or mask value BL = timeout value times 55 milliseconds 00h means no timeout DX = I/O port address if AL bit 4 set ES:DI -> user byte if AL bit 4 clear ----------1542------------------------------- INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE) AH = 42h AL = 00h to use system profile 01h to force suspend regardless of system profile SeeAlso: AH=44h ----------154280----------------------------- INT 15 - Compaq SLT/286 - ENTER STANDBY AX = 4280h Return: AH = 42h CF clear if successful CF set if unable to enter standby SeeAlso: AX=4600h,AX=5307h/BX=0001h/CX=0001h ----------1543------------------------------- INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE) AH = 43h Return: AL = status bits bit 0: LCD detached bit 1: reserved bit 2: RS232/parallel adapter powered on bit 3: internal modem powered on bit 4: power activated by alarm bit 5: standby power lost bit 6: external power in use bit 7: power low ----------1544------------------------------- INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE) AH = 44h AL = 00h to power off 01h to power on SeeAlso: AH=42h ----------154600----------------------------- INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION AX = 4600h Return: AH = modem configuration information bit 0 powerup state 0 off 1 on 1 modem installed 2 IRQ line assignment 0 IRQ 4 1 IRQ 3 3 COM port assignment 0 = COM 2 1 = COM 1 4 modem state 0 not assigned 1 assigned 5 modem is on AL = power conservation status information bit 0 power source (0 internal, 1 external) 1-2 low battery state 00 no low battery condition 01 low battery 1 10 reserved 11 low battery 2 3-4 power conservation mode 00 automatic 01 on 10 off 11 reserved BH = default system inactivity timeout (1-21 minutes) BL = current system inactivity timeout (1-21 minutes) CH = default video display inactivity timeout (1-63 minutes) CL = current video display inactivity timeout (1-63 minutes) DH = default fixed disk drive inactivity timeout (1-21 minutes) DL = current fixed disk drive inactivity timeout (1-21 minutes) SeeAlso: AX=4280h,AX=4601h,INT 77 ----------154601----------------------------- INT 15 - Compaq SLT/286 - Modify Power Conservation/Modem Configuration AX = 4601h BL = system inactivity timeout (1-21 minutes) = FFh do not change CL = video display inactivity timeout (1-63 minutes) = FFh do not change DL = current fixed disk drive inactivity timeout (1-21 minutes) = FFh do not change DH = 00h turn modem OFF = 01h turn modem ON = FFh do not change modem state Return: CF clear if successful AH = 00h BL = current system inactivity timeout (1-21 minutes) CL = current video display inactivity timeout (1-63 minutes) DL = current fixed disk drive inactivity timeout (1-21 minutes) DH = FFh modem state unchanged = 00h modem turned OFF = 01h modem turned ON CF set on error AH = 01h input is out of range = 02h - No modem present SeeAlso: AX=4600h,INT 77 ----------154DD4----------------------------- INT 15 - HP 95LX - INSTALLATION CHECK AX = 4DD4h Return: BX = 4850h ("HP") if HP 95LX CX = ??? (0101h) DL = ??? (00h) SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h SeeAlso: INT 61"HP 95LX" ----------154E------------------------------- INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP AH = 4Eh AL = light sleep 00h disabled 01h enabled Note: when light sleep is disabled, the system will continue running at full speed; when enabled, it may automatically slow to conserve batteries SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h ----------154F------------------------------- INT 15 - OS HOOK - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS) AH = 4Fh AL = hardware scan code CF set Return: CF set AL = hardware scan code CF clear scan code should be ignored Note: called by INT 9 handler to translate scan codes; the INT 09 code does not examine the scan code it reads from the keyboard until after this function returns. This permits software to rearrange the keyboard; for example, swapping the CapsLock and Control keys, or turning the right Shift key into Enter. SeeAlso: INT 09,INT 15/AH=C0h ----------155300BX0000----------------------- INT 15 - Advanced Power Management Specification - INSTALLATION CHECK AX = 5300h BX = 0000h (device ID of system BIOS) Return: CF clear if successful AH = major version (BCD) AL = minor version (BCD) BX = 504Dh ("PM") CX = flags bit 0: 16-bit protected mode interface supported bit 1: 32-bit protected mode interface supported bit 2: CPU idle call reduces processor speed bit 3: BIOS power management disabled bits 4-7 reserved CF set on error AH = error code (86h) (see below) Values for error code: 01h power management functionality disabled 02h interface connection already in effect 03h interface not connected 04h real-mode interface not connected 05h 16-bit protected-mode interface already connected 06h 16-bit protected-mode interface not supported 07h 32-bit protected-mode interface already connected 08h 32-bit protected-mode interface not supported 09h unrecognized device ID 0Ah invalid parameter value in CX 0Bh-1Fh reserved for other interface and general errors 20h-3Fh reserved for CPU errors 40h-5Fh reserved for device errors 60h can't enter requested state 61h-7Fh reserved for other system errors 80h no power management events pending 81h-85h reserved for other power management event errors 86h APM not present 87h-9Fh reserved for other power management event errors ----------155301BX0000----------------------- INT 15 - Advanced Power Management Specification - CONNECT REAL-MODE INTERFACE AX = 5301h BX = 0000h (device ID of system BIOS) Return: CF clear if successful CF set on error AH = error code (02h,09h) (see AX=5300h) SeeAlso: AX=5302h,AX=5303h,AX=5304h ----------155302BX0000----------------------- INT 15 R - Advanced Power Management Spec - CONNECT 16-BIT PROTMODE INTERFACE AX = 5302h BX = 0000h (device ID of system BIOS) Return: CF clear if successful AX = real-mode segment base address of protected-mode 16-bit code segment BX = offset of entry point CX = real-mode segment base address of protected-mode 16-bit data segment CF set on error AH = error code (05h,06h,09h) (see AX=5300h) Notes: the caller must initialize two consecutive descriptors with the returned segment base addresses; these descriptors must be valid whenever the protected-mode interface is called, and will have their limits arbitrarily set to 64K. the protected mode interface is invoked by making a far call with the same register values as for INT 15; it must be invoked while CPL=0, the code segment descriptor must have a DPL of 0, the stack must be in a 16-bit segment and have enough room for BIOS use and possible interrupts, and the current I/O permission bit map must allow access to the I/O ports used for power management. functions 00h-03h are not available from protected mode SeeAlso: AX=5301h,AX=5303h,AX=5304h ----------155303BX0000----------------------- INT 15 - Advanced Power Management Spec - CONNECT 32-BIT PROTMODE INTERFACE AX = 5303h BX = 0000h (device ID of system BIOS) Return: CF clear if successful AX = real-mode segment base address of protected-mode 32-bit code segment EBX = offset of entry point CX = real-mode segment base address of protected-mode 16-bit code segment DX = real-mode segment base address of protected-mode 16-bit data segment CF set on error AH = error code (07h,08h,09h) (see AX=5300h) Notes: the caller must initialize three consecutive descriptors with the returned segment base addresses for 32-bit code, 16-bit code, and 16-bit data, respectively; these descriptors must be valid whenever the protected-mode interface is called, and will have their limits arbitrarily set to 64K. the protected mode interface is invoked by making a far call to the 32-bit code segment with the same register values as for INT 15; it must be invoked while CPL=0, the code segment descriptor must have a DPL of 0, the stack must be in a 32-bit segment and have enough room for BIOS use and possible interrupts, and the current I/O permission bit map must allow access to the I/O ports used for power management. functions 00h-03h are not available from protected mode SeeAlso: AX=5301h,AX=5302h,AX=5304h ----------155304BX0000----------------------- INT 15 - Advanced Power Management Specification - DISCONNECT INTERFACE AX = 5304h BX = 0000h (device ID of system BIOS) Return: CF clear if successful CF set on error AH = error code (03h,09h) (see AX=5300h) SeeAlso: AX=5301h,AX=5302h,AX=5303h ----------155305----------------------------- INT 15 - Advanced Power Management Specification - CPU IDLE AX = 5305h Return: after system leaves idle state CF clear Notes: call when the system is idle and should be suspended until the next system event or interrupt should not be called from within a hardware interrupt handler to avoid reentrance problems if an interrupt causes the system to resume normal processing, the interrupt may or may not have been handled when the BIOS returns from this call; thus, the caller should allow interrupts on return interrupt handlers may not retain control if the BIOS allows interrupts while in idle mode even if they are able to determine that they were called from idle mode the caller should issue this call continuously in a loop until it needs to perform some processing of its own SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h ----------155306----------------------------- INT 15 - Advanced Power Management Specification - CPU BUSY AX = 5306h Return: CF clear Notes: called to ensure that the system runs at full speed even on systems where the BIOS is unable to recognize increased activity (especially if interrupts are hooked by other programs and not chained to the BIOS) this call may be made even when the system is already running at full speed, but it will create unnecessary overhead should not be called from within a hardware interrupt handler to avoid reentrance problems SeeAlso: AX=5305h ----------155307----------------------------- INT 15 - Advanced Power Management Specification - SET POWER STATE AX = 5307h BX = device ID (see below) CX = system state ID 0000h ready (not supported for device ID 0001h) 0001h stand-by 0002h suspend 0003h off (not supported for device ID 0001h) 0004h-FFFFh reserved Return: CF clear if successful CF set on error AH = error code (01h,09h,0Ah,60h) (see AX=5300h) Note: should not be called from within a hardware interrupt handler to avoid reentrance problems Values for device IDs: 0000h system BIOS 0001h all devices for which the system BIOS manages power 01xxh display (01FFh for all attached display devices) 02xxh secondary storage (02FFh for all attached secondary storage devices) 03xxh parallel ports (03FFh for all attached parallel ports) 04xxh serial ports (04FFh for all attached serial ports) 0500h-FFFFh reserved ----------155307BX0001----------------------- INT 15 - Advanced Power Management Specification - SYSTEM STAND-BY AX = 5307h BX = 0001h CX = 0001h Return: CF clear Notes: puts the entire system into stand-by mode; normally called in response to a System Stand-by Request notification after any necessary processing, but may also be invoked at the caller's discretion should not be called from within a hardware interrupt handler to avoid reentrance problems the stand-by state is typically exited on an interrupt SeeAlso: AX=4280h,AX=5307h/BX=0001h/CX=0002h,AX=530Bh ----------155307BX0001----------------------- INT 15 - Advanced Power Management Specification - SUSPEND SYSTEM AX = 5307h BX = 0001h CX = 0002h Return: after system is resumed CF clear Notes: puts the entire system into a low-power suspended state; normally called in response to a Suspend System Request notification after any necessary processing, but may also be invoked at the caller's discretion should not be called from within a hardware interrupt handler to avoid reentrance problems the caller may need to update its date and time values because the system could have been suspended for a long period of time SeeAlso: AX=5307h/BX=0001h/CX=0001h,AX=530Bh ----------155308BXFFFF----------------------- INT 15 - Advanced Power Management Spec - ENABLE/DISABLE POWER MANAGEMENT AX = 5308h BX = FFFFh CX = new state 0000h disabled 0001h enabled Return: CF clear if successful CF set on error AH = error code (01h,09h,0Ah) (see AX=5300h) Notes: when power management is disabled, the system BIOS will not automatically power down devices, enter stand-by or suspended mode, or perform any power-saving actions in response to AX=5305h calls should not be called from within a hardware interrupt handler to avoid reentrance problems SeeAlso: AX=5309h ----------155309BXFFFF----------------------- INT 15 - Advanced Power Management Specification - RESTORE POWER-ON DEFAULTS AX = 5309h BX = FFFFh Return: CF clear if successful CF set on error AH = error code (09h) (see AX=5300h) Note: should not be called from within a hardware interrupt handler to avoid reentrance problems SeeAlso: AX=5308h ----------15530ABX0001----------------------- INT 15 - Advanced Power Management Specification - GET POWER STATUS AX = 530Ah BX = 0001h Return: CF clear if successful BH = AC line status 00h off-line 01h on-line FFh unknown other reserved BL = battery status 00h high 01h low 02h critical 03h charging FFh unknown other reserved CL = remaining battery life 00h-64h (0-100) percentage of full charge FFh unknown CF set on error AH = error code (09h) (see AX=5300h) Note: should not be called from within a hardware interrupt handler to avoid reentrance problems ----------15530B----------------------------- INT 15 - Advanced Power Management Specification - GET POWER MANAGEMENT EVENT AX = 530Bh Return: CF clear if successful BX = event code 0001h system stand-by request 0002h system suspend request 0003h normal resume system notification 0004h critical resume system notification 0005h battery low notification CF set on error AH = error code (03h,80h) (see AX=5300h) Notes: although power management events are often asynchronous, notification will not be made until polled via this call to permit software to only receive event notification when it is prepared to process power management events; since these events are not very time- critical, it should be sufficient to poll once or twice per second the critical resume notification is made after the system resumes from an emergency suspension; normally, the system BIOS only notifies its partner that it wishes to suspend and relies on the partner to actually request the suspension, but no notification is made on an emergency suspension should not be called from within a hardware interrupt handler to avoid reentrance problems SeeAlso: AX=5307h,AX=5307h/BX=0001h/CX=0001h,AX=5307h/BX=0001h/CX=0002h ----------155400----------------------------- INT 15 - Omniview Multitasker - INSTALLATION NOTIFICATION AX = 5400h ES:BX -> device information tables DI:DX -> dispatcher entry point Note: called by OmniView to notify programs loaded before OmniView of state changes inside OmniView SeeAlso: AX=5407h ----------155401----------------------------- INT 15 - Omniview Multitasker - PROCESS CREATION AX = 5401h ES:BX = process handle Note: called by OmniView to notify programs loaded before OmniView of state changes inside OmniView SeeAlso: AX=5402h ----------155402----------------------------- INT 15 - Omniview Multitasker - PROCESS DESTRUCTION AX = 5402h ES:DX = process handle Note: called by OmniView to notify programs loaded before OmniView of state changes inside OmniView SeeAlso: AX=5401h ----------155403----------------------------- INT 15 - Omniview Multitasker - SAVE AX = 5403h ES:DX = process swapping out Note: called by OmniView to notify programs loaded before OmniView of state changes inside OmniView SeeAlso: AX=5404h ----------155404----------------------------- INT 15 - Omniview Multitasker - RESTORE AX = 5404h ES:DX = process swapping in Note: called by OmniView to notify programs loaded before OmniView of state changes inside OmniView SeeAlso: AX=5403h ----------155405----------------------------- INT 15 - Omniview Multitasker - SWITCHING TO BACKGROUND AX = 5405h ES:DX = process swapping in Note: called by OmniView to notify programs loaded before OmniView of state changes inside OmniView SeeAlso: AX=5406h ----------155406----------------------------- INT 15 - Omniview Multitasker - SWITCHING TO FOREGROUND AX = 5406h ES:DX = process swapping in Note: called by OmniView to notify programs loaded before OmniView of state changes inside OmniView SeeAlso: AX=5405h ----------155407----------------------------- INT 15 - Omniview Multitasker - EXIT NOTIFICATION AX = 5407h Note: called by OmniView to notify programs loaded before OmniView of state changes inside OmniView SeeAlso: AX=5400h ----------1580------------------------------- INT 15 - OS HOOK - DEVICE OPEN (AT,XT286,PS) AH = 80h BX = device ID CX = process ID CF clear Return: CF clear if successful AH = 00h CF set on error AH = status 80h invalid command (PC,PCjr) 86h function not supported (XT) Note: this function should be hooked by a multitasker which wishes to keep track of device ownership; the default BIOS handler merely returns successfully SeeAlso: AH=81h,AH=82h ----------1581------------------------------- INT 15 - OS HOOK - DEVICE CLOSE AH = 81h BX = device ID CX = process ID CF clear Return: CF clear if successful AH = 00h CF set on error AH = status (see AH=80h) Note: this function should be hooked by a multitasker which wishes to keep track of device ownership; the default BIOS handler merely returns successfully SeeAlso: AH=80h,AH=82h ----------1582------------------------------- INT 15 - OS HOOK - PROGRAM TERMINATION AH = 82h BX = process ID CF clear Return: CF clear if successful AH = 00h CF set on error AH = status (see AH=80h) Notes: closes all devices opened by the given process ID with function 80h this function should be hooked by a multitasker which wishes to keep track of device ownership; the default BIOS handler merely returns successfully SeeAlso: AH=80h,AH=81h ----------1583------------------------------- INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+) AH = 83h AL = subfunction 00h set interval CX:DX = microseconds to delay ES:BX -> byte whose high bit is to be set at end of interval 01h cancel wait interval Return: CF set on error or function already busy AH = status 80h invalid command (PC,PCjr) 86h function not supported (XT and later) CF clear if successful Note: the resolution of the wait period is 977 microseconds on most systems because most BIOSes use the 1/1024 second fast interrupt from the AT real-time clock chip which is available on INT 70 SeeAlso: AH=86h,INT 70 ----------1584------------------------------- INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS) AH = 84h DX = subfunction 0000h read joystick switches Return: AL bits 7-4 = switch settings 0001h read positions of joysticks Return: AX = X position of joystick A BX = Y position of joystick A CX = X position of joystick B DX = Y position of joystick B Return: CF set on error AH = status 80h invalid command (PC,PCjr) 86h function not supported (other) CF clear if successful Notes: if no game port is installed, subfunction 0000h returns AL=00h (all switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h a 250kOhm joystick typically returns 0000h-01A0h ----------1585------------------------------- INT 15 - OS HOOK - SysRq KEY ACTIVITY (AT,PS) AH = 85h AL = 00h SysRq key pressed = 01h SysRq key released CF clear Return: CF clear if successful AH = 00h CF set on error AH = status (see AH=84h) Notes: called by keyboard decode routine the default handler simply returns successfully; programs which wish to monitor the SysRq key must hook this call SeeAlso: INT 09 ----------1586------------------------------- INT 15 - BIOS - WAIT (AT,PS) AH = 86h CX:DX = interval in microseconds Return: CF clear if successful (wait interval elapsed) CF set on error or AH=83h wait already in progress AH = status (see AH=84h) Note: the resolution of the wait period is 977 microseconds on most systems because most BIOSes use the 1/1024 second fast interrupt from the AT real-time clock chip which is available on INT 70 SeeAlso: AH=83h,INT 70 ----------1587------------------------------- INT 15 - SYSTEM - COPY EXTENDED MEMORY AH = 87h CX = number of words to copy (max 8000h) ES:SI -> global descriptor table Return: CF set on error CF clear if successful AH = status 00h source copied into destination 01h parity error 02h interrupt error 03h address line 20 gating failed 80h invalid command (PC,PCjr) 86h unsupported function (XT,PS30) Notes: copy is done in protected mode with interrupts disabled this function is incompatible with the OS/2 compatibility box SeeAlso: AH=88h,AH=89h Format of global descriptor table: Offset Size Description 00h 16 BYTEs zeros 10h WORD source segment length in bytes (2*CX-1 or greater) 12h 3 BYTEs 24-bit linear source address, low byte first 15h BYTE source segment access rights (93h) 16h WORD zero 18h WORD destination segment length in bytes (2*CX-1 or greater) 1Ah 3 BYTEs 24-bit linear destination address, low byte first 1Dh BYTE destination segment access rights (93h) 1Eh 18 BYTEs zeros ----------1588------------------------------- INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+) AH = 88h Return: CF clear if successful AX = number of contiguous KB starting at absolute address 100000h CF set on error AH = status 80h invalid command (PC,PCjr) 86h unsupported function (XT,PS30) Note: TSRs which wish to allocate extended memory to themselves often hook this call, and return a reduced memory size. They are then free to use the memory between the new and old sizes at will. SeeAlso: AH=87h ----------1589------------------------------- INT 15 - SYSTEM - SWITCH TO PROTECTED MODE AH = 89h BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts) BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts) ES:SI -> GDT for protected mode offset 0h null descriptor (initialize to zeros) 8h GDT descriptor 10h IDT descriptor 18h DS 20h ES 28h SS 30h CS 38h uninitialized, used to build descriptor for BIOS CS CX = offset into protected-mode CS to jump to Return: CF set on error AH = FFh error enabling address line 20 CF clear if successful AH = 00h in protected mode at specified address Note: BL and BH must be multiples of 8 SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch ----------1590------------------------------- INT 15 - OS HOOK - DEVICE BUSY (AT,PS) AH = 90h AL = device type 00h disk 01h diskette 02h keyboard 03h PS/2 pointing device 21h waiting for keyboard input (Phoenix BIOS) 80h network FBh digital sound (Tandy) FCh disk reset (PS) FDh diskette motor start FEh printer ES:BX -> request block for type codes 80h through BFh CF clear Return: CF set if wait time satisfied CF clear if driver must perform wait AH = 00h Notes: type codes are allocated as follows: 00-7F non-reentrant devices; OS must arbitrate access 80-BF reentrant devices; ES:BX points to a unique control block C0-FF wait-only calls, no complementary INT 15/AH=91h call floppy and hard disk BIOS code uses this call to implement a timeout; for device types 00h and 01h, a return of CF set means that the timeout expired before the disk responded. this function should be hooked by a multitasker to allow other tasks to execute while the BIOS is waiting for I/O completion; the default handler merely returns with AH=00h and CF clear SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h ----------1591------------------------------- INT 15 - OS HOOK - DEVICE POST (AT,PS) AH = 91h AL = device type (see AH=90h) ES:BX -> request block for type codes 80h through BFh CF clear Return: AH = 00h Note: this function should be hooked by a multitasker to allow other tasks to execute while the BIOS is waiting for I/O completion; the default handler merely returns with AH=00h and CF clear SeeAlso: AH=90h ----------15BC------------------------------- INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED AH = BCh Return: CF clear BYTE 0040h:00B0h set to ??? (43 on my 386/33) Note: reads system timer channel 0 twice, then does calculations on returned values ----------15BF00----------------------------- INT 15 - Rational Systems DOS/16M - ??? AX = BF00h ??? Return: ??? Note: under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h SeeAlso: AX=BF02h ----------15BF01----------------------------- INT 15 - Rational Systems DOS/16M - ??? AX = BF01h ??? Return: ??? Note: under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h SeeAlso: AX=BF02h ----------15BF02DX0000----------------------- INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK AX = BF02h DX = 0000h Return: DX = nonzero if installed DX:SI -> XBRK structure (see below) SeeAlso: AX=BFDEh/BX=0000h SeeAlso: INT 21/AX=FF00h,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h Format of XBRK structure: Offset Size Description 00h DWORD linear address of last available byte + 1 ??? ??? ----------15BFDEBX0000----------------------- INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK AX = BFDEh BX = 0000h Return: AX = ??? (0003h) BX = FFFFh SeeAlso: AX=BF02h ----------15BFDEBX0001----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET PROCESS MANAGER NAME AX = BFDEh BX = 0001h Return: BX = 0000h (success) CX:DX -> name of process manager executable SeeAlso: AX=BFDEh/BX=0000h ----------15BFDEBX0002----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ??? AX = BFDEh BX = 0002h CX:DX -> ??? Return: BX = 0000h (success) SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h ----------15BFDEBX0003----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? AX = BFDEh BX = 0003h Return: BX = 0000h (success) CX:DX -> ??? SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h ----------15BFDEBX0004----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? AX = BFDEh BX = 0004h Return: BX = 0000h (success) CX:DX -> ??? SeeAlso: AX=BFDEh/BX=0000h ----------15BFDEBX0005----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ??? AX = BFDEh BX = 0005h CX = new value for ??? Return: BX = 0000h (success) AX = old value of ??? DS:SI -> ??? (if AX nonzero on return) ES:DI -> ??? (if AX zero on return) SeeAlso: AX=BFDEh/BX=0000h ----------15BFDEBX0006----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? AX = BFDEh BX = 0006h Return: BX = 0000h (success) AH = interrupt number??? (BEh) CX:DX = ??? SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview" ----------15BFDEBX0007----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ??? AX = BFDEh BX = 0007h CX:DX = ??? Return: BX = 0000h (success) SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h ----------15BFDEBX0008----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ??? AX = BFDEh BX = 0008h CX = ??? DS = ??? Return: BX = status 0000h successful AL = ??? (80h or C0h) DX = ??? (0603h) if AL=C0h 0001h failed AX = 0000h SeeAlso: AX=BFDEh/BX=0000h ----------15BFDEBX0009----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER AX = BFDEh BX = 0009h Return: BX = 0000h (success) CX:DX -> full pathname to LOAD32.EXP SeeAlso: AX=BFDEh/BX=0000h ----------15BFDEBX000A----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - DECREMENT ??? AX = BFDEh BX = 000Ah Return: BX = 0000h (success) AX = new value of ??? counter Note: also resets a variety of values if the counter goes negative SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh ----------15BFDEBX000B----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - INCREMENT ??? AX = BFDEh BX = 000Bh Return: AX = new value of ??? counter SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah ----------15BFDEBX000C----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ??? AX = BFDEh BX = 000Ch CL = ??? 00h nonzero Return: ??? SeeAlso: AX=BFDEh/BX=0000h ----------15BFDEBX000D----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ??? AX = BFDEh BX = 000Dh ??? Return: ??? SeeAlso: AX=BFDEh/BX=0000h ----------15BFDEBX000E----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ??? AX = BFDEh BX = 000Eh DX:CX -> ??? Return: AX = segment of handle for calling task BX = ??? (probably destroyed) DX:CX -> ??? SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h ----------15BFDEBX000F----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ??? AX = BFDEh BX = 000Fh Return: AX = segment of handle for calling task BX = ??? (probably destroyed) DX:CX -> ??? Note: identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h ----------15BFDEBX0010----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET TASK HANDLE AX = BFDEh BX = 0010h Return: AX = segment of caller's task handle BX destroyed SeeAlso: AX=BFDEh/BX=000Fh ----------15BFDEBX0011----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? AX = BFDEh BX = 0011h Return: CX = code segment of DVDOS4GX.DVR BX = ??? (0004h) SeeAlso: AX=BFDEh/BX=0000h ----------15BFDEBX0012----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? AX = BFDEh BX = 0012h Return: DX = code segment of DVDOS4GX.DVR BX = ??? (012Ch) CX = ??? (0006h) SeeAlso: AX=BFDEh/BX=0000h ----------15BFDEBX0013----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? AX = BFDEh BX = 0013h Return: DX:CX -> ??? SeeAlso: AX=BFDEh/BX=000Eh ----------15BFDEBX0014----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - LOCK ??? MAILBOX AX = BFDEh BX = 0014h CX = index of ??? mailbox (0000h-0004h valid, but no range checking done) Return: AX,BX destroyed SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h ----------15BFDEBX0015----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - UNLOCK ??? MAILBOX AX = BFDEh BX = 0015h CX = index of ??? mailbox (0000h-0004h valid, but no range checking done) Return: AX,BX destroyed SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h ----------15BFDEBX0016----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED AX = BFDEh BX = 0016h CX = index of ??? mailbox (0000h-0004h valid, but no range checking done) Return: AX = status 0000h no one owns mailbox 0001h mailbox has an owner BX destroyed SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h ----------15BFDEBX0017----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? MAILBOX OWNER AX = BFDEh BX = 0017h CX = index of ??? mailbox (0000h-0004h valid, but no range checking done) Return: AX = segment of mailbox owner's handle BX = segment of caller's task handle SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h ----------15BFDEBXFFFD----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? AX = BFDEh BX = FFFDh Return: CX:DX = ??? SeeAlso: AX=BFDEh/BX=FFFEh ----------15BFDEBXFFFE----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ??? AX = BFDEh BX = FFFEh CX:DX = ??? SeeAlso: AX=BFDEh/BX=FFFDh ----------15BFDEBXFFFF----------------------- INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - NOP AX = BFDEh BX = FFFFh SeeAlso: AX=BFDEh/BX=0000h ----------15C0------------------------------- INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS) AH = C0h Return: CF set if BIOS doesn't support call CF clear on success ES:BX -> ROM table (see below) AH = status 00h successful 86h unsupported function Notes: the 1/10/86 XT BIOS returns an incorrect value for the feature byte the configuration table is at F000h:E6F5h in 100% compatible BIOSes Dell machines contain the signature "DELL" or "Dell" at absolute FE076h and a model byte at absolute address FE845h Tandy 1000 machines contain 21h in the byte at F000h:C000h some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte past the end of the configuration table Format of ROM configuration table: Offset Size Description 00h WORD number of bytes following 02h BYTE model (see below) 03h BYTE submodel (see below) 04h BYTE BIOS revision: 0 for first release, 1 for 2nd, etc. 05h BYTE feature byte 1: bit 7 = DMA channel 3 used by hard disk BIOS bit 6 = 2nd 8259 installed bit 5 = Real-Time Clock installed bit 4 = INT 15/AH=4Fh called upon INT 9h bit 3 = wait for external event supported bit 2 = extended BIOS area allocated (usually at top of RAM) bit 1 = bus is Micro Channel instead of ISA bit 0 reserved 06h BYTE feature byte 2: bit 7 = ??? bit 6 = INT 16/AH=09h (keyboard functionality) supported bits 5-0 = ??? 07h BYTE feature byte 3: reserved (0) 08h BYTE feature byte 4: reserved (0) 09h BYTE feature byte 5: reserved (0) (IBM) ??? (08h) (Phoenix 386 v1.10) ---AWARD BIOS--- 0Ah N BYTEs AWARD copyright notice ---Phoenix BIOS--- 0Ah BYTE ??? (00h) 0Bh BYTE major version 0Ch BYTE minor version (BCD) 0Dh 4 BYTEs ASCIZ string "PTL" (Phoenix Technologies Ltd) Values for model/submodel/revision: Model Submdl Rev BIOS date System FFh * * 04/24/81 PC (original) FFh * * 10/19/81 PC (some bugfixes) FFh * * 10/27/82 PC (HD, 640K, EGA support) FFh 46h *** ??? Olivetti M15 FEh * * 08/16/82 PC XT FEh * * 11/08/82 PC XT and Portable FEh 43h *** ??? Olivetti M240 FEh A6h ??? ??? ??? (checked for by 386MAX v6.01) FDh * * 06/01/83 PCjr FCh * * 01/10/84 AT models 068,099 6 MHz 20MB FCh 00h 01h 06/10/85 AT model 239 6 MHz 30MB FCh 00h <> 01h ??? 7531/2 Industrial AT FCh 01h 00h 11/15/85 AT models 319,339 8 MHz, Enh Keyb, 3.5" FCh 01h 00h 09/17/87 Tandy 3000 FCh 01h 00h 01/15&88 Toshiba T5200/100 FCh 01h 00h 12/26*89 Toshiba T1200/XE (Those date characters are not typos) FCh 01h 30h ??? Tandy 3000NL FCh 01h ??? ??? Compaq 286/386 FCh 02h 00h 04/21/86 PC XT-286 FCh 04h 00h 02/13/87 ** PS/2 Model 50 (10 MHz/1 ws 286) FCh 04h 03h 04/18/88 PS/2 Model 50Z (10 MHz/0 ws 286) FCh 05h 00h 02/13/87 ** PS/2 Model 60 (10 MHz 286) FCh 06h ??? ??? 7552 "Gearbox" FCh 08h *** ??? Epson, unknown model FCh 09h 00h ??? PS/2 Model 25 (10 MHz 286) FCh 09h 02h 06/28/89 PS/2 Model 30-286 FCh 0Bh 00h 02/16/90 PS/1 Model 2011 (10 MHz 286) FCh 30h *** ??? Epson, unknown model FCh 31h *** ??? Epson, unknown model FCh 33h *** ??? Epson, unknown model FCh 42h *** ??? Olivetti M280 FCh 45h *** ??? Olivetti M380 (XP 1, XP3, XP 5) FCh 48h *** ??? Olivetti M290 FCh 4Fh *** ??? Olivetti M250 FCh 50h *** ??? Olivetti M380 (XP 7) FCh 51h *** ??? Olivetti PCS286 FCh 52h *** ??? Olivetti M300 FCh 81h 00h 01/15/88 Phoenix 386 BIOS v1.10 10a FBh 00h 01h 01/10/86 PC XT, Enh Keyb, 3.5" support FBh 00h 02h 05/09/86 PC XT FBh 4Ch *** ??? Olivetti M200 FAh 00h 00h 09/02/86 PS/2 Model 30 (8 MHz 8086) FAh 00h 01h 12/12/86 PS/2 Model 30 FAh 01h 00h ??? PS/2 Model 25/25L (8 MHz 8086) FAh 4Eh *** ??? Olivetti M111 F9h 00h 00h 09/13/85 PC Convertible F8h 00h 00h 03/30/87 ** PS/2 Model 80 (16MHz 386) F8h 01h 00h 10/07/87 PS/2 Model 80 (20MHz 386) F8h 04h 02h 04/11/88 PS/2 Model 70 20MHz, type 2 system brd F8h 04h 03h 03/17/89 PS/2 Model 70 20MHz, type 2 system brd F8h 09h 00h ??? PS/2 Model 70 16MHz, type 1 system brd F8h 09h 02h 04/11/88 PS/2 Model 70 some models F8h 09h 03h 03/17/89 PS/2 Model 70 some models F8h 0Bh 00h 01/18/89 PS/2 Model P70 (8573-121) typ 2 sys brd F8h 0Bh 02h 12/16/89 PS/2 Model P70 ?? F8h 0Ch 00h 11/02/88 PS/2 Model 55SX (16 MHz 386SX) F8h 0Dh 00h ??? PS/2 Model 70 25MHz, type 3 system brd F8h 11h 00h 10/01/90 PS/2 Model 90 (25 MHz 486) F8h 13h 00h 10/01/90 PS/2 Model 90 (33 MHz 486) F8h 14h 00h 10/01/90 PS/2 Model 90-AK9 (25 MHz 486) F8h 16h 00h 10/01/90 PS/2 Model 90-AKD (33 MHz 486) F8h 19h 05h ??? PS/2 Model 35/35LS or 40 (20 MHz 386SX) F8h 1Bh 00h 10/02/89 PS/2 Model 70-486 (25 MHz 486) F8h 1Ch 00h 02/08/90 PS/2 Model 65-121 (16 MHz 386SX) F8h 1Eh 00h 02/08/90 PS/2 Model 55LS (16 MHz 386SX) F8h 23h 01h ??? PS/2 Model L40 (20 MHz 386SX) F8h 25h 06h ??? PS/2 Model M57 (20 MHz 386SLC) F8h 26h 01h ??? PS/2 Model 57 (20 MHz 386SX) F8h 2Ah 00h ??? PS/2 Model 95 (50 MHz 486) F8h 2Bh 00h ??? PS/2 Model 90 (50 MHz 486) F8h 2Ch 01h ??? PS/2 Model 95 (20 MHz 486SX) F8h 2Dh 00h ??? PS/2 Model 90 (20 MHz 486SX) F8h 2Eh 01h ??? PS/2 Model 95 (20 MHz 486SX + 487SX) F8h 2Fh 00h ??? PS/2 Model 90 (20 MHz 486SX + 487SX) F8h 30h 00h ??? PS/1 Model 2121 (16 MHz 386SX) F8h 50h 00h ??? PS/2 Model P70 (8573) (16 MHz 386) F8h 50h 01h 12/16/89 PS/2 Model P70 (8570-031) F8h 52h 00h ??? PS/2 Model P75 (33 MHz 486) F8h 61h *** ??? Olivetti P500 F8h 62h *** ??? Olivetti P800 F8h 80h 00h ??? PS/2 Model 80 (25 MHz 386) F8h 80h 01h 11/21/89 PS/2 Model 80-A21 F8h ??? ??? ??? PS/2 Model 90 (25 MHz 486SX) F8h ??? ??? ??? PS/2 Model 95 (25 MHz 486SX) F8h ??? ??? ??? PS/2 Model 90 (25 MHz 486SX + 487SX) F8h ??? ??? ??? PS/2 Model 95 (25 MHz 486SX + 487SX) 9Ah * * ??? Compaq XT/Compaq Plus 30h ??? ??? ??? Sperry PC 2Dh * * ??? Compaq PC/Compaq Deskpro ??? 56h ??? ??? Olivetti, unknown model ??? 74h ??? ??? Olivetti, unknown model * This BIOS call is not implemented in these early versions. Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h. ** These BIOS versions require the DASDDRVR.SYS patches. *** These Olivetti and Epson machines store the submodel in the byte at F000h:FFFDh. Values for Dell model byte: 02h Dell 200 03h Dell 300 05h Dell 220 06h Dell 310 07h Dell 325 09h Dell 310A 0Ah Dell 316 0Bh Dell 220E 0Ch Dell 210 0Dh Dell 316SX 0Eh Dell 316LT 0Fh Dell 320LX 11h Dell 425E ----------15C1------------------------------- INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS) AH = C1h Return: CF set on error CF clear if successful ES = segment of data area SeeAlso: AH=04h"ABIOS" ----------15C200BH00------------------------- INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE AX = C200h BH = 00h disable 01h enable Return: CF set on error AH = status 00h successful 01h invalid function 02h invalid input 03h interface error 04h need to resend 05h no device handler installed ----------15C201----------------------------- INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET AX = C201h Return: CF set on error AH = status (see AX=C200h) CF clear if successful BH = device ID SeeAlso: INT 33/AX=0000h ----------15C202----------------------------- INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE AX = C202h BH = sampling rate 00h 10/second 01h 20/second 02h 40/second 03h 60/second 04h 80/second 05h 100/second 06h 200/second Return: CF set on error AH = status (see AX=C200h) SeeAlso: INT 33/AX=001Ch ----------15C203----------------------------- INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION AX = C203h BH = resolution 00h one count per mm 01h two counts per mm 02h four counts per mm 03h eight counts per mm Return: CF set on error AH = status (see AX=C200h) ----------15C204----------------------------- INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE AX = C204h Return: CF set on error AH = status (see AX=C200h) CF clear if successful BH = device ID ----------15C205----------------------------- INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE AX = C205h BH = data package size (1 - 8 bytes) Return: CF set on error AH = status (see AX=C200h) SeeAlso: AX=C201h ----------15C206----------------------------- INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET/SET SCALING FACTOR AX = C206h BH = subfunction 00h return device status Return: BL = status bit 0: right button pressed bit 1: reserved bit 2: left button pressed bit 3: reserved bit 4: 0 if 1:1 scaling, 1 if 2:1 scaling bit 5: device enabled bit 6: 0 if stream mode, 1 if remote mode bit 7: reserved CL = resolution (see AX=C203h) DL = sample rate, reports per second 01h set scaling at 1:1 02h set scaling at 2:1 Return: CF set on error AH = status (see AX=C200h) ----------15C207----------------------------- INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR AX = C207h ES:BX -> FAR user device handler Return: CF set on error AH = status (see AX=C200h) SeeAlso: INT 33/AX=000Ch ----------15C3------------------------------ INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+) AH = C3h AL = 00h disable 01h enable BX = timer counter Return: CF set on error CF clear if successful Note: the watchdog timer generates an NMI ----------15C4------------------------------- INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+) AH = C4h AL = 00h return base POS register address 01h enable slot BL = slot number 02h enable adapter Return: CF set on error DX = base POS register address (if function 00h) ----------15C5------------------------------- INT 15 U - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95) AH = C5h AL = interrupt being invoked 01h INT 19 02h INT 14 03h INT 16 04h INT 40 (floppy INT 13) 05h INT 17 06h INT 10 07h INT 12 08h INT 11 09h INT 1A Return: all registers except AX must be preserved Notes: called as the very first action of the indicated ROM BIOS interrupt handlers on the PS/2 Models 30/286, 50Z, and 95 default handler does nothing and returns CF clear for the above subfunctions, CF set and AH=86h for all other subfunctions value of AX passed to the original interrupt handler is pushed on stack immediately prior to call ----------15C6------------------------------- INT 15 U - PS/2 Model 95 - ??? AH = C6h ??? Return: ??? ----------15C7------------------------------- INT 15 U - PS/2 Model 95 - ??? AH = C7h ??? Return: ??? ----------15C8------------------------------- INT 15 U - PS/2 Model 95 - ??? AH = C8h ??? Return: ??? ----------15C9------------------------------- INT 15 U - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION AH = C9h AL = 10h (may be required on some non-PS BIOSes) Return: AH = 00h CH = CPU type 03h 80386 04h 80486 CL = mask revision 23h 386SX Notes: the BIOS must save DX at startup in order to be able to support this call; PS/2 Models 56, 57, 90, and 95 are known to support it the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev) ----------15CA------------------------------- INT 15 U - PS/2 Model 95 - ??? AH = CAh ??? Return: ??? ----------15CB------------------------------- INT 15 U - PS/2 Model 95 - ??? AH = CBh ??? Return: ??? ----------15CC------------------------------- INT 15 U - PS/2 Model 95 - ??? AH = CCh ??? Return: ??? ----------15CD------------------------------- INT 15 U - PS/2 Model 95 - ??? AH = CDh ??? Return: ??? ----------15CE------------------------------- INT 15 U - PS/2 Model 95 - ??? AH = CEh ??? Return: ??? ----------15CF------------------------------- INT 15 U - PS/2 Model 95 - ??? AH = CFh ??? Return: ??? ----------15D800----------------------------- INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION AX = D800h CL = slot number (including embedded and virtual) Return: CF clear if successful AH = 00h CF set on error AH = error code 80h invalid slot number 82h EISA CMOS corrupt 83h empty slot 86h invalid BIOS-FW function call 87h invalid system configuration AL bit flags bit 7: set if duplicate IDs 6: set if product ID readable 4,5: slot type (00=expansion, 01=embedded, 10=virtual device) 0-3: duplicate ID number if bit 7 set BH = major revision level of configuration utility BL = minor revision level of configuration utility CX = checksum of configuration file DH = number of device functions DL = combined function information byte SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3) Note: call with AL=80h if using 32-bit CS addressing mode instead of 16-bit SeeAlso: AX=D801h,AX=D804h ----------15D801----------------------------- INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION AX = D801h CH = function number to read CL = slot number (including embedded and virtual) DS:SI -> 320-byte buffer for standard configuration data block Return: CF clear if successful AH = 00h DS:SI buffer filled CF set on error AH = error code 80h invalid slot number 81h invalid function number 82h EISA CMOS corrupt 83h empty slot 86h invalid BIOS-FW function call 87h invalid system configuration BX destroyed Note: call with AL=81h if using 32-bit CS addressing mode instead of 16-bit ----------15D802----------------------------- INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS) AX = D802h BH = EISA config utility major revision level BL = EISA config utility minor revision level Return: CF clear if successful AH = 00h CF set on error AH = error code 84h error clearing CMOS 86h invalid BIOS-FW function call 88h config utility version not supported Note: call with AL=82h if using 32-bit CS addressing mode instead of 16-bit SeeAlso: AX=D803h ----------15D803----------------------------- INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY AX = D803h CX = length of data structure (0000h = empty slot) includes two bytes for config file checksum DS:SI -> configuration data Return: CF clear if successful AH = 00h CF set on error AH = error code 84h error clearing CMOS 85h EISA CMOS is full 86h invalid BIOS-FW function call Note: call with AL=83h if using 32-bit CS addressing mode instead of 16-bit SeeAlso: AX=D802h ----------15D804----------------------------- INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT AX = D804h CL = slot number (including embedded and virtual) Return: CF clear if successful AH = 00h CF set on error AH = error code 80h invalid slot number 83h empty slot 86h invalid BIOS-FW function call SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3) Note: call with AL=84h if using 32-bit CS addressing mode instead of 16-bit SeeAlso: AX=D800h ----------15D8------------------------------- INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS AH = D8h AL = 80h to 84h other registers as appropriate for AL=00h to 04h Return: as appropriate for AL=00h to 04h Note: these functions are identical to AX=D800h to D804h, except that they should be called when using 32-bit CS addressing mode (pointers use ESI rather than SI as offset) instead of 16-bit addressing mode SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h ----------15DE00----------------------------- INT 15 - DESQview - GET PROGRAM NAME AX = DE00h Return: AX = offset into DESQVIEW.DVO of program most recently selected from the "Switch Windows" menu (see below) Note: always returns AX=0000h under DESQview/X SeeAlso: AX=DE07h Format of program entry in DESQVIEW.DVO: Offset Size Description 00h BYTE length of name (FFh if end of file) 01h N BYTEs name 2 BYTEs keys to invoke program (second = 00h if only one key used) BYTE program type 00h normal program 04h divider 80h Delete a Program 81h Change a Program WORD ??? apparently always 0000h ----------15DE01----------------------------- INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU AX = DE01h Return: nothing Notes: reads DESQVIEW.DVO, disables Open menu if file not in current directory NOP for DESQview/X ----------15DE02----------------------------- INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW AX = DE02h Return: nothing Note: this call is a NOP in DV 2.x SeeAlso: AX=DE03h ----------15DE03----------------------------- INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW AX = DE03h Return: AX = ??? for current window BX = ??? for current window Note: this call is a NOP in DV 2.x SeeAlso: AX=DE02h ----------15DE04----------------------------- INT 15 - DESQview - GET AVAILABLE COMMON MEMORY AX = DE04h Return: BX = bytes of common memory available CX = largest block available DX = total common memory in bytes SeeAlso: AX=DE05h,AX=DE06h ----------15DE05----------------------------- INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY AX = DE05h Return: BX = K of memory available CX = largest block available DX = total conventional memory in K SeeAlso: AX=DE04h,AX=DE06h ----------15DE06----------------------------- INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY AX = DE06h Return: BX = K of expanded memory available CX = largest block available DX = total expanded memory in K SeeAlso: AX=DE04h,AX=DE05h ----------15DE07----------------------------- INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER AX = DE07h Return: AX = number of program as it appears on the "Switch Windows" menu Note: this API call may be made from a hardware interrupt handler SeeAlso: AX=DE00h ----------15DE08----------------------------- INT 15 - DESQview - GET ??? AX = DE08h Return: AX = 0000h if ??? is not set to the current task 0001h if ??? is set to the current task ----------15DE09----------------------------- INT 15 - DESQview - UNIMPLEMENTED AX = DE09h Return: nothing (NOP in DV 1.x and 2.x) ----------15DE0A----------------------------- INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE AX = DE0Ah BL = character Return: character displayed, next call will display in next position (which wraps back to the start of the line if off the right edge of screen) Notes: displays character on bottom line of *physical* screen, regardless of current size of window (even entirely hidden) does not know about graphics display modes, just pokes the characters into display memory this API call may be made from a hardware interrupt handler SeeAlso: AX=1003h ----------15DE0B----------------------------- INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED AX = DE0Bh BL = API level minor version number BH = API level major version number Return: AX = maximum API level (AH = major, AL = minor) Notes: if the requested API level is greater than the version of DESQview, a "You need a newer version" error window is popped up the API level defaults to 1.00, and is inherited by child tasks ----------15DE0C----------------------------- INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY AX = DE0Ch BX = number of bytes Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+) Note: use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient system memory SeeAlso: AX=1001h,AX=DE0Dh,AX=DE15h ----------15DE0D----------------------------- INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY AX = DE0Dh ES:DI -> previously allocated block Return: nothing SeeAlso: AX=1002h,AX=DE0Ch ----------15DE0E----------------------------- INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME AX = DE0Eh ES:DI -> name to find CX = length of name Return: BX = 0000h not found 0001h found DS:SI = object handle SeeAlso: AH=12h/BH=11h Special mailbox names: "COM1" ... "COM4" RBcomm using COM1 ... COM4 "DESQview/X Help Engine" "DESQview/X Network Server" "DESQview X Server0" "INBOX" DESQview/X LPD requests "OUTBOX" DESQview/X LPD responses "WAITBOX" semaphore to synchronize DESQview/X LPD communications ----------15DE0F----------------------------- INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS AX = DE0Fh Return: AX and BX destroyed (seems to be bug, weren't saved&restored) Notes: sends a manager stream with opcodes AEh, BDh, and BFh to task's window enables an additional mouse mode ----------15DE10----------------------------- INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM AX = DE10h BH = scan code BL = character Return: nothing Notes: a later read will get the keystroke as if it had been typed by the user multiple pushes are read last-in first-out if a script exists for the pushed key in the current application, the script will be executed early copies of DV 2.00 destroy AX, BX, ES, and DI SeeAlso: INT 16/AH=05h ----------15DE11BL00------------------------- INT 15 - DESQview 2.00+ - "JUSTIFY" - EN/DISABLE AUTOMATIC WINDOW JUSTIFICATION AX = DE11h BL = 00h viewport will not move automatically nonzero viewport will move to keep cursor visible (default) Return: nothing ----------15DE12BX0000----------------------- INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET AX = DE12h BX = 0000h select normal style (linefeed only moves down) nonzero select C style (linefeed moves to start of next line) Return: nothing Note: set on a per-task basis, and inherited from the parent task ----------15DE13----------------------------- INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT AX = DE13h Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch) without matching ENDC (see INT 15/AX=101Ch) Note: this API call may be made from within a hardware interrupt handler SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch ----------15DE14----------------------------- INT 15 - DESQview v2.20+ - GET OBJECT TYPE AX = DE14h ES:DI -> object Return: BL = 00h not an object 08h window or task 09h mailbox 0Ah keyboard 0Bh timer 0Ch objectq 0Fh pointer 10h panel SeeAlso: AX=1016h ----------15DE15BL00------------------------- INT 15 - DESQview v2.20+ - SET ERROR HANDLING AX = DE15h BL = 00h post system error on all error conditions 01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE messages sent to mailboxes which fail due to lack of system or common memory 02h (v2.26+) same as 01h, but return null pointer for GETMEM calls which fail due to lack of system memory Return: nothing SeeAlso: AX=DE16h ----------15DE16----------------------------- INT 15 - DESQview v2.20+ - GET ERROR HANDLING AX = DE16h Return: BL = 00h always post system error 01h return carry flag set on failed mailbox writes 02h return CF set on failed mailbox writes and NULL on failed GETMEM calls SeeAlso: AX=DE15h ----------15DE17----------------------------- INT 15 - DESQview v2.20-2.25 - reserved AX = DE17h Return: pops up "Programming error" window Note: AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25 SeeAlso: AX=1117h ----------15DE17BX0000----------------------- INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT AX = DE17h BX = 0000h get current mapping context without setting nonzero set new mapping context Return: BX = mapping context in effect before call Notes: mapping contexts determine conventional-memory addressability; setting a mapping context ensures that the associated program and data areas are in memory for access. Usable by drivers, TSRs and shared programs. caller need not be running under DESQview this API call may be made from a hardware interrupt handler SeeAlso: AX=1117h,INT 2F/AX=1685h ----------15DE18----------------------------- INT 15 - DESQview v2.20+ - internal - ??? AX = DE18h BP = function number high byte must be 10h low byte is function 00h set ??? BL = ??? (00h-10h, video mode???) BH = value to store 03h set ??? BL = ??? (stored in driver) 0Ah get ??? ES:DI -> 18-byte buffer to hold ??? Note: calls video driver (NOP for Hercules driver,probably CGA and MCGA also) ----------15DE19----------------------------- INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY AX = DE19h BX = number of bytes to allocate Return: AX = 0000h successful ES:DI -> allocated block nonzero insufficient memory Note: this API call may be made from within a hardware interrupt handler SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah ----------15DE1A----------------------------- INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY AX = DE1Ah DS:SI -> previously allocated block Note: this function may be called from within a hardware interrupt handler SeeAlso: AX=DE0Dh,AX=DE19h ----------15DE1B----------------------------- INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT AX = DE1Bh Return: nothing SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch ----------15DE1C----------------------------- INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT AX = DE1Ch Return: nothing Notes: similar to AX=101Bh, but begins the critical region without ensuring that DOS is free the official documentation states that this call should be paired with "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh this API call may be made from within a hardware interrupt handler SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh ----------15DE1D----------------------------- INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES AX = DE1Dh DX = segment of handle for task to receive keystroke BL = character BH = scan code Return: AX = 0000h if successful nonzero if receiver's keyboard buffer was full Notes: the key is treated as though the user had pressed it, ignoring any script which may be bound to the key, and using the current field table if the keyboard object is in field processing mode multiple PUTKEYs are seen in the order in which they are executed SeeAlso: AX=DE10h ----------15DE1E----------------------------- INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS AX = DE1Eh Return: CL = actual number of rows on screen CH = actual number of columns on screen BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+) Note: this API call may be made from a hardware interrupt handler SeeAlso: INT 10/AH=0Fh ----------15DE1F----------------------------- INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS AX = DE1Fh Return: BX = segment of task handle or 0000h if no tasks are using DOS Note: this API call may be made from within a hardware interrupt handler SeeAlso: AX=DE13h ----------15DE20----------------------------- INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK AX = DE20h BX = segment of handle of task to interupt DX:CX -> FAR interrupt routine Return: nothing Notes: unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task making the DISPATCHINT call multiple "DISPATCHINT" calls are processed in the order in which they were executed the FAR routine is entered with the current ES, DS, SI, DI, and BP values, using the task's internal stack (see AX=101Ah); only SS:SP needs to be preserved this API call may be made from within a hardware interrupt handler SeeAlso: AX=1021h ----------15DE21BX0000----------------------- INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION AX = DE21h BX = 0000h turn off nonzero turn on Return: BX = old state of virtualization Note: this API call may be made from within a hardware interrupt handler ----------15DE22----------------------------- INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS AX = DE22h DX = segment of task handle Return: DX = total amount of memory in paragraphs BX = amount of system memory in paragraphs CX = largest block of system memory available in paragraphs AX = flags bit 0: system memory resides in shared memory 1: process's memory is swapped out 2: process's system memory is swapped out Notes: if the task handle is a child task, the returned values will be for the process containing the task, rather than the task itself if the process's system memory is swapped out, BX,CX,DX remain unchanged, because the memory usage cannot be determined SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h ----------15DE23----------------------------- INT 15 - DESQview v2.31+ - ??? AX = DE23h BX = ??? IRQ number on first PIC? CX = ??? IRQ number on second PIC? Return: ??? Note: called by QEMM 6.00+ ----------15DE24----------------------------- INT 15 - DESQview v2.40+ - ??? AX = DE24h Return: BX = ??? (0000h for v2.40) ----------15DE25----------------------------- INT 15 - DESQview v2.40+ - ??? AX = DE25h ??? Return: nothing ----------15DE26----------------------------- INT 15 - DESQview v2.40+ - GET ??? AX = DE26h Return: BX = segment of handle for X server??? ----------15DE27----------------------------- INT 15 - DESQview v2.50+ - ??? AX = DE27h BX = ??? (0000h,0001h) ES:DI -> ??? Return: CF clear if successful AX = ??? BX = ??? CF set on error AX = ??? Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ----------15DE28----------------------------- INT 15 - DESQview v2.50+ - ??? AX = DE28h BX = segment of ??? or 0000h for default ??? Return: ??? Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: AX=DE2Ah ----------15DE29BX0000----------------------- INT 15 - DESQview v2.50+ - ??? AX = DE29h BX = 0000h ??? Return: CF clear if successful ??? CF set on error Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ----------15DE29BX0001----------------------- INT 15 - DESQview v2.50+ - ??? AX = DE29h BX = 0001h DX = segment of window handle Return: CF clear if successful AX = ??? DX = ??? CF set on error Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ----------15DE29BX0002----------------------- INT 15 - DESQview v2.50+ - ??? AX = DE29h BX = 0002h DX = segment of window handle Return: CF clear if successful AX = ??? DX = ??? CF set on error Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ----------15DE29BX0003----------------------- INT 15 - DESQview v2.50+ - ??? AX = DE29h BX = 0003h DX = segment of window handle Return: CF clear if successful ??? CF set on error Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ----------15DE29BX0004----------------------- INT 15 - DESQview v2.50+ - GET DISPLAY NAME AX = DE29h BX = 0004h CX = size of buffer in bytes DX = segment of window handle ES:DI -> buffer for display name Return: CF clear if successful buffer filled with ASCIZ display name (truncated if necessary) or null string if no display CF set on error Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. the name ":0" refers to the local display ----------15DE29BX0005----------------------- INT 15 - DESQview v2.50+ - ??? AX = DE29h BX = 0005h ??? Return: CF clear if successful ??? CF set on error Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ----------15DE2A----------------------------- INT 15 - DESQview v2.50+ - ??? AX = DE2Ah BX = segment of ??? or 0000h for default ??? Return: ??? Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: AX=DE28h,AX=DE2Bh ----------15DE2B----------------------------- INT 15 - DESQview v2.50+ - TRAVERSE OBJECT LIST AX = DE2Bh ES:DI -> object Return: AX = status 0000h successful ES:DI -> next object of same type in circular linked list 0001h failed (ES:DI was not a valid handle) Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch ----------15DE2C----------------------------- INT 15 - DESQview v2.50+ - GET WINDOW INFORMATION??? AX = DE2Ch DX = 0100h BX = segment of window handle or 0000h for default ES:DI -> buffer for info (see below) Return: AX = status??? 0000h successful Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: AX=DE2Bh Format of window information: Offset Size Description 00h BYTE task flag: 00h window, 01h task 01h BYTE process number if task 02h WORD segment of owner's handle 04h WORD mapping context??? 06h BYTE status 00h waiting 01h idle 04h pausing 0Ah slicing 0Bh exit DOS 07h BYTE ??? 08h BYTE 01h if DESQview task??? 09h 2 BYTEs ??? ----------15DE2D----------------------------- INT 15 - DESQview v2.50+ - GET/SET ??? FUNCTION AX = DE2Dh CX = direction FFFFh set ??? function DX:BX -> FAR function for ??? must contain data storage for a WORD three bytes past the function entry point and a DWORD five bytes past the start other get ??? function Return: DX:BX -> function if CX<>FFFFh on entry Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: AX=DE2Eh,INT 63"DESQview" ----------15DE2E----------------------------- INT 15 - DESQview v2.50+ - ??? AX = DE2Eh DX:BX = ??? or 0000h:0000h for default Return: CX = ??? DX:BX = ??? Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: AX=DE2Dh --------------------------------------------- INT 15 - DESQview v2.50+ - ??? AX = DE2Fh Return: BL = ??? (00h,01h) Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ----------15DE30----------------------------- INT 15 - DESQview v2.50+ - GET DESQview/X VERSION AX = DE30h Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: INT 21/AH=2Bh/CX=4445h ----------15E00F----------------------------- INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH AX = E00Fh ES:BX -> start of 2nd processor's execution Return: AL = 0Fh successful = 00h failure SeeAlso: AX=E10Eh,AX=E200h ----------15E10E----------------------------- INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH AX = E10Eh ES:BX -> start of 2nd processor's execution Return: AL = 0Fh successful (halted) = 00h failure (not halted) SeeAlso: AX=E00Fh,AX=E200h ----------15E200----------------------------- INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE AX = E200h Return: AX = 8000h if 2nd processor available SeeAlso: AX=E00Fh,AX=E10Eh ----------15E4------------------------------- INT 15 - ??? AH = E4h AL = subfunction 21h, 89h, 8Ah, 8Bh called by 386MAX v6.01 DL = ??? Return: ??? ----------15F200CX454D----------------------- INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALISATION CHECK ??? AX = F200h CX = 454Dh Return: CF clear if hardware already initialised BX = upper RAM areas in use bit 0: C000-C3FF bit 1: C400-C7FF ... bit 11: EC00-EFFF CF set if hardware not initialised yet ----------1600------------------------------- INT 16 - KEYBOARD - GET KEYSTROKE AH = 00h Return: AH = BIOS scan code AL = ASCII character Notes: on extended keyboards, this function discards any extended keystrokes, returning only when a non-extended keystroke is available the BIOS scan code is usually, but not always, the same as the hardware scan code processed by INT 09. It is the same for ASCII keystrokes and most unshifted special keys (F-keys, arrow keys, etc.), but differs for shifted special keys. SeeAlso: AH=01h,AH=05h,AH=10h,AH=20h,INT 18/AH=00h ----------1601------------------------------- INT 16 - KEYBOARD - CHECK FOR KEYSTROKE AH = 01h Return: ZF set if no keystroke available ZF clear if keystroke available AH = BIOS scan code AL = ASCII character Note: if a keystroke is present, it is not removed from the keyboard buffer; however, any extended keystrokes which are not compatible with 83/84- key keyboards are removed in the process of checking whether a non-extended keystroke is available SeeAlso: AH=00h,AH=11h,AH=21h,INT 18/AH=01h ----------1602------------------------------- INT 16 - KEYBOARD - GET SHIFT FLAGS AH = 02h Return: AL = shift flags bit 7: Insert active 6: CapsLock active 5: NumLock active 4: ScrollLock active 3: Alt key pressed (either Alt on 101/102-key keyboards) 2: Ctrl key pressed (either Ctrl on 101/102-key keyboards) 1: left shift key pressed 0: right shift key pressed SeeAlso: AH=12h,AH=22h,INT 18/AH=02h ----------1603------------------------------- INT 16 - KEYBOARD - SET TYPEMATIC RATE AND DELAY AH = 03h AL = subfunction 00h set default delay and rate (PCjr and some PS/2) 01h increase delay before repeat (PCjr) 02h decrease repeat rate by factor of 2 (PCjr) 03h increase delay and decrease repeat rate (PCjr) 04h turn off typematic repeat (PCjr and some PS/2) 05h set repeat rate and delay (AT,PS) BH = delay value (00h = 250ms to 03h = 1000ms) BL = repeat rate (00h=30/sec to 0Ch=10/sec [def] to 1Fh=2/sec) 06h get current typematic rate and delay (newer PS/2s) Return: BL = repeat rate (see above) BH = delay (see above) Note: use INT 16/AH=09h to determine whether some of the subfunctions are supported SeeAlso: INT 16/AH=09h ----------1604------------------------------- INT 16 - KEYBOARD - SET KEYCLICK (PCjr only) AH = 04h AL = keyclick state 00h off 01h on SeeAlso: AH=03h ----------1605------------------------------- INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only) AH = 05h CH = scan code CL = ASCII character Return: AL = 00h if successful 01h if keyboard buffer full Note: under DESQview, the following "keystrokes" invoke the following actions when they are read from the keyboard buffer: 38FBh or FB00h switch to next window (only if main menu popped up) 38FCh or FC00h pop up DESQview main menu 38FEh or FE00h close the current window 38FFh or FF00h pop up DESQview learn menu SeeAlso: AH=00h,AH=71h,AH=FFh,INT 15/AX=DE10h ----------1605------------------------------- INT 16 - KEYBOARD - SELECT KEYBOARD LAYOUT (PCjr only) AH = 05h AL = function 01h set keyboard layout to French 02h set keyboard layout to German 03h set keyboard layout to Italian 04h set keyboard layout to Spanish 05h set keyboard layout to UK 80h check if function supported Return: AL <> 80h if supported Return: ??? Note: called by DOS 3.2 KEYBxx.COM SeeAlso: AH=92h,AH=A2h ----------1609------------------------------- INT 16 - KEYBOARD - GET KEYBOARD FUNCTIONALITY AH = 09h Return: AL = keyboard functions supported bit 7: reserved bit 6: bit 5: bit 4: INT 16/AH=0Ah supported bit 3: INT 16/AX=0306h supported bit 2: INT 16/AX=0305h supported bit 1: INT 16/AX=0304h supported bit 0: INT 16/AX=0300h supported Note: this function is only available if bit 6 of the second feature byte returned by INT 15/AH=C0h is set SeeAlso: AH=03h,AH=0Ah,INT 15/AH=C0h ----------160A------------------------------- INT 16 - KEYBOARD - GET KEYBOARD ID AH = 0Ah Return: BX = keyboard ID Note: check return value from AH=09h to determine whether this function is supported SeeAlso: AH=09h ----------1610------------------------------- INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (enhanced kbd support only) AH = 10h Return: AH = BIOS scan code AL = ASCII character Notes: if no keystroke is available, this function waits until one is placed in the keyboard buffer the BIOS scan code is usually, but not always, the same as the hardware scan code processed by INT 09. It is the same for ASCII keystrokes and most unshifted special keys (F-keys, arrow keys, etc.), but differs for shifted special keys. unlike AH=00h, this function does not discard extended keystrokes SeeAlso: AH=00h,AH=11h,AH=20h ----------1611------------------------------- INT 16 - KEYBOARD - CHECK FOR ENHANCED KEYSTROKE (enh kbd support only) AH = 11h Return: ZF set if no keystroke available ZF clear if keystroke available AH = BIOS scan code AL = ASCII character Notes: if a keystroke is available, it is not removed from the keyboard buffer unlike AH=01h, this function does not discard extended keystrokes SeeAlso: AH=01h,AH=10h,AH=21h ----------1612------------------------------- INT 16 - KEYBOARD - GET EXTENDED SHIFT STATES (enh kbd support only) AH = 12h Return: AL = shift flags 1 (same as returned by AH=02h) bit 7: Insert active 6: CapsLock active 5: NumLock active 4: ScrollLock active 3: Alt key pressed (either Alt on 101/102-key keyboards) 2: Ctrl key pressed (either Ctrl on 101/102-key keyboards) 1: left shift key pressed 0: right shift key pressed AH = shift flags 2 bit 7: SysRq key pressed 6: CapsLock pressed 5: NumLock pressed 4: ScrollLock pressed 3: right Alt key pressed 2: right Ctrl key pressed 1: left Alt key pressed 0: left Ctrl key pressed Notes: AL bit 3 set only for left Alt key on many machines AH bits 7 through 4 always clear on a Compaq SLT/286 SeeAlso: AH=02h,AH=22h,AH=51h ----------1620------------------------------- INT 16 - KEYBOARD - GET 122-KEY KEYSTROKE??? AH = 20h Return: ??? see AH=10h Note: use AH=09h to determine whether this function is supported SeeAlso: AH=00h,AH=10h,AH=21h ----------1621------------------------------- INT 16 - KEYBOARD - CHECK FOR 122-KEY KEYSTROKE??? AH = 21h Return: ??? see AH=11h Note: use AH=09h to determine whether this function is supported SeeAlso: AH=01h,AH=11h,AH=20h ----------1622------------------------------- INT 16 - KEYBOARD - GET 122-KEY SHIFT STATUS??? AH = 22h Return: ??? see AH=12h Note: use AH=09h to determine whether this function is supported SeeAlso: AH=02h,AH=12h ----------164252----------------------------- INT 16 - TEXTCAP 2.0 - INSTALLATION CHECK AX = 4252h Return: AX = 5242h if installed Note: TEXTCAP 2.0 is a heavily modified (by Gisbert W. Selke) version of the PC Magazine utility CAPTURE written by Tom Kihlken SeeAlso: AX=4253h,AX=4254h ----------164253----------------------------- INT 16 - TEXTCAP 2.0 - UNINSTALL AX = 4253h Return: AX = segment of resident code Notes: the uninstall code does not check whether interrupt vectors have been chained by other programs the caller must free the main memory block (using the returned segment) SeeAlso: AX=4252h,AX=4254h ----------164254----------------------------- INT 16 - TEXTCAP 2.0 - DUMP TEXT SCREEN TO FILE AX = 4254h Return: AX = status 4254h if screen dump will be written as soon as disk becomes idle 5442h if screen dump written SeeAlso: AX=4252h,AX=4253h ----------164500----------------------------- INT 16 - Shamrock Software EMAIL - GET STATUS AX = 4500h DL = port number (01h = COM1) ES:BX -> 13-byte buffer for ASCIZ name Return: AX = 4D00h if EMAIL installed on specified port ES:BX -> "" if no connection -> "*" if connection but caller has not identified name -> name otherwise CX = version (CH = major, CL = minor) DL = privilege level of user (00h = guest) DH = chosen language (00h German, 01h English) SeeAlso: AX=4501h,AX=4502h ----------164501----------------------------- INT 16 - Shamrock Software EMAIL - GET ELAPSED ONLINE TIME AND MAXIMUM TIME AX = 4501h DL = port number (01h = COM1) Return: AX = 4D00h if EMAIL installed on specified port BX = maximum connect time in clock ticks CX = maximum connect time for guests (without name) in clock ticks DX = elapsed connect time of current user in clock ticks SeeAlso: AX=4500h ----------164502----------------------------- INT 16 - Shamrock Software EMAIL - GET CURRENT COMMUNICATIONS PARAMETERS AX = 4502h DL = port number (01h = COM1) Return: AX = 4D00h if EMAIL installed on specified port BL = current value of serial port's Line Control Register BH = flags bit 0: ISO code 1: pause 2: linefeed 3: ANSI sequences CX = selected country code (33 = France, 49 = Germany, etc) DX = baudrate divisor (115200/DX = baudrate) SeeAlso: AX=4500h ----------164503----------------------------- INT 16 - Shamrock Software EMAIL - SPECIFY COMMAND-WORD FOR USER FUNCTION AX = 4503h DL = port number (01h = COM1) DH = maximum execution time in clock ticks (00h = 5 seconds) ES:BX -> ASCIZ string with new user command-word Return: AX = 4D00h if EMAIL installed on specified port Notes: a single user command (consisting of only uppercase letters and digits) may be defined, and remains valid until it is overwritten or the EMAIL program terminates; the user command must be activated by calling AX=4504h at least once. an existing command word may be redefined with this function SeeAlso: AX=4504h,AX=4505h ----------164504----------------------------- INT 16 - Shamrock Software EMAIL - CHECK FOR USER FUNCTION COMMAND-WORD AX = 4504h DL = port number (01h = COM1) ES:BX -> 80-byte buffer for ASCIZ user input line Return: AX = 4D00h if EMAIL installed on specified port DL = flags bit 0: user function supported (always set) 1: user entered user-function command word if DL bit 1 set, ES:BX buffer contains line entered by user which begins with the defined command word and has been converted to all caps Note: caller must process the returned commandline and invoke AX=4505h within five seconds with the result of that processing SeeAlso: AX=4503h,AX=4505h ----------164505----------------------------- INT 16 - Shamrock Software EMAIL - SEND RESULT OF USER FUNCTION AX = 4505h DL = port number (01h = COM1) DH = error flag bit 3: set on error ES:BX -> ASCIZ text to return to user, max 1024 bytes Return: AH = 4Dh if EMAIL installed on specified port AL = status 00h successful 02h unable to perform function (timeout, prev call not complete) other error Notes: if the error flag in DH is set, the string is not sent and an error message is generated instead; if this function is not called within five seconds of AX=4504h, EMAIL automatically generates an error message the string is copied into an internal buffer, allowing this function's caller to continue immediately SeeAlso: AX=4503h,AX=4504h,INT 17/AX=2400h ----------164506----------------------------- INT 16 - Shamrock Software EMAIL - MONITOR XMODEM DOWNLOAD AX = 4506h DL = port number (01h = COM1) ES:BX -> 13-byte buffer for ASCIZ filename Return: AX = 4D00h if EMAIL installed on specified port DH = Xmodem status 00h no XGET command given 01h XGET in progress 02h XGET completed successfully ES:BX buffer filled with last filename given to XGET command (without path) Note: DH=02h will only be returned once per XGET; subsequent calls will return DH=00h SeeAlso: AX=4500h,INT 17/AX=2408h ----------165000----------------------------- INT 16 - KEYBOARD - AX PC - SET KEYBOARD COUNTRY CODE AX = 5000h BX = country code 0001h USA (English), 0051h Japan Return: AL = status 00h successful 01h bad country code 02h other error SeeAlso: AX=5001h,INT 10/AX=5000h,INT 17/AX=5000h ----------165001----------------------------- INT 16 - KEYBOARD - AX PC - GET KEYBOARD COUNTRY CODE AX = 5001h Return: AL = status 00h successful BX = country code 02h error SeeAlso: AX=5000h,INT 10/AX=5001h,INT 17/AX=5001h ----------1651------------------------------- INT 16 - KEYBOARD - AX PC - READ SHIFT KEY STATUS AH = 51h Return: AL = standard shift key states (see AH=12h) AH = Kana lock (00h off, 01h on) SeeAlso: AH=02h,AH=12h,AH=22h ----------165500----------------------------- INT 16 - Microsoft Word internal - MICROSOFT WORD COOPERATION WITH TSR AX = 5500h Return: AX = 4D53h ('MS') if keyboard TSR present Notes: during startup, Microsoft Word tries to communicate with any TSRs that are present through this call. if the return is not 4D53h, Word installs its own INT 09 and INT 16 handlers; otherwise it assumes that the TSR will handle the keyboard SeeAlso: INT 1A/AX=3601h ----------1655FF----------------------------- INT 16 - Swap Utilities - ??? AX = 55FFh BX >= 0004h CX = function 0000h set ??? flag other clear ??? flag Note: present in SWAPSH and SWAPDT v1.77j, distributed with PC Tools 7 ----------166969BX6968----------------------- INT 16 - PC Tools v5.1+ BACKTALK - UNHOOK AX = 6969h BX = 6968h Return: resident code unhooked, but not removed from memory ----------166969BX6969----------------------- INT 16 - PC Tools v5.1+ BACKTALK - INSTALLATION CHECK AX = 6969h BX = 6969h DX = 0000h Return: DX nonzero if installed BX = CS of resident code DX = PSP segment of resident code DS:SI -> ASCIZ identification string "CPoint Talk" ----------166F00BX0000----------------------- INT 16 - HP Vectra - ??? - INSTALLATION CHECK AX = 6F00h BX = 0000h Return: BX = 4850h if present Note: called by recent MS Mouse drivers ----------166F0D----------------------------- INT 16 - HP Vectra - ??? AX = 6F0Dh ??? Return: ??? Note: called by MS Windows HPSYSTEM.DRV and HPEBIOS.386 SeeAlso: AX=6F0Eh ----------166F0E----------------------------- INT 16 - HP Vectra - ??? AX = 6F0Eh ??? Return: ??? Note: called by MS Windows HPSYSTEM.DRV and HPEBIOS.386 SeeAlso: AX=6F0Dh ----------1670------------------------------- INT 16 - FAKEY.COM - INSTALLATION CHECK AH = 70h Return: AX = 1954h if installed Note: FAKEY is a keystroke faking utility by System Enhancement Associates ----------1671------------------------------- INT 16 - FAKEY.COM - PUSH KEYSTROKES AH = 71h CX = number of keystrokes DS:SI -> array of words containing keystrokes to be returned by AH=00h Note: FAKEY is a keystroke faking utility by System Enhancement Associates SeeAlso: AH=05h,AH=72h ----------1672------------------------------- INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES AH = 72h Note: FAKEY is a keystroke faking utility by System Enhancement Associates SeeAlso: AH=71h ----------1673------------------------------- INT 16 - FAKEY.COM - PLAY TONES AH = 73h CX = number of tones to play DS:SI -> array of tones (see below) Note: FAKEY is a keystroke faking utility by System Enhancement Associates SeeAlso: INT 15/AX=1019h Format of tone array entries: Offset Size Description 00h WORD divisor for timer channel 2 02h WORD duration in clock ticks ----------1675------------------------------- INT 16 - pcANYWHERE III - SET TICK COUNT FOR SCANNING AH = 75h AL = number of ticks between checks for new screen changes ----------1676------------------------------- INT 16 - pcANYWHERE III - SET ERROR CHECKING TYPE AH = 76h AL = error checking type 00h none 01h fast 02h slow ----------1677------------------------------- INT 16 - pcANYWHERE III - LOG OFF AH = 77h AL = mode 00h wait for another call 01h leave in Memory Resident Mode 02h leave in Automatic Mode FFh leave in current operating mode ----------167761----------------------------- INT 16 - WATCH.COM v2.x-v3.0 - INSTALLATION CHECK AX = 7761h ('wa') Return: AX = 5741h ('WA') if installed Note: WATCH.COM is part of the "TSR" package by Kim Kokkonen SeeAlso: INT 21/AX=7761h ----------167788BX7789----------------------- INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK AX = 7788h BX = 7789h DS:SI -> signature "PUSHDIR VERSION 1.0" Return: AX = 7789h if installed and signature correct BX = 7788h SI destroyed ----------1679------------------------------- INT 16 - pcANYWHERE III - CHECK STATUS AH = 79h Return: AX = status FFFFh if resident and active FFFEh if resident but not active FFFDh if in Memory Resident mode FFFCh if in Automatic mode other value if not resident SeeAlso: AX=7B00h,INT 21/AX=2B44h ----------167A------------------------------- INT 16 - pcANYWHERE III - CANCEL SESSION AH = 7Ah ----------167B00----------------------------- INT 16 - pcANYWHERE III - SUSPEND AX = 7B00h SeeAlso: AH=79h,AX=7B01h ----------167B01----------------------------- INT 16 - pcANYWHERE III - RESUME AX = 7B01h SeeAlso: AH=79h,AX=7B00h ----------167C------------------------------- INT 16 - pcANYWHERE III - GET PORT CONFIGURATION AH = 7Ch Return: AH = port number AL = baud rate 00h = 50 baud 01h = 75 baud 02h = 110 baud 03h = 134.5 baud 04h = 150 baud 05h = 300 baud 06h = 600 baud 07h = 1200 baud 08h = 1800 baud 09h = 2000 baud 0Ah = 2400 baud 0Bh = 4800 baud 0Ch = 7200 baud 0Dh = 9600 baud 0Eh = 19200 baud ----------167D------------------------------- INT 16 - pcANYWHERE III - GET/SET TERMINAL PARAMETERS AH = 7Dh AL = subfunction 00h set terminal parameters 01h get terminal parameters 02h get configuration header and terminal parameters DS:CX -> terminal parameter block ----------167E------------------------------- INT 16 - pcANYWHERE III - COMMUNICATIONS I/O THROUGH PORT AH = 7Eh AL = subfunction 01h port input status Return AX = 0 if no characer ready, AX = 1 if character ready 02h port input character Return AL = received character 03h port output character in CX 11h hang up phone ----------167F------------------------------- INT 16 - pcANYWHERE III - SET KEYBOARD/SCREEN MODE AH = 7Fh AL = subfunction 00h enable remote keyboard only 01h enable host keyboard only 02h enable both keyboards 08h display top 24 lines 09h display bottom 24 lines 10h Hayes modem 11h other modem 12h direct connect ----------1680------------------------------- INT 16 - MAKEY.COM - INSTALLATION CHECK AH = 80h Return: AX = 1954h if installed Note: MAKEY is a utility by System Enhancement Associates ----------168765BX4321----------------------- INT 16 - AT.COM version 8/26/87 - API AX = 8765h BX = 4321h CX = ??? or FFFFh if CX = FFFFh DX = number of event to remove or FFFFh Return: ES:BX -> event record array Note: AT.COM is a resident scheduler by Bill Frolik Format of event record: Offset Size Description 00h BYTE in-use flag (00h free, 01h in use, FFh end of array) 01h BYTE day of date on which to trigger 02h BYTE month of date on which to trigger 03h BYTE trigger time, minute 04h BYTE trigger time, hour 05h WORD offset of command to be executed ----------1692------------------------------- INT 16 - ??? AH = 92h Return: AH <= 80h if ??? Note: called by DOS 3.2 KEYBxx.COM and DOS 5.0 KEYB.COM SeeAlso: AH=05h"PCjr",AH=A2h ----------1699------------------------------- INT 16 - SCOUT v5.4 - GET ??? AH = 99h Return: AX = ABCDh BX:CX -> ??? (appears to be start of PSP for resident portion) Note: Scout is a memory-resident file manager by New-Ware SeeAlso: AH=9Eh ----------169E------------------------------- INT 16 - SCOUT v5.4 - INSTALLATION CHECK AH = 9Eh Return: AX = ABCDh if installed Note: Scout is a memory-resident file manager by New-Ware SeeAlso: AH=99h ----------16A2------------------------------- INT 16 - ??? AH = A2h Return: AH <= 80h if ??? Note: this function is called by DOS 5.0 KEYB.COM SeeAlso: AH=92h ----------16AA------------------------------- INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS AH = AAh Various registers set up by high level language. Return: Graphics performed Note: PT stands for Paint Tools which is a graphics library for Turbo Pascal, Modula 2 and others from DataBiten in Sweden. The library is installed as a memory resident driver. ----------16CA--BX736B----------------------- INT 16 - CtrlAlt Associates STACKEY.COM v3.00 - API AH = CAh BX = 736Bh ("sk") CX = 736Bh AL = function 00h installation check Return: DX = words available in keyboard buffer 01h place keystroke in buffer DX = keystroke (DH = scan code, DL = ASCII character) Return: DX = words available in keyboard buffer FFFFh on error 02h flush STACKEY and BIOS keyboard buffers Return: AX = CAFFh if installed BX = segment of resident code CX = STACKEY version (CH = major, CL = minor) Note: STACKEY is a shareware keyboard-input faking TSR ----------16CA00BX6570----------------------- INT 16 - CtrlAlt Associates EGAPAL.COM v1.00 - INSTALLATION CHECK AX = CA00h BX = 6570h ("ep") CX = 6570h Return: AX = CAFFh if installed BX = segment of resident code CX = ??? (0090h) Note: EGAPAL is a TSR supplied with STACKEY which makes EGA palette settings permanent across mode switches SeeAlso: AX=CA00h/BX=7670h ----------16CA--BX7670----------------------- INT 16 - CtrlAlt Associates VGAPAL.COM v1.00 - INSTALLATION CHECK AX = CA00h BX = 7670h ("vp") CX = 7670h Return: AX = CAFFh if installed BX = segment of resident code CX = ??? (0090h) Note: VGAPAL is a TSR supplied with STACKEY which makes VGA palette settings permanent across mode switches SeeAlso: AX=CA00h/BX=6570h ----------16E0E0----------------------------- INT 16 - TurboPower TSRs - ALTERNATE INSTALLATION CHECK AX = E0E0h Return: AX = 1F1Fh if installed DWORD 0040h:00F0h -> last data block in TSR list (see AX=F0F0h) Note: the returned TSR list provides support for communication among TSRs built with TurboPower's Turbo Professional and Object Professional libraries for Turbo Pascal SeeAlso: AX=F0F0h ----------16ED--BHED------------------------- INT 16 - BORLAND TURBO LIGHTNING - API AH = EDh BH = EDh BL = function 00h installation check Return: AX = 5205h CH = major version CL = minor version 01h ??? 02h get resident CS Return: AX = code segment of resident portion 03h get resident ??? Return: AX = offset of some buffer in resident code seg 04h ??? 05h set ??? AL = 0 to 0Ch Return: AX = status 0000h if OK 0001h if out of range. 06h ??? 07h ??? 08h ??? AL = char??? CX = ??? DX = ??? Return: AX = 0, 1 or 2 09h ??? 0Ah ??? CX = ??? DX = ??? Return: AX = ??? 0Bh ??? DS:SI -> ??? Return: AX = 0, 40h, 80h 0Ch ??? DS:SI -> ??? Return: AH = 0 AL = ??? 0Dh set ??? (sets an internal flag) 0Eh ??? DS:SI -> ??? Return: AX = 0, 1 or 2. 0Fh ??? 10h ??? Notes: AX in general returns an error code from most functions. ----------16F0------------------------------- INT 16 - Compaq 386 - SET CPU SPEED AH = F0h AL = speed 00h equivalent to 6 MHz 80286 (COMMON) 01h equivalent to 8 MHz 80286 (FAST) 02h full 16 MHz (HIGH) 03h toggles between 8 MHz-equivalent and speed set by system board switch (AUTO or HIGH) 08h full 16 MHz except 8 MHz-equivalent during floppy disk access 09h specify speed directly CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088 SeeAlso: AH=F1h,AH=F3h ----------16F0F0----------------------------- INT 16 - TurboPower TSRs - INSTALLATION CHECK AX = F0F0h Return: AX = 0F0Fh if installed ES:DI -> last data block in TSR list Note: the returned TSR list provides support for communication among TSRs built with TurboPower's Turbo Professional and Object Professional libraries for Turbo Pascal SeeAlso: AX=E0E0h Format of data block: Offset Size Description 00h DWORD pointer to program tag (counted ASCII string) 04h WORD interface version number (0400h) 06h DWORD pointer to command entry point 0Ah DWORD pointer to previous data block (0000h:0000h if none) 0Eh DWORD pointer to next data block (0000h:0000h if none) ---swappable TSRs only--- 12h DWORD pointer to swapping data 16h DWORD pointer to user data more??? ----------16F1------------------------------- INT 16 - Compaq 386 - READ CURRENT CPU SPEED AH = F1h Return: AL = speed code (see AH=F0h) if AL = 09h, CX = speed code SeeAlso: AH=F0h,AH=F3h ----------16F2------------------------------- INT 16 - Compaq 386 - DETERMINE ATTACHED KEYBOARD TYPE AH = F2h Return: AL = type 00h if 11-bit AT keyboard is in use 01h if 9-bit PC keyboard is in use ----------16F3------------------------------- INT 16 - Compaq 80286s - SET CPU SPEED LIMIT (OVERRIDE JUMPER) AH = F3h AL = 00h limit is 6 Mhz = 01h limit is 8 Mhz/6 Mhz SeeAlso: AH=F0h,AH=F1h ----------16F398----------------------------- INT 16 U - NORTON GUIDES - INSTALLATION CHECK AX = F398h Return: AX = 6A73h ("js") BH = scan code of current hot key BL = ASCII code of current hot key Note: NG.EXE was written by John Socha ----------16F400----------------------------- INT 16 - Compaq Systempro - CACHE CONTROLLER STATUS AX = F400h Return: AH = E2h AL = status 00h not present 01h enabled 02h disabled SeeAlso: AX=F401h,AX=F402h ----------16F401----------------------------- INT 16 - Compaq Systempro - ENABLE CACHE CONTROLLER AX = F401h Return: AX = E201h SeeAlso: AX=F400h,AX=F402h ----------16F402----------------------------- INT 16 - Compaq Systempro - DISABLE CACHE CONTROLLER AX = F402h Return: AX = E202h SeeAlso: AX=F400h,AX=F401h ----------16FEA4----------------------------- INT 16 - PC Tools 7 CPSCHED/DESKTOP - ??? AX = FEA4h ??? Return: ??? ----------16FEC6----------------------------- INT 16 - PC Tools 7 CPSCHED - ??? AX = FEC6h DL = ??? ??? Return: ??? ----------16FED3----------------------------- INT 16 - PC Tools 7 CPSCHED/DESKTOP - ??? AX = FED3h ??? Return: ??? ----------16FEDC----------------------------- INT 16 - PC Tools 7 CPSCHED - ??? AX = FEDCh ??? Return: ??? ----------16FEEFCX0000----------------------- INT 16 - PC Tools 7 CPSCHED/DESKTOP - INSTALLATION CHECK AX = FEEFh CX = 0000h Return: CX = ABCDh if PC Tools scheduler (CPSCHED or DESKTOP) installed BX = segment of resident portion SeeAlso: AX=FFEFh ----------16FEF1----------------------------- INT 16 - PC Tools 7 CPSCHED/DESKTOP - ??? AX = FEF1h ??? Return: ??? ----------16FF------------------------------- INT 16 - KEYBOARD - KBUF extensions - ADD KEY TO TAIL OF KEYBOARD BUFFER AH = FFh DX = scan code Return: AL = status 00h success 01h failure Note: KBUF is a keyboard buffer expander by Mark Adler SeeAlso: AH=05h ----------16FF------------------------------- INT 16 - OPTIMA 1024 VGA-Sync - QUERY ZOOM INTERRUPT AH = FFh Return: AL = interrupt number to which BIOS keyboard handler has been relocated AL+1 = Zoom interrupt number BX = hotkey Note: The default interrupts are 60h for keyboard and 61h for Zoom interrupt; the default hot key is F10 SeeAlso: INT 60"OPTIMA" ----------16FF91----------------------------- INT 16 - PC Tools 7 DESKTOP - ??? AX = FF91h ??? Return: AX = 0000h SeeAlso: AX=FF92h ----------16FF92----------------------------- INT 16 - PC Tools 7 DESKTOP - ??? AX = FF92h ??? Return: AX = 0000h Note: like AX=FF91h, but temporarily sets ??? to 3 SeeAlso: AX=FF91h ----------16FF93----------------------------- INT 16 - PC Tools 7 DESKTOP - SET ??? FLAG AX = FF93h ??? Return: ??? ----------16FF94----------------------------- INT 16 - PC Tools 7 DESKTOP - SET ??? AX = FF94h CX = ??? ??? Return: ??? ----------16FF95----------------------------- INT 16 - PC Tools 7 DESKTOP - SET ??? AX = FF95h BX = ??? ??? Return: ??? ----------16FF96----------------------------- INT 16 - PC Tools 7 DESKTOP - ??? AX = FF96h CL = ??? Return: ??? ----------16FF97----------------------------- INT 16 - PC Tools 7 DESKTOP - ??? AX = FF97h ??? Return: ??? ----------16FF98----------------------------- INT 16 - PC Tools 7 DESKTOP - READ ??? FROM \DESK.OVL FILE AX = FF98h DX = offset in file ??? Return: ??? ----------16FF99----------------------------- INT 16 - PC Tools 7 DESKTOP - ??? AX = FF99h ??? Return: ??? ----------16FF9A----------------------------- INT 16 - PC Tools 7 DESKTOP - GET NAME OF COLOR SCHEME AX = FF9Ah Return: ES:BX -> name of current color scheme Note: available even if not popped up ----------16FF9B----------------------------- INT 16 - PC Tools 7 DESKTOP - UNUSED??? AX = FF9Bh ??? Return: ??? Note: sounds triple-length beep ----------16FF9E----------------------------- INT 16 - PC Tools 7 DESKTOP - ??? AX = FF9Eh DL = ??? ??? Return: ??? ----------16FFA1----------------------------- INT 16 - PC Tools 7 DESKTOP - ??? AX = FFA1h ??? Return: ??? ----------16FFA2----------------------------- INT 16 - PC Tools 7 DESKTOP - ??? AX = FFA2h ??? Return: ??? ----------16FFA3BX0000----------------------- INT 16 - PC Tools 7 DATAMON - INSTALLATION CHECK AX = FFA3h BX = 0000h CX = 0000h Return: AX = segment of resident code BX = 5555h CX = 5555h ----------16FFA3BX0001----------------------- INT 16 - PC Tools 7 DATAMON - GET ??? AX = FFA3h BX = 0001h CX = 0001h Return: AX:BX -> ??? CX = BX ----------16FFA3BX0002----------------------- INT 16 - PC Tools 7 DATAMON - GET ??? AX = FFA3h BX = 0002h CX = 0002h Return: AX = ??? (0 or 1) CX = BX = AX ----------16FFA3BX0003----------------------- INT 16 - PC Tools 7 DATAMON - GET ??? AX = FFA3h BX = 0003h CX = 0003h Return: AX = ??? (0 or 1) CX = BX = AX ----------16FFA3BX0004----------------------- INT 16 - PC Tools 7 DATAMON - SET ??? FLAG AX = FFA3h BX = 0004h CX = 0004h SeeAlso: AX=FFA3h/BX=0005h ----------16FFA3BX0005----------------------- INT 16 - PC Tools 7 DATAMON - CLEAR ??? FLAG AX = FFA3h BX = 0005h CX = 0005h SeeAlso: AX=FFA3h/BX=0004h ----------16FFA3BX0006----------------------- INT 16 - PC Tools 7 DATAMON - SET PSP SEGMENT ??? AX = FFA3h BX = 0006h CX = 0006h DX = current PSP segment as known to DOS??? or 0000h ----------16FFA4----------------------------- INT 16 - PC Tools 7 DESKTOP - ??? AX = FFA4h ??? Return: ??? Note: available even when not popped up ----------16FFA5CX1111----------------------- INT 16 - PC-Cache v6+ - INSTALLATION CHECK AX = FFA5h CX = 1111h Return: CH = 00h if installed ES:DI -> internal data (see below) CL = cache state 01h enabled 02h disabled SeeAlso: INT 13/AH=A0h,INT 21/AH=2Bh/CX=4358h Format of internal data: Offset Size Description -1Ch 20 BYTEs cached drive list, one byte per drive A: to T: each byte is either blank (20h) or drive letter (41h-54h) -8 BYTE ??? -7 WORD number of physical transfers (scaled down to 0000h-7FFFh) -5 WORD number of saved transfers (scaled down to 0000h-7FFFh) -3 3 BYTEs ??? ----------16FFA5CXAAAA----------------------- INT 16 - PC-Cache v6+ - ENABLE DELAYED WRITES AX = FFA5h CX = AAAAh Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5) SeeAlso: AX=FFA5h/CX=CCCCh ----------16FFA5CXCCCC----------------------- INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES AX = FFA5h CX = CCCCh Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5) Note: delayed writes are automatically disabled on EXECing (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??; however, delayed writes are not automatically reenabled upon the program's termination in v6. SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh ----------16FFA5CXDDDD----------------------- INT 16 - PC-Cache v6+ - FLUSH AND DISABLE CACHE AX = FFA5h CX = DDDDh SeeAlso: AX=FFA5h/CX=EEEEh,AX=FFA5h/CX=FFFFh ----------16FFA5CXEEEE----------------------- INT 16 - PC-Cache v6+ - ENABLE CACHE AX = FFA5h CX = EEEEh SeeAlso: AX=FFA5h/CX=DDDDh ----------16FFA5CXFFFF----------------------- INT 16 - PC-Cache v6+ - FLUSH CACHE AX = FFA5h CX = FFFFh SeeAlso: AX=FFA5h/CX=CCCCh,AX=FFA5h/CX=DDDDh,INT 13/AH=A1h ----------16FFA6----------------------------- INT 16 - PC Tools v6.0+ DESKTOP API - GET ??? AX = FFA6h Return: DS:SI -> ??? Note: available only when popped up ----------16FFA7----------------------------- INT 16 - PC Tools v6.0+ DESKTOP API - GET ??? PATH AX = FFA7h Return: DS:SI -> ASCIZ path (directory from which PCTools was run???) ----------16FFA8----------------------------- INT 16 - PC Tools v6.0+ DESKTOP API - ??? AX = FFA8h DS:SI -> three consecutive ASCIZ strings for ??? (max 256 bytes total) ??? Return: ??? Notes: available only when popped up strings copied into internal buffer, among other actions ----------16FFA9----------------------------- INT 16 - PC Tools v6.0+ DESKTOP API - GET VERSION STRING AX = FFA9h Return: DS:SI -> version string ----------16FFAA----------------------------- INT 16 - PC Tools v6.0+ DESKTOP API - ??? AX = FFAAh ??? Return: ??? Note: available only when popped up ----------16FFAB----------------------------- INT 16 - PC Tools v6.0+ DESKTOP API - GET EDITOR SETTINGS??? AX = FFABh Return: DS:SI -> editor setting strings??? ----------16FFAC----------------------------- INT 16 - PC Tools v6.0+ DESKTOP API - SET ??? AX = FFACh DL = ??? Note: available only when popped up ----------16FFAD----------------------------- INT 16 - PC Tools v6.0+ DESKTOP API - SET ??? AX = FFADh DL = ??? ----------16FFAE----------------------------- INT 16 - PC Tools v6.0+ DESKTOP API - GET ??? AX = FFAEh Return: AL = ??? ----------16FFAF----------------------------- INT 16 - PC Tools v6.0+ DESKTOP API - SET ??? AX = FFAFh DL = ??? ----------16FFB0----------------------------- INT 16 - PC Tools v6.0+ DESKTOP API - SET ??? AX = FFB0h BL = ??? ----------16FFB1----------------------------- INT 16 - PC Tools v6.0+ DESKTOP API - ??? AX = FFB1h ??? Return: ??? ----------16FFB2----------------------------- INT 16 - PC Tools v5.5+ DESKTOP API - GET ??? AX = FFB2h Return: DS:SI -> ??? ----------16FFB3----------------------------- INT 16 - PC Tools v5.5+ DESKTOP API - ??? AX = FFB3h ??? Return: ??? Note: available only when popped up ----------16FFB4----------------------------- INT 16 - PC Tools v5.5+ DESKTOP API - SET ??? FLAG AX = FFB4h Note: available only when popped up SeeAlso: AX=FFBBh ----------16FFB5----------------------------- INT 16 - PC Tools v5.5+ DESKTOP API - GET/SET WINDOW PARAMETERS AX = FFB5h BX = window specifier (000Fh to 0019h) (see below) DX = 0000h get, nonzero = set ES:DI -> window parameter buffer (see below) SeeAlso: AX=FFCBh Values for window specifier: 000Fh comm/FAX 0014h hotkey selection 0015h ASCII table 0016h system colors menu Format of window parameters: Offset Size Description 00h BYTE rows in window, not counting frame 01h BYTE columns in window, not counting frame 02h BYTE row number of top of window 03h BYTE 2*column number of left of window 04h BYTE character attribute for ??? 05h BYTE character attribute for background/border 06h BYTE character attribute for ??? 07h DWORD pointer to ??? on screen 0Bh 4 BYTEs ??? 0Fh BYTE nonzero if window may be resized Note: if running in monochrome mode, character attributes at offsets 04h to 06h are stored unchanged, but attributes other than 07h, 0Fh, or 70h are changed to 07h on reading ----------16FFB6----------------------------- INT 16 - PC Tools v5.5+ DESKTOP API - GET ??? AX = FFB6h Return: AH = ??? AL = ??? ----------16FFB7----------------------------- INT 16 - PC Tools v5.5+ DESKTOP API - GET/SET ??? AX = FFB7h BX = direction 0000h copy to buffer else copy from buffer DS:SI -> 70-byte buffer with ??? Return: data copied Note: available only when popped up under v6.0+ ----------16FFB8----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - GET/SET??? AX = FFB8h BH = subfunction 00h get Return: BL = old value of ??? CL = old value of ??? (v6.0+) CH = old value of ??? (v6.0+) nonzero set BL = new value for ??? CL = new value for ??? (v6.0+) CH = new value for ??? (v6.0+) DH = ??? Return: AL = old value replaced by CL (v6.0+) AH = old value replaced by CH (v6.0+) ----------16FFB9----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFB9h ??? Return: AX = ??? CX = ??? DS:SI -> ??? ES:DI -> ??? ----------16FFBA----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFBAh ??? Return: AX = ??? Note: available only when popped up ----------16FFBB----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - CLEAR ??? FLAG AX = FFBBh Note: available only when popped up SeeAlso: AX=FFB4h ----------16FFBC----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - RESTORE ORIGINAL SCREEN??? AX = FFBCh ----------16FFBD----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? DATABASE INDEXING MESSAGES AX = FFBDh ??? Return: ??? ----------16FFBE----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFBEh ??? Return: ??? Note: available only when popped up ----------16FFBF----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFBFh BX = DOS file handle to write on ??? Return: ??? Note: available only when popped up ----------16FFC0----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFC0h ??? Return: AX = 0000h if successful AX = FFFFh on error Note: available only when popped up ----------16FFC1----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFC1h BL = ??? ES:DI -> data structure (see below) ??? Return: AX = ??? Note: available only when popped up Format of data structure: Offset Size Description 00h WORD ??? 02h WORD ??? 04h WORD ??? 06h WORD ??? 08h WORD ??? 0Ah BYTE ??? 0Bh BYTE ??? ??? ----------16FFC2----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFC2h ??? Return: AH = ??? CX = ??? DH = ??? DL = ??? Note: available only when popped up SeeAlso: AX=FFC3h ----------16FFC3----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFC3h ??? Return: AH = ??? CX = ??? DH = ??? DL = ??? Note: available only when popped up SeeAlso: AX=FFC2h ----------16FFC4----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - GET ??? AX = FFC4h Return: AL = ??? BX = segment of scratch space??? CX = segment of stored screen data (section covered by window???) DX = segment of window parameters for ??? ES:BP -> ??? Note: available only when popped up in versions prior to 6.0 ----------16FFC5----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - CHECK WHETHER DESKTOP LOADED RESIDENT AX = FFC5h Return: BL = nonzero if loaded resident = 00h if nonresident Note: available only when popped up; should call AX=FFEFh first to ensure that DESKTOP is active SeeAlso: AX=FFEFh,AX=FFF3h ----------16FFC6----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - SET ??? AX = FFC6h BL = new value for ??? ----------16FFC7----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - REMOVE WINDOW AX = FFC7h ??? Return: ??? ----------16FFC8----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - GET ??? AX = FFC8h Return: DS:SI -> ??? Note: valid only while popped up ----------16FFC9----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - COPY DATA TO CLIPBOARD AX = FFC9h DS:SI -> characters to store in clipboard CX = size in bytes Return: CF set on error Notes: available only when popped up while copying, bytes of 00h and 0Ah are skipped ----------16FFCA----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - SET ??? AX = FFCAh DX = ??? Return: AX destroyed Note: available only when popped up ----------16FFCB----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - SELECT WINDOW PARAMETERS??? AX = FFCBh DX = window specifier??? Return: AX destroyed Note: available only when popped up SeeAlso: AX=FFB5h ----------16FFCC----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY ASCIZ STRING CENTERED IN WINDOW AX = FFCCh DS:SI -> ASCIZ string Return: AX = ??? CX = ??? ES:DI -> address past last character displayed (v5.1/5.5) -> ??? on menu bar (v6.0) ----------16FFCD----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFCDh DS:DX -> ??? Return: ??? Note: available only when popped up ----------16FFCE----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - SET ??? DELAYS AX = FFCEh CX = ??? Return: nothing??? ----------16FFCF----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - CLOSE PRINTER/PRINT FILE AX = FFCFh Note: available only when popped up ----------16FFD0----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - PREPARE TO PRINT??? AX = FFD0h ??? Return: ??? Note: available only when popped up ----------16FFD1----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY PRINT OPTIONS MENU AX = FFD1h Return: BX = number of copies DX = destination 00h cancel 01h LPT1 02h LPT2 03h LPT3 04h COM1 05h COM2 06h disk file Note: available only when popped up ----------16FFD2----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFD2h BX = ??? Return: BL = ??? Note: available only when popped up ----------16FFD3----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFD3h DS:SI -> 92-byte data record for ??? Return: ??? ----------16FFD4BH3C------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - CREATE/OPEN/DELETE FILE AX = FFD4h BH = 3Ch create file (with no attributes) 3Dh open file 41h delete file BL = access mode 00h read only 01h write only 02h read/write DS:SI -> ASCIZ filename Return: BX = file handle 0000h on error Note: operation is attempted in (in order) the directory from which the desktop was started/run???, the directory specified with the filename, X:\PCTOOLS\, and X:\ ----------16FFD5----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFD5h ??? Return: ??? Note: available only when popped up ----------16FFD6----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFD6h BX = ??? CX = ??? DX = offset in ??? ??? Return: ??? Note: available only when popped up ----------16FFD7----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFD7h ??? Return: BL = ??? Note: available only when popped up ----------16FFD8----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - SAFE CREATE FILE AX = FFD8h DS:BX -> ASCIZ filename Return: BX = file handle 0000h on error Note: pops up confirmation menu if file already exists only available when popped up??? ----------16FFD9----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - GET ??? AX = FFD9h Return: AX = ??? Note: available only when popped up ----------16FFDA----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - GET NAME OF LAST FILE OPENED AX = FFDAh DS:SI -> ??? (v5.1/5.5 only) Return: DS:SI -> filename ----------16FFDB----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - SET ??? AX = FFDBh BL = ??? Note: available only when popped up ----------16FFDC----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - UNHOOK AX = FFDCh Return: interrupt vectors 09h, 10h (v6.0+), 16h, 1Ch, and 21h restored to original values ----------16FFDDBX0000----------------------- INT 16 - PC Tools v5.1+ PCShell API - INSTALLATION CHECK AX = FFDDh BX = 0000h Return: CX = 5555h DX = 5555h if PCShell installed in resident mode ----------16FFDDBX0001----------------------- INT 16 - PC Tools v5.1+ PCShell API - REQUEST POP-UP AX = FFDDh BX = 0001h SeeAlso: AX=FFDDh/BX=0003h ----------16FFDDBX0002----------------------- INT 16 - PC Tools v5.1-5.5 PCShell API - GET ??? AX = FFDDh BX = 0002h Return: AL = 00h ??? 01h ??? Note: PCShell v6.0+ displays the error message "Incorrect PCRUN version", awaits a keystroke, and aborts the current process ----------16FFDDBX0003----------------------- INT 16 - PC Tools v5.1+ PCShell API - REQUEST POP-UP AX = FFDDh BX = 0003h SeeAlso: AX=FFDDh/BX=0001h ----------16FFDDBX0004----------------------- INT 16 - PC Tools v5.1+ PCShell API - GET ??? AX = FFDDh BX = 0004h Return: CF clear if successful DS:SI -> ??? ----------16FFDDBX0005----------------------- INT 16 - PC Tools v5.1+ PCShell API - ??? AX = FFDDh BX = 0005h ??? Return: ??? ----------16FFDDBX0006----------------------- INT 16 - PC Tools v5.1+ PCShell API - ??? AX = FFDDh BX = 0006h ??? Return: ??? ----------16FFDDBX0007----------------------- INT 16 - PC Tools v5.1+ PCShell API - SET ??? FLAG AX = FFDDh BX = 0007h Return: CF clear if successful SeeAlso: AX=FFDDh/BX=0008h ----------16FFDDBX0008----------------------- INT 16 - PC Tools v5.1+ PCShell API - CLEAR ??? FLAG AX = FFDDh BX = 0008h Return: ??? SeeAlso: AX=FFDDh/BX=0007h ----------16FFDDBX0009----------------------- INT 16 - PC Tools v6.0+ PCShell API - GET PCRUN PARAMETERS AX = FFDDh BX = 0009h Return: CF clear if successful DS:SI -> list of pointers (see below) Format of returned pointer list: Offset Size Description 00h WORD offset of WORD containing ??? 02h WORD offset of name of program to execute 04h WORD offset of 80-byte buffer for ??? 06h WORD offset of buffer for ??? (length in WORD preceding buffer) 08h WORD offset of buffer for ??? (length in WORD preceding buffer) ----------16FFDDBX000A----------------------- INT 16 - PC Tools v6.0+ PCRUN API - INSTALLATION CHECK AX = FFDDh BX = 000Ah Return: CX = 5555h if running DX = 5555h Note: also sets a flag ----------16FFDDBX000B----------------------- INT 16 - PC Tools v6.0+ PCRUN API - ??? AX = FFDDh BX = 000Bh ??? Return: CX = 5555h if PCRUN active DX = 5555h Note: also clears flag set by AX=FFDDh/BX=000Ah ----------16FFDE----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY POPUP MENU AX = FFDEh DS:DX -> menu description (must be on a paragraph boundary) Return: AX = ??? AL seems to be the number of the selected button Note: available only when popped up SeeAlso: AX=FFEEh ----------16FFDF----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFDFh ??? Return: ??? ----------16FFE0----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFE0h CX = ??? DX = ??? Note: available only when popped up ----------16FFE1----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - BEEP AX = FFE1h ----------16FFE2----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFE2h DX = ??? Return: ??? Note: available only when popped up ----------16FFE3----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - PRINT CHARACTER AX = FFE3h BL = character to print to currently open printer or print file Return: CF set on error Note: available only when popped up SeeAlso: INT 17/AH=00h ----------16FFE4----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFE4h DX = segment of ??? Return: ??? Note: available only when popped up ----------16FFE5----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - POP UP FILE SELECTION MENU AX = FFE5h DS:SI -> ASCIZ wildcard filespec followed by ASCIZ menu title DX = segment of window parameters??? Return: AX = DOS file handle for file DS:DX -> filename??? = FFFFh if cancelled by user Note: available only when popped up SeeAlso: AX=FFDAh ----------16FFE6----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - CHECK FOR AND GET KEYSTROKE AX = FFE6h Return: AX = 0000h if no key available else BIOS keycode Notes: available only when popped up invokes INT 28 idle interrupt before checking for key ----------16FFE7----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFE7h BX = segment of ??? Return: ??? Note: available only when popped up ----------16FFE8----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY NUMBER AX = FFE8h CX = number DH = attribute DS:SI -> destination for ASCII number Return: DS:SI buffer filled in with alternating characters and attributes ----------16FFE9----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - GET FILE LIST??? AX = FFE9h Return: BX = segment of file/directory list (14 bytes per file, NUL-padded) Note: available only when popped up ----------16FFEA----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY COUNTED STRING AX = FFEAh DS:SI -> counted string (count byte followed by string) Return: ??? Note: available only when popped up ----------16FFEB----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFEBh ??? Return: ??? ----------16FFEC----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - GET KEY AX = FFECh DS:SI -> FAR routine to ??? BX = ??? ??? Return: AX = keystroke FFFFh if F10 pressed to go to menu Notes: available only when popped up invokes INT 28 while waiting for keystroke F10 is hotkey to Desktop menu ----------16FFED----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - GET ??? AX = FFEDh Return: AX = ??? Note: available only when popped up ----------16FFEE----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE PULLDOWN MENUS AX = FFEEh DS:SI -> pulldown menu system description (see below) Return: AX destroyed Notes: available only when popped up if the accessory does not need any menu items of its own, it should call AX=FFFAh instead SeeAlso: AX=FFF7h,AX=FFFAh Format of pulldown menu system description: Offset Size Description 00h WORD offset of menu bar contents (counted string) 02h WORD number of items on menu bar 04h 10 BYTEs scan codes for hotkeying to each of up to ten menu items 0Eh 10 BYTEs which character to highlight in each menu item (01h=first) 18h WORD offset of first menu definition (see below) 1Ah WORD offset of second menu definition ... Format of menu definition: Offset Size Description 00h WORD offset of menu contents (see below) 02h WORD number of entries in menu 04h for each entry: Offset Size Description 00h BYTE scancode of Alt-key to invoke entry 01h BYTE character to highlight (01h=first, etc) 02h WORD offset of FAR routine to handle selection Format of menu contents: Offset Size Description 00h BYTE number of lines in menu 01h BYTE width of menu 02h N BYTEs counted strings, one for each line in menu ----------16FFEFCX0000----------------------- INT 16 - PC Tools v5.1+ DESKTOP API - INSTALLATION CHECK AX = FFEFh CX = 0000h Return: CX = ABCDh if PC Tools DESKTOP.EXE installed BX = segment of resident portion AX = ??? (v5.1/5.5 only) SeeAlso: AX=FEEFh,AX=FFC5h,AX=FFF3h ----------16FFF0----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - SET ??? AX = FFF0h DX = ??? Return: AX destroyed Note: available only when popped up ----------16FFF1BX0000----------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ALTERNATE INSTALLATION CHECK AX = FFF1h BX = 0000h leave ??? flag as is nonzero set ??? flag Return: CX = 5555h if installed DX = 5555h ----------16FFF2----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY HELP LINE AX = FFF2h DS:SI -> ASCIZ function key label string (each label preceded by '[') or help text Return: AX destroyed Notes: available only when popped up if the specified string does not start with '[', it is displayed centered on the bottom line, else the function key labels are shown ----------16FFF3----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - PREPARE TO UNLOAD RESIDENT DESKTOP AX = FFF3h Note: releases any EMS being used; restores video mode, page, and cursor shape; and restores interrupt vectors SeeAlso: AX=FFC5h,AX=FFEFh ----------16FFF4----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - ??? AX = FFF4h ??? Return: ??? Note: available only when popped up SeeAlso: AX=FFF6h ----------16FFF5----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - GET SCREEN ATTRIBUTE ARRAY AX = FFF5h Return: ES:BX -> screen attributes data structure (see below) AL = ??? (v6.0+) Format of attribute data structure: Offset Size Description -1 BYTE attribute for desktop background 00h BYTE attribute for normal characters on desktop menu 01h BYTE attribute for highlighted characters on desktop menu 02h 5 BYTEs ??? 07h BYTE attribute for dialog boxes 08h 15 BYTEs ??? 17h BYTE attribute for message boxes ----------16FFF6----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - INVOKE NOTEPAD EDITOR AX = FFF6h DS = segment of editor buffer structure (see below) BX = ??? DX = segment of window parameters structure (see AX=FFB5h) Return: ??? Note: available only when popped up SeeAlso: AX=FFF4h Format of editor buffer structure: Offset Size Description 00h WORD offset of current cursor position in buffer segment 02h 2 BYTEs ??? 04h WORD offset of beginning of file data in buffer segment 06h 10 BYTEs ??? 10h N BYTEs ASCIZ name of file being edited ----------16FFF7----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - PROCESS MENU BAR ENTRY??? AX = FFF7h DS:SI -> ??? ??? Return: ??? Notes: available only when popped up performs input processing on the menu bar set up with AX=FFEEh SeeAlso: AX=FFEEh,AX=FFFBh ----------16FFF8----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - DRAW EMPTY WINDOW AX = FFF8h DS:0000h -> window parameters structure (see AX=FFB5h) DS:BX -> DWORD to store address of ??? on screen Return: ??? ----------16FFF9----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE SCREEN REFRESH ROUTINE AX = FFF9h ES:BX -> FAR routine to redisplay the utility's window Note: available only when popped up ----------16FFFA----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE STANDARD PULLDOWN MENUS AX = FFFAh Notes: available only when popped up adds the "Window" option to the "Desktop" option which is the only one available when no accessories are active. Unlike AX=FFEEh, no additional menu items are added between "Desktop" and "Window" SeeAlso: AX=FFEEh,AX=FFFBh ----------16FFFB----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - PROCESS STANDARD MENU BAR AX = FFFBh Return: ??? Notes: available only when popped up performs input processing on the standard menu bar set up with AX=FFFAh SeeAlso: AX=FFF7h ----------16FFFC----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - GET HOTKEYS AND KEYBOARD VECTOR AX = FFFCh Return: ES:BX -> hotkey table (see below) DS:DX = original INT 9 vector Format of hotkey table: Offset Size Description 00h 2 BYTEs scancode/shift state for desktop hotkey 02h 2 BYTEs scancode/shift state for clipboard paste key 04h 2 BYTEs scancode/shift state for clipboard copy key 06h 2 BYTEs scancode/shift state for screen autodial key ----------16FFFD----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - COPY ??? AX = FFFDh Return: AX destroyed Note: copies 4000 bytes from ??? to ??? under certain circumstances ----------16FFFE----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - SHOW MOUSE CURSOR AX = FFFEh SeeAlso: AX=FFFFh,INT 33/AX=0001h ----------16FFFF----------------------------- INT 16 - PC Tools v5.1+ DESKTOP API - HIDE MOUSE CURSOR AX = FFFFh SeeAlso: AX=FFFEh,INT 33/AX=0002h ----------17----DX0ABC----------------------- INT 17 - PRINTER - LPTx v5.x INSTALLATION CHECK DX = 0ABCh Return: AX = AAAAh DX = BAAAh ES = code segment of resident portion ----------17----DX0B90----------------------- INT 17 - PRINTER - LPTx v6.x INSTALLATION CHECK DX = 0B90h Return: DX = ABBBh ES = code segment of resident portion ----------17----DX0B91----------------------- INT 17 - PRINTER - LPTx v7.x INSTALLATION CHECK DX = 0B91h Return: DX = ABCBh ES = code segment of resident portion ----------17----DX0F5F----------------------- INT 17 - PRINTER - LPTx v4.x INSTALLATION CHECK DX = 0F5Fh Return: AX = AAAAh DX = F555h ES = code segment of resident portion ----------1700------------------------------- INT 17 - PRINTER - WRITE CHARACTER AH = 00h AL = character to write DX = printer number (00h-02h) Return: AH = printer status bit 7: not busy 6: acknowledge 5: out of paper 4: selected 3: I/O error 2: unused 1: unused 0: timeout SeeAlso: AH=84h"AX",AH=F1h,INT 16/AX=FFE3h,INT 1A/AH=11h"NEC" ----------1701------------------------------- INT 17 - PRINTER - INITIALIZE PORT AH = 01h DX = printer number (00h-02h) Return: AH = printer status (see AH=00h) SeeAlso: AH=02h,INT 1A/AH=10h"NEC" ----------1702------------------------------- INT 17 - PRINTER - GET STATUS AH = 02h DX = printer number (00h-02h) Return: AH = printer status (see AH=00h) SeeAlso: AH=01h,AH=F2h,INT 1A/AH=12h"NEC" ----------1702--DX0000----------------------- INT 17 - INSET - INSTALLATION CHECK AH = 02h DX = 0000h CX = 07C3h (1987d) Return: CX = 07C2h (1986d) if installed Note: INSET is a text/graphics integration program ----------1720------------------------------- INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER AH = 20h AL = function number 00h installation check Return: BX = driver version number (BH=major,BL=minor) CH = ??? (00h) CL = ??? DX = ??? (0100h) Note: also enables the remaining functions 01h set ??? flag 02h get information CL = subfunction 00h get printer type Return: ES:DI -> ASCIZ printer name 01h get paper size DX = size index Return: ES:DI -> ASCIZ paper size description 02h get ??? Return: BX = ??? 03h get printer information??? DX = ??? ES:BX -> buffer for ??? (min 134 bytes) 03h ??? ES:BX -> ??? 04h get ??? Return: ES:DI -> ??? 05h advance printer to next page Note: also clears flag set by function 01h 06h advance printer to next page and shut down Note: also clears flag set by function 01h and disables functions other than 00h 07h not implemented, AX returned unchanged BL = printer number??? Return: AX = status 0000h successful 0001h invalid printer??? 0002h ??? 0003h invalid subfunction 0005h driver disabled, must call function 00h first 0009h unknown printer error 000Bh printer not selected 000Ch printer out of paper 000Eh error while writing to serial printer 000Fh ??? 0010h invalid function number 0011h value out of range ----------172400----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - ENABLE/DISABLE API FUNCTIONS AX = 2400h DL = new state 00h disabled 01h enabled Return: DL = 24h if installed DH = minor version number CX = network address of this machine AL = status 00h successful 01h timeout 02h header error 03h data error 04h busy 05h invalid parameters SeeAlso: AX=2403h,INT 16/AX=4500h ----------172401----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, NO HANDSHAKE AX = 2401h BL = timeout in clock ticks Return: AL = status (see AX=2400h) DX:BX -> receive buffer SeeAlso: AX=2402h,AX=2404h,AX=2408h ----------172402----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT BLOCK, NO HANDSHAKE AX = 2402h transmit buffer filled (see AX=2403h) Return: AL = status (see AX=2400h) SeeAlso: AX=2401h,AX=2403h,AX=2404h,AX=2409h ----------172403----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - GET STATUS AND TRANSMISSION BUFFER AX = 2403h Return: AL = status (see AX=2400h) CX = number of characters in receive ring buffer DX:BX -> transmit buffer SeeAlso: AX=2400h,AX=2402h ----------172404----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - SEND ACK BLOCK AX = 2404h BX = target address Return: AL = status (see AX=2400h) SeeAlso: AX=2402h,AX=2405h ----------172405----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - SEND NAK BLOCK AX = 2405h BX = target address Return: AL = status (see AX=2400h) SeeAlso: AX=2402h,AX=2404h ----------172406----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED RECEIVE AX = 2406h Return: AL = status (see AX=2400h) SeeAlso: AX=2407h,AX=240Ah ----------172407----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE CHARACTER FROM REMOTE AX = 2407h Return: AL = status (see also AX=2400h) 06h end of data DL = received character SeeAlso: AX=2406h ----------172408----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, WITH HANDSHAKE AX = 2408h Return: AL = status (see also AX=2400h) 06h end of data CX = number of bytes in receive buffer DX:SI -> receive buffer SeeAlso: AX=2401h,AX=2405h,AX=2409h ----------172409----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT COMMAND, WITH HANDSHAKE AX = 2409h BX = target address CX = number of data bytes DL = command code to send DS:SI -> data bytes for command Return: AL = status (see also AX=2400h) 03h no response 06h remote currently unable to perform command SeeAlso: AX=2405h,AX=2408h ----------17240A----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED TRANSMIT AX = 240Ah Return: AL = status (see AX=2400h) SeeAlso: AX=2406h,AX=240Bh,AX=240Ch ----------17240B----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT SINGLE CHARACTER TO REMOTE AX = 240Bh DL = character to send Return: AL = status (see also AX=2400h) 03h transmission error 06h write error SeeAlso: AX=2407h,AX=240Ah,AX=240Ch ----------17240C----------------------------- INT 17 - Shamrock Software NET.24 v3.11+ - END CHARACTER-ORIENTED TRANSMIT AX = 240Ch Return: AL = status (see also AX=2400h) 03h transmission error 06h remote breaks connection SeeAlso: AX=240Ah,AX=240Bh ----------175000----------------------------- INT 17 - AX (Japanese AT) PRINTER - SET PRINTER COUNTRY CODE AX = 5000h BX = country code 0001h USA (English), 0051h Japan Return: AL = status 00h successful 01h bad country code 02h other error SeeAlso: AX=5001h,AH=51h,INT 10/AX=5000h,INT 16/AX=5000h ----------175001----------------------------- INT 17 - AX (Japanese AT) PRINTER - GET PRINTER COUNTRY CODE AX = 5001h Return: AL = status 00h successful BX = country code 02h error SeeAlso: AX=5000h,AH=51h,INT 10/AX=5001h,INT 16/AX=5001h ----------1751------------------------------- INT 17 - AX (Japanese AT) PRINTER - JIS to Shift-JIS CONVERSION AH = 51h DX = 2-byte JIS code Return: DX = shift-JIS value or 0000h on error Note: one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard) characters to Shift-JIS characters, and the other performs the opposite conversion SeeAlso: AX=5000h,AH=52h ----------1752------------------------------- INT 17 - AX (Japanese AT) PRINTER - Shift-JIS to JIS CONVERSION AH = 52h DX = 2-byte shift-JIS code Return: DX = JIS code or 0000h on error Note: one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard) characters to Shift-JIS characters, and the other performs the opposite conversion SeeAlso: AH=51h ----------1760------------------------------- INT 17 - FLASHUP.COM - INSTALLATION CHECK AH = 60h Return: AL = 60h DX = CS of resident code Notes: FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co. FLASHUP also hooks INT 10 and receives commands via INT 10/AH=09h,0Ah consisting of an 80h followed by the actual command SeeAlso: INT 10/AH=09h,INT 10/AH=0Ah ----------1761------------------------------- INT 17 - SPEEDSCR.COM - INSTALLATION CHECK AH = 61h Return: AL = 61h DX = CS of resident code Note: SPEEDSCR.COM is by The Software Bottling Co. ----------1781------------------------------- INT 17 - Alloy NTNX, MW386 - CANCEL JOBS FOR CURRENT USER AH = 81h AL = 00h (NTNX compatibility mode) CL = number of jobs to cancel Return: AL = status 00h success 01h..7Fh warning 80h general failure 81h host overloaded (NTNX only) 82h module busy (NTNX only) 83h host busy (NTNX only) 84h re-entry flag set 85h invalid request 86h invalid printer 87h invalid process ID 89h access denied 8Ah option not available for given port type 8Bh option not available for given task type 91h printer busy C2h file not found C3h path not found C4h file access failure Note: cancels the last CL printouts for the current task SeeAlso: AH=82h ----------1782------------------------------- INT 17 - Alloy NTNX, MW386 - CANCEL ALL JOBS FOR CURRENT USER AH = 82h AL = 00h (NTNX compatibility mode) Return: AL = status (see AH=81h) SeeAlso: AH=81h ----------1783------------------------------- INT 17 - Alloy NTNX, MW386 - SET NUMBER OF COPIES AH = 83h AL = mode 00h NTNX compatibility CL = number of copies (max 99, default 1) 02h MW386 v2+ BX = logical device number 00h-03h = LPT1-LPT4 04h-07h = COM1-COM4 CX = number of copies Return: AL = status (see AH=81h) Note: in NTNX compatibility mode, this function only affects LPT1 ----------1784------------------------------- INT 17 - Alloy NTNX, MW386 - GENERATE PRINT BREAK AH = 84h AL = mode 00h NTNX compatibility 02h MW386 v2+ BX = logical device number 00h-03h = LPT1-LPT4 04h-07h = COM1-COM4 Note: closes spool file and tells spooler to queue the print job (LPT1 only under MW386 in NTNX compatibility mode) ----------1784------------------------------- INT 17 - AX (Japanese AT) PRINTER - OUTPUT CHARACTER WITHOUT CONVERSION AH = 84h AL = character DX = printer number Return: AH = printer status (see AH=00h) SeeAlso: AH=00h,AH=85h ----------1785------------------------------- INT 17 - AX (Japanese AT) PRINTER - ENABLE/DISABLE CHARACTER CONVERSION AH = 85h AL = new state (00h enabled, 01h disabled) SeeAlso: AH=84h"AX" ----------1787------------------------------- INT 17 - Alloy NTNX - SET INDOS POINTER AH = 87h AL = 00h CX:BX -> buffer for user-written printer drivers Return: BX,CX destroyed Note: must be executed before the printer is enabled SeeAlso: AH=8Ah ----------1788------------------------------- INT 17 - Alloy NTNX, MW386 - REMOVE PRINTER FROM SPOOLER AH = 88h AL = mode 00h NTNX compatibility DX = NTNX printer number 00h host LPT1 01h host LPT2 02h host LPT3 03h host LPT4 04h host COM1 05h host COM2 06h user's logical COM2 07h user's terminal AUX port 08h user's logical COM1 (MW386 only) 01h MW386 DX = MW386 printer number Return: AH = status (see AH=81h) Note: removes specified printer from the spooler's list of printers SeeAlso: AH=89h,AH=8Bh ----------1789------------------------------- INT 17 - Alloy NTNX, MW386 - ADD PRINTER TO SPOOLER AH = 89h AL = mode 00h NTNX compatibility DX = NTNX printer number (see AH=88h) 01h MW386 DX = MW386 printer number Return: AL = status (see AH=81h) Note: the specified printer is added to the spooler's list of available printers SeeAlso: AH=88h,AH=8Bh ----------178A------------------------------- INT 17 - Alloy NTNX - ACTIVATE USER-WRITTEN PRINTER DRIVER AH = 8Ah ??? SeeAlso: AH=92h ----------178B------------------------------- INT 17 - Alloy MW386 - GET PHYSICAL DEVICE NUMBER FROM NAME AH = 8Bh DS:DX -> ASCIZ printer name Return: AL = status (see also AH=81h) 00h successful DX = physical device number SeeAlso: AH=89h,AH=8Ch,INT 14/AH=20h"Alloy" ----------178C------------------------------- INT 17 - Alloy MW386 - GET DEVICE NAME FROM PHYSICAL DEVICE NUMBER AH = 8Ch DX = physical device number ES:DI -> 17-byte buffer for ASCIZ device name Return: AL = status (see also AH=81h) 00h successful ES:DI buffer filled SeeAlso: AH=88h,AH=8Bh ----------178D------------------------------- INT 17 - Alloy NTNX,MW386 - RESET SPOOLER AH = 8Dh AL = 00h Notes: clears all buffers and resets spooler to boot-up values MW386 supports this function for compatibility only; it is a NOP Return: AL = status (see AH=81h) ----------178E------------------------------- INT 17 - Alloy NTNX - GET INT 28 ENTRY POINT AH = 8Eh AL = 00h Return: CX:BX -> INT 28 entry point SeeAlso: AH=8Fh ----------178F------------------------------- INT 17 - Alloy NTNX - GET DOS INTERCEPT ENTRY POINT AH = 8Fh AL = 00h Return: CX:BX -> DOS intercept routine SeeAlso: AH=8Eh ----------1790------------------------------- INT 17 - Alloy NTNX, MW386 - SPOOL FILE BY NAME AH = 90h AL = mode 00h NTNX compatibility DL = printer code (FFh=current) (NTNX, MW386 v1.x only) DH = number of copies (FFh=current) (NTNX, MW386 v1.x only) 02h MW386 v2+ BX = logical device number 00h-03h = LPT1-LPT4 04h-07h = COM1-COM4 CX:SI -> ASCIZ pathname Return: AL = status (see AH=81h) Note: in mode 00h, the file is always sent to logical LPT1 SeeAlso: AH=A0h ----------1791------------------------------- INT 17 - Alloy NTNX, MW386 - GET USER NUMBER AND CURRENT PRINTER AH = 91h AL = mode 00h NTNX compatibility Return: CX = user number (00h = host) DX = currently selected printer number (00h-08h) 01h MW386 Return: CX = user number DX = physical dev number of currently selected printer 02h MW386 v2+ BX = logical device number 00h-03h = LPT1-LPT4 04h-07h = COM1-COM4 Return: CX = user number DX = physical device number Return: AL = status (see AH=81h) SeeAlso: AH=8Ch ----------1792------------------------------- INT 17 - Alloy NTNX - CHECK PRINTER DRIVER AH = 92h AL = 00h CL = 00h Return: CL = driver state 01h initialized 80h not initialized AX = status (see AH=81h) SeeAlso: AH=8Ah ----------1794------------------------------- INT 17 - Alloy NTNX, MW386 - SELECT PRINTER AH = 94h AL = mode 00h NTNX compatibility DX = NTNX printer number (see AH=88h) 01h MW386 DX = MW386 printer number 02h MW386 v2+ BX = logical printer number DX = MW386 printer number Return: AL = status (see AH=81h) Note: modes 00h and 01h affect only logical LPT1 SeeAlso: AH=8Bh,AH=95h ----------1795------------------------------- INT 17 - Alloy NTNX, MW386 - GET CURRENT PRINTER AH = 95h AL = mode 00h NTNX compatibility Return: DX = NTNX printer number (see AH=88h) (FFFFh if current printer not compatible with NTNX) 01h MW386 Return: DX = MW386 printer number 02h MW386 v2+ BX = logical device number 00h-03h = LPT1-LPT4 04h-07h = COM1-COM4 Return: DX = MW386 printer number (FFFFh = none) Return: AL = status (see AH=81h) Note: modes 00h and 01h return the printer number of logical LPT1 only SeeAlso: AH=94h ----------1796------------------------------- INT 17 - Alloy NTNX - SET SERIAL PORT PARAMETERS AH = 96h AL = 00h Note: documentation states that this is a NOP, doing only XOR AX,AX before returning SeeAlso: INT 14/AH=24h ----------1797------------------------------- INT 17 - Alloy NTNX, MW386 - SET DATA DRIVEN PRINT BREAK AH = 97h AL = mode 00h NTNX compatibility 02h MW386 v2+ BX = logical device number 00h-03h = LPT1-LPT4 04h-07h = COM1-COM4 CH,CL,DH = three character break sequence DL = subfunction 00h set break string else reset break Return: AL = status (see AH=81h) Notes: mode 00h affects only logical LPT1 when the break string is encountered, the spool file will be closed and queued for printing automatically the break string is not permanently saved, and will be reset each time MW386 or the user is rebooted SeeAlso: AH=9Bh ----------1798------------------------------- INT 17 - Alloy NTNX,MW386 - RESTART PRINTER AH = 98h AL = 00h DL = printer number (FFh=current) Return: AL = status 00h successful 01h incorrect printer 02h task not found Note: MW386 supports this function for compatibility only; it is a NOP ----------1799------------------------------- INT 17 - Alloy NTNX, MW386 - GET/SET PRINTER MODE AH = 99h AL = mode 00h NTNX compatibility DL = NTNX printer number (see AH=88h) (FFh = task's current logical LPT1) DH = mode bit 0: get mode if 1, set mode if 0 1: private ("attached") 2: direct instead of spooled 3-7 reserved (0) 01h MW386 DX = MW386 printer number CL = mode (as for DH above) Return: AL = status (see AH=81h) DH = mode (bits 1 and 2 set as above) DL = printer owner's user number if not spooled ----------179A------------------------------- INT 17 - Alloy NTNX,MW386 - SET TAB EXPANSION AH = 9Ah AL = mode 00h NTNX compatibility DX = NTNX printer number (see AH=88h) (FFFFh = current logical LPT1) 01h MW386 DX = MW386 printer number CL = tab length (00h = no expansion, 01h-63h = spaces per tab) Return: AL = status (see AH=81h) Note: beginning with MW386 v2.0, tab expansion is set on a per-printer basis rather than a per-user basis; NTNX and MW386 v1.x ignore DX SeeAlso: AH=A4h ----------179B------------------------------- INT 17 - Alloy NTNX,MW386 - SET PRINT BREAK TIMEOUT AH = 9Bh AL = mode 00h NTNX compatibility CX = timeout value in clock ticks (1/18 sec) (00h = never) 01h MW386 CX = timeout value in seconds (00h = never) 02h MW386 v2+ BX = logical device number 00h-03h = LPT1-LPT4 04h-07h = COM1-COM4 CX = timeout value in seconds (00h = never) Return: AL = status (see AH=81h) Notes: modes 00h and 01h affect only the current logical LPT1 if no data is sent to a printer for the specified amount of time, the spool file will be closed and queued for printing automatically SeeAlso: AH=97h ----------17A0------------------------------- INT 17 - Alloy MW386 - SPOOL COPY OF FILE AH = A0h AL = mode 00h NTNX compatibility DX = ??? (NTNX, MW386 v1.x only) 02h MW386 v2+ BX = logical device number 00h-03h = LPT1-LPT4 04h-07h = COM1-COM4 CX:SI -> ASCIZ pathname Return: AL = status (see AH=81h) Notes: makes a copy of the specified file in the spooler's directory, allowing the original file to be modified or deleted while the copy is printed in mode 00h, the file is printed on logical LPT1 SeeAlso: AH=90h ----------17A4------------------------------- INT 17 - Alloy MW386 - ENABLE/DISABLE FORM FEED AH = A4h AL = new state 00h form feed after end of print job disabled 01h form feed enabled Return: AL = status (see AH=81h) Note: only affects the current logical LPT1 SeeAlso: AH=9Ah,AH=A6h,INT 7F/AH=05h"NTNX (Host)" ----------17A6------------------------------- INT 17 - Alloy MW386 - ENABLE/DISABLE BANNER PAGE AH = A6h AL = new state 00h banner page before print job disabled 01h banner page enabled Return: AL = status (see AH=81h) Note: only affects the current logical LPT1 SeeAlso: AH=A4h ----------17A7------------------------------- INT 17 - Alloy MW386 v2+ - GET/SET SPOOL FLAGS AH = A7h AL = spool flags bit 0: banner page enabled (see AH=A4h) 1: form feed enabled (see AH=A6h) 2-6: reserved (0) 7: set flags if 1, get flags if 0 BX = logical device number 00h-03h = LPT1-LPT4 04h-07h = COM1-COM4 Return: AL = status (see AH=81h) Note: the documentation does not state which register contains the result of a GET SeeAlso: AH=A4h,AH=A6h ----------17A8------------------------------- INT 17 - Alloy MW386 - DEFINE TEMPORARY FILENAME AH = A8h CX:SI -> ASCIZ filename without extension (max 8 chars) Return: AL = status (see AH=81h) Note: allows application to specify banner page filename for spool files collected from the application's printer output SeeAlso: AH=A9h ----------17A9------------------------------- INT 17 - Alloy MW386 - CHANGE TEMPORARY SPOOL DRIVE AH = A9h AL = new spool drive (2=C:,3=D:,etc) Return: AL = status (see AH=81h) Note: does not remove previous spooling directory since jobs may be pending SeeAlso: AH=A8h ----------17AA------------------------------- INT 17 - Alloy MW386 v2+ - GET REAL-TIME PRINTER STATUS AH = AAh AL = mode 00h NTNX DX = NTNX printer number (see AH=88h) 01h MW386 DX = MW386 printer number Return: AH = instantaneous printer status 00h printer ready 01h not ready 12h off line 13h out of paper 14h general device failure 15h device timeout 16h bad device number ----------17AF------------------------------- INT 17 - Alloy MW386 - CHECK SPOOLER AH = AFh Return: AX = 55AAh if spooler available ----------17C0------------------------------- INT 17 - PC Magazine PCSpool - GET CONTROL BLOCK ADDRESS AH = C0h DX = printer port (0-3) Return: ES:BX -> control block (see below) SeeAlso: AH=C1h Format of control block: Offset Size Description 00h WORD printer number 02h WORD address of printer status port 04h WORD number of first record in queue 06h WORD number of last record in queue 08h DWORD characters already printed 0Ch DWORD number of characters remaining 10h DWORD pointer to dequeue buffer 14h DWORD previous count of characters printed 18h DWORD number of clock ticks taken to print them 1Ch WORD offset of next character to output 1Eh WORD offset of next character to print 20h WORD pointer to spooling queue record 22h BYTE current spooling status 23h BYTE current printer status: 00h OK 01h not ready 02h paused with message 03h paused 04h initializing FEh non-existent port FFh not spooled 24h BYTE current control record type 25h WORD observed printer speed 27h WORD characters to print per service 29h BYTE 01h if disk write needed 2Ah BYTE 01h if queued data should be flushed 2Bh BYTE 01h to update cps status ----------17C1-------------------------------- INT 17 - PC Magazine PCSpool - BUILD PAUSE CONTROL RECORD AH = C1h DX = printer port (0-3) DS:SI -> ASCIIZ string to save for display Note: flushes pending writes SeeAlso: AH=C0h,AH=C2h ----------17C2------------------------------- INT 17 - PC Magazine PCSpool - FLUSH PENDING WRITES AH = C2h DX = printer port (0-3) SeeAlso: AH=C3h ----------17C3------------------------------- INT 17 - PC Magazine PCSpool - CANCEL PRINTER QUEUE (FLUSH ALL QUEUED OUTPUT) AH = C3h DX = printer port (0-3) SeeAlso: AH=C2h,AH=C7h ----------17C4------------------------------- INT 17 - PC Magazine PCSpool - QUERY SPOOLER ACTIVE AH = C4h Return: DI = B0BFh SI = segment ----------17C5------------------------------- INT 17 - PC Magazine PCSpool - JOB SKIP PRINTER QUEUE AH = C5h DX = printer port (0-3) Note: cancels up to the pause record ----------17C6------------------------------- INT 17 - PC Magazine PCSpool - CHECK PRINTER QUEUE STATUS AH = C6h DX = printer port (0-3) Return: AX = 0 printer not active or at pause = 1 printer busy ----------17C7------------------------------- INT 17 - PC Magazine PCSpool - CLOSE QUEUE AH = C7h DX = printer port (0-3) SeeAlso: AH=C3h ----------17CD00----------------------------- INT 17 - INSET - EXECUTE COMMAND STRING AX = CD00h DS:DX -> ASCIZ command string (max 80 bytes) Return: CX = 07C2h (1986d) Note: user interface menus pop up after last command, unless that command exits INSET ----------17CD01----------------------------- INT 17 - INSET - GET IMAGE SIZE AX = CD01h DS:DX -> ASCIZ name of image file Return: AX = height in 1/720th inch BX = width in 1/720th inch CX = 07C2h (1986d) ----------17CD02----------------------------- INT 17 - INSET - INITIALIZE AX = CD02h Return: CX = 07C2h (1986d) Note: all open files are closed and the printer is reset SeeAlso: AX=CD04h ----------17CD03----------------------------- INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE AX = CD03h Return: CX = 07C2h (1986d) ----------17CD04----------------------------- INT 17 - INSET - INITIALIZE LINKED MODE AX = CD04h ES:SI -> FAR routine for linked mode Return: CX = 07C2h Note: calling sequence for linked-mode routine AL = 00h send character in BL to printer = 01h send CX bytes from DS:DX to printer = 02h move print head to horizontal starting position of image return code for linked-mode routine: AX = 0000h success = 0001h failure SeeAlso: AX=CD02h,AX=CD08h ----------17CD05----------------------------- INT 17 - INSET - START MERGING IMAGE INTO TEXT AX = CD05h DS:DX -> ASCIZ name of PIX file CX = left margin of text in 1/720th inch Return: AH = printer type 00h page-oriented (multiple images may be placed side-by-side) 01h line-oriented (use AX=CD06h for vertical paper movement) CX = 07C2h (1986d) SeeAlso: AX=CD07h ----------17CD06----------------------------- INT 17 - INSET - GRAPHICS LINE FEED AX = CD06h Return: AH = completion status 00h image complete 01h image incomplete CX = 07C2h (1986d) SeeAlso: AX=CD09h ----------17CD07----------------------------- INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER AX = CD07h Return: CX = 07C2h SeeAlso: AX=CD05h ----------17CD08----------------------------- INT 17 - INSET - CANCEL LINK MODE AX = CD08h Return: CX = 07C2h SeeAlso: AX=CD04h ----------17CD09----------------------------- INT 17 - INSET - ALTER TEXT LINE SPACING AX = CD09h CX = line spacing in 1/720th inch Return: CX = 07C2h Note: not yet implemented, line spacing is currently fixed at 1/6 inch SeeAlso: AX=CD06h ----------17CD0A----------------------------- INT 17 - INSET - GET SETUP AX = CD0Ah DS:DX -> buffer for IN.SET data Return: CX = 07C2h ----------17CD0B----------------------------- INT 17 - INSET - START GETTING SCALED IMAGE AX = CD0Bh DS:SI -> ASCIZ pathname of .PIX file BX = number of bitplanes CX = number of rows in output bitmap DX = number of columns in output bitmap Return: AX = status 0000h OK FFFFh error Note: image is returned in strips by repeated calls to AX=CD0Ch ----------17CD0C----------------------------- INT 17 - INSET - GET NEXT IMAGE STRIP AX = CD0Ch Return: AX = status 0000h OK but not complete 0001h OK and image complete FFFFh error DS:SI -> buffer (max 4K) for bit map strip CX = start row DX = number of rows BX = offset in bytes between bit planes Note: buffer may be overwritten by subsequent calls SeeAlso: AX=CD0Bh ----------17F0------------------------------- INT 17 - NorthNet Jetstream API - INSTALLATION CHECK AH = F0h DX = printer port (0-3) Return: AX = 0001h Jetstream present else non-Jetstream port Note: NorthNet Jetstream is a high-performance DMA-driven parallel card able to drive printers at up to 80000 characters per second ----------17F1------------------------------- INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER AH = F1h CX = data buffer length DX = printer port (0-3) DS:SI -> data buffer Return: AX = status 0000h printer not ready (see also AH=02h) other printing started SeeAlso: AH=00h,AH=F2h,AH=F3h,AH=F5h ----------17F2------------------------------- INT 17 - NorthNet Jetstream API - GET PRINT PROGRESS STATUS AH = F2h DX = printer port (0-3) Return: AX = status 0000h prior print request finished other number of characters left to print SeeAlso: AH=02h,AH=F1h,AH=F3h ----------17F3------------------------------- INT 17 - NorthNet Jetstream API - ABORT PRINT OPERATION AH = F3h DX = printer port (0-3) Return: AX = number of unprinted characters due to abort SeeAlso: AH=F1h,AH=F4h ----------17F4------------------------------- INT 17 - NorthNet Jetstream API - SET COMPLETION (POST) ADDRESS AH = F4h DX = printer port (0-3) DS:DS -> FAR post address (called with interrupts on) SeeAlso: AH=F1h,AH=F3h ----------17F5------------------------------- INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER FROM EXTENDED MEMORY AH = F5h CX = data buffer length DX = printer port (0-3) DS:SI -> data buffer (32-bit physical address) Return: AX = status 0000h printer not ready (see also AH=02h) other printing started SeeAlso: AH=F1h ----------18--------------------------------- INT 18 - START CASSETTE BASIC Note: only PCs produced by IBM contain BASIC in ROM, so the action is unpredicatable on compatibles; this interrupt often reboots the system, and often has no effect at all SeeAlso: INT 86"NetBIOS" ----------1800------------------------------- INT 18 - NEC PC-9800 series - KEYBOARD - GET KEYSTROKE AH = 00h Return: AX = keystroke SeeAlso: AH=01h,AH=02h,INT 16/AH=00h ----------1801------------------------------- INT 18 - NEC PC-9800 series - KEYBOARD - CHECK FOR KEYSTROKE AH = 01h Return: ZF set if no keystroke available ZF clear if keystroke available AX = keystroke SeeAlso: AH=00h,AH=02h,INT 16/AH=01h ----------1802------------------------------- INT 18 - NEC PC-9800 series - KEYBOARD - GET SHIFT STATUS AH = 02h Return: AL = shift flags SeeAlso: AH=00h,AH=02h,AH=03h,AH=04h,INT 16/AH=02h ----------18--------------------------------- INT 18 - NEC PC-9800 series - KEYBOARD AH = function 03h initialize keyboard 04h key pressed ??? Return: ??? Note: details are not available at this time SeeAlso: INT 16/AH=00h,INT 16/AH=01h,INT 16/AH=02h ----------18--------------------------------- INT 18 - NEC PC-9800 series - VIDEO AH = function 0Ah set video mode 0Bh get video mode 0Ch start text screen display 0Dh end text screen display 0Eh set single display area 0Fh set multiple display area 10h set cursor shape 11h display cursor 12h terminate cursor 13h set cursor position 14h read font patter 16h initialize text video RAM 1Ah define user character ??? Return: ??? Notes: details are not available at this time text video RAM is located at segments A000h (characters) and A200h (attributes) ----------19--------------------------------- INT 19 - SYSTEM - BOOTSTRAP LOADER Reboot the system without clearing memory or restoring interrupt vectors. Because interrupt vectors are preserved, this interrupt usually causes a system hang if any TSRs have hooked vectors from 00h through 1Ch, particularly INT 08. Usually, the BIOS will try to read sector 1, head 0, track 0 from drive A: to 0000h:7C00h. If this fails, and a hard disk is installed, the BIOS will read sector 1, head 0, track 0 of the first hard disk. This sector should contain a master bootstrap loader and a partition table. After loading the master boot sector at 0000h:7C00h, the master bootstrap loader is given control. It will scan the partition table for an active partition, and will then load the operating system's bootstrap loader (contained in the first sector of the active partition) and give it control. True IBM PCs issue an INT 18 if neither floppy nor hard disk have a valid boot sector. Notes: to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in 0040h:0072h and jump to FFFFh:0000h. For a cold boot equivalent to a reset, store 0000h at 0040h:0072h before jumping. VDISK.SYS hooks this interrupt to allow applications to find out how much extended memory has been used by VDISKs (see below). DOS 3.3+ PRINT hooks INT 19 but does not set up a correct VDISK header block at the beginning of its INT 19 handler segment, thus causing some programs to overwrite extended memory which is already in use. default handler is at F000h:E6F2h for 100% compatible BIOSes SeeAlso: INT 14/AH=17h,INT 18 Format of VDISK header block (at beginning of INT 19 handler's segment): Offset Size Description 00h 18 BYTEs n/a (for VDISK.SYS, the device driver header) 12h 11 BYTEs signature string "VDISK Vn.m" for VDISK.SYS version n.m 1Dh 15 BYTEs n/a 2Ch 3 BYTEs linear address of first byte of available extended memory Format of hard disk master boot sector: Offset Size Description 00h 446 BYTEs Master bootstrap loader code 1BEh 16 BYTEs partition record for partition 1 (see below) 1CEh 16 BYTEs partition record for partition 2 1DEh 16 BYTEs partition record for partition 3 1EEh 16 BYTEs partition record for partition 4 1FEh WORD signature, AA55h indicates valid boot block Format of partition record: Offset Size Description 00h BYTE boot indicator (80h = active partition) 01h BYTE partition start head 02h BYTE partition start sector (bits 0-5) 03h BYTE partition start track (bits 8,9 in bits 6,7 of sector) 04h BYTE operating system indicator (see below) 05h BYTE partition end head 06h BYTE partition end sector (bits 0-5) 07h BYTE partition end track (bits 8,9 in bits 6,7 of sector) 08h DWORD sectors preceding partition 0Ch DWORD length of partition in sectors Values for operating system indicator: 00h empty 01h DOS 12-bit FAT 02h XENIX root file system 03h XENIX /usr file system (obsolete) 04h DOS 16-bit FAT 05h DOS 3.3+ extended partition 06h DOS 3.31+ Large File System 07h QNX 07h OS/2 HPFS 07h Advanced Unix 08h AIX bootable partition, SplitDrive 09h AIX data partition 09h Coherent 0Ah OPUS 10h OPUS 40h VENIX 80286 50h Disk Manager, read-only partition 51h Novell??? 51h Disk Manager, read/write partition 52h CP/M 52h Microport System V/386 56h GoldenBow VFeature 61h SpeedStor 63h Unix SysV/386, 386/ix 63h Mach, MtXinu BSD 4.3 on Mach 63h GNU HURD 64h Novell NetWare 75h PC/IX 80h Minix v1.1 - 1.4a 81h Minix v1.4b+ 81h Linux 82h Linux Swap partition (planned) 93h Amoeba file system 94h Amoeba bad block table B7h BSDI file system (secondarily swap) B8h BSDI swap partition (secondarily file system) C6h DR-DOS 6.0 LOGIN.EXE-secured partition DBh CP/M, Concurrent CP/M, Concurrent DOS DBh CTOS (Convergent Technologies OS) E1h SpeedStor 12-bit FAT extended partition E4h SpeedStor 16-bit FAT extended partition F2h DOS 3.3+ secondary FEh LANstep FFh Xenix bad block table ----------1A00------------------------------- INT 1A - TIME - GET SYSTEM TIME AH = 00h Return: CX:DX = number of clock ticks since midnight AL = midnight flag, nonzero if midnight passed since time last read Notes: there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs IBM and many clone BIOSes set the flag for AL rather than incrementing it, leading to loss of a day if two consecutive midnights pass without a request for the time (e.g. if the system is on but idle) SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch ----------1A01------------------------------- INT 1A - TIME - SET SYSTEM TIME AH = 01h CX:DX = number of clock ticks since midnight SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh ----------1A02------------------------------- INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS) AH = 02h Return: CF clear if successful CH = hour (BCD) CL = minutes (BCD) DH = seconds (BCD) DL = daylight savings flag (00h standard time, 01h daylight time) CF set on error (i.e. clock not running or in middle of update) SeeAlso: AH=00h ----------1A03------------------------------- INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS) AH = 03h CH = hour (BCD) CL = minutes (BCD) DH = seconds (BCD) DL = daylight savings flag (00h standard time, 01h daylight time) SeeAlso: AH=01h ----------1A04------------------------------- INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS) AH = 04h Return: CF clear if successful CH = century (BCD) CL = year (BCD) DH = month (BCD) DL = day (BCD) CF set on error SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah ----------1A05------------------------------- INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS) AH = 05h CH = century (BCD) CL = year (BCD) DH = month (BCD) DL = day (BCD) SeeAlso: AH=04h,INT 21/AH=2Bh ----------1A06------------------------------- INT 1A - TIME - SET ALARM (AT,XT286,PS) AH = 06h CH = hour (BCD) CL = minutes (BCD) DH = seconds (BCD) Return: CF set on error (alarm already set or clock stopped for update) CF clear if successful Note: the alarm occurs every 24 hours until turned off, invoking INT 4A each time SeeAlso: AH=07h,INT 4A ----------1A07------------------------------- INT 1A - TIME - CANCEL ALARM (AT,XT286,PS) AH = 07h Return: alarm disabled Note: does not disable the real-time clock's IRQ SeeAlso: AH=06h,INT 70 ----------1A08------------------------------- INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE) AH = 08h CH = hours in BCD CL = minutes in BCD DH = seconds in BCD ----------1A09------------------------------- INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30) AH = 09h Return: CH = hours in BCD CL = minutes in BCD DH = seconds in BCD DL = alarm status 00h alarm not enabled 01h alarm enabled but will not power up system 02h alarm will power up system ----------1A0A------------------------------- INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS) AH = 0Ah Return: CF set on error CF clear if successful CX = count of days since Jan 1,1980 SeeAlso: AH=04h,AH=0Bh ----------1A0B------------------------------- INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS) AH = 0Bh CX = count of days since Jan 1,1980 Return: CF set on error CF clear if successful SeeAlso: AH=05h,AH=0Ah ----------1A10------------------------------- INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE AH = 10h ??? Return: ??? SeeAlso: AH=11h,AH=12h,INT 17/AH=01h ----------1A11------------------------------- INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER AH = 11h ??? Return: ??? SeeAlso: AH=10h,AH=12h,INT 17/AH=00h ----------1A12------------------------------- INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS AH = 12h ??? Return: ??? SeeAlso: AH=10h,AH=11h,INT 17/AH=02h ----------1A3601----------------------------- INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK AX = 3601h Return: DS:SI = routine to monitor keyboard input, immediately preceded by the ASCIZ string "WPCORP\0" Notes: WordPerfect 5.0 will call this interrupt at start up to determine if a third party product wants to interface with it. The third party product must intercept this interrupt and return the address of a keyboard monitor routine. Before checking for keyboard input, and after every key entered by the user, Word Perfect will call the routine whose address was provided in DS:SI with the following parameters: Entry: AX = key code or 0 BX = WordPerfect state flag Exit: AX = 0 or key code BX = 0 or segment address of buffer with key codes See the "WordPerfect 5.0 Developer's Toolkit" for further information. SeeAlso: INT 16/AX=5500h ----------1A--------------------------------- INT 1A - SNAP.EXE - API AH = function (60h-64h,69h-78h) (see individual entries below) AL = number of words on stack (00h-09h or FFh; FFh is same as 00h) STACK: appropriate arguments Return: AX = status 0000h successful FFFFh failed (invalid function/parameter) STACK unchanged ----------1A6108----------------------------- INT 1A - SNAP.EXE - ??? AX = 6108h STACK: WORD index of ??? (0000h-0009h) DWORD pointer to ??? WORD ??? DWORD pointer to ??? WORD ??? WORD ??? Return: ??? STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. ----------1A6205----------------------------- INT 1A - SNAP.EXE - ??? AX = 6205h STACK: WORD index of ??? (0000h-0009h) DWORD pointer to ??? WORD ??? WORD ??? Return: ??? STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. ----------1A6308----------------------------- INT 1A - SNAP.EXE - ??? AX = 6308h STACK: 8 WORDs ??? Return: ??? STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. ----------1A6405----------------------------- INT 1A - SNAP.EXE - ??? AX = 6405h STACK: 5 WORDs ??? Return: ??? STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. ----------1A6900----------------------------- INT 1A - SNAP.EXE - GET RESIDENT DATA SEGMENT AX = 6900h Return: AX = value used for DS by resident code Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. SeeAlso: AX=6F01h ----------1A6A01----------------------------- INT 1A - SNAP.EXE - ??? AX = 6A01h STACK: WORD ??? Return: AX = ??? ??? STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. ----------1A6B01----------------------------- INT 1A - SNAP.EXE - SET ??? AX = 6B01h STACK: WORD offset within ??? of ??? Return: STACK unchanged Notes: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. this call is a NOP if the specified offset is 0000h ----------1A6C04----------------------------- INT 1A - SNAP.EXE - SET ??? AX = 6C04h STACK: WORD offset within ??? of destination (nonzero) WORD segment of source buffer WORD offset of source buffer WORD number of bytes to copy Return: AX = offset of byte after last one copied to destination STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. SeeAlso: AX=6D04h ----------1A6D04----------------------------- INT 1A - SNAP.EXE - GET ??? AX = 6D04h STACK: WORD offset within ??? of source WORD segment of destination buffer WORD offset of destination buffer WORD number of bytes to copy Return: AX = offset of byte after last one copied from source buffer filled STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. SeeAlso: AX=6C04h ----------1A6E01----------------------------- INT 1A - SNAP.EXE - SET ??? AX = 6E01h STACK: WORD new value for ??? Return: AX = old value of ??? STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. ----------1A6F01----------------------------- INT 1A - SNAP.EXE - INSTALLATION CHECK AX = 6F01h STACK: WORD 0000h Return: AX = status 0000h SNAP is resident other SNAP not present STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP, and is required by PCVENUS (a network shell). The combination of SNAP and PCVENUS allows the use of the Andrew File System as one or more networked drives. SeeAlso: AX=6900h,AX=7400h ----------1A7002----------------------------- INT 1A - SNAP.EXE - SET ??? AX = 7002h STACK: WORD index of ??? (0000h-0009h) WORD new value for ??? Return: AX = status 0000h successful FFFFh failed (top word on stack not in range 00h-09h) STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. SeeAlso: AX=7101h ----------1A7101----------------------------- INT 1A - SNAP.EXE - GET ??? AX = 7101h STACK: WORD index of ??? (0000h-0009h) Return: AX = ??? STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. SeeAlso: AX=7002h ----------1A7202----------------------------- INT 1A - SNAP.EXE - ??? AX = 7202h STACK: WORD index of ??? (0000h-0009h) WORD offset within resident data segment of ??? Return: AX = ??? STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. ----------1A7302----------------------------- INT 1A - SNAP.EXE - ??? AX = 7302h STACK: WORD index of ??? (0000h-0009h) WORD offset within resident data segment of ??? Return: AX = ??? ??? STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. ----------1A7400----------------------------- INT 1A - SNAP.EXE - GET VERSION AX = 7400h Return: AX = version (AH=major, AL=minor) Notes: this call is only valid if SNAP is installed SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. SeeAlso: INT 1A/AX=6F01h ----------1A75------------------------------- INT 1A - SNAP.EXE - ??? AH = 75h AL = ??? Return: AX = ??? (0000h) Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. ----------1A77------------------------------- INT 1A - SNAP.EXE - ??? AH = 77h AL = ??? (at least 01h) STACK: WORD ??? ??? Return: ??? STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. ----------1A7802----------------------------- INT 1A - SNAP.EXE - ??? AX = 7802h STACK: WORD ??? WORD ??? Return: ??? STACK unchanged Note: SNAP.EXE is a program written by IBM&CMU included with the Carnegie Mellon University customized version of FTP, Inc.'s PC/TCP. ----------1A7F------------------------------- INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND??? AH = 7Fh ??? Return: ??? SeeAlso: AH=80h,AH=83h,AH=85h ----------1A80------------------------------- INT 1A - PCjr - SET UP SOUND MULTIPLEXOR AH = 80h AL = 00h source is 8253 channel 2 01h source is cassette input 02h source is I/O channel "Audio IN" 03h source is sound generator chip SeeAlso: AH=7Fh,AH=83h ----------1A8100----------------------------- INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND - INSTALLATION CHECK AX = 8100h Return: AH > 80h if supported ----------1A83------------------------------- INT 1A - Tandy 2500, Tandy 1000L series - START PLAYING DIGITAL SOUND AH = 83h AL = volume (0=lowest, 7=highest) CX = number of bytes to play DX = time between sound samples (multiples of 273 nanoseconds) ES:BX -> sound data (array of 8-bit PCM samples) Return: ??? Notes: this call returns immediately while the sound plays in the background The sound data pointed to by ES:BX probably shouldn't cross a 64k boundary. The BIOS appears to call INT 15/AX=91FBh when the sound device underflows to allow another INT 1A/AH=83h for seamless playing of long sounds. SeeAlso: AH=84h,INT 15/AH=91h ----------1A84------------------------------- INT 1A - Tandy 2500, Tandy 1000L series - STOP PLAYING DIGITAL SOUND AH = 84h Return: ??? SeeAlso: AH=83h,AH=85h ----------1A85------------------------------- INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND??? AH = 85h ??? Return: ??? SeeAlso: AH=7Fh,AH=83h ----------1AA0------------------------------- INT 1A - Disk Spool II v2.07 - INSTALLATION CHECK AH = A0h Return: AH = B0h if installed AL = pending INT 1A/AH=D0h subfunction if nonzero??? ES = code segment ES:BX -> name of current spool file ES:SI -> current despool file CL = 00h despooler is disabled = 41h despooler is enabled CH = 00h spooler is disabled = 41h spooler is enabled DL = 00h despooler is currently active printing a file = 41h despooler is standing by DH = 00h ??? = 41h ??? DI = 0000h ??? 0001h ??? Note: Disk Spool II is a shareware disk-based print spooler by Budget Software Company SeeAlso: AH=ABh,AH=C0h,AH=D0h ----------1AAB------------------------------- INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK AH = ABh Return: AH = BAh if installed AL = pending INT 1A/AH=ADh subfunction if nonzero??? ES = code segment ES:BX -> name of current spool file ES:SI -> current despool file CL = 00h despooler is disabled = 41h despooler is enabled CH = 00h spooler is disabled = 41h spooler is enabled DL = 00h despooler is currently active printing a file = 41h despooler is standing by DH = 00h ??? = 41h ??? DI = 0000h ??? 0001h ??? Note: Disk Spool II is a shareware disk-based print spooler by Budget Software Company SeeAlso: AH=A0h,AH=ACh,AH=ADh ----------1AAC------------------------------- INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK AH = ACh Return: (see AH=ABh) Note: this function is identical to AH=ABh SeeAlso: AH=A0h,AH=ABh,AH=ADh ----------1AAD------------------------------- INT 1A - Disk Spool II v1.83 - FUNCTION CALLS AH = ADh AL = function code 02h enable spooler only 03h enable the despooler 04h disable the despooler 08h inhibit popup menu 09h enable popup menu 0Ah ??? 0Bh disable the spooler 0Ch start despooler after last successfully printed document??? 0Dh start despooler at the exact point where it last left off??? 0Eh pop up the menu 0Fh ??? 11h ??? 14h ??? 15h ??? 16h ??? 17h ??? 18h ??? 19h ??? 20h clear file pointed to by the despooler??? 21h ??? 22h ??? 23h ??? 30h ??? Return: AH = 00h if successful SeeAlso: AH=ABh ----------1AC0------------------------------- INT 1A - Disk Spool II v2.07 - ALTERNATE INSTALLATION CHECK AH = C0h Return: (see AH=A0h) Note: this call is identical to AH=A0h SeeAlso: AH=A0h,AH=ABh,AH=D0h ----------1AD0------------------------------- INT 1A - Disk Spool II v2.07 - FUNCTION CALLS AH = D0h AL = function code 01h enable spooler and despooler 02h enable spooler only 03h enable despooler at beginning of file 04h disable the despooler 05h disable the despooler and spooler 06h clear the spool file 08h inhibit the popup menu 09h enable the popup menu 0Ah ??? (called by Disk Spool's INT 21 handler) 0Bh disable the spooler 0Ch start despooler after last successfully printed document 0Dh start despooler at the exact point where it last left off 0Eh pop up the menu 0Fh ??? 11h start new spool file??? (called by Disk Spool's INT 21 handler when a program terminates) 14h ??? 15h delete despool file and reset ??? 16h ??? (writes something to unknown file) 17h ??? (writes something to despool file, then reads something else and ???) 18h ??? (reads something from despool file, and then ???) 19h ??? (creates/truncates spool file) 20h clear file pointed to by the despooler 21h ??? (writes something to unknown file) 22h ??? (writes something to spool file if spooler/despooler using same file) 23h ??? (opens/creates unknown file, then ???) 30h ??? 31h ??? 32h beep 33h append CRLF to spool file??? 34h ??? 35h ??? 36h ??? 37h append CRLF to spool file and start a new spool file??? 38h ??? 51h ??? (called by Disk Spool's INT 21 handler) 52h ??? (called by Disk Spool's INT 21 handler) 57h ??? SeeAlso: AH=A0h,AH=ADh ----------1AF7------------------------------- INT 1A - RighTime v1.1 - TEMPORARILY DISABLE AH = F7h Notes: RighTime is a TSR by G.T. Becker which continuously adjusts the system time to correct for clock drift any AH value from F0h-F7h or F9h-FEh will perform this function in version 1.1, but F7h is the function called by transient portion SeeAlso: AH=F8h,AH=FFh"RighTime" ----------1AF8------------------------------- INT 1A - RighTime v1.1 - ENABLE AH = F8h Notes: RighTime is a TSR by G.T. Becker which continuously adjusts the system time to correct for clock drift RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its TeSseRact program identifier based on its current state: "RighTime" when enabled, "RighTim"F7h when disabled. SeeAlso: AH=F7h,AH=FFh"RighTime" ----------1AFE------------------------------- INT 1A - AT&T 6300 - READ TIME AND DATE AH = FEh Return: BX = day count (0 = Jan 1, 1984) CH = hour CL = minute DH = second DL = hundredths SeeAlso: AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch ----------1AFF------------------------------- INT 1A - AT&T 6300 - SET TIME AND DATE AH = FFh BX = day count (0 = Jan 1, 1984) CH = hour CL = minute DH = second DL = hundredths Return: ??? SeeAlso: AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh ----------1AFF------------------------------- INT 1A - RighTime v1.1 - PERMANENTLY DISABLE AH = FFh Notes: RighTime is a TSR by G.T. Becker which continuously adjusts the system time to correct for clock drift upon being permanently disabled, RighTime closes the file handle referencing its executable (which is updated with time correction information every two minutes while RighTime is enabled). ----------1B--------------------------------- INT 1B - KEYBOARD - CONTROL-BREAK HANDLER called when INT 09 determines that Control-Break has been pressed Note: normally points to a short routine in DOS which sets the Ctrl-C flag, thus invoking INT 23h the next time DOS checks for Ctrl-C. SeeAlso: INT 23 ----------1C--------------------------------- INT 1C - TIME - SYSTEM TIMER TICK called on each clock tick by the INT 08 handler Notes: preferred interrupt to chain when a program needs to be invoked regularly not available on NEC 9800-series PCs SeeAlso: INT 08 ----------1D--------------------------------- INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES Note: default parameter table at F000h:F0A4h for 100% compatible BIOSes SeeAlso: INT 10/AH=00h Format of video parameters: Offset Size Description 00h 16 BYTEs 6845 register values for modes 00h and 01h 10h 16 BYTEs 6845 register values for modes 02h and 03h 20h 16 BYTEs 6845 register values for modes 04h and 05h 30h 16 BYTEs 6845 register values for modes 06h and 07h 40h WORD bytes in video buffer for modes 00h and 01h 42h WORD bytes in video buffer for modes 02h and 03h 44h WORD bytes in video buffer for modes 04h and 05h 46h WORD bytes in video buffer for modes 06h and 07h 48h 8 BYTEs columns on screen for each of modes 00h through 07h 50h 8 BYTEs CRT controller mode bytes for each of modes 00h through 07h ----------1E--------------------------------- INT 1E - SYSTEM DATA - DISKETTE PARAMETERS Note: default parameter table at F000h:EFC7h for 100% compatible BIOSes SeeAlso: INT 13/AH=0Fh,INT 41 Format of diskette parameter table: Offset Size Description 00h BYTE first specify byte bits 7-4: step rate 3-0: head unload time (0Fh = 240 ms) 01h BYTE second specify byte bits 7-1: head load time (01h = 4 ms) 0: non-DMA mode (always 0) 02h BYTE delay until motor turned off (in clock ticks) 03h BYTE bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024) 04h BYTE sectors per track 05h BYTE length of gap between sectors (2Ah for 5.25", 1Bh for 3.5") 06h BYTE data length (ignored if bytes-per-sector field nonzero) 07h BYTE gap length when formatting (50h for 5.25", 6Ch for 3.5") 08h BYTE format filler byte (default F6h) 09h BYTE head settle time in milliseconds 0Ah BYTE motor start time in 1/8 seconds ----------1F--------------------------------- INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT points at 1024 bytes of graphics data, 8 bytes for each character 80h-FFh Note: graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100% compatible BIOSes SeeAlso: INT 10/AX=5000h,INT 43 --------------------------------------------- Interrupt List, part 3 of 7 This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown ----------20--------------------------------- INT 20 - Minix - SEND/RECEIVE MESSAGE AX = process ID of other process BX -> message CX = 1 send 2 receive 3 send&receive Note: the message contains the system call number (numbered as in V7 Unix(tm)) and the call parameters ----------20--------------------------------- INT 20 - DOS 1+ - TERMINATE PROGRAM CS = PSP segment Return: never Note: (see notes for INT 21/AH=00h) SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch ----------2100------------------------------- INT 21 - DOS 1+ - TERMINATE PROGRAM AH = 00h CS = PSP segment Notes: Microsoft recomments using INT 21/AH=4Ch for DOS 2+ execution continues at address stored in INT 22 after DOS performs whatever cleanup it needs to do if the PSP is its own parent, the process's memory is not freed; if INT 22 additionally points into the terminating program, the process is effectively NOT terminated not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22 ----------2101------------------------------- INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO AH = 01h Return: AL = character read Notes: ^C/^Break are checked, and INT 23 executed if read character is echoed to standard output standard input is always the keyboard and standard output the screen under DOS 1.x, but they may be redirected under DOS 2+ SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah ----------2102------------------------------- INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT AH = 02h DL = character to write Return: AL = last character output (despite the official docs which state nothing is returned) (at least DOS 3.3-5.0) Notes: ^C/^Break are checked, and INT 23 executed if pressed standard output is always the screen under DOS 1.x, but may be redirected under DOS 2+ the last character output will be the character in DL unless DL=09h on entry, in which case AL=20h as tabs are expanded to blanks SeeAlso: AH=06h,AH=09h ----------2103------------------------------- INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX AH = 03h Return: AL = character read Notes: keyboard checked for ^C/^Break, and INT 23 executed if detected STDAUX is usually the first serial port SeeAlso: AH=04h,INT 14/AH=02h,INT E0/CL=03h ----------2104------------------------------- INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX AH = 04h DL = character to write Notes: keyboard checked for ^C/^Break, and INT 23 executed if detected STDAUX is usually the first serial port if STDAUX is busy, this function will wait until it becomes free SeeAlso: AH=03h,INT 14/AH=01h,INT E0/CL=04h ----------2105------------------------------- INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER AH = 05h DL = character to print Notes: keyboard checked for ^C/^Break, and INT 23 executed if detected STDPRN is usually the first parallel port, but may be redirected under DOS 2+ if the printer is busy, this function will wait SeeAlso: INT 17/AH=00h ----------2106------------------------------- INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT AH = 06h DL = character (except FFh) Return: AL = character output (despite official docs which state nothing is returned) (at least DOS 3.3-5.0) Notes: does not check ^C/^Break writes to standard output, which is always the screen under DOS 1.x, but may be redirected under DOS 2+ SeeAlso: AH=02h,AH=09h ----------2106--DLFF------------------------- INT 21 - DOS 1+ - DIRECT CONSOLE INPUT AH = 06h DL = FFh Return: ZF set if no character available ZF clear if character available AL = character read Notes: ^C/^Break are NOT checked if the returned character is 00h, the user pressed a key with an extended keycode, which will be returned by the next call of this function reads from standard input, which is always the keyboard under DOS 1.x, but may be redirected under DOS 2+ SeeAlso: AH=0Bh ----------2107------------------------------- INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO AH = 07h Return: AL = character read from standard input Notes: does not check ^C/^Break standard input is always the keyboard under DOS 1.x, but may be redirected under DOS 2+ if the interim console flag is set (see AX=6301h), partially-formed double-byte characters may be returned SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah ----------2108------------------------------- INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO AH = 08h Return: AL = character read from standard input Notes: ^C/^Break are checked, and INT 23 executed if detected standard input is always the keyboard under DOS 1.x, but may be redirected under DOS 2+ if the interim console flag is set (see AX=6301h), partially-formed double-byte characters may be returned SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h ----------2109------------------------------- INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT AH = 09h DS:DX -> '$'-terminated string Return: AL = 24h (the '$' terminating the string, despite official docs which state that nothing is returned) (at least DOS 3.3-5.0) Notes: ^C/^Break checked, and INT 23 called if pressed standard output is always the screen under DOS 1.x, but may be redirected under DOS 2+ SeeAlso: AH=02h,AH=06h"OUTPUT" ----------210A------------------------------- INT 21 - DOS 1+ - BUFFERED INPUT AH = 0Ah DS:DX -> buffer (see below) Return: buffer filled with user input Notes: ^C/^Break checked, and INT 23 called if detected reads from standard input, which may be redirected under DOS 2+ if the maximum buffer size (see below) is set to 00h, this call returns immediately without reading any input SeeAlso: AH=0Ch,INT 2F/AX=4810h Format of input buffer: Offset Size Description 00h BYTE maximum characters buffer can hold 01h BYTE (input) number of chars from last input which may be recalled (return) number of characters actually read, excluding CR 02h N BYTEs actual characters read, including the final carriage return ----------210A00----------------------------- INT 21 - WCED v1.6 - INSTALLATION CHECK AX = 0A00h DS:DX -> 6-byte buffer whose first two bytes must be 00h Return: buffer offset 02h-05h filled with "Wced" if installed Note: WCED is a free command-line editor and history utility by Stuart Russell SeeAlso: AH=FFh"CED" ----------210B------------------------------- INT 21 - DOS 1+ - GET STDIN STATUS AH = 0Bh Return: AL = 00h if no character available = FFh if character is available Notes: ^C/^Break checked, and INT 23 called if pressed standard input is always the keyboard under DOS 1.x, but may be redirected under DOS 2+ if the interim console flag is set (see AX=6301h), this function returns AL=FFh if a partially-formed double-byte character is available SeeAlso: AH=06h"INPUT",AX=4406h ----------210B56----------------------------- INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK AX = 0B56h Return: AX = 4952h if resident SeeAlso: AX=0D20h ----------210C------------------------------- INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT AH = 0Ch AL = STDIN input function to execute after flushing buffer other registers as appropriate for the input function Return: as appropriate for the specified input function Note: if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but no input is attempted SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah ----------210D------------------------------- INT 21 - DOS 1+ - DISK RESET AH = 0Dh Notes: writes all modified disk buffers to disk, but does not update directory information (that is only done when files are closed or a SYNC call is issued) SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h ----------210D20----------------------------- INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK AX = 0D20h Return: AX = 1971h if resident SeeAlso: AX=0B56h,AH=30h/DX=ABCDh ----------210E------------------------------- INT 21 - DOS 1+ - SELECT DEFAULT DRIVE AH = 0Eh DL = new default drive (00h = A:, 01h = B:, etc) Return: AL = number of potentially valid drive letters Notes: under Novell NetWare, the return value is always 32, the number of drives that NetWare supports under DOS 3+, the return value is the greatest of 5, the value of LASTDRIVE= in CONFIG.SYS, and the number of drives actually present on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy may be accessed as either A: or B: otherwise, the return value is the highest drive actually present DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives, and 3+ a maximum of 26 drives SeeAlso: AH=19h,AH=3Bh,AH=DBh ----------210F------------------------------- INT 21 - DOS 1+ - OPEN FILE USING FCB AH = 0Fh DS:DX -> unopened File Control Block (see below) Return: AL = status 00h successful FFh file not found or access denied Notes: (DOS 3.1+) file opened for read/write in compatibility mode an unopened FCB has the drive, filename, and extension fields filled in and all other bytes cleared not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=10h,AH=16h,AH=3Dh Format of File Control Block: Offset Size Description -7 BYTE extended FCB if FFh -6 5 BYTEs reserved -1 BYTE file attribute if extended FCB 00h BYTE drive number (0 = default, 1 = A, etc) 01h 8 BYTEs blank-padded file name 09h 3 BYTEs blank-padded file extension 0Ch WORD current block number 0Eh WORD logical record size 10h DWORD file size 14h WORD date of last write (see AX=5700h) 16h WORD time of last write (see AX=5700h) (DOS 1.1+) 18h 8 BYTEs reserved (see below) 20h BYTE record within current block 21h DWORD random access record number (if record size is > 64 bytes, high byte is omitted) Note: to use an extended FCB, you must specify the address of the FFh flag at offset -7, rather than the address of the drive number field Format of reserved field for DOS 1.0: Offset Size Description 16h WORD location in directory (if high byte = FFh, low byte is device ID) 18h WORD number of first cluster in file 1Ah WORD last cluster number accessed (absolute) 1Ch WORD relative current cluster number 1Eh BYTE dirty flag (00h = not dirty) 1Fh BYTE unused Format of reserved field for DOS 1.10-1.25: Offset Size Description 18h BYTE bit 7: set if logical device bit 6: not dirty bits 5-0: disk number or logical device ID 19h WORD starting cluster number 1Bh WORD absolute current cluster number 1Dh WORD relative current cluster number 1Fh BYTE unused Format of reserved field for DOS 2.x: Offset Size Description 18h BYTE bit 7: set if logical device bit 6: set if open??? bits 5-0: ??? 19h WORD starting cluster number 1Bh WORD ??? 1Dh BYTE ??? 1Eh BYTE ??? 1Fh BYTE ??? Format of reserved field for DOS 3.x: Offset Size Description 18h BYTE number of system file table entry for file 19h BYTE attributes bits 7,6: 00 = SHARE.EXE not loaded, disk file 01 = SHARE.EXE not loaded, character device 10 = SHARE.EXE loaded, remote file 11 = SHARE.EXE loaded, local file bits 5-0: low six bits of device attribute word ---SHARE.EXE loaded, local file (DOS 3.x and 5.0)--- 1Ah WORD starting cluster of file 1Ch WORD (DOS 3.x) offset within SHARE of sharing record (see AH=52h) (DOS 5.0) unique sequence number of sharing record 1Eh BYTE file attribute 1Fh BYTE ??? ---SHARE.EXE loaded, remote file--- 1Ah WORD number of sector containing directory entry 1Ch WORD relative cluster within file of last cluster accessed 1Eh BYTE absolute cluster number of last cluster accessed 1Fh BYTE ??? ---SHARE.EXE not loaded--- 1Ah BYTE (low byte of device attribute word AND 0Ch) OR open mode 1Bh WORD starting cluster of file 1Dh WORD number of sector containing directory entry 1Fh BYTE number of directory entry within sector Note: if FCB opened on character device, DWORD at 1Ah is set to the address of the device driver header, then the BYTE at 1Ah is overwritten. ----------2110------------------------------- INT 21 - DOS 1+ - CLOSE FILE USING FCB AH = 10h DS:DX -> File Control Block (see AH=0Fh) Return: AL = status 00h successful FFh failed Notes: a successful close forces all disk buffers used by the file to be written and the directory entry to be updated not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=0Fh,AH=16h,AH=3Eh ----------2111------------------------------- INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB AH = 11h DS:DX -> unopened FCB (see AH=0Fh), may contain '?' wildcards Return: AL = status 00h successful [DTA] unopened FCB for first matching file FFh no matching filename, or bad FCB Notes: the type of the returned FCB depends on whether the input FCB was a normal or an extended FCB for extended FCBs with search attribute 08h, the volume label (if any) will be returned even if the current directory is not the root dir. DOS 3+ also allows the '*' wildcard the search FCB must not be modified if AH=12h will be used to continue searching; DOS 3.3 has set the following parts of the FCB: 0Ch BYTE ??? 0Dh WORD directory entry number of matching file 0Fh WORD cluster number of current directory 11h 4 BYTEs ??? 15h BYTE drive number (1=A:) at least for DOS 3.3, the unopened FCB in the DTA is actually the drive number followed by the file's directory entry SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh ----------2112------------------------------- INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB AH = 12h DS:DX -> unopened FCB (see AH=0Fh) Return: AL = status 00h successful [DTA] = unopened FCB FFh no more matching filenames Note: (see AH=11h) assumes that successful FindFirst executed on search FCB before call SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch ----------2113------------------------------- INT 21 - DOS 1+ - DELETE FILE USING FCB AH = 13h DS:DX -> unopened FCB (see AH=0Fh), filename filled with template for deletion ('?' wildcards allowed) Return: AL = status 00h one or more files successfully deleted FFh no matching files or all were read-only or locked Notes: DOS 1.25+ deletes everything in the current directory (including subdirectories) and sets the first byte of the name to 00h (entry never used) instead of E5h if called on an extended FCB with filename '???????????' and bits 0-4 of the attribute set (bits 1 and 2 for DOS 1.x). This may have originally been an optimization to minimize directory searching after a mass deletion (DOS 1.25+ stop the directory search upon encountering a never-used entry), but can corrupt the filesystem under DOS 2+ because subdirectories are removed without deleting the files they contain. currently-open files should not be deleted SeeAlso: AH=41h,INT 2F/AX=1113h ----------2114------------------------------- INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE AH = 14h DS:DX -> opened FCB (see AH=0Fh) Return: AL = status 00h successful 01h end of file (no data) 02h segment wrap in DTA 03h end of file, partial record read [DTA] = record read from file Notes: reads a record of the size specified in the FCB beginning at the current file position, then updates the current block and current record fields in the FCB if a partial record was read, it is zero-padded to the full size not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh,INT 2F/AX=1108h ----------2115------------------------------- INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE AH = 15h DS:DX -> opened FCB (see AH=0Fh) [DTA] = record to write Return: AL = status 00h successful 01h disk full 02h segment wrap in DTA Notes: writes a record of the size specified in the FCB beginning at the current file position, then updates the current block and current record fields in the FCB if less than a full sector is written, the data is placed in a DOS buffer to be written out at a later time not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h ----------2116------------------------------- INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB AH = 16h DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed Return: AL = status 00h successful FFh directory full or file exists and is read-only or locked Notes: if file already exists, it is truncated to zero length if an extended FCB is used, the file is given the attribute in the FCB not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=0Fh,AH=10h,AH=3Ch ----------2117------------------------------- INT 21 - DOS 1+ - RENAME FILE USING FCB AH = 17h DS:DX -> modified FCB (see also AH=0Fh) the old filename ('?' wildcards OK) is in the standard location while the new filename ('?' wildcards OK) is stored in the 11 bytes beginning at offset 11h Return: AL = status 00h successfully renamed FFh no matching files,file is read-only, or new name already exists Note: subdirectories may be renamed using an extended FCB with the appropriate attribute SeeAlso: AH=0Fh,AH=13h,AH=56h,INT 2F/AX=1111h ----------2118------------------------------- INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY AH = 18h Return: AL = 00h Note: corresponds to the CP/M BDOS function "get bit map of logged drives", which is meaningless under MSDOS SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h ----------2119------------------------------- INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE AH = 19h Return: AL = drive (00h = A:, 01h = B:, etc) SeeAlo: AH=0Eh,AH=47h ----------211A------------------------------- INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS AH = 1Ah DS:DX -> Disk Transfer Area (DTA) Note: the DTA is set to PSP:0080h when a program is started SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh ----------211B------------------------------- INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE AH = 1Bh Return: AL = sectors per cluster (allocation unit) CX = bytes per sector DX = total number of clusters DS:BX -> media ID byte (see below) Note: under DOS 1.x, DS:BX points at an actual copy of the FAT; later versions return a pointer to a copy of the FAT's ID byte SeeAlso: AH=1Ch,AH=36h Values for media ID byte: FFh floppy, double-sided, 8 sectors per track (320K) FEh floppy, single-sided, 8 sectors per track (160K) FDh floppy, double-sided, 9 sectors per track (360K) FCh floppy, single-sided, 9 sectors per track (180K) F9h floppy, double-sided, 15 sectors per track (1.2M) F8h hard disk F0h other ----------211C------------------------------- INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE AH = 1Ch DL = drive (00h = default, 01h = A:, etc) Return: AL = sectors per cluster (allocation unit) CX = bytes per sector DX = total number of clusters DS:BX -> media ID byte (see AH=1Bh) Note: under DOS 1.x, DS:BX points at an actual copy of the FAT; later versions return a pointer to a copy of the FAT's ID byte SeeAlso: AH=1Bh,AH=36h ----------211D------------------------------- INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY AH = 1Dh Return: AL = 00h Note: corresponds to the CP/M BDOS function "get bit map of read-only drives", which is meaningless under MSDOS SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h ----------211E------------------------------- INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY AH = 1Eh Return: AL = 00h Note: corresponds to a CP/M BDOS function which is meaningless under MSDOS SeeAlso: AH=18h,AH=1Dh,AH=20h ----------211F------------------------------- INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE AH = 1Fh Return: AL = status 00h successful DS:BX -> Drive Parameter Block (DPB) (see below for DOS 1.x, AH=32h for DOS 2+) FFh invalid drive Note: documented for DOS 5.0, but undocumented in prior versions SeeAlso: AH=32h Format of DOS 1.1 and MSDOS 1.25 drive parameter block: Offset Size Description 00h BYTE sequential device ID 01h BYTE logical drive number (0=A:) 02h WORD bytes per sector 04h BYTE highest sector number within a cluster 05h BYTE shift count to convert clusters into sectors 06h WORD starting sector number of first FAT 08h BYTE number of copies of FAT 09h WORD number of directory entries 0Bh WORD number of first data sector 0Dh WORD highest cluster number (number of data clusters + 1) 0Fh BYTE sectors per FAT 10h WORD starting sector of directory 12h WORD address of allocation table Note: the DOS 1.0 table is the same except that the first and last fields are missing ----------2120------------------------------- INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY AH = 20h Return: AL = 00h Note: corresponds to the CP/M BDOS function "get/set default user number", which is meaningless under MSDOS SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h ----------2121------------------------------- INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE AH = 21h DS:DX -> opened FCB (see AH=0Fh) Return: AL = status 00h successful 01h end of file, no data read 02h segment wrap in DTA, no data read 03h end of file, partial record read [DTA] = record read from file Notes: the record is read from the current file position as specified by the random record and record size fields of the FCB the file position is not updated after reading the record if a partial record is read, it is zero-padded to the full size not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh ----------2122------------------------------- INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE AH = 22h DS:DX -> opened FCB (see AH=0Fh) [DTA] = record to write Return: AL = status 00h successful 01h disk full 02h segment wrap in DTA Notes: the record is written to the current file position as specified by the random record and record size fields of the FCB the file position is not updated after writing the record if the record is located beyond the end of the file, the file is extended but the intervening data remains uninitialized if the record only partially fills a disk sector, it is copied to a DOS disk buffer to be written out to disk at a later time not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h ----------2123------------------------------- INT 21 - DOS 1+ - GET FILE SIZE FOR FCB AH = 23h DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed Return: AL = status 00h successful (matching file found) FCB random record field filled with size in records, rounded up to next full record FFh failed (no matching file found) Note: not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=42h ----------2124------------------------------- INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB AH = 24h DS:DX -> opened FCB (see AH=0Fh) Notes: computes the random record number corresponding to the current record number and record size, then stores the result in the FCB normally used when switching from sequential to random access not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=21h,AH=27h,AH=42h ----------2125------------------------------- INT 21 - DOS 1+ - SET INTERRUPT VECTOR AH = 25h AL = interrupt number DS:DX -> new interrupt handler Note: this function is preferred over direct modification of the interrupt vector table SeeAlso: AH=35h ----------212501----------------------------- INT 21 - Phar Lap 386/DOS-Extender - RESET 386/DOS-EXTENDER DATA STRUCTURES AX = 2501h Return: CF clear Note: Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender system calls. Only available when directly using 386/DOS-Extender, or when using a product that was created using 386-DOS/Extender SeeAlso: AH=30h"Phar Lap" ----------212502----------------------------- INT 21 - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR AX = 2502h CL = interrupt number Return: ES:EBX -> 48-bit address of protected-mode interrupt handler CF clear SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h ----------212503----------------------------- INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR AX = 2503h CL = interrupt number Return: EBX = 32-bit address of real-mode interrupt handler CF clear SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h ----------212504----------------------------- INT 21 - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR AX = 2504h CL = interrupt number DS:EDX -> 48-bit address of protected-mode interrupt handler Return: CF clear SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h ----------212505----------------------------- INT 21 - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR AX = 2505h CL = interrupt number EBX = 32-bit address of real-mode interrupt handler Return: CF clear SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h ----------212506----------------------------- INT 21 - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CONTRL IN PROT MODE AX = 2506h CL = interrupt number DS:EDX -> 48-bit address of protected-mode interrupt handler Return: CF clear Note: This function modifies both the real-mode low-memory interrupt vector table and the protected-mode Interrupt Descriptor Table (IDT) Interrupts occurring in real mode are resignaled in protected mode. ----------212507----------------------------- INT 21 - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS AX = 2507h CL = interrupt number DS:EDX -> 48-bit address of protected-mode interrupt handler EBX = 32-bit address of real-mode interrupt handler Return: CF clear Note: interrupts are disabled until both vectors have been modified SeeAlso: AX=2504h,AX=2505h ----------212508----------------------------- INT 21 - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS AX = 2508h BX = segment selector Return: CF clear if successful ECX = linear base address of segment CF set if invalid segment selector ----------212509----------------------------- INT 21 - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS AX = 2509h EBX = linear address to convert Return: CF clear if successful ECX = physical address (carry flag clear) CF set if linear address not mapped in page tables ----------21250A----------------------------- INT 21 - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT AX = 250Ah ES = segment selector in the Local Descriptor Table (LDT) of segment to modify EBX = physical base address of memory to map (multiple of 4K) ECX = number of physical 4K pages to map Return: CF clear if successful EAX = 32-bit offset in segment of mapped memory CF set on error EAX = error code 08h insufficient memory to create page tables 09h invalid segment selector SeeAlso: INT 31/AX=0800h ----------21250C----------------------------- INT 21 - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS AX = 250Ch Return: CF clear AL = base interrupt vector for IRQ0-IRQ7 AH = base interrupt vector for IRQ8-IRQ15 BL = interrupt vector for BIOS print screen function SeeAlso: INT 31/AX=0400h ----------21250D----------------------------- INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION AX = 250Dh Return: CF clear EAX = 32-bit address of real-mode 386/DOS-Extender proc that will call through from real mode to a protected-mode routine EBX = 32-bit real-mode address of intermode call data buffer ECX = size in bytes of intermode call data buffer ES:EDX -> protected-mode address of intermode call data buffer ----------21250E----------------------------- INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE AX = 250Eh EBX = 32-bit address of real-mode procedure to call ECX = number of two-byte words to copy from protected-mode stack to real-mode stack Return: CF clear if successful all segment registers unchanged all general registers contain values set by real-mode procedure all other flags set as they were left by real-mode procedure CF set on error EAX = error code 01h not enough real-mode stack space SeeAlso: AH=E1h"OS/286",INT 31/AX=0301h ----------21250F----------------------------- INT 21 - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS AX = 250Fh ES:EBX -> 48-bit protected-mode address to convert ECX = length of data, in bytes Return: CF clear if successful ECX = 32-bit MS-DOS address CF set on error ECX destroyed SeeAlso: AX=2510h ----------212510----------------------------- INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS AX = 2510h EBX = 32-bit address of real-mode procedure to call ECX = number of two-byte words to copy to protected-mode stack to real-mode stack DS:EDX -> pointer to parameter block (see below) Return: CF clear if successful all segment registers unchanged, EDX unchanged all other general registers contain values set by real-mode proc all other flags are set as they were left by real-mode procedure real-mode register values are returned in the parameter block CF set on error EAX = error code 01h not enough real-mode stack space SeeAlso: AX=250Fh Format of parameter block: Offset Size Description 00h WORD real-mode DS value 02h WORD real-mode ES value 04h WORD real-mode FS value 06h WORD real-mode GS value 08h DWORD real-mode EAX value 0Ch DWORD real-mode EBX value 10h DWORD real-mode ECX value 14h DWORD real-mode EDX value ----------212511----------------------------- INT 21 - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT AX = 2511h DS:EDX -> pointer to parameter block (see below) Return: all segment registers unchanged EDX unchanged all other registers contain values set by the real-mode int handler the flags are set as they were left by the real-mode interrupt handler real-mode register values are returned in the parameter block SeeAlso: AX=2503h,AX=2505h,AH=E3h"OS/286",INT 31/AX=0300h Format of parameter block: Offset Size Description 00h WORD interrupt number 02h WORD real-mode DS value 04h WORD real-mode ES value 06h WORD real-mode FS value 08h WORD real-mode GS value 0Ah DWORD real-mode EAX value 0Eh DWORD real-mode EDX value Note: all other real-mode values set from protected-mode registers ----------212512----------------------------- INT 21 - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING AX = 2512h DS:EDX -> pointer to ASCIIZ program name ES:EBX -> pointer to parameter block (see below) ECX = size in bytes of LDT buffer Return: CF clear if successful EAX = number of segment descriptors in LDT CF set on error EAX = error code 02h file not found or path invalid 05h access denied 08h insufficient memory 0Ah environment invalid 0Bh invalid file format 80h LDT too small Format of parameter block: Offset Size Description Input: 00h DWORD 32-bit offset of environment string 04h WORD segment of environment string 06h DWORD 32-bit offset of command-tail string 0Ah WORD segment of command-tail string 0Ch DWORD 32-bit offset of LDT buffer (size in ECX) 10h WORD segment of LDT buffer Output: 12h WORD real-mode paragraph address of PSP (see also AH=26h) 14h WORD real/protected mode flag 0000h real mode 0001h protected mode 16h DWORD initial EIP value 1Ah WORD initial CS value 1Ch DWORD initial ESP value 20h WORD initial SS value 22h WORD initial DS value 24h WORD initial ES value 26h WORD initial FS value 28h WORD initial GS value ----------212513----------------------------- INT 21 - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR AX = 2513h BX = segment selector of descriptor in GDT or LDT CL = access-rights byte for alias descriptor CH = use-type bit (USE16 or USE32) for alias descriptor Return: CF clear if successful AX = segment selector for created alias CF set on error EAX = error code 08h insufficient memory (can't grow LDT) 09h invalid segment selector in BX ----------212514----------------------------- INT 21 - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES AX = 2514h BX = segment selector of descriptor in GDT or LDT CL = new access-rights byte CH = new use-type bit (USE16 or USE32) Return: CF clear if successful CF set on error EAX = error code 09h invalid selector in BX SeeAlso: AX=2515h,INT 31/AX=0009h ----------212515----------------------------- INT 21 - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES AX = 2515h BX = segment selector of descriptor in GDT or LDT Return: CF clear if successful CL = access-rights byte for segment CH = use-type bit (USE16 or USE32) ECX<16-31> destroyed CF set on error EAX = error code 09h invalid segment selector in BX SeeAlso: AX=2514h ----------212516----------------------------- INT 21 - Phar Lap 386/DOS-Extender - FREE ALL MEMORY OWNED BY LDT AX = 2516h ??? Return: ??? ----------212517----------------------------- INT 21 - Phar Lap 386/DOS-Extender - GET INFO ON DOS DATA BUFFER AX = 2517h ??? Return: ??? ----------212518----------------------------- INT 21 - Phar Lap 386/DOS-Extender - SPECIFY HANDLER FOR MOVED SEGMENTS AX = 2518h ??? Return: ??? ----------212519----------------------------- INT 21 - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO AX = 2519h Return: CF clear EAX = error code 0000h no error 0001h out of physical memory 0002h out of swap space (unable to grow swap file) 0003h out of LDT entries and unable to grow LDT 0004h unable to change extended memory allocation mark FFFFFFFFh paging disabled Note: VMM is the Virtual Memory Manager option ----------21251A----------------------------- INT 21 - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY AX = 251Ah EDX = number of 4k pages to lock if BL = 00h ECX = linear address of first page to lock if BL = 01h ES:ECX -> pointer to first page to lock Return: CF clear if successful CF set on error EAX = error code 08h insufficient memory 09h invalid address range SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h ----------21251B----------------------------- INT 21 - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES AX = 251Bh EDX = number of pages to unlock if BL = 00h ECX = linear address of first page to unlock if BL = 01h ES:ECX -> pointer to first page to unlock Return: CF clear if successful CF set on error EAX = error code 09h invalid address range SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h ----------21251D----------------------------- INT 21 - Phar Lap 386/DOS-Extender VMM - READ PAGE-TABLE ENTRY AX = 251Dh ??? Return: ??? SeeAlso: AX=251Eh,AX=EB00h,INT 31/AX=0506h ----------21251E----------------------------- INT 21 - Phar Lap 386/DOS-Extender VMM - WRITE PAGE-TABLE ENTRY AX = 251Eh ??? Return: ??? SeeAlso: AX=251Dh,INT 31/AX=0507h ----------21251F----------------------------- INT 21 - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES AX = 251Fh ??? Return: ??? SeeAlso: AX=251Dh,AX=251Eh ----------212520----------------------------- INT 21 - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS AX = 2520h DS:EDX -> pointer to buffer at least 100 bytes in size (see below) BL = 0 (don't reset VM stats), 1 (reset VM stats) Return: carry flag clear Format of VM stats buffer: Offset Size Description 00h DWORD VM status 0001h VM subsystem is present 0000h VM not present 04h DWORD "nconvpg" number of conventional memory pages available 08h DWORD "nbimpg" number of Compaq built-in memory pages available 0Ch DWORD "nextpg" total number of extended memory pages 10h DWORD "extlim" extender memory pages limit 14h DWORD "aphyspg" number of physical memory pages allocated to appl 18h DWORD "alockpg" number of locked pages owned by application 1Ch DWORD "sysphyspg" number physical memory pages allocated to system 20h DWORD "nfreepg" number of free physical pages; approx if EMS VCPI 24h DWORD linear address of beginning of application address space 28h DWORD linear address of end of application address space 2Ch DWORD number of seconds since last time VM stats were reset 30h DWORD number of page faults since last time 34h DWORD number of pages written to swap file since last time 38h DWORD number of reclaimed pages (page faults on swapped pages) 3Ch DWORD number of virtual pages allocated to the application 40h DWORD size in pages of swap file 44h DWORD number of system pages allocated with EMS calls 48h DWORD minimum number of conventional memory pages 4Ch DWORD maximum size in bytes to which swap file can be increased 50h DWORD "vmflags" bit 0 = 1 if page fault in progress 54h 16 BYTEs reserved for future expansion (set to zero) ----------212521----------------------------- INT 21 - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEMORY USAGE AX = 2521h EBX = max 4k pages of physical extended memory which program may use Return: CF clear if successful EBX = maximum limit in pages ECX = minimum limit in pages CF set on error EAX = error code 08h insufficient memory or -nopage switch used SeeAlso: AX=2522h ----------212522----------------------------- INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY ALTERNATE PAGE-FAULT HANDLER AX = 2522h ??? Return: ??? SeeAlso: AX=2523h ----------212523----------------------------- INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY OUT-OF-SWAP-SPACE HANDLER AX = 2523h ??? Return: ??? SeeAlso: AX=2522h ----------212524----------------------------- INT 21 - Phar Lap 386/DOS-Extender VMM - INSTALL PAGE-REPLACEMENT HANDLERS AX = 2524h ??? Return: ??? ----------212525----------------------------- INT 21 - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENTIONAL MEM USAGE AX = 2525h EBX = limit in 4k pages of physical conventional memory which program may use Return: CF clear if successful EBX = maximum limit in pages ECX = minimum limit in pages CF set on error EAX = error code 08h insufficient memory or -nopage switch used SeeAlso: AX=2521h ----------212526----------------------------- INT 21 - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION AX = 2526h ??? Return: ??? ----------2125C0----------------------------- INT 21 - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK AX = 25C0h BX = number of 16-byte paragraphs of MS-DOS memory requested Return: CF clear if successful AX = real-mode paragraph address of memory CF set on error AX = error code 07h MS-DOS memory control blocks destroyed 08h insufficient memory BX = size in paragraphs of largest available memory block SeeAlso: AX=25C1h,AX=25C2h ----------2125C1----------------------------- INT 21 - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK AX = 25C1h CX = real-mode paragraph address of memory block to free Return: CF clear if successful EAX destroyed CF set on error AX = error code 07h MS-DOS memory control blocks destroyed 09h invalid memory block address in CX SeeAlso: AX=25C0h,AX=25C2h ----------2125C2----------------------------- INT 21 - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK AX = 25C2h BX = new requested block size in paragraphs CX = real-mode paragraph address of memory block to modify Return: CF clear if successful EAX destroyed CF set on error AX = error code 07h MS-DOS memory control blocks destroyed 08h insufficient memory 09h invalid memory block address in CX BX = size in paragraphs of largest available memory block SeeAlso: AX=25C0h,AX=25C1h ----------2125C3----------------------------- INT 21 - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM AX = 25C3h ES:EBX -> pointer to parameter block (see below) DS:EDX -> pointer to ASCIIZ program filename Return: CF clear if successful all registers unchanged CF set on error EAX = error code 01h function code in AL is invalid ??? 02h file not found or path invalid 05h access denied 08h insufficient memory to load program 0Ah environment invalid 0Bh invalid file format Format of parameter block: Offset Size Description 00h DWORD 32-bit offset of environment string 04h WORD segment selector of environment string 06h DWORD 32-bit offset of command-tail string 0Ah WORD segment selector of command-tail string ----------2126------------------------------- INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX AH = 26h DX = segment at which to create PSP (see below for format) Notes: new PSP is updated with memory size information; INTs 22h, 23h, 24h taken from interrupt vector table (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to copy SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h Format of PSP: Offset Size Description 00h 2 BYTEs INT 20 instruction for CP/M CALL 0 program termination 02h WORD segment of first byte beyond memory allocated to program 04h BYTE unused filler 05h BYTE CP/M CALL 5 service request (FAR JMP to 000C0h) BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh 06h WORD CP/M compatibility--size of first segment for .COM files 08h 2 BYTEs remainder of FAR JMP at 05h 0Ah DWORD stored INT 22 termination address 0Eh DWORD stored INT 23 control-Break handler address 12h DWORD DOS 1.1+ stored INT 24 critical error handler address 16h WORD segment of parent PSP 18h 20 BYTEs DOS 2+ Job File Table, one byte per file handle, FFh = closed 2Ch WORD DOS 2+ segment of environment for process 2Eh DWORD DOS 2+ process's SS:SP on entry to last INT 21 call 32h WORD DOS 3+ number of entries in JFT (default 20) 34h DWORD DOS 3+ pointer to JFT (default PSP:0018h) 38h DWORD DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x) used by SHARE in DOS 3.3 3Ch 4 BYTEs unused by DOS versions <= 5.00 40h 2 BYTEs DOS 5.0 version to return on INT 21/AH=30h 42h 6 BYTEs unused by DOS versions <= 5.00 48h BYTE (MSWindows3) bit 0 set if non-Windows application 49h 7 BYTEs unused by DOS versions <= 5.00 50h 3 BYTEs DOS 2+ service request (INT 21/RETF instructions) 53h 9 BYTEs unused in DOS versions <= 5.00 5Ch 16 BYTEs first default FCB, filled in from first commandline argument overwrites second FCB if opened 6Ch 16 BYTEs second default FCB, filled in from second commandline argument overwrites beginning of commandline if opened 7Ch 4 BYTEs unused 80h 128 BYTEs commandline / default DTA command tail is BYTE for length of tail, N BYTEs for the tail, followed by a BYTE containing 0Dh Notes: in DOS versions 3.0 and up, the limit on simultaneously open files may be increased by allocating memory for a new open file table, filling it with FFh, copying the first 20 bytes from the default table, and adjusting the pointer and count at 34h and 32h. However, DOS versions through at least 3.30 will only copy the first 20 file handles into a child PSP (including the one created on EXEC). network redirectors based on the original MS-Net implementation use values of 80h-FEh in the open file table to indicate remote files MSDOS 5.00 incorrectly fills the FCB fields when loading a program high; the first FCB is empty and the second contains the first parameter Format of environment block: Offset Size Description 00h N BYTEs first environment variable, ASCIZ string of form "var=value" N BYTEs second environment variable, ASCIZ string ... N BYTEs last environment variable, ASCIZ string of form "var=value" BYTE 00h ---DOS 3+--- WORD number of strings following environment (normally 1) N BYTEs ASCIZ full pathname of program owning this environment other strings may follow ----------2127------------------------------- INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE AH = 27h CX = number of records to read DS:DX -> opened FCB (see AH=0Fh) Return: AL = status 00h successful, all records read 01h end of file, no data read 02h segment wrap in DTA, no data read 03h end of file, partial read [DTA] = records read from file CX = number of records read (return AL = 00h or 03h) Notes: read begins at current file position as specified in FCB; the file position is updated after reading not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=21h,AH=28h,AH=3Fh ----------2128------------------------------- INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE AH = 28h CX = number of records to write DS:DX -> opened FCB (see AH=0Fh) [DTA] = records to write Return: AL = status 00h successful 01h disk full or file read-only 02h segment wrap in DTA CX = number of records written Notes: write begins at current file position as specified in FCB; the file position is updated after writing if CX = 0000h on entry, no data is written; instead the file size is adjusted to be the same as the file position specified by the random record and record size fields of the FCB if the data to be written is less than a disk sector, it is copied into a DOS disk buffer, to be written out to disk at a later time not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h ----------2129------------------------------- INT 21 - DOS 1+ - PARSE FILENAME INTO FCB AH = 29h AL = parsing options bit 0: skip leading separators bit 1: use existing drive number in FCB if no drive is specified, instead of setting field to zero bit 2: use existing filename in FCB if no base name is specified, instead of filling field with blanks bit 3: use existing extension in FCB if no extension is specified, instead of filling field with blanks bits 4-7: reserved (0) DS:SI -> filename string (both '*' and '?' wildcards OK) ES:DI -> buffer for unopened FCB Return: AL = result code 00h successful parse, no wildcards encountered 01h successful parse, wildcards present FFh failed (invalid drive specifier) DS:SI -> first unparsed character ES:DI buffer filled with unopened FCB (see AH=0Fh) Notes: asterisks expanded to question marks in the FCB all processing stops when a filename terminator is encountered cannot be used with filespecs which include a path (DOS 2+) SeeAlso: AH=0Fh,AH=16h,AH=26h ----------212A------------------------------- INT 21 - DOS 1+ - GET SYSTEM DATE AH = 2Ah Return: CX = year (1980-2099) DH = month DL = day ---DOS 1.10+--- AL = day of week (00h=Sunday) SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h,INT 1A/AH=04h,INT 2F/AX=120Dh ----------212B------------------------------- INT 21 - DOS 1+ - SET SYSTEM DATE AH = 2Bh CX = year (1980-2099) DH = month DL = day Return: AL = status 00h successful FFh invalid date, system date unchanged Note: DOS 3.3+ also sets CMOS clock SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h ----------212B--CX4149----------------------- INT 21 - AI Architects - ??? - INSTALLATION CHECK AH = 2Bh CX = 4149h ('AI') DX = 413Fh ('A?') Return: AL <> FFh if installed Note: Borland's TKERNEL makes this call ----------212B--CX4358----------------------- INT 21 - PC Tools v5.x PC-Cache - INSTALLATION CHECK AH = 2Bh CX = 4358h ('CX') Return: AL = FFh if PC-Cache not installed AL = 00h if installed CX = 6378h ('cx') BX = ??? DX = ??? SeeAlso: INT 16/AX=FFA5h/CX=1111h ----------212B--CX4445----------------------- INT 21 - DESQview - INSTALLATION CHECK AH = 2Bh CX = 4445h ('DE') DX = 5351h ('SQ') AL = subfunction (DV v2.00+) 01h get version Return: BX = version (BH = major, BL = minor) Note: early copies of v2.00 return 0002h 02h get shadow buffer info, and start shadowing Return: BH = rows in shadow buffer BL = columns in shadow buffer DX = segment of shadow buffer 04h get shadow buffer info Return: BH = rows in shadow buffer BL = columns in shadow buffer DX = segment of shadow buffer 05h stop shadowing Return: AL = FFh if DESQview not installed Note: in DESQview v1.x, there were no subfunctions; this call only identified whether or not DESQview was loaded SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h ----------212B--CX454C----------------------- INT 21 - ELRES v1.1 - INSTALLATION CHECK AH = 2Bh CX = 454Ch ('EL') DX = 5253h ('RS') Return: ES:BX -> ELRES history structure (see below) DX = DABEh (signature, DAve BEnnett) Note: ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett which stores recent errorlevel values, allows them to be retrieved for use in batch files, and can place them in an environment variable SeeAlso: AH=4Bh"ELRES",AH=4Dh Format of ELRES history structure: Offset Size Description 00h WORD number of return codes which can be stored by following buffer 02h WORD current position in buffer (treated as a ring) 04h N BYTEs ELRES buffer ----------212B01CX5441----------------------- INT 21 - TAME v2.10+ - INSTALLATION CHECK AX = 2B01h CX = 5441h ('TA') DX = 4D45h ('ME') ---v2.60--- BH = ??? 00h skip ???, else do Return: AL = 02h if installed ES:DX -> data area in TAME-RES (see below) Note: TAME is a shareware program by David G. Thomas which gives up CPU time to other partitions under a multitasker when the current partition's program incessantly polls the keyboard or system time Format of TAME 2.10-2.20 data area: Offset Size Description 00h BYTE data structure minor version number (01h in TAME 2.20) 01h BYTE data structure major version number (07h in TAME 2.20) 02h DWORD number of task switches 06h DWORD number of keyboard polls 0Ah DWORD number of time polls 0Eh DWORD number of times DESQview told program runs only in foreground 12h DWORD original INT 10h 16h DWORD original INT 14h 1Ah DWORD original INT 15h 1Eh DWORD original INT 16h 22h DWORD original INT 17h 26h DWORD original INT 21h 2Ah DWORD original INT 28h 2Eh WORD offset of TAME INT 10h handler 30h WORD offset of TAME INT 14h handler 32h WORD offset of TAME INT 15h handler 34h WORD offset of TAME INT 16h handler 36h WORD offset of TAME INT 17h handler 38h WORD offset of TAME INT 21h handler 3Ah WORD offset of TAME INT 28h handler 3Ch WORD X in /max:X,Y or /freq:X,Y 3Eh WORD Y in /max:X,Y or /freq:X,Y 40h WORD number of polls remaining before next task switch 42h WORD /KEYIDLE value 44h BYTE flags for interrupts already grabbed by TAME bit 0: INT 10h 1: INT 14h 2: INT 15h 3: INT 16h 4: INT 17h 5: INT 21h 6: INT 28h 45h BYTE flags for interrupts which may be acted on (same bits as above) 46h BYTE TAME enabled (01h) or disabled (00h) 47h BYTE /TIMEPOLL (01h) or /NOTIMEPOLL (00h) 48h BYTE /NOTIMER (01h) or /TIMER (00h) 49h BYTE window or task number for this task 4Ah BYTE multitasker type ??? 01h DESQview 02h DoubleDOS 03h TopView ??? 4Bh BYTE type of task switching selected bit 0: DESQview??? 1: DoubleDOS??? 2: TopView??? 3: KeySwitch 4: HLT instruction 4Ch BYTE ??? 4Dh BYTE flags bit 1: /FREQ instead of /MAX 4Eh BYTE /FG: value 4Fh BYTE task switches left until next FGONLY DESQview API call 50h BYTE ??? Format of TAME 2.30 data area: Offset Size Description 00h BYTE data structure minor version number (02h in TAME 2.30) 01h BYTE data structure major version number (0Ah in TAME 2.30) 02h DWORD number of task switches 06h DWORD number of keyboard polls 0Ah DWORD number of time polls 0Eh DWORD number of times DESQview told program runs only in foreground 12h DWORD time of last /CLEAR or TAME-RES load 16h DWORD time yielded 1Ah DWORD time spent polling 1Eh DWORD time spent waiting on key input with INT 16/AH=01h,11h 22h DWORD original INT 10h 26h DWORD original INT 14h 2Ah DWORD original INT 15h 2Eh DWORD original INT 16h 32h DWORD original INT 17h 36h DWORD original INT 21h 3Ah DWORD original INT 28h 3Eh WORD offset of TAME INT 10h handler 40h WORD offset of TAME INT 14h handler 42h WORD offset of TAME INT 15h handler 44h WORD offset of TAME INT 16h handler 46h WORD offset of TAME INT 17h handler 48h WORD offset of TAME INT 21h handler 4Ah WORD offset of TAME INT 28h handler 4Ch WORD X in /max:X,Y or /freq:X,Y 4Eh WORD Y in /max:X,Y or /freq:X,Y 50h WORD number of polls remaining before next task switch 52h WORD /KEYIDLE value 54h WORD /FG: value 56h WORD task switches left until next FGONLY DESQview API call 58h WORD multitasker version 5Ah WORD virtual screen segment 5Ch BYTE flags for interrupts already grabbed by TAME bit 0: INT 10h 1: INT 14h 2: INT 15h 3: INT 16h 4: INT 17h 5: INT 21h 6: INT 28h 5Dh BYTE flags for interrupts which may be acted on (same bits as above) 5Eh BYTE window or task number for this task 5Fh BYTE multitasker type 01h DESQview 02h DoubleDOS 03h TopView 04h OmniView 05h VM/386 60h BYTE type of task switching selected (bit flags) bit 0: DESQview 1: DoubleDOS 2: TopView 3: OmniView 4: KeySwitch 5: HLT instruction 61h BYTE watch_DOS 62h BYTE bit flags bit 0: TAME enabled 1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick) 2: /TIMEPOLL 3: /KEYPOLL 4: inhibit timer 5: enable status monitoring 63h BYTE old status 64h WORD signature DA34h Format of TAME 2.60 data area: Offset Size Description 00h BYTE data structure minor version number (02h in TAME 2.60) 01h BYTE data structure major version number (0Bh in TAME 2.60) 02h DWORD number of task switches 06h DWORD number of keyboard polls 0Ah DWORD number of time polls 0Eh DWORD number of times DESQview told program runs only in foreground 12h DWORD time of last /CLEAR or TAME-RES load 16h DWORD time yielded 1Ah DWORD time spent polling 1Eh DWORD time spent waiting on key input with INT 16/AH=01h,11h 22h 4 BYTEs ??? 26h DWORD original INT 10h 2Ah DWORD original INT 14h 2Eh DWORD original INT 15h 32h DWORD original INT 16h 36h DWORD original INT 17h 3Ah DWORD original INT 21h 3Eh DWORD original INT 28h 42h WORD offset of TAME INT 10h handler 44h WORD offset of TAME INT 14h handler 46h WORD offset of TAME INT 15h handler 48h WORD offset of TAME INT 16h handler 4Ah WORD offset of TAME INT 17h handler 4Ch WORD offset of TAME INT 21h handler 4Eh WORD offset of TAME INT 28h handler 50h WORD X in /max:X,Y or /freq:X,Y 52h WORD Y in /max:X,Y or /freq:X,Y 54h WORD number of polls remaining before next task switch 56h WORD /KEYIDLE value 58h 4 BYTEs ??? 5Ch WORD X in /boost:X,Y 5Eh WORD Y in /boost:X,Y 60h WORD /FG: value 62h WORD task switches left until next FGONLY DESQview API call 64h WORD multitasker version ??? 66h WORD virtual screen segment 68h BYTE flags for interrupts already grabbed by TAME bit 0: INT 10h 1: INT 14h 2: INT 15h 3: INT 16h 4: INT 17h 5: INT 21h 6: INT 28h 69h BYTE flags for interrupts which may be acted on (same bits as above) 6Ah BYTE window or task number for this task 6Bh BYTE multitasker type 01h DESQview 02h DoubleDOS 03h TopView 04h OmniView 05h VM/386 6Ch BYTE type of task switching selected (bit flags) bit 0: DESQview 1: DoubleDOS 2: TopView 3: OmniView 4: KeySwitch 5: HLT instruction 6Dh BYTE watch_DOS 6Eh BYTE bit flags bit 0: TAME enabled 1: /FREQ instead of /MAX (counts in 50h and 52h per tick) 2: /TIMEPOLL 3: /KEYPOLL 4: inhibit timer 5: enable status monitoring 6Fh BYTE old status 70h WORD signature DA34h ----------212B44BX4D41----------------------- INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK AX = 2B44h ('D') BX = 4D41h ('MA') CX = 7063h ('pc') DX = 4157h ('AW') Return: AX = 4F4Bh ('OK') if large host resident = 6F6Bh ('ok') if small host resident CX:DX -> API entry point SeeAlso: INT 16/AH=79h Call API entry point with: AX = 0000h get pcANYWHERE IV version DS:SI -> BYTE buffer for host type code Return: AH = version number AL = revision number DS:DI buffer byte filled with 00h full-featured host 01h limited-feature LAN host other API may not be supported AX = 0001h initialize operation DS:SI -> initialization request structure (see below) Return: AX = function status (see below) AX = 0002h get status Return: AH = current operating mode (see init req structure below) AL = current connection status bit 0: a physical connection is active bit 1: remove screen updating is active bit 2: connection checking is active bit 3: hot key detection is active bit 4: background file transfer is active AX = 0003h suspend remote screen updates Return: AX = function status (see below) AX = 0004h resume screen updates Return: AX = function status (see below) AX = 0005h end current remote access session DS:SI -> termination request structure (see below) Return: AX = function status (see below) AX = 0006h remove pcANYWHERE IV from memory Return: AX = status 0000h successful FFD2h unable to release allocated memory FFD1h unable to release interrupt vectors AX = 8000h read data from communications channel DS:BX -> buffer CX = buffer size Return: AX >= number of characters read/available AX < 0 on error AX = 8001h write data to communications channel DS:BX -> buffer CX = buffer size Return: AX >= number of characters written AX < 0 on error AX = 8002h get connection status Return: AX = status > 0000h if connection active = 0000h if connection lost < 0000h on error Format of initialization request structure: Offset Size Description 00h BYTE operating mode 00h wait for a call 01h hot key activates 02h incoming call activates 03h initiate a call 01h 3 BYTEs user ID to append to config file names 04h WORD DS-relative pointer to path for config files 06h WORD DS-relative pointer to path for program files Format of termination request structure: Offset Size Description 00h BYTE operating mode after termination 00h wait for a call 01h hot key activates 02h incoming call activates 80h use current mode FFh remove from memory Values for function status: 0000h function completed successfully FFF2h unable to establish a connection when operating mode is "Initiate a call" FFF3h modem configuration is invalid (corrupt config) FFF4h modem initialization failed (no modem response) FFF5h the communications device could not be initialized FFF6h the host operator aborted the function FFF7h the communications driver type specified in the configuration file is different than the one loaded when pcANYWHERE IV was initially started FFF9h the configuration file is invalid FFFAh the configuration file could not be found FFFBh no session is active FFFCh a remote access session is active FFFDh the specified operating mode is invalid ----------212C------------------------------- INT 21 - DOS 1+ - GET SYSTEM TIME AH = 2Ch Return: CH = hour CL = minute DH = second DL = 1/100 seconds Note: on most systems, the resolution of the system clock is about 5/100sec, so returned times generally do not increment by 1 on some systems, DL may always return 00h SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh SeeAlso: INT 2F/AX=120Dh ----------212D------------------------------- INT 21 - DOS 1+ - SET SYSTEM TIME AH = 2Dh CH = hour CL = minute DH = second DL = 1/100 seconds Return: AL = result 00h successful FFh invalid time, system time unchanged Note: DOS 3.3+ also sets CMOS clock SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T" ----------212E--DL00------------------------- INT 21 - DOS 1+ - SET VERIFY FLAG AH = 2Eh DL = 00h (DOS 1.x/2.x only) AL = new state of verify flag 00h off 01h on Notes: default state at system boot is OFF when ON, all disk writes are verified provided the device driver supports read-after-write verification SeeAlso: AH=54h ----------212F------------------------------- INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS AH = 2Fh Return: ES:BX -> current DTA SeeAlso: AH=1Ah ----------2130------------------------------- INT 21 - DOS 2+ - GET DOS VERSION AH = 30h ---DOS 5.0--- AL = what to return in BH 00h OEM number (as for DOS 2.0-4.0x) 01h version flag Return: AL = major version number (00h if DOS 1.x) AH = minor version number BL:CX = 24-bit user serial number (most versions do not use this) ---if DOS <5 or AL=00h--- BH = OEM number 00h IBM 05h Zenith 16h DEC 23h Olivetti 29h Toshiba 4Dh Hewlett-Packard 99h STARLITE architecture (OEM DOS, NETWORK DOS, SMP DOS) FFh Microsoft, Phoenix ---if DOS 5.0 and AL=01h--- BH = version flag 08h DOS is in ROM 10h DOS is in HMA Notes: the OS/2 v1.x Compatibility Box returns major version 0Ah the OS/2 v2.x Compatibility Box returns major version 14h DOS 4.01 and 4.02 identify themselves as version 4.00 generic MSDOS 3.30, Compaq MSDOS 3.31, and others identify themselves as PC-DOS by returning OEM number 00h the version returned under DOS 4.0x may be modified by entries in the special program list (see AH=52h) the version returned under DOS 5.0 may be modified by SETVER; use AX=3306h to get the true version number SeeAlso: AX=3306h,INT 2F/AX=122Fh ----------2130------------------------------- INT 21 - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK AH = 30h EAX = 00003000h EBX = 50484152h ("PHAR") Return: AL = major DOS version AH = minor DOS version EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed BL = ASCII major version number EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed EDX = address of GDA SeeAlso: AX=2501h,AX=FF00h ----------2130--DXABCD----------------------- INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK AH = 30h DX = ABCDh Return: DX = DCBAh if installed SeeAlso: AX=0D20h,AX=30F1h ----------213000----------------------------- INT 21 - Btrieve Multi-User - INSTALLATION CHECK AX = 3000h Return: AL >= 03h if INT 2F handler installed SeeAlso: INT 2F/AX=AB00h,INT 7B"Btrieve",INT 7F/AX=0200h ----------213000BX1234----------------------- INT 21 - CTask 2.0+ - INSTALLATION CHECK AX = 3000h BX = 1234h DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2 Return: AL = DOS major version AH = DOS minor version CX:BX -> Ctask global data block Notes: if first eight bytes of returned data block equal eight bytes passed in, CTask is resident CTask is a multitasking kernel for C written by Thomas Wagner ----------2130F1----------------------------- INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK AX = 30F1h Return: AL = 00h if resident SeeAlso: AH=30h/DX=ABCDh,AX=330Fh ----------2131------------------------------- INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT AH = 31h AL = return code DX = number of paragraphs to keep resident Return: never Notes: the value in DX only affects the memory block containing the PSP; additional memory allocated via AH=48h is not affected the minimum number of paragraphs which will remain resident is 11h for DOS 2.x and 06h for DOS 3+ most TSRs can save some memory by releasing their environment block before terminating (see AH=26h,AH=49h) SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27 ----------2132------------------------------- INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE AH = 32h DL = drive number (00h = default, 01h = A:, etc) Return: AL = status 00h successful DS:BX -> Drive Parameter Block (DPB) for specified drive FFh invalid or network drive Notes: the OS/2 compatibility box supports the DOS 3.3 version of this call except for the DWORD at offset 12h this call updates the DPB by reading the disk; the DPB may be accessed via the DOS list of lists (see AH=52h) if disk access is not desirable. documented for DOS 5.0, but undocumented in prior versions SeeAlso: AH=1Fh,AH=52h Format of DOS Drive Parameter Block: Offset Size Description 00h BYTE drive number (00h = A:, 01h = B:, etc) 01h BYTE unit number within device driver 02h WORD bytes per sector 04h BYTE highest sector number within a cluster 05h BYTE shift count to convert clusters into sectors 06h WORD number of reserved sectors at beginning of drive 08h BYTE number of FATs 09h WORD number of root directory entries 0Bh WORD number of first sector containing user data 0Dh WORD highest cluster number (number of data clusters + 1) 0Fh BYTE number of sectors per FAT 10h WORD sector number of first directory sector 12h DWORD address of device driver header 16h BYTE media ID byte 17h BYTE 00h if disk accessed, FFh if not 18h DWORD pointer to next DPB ---DOS 2.x--- 1Ch WORD cluster containing start of current directory, 0000h=root, FFFFh = unknown 1Eh 64 BYTEs ASCIZ pathname of current directory for drive ---DOS 3.x--- 1Ch WORD cluster at which to start search for free space when writing 1Eh WORD number of free clusters on drive, FFFFh = unknown ---DOS 4.0-5.0--- 0Fh WORD number of sectors per FAT 11h WORD sector number of first directory sector 13h DWORD address of device driver header 17h BYTE media ID byte 18h BYTE 00h if disk accessed, FFh if not 19h DWORD pointer to next DPB 1Dh WORD cluster at which to start search for free space when writing 1Fh WORD number of free clusters on drive, FFFFh = unknown ----------2133------------------------------- INT 21 - DOS 2+ - EXTENDED BREAK CHECKING AH = 33h AL = subfunction 00h get current extended break state Return: DL = current state, 00h = off, 01h = on 01h set state of extended ^C/^Break checking DL = 00h off, check only on character I/O functions 01h on, check on all DOS functions Note: under DOS 3.1+, this function does not use any of the DOS-internal and may thus be called at any time SeeAlso: AX=3302h ----------213302----------------------------- INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE AX = 3302h DL = new state 00h for OFF or 01h for ON Return: DL = old state of extended BREAK checking Note: this function does not use any of the DOS-internal stacks and may thus be called at any time SeeAlso: AH=33h ----------213305----------------------------- INT 21 - DOS 4+ - GET BOOT DRIVE AX = 3305h Return: DL = boot drive (1=A:,...) Notes: fully reentrant NEC 9800-series PCs always call the boot drive A: and assign the other drive letters sequentially to the other drives in the system ----------213306----------------------------- INT 21 - DOS 5.0 - GET TRUE VERSION NUMBER AX = 3306h Return: BL = major version BH = minor version DL = revision (bits 2-0, all others 0) DH = version flags bit 3: DOS is in ROM bit 4: DOS in in HMA Notes: this function always returns the true version number, unlike AH=30h, whose return value may be changed with SETVER because of the conflict from the CBIS PowerLAN redirector (see next entry), programs should check whether BH is less than 100 (64h) and BL is at least 5 before accepting the returned BX as the true version number; however, even this is not entirely reliable when that redirector is loaded fully reentrant BUG: DR-DOS 5.0 returns CF set/AX=0001h for INT 21/AH=33h subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh for invalid subfunctions SeeAlso: AH=30h ----------213306----------------------------- INT 21 - CBIS POWERLAN - NETWORK REDIRECTOR - ??? AX = 3306h Return: AX = 3306h BL = ??? (usually 00h) BH = ??? (usually 00h or FFh) Note: unknown function, is in conflict with DOS 5.0 version call SeeAlso: AX=3306h"DOS" ----------21330F----------------------------- INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK AX = 330Fh Return: AL = 0Fh if resident (DOS returns AL=FFh) SeeAlso: AX=30F1h,AX=33E0h ----------2133E0----------------------------- INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK AX = 33E0h Return: AL = E0h if resident (DOS returns AL=FFh) SeeAlso: AX=330Fh,AX=357Fh ----------2134------------------------------- INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG AH = 34h Return: ES:BX -> one-byte InDOS flag Notes: the value of InDOS is incremented whenever an INT 21 function begins and decremented whenever one completes during an INT 28 call, it is safe to call some INT 21 functions even though InDOS may be 01h instead of zero InDOS alone is not sufficient for determining when it is safe to enter DOS, as the critical error handling decrements InDOS and increments the critical error flag for the duration of the critical error. Thus, it is possible for InDOS to be zero even if DOS is busy. the critical error flag is the byte immediately following InDOS in DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ (except COMPAQ DOS 3.0, where the critical error flag is located 1AAh bytes BEFORE the critical section flag) For DOS 3.1+, an undocumented call exists to get the address of the critical error flag (see AX=5D06h) SeeAlso: AX=5D06h,AX=5D0Bh,INT 28 ----------2135------------------------------- INT 21 - DOS 2+ - GET INTERRUPT VECTOR AH = 35h AL = interrupt number Return: ES:BX -> current interrupt handler SeeAlso: AH=25h,AX=2503h ----------21357F----------------------------- INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK AX = 357Fh Return: DX = FFFFh if installed SeeAlso: AX=33E0h,AX=3DFFh ----------2136------------------------------- INT 21 - DOS 2+ - GET FREE DISK SPACE AH = 36h DL = drive number (00h = default, 01h = A:, etc) Return: AX = FFFFh if invalid drive else AX = sectors per cluster BX = number of free clusters CX = bytes per sector DX = total clusters on drive Notes: free space on drive in bytes is AX * BX * CX total space on drive in bytes is AX * CX * DX "lost clusters" are considered to be in use according to Dave Williams' MSDOS reference, the value in DX is incorrect for non-default drives after ASSIGN is run SeeAlso: AH=1Bh,AH=1Ch ----------213700----------------------------- INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER AX = 3700h Return: AL = status 00h successful DL = current switch character FFh unsupported subfunction Desc: Determine the character which is used to introduce command switches. This setting is ignored by DOS commands in version 4.0 and higher, but is honored by many third-party programs. Notes: documented in some OEM versions of some releases of DOS supported by OS/2 compatibility box always returns DL=2Fh for DOS 5.0 SeeAlso: AX=3701h ----------213701----------------------------- INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER AX = 3701h DL = new switch character Return: AL = status 00h successful FFh unsupported subfunction Notes: documented in some OEM versions of some releases of DOS supported by OS/2 compatibility box ignored by DOS 5.0 SeeAlso: AX=3700h ----------2137------------------------------- INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE AH = 37h AL = subfunction 02h get availdev flag Return: DL = 00h \DEV\ must precede character device names = nonzero \DEV\ is optional 03h set availdev flag DL = 00h \DEV\ is mandatory = nonzero \DEV\ is optional Return: AL = status 00h successful FFh unsupported subfunction Notes: all versions of DOS from 2.00 allow \DEV\ to be prepended to device names without generating an error even if the directory \DEV does not actually exist (other paths generate an error if they do not exist). although DOS 3.3+ accepts these calls, they have no effect, and AL=02h always returns DL=FFh ----------2138------------------------------- INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION AH = 38h --DOS 2.x-- AL = 00h get current-country info DS:DX -> buffer for returned info (see below) Return: CF set on error AX = error code (02h) CF clear if successful AX = country code (MSDOS 2.11 only) buffer at DS:DX filled --DOS 3+-- AL = 00h for current country AL = 01h thru 0FEh for specific country with code <255 AL = 0FFh for specific country with code >= 255 BX = 16-bit country code DS:DX -> buffer for returned info (see below) Return: CF set on error AX = error code (02h) CF clear if successful BX = country code DS:DX buffer filled SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h Format of PCDOS 2.x country info: Offset Size Description 00h WORD date format 0 = USA mm dd yy 1 = Europe dd mm yy 2 = Japan yy mm dd 02h BYTE currency symbol 03h BYTE 00h 04h BYTE thousands separator char 05h BYTE 00h 06h BYTE decimal separator char 07h BYTE 00h 08h 24 BYTEs reserved Format of MSDOS 2.x,DOS 3+ country info: Offset Size Description 00h WORD date format (see above) 02h 5 BYTEs ASCIZ currency symbol string 07h 2 BYTEs ASCIZ thousands separator 09h 2 BYTEs ASCIZ decimal separator 0Bh 2 BYTEs ASCIZ date separator 0Dh 2 BYTEs ASCIZ time separator 0Fh BYTE currency format bit 2 = set if currency symbol replaces decimal point bit 1 = number of spaces between value and currency symbol bit 0 = 0 if currency symbol precedes value 1 if currency symbol follows value 10h BYTE number of digits after decimal in currency 11h BYTE time format bit 0 = 0 if 12-hour clock 1 if 24-hour clock 12h DWORD address of case map routine (FAR CALL, AL = character to map to upper case [>= 80h]) 16h 2 BYTEs ASCIZ data-list separator 18h 10 BYTEs reserved Values for country code: 001h United States 002h Canadian-French 003h Latin America 01Fh Netherlands 020h Belgium 021h France 022h Spain 024h Hungary (not supported by DR-DOS 5.0) 026h Yugoslavia (not supported by DR-DOS 5.0) 027h Italy 029h Switzerland 02Ah Czechoslovakia (not supported by DR-DOS 5.0) 02Bh Austria (DR-DOS 5.0) 02Ch United Kingdom 02Dh Denmark 02Eh Sweden 02Fh Norway 030h Poland (not supported by DR-DOS 5.0) 031h Germany 037h Brazil (not supported by DR-DOS 5.0) 03Dh International English [Australia in DR-DOS 5.0] 051h Japan (DR-DOS 5.0) 052h Korea (DR-DOS 5.0) 15Fh Portugal 166h Finland 311h Middle East (DR-DOS 5.0) 3CCh Israel (DR-DOS 5.0) ----------2138------------------------------- INT 21 - DOS 3+ - SET COUNTRY CODE AH = 38h AL = 01h thru 0FEh for specific country with code <255 AL = FFh for specific country with code >= 255 BX = 16-bit country code DX = FFFFh Return: CF set on error AX = error code (see AH=59h) CF clear if successful Note: not supported by OS/2 SeeAlso: INT 2F/AX=1403h ----------2139------------------------------- INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY AH = 39h DS:DX -> ASCIZ pathname Return: CF clear if successful AX destroyed CF set on error AX = error code (03h,05h) (see AH=59h) Notes: all directories in the given path except the last must exist fails if the parent directory is the root and is full DOS 2.x-3.3 allow the creation of a directory sufficiently deep that it is not possible to make that directory the current directory because the path would exceed 64 characters SeeAlso: AH=3Ah,AH=3Bh,INT 2F/AX=1103h ----------213A------------------------------- INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY AH = 3Ah DS:DX -> ASCIZ pathname of directory to be removed Return: CF clear if successful AX destroyed CF set on error AX = error code (03h,05h,06h,10h) (see AH=59h) Note: directory must be empty (contain only '.' and '..' entries) SeeAlso: AH=39h,AH=3Bh,INT 2F/AX=1101h ----------213B------------------------------- INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY AH = 3Bh DS:DX -> ASCIZ pathname to become current directory (max 64 bytes) Return: CF clear if successful AX destroyed CF set on error AX = error code (03h) (see AH=59h) Notes: if new directory name includes a drive letter, the default drive is not changed, only the current directory on that drive changing the current directory also changes the directory in which FCB file calls operate SeeAlso: AH=47h,INT 2F/AX=1105h ----------213C------------------------------- INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE AH = 3CH CX = file attribute bit 0: read-only 1: hidden 2: system 3: volume label (ignored) 4: reserved, must be zero (directory) 5: archive bit 7: if set, file is shareable under Novell NetWare DS:DX -> ASCIZ filename Return: CF clear if successful AX = file handle CF set on error AX = error code (03h,04h,05h) (see AH=59h) Note: if a file with the given name exists, it is truncated to zero length SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh ----------213D------------------------------- INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE AH = 3Dh AL = access and sharing modes bits 2-0: access mode 000 read only 001 write only 010 read/write bit 3: reserved (0) bits 6-4: sharing mode (DOS 3+) 000 compatibility mode 001 "DENYALL" prohibit both read and write access by others 010 "DENYWRITE" prohibit write access by others 011 "DENYREAD" prohibit read access by others 100 "DENYNONE" allow full access by others bit 7: inheritance if set, file is private to current process and will not be inherited by child processes DS:DX -> ASCIZ filename CL = attribute mask of files to look for (server call only) Return: CF clear if successful AX = file handle CF set on error AX = error code (01h,02h,03h,04h,05h,0Ch) (see AH=59h) Notes: file pointer is set to start of file file handles which are inherited from a parent also inherit sharing and access restrictions files may be opened even if given the hidden or system attributes SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1226h File sharing behavior: | Second and subsequent Opens First |Compat Deny Deny Deny Deny Open | All Write Read None |R W RW R W RW R W RW R W RW R W RW - - - - -| - - - - - - - - - - - - - - - - - Compat R |Y Y Y N N N 1 N N N N N 1 N N W |Y Y Y N N N N N N N N N N N N RW|Y Y Y N N N N N N N N N N N N - - - - -| Deny R |C C C N N N N N N N N N N N N All W |C C C N N N N N N N N N N N N RW|C C C N N N N N N N N N N N N - - - - -| Deny R |2 C C N N N Y N N N N N Y N N Write W |C C C N N N N N N Y N N Y N N RW|C C C N N N N N N N N N Y N N - - - - -| Deny R |C C C N N N N Y N N N N N Y N Read W |C C C N N N N N N N Y N N Y N RW|C C C N N N N N N N N N N Y N - - - - -| Deny R |2 C C N N N Y Y Y N N N Y Y Y None W |C C C N N N N N N Y Y Y Y Y Y RW|C C C N N N N N N N N N Y Y Y Legend: Y = open succeeds, N = open fails with error code 05h C = open fails, INT 24 generated 1 = open succeeds if file read-only, else fails with error code 2 = open succeeds if file read-only, else fails with INT 24 ----------213DFF----------------------------- INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK AX = 3DFFh Return: AX = 4A44h if resident SeeAlso: AX=357Fh,AX=4203h ----------213E------------------------------- INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE AH = 3Eh BX = file handle Return: CF clear if successful AX destroyed CF set on error AX = error code (06h) (see AH=59h) Note: if the file was written to, any pending disk writes are performed, the time and date stamps are set to the current time, and the directory entry is updated SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h ----------213F------------------------------- INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE AH = 3Fh BX = file handle CX = number of bytes to read DS:DX -> buffer for data Return: CF clear if successful AX = number of bytes actually read (0 if at EOF before call) CF set on error AX = error code (05h,06h) (see AH=59h) Notes: data is read beginning at current file position, and the file position is updated after a successful read the returned AX may be smaller than the request in CX if a partial read occurred if reading from CON, read stops at first CR SeeAlso: AH=27h,AH=40h,INT 2F/AX=1108h,INT 2F/AX=1229h ----------213F------------------------------- INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK AH = 3Fh BX = handle for character device "TDHDEBUG" CX = number of bytes to read DS:DX -> buffer for status block (see below) Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (05h,06h) (see AH=59h) SeeAlso: AH=40h"Turbo Debug" Format of status block: Offset Size Description 00h BYTE status of command 00h successful 01h invalid handle 02h no more breakpoints available 03h hardware does not support specified breakpoint type 04h previous command prevents execution 05h debugger hardware not found 06h hardware failure 07h invalid command 08h driver not initialized yet FEh recursive entry (hardware breakpoint inside hw bp handler) ---status for command 01h--- 01h WORD device driver interface version number (currently 1) 03h WORD device driver software version 05h BYTE maximum simultaneous hardware breakpoints 06h BYTE configuration bits bit 0: CPU and DMA accesses are distinct 1: can detect DMA transfers 2: supports data mask 3: hardware pass counter on breakpoints 4: can match on data as well as addresses 07h BYTE supported breakpoint types bit 0: memory read 1: memory write 2: memory read/write 3: I/O read 4: I/O write 5: I/O read/write 6: instruction fetch 08h WORD supported addressing match modes bit 0: any address 1: equal to test value 2: not equal 3: above test value 4: below test value 5: below or equal 6: above or equal 7: within range 8: outside range 0Ah WORD supported data matches bit 0: any data 1: equal to test value 2: not equal 3: above test value 4: below test value 5: below or equal 6: above or equal 7: within range 8: outside range 0Ch BYTE maximum data match length (01h, 02h, or 04h) 0Dh WORD size of onboard memory (in K) 0Fh WORD maximum number of trace-back events 11h WORD hardware breakpoint enable byte address segment (0000h if not supported) ---status for command 04h--- 01h BYTE handle to use when referring to the just-set breakpoint ----------213F------------------------------- INT 21 - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA AH = 3Fh BX = handle for character device "$IPCUST" CX = number of bytes to read DS:DX -> buffer for configuration data (see below) Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (05h,06h) (see AH=59h) Notes: if less than the entire data is read or written, the next read/write continues where the previous one ended; IOCTL calls AX=4402h and AX=4403h both reset the location at which the next operation starts to zero the data pointer is also reset to zero if the previous read or write reached or exceeded the end of the data, when the current function is read and the previous was write, or vice versa SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST" Format of configuration data: Offset Size Description 00h 12 BYTEs IPCUST.SYS device driver header 12h BYTE ??? 13h BYTE ??? 14h WORD ??? 16h BYTE bit flags bit 0: send BS rather than DEL for BackSpace key bit 1: wrap long lines 17h BYTE ??? 18h 64 BYTEs ASCIZ hostname 58h 64 BYTEs ASCIZ domain name (fully qualified domain name is hostname.domain-name) 98h 16 BYTEs ASCIZ username A8h 64 BYTEs ASCIZ full name E8h 64 BYTEs ASCIZ office address 128h 32 BYTEs ASCIZ phone number 148h WORD offset from GMT in minutes 14Ah 4 BYTEs ASCIZ timezone name 14Eh WORD number of time servers 150h ? DWORDs IP addresses for time servers (big-endian) ??? 164h WORD number of old-style name servers 166h 3 DWORDs IP addresses for name servers (big-endian) 172h WORD number of domain name servers 174h 3 DWORDs IP addresses for domain name servers (big-endian) 180h DWORD IP address of default gateway (big-endian) 184h DWORD IP address of log server (big-endian) 188h DWORD IP address of cookie server (big-endian) 18Ch DWORD IP address of lpr server (big-endian) 190h DWORD IP address of imagen print server 194h 54 BYTEs ??? 1E8h WORD TCP default window size in bytes 1EAh WORD TCP low window size 1ECh 64 BYTEs ASCIZ host tabel filename 22Ch 2 BYTEs ??? 22Eh 80 BYTEs ASCIZ mail relay host name 27Eh BYTE ??? 27Fh BYTE ??? bit flags 280h 44 BYTEs ??? 2ACh WORD ??? 2AEh 202 BYTEs ??? ----------2140------------------------------- INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE AH = 40h BX = file handle CX = number of bytes to write DS:DX -> data to write Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (05h,06h) (see AH=59h) Notes: if CX is zero, no data is written, and the file is truncated or extended to the current position data is written beginning at current file position, and the file position is updated after a successful write the usual cause for AX < CX on return is a full disk SeeAlso: AH=28h,AH=3Fh,INT 2F/AX=1109h ----------2140------------------------------- INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER AH = 40h BX = handle for character device "TDHDEBUG" CX = number of bytes to write DS:DX -> hardware breakpoint command (see below) Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (05h,06h) (see AH=59h) Note: results are retrieved by reading from the device SeeAlso: AH=3Fh"Turbo Debug" Format of hardware breakpoint commands: Offset Size Description 00h BYTE command code 00h install interrupt vectors 01h get hardware capabilities 02h enable hardware breakpoints 03h disable hardware breakpoints 04h set hardware breakpoint 05h clear hardware breakpoint 06h set I/O base address and reset hardware 07h restore interrupt vectors ---command code 00h--- 01h DWORD pointer to Turbo Debugger entry point to be jumped to on hardware breakpoint; call with CPU state the same as on the breakpoint except for pushing AX and placing an entry code (FFh if breakout button or breakpoint handle) in AH ---command code 04h--- 01h BYTE breakpoint type 00h memory read 01h memory write 02h memory read/write 03h I/O read 04h I/O write 05h I/O read/write 06h instruction fetch 02h BYTE address matching mode 00h any address 01h equal to test value 02h different from test value 03h above test value 04h below test value 05h below or equal to test value 06h above or equal to test value 07h within inclusive range 08h outside specified range 03h DWORD 32-bit linear low address 07h DWORD 32-bit linear high address 0Bh WORD pass count 0Dh BYTE data size (01h, 02h, or 04h) 0Eh BYTE source of matched bus cycle 01h CPU 02h DMA 03h either 0Fh BYTE data-matching mode 00h match any 01h equal to test value 02h different from test value 03h above test value 04h below test value 05h below or equal to test value 06h above or equal to test value 07h within specified range 08h outside specified range 10h DWORD low data value 14h DWORD high data value 18h DWORD data mask specifying which bits of the data are tested ---command code 05h--- 01h BYTE handle of breakpoint to clear (breakpoint returned from command 04h) ---command code 06h--- 01h WORD base address of hardware debugger board ----------2140------------------------------- INT 21 - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA AH = 40h BX = handle for character device "$IPCUST" CX = number of bytes to write DS:DX -> buffer for configuration data (AH=3Fh"IPCUST") Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (05h,06h) (see AH=59h) Notes: if less than the entire data is read or written, the next read/write continues where the previous one ended; IOCTL calls AX=4402h and AX=4403h both reset the location at which the next operation starts to zero the data pointer is also reset to zero if the previous read or write reached or exceeded the end of the data, when the current function is read and the previous was write, or vice versa SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST" ----------214000BX0002----------------------- INT 21 - FARTBELL.EXE - INSTALLATION CHECK AX = 4000h BX = 0002h CX = 0000h DS:DX = 0000h:0000h Return: CF clear if installed AX = CS of resident code Note: FARTBELL is a joke program by Guenther Thiele which makes various noises when programs output a bell SeeAlso: AX=4001h ----------214001BX0002----------------------- INT 21 - FARTBELL.EXE - FORCE NOISE AX = 4001h BX = 0002h CX = 0000h DS:DX = 0000h:0000h Note: FARTBELL is a joke program by Guenther Thiele which makes various noises when programs output a bell SeeAlso: AX=4000h ----------2141------------------------------- INT 21 - DOS 2+ - "UNLINK" - DELETE FILE AH = 41h DS:DX -> ASCIZ filename (no wildcards, but see below) CL = attribute mask for deletion (server call only, see below) Return: CF clear if successful AX destroyed (DOS 3.3) AL seems to be drive of deleted file CF set on error AX = error code (02h,03h,05h) (see AH=59h) Notes: (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case the filespec must be canonical (as returned by AH=60h), and only files matching the attribute mask in CL are deleted DOS does not erase the file's data; it merely becomes inaccessible because the FAT chain for the file is cleared deleting a file which is currently open may lead to filesystem corruption. Unless SHARE is loaded, DOS does not close the handles referencing the deleted file, thus allowing writes to a nonexistant file. SeeAlso: AH=13h,AX=4301h,AX=5D00h,AH=60h,INT 2F/AX=1113h ----------214101DXFFFE----------------------- INT 21 - SoftLogic Data Guardian - ??? AX = 4101h DX = FFFEh Return: AX = 0000h if installed Note: resident code sets several internal variables on this call ----------2142------------------------------- INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION AH = 42h AL = origin of move 00h start of file 01h current file position 02h end of file BX = file handle CX:DX = offset from origin of new file position Return: CF clear if successful DX:AX = new file position in bytes from start of file CF set on error AX = error code (01h,06h) (see AH=59h) Notes: for origins 01h and 02h, the pointer may be positioned before the start of the file; no error is returned in that case, but subsequent attempts at I/O will produce errors if the new position is beyond the current end of file, the file will be extended by the next write (see AH=40h) SeeAlso: AH=24h,INT 2F/AX=1228h ----------214203----------------------------- INT 21 - VIRUS - "Shake" - INSTALLATION CHECK AX = 4203h Return: AX = 1234h if resident SeeAlso: AX=3DFFh,AX=4243h ----------214243----------------------------- INT 21 - VIRUS - "Invader" - INSTALLATION CHECK AX = 4243h Return: AX = 5678h if resident SeeAlso: AX=4203h,AX=4B04h ----------214300----------------------------- INT 21 - DOS 2+ - GET FILE ATTRIBUTES AX = 4300h DS:DX -> ASCIZ filename Return: CF clear if successful CX = attributes (see AX=4301h) AX = CX (DR-DOS 5.0) CF set on error AX = error code (01h,02h,03h,05h) (see AH=59h) SeeAlso: AX=4301h,AH=B6h,INT 2F/AX=110Fh ----------214301----------------------------- INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES AX = 4301h CX = new attributes bit 8: shareable (Novell NetWare) 7: unused 6: unused 5: archive 4: directory 3: volume label 2: system 1: hidden 0: read-only DS:DX -> ASCIZ filename Return: CF clear if successful AX destroyed CF set on error AX = error code (01h,02h,03h,05h) (see AH=59h) Notes: will not change volume label or directory attribute bits, but will change the other attribute bits of a directory (the directory bit must be cleared to successfully change the other attributes of a directory, but the directory will not be changed to a normal file as a result) MSDOS 4.01 reportedly closes the file if it is currently open SeeAlso: AX=4300h,INT 2F/AX=110Eh ----------214302----------------------------- INT 21 - DR-DOS 3.41+ internal - GET ACCESS RIGHTS AX = 4302h DS:DX -> ASCIZ pathname Return: CF clear if successful CX = access rights bit 0 delete requires password bit 2 write requires password bit 3 read requires password bits 4-7=equal to bits 0-3 bits 8-11=equal to bits 0-3 AX = CX (DR-DOS 5.0) CF set on error AX = error code Desc: Determine which operations the calling program may perform on a specified file without being required to provide a password. SeeAlso: AX=4303h ----------214303----------------------------- INT 21 - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD AX = 4303h CX = access rights bit 0 delete requires password bit 2 write requires password bit 3 read requires password bits 4-7=equal to bits 0-3 bits 8-11=equal to bits 0-3 bit 15 new password is to be set DS:DX -> ASCIZ pathname [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters) Return: CF clear if successful CF set on error AX = error code Note: if the file is already protected, the old password must be added after the pathname, separated by a ";" SeeAlso: AX=4302h,AX=4454h ----------214304----------------------------- INT 21 - DR-DOS 5.0 internal - GET ??? AX = 4304h ??? Return: CF clear if successful CX = AX = ??? CF set on error AX = error code (see AH=59h) SeeAlso: AX=4305h ----------214305----------------------------- INT 21 - DR-DOS 5.0 internal - SET ??? AX = 4305h ??? Return: CF clear if successful CF set on error AX = error code (see AH=59h) SeeAlso: AX=4304h ----------214400----------------------------- INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION AX = 4400h BX = handle Return: CF clear if successful DX = device information word character device 14: device driver can process IOCTL requests (see AX=4402h) 13: output until busy supported 11: driver supports OPEN/CLOSE calls 7: set (indicates device) 6: EOF on input 5: raw (binary) mode 4: device is special (uses INT 29) 3: clock device 2: NUL device 1: standard output 0: standard input disk file 15: file is remote (DOS 3+) 14: don't set file date/time on closing (DOS 3+) 11: media not removable 8: (DOS 4+) generate INT 24 if no disk space on write 7: clear (indicates file) 6: file has not been written 5-0: drive number (0 = A:) AX destroyed CF set on error AX = error code (01h,05h,06h) (see AH=59h) Note: value in DH corresponds to high byte of device driver's attribute word if handle refers to a character device SeeAlso: AX=4401h,INT 2F/AX=122Bh ----------214401----------------------------- INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION AX = 4401h BX = handle (must refer to character device) DX = device information word (see AX=4400h) (DH must be zero) Return: CF clear if successful CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) SeeAlso: AX=4400h,INT 2F/AX=122Bh ----------214402----------------------------- INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL AX = 4402h BX = file handle referencing character device CX = number of bytes to read DS:DX -> buffer Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: format of data is driver-specific (see below for some specific cases) SeeAlso: AX=4400h,AX=4403h,AX=4404h,INT 2F/AX=122Bh ----------214402----------------------------- INT 21 - Network Driver Interface Spec 2.0.1 - PROTOCOL MANAGER AX = 4402h BX = file handle for device "PROTMAN$" DS:DX -> request block (see below) CX = 000Eh (size of request block) Format of request block for GetProtocolManagerInfo: Offset Size Description 00h WORD 01h 02h WORD returned status (see below) 04h DWORD returned pointer to structure representing parsed user config 08h DWORD unused 0Ch WORD returned BCD version of NDIS on which Protocol Manager is based Format of request block for RegisterModule: Offset Size Description 00h WORD 02h 02h WORD returned status (see below) 04h DWORD pointer to module's common characteristics table (see below) 08h DWORD pointer to list of modules to which the module is to be bound 0Ch WORD unused Format of request block for BindAndStart: Offset Size Description 00h WORD 03h 02h WORD returned status (see below) 04h DWORD caller's virtual address in FailingModules structure 08h DWORD unused 0Ch WORD unused Format of request block for GetProtocolManagerLinkage: Offset Size Description 00h WORD 04h 02h WORD returned status (see below) 04h DWORD returned dispatch point 08h DWORD unused 0Ch WORD returned protocol manager DS Note: the dispatch point may be called as follows instead of using this IOCTL STACK: WORD protocol manager DS DWORD pointer to request block Return: AX = returned status STACK popped Format of request block for GetProtocolIniPath: Offset Size Description 00h WORD 05h 02h WORD returned status (see below) 04h DWORD pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI 08h DWORD unused 0Ch WORD buffer length Format of request block for RegisterProtocolManagerInfo: Offset Size Description 00h WORD 06h 02h WORD returned status (see below) 04h DWORD pointer to structure containing parsed user config file 08h DWORD unused 0Ch WORD length of structure Format of request block for InitAndRegister: Offset Size Description 00h WORD 07h 02h WORD returned status (see below) 04h DWORD unused 08h DWORD poitner to ASCIZ name of the module to be prebind initialized 0Ch WORD unused Format of request block for UnbindAndStop: Offset Size Description 00h WORD 08h 02h WORD returned status (see below) 04h DWORD failing modules as for BindAndStart 08h DWORD if not 0000h:0000h, pointer to ASCIZ name of module to unbind if 0000h:0000h, terminate a set of previously dynamically bound protocol modules 0Ch WORD unused Format of request block for BindStatus: Offset Size Description 00h WORD 09h 02h WORD returned status (see below) 04h DWORD must be 0000h:0000h on return, points to root tree 08h DWORD 0000h:0000h 0Ch WORD unused under DOS Format of request block for RegisterStatus: Offset Size Description 00h WORD 0Ah 02h WORD returned status (0000h, 0008h, 002Ch) (see below) 04h DWORD 0000h:0000h 08h DWORD pointer to 16-byte ASCIZ module name 0Ch WORD 0000h Values of status code: 0000h success 0001h wait for release--protocol has retained control of the data buffer 0002h request queued 0003h frame not recognized 0004h frame rejected 0005h frame should be forwarded 0006h out of resource 0007h invalid parameter 0008h invalid function 0009h not supported 000Ah hardware error 000Bh transmit error 000Ch unrecognized destination 000Dh buffer too small 0020h already started 0021h binding incomplete 0022h driver not initialized 0023h hardware not found 0024h hardware failure 0025h configuration failure 0026h interrupt conflict 0027h MAC incompatible 0028h initialization failed 0029h no binding 002Ah network may be disconnected 002Bh incompatible OS version 002Ch already registered 002Dh path not found 002Eh insufficient memory 002Fh info not found 00FFh general failure F000h-FFFFh reserved for vendor-specific codes, treated as general failure Format of common characteristics table: Offset Size Description 00h WORD size of table in bytes 02h BYTE NDIS major version 03h BYTE NDIS minor version 04h WORD reserved 06h BYTE module major version 07h BYTE module minor version 08h DWORD module function flag bits bit 0: binding at upper boundary supported bit 1: binding at lower boundary supported bit 2: dynamically bound bits 3-31 reserved, must be 0 0Ch 16 BYTEs ASCIZ module name 1Ch BYTE upper boundary protocol level 01h Media Access Control 02h Data link 03h network 04h transport 05h session FFh not specified 1Dh BYTE upper boundary interface type for MACs: 1 = MAC for data links and transports: to be defined for session: 1 = NCB any level: 0 = private (ISV-defined) 1Eh BYTE lower boundary protocol level 00h physical 01h Media Access Control 02h Data link 03h network 04h transport 05h session FFh not specified 1Fh BYTE lower boundary interface type same as offset 1Dh 20h WORD module ID filled in by protocol manager 22h WORD module DS 24h DWORD system request entry point 28h DWORD pointer to service-specific characteristics 0000h:0000h if none 2Ch DWORD pointer to service-specific status 0000h:0000h if none 30h DWORD pointer to upper dispatch table (see below) 0000h:0000h if none 34h DWORD pointer to lower dispatch table (see below) 0000h:0000h if none 38h DWORD reserved, must be 0 3Ch DWORD reserved, must be 0 Note: for compatibility with NDIS 1.x.x, a major version of 00h is interpreted as 01h Format of MAC Service-Specific Characteristics Table: Offset Size Description 00h WORD length of table in bytes 02h 16 BYTEs ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX", "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC", "HDLC", or "ISDN" 12h WORD length of station addresses in bytes 14h 16 BYTEs permanent station address 24h 16 BYTEs current station address 34h DWORD current functional adapter address (00000000h if none) 38h DWORD pointer to multicast address list 3Ch DWORD link speed in bits/sec 40h DWORD service flags bit 0: supports broadcast 1: supports multicast 2: supports functional/group addressing 3: supports promiscuous mode 4: station address software settable 5: statistics always current 6: supports InitiateDiagnostics 7: supports loopback 8: MAC does primarily ReceiveChain indications instead of ReceiveLookahead indications 9: supports IBM source routing 10: supports MAC reset 11: supports Open/Close adapter 12: supports interrupt request 13: supports source routing bridge 14: supports GDT virtual addresses (OS/2 version) 15: multiple TransferDatas allowed durign a single indication 16: MAC normally sets FrameSize = 0 in ReceiveLookahead 17-31: reserved, must be 0 44h WORD maximum frame size which may be both sent and received 46h DWORD total transmit buffer capacity in bytes 4Ah WORD transmit buffer allocation block size in bytes 4Ch DWORD total receive buffer capacity in bytes 50h WORD receive buffer allocation block size in bytes 52h 3 BYTEs IEEE vendor code 55h BYTE vendor adapter code 56h DWORD pointer to ASCIZ vendor adapter description 5Ah WORD IRQ used by adapter 5Ch WORD transmit queue depth 5Eh WORD maximum supported number of data blocks in buffer descriptors 60h N BYTEs vendor-specific info Format of NetBIOS Service-Specific Characteristics Table Offset Size Description 00h WORD length of table in bytes 02h 16 BYTEs ASCIZ type name of NetBIOS module 12h WORD NetBIOS module code 14h N BYTEs vendor-specific info Format of MAC Service-Specific Status Table: Offset Size Description 00h WORD length of table in bytes 02h DWORD seconds since 0:00 1/1/70 when diagnostics last run (FFFFFFFFh = never) 06h DWORD MAC status bits bits 0-2: 000 hardware not installed 001 hardware failed startup diagnostics 010 hardware configuration problem 011 hardware fault 100 operating marginally due to soft faults 101 reserved 110 reserved 111 hardware fully operational bit 3: MAC bound 4: MAC open 5: diagnostics in progress 6-31: reserved 0Ah WORD current packet filter flags bit 0: directed/multicast or group/functional 1: broadcast 2: promiscuous 3: all source routing 4-15: reserved, must be zero 0Ch DWORD pointer to media-specific status table or 0000h:0000h 10h DWORD seconds past 0:00 1/1/70 of last ClearStatistics 14h DWORD total frames received (FFFFFFFFh = not counted) 18h DWORD frames with CRC error (FFFFFFFFh = not counted) 1Ch DWORD total bytes received (FFFFFFFFh = not counted) 20h DWORD frames discarded--no buffer space (FFFFFFFFh = not counted) 24h DWORD multicast frames received (FFFFFFFFh = not counted) 28h DWORD broadcast frames received (FFFFFFFFh = not counted) 2Ch DWORD frames with errors (FFFFFFFFh = not counted) 30h DWORD overly large frames (FFFFFFFFh = not counted) 34h DWORD frames less than minimum size (FFFFFFFFh = not counted) 38h DWORD multicast bytes received (FFFFFFFFh = not counted) 3Ch DWORD broadcast bytes received (FFFFFFFFh = not counted) 40h DWORD frames discarded--hardware error (FFFFFFFFh = not counted) 44h DWORD total frames transmitted (FFFFFFFFh = not counted) 48h DWORD total bytes transmitted (FFFFFFFFh = not counted) 4Ch DWORD multicast frames transmitted (FFFFFFFFh = not counted) 50h DWORD broadcast frames transmitted (FFFFFFFFh = not counted) 54h DWORD broadcast bytes transmitted (FFFFFFFFh = not counted) 58h DWORD multicast bytes transmitted (FFFFFFFFh = not counted) 5Ch DWORD frames not transmitted--timeout (FFFFFFFFh = not counted) 60h DWORD frames not transmitted--hardware error (FFFFFFFFh = not countd) 64h N BYTEs vendor-specific info ----------214402----------------------------- INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ??? AX = 4402h BX = handle for character device "GDMS" CX = number of bytes to read (>= 4) DS:DX -> buffer (see below) Return: CF set on error AX = error code (see AH=59h) CF clear if successful AX = number of bytes read Format of returned data: Offset Size Description 00h 4 BYTEs ??? 04h DWORD pointer to ??? 08h 4 BYTEs ??? ----------214402----------------------------- INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE AX = 4402h BX = handle for device "LA$TBYTE" CX = 0004h DS:DX -> DWORD to hold address of 39-byte table of ??? Return: CF set on error AX = error code (see AH=59h) CF clear if successful AX = number of bytes read Note: LASTBYTE.SYS is part of "The Last Byte" by Key Software Products SeeAlso: AX=4402h"HIGHUMM" ----------214402----------------------------- INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS AX = 4402h BX = handle for device "KSP$UMM" CX = 0004h DS:DX -> DWORD to hold entry point Return: CF set on error AX = error code (see AH=59h) CF clear if successful AX = number of bytes read Note: HIGHUMM.SYS is part of "The Last Byte" by Key Software Products SeeAlso: AX=4402h"LASTBYTE" Call HIGHUMM.SYS entry point with: AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h) DX = size in paragraphs Return: BX = segment number (if successful) DX = size of requested block/size of largest block AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h) DX = segment number of UMB AH = 02h request a bank-switched memory block DX = size in paragraphs Return: BX = segment number (if successful) DX = size of requested block/size of largest block AH = 03h release a bank-switched memory block DX = segment number AH = 04h transfer data to/from high memory DS:SI -> source ES:DI -> destination CX = length in bytes Note: enables bank-switched memory, does the copy, then disables bank-switched memory AH = 05h get a word from bank-switched memory ES:DI -> word to read Return: DX = word AH = 06h put a word to bank-switched memory ES:DI -> word to write DX = word AH = 07h put a byte to bank-switched memory ES:DI -> byte to write DL = byte AH = 08h enable bank-switched memory DS:SI -> 6-byte status save area AH = 09h disable bank-switched memory DS:SI -> 6-byte save area from enable call (AH=08h) AH = 0Ah assign name to UMB or high bank-switched block DX = segment number DS:SI -> 8-byte blank-padded name AH = 0Bh locate UMB block by name DS:SI -> 8-byte blank-padded name Return: BX = segment number (if successful) DX = size of block AH = 0Ch locate bank-switched block by name DS:SI -> 8-byte blank-padded name Return: BX = segment number (if successful) DX = size of block Return: AX = status code 0001h successful 0000h failed BL = error code 80h not implemented B0h insufficient memory, smaller block available B1h insufficient memory, no blocks available B2h invalid segment number Note: only functions 00h and 01h are always available; the remaining functions are only enabled if the proper commandline switch is given ----------214402----------------------------- INT 21 - SMARTDRV.SYS - IOCTL - GET CACHE STATUS AX = 4402h BX = file handle for device "SMARTAAR" CX = number of bytes to read (min 28h) DS:DX -> buffer for status record (see below) Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) SeeAlso: AX=4403h"SMARTDRV",INT 2F/AX=4A10h Format of SMARTDRV status record: Offset Size Description 00h BYTE write-through flag (always 01h) 01h BYTE writes should be buffered (always 00h) 02h BYTE cache enabled if 01h 03h BYTE driver type (01h extended memory, 02h expanded) 04h WORD clock ticks between cache flushes (currently unused) 06h BYTE cache contains locked tracks if nonzero 07h BYTE flush cache on INT 19 reboot if nonzero 08h BYTE cache full track writes if nonzero 09h BYTE double buffering (for VDS) state (00h off, 01h on, 02h dynamic) 0Ah DWORD original INT 13 vector 0Eh BYTE minor version number 0Fh BYTE major version number 10h WORD unused 12h WORD sectors read \ 14h WORD sectors already in cache > may be scaled rather than 16h WORD sectors already in track buffer / absolute counts 18h BYTE cache hit rate in percent 19h BYTE track buffer hit rate in percent 1Ah WORD total tracks in cache 1Ch WORD number of tracks in use 1Eh WORD number of locked tracks 20h WORD number of dirty tracks 22h WORD current cache size in 16K pages 24h WORD original (maximum) cache size in 16K pages 26h WORD minimum cache size in 16K pages 28h DWORD pointer to byte flag to increment for locking cache contents ----------214402----------------------------- INT 21 - CD-ROM device driver - IOCTL INPUT AX = 4402h BX = file handle referencing character device for CD-ROM driver CX = number of bytes to read DS:DX -> control block (see below) Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: the data returned depends on the first byte of the control block; the remainder of the control block is filled by the driver SeeAlso: AX=4403h"CD-ROM",INT 2F/AX=0802h Format of control block: Offset Size Description 00h BYTE data being requested 00h device driver header address 01h drive head location 02h reserved 03h error statistics 04h audio channel info 05h raw drive bytes (uninterpreted and device-specific) 06h device status 07h sector size 08h volume size 09h media change status 0Ah audio disk info 0Bh audio track info 0Ch audio Q-Channel info 0Dh audio sub-channel info 0Eh UPC code ---function 00h--- 01h DWORD device driver header address (see also AH=52h) ---function 01h--- 01h BYTE addressing mode 00h HSG 01h Red Book 02h DWORD current location of drive's head logical sector number in HSG mode frame/second/minute/unused in Red Book mode (HSG sector = minute * 4500 + second * 75 + frame - 150) ---function 03h--- 01h N BYTEs undefined as of 5 Aug 88 specification ---function 04h--- 01h BYTE input channel (0-3) for output channel 0 02h BYTE volume for output channel 0 03h BYTE input channel (0-3) for output channel 1 04h BYTE volume for output channel 1 05h BYTE input channel (0-3) for output channel 2 06h BYTE volume for output channel 2 07h BYTE input channel (0-3) for output channel 3 08h BYTE volume for output channel 3 Notes: output channels 0 and 1 are left and right, 2 and 3 are left prime and right prime; a volume of 00h is off the default setting is for each input channel to be assigned to the same-numbered output channel at full (FFh) volume ---function 05h--- 01h BYTE number of bytes read 02h 128 BYTEs buffer for drive bytes ---function 06h--- 01h DWORD device parameters bit 0: door open 1: door unlocked 2: supports raw reading in addition to cooked 3: writable 4: can play audio/video tracks 5: supports interleaving 6: reserved 7: supports prefetch requests 8: supports audio channel control 9: supports Red Book addressing in addition to HSG 10: audio is playing ---function 07h--- 01h BYTE read mode 00h cooked 01h raw 02h WORD sector size in bytes ---function 08h--- 01h DWORD volume size in sectors ---function 09h--- 01h BYTE media change status 00h don't know 01h media unchanged FFh media has been changed ---function 0Ah--- 01h BYTE lowest audio track number 02h BYTE highest audio track number 03h DWORD start address of lead-out track (Red Book format) --function 0Bh--- 01h BYTE track number (set by caller) 02h DWORD starting point of track (Red Book format) 06h BYTE track control info bits 15,14,12: track type (notice: bits not contiguous!) 000 two audio channels, no pre-emphasis 001 two audio channels with pre-emphasis 010 data track 100 four audio channels, no pre-emphasis 101 four audio channels with pre-emphasis other reserved bit 13: digital copy permitted ---function 0Ch--- 01h BYTE CONTROL and ADR byte (as received from drive) 02h BYTE track number 03h BYTE point or index 04h BYTE minute \ 05h BYTE second > running time within track 06h BYTE frame / 07h BYTE zero 08h BYTE "AMIN" or "PMIN" \ 09h BYTE "ASEC" or "PSEC" > running time on disk 0Ah BYTE "AFRAME" or "PFRAME" / ---function 0Dh--- 01h DWORD starting frame address (Red Book format) 05h DWORD transfer address 09h DWORD number of sectors to read Note: copies 96 bytes of sub-channel info per sector into buffer ---function 0Eh--- 01h BYTE CONTROL and ADR byte 02h 7 BYTEs UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0) 09h BYTE zero 0Ah BYTE "AFRAME" ----------214402----------------------------- INT 21 U - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT AX = 4402h BX = file handle for device "QEMM386$" CX = 0004h DS:DX -> DWORD buffer for API entry point Return: CF clear if successful buffer filled (see INT 67/AH=3Fh for entry point parameters) CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh ----------214402----------------------------- INT 21 U - Quarterdeck - QEMM-386 v6+ - GET ??? AX = 4402h BX = file handle for device "EMMXXXX0" CX = 0006h (size of buffer in bytes) DS:DX -> buffer for ??? first byte must be 01h on entry Return: CF clear if successful buffer filled (see INT 67/AH=3Fh function 1B00h) CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: this call always returns an error if Windows3 support has been disabled with the NW3 switch to QEMM386.SYS SeeAlso: INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh ----------214402----------------------------- INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE AX = 4402h BX = file handle for device "HOOKROM$" CX = 0004h DS:DX -> DWORD buffer for address of hooked vector table (see below) Return: CF clear if successful DS:DX buffer filled CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) SeeAlso: AX=4402h"QEMM" Format of hooked vector table entry: Offset Size Description 00h 5 BYTEs FAR jump to actual interrupt handler (end of table if first byte is not EAh) 05h BYTE interrupt vector number ----------214402----------------------------- INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE AX = 4402h BX = file handle for device "SCSIMGR$" CX = 0004h DS:DX -> buffer for function address Return: CF clear if successful AX = 0004h CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: the function address is called with the address of a SCSI Request Block on the stack and the caller must clean up the stack SeeAlso: AX=440Ch"ASPITAPE",INT 11/AH=FFh"WD7000" Format of SCSI Request Block (64 bytes): Offset Size Description 00h BYTE request number 00h "HA_INQ" host adapter inquiry 01h "GET_TYPE" get device type 02h "EXEC_SIO" execute SCSI I/O 03h "ABORT_SRB" abort SRB 04h "RESET_DEV" reset SCSI device 05h "SET_HAPRMS" set host adapter parameters 01h BYTE request status 00h not done yet 02h aborted 04h SCSI I/O error 80h invalid 81h no adapter 82h no device attached else status 02h BYTE host adapter ID 03h BYTE request flags bit 3: ??? 04h DWORD reserved ---request 00h--- 08h BYTE (returned) number of host adapters 09h BYTE (returned) target adapter ID 0Ah 16 BYTEs (returned) manager ID 1Ah 16 BYTEs (returned) adapter ID 2Ah 16 BYTEs (returned) parameters ---request 01h--- 08h BYTE target ID 09h BYTE logical unit number 0Ah BYTE (returned) device type 01h streamer ---request 02h--- 08h BYTE target ID 09h BYTE logical unit number 0Ah DWORD data allocation length 0Eh BYTE sense allocation length 0Fh DWORD data buffer pointer 13h DWORD next request pointer (for linking) 17h BYTE CDB length 18h BYTE (returned) host adapter status 11h select timeout 12h data overrun 13h bus error 14h bus failure 19h BYTE (returned) target status 02h sense data stored in SRB 08h target busy 18h reservation error 1Ah DWORD post routine address 1Eh WORD real mode Post DS 20h DWORD SRB pointer 24h WORD reserved 26h DWORD SRB physical address 2Ah 22 BYTEs SCSIMGR$ workspace 40h N BYTEs CCB (20-24 bytes) ---request 04h--- 08h BYTE target ID 09h BYTE logical unit number 0Ah 14 BYTEs reserved 18h BYTE (returned) host adapter status (see above) 19h BYTE (returned) target status (see above) 1Ah DWORD post routine address 1Eh 34 BYTEs workspace Format of CCB: Offset Size Description 00h BYTE command code 01h rewind 05h get block size limits 08h read 0Ah write 10h write file marks 11h SCSI Space (set position?) 12h SCSI Inquire 19h erase 1Bh load/unload media 01h BYTE flags bits 4-0: vary by function bits 7-5: logical unit number 02h BYTE "adr_1" 03h BYTE "adr_0" 04h BYTE length 05h BYTE control ... 06h/0Ah 14 BYTEs buffer for sense data ----------214402----------------------------- INT 21 U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE AX = 4402h BX = file handle for device "386MAX$$" CX = 005Ah DS:DX -> 386MAX state buffer (see below) Return: CF clear if successful buffer filled AX = number of bytes actually copied CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Notes: the buffer must be one byte larger than the value given in CX; if the value is less than 5Ah, only a partial state record will be returned the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 ("386MAX$$" did not exist yet, use "QMMXXXX0" and then "EMMXXXX0" instead) and 56h bytes for v5.11. to invoke 386MAX API functions, push DX onto the stack, load DX with the word at offset 25h in the returned state, load all other registers as needed for the desired function, and execute an OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return if it is not otherwise modified by the API function. SeeAlso: AX=4403h"386MAX",INT 67/AH=03h,INT 67/AH=3Fh Format of 386MAX v6.01 state: Offset Size Description 00h BYTE version number of state structure (must be set on entry; v6.01 returns an error if not 03h) 01h 6 BYTEs signature "386MAX" 07h 4 BYTEs version string "N;NN" (i.e. "6;01" for v6.01) 0Bh WORD segment of low-memory portion of 386MAX.SYS 0Dh 2 BYTEs ??? 0Fh WORD segment of ??? memory block or 0000h 11h WORD bit flags bit 1: ??? bit 2: ??? bit 3: ??? (cleared by calling INT 67 functions) bit 5: ??? bit 6: 386MAX active??? bit 7: 386MAX is providing EMS services bit 8: ??? bit 9: ??? (see INT 15/AX=2402h) bit 10: ??? bit 11: ??? bit 12: ??? bit 13: QPMS has been used bit 14: ??? bit 15: ??? 13h WORD starting address of video memory in K 15h 8 BYTEs ??? 1Dh WORD KBytes extended memory used by 386MAX 1Fh 2 BYTEs ??? 21h WORD ??? 23h WORD IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions 25h WORD IO port to write (OUT DX,AL) to invoke 386MAX API functions 27h WORD ??? 29h 2 BYTEs ??? 2Bh DWORD ??? 2Fh 4 BYTEs ??? 33h WORD system configuration??? flags bit 1: ROM compressed??? bit 3: ??? bit 5: 386MAX loaded into high memory bit 11: PC/XT (thus only single 8259 interrupt controller present, DMA only in 1st megabyte, etc) 35h WORD ??? bit flags 37h 4 BYTEs ??? 3Bh WORD segment of first MCB in high memory chain??? 3Dh WORD flags bit 2: no DPMI services bit 11: don't backfill holes in video memory area bit 12: don't backfill below video memory??? 3Fh WORD flags bit 7: ??? 41h WORD flags bit 0: Windows3 support enabled bit 8: ??? 43h 2 BYTEs ??? 45h WORD amount of memory to report available on INT 15/AH=88h 47h 4 BYTEs ??? 4Bh WORD ??? 4Dh 2 BYTEs ??? 4Fh WORD ??? 51h WORD bit flags bit 12: ??? 53h DWORD old INT 21h 57h DWORD pointer to 386MAX's EMS (INT 67h) handler Format of high memory info record: Offset Size Description 00h WORD segment address of memory region 02h WORD size of memory region in paragraphs 04h BYTE type or flags??? 00h if locked out 02h if EMS page frame 04h if high RAM 42h if ROM 05h BYTE ??? Format of ROM shadowing record: Offset Size Description 00h WORD segment of ROM??? 02h WORD segment of ROM??? 04h 2 BYTEs ??? 06h WORD size of shadowed ROM in paragraphs 08h 4 BYTEs ??? Values for memory type: 00h unused by EMS 01h DOS 04h page frame overlapping ROM??? 80h high memory 84h page frame??? 87h video ROM??? Note: the type may be 00h (unused) if the 16K page is split among different uses (such as ROM and high RAM) Call 386MAX API (via OUT DX,AL) with: STACK: WORD value for DX AH = 01h get high memory information ES:DI -> buffer for array of high memory info records (see above) Return: CX = number of records placed in buffer AH = 02h get shadowed ROM info??? ES:DI -> buffer for array of ROM shadowing records (see above) Return: CX = number of records placed in buffer AH = 03h get 386MAX state ES:DI -> 90-byte buffer for state (see above) Return: AH = 00h (successful) buffer filled Note: unlike INT 21/AX=4402h"386MAX", this function omits the first byte specifying the state buffer version AH = 04h get memory types??? ES:DI -> buffer for memory type info (array of bytes, one per 16K page) (see above) Return: CX = number of bytes placed in buffer AH = 05h get ??? AL = subfunction 00h invoke INT 15/AX=2401h first 01h don't invoke INT 15/AX=2401h first CX = number of bytes to copy (0000h for default) SI = ??? ES:DI -> buffer for ??? Return: CX = number of bytes actually copied ??? AH = 06h get memory speed info ES:DI -> buffer for memory speed records (see below) Return: AH = 00h (successful) CX = number of bytes placed in buffer Note: this function can take over a second to execute AH = 07h ??? ??? Return: ??? AH = 08h ??? AL = ??? (00h or nonzero) AH = 09h toggle ??? flags BX = bitmask of bits of ??? flags (word at state+11h) to toggle Return: AH = 00h (successful) Note: invokes INT 15/AX=2401h first AH = 0Ah toggle ??? flags BX = bitmask of bits of ??? (word at state+33h) to toggle Return: AH = 00h (successful) Notes: invokes INT 15/AX=2401h first does ??? if bit 3 on after specified bits are toggled AH = 0Bh toggle ??? flags BX = bitmask of bits of ??? (word at state+35h) to toggle Return: AH = 00h (successful) Note: invokes INT 15/AX=2401h first AH = 0Ch toggle ??? flags BX = bitmask of bits of ??? (word at state+41h) to toggle Return: AH = 00h (successful) Note: invokes INT 15/AX=2401h first AH = 0Dh specify 386MAX high-memory location BX = segment address of high-memory real-mode portion of 386MAX ??? Return: AH = status (00h successful) ??? AH = 0Eh CRT controller register virtualization AL = subfunction 00h allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h 01h trap accesses to CRTC I/O ports AH = 0Fh reboot system Return: never AH = 11h get high memory information ES:DI -> 96-byte buffer for high memory info Return: AH = 00h (successful) ES:DI buffer filled Notes: each byte in buffer contains bit flags for a 4K page in the A000h-FFFFh region bit 0: ??? bit 1: physical address same as linear address bit 2: EMS page frame bit 6: ??? this function can take over a second to execute AH = 12h ??? AL = subfunction 00h ??? 01h ??? ??? Return: AH = 00h (successful) if AL=00h or 01h AH = 8Fh otherwise AH = 13h page protection??? AL = subfunction 00h set all ??? 4K pages to read-only??? 01h set all ??? 4K pages to read-write??? ??? Return: AH = 00h (successful) if AL=00h or 01h AH = 8Fh otherwise AH = 15h ??? ??? Return: ??? AH = 16h get 386MAX memory usage screen ES:DI -> buffer for memory info display CX = size of buffer in bytes Return: ES:DI buffer filled with '$'-terminated string (if large enough to hold entire usage screen) AH = 17h Windows 3 startup/termination AL = subfunction 00h Windows3 initializing DX (on stack) = Windows startup flags DI = Windows version number (major in upper byte) ES:BX = 0000h:0000h DS:SI = 0000h:0000h Return: CX = 0000h if OK for Windows to load <> 0 if Windows should not load ES:BX -> startup info structure DS:SI -> Virtual86 mode enable/disable callback 01h Windows3 terminating ES:BX -> ??? DX (on stack) = Windows exit flags Return: ??? AH = 18h QPMS (Qualitas Protected Memory Services) AL = subfunction 00h get QPMS configuration Return: BX = starting segment of QPMS memory window CX = number of 4K pages reserved for QPMS??? DX = number of 4K pages in QPMS window??? 01h map QPMS memory page??? BX = 4K page number within memory reserved for QPMS??? CL = 4K page number within QPMS memory window??? 02h mark all QPMS memory read-only 03h mark all QPMS memory read-write Return: AH = status (00h,8Ah,8Bh,8Fh) AH = 19h get linear address for physical address EDX = physical address (low word on stack) Return: AH = status 00h successful EDX = linear address at which physical address may be accessed 8Bh physical address currently not addressable Note: calls INT 15/AX=2401h first AH = 1Ah set page table entry??? EDX = new page table entry??? (low word on stack) ESI = linear address of page??? Return: AH = status (00h,8Bh) Note: calls INT 15/AX=2401h first AH = 1Bh get ??? Return: AH = status BX = ??? CX = ??? EDX = physical address of ??? AH = 1Ch get original interrupt vector AL = interrupt vector (00h-7Fh) Return: AH = 00h (successful) EDX = original vector before 386MAX loaded (segment in high word, offset in low word) Note: no range checking is performed; requests for INTs 80h- FFh will return random values AH = 1Dh display string??? SI = ??? Return: AH = 00h (successful) ??? AH = 1Eh ??? ES:DI -> ??? ??? Return: ??? AH = 1Fh ??? ??? Return: AX = 0000h if successful BX = ??? (0001h for 386MAX v6.01) CL = ??? DL = ??? (5Ah for 386MAX v6.01) DH = ??? (00h for 386MAX v6.01) SI = ??? ES???:DI -> ??? AH = 40h-5Dh EMS services (see INT 67/AH=40h etc) AH = DEh VCPI services (see INT 67/AX=DE00h etc) Return: AH = status (as for EMS INT 67 calls) 00h successful 80h internal error 81h hardware malfunction 83h invalid handle 84h undefined function 8Ah invalid logical page nuber 8Bh illegal physical page number 8Fh undefined subfunction A4h access denied etc. STACK popped (value placed in DX if no specific return value for DX) Format of memory speed record: Offset Size Description 00h DWORD page table entry for 4K page 04h WORD number of microticks (840ns units) required for REP LODSD of entire 4K page ----------214402----------------------------- INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO AX = 4402h BX = file handle for device "PGS1600$" CX = 0018h (size of buffer) DS:DX -> configuration buffer (see below) Return: CF clear if successful buffer filled AX = number of bytes actually copied CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600 display adapter, which provides a 1600x1200 monochrome display as well as one of two emulations, MDA or CGA. SeeAlso: AX=4403h"PGS1600" Format of configuration information: Offset Size Description 00h WORD version (high byte = major, low byte = minor) 02h WORD board initialisation mode 04h WORD board I/O address 03D0h CGA emulation 03B0h MDA emulation 0390h no emulation 0350h no emulation, alternate 06h WORD emulation buffer segment B800h CGA emulation B000h MDA emulation 0000h no emulation 08h WORD PG1600 graphics buffer segment 0Ah WORD number of bytes between consecutive graphic rows 0Ch WORD horizontal pixel size 0Eh WORD vertical pixel size 10h WORD horizontal dots per inch 12h WORD vertical dots per inch 14h WORD graphics buffer bits per pixel 16h WORD monitor bits per pixel ----------214402----------------------------- INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER AX = 4402h BX = file handle referencing device "$IPCUST" CX, DS:DX ignored Return: CF clear if successful AX destroyed CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: there are a total of 378h bytes of configuration data for IPCUST.SYS version 2.05. If less than the entire data is read or written, the next read/write continues where the previous one ended; this call and AX=4403h both reset the location at which the next operation starts to zero SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4403h"IPCUST" ----------214403----------------------------- INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL AX = 4403h BX = file handle referencing character device CX = number of bytes to write DS:DX -> data to write Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Notes: format of data is driver-specific (see below for some specific cases) if the file handle refers to "4DOSSTAK", the 4DOS (v2.x-3.03) KEYSTACK.SYS driver will push the specified characters on the keyboard stack; similarly for "NDOSSTAK", the NDOS KEYSTACK.SYS driver will push the characters onto the keyboard stack SeeAlso: AX=4400h,AX=4402h,AX=4405h,INT 2F/AX=122Bh,INT 2F/AX=D44Dh SeeAlso: INT 2F/AX=D44Fh ----------214403----------------------------- INT 21 - SMARTDRV.SYS - IOCTL - CACHE CONTROL AX = 4403h BX = handle for device "SMARTAAR" CX = number of bytes to write DS:DX -> SMARTDRV control block (see below) Return: CF clear if successful AX = number of bytes actually written = 0000h if control block too small for given command CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) SeeAlso: AX=4402h"SMARTDRV",INT 2F/AX=4A10h Format of SMARTDRV control block: Offset Size Description 00h BYTE function code 00h flush cache 01h flush and discard cache 02h disable caching (flushes and discards cache first) 03h enable caching 04h control write caching 05h set flushing tick count 06h lock cache contents 07h unlock cache contents 08h set flush-on-reboot flag 09h unused 0Ah control full-track caching 0Bh reduce cache size 0Ch increase cache size 0Dh set INT 13 chain address ---function 04h--- 01h BYTE write caching control action 00h turn off write-through 01h turn on write-through 02h turn off write buffering (also flushes cache) 03h turn on write buffering (also flushes cache) ---function 05h--- 01h WORD number of timer ticks between cache flushes ---function 08h--- 01h BYTE new flush-on-reboot flag (00h off, 01h on) ---function 0Ah--- 01h BYTE full-track writes are 00h not cached 01h cached ---functions 0Bh,0Ch--- 01h WORD number of 16K pages by which to increase/reduce cache size ---function 0Dh--- 01h DWORD new address to which to chain on INT 13 Note: the previous address is not preserved ----------214403----------------------------- INT 21 - CD-ROM device driver - IOCTL OUTPUT AX = 4403h BX = file handle referencing character device for CD-ROM driver CX = number of bytes to write DS:DX -> control block (see below) Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h Format of control block: Offset Size Description 00h BYTE function code 00h eject disk 01h lock/unlock door 02h reset drive 03h control audio channel 04h write device control string 05h close tray ---functions 00h,02h,05h--- no further fields ---function 01h--- 01h BYTE lock function 00h unlock door 01h lock door ---function 03h--- 01h BYTE input channel (0-3) for output channel 0 02h BYTE volume for output channel 0 03h BYTE input channel (0-3) for output channel 1 04h BYTE volume for output channel 1 05h BYTE input channel (0-3) for output channel 2 06h BYTE volume for output channel 2 07h BYTE input channel (0-3) for output channel 3 08h BYTE volume for output channel 3 Note: output channels 0 and 1 are left and right, 2 and 3 are left prime and right prime; a volume of 00h is off ---function 04h--- 01h N BYTEs bytes to send directly to the CD-ROM drive without interpretation ----------214403----------------------------- INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS AX = 4403h BX = handle for device "SCSITAPE" CX = number of bytes to write DS:DX -> SCSITAPE control block (see below) Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) SeeAlso: AX=4405h"ST-01",INT 78/AH=10h Format of SCSITAPE control block: Offset Size Description 00h WORD command type 'F' Format (argument 1 = interleave, argument 2 = format type) 'E' Erase 'R' Rewind 'L' Load 'N' No Load 'S' Space (argument 1 = count, argument 2 = type) 'M' File Mark (argument 1 = count) 'A' Reassign 02h WORD argument 1 04h WORD argument 2 06h WORD segment of command buffer 08h WORD offset of command buffer 0Ah WORD length of command buffer ----------214403----------------------------- INT 21 U - AI Architects - OS/x86??? - API AX = 4403h BX = handle for device "AIA_OS" CX = number of bytes to write (ignored) DS:DX -> 12-byte buffer, first byte is command: 81h installation check 82h get API entry point 84h uninstall Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Ch,0Dh) (see AH=59h) Notes: these functions are only available if the DOS extender was loaded as a device driver in CONFIG.SYS called by TKERNEL (a licensed version of AI Architects/Ergo OS/x86) SeeAlso: INT 2F/AX=FBA1h/BX=0081h,INT 2F/AX=FBA1h/BX=0082h Format of buffer on return: Offset Size Description 00h 4 BYTEs signature "IABH" ---if func 81h--- (no additional fields) ---if func 82h--- 04h DWORD pointer to API entry point (see INT 2F/AX=FBA1h/BX=0082h) ---if func 84h--- 04h WORD success indicator 06h WORD segment of ??? 08h WORD segment of ??? memory block to free if nonzero 0Ah WORD segment of ??? memory block to free if nonzero ----------214403----------------------------- INT 21 U - Qualitas 386MAX v6.01 - SET STATE AX = 4403h BX = handle for device "386MAX$$" CX = number of bytes to copy (up to 5Ah) DS:DX -> 386MAX state buffer (see AX=4402h"386MAX") Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: the first byte of the buffer must be either 01h, 02h, or 03h (specifying the version of the state record) and the buffer must contain CX bytes AFTER the initial byte SeeAlso: AX=4402h"386MAX" ----------214403----------------------------- INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION??? AX = 4403h BX = file handle for device "PGS1600$" CX = 0018h (size of buffer) DS:DX -> configuration buffer (see AX=4402h"PGS1600") Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600 display adapter, which provides a 1600x1200 monochrome display as well as one of two emulations, MDA or CGA. SeeAlso: AX=4402h"PGS1600" ----------214403----------------------------- INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER AX = 4403h BX = file handle referencing device "$IPCUST" CX, DS:DX ignored Return: CF clear if successful AX destroyed CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: there are a total of 378h bytes of configuration data for IPCUST.SYS version 2.05. If less than the entire data is read or written, the next read/write continues where the previous one ended; this call and AX=4402h both reset the location at which the next operation starts to zero SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4402h"IPCUST" ----------214404----------------------------- INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL AX = 4404h BL = drive number (00h = default, 01h = A:, etc) CX = number of bytes to read DS:DX -> buffer Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: format of data is driver-specific SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh ----------214404----------------------------- INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER AX = 4404h BL = drive number (00h = default, 01h = A:, etc) CX = 0004h DS:DX -> DWORD buffer to receive device driver address Note: In addition to returning the address of the Stacker device driver, this call also sets the volume number at offset 3Eh in the device driver (see INT 25/AX=CDCDh) SeeAlso: INT 25/AX=CDCDh ----------214404----------------------------- INT 21 - Stacker - GET STACVOL FILE SECTORS AX = 4404h BL = drive number (0 is current drive) CX = byte count (i.e., 200h = 1 sector) DS:DX -> buffer (see below) Return: Data Buffer contains the number of sectors requested from the STACVOL physical file for the drive specified. Format of stacker buffer: Offset Size Description 00h WORD 01CDh 02h WORD sector count 04h DWORD number of starting sector 08h DWORD far pointer to Data Buffer ----------214405----------------------------- INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL AX = 4405h BL = drive number (00h = default, 01h = A:, etc) CX = number of bytes to write DS:DX -> data to write Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: format of data is driver-specific SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh ----------214405----------------------------- INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS AX = 4405h BX = drive number (00h = default, 01h = A:, etc) CX = number of bytes to write DS:DX -> SCSIDISK control block (see AX=4403h"ST-01") Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) SeeAlso: AX=4403h"ST-01" ----------214406----------------------------- INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS AX = 4406h BX = file handle Return: CF clear if successful AL = input status 00h not ready (device) or at EOF (file) FFh ready CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: files may not register as being at EOF if positioned there by AH=42h SeeAlso: AX=4407h,INT 2F/AX=122Bh ----------214407----------------------------- INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS AX = 4407h BX = file handle Return: CF clear if successful AL = input status 00h not ready FFh ready CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h) Note: for DOS 2+, files are always ready for output, even if the disk is full or no media is in the drive SeeAlso: AX=4406h,INT 2F/AX=122Bh ----------214408----------------------------- INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE AX = 4408h BL = drive number (00h = default, 01h = A:, etc) Return: CF clear if successful AX = 0000h if removable = 0001h if fixed CF set on error AX = error code (01h,0Fh) (see AH=59h) SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh ----------214409----------------------------- INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE AX = 4409h BL = drive number (00h = default, 01h = A:, etc) Return: CF clear if successful DX = device attribute word bit 15: drive is SUBSTituted bit 12: drive is remote bit 9: direct I/O not allowed CF set on error AX = error code (01h,0Fh) (see AH=59h) Note: on local drives, DX bits not listed above are the attribute word from the device driver header (see AH=52h); for remote drives, the other bits appear to be undefined SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh ----------21440A----------------------------- INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE AX = 440Ah BX = handle Return: CF clear if successful DX = attribute word (as stored in SFT) bit 15: set if remote bit 14: date/time not set on close CF set on error AX = error code (01h,06h) (see AH=59h) Note: if file is remote, Novell Advanced NetWare 2.0 returns the number of the file server on which the handle is located in CX SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh ----------21440B----------------------------- INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT AX = 440Bh CX = pause between retries (default 1) DX = number of retries (default 3) Return: CF clear if successful CF set on error AX = error code (01h) (see AH=59h) Notes: delay is dependent on processor speed (value in CX specifies number of 64K-iteration empty loops to execute) if DX=0000h on entry, the retry count is left unchanged SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh ----------21440C----------------------------- INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST AX = 440Ch BX = device handle CH = category code 00h unknown (DOS 3.3+) 01h COMn: (DOS 3.3+) 03h CON (DOS 3.3+) 05h LPTn: 9Eh Media Access Control driver (STARLITE) CL = function 00h MAC driver Bind (STARLITE) 45h set iteration count 4Ah select code page 4Ch start code-page preparation 4Dh end code-page preparation 5Fh set display information (DOS 4.0) 65h get iteration count 6Ah query selected code page 6Bh query prepare list 7Fh get display information (DOS 4.0) DS:DX -> (DOS) parameter block (see below) SI:DI -> (OS/2 comp box) parameter block (see below) Return: CF set on error AX = error code (see AH=59h) CF clear if successful DS:DX -> iteration count if CL=65h DS:DX -> (OS/2 comp box) data block SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=1A01h Format of parameter block for function 00h: Offset Size Description 00h 8 BYTEs ASCIZ signature "STARMAC" 08h WORD version 0Ah WORD flags bit 0: media requires connect or listen request before use bit 1: network is a LAN (broadcast/multicast supported) bit 2: point-to-point network 0Ch WORD handle for use with MAC driver's private interface (filled in by MAC driver) 0Eh WORD context 10h WORD approximate speed in KB/sec (filled in by MAC driver) 12h WORD approximate cost in cents per hour (filled in by MAC driver) 14h WORD maximum packet size in bytes (filled in by MAC driver) 16h WORD addressing format (filled in by MAC driver) 0000h general addressing 0001h Ethernet addressing 0002h Token Ring addressing 0003h Token Bus addressing 18h DWORD Send entry point (filled in by MAC driver) 1Ch DWORD RegisterEventHandler entry point (filled in by MAC driver) 20h DWORD SetPacketFilter entry point (filled in by MAC driver) 24h DWORD UnBind entry point (filled in by MAC driver) Format of parameter block for function 45h: Offset Size Description 00h WORD number of times output is attempted before driver assumes device is busy Format of parameter block for functions 4Ah and 6Ah: Offset Size Description 00h WORD length of data 02h WORD code page ID 04h 2N BYTEs DCBS (double byte character set) lead byte range start/end for each of N ranges (DOS 4.0) WORD 0000h end of data (DOS 4.0) Format of parameter block for function 4Dh: Offset Size Description 00h WORD length of data 02h WORD code page ID Format of parameter block for function 4Ch: Offset Size Description 00h WORD flags DISPLAY.SYS = 0000h PRINTER.SYS bit 0 clear to prepare downloaded font, set to prepare cartridge selection 02h WORD length of remainder of parameter block 04h WORD number of code pages following 06h N WORDs code page 1,...,N Format of parameter block for functions 5Fh and 7Fh: Offset Size Description 00h BYTE level (0 for DOS 4.x and 5.0) 01h BYTE reserved (0) 02h WORD length of following data (14) 04h WORD control flags bit 0 set for blink, clear for intensity bits 1 to 15 reserved 06h BYTE mode type (1=text, 2=graphics) 07h BYTE reserved (0) 08h WORD colors 0 = monochrome else N bits per pixel 0Ah WORD pixel columns 0Ch WORD pixel rows 0Eh WORD character columns 10h WORD character rows Format of parameter block for function 6Bh: Offset Size Description 00h WORD length of following data 02h WORD number of hardware code pages 04h N WORDs hardware code pages 1,...,N WORD number of prepared code pages N WORDs prepared code pages 1,...,N ----------21440C----------------------------- INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE AX = 440Ch BX = device handle CH = category code 07h tape (ASPITAPE.SYS) CL = function 01h "mtop" - perform tape operation 02h "mtget" - get tape status 03h ignore end-of-tape errors 04h enable end-of-tape errors DS:DX -> parameter block (see below) Return: CF set on error AX = error code (see AH=59h) CF clear if successful DS:DX -> data block Notes: This device driver is a simple DOS interface to the Adaptec Advanced SCSI Programming Interface (ASPI). It provides the following device names as access to the SCSI tape, 'RMTx' (rewind on close) and 'NRMTx' (NO rewind on close) where x can go from 0 to 3. There may also be the following names 'MTx' and 'NMTx' which default to 1024 byte blocks. The names may also have a '$' appended to try and make them unique from file names of 'RMT0' etc. once opend these devices must be put into RAW mode SeeAlso: AX=4402h"ASPI" Format of mtop parameter block: Offset Size Description 00h WORD operation code 00h "MTWEOF" - write an end-of-file record 01h "MTFSF" - forward space file 02h "MTBSF" - backward space file 03h "MTFSR" - forward space record 04h "MTBSR" - backward space record 05h "MTREW" - rewind 06h "MTOFFL" - rewind and unload 07h "MTNOP" - perform TEST UNIT READY 02h DWORD repetition count Format of mtget parameter block: Offset Size Description 00h BYTE ASPI host ID 01h BYTE SCSI target ID 02h BYTE SCSI logical unit number 03h BYTE device parameters bit 0: drive must use fixed-block read and write bit 7: drive is an ASPI device 04h BYTE current device state bit 0: device currently opened in buffered mode bit 1: drive currently opened in nonbuffered mode bit 2: rewind drive on last close bit 3: drive has been written on bit 4: drive has been read from bit 5: next read will return 0 bytes bit 6: EOM will resemble EOF bit 7: drive may be busy rewinding 05h BYTE unit number within driver 06h WORD fixed block blocksize 08h BYTE last SCSI status 09h BYTE last SCSI sense key 0Ah WORD last SCSI opcode (packed) bits 0-7: SCSI operation (SCSI packet byte 0) bits 8-10: SCSI flags (SCSI packet byte 1) bits 11-12: ASPI "Direction Bits" (ASPI SRB byte 3) 0Ch WORD residual bytes from SCSI opcode ----------21440D----------------------------- INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST AX = 440Dh BL = drive number (00h=default,01h=A:,etc) CH = category code 08h disk drive CL = function 40h set device parameters 41h write logical device track 42h format and verify logical device track 46h (DOS 4+) set volume serial number (see also AH=69h) 47h (DOS 4+) set access flag 60h get device parameters 61h read logical device track 62h verify logical device track 66h (DOS 4+) get volume serial number (see also AH=69h) 67h (DOS 4+) get access flag 68h (DOS 5+) sense media type DS:DX -> (DOS) parameter block (see below) SI:DI -> (OS/2 comp box) parameter block (see below) Return: CF set on error AX = error code (see AH=59h) CF clear if successful DS:DX -> data block if CL=60h or CL=61h Notes: DOS 4.01 seems to ignore the high byte of the number of directory entries in the BPB for diskettes. functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5.0 SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh Format of parameter block for functions 40h, 60h: Offset Size Description 00h BYTE special functions bit 0 set if function to use current BPB, clear if Device BIOS Parameter Block field contains new default BPB bit 1 set if function to use track layout fields only must be clear if CL=60h bit 2 set if all sectors in track same size (should be set) bits 3-7 reserved 01h BYTE device type 00h 320K/360K disk 01h 1.2M disk 02h 720K disk 03h single-density 8-inch disk 04h double-density 8-inch disk 05h fixed disk 06h tape drive 07h (DOS 3.3+) 1.44M floppy 08h read/write optical disk 09h (DOS 5.0) 2.88M floppy 0Ah other type of block device 02h WORD device attributes bit 0 set if nonremovable medium bit 1 set if door lock supported bits 2-15 reserved 04h WORD number of cylinders 06h BYTE media type for 1.2M drive 00h 1.2M disk (default) 01h 320K/360K disk always 00h for other drive types 07h 31 BYTEs device BPB (see AH=53h), bytes after BPB offset 1Eh omitted 26h WORD number of sectors per track (start of track layout field) not used by function 60h 28h N word pairs: number,size of each sector in track Format of parameter block for functions 41h, 61h: Offset Size Description 00h BYTE special functions (reserved, must be zero) 01h WORD number of disk head 03h WORD number of disk cylinder 05h WORD number of first sector to read/write 07h WORD number of sectors 09h DWORD transfer address Format of parameter block for functions 42h, 62h: Offset Size Description 00h BYTE reserved, must be zero (DOS <3.2) bit 0=0: format/verify track 1: format status call (DOS 3.2+) bits 1-7 reserved, must be zero on return (DOS 4.x): bit 0: set if specified tracks, sectors/track supported bit 1: set if function not supported by BIOS bit 2: set if specified tracks, sectors/track not supported bit 3: set if no disk in drive 01h WORD number of disk head 03h WORD number of disk cylinder Format of parameter block for functions 46h, 66h: Offset Size Description 00h WORD info level (00h) 02h DWORD disk serial number (binary) 06h 11 BYTEs volume label or "NO NAME " 11h 8 BYTEs filesystem type "FAT12 " or "FAT16 " (CL=66h only) Format of parameter block for functions 47h, 67h: Offset Size Description 00h BYTE special-function field (must be zero) 01h BYTE disk-access flag, nonzero if access allowed by driver Format of parameter block for function 68h: Offset Size Description 00h BYTE 01h for default media type, 00h for any other media type 01h BYTE 02h for 720K, 07h for 1.44M, 09h for 2.88M ----------21440E----------------------------- INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP AX = 440Eh BL = drive number (00h=default,01h=A:,etc) Return: CF set on error AX = error code (01h,0Fh) (see AH=59h) CF clear if successful AL = 00h block device has only one logical drive assigned 1..26 the last letter used to reference the drive (1=A:,etc) SeeAlso: AX=440Fh,INT 2F/AX=122Bh ----------21440F----------------------------- INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP AX = 440Fh BL = physical drive number (00h=default,01h=A:,etc)) Return: CF set on error AX = error code (01h,0Fh) (see AH=59h) CF clear if successful drive now responds to next logical drive number Note: maps logical drives to physical drives, similar to DOS's treatment of a single physical floppy drive as both A: and B: SeeAlso: AX=440Eh,INT 2F/AX=122Bh ----------214410----------------------------- INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE) AX = 4410h BX = handle for device CH = category code (see AX=440Ch) CL = function code Return: CF clear if successful AX = 0000h specified IOCTL function is supported CF set on error AL = 01h IOCTL capability not available Note: a program which wishes to use Generic IOCTL calls beyond those in the standard DOS 3.2 set may use this call first to see whether a particular call is supported SeeAlso: AX=440Ch,AX=440Dh,AX=4411h ----------214410BXFFFF----------------------- INT 21 U - NewSpace - ENABLE DRIVER AX = 4410h BX = FFFFh Notes: NewSpace is a TSR by Isogon Corporation which automatically compresses all files as they are written and decompresses them as they are read compressed files are not accessible unless the driver is enabled SeeAlso: AX=4411h/BX=FFFFh ----------214411----------------------------- INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE) AX = 4411h BL = drive number CH = category code (see AX=440Dh) CL = function code Return: CF clear if successful AX = 0000h specified IOCTL function is supported CF set on error AL = 01h IOCTL capability not available Note: a program which wishes to use Generic IOCTL calls beyond those in the standard DOS 3.2 set may use this call first to see whether a particular call is supported SeeAlso: AX=440Ch,AX=440Dh,AX=4410h ----------214411BXFFFF----------------------- INT 21 U - NewSpace - DISABLE DRIVER AX = 4411h BX = FFFFh Notes: NewSpace is a TSR by Isogon Corporation which automatically compresses all files as they are written and decompresses them as they are read compressed files are not accessible unless the driver is enabled SeeAlso: AX=4410h/BX=FFFFh ----------214412----------------------------- INT 21 - DR-DOS 5.0 - DETERMINE DOS TYPE AX = 4412h CF set Return: CF set if not DR DOS AX = error code (see AH=59h) CF clear if DR DOS DX = AX = version code 1060h = ??? 1063h = DR-DOS 3.41 ??? 1065h = DR-DOS 5.0 1067h = DR-DOS 6.0 Note: this call is identical to AX=4452h SeeAlso: AX=4452h ----------214412BXFFFF----------------------- INT 21 U - NewSpace - INSTALLATION CHECK??? AX = 4412h BX = FFFFh Return: AX = PSP segment of NewRes (resident driver for NewSpace) BX:DX -> ??? CX = ??? SeeAlso: AX=4411h/BX=FFFFh ----------214413BXFFFF----------------------- INT 21 U - NewSpace - GET ??? AX = 4413h BX = FFFFh Return: AX = code segment of NewRes (resident driver for NewSpace) BX = offset of ??? SeeAlso: AX=4412h/BX=FFFFh ----------214414----------------------------- INT 21 U - DR-DOS 5.0 - SET GLOBAL PASSWORD AX = 4414h DS:DX -> password string (blank-padded to 8 characters) Desc: Specify the master password for accessing files. Note: this call is identical to AX=4454h SeeAlso: AX=4454h ----------214414BXFFFF----------------------- INT 21 U - NewSpace - DEBUGGING DUMP AX = 4414h BX = FFFFh Return: debugging dump written to X:\NEWSPACE.SMP SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh ----------2144------------------------------- INT 21 U - DR-DOS 5.0 AH = 44h AL = 16h to 18h Note: these subfunctions are identical to AX=4456h to 4458h SeeAlso: AX=4456h,AX=4457h,AX=4458h ----------214451----------------------------- INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK AX = 4451h Return: CF set if not Concurrent DOS AX = error code (see AH=59h) CF clear if successful AH = 14h AL = version (high nybble = major version, low nybble = minor ver) SeeAlso: AX=4452h,AX=4459h ----------214452----------------------------- INT 21 - DR DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION AX = 4452h CF set Return: CF set if not DR DOS AX = error code (see AH=59h) CF clear if DR DOS DX = AX = version code 1060h = ??? 1063h = DR-DOS 3.41 ??? 1065h = DR-DOS 5.0 1067h = DR-DOS 6.0 Notes: the DR-DOS version is stored in the environment variable VER SeeAlso: AX=4412h,AX=4451h,AX=4459h ----------214454----------------------------- INT 21 U - DR-DOS 3.41+ - SET GLOBAL PASSWORD AX = 4454h DS:DX -> password string (blank-padded to 8 characters) Desc: Specify the master password for accessing files. SeeAlso: AX=4303h,AX=4414h ----------214456----------------------------- INT 21 U - DR-DOS 5.0+ - ??? AX = 4456h DL = flag bit 0: ??? Return: AL = ??? Note: This was seen called by COMMAND.COM of DR-DOS 6.0 ----------214457----------------------------- INT 21 U - DR-DOS 5.0+ - ??? AX = 4457h DH = subfunction 00h ??? DL = 00h ??? = 01h ??? else Return: AX = ??? 01h Return: AX = ??? 02h DL = ??? Return: AX = ??? other Return: AX = ??? Note: This was seen called by COMMAND.COM of DR-DOS 6.0 ----------214458----------------------------- INT 21 U - DR DOS 5.0+ internal - GET POINTER TO TABLE OF ??? AX = 4458h Return: ES:BX -> internal table (see below) AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0) SeeAlso: AX=4452h Format of internal table: Offset Size Description 00h DWORD pointer to ??? 04h 7 BYTEs ??? 0Bh WORD K of extended memory at startup 0Dh BYTE number of far jump entry points 0Eh WORD segment containing far jumps to DR-DOS entry points (see below) 10h WORD ??? 12h WORD pointer to segment of environment variables set in CONFIG, or 0000h if already used (DR-DOS 6.0 only) 14h ??? ??? Note: the segment used for the DR-DOS 6.0 CONFIG environment variables (excluding COMSPEC, VER and OS) is only useful for programs/drivers called from CONFIG.SYS. The word is set to zero later and the area lost. Format of jump table for DR-DOS 5.0-6.0: Offset Size Description 00h 5 BYTEs far jump to entry point corresponding to CP/M CALL 5 05h 5 BYTEs far jump to entry point corresponding to INT 20 0Ah 5 BYTEs far jump to entry point corresponding to INT 21 0Fh 5 BYTEs far jump to entry point corresponding to ??? 14h 5 BYTEs far jump to entry point corresponding to ??? 19h 5 BYTEs far jump to entry point corresponding to ??? 1Eh 5 BYTEs far jump to entry point corresponding to ??? 23h 5 BYTEs far jump to entry point corresponding to ??? 28h 5 BYTEs far jump to entry point corresponding to ??? 2Dh 5 BYTEs far jump to entry point corresponding to ??? 32h 5 BYTEs far jump to entry point corresponding to ??? (IRET) 37h 5 BYTEs far jump to entry point corresponding to ??? (IRET) 3Ch 5 BYTEs far jump to entry point corresponding to ??? (IRET) 41h 5 BYTEs far jump to entry point corresponding to ??? (IRET) 46h 5 BYTEs far jump to entry point corresponding to ??? (IRET) 4Bh 5 BYTEs far jump to entry point corresponding to ??? ----------214459----------------------------- INT 21 - DR MultiUser DOS 5.0 - API AX = 4459h CL = function (see INT E0"CP/M") DS,DX = parameters Notes: DR-DOS 5.0 returns CF set and AX=0001h this API is also available on INT E0 SeeAlso: AX=4452h,INT E0"CP/M" ----------2144FFBXFFFF----------------------- INT 21 U - NewSpace - ??? AX = 44FFh BX = FFFFh DX = ??? Note: NewSpace is a TSR by Isogon Corporation which automatically compresses all files as they are written and decompresses them as they are read SeeAlso: AX=4414h/BX=FFFFh ----------2145------------------------------- INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE AH = 45h BX = file handle Return: CF clear if successful AX = new handle CF set on error AX = error code (04h,06h) (see AH=59h) Notes: moving file pointer for either handle will also move it for the other, because both will refer to the same system file table for DOS versions prior to 3.3, file writes may be forced to disk by duplicating the file handle and closing the duplicate SeeAlso: AH=3Dh,AH=46h ----------2146------------------------------- INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE AH = 46h BX = file handle CX = file handle to become duplicate of first handle Return: CF clear if successful CF set on error AX = error code (04h,06h) (see AH=59h) Notes: closes file with handle CX if it is still open DOS 3.30 hangs if BX=CX on entry moving file pointer for either handle will also move it for the other, because both will refer to the same system file table SeeAlso: AH=3Dh,AH=45h ----------2147------------------------------- INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY AH = 47h DL = drive number (00h = default, 01h = A:, etc) DS:SI -> 64-byte buffer for ASCIZ pathname Return: CF clear if successful AX = 0100h (undocumented) CF set on error AX = error code (0Fh) (see AH=59h) Notes: the returned path does not include a drive or the initial backslash many Microsoft products for Windows rely on AX being 0100h on success SeeAlso: AH=19h,AH=3Bh ----------2148------------------------------- INT 21 - DOS 2+ - ALLOCATE MEMORY AH = 48h BX = number of paragraphs to allocate Return: CF clear if successful AX = segment of allocated block CF set on error AX = error code (07h,08h) (see AH=59h) BX = size of largest available block Notes: DOS 2.1-5.0 coalesces free blocks while scanning for a block to allocate .COM programs are initially allocated the largest available memory block, and should free some memory with AH=49h before attempting any allocations SeeAlso: AH=49h,AH=4Ah,AH=58h ----------2149------------------------------- INT 21 - DOS 2+ - FREE MEMORY AH = 49h ES = segment of block to free Return: CF clear if successful CF set on error AX = error code (07h,09h) (see AH=59h) Notes: apparently never returns an error 07h, despite official docs; DOS 3.30 code contains only an error 09h exit DOS 2.1-5.0 does not coalesce adjacent free blocks when a block is freed, only when a block is allocated or resized SeeAlso: AH=48h,AH=4Ah ----------214A------------------------------- INT 21 - DOS 2+ - RESIZE MEMORY BLOCK AH = 4Ah BX = new size in paragraphs ES = segment of block to resize Return: CF clear if successful CF set on error AX = error code (07h,08h,09h) (see AH=59h) BX = maximum paragraphs available for specified memory block Notes: under DOS 2.1-5.0, if there is insufficient memory to expand the block as much as requested, the block will be made as large as possible DOS 2.1-5.0 coalesces any free blocks immediately following the block to be resized SeeAlso: AH=48h,AH=49h ----------214B------------------------------- INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM AH = 4Bh AL = type of load 00h load and execute 01h load but do not execute 03h load overlay 04h load and execute in background (European MSDOS 4.0 only) (see also AH=80h) DS:DX -> ASCIZ program name (must include extension) ES:BX -> parameter block (see below) Return: CF clear if successful BX,DX destroyed if subfunction 01h, process ID set to new program's PSP; get with INT 21/AH=62h CF set on error AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see AH=59h) Notes: DOS 2.x destroys all registers, including SS:SP for functions 00h and 01h, the calling process must ensure that there is enough unallocated memory available; if necessary, by releasing memory with AH=49h or AH=4Ah for function 01h, the value to be passed to the child program is put on top of the child's stack for function 03h, DOS assumes that the overlay is being loaded into memory allocated by the caller function 01h has been documented for DOS 5+, but was undocumented in prior versions some versions (such as DR-DOS 6.0) check the parameters and parameter block and return an error if an invalid value (such as an offset of FFFFh) is found BUG: DOS 2.00 assumes that DS points at the current program's PSP SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h"OS/2",INT 2E Format of EXEC parameter block for AL=00h,01h,04h: Offset Size Description 00h WORD segment of environment to copy for child process (copy caller's environment if 0000h) 02h DWORD pointer to command tail to be copied into child's PSP 06h DWORD pointer to first FCB to be copied into child's PSP 0Ah DWORD pointer to second FCB to be copied into child's PSP 0Eh DWORD (AL=01h) will hold subprogram's initial SS:SP on return 12h DWORD (AL=01h) will hold entry point (CS:IP) on return Format of EXEC parameter block for AL=03h: Offset Size Description 00h WORD segment at which to load overlay 02h WORD relocation factor to apply to overlay if in .EXE format Format of .EXE file header: Offset Size Description 00h 2 BYTEs .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah) 02h WORD number of bytes in last 512-byte page of executable 04h WORD total number of 512-byte pages in executable (includes any partial last page) 06h WORD number of relocation entries 08h WORD header size in paragraphs 0Ah WORD minimum paragraphs of memory to allocation in addition to executable's size 0Ch WORD maximum paragraphs to allocate in addition to executable's size 0Eh WORD initial SS relative to start of executable 10h WORD initial SP 12h WORD checksum (one's complement of sum of all words in executable) 14h DWORD initial CS:IP relative to start of executable 18h WORD offset within header of relocation table (40h for New EXE) 1Ah WORD overlay number (normally 0000h = main program) ---new executable--- 1Ch 4 BYTEs ??? 20h WORD behavior bits 22h 26 BYTEs reserved for additional behavior info 3Ch DWORD offset of new executable header within disk file ---Borland TLINK--- 1Ch 2 BYTEs ??? (apparently always 01h 00h) 1Eh BYTE signature FBh 1Fh BYTE TLINK version (major in high nybble, minor in low nybble) 20h 2 BYTEs ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h) ---ARJ self-extracting archive--- 1Ch 4 BYTEs signature "RJSX" ---LZEXE 0.91 compressed executable--- 1Ch 4 BYTEs signature "LZ91" ---PKLITE compressed executable--- 1Ch 2 BYTEs ??? 1Eh 6 BYTEs signature "PKLITE" (followed by copyright message) ---LHarc 1.x self-extracting archive--- 1Ch 4 BYTEs unused??? 20h 3 BYTEs jump to start of extraction code 23h 2 BYTEs ??? 25h 12 BYTEs signature "LHarc's SFX " ---LHA 2.x self-extracting archive--- 1Ch 8 BYTEs ??? 24h 10 BYTEs signature "LHA's SFX " ---other linkers--- 1Ch var optional information --- N N DWORDs relocation items Notes: if word at offset 02h is 4, it should be treated as 00h, since pre-1.10 versions of the MS linker set it that way if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the program is loaded as high in memory as possible the maximum allocation is set to FFFFh by default Format of new executable header: Offset Size Description 00h 2 BYTEs "NE" (4Eh 45h) signature 02h 2 BYTEs linker version (major, then minor) 04h WORD offset from start of this header to entry table (see below) 06h WORD length of entry table in bytes 08h DWORD file load CRC (0 in Borland's TPW) 0Ch BYTE program flags bits 0-1 DGROUP type 0 = none 1 = single shared 2 = multiple (unshared) 3 = (null) bit 2: global initialization bit 3: protected mode only bit 4: 8086 instructions bit 5: 80286 instructions bit 6: 80386 instructions bit 7: 80x87 instructions 0Dh BYTE application flags bits 0-2: application type 001 full screen (not aware of Windows/P.M. API) 010 compatible with Windows/P.M. API 011 uses Windows/P.M. API bit 3: is a Family Application (OS/2) bit 5: 0=executable, 1=errors in image bit 6: non-conforming program (valid stack is not maintained) bit 7: DLL or driver rather than application (SS:SP info invalid, CS:IP points at FAR init routine called with AX=module handle which returns AX=0000h on failure, AX nonzero on successful initialization) 0Eh WORD auto data segment index 10h WORD initial local heap size 12h WORD initial stack size (added to data seg, 0000h if SS != DS) 14h DWORD program entry point (CS:IP), "CS" is index into segment table 18h DWORD initial stack pointer (SS:SP), "SS" is segment index if SS=automatic data segment and SP=0000h, the stack pointer is set to the top of the automatic data segment, just below the local heap 1Ch WORD segment count 1Eh WORD module reference count 20h WORD length of nonresident names table in bytes 22h WORD offset from start of this header to segment table (see below) 24h WORD offset from start of this header to resource table 26h WORD offset from start of this header to resident names table 28h WORD offset from start of this header to module reference table 2Ah WORD offset from start of this header to imported names table (array of counted strings, terminated with a string of length 00h) 2Ch DWORD offset from start of file to nonresident names table 30h WORD count of moveable entry point listed in entry table 32h WORD file alignment size shift count 0 is equivalent to 9 (default 512-byte pages) 34h WORD number of resource table entries 36h BYTE target operating system 00h unknown 01h OS/2 02h Windows 03h European MS-DOS 4.x 04h Windows 386 05h BOSS (Borland Operating System Services) 37h BYTE other EXE flags bit 0: supports long filenames bit 1: 2.X protected mode bit 2: 2.X proportional font bit 3: gangload area 38h WORD offset to return thunks or start of gangload area 3Ah WORD offset to segment reference thunks or length of gangload area 3Ch WORD minimum code swap area size 3Eh 2 BYTEs expected Windows version (minor version first) Format of Codeview trailer (at end of executable): Offset Size Description 00h WORD signature 4E42h ('NB') 02h WORD Microsoft debug info version number 04h DWORD Codeview header offset Format of new executable segment table record: 00h WORD offset in file (shift left by alignment shift to get byte offs) 02h WORD length of image in file (0000h = 64K) 04h WORD attributes bit 0: data segment rather than code segment bit 1: unused??? bit 2: real mode bit 3: iterated bit 4: movable bit 5: sharable bit 6: preloaded rather than demand-loaded bit 7: execute-only (code) or read-only (data) bit 8: relocations (directly following code for this segment) bit 9: debug info present bits 10,11: 80286 DPL bits bit 12: discardable bits 13-15: discard priority 06h WORD number of bytes to allocate for segment (0000h = 64K) Note: the first segment table entry is entry number 1 Format of new executable entry table item (list): Offset Size Description 00h BYTE number of entry points (00h if end of entry table list) 01h BYTE segment number (00h if end of entry table list) 02h 3N BYTEs entry records Offset Size Description 00h BYTE flags bit 0: exported bit 1: single data bits 2-7: unused??? 01h WORD offset within segment Format of new executable relocation data (immediately follows segment image): Offset Size Description 00h WORD number of relocation items 02h 8N BYTEs relocation items Offset Size Description 00h BYTE relocation type 00h LOBYTE 02h BASE 03h PTR 05h OFFS 0Bh PTR48 0Dh OFFS32 01h BYTE flags bit 2: additive 02h WORD offset within segment 04h WORD target address segment 06h WORD target address offset Format of new executable resource data: Offset Size Description 00h WORD alignment shift count for resource data 02h N RECORDs resources Format of resource record: Offset Size Description 00h WORD type ID 0000h if end of resource records >= 8000h if integer type else offset from start of resource table to type string 02h WORD number of resources of this type 04h DWORD reserved for runtime use 08h N Resources (see below) Note: resource type and name strings are stored immediately following the resource table, and are not null-terminated Format of new executable resource entry: Offset Size Description 00h WORD offset in alignment units from start of file to contents of the resource data 02h WORD length of resource image in bytes 04h WORD flags bit 4: moveable bit 5: shareable bit 6: preloaded 06h WORD resource ID >= 8000h if integer resource else offset from start of resource table to resource string 08h DWORD reserved for runtime use Notes: resource type and name strings are stored immediately following the resource table, and are not null-terminated strings are counted strings, with a string of length 0 indicating the end of the resource table Format of new executable module reference table [one bundle of entries]: Offset Size Description 00h BYTE number of records in this bundle (00h if end of table) 01h BYTE segment indicator 00h unused FFh movable segment, segment number is in entry else segment number of fixed segment 02h N RECORDs Format of segment record Offset Size Description 00h BYTE flags bit 0: entry is exported bit 1: entry uses global (shared) data bits 7-3: number of parameter words ---fixed segment--- 01h WORD offset ---moveable segment--- 01h 2 BYTEs INT 3F instruction (CDh 3Fh) 03h BYTE segment number 05h WORD offset Note: table entries are numbered starting from 1 Format of new executable resident/nonresident name table entry: Offset Size Description 00h BYTE length of string (00h if end of table) 01h N BYTEs ASCII text of string N+1 WORD ordinal number (index into entry table) Notes: the first string in the resident name table is the module name; the first entry in the nonresident name table is the module description the strings are case-sensitive; if the executable was linked with /IGNORECASE, all strings are in uppercase Format of Linear Executable (enhanced mode executable) header: Offset Size Description 00h 2 BYTEs "LE" (4Ch 45h) signature 02h BYTE byte order (00h = little-endian, nonzero = big-endian) 03h BYTE word order (00h = little-endian, nonzero = big-endian) 04h DWORD executable format level 08h WORD CPU type (see also INT 15/AH=C9h) 01h Intel 80286 or upwardly compatible 02h Intel 80386 or upwardly compatible 03h Intel 80486 or upwardly compatible 04h Intel 80586 or upwardly compatible 20h Intel i860 (N10) or compatible 21h Intel "N11" or compatible 40h MIPS Mark I (R2000, R3000) or compatible 41h MIPS Mark II (R6000) or compatible 42h MIPS Mark III (R4000) or compatible 0Ah WORD target operating system 01h OS/2 02h Windows 03h DOS4.x 04h Windows 386 0Ch DWORD module version 10h DWORD module type bit 2: initialization (only for DLLs) 0 = global 1 = per-process bit 4: no internal fixups in executable image bit 5: no external fixups in executable image bits 8,9,10: 0 = unknown 1 = incompatible with PM windowing \ 2 = compatible with PM windowing > (only for 3 = uses PM windowing API / programs) bit 13: module not loadable (only for programs) bit 15: module is DLL rather than program 14h DWORD number of memory pages 18h Initial CS:EIP DWORD object number DWORD offset 20h Initial SS:ESP DWORD object number DWORD offset 28h DWORD memory page size 2Ch DWORD bytes on last page 30h DWORD fixup section size 34h DWORD fixup section checksum 38h DWORD loader section size 3Ch DWORD loader section checksum 40h DWORD offset of object table (see below) 44h DWORD object table entries 48h DWORD object page map table offset 4CH DWORD object iterate data map offset 50h DWORD resource table offset 54h DWORD resource table entries 58h DWORD resident names table offset 5Ch DWORD entry table offset 60h DWORD module directives table offset 64h DWORD Module Directives entries 68h DWORD Fixup page table offset 6Ch DWORD Fixup record table offset 70h DWORD imported modules name table offset 74h DWORD imported modules count 78h DWORD imported procedures name table offset 7Ch DWORD per-page checksum table offset 80h DWORD data pages offset 84h DWORD preload page count 88h DWORD non-resident names table offset 8Ch DWORD non-resident names table length 90h DWORD non-resident names checksum 94h DWORD automatic data object 98h DWORD debug information offset 9Ch DWORD debug information length A0h DWORD preload instance pages number A4h DWORD demand instance pages number A8h DWORD extra heap allocation ACh ??? (at most 24 additional bytes here) Note: used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers Format of object table entry: Offset Size Description 00h DWORD virtual size in bytes 04h DWORD relocation base address 08h DWORD object flags bit 0: readable bit 1: writable bit 2: executable bit 3: resource bit 4: discardable bit 5: shared bit 6: preloaded bit 7: invalid bit 8-9: type 00 normal 01 zero-filled 10 resident 11 resident/contiguous bit 10: "RESIDENT/LONG_LOCKABLE" bit 11: reserved??? bit 12: "16:16_ALIAS" bit 13: "BIG" (32-bit???) bit 14: conforming bit 15: "OBJECT_I/O_PRIVILEGE_LEVEL" bits 16-31: reserved 0Ch DWORD page map index 10h DWORD page map entries 10h 4 BYTEs ??? (apparently always zeros) Format of object page map table entry: Offset Size Description 00h 4 BYTEs ??? Format of resident names table entry: Offset Size Description 00h BYTE length of name 01h N BYTEs name N+1 3 BYTEs ??? Format of linear executable entry table: Offset Size Description 00h BYTE number of entries in table 01h 10 BYTEs per entry Offset Size Description 00h BYTE bit flags bit 1: 32-bit entry 01h WORD object number 03h BYTE bit flags bit 0: exported bit 1: ??? 04h DWORD offset of entry point 08h 2 BYTEs ??? Format of Borland debugging information header (following load image): Offset Size Description 00h WORD signature 52FBh 02h WORD version ID 04h DWORD size of name pool in bytes 08h WORD number of names in namem pool 0Ah WORD number of type entries 0Ch WORD number of structure members 0Eh WORD number of symbols 10h WORD number of global symbols 12h WORD number of modules 14h WORD number of locals (optional) 16h WORD number of scopes in table 18h WORD number of line-number entries 1Ah WORD number of include files 1Ch WORD number of segment records 1Eh WORD number of segment/file correlations 20h DWORD size of load image after removing uninitialized data and debug info 24h DWORD debugger hook; pointer into debugged program whose meaning depends on program flags 28h BYTE program flags bit 0: case-sensitive link bit 1: pascal overlay program 29h WORD no longer used 2Bh WORD size of data pool in bytes 2Dh BYTE padding 2Eh WORD size of following header extension (currently 00h, 10h, or 20h) 30h WORD number of classes 32h WORD number of parents 34h WORD number of global classes (currently unused) 36h WORD number of overloads (currently unused) 38h WORD number of scope classes 3Ah WORD number of module classes 3Ch WORD number of coverage offsets 3Eh DWORD offset relative to symbol base of name pool 42h WORD number of browser information records 44h WORD number of optimized symbol records 46h WORD debugging flags 48h 8 BYTEs padding Note: additional information on the Borland debugging info may be found in Borland's Open Architecture Handbook ----------214B------------------------------- INT 21 - ELRES v1.0 only - INSTALLATION CHECK AH = 4Bh DS:DX = 0000h:0000h Return: ES:BX -> ELRES history structure (see AH=2Bh/CX=454Ch) DX = DABEh (signature, DAve BEnnett) Note: ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett SeeAlso: AH=2Bh/CX=454Ch ----------214B04----------------------------- INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK AX = 4B04h Return: CF clear if "MG" resident AX = 044Bh if "699"/"Thirteen Minutes" resident SeeAlso: AX=4243h,AX=4B25h ----------214B05----------------------------- INT 21 - DOS 5.0 - SET EXECUTION STATE AX = 4B05h DS:DX -> execution state structure (see below) Return: CF clear if successful AX = 0000h CF set on error AX = error code (see AH=59h) Note: used by programs which intercept AX=4B00h to prepare new programs for execution (including setting the DOS version number). No DOS, BIOS or other software interrupt may be called after return from this call before commencement of the child process. If DOS is running in the HMA, A20 is turned off on return from this call. SeeAlso: AH=4Bh Format of execution state structure: Offset Size Description 00h WORD reserved (00h) 02h WORD type flags bit 0: program is an .EXE 1: program is an overlay 04h DWORD pointer to ASCIZ name of program file 08h WORD PSP segment of new program 0Ah DWORD starting CS:IP of new program 0Eh DWORD program size including PSP ----------214B25----------------------------- INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK AX = 4B25h Return: DI = 1234h if resident SeeAlso: AX=4B04h,AX=4B40h ----------214B40----------------------------- INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK AX = 4B40h Return: AX = 5678h if resident SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah ----------214B41----------------------------- INT 21 - VIRUS - "Plastique"/"AntiCad" - ??? AX = 4B41h ??? Return: ??? SeeAlso: AX=4B40h ----------214B4A----------------------------- INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK AX = 4B4Ah Return: AL = 57h if resident SeeAlso: AX=4B40h,AX=4B4Bh ----------214B4B----------------------------- INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK AX = 4B4Bh Return: CF clear if resident SeeAlso: AX=4B4Ah,AX=4B4Dh ----------214B4D----------------------------- INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK AX = 4B4Dh Return: CF clear if resident SeeAlso: AX=4B4Ah,AX=4B50h ----------214B50----------------------------- INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK AX = 4B50h Return: AX = 1234h if resident SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h ----------214B53----------------------------- INT 21 - VIRUS - "Horse" - INSTALLATION CHECK AX = 4B53h Return: CF clear if resident SeeAlso: AX=4B50h,AX=4B55h ----------214B55----------------------------- INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK AX = 4B55h Return: AX = 1231h if resident SeeAlso: AX=4B53h,AX=4B59h ----------214B59----------------------------- INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK AX = 4B59h Return: CF clear if resident SeeAlso: AX=4B50h,AX=4B5Eh ----------214B5E----------------------------- INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK AX = 4B5Eh Return: CF clear if resident SeeAlso: AX=4B59h,AX=4B87h ----------214B60----------------------------- INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ??? AX = 4B60h ??? Return: ??? SeeAlso: AX=4B50h ----------214B87----------------------------- INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK AX = 4B87h Return: AX = 6663h if resident SeeAlso: AX=4B5Eh,AX=4B95h ----------214B95----------------------------- INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK AX = 4B95h Return: AX = 1973h if resident SeeAlso: AX=4B87h,AX=4BA7h ----------214BA7----------------------------- INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK AX = 4BA7h Return: AX = B459h if resident SeeAlso: AX=4B95h,AX=4BAAh ----------214BAA----------------------------- INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK AX = 4BAAh Return: CF clear if resident SeeAlso: AX=4BA7h,AX=4BAFh ----------214BAF----------------------------- INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK AX = 4BAFh Return: AL = AFh if "Magnitogorsk" resident AL = FAh if "948"/"Screenplus1" resident SeeAlso: AX=4BAAh,AX=4BDDh ----------214BDD----------------------------- INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK AX = 4BDDh Return: AX = 1234h SeeAlso: AX=4BAFh,AX=4BFEh ----------214BEE----------------------------- INT 21 - F-DRIVER.SYS v1.14+ - GRAB INT 21 AX = 4BEEh Return: AX = 1234h if grab successful = 2345h if failed (INT 21 grabbed previously) Notes: F-DRIVER.SYS is part of the F-PROT virus/trojan protection package by Fridrik Skulason when called the first time, this function moves the INT 21 monitoring code from its original location in the INT 21 chain to be the first thing called by INT 21. This is the mechanism used by F-NET. SeeAlso: INT 2F/AX=4653h ----------214BF0----------------------------- INT 21 - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK AX = 4BF0h Return: CF clear if installed AX = 899Dh Note: DIET is an executable-compression program SeeAlso: AX=4BF1h ----------214BF1----------------------------- INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM??? AX = 4BF1h Return: ??? SeeAlso: AX=4BF0h ----------214BFE----------------------------- INT 21 - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK AX = 4BFEh Return: AX = 1234h if "Hitchcock" resident AX = ABCDh if "1193"/"Copyright" resident DI = 55BBh if "Dark Avenger-1028" resident SeeAlso: AX=4BDDh,AX=4BFFh"Justice" ----------214BFF----------------------------- INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK AX = 4BFFh Return: BL = FFh if "USSR-707" resident DI = 55AAh if "Justice" resident CF clear if "Europe 92" resident SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h ----------214BFFSI0000----------------------- INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK AX = 4BFFh SI = 0000h DI = 0000h Return: DI = 55AAh if installed SeeAlso: AX=4BFFh"Justice",AX=5252h ----------214C------------------------------- INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE AH = 4Ch AL = return code Return: never returns Notes: unless the process is its own parent (see AH=26h, offset 16h in PSP), all open files are closed and all memory belonging to the process is freed all network file locks should be removed before calling this function SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 15/AH=12h/BH=02h,INT 20,INT 22 SeeAlso: INT 60/DI=0601h ----------214D------------------------------- INT 21 - DOS 2+ - GET RETURN CODE AH = 4Dh Return: AH = termination type 00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch) 01h control-C abort 02h critical error abort 03h terminate and stay resident (INT 21/AH=31h or INT 27) AL = return code Note: the word in which DOS stores the return code is cleared after being read by this function, so the return code can only be retrieved once SeeAlso: AH=4Bh,AH=4Ch ----------214E------------------------------- INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE AH = 4Eh AL = special flag for use by APPEND (see note below) CX = file attribute mask (see AX=4301h) (bits 0 and 5 ignored) DS:DX -> ASCIZ file specification (may include path and wildcards) Return: CF clear if successful [DTA] = FindFirst data block (see below) CF set on error AX = error code (02h,03h,12h) (see AH=59h) Notes: for search attributes other than 08h, all files with at MOST the specified combination of hidden, system, and directory attributes will be returned. Under DOS 2.x, searching for attribute 08h (volume label) will also return normal files, while under DOS 3+ only the volume label (if any) will be returned. this call also returns successfully if given the name of a character device without wildcards. DOS 2.x returns attribute 00h, size 0, and the current date and time. DOS 3+ returns attribute 40h and the current date and time. immediately after an INT 2F/AX=B711h (APPEND return found name), the name at DS:DX will be overwritten; if AL=00h on entry, the actual found pathname will be stored, otherwise, the actual found path will be prepended to the original filespec without a path. under LANtastic, this call may be used to obtain a list of a server's shared resources by searching for "\\SERVER\*.*"; a list of printer resources may be obtained by searching for "\\SERVER\@*.*" BUG: under DOS 3.x and 4.x, the second and subsequent calls to this function with a character device name (no wildcards) and search attributes which include the volume-label bit (08h) will fail unless there is an intervening DOS call which implicitly or explicity performs a directory search without the volume-label bit. Such implicit searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK (AH=41h), and RENAME (AH=56h) SeeAlso: AH=11h,AH=4Fh,AX=4301h,INT 2F/AX=111Bh,INT 2F/AX=B711h Format of FindFirst data block: Offset Size Description ---PCDOS 3.10, PCDOS 4.01, MSDOS 3.2/3.3/5.0--- 00h BYTE drive letter 01h 11 BYTEs search template 0Ch BYTE search attributes ---DOS 2.x (and some DOS 3.x???)--- 00h BYTE search attributes 01h BYTE drive letter 02h 11 BYTEs search template ---WILDUNIX.COM--- 00h 12 BYTEs 15-character wildcard search pattern and drive letter (packed) 0Ch BYTE search attributes ---DOS 2.x and most 3.x--- 0Dh WORD entry count within directory 0Fh DWORD pointer to DTA??? 13h WORD cluster number of start of parent directory ---PCDOS 4.01, MSDOS 3.2/3.3/5.0--- 0Dh WORD entry count within directory 0Fh WORD cluster number of start of parent directory 11h 4 BYTEs reserved ---all versions, documented fields--- 15h BYTE attribute of file found 16h WORD file time bits 11-15: hour bits 5-10: minute bits 0-4: seconds/2 18h WORD file date bits 9-15: year-1980 bits 5-8: month bits 0-4: day 1Ah DWORD file size 1Eh 13 BYTEs ASCIZ filename+extension ----------214E------------------------------- INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK AH = 4Eh DS:DX = 0000h:0000h Return: AH = 99h if installed Note: WILDUNIX.COM is a resident Unix-style wildcard expander by Steve Hosgood and Terry Barnaby ----------214F------------------------------- INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE AH = 4Fh [DTA] = data block from previous FindFirst or FindNext call Return: CF clear if successful CF set on error AX = error code (12h) (see AH=59h) SeeAlso: AH=12h,AH=4Eh ----------2150------------------------------- INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS) AH = 50h BX = segment of PSP for new process Notes: DOS uses the current PSP address to determine which processes own files and memory; it corresponds to process identifiers used by other OSs under DOS 2.x, this function cannot be invoked inside an INT 28h handler without setting the Critical Error flag under DOS 3+, this function does not use any of the DOS-internal stacks and may thus be called at any time, even during another INT 21h call supported by OS/2 compatibility box not documented for DOS 2.x-4.x, but newly documented for 5.0. SeeAlso: AH=26h,AH=51h,AH=62h ----------2151------------------------------- INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS) AH = 51h Return: BX = segment of PSP for current process Notes: DOS uses the current PSP address to determine which processes own files and memory; it corresponds to process identifiers used by other OSs under DOS 2.x, this function cannot be invoked inside an INT 28h handler without setting the Critical Error flag under DOS 3+, this function does not use any of the DOS-internal stacks and may thus be called at any time, even during another INT 21h call supported by OS/2 compatibility box identical to the documented AH=62h undocumented for DOS 2.x-4.x, but newly documented for 5.0. SeeAlso: AH=26h,AH=50h,AH=62h ----------2152------------------------------- INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS AH = 52h Return: ES:BX -> DOS list of lists Note: partially supported by OS/2 v1.1 compatibility box (however, most pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next" pointer is FFFFh:FFFFh). Format of List of Lists: Offset Size Description -12 WORD (DOS 3.1-3.3) sharing retry count (see AX=440Bh) -10 WORD (DOS 3.1-3.3) sharing retry delay (see AX=440Bh) -8 DWORD (DOS 3.x) pointer to current disk buffer -4 WORD (DOS 3.x) pointer in DOS code segment of unread CON input when CON is read via a handle, DOS reads an entire line, and returns the requested portion, buffering the rest for the next read. 0000h indicates no unread input -2 WORD segment of first memory control block 00h DWORD pointer to first Drive Parameter Block (see AH=32h) 04h DWORD pointer to first System File Table (see below) 08h DWORD pointer to active CLOCK$ device's header 0Ch DWORD pointer to active CON device's header ---DOS 2.x--- 10h BYTE number of logical drives in system 11h WORD maximum bytes/block of any block device 13h DWORD pointer to first disk buffer (see below) 17h 18 BYTEs actual NUL device driver header (not a pointer!) NUL is always the first device on DOS's linked list of device drivers. (see below for format) ---DOS 3.0--- 10h BYTE number of block devices 11h WORD maximum bytes/block of any block device 13h DWORD pointer to first disk buffer (see below) 17h DWORD pointer to array of current directory structures (see below) 1Bh BYTE value of LASTDRIVE command in CONFIG.SYS (default 5) 1Ch DWORD pointer to STRING= workspace area 20h WORD size of STRING area (the x in STRING=x from CONFIG.SYS) 22h DWORD pointer to FCB table 26h WORD the y in FCBS=x,y from CONFIG.SYS 28h 18 BYTEs actual NUL device driver header (not a pointer!) NUL is always the first device on DOS's linked list of device drivers. (see below for format) ---DOS 3.1-3.3--- 10h WORD maximum bytes per sector of any block device 12h DWORD pointer to first disk buffer in buffer chain (see below) 16h DWORD pointer to array of current directory structures (see below) 1Ah DWORD pointer to system FCB tables (see below) 1Eh WORD number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y) 20h BYTE number of block devices installed 21h BYTE number of available drive letters (largest of 5, installed block devices, and CONFIG.SYS LASTDRIVE=). Also size of current directory structure array. 22h 18 BYTEs actual NUL device driver header (not a pointer!) NUL is always the first device on DOS's linked list of device drivers. (see below for format) 34h BYTE number of JOIN'ed drives ---DOS 4.x--- 10h WORD maximum bytes per sector of any block device 12h DWORD pointer to disk buffer info record (see below) 16h DWORD pointer to array of current directory structures (see below) 1Ah DWORD pointer to system FCB tables (see below) 1Eh WORD number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y) (always 00h for DOS 5.0) 20h BYTE number of block devices installed 21h BYTE number of available drive letters (largest of 5, installed block devices, and CONFIG.SYS LASTDRIVE=). Also size of current directory structure array. 22h 18 BYTEs actual NUL device driver header (not a pointer!) NUL is always the first device on DOS's linked list of device drivers. (see below for format) 34h BYTE number of JOIN'ed drives??? 35h WORD pointer within IBMDOS code segment to list of special program names (see below) (always 0000h for DOS 5.0) 37h DWORD pointer to FAR routine for resident IFS utility functions (see below) may be called by any IFS driver which does not wish to service functions 20h or 24h-28h itself 3Bh DWORD pointer to chain of IFS (installable file system) drivers 3Fh WORD the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS) 41h WORD the y in BUFFERS x,y 43h BYTE boot drive (1=A:) 44h BYTE 01h if 80386+, 00h otherwise??? 45h WORD extended memory size in K ---DOS 5.0--- 10h 39 BYTEs as for DOS 4.x (see above) 37h DWORD pointer to SETVER program list or 0000h:0000h 3Bh WORD ??? pointer to function in DOS CS 3Dh WORD ??? apparently 0000h if DOS loaded low, PSP of most-recently EXECed program if DOS in HMA 3Fh 8 BYTEs as for DOS 4.x (see above) Format of memory control block (see also below): Offset Size Description 00h BYTE block type: 5Ah if last block in chain, otherwise 4Dh 01h WORD PSP segment of owner or 0000h if free 0006h if DR-DOS XMS UMB 0007h if DR-DOS excluded upper memory ("hole") 0008h if belongs to DOS FFFAh if 386MAX UMB control block FFFDh if 386MAX locked-out memory FFFEh if 386MAX UMB (immediately follows its control block) 03h WORD size of memory block in paragraphs 05h 3 BYTEs unused ---DOS 2.x,3.x--- 08h 8 BYTEs unused ---DOS 4+ --- 08h 8 BYTEs ASCII program name if PSP memory block or DR-DOS UMB, else garbage null-terminated if less than 8 characters Notes: the next MCB is at segment (current + size + 1) under DOS 3.1+, the first memory block is the DOS data segment, containing installable drivers, buffers, etc. Under DOS 4+ it is divided into subsegments, each with its own memory control block (see below), the first of which is at offset 0000h. for DOS 5.0, blocks owned by DOS may have either "SC" or "SD" in bytes 08h and 09h. "SC" is system code or locked-out inter-UMB memory, "SD" is system data, device drivers, etc. Some versions of DR-DOS use only seven characters of the program name, placing a NUL in the eighth byte. Format of MSDOS 5.0 UMB control block: Offset Size Description 00h BYTE type: 5Ah if last block in chain, 4Dh otherwise 01h WORD first available paragraph in UMB if control block at start of UMB, 000Ah if control block at end of UMB 03h WORD length in paragraphs of following UMB or locked-out region 05h 3 BYTEs unused 08h 8 BYTEs block type name: "UMB" if start block, "SM" if end block in UMB Format of STARLITE memory control block: Offset Size Description 00h BYTE block type: 5Ah if last block in chain, otherwise 4Dh 01h WORD PSP segment of owner, 0000h if free, 0008h if belongs to DOS 03h WORD size of memory block in paragraphs 05h BYTE unused 06h WORD segment address of next memory control block (0000h if last) 08h WORD segment address of previous memory control block or 0000h 0Ah 6 BYTEs reserved Format of DOS 4.x data segment subsegment control blocks: Offset Size Description 00h BYTE subsegment type (blocks typically appear in this order) "D" device driver "E" device driver appendage "I" IFS (Installable File System) driver "F" FILES= control block storage area (for FILES>5) "X" FCBS= control block storage area, if present "C" BUFFERS EMS workspace area (if BUFFERS /X option used) "B" BUFFERS= storage area "L" LASTDRIVE= current directory structure array storage area "S" STACKS= code and data area, if present (see below) "T" INSTALL= transient code 01h WORD paragraph of subsegment start (usually the next paragraph) 03h WORD size of subsegment in paragraphs 05h 3 BYTEs unused 08h 8 BYTEs for types "D" and "I", base name of file from which the driver was loaded (unused for other types) Format of data at start of STACKS code segment (if present): Offset Size Description 00h WORD ??? 02h WORD number of stacks (the x in STACKS=x,y) 04h WORD size of stack control block array (should be 8*x) 06h WORD size of each stack (the y in STACKS=x,y) 08h DWORD ptr to STACKS data segment 0Ch WORD offset in STACKS data segment of stack control block array 0Eh WORD offset in STACKS data segment of last element of that array 10h WORD offset in STACKS data segment of the entry in that array for the next stack to be allocated (initially same as value in 0Eh and works its way down in steps of 8 to the value in 0Ch as hardware interrupts pre-empt each other) Note: the STACKS code segment data may, if present, be located as follows: DOS 3.2: The code segment data is at a paragraph boundary fairly early in the IBMBIO segment (seen at 0070:0190h) DOS 3.3: The code segment is at a paragraph boundary in the DOS data segment, which may be determined by inspecting the segment pointers of the vectors for those of interrupts 02h, 08h-0Eh, 70h, 72-77h which have not been redirected by device drivers or TSRs. DOS 4.x: Identified by sub-segment control block type "S" within the DOS data segment. Format of array elements in STACKS data segment: Offset Size Description 00h BYTE status: 00h=free, 01h=in use, 03h=corrupted by overflow of higher stack. 01h BYTE not used 02h WORD previous SP 04h WORD previous SS 06h WORD ptr to word at top of stack (new value for SP). The word at the top of the stack is preset to point back to this control block. SHARE.EXE hooks (DOS 3.1-5.00): (offsets from first system file table--pointed at by ListOfLists+04h) Offset Size Description -3Ch DWORD pointer to FAR routine for ??? Note: not called by MSDOS 3.3, set to 0000h:0000h by SHARE 3.3 -38h DWORD pointer to FAR routine called on opening file on call, internal DOS location points at filename(see AX=5D06h) Return: CF clear if successful CF set on error AX = DOS error code (24h) (see AH=59h) Note: SHARE assumes DS=SS=DOS DS, direct-accesses DOS internals to get name of file just opened -34h DWORD pointer to FAR routine called on closing file ES:DI -> system file table Note: SHARE assumes SS=DOS DS, directly accesses DOS internals does something to every lock record for file -30h DWORD pointer to FAR routine to close all files for given computer (called by AX=5D03h) Note: SHARE assumes SS=DOS DS, directly accesses DOS internals -2Ch DWORD pointer to FAR routine to close all files for given process (called by AX=5D04h) Note: SHARE assumes SS=DOS DS, directly accesses DOS internals -28h DWORD pointer to FAR routine to close file by name (called by AX=5D02h) DS:SI -> DOS parameter list (see AX=5D00h) DPL's DS:DX -> name of file to close Return: CF clear if successful CF set on error AX = DOS error code (03h) (see AH=59h) Note: SHARE assumes SS=DOS DS, directly accesses DOS internals -24h DWORD pointer to FAR routine to lock region of file call with BX = file handle CX:DX = starting offset SI:AX = size Return: CF set on error AL = DOS error code (21h) (see AH=59h) Note: not called if file is marked as remote Note: SHARE assumes SS=DOS DS, directly accesses DOS internals -20h DWORD pointer to FAR routine to unlock region of file call with BX = file handle CX:DX = starting offset SI:AX = size Return: CF set on error AL = DOS error code (21h) (see AH=59h) Note: not called if file is marked as remote Note: SHARE assumes SS=DOS DS, directly accesses DOS internals -1Ch DWORD pointer to FAR routine to check if file region is locked call with ES:DI -> system file table entry for file CX = length of region from current position in file Return: CF set if any portion of region locked AX = 0021h Note: SHARE assumes SS=DOS DS, directly accesses DOS internals -18h DWORD pointer to FAR routine to get open file list entry (called by AX=5D05h) call with DS:SI -> DOS parameter list (see AX=5D00h) DPL's BX = index of sharing record DPL's CX = index of SFT in SFT chain of sharing rec Return: CF set on error or not loaded AX = DOS error code (12h) (see AH=59h) CF clear if successful ES:DI -> filename CX = number of locks owned by specified SFT BX = network machine number DX destroyed Note: SHARE assumes SS=DOS DS, directly accesses DOS internals -14h DWORD pointer to FAR routine for updating FCB from SFT??? call with DS:SI -> unopened FCB ES:DI -> system file table entry Return: BL = C0h??? Note: copies following fields from SFT to FCB: starting cluster of file 0Bh 1Ah sharing record offset 33h 1Ch file attribute 04h 1Eh -10h DWORD pointer to FAR routine to get first cluster of FCB file ??? call with ES:DI -> system file table entry DS:SI -> FCB Return: CF set if SFT closed or sharing record offsets mismatched CF clear if successful BX = starting cluster number from FCB -0Ch DWORD pointer to FAR routine to close file if duplicate for process DS:SI -> system file table Return: AX = number of handle in JFT which already uses SFT Note: called during open/create of a file Note: SHARE assumes SS=DOS DS, directly accesses DOS internals Note: if SFT was opened with inheritance enabled and sharing mode 111, does something to all other SFTs owned by same process which have the same file open mode and sharing record -08h DWORD pointer to FAR routine for ??? Note: SHARE assumes SS=DS=DOS DS, direct-accesses DOS internals Note: closes various handles referring to file most-recently opened -04h DWORD pointer to FAR routine to update directory info in related SFT entries call with ES:DI -> system file table entry for file (see below) AX = subfunction (apply to each related SFT) 00h: update time stamp (offset 0Dh) and date stamp (offset 0Fh) 01h: update file size (offset 11h) and starting cluster (offset 0Bh). Sets last-accessed cluster fields to start of file if file never accessed 02h: as function 01h, but last-accessed fields always changed 03h: do both functions 00h and 02h Note: follows ptr at offset 2Bh in system file table entries Note: NOP if opened with no-inherit or via FCB Format of sharing record: Offset Size Description 00h BYTE flag 00h free block 01h allocated block FFh end marker 01h WORD size of block 03h BYTE checksum of pathname (including NUL) if sum of ASCII values is N, checksum is (N/256 + N%256) 04h WORD offset in SHARE's DS of lock record (see below) 06h DWORD pointer to start of system file table chain for file 0Ah WORD unique sequence number 0Ch var ASCIZ full pathname Format of SHARE.EXE lock record: Offset Size Description 00h WORD offset in SHARE's DS of next lock table in list 02h DWORD offset in file of start of locked region 06h DWORD offset in file of end of locked region 0Ah DWORD pointer to System File Table entry for this file 0Eh WORD PSP segment of lock's owner Format of DOS 2.x system file tables: Offset Size Description 00h DWORD pointer to next file table 04h WORD number of files in this table 06h 28h bytes per file Offset Size Description 00h BYTE number of file handles referring to this file 01h BYTE file open mode (see AH=3Dh) 02h BYTE file attribute 03h BYTE drive (0 = character device, 1 = A, 2 = B, etc) 04h 11 BYTEs filename in FCB format (no path,no period,blank-padded) 0Fh WORD ??? 11h WORD ??? 13h DWORD file size??? 17h WORD file date in packed format (see AX=5700h) 19h WORD file time in packed format (see AX=5700h) 1Bh BYTE device attribute (see AX=4400h) ---character device--- 1Ch DWORD pointer to device driver ---block device--- 1Ch WORD starting cluster of file 1Eh WORD relative cluster in file of last cluster accessed ------ 20h WORD absolute cluster number of current cluster 22h WORD ??? 24h DWORD current file position??? Format of DOS 3.0 system file tables and FCB tables: Offset Size Description 00h DWORD pointer to next file table 04h WORD number of files in this table 06h 38h bytes per file Offset Size Description 00h-1Eh as for DOS 3.1+ (see below) 1Fh WORD byte offset of directory entry within sector 21h 11 BYTES filename in FCB format (no path/period, blank-padded) 2Ch DWORD (SHARE.EXE) pointer to previous SFT sharing same file 30h WORD (SHARE.EXE) ??? network machine number 32h WORD PSP segment of file's owner 34h WORD (SHARE.EXE) offset in SHARE code seg of share record 36h WORD ??? apparently always 0000h Format of DOS 3.1-3.3x system file tables and FCB tables: Offset Size Description 00h DWORD pointer to next file table 04h WORD number of files in this table 06h 35h bytes per file Offset Size Description 00h WORD number of file handles referring to this file 02h WORD file open mode (see AH=3Dh) bit 15 set if this file opened via FCB 04h BYTE file attribute (see AX=4301h) 05h WORD device info word (see AX=4400h) bit 15 set if remote file bit 14 set means do not set file date/time on closing bit 12 set means don't inherit on EXEC 07h DWORD pointer to device driver header if character device else pointer to DOS Drive Parameter Block (see AH=32h) 0Bh WORD starting cluster of file 0Dh WORD file time in packed format (see AX=5700h) 0Fh WORD file date in packed format (see AX=5700h) 11h DWORD file size ---system file table--- 15h DWORD current offset in file (may be larger than size of file; INT 21/AH=42h does not check new position) ---FCB table--- 15h WORD counter for last I/O to FCB 17h WORD counter for last open of FCB (these are separate to determine the times of the latest I/O and open) --- 19h WORD relative cluster within file of last cluster accessed 1Bh WORD absolute cluster number of last cluster accessed 0000h if file never read or written??? 1Dh WORD number of sector containing directory entry 1Fh BYTE number of dir entry within sector (byte offset/32) 20h 11 BYTEs filename in FCB format (no path/period, blank-padded) 2Bh DWORD (SHARE.EXE) pointer to previous SFT sharing same file 2Fh WORD (SHARE.EXE) network machine number which opened file 31h WORD PSP segment of file's owner (see AH=26h) 33h WORD offset within SHARE.EXE code segment of sharing record (see above) 0000h = none Format of DOS 4.0-5.0 system file tables and FCB tables: Offset Size Description 00h DWORD pointer to next file table 04h WORD number of files in this table 06h 3Bh bytes per file Offset Size Description 00h WORD number of file handles referring to this file 02h WORD file open mode (see AH=3Dh) bit 15 set if this file opened via FCB 04h BYTE file attribute (see AX=4301h) 05h WORD device info word (see AX=4400h) bit 15 set if remote file bit 14 set means do not set file date/time on closing bit 13 set if named pipe bit 12 set if no inherit bit 11 set if network spooler 07h DWORD pointer to device driver header if character device else pointer to DOS Drive Parameter Block (see AH=32h) or REDIR data 0Bh WORD starting cluster of file 0Dh WORD file time in packed format (see AX=5700h) 0Fh WORD file date in packed format (see AX=5700h) 11h DWORD file size 15h DWORD current offset in file ---local file--- 19h WORD relative cluster within file of last cluster accessed 1Bh DWORD number of sector containing directory entry 1Fh BYTE number of dir entry within sector (byte offset/32) ---network redirector--- 19h DWORD pointer to REDIRIFS record 1Dh 3 BYTEs ??? ------ 20h 11 BYTEs filename in FCB format (no path/period, blank-padded) 2Bh DWORD (SHARE.EXE) pointer to previous SFT sharing same file 2Fh WORD (SHARE.EXE) network machine number which opened file 31h WORD PSP segment of file's owner (see AH=26h) 33h WORD offset within SHARE.EXE code segment of sharing record (see above) 0000h = none 35h WORD (local) absolute cluster number of last clustr accessed (redirector) ??? 37h DWORD pointer to IFS driver for file, 0000000h if native DOS Format of current directory structure (CDS) (array, LASTDRIVE entries): Offset Size Description 00h 67 BYTEs ASCIZ path in form X:\PATH (local) or \\MACH\PATH (network) 43h WORD drive attributes (see also note below and AX=5F07h) bit 15: uses network redirector \ invalid if 00, installable 14: physical drive / file system if 11 13: JOIN'ed \ path above is true path that would be 12: SUBST'ed / needed if not under SUBST or JOIN 45h DWORD pointer to Drive Parameter Block for drive (see AH=32h) ---local drives--- 49h WORD starting cluster of current directory 0000h = root, FFFFh = never accessed 4Bh WORD ??? seems to be FFFFh always 4Dh WORD ??? seems to be FFFFh always ---network drives--- 49h DWORD pointer to redirector or REDIRIFS record, or FFFFh:FFFFh 4Dh WORD stored user data from INT 21/AX=5F03h??? ------ 4Fh WORD offset in current directory path of backslash corresponding to root directory for drive this value specifies how many characters to hide from the "CHDIR" and "GETDIR" calls; normally set to 2 to hide the drive letter and colon, SUBST, JOIN, and networks change it so that only the appropriate portion of the true path is visible to the user ---DOS 4.x--- 51h BYTE ??? used by network 52h DWORD pointer to IFS driver for this drive, 00000000h if native DOS 56h WORD ??? Notes: the path for invalid drives is normally set to X:\, but may be empty after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions normally, only one of bits 13&12 may be set together with bit 14, but DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN, 0001 SUBST, 0101 ASSIGN Format of DR-DOS 5.0-6.0 current directory structure entry (array): Offset Size Description 00h 67 BYTEs ASCIZ pathname of actual root directory for this logical drive 43h WORD drive attributes 1000h SUBSTed drive 3000h??? JOINed drive 4000h physical drive 5000h ASSIGNed drive 7000h JOINed drive 45h BYTE physical drive number (0=A:) if this logical drive is valid 46h BYTE ??? apparently flags for JOIN and ASSIGN 47h WORD cluster number of start of parent directory (0000h = root) 49h WORD entry number of current directory in parent directory 4Bh WORD cluster number of start of current directory 4Dh 2 BYTEs ??? apparently always 0001h 4Fh WORD cluster number of SUBST/JOIN "root" directory 0000h if physical root directory Format of device driver header: Offset Size Description 00h DWORD pointer to next driver, offset=FFFFh if last driver 04h WORD device attributes Character device: bit 15 set bit 14 IOCTL supported (see AH=44h) bit 13 (DOS 3+) output until busy supported bit 12 reserved bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported bits 10-8 reserved bit 7 (DOS 5+) Generic IOCTL check call supported (cmd 19h) (see AX=4410h,AX=4411h) bit 6 (DOS 3.2+) Generic IOCTL call supported (command 13h) (see AX=440Ch,AX=440Dh) bit 5 reserved bit 4 device is special (use INT 29 "fast console output") bit 3 device is CLOCK$ (all reads/writes use transfer record described below) bit 2 device is NUL bit 1 device is standard output bit 0 device is standard input Block device: bit 15 clear bit 14 IOCTL supported bit 13 non-IBM format bit 12 reserved bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported bit 10 reserved bit 9 direct I/O not allowed??? (set by DOS 3.3 DRIVER.SYS for "new" drives) bit 8 ??? set by DOS 3.3 DRIVER.SYS for "new" drives bit 7 (DOS 5+) Generic IOCTL check call supported (cmd 19h) (see AX=4410h,AX=4411h) bit 6 (DOS 3.2+) Generic IOCTL call supported (command 13h) implies support for commands 17h and 18h (see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh) bits 5-2 reserved bit 1 driver supports 32-bit sector addressing bit 0 reserved 06h WORD device strategy entry point call with ES:BX -> request header (see INT 2F/AX=0802h) 08h WORD device interrupt entry point ---character device--- 0Ah 8 BYTEs blank-padded character device name ---block device--- 0Ah BYTE number of subunits (drives) supported by driver 0Bh 7 BYTEs unused --- 12h WORD (CD-ROM driver) reserved, must be 0000h 14h BYTE (CD-ROM driver) drive letter (must initially be 00h) 15h BYTE (CD-ROM driver) number of units 16h 6 BYTEs (CD-ROM driver) signature 'MSCDnn' where 'nn' is version (currently '00') Format of CLOCK$ transfer record: Offset Size Description 00h WORD number of days since 1-Jan-1980 02h BYTE minutes 03h BYTE hours 04h BYTE hundredths of second 05h BYTE seconds Format of DOS 2.x disk buffer: Offset Size Description 00h DWORD pointer to next disk buffer, offset = FFFFh if last least-recently used buffer is first in chain 04h BYTE drive (0=A, 1=B, etc), FFh if not in use 05h 3 BYTEs unused??? (seems always to be 00h 00h 01h) 08h WORD logical sector number 0Ah BYTE number of copies to write (1 for non-FAT sectors) 0Bh BYTE sector offset between copies if multiple copies to be written 0Ch DWORD pointer to DOS Drive Parameter Block (see AH=32h) 10h buffered data Format of DOS 3.x disk buffer: Offset Size Description 00h DWORD pointer to next disk buffer, offset = FFFFh if last least-recently used buffer is first in chain 04h BYTE drive (0=A,1=B, etc), FFh if not in use 05h BYTE flags bit 7: ??? bit 6: buffer dirty bit 5: buffer has been referenced bit 4: ??? bit 3: sector in data area bit 2: sector in a directory, either root or subdirectory bit 1: sector in FAT bit 0: boot sector??? (guess) 06h WORD logical sector number 08h BYTE number of copies to write (1 for non-FAT sectors) 09h BYTE sector offset between copies if multiple copies to be written 0Ah DWORD pointer to DOS Drive Parameter Block (see AH=32h) 0Eh WORD unused??? (almost always 0) 10h buffered data Format of DOS 4.00 (pre UR 25066) disk buffer info: Offset Size Description 00h DWORD pointer to array of disk buffer hash chain heads (see below) 04h WORD number of disk buffer hash chains (referred to as NDBCH below) 06h DWORD pointer to lookahead buffer, zero if not present 0Ah WORD number of lookahead sectors, else zero (the y in BUFFERS=x,y) 0Ch BYTE 00h if buffers in EMS (/X), FFh if not 0Dh WORD EMS handle for buffers, zero if not in EMS 0Fh WORD EMS physical page number used for buffers (usually 255) 11h WORD ??? seems always to be 0001h 13h WORD segment of EMS physical page frame 15h WORD ??? seems always to be zero 17h 4 WORDs EMS partial page mapping information??? Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info: Offset Size Description 00h DWORD pointer to array of disk buffer hash chain heads (see below) 04h WORD number of disk buffer hash chains (referred to as NDBCH below) 06h DWORD pointer to lookahead buffer, zero if not present 0Ah WORD number of lookahead sectors, else zero (the y in BUFFERS=x,y) 0Ch BYTE 01h, possibly to distinguish from pre-UR 25066 format 0Dh WORD ??? EMS segment for BUFFERS (only with /XD) 0Fh WORD ??? EMS physical page number of EMS seg above (only with /XD) 11h WORD ??? EMS segment for ??? (only with /XD) 13h WORD ??? EMS physical page number of above (only with /XD) 15h BYTE ??? number of EMS page frames present (only with /XD) 16h WORD segment of one-sector workspace buffer allocated in main memory if BUFFERS/XS or /XD options in effect, possibly to avoid DMA into EMS 18h WORD EMS handle for buffers, zero if not in EMS 1Ah WORD EMS physical page number used for buffers (usually 255) 1Ch WORD ??? appears always to be 0001h 1Eh WORD segment of EMS physical page frame 20h WORD ??? appears always to be zero 22h BYTE 00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS Format of DOS 4.x disk buffer hash chain head (array, one entry per chain): Offset Size Description 00h WORD EMS logical page number in which chain is resident, -1 if not in EMS 02h DWORD pointer to least recently used buffer header. All buffers on this chain are in the same segment. 06h BYTE number of dirty buffers on this chain 07h BYTE reserved (00h) Notes: buffered disk sectors are assigned to chain N where N is the sector's address modulo NDBCH, 0 <= N <= NDBCH-1 each chain resides completely within one EMS page this structure is in main memory even if buffers are in EMS Format of DOS 4.0-5.0 disk buffer: Offset Size Description 00h WORD forward ptr, offset only, to next least recently used buffer 02h WORD backward ptr, offset only 04h BYTE drive (0=A,1=B, etc), FFh if not in use 05h BYTE flags bit 7: remote buffer bit 6: buffer dirty bit 5: buffer has been referenced bit 4: search data buffer (only valid if remote buffer) bit 3: sector in data area bit 2: sector in a directory, either root or subdirectory bit 1: sector in FAT bit 0: reserved 06h DWORD logical sector number 0Ah BYTE number of copies to write for FAT sectors, same as number of FATs for data and directory sectors, usually 1 0Bh WORD offset in sectors between copies to write for FAT sectors 0Dh DWORD pointer to DOS Drive Parameter Block (see AH=32h) 11h WORD buffer use count if remote buffer (see flags above) 13h BYTE reserved 14h buffered data Note: for DOS 4.x, all buffered sectors which have the same hash value (computed as the sum of high and low words of the logical sector number divided by NDBCH) are on the same doubly-linked circular chain; for DOS 5.0, only a single circular chain exists. the links consist of offset addresses only, the segment being the same for all buffers in the chain. Format of DOS 5.0 disk buffer info: Offset Size Description 00h DWORD pointer to least-recently-used buffer header (may be in HMA) (see above) 04h WORD 0000h (DOS 5 does not hash disk buffers, so offset 00h points directly at the only buffer chain) 06h DWORD pointer to lookahead buffer, zero if not present 0Ah WORD number of lookahead sectors, else zero (the y in BUFFERS=x,y) 0Ch BYTE buffer location 00h base memory, no workspace buffer 01h HMA, workspace buffer in base memory 0Dh DWORD pointer to one-segment workspace buffer in base memory 11h 3 BYTEs unused??? 14h WORD ??? 16h BYTE ??? apparently always 00h 17h BYTE ??? apparently always FFh 18h BYTE ??? apparently always 00h 19h BYTE ??? apparently always 00h 1Ah WORD ??? segment within HIMEM.SYS area when buffers are in HMA and UMBs are enabled???, else 0000h 1Ch BYTE bit 0 set iff UMB MCB chain linked to normal MCB chain 1Dh WORD ??? 1Fh WORD segment of first MCB in upper memory blocks or FFFFh if DOS memory chain in base 640K only (first UMB MCB usually at 9FFFh, locking out video memory with a DOS-owned memory block) 21h WORD paragraph of start of most recent MCB chain search Format of IFS driver list: Offset Size Description 00h DWORD pointer to next driver header 04h 8 BYTEs IFS driver name (blank padded), as used by FILESYS command 0Ch 4 BYTEs ??? 10h DWORD pointer to IFS utility function entry point (see below) call with ES:BX -> IFS request (see below) 14h WORD offset in header's segment of driver entry point ??? Call IFS utility function entry point with: AH = 20h miscellaneous functions AL = 00h get date Return: CX = year DH = month DL = day AL = 01h get process ID and computer ID Return: BX = current PSP segment DX = active network machine number AL = 05h get file system info ES:DI -> 16-byte info buffer Return: buffer filled Offset Size Description 00h 2 BYTEs unused 02h WORD number of SFTs (actually counts only the first two file table arrays) 04h WORD number of FCB table entries 06h WORD number of proctected FCBs 08h 6 BYTEs unused 0Eh WORD largest sector size supported AL = 06h get machine name ES:DI -> 18-byte buffer for name Return: buffer filled with name starting at offset 02h AL = 08h get sharing retry count Return: BX = sharing retry count AL = other Return: CF set AH = 21h get redirection state BH = type (03h disk, 04h printer) Return: BH = state (00h off, 01h on) AH = 22h ??? some sort of time calculation AL = 00h ??? nonzero ??? AH = 23h ??? some sort of time calculation AH = 24h compare filenames DS:SI -> first ASCIZ filename ES:DI -> second ASCIZ filename Return: ZF set if files are same ignoring case and / vs \ AH = 25h normalize filename DS:SI -> ASCIZ filename ES:DI -> buffer for result Return: filename uppercased, forward slashes changed to backslashes AH = 26h get DOS stack Return: DS:SI -> top of stack CX = size of stack in bytes AH = 27h increment InDOS flag AH = 28h decrement InDOS flag Note: IFS drivers which do not wish to implement functions 20h or 24h-28h may pass them on to the default handler pointed at by [LoL+37h] Format of IFS request block: Offset Size Description 00h WORD total size in bytes of request 02h BYTE class of request 02h ??? 03h redirection 04h ??? 05h file access 06h convert error code to string 07h ??? 03h WORD returned DOS error code 05h BYTE IFS driver exit status 00h success 01h ??? 02h ??? 03h ??? 04h ??? FFh internal failure 06h 16 BYTEs ??? ---request class 02h--- 16h BYTE function code 04h ??? 17h BYTE unused??? 18h DWORD pointer to ??? 1Ch DWORD pointer to ??? 20h 2 BYTEs ??? ---request class 03h--- 16h BYTE function code 17h BYTE ??? 18h DWORD pointer to ??? 1Ch DWORD pointer to ??? 22h WORD returned ??? 24h WORD returned ??? 26h WORD returned ??? 28h BYTE returned ??? 29h BYTE unused??? ---request class 04h--- 16h DWORD pointer to ??? 1Ah DWORD pointer to ??? ---request class 05h--- 16h BYTE function code 01h flush disk buffers 02h get disk space 03h MKDIR 04h RMDIR 05h CHDIR 06h delete file 07h rename file 08h search directory 09h file open/create 0Ah LSEEK 0Bh read from file 0Ch write to file 0Dh lock region of file 0Eh commit/close file 0Fh get/set file attributes 10h printer control 11h ??? 12h process termination 13h ??? ---class 05h function 01h--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h 4 BYTEs ??? 26h BYTE ??? 27h BYTE ??? ---class 05h function 02h--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h 4 BYTEs ??? 26h WORD returned total clusters 28h WORD returned sectors per cluster 2Ah WORD returned bytes per sector 2Ch WORD returned available clusters 2Eh BYTE returned ??? 2Fh BYTE ??? ---class 05h functions 03h,04h,05h--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h 4 BYTEs ??? 26h DWORD pointer to directory name ---class 05h function 06h--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h 4 BYTEs ??? 26h WORD attribute mask 28h DWORD pointer to filename ---class 05h function 07h--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h 4 BYTEs ??? 26h WORD attribute mask 28h DWORD pointer to source filespec 2Ch DWORD pointer to destination filespec ---class 05h function 08h--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h 4 BYTEs ??? 26h BYTE 00h FINDFIRST 01h FINDNEXT 28h DWORD pointer to FindFirst search data + 01h if FINDNEXT 2Ch WORD search attribute if FINDFIRST 2Eh DWORD pointer to filespec if FINDFIRST ---class 05h function 09h--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h DWORD pointer to IFS open file structure (see below) 26h WORD ??? \ together, specify open vs. create, whether or 28h WORD ??? / not to truncate 2Ah 4 BYTEs ??? 2Eh DWORD pointer to filename 32h 4 BYTEs ??? 36h WORD file attributes on call returned ??? 38h WORD returned ??? ---class 05h function 0Ah--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h DWORD pointer to IFS open file structure (see below) 26h BYTE seek type (02h = from end) 28h DWORD offset on call returned new absolute position ---class 05h functions 0Bh,0Ch--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h DWORD pointer to IFS open file structure (see below) 28h WORD number of bytes to transfer returned bytes actually transferred 2Ah DWORD transfer address ---class 05h function 0Dh--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h DWORD pointer to IFS open file structure (see below) 26h BYTE file handle??? 27h BYTE unused??? 28h WORD ??? 2Ah WORD ??? 2Ch WORD ??? 2Eh WORD ??? ---class 05h function 0Eh--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h DWORD pointer to IFS open file structure (see below) 26h BYTE 00h commit file 01h close file 27h BYTE unused??? ---class 05h function 0Fh--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h 4 BYTEs ??? 26h BYTE 02h GET attributes 03h PUT attributes 27h BYTE unused??? 28h 12 BYTEs ??? 34h WORD search attributes??? 36h DWORD pointer to filename 3Ah WORD (GET) returned ??? 3Ch WORD (GET) returned ??? 3Eh WORD (GET) returned ??? 40h WORD (GET) returned ??? 42h WORD (PUT) new attributes (GET) returned attributes ---class 05h function 10h--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h DWORD pointer to IFS open file structure (see below) 26h WORD ??? 28h DWORD pointer to ??? 2Ch WORD ??? 2Eh BYTE ??? 2Fh BYTE subfunction 01h get printer setup 03h ??? 04h ??? 05h ??? 06h ??? 07h ??? 21h set printer setup ---class 05h function 11h--- 17h 7 BYTEs ??? 1Eh DWORD pointer to ??? 22h DWORD pointer to IFS open file structure (see below) 26h BYTE subfunction 27h BYTE unused??? 28h WORD ??? 2Ah WORD ??? 2Ch WORD ??? 2Eh BYTE ??? 2Fh BYTE ??? ---class 05h function 12h--- 17h 15 BYTEs unused??? 26h WORD PSP segment 28h BYTE type of process termination 29h BYTE unused??? ---class 05h function 13h--- 17h 15 BYTEs unused??? 26h WORD PSP segment ---request class 06h--- 16h DWORD returned pointer to string corresponding to error code at 03h 1Ah BYTE returned ??? 1Bh BYTE unused ---request class 07h--- 16h DWORD pointer to IFS open file structure (see below) 1Ah BYTE ??? 1Bh BYTE unused??? Format of IFS open file structure: Offset Size Description 00h WORD ??? 02h WORD device info word 04h WORD file open mode 06h WORD ??? 08h WORD file attributes 0Ah WORD owner's network machine number 0Ch WORD owner's PSP segment 0Eh DWORD file size 12h DWORD current offset in file 16h WORD file time 18h WORD file date 1Ah 11 BYTEs filename in FCB format 25h WORD ??? 27h WORD hash value of SFT address (low word of linear address + segment&F000h) 29h 3 WORDs network info from SFT 2Fh WORD ??? Format of one item in DOS 4+ list of special program names: Offset Size Description 00h BYTE length of name (00h = end of list) 01h N BYTEs name in format name.ext N 2 BYTEs DOS version to return for program (major,minor) (see AH=30h,INT 2F/AX=122Fh) ---DOS 4 only--- N+2 BYTE number of times to return fake version number (FFh = always) Note: if the name of the executable for the program making the DOS "get version" call matches one of the names in this list, DOS returns the specified version rather than the true version number ----------215252----------------------------- INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK AX = 5252h Return: BX = FFEEh if resident SeeAlso: AX=4BFFh"Cascade",AX=58CCh ----------2153------------------------------- INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK AH = 53h DS:SI -> BIOS Parameter Block (see below) ES:BP -> buffer for Drive Parameter Block (see AH=32h for format) Return: ES:BP buffer filled Note: for DOS 3+, the cluster at which to start searching is set to 0000h and the number of free clusters is set to FFFFh (unknown) Format of BIOS Parameter Block: Offset Size Description 00h WORD number of bytes per sector 02h BYTE number of sectors per cluster 03h WORD number of reserved sectors at start of disk 05h BYTE number of FATs 06h WORD number of entries in root directory 08h WORD total number of sectors for DOS 4+, set to zero if partition >32M, then set DWORD at 15h to actual number of sectors 0Ah BYTE media ID byte 0Bh WORD number of sectors per FAT ---DOS 3+--- 0Dh WORD number of sectors per track 0Fh WORD number of heads 11h DWORD number of hidden sectors 15h 11 BYTEs reserved ---DOS 4+ --- 15h DWORD total number of sectors if word at 08h contains zero 19h 6 BYTEs ??? 1Fh WORD number of cylinders 21h BYTE device type 22h WORD device attributes (removable or not, etc) ----------2154------------------------------- INT 21 - DOS 2+ - GET VERIFY FLAG AH = 54h Return: AL = verify flag 00h off 01h on (all disk writes verified after writing) SeeAlso: AH=2Eh ----------2155------------------------------- INT 21 - DOS 2+ internal - CREATE CHILD PSP AH = 55h DX = segment at which to create new PSP SI = (DOS 3+) value to place in memory size field at DX:[0002h] Return: CF clear if successful Notes: creates a "child" PSP rather than making an exact copy of the current PSP; the new PSP's parent pointer is set to the current PSP and the reference count for each inherited file is incremented (DOS 2+) sets current PSP to DX (DOS 3+) marks "no inherit" file handles as closed in child PSP SeeAlso: AH=26h,AH=50h ----------2156------------------------------- INT 21 - DOS 2+ - "RENAME" - RENAME FILE AH = 56h DS:DX -> ASCIZ filename of existing file (no wildcards, but see below) ES:DI -> ASCIZ new filename (no wildcards) CL = attribute mask (server call only, see below) Return: CF clear if successful CF set on error AX = error code (02h,03h,05h,11h) (see AH=59h) Notes: allows move between directories on same logical volume does not set the archive attribute (see AX=4300h), which results in incremental backups not backing up the file under its new name open files should not be renamed (DOS 3+) allows renaming of directories (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case error 12h (no more files) is returned on success, and both source and destination specs must be canonical (as returned by AH=60h). Wildcards in the destination are replaced by the corresponding char of each source file being renamed. Under DOS 3.x, the call will fail if the destination wildcard is *.* or equivalent. When invoked via AX=5D00h, only those files matching the attribute mask in CL are renamed. SeeAlso: AH=17h,AX=4301h,AH=60h,AX=5D00h ----------215700----------------------------- INT 21 - DOS 2+ - GET FILE'S DATE AND TIME AX = 5700h BX = file handle Return: CF clear if successful CX = file's time bits 15-11: hours (0-23) 10-5: minutes 4-0: seconds/2 DX = file's date bits 15-9: year - 1980 8-5: month 4-0: day CF set on error AX = error code (01h,06h) (see AH=59h) SeeAlso: AX=5701h ----------215701----------------------------- INT 21 - DOS 2+ - SET FILE'S DATE AND TIME AX = 5701h BX = file handle CX = new time (see AX=5700h) DX = new date (see AX=5700h) Return: CF clear if successful CF set on error AX = error code (01h,06h) (see AH=59h) SeeAlso: AX=5700h ----------215702----------------------------- INT 21 - DOS 4.x only - GET ??? AX = 5702h BX = ??? (0000h through 0004h) DS:SI -> ??? ES:DI -> result buffer CX = size of result buffer Return: CX = size of returned data SeeAlso: AX=5703h,AX=5704h ----------215703----------------------------- INT 21 - DOS 4.x only - GET ??? AX = 5703h BX = file handle (only 0000h through 0004h valid) DS:SI -> ??? passed through to INT 2F/AX=112Dh ES:DI -> result buffer CX = size of result buffer Return: CX = size of returned data ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry SeeAlso: AX=5702h,AX=5704h,INT 2F/AX=112Dh ----------215704----------------------------- INT 21 - DOS 4.x only - TRUNCATE OPEN FILE TO ZERO LENGTH AX = 5704h BX = file handle (only 0000h through 0004h valid) DS:SI -> ??? passed through to INT 2F/AX=112Dh ES:DI -> result buffer CX = size of result buffer Return: CX = size of returned data ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh ----------2158------------------------------- INT 21 - DOS 3+ - GET OR SET MEMORY ALLOCATION STRATEGY AH = 58h AL = subfunction 00h get allocation strategy Return: AX = current strategy 00h low memory first fit 01h low memory best fit 02h low memory last fit ---DOS 5.0--- 40h high memory first fit 41h high memory best fit 42h high memory last fit 80h first fit, try high then low memory 81h best fit, try high then low memory 82h last fit, try high then low memory 01h set allocation strategy BL = new allocation strategy (see above) BH = 0 (DOS 5.0) 02h (DOS 5.0) get UMB link state Return: AL = 00h UMBs not part of DOS memory chain = 01h UMBs in DOS memory chain 03h (DOS 5.0) set UMB link state BX = 0000h remove UMBs from DOS memory chain = 0001h add UMBs to DOS memory chain Return: CF clear if successful CF set on error AX = error code (01h) (see AH=59h) Notes: the Set subfunction accepts any value in BL for DOS 3.x and 4.x; 2 or greater means last fit the Get subfunction returns the last value set a program which changes the allocation strategy should restore it before terminating DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h,INT 67/AH=3Fh ----------2158CC----------------------------- INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK AX = 58CCh Return: CF clear if resident SeeAlso: AX=5252h,AX=6969h ----------2159--BX0000----------------------- INT 21 - DOS 3+ - GET EXTENDED ERROR INFORMATION AH = 59h BX = 0000h Return: AX = extended error code (see below) BH = error class (see below) BL = recommended action (see below) CH = error locus (see below) CL, DX, SI, DI, BP, DS, and ES destroyed Notes: functions available under DOS 2.x map the true DOS 3+ error code into one supported under DOS 2.x you should call this function to retrieve the true error code when an FCB or DOS 2.x call returns an error SeeAlso: AX=5D0Ah,INT 2F/AX=122Dh Values for extended error code: 00h no error 01h function number invalid 02h file not found 03h path not found 04h too many open files (no handles available) 05h access denied 06h invalid handle 07h memory control block destroyed 08h insufficient memory 09h memory block address invalid 0Ah environment invalid (usually >32K in length) 0Bh format invalid 0Ch access code invalid 0Dh data invalid 0Eh reserved 0Fh invalid drive 10h attempted to remove current directory 11h not same device 12h no more files ---DOS 3+--- 13h disk write-protected 14h unknown unit 15h drive not ready 16h unknown command 17h data error (CRC) 18h bad request structure length 19h seek error 1Ah unknown media type (non-DOS disk) 1Bh sector not found 1Ch printer out of paper 1Dh write fault 1Eh read fault 1Fh general failure 20h sharing violation 21h lock violation 22h disk change invalid ES:DI -> ASCIZ volume label of required disk 23h FCB unavailable 24h sharing buffer overflow 25h (DOS 4+) code page mismatch 26h (DOS 4+) cannot complete file operation (out of input) 27h (DOS 4+) insufficient disk space 28h-31h reserved 32h network request not supported 33h remote computer not listening 34h duplicate name on network 35h network name not found 36h network busy 37h network device no longer exists 38h network BIOS command limit exceeded 39h network adapter hardware error 3Ah incorrect response from network 3Bh unexpected network error 3Ch incompatible remote adapter 3Dh print queue full 3Eh queue not full 3Fh not enough space to print file 40h network name was deleted 41h network: Access denied 42h network device type incorrect 43h network name not found 44h network name limit exceeded 45h network BIOS session limit exceeded 46h temporarily paused 47h network request not accepted 48h network print/disk redirection paused 49h (LANtastic) invalid network version 4Ah (LANtastic) account expired 4Bh (LANtastic) password expired 4Ch (LANtastic) login attempt invalid at this time 4Dh (LANtastic v3+) disk limit exceeded on network node 4Eh (LANtastic v3+) not logged in to network node 4Fh reserved 50h file exists 51h reserved 52h cannot make directory 53h fail on INT 24h 54h (DOS 3.3+) too many redirections 55h (DOS 3.3+) duplicate redirection 56h (DOS 3.3+) invalid password 57h (DOS 3.3+) invalid parameter 58h (DOS 3.3+) network write fault 59h (DOS 4+) function not supported on network 5Ah (DOS 4+) required system component not installed Values for Error Class: 01h out of resource (storage space or I/O channels) 02h temporary situation (file or record lock) 03h authorization (denied access) 04h internal (system software bug) 05h hardware failure 06h system failure (configuration file missing or incorrect) 07h application program error 08h not found 09h bad format 0Ah locked 0Bh media error 0Ch already exists 0Dh unknown Values for Suggested Action: 01h retry 02h delayed retry 03h prompt user to reenter input 04h abort after cleanup 05h immediate abort 06h ignore 07h retry after user intervention Values for Error Locus: 01h unknown or not appropriate 02h block device (disk error) 03h network related 04h serial device (timeout) 05h memory related ----------215A------------------------------- INT 21 - DOS 3+ - CREATE TEMPORARY FILE AH = 5Ah CX = file attribute (see AX=4301h) DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the generated filename Return: CF clear if successful AX = file handle opened for read/write in compatibility mode DS:DX pathname extended with generated name for temporary file CF set on error AX = error code (03h,04h,05h) (see AH=59h) Notes: creates a file with a unique name which must be explicitly deleted COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently wraps around to the end of the segment SeeAlso: AH=3Ch,AH=5Bh ----------215B------------------------------- INT 21 - DOS 3+ - CREATE NEW FILE AH = 5Bh CX = file attribute (see AX=4301h) DS:DX -> ASCIZ filename Return: CF clear if successful AX = file handle opened for read/write in compatibility mode CF set on error AX = error code (03h,04h,05h,50h) (see AH=59h) Notes: unlike AH=3Ch, this function will fail if the specified file exists rather than truncating it; this permits its use in creating semaphore files because it is an atomic "test and set" operation SeeAlso: AH=3Ch,AH=5Ah ----------215C------------------------------- INT 21 - DOS 3+ - "FLOCK" - RECORD LOCKING AH = 5Ch AL = subfunction 00h lock region of file 01h unlock region of file BX = file handle CX:DX = start offset of region within file SI:DI = length of region in bytes Return: CF clear if successful CF set on error AX = error code (01h,06h,21h,24h) (see AH=59h) Notes: error returned unless SHARE or network installed an unlock call must specify the same region as some prior lock call locked regions become entirely inaccessible to other processes duplicate handles created with AH=45h or AH=46h inherit locks, but handles inherited by child processes (see AH=4Bh) do not SeeAlso: AX=440Bh,INT 2F/AX=110Ah,INT 2F/AX=110Bh ----------215D00----------------------------- INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL AX = 5D00h DS:DX -> DOS parameter list (see below) DPL contains all register values for a call to INT 21h Return: as appropriate for function being called Notes: does not check AH. Out of range values will crash the system executes using specified computer ID and process ID sharing delay loops skipped a special sharing mode is enabled wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h) an extra file attribute parameter is enabled for OPEN (AH=3Dh), DELETE (AH=41h), and RENAME (AH=56h) functions which take filenames require canonical names (as returned by AH=60h); this is apparently to prevent multi-hop file forwarding SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h Format of DOS parameter list: Offset Size Description 00h WORD AX 02h WORD BX 04h WORD CX 06h WORD DX 08h WORD SI 0Ah WORD DI 0Ch WORD DS 0Eh WORD ES 10h WORD reserved (0) 12h WORD computer ID (0 = current system) 14h WORD process ID (PSP segment on specified computer) ----------215D01----------------------------- INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS AX = 5D01h DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and process ID fields used Return: CF set on error AX = error code (see AH=59h) CF clear if successful Notes: flushes buffers and updates directory entries for each file which has been written to; if remote file, calls INT 2F/AX=1107h the computer ID and process ID are stored but ignored under DOS 3.3 SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h ----------215D02----------------------------- INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME AX = 5D02h DS:DX -> DOS parameter list (see AX=5D00h), only fields DX, DS, computer ID, and process ID used DPL's DS:DX -> ASCIZ name of file to close Return: CF set on error AX = error code (see AH=59h) CF clear if successful Notes: error unless SHARE is loaded (calls [SysFileTable-28h]) (see AH=52h) name must be canonical fully-qualified, such as returned by AH=60h SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h ----------215D03----------------------------- INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER AX = 5D03h DS:DX -> DOS parameter list (see AX=5D00h), only computer ID used Return: CF set on error AX = error code (see AH=59h) CF clear if successful Note: error unless SHARE is loaded (calls [SysFileTable-30h]) (see AH=52h) SeeAlso: AX=5D02h,AX=5D04h ----------215D04----------------------------- INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS AX = 5D04h DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and process ID fields used Return: CF set on error AX = error code (see AH=59h) CF clear if successful Note: error unless SHARE is loaded (calls [SysFileTable-2Ch]) (see AH=52h) SeeAlso: AX=5D02h,AX=5D03h ----------215D05----------------------------- INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY AX = 5D05h DS:DX -> DOS parameter list (see AX=5D00h) DPL's BX = index of sharing record (see AH=52h) DPL's CX = index of SFT in sharing record's SFT list Return: CF clear if successful ES:DI -> ASCIZ filename BX = network machine number of SFT's owner CX = number of locks held by SFT's owner CF set if either index out of range AX = 0012h (no more files) Notes: error unless SHARE is loaded (calls [SysFileTable-18h]) (see AH=52h) names are always canonical fully-qualified, such as returned by AH=60h SeeAlso: AH=5Ch,AH=60h ----------215D06----------------------------- INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA AX = 5D06h Return: CF set on error AX = error code (see AH=59h) CF clear if successful DS:SI -> nonreentrant data area (includes all three DOS stacks) (critical error flag is first byte) CX = size in bytes of area which must be swapped while in DOS DX = size in bytes of area which must always be swapped Notes: the Critical Error flag is used in conjunction with the InDOS flag (see AH=34h) to determine when it is safe to enter DOS from a TSR setting CritErr flag allows use of functions 50h/51h from INT 28h under DOS 2.x by forcing use of correct stack swapping the data area allows reentering DOS unless DOS is in a critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h under DOS 4.0, AX=5D0Bh should be used instead of this function SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h Format of DOS 3.10-3.30 Swappable Data Area: Offset Size Description 00h BYTE critical error flag 01h BYTE InDOS flag (count of active INT 21 calls) 02h BYTE drive on which current critical error occurred, or FFh 03h BYTE locus of last error 04h WORD extended error code of last error 06h BYTE suggested action for last error 07h BYTE class of last error 08h DWORD ES:DI pointer for last error 0Ch DWORD current DTA 10h WORD current PSP 12h WORD stores SP across an INT 23 14h WORD return code from last process termination (zerod after reading with AH=4Dh) 16h BYTE current drive 17h BYTE extended break flag ---remainder need only be swapped if in DOS--- 18h WORD value of AX on call to INT 21 1Ah WORD PSP segment for sharing/network 1Ch WORD network machine number for sharing/network (0000h = us) 1Eh WORD first usable memory block found when allocating memory 20h WORD best usable memory block found when allocating memory 22h WORD last usable memory block found when allocating memory 24h WORD memory size in paragraphs (used only during initialization) 26h WORD ??? 28h BYTE INT 24 returned Fail 29h BYTE bit flags for allowable actions on INT 24 2Ah BYTE ??? flag 2Bh BYTE FFh if Ctrl-Break termination, 00h otherwise 2Ch BYTE ??? flag of some kind 2Dh BYTE ??? (doesn't seem to be referenced) 2Eh BYTE day of month 2Fh BYTE month 30h WORD year - 1980 32h WORD number of days since 1-1-1980 34h BYTE day of week (0 = Sunday) 35h BYTE working SFT pointer at SDA+2AAh is valid ??? 36h BYTE safe to call INT 28 if nonzero 37h BYTE flag: if nonzero, INT 24 abort turned into INT 24 fail (set only during process termination) 38h 26 BYTEs device driver request header 52h DWORD pointer to device driver entry point (used in calling driver) 56h 22 BYTEs device driver request header 6Ch 22 BYTEs device driver request header 82h BYTE type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child) 83h BYTE ??? apparently not referenced by kernel 84h 3 BYTEs 24-bit user number (see AH=30h) 87h BYTE OEM number (see AH=30h) 88h 2 BYTEs ??? 8Ah 6 BYTEs CLOCK$ transfer record (see AH=52h) 90h BYTE ??? buffer for single-byte I/O functions 91h BYTE ??? apparently not referenced by kernel 92h 128 BYTEs buffer for filename 112h 128 BYTEs buffer for filename 192h 21 BYTEs findfirst/findnext search data block (see AH=4Eh) 1A7h 32 BYTEs directory entry for found file 1C7h 81 BYTEs copy of current directory structure for drive being accessed 218h 11 BYTEs FCB-format filename for device name comparison 223h BYTE unused??? 224h 11 BYTEs wildcard destination specification for rename (FCB format) 22Fh 2 BYTEs ??? 231h WORD ??? 233h 5 BYTEs ??? 238h BYTE extended FCB file attribute 239h BYTE type of FCB (00h regular, FFh extended) 23Ah BYTE directory search attributes 23Bh BYTE file open mode??? 23Ch BYTE ??? flag bits 0 and 4 23Dh BYTE ??? flag or counter 23Eh BYTE ??? flag 23Fh BYTE flag indicating how DOS function was invoked (00h = direct INT 20/INT 21, FFh = server call AX=5D00h) 240h BYTE ??? 241h BYTE ??? flag 242h BYTE flag: 00h if read, 01h if write 243h BYTE drive number for ??? 244h BYTE ??? 245h BYTE ??? flag or counter 246h BYTE line edit (AH=0Ah) insert mode flag (nonzero = on) 247h BYTE canonicalized filename referred to existing file/dir if FFh 248h BYTE ??? flag or counter 249h BYTE type of process termination (00h-03h) (see AH=4Dh) 24Ah BYTE ??? flag 24Bh BYTE value with which to replace first byte of deleted file's name (normally E5h, but 00h as described under INT 21/AH=13h) 24Ch DWORD pointer to Drive Parameter Block for critical error invocation 250h DWORD pointer to stack frame containing user registers on INT 21 254h WORD stores SP across INT 24 256h DWORD pointer to DOS Drive Parameter Block for ??? 25Ah WORD ??? 25Ch WORD ??? temp 25Eh WORD ??? flag (only low byte referenced) 260h WORD ??? temp 262h BYTE Media ID byte returned by AH=1Bh,1Ch 263h BYTE ??? (doesn't seem to be referenced) 264h DWORD pointer to device header 268h DWORD pointer to current SFT 26Ch DWORD pointer to current directory structure for drive being accessed 270h DWORD pointer to caller's FCB 274h WORD number of SFT to which file being opened will refer 276h WORD temporary storage for file handle 278h DWORD pointer to a JFT entry in process handle table (see AH=26h) 27Ch WORD offset in DOS DS of first filename argument 27Eh WORD offset in DOS DS of second filename argument 280h WORD offset of last component in pathname or FFFFh 282h WORD ??? offset of transfer address??? 284h WORD ??? relative cluster within file being accessed ??? 286h WORD ??? absolute cluster number being accessed ??? 288h WORD ??? current sector number 28Ah WORD ??? current cluster number 28Ch WORD ??? current offset in file DIV bytes per sector 28Eh 2 BYTEs ??? 290h WORD ??? current offset in file MOD bytes per sector 292h DWORD current offset in file 296h WORD ??? 298h WORD ??? 29Ah WORD ??? 29Ch WORD ??? 29Eh WORD ??? 2A0h WORD ??? 2A2h DWORD number of bytes appended to file 2A6h DWORD pointer to ??? disk buffer 2AAh DWORD pointer to working SFT 2AEh WORD used by INT 21 dispatcher to store caller's BX 2B0h WORD used by INT 21 dispatcher to store caller's DS 2B2h WORD temporary storage while saving/restoring caller's registers 2B4h DWORD pointer to prev call frame (offset 250h) if INT 21 reentered also switched to for duration of INT 24 2B8h 21 BYTEs FindFirst search data for source file(s) of a rename operation (see AH=4Eh) 2CDh 32 BYTEs directory entry for file being renamed 2EDh 331 BYTEs critical error stack 403h 35 BYTEs scratch SFT 438h 384 BYTEs disk stack (functions greater than 0Ch, INT 25,INT 26) 5B8h 384 BYTEs character I/O stack (functions 01h through 0Ch) ---DOS 3.2,3.3 only--- 738h BYTE device driver lookahead flag (see AH=64h) 739h BYTE ??? looks like a drive number 73Ah BYTE ??? flag of some kind 73Ah BYTE ??? ----------215D07----------------------------- INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE AX = 5D07h Return: DL = mode 00h redirected output is combined 01h redirected output in separate print jobs SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h ----------215D08----------------------------- INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE AX = 5D08h DL = mode 00h redirected output is combined 01h redirected output placed in separate jobs, start new print job now SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h ----------215D09----------------------------- INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT AX = 5D09h Note: forces redirected printer output to be printed, and starts a new print job SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h ----------215D0A----------------------------- INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION AX = 5D0Ah DS:DX -> 11-word DOS parameter list (see AX=5D00h) Return: nothing. next call to AH=59h will return values from fields AX,BX,CX, DX,DI, and ES in corresponding registers Note: documented for DOS 5+, but undocumented in earlier versions SeeAlso: AH=59h ----------215D0B----------------------------- INT 21 U - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS AX = 5D0Bh Return: CF set on error AX = error code (see AH=59h) CF clear if successful DS:SI -> swappable data area list (see below) Note: copying and restoring the swappable data areas allows DOS to be reentered unless it is in a critical section delimited by calls to INT 2A/AH=80h and INT 2A/AH=81h,82h SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h Format of DOS 4.x swappable data area list: Offset Size Description 00h WORD count of data areas 02h N BYTEs "count" copies of data area record Offset Size Description 00h DWORD address 04h WORD length and type bit 15 set if swap always, clear if swap in DOS bits 14-0: length in bytes Format of DOS 4.0-5.0 swappable data area: Offset Size Description 00h BYTE critical error flag 01h BYTE InDOS flag (count of active INT 21 calls) 02h BYTE drive on which current critical error occurred or FFh 03h BYTE locus of last error 04h WORD extended error code of last error 06h BYTE suggested action for last error 07h BYTE class of last error 08h DWORD ES:DI pointer for last error 0Ch DWORD current DTA 10h WORD current PSP 12h WORD stores SP across an INT 23 14h WORD return code from last process termination (zerod after reading with AH=4Dh) 16h BYTE current drive 17h BYTE extended break flag 18h 2 BYTEs ??? ---remainder need only be swapped if in DOS--- 1Ah WORD value of AX on call to INT 21 1Ch WORD PSP segment for sharing/network 1Eh WORD network machine number for sharing/network (0000h = us) 20h WORD first usable memory block found when allocating memory 22h WORD best usable memory block found when allocating memory 24h WORD last usable memory block found when allocating memory 26h WORD memory size in paragraphs (used only during initialization) 28h WORD ??? 2Ah BYTE ??? 2Bh BYTE ??? 2Ch BYTE ??? 2Dh BYTE ??? 2Eh BYTE ??? 2Fh BYTE ??? (doesn't seem to be referenced) 30h BYTE day of month 31h BYTE month 32h WORD year - 1980 34h WORD number of days since 1-1-1980 36h BYTE day of week (0 = Sunday) 37h BYTE ??? 38h BYTE ??? 39h BYTE ??? 38h 30 BYTEs device driver request header 58h DWORD pointer to device driver entry point (used in calling driver) 5Ch 22 BYTEs device driver request header 72h 30 BYTEs device driver request header 90h 6 BYTEs ??? 96h 6 BYTEs CLOCK$ transfer record (see AH=52h) 9Ch 2 BYTEs ??? 9Eh 128 BYTEs buffer for filename 11Eh 128 BYTEs buffer for filename 19Eh 21 BYTEs findfirst/findnext search data block (see AH=4Eh) 1B3h 32 BYTEs directory entry for found file 1D3h 88 BYTEs copy of current directory structure for drive being accessed 22Bh 11 BYTEs FCB-format filename for device name comparison 236h BYTE ??? 237h 11 BYTEs wildcard destination specification for rename (FCB format) 242h 2 BYTEs ??? 244h WORD ??? 246h 5 BYTEs ??? 24Bh BYTE extended FCB file attributes 24Ch BYTE type of FCB (00h regular, FFh extended) 24Dh BYTE directory search attributes 24Eh BYTE file open mode 24Fh BYTE ??? flag bits 250h BYTE ??? flag or counter 251h BYTE ??? flag 252h BYTE flag indicating how DOS function was invoked (00h = direct INT 20/INT 21, FFh = server call AX=5D00h) 253h BYTE ??? 254h BYTE ??? 255h BYTE ??? 256h BYTE ??? 257h BYTE ??? 258h BYTE ??? 259h BYTE ??? 25Ah BYTE canonicalized filename referred to existing file/dir if FFh 25Bh BYTE ??? 25Ch BYTE type of process termination (00h-03h) 25Dh BYTE ??? 25Eh BYTE ??? 25Fh BYTE ??? 260h DWORD pointer to Drive Parameter Block for critical error invocation 264h DWORD pointer to stack frame containing user registers on INT 21 268h WORD stores SP??? 26Ah DWORD pointer to DOS Drive Parameter Block for ??? 26Eh WORD segment of disk buffer 270h WORD ??? 272h WORD ??? 274h WORD ??? 276h WORD ??? 278h BYTE Media ID byte returned by AH=1Bh,1Ch 279h BYTE ??? (doesn't seem to be referenced) 27Ah DWORD pointer to ??? 27Eh DWORD pointer to current SFT 282h DWORD pointer to current directory structure for drive being accessed 286h DWORD pointer to caller's FCB 28Ah WORD number of SFT to which file being opened will refer 28Ch WORD temporary storage for file handle 28Eh DWORD pointer to a JFT entry in process handle table (see AH=26h) 292h WORD offset in DOS DS of first filename argument 294h WORD offset in DOS DS of second filename argument 296h WORD ??? 298h WORD ??? 29Ah WORD ??? 29Ch WORD ??? 29Eh WORD ??? 2A0h WORD ??? 2A2h WORD ??? directory cluster number??? 2A4h DWORD ??? 2A8h DWORD ??? 2ACh WORD ??? 2AEh DWORD offset in file??? 2B2h WORD ??? 2B4h WORD bytes in partial sector 2B6h WORD number of sectors 2B8h WORD ??? 2BAh WORD ??? 2BCh WORD ??? 2BEh DWORD number of bytes appended to file 2C2h DWORD pointer to ??? disk buffer 2C6h DWORD pointer to ??? SFT 2CAh WORD used by INT 21 dispatcher to store caller's BX 2CCh WORD used by INT 21 dispatcher to store caller's DS 2CEh WORD temporary storage while saving/restoring caller's registers 2D0h DWORD pointer to prev call frame (offset 264h) if INT 21 reentered also switched to for duration of INT 24 2D4h WORD open mode/action for INT 21/AX=6C00h 2D6h BYTE ??? (set to 00h by INT 21h dispatcher, 02h when a read is performed, and 01h or 03h by INT 21/AX=6C00h) 2D7h WORD ??? apparently unused 2D9h DWORD stored ES:DI for AX=6C00h 2DDh WORD extended file open action code (see AX=6C00h) 2DFh WORD extended file open attributes (see AX=6C00h) 2E1h WORD extended file open file mode (see AX=6C00h) 2E3h DWORD pointer to filename to open (see AX=6C00h) 2E7h WORD ??? 2E9h WORD ??? 2EBh BYTE ??? 2ECh WORD stores DS during call to [List-of-Lists + 37h] 2EEh WORD ??? 2F0h BYTE ??? 2F1h WORD ??? bit flags 2F3h DWORD pointer to user-supplied filename 2F7h DWORD pointer to ??? 2FBh WORD stores SS during call to [List-of-Lists + 37h] 2FDh WORD stores SP during call to [List-of-Lists + 37h] 2FFh BYTE flag, nonzero if stack switched in calling [List-of-Lists+37h] 300h 21 BYTEs FindFirst search data for source file(s) of a rename operation (see AH=4Eh) 315h 32 BYTEs directory entry for file being renamed 335h 331 BYTEs critical error stack 480h 384 BYTEs disk stack (functions greater than 0Ch, INT 25,INT 26) 600h 384 BYTEs character I/O stack (functions 01h through 0Ch) 780h BYTE device driver lookahead flag (see AH=64h) 781h BYTE ??? looks like a drive number 782h BYTE ??? flag of some kind 783h BYTE ??? 784h WORD ??? 786h WORD ??? 788h WORD ??? 78Ah WORD ??? ----------215E00----------------------------- INT 21 - DOS 3.1+ network - GET MACHINE NAME AX = 5E00h DS:DX -> 16-byte buffer for ASCIZ machine name Return: CF clear if successful CH = validity 00h name invalid nonzero valid CL = NetBIOS number for machine name DS:DX buffer filled with blank-paded name CF set on error AX = error code (01h) (see AH=59h) Note: supported by OS/2 v1.3+ compatibility box, PC-NFS SeeAlso: AX=5E01h ----------215E01CH00------------------------- INT 21 - DOS 3.1+ network - SET MACHINE NAME AX = 5E01h CH = 00h undefine name (make it invalid) <> 0 define name CL = name number DS:DX -> 15-character blank-padded ASCIZ name SeeAlso: AX=5E00h ----------215E02----------------------------- INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING AX = 5E02h BX = redirection list index (see AX=5F02h) CX = length of setup string DS:SI -> setup string Return: CF clear if successful CF set on error AX = error code (01h) (see AH=59h) SeeAlso: AX=5E03h,INT 2F/AX=111Fh ----------215E03----------------------------- INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING AX = 5E03h BX = redirection list index (see AX=5F02h) ES:DI -> 64-byte buffer for setup string Return: CF clear if successful CX = length of setup string ES:DI buffer filled CF set on error AX = error code (01h) (see AH=59h) SeeAlso: AX=5E02h,INT 2F/AX=111Fh ----------215E04----------------------------- INT 21 - DOS 3.1+ network - SET PRINTER MODE AX = 5E04h BX = redirection list index (see AX=5F02h) DX = mode bit 0: set if binary, clear if text (tabs expanded to blanks) Return: CF set on error AX = error code (see AH=59h) CF clear if successful Note: calls INT 2F/AX=111Fh with 5E04h on stack SeeAlso: AX=5E05h,INT 2F/AX=111Fh ----------215E05----------------------------- INT 21 - DOS 3.1+ network - GET PRINTER MODE AX = 5E05h BX = redirection list index (see AX=5F02h) Return: CF set on error AX = error code (see AH=59h) CF clear if successful DX = printer mode (see AX=5E04h) Note: calls INT 2F/AX=111Fh with 5E05h on stack SeeAlso: AX=5E04h,INT 2F/AX=111Fh ----------215F00----------------------------- INT 21 - DOS 3.1+ network - GET REDIRECTION MODE AX = 5F00h BL = redirection type 03h printer 04h disk drive Return: CF set on error AX = error code (see AH=59h) CF clear if successful BH = redirection state 00h off 01h on SeeAlso: AX=5F01h ----------215F01----------------------------- INT 21 - DOS 3.1+ network - SET REDIRECTION MODE AX = 5F01h BL = redirection type 03h printer 04h disk drive BH = redirection state 00h off 01h on Return: CF set on error AX = error code (see AH=59h) CF clear if successful Note: when redirection is off, the local device (if any) rather than the remote device is used SeeAlso: AX=5F00h,INT 2F/AX=111Eh ----------215F02----------------------------- INT 21 - DOS 3.1+ network, Banyan VINES, PC-NFS - GET REDIRECTION LIST ENTRY AX = 5F02h BX = redirection list index CX = 0000h (LANtastic) DS:SI -> 16-byte buffer for ASCIZ device name ES:DI -> 128-byte buffer for ASCIZ network name Return: CF clear if successful BH = device status 00h valid 01h invalid BL = device type 03h printer 04h disk drive CX = user data previously set with AX=5F03h DS:SI and ES:DI buffers filled DX,BP destroyed CF set on error AX = error code (01h,12h) (see AH=59h) Notes: this function is passed through to INT 2F/AX=111Eh error code 12h is returned if BX is greater than the size of the list also supported by Banyan VINES, PC-NFS, and LANtastic SeeAlso: AX=5F03h,INT 2F/AX=111Eh ----------215F03----------------------------- INT 21 - DOS 3.1+ network, Banyan VINES, LANtastic - REDIRECT DEVICE AX = 5F03h BL = device type 03h printer 04h disk drive CX = user data to save 0000h for LANtastic DS:SI -> ASCIZ local device name (16 bytes max) ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total) Return: CF clear if successful CF set on error AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h) Note: if device type is disk drive, DS:SI must point at either a null string or a string consisting the drive letter followed by a colon; if a null string, the network attempts to access the destination without redirecting a local drive SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh ----------215F04----------------------------- INT 21 - DOS 3.1+ network, Banyan VINES, LANtastic - CANCEL REDIRECTION AX = 5F04h DS:SI -> ASCIZ device name or path Return: CF clear if successful CF set on error AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h) Note: the DS:SI string must be either a local device name, a drive letter followed by a colon, or a network directory beginning with two backslashes SeeAlso: AX=5F03h,INT 2F/AX=111Eh ----------215F05----------------------------- INT 21 - DOS 4.x + Microsoft Networks - GET REDIRECTION LIST EXTENDED ENTRY AX = 5F05h BX = redirection list index DS:SI -> buffer for ASCIZ source device name ES:DI -> buffer for destination ASCIZ network path Return: CF set on error AX = error code (see AH=59h) CF clear if successful BH = device status flag (bit 0 clear if valid) BL = device type (03h if printer, 04h if drive) CX = stored parameter value (user data) BP = NETBIOS local session number DS:SI buffer filled ES:DI buffer filled Notes: the local session number allows sharing the redirector's session number if an error is caused on the NETBIOS LSN, the redirector may be unable to correctly recover from errors SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh ----------215F05----------------------------- INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM AX = 5F05h DL = drive number (0=A:) DS:SI -> ASCIZ name of the object to map the drive to Return: CF set on error AX = error code (see AH=59h) CF clear if successful SeeAlso: AX=5F06h"STARLITE" ----------215F06----------------------------- INT 21 U - Network - GET REDIRECTION LIST??? AX = 5F06h ??? Return: ??? Note: appears to be similar to AX=5F02h and AX=5F05h SeeAlso: AX=5F05h"DOS",INT 2F/AX=111Eh ----------215F06----------------------------- INT 21 - STARLITE architecture - UNMAP DRIVE LETTER AX = 5F06h DL = drive to be unmapped (0=A:) Return: CF set on error AX = error code (see AH=59h) CF clear if successful SeeAlso: AX=5F05h"STARLITE" ----------215F07----------------------------- INT 21 - DOS 5.0 - ENABLE DRIVE AX = 5F07h DL = drive number (0=A:) Return: CF clear if successful CF set on error AX = error code (0Fh) (see AH=59h) Note: simply sets the "valid" bit in the drive's CDS SeeAlso: AH=52h,AX=5F08h"DOS" ----------215F07----------------------------- INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK AX = 5F07h DS:SI -> ASCIZ name of object to offer to network ES:DI -> ASCIZ name under which object will be known on the network MUST begin with three slashes Return: CF set on error AX = error code (see AH=59h) CF clear if successful SeeAlso: AX=5F08h"STARLITE" ----------215F08----------------------------- INT 21 - DOS 5.0 - DISABLE DRIVE AX = 5F08h DL = drive number (0=A:) Return: CF clear if successful CF set on error AX = error code (0Fh) (see AH=59h) Note: simply clears the "valid" bit in the drive's CDS SeeAlso: AH=52h,AX=5F07h"DOS" ----------215F08----------------------------- INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT AX = 5F08h DS:SI -> ASCIZ network name (not local name) of object to unshare Return: CF set on error AX = error code (see AH=59h) CF clear if successful SeeAlso: AX=5F07h"STARLITE" ----------215F09----------------------------- INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE AX = 5F09h DS:DX -> ASCIZ name of the device driver to attach to Return: CF set on error AX = error code (see AH=59h) CF clear if successful Note: the STARLITE distributed file system can attach to multiple networks simultaneously SeeAlso: AX=5F0Ah ----------215F0A----------------------------- INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE AX = 5F0Ah DS:DX -> ASCIZ name of device driver to detach from Return: CF set on error AX = error code (see AH=59h) CF clear if successful SeeAlso: AX=5F09h ----------215F32----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPipeInfo AX = 5F32h ??? Return: ??? SeeAlso: AX=5F33h,AX=5F34h ----------215F33----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPHandState AX = 5F33h ??? Return: ??? SeeAlso: AX=5F32h,AX=5F34h ----------215F34----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosSetNmPHandState AX = 5F34h ??? Return: ??? SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h ----------215F35----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekNmPipe AX = 5F35h ??? Return: ??? SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h ----------215F36----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosTransactNmPipe AX = 5F36h ??? Return: ??? SeeAlso: AX=5F34h,AX=5F37h ----------215F37----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosCallNmPipe AX = 5F37h ??? Return: ??? SeeAlso: AX=5F36h,AX=5F38h ----------215F38----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosWaitNmPipe AX = 5F38h ??? Return: ??? SeeAlso: AX=5F37h,AX=5F39h ----------215F39----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosRawReadNmPipe AX = 5F39h ??? Return: ??? SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h ----------215F3A----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosRawWriteNmPipe AX = 5F3Ah ??? Return: ??? SeeAlso: AX=5F3Bh,INT 2F/AX=118Fh ----------215F3B----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleSetInfo AX = 5F3Bh ??? Return: ??? SeeAlso: AX=5F3Ch ----------215F3C----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleGetInfo AX = 5F3Ch ??? Return: ??? SeeAlso: AX=5F3Bh ----------215F40----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetMessageBufferSend AX = 5F40h ??? Return: ??? ----------215F42----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetServiceControl AX = 5F42h ??? Return: ??? ----------215F44----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaGetInfo AX = 5F44h ??? Return: ??? SeeAlso: AX=5F45h,AX=5F49h ----------215F45----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaSetInfo AX = 5F45h ??? Return: ??? SeeAlso: AX=5F44h ----------215F46----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetUseEnum AX = 5F46h ??? Return: ??? SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch ----------215F47----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetUseAdd AX = 5F47h ??? Return: ??? SeeAlso: AX=5F46h,AX=5F48h ----------215F48----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetUseDel AX = 5F48h ??? Return: ??? SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h ----------215F49----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetUseGetInfo AX = 5F49h ??? Return: ??? SeeAlso: AX=5F44h,AX=5F47h ----------215F4A----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteCopy AX = 5F4Ah ??? Return: ??? SeeAlso: AX=5F4Bh ----------215F4B----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteMove AX = 5F4Bh ??? Return: ??? SeeAlso: AX=5F4Ah ----------215F4C----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum AX = 5F4Ch ??? Return: ??? SeeAlso: AX=5F53h ----------215F4D----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosMakeMailslot AX = 5F4Dh ??? Return: ??? SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h ----------215F4E----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosDeleteMailslot AX = 5F4Eh ??? Return: ??? SeeAlso: AX=5F4Dh,AX=5F4Fh ----------215F4F----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosMailslotInfo AX = 5F4Fh ??? Return: ??? SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h ----------215F50----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosReadMailslot AX = 5F50h ??? Return: ??? SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h ----------215F51----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekMailslot AX = 5F51h ??? Return: ??? SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h ----------215F52----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - DosWriteMailslot AX = 5F52h ??? Return: ??? SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h ----------215F53----------------------------- INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum2 AX = 5F53h ??? Return: ??? SeeAlso: AX=5F4Ch ----------215F80----------------------------- INT 21 - LANtastic - GET LOGIN ENTRY AX = 5F80h BX = login entry index (0-based) ES:DI -> 16-byte buffer for machine name Return: CF clear if successful buffer filled with machine name ("\\" prefix removed) DL = adapter number (v3+) CF set on error AX = error code Note: the login entry index corresponds to the value BX used in AX=5F83h SeeAlso: AX=58F3h ----------215F81----------------------------- INT 21 - LANtastic - LOGIN TO SERVER AX = 5F81h ES:DI -> ASCIZ login path followed immediately by ASCIZ password BL = adapter number FFh try all valid adapters 00h-07h try only specified adapter Return: CF clear if successful CF set on error AX = error code Notes: login path is of form "\\machine\username" if no password is used, the string at ES:DI must be terminated with three NULs for compatibility with LANtastic v3.0. SeeAlso: AX=5F82h,AX=5F84h ----------215F82----------------------------- INT 21 - LANtastic - LOGOUT FROM SERVER AX = 5F82h ES:DI -> ASCIZ server name (in form "\\machine") Return: CF clear if successful CF set on error AX = error code SeeAlso: AX=5F81h,AX=5F88h,AX=5FCBh ----------215F83----------------------------- INT 21 - LANtastic - GET USERNAME ENTRY AX = 5F83h BX = login entry index (0-based) ES:DI -> 16-byte buffer for username currently logged into Return: CF clear if successful DL = adapter number (v3+) CF set on error AX = error code Note: the login entry index corresponds to the value BX used in AX=5F80h SeeAlso: AX=5F80h ----------215F84----------------------------- INT 21 - LANtastic - GET INACTIVE SERVER ENTRY AX = 5F84h BX = server index not currently logged into ES:DI -> 16-byte buffer for server name which is available for logging in to ("\\" prefix omitted) Return: CF clear if successful DL = adapter number to non-logged in server is on CF set on error AX = error code SeeAlso: AX=5F81h ----------215F85----------------------------- INT 21 - LANtastic - CHANGE PASSWORD AX = 5F85h ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h Return: CF clear if successful CF set on error AX = error code Notes: must be logged into the named machine this function is illegal for group accounts ----------215F86----------------------------- INT 21 - LANtastic - DISABLE ACCOUNT AX = 5F86h ES:DI -> ASCIZ machine name and password in form "\\machine\password" Return: CF clear if successful CF set on error AX = error code Note: must be logged into the named machine and concurrent logins set to 1 by NET_MGR. Requires system manager to re-enable account. ----------215F87----------------------------- INT 21 - LANtastic v3+ - GET ACCOUNT AX = 5F87h DS:SI -> 128-byte buffer for account information (see below) ES:DI -> ASCIZ machine name in form "\\machine" Return: CF clear if successful CF set on error AX = error code BX destroyed Note: must be logged into the specified machine Format of user account structure: Offset Size Description 00h 16 BYTEs blank-padded username (zero-padded for v4.x) 10h 16 BYTEs reserved (00h) 20h 32 BYTEs user description 40h BYTE privilege bits bit 7: bypass access control lists 6: bypass queue protection 5: treat as local process 4: bypass mail protection 3: allow audit entry creation 2: system manager 0: user cannot change password 41h BYTE maximum concurrent users 42h 42 BYTEs bit map for disallowed half hours, beginning on Sunday (bit set if half-hour not an allowed time) 6Ch WORD internal (0002h) 6Eh 2 WORDs last login time 72h 2 WORDs account expiration date (MSDOS-format year/month:day) 76h 2 WORDs password expiration date (0 = none) 7Ah BYTE number of days to extend password after change (1-31) 00h if no extension required ---v3.x--- 7Bh 5 BYTEs reserved ---v4.x--- 7Bh BYTE storage for first letter of user name when deleted (first character is changed to 00h when deleting account) 7Ch BYTE extended privileges 7Dh 3 BYTEs reserved ----------215F88----------------------------- INT 21 - LANtastic v4.0+ - LOGOUT FROM ALL SERVERS AX = 5F88h Return: CF clear if successful CF set on error AX = error code SeeAlso: AX=5F82h ----------215F97----------------------------- INT 21 - LANtastic - COPY FILE AX = 5F97h CX:DX = number of bytes to copy (FFFFFFFFh = entire file) SI = source file handle DI = destination file handle Return: CF clear if successful DX:AX = number of bytes copied CF set on error AX = error code Note: copy is performed by server ----------215F98----------------------------- INT 21 - LANtastic - SEND UNSOLICITED MESSAGE AX = 5F98h DS:SI -> message buffer (see below) Return: CF clear if successful CF set on error AX = error code Note: v4.1- return no errors SeeAlso: AX=5F99h Format of message buffer: Offset Size Description 00h BYTE reserved 01h BYTE message type 00h general 01h server warning 02h-7Fh reserved 80h-FFh user-defined 02h 16 BYTEs ASCIZ destination machine name 12h 16 BYTEs ASCIZ server name which user must be logged into 22h 16 BYTEs ASCIZ user name 32h 16 BYTEs ASCIZ originating machine name (filled in when received) 42h 80 BYTEs message text ----------215F99----------------------------- INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE AX = 5F99h ES:DI -> messsage buffer (see AX=5F98h for format) Return: CF clear if successful CF set on error AX = error code SeeAlso: AX=5F98h ----------215F9A----------------------------- INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS AX = 5F9Ah Return: CF clear if successful DL = bits describing processing for received unsolicited messages bit 0: beep before message is delivered 1: deliver message to message service 2: pop up message automatically (v3+) CF set on error AX = error code SeeAlso: AX=5F9Bh,AX=5F9Ch,AX=5F9Dh ----------215F9B----------------------------- INT 21 - LANtastic - SET MESSAGE PROCESSING FLAG AX = 5F9Bh DL = bits describing processing for received unsolicited messages (see AX=5F9Ah) Return: CF clear if successful CF set on error AX = error code SeeAlso: AX=5F9Ah,AX=5F9Eh ----------215F9C----------------------------- INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE AX = 5F9Ch CX = time to leave on screen in clock ticks DH = 0-based screen line on which to place message Return: CF clear if successful CF set on error AX = error code (0Bh) Notes: the original screen contents are restored when the message is removed the message will not appear, and an error will be returned, if the screen is in a graphics mode SeeAlso: AX=5F9Ah ----------215F9D----------------------------- INT 21 - LANtastic v4.1+ - GET REDIRECTOR CONTROL BITS AX = 5F9Dh Return: DL = redirector control bits bit 7: set to notify on print job completion SeeAlso: AX=5F9Ah,AX=5F9Eh ----------215F9E----------------------------- INT 21 - LANtastic v4.1+ - SET REDIRECTOR CONTROL BITS AX = 5F9Eh DL = redirector control bits (see AH = 5F9Dh) Return: nothing SeeAlso: AX=5F9Bh,AX=5F9Dh ----------215FA0----------------------------- INT 21 - LANtastic - GET QUEUE ENTRY AX = 5FA0h BX = queue entry index (0000h is first entry) DS:SI -> buffer for queue entry (see below) ES:DI -> ASCIZ server name in form "\\name" Return: CF clear if successful CF set on error AX = error code BX = entry index for next queue entry (BX-1 is current index) SeeAlso: AX=5FA1h,AX=5FA2h Format of queue entry: Offset Size Description 00h BYTE status of entry 00h empty 01h being updated 02h being held 03h waiting for despool 04h being despooled 05h canceled 06h spooled file could not be accessed 07h destination could not be accessed 08h rush job 01h DWORD size of spooled file 05h BYTE type of entry 00h printer queue file 01h message 02h local file 03h remote file 04h to remote modem 05h batch processor file 06h BYTE output control bit 6: don't delete (for mail) bit 5: mail file contains voice mail (v3+) bit 4: mail message has been read bit 3: response has been requested for this mail 07h WORD number of copies 09h DWORD sequence number of queue entry 0Dh 48 BYTEs pathname of spooled file 3Dh 16 BYTEs user who spooled file 4Dh 16 BYTEs name of machine from which file was spooled 5Dh WORD date file was spooled (see AX=5700h) 5Fh WORD time file was spooled (see AX=5700h) 61h 17 BYTEs ASCIZ destination device or user name 72h 48 BYTEs comment field ----------215FA1----------------------------- INT 21 - LANtastic - SET QUEUE ENTRY AX = 5FA1h BX = handle of opened queue entry DS:SI -> queue entry (see AX=5FA0h) Return: CF clear if successful CF set on error AX = error code Notes: the only queue entry fields which may be changed are output control, number of copies, destination device, and comment the handle in BX is that from a create or open (INT 21/AH=3Ch,3Dh) call on the file "\\server\\@MAIL" or "\\server\@name" (for printer queue entries) SeeAlso: AX=5FA0h,AX=5FA2h,AX=5FA9h ----------215FA2----------------------------- INT 21 - LANtastic - CONTROL QUEUE AX = 5FA2h BL = control command 00h start despooling (privileged) 01h halt despooling (privileged) 02h halt despooling at end of job (privileged) 03h pause despooler at end of job (privileged) 04h print single job (privileged) 05h restart current job (privileged) 06h cancel the current job 07h hold queue entry 08h release a held queue entry 09h make queue entry a rushed job (privileged) CX:DX = sequence number to control (commands 06h-09h) DX = physical printer number (commands 00h-05h) 00h-02h LPT1-LPT3 03h,04h COM1,COM2 other all printers ES:DI -> ASCIZ server name in form "\\machine" Return: CF clear if successful CF set on error AX = error code ----------215FA3----------------------------- INT 21 - LANtastic v3+ - GET PRINTER STATUS AX = 5FA3h BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2) DS:SI -> buffer for printer status (see below) ES:DI -> ASCIZ server name in form "\\machine" Return: CF clear if successful CF set on error AX = error code BX = next physical printer number Note: you must be logged in to the specified server Format of printer status: Offset Size Description 00h BYTE printer state bit 7: printer paused bits 0-6: 0 printer disabled 1 will stop at end of job 2 print multiple jobs 01h WORD queue index of print job being despooled FFFFh if not despooling--ignore all following fields 03h WORD actual characters per second being output 05h DWORD number of characters actually output so far 09h DWORD number of bytes read from spooled file so far 0Dh WORD copies remaining to print ----------215FA4----------------------------- INT 21 - LANtastic v3+ - GET STREAM INFO AX = 5FA4h BX = 0-based stream index number DS:SI -> buffer for stream information (see below) ES:DI -> ASCIZ machine name in form "\\machine" Return: CF clear if successful CF set on error AX = error code BX = next stream number SeeAlso: AX=5FA5h Format of stream information: Offset Size Description 00h BYTE queueing of jobs for logical printer (0=disabled,other=enabled) 01h 11 BYTEs logical printer resource template (may contain ? wildcards) ----------215FA5----------------------------- INT 21 - LANtastic v3+ - SET STREAM INFO AX = 5FA5h BX = 0-based stream index number DS:SI -> buffer containing stream information (see AX=5FA4h) ES:DI -> ASCIZ machine name in form "\\machine" Return: CF clear if successful CF set on error AX = error code SeeAlso: AX=5FA4h ----------215FA7----------------------------- INT 21 - LANtastic - CREATE USER AUDIT ENTRY AX = 5FA7h DS:DX -> ASCIZ reason code (max 8 bytes) DS:SI -> ASCIZ variable reason string (max 128 bytes) ES:DI -> ASCIZ machine name in form "\\machine" Return: CF clear if successful CF set on error AX = error code Note: you must be logged in to the specified server and have the "U" privilege to execute this call ----------215FA9----------------------------- INT 21 - LANtastic v4.1+ - SET EXTENDED QUEUE ENTRY AX = 5FA9h BX = handle of opened queue entry DS:SI -> queue entry (see AX=5FA0h) Return: CF clear if successful CF set on error AX = error code Note: functions exactly the same as AX=5FA1h except the spooled filename is also set. This call supports direct despooling. SeeAlso: AX=5FA1h ----------215FB0----------------------------- INT 21 - LANtastic - GET ACTIVE USER INFORMATION AX = 5FB0h BX = server login entry index DS:SI -> buffer for active user entry (see below) ES:DI -> ASCIZ machine name in form "\\server" Return: CF clear if successful CF set on error AX = error code BX = next login index Format of active user entry: Offset Size Description 00h WORD virtual circuit number 02h BYTE login state bit 0: fully logged in 1: remote program load login 2: user has system manager privileges 3: user can create audit entries 4: bypass mail protection 5: treat as local process 6: bypass queue protection 7: bypass access control lists 03h BYTE last command issued (see below) 04h 5 BYTEs number of I/O bytes (40-bit unsigned number) 09h 3 BYTEs number of server requests (24-bit unsigned) 0Ch 16 BYTEs name of user who is logged in 1Ch 16 BYTEs name of remote logged in machine 2Ch BYTE extended privileges (v4+???) bit 0: user cannot change his password 2Dh WORD time left in minutes (0000h = unlimited) (v4+???) Values for last command: 00h login 01h process termination 02h open file 03h close file 04h create file 05h create new file 06h create unique file 07h commit data to disk 08h read file 09h write file 0Ah delete file 0Bh set file attributes 0Ch lock byte range 0Dh unlock byte range 0Eh create subdirectory 0Fh remove subdirectory 10h rename file 11h find first matching file 12h find next matching file 13h get disk free space 14h get a queue entry 15h set a queue entry 16h control the queue 17h return login information 18h return link description 19h seek on file 1Ah get server's time 1Bh create audit entry 1Ch open file in multitude of modes 1Dh change password 1Eh disable account 1Fh local server file copy ---v3+--- 20h get username from account file 21h translate server's logical path 22h make indirect file 23h get indirect file contents 24h get physical printer status 25h get logical print stream info 26h set logical print stream info 27h get user's account record ---v4+--- 28h request server shutdown 29h cancel server shutdown 2Ah stuff server's keyboard 2Bh write then commit data to disk 2Ch set extended queue entry 2Dh terminate user from server 2Eh enable/disable logins 2Fh flush server caches 30h change username 31h get extended queue entry (same as get queue, but can return named fields blanked) ----------215FB1----------------------------- INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION AX = 5FB1h DS:SI -> 64-byte buffer for link description ES:DI -> ASCIZ machine and shared directory name in form "\\machine\shared-resource" Return: CF clear if successful CX = access control list privilege bits for requesting user bit 4: (I) allow expansion of indirect files 5: (A) allow attribute changing 6: (P) allow physical access to device 7: (E) allow program execution 8: (N) allow file renaming 9: (K) allow directory deletion 10: (D) allow file deletion 11: (L) allow file/directory lookups 12: (M) allow directory creation 13: (C) allow file creation 14: (W) allow open for write and writing 15: (R) allow open for read and reading CF set on error AX = error code ----------215FB2----------------------------- INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE AX = 5FB2h BX = username entry index (0 for first) DS:SI -> 16-byte buffer for username ES:DI -> ASCIZ server name in form "\\machine" Return: CF clear if successful CF set on error AX = error code BX = next queue entry index ----------215FB3----------------------------- INT 21 - LANtastic v3+ - TRANSLATE PATH AX = 5FB3h DS:SI -> 128-byte buffer for ASCIZ result ES:DI -> full ASCIZ path, including server name DX = types of translation to be performed bit 0: expand last component as indirect file 1: return actual path relative to server's physical disk Return: CF clear if successful CF set on error AX = error code Note: always expands any indirect files along the path SeeALso: AX=5FB4h ----------215FB4----------------------------- INT 21 - LANtastic v3+ - CREATE INDIRECT FILE AX = 5FB4h DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file ES:DI -> full ASCIZ path of indirect file to create, incl machine name Return: CF clear if successful CF set on error AX = error code Note: the contents of the indirect file may be any valid server-relative path ----------215FB5----------------------------- INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS AX = 5FB5h DS:SI -> 128-byte buffer for ASCIZ indirect file contents ES:DI -> full ASCIZ path of indirect file Return: CF clear if successful CF set on error AX = error code ----------215FB6----------------------------- INT 21 - LANtastic v4.1+ - SET AUTO-LOGIN DEFAULTS AX = 5FB6h ES:DI -> pointer to ASCIZ default user name, immediately followed by ASCIZ password BL = adapter number to use for default login attempt FFh try all valid adapters 00h-05h try adapter 0-5 explicitly Return: CF clear if successful CF set on error AX = error code Notes: call with ES:DI -> two nulls to disable auto-login SeeAlso: AX=5FB7h ----------215FB7----------------------------- INT 21 - LANtastic v4.1+ - GET AUTO-LOGIN DEFAULTS AX = 5FB7h ES:DI -> pointer to 16-byte buffer to store ASCIZ auto-login user name Return: CF clear if successful DL = adapter number used for default login attempt FFh all valid adapters will be tried 00h-05h specified adapter will be tried explicitly CF set on error AX = error code SeeAlso: AX=5F81h,AX=5FB6h ----------215FC0----------------------------- INT 21 - LANtastic - GET TIME FROM SERVER AX = 5FC0h DS:SI -> time block (see below) ES:DI -> ASCIZ server name to get time from Return: CF clear if successful CF set on error AX = error code Format of time block: Offset Size Description 00h WORD year 02h BYTE day 03h BYTE month 04h BYTE minutes 05h BYTE hour 06h BYTE hundredths of second 07h BYTE second ----------215FC8----------------------------- INT 21 - LANtastic v4.0+ - SCHEDULE SERVER SHUTDOWN AX = 5FC8h ES:DI -> ASCIZ server name in form "\\machine" DS:SI -> ASCIZ reason string (80 characters) CX = number of minutes until shutdown (0 = immediate) DX = option flags (see below) bit 0: auto reboot 1: do not notify users 2: halt after shutdown 3: shutdown due to power fail (used by UPS) bits 4-7: reserved bits 8-14: user definable bit 15: reserved Return: CF clear if successful CF set on error AX = error code SeeAlso: AH=5FC9h ----------215FC9----------------------------- INT 21 - LANtastic v4.0+ - CANCEL SERVER SHUTDOWN AX = 5FC9h ES:DI -> ASCIZ server name in form "\\machine" Return: CF clear if successful CF set on error AX = error code Note: you must have the "S" privilege to use this call SeeAlso: AH=5FC8h ----------215FCA----------------------------- INT 21 - LANtastic v4.0+ - STUFF SERVER KEYBOARD BUFFER AX = 5FCAh ES:DI -> ASCIZ server name in form "\\machine" DS:SI -> ASCIZ string to stuff (128 bytes) Return: CF clear if successful CF set on error AX = error code Note: you must have the "S" privilege to use this call maximum number of characters that can be stuffed is determined by the server's RUN BUFFER SIZE. ----------215FCB----------------------------- INT 21 - LANtastic v4.1+ - TERMINATE USER AX = 5FCBh ES:DI -> ASCIZ server name in form "\\machine" DS:SI -> blank-padded username. A null char = wildcard. DS:DX -> blank-padded machine name. A null char = wildcard. CX = minutes until termination (0 = immediate) Return: CF clear if successful CF set on error AX = error code Note: you must have the "S" privilege to use this call you cannot log yourself out using this call SeeAlso: AX=5F82h ----------215FCC----------------------------- INT 21 - LANtastic v4.1+ - GET/SET SERVER CONTROL BITS AX = 5FCCh ES:DI -> ASCIZ server name in form "\\machine" CX = bit values (value of bits you want to set) See below. DX = bit mask (bits you are interested in, 0 = get only) See below. Return: CF clear if successful CX = control bits after call bit 0: disable logins CF set on error AX = error code Note: you must have the "S" privilege to SET, anyone can GET. ----------215FCD----------------------------- INT 21 - LANtastic v4.1+ - FLUSH SERVER CACHES AX = 5FCDh ES:DI -> ASCIZ server name in form "\\machine" Return: CF clear if successful CF set on error AX = error code Note: you must have the "S" privilege to use this call. ----------215FD0----------------------------- INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT AX = 5FD0h Return: CF clear if successful CX = redirected printer timeout in clock ticks of 55ms 0000h if timeout disabled CF set on error AX = error code SeeAlso: AX=5FD1h ----------215FD1----------------------------- INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT AX = 5FD1h CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts Return: CF clear if successful CF set on error AX = error code SeeAlso: AX=5FD0h ----------215FE0----------------------------- INT 21 - LANtastic - GET DOS SERVICE VECTOR AX = 5FE0h Return: CF clear if successful ES:BX -> current FAR service routine CF set on error AX = error code Note: the service routine is called by the LANtastic redirector whenever DOS may safely be called, permitting external TSRs and drivers to hook into LANtastic's DOS busy flag checking SeeAlso: AX=5FE1h,INT 28,INT 2A/AH=84h ----------215FE1----------------------------- INT 21 - LANtastic - SET DOS SERVICE VECTOR AX = 5FE1h ES:BX -> FAR routine to call when DOS services are available Return: CF clear if successful CF set on error AX = error code Note: new handler must chain to previous handler as its first action SeeAlso: AX=5FE0h ----------215FE2----------------------------- INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR AX = 5FE2h Return: CF clear if successful ES:BX -> current FAR message service routine CF set on error AX = error code SeeAlso: AX=5FE3h ----------215FE3----------------------------- INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR AX = 5FE3h ES:BX -> FAR routine for processing network messages Return: CF clear if successful CF set on error AX = error code Notes: handler must chain to previous handler as its first action on invocation, ES:BX -> just-received message SeeAlso: AX=5FE2h ----------2160------------------------------- INT 21 - DOS 3.0+ - CANONICALIZE FILENAME OR PATH AH = 60h DS:SI -> ASCIZ filename or path ES:DI -> 128-byte buffer for canonicalized name Return: CF set on error AX = error code 02h invalid component in directory path or drive letter only 03h malformed path or invalid drive letter ES:DI buffer unchanged CF clear if successful AH = 00h AL = destroyed (00h or 5Ch or last char of current dir on drive) buffer filled with qualified name of form D:\PATH\FILE.EXT or \\MACHINE\PATH\FILE.EXT Notes: the input path need not actually exist letters are uppercased, forward slashes converted to backslashes, asterisks converted to appropriate number of question marks, and file and directory names are truncated to 8.3 if necessary. '.' and '..' in the path are resolved filespecs on local drives always start with "d:", those on network drives always start with "\\" if path string is on a JOINed drive, the returned name is the one that would be needed if the drive were not JOINed; similarly for a SUBSTed, ASSIGNed, or network drive letter. Because of this, it is possible to get a qualified name that is not legal under the current combination of SUBSTs, ASSIGNs, JOINs, and network redirections under DOS 3.3 through 5.00, a device name is translated differently if the device name does not have an explicit directory or the directory is \DEV (relative directory DEV from the root directory works correctly). In these cases, the returned string consists of the unchanged device name and extension appended to the string X:/ (forward slash instead of backward slash as in all other cases) where X is the default or explicit drive letter. functions which take pathnames require canonical paths if invoked via INT 21/AX=5D00h supported by OS/2 v1.1 compatibility box NetWare 2.1x does not support characters with the high bit set; early versions of NetWare 386 support such characters except in this call. In addition, NetWare returns error code 3 for the path "X:\"; one should use "X:\." instead. for DOS 3.3-5.0, the input and output buffers may be the same, as the canonicalized name is built in an internal buffer and copied to the specified output buffer as the very last step SeeAlso: INT 2F/AX=1123h,INT 2F/AX=1221h ----------2161------------------------------- INT 21 - DOS 3+ - UNUSED AH = 61h Return: AL = 00h Note: this function does nothing and returns immediately ----------2162------------------------------- INT 21 - DOS 3+ - GET CURRENT PSP ADDRESS AH = 62h Return: BX = segment of PSP for current process Notes: under DOS 3+, this function does not use any of the DOS-internal stacks and may thus be called at any time, even during another INT 21h call the current PSP is not necessarily the caller's PSP identical to the undocumented AH=51h SeeAlso: AH=50h,AH=51h ----------216300----------------------------- INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS AX = 6300h Return: CF clear if successful DS:SI -> lead byte table (see below for format) CF set on error AX = error code (01h) (see AH=59h) Notes: does not preserve any registers other than SS:SP the US version of MSDOS 3.30 treats this as an unused function, setting AL=00h and returning immediately SeeAlso: AX=6301h,AH=07h,AH=08h,AH=0Bh Format of lead byte table entry: Offset Size Description 00h 2 BYTEs low/high ends of a range of leading byte of double-byte chars 02h 2 BYTEs low/high ends of a range of leading byte of double-byte chars ... N 2 BYTEs 00h,00h end flag ----------216300----------------------------- INT 21 - Asian DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD TABLE AX = 6300h Return: AL = error code 00h successful DS:SI -> DBCS table (see below) all other registers except CS:IP and SS:SP destroyed FFh not supported Notes: probably identical to AH=63h/AL=00h for DOS 2.25 the US version of MSDOS 3.30 treats this as an unused function, setting AL=00h and returning immediately the US version of DOS 4.0+ accepts this function, but returns an empty list SeeAlso: AX=6300h"DOS 2.25" Format of DBCS table: Offset Size Description 00h 2 BYTEs low/high ends of a range of leading byte of double-byte chars 02h 2 BYTEs low/high ends of a range of leading byte of double-byte chars ... N 2 BYTEs 00h,00h end flag ----------216301----------------------------- INT 21 - DOS 2.25, Asian DOS 3.2+ - SET KOREAN (HONGEUL) INPUT MODE AX = 6301h DL = new mode 00h return only full characters on DOS keyboard input functions 01h return partially-formed characters also Return: AL = status 00h successful FFh invalid mode SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6302h ----------216302----------------------------- INT 21 - DOS 2.25, Asian DOS 3.2+ - GET KOREAN (HONGEUL) INPUT MODE AX = 6302h Return: AL = status 00h successful DL = current input mode 00h return only full characters 01h return partial characters FFh not supported SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6301h ----------2164------------------------------- INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG AH = 64h AL = flag 00h (default) call device driver function 5 (non-dest read) before INT 21/AH=01h,08h,0Ah nonzero don't call driver function 5 Return: nothing Notes: called by DOS 3.3+ PRINT.COM does not use any of the DOS-internal stacks and is thus fully reentrant SeeAlso: AH=01h,AH=08h,AH=0Ah,AX=5D06h ----------2164--BX0000----------------------- INT 21 - OS/2 v2.0 Virtual DOS Machine - GET/SET TASK TITLE AH = 64h BX = 0000h CX = 636Ch DX = function 0000h enable automatic title switch on INT 21/AH=4Bh 0001h set session title ES:DI -> new ASCIZ title or "" to restore original title 0002h get session title ES:DI -> buffer for current title Return: buffer filled (single 00h if title never changed) SeeAlso: INT 15/AH=12h/BH=05h,INT 21/AH=4Bh ----------2165------------------------------- INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION AH = 65h AL = info ID 01h get general internationalization info 02h get pointer to uppercase table 04h get pointer to filename uppercase table 05h get pointer to filename terminator table 06h get pointer to collating sequence table 07h (DOS 4+) get pointer to Double-Byte Character Set table BX = code page (-1=global code page) DX = country ID (-1=current country) ES:DI -> country information buffer (see below) CX = size of buffer (>= 5) Return: CF set on error AX = error code (see AH=59h) CF clear if succesful CX = size of country information returned ES:DI -> country information Notes: AL=05h appears to return same info for all countries and codepages; it has been documented for DOS 5.0, but was undocumented in ealier versions NLSFUNC must be installed to get info for countries other than the default subfunctions 02h and 04h are identical under OS/2 SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h Format of country information: Offset Size Description 00h BYTE info ID ---if info ID = 01h--- 01h WORD size 03h WORD country ID 05h WORD code page 07h 34 BYTEs country-dependent info (see AH=38h) ---if info ID = 02h--- 01h DWORD pointer to uppercase table (see below) ---if info ID = 04h--- 01h DWORD pointer to filename uppercase table (see below) ---if info ID = 05h--- 01h DWORD pointer to filename character table (see below) ---if info ID = 06h--- 01h DWORD pointer to collating table (see below) ---if info ID = 07h (DOS 4+)--- 01h DWORD pointer to DBCS lead byte table (see below) Format of uppercase table: Offset Size Description 00h WORD table size 02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh Format of collating table: Offset Size Description 00h WORD table size 02h 256 BYTEs values used to sort characters 00h to FFh Format of filename terminator table: Offset Size Description 00h WORD table size (not counting this word) 02h BYTE ??? (01h for MSDOS 3.30-5.00) 03h BYTE lowest permissible character value for filename 04h BYTE highest permissible character value for filename 05h BYTE ??? (00h for MSDOS 3.30-5.00) 06h BYTE first excluded character in range \ all characters in this 07h BYTE last excluded character in range / range are illegal 08h BYTE ??? (02h for MSDOS 3.30-5.00) 09h BYTE number of illegal (terminator) characters 0Ah N BYTES characters which terminate a filename: ."/\[]:|<>+=;, Note: partially documented for DOS 5.0, but undocumented for earlier versions Format of filename uppercase table: Offset Size Description 00h WORD table size 02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh Format of DBCS lead byte table: Offset Size Description 00h WORD length 02h 2N BYTEs start/end for N lead byte ranges WORD 0000h (end of table) ----------2165------------------------------- INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION AH = 65h AL = function 20h capitalize character DL = character to capitalize Return: DL = capitalized character 21h capitalize string DS:DX -> string to capitalize CX = length of string 22h capitalize ASCIZ string DS:DX -> ASCIZ string to capitalize Return: CF set on error AX = error code (see AH=59h) CF clear if successful Note: these calls have been documented for DOS 5+, but were undocumented in DOS 4.x. ----------216523----------------------------- INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE AX = 6523h DL = character DH = second character of double-byte character (if applicable) Return: CF set on error CF clear if successful AX = type 00h no 01h yes 02h neither yes nor no ----------2165------------------------------- INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION AH = 65h AL = function A0h capitalize filename character DL = character to capitalize Return: DL = capitalized character A1h capitalize counted filename string DS:DX -> filename string to capitalize CX = length of string A2h capitalize ASCIZ filename DS:DX -> ASCIZ filename to capitalize Return: CF set on error AX = error code (see AH=59h) CF clear if successful Note: nonfunctional in DOS 4.00 through 5.00 due to a bug (the code sets a pointer depending on the high bit of AL, but doesn't clear the bit before branching by function number). ----------216601----------------------------- INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE AX = 6601h Return: CF set on error AX = error code (see AH=59h) CF clear if successful BX = active code page (see AX=6602h) DX = system code page SeeAlso: AX=6602h ----------216602----------------------------- INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE AX = 6602h BX = active code page 437 US 850 Multilingual 852 Slavic/Latin II (DOS 5+) 857 Turkish 860 Portugal 861 Iceland 863 Canada (French) 865 Norway/Denmark DX = system code page (active page at boot time) Return: CF set on error AX = error code (see AH=59h) CF clear if successful SeeAlso: AX=6601h ----------2167------------------------------- INT 21 - DOS 3.3+ - SET HANDLE COUNT AH = 67h BX = size of new file handle table for process Return: CF clear if successful CF set on error AX = error code (see AH=59h) Notes: if BX <= 20, no action is taken if the handle limit has not yet been increased, and the table is copied back into the PSP if the limit is currently > 20 handles for file handle tables of > 20 handles, DOS 3.30 never reuses the same memory block, even if the limit is being reduced; this can lead to memory fragmentation as a new block is allocated and the existing one freed only the first 20 handles are copied to child processes in DOS 3.3 BUG: the original release of DOS 3.30 allocates a full 64K for the handle table on requests for an even number of handles SeeAlso: AH=26h ----------2168------------------------------- INT 21 - DOS 3.3+ - "FFLUSH" - COMMIT FILE AH = 68h BX = file handle Return: CF clear if successful all data still in DOS disk buffers is written to disk immediately, and the file's directory entry is updated CF set on error AX = error code (see AH=59h) SeeAlso: AX=5D01h,AH=6Ah,INT 2F/AX=1107h ----------2169------------------------------- INT 21 U - DOS 4.0 internal - GET/SET DISK SERIAL NUMBER AH = 69h AL = subfunction 00h get serial number 01h set serial number BL = drive (0=default, 1=A, 2=B, etc) DS:DX -> disk info (see below) Return: CF set on error AX = error code (see AH=59h) CF clear if successful AX destroyed (AL = 00h) buffer filled with appropriate values from extended BPB (AL = 01h) extended BPB on disk set to values from buffer Notes: does not generate a critical error; all errors are returned in AX error 0005h given if no extended BPB on disk does not work on network drives (error 0001h) buffer after first two bytes is exact copy of bytes 27h thru 3Dh of extended BPB on disk SeeAlso: AX=440Dh Format of disk info: Offset Size Description 00h WORD info level (zero) 02h DWORD disk serial number (binary) 06h 11 BYTEs volume label or "NO NAME " if none present 11h 8 BYTEs (AL=00h only) filesystem type--string "FAT12 " or "FAT16 " ----------2169------------------------------- INT 21 - DR-DOS 5.0 - NULL FUNCTION AH = 69h Return: AL = 00h SeeAlso: AH=18h ----------216969----------------------------- INT 21 - VIRUS - "Rape-747" - INSTALLATION CHECK AX = 6969h Return: AX = 0666h if resident SeeAlso: AX=58CCh,AH=76h"VIRUS" ----------216A------------------------------- INT 21 U - DOS 4+ - COMMIT FILE AH = 6Ah BX = file handle Return: CF clear if successful AH = 68h CF set on error AX = error code (06h) (see AH=59h) Note: identical to AH=68h in DOS 5.0; not known whether this is the case in DOS 4.x SeeAlso: AH=68h ----------216B------------------------------- INT 21 U - DOS 4.0 internal - ??? AH = 6Bh AL = subfunction 00h ??? DS:SI -> Current Directory Structure??? CL = drive (1=A:) 01h ??? DS:SI -> ??? CL = file handle??? 02h ??? DS:SI -> Current Directory Structure??? DI = ??? CX = drive (1=A:) Return: CF set on error AX = error code (see INT 21/AH=59h) CF clear if successful Note: passed through to INT 2F/AX=112Fh with AX on top of stack SeeAlso: AH=6Bh"DOS 5",INT 2F/AX=112Fh ----------216B------------------------------- INT 21 U - DOS 5.0 - NULL FUNCTION AH = 6Bh Return: AL = 00h Note: this function does nothing and returns immediately SeeAlso: AH=6Bh"DOS 4" ----------216C00----------------------------- INT 21 - DOS 4+ - EXTENDED OPEN/CREATE AX = 6C00h BL = open mode as in AL for normal open (INT 21/AH=3Dh) bit 7: inheritance bits 4-6: sharing mode bit 3 reserved bits 0-2: access mode BH = flags bit 6 = auto commit on every write bit 5 = return error rather than doing INT 24h CX = create attribute bits 6-15 reserved bit 5: archive bit 4: reserved bit 3: volume label bit 2: system bit 1: hidden bit 0: readonly DL = action if file exists/does not exists bits 7-4 action if file does not exist 0000 fail 0001 create bits 3-0 action if file exists 0000 fail 0001 open 0010 replace/open DH = 00h (reserved) DS:SI -> ASCIZ file name Return: CF set on error AX = error code (see AH=59h) CF clear if successful AX = file handle CX = 1 file opened 2 file created 3 file replaced Note: the PC LAN Program only supports DL=01h, DL=10h/sharing=compatibility, and DL=12h SeeAlso: AH=3Ch,AH=3Dh ----------217070BX6060----------------------- INT 21 - PCW Weather Card interface - GET DATA SEGMENT AX = 7070h BX = 6060h CX = 7070h DX = 7070h SX = 7070h DX = 7070h Return: AX = segment of data structure Notes: the data structure is at offset 516 from this segment. the update byte is at offset 514 from this segment. Updates are once per second while this byte is nonzero and it is decremented once per second. While this byte is 0 updates are once per minute. SeeAlso: AX=7070h/BX=7070h Format of data structure: Offset Type Description 00h WORD hour 02h WORD minute 04h WORD second 06h WORD day 08h WORD month 0Ah WORD year 0Ch WORD ??? 0Eh WORD relative barometric pressure (in 1/100 inches) 10h WORD ??? 12h WORD ??? 14h WORD temperature 1 (in 1/10 degrees F) 16h WORD temperature 1 lowest (in 1/10 degrees F) 18h WORD temperature 1 highest (in 1/10 degrees F) 1Ah WORD temperature 2 (in 1/10 degrees F) 1Ch WORD temperature 2 lowest (in 1/10 degrees F) 1Eh WORD temperature 2 highest (in 1/10 degrees F) 20h WORD wind speed (in MPH) 22h WORD average of 60 wind speed samples (in MPH) 24h WORD highest wind speed (in MPH) 26h WORD wind chill factor (in 1/10 degrees F) 28h WORD lowest wind chill factor (in 1/10 degrees F) 2Ah WORD ??? 2Ch WORD wind direction (in degrees) 2Eh WORD accumulated daily rainfall (in 1/10 inches) 30h WORD accumulated annual rainfall (in 1/10 inches) ----------217070BX7070----------------------- INT 21 - PCW Weather Card interface - INSTALLATION CHECK AX = 7070h BX = 7070h CX = 7070h DX = 7070h SX = 7070h DX = 7070h Return: AX = 0070h BX = 0070h CX = 0070h DX = 0070h SX = 0070h DX = 0070h SeeAlso: AX=7070h/BX=6060h,AX=8080h ----------2176------------------------------- INT 21 - VIRUS - "Klaeren"/"Hate" - INSTALLATION CHECK AH = 76h Return: AL = 48h if resident SeeAlso: AX=6969h,AX=7700h"VIRUS" ----------217761----------------------------- INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK AX = 7761h ('wa') Return: AX = 6177h Note: WATCH.COM is part of the "TSR" package by TurboPower Software SeeAlso: INT 16/AX=7761h ----------217700----------------------------- INT 21 - VIRUS - "Growing Block" - INSTALLATION CHECK AX = 7700h Return: AX = 0920h if resident SeeAlso: AH=76h,AH=7Fh ----------217F------------------------------- INT 21 - VIRUS - "Squeaker" - INSTALLATION CHECK AH = 7Fh Return: AH = 80h if resident SeeAlso: AX=7700h,AH=83h"VIRUS" --------------------------------------------- Interrupt List, part 4 of 7 This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown ----------2180------------------------------- INT 21 U - European MSDOS 4.0 - EXECUTE PROGRAM IN BACKGROUND AH = 80h DS:DX -> ASCIZ full program name ES:BX -> parameter block (as for AX=4B00h) Return: CF clear if successful AX = CSID CF set on error AX = error code (see AH=59h) Note: this function is called by the DETACH command SeeAlso: AX=8700h ----------218080----------------------------- INT 21 - PCW Weather Card interface - UNINSTALL PCW.COM AND FREE MEMORY AX = 8080h Return: ??? SeeAlso: AX=7070h/BX=7070h ----------2181------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 81h ??? Return: ??? ----------2182------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 82h ??? Return: ??? ----------2183------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 83h ??? Return: ??? ----------2183------------------------------- INT 21 - VIRUS - "SVC" - INSTALLATION CHECK AH = 83h Return: DX = 1990h if resident SeeAlso: AH=76h,AH=84h"VIRUS" ----------2184------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 84h ??? Return: ??? ----------2184------------------------------- INT 21 - VIRUS - "SVC 5.0" or "SVC 6.0" - INSTALLATION CHECK AH = 84h Return: DX = 1990h if resident BH = version number (major in high nybble, minor in low) SeeAlso: AH=83h"VIRUS",AH=89h"VIRUS" ----------2185------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 85h ??? Return: ??? ----------2186------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 86h ??? Return: ??? ----------218700----------------------------- INT 21 U - European DOS 4.0 - GET PID??? AX = 8700h Return: AX = PID if AL nonzero BX = ??? CX = ??? Notes: called by MS C v5.1 getpid() function this function apparently must return AX=0001h for INT 21/AH=80h to succeed SeeAlso: AH=62h,AH=80h ----------2188------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 88h ??? Return: ??? ----------2189------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 89h ??? Return: ??? Note: reportedly called by Microsoft C 4.0 startup code ----------2189------------------------------- INT 21 - VIRUS - "Vriest" - INSTALLATION CHECK AH = 89h Return: AX = 0123h if resident SeeAlso: AH=84h"VIRUS",AH=90h"VIRUS" ----------218A------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 8Ah ??? Return: ??? ----------218B------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 8Bh ??? Return: ??? ----------218C------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 8Ch ??? Return: ??? ----------218D------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 8Dh ??? Return: ??? ----------218E------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 8Eh ??? Return: ??? ----------218F------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 8Fh ??? Return: ??? ----------2190------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 90h ??? Return: ??? ----------2190------------------------------- INT 21 - VIRUS - "Carioca" - INSTALLATION CHECK AH = 90h Return: AH = 01h if resident SeeAlso: AH=89h"VIRUS",AX=9753h"VIRUS" ----------2191------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 91h ??? Return: ??? ----------2192------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 92h ??? Return: ??? ----------2193------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 93h ??? Return: ??? ----------2194------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 94h ??? Return: ??? ----------2195------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 95h ??? Return: ??? ----------2196------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 96h ??? Return: ??? ----------2197------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 97h ??? Return: ??? ----------219753----------------------------- INT 21 - VIRUS - "Nina" - INSTALLATION CHECK AX = 9753h Return: never (executes original program) if virus resident SeeAlso: AH=90h"VIRUS",AX=A1D5h"VIRUS" ----------2198------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 98h ??? Return: ??? ----------2199------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 99h ??? Return: ??? ----------219A------------------------------- INT 21 U - European MSDOS 4.0 - ??? AH = 9Ah ??? Return: ??? ----------21A0------------------------------- INT 21 - Attachmate Extra - GET 3270 DISPLAY STATE AH = A0h Return: AL = display status bit 7 : 0=windowed, 1=enlarged bits 6-3: current screen profile number 0-9 bits 2-0: active window number 0=PC, 1-4=host B-E, 5-6=notepad F-G BX = host window status bit 15: reserved bit 14: 0=host E window installed, 1=not bit 13: 0=host E terminal on, 1=off bit 12: 0=host E window displayed, 1=not bit 11: reserved bit 10: 0=host D window installed, 1=not bit 9: 0=host D terminal on, 1=off bit 8: 0=host D window displayed, 1=not bit 7: reserved bit 6: 0=host C window installed, 1=not bit 5: 0=host C terminal on, 1=off bit 4: 0=host C window displayed, 1=not bit 3: reserved bit 2: 0=host B window installed, 1=not bit 1: 0=host B terminal on, 1=off bit 0: 0=host B window displayed, 1=not Note: Attachmate Extra is a 3270 emulator by Attachmate Corporation SeeAlso: AH=A1h ----------21A1------------------------------- INT 21 - Attachmate Extra - SET 3270 DISPLAY STATE AH = A1h AL = set status byte bit 7 : 0=windowed, 1=enlarged bits 6-3: current screen profile number 0-9 bits 2-0: active window number 0=PC, 1-4=host B-E, 5-6=notepad F-G SeeAlso: AH=A0h,AH=A2h ----------21A1D5----------------------------- INT 21 - VIRUS - "789"/"Filehider" - INSTALLATION CHECK AX = A1D5h Return: AX = 900Dh if resident SeeAlso: AX=9753h,AX=A55Ah ----------21A2------------------------------- INT 21 - Attachmate Extra - SET HOST WINDOW STATE AH = A2h AL = set status byte bit 7 : 0=power off, 1=power on bit 6 : 0=not installed, 1=installed bits 5-3: reserved bits 2-0: window number 1-4=host B-E SeeAlso: AH=A1h ----------21A3------------------------------- INT 21 - Attachmate Extra - SEND KEYSTROKES TO HOST WINDOW AH = A3h AL = window number (1-4=host B-E) CX = 0001h DS:BX -> keystroke buffer DL = zero if keystroke buffer contains host function code, non-zero if keystroke buffer contains ASCII character Return: CX = zero if character sent, non-zero if not BX incremented if CX=0 Values for host function code: 00h=reserved 10h=PF16 20h=Clear 30h=SysRq 01h=PF1 11h=PF17 21h=Print 31h=ErInp 02h=PF2 12h=PF18 22h=Left 32h=ErEof 03h=PF3 13h=PF19 23h=Right 33h=Ident 04h=PF4 14h=PF20 24h=Up 34h=Test 05h=PF5 15h=PF21 25h=Down 35h=Reset 06h=PF6 16h=PF22 26h=Home 36h=DevCncl 07h=PF7 17h=PF23 27h=Fast Left 37h=Dup 08h=PF8 18h=PF24 28h=Fast Right 38h=FldMark 09h=PF9 19h=Alt on 29h=Bksp 39h=Enter 0Ah=PF10 1Ah=Alt off 2Ah=Insert 3Ah=CrSel 0Bh=PF11 1Bh=Shift on 2Bh=Delete 0Ch=PF12 1Ch=Shift off 2Ch=Backtab 0Dh=PF13 1Dh=PA1 2Dh=Tab 0Eh=PF14 1Eh=PA2 2Eh=Newline 0Fh=PF15 1Fh=PA3 2Fh=Attn ----------21A4------------------------------- INT 21 - Attachmate Extra - GET HOST WINDOW BUFFER ADDRESS AH = A4h AL = window number (1-4=host B-E) Return: DS:BX -> 3270 display buffer SeeAlso: AH=A5h,AH=B8h ----------21A5------------------------------- INT 21 - Attachmate Extra - GET HOST WINDOW CURSOR POSITION AH = A5h AL = window number (1-4=host B-E) Return: BX = cursor position (80 * row + column, where 0:0 is upper left) Note: if the host window is configured with the Extended Attribute (EAB) feature, multiply the cursor position by 2 to obtain the byte offset into the display buffer SeeAlso: AH=A4h ----------21A55A----------------------------- INT 21 - VIRUS - "Eddie-2" - INSTALLATION CHECK AX = A55Ah Return: AX = 5AA5h if resident SeeAlso: AX=A1D5h,AX=AA00h ----------21AA00----------------------------- INT 21 - VIRUS - "Blinker" - INSTALLATION CHECK AX = AA00h Return: AX = 00AAh if resident SeeAlso: AX=A55Ah,AX=AA03h ----------21AA03----------------------------- INT 21 - VIRUS - "Backtime" - INSTALLATION CHECK AX = AA03h Return: AX = 03AAh if resident SeeAlso: AX=AA00h,AH=ABh ----------21AB------------------------------- INT 21 - VIRUS - "600" or "Voronezh"-family - INSTALLATION CHECK AH = ABh Return: AX = 5555h if resident SeeAlso: AX=AA03h,AX=BBBBh"VIRUS" ----------21AF------------------------------- INT 21 - Attachmate Extra - GET TRANSLATE TABLE ADDRESS AH = AFh Return: DS:BX -> translate tables (see below) Format of translate tables: Offset Size Description 00h 256 BYTEs ASCII to 3270 buffer code translate table 100h 256 BYTEs 3270 buffer code to ASCII translate table 200h 256 BYTEs 3270 buffer code to EBCDIC translate table 300h 256 BYTEs EBCDIC to 3270 buffer code translate table ----------21B5------------------------------- INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL AH = B5h AL = subfunction 03h get task mode Return: AH = 00h AL = current task mode byte 04h get task mode pointer Return: ES:BX -> task mode byte Notes: the task mode byte specifies how task cleanup should be performed, but is declared to be version-dependent allows a program to disable the automatic cleanup for programs managing task swapping, etc. Values for task mode byte in version 3.01: 00h-03h reserved 04h no task cleanup ----------21B6------------------------------- INT 21 - Novell NetWare SFT Level II - EXTENDED FILE ATTRIBUTES AH = B6h AL = subfunction 00h get extended file attributes 01h set extended file attributes CL = attributes bits 2-0: search mode (executables only) 000 none (use shell's default search) 001 search on all opens without path 010 do not search 011 search on read-only opens without path 100 reserved 101 search on all opens 110 reserved 111 search on all read-only opens 3: reserved 4: transaction tracking file 5: indexing file 6: read audit (to be implemented) 7: write audit (to be implemented) DS:DX -> ASCIZ pathname Return: CF set on error AL = error code 8Ch caller lacks privileges FFh file not found CL = current extended file attributes SeeAlso: AX=4300h ----------21B8------------------------------- INT 21 - Novell Advanced NetWare 2.0+ - PRINT JOBS AH = B8h AL = subfunction 00h get default print job flags 01h set default capture flags (see below) 02h get specific capture flags 03h set specific print job flags 04h get default local printer 05h set default local printer 06h set capture print queue 07h set capture print job 08h get banner user name 09h set banner user name CX = buffer size ES:BX -> buffer Return: none Format of capture flags table: Offset Size Description 00h BYTE status (used internally, should be set to 00h) 01h BYTE print flags bit 2: print capture file if interrupted by loss of connection 3: no automatic form feed after print job 6: printing control sequences interpreted by print service 7: print banner page before capture file 02h BYTE printer number on server 03h BYTE number of copies to print 04h BYTE form type required in printer (default 00h) 05h 13 BYTEs text to be placed on banner page 12h BYTE reserved 13h BYTE default local printer (00h = LPT1) 14h BYTE flush capture file on LPT close if nonzero 15h WORD timeout in clock ticks for flushing capture file on inactivity (high byte first) 0000h = never timeout 17h WORD maximum lines per page (high byte first) 19h WORD maximum characters per line (high byte first) 1Bh 13 BYTEs name of form required in printer 28h BYTE LPT capture flag 00h inactive, FFh LPT device is being captured 29h BYTE file capture flag 00h if no file specified, FFh if capturing to file 2Ah BYTE timing out (00h if no timeout in effect, FFh if timeout counter running) 2Bh WORD offset of printer setup string (high byte first) 2Dh WORD offset of printer reset string (high byte first) 2Fh BYTE target connection ID 30h BYTE capture in progress if FFh 31h BYTE print job number assigned to capture if FFh 32h WORD bindery object ID of print queue if previous byte FFh 34h WORD print job number (high byte first) ----------21B8------------------------------- INT 21 - Attachmate Extra - DISABLE HOST BUFFER UPDATES AH = B8h AL = window number (1-4=host B-E) DL = 01h Notes: only valid in CUT mode next AID keystroke (eg Enter) enables host buffer updates SeeAlso: AH=A4h ----------21BB------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - SET END OF JOB STATUS AH = BBh AL = new EOJ flag 00h disable EOJs otherwise enable EOJs Return: AL = old EOJ flag SeeAlso: AH=D6h ----------21BBBB----------------------------- INT 21 - VIRUS - "Hey You" - INSTALLATION CHECK AX = BBBBh Return: AX = 6969h SeeAlso: AH=ABh"VIRUS",AH=BEh"VIRUS" ----------21BC------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK PHYSICAL RECORD AH = BCh AL = flags bit 0: lock as well as log record 1: non-exclusive lock BX = file handle CX:DX = offset BP = timeout in timer ticks (1/18 sec) SI:DI = length of region to lock Return: AL = error code 00h successful 96h no dynamic memory for file FEh timed out FFh failed SeeAlso: AH=BDh,AH=BFh ----------21BD------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE PHYSICAL RECORD AH = BDh BX = file handle CX:DX = offset Return: AL = error code (see AH=BCh) Note: unlocks record but does not remove it from log table SeeAlso: AH=BCh,AH=BEh"Novell",AH=C0h ----------21BE------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR PHYSICAL RECORD AH = BEh BX = file handle CX:DX = offset Return: AL = error code (see AH=BCh) Note: unlocks record and removes it from log table SeeAlso: AH=BCh,AH=BDh,AH=C1h ----------21BE------------------------------- INT 21 - VIRUS - "Datalock" - INSTALLATION CHECK AH = BEh Return: AX = 1234h if resident SeeAlso: AX=BBBBh,AX=BE00h ----------21BE00----------------------------- INT 21 - VIRUS - "USSR-1049" - INSTALLATION CHECK AX = BE00h CF set Return: CF clear if resident SeeAlso: AH=BEh"VIRUS",AH=C0h"VIRUS" ----------21BF------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK RECORD (FCB) AH = BFh AL = flags bit 0: lock as well as log record 1: non-exclusive lock DS:DX -> opened FCB (see AH=0Fh) BX:CX = offset BP = lock timeout in timer ticks (1/18 sec) SI:DI = length Return: AL = error code (see AH=BCh) SeeAlso: AH=BCh,AH=C0h"Novell",AH=C2h"Novell" ----------21C0------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE RECORD (FCB) AH = C0h DS:DX -> FCB (see AH=0Fh) BX:CX = offset Return: AL = error code (see AH=BCh) Note: unlocks record but does not remove it from log table SeeAlso: AH=BDh,AH=BFh,AH=C1h"Novell",AH=C3h ----------21C0------------------------------- INT 21 - VIRUS - "Slow"/"Zerotime", "Solano" - INSTALLATION CHECK AH = C0h Return: AX = 0300h if "Slow"/"Zerotime" resident AX = 1234h if "Solano" resident SeeAlso: AX=BE00h,AH=C1h"VIRUS",AX=C301h"VIRUS" ----------21C1------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR RECORD (FCB) AH = C1h DS:DX -> opened FCB (see AH=0Fh) BX:CX = offset Return: AL = error code (see AH=BCh) Note: unlocks record and removes it from log table SeeAlso: AH=BEh,AH=C0h"Novell",AH=C4h ----------21C1------------------------------- INT 21 - VIRUS - "Solano" - ??? AH = C1h ??? Return: ??? SeeAlso: AH=C0h"VIRUS" ----------21C2------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - LOCK PHYSICAL RECORD SET AH = C2h AL = flags bit 1: non-exclusive lock BP = lock timeout in timer ticks (1/18 sec) Return: AL = error code 00h successful FEh timed out FFh failed SeeAlso: AH=BFh,AH=C3h ----------21C2------------------------------- INT 21 - VIRUS - "Scott's Valley" - ??? AH = C2h ??? Return: ??? SeeAlso: AH=C0h"VIRUS" ----------21C3------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE PHYSICAL RECORD SET AH = C3h Return: AL = error code Note: unlocks but does not remove from log table SeeAlso: AH=C0h,AH=C2h"Novell",AH=C4h ----------21C301DXF1F1----------------------- INT 21 - VIRUS - "905"/"Backfont" - INSTALLATION CHECK AX = C301h DX = F1F1h Return: DX = 0E0Eh if resident SeeAlso: AH=C0h"VIRUS",AX=C500h"VIRUS" ----------21C4------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR PHYSICAL RECORD SET AH = C4h Return: AL = error code Note: unlocks and removes from log table SeeAlso: AH=C1h ----------21C5------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - SEMAPHORES AH = C5h AL = subfunction 00h open semaphore DS:DX -> semaphore name (counted string) CL = initial value Return: CX:DX = semaphore handle BL = open count 01h examine semaphore Return: CX = semaphore value (sign extended) DL = open count 02h wait on semaphore BP = timeout in timer ticks (1/18 sec) (0000h = no wait) 03h signal semaphore 04h close semaphore CX:DX = semaphore handle (except function 00h) Return: AL = error code 00h successful 01h semaphore value overflow 96h out of string space on server FEh invalid string length (AL=00h) or timeout FFh invalid initial value (AL=00h) or invalid handle ----------21C500----------------------------- INT 21 - VIRUS - "Sverdlov" - INSTALLATION CHECK AX = C500h Return: AX = 6731h if resident SeeAlso: AX=C301h"VIRUS",AH=C6h"VIRUS" ----------21C6------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - GET OR SET LOCK MODE AH = C6h AL = subfunction 00h set old "compatibility" mode 01h set new extended locks mode 02h get lock mode Return: AL = current lock mode ----------21C6------------------------------- INT 21 - VIRUS - "Socha" - INSTALLATION CHECK AH = C6h Return: AL = 55h if resident SeeAlso: AX=C500h"VIRUS",AX=C603h ----------21C603----------------------------- INT 21 - VIRUS - "Yankee" or "MLTI" - INSTALLATION CHECK AX = C603h CF set Return: CF clear if resident SeeAlso: AX=C500h"VIRUS",AX=C700h"VIRUS" ----------21C7------------------------------- INT 21 - Novell NetWare 4.0 - TRANSACTION TRACKING SYSTEM AH = C7h AL = subfunction 00h begin transaction (NetWare SFT level II) Return: AL = error code 01h end transaction (NetWare SFT level II) Return: AL = error code CX:DX = transaction reference number 02h TTS available (NetWare SFT level II) Return: AL = completion code 00h TTS not available 01h TTS available FDh TTS available but disabled 03h abort transaction (NetWare SFT level II) Return: AL = error code 04h transaction status 05h get application thresholds 06h set application thresholds 07h get workstation thresholds 08h set workstation thresholds Return: ??? ----------21C700----------------------------- INT 21 - VIRUS - "MH-757" - INSTALLATION CHECK AX = C700h Return: AL = 07h if resident SeeAlso: AX=C603h"VIRUS",AH=CBh"VIRUS" ----------21C8------------------------------- INT 21 - Novell NetWare 4.0 - BEGIN LOGICAL FILE LOCKING AH = C8h if function C6h lock mode 00h: DL = mode 00h no wait 01h wait if function C6h lock mode 01h: BP = timeout in timer ticks (1/18 sec) Return: AL = error code SeeAlso: AH=C9h ----------21C9------------------------------- INT 21 - Novell NetWare 4.0 - END LOGICAL FILE LOCKING AH = C9h Return: AL = error code SeeAlso: AH=C8h ----------21CA------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - LOG/LOCK PERSONAL FILE (FCB) AH = CAh DS:DX -> FCB (see AH=0Fh) if function C6h lock mode 01h: AL = log and lock flag 00h log file only 01h lock as well as log file BP = lock timeout in timer ticks (1/18 sec) Return: AL = error code 00h successful 96h no dynamic memory for file FEh timeout FFh failed SeeAlso: AH=CBh ----------21CA15----------------------------- INT 21 - VIRUS - "Piter" - ??? AX = CA15h ??? Return: ??? SeeAlso: AH=CCh"VIRUS" ----------21CB------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - LOCK FILE SET AH = CBh if function C6h lock mode 00h: DL = mode 00h no wait 01h wait if function C6h lock mode 01h: BP = lock timeout in timer ticks (1/18 sec) Return: AL = error code 00h successful FEh timed out FFh failed Note: attempts to lock all logged personal files SeeAlso: AH=CAh ----------21CB------------------------------- INT 21 - VIRUS - "Milous" - INSTALLATION CHECK AH = CBh Return: AL = 07h if resident SeeAlso: AX=C700h"VIRUS",AX=CB02h ----------21CB02----------------------------- INT 21 - VIRUS - "Witcode" - INSTALLATION CHECK AX = CB02h Return: AX = 02CBh if resident SeeAlso: AX=CBh"VIRUS",AH=CCh"VIRUS" ----------21CC------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE (FCB) AH = CCh DS:DX -> FCB (see AH=0Fh) Return: none Note: unlocks file, but does not remove it from the log table or close it SeeAlso: AH=CAh,AH=CDh ----------21CC------------------------------- INT 21 - VIRUS - "Westwood" - INSTALLATION CHECK AH = CCh Return: AX = 0700h if resident SeeAlso: AX=CB02h,AH=CDh"VIRUS",AX=D000h"VIRUS" ----------21CD------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE SET AH = CDh Return: none Note: unlocks all personal files, but does not remove them from log table SeeAlso: AH=CAh,AH=CCh ----------21CD------------------------------- INT 21 - VIRUS - "Westwood" - ??? AH = CDh ??? Return: ??? SeeAlso: AH=CCh"VIRUS" ----------21CE------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE (FCB) AH = CEh DS:DX -> FCB (see AH=0Fh) Return: AL = error code Note: unlocks file and removes it from log table, then closes all opened and logged occurrences SeeAlso: AH=CAh,AH=CFh,AH=EDh"Novell" ----------21CF------------------------------- INT 21 - LANstep - ??? AH = CFh ??? Return: ??? Note: LANstep is a redesign of the Waterloo Microsystems PORT network ----------21CF------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE SET AH = CFh Return: AL = 00h Note: clears all entries in personal file log table SeeAlso: AH=CAh,AH=CEh ----------21D0------------------------------- INT 21 - Novell NetWare 4.6, Banyan VINES, Alloy NTNX - LOCK LOGICAL RECORD AH = D0h DS:DX -> record string (counted string, max 100 data bytes) if function C6h lock mode 01h: (Novell, NTNX only) AL = flags bit 0: lock as well as log the record bit 1: non-exclusive lock BP = lock timeout in timer ticks (1/18 sec) Return: AL = error code 00h successful 96h no dynamic memory for file FEh timed out FFh unsuccessful SeeAlso: AH=D1h,AH=D2h ----------21D000----------------------------- INT 21 - VIRUS - "Fellowship" - INSTALLATION CHECK AX = D000h Return: BX = 1234h if resident SeeAlso: AH=CCh"VIRUS",AH=D5h"VIRUS",AX=D5AAh ----------21D1------------------------------- INT 21 - Novell NetWare 4.6, Banyan VINES, Alloy NTNX - LOCK LOGICAL RECORD SET AH = D1h if function C6h lock mode 00h: DL = mode 00h no wait 01h wait if function C6h lock mode 01h: (Novell only) BP = lock timeout in timer ticks (1/18 sec) 0000h no wait Return: AL = error code (see AH=D0h) SeeAlso: AH=D0h,AH=D3h ----------21D2------------------------------- INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - UNLOCK LOGICAL RECORD AH = D2h DS:DX -> semaphore identifier (counted string up to 100 chars long) Return: AL = error code (see AH=D0h) Note: unlocks record but does not remove it from log table SeeAlso: AH=D0h,AH=D3h ----------21D3------------------------------- INT 21 - Novell NetWare 4.0,Banyan VINES,Alloy NTNX - UNLOCK LOGICAL RECORD SET AH = D3h Return: AL = error code (see AH=D0h) Note: unlocks all semaphores logged in the semaphore set of the requesting PC SeeAlso: AH=D1h,AH=D2h ----------21D4------------------------------- INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - CLEAR LOGICAL RECORD AH = D4h DS:DX -> semaphore identifier (counted string up to 100 chars long) Return: AL = error code 00h successful FFh not successful Note: unlocks record and removes it from log table SeeAlso: AH=D5h ----------21D5------------------------------- INT 21 - Novell NetWare 4.0,Banyan VINES,Alloy NTNX - CLEAR LOGICAL RECORD SET AH = D5h Return: AL = error code (see AH=D4h) Note: unlocks and clears all semaphores associated with the semaphore set of the requesting PC SeeAlso: AH=D4h ----------21D5------------------------------- INT 21 - VIRUS - "Carfield" - ??? AH = D5h ??? Return: ??? SeeAlso: AX=D5AAh,AH=F3h"Carfield" ----------21D5AA----------------------------- INT 21 - VIRUS - "Diamond-A", "Diamond-B" - INSTALLATION CHECK AX = D5AAh Return: AX = 2A55h if "Diamond-A" resident AX = 2A03h if "Diamond-B"-family virus resident SeeAlso: AX=D000h,AH=D5h"VIRUS",AX=D5AAh/BP=DEAAh ----------21D5AABPDEAA----------------------- INT 21 - VIRUS - "Dir" - INSTALLATION CHECK AX = D5AAh BP = DEAAh Return: SI = 4321h if resident SeeAlso: AX=D5AAh,AX=DADAh"VIRUS" ----------21D6------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - END OF JOB AH = D6h Return: AL = error code Note: unlocks and clears all locked or logged files and records held by process, closes all files, resets error and lock modes, and releases all network resources SeeAlso: AH=BBh ----------21D7------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - SYSTEM LOGOUT AH = D7h Return: AL = error code ----------21D8------------------------------- INT 21 - Novell NetWare, Banyan VINES - ALLOCATE RESOURCE AH = D8h DL = resource number Return: AL = status 00h successful FFh unsucessful SeeAlso: AH=D9h ----------21D9------------------------------- INT 21 - Novell NetWare, Banyan VINES - DEALLOCATE RESOURCE AH = D9h DL = resource number Return: AL = status (see AH=D8h) SeeAlso: AH=D8h ----------21DA------------------------------- INT 21 - Novell NetWare 4.0 - GET VOLUME STATISTICS AH = DAh DL = volume number ES:DI -> reply buffer (see below) Return: AL = 00h SeeAlso: AH=36h Format of reply buffer: Offset Size Description 00h WORD sectors/block 02h WORD total blocks 04h WORD unused blocks 06h WORD total directory entries 08h WORD unused directory entries 0Ah 16 BYTEs volume name, null padded 1Ah WORD removable flag, 0000h = not removable Note: all words are big-endian (high byte first) ----------21DADA----------------------------- INT 21 - VIRUS - "Gotcha" - INSTALLATION CHECK AX = DADAh Return: AH = A5h SeeAlso: AX=D5AAh,AH=DAFEh"VIRUS" ----------21DAFE----------------------------- INT 21 - VIRUS - "Plovdiv 1.3" - INSTALLATION CHECK AX = DAFEh Return: AX = 1234h if resident SeeAlso: AX=DADAh,AH=DDh"VIRUS",AH=DEh"VIRUS" ----------21DB------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - GET NUMBER OF LOCAL DRIVES AH = DBh Return: AL = number of local disks as set by LASTDRIVE in CONFIG.SYS SeeAlso: AH=0Eh ----------21DC------------------------------- INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - GET STATION NUMBER AH = DCh Return: AL = station number 00h if NetWare not loaded or this machine is a non-dedicated server CX = station number in ASCII Note: station number only unique for those PCs connected to same semaphore service ----------21DC------------------------------- INT 21 - PCMag PCMANAGE/DCOMPRES - TURN ON/OFF AH = DCh DX = state 0000h turn on 0001h turn off SeeAlso: AX=FEDCh ----------21DD------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - SET ERROR MODE AH = DDh DL = error mode 00h invoke INT 24 on critical I/O errors 01h return NetWare extended error code in AL 02h return error code in AL, mapped to standard DOS error codes Return: AL = previous error mode ----------21DD------------------------------- INT 21 - VIRUS - "Jerusalem"-family - RELOCATE VIRUS??? AH = DDh CX = number of bytes to copy DS:SI -> source of copy ES:DI -> destination of copy Return: does not return normally; return address is caller's CS:0100h with AX = ??? SeeAlso: AH=E0h"VIRUS",AH=EEh"VIRUS" ----------21DE------------------------------- INT 21 - Novell NetWare 4.0 - SET BROADCAST MODE AH = DEh AL = broadcast mode 00h receive console and workstation broadcasts 01h receive console broadcasts only 02h receive no broadcasts 03h store all broadcasts for retrieval 04h get broadcast mode 05h disable shell timer interrupt checks 06h enable shell timer interrupt checks Return: AL = old broadcast mode ----------21DE------------------------------- INT 21 - VIRUS - "Durban" - INSTALLATION CHECK AH = DEh Return: AH = DFh if resident SeeAlso: AX=DAFEh,AX=DEDEh"VIRUS" ----------21DE------------------------------- INT 21 - VIRUS - "April 1st EXE" - ??? AH = DEh ??? Return: ??? ----------21DEDE----------------------------- INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK AX = DEDEh Return: AH = 41h if resident SeeAlso: AH=DEh"VIRUS",AH=E0h"VIRUS" ----------21DF------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - CAPTURE AH = DFh AL = subfunction 00h start LPT capture 01h end LPT capture 02h cancel LPT capture 03h flush LPT capture 04h start specific capture 05h end specific capture 06h cancel specific capture 07h flush specific capture Return: AL = error code Note: under NTNX, only AL=00h-03h are supported, and all four send a print break (see INT 17/AH=84h) ----------21E0------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - PRINT SPOOLING AH = E0h DS:SI -> request buffer ES:DI -> reply buffer subfunction in third byte of request buffer 00h spool data to a capture file 01h close and queue capture file 02h set spool flags 03h spool existing file 04h get spool queue entry 05h remove entry from spool queue 06h get printer status 09h create a disk capture file Return: AL = error code ----------21E0------------------------------- INT 21 - OS/286, OS/386 - INITIALIZE REAL PROCEDURE AH = E0h ??? Return: ??? SeeAlso: AH=E1h"OS/286" ----------21E0------------------------------- INT 21 - DoubleDOS - MENU CONTROL AH = E0h AL = subfunction 01h exchange tasks 73h resume invisible job if suspended 74h kill other job 75h suspend invisible job Note: identical to AH=F0h SeeAlso: AH=F0h"DoubleDOS" ----------21E0------------------------------- INT 21 - VIRUS - "Jerusalem", "Armagedon" - INSTALLATION CHECK AH = E0h Return: AX = 0300h if "Jerusalem" resident AX = DADAh if "Armagedon" resident SeeAlso: AH=DEh"VIRUS",AX=DEDEh"VIRUS",AX=E00Fh ----------21E00F----------------------------- INT 21 - VIRUS - "8-tunes" - INSTALLATION CHECK AX = E00Fh Return: AX = 4C31h if resident SeeAlso: AH=E0h"VIRUS",AH=E1h"VIRUS" ----------21E1------------------------------- INT 21 - Novell NetWare 4.0 - BROADCAST MESSAGES AH = E1h DS:SI -> request buffer ES:DI -> reply buffer subfunction in third byte of request buffer 00h send broadcast message 01h get broadcast message 02h disable station broadcasts 03h enable station broadcasts 04h send personal message 05h get personal message 06h open message pipe 07h close message pipe 08h check pipe status 09h broadcast to console Return: AL = error code ----------21E1------------------------------- INT 21 - OS/286, OS/386 - ISSUE REAL PROCEDURE CALL AH = E1h ??? Return: ??? Note: protected mode only??? SeeAlso: AH=E0h"OS/286",AH=E2h"OS/286",AH=E3h"OS/286",AX=250Eh,INT 31/AX=0301h ----------21E1------------------------------- INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB AH = E1h SeeAlso: AH=E2h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS" SeeAlso: AH=F1h"DoubleDOS" ----------21E1------------------------------- INT 21 - VIRUS - "Mendoza", "Fu Manchu" - INSTALLATION CHECK AH = E1h Return: AX = 0300h if "Mendoza" resident AX = 0400h if "Fu Manchu" resident SeeAlso: AX=E00Fh,AH=E4h"VIRUS" ----------21E2------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - DIRECTORY FUNCTIONS AH = E2h DS:SI -> request buffer ES:DI -> reply buffer subfunction in third byte of request buffer 00h set directory handle 01h get directory path 02h scan directory information 03h get effective directory rights 04h modify maximum rights mask 05h get volume number 06h get volume name 0Ah create directory 0Bh delete directory 0Ch scan directory for trustees 0Dh add trustee to directory 0Eh delete trustee from directory 0Fh rename directory 10h purge erased files 11h restore erased file 12h allocate permanent directory handle 13h allocate temporary directory handle 14h deallocate directory handle 15h get volume info with handle 16h allocate special temporary directory handle 17h retrieve a short base handle (Advanced NetWare 2.0) 18h restore a short base handle (Advanced NetWare 2.0) 19h set directory information Return: AL = error code ----------21E2------------------------------- INT 21 - OS/286, OS/386 - SET REAL PROCEDURE SIGNAL HANDLER AH = E2h ??? Return: ??? SeeAlso: AH=E0h"OS/286",AH=E1h"OS/286",AH=E6h"OS/286" ----------21E2------------------------------- INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB AH = E2h AL = character Return: AL = 00h successful 01h buffer full (128 characters) SeeAlso: AH=E1h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS" SeeAlso: AH=F2h"DoubleDOS" ----------21E3------------------------------- INT 21 - Novell NetWare 4.0, Alloy NTNX - CONNECTION CONTROL AH = E3h DS:SI -> request buffer ES:DI -> reply buffer subfunction in third byte of request buffer 00h login 01h change password 02h map user to station set 03h map object to number 04h map number to object 05h get station's logged information 06h get station's root mask (obsolete) 07h map group name to number 08h map number to group name 09h get memberset M of group G 0Ah enter login area 0Bh ??? 0Ch ??? 0Dh log network message 0Eh get disk utilization (Advanced NetWare 1.0) 0Fh scan file information (Advanced NetWare 1.0) 10h set file information (Advanced NetWare 1.0) 11h get file server information (Advanced NetWare 1.0) 12h ??? 13h get internet address (Advanced NetWare 1.02) 14h login to file server (Advanced NetWare 2.0) 15h get object connection numbers (Advanced NetWare 2.0) 16h get connection information (Advanced NetWare 1.0) 32h create object (Advanced NetWare 1.0) 33h delete object (Advanced NetWare 1.0) 34h rename object (Advanced NetWare 1.0) 35h get object ID (Advanced NetWare 1.0) 36h get object name (Advanced NetWare 1.0) 37h scan object (Advanced NetWare 1.0) 38h change object security (Advanced NetWare 1.0) 39h create property (Advanced NetWare 1.0) 3Ah delete property (Advanced NetWare 1.0) 3Bh change property security (Advanced NetWare 1.0) 3Ch scan property (Advanced NetWare 1.0) 3Dh read property value (Advanced NetWare 1.0) request buffer contains the property name in all caps property "IDENTIFICATION" returns the user's name 3Eh write property value (Advanced NetWare 1.0) 3Fh verify object password (Advanced NetWare 1.0) 40h change object password (Advanced NetWare 1.0) 41h add object to set (Advanced NetWare 1.0) 42h delete object from set (Advanced NetWare 1.0) 43h is object in set? (Advanced NetWare 1.0) 44h close bindery (Advanced NetWare 1.0) 45h open bindery (Advanced NetWare 1.0) 46h get bindery access level (Advanced NetWare 1.0) 47h scan object trustee paths (Advanced NetWare 1.0) C8h check console priviledges C9h get file server description strings CAh set file server date and time CBh disable file server login CCh enable file server login CDh get file server login status CEh purge all erased files CFh disable transaction tracking D0h enable transaction tracking D1h send console broadcast D2h clear connection number D3h down file server D4h get file system statistics D5h get transaction tracking statistics D6h read disk cache statistics D7h get drive mapping table D8h read physical disk statistics D9h get disk channel statistics DAh get connection's task information DBh get list of a connection's open files DCh get list of connections using a file DDh get physical record locks by connection and file DEh get physical record locks by file DFh get logical records by connection E0h get logical record information E1h get connection's semaphores E2h get semaphore information E3h get LAN driver's configuration information E5h get connection's usage statistics E6h get object's remaining disk space E7h get server LAN I/O statistics E8h get server miscellaneous information E9h get volume information Return: AL = error code Format of object property: Offset Size Description 00h 1-16 BYTEs property name N BYTE flags bit 0: property is dynamic 4: property belongs to set rather than item N+1 BYTE security levels (see below) ??? Values for security levels: 00h everyone may access 01h only logged-in clients may access 02h only clients logged-in with object's name, type, and password 03h only clients logged-in with supervisor privileges 04h only NetWare may access Note: the above values are stored in a nybble; the high half-byte is write access and the low half-byte is read access Values for object type: 00h unknown 01h user 02h user group 03h print queue 04h file server 05h job server 06h gateway 07h print server 08h archive queue 09h archive server 0Ah job queue 0Bh administration 24h remote bridge server 47h advertising print server FFh wild (used only for finding objects) ----------21E3------------------------------- INT 21 - OS/286, OS/386 - ISSUE REAL INTERRUPT AH = E3h AL = interrupt number ??? Return: ??? Note: protected mode only??? SeeAlso: AH=E1h"OS/286",INT 31/AX=0300h ----------21E3------------------------------- INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB AH = E3h AL = character Return: AL = 00h successful 01h buffer full (128 characters) SeeAlso: AH=E1h"DoubleDOS",AH=E2h"DoubleDOS",AH=E8h"DoubleDOS" SeeAlso: AH=F3h"DoubleDOS" ----------21E4------------------------------- INT 21 - Novell NetWare 4.0 - SET FILE ATTRIBUTES (FCB) AH = E4h CL = file attributes bit 0: read only 1: hidden 2: system 7: shareable DX:DX -> FCB (see AH=0Fh) Return: AL = error code SeeAlso: AX=4301h ----------21E4------------------------------- INT 21 - VIRUS - "Anarkia" - INSTALLATION CHECK AH = E4h Return: AH = 04h if resident SeeAlso: AH=E1h"VIRUS",AH=E7h"VIRUS" ----------21E400----------------------------- INT 21 - DoubleDOS - INSTALLATION CHECK/PROGRAM STATUS AX = E400h Return: AL = 00h if DoubleDOS not present = 01h if running in visible DoubleDOS partition = 02h if running in the invisible DoubleDOS partition SeeAlso: AH=E5h"DoubleDOS",AX=F400h ----------21E400----------------------------- INT 21 - OS/286, OS/386 - CHAIN TO REAL-MODE HANDLER AX = E400h ??? Return: ??? Note: protected mode only??? ----------21E402----------------------------- INT 21 - OS/286, OS/386 - SET PROTECTED-MODE TASK GATE AX = E402h ??? Return: ??? Note: protected mode only??? SeeAlso: AX=E403h ----------21E403----------------------------- INT 21 - OS/286, OS/386 - REMOVE PROTECTED-MODE TASK GATE AX = E403h ??? Return: ??? Note: protected mode only??? SeeAlso: AX=E402h ----------21E5------------------------------- INT 21 - Novell NetWare 4.0 - UPDATE FILE SIZE (FCB) AH = E5h DS:DX -> FCB (see AH=0Fh) Return: AL = error code ----------21E5------------------------------- INT 21 - DoubleDOS - OTHER PROGRAM STATUS AH = E5h Return: AL = 00h no program in other partition = 01h program in other partition is running = 02h program in other partition is suspended SeeAlso: AX=E400h"DoubleDOS",AH=F5h"DoubleDOS" ----------21E500----------------------------- INT 21 - OS/286, OS/386 - HEAP MANAGEMENT STRATEGY AX = E500h ??? Return: ??? SeeAlso: AX=E501h ----------21E501----------------------------- INT 21 - OS/286, OS/386 - FORCE HEAP COMPACTION AX = E501h ??? Return: ??? SeeAlso: AX=E500h ----------21E6------------------------------- INT 21 - Novell NetWare 4.0 - COPY FILE TO FILE (FCB) AH = E6h CX:DX = number of bytes to copy DS:SI -> source FCB ES:DI -> destination FCB Return: AL = error code ----------21E6------------------------------- INT 21 P - OS/286, OS/386 - ISSUE REAL PROCEDURE SIGNAL FROM PROTECTED MODE AH = E6h ??? Return: ??? SeeAlso: AX=E2h"OS/286" ----------21E7------------------------------- INT 21 - Novell NetWare 4.0, Banyan VINES - GET FILE SERVER DATE AND TIME AH = E7h DS:DX -> date/time buffer (see below) Return: AL = error code 00h successful FFh unsuccessful Note: also supported by Alloy NTNX SeeAlso: AH=2Ah,AH=2Ch Format of date/time buffer: Offset Size Description 00h BYTE year - 1900 01h BYTE month (1=Jan) 02h BYTE day 03h BYTE hours 04h BYTE minutes 05h BYTE seconds 06h BYTE day of week (0 = Sunday) (Novell and NTNX only) ----------21E7------------------------------- INT 21 - OS/286, OS/386 - CREATE CODE SEGMENT AH = E7h ??? Return: ??? SeeAlso: AH=E8h"OS/286",AH=E9h"OS/286",AH=EAh"OS/286" ----------21E7------------------------------- INT 21 - VIRUS - "Spyer"/"Kiev" - INSTALLATION CHECK AH = E7h Return: AH = 78h if resident SeeAlso: AH=E4h"VIRUS",AX=EC59h ----------21E8------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - SET FCB RE-OPEN MODE AH = E8h DL = mode 00h no automatic re-open 01h auto re-open Return: AL = error code ----------21E8------------------------------- INT 21 - OS/286, OS/386 - SEGMENT CREATION AH = E8h AL = type 00h data segment 01h data window/alias 02h real segment 03h real window/alias 06h shareable segment ??? Return: ??? SeeAlso: AH=E7h"OS/286",AH=E9h"OS/286" ----------21E8------------------------------- INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS AH = E8h AL = 00h set flags for this program = 01h set flags for other program DX = keyboard control flags (bit set enables, cleared disables bit 0: menu bit 1: exchange bit 2: entire keyboard enable/disable bit 3: Ctrl-C bit 4: Ctrl-PrtSc bit 5: Alt/Erase bit 6: Ctrl-Break bit 7: Ctrl-NumLock bit 8: shift-PrtSc bit 9-13: undefined bit 14: cancel key (clear keyboard buffer) bit 15: suspend key Return: DX = previous flags Notes: disabling Ctrl-PrtSc will allow the program to intercept the keystroke; disabling any of the other keystrokes disables them completely identical to AH=F8h SeeAlso: AH=E1h"DoubleDOS",AH=E2h"DoubleDOS",AH=E3h"DoubleDOS" SeeAlso: AH=F8h"DoubleDOS" ----------21E9------------------------------- INT 21 P - OS/286, OS/386 - CHANGE SEGMENTS AH = E9h AL = function 01h change code segment parameters 02h change data segment parameters 05h adjust segment limit 06h change segment base address ??? Return: ??? SeeAlso: AH=E7h"OS/286",AH=E8h"OS/286",AH=EAh"OS/286",AH=EDh"OS/286" SeeAlso: INT 31/AX=0007h,INT 31/AX=0008h ----------21E9------------------------------- INT 21 - DoubleDOS - SET TIMESHARING PRIORITY AH = E9h AL = 00h visible program gets 70%, invisible gets 30% (default) = 01h visible program gets 50%, invisible gets 50% = 02h visible program gets 30%, invisible gets 70% = 03h Top program gets 70%, bottom program gets 30% = 04h Top program gets 30%, bottom program gets 70% = 05h get current priority Return: AL = priority setting Note: identical to AH=F9h SeeAlso: AH=EAh"DoubleDOS",AH=EBh"DoubleDOS",AH=F9h"DoubleDOS" ----------21E900----------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - SHELL'S "GET BASE STATUS" AX = E900h DX = drive number to check (0 = A:) Return: AL = network pathbase AH = base flags 00h drive not currently mapped to a base 01h drive is mapped to a permanent base 02h drive is mapped to a temporary base 03h drive exists locally ----------21E905----------------------------- INT 21 - Novell NetWare shell 3.01 - MAP A FAKE ROOT DIRECTORY AX = E905h BL = drive number (0=default, 1=A:, ...) DS:DX -> ASCIZ path for fake root (may include server name or be empty) Return: CF set on error AL = error code (03h,0Fh,11h) (see AH=59h) CF clear if successful Note: if drive is not currently mapped, a drive mapping will be created SeeAlso: AX=E906h ----------21E906----------------------------- INT 21 - Novell NetWare shell 3.01 - DELETE FAKE ROOT DIRECTORY AX = E906h BL = drive number (0=default, 1=A:, ...) Note: drive remains mapped SeeAlso: AX=E905h ----------21E907----------------------------- INT 21 - Novell NetWare shell 3.01 - GET RELATIVE DRIVE DEPTH AX = E907h BL = drive number (0=default, 1=A:, ...) Return: AL = number of directories below the fake root FFh if no fake root assigned SeeAlso: AX=E905h ----------21E908BL00------------------------- INT 21 - Novell NetWare shell 3.01 - SET SHOW DOTS AX = E908h BL = 00h don't return '.' or '..' during directory scans = nonzero directory scans will return '.' or '..' entries Return: BL = previous show-dots setting ----------21EA------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - RETURN SHELL VERSION AH = EAh AL = return version environment string 00h don't return string nonzero return string in 40-byte buffer pointed to by ES:DI Return: buffer filled with three null-terminated entries: major operating system version hardware type Return: AH = operating system (00h = MSDOS) AL = hardware type 00h IBM PC 01h Victor 9000 BH = major shell version BL = minor shell version CH = (v3.01+) shell type 00h conventional memory 01h expanded memory 02h extended memory CL = shell revision number ----------21EA------------------------------- INT 21 - DoubleDOS - TURN OFF TASK SWITCHING AH = EAh Return: task switching turned off SeeAlso: AH=E9h"DoubleDOS",AH=EBh"DoubleDOS",AH=FAh"DoubleDOS" SeeAlso: INT FA"DoubleDOS" ----------21EA------------------------------- INT 21 - OS/286, OS/386 - ALLOCATE HUGE SEGMENT AH = EAh ??? Return: ??? Note: protected mode only??? SeeAlso: AH=E7h"OS/286",AH=E8h"OS/286",AH=E9h"OS/286" ----------21EB------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG FILE AH = EBh DS:DX -> ASCIZ filename if function C6h lock mode 01h: AL = flags 00h log file only 01h lock as well as log file BP = lock timeout in timer ticks (1/18 second) Return: AL = error code 00h successful 96h no dynamic memory for file FEh timed out FFh failed SeeAlso: AH=CAh,AH=ECh"Novell" ----------21EB------------------------------- INT 21 - DoubleDOS - TURN ON TASK SWITCHING AH = EBh Return: task switching turned on SeeAlso: AH=E9h"DoubleDOS",AH=EAh"DoubleDOS",AH=FBh"DoubleDOS" SeeAlso: INT FB"DoubleDOS" ----------21EB00----------------------------- INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY LINEAR ADDRESS AX = EB00h ??? Return: ??? Note: protected mode only??? SeeAlso: AX=EB02h,AX=EB04h,INT 31/AX=0506h ----------21EB02----------------------------- INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 16-BIT SEGMENT:OFFSET AX = EB02h ??? Return: ??? Note: protected mode only??? SeeAlso: AX=EB00h,AX=EB04h ----------21EB03----------------------------- INT 21 - OS/386 VMM - FREE MAPPED PAGES AX = EB03h ??? Return: ??? Note: protected mode only??? SeeAlso: AX=EB05h,INT 31/AX=0801h ----------21EB04----------------------------- INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 32-BIT SEGMENT:OFFSET AX = EB04h ??? Return: ??? Note: protected mode only??? SeeAlso: AX=EB00h,AX=EB02h ----------21EB05----------------------------- INT 21 - OS/386 VMM - MAP PAGES AX = EB05h ??? Return: ??? Note: protected mode only??? SeeAlso: AX=EB03h,INT 31/AX=0800h ----------21EB06----------------------------- INT 21 - OS/386 VMM - LOCK PAGES IN MEMORY AX = EB06h ??? Return: ??? Note: protected mode only??? SeeAlso: AX=EB07h,INT 31/AX=0600h ----------21EB07----------------------------- INT 21 - OS/386 VMM - UNLOCK MEMORY PAGES AX = EB07h ??? Return: ??? Note: protected mode only??? SeeAlso: AX=EB06h,INT 31/AX=0601h ----------21EC------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE FILE AH = ECh DS:DX -> ASCIZ filename Return: none SeeAlso: AH=EBh"Novell" ----------21EC------------------------------- INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS AH = ECh Return: ES = segment of virtual screen Notes: screen address can change if task-switching is on!! identical to AH=FCh SeeAlso: AH=FCh"DoubleDOS",INT FC"DoubleDOS" ----------21EC------------------------------- INT 21 - OS/286, OS/386 - BLOCK TRANSFER AH = ECh ??? Return: ??? ----------21EC59----------------------------- INT 21 - VIRUS - "Terror" - INSTALLATION CHECK AX = EC59h Return: BP = EC59h if resident SeeAlso: AH=E7h"VIRUS",AH=EEh"VIRUS" ----------21ED------------------------------- INT 21 - Novell NetWare, Alloy NTNX - CLEAR FILE AH = EDh DS:DX -> ASCIZ filename Return: AL = error code SeeAlso: AH=CEh,AH=EBh"Novell" ----------21ED------------------------------- INT 21 - OS/286, OS/386 - GET SEGMENT OR WINDOW DESCRIPTOR AH = EDh ??? Return: ??? Note: protected mode only??? SeeAlso: AH=E9h"OS/286" ----------21EE------------------------------- INT 21 - Novell NetWare 4.6, Alloy NTNX - GET PHYSICAL STATION NUMBER AH = EEh Return: CX:BX:AX = six-byte address ----------21EE------------------------------- INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS AH = EEh AL = number of 55ms time slices to give away Return: returns after giving away time slices SeeAlso: AH=FEh"DoubleDOS",INT FE"DoubleDOS" ----------21EE------------------------------- INT 21 - VIRUS - "Jerusalem-G", "Pregnant" - INSTALLATION CHECK AH = EEh Return: AX = 0300h if "Jerusalem-G" resident AL = 05h if "Pregnant" resident SeeAlso: AH=DDh"VIRUS",AX=EC59h,AH=F0h"VIRUS" ----------21EF------------------------------- INT 21 - Novell Advanced NetWare 1.0+ - GET DRIVE INFO AH = EFh AL = subfunction 00h get drive handle table 01h get drive flag table 02h get drive connection ID table 03h get connection ID table (see below) 04h get file server name table Return: ES:DI -> shell status table Note: drive handle, flag, and connection ID tables each contain 32 entries Format of connection ID table: Offset Size Description 00h BYTE in use flag E0h AES temporary F8h IPX in critical section FAh processing FBh holding FCh AES waiting FDh waiting FEh receiving FFh sending 01h BYTE order number 02h DWORD file server's network address (high byte first) 06h 6 BYTEs file server's node address (high byte first) 0Ch WORD socket number (high byte first) 0Eh WORD base receive timeout in clock ticks (high byte first) 10h 6 BYTEs preferred routing node (high byte first) 16h BYTE packet sequence number 17h BYTE connection number 18h BYTE connection status (FFh if active) 19h WORD maximum receive timeout in clock ticks (high byte first) 1Bh 5 BYTEs reserved Values in drive flag table: 00h drive is not mapped 01h permanent network drive 02h temporary network drive 80h mapped to local drive 81h local drive used as permanent network drive 82h local drive used as temporary network drive ----------21F0------------------------------- INT 21 - Novell Advanced NetWare 1.0+ - CONNECTION ID AH = F0h AL = subfunction 00h set preferred connection ID 01h get preferred connection ID 02h get default connection ID 03h LPT capture active 04h set primary connection ID 05h get primary connection ID DL = preferred file server Return: AL = selected file server ----------21F0------------------------------- INT 21 - DoubleDOS - MENU CONTROL AH = F0h AL = subfunction 01h exchange tasks 73h resume invisible job if suspended 74h kill other job 75h suspend invisible job Note: identical to AH=E0h SeeAlso: AH=E0h"DoubleDOS" ----------21F0------------------------------- INT 21 - VIRUS - "Frere Jacques" - INSTALLATION CHECK AH = F0h Return: AX = 0300h if resident SeeAlso: AH=EEh"VIRUS",AH=F1h"VIRUS" ----------21F1------------------------------- INT 21 - Novell Advanced NetWare 1.0+ - FILE SERVER CONNECTION AH = F1h AL = subfunction 00h attach to file server DL = preferred file server 01h detach from file server DL = connection ID 02h logout from file server DL = connection ID Return: AL = completion code ----------21F1------------------------------- INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB AH = F1h SeeAlso: AH=E1h"DoubleDOS",AH=F2h"DoubleDOS",AH=F3h"DoubleDOS" SeeAlso: AH=F8h"DoubleDOS" ----------21F1------------------------------- INT 21 - VIRUS - "F1-337" - ??? AH = F1h ??? Return: ??? SeeAlso: AH=F0h"VIRUS",AX=F2AAh ----------21F2------------------------------- INT 21 - Novell NetWare v3.01+ shell interface - MULTIPLEXOR AH = F2h AL = function 15h broadcast services (see AH=E1h) 17h connection control (see AH=E3h) DS:SI -> request buffer ES:DI -> reply buffer Return: ??? Notes: this is a multiplexor to access other net interface functions which were accessed via a separate AH function in older versions the function number in AL is added to CCh to get the old function number which is desired ----------21F2------------------------------- INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB AH = F2h AL = character Return: AL = 00h successful 01h buffer full (128 characters) SeeAlso: AH=E2h"DoubleDOS",AH=F1h"DoubleDOS",AH=F3h"DoubleDOS" SeeAlso: AH=F8h"DoubleDOS" ----------21F2AA----------------------------- INT 21 - VIRUS - "PcVrsDs" - INSTALLATION CHECK AX = F2AAh Return: AH = AAh if resident SeeAlso: AH=F1h"VIRUS",AH=F3h"VIRUS" ----------21F3------------------------------- INT 21 - Novell Advanced NetWare 2.0+ - FILE SERVER FILE COPY AH = F3h ES:DI -> request string (see below) Return: AL = status/error code CX:DX = number of bytes copied Format of request string: Offset Size Description 00h WORD source file handle 02h WORD destination file handle 04h DWORD starting offset in source 08h DWORD starting offset in destination 0Ch DWORD number of bytes to copy ----------21F3------------------------------- INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB AH = F3h AL = character Return: AL = 00h successful 01h buffer full (128 characters) SeeAlso: AH=E3h"DoubleDOS",AH=F1h"DoubleDOS",AH=F2h"DoubleDOS" SeeAlso: AH=F8h"DoubleDOS" ----------21F3------------------------------- INT 21 - VIRUS - "Carfield" - INSTALLATION CHECK AH = F3h Return: AX = 0400h if resident SeeAlso: AH=D5h"Carfield",AX=F2AAh,AH=F7h"VIRUS" ----------21F400----------------------------- INT 21 - DoubleDOS - INSTALLATION CHECK/PROGRAM STATUS AX = F400h Return: AL = 00h if DoubleDOS not present = 01h if running in visible DoubleDOS partition = 02h if running in the invisible DoubleDOS partition SeeAlso: AX=E400h,AH=F5h"DoubleDOS" ----------21F5------------------------------- INT 21 - DoubleDOS - OTHER PROGRAM STATUS AH = F5h Return: AL = 00h no program in other partition = 01h program in other partition is running = 02h program in other partition is suspended SeeAlso: AH=E5h"DoubleDOS",AX=F400h"DoubleDOS" ----------21F7------------------------------- INT 21 - VIRUS - "GP1" - INSTALLATION CHECK AH = F7h Return: AX = 0300h if resident SeeAlso: AH=F0h"VIRUS",AH=FBh"VIRUS" ----------21F8------------------------------- INT 21 - DOS v??? - SET OEM INT 21 HANDLER AH = F8h DS:DX -> OEM INT 21 handler for functions F9h to FFh FFFFh:FFFFh resets to original handlers Notes: calls to AH=F9h through AH=FFH will return CF set and AX=1 (invalid function) if no handler set handler is called with all registers exactly as set by caller, and should exit with IRET SeeAlso: AH=F9h"OEM" ----------21F8------------------------------- INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS AH = F8h AL = 00h set flags for this program = 01h set flags for other program DX = keyboard control flags (bit set enables, cleared disables) bit 0: menu bit 1: exchange bit 2: entire keyboard enable/disable bit 3: Ctrl-C bit 4: Ctrl-PrtSc bit 5: Alt/Erase bit 6: Ctrl-Break bit 7: Ctrl-NumLock bit 8: shift-PrtSc bit 9-13: undefined bit 14: cancel key (clear keyboard buffer) bit 15: suspend key Return: DX = previous flags Notes: disabling Ctrl-PrtSc will allow the program to intercept the keystroke; disabling any of the other keystrokes disables them completely identical to AH=E8h SeeAlso: AH=E8h"DoubleDOS",AH=F1h"DoubleDOS",AH=F2h"DoubleDOS" SeeAlso: AH=F3h"DoubleDOS" ----------21F9------------------------------- INT 21 - DOS v??? - OEM FUNCTION AH = F9h SeeAlso: AH=F8h"OEM",AH=FAh"OEM" ----------21F9------------------------------- INT 21 - DoubleDOS - SET TIMESHARING PRIORITY AH = F9h AL = 00h visible program gets 70%, invisible gets 30% (default) = 01h visible program gets 50%, invisible gets 50% = 02h visible program gets 30%, invisible gets 70% = 03h Top program gets 70%, bottom program gets 30% = 04h Top program gets 30%, bottom program gets 70% = 05h get current priority Return: AL = priority setting Note: identical to AH=E9h SeeAlso: AH=E9h"DoubleDOS",AH=FAh"DoubleDOS",AH=FBh"DoubleDOS" ----------21FA------------------------------- INT 21 - DOS v??? - OEM FUNCTION AH = FAh SeeAlso: AH=F9h"OEM",AH=FBh"OEM" ----------21FA------------------------------- INT 21 - DoubleDOS - TURN OFF TASK SWITCHING AH = FAh Return: task switching turned off SeeAlso: AH=EAh"DoubleDOS",AH=F9h"DoubleDOS",AH=FBh"DoubleDOS" SeeAlso: INT FA"DoubleDOS" ----------21FA--DX5945----------------------- INT 21 - PC Tools 7 VDEFEND - API AH = FAh DX = 5945h AL = function 00h NOP 01h uninstall Return: CF clear if successful DI = 4559h 02h ??? BL = ??? Return: CF clear CL = old value of ??? SeeAlso: INT 2F/AX=6282h ----------21FB------------------------------- INT 21 - DOS v??? - OEM FUNCTION AH = FBh SeeAlso: AH=FAh"OEM",AH=FCh"OEM" ----------21FB------------------------------- INT 21 - DoubleDOS - TURN ON TASK SWITCHING AH = FBh Return: task switching turned on SeeAlso: AH=EBh"DoubleDOS",AH=F9h"DoubleDOS",AH=FAh"DoubleDOS" SeeAlso: INT FB"DoubleDOS" ----------21FB------------------------------- INT 21 - VIRUS - "Cinderella" - INSTALLATION CHECK AH = FBh Return: AH = 00h if resident SeeAlso: AH=F7h"VIRUS",AX=FB0Ah ----------21FB0A----------------------------- INT 21 - VIRUS - "dBASE" - INSTALLATION CHECK AX = FB0Ah Return: AX = 0AFBh if resident SeeAlso: AH=FBh"VIRUS",AH=FCh"VIRUS" ----------21FC------------------------------- INT 21 - DOS v??? - OEM FUNCTION AH = FCh SeeAlso: AH=FBh"OEM",AH=FDh"OEM" ----------21FC------------------------------- INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS AH = FCh Return: ES = segment of virtual screen Notes: screen address can change if task-switching is on!! identical to AH=ECh SeeAlso: AH=ECh"DoubleDOS",INT FC"DoubleDOS" ----------21FC------------------------------- INT 21 - VIRUS - "Troi" - INSTALLATION CHECK AH = FCh Return: AL = A5h if resident SeeAlso: AH=FB0Ah"VIRUS",AH=FDh"VIRUS" ----------21FD------------------------------- INT 21 - DOS v??? - OEM FUNCTION AH = FDh SeeAlso: AH=FCh"OEM",AH=FEh"DOS" ----------21FD------------------------------- INT 21 - VIRUS - "Border" - INSTALLATION CHECK AH = FDh Return: AH = 13h if resident SeeAlso: AH=FCh"VIRUS",AH=FEh"VIRUS" ----------21FE------------------------------- INT 21 - DOS v??? - OEM FUNCTION AH = FEh SeeAlso: AH=FDh"OEM",AH=FFh"OEM" ----------21FE------------------------------- INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS AH = FEh AL = number of 55ms time slices to give away Return: returns after giving away time slices SeeAlso: AH=EEh"DoubleDOS",INT FE"DoubleDOS" ----------21FE------------------------------- INT 21 - VIRUS - "483" - INSTALLATION CHECK AH = FEh Return: AH = 00h if resident SeeAlso: AH=FDh"VIRUS",AX=FE01h ----------21FE01----------------------------- INT 21 - VIRUS - "Flip" - INSTALLATION CHECK AX = FE01h Return: AX = 01FEh if resident SeeAlso: AH=FEh"VIRUS",AX=FE02h ----------21FE02----------------------------- INT 21 - VIRUS - "2468"/"Tequila" - INSTALLATION CHECK AX = FE02h Return: AX = 01FDh if resident SeeAlso: AX=FE01h,AX=FEDCh"VIRUS" ----------21FEDC----------------------------- INT 21 - PCMag PCMANAGE/DCOMPRES - INSTALLATION CHECK AX = FEDCh Return: AX = CDEFh if installed SeeAlso: AH=DCh ----------21FEDC----------------------------- INT 21 - VIRUS - "Black Monday" - INSTALLATION CHECK AX = FEDCh Return: AL = DCh if resident SeeAlso: AX=FE02h,AH=FFh"VIRUS" ----------21FF------------------------------- INT 21 - DOS v??? - OEM FUNCTION AH = FFh SeeAlso: AH=FEh"OEM" ----------21FF------------------------------- INT 21 - CED (Command EDitor) - INSTALLABLE COMMANDS AH = FFH AL = subfunction 00h add installable command BL = mode - bit 0 = 1 callable from DOS prompt bit 1 = 1 callable from application DS:SI -> CR-terminated command name ES:DI -> FAR routine entry point 01h remove installable command DS:SI -> CR-terminated command name 02h reserved, may be used to test for CED installation Return: CF clear if successful CF set on error AX = 01h invalid function 02h command not found (subfunction 01h only) 08h insufficient memory (subfunction 00h only) 0Eh bad data (subfunction 00h only) AH = FFh if CED not installed Note: CED is a shareware DOS command-line enhancer by Christopher J. Dunford SeeAlso: AX=0A00h ----------21FF------------------------------- INT 21 - DJ GO32.EXE 80386+ DOS extender - DOS EXTENSIONS AH = FFh AL = function 01h create file 02h open file 03h get file statistics 04h get time of day 05h set time of day 06h stat 07h system SeeAlso: INT 10/AH=FFh"GO32" ----------21FF------------------------------- INT 21 - DOSED.COM - INSTALLATION CHECK AH = FFh DS:SI -> "DOSED" ES = 0000h Return: ES:DI -> "DOSED" if installed Note: DOSED is a free DOS commandline editor/history buffer by Sverre H. Huseby ----------21FF------------------------------- INT 21 - Topware Network Operating System - ??? AH = FFh ??? Return: ??? SeeAlso: INT 2F/AX=FF00h ----------21FF------------------------------- INT 21 - VIRUS - "Sunday", "Tumen 0.5", "Hero" - INSTALLATION CHECK AH = FFh Return: AH = 00h if "Tumen 0.5" or "Hero" resident AX = 0400h if "Sunday" resident SeeAlso: AX=FEDCh"VIRUS",AX=FF0Fh ----------21FF00DX0078----------------------- INT 21 - Rational Systems DOS/4G - INSTALLATION CHECK AX = FF00h DX = 0078h Return: AL <> 00h if installed GS = segment of kernel if nonzero SeeAlso: INT 15/AX=BF02h ----------21FF0F----------------------------- INT 21 - FLU_SHOT+ v1.83 - INSTALLATION CHECK AX = FF0Fh Return: AX = 0101h if resident Notes: FLU_SHOT+ is an antivirus/antitrojan program by Ross M. Greenberg and Software Concepts Design the "PSQR/1720" virus calls this function to determine whether FLU_SHOT+ is present SeeAlso: AH=FFh"VIRUS",AX=FF10h ----------21FF10----------------------------- INT 21 - VIRUS - "Twins" - INSTALLATION CHECK AX = FF10h Return: AL = 07h if resident SeeAlso: AX=FF0Fh,AX=FFFEh ----------21FFFE----------------------------- INT 21 - VIRUS - "08/15"/"Many Fingers" - INSTALLATION CHECK AX = FFFEh Return: AX = 0815h if resident SeeAlso: AX=FF10h,AX=FFFFh ----------21FFFF----------------------------- INT 21 - VIRUS - "Ontario", "Year 1992"/"B1M92" - INSTALLATION CHECK AX = FFFFh Return: AX = 0000h if "Ontario" resident AX = 07C2h (1992) if "Year 1992"/"B1M92" resident SeeAlso: AX=FF0Fh,AX=FFFFh/CX=0000h,INT 6B"VIRUS" ----------21FFFFCX0000----------------------- INT 21 - VIRUS - "Revenge" - INSTALLATION CHECK AX = FFFFh CX = 0000h Return: CX = 0006h if resident SeeAlso: AX=FFFFh,INT 6B"VIRUS" ----------22--------------------------------- INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS specifies the address of the routine which is to be given control after a program is terminated; should never be called directly, since it does not point at an interrupt handler Notes: this vector is restored from the DWORD at offset 0Ah in the PSP during termination, and then a FAR JMP is performed to the address in INT 22 normally points at the instruction immediately following INT 21/AH=4Bh call which loaded the current program SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch ----------23--------------------------------- INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER invoked whenever DOS detects a ^C or ^Break; should never be called directly ---DOS 1.x--- Return: AH = 00h abort program if all registers preserved, restart DOS call ---DOS 2+--- Return: all registers preserved return via RETF or RETF 2 with CF set DOS will abort program with errorlevel 0 else (RETF/RETF 2 with CF clear or IRET) interrupted DOS call is restarted Notes: MSDOS 1.25 also invokes INT 23 on a divide overflow (INT 00) any DOS call may safely be made within the INT 23 handler, although the handler must to check for a recursive invocation if it does call DOS SeeAlso: INT 1B ----------24--------------------------------- INT 24 - DOS 1+ - CRITICAL ERROR HANDLER invoked when a critical (usually hardware) error is encountered; should never be called directly Critical error handler is invoked with: AH = type and processing flags bit 7 clear = disk I/O error set = -- if block device, bad FAT image in memory -- if char device, error code in DI bit 6 unused bit 5 = 1 if Ignore allowed, 0 if not (DOS 3+) bit 4 = 1 if Retry allowed, 0 if not (DOS 3+) bit 3 = 1 if Fail allowed, 0 if not (DOS 3+) bit 2 \ disk area of error 00 = DOS area 01 = FAT bit 1 / 10 = root dir 11 = data area bit 0 = 1 if write, 0 if read AL = drive number if AH bit 7 clear BP:SI -> device driver header (BP:[SI+4] bit 15 set if char device) DI low byte contains error code if AH bit 7 set 00h write-protection violation attempted 01h unknown unit for driver 02h drive not ready 03h unknown command given to driver 04h data error (bad CRC) 05h bad device driver request structure length 06h seek error 07h unknown media type 08h sector not found 09h printer out of paper 0Ah write fault 0Bh read fault 0Ch general failure 0Dh (DOS 3+) sharing violation 0Eh (DOS 3+) lock violation 0Fh invalid disk change 10h (DOS 3+) FCB unavailable 11h (DOS 3+) sharing buffer overflow 12h (DOS 4+) code page mismatch 13h (DOS 4+) out of input 14h (DOS 4+) insufficient disk space STACK: DWORD return address for INT 24 call WORD flags pushed by INT 24 WORD original AX on entry to INT 21 WORD BX WORD CX WORD DX WORD SI WORD DI WORD BP WORD DS WORD ES DWORD return address for INT 21 call WORD flags pushed by INT 21 Handler must return: AL = action code 00h ignore error and continue processing request 01h retry operation 02h terminate program through the equivalent of INT 21/AH=4Ch (INT 20h for DOS 1.x) 03h fail system call in progress SS,SP,DS,ES,BX,CX,DX preserved Notes: the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h if the handler returns to the application by popping the stack, DOS will be in an unstable state until the first call with AH > 0Ch for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network critical errors if IGNORE specified but not allowed, it is turned into FAIL if RETRY specified but not allowed, it is turned into FAIL if FAIL specified but not allowed, it is turned into ABORT (DOS 3+) if a critical error occurs inside the critical error handler, the DOS call is automatically failed ----------25--------------------------------- INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M) AL = drive number (00h = A:, 01h = B:, etc) CX = number of sectors to read DX = starting logical sector number (0000h - highest sector on drive) DS:BX -> buffer for data Return: CF clear if successful CF set on error AH = status 80h device failed to respond (timeout) 40h seek operation failed 20h controller failed 10h data error (bad CRC) 08h DMA failure 04h requested sector not found 03h write-protected disk (INT 26 only) 02h bad address mark 01h bad command AL = error code (same as passed to INT 24 in DI) may destroy all other registers except segment registers Notes: original flags are left on stack, and must be popped by caller this call bypasses the DOS filesystem BUG: DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an invalid drive number SeeAlso: INT 13/AH=02h,INT 26 ----------25--------------------------------- INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition) AL = drive number (0=A, 1=B, etc) CX = FFFFh DS:BX -> disk read packet (see below) Return: same as above Notes: partition is potentially >32M (and requires this form of the call) if bit 1 of device attribute word in device driver is set original flags are left on stack, and must be removed by caller this call bypasses the DOS filesystem SeeAlso: INT 13/AH=02h,INT 26 Format of disk read packet: Offset Size Description 00h DWORD sector number 04h WORD number of sectors to read 06h DWORD transfer address ----------25CDCD----------------------------- INT 25 - Stacker - GET DEVICE DRIVER ADDRESS AX = CDCDh DS:BX -> buffer for address (see below) CX = 0001h DX = 0000h Return: AX = CDCDh if Stacker installed DS:BX buffer filled Format of driver address buffer: Offset Size Description 00h WORD signature CDCDh 02h WORD ??? 0001h 04h DWORD pointer to start of Stacker device driver Format of device driver: Offset Size Description 00h WORD signature A55Ah 02h WORD Stacker version * 64h 04h WORD offset of volume-specific information offset table (list of WORDs, one per drive, containing offsets to various information) 06h 56 BYTEs n/a 3Eh BYTE volume number, set after INT 21/AX=4404h (use to index into volume-specific info offset table) 3Fh 19 BYTEs n/a 52h 4 BYTEs ASCII string "SWAP" 56h 26 BYTEs drive mapping table (one byte for each drive A: through Z:) Format of Stacker boot record: Offset Size Description 1F0h 8 BYTEs Stacker signature (first byte is CDh) 1F8h DWORD pointer to start of Stacker device driver 1FCh WORD Stacker volume number 1FEh WORD ??? ----------25----ALFF------------------------- INT 25 - PC-CACHE.SYS - INSTALLATION CHECK AL = FFh SI = 4358h Return: SI = 6378h if installed CX = segment of device driver PC-CACHE.SYS DX = version (major in DH, minor in DL) Note: PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain access to certain disk drivers for devices such as Bernoulli drives SeeAlso: INT 13/AH=A0h ----------26--------------------------------- INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M) AL = drive number (00h = A:, 01h = B:, etc) CX = number of sectors to write DX = starting logical sector number (0000h - highest sector on drive) DS:BX -> data to write Return: CF clear if successful CF set on error AH = status 80h device failed to respond (timeout) 40h seek operation failed 20h controller failed 10h data error (bad CRC) 08h DMA failure 04h requested sector not found 03h write-protected disk (INT 26 only) 02h bad address mark 01h bad command AL = error code (same as passed to INT 24 in DI) may destroy all other registers except segment registers Notes: original flags are left on stack, and must be popped by caller this call bypasses the DOS filesystem BUG: DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an invalid drive number SeeAlso: INT 13/AH=03h,INT 25 ----------26--------------------------------- INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition) AL = drive number (0=A, 1=B, etc) CX = FFFFh DS:BX -> disk write packet (see below) Return: same as above Notes: partition is potentially >32M (and requires this form of the call) if bit 1 of device attribute word in device driver is set original flags are left on stack, and must be removed by caller this call bypasses the DOS filesystem SeeAlso: INT 13/AH=03h,INT 25 Format of disk write packet: Offset Size Description 00h DWORD sector number 04h WORD number of sectors to read 06h DWORD transfer address ----------27--------------------------------- INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT DX = number of bytes to keep resident (max FFF0h) CS = segment of PSP Return: never Notes: this is an obsolete call INT 22, INT 23, and INT 24 are restored from the PSP does not close any open files the minimum number of bytes which will remain resident is 110h for DOS 2.x and 60h for DOS 3+; there is no minimum for DOS 1.x, which implements this service in COMMAND.COM rather than the DOS kernel SeeAlso: INT 21/AH=31h ----------28--------------------------------- INT 28 - DOS 2+ - DOS IDLE INTERRUPT Invoked each time one of the DOS character input functions loops while waiting for input. Since a DOS call is in progress even though DOS is actually idle during such input waits, hooking this function is necessary to allow a TSR to perform DOS calls while the foreground program is waiting for user input. The INT 28h handler may invoke any INT 21 function except functions 00h through 0Ch. Under DOS 2.x, the critical error flag (the byte immediately after the InDOS flag) must be set in order to call DOS functions 50h/51h without destroying the DOS stacks. Notes: calls to INT 21/AH=3Fh,40h may not use a handle which refers to CON at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally set to 01h; if larger, DOS is truly busy and should not be reentered the default handler is an IRET instruction supported in OS/2 compatibility box SeeAlso: INT 21/AH=34h,INT 2A/AH=84h ----------29--------------------------------- INT 29 - DOS 2+ - FAST CONSOLE OUTPUT AL = character to display Return: nothing Notes: automatically called when writing to a device with bit 4 of its device driver header set (see also INT 21/AH=52h) COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20 vector and assume that ANSI.SYS is installed if the segment is larger the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh the default handler under DESQview 2.2 understands the [2J screen-clearing sequence, calls INT 10/AH=0Eh for all others SeeAlso: INT 79 ----------2A00------------------------------- INT 2A - NETWORK (Microsoft, LANtastic) - INSTALLATION CHECK AH = 00h Return: AH <> 00h if installed SeeAlso: INT 5C ----------2A0000----------------------------- INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK AX = 0000h Return: AH = DDh SeeAlso: INT 5B ----------2A01------------------------------- INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY AH = 01h ES:BX -> NCB (see INT 5C) Return: AL = NetBIOS error code AH = 00h if no error = 01h on error SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C"NetBIOS" ----------2A02------------------------------- INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE AH = 02h ??? Return: ??? ----------2A0300----------------------------- INT 2A - NETWORK (Microsoft,LANtastic) - CHECK DIRECT I/O AX = 0300h DS:SI -> ASCIZ device name (may be full path or only drive specifier-- must include the colon) Return: CF clear if direct physical addressing (INT 13,INT 25) permissible CF set if access via files only Notes: do not use direct disk accesses if this function returns CF set or the device is redirected (INT 21/AX=5F02h) may take some time to execute called by DOS kernel on INT 25 and INT 26 SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h ----------2A04------------------------------- INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NetBIOS REQUEST AH = 04h AL = error retry 00h automatically retry request on errors 09h, 12h, and 21h 01h no retry ES:BX -> Network Control Block (see INT 5C"NetBIOS") Return: AX = 0000h if successful AH = 01h on error AL = error code Note: invokes either INT 5B or INT 5C as appropriate SeeAlso: AH=01h,AX=0500h,INT 5B,INT 5C"NetBIOS" ----------2A0500----------------------------- INT 2A - NETWORK (Microsoft,LANtastic) - GET NETWORK RESOURCE AVAILABILITY AX = 0500h Return: AX reserved BX = number of network names available CX = number of network control blocks available DX = number of network sessions available SeeAlso: AH=01h,AH=04h,INT 5C"NetBIOS" ----------2A06------------------------------- INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL AH = 06h AL = 01h set concatenation mode (all printer output put in one job) 02h set truncation mode (default) printer open/close starts new print job 03h flush printer output and start new print job Return: CF set on error AX = error code CF clear if successful Notes: subfunction 03h is equivalent to Ctrl/Alt/keypad-* LANtastic v4.x no longer supports this call SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h ----------2A2001----------------------------- INT 2A - MS Networks or NETBIOS - ??? AX = 2001h ??? Return: ??? Note: intercepted by DESQview 2.x ----------2A2002----------------------------- INT 2A - NETWORK - ??? AX = 2002h ??? Return: ??? Note: called by MSDOS 3.30-5.00 APPEND ----------2A2003----------------------------- INT 2A - NETWORK - ??? AX = 2003h ??? Return: ??? Note: called by MSDOS 3.30-5.00 APPEND ----------2A7802----------------------------- INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME AX = 7802h ES:DI -> 8-byte buffer to be filled Return: AL = 00h if no user logged on to Extended Services AL <> 00h if user logged on to Extended Services buffer at ES:DI filled with name, padded to 8 chars with blanks. ----------2A80------------------------------- INT 2A - NETWORK - BEGIN DOS CRITICAL SECTION AH = 80h AL = critical section number (00h-0Fh) 01h DOS kernel, SHARE.EXE apparently for maintaining the integrity of DOS/SHARE/NET data structures 02h DOS kernel ensures that no multitasking occurs while DOS is calling an installable device driver 05h DOS 4.x only IFSFUNC 06h DOS 4.x only IFSFUNC 08h ASSIGN.COM 0Ah MSCDEX Notes: normally hooked to avoid interrupting a critical section, rather than called the handler should ensure that none of the critical sections are reentered, usually by suspending a task which attempts to reenter an active critical section the DOS kernel does not invoke critical sections 01h and 02h unless it is patched. DOS 3.1 through 3.31 contain a zero-terminated list of words beginning at offset 02C3h in the IBMDOS segment; each word contains the offset within the IBMDOS segment of a byte which must be changed from C3h to 50h to enable use of critical sections. SeeAlso: AH=81h,AH=82h,AH=87h,INT 21/AX=5D06h,INT 21/AX=5D0Bh ----------2A81------------------------------- INT 2A - NETWORK - END DOS CRITICAL SECTION AH = 81h AL = critical section number (00h-0Fh) (see AH=80h) Notes: normally hooked rather than called the handler should reawaken any tasks which were suspended due to an attempt to enter the specified critical section SeeAlso: AH=80h,AH=82h,AH=87h ----------2A82------------------------------- INT 2A - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7 AH = 82h Notes: called by the INT 21h function dispatcher for function 0 and functions greater than 0Ch except 59h, and on process termination the handler should reawaken any tasks which were suspended due to an attempt to enter one of the critical sections 0 through 7 SeeAlso: AH=81h ----------2A84------------------------------- INT 2A - Microsoft Networks - KEYBOARD BUSY LOOP AH = 84h Note: similar to DOS's INT 28h, called from inside the DOS keyboard input loop to allow network to process requests SeeAlso: INT 28 ----------2A87------------------------------- INT 2A - PRINT??? - CRITICAL SECTION AH = 87h AL = start/end 00h start 01h end Note: called by PRINT.COM SeeAlso: AH=80h,AH=81h ----------2A89------------------------------- INT 2A - Network - ??? AH = 89h AL = ??? (ASSIGN uses 08h) ??? Return: ??? ----------2A90------------------------------- INT 2A - IBM PC 3270 EMULATION PROGRAM - ??? AH = 90h ??? Return: ??? Note: the LANtastic redirector and SERVER.EXE use this function with AL=01h, 03h-07h,0Ch-11h ----------2AC2------------------------------- INT 2A - Network - ??? AH = C2h AL = subfunction 07h ??? 08h ??? BX = 0001h ??? Return: ??? Note: called by DOS 3.30-5.00 APPEND ----------2AFF90----------------------------- INT 2A - PC/TCP PREDIR.EXE - ??? AX = FF90h Return: AX = ??? Note: PREDIR.EXE is the network printer redirector included as part of the PC/TCP system by FTP Software, Inc. ----------2AFF91----------------------------- INT 2A - PC/TCP PREDIR.EXE - ??? AX = FF91h BX = ??? Return: AX = status??? ----------2AFF92----------------------------- INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK AX = FF92h Return: AX = 0000h if installed BX = redirected printer port (FFFFh if no printers redirected) CX = version (CH = major, CL = minor) Note: PREDIR.EXE is the network printer redirector included as part of the PC/TCP system by FTP Software, Inc. ----------2AFF93----------------------------- INT 2A - PC/TCP PREDIR.EXE - ??? AX = FF93h Return: AX = ??? ----------2AFF94----------------------------- INT 2A - PC/TCP PREDIR.EXE - ??? AX = FF94h BX = ??? CX = ??? DX = ??? Return: AX = ??? Note: PREDIR.EXE is the network printer redirector included as part of the PC/TCP system by FTP Software, Inc. ----------2AFF95----------------------------- INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS AX = FF95h CX = what to get 0000h ??? (returned pointer to "C:\COMMAND.COM") 0001h spooling program 0002h ??? 0003h spool file name 0004h swap file name Return: AX = status 0000h successful BX:DX -> ASCIZ configuration string ----------2AFF96----------------------------- INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION AX = FF96h CX = what to set 0000h ??? 0001h print-on-hotkey state 0002h print-on-exit state 0003h print job timeout in clock ticks 0004h print-on-EOF state BX = new value (0000h disabled, 0001h enabled except for timeout) Return: AX = ??? SeeAlso: AX=FF97h Note: PREDIR.EXE is the network printer redirector included as part of the PC/TCP system by FTP Software, Inc. ----------2AFF97----------------------------- INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION AX = FF97h CX = what to get 0000h ??? 0001h print-on-hotkey state 0002h print-on-exit state 0003h print job timeout in clock ticks 0004h print-on-EOF state Return: AX = status 0000h successful BX = old value (0000h disabled, 0001 enabled except for timeout) SeeAlso: AX=FF96h ----------2B--------------------------------- INT 2B - DOS 2+ - RESERVED Note: this vector is not used in DOS versions <= 5.00, and points at an IRET ----------2C--------------------------------- INT 2C - DOS 2+ - RESERVED Note: this vector is not used in DOS versions <= 5.00, and points at an IRET ----------2C--------------------------------- INT 2C - STARLITE architecture - KERNEL API Note: STARLITE is an architecture by General Software for a series of MS-DOS compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to be released in 1991. The interrupt number is subject to change before the actual release. ----------2D--------------------------------- INT 2D - DOS 2+ - RESERVED Note: this vector is not used in DOS versions <= 5.00, and points at an IRET ----------2D--------------------------------- INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [proposal v3.4] AH = multiplex number AL = function 00h installation check Return: AL = FFh if multiplex number in use CX = version number (CH = major, CL = minor) DX:DI -> signature string (see below) identifying the program using the multiplex number AL = 00h if free 01h get entry point Return: AL = FFh if entry point supported DX:BX -> entry point for bypassing interrupt chain AL = 00h if all API calls via INT 2D 02h uninstall DX:BX = return address for successful uninstall (may be ignored by TSR) Return: AL = status 00h not implemented 01h unsuccessful 02h can not uninstall yet, will do so when able 03h safe to remove, but no resident uninstaller (TSR still enabled) BX = segment of memory block with resident code 04h safe to remove, but no resident uninstaller (TSR now disabled) BX = segment of memory block with resident code 05h not safe to remove now, try again later FFh successful return at DX:BX with AX destroyed if successful and TSR honors specific return address 03h request pop-up Return: AL = status 00h not implemented or TSR is not a pop-up 01h can not pop up at this time, try again later 02h can not pop up yet, will do so when able 03h already popped up 04h unable to pop up, user intervention required BX = standard reason code 0000h unknown failure 0001h interrupt chain passes through memory which must be swapped out to pop up 0002h swap-in failed CX = application's reason code if nonzero FFh TSR popped up and was exited by user BX = return value 0000h no return value 0001h TSR unloaded 0002h-00FFh reserved 0100h-FFFFh application-dependent 04h determine chained interrupts BL = interrupt number (except 2Dh) Return: AL = status 00h not implemented 01h unable to determine 02h interrupt hooked 03h interrupt hooked, address returned DX:BX -> TSR's interrupt BL handler 04h list of hooked interrupts returned DX:BX -> interrupt hook list (see below) FFh interrupt not hooked Notes: since INT 2D is known to be hooked, the resident code need not test for BL=2Dh (to minimize its size), and the return value is therefore undefined in that case. BL is ignored if the TSR returns AL=04h; in that case, the caller needs to scan the return list rather than making additional calls to this function. If the return is not 00h or 04h, then the caller must cycle through the remaining interrupt numbers it wishes to check. return values 01h thru 03h are disparaged and may be removed from future versions of the specification; they are included for compatibility with version 3.3 05h-0Fh reserved for future enhancements Return: AL = 00h (not implemented) other application-dependent Notes: programs should not use fixed multiplex numbers; rather, a program should scan all multiplex numbers from 00h to FFh, remembering the first unused multiplex in case the program is not yet installed. For multiplex numbers which are in use, the program should compare the first 16 bytes of the signature string to determine whether it is already installed on that multiplex number. If not previously installed, it should use the first free multiplex number. functions other than 00h are not valid unless a program is installed on the selected multiplex number to be considered fully compliant with version 3.4 of the specification, programs must implement at least functions 00h, 02h (no resident uninstall code required), and 04h (return value 04h). The absolute minimum implementation has an overhead of 64 bytes plus 22 bytes per hooked interrupt (for the interrupt sharing protocol header and hook list entry). the signature string and description may be used by memory mappers to display the installed programs users of this proposal should adhere to the IBM interrupt sharing protocol (see below), which will permit removal of TSRs in arbitrary order and interrupt handler reordering. All TSRs following this proposal should be removable, though they need not keep the code for removing themselves resident; it is acceptable for a separate program to perform the removal. A sample implementation including example TSRs and utility programs may be found in a separate package distributed as AMISLnnn.ZIP (AMISL081.ZIP as of this writing). Please let me know if you choose to follow this proposal. A list of the private API calls you use would be appreciated, as well. SeeAlso: INT 2F Format of signature string: Offset Size Description 00h 8 BYTEs blank-padded manufacturer's name (possibly abbreviated) 08h 8 BYTEs blank-padded product name 10h 64 BYTEs ASCIZ product description (optional, may be a single 00h) Note: it is not necessary to reserve a full 64 bytes for the description, just enough to store the actual ASCIZ string Format of interrupt hook list [array]: Offset Size Description 00h BYTE interrupt number (last entry in array is 2Dh) 01h WORD offset within hook list's segment of the interrupt handler this will point at the initial short jump of the interrupt sharing protocol header (see below) Format of interrupt sharing protocol interrupt handler entry point: Offset Size Description 00h 2 BYTEs short jump to actual start of interrupt handler, immediately following this data block (EBh 10h) 02h DWORD address of next handler in chain 06h WORD signature 424Bh 08h BYTE EOI flag 00h software interrupt or secondary hardware interrupt handler 80h primary hardware interrupt handler (will issue EOI) 09h 2 BYTEs short jump to hardware reset routine must point at a valid FAR procedure (may be just RETF) 0Bh 7 BYTEs reserved (0) Signatures known to be in use: 'Crynwr ' 'SPELLER ' TSR spelling-checker 'heathh ' 'Monitor ' 'Ralf B ' 'FASTMOUS' example TSR included with sample AMIS library code 'Ralf B ' 'NOLPT n ' example TSR -- turn LPTn into bit-bucket 'Ralf B ' 'NOTE ' example TSR -- popup note-taker 'Ralf B ' 'SWITCHAR' example TSR -- add switchar() support removed from DOS5 'Ralf B ' 'VGABLANK' example TSR -- VGA-only screen blanker 'TifaWARE' 'EATMEM ' George A. Theall's public domain memory restrictor for testing programs (v1.1+) 'RECALL ' public domain commandline editor and history (v1.2+) ----------2E--------------------------------- INT 2E - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION DS:SI -> commandline to execute (see below) Return: all registers except CS:IP destroyed AX = status (4DOS v4.0) 0000h successful FFFFh error before processing command (not enough memory, etc) other error number returned by command Notes: this call allows execution of arbitrary commands (including COMMAND.COM internal commands) without loading another copy of COMMAND.COM if COMMAND.COM is the user's command interpreter, the primary copy executes the command; this allows the master environment to be modified by issuing a "SET" command, but changes in the master environment will not become effective until all programs descended from the primary COMMAND.COM terminate since COMMAND.COM processes the string as if typed from the keyboard, the transient portion needs to be present, and the calling program must ensure that sufficient memory to load the transient portion can be allocated by DOS if necessary results are unpredictable if invoked by a program run from a batch file because this call is not reentrant and COMMAND.COM uses the same internal variables when processing a batch file hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E has been loaded Format of commandline: Offset Size Description 00h BYTE length of command string, not counting trailing CR 01h var command string N BYTE 0Dh (CR) ----------2E----BXE22E----------------------- INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL BX = E22Eh DS:SI -> zero byte Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch ----------2F--------------------------------- INT 2F - Multiplex - NOTES AH = identifier of program which is to handle the interrupt 00h-7Fh reserved for DOS C0h-FFh reserved for applications AL is the function code This is a general mechanism for verifying the presence of a TSR and communicating with it. When searching for a free identifier code for AH using the installation check (AL=00h), the calling program should set BX/CX/DX to 0000h and must not depend on any registers other than CS:IP and SS:SP to be valid on return, since numerous programs now use additional registers on input and/or output for the installation check. Note: Since the multiplex chain is growing so long, and beginning to experience multiplex number collisions, I am proposing an alternate multiplex interrupt on INT 2D. If you decide to use the alternate multiplex, please let me know. SeeAlso: INT 2D ----------2F--------------------------------- INT 2F - BMB Compuscience Canada Utilities Interface AH = xx (dynamically assigned based upon a search for a multiplex number which doesn't answer installed) AL = 00h installation check ES:DI = EBEBh:BEBEh Return: AL = 00h not installed 01h not installed, not OK to install FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a short form of the manufacturer's name, PPPPPPPP is a product name and NNNN is the product's version number ----------2F--------------------------------- INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY AH = programmer-selected multiplex number AL = function 00h installation check Return: AL = FFh if installed 01h get TSR interrupt vectors Return: DX:AX -> vector table (see below) 02h get TSR code segment Return: AX = code segment for all interrupt handlers 03h call user exit routine and release TSR's memory 04h get signature string Return: DX:AX -> counted string containing signature 05h get TSR's INT 2F handler Return: DX:AX -> INT 2F handler 06h enable/disable TSR BL = new state (00h disabled, 01h enabled) 07h activate TSR (popup if not disabled) 08h get hotkeys BL = which hotkey (00h = hotkey 1, 01h = hotkey 2) Return: AX = hotkey (AH = keyflags, AL = scancode) 09h set hotkey BL = which hotkey (00h = hotkey 1, 01h = hotkey 2) CX = new hotkey (CH = keyflags, CL = scancode) 0Ah-1Fh reserved Format of vector table entry: Offset Size Description 00h BYTE vector number (00h = end of table) 01h DWORD original vector 05h WORD offset of interrupt handler in TSR's code segment ----------2F--------------------------------- INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface AH = xx (dynamically assigned based upon a search for a multiplex number from C0h to FFh which doesn't answer installed) AL = 00h installation check ES:DI = 1492h:1992h Return: AL = 00h not installed 01h not installed, not OK to install FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will point to author_name_ver table (see below) AH = FFh Note: this interface permits advanced communication with TSRs: it is possible to make a generic unistall utility, advanced TSR relocator programs in order to fit fragmented memory areas, etc. See also: INT 2D"AMIS",INT 2F"Compuscience" Format of author_name_ver table: Offset Size Description -16 WORD segment in which really begins the TSR code (CS in programs with PSP, XMS upper memory segment if installed as UMB...) -14 WORD offset in which really begins the TSR code (frecuently 100h in *.COM programs and 0 in upper memory TSR's). -12 WORD memory used by TSR (in paragraphs). Knowing the memory area used by TSR is possible to determine if hooked vectors are still pointing it (and if it is safe the unistall process). -10 BYTE characteristics byte bits 0-2: 000 normal program (with PSP) 001 upper XMS memory block (needed HIMEM.SYS function to free memory when unistalling) 010 device driver (*.SYS) 011 device driver in EXE format 1xx others (reserved) bits 3-6 reserved bit 7 set if extra_table defined and supported -9 BYTE number of multiplex entry used (redefinition available). Note that the TSR must be use THIS variable in it's INT 2Fh handler. -8 WORD offset to vector_area table (see bellow) -6 WORD offset to extra_area table (see bit 7 in offset -10 and bellow) -4 4 BYTEs "*##*" (to insure that the TSR verify this agreement) 00h var "AUTHOR:PROGRAM_NAME:VERSION",0 (variable length, this area is used in order to determine if the TSR is already resident and it's version code; the ':' char is used as delimiter) Format of vector_area table: Offset Size Description -1 BYTE number of vectors intercepted by TSR 00h BYTE first vector number 01h DWORD first vector pointer before installing the TSR 05h BYTE second vector number 06h DWORD second vector pointer before installing the TSR . . (and so on) Note that the TSR must be use THIS variables to invoke previous interrupt handler routines. Format of extra_area table (needed only to improve relocation feature): Offset Size Description 00h WORD offset to external_ctrl table (0 if not supported) 02h WORD reserved for future use (0) Format of external_ctrl table: Offset Size Description 00h BYTE bit 0: TSR is relocatable (no absolute segment references) 01h WORD offset to a variable which can activate/inhibit the TSR ---And if bit 0 in offset 00h is off: 03h DWORD pointer to ASCIIZ with pathname to executable file which supports /SR parameter (silent installation & inhibit) 07h DWORD pointer to first variable to initialize on the copy reloaded from the previous TSR still resident 0Bh DWORD pointer to last variable (all variables packed in one block) ----------2F00------------------------------- INT 2F U - DOS 2.x PRINT.COM - ??? AH = 00h ??? Return: ??? Notes: DOS 2.x PRINT.COM does not chain to previous INT 2F handler values in AH other than 00h or 01h cause PRINT to return the number of files in the queue in AH SeeAlso: AH=01h ----------2F0080----------------------------- INT 2F - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE AX = 0080h Return: after PRINT executes ----------2F01------------------------------- INT 2F U - DOS 2.x PRINT.COM - ??? AH = 01h ??? Return: ??? Notes: DOS 2.x PRINT.COM does not chain to previous INT 2F handler values in AH other than 00h or 01h cause PRINT to return the number of files in the queue in AH SeeAlso: AH=00h ----------2F0100----------------------------- INT 2F - DOS 3+ PRINT.COM - INSTALLATION CHECK AX = 0100h Return: AL = status 00h not installed 01h not installed, but not OK to install FFh installed SeeAlso: AX=0101h ----------2F0101----------------------------- INT 2F - DOS 3+ PRINT.COM - SUBMIT FILE FOR PRINTING AX = 0101h DS:DX -> submit packet (see below) Return: CF clear if successful AL = 01h added to queue 9Eh now printing CF set on error AX = error code (see also INT 21/AH=59h) 01h invalid function 02h file not found 03h path not found 04h out of file handles 05h access denied 08h print queue full 09h spooler busy 0Ch name too long 0Fh invalid drive SeeAlso: AX=0102h Format of submit packet: Offset Size Description 00h BYTE level (must be 00h) 01h DWORD pointer to ASCIZ filename (no wildcards) ----------2F0102----------------------------- INT 2F - DOS 3+ PRINT.COM - REMOVE FILE FROM PRINT QUEUE AX = 0102h DS:DX -> ASCIZ filename (wildcards allowed) Return: CF clear if successful CF set on error AX = error code (see AX=0101h) SeeAlso: AX=0101h,AX=0103h ----------2F0103----------------------------- INT 2F - DOS 3+ PRINT.COM - CANCEL ALL FILES IN PRINT QUEUE AX = 0103h Return: CF clear if successful CF set on error AX = error code (see AX=0101h) SeeAlso: AX=0102h ----------2F0104----------------------------- INT 2F - DOS 3+ PRINT.COM - FREEZE PRINT QUEUE TO READ JOB STATUS AX = 0104h Return: CF clear if successful DX = error count DS:SI -> print queue CF set on error AX = error code (see AX=0101h) Notes: the print queue is an array of 64-byte ASCIZ filenames terminated by an empty filename; the first name is the file currently being printed printing is stopped until AX=0105h is called to prevent the queue from changing while the filenames are being read SeeAlso: AX=0101h,AX=0105h ----------2F0105----------------------------- INT 2F - DOS 3+ PRINT.COM - RESTART PRINT QUEUE AFTER STATUS READ AX = 0105h Return: CF clear if successful CF set on error AX = error code (see AX=0101h) SeeAlso: AX=0104h ----------2F0106----------------------------- INT 2F - DOS 3.3+ PRINT.COM - GET PRINTER DEVICE AX = 0106h Return: CF set if files in print queue AX = error code 0008h (queue full) DS:SI -> device driver header CF clear if print queue empty AX = 0000h Note: documented for DOS 5+, but not documented for prior versions SeeAlso: AX=0104h ----------2F0200----------------------------- INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK AX = 0200h Return: AL = FFh if installed ----------2F0201----------------------------- INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ??? AX = 0201h Return: nothing??? Notes: called by DOS 3.3+ PRINT.COM AX=0202h appears to be the opposite function SeeAlso: AX=0202h ----------2F0202----------------------------- INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ??? AX = 0202h ??? Return: nothing??? Note: called by DOS 3.3+ PRINT.COM SeeAlso: AX=0201h ----------2F0203----------------------------- INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ??? AX = 0203h Return: nothing??? Notes: called by DOS 3.3+ PRINT.COM AX=0204h appears to be the opposite function SeeAlso: AX=0204h ----------2F0204----------------------------- INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ??? AX = 0204h ??? Return: nothing??? Note: called by DOS 3.3 PRINT.COM ----------2F--------------------------------- INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ??? AX = 02xxh ??? Return: ??? ----------2F0500----------------------------- INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK AX = 0500h Return: AL = 00h not installed, OK to install 01h not installed, can't install FFh installed Note: this set of functions allows a user program to partially or completely override the default critical error handler's message in COMMAND.COM SeeAlso: AH=05h,INT 24 ----------2F05------------------------------- INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING AH = 05h ---DOS 3.x--- AL = extended error code (not zero) ---DOS 4+ --- AL = error type 01h DOS extended error code 02h parameter error BX = error code Return: CF clear if successful ES:DI -> ASCIZ error message (read-only) AL = ??? CF set if error code can't be converted to string Notes: called at start of COMMAND.COM's default critical error handler if installed by a user program, allowing partial or complete overriding of the default error message subfunction 02h called by many DOS 4 external programs SeeAlso: AX=122Eh,INT 24 ----------2F0600----------------------------- INT 2F - DOS v3.0+ ASSIGN - INSTALLATION CHECK AX = 0600h Return: AL = status 00h not installed 01h not installed, but not OK to install FFh installed Note: ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST (see INT 21/AX=2152h) SeeAlso: AX=0601h,INT 21/AX=2152h ----------2F0601----------------------------- INT 2F U - DOS v3.0+ ASSIGN - GET DRIVE ASSIGNMENT TABLE AX = 0601h Return: ES = segment of ASSIGN work area and assignment table Note: under DOS 3+, the 26 bytes starting at ES:0103h specify which drive each of A: to Z: is mapped to. Initially set to 01h 02h 03h.... SeeAlso: AX=0600h ----------2F0800----------------------------- INT 2F U - DRIVER.SYS support - INSTALLATION CHECK AX = 0800h Return: AL = 00h not installed, OK to install 01h not installed, not OK to install FFh installed Note: supported by DR-DOS 5.0 ----------2F0801----------------------------- INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE AX = 0801h DS:DI -> drive data table (see AX=0803h) Notes: moves down internal list of drive data tables, copying and modifying the drive description flags word for tables referencing same physical drive data table appended to chain of tables supported by DR-DOS 5.0 SeeAlso: AX=0803h ----------2F0802----------------------------- INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST AX = 0802h ES:BX -> device driver request header (see below) Return: request header updated as per requested operation Notes: supported by DR-DOS 5.0 DOS 3.2 executes this function on any AL value from 02h through F7h Format of device driver request header: Offset Size Description 00h BYTE length of request header 01h BYTE subunit within device driver 02h BYTE command code (see below) 03h WORD status (filled in by device driver) bit 15: error bits 14-11: reserved bit 10: ??? set by DOS kernel on entry to some driver calls bit 9: busy bit 8: done bits 7-0: error code if bit 15 set (see below) ---DOS--- 05h 8 BYTEs reserved (unused in DOS 2.x and 3.x) ---STARLITE architecture--- 05h DWORD pointer to next request header 09h 4 BYTEs reserved ---command code 00h--- 0Dh BYTE number of units (set by driver) 0Eh DWORD address of first free byte following driver (set by driver) 12h DWORD pointer to BPB array (set by block drivers only) 16h BYTE (DOS 3+) drive number for first unit of block driver (0=A) ---command code 01h--- 0Dh BYTE media descriptor 0Eh BYTE returned status 00h don't know 01h media has not changed FFh media has been changed 0Fh DWORD (DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM bit in device header set and disk changed (set by driver) ---command code 02h--- 0Dh BYTE media descriptor 0Eh DWORD transfer address -> scratch sector if NON-IBM FORMAT bit in device header set -> first FAT sector otherwise 12h DWORD pointer to BPB (set by driver) ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h) 0Dh BYTE media descriptor (block devices only) 0Eh DWORD transfer address 12h WORD byte count (character devices) or sector count (block devices) 14h WORD starting sector number (block devices only) 16h DWORD (DOS 3+) pointer to volume label if error 0Fh (set by driver) ---command codes 04h,08h,09h--- 0Dh BYTE media descriptor (block devices only) 0Eh DWORD transfer address 12h WORD byte count (character devices) or sector count (block devices) 14h WORD starting sector number (block devices only) 16h DWORD (DOS 3+) pointer to volume ID if error 0Fh returned 1Ah DWORD (DOS 4+) 32-bit starting sector number (block devices with device attribute word bit 1 set only) (see INT 21/AH=52h) ---command code 05h--- 0Dh BYTE byte read from device if BUSY bit clear on return ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh,85h,88h--- no further fields ---command code 10h--- 0Dh BYTE unused 0Eh DWORD transfer address 12h WORD byte count ---command codes 13h,19h--- 0Dh BYTE category code 00h unknown 01h COMn: 03h CON 05h LPTn: 08h disk 9Eh (STARLITE) Media Access Control driver 0Eh BYTE function code 00h (STARLITE) MAC Bind request 0Fh WORD copy of DS at time of IOCTL call (apparently unused in DOS 3.3) 11h WORD offset of device driver header 13h DWORD pointer to parameter block from INT 21/AX=440Ch or AX=440Dh ---command codes 80h,82h--- 0Dh BYTE addressing mode 00h HSG (default) 01h Phillips/Sony Red Book 0Eh DWORD transfer address (ignored for command 82h) 12h WORD number of sectors to read (if 0 for command 82h, request is an advisory seek) 14h DWORD starting sector number logical sector number in HSG mode frame/second/minute/unused in Red Book mode (HSG sector = minute * 4500 + second * 75 + frame - 150) 18h BYTE data read mode 00h cooked (2048 bytes per frame) 01h raw (2352 bytes per frame, including EDC/ECC) 19h BYTE interleave size (number of sectors stored consecutively) 1Ah BYTE interleave skip factor (# sectors between consec portions) ---command code 83h--- 0Dh BYTE addressing mode (see above) 0Eh DWORD transfer address (ignored) 12h WORD number of sectors to read (ignored) 14h DWORD starting sector number (see also above) ---command code 84h--- 0Dh BYTE addressing mode (see above) 0Eh DWORD starting sector number (see also above) 12h DWORD number of sectors to play ---command codes 86h,87h--- 0Dh BYTE addressing mode (see above) 0Eh DWORD transfer address (ignored in write mode 0) 12h WORD number of sectors to write 14h DWORD starting sector number (see also above) 18h BYTE write mode 00h mode 0 (write all zeros) 01h mode 1 (default) (2048 bytes per sector) 02h mode 2 form 1 (2048 bytes per sector) 03h mode 2 form 2 (2336 bytes per sector) 19h BYTE interleave size (number of sectors stored consecutively) 1Ah BYTE interleave skip factor (# sectors between consec portions) Values for command code: 00h INIT 01h MEDIA CHECK (block devices) 02h BUILD BPB (block devices) 03h IOCTL INPUT 04h INPUT 05h NONDESTRUCTIVE INPUT, NO WAIT (character devices) 06h INPUT STATUS (character devices) 07h INPUT FLUSH (character devices) 08h OUTPUT 09h OUTPUT WITH VERIFY 0Ah OUTPUT STATUS (character devices) 0Bh OUTPUT FLUSH (character devices) 0Ch IOCTL OUTPUT 0Dh (DOS 3+) DEVICE OPEN 0Eh (DOS 3+) DEVICE CLOSE 0Fh (DOS 3+) REMOVABLE MEDIA (block devices) 10h (DOS 3+) OUTPUT UNTIL BUSY (character devices) 11h unused 12h unused 13h (DOS 3.2+) GENERIC IOCTL 14h unused 15h unused 16h unused 17h (DOS 3.2+) GET LOGICAL DEVICE 18h (DOS 3.2+) SET LOGICAL DEVICE 19h (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT 80h (CD-ROM) READ LONG 81h (CD-ROM) reserved 82h (CD-ROM) READ LONG PREFETCH 83h (CD-ROM) SEEK 84h (CD-ROM) PLAY AUDIO 85h (CD-ROM) STOP AUDIO 86h (CD-ROM) WRITE LONG 87h (CD-ROM) WRITE LONG VERIFY 88h (CD-ROM) RESUME AUDIO Values for error code: 00h write-protect violation 01h unknown unit 02h drive not ready 03h unknown command 04h CRC error 05h bad drive request structure length 06h seek error 07h unknown media 08h sector not found 09h printer out of paper 0Ah write fault 0Bh read fault 0Ch general failure 0Dh reserved 0Eh (CD-ROM) media unavailable 0Fh invalid disk change ----------2F0803----------------------------- INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST AX = 0803h Return: DS:DI -> first drive data table in list Note: not available under DR-DOS 5.0 SeeAlso: AX=0801h Format of DOS 3.30 drive data table: Offset Size Description 00h DWORD pointer to next table 04h BYTE physical unit number (for INT 13) 05h BYTE logical drive number 06h 19 BYTEs BIOS Parameter Block (see also INT 21/AH=53h) Offset Size Description 00h WORD bytes per sector 02h BYTE sectors per cluster, FFh if unknown 03h WORD number of reserved sectors 05h BYTE number of FATs 06h WORD number of root dir entries 08h WORD total sectors 0Ah BYTE media descriptor, 00h if unknown 0Bh WORD sectors per FAT 0Dh WORD sectors per track 0Fh WORD number of heads 11h WORD number of hidden sectors 19h BYTE flags bit 6: 16-bit FAT instead of 12-bit FAT 1Ah WORD number of DEVICE OPEN calls without corresponding DEVICE CLOSE 1Ch 11 BYTEs volume label or "NO NAME " if none (always "NO NAME" for fixed media) 27h BYTE terminating null for volume label??? 28h BYTE device type (see INT 21/AX=440Dh) 29h WORD bit flags describing drive bit 0: fixed media bit 1: door lock supported bit 2: ??? (used in determining BPB to set for INT 21/AX=440Dh) bit 3: all sectors in a track are the same size bit 4: physical drive has multiple logical units bit 5: current logical drive for physical drive bit 6: ??? bit 7: ??? bit 8: ??? (related to disk change detection) 2Bh WORD number of cylinders 2Dh 19 BYTEs BIOS Parameter Block for highest capacity supported 40h 3 BYTEs ??? 43h 9 BYTEs filesystem type???, default = "NO NAME " (apparently only MSDOS 3.30 fixed media, nulls for removable media and PCDOS 3.30) 4Ch BYTE least-significant byte of last-accessed cylinder number ---removable media--- 4Dh DWORD time of last access in clock ticks (FFFFFFFFh if never) ---fixed media--- 4Dh WORD partition (FFFFh = primary, 0001h = extended) 4Fh WORD absolute cylinder number of partition's start on physical drive (always FFFFh if primary partition) Format of COMPAQ DOS 3.31 drive data table: Offset Size Description 00h DWORD pointer to next table 04h BYTE physical unit number (for INT 13) 05h BYTE logical drive number 06h 25 BYTEs BIOS Parameter Block (see DOS 4.01 drive data table below) 1Fh 6 BYTEs ??? apparently always zeros 25h BYTE flags bit 6: 16-bit FAT instead of 12-bit FAT 5: large volume??? 26h WORD device-open count??? 28h 11 BYTEs volume label or "NO NAME " if none (always "NO NAME" for fixed media) 33h BYTE terminating null for volume label 34h BYTE device type (see INT 21/AX=440Dh) 35h WORD bit flags describing drive 37h WORD number of cylinders 39h 25 BYTEs BIOS parameter block for highest capacity drive supports 52h 6 BYTEs ??? apparently always zeros 58h BYTE least-significant byte of last-accessed cylinder number ---removable media--- 59h DWORD time of last access in clock ticks (FFFFFFFFh if never) ---fixed media--- 59h WORD partition (FFFFh = primary, 0001h = extended) 5Bh WORD absolute cylinder number of partition's start on physical drive (always FFFFh if primary partition) Format of DOS 4.0-5.0 drive data table: Offset Size Description 00h DWORD pointer to next table 04h BYTE physical unit number (for INT 13) 05h BYTE logical drive number 06h 25 BYTEs BIOS Parameter Block (see also INT 21/AH=53h) Offset Size Description 00h WORD bytes per sector 02h BYTE sectors per cluster, FFh if unknown 03h WORD number of reserved sectors 05h BYTE number of FATs 06h WORD number of root dir entries 08h WORD total sectors (see offset 15h if zero) 0Ah BYTE media descriptor, 00h if unknown 0Bh WORD sectors per FAT 0Dh WORD sectors per track 0Fh WORD number of heads 11h DWORD number of hidden sectors 15h DWORD total sectors if WORD at 08h is zero 1Fh BYTE flags bit 6: 16-bit FAT instead of 12-bit 20h 2 BYTEs ??? 22h BYTE device type (see INT 21/AX=440Dh) 23h WORD bit flags describing drive bit 0: fixed media bit 1: door lock supported bit 2: ??? bit 3: all sectors in a track are the same size bit 4: physical drive has multiple logical units bit 5: current logical drive for physical drive bit 6: ??? bit 7: ??? bit 8: ??? 25h WORD number of cylinders 27h 25 BYTEs BIOS Parameter Block for highest capacity supported 40h 7 BYTEs ??? ---removable media--- 47h DWORD time of last access in clock ticks (FFFFFFFFh if never) ---fixed media, DOS 4.x--- 47h WORD partition (FFFFh = primary, 0001h = extended) 49h WORD absolute cylinder number of partition's start on phys drive (FFFFh if primary partition) ---fixed media, DOS 5.0--- 47h WORD ??? apparently always 0001h 49h WORD absolute cylinder number of partition's start on phys drive ------ 4Bh 11 BYTEs volume label or "NO NAME " if none (apparently taken from extended boot record rather than root directory) 56h BYTE terminating null for volume label??? 57h DWORD serial number 5Bh 8 BYTEs filesystem type ("FAT12 " or "FAT16 ") 63h BYTE terminating null for filesystem type??? ----------2F0C00----------------------------- INT 2F - AD-DOS - INSTALLATION CHECK AX = 0C00h Return: AL = FF if installed BX = 4144H ('AD') CX = 2D44H ('-D') DX = 4F53H ('OS') Notes: AD-DOS is the DOS version of the After Dark screen blanker for MS Windows AH=0Ch is the default multiplex number SeeAlso: AX=0C01h ----------2F0C01ES0000----------------------- INT 2F - AD-DOS - GET RESIDENT CODE SEGMENT AX = 0C01h ES = 0000h Return: CF clear succesful ES = AD-DOS TSR Code Segment CF set if failed SeeAlso: AX=0C00h ----------2F0C02----------------------------- INT 2F - AD-DOS - CHECK FOR NEW INPUT AX = 0C02h Return: BX = status 0000h no input since last check 0001h new input available Note: this call also resets the new-input flag ----------2F0C03----------------------------- INT 2F - AD-DOS - SET MINUTES TO WAIT AX = 0C03h BX = minutes to wait before blanking screen CF set Return: n/a??? Notes: AD-DOS is the DOS version of the After Dark screen blanker AH=0Ch is the default multiplex number SeeAlso: AX=0C04h ----------2F0C04----------------------------- INT 2F - AD-DOS - GET MINUTES TO WAIT AX = 0C04h CF set Return: BX = minutes to wait before blanking screen ??? SeeAlso: AX=0C03h ----------2F0C05----------------------------- INT 2F - AD-DOS - SET ENABLE??? FLAG AX = 0C05h BX = new state (0000h or 0001h) (default 0001h) CF set Return: n/a??? SeeAlso: AX=0C06h ----------2F0C06----------------------------- INT 2F - AD-DOS - GET ENABLE??? FLAG AX = 0C06h Carry Set Return: BX = current state of ??? flag (0000h or 0001h) ??? Notes: AD-DOS is the DOS version of the After Dark screen blanker AH=0Ch is the default multiplex number SeeAlso: AX=0C05h ----------2F0C07----------------------------- INT 2F - AD-DOS - SET HOT KEY AX = 0C07h BX = hot key CL = hot key shift status CF set Return: n/a??? SeeAlso: AX=0C08h ----------2F0C08----------------------------- INT 2F - AD-DOS - GET CURRENT HOT KEY AX = 0C08h CF set Return: AX = status 0000h successful BX = Hot Key CL = Hot Key Shift Status 0008h otherwise SeeAlso: AX=0C07h ----------2F0C09----------------------------- INT 2F - AD-DOS - ??? AX = 0C09h Carry Set Return: AX = status 0000h successful ??? 0009h otherwise Notes: AD-DOS is the DOS version of the After Dark screen blanker AH=0Ch is the default multiplex number ----------2F0C0A----------------------------- INT 2F - AD-DOS - ??? AX = 0C0Ah CF set Return: AX = status 0000h successful BH = ?? BL = ?? 000Ah failed ----------2F0C0B----------------------------- INT 2F - AD-DOS - ??? AX = 0C0Bh CF set Return: AX = status 0000h successful 000Bh failed ----------2F0C0C----------------------------- INT 2F - AD-DOS - SET ??? INTERNAL FLAG TO 01h AX = 0C0Ch CF set Return: AX = status 0000h successful 000Ch failed Notes: AD-DOS is the DOS version of the After Dark screen blanker AH=0Ch is the default multiplex number ----------2F0C20----------------------------- INT 2F - AD-DOS - GET AND RESET VxD API STATUS AX = 0C20h CF set Return: AX = status 0000h successful BX = VxD API Status 0000h no error 0001h error 0100h neither Windows 3.X enhanced mode nor Windows/386 2.x is running 0200h VM API entry point found 0020h otherwise Note: this call resets the VxD API Status to zero SeeAlso: AX=1602h,AX=1607h ----------2F1000----------------------------- INT 2F - SHARE - INSTALLATION CHECK AX = 1000h Return: AL = 00h not installed, OK to install 01h not installed, not OK to install FFh installed BUGS: values of AL other than 00h put DOS 3.x SHARE into an infinite loop (08E9: OR AL,AL 08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3) values of AL other than described here put PCDOS 4.00 into the same loop (the buggy instructions are the same) Notes: supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh if DOS 4.01 SHARE was automatically loaded, file sharing is in an inactive state (due to the undocumented /NC flag used by the autoload code) until this call is made DOS 5.0 chains to the previous handler if AL <> 00h on entry SeeAlso: AX=1080h,INT 21/AH=52h ----------2F1040----------------------------- INT 2F U - DOS 4 only SHARE internal - ??? AX = 1040h ??? Return: AL = FFh??? SeeAlso: AX=1000h ----------2F1080----------------------------- INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS AX = 1080h Return: AL = status F0h successful FFh checking was already on Note: DOS 4.x SHARE has dual functions: FCB support for large (>32M) media and file sharing checks. The undocumented commandline flag /NC can be used to disable the sharing code. SeeAlso: AX=1000h,AX=1081h ----------2F1081----------------------------- INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS AX = 1081h Return: AL = status F0h successful FFh checking was already off Note: (see AX=1080h) SeeAlso: AX=1000h,AX=1080h ----------2F10FF----------------------------- INT 2F U - Multiplex - DR-DOS 5.0 - ??? AX = 10FFh ES:BX -> ??? Note: sets pointer in kernel ----------2F1100----------------------------- INT 2F - NETWORK REDIRECTOR - INSTALLATION CHECK AX = 1100h Return: AL = 00h not installed, OK to install 01h not installed, not OK to install FFh installed Notes: called by DOS 3.1+ kernel In DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the PC LAN Program redirector; DOS 5.0 moves the calls back into the redirector ----------2F1100----------------------------- INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK AX = 1100h STACK: WORD DADAh Return: AL = 00h not installed, OK to install STACK unchanged = 01h not installed, not OK to install STACK unchanged = FFh installed STACK: WORD ADADh ----------2F1101----------------------------- INT 2F U - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY AX = 1101h SS = DOS DS SDA first filename pointer -> fully-qualified directory name SDA CDS pointer -> current directory structure for drive with dir Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: called by DOS 3.1+ kernel SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h ----------2F1102----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY AX = 1102h SS = DOS DS SDA first filename pointer -> fully-qualified directory name SDA CDS pointer -> current directory structure for drive with dir Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: appears to be identical to AX=1101h SeeAlso: AX=1101h ----------2F1103----------------------------- INT 2F U - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY AX = 1103h SS = DOS DS SDA first filename pointer -> fully-qualified directory name SDA CDS pointer -> current directory structure for drive with dir Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: called by DOS 3.1+ kernel SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h ----------2F1104----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY AX = 1104h SS = DOS DS SDA first filename pointer -> fully-qualified directory name SDA CDS pointer -> current directory structure for drive with dir Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: appears to be identical to AX=1103h SeeAlso: AX=1103h ----------2F1105----------------------------- INT 2F U - NETWORK REDIRECTOR - CHDIR AX = 1105h SS = DOS DS SDA first filename pointer -> fully-qualified directory name SDA CDS pointer -> current directory structure for drive with dir Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful CDS updated with new path Notes: called by DOS 3.1+ kernel directory string in CDS should not have a terminating backslash unless the current directory is the root SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h ----------2F1106----------------------------- INT 2F U - NETWORK REDIRECTOR - CLOSE REMOTE FILE AX = 1106h ES:DI -> SFT SFT DPB field -> DPB of drive containing file Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful SFT updated (except handle count, which DOS manages itself) Note: called by DOS 3.1+ kernel SeeAlso: AX=1201h,AX=1227h,INT 21/AH=3Eh ----------2F1107----------------------------- INT 2F U - NETWORK REDIRECTOR - COMMIT REMOTE FILE AX = 1107h ES:DI -> SFT SFT DPB field -> DPB of drive containing file Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful all buffers for file flushed directory entry updated Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h ----------2F1108----------------------------- INT 2F U - NETWORK REDIRECTOR - READ FROM REMOTE FILE AX = 1108h ES:DI -> SFT SFT DPB field -> DPB of drive containing file CX = number of bytes SS = DOS DS SDA DTA field -> user buffer Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful CX = number of bytes read (0000h = end of file) SFT updated Note: called by DOS 3.1+ kernel SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h ----------2F1109----------------------------- INT 2F U - NETWORK REDIRECTOR - WRITE TO REMOTE FILE AX = 1109h ES:DI -> SFT SFT DPB field -> DPB of drive containing file CX = number of bytes SS = DOS DS SDA DTA field -> user buffer Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful CX = number of bytes written SFT updated Note: called by DOS 3.1+ kernel SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h ----------2F110A----------------------------- INT 2F U - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE AX = 110Ah BX = file handle CX:DX = starting offset SI = high word of size STACK: WORD low word of size ES:DI -> SFT SFT DPB field -> DPB of drive containing file SS = DOS DS Return: CF set on error AL = DOS error code (see INT 21/AH=59h) STACK unchanged Notes: called by DOS 3.10-3.31 kernel the redirector is expected to resolve lock conflicts SeeAlso: AX=110Bh,INT 21/AH=5Ch ----------2F110A----------------------------- INT 2F U - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE AX = 110Ah BL = function 00h lock 01h unlock DS:DX -> parameter block (see below) ES:DI -> SFT SFT DPB field -> DPB of drive containing file SS = DOS DS Return: CF set on error AL = DOS error code (see INT 21/AH=59h) Notes: called by DOS 4.0+ kernel the redirector is expected to resolve lock conflicts SeeAlso: AX=110Bh,INT 21/AH=5Ch Format of parameter block: Offset Size Description 00h DWORD start offset 04h DWORD size of region ----------2F110B----------------------------- INT 2F U - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE AX = 110Bh BX = file handle CX:DX = starting offset SI = high word of size STACK: WORD low word of size ES:DI -> SFT for file SFT DPB field -> DPB of drive containing file Return: CF set on error AL = DOS error code (see INT 21/AH=59h) STACK unchanged Note: called by DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead SeeAlso: AX=110Ah,INT 21/AH=5Ch ----------2F110C----------------------------- INT 2F U - NETWORK REDIRECTOR - GET DISK SPACE AX = 110Ch ES:DI -> current directory structure for desired drive Return: AL = sectors per cluster AH = media ID byte BX = total clusters CX = bytes per sector DX = number of available clusters Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AH=36h ----------2F110D----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 110Dh SDA first filename pointer -> name of file ??? Return: ??? Note: appears to be similar to AX=110Fh SeeAlso: AX=110Fh ----------2F110E----------------------------- INT 2F U - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES AX = 110Eh SS = DOS DS SDA first filename pointer -> fully-qualified name of file SDA CDS pointer -> current directory structure for drive with file STACK: WORD new file attributes Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful STACK unchanged Note: called by DOS 3.1+ kernel SeeAlso: AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h ----------2F110F----------------------------- INT 2F U - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE AX = 110Fh SS = DOS DS SDA first filename pointer -> fully-qualified name of file SDA CDS pointer -> current directory structure for drive with file Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful AX = file attributes BX:DI = file size Note: called by DOS 3.1+ kernel SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h ----------2F1110----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 1110h SDA first filename pointer -> name of file ??? Return: ??? Note: appears to be similar to AX=110Eh SeeAlso: AX=110Eh ----------2F1111----------------------------- INT 2F U - NETWORK REDIRECTOR - RENAME REMOTE FILE AX = 1111h SS = DS = DOS DS SDA first filename pointer = offset of fully-qualified old name SDA second filename pointer = offset of fully-qualified new name SDA CDS pointer -> current directory structure for drive with file Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AH=56h,INT 21/AH=60h ----------2F1112----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 1112h SS = DS = DOS DS SDA first filename pointer -> name of file ??? Return: ??? SeeAlso: AX=1111h ----------2F1113----------------------------- INT 2F U - NETWORK REDIRECTOR - DELETE REMOTE FILE AX = 1113h SS = DS = DOS DS SDA first filename pointer -> fully-qualified filename in DOS DS SDA CDS pointer -> current directory structure for drive with file Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Notes: called by DOS 3.1+ kernel the filespec may contain wildcards SeeAlso: INT 21/AH=41h,INT 21/AH=60h ----------2F1114----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 1114h SDA first filename pointer -> name of file ??? Return: ??? SeeAlso: AX=1113h ----------2F1115----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 1115h SS = DOS DS ES:DI -> SFT ??? ??? Return: ??? SeeAlso: AX=112Eh ----------2F1116----------------------------- INT 2F U - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE AX = 1116h ES:DI -> uninitialized SFT SS = DOS DS SDA first filename pointer -> fully-qualified name of file to open STACK: WORD file open mode (see INT 21/AH=3Dh) Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful SFT filled (except handle count, which DOS manages itself) STACK unchanged Note: called by DOS 3.1+ kernel SeeAlso: AX=1106h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh,INT 21/AH=60h ----------2F1117----------------------------- INT 2F U - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE AX = 1117h ES:DI -> uninitialized SFT SS = DOS DS SDA first filename pointer -> fully-qualified name of file to open SDA CDS pointer -> current directory structure for drive with file STACK: WORD file creation mode low byte = file attributes high byte = 00h normal create, 01h create new file Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful SFT filled (except handle count, which DOS manages itself) STACK unchanged Note: called by DOS 3.1+ kernel SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h ----------2F1118----------------------------- INT 2F U - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS AX = 1118h ES:DI -> uninitialized SFT SS = DOS DS SDA first filename pointer -> fully-qualified name of file STACK: WORD file creation mode low byte = file attributes high byte = 00h normal create, 01h create new file Return: ??? STACK unchanged Note: called by DOS 3.1+ kernel when creating a file on a drive for which the SDA CDS pointer has offset FFFFh SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h ----------2F1119----------------------------- INT 2F U - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS AX = 1119h SS = DS = DOS DS [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh) SDA first filename pointer -> fully-qualified search template SDA search attribute = attribute mask for search Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful [DTA] = updated findfirst search data (bit 7 of first byte must be set) [DTA+15h] = standard directory entry for file Notes: called by DOS 3.1+ kernel DOS 4.x IFSFUNC returns CF set, AX=0003h ----------2F111A----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 111Ah ??? Return: CF set AX = error code (03h for DOS 4.01 IFSFUNC) ----------2F111B----------------------------- INT 2F U - NETWORK REDIRECTOR - FINDFIRST AX = 111Bh SS = DS = DOS DS [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh) SDA first filename pointer -> fully-qualified search template SDA CDS pointer -> current directory structure for drive with file SDA search attribute = attribute mask for search Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful [DTA] = updated findfirst search data (bit 7 of first byte must be set) [DTA+15h] = standard directory entry for file Note: called by DOS 3.1+ kernel SeeAlso: AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h ----------2F111C----------------------------- INT 2F U - NETWORK REDIRECTOR - FINDNEXT AX = 111Ch SS = DS = DOS DS [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh) Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful [DTA] = updated findfirst search data (bit 7 of first byte must be set) [DTA+15h] = standard directory entry for file Note: called by DOS 3.1+ kernel SeeAlso: AX=111Bh,INT 21/AH=4Fh ----------2F111D----------------------------- INT 2F U - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS AX = 111Dh DS??? SS = DOS DS Return: ??? Notes: called by DOS 3.1+ kernel closes all FCBs opened by process ----------2F111E----------------------------- INT 2F U - NETWORK REDIRECTOR - DO REDIRECTION AX = 111Eh SS = DOS DS STACK: WORD function to execute 5F00h get redirection mode BL = type (03h printer, 04h disk) Return: BH = state (00h off, 01h on) 5F01h set redirection mode BL = type (03h printer, 04h disk) BH = state (00h off, 01h on) 5F02h get redirection list entry BX = redirection list index DS:SI -> 16-byte local device name buffer ES:DI -> 128-byte network name buffer Return: must set user's BX to device type and CX to stored parameter value, using AX=1218h to get stack frame address 5F03h redirect device BL = device type (see INT 21/AX=5F03h) CX = stored parameter value DS:SI -> ASCIZ source device name ES:DI -> destination ASCIZ network path + ASCIZ passwd 5F04h cancel redirection DS:SI -> ASCIZ device name or network path 5F05h get redirection list extended entry BX = redirection list index DS:SI -> buffer for ASCIZ source device name ES:DI -> buffer for destination ASCIZ network path Return: BH = status flag BL = type (03h printer, 04h disk) CX = stored parameter value BP = NETBIOS local session number 5F06h similar to 5F05h??? Return: CF set on error AX = error code (see INT 21/AH=59h) STACK unchanged Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h ----------2F111F----------------------------- INT 2F U - NETWORK REDIRECTOR - PRINTER SETUP AX = 111Fh STACK: WORD function 5E02h set printer setup 5E03h get printer setup 5E04h set printer mode 5E05h get printer mode Return: CF set on error AX = error code (see INT 21/AH=59h) STACK unchanged Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h ----------2F1120----------------------------- INT 2F U - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS AX = 1120h DS = DOS DS ??? Return: CF clear (successful) Notes: called by DOS 3.1+ kernel uses CDS array pointer and LASTDRIVE= entries in DOS list of lists SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h ----------2F1121----------------------------- INT 2F U - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE AX = 1121h CX:DX = offset (in bytes) from end ES:DI -> SFT SFT DPB field -> DPB of drive with file SS = DOS DS Return: CF set on error AL = DOS error code (see INT 21/AH=59h) CF clear if successful DX:AX = new file position Note: called by DOS 3.1+ kernel SeeAlso: AX=1228h,INT 21/AH=42h ----------2F1122----------------------------- INT 2F U - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK AX = 1122h SS = DOS DS ??? Return: ??? Note: called by DOS 3.1+ kernel ----------2F1123----------------------------- INT 2F U - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME AX = 1123h DS:SI -> ASCIZ filename to canonicalize ES:DI -> 128-byte buffer for qualified name Return: CF set if not resolved Notes: called by MSDOS 3.1+ kernel, but not called by DRDOS 5.0 unless the filename matches the name of a character device called first when DOS attempts to resolve a filename (unless inside an AX=5D00h server call); if this fails, DOS resolves the name locally SeeAlso: AX=1221h,INT 21/AH=60h ----------2F1124----------------------------- INT 2F U - NETWORK REDIRECTOR - PRINTER OFF??? AX = 1124h ES:DI -> SFT SS = DOS DS ??? Return: CX = ??? Note: called by DOS 3.1+ kernel if AX=1126h returns CF set SeeAlso: AX=1126h ----------2F1125----------------------------- INT 2F U - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE AX = 1125h STACK: WORD subfunction 5D07h get print stream state Return: DL = current state 5D08h set print stream state DL = new state 5D09h finish print job Return: CF set on error AX = error code (see INT 21/AH=59h) STACK unchanged Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h ----------2F1126----------------------------- INT 2F U - NETWORK REDIRECTOR - PRINTER ON/OFF??? AX = 1126h ES:DI -> SFT for file handle 4??? SS = DOS DS??? ??? Return: CF set on error Notes: called by DOS 3.1+ kernel called when print echoing (^P, ^PrtSc) changes state and STDPRN has bit 11 of the device information word in the SFT set SeeAlso: AX=1124h ----------2F1127----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - UNUSED AX = 1127h Return: CF set AX = 0001h (invalid function) (see INT 21/AH=59h) ----------2F1128----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - UNUSED AX = 1128h Return: CF set AX = 0001h (invalid function) (see INT 21/AH=59h) ----------2F1129----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - UNUSED AX = 1129h Return: CF set AX = 0001h (invalid function) (see INT 21/AH=59h) ----------2F112A----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 112Ah DS = DOS DS ??? Return: ??? Note: does something to each IFS driver ----------2F112B----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL??? AX = 112Bh SS = DOS DS CX = function/category DS:DX -> parameter block STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh) ??? Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: called by DOS 4.0 kernel ----------2F112C----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 112Ch SS = DOS DS SDA current SFT pointer -> SFT for file ??? Return: CF set on error ----------2F112D----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 112Dh BL = subfunction (value of AL on INT 21) 04h truncate open file to zero length ES:DI -> SFT for file Return: CF clear else ??? Return: CX = ??? (00h or 02h for DOS 4.01) ES:DI -> SFT SS = DOS DS Return: DS = DOS DS Note: called by DOS 4.0 kernel on INT 21/AX=5702h,INT 21/AX=5703h, INT 21/AX=5704h ----------2F112E----------------------------- INT 2F U - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE AX = 112Eh SS = DS = DOS DS ES:DI -> uninitialized SFT for file STACK: WORD file attribute for created/truncated file low byte = file attributes high byte = 00h normal create/open, 01h create new file SDA first filename pointer -> fully-qualified filename SDA extended file open action = action code (see INT 21/AX=6C00h) SDA extended file open mode = open mode for file (see INT 21/AX=6C00h) Return: CF set on error AX = error code CF clear if successful CX = result code 01h file opened 02h file created 03h file replaced (truncated) SFT initialized (except handle count, which DOS manages itself) Note: called by DOS 4.0 kernel SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h ----------2F112F----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 112Fh SS = DOS DS STACK: WORD function in low byte 00h ??? DS:SI -> Current Directory Structure??? CL = drive (1=A:) 01h ??? DS:SI -> ??? CL = file handle??? 02h ??? DS:SI -> Current Directory Structure??? DI = ??? CX = drive (1=A:) ??? Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: called by DOS 4.0 kernel SeeAlso: INT 21/AH=6Bh ----------2F1130----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT AX = 1130h Return: ES = CS of resident IFSFUNC ----------2F1186----------------------------- INT 2F - LAN Manager Enhanced DOS API - DosReadAsynchNmPipe AX = 1186h ??? Return: ??? Note: LAN Manager enhance mode adds features beyond the standard redirector file/printer services SeeAlso: AX=118Fh,INT 21/AX=5F39h ----------2F118A----------------------------- INT 2F - LAN Manager 2.0 DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE AX = 118Ah ??? Return: ??? SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh ----------2F118F----------------------------- INT 2F - LAN Manager Enhanced DOS API - DosWriteAsynchNmPipe AX = 118Fh ??? Return: ??? SeeAlso: AX=1186h,INT 21/AX=5F3Ah ----------2F1200----------------------------- INT 2F U - DOS 3+ internal - INSTALLATION CHECK AX = 1200h Return: AL = FFh (for compatibility with other INT 2F functions) ----------2F1201----------------------------- INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE AX = 1201h SS = DOS DS SDA current SFT pointer -> SFT of file to close Return: CF set on error BX??? CX new reference count of SFT ES:DI -> SFT for file SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh ----------2F1202----------------------------- INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS AX = 1202h STACK: WORD vector number Return: ES:BX -> interrupt vector STACK unchanged ----------2F1203----------------------------- INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT AX = 1203h Return: DS = segment of IBMDOS.COM/MSDOS.SYS ----------2F1204----------------------------- INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR AX = 1204h STACK: WORD character to normalize Return: AL = normalized character (forward slash turned to backslash, all others unchanged) ZF set if path separator STACK unchanged ----------2F1205----------------------------- INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT AX = 1205h STACK: WORD character to output Return: STACK unchanged Note: can be called only from within DOS ----------2F1206----------------------------- INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR AX = 1206h DI = error code BP:SI -> device driver header SS = DOS DS STACK: WORD value to be passed to INT 24 in AX Return: AL = 0-3 for Abort, Retry, Ignore, Fail STACK unchanged SeeAlso: INT 24 ----------2F1207----------------------------- INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED AX = 1207h DS:DI -> disk buffer Return: nothing Notes: can be called only from within DOS buffer is moved to end of buffer list (least-recently used is first) SeeAlso: AX=120Fh ----------2F1208----------------------------- INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT AX = 1208h ES:DI -> SFT Return: AX = original value of reference count Note: if the reference count was 1, it is set to FFFFh (since 0 indicates that the SFT is not in use). It is the caller's responsibility to set the reference count to zero after cleaning up. ----------2F1209----------------------------- INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER AX = 1209h DS:DI -> disk buffer Return: disk buffer marked unused, contents written to disk if buffer dirty Note: can be called only from within DOS SeeAlso: AX=120Eh,AX=1215h ----------2F120A----------------------------- INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT AX = 120Ah DS = SS = DOS DS STACK: WORD extended error code Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail) CF clear if retry, set otherwise STACK unchanged Notes: can only be called during a DOS function call, as it uses various fields in the SDA to set up the registers for the INT 24 reportedly sets current DPB's first root directory sector to 1 SeeAlso: INT 24 ----------2F120B----------------------------- INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER AX = 120Bh ES:DI -> system file table entry for previous open of file STACK: WORD extended error code (should be 20h--sharing violation) Return: CF clear if operation should be retried CF set if operation should not be retried AX = error code (20h) (see INT 21/AH=59h) STACK unchanged Notes: can only be called during a DOS function call should only be called if an attempt was made to open an already-open file contrary to the sharing rules invokes INT 24 if SFT file opened via FCB or in compatibility mode with inheritance allowed ----------2F120C----------------------------- INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER??? AX = 120Ch SDA current SFT pointer -> SFT for file DS = SS = DOS DS Return: ES, DI, AX destroyed Notes: invoked "device open" call on device driver for SFT changes owner of last-accessed SFT to calling process if it was opened via FCB called by network redirectors ----------2F120D----------------------------- INT 2F U - DOS 3+ internal - GET DATE AND TIME AX = 120Dh SS = DOS DS Return: AX = current date in packed format (see INT 21/AX=5700h) DX = current time in packed format (see INT 21/AX=5700h) SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch ----------2F120E----------------------------- INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED AX = 120Eh SS = DOS DS Return: DS:DI -> first disk buffer Note: clears "referenced" flag on all disk buffers SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh ----------2F120F----------------------------- INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED AX = 120Fh DS:DI -> disk buffer SS = DOS DS Return: DS:DI -> next buffer in buffer list Note: indicated buffer moved to end of chain SeeAlso: AX=1207h ----------2F1210----------------------------- INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER AX = 1210h DS:DI -> first disk buffer to check Return: ZF clear if found DS:DI -> first unreferenced disk buffer ZF set if not found SeeAlso: AX=120Eh ----------2F1211----------------------------- INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME AX = 1211h DS:SI -> ASCIZ filename to normalize ES:DI -> buffer for normalized filename Return: destination buffer filled with uppercase filename, with slashes turned to backslashes SeeAlso: AX=121Eh,AX=1221h ----------2F1212----------------------------- INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING AX = 1212h ES:DI -> ASCIZ string Return: CX = length of string SeeAlso: AX=1225h ----------2F1213----------------------------- INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER AX = 1213h STACK: WORD character to convert to uppercase Return: AL = uppercase character STACK unchanged ----------2F1214----------------------------- INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS AX = 1214h DS:SI = first pointer ES:DI = second pointer Return: ZF set if pointers are equal, ZF clear if not equal ----------2F1215----------------------------- INT 2F U - DOS 3+ internal - FLUSH BUFFER AX = 1215h DS:DI -> disk buffer SS = DOS DS STACK: WORD drives for which to skip buffer ignore buffer if drive same as high byte, or bytes differ and the buffer is for a drive OTHER than that given in low byte Return: STACK unchanged Note: can be called only from within DOS SeeAlso: AX=1209h ----------2F1216----------------------------- INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE AX = 1216h BX = system file table entry number Return: CF clear if successful ES:DI -> system file table entry CF set if BX greater than FILES= SeeAlso: AX=1220h ----------2F1217----------------------------- INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE AX = 1217h SS = DOS DS STACK: WORD drive (0 = A:, 1 = B:, etc) Return: CF set on error (drive > LASTDRIVE) CF clear if successful DS:SI -> current directory structure for specified drive STACK unchanged SeeAlso: AX=1219h ----------2F1218----------------------------- INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS AX = 1218h Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack) Note: only valid while within DOS ----------2F1219----------------------------- INT 2F U - DOS 3+ internal - SET DRIVE??? AX = 1219h SS = DOS DS STACK: WORD drive (0 = default, 1 = A:, etc) Return: ??? STACK unchanged Notes: calls AX=1217h builds a current directory structure if inside server call (INT 21/AX=5D00h) SeeAlso: AX=1217h,AX=121Fh ----------2F121A----------------------------- INT 2F U - DOS 3+ internal - GET FILE'S DRIVE AX = 121Ah DS:SI -> filename Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid) DS:SI -> filename without leading X: (if present) SeeAlso: INT 21/AH=19h,INT 21/AH=60h ----------2F121B----------------------------- INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY AX = 121Bh CL = year - 1980 Return: AL = number of days in February Note: requires DS to be set to the DOS code segment SeeAlso: INT 21/AH=2Bh ----------2F121C----------------------------- INT 2F U - DOS 3+ internal - CHECKSUM MEMORY AX = 121Ch DS:SI -> start of memory to checksum CX = number of bytes DX = initial checksum SS = DOS DS Return: AX, CX destroyed DX = checksum DS:SI -> first byte after checksummed range Note: used by DOS to determine day count since 1/1/80 given a date SeeAlso: AX=121Dh ----------2F121D----------------------------- INT 2F U - DOS 3+ internal - SUM MEMORY AX = 121Dh DS:SI -> memory to add up CX = 0000h DX = limit Return: AL = byte which exceeded limit CX = number of bytes before limit exceeded DX = remainder after adding first CX bytes DS:SI -> byte beyond the one which exceeded the limit Note: used by DOS to determine year or month given day count since 1/1/80 SeeAlso: AX=121Ch ----------2F121E----------------------------- INT 2F U - DOS 3+ internal - COMPARE FILENAMES AX = 121Eh DS:SI -> first ASCIZ filename ES:DI -> second ASCIZ filename Return: ZF set if filenames equivalent, ZF clear if not SeeAlso: AX=1211h,AX=1221h ----------2F121F----------------------------- INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE AX = 121Fh SS = DOS DS STACK: WORD drive letter Return: ES:DI -> current directory structure (will be overwritten by next call) STACK unchanged ----------2F1220----------------------------- INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY AX = 1220h BX = file handle Return: CF set on error AL = 6 (invalid file handle) CF clear if successful ES:DI -> JFT entry for file handle in current process Note: the byte pointed at by ES:DI contains the number of the SFT for the file handle, or FFh if the handle is not open SeeAlso: AX=1216h,AX=1229h ----------2F1221----------------------------- INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME AX = 1221h DS:SI -> file name to be fully qualified ES:DI -> 128-byte buffer for resulting canonical file name SS = DOS DS Return: (see INT 21/AH=60h) Note: identical to INT 21/AH=60h SeeAlso: AX=1123h,INT 21/AH=60h ----------2F1222----------------------------- INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO AX = 1222h SS = DOS data segment SS:SI -> 4-byte records BYTE error code, FFh = last record BYTE error class, FFh = don't change BYTE suggested action, FFh = don't change BYTE error locus, FFh = don't change SDA error code set Return: SI destroyed SDA error class, error locus, and suggested action fields set Note: can be called only from within DOS SeeAlso: AX=122Dh,INT 21/AH=59h ----------2F1223----------------------------- INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE AX = 1223h SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name SDA+22Bh (DOS 4.0x) = eight-character blank-padded name Return: CF set if no character device by that name found CF clear if found BH = low byte of device attribute word Note: can only be called from within DOS (assumes DS=SS=DOS DS) SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh ----------2F1224----------------------------- INT 2F U - DOS 3+ internal - DELAY AX = 1224h SS = DOS DS Return: after delay set by INT 21/AX=440Bh, unless in server call (INT 21/AX=5D00h) Note: delay is dependent on the processor speed, and is skipped entirely if inside a server call SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h ----------2F1225----------------------------- INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING AX = 1225h DS:SI -> ASCIZ string Return: CX = length of string SeeAlso: AX=1212h ----------2F1226----------------------------- INT 2F U - DOS 3.3+ internal - OPEN FILE AX = 1226h CL = access mode DS:DX -> ASCIZ filename Return: CF set on error AL = error code (see INT 21/AH=59h) CF clear if successful AX = file handle Notes: can only be called from within DOS (assumes SS=DOS DS) equivalent to INT 21/AH=3Dh SeeAlso: AX=1227h,INT 21/AH=3Dh ----------2F1227----------------------------- INT 2F U - DOS 3.3+ internal - CLOSE FILE AX = 1227h BX = file handle Return: CF set on error AL = 06h invalid file handle CF clear if successful Notes: can only be called from within DOS (assumes SS=DOS DS) equivalent to INT 21/AH=3Eh SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh ----------2F1228BP4200----------------------- INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER AX = 1228h BP = 4200h, 4201h, 4202h (see INT 21/AH=42h) BX = file handle CX:DX = offset in bytes SS = DOS DS Return: as for INT 21/AH=42h Notes: equivalent to INT 21/AH=42h, but may only be called from inside a DOS function call sets user stack frame pointer to dummy buffer, moves BP to AX, performs LSEEK, and restores frame pointer SeeAlso: INT 21/AH=42h ----------2F1229----------------------------- INT 2F U - DOS 3.3+ internal - READ FROM FILE AX = 1229h BX = file handle CX = number of bytes to read DS:DX -> buffer SS = DOS DS Return: as for INT 21/AH=3Fh Note: equivalent to INT 21/AH=3Fh, but may only be called when already inside a DOS function call SeeAlso: AX=1226h,INT 21/AH=3Fh ----------2F122A----------------------------- INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT AX = 122Ah BX = entry point to set (0001h or 0002h) DS:SI -> FASTOPEN entry point (entry point not set if SI = FFFFh for DOS 4+) Return: CF set if specified entry point already set Notes: entry point in BX is ignored under DOS 3.30 both entry points set to same handler by DOS 4.01 DOS 3.30+ FASTOPEN is called with: AL = 01h ??? CX = ??? seems to be offset DI = ??? seems to be offset SI = offset in DOS DS of filename AL = 02h ??? AL = 03h open file??? SI = offset in DOS DS of filename AL = 04h ??? AH = subfunction (00h,01h,02h) ES:DI -> ??? CX = ??? (subfunctions 01h and 02h only) Returns: CF set on error or not installed Note: function 03h calls function 01h first PCDOS 4.01 FASTOPEN is additionally called with: AL = 04h ??? AH = 03h ??? AL = 05h ??? AL = 0Bh ??? AL = 0Ch ??? AL = 0Dh ??? AL = 0Eh ??? AL = 0Fh ??? AL = 10h ??? MSDOS 5.0 FASTOPEN is additionally called with: AL = 04h ??? AH = 03h ??? AL = 05h ??? DL = drive (00h = A:) ??? AL = 06h ??? ----------2F122B----------------------------- INT 2F U - DOS 3.3+ internal - IOCTL AX = 122Bh BP = 44xxh SS = DOS DS additional registers as appropriate for INT 21/AX=44xxh Return: as for INT 21/AH=44h Notes: equivalent to INT 21/AH=44h, but may only be called when already inside a DOS function call sets user stack frame pointer to dummy buffer, moves BP to AX, performs IOCTL, and restores frame pointer SeeAlso: INT 21/AH=44h ----------2F122C----------------------------- INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN AX = 122Ch Return: BX:AX -> header of second device driver (NUL is first) in driver chain SeeAlso: INT 21/AH=52h ----------2F122D----------------------------- INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE AX = 122Dh Return: AX = current extended error code SeeAlso: AX=1222h,INT 21/AH=59h ----------2F122E----------------------------- INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES AX = 122Eh DL = subfunction 00h get standard DOS error table (errors 00h-12h,50h-5Bh) Return: ES:DI -> error table 01h set standard DOS error table ES:DI -> error table 02h get parameter error table (errors 00h-0Ah) Return: ES:DI -> error table 03h set parameter error table ES:DI -> error table 04h get critical/SHARE error table (errors 13h-2Bh) Return: ES:DI -> error table 05h set critical/SHARE error table ES:DI -> error table 06h get ??? error table Return: ES:DI -> error table or 0000h:0000h 07h set ??? error table ES:DI -> error table 08h get error message retriever (see below) Return: ES:DI -> FAR procedure to fetch error message 09h set ??? error table ES:DI -> error table Notes: if the returned segment on a "get" is 0001h, then the offset specifies the offset of the error message table within COMMAND.COM, and the procedure returned by DL=08h should be called DOS 5.0 COMMAND.COM does not allow setting any of the addresses; they are always returned with segment 0001h SeeAlso: AX=0500h,INT 21/AH=59h Format of DOS 4.x error table: Offset Size Description 00h BYTE FFh 01h 2 BYTEs 04h,00h (DOS version???) 03h BYTE number of error headers following 04h 2N WORDs table of all error headers for table Offset Size Description 00h WORD error message number 02h WORD offset of error message from start of header error messages are count byte followed by msg Note: DOS 5 error tables consist of one word per error number; each word contains either the offset of a counted string or 0000h Call error retrieval function with: AX = error number DI = offset of error table Return: ES:DI -> error message (counted string) Notes: this function needs to access COMMAND.COM if the messages were not loaded into memory permanently with /MSG; the caller should assume that the returned message will be overwritten by the next call of the function supported by DR-DOS 5.0 ----------2F122F----------------------------- INT 2F U - DOS 4+ internal - SET DOS VERSION NUMBER TO RETURN AX = 122Fh DX = DOS version number (0000h = return true DOS version) Note: not available under DR-DOS 5.0 SeeAlso: INT 21/AH=30h ----------2F13------------------------------- INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER AH = 13h DS:DX -> interrupt handler disk driver calls on read/write ES:BX = address to restore INT 13 to on system halt (exit from root shell) or warm boot (INT 19) Return: DS:DX from previous invocation of this function ES:BX from previous invocation of this function Notes: IO.SYS hooks INT 13 and inserts one or more filters ahead of the original INT 13 handler. The first is for disk change detection on floppy drives, the second is for tracking formatting calls and correcting DMA boundary errors, the third is for working around problems in a particular version of IBM's ROM BIOS before the first call, ES:BX points at the original BIOS INT 13; DS:DX also points there unless IO.SYS has installed a special filter for hard disk reads (on systems with model byte FCh and BIOS date "01/10/84" only), in which case it points at the special filter most DOS 3.3+ disk access is via the vector in DS:DX, although a few functions are still invoked via an INT 13 instruction this is a dangerous security loophole for any virus-monitoring software which does not trap this call (many Bulgarian viruses are known to use it to get the original ROM entry point) SeeAlso: INT 13/AH=01h,INT 19 ----------2F1400----------------------------- INT 2F - NLSFUNC.COM - INSTALLATION CHECK AX = 1400h Return: AL = 00h not installed, OK to install 01h not installed, not OK FFh installed Notes: called by DOS v3.3+ kernel supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh supported by DR-DOS 5.0 documented for MS-DOS 5.0, but undocumented in prior versions ----------2F1401----------------------------- INT 2F U - NLSFUNC.COM - CHANGE CODE PAGE AX = 1401h DS:SI -> internal code page structure (see below) BX = new code page DX = country code??? Return: AL = status 00h successful else DOS error code Note: called by DOS v3.3+ kernel SeeAlso: INT 21/AH=66h Format of DOS 3.30 internal code page structure: Offset Size Description 00h 8 BYTEs ??? 08h 64 BYTEs name of country information file 48h WORD system code page 4Ah WORD number of supported subfunctions 4Ch 5 BYTEs data to return for INT 21/AX=6502h 51h 5 BYTEs data to return for INT 21/AX=6504h 56h 5 BYTEs data to return for INT 21/AX=6505h 5Bh 5 BYTEs data to return for INT 21/AX=6506h 60h 41 BYTEs data to return for INT 21/AX=6501h ----------2F1402----------------------------- INT 2F U - NLSFUNC.COM - GET COUNTRY INFO AX = 1402h BP = subfunction (same as AL for INT 21/AH=65h) BX = code page DX = country code DS:SI -> internal code page structure (see AX=1401h) ES:DI -> user buffer CX = size of user buffer Return: AL = status 00h successful else DOS error code Notes: called by DOS v3.3+ kernel on INT 21/AH=65h code page structure apparently only needed for COUNTRY.SYS pathname SeeAlso: AX=1403h,AX=1404h,INT 21/AH=65h ----------2F1403----------------------------- INT 2F U - NLSFUNC.COM - SET COUNTRY INFO AX = 1403h DS:SI -> internal code page structure (see AX=1401h) BX = code page DX = country code Return: AL = status ??? Note: called by DOS v3.3+ kernel on INT 21/AH=38h SeeAlso: AX=1402h,AX=1404h,INT 21/AH=38h"SET" ----------2F1404----------------------------- INT 2F U - NLSFUNC.COM - GET COUNTRY INFO AX = 1404h BX = code page DX = country code DS:SI -> internal code page structure (see AX=1401h) ES:DI -> user buffer Return: AL = status ??? Notes: called by DOS v3.3+ kernel on INT 21/AH=38h code page structure apparently only needed for COUNTRY.SYS pathname SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET" ----------2F14FE----------------------------- INT 2F U - DR-DOS 5.0 NLSFUNC - ??? AX = 14FEh DI = ??? ??? Return: ??? Note: DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh, or FFh on entry. SeeAlso: AX=14FFh ----------2F14FF----------------------------- INT 2F U - DR-DOS 5.0 NLSFUNC - ??? AX = 14FFh ??? Return: ??? Note: DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh, or FFh on entry. SeeAlso: AX=14FEh ----------2F1500----------------------------- INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK AX = 1500h Return: AX = FFFFh ES:DI -> ??? (graphics data?) Note: this installation check conflicts with the CD-ROM Extensions installation check; moved to AX=AC00h in later versions SeeAlso: AX=AC00h ----------2F1500BX0000----------------------- INT 2F - CD-ROM - INSTALLATION CHECK AX = 1500h BX = 0000h Return: BX = number of CD-ROM drive letters used CX = starting drive letter (0=A:) Notes: this installation check DOES NOT follow the format used by other software this installation check conflicts with the DOS 4.00 GRAPHICS.COM installation check SeeAlso: INT 2F/AX=D000h"Lotus" ----------2F1501----------------------------- INT 2F - CD-ROM - GET DRIVE DEVICE LIST AX = 1501h ES:BX -> buffer to hold drive letter list (5 bytes per drive letter) Return: buffer filled, for each drive letter BYTE subunit number in driver DWORD address of device driver header ----------2F1502----------------------------- INT 2F - CD-ROM - GET COPYRIGHT FILE NAME AX = 1502h ES:BX -> 38-byte buffer for name of copyright file CX = drive number (0=A:) Return: CF set if drive is not a CD-ROM drive AX = 15 (invalid drive) CF clear if successful SeeAlso: AX=1503h ----------2F1503----------------------------- INT 2F - CD-ROM - GET ABSTRACT FILE NAME AX = 1503h ES:BX -> 38-byte buffer for name of abstract file CX = drive number (0=A:) Return: CF set if drive is not a CD-ROM drive AX = 15 (invalid drive) CF clear if successful SeeAlso: AX=1502h ----------2F1504----------------------------- INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME AX = 1504h ES:BX -> 38-byte buffer for name of bibliographic documentation file CX = drive number (0=A:) Return: CF set if drive is not a CD-ROM drive AX = 15 (invalid drive) CF clear if successful ----------2F1505----------------------------- INT 2F - CD-ROM - READ VTOC AX = 1505h ES:BX -> 2048-byte buffer CX = drive number (0=A:) DX = sector index (0=first volume descriptor,1=second,...) Return: CF set on error AX = error code (15=invalid drive,21=not ready) CF clear if successful AX = volume descriptor type (1=standard,FFh=terminator,0=other) ----------2F1506----------------------------- INT 2F - CD-ROM - TURN DEBUGGING ON AX = 1506h BX = debugging function to enable Note: reserved for development SeeAlso: AX=1507h ----------2F1507----------------------------- INT 2F - CD-ROM - TURN DEBUGGING OFF AX = 1507h BX = debugging function to disable Note: reserved for development SeeAlso: AX=1506h ----------2F1508----------------------------- INT 2F - CD-ROM - ABSOLUTE DISK READ AX = 1508h ES:BX -> buffer CX = drive number (0=A:) SI:DI = starting sector number DX = number of sectors to read Return: CF set on error AL = error code (15=invalid drive,21=not ready) CF clear if successful SeeAlso: AX=1509h ----------2F1509----------------------------- INT 2F - CD-ROM - ABSOLUTE DISK WRITE AX = 1509h ES:BX -> buffer CX = drive number (0=A:) SI:DI = starting sector number DX = number of sectors to write Note: corresponds to INT 26h and is currently reserved and nonfunctional SeeAlso: AX=1508h ----------2F150A----------------------------- INT 2F - CD-ROM - RESERVED AX = 150Ah ----------2F150B----------------------------- INT 2F - CD-ROM v2.00+ - DRIVE CHECK AX = 150Bh CX = drive number (0=A:) Return: BX = ADADh if MSCDEX.EXE installed AX = 0000h if drive not supported nonzero if supported SeeAlso: AX=150Dh ----------2F150C----------------------------- INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION AX = 150Ch Return: BH = major version BL = minor version Note: MSCDEX.EXE versions prior to 2.00 return BX=0 ----------2F150D----------------------------- INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS AX = 150Dh ES:BX -> buffer for drive letter list (1 byte per drive) Return: buffer filled with drive numbers (0=A:). Each byte corresponds to the drive in the same position for function 1501h SeeAlso: AX=150Bh ----------2F150E----------------------------- INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE AX = 150Eh BX = subfunction 00h get preference DX = 0000h Return: DX = preference settings 01h set preference DH = volume descriptor preference 01h = primary volume descriptor 02h = supplementary volume descriptor DL = supplementary volume descriptor preference 01h = shift-Kanji CX = drive number (0=A:) Return: CF set on error AX = error code (15=invalid drive,1=invalid function) CF clear if successful ----------2F150F----------------------------- INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY AX = 150Fh CL = drive number (0=A:) CH bit 0 = copy flag clear if direct copy set if copy to structure which removed ISO/High Sierra diffs ES:BX -> ASCIZ path name SI:DI -> buffer for directory entry (see below) minimum 255 bytes for direct copy Return: CF set on error AX = error code CF clear if succesful AX = disk format (0=High Sierra,1=ISO 9660) Format of directory entry (direct copy): Offset Size Description 00h BYTE length of directory entry 01h BYTE length of XAR in Logical Block Numbers 02h DWORD LBN of data, Intel (little-endian) format 06h DWORD LBN of data, Motorola (big-endian) format 0Ah DWORD length of file, Intel format 0Eh DWORD length of file, Motorola format ---High Sierra--- 12h 6 BYTEs date and time 18h BYTE bit flags 19h BYTE reserved ---ISO 9660--- 12h 7 BYTEs date and time 19h BYTE bit flags ---both formats--- 1Ah BYTE interleave size 1Bh BYTE interleave skip factor 1Ch WORD volume set sequence number, Intel format 1Eh WORD volume set sequence number, Motorola format 20h BYTE length of file name 21h N BYTEs file name BYTE (optional) padding if filename is odd length N BYTEs system data Format of directory entry (canonicalized): Offset Size Description 00h BYTE length of XAR in Logical Block Numbers 01h DWORD Logical Block Number of file start 05h WORD size of disk in logical blocks 07h DWORD file length in bytes 0Bh 7 BYTEs date and time 12h BYTE bit flags 13h BYTE interleave size 14h BYTE interleave skip factor 15h WORD volume set sequence number 17h BYTE length of file name 18h 38 BYTEs ASCIZ filename 3Eh WORD file version number 40h BYTE number of bytes of system use data 41h 220 BYTEs system use data ----------2F1510----------------------------- INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST AX = 1510h CX = CD-ROM drive letter (0 = A, 1 = B, etc) ES:BX -> CD-ROM device driver request header (see AX=0802h) ----------2F1600----------------------------- INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE INSTALLATION CHECK AX = 1600h Return: AL = 00h if Windows 3.x enhanced mode or Windows/386 2.x not running AL = 80h if Windows 3.x enhanced mode or Windows/386 2.x not running AL = 01h if Windows/386 2.x running AL = FFh if Windows/386 2.x running AL = anything else AL = Windows major version number >= 3 AH = Windows minor version number Note: INT 2F/AH=16h comprises an API for non-Windows programs (DOS device drivers, TSRs, and applications) to cooperate with multitasking Windows/386 2.x and Windows 3.x and higher enhanced mode. certain calls are also supported in the Microsoft 80286 DOS extender in Windows standard mode SeeAlso: AX=4680h ----------2F1602----------------------------- INT 2F - MS WINDOWS/386 2.x - GET API ENTRY POINT AX = 1602h Return: ES:DI -> Windows/386 2.x API procedure entry point Notes: this interface is supported in Windows 3.x only for 2.x compatibility to get the current virtual machine (VM) ID in Windows/386 2.x: AX = 0000h ES:DI -> return address JUMP to address returned from INT 2F/AX=1602h After JUMP, at return address: BX = current VM ID. SeeAlso: AX=0C20h ----------2F1603----------------------------- INT 2F - RM Nimbus MSDOS 3.3 - ??? AX = 1603h Return: AX = 5248h ('RH') DS:SI -> first byte after INT 2F handler in IBMBIO.COM ----------2F1605----------------------------- INT 2F - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST AX = 1605h ES:BX = 0000h:0000h DS:SI = 0000h:0000h CX = 0000h DX = flags bit 0 = 0 if Windows enhanced-mode initialization bit 0 = 1 if Microsoft 286 DOS extender initialization bits 1-15 reserved (undefined) DI = version number (major in upper byte, minor in lower) Return: CX = 0000h if okay for Windows to load CX <> 0 if Windows should not load ES:BX -> startup info structure (see below) DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h Notes: the Windows enhanced mode loader and Microsoft 286 DOS extender will broadcast an INT 2F/AX=1605h call when initializing. Any DOS device driver or TSR can watch for this broadcast and return the appropriate values. If the driver or TSR returns CX <> 0, it is also its responsibility to display an error message. each handler must first chain to the prior INT 2F handler with registers unchanged before processing the call if the handler requires local data on a per-VM basis, it must store the returned ES:BX in the "next" field of a startup info structure and return a pointer to that structure in ES:BX a single TSR may set the V86 mode enable/disable callback; if DS:SI is already nonzero, the TSR must fail the initialization by setting CX nonzero SeeAlso: AX=1606h,AX=1608h,AX=4B05h Format of Startup Information Structure: Offset Size Description 00h 2 BYTEs major, minor version of info structure 02h DWORD pointer to next startup info structure or 0000h:0000h 06h DWORD pointer to ASCIZ name of virtual device file or 0000h:0000h 0Ah DWORD virtual device reference data (only used if above nonzero) 0Eh DWORD pointer to instance data records or 0000h:0000h Format of one Instance Item in array: Offset Size Description 00h DWORD address of instance data (end of array if 0000h:0000h) 04h WORD size of instance data Virtual mode enable/disable procedure called with: AX = 0000h disable V86 mode AX = 0001h enable V86 mode interrupts disabled Return: CF set on error CF clear if successful interrupts disabled ----------2F1606----------------------------- INT 2F - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST AX = 1606h DX = flags bit 0 = 0 if Windows enhanced-mode exit bit 0 = 1 if Microsoft 286 DOS extender exit bits 1-15 reserved (undefined) Notes: if the init broadcast fails (AX=1605h returned CX <> 0), then this broadcast will be issued immediately. this call will be issued in real mode SeeAlso: AX=1605h,AX=1609h ----------2F1607----------------------------- INT 2F - MS WINDOWS - VIRTUAL DEVICE CALL OUT API AX = 1607h BX = virtual device ID (see INT 2F/AX=1684h) Notes: more of a convention than an API, this call specifies a standard mechanism for Windows enhanced-mode virtual devices (VxD's) to talk to DOS device drivers and TSRs VNETBIOS calls this function and then checks ES:DI to determine whether the NetBIOS has any extensions Windows should know about VMD (Virtual Mouse Driver) calls this and then checks whether CX is nonzero; if yes, it will not automatically virtualize the mouse driver. This would be used if MOUSE.COM already virtualizes itself using the Windows API. SeeAlso: AX=0C20h,AX=1605h,AX=1684h ----------2F1607BX0015----------------------- INT 2F - DOS 5.0 kernel - "DOSMGR" VIRTUAL DEVICE SUPPORT AX = 1607h BX = 0015h (VxD identifier of "DOSMGR") CX = function 0000h ??? Return: CX = 0001h ES:BX -> ??? data 0001h ??? DX = ??? Return: AX = B97Ch BX = value of DX on call DX = A2ABh 0002h NOP 0003h ??? DX = ??? (bit 0 significant) Return: if DX bit 0 set: AX = B97Ch CX = ??? (0058h) DX = A2ABh if DX bit 0 clear: all registers preserved 0004h ??? Return: DX = 0000h 0005h get device driver size ES = segment of device driver Return: DX:AX = 0000h:0000h on error (not dev. driver segment) DX:AX = A2ABh:B97Ch if successful BX:CX = size of device driver in bytes ----------2F1608----------------------------- INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST AX = 1608h Notes: called after all installable devices have been initialized real-mode software may be called between the Windows enhanced-mode init call (AX=1605h) and this call; the software must detect this situation SeeAlso: AX=1605h,AX=1609h ----------2F1609----------------------------- INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST AX = 1609h Note: called at the beginning of a normal exit sequence; not made in the event of a fatal system crash SeeAlso: AX=1606h,AX=1608h ----------2F160A----------------------------- INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE AX = 160Ah ??? Return: ??? ----------2F160B----------------------------- INT 2F - MS Windows 3.1 - IDENTIFY TSRs AX = 160Bh ??? Return: ??? Format of TSR-to-Windows communication structure: Offset Size Description 00h DWORD pointer to next structure 04h WORD PSP segment 06h WORD API version ID (0100h) 08h WORD EXEC flags bit 0: "WINEXEC" bit 1: "LOADLIBRARY" bit 2: "OPENDRIVER" 0Ah WORD "exec_cmd_show" 0Ch DWORD "exec_cmd" 10h 4 BYTEs reserved (0) 14h DWORD TSR ID block 18h DWORD TSR data block ----------2F160C----------------------------- INT 2F - MS Windows 3.1 - DETECT ROMs AX = 160Ch ??? Return: ??? Note: used by ROM Windows ----------2F1680----------------------------- INT 2F - MS WINDOWS, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE AX = 1680h Return: AL = 00h if the call is supported AL = 80h (unchanged) if the call is not supported Notes: programs can use this function in idle loops to enhance performance under multitaskers; this call is supported by MS Windows 3.0, DOS 5+, DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS applications does not block the program; it just gives up the remainder of the time slice should not be used by Windows-specific programs SeeAlso: INT 15/AX=1000h ----------2F1681----------------------------- INT 2F - MS WINDOWS 3+ - BEGIN CRITICAL SECTION AX = 1681h Notes: used to prevent a task switch from occurring should be followed by an INT 2F/AX=1682h call as soon as possible nested calls are allowed, and must be followed by an appropriate number of "end critical section" calls not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and and increment by hand. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h ----------2F1682----------------------------- INT 2F - MS WINDOWS 3+ - END CRITICAL SECTION AX = 1682h Notes: not supported in Windows/386 2.x. Get InDOS flag with INT 21/AH=34h and decrement by hand, taking care not to decrement InDOS flag through zero SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h ----------2F1683----------------------------- INT 2F - MS WINDOWS 3+ - GET CURRENT VIRTUAL MACHINE ID AX = 1683h Return: BX = current virtual machine (VM) ID Notes: Windows itself currently runs in VM 1, but this can't be relied upon VM IDs are reused when VMs are destroyed an ID of 0 will never be returned SeeAlso: AX=1684h,AX=1685h,AX=168Bh ----------2F1684----------------------------- INT 2F - MS WINDOWS - GET DEVICE API ENTRY POINT AX = 1684h BX = virtual device (VxD) ID (see below) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API Note: some Windows enhanced-mode virtual devices provide services that applications can access. For example, the Virtual Display Device (VDD) provides an API used in turn by WINOLDAP. SeeAlso: AX=1683h Values for VxD ID: 01h VMM Virtual Machine Manager 02h Debug 03h VPICD Virtual Prog. Interrupt Controller (PIC) Device 04h VDMAD Virtual Direct Memory Access (DMA) Device 05h VTD Virtual Timer Device 06h V86MMGR Virtual 8086 Mode Device 07h PAGESWAP Paging Device 08h Parity 09h Reboot 0Ah VDD Virtual Display Device (GRABBER) 0Bh VSD Virtual Sound Device 0Ch VMD Virtual Mouse Device 0Dh VKD Virtual Keyboard Device 0Eh VCD Virtual COMM Device 0Fh VPD Virtual Printer Device 10h VHD Virtual Hard Disk Device 11h VMCPD 12h EBIOS Reserve EBIOS page (e.g., on PS/2) 13h BIOSXLAT Map ROM BIOS API between prot & V86 mode 14h VNETBIOS Virtual NetBIOS Device 15h DOSMGR 16h WINLOAD 17h SHELL 18h VMPoll 19h VPROD 1Ah DOSNET assures network integrity across VMs 1Bh VFD Virtual Floppy Device 1Ch VDD2 Secondary display adapter 1Dh WINDEBUG 1Eh TSRLoad TSR instance utility Note: The high bit of the VxD ID is reserved for future use. The next 10 bits are the OEM # which is assigned by Microsoft. The low 5 bits are the device number. Call VTD.386 entry point with: AX = 0000h get VTD version number Return: AH = major version AL = minor version AX = 0100h get current clock tick time Return: EDX:EAX = clock tick time in 840ns units since Windows was started AX = 0101h get current system time in milliseconds Return: EAX = time in milliseconds that Windows has been running AX = 0102h get current virtual machine time Return: EAX = cumulative amount of time the virtual machine has been active, in milliseconds Note: should only be called directly when TOOLHELP.DLL TimerCount() cannot be called ----------2F1685----------------------------- INT 2F - MS WINDOWS - SWITCH VMs AND CALLBACK AX = 1685h BX = VM ID of virtual machine to switch to CX = flags bit 0 wait until interrupts enabled bit 1 wait until critical section unowned bits 2-15 reserved (zero) DX:SI = priority boost (see VMM.INC) ES:DI -> FAR procedure to callback Return: CF set on error AX = error code 01h invalid VM ID 02h invalid priority boost 03h invalid flags CF clear if successful event will be or has been called Notes: some DOS devices, such as networks, need to call functions in a specific VM. This call forces the appropriate VM to be installed. the callback procedure must preserve all registers and return with IRET SeeAlso: AX=1683h,INT 15/AX=1117h ----------2F1686----------------------------- INT 2F - DOS Protected-Mode Interface - DETECT MODE AX = 1686h Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available) AX nonzero if in real/V86 mode or no DPMI (INT 31 not available) SeeAlso: AX=1687h ----------2F1687----------------------------- INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK AX = 1687h Return: AX = 0000h if installed BX = flags bit 0: 32-bit programs supported CL = processor type (02h=80286, 03h=80386, 04h=80486) DH = DPMI major version DL = two-digit DPMI minor version SI = number of paragraphs of DOS extender private data ES:DI -> DPMI mode-switch entry point AX nonzero if not installed SeeAlso: AX=1686h Call mode switch entry point with: AX = flags bit 0: set if 32-bit program ES = real mode segment of buffer for DPMI private data (ignored if SI was zero) Return: CF set on error program still in real mode AX = error code (DPMI 1.0+) 8011h unable to allocate all necessary descriptors 8021h 32-bit program specified, but 16-bit DPMI host CF clear if successful CS = 16-bit selector corresponding to real-mode CS SS = selector corresponding to real-mode SS (64K limit) DS = selector corresponding to real-mode DS (64K limit) ES = selector to program's PSP (100h byte limit) FS = GS = 0 high word of ESP = 0 if 32-bit program program now in protected mode Note: this entry point is only called for the initial switch to protected mode ----------2F1688----------------------------- INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET SELECTOR TO LDT AX = 1688h Return: AX = status??? (0000h for 386MAX) BX = selector for ??? ----------2F1689----------------------------- INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL AX = 1689h ??? Return: ??? ----------2F168A----------------------------- INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT AX = 168Ah DS:(E)SI = selector:offset of ASCIZ vendor name Return: AL = status 00h successful ES:(E)DI -> extended API entry point 8Ah unsuccessful Notes: the vendor name is used to determine which entry point to return; it is case-sensitive available in protected mode only 32-bit applications use ESI and EDI, 16-bit applications use SI and DI this call is present but not documented for DPMI 0.9 SeeAlso: INT 31/AX=0A00h Vendor names: "MS-DOS" ??? and 386MAX v6.00+ "386MAX" 386MAX v6.00+ ----------2F168B----------------------------- INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE AX = 168Bh ??? Return: ??? SeeAlso: AX=1683h ----------2F168C----------------------------- INT 2F - MS Windows 3.1 - RESTART COMMAND AX = 168Ch ??? Return: ??? Note: WIN.COM executes specified application ----------2F1700----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - IDENTIFY WinOldAp VERSION AX = 1700h Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard AX <> 1700h AL = WINOLDAP major version AH = WINOLDAP minor version Notes: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting "old" (character-mode) application access to Dynamic Data Exchange, menus, and the Windows clipboard. this installation check DOES NOT follow the format used by other software ----------2F1701----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - OPEN CLIPBOARD AX = 1701h Return: AX <> 0 success AX = 0 clipboard is already open ----------2F1702----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - EMPTY CLIPBOARD AX = 1702h Return: AX <> 0 clipboard has been emptied AX = 0 failure ----------2F1703----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - SET CLIPBOARD DATA AX = 1703h DX = clipboard format supported by WinOldAp: 01h text 02h bitmap 03h metafile picture 04h SYLK 05h DIF 06h TIFF 07h OEM text ES:BX -> data (see below for formats) SI:CX = size of data Return: AX <> 0 data copied into the Clipboard AX = 0 failure Format of bitmap: Offset Size Description 00h WORD type (0000h) 02h WORD width of bitmap in pixels 04h WORD height of bitmap in pixels 06h WORD bytes per line 08h BYTE number of color planes 09h BYTE number of adjacent color bits in pixel 0Ah DWORD pointer to start of data 0Eh WORD width in 0.1mm units 10h WORD height in 0.1mm units 12h N BYTEs bitmap data Format of metafile picture: Offset Size Description 00h WORD mapping mode 02h WORD X extent 04h WORD Y extent 06h WORD picture data ----------2F1704----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA SIZE AX = 1704h DX = clipboard format supported by WinOldAp (see AX=1703h) Return: DX:AX = size of data in bytes, including any headers Failure: DX:AX = 0 no data in this format in the Clipboard ----------2F1705----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA AX = 1705h DX = clipboard format supported by WinOldAp (see AX=1703h) ES:BX -> buffer Return: AX <> 0 success AX = 0 error, or no data in this format in Clipboard ----------2F1708----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - CloseClipboard AX = 1708h Return: AX <> 0 success AX = 0 failure ----------2F1709----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - COMPACT CLIPBOARD AX = 1709h SI:CX = desired size in bytes Return: DX:AX = number of bytes in largest block of free memory Note: WinOldAp is responsible for including the size of any headers ----------2F170A----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - GET DEVICE CAPABILITIES AX = 170Ah DX = GDI information index 00h device driver version 02h device classification 04h width in mm 06h height in mm 08h width in pixels 0Ah height in pixels 0Ch bits per pixel 0Eh number of bit planes 10h number of brushes supported by device 12h number of pens supported by device 14h number of markers supported by device 16h number of fonts supported by device 18h number of colors 1Ah size required for device descriptor 1Ch curve capabilities 1Eh line capabilities 20h polygon capabilities 22h text capabilities 24h clipping capabilities 26h bitblt capabilities 28h X aspect 2Ah Y aspect 2Ch length of hypotenuse of aspect 58h logical pixels per inch of width 5Ah logical pixels per inch of height Return: AX = integer value of the desired item device classification 00h vector plotter 01h raster display 02h raster printer 03h raster camera 04h character-stream, PLP 05h Metafile, VDM 06h display-file curve capabilities bit 0 circles bit 1 pie wedges bit 2 chord arcs bit 3 ellipses bit 4 wide lines bit 5 styled lines bit 6 wide styled lines bit 7 interiors line capabilities bit 1 polylines bit 2 markers bit 3 polymarkers bit 4 wide lines bit 5 styled lines bit 6 wide styled lines bit 7 interiors polygon capabilities bit 0 polygons bit 1 rectangles bit 2 trapezoids bit 3 scanlines bit 4 wide borders bit 5 styled borders bit 6 wide styled borders bit 7 interiors text capabilities bit 0 output precision character bit 1 output precision stroke bit 2 clippping precision stroke bit 3 90-degree character rotation bit 4 arbitrary character rotation bit 5 independent X and Y scaling bit 6 double-size bit 7 integer scaling bit 8 continuous scaling bit 9 bold bit 10 italic bit 11 underline bit 12 strikeout bit 13 raster fonts bit 14 vector fonts bit 15 reserved clipping capabilities 00h none 01h clipping to rectangles raster capabilities bit 0 simple bitBLT bit 1 device requires banding support bit 2 device requires scaling support bit 3 supports >64K bitmap Note: This function returns the device-capability bits for the given display ----------2F1900----------------------------- INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK AX = 1900h Return: AL = 00h not installed FFh installed ----------2F1901BL00------------------------- INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE AX = 1901h BL = 00h if SHELLC transient 01h if SHELLC resident DS:DX -> far call entry point for resident SHELLC.EXE Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM Note: SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell ----------2F1902----------------------------- INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE AX = 1902h ES:DI -> ASCIZ full filename of current batch file, with at least the final filename element uppercased DS:DX -> buffer for results Return: AL = 00h failed, either (a) final filename element quoted at ES:DI does not match identity of shell batch file quoted as parameter of most recent call of SHELLB command, or (b) no more Program Start Commands available. AL= FFh success, then: memory at DS:[DX+1] onwards filled as: DX+1: BYTE count of bytes of PSC DX+2: N BYTEs Program Start Command text BYTE 0Dh terminator Explanation: COMMAND.COM executes the result of this call in preference to reading a command from a batch file. Thus the batch file does not advance in execution for so long as SHELLB provides PSCs from its workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user menu interface. The final PSC of a sequence is finished with a GOTO COMMON, which causes a loop back in the batch file which called SHELLC so as to execute SHELLC again. The check on batch file name permits PSCs to CALL nested batch files while PSCs are still stacked up for subsequent execution. ----------2F1903----------------------------- INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface AX = 1903h ES:DI -> ASCIZ batch file name as for AX=1902h Return: AL = FFh if quoted batch file name matches last SHELLB parameter AL = 00h if it does not ----------2F1904----------------------------- INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface AX = 1904h Return: ES:DI -> name of current shell batch file: WORD number of bytes of name following BYTEs (8 max) uppercase name of shell batch file ----------2F1A00----------------------------- INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK AX = 1A00h Return: AL = FFh if installed Notes: AVATAR.SYS also responds to this call documented for DOS 5+, but undocumented for DOS 4.x ----------2F1A00BX4156----------------------- INT 2F - AVATAR.SYS - INSTALLATION CHECK AX = 1A00h BX = 4156h ('AV') CX = 4154h ('AT') DX = 4152h ('AR') Return: AL = FFh if installed CF clear BX = AVATAR protocol level supported CX = driver type 0000h AVATAR.SYS 4456h DVAVATAR.COM inside DESQview window DX = 0016h Notes: AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from the magic values AVATAR.SYS is a CON replacement by George Adam Stanislav which interprets AVATAR command codes in the same way that ANSI interprets ANSI command codes ----------2F1A01----------------------------- INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION AX = 1A01h CL = function 7Fh for GET 5Fh for SET DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively Return: CF set on error AX = error code (many non-standard) CF clear if successful AX destroyed Note: presumably this is the DOS IOCTL interface to ANSI.SYS SeeAlso: AX=1A02h,INT 21/AX=440Ch ----------2F1A02----------------------------- INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS AX = 1A02h DS:DX -> parameter block (see below) Note: DOS 5.0 chains to previous handler if AL > 02h on call SeeAlso: AX=1A01h Format of parameter block: Offset Size Description 00h BYTE subfunction 00h set/reset interlock 01h get /L flag 01h BYTE interlock state 00h=reset, 01h=set This interlock prevents some of the ANSI.SYS post-processing in its hook onto INT 10, AH=00h mode set 02h BYTE (returned) 00h if /L not in effect 01h if /L in effect ----------2F1A21----------------------------- INT 2F - AVATAR.SYS - SET DRIVER STATE AX = 1A21h (AL='!') DS:SI -> command string with one or more state characters CX = length of command string Return: CF set on error (invalid subfunction) CF clear if successful Note: the characters in the state string are interpreted left to right, and need not be in any particular order SeeAlso: AX=1A3Fh Values of state characters: 'a' activate driver 'd' disable driver 'f' use fast screen output 'g' always convert gray keys (+ and -) to function keys 'G' never convert gray keys 'l' convert gray keys only when ScrollLock active 's' use slow screen output 't' Tandy 1000 keyboard (not yet implemented) ----------2F1A3C----------------------------- INT 2F U - AVATAR.SYS v0.11 - ??? AX = 1A3Ch ??? Return: CX = 0000h ----------2F1A3E----------------------------- INT 2F U - AVATAR.SYS v0.11 - ??? AX = 1A3Eh CL = ??? CH = ??? DL = ??? DH = ??? Return: CL = ??? CH = ??? DL = ??? DH = ??? ----------2F1A3F----------------------------- INT 2F - AVATAR.SYS - QUERY DRIVER STATE AX = 1A3Fh (AL='?') ES:DI -> buffer CX = length of buffer in bytes Return: CF clear CX = actual size of returned info Note: the returned information consists of multiple letters whose meanings are described under AX=1A21h SeeAlso: AX=1A21h ----------2F1A42BX4156----------------------- INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER AX = 1A42h BX = 4156h ('AV') ES:DI -> FAR handler for serial port using IRQ3 DS = data segment needed by handler Return: AX = 1A42h if ASD not installed = 0000h if no more room else handle to use when uninstalling Notes: the handler need not save/restore registers or signal EOI to the interrupt controller the handler should return AX=0000h if the interrupt was meant for it, and either leave AX unchanged or return a non-zero value otherwise the most recently installed handler will be called first, continuing to earlier handlers until one returns AX=0000h SeeAlso: AX=1A43h,AX=1A62h ----------2F1A43BX4156----------------------- INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER AX = 1A43h BX = 4156h ('AV') ES:DI -> FAR handler for serial port using IRQ4 DS = data segment needed by handler Return: AX = 1A43h if ASD not installed = 0000h if no more room else handle to use when uninstalling Notes: (see AX=1A42h) SeeAlso: AX=1A42h,AX=1A63h ----------2F1A44BX4156----------------------- INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT AX = 1A44h BX = 4156h ('AV') Return: AX = 0000h DS = data segment CX = size of data segment Note: AVATAR.SYS calls this function whenever it is invoked. If each process under a multitasker hooks this function and provides a separate data segment, AVATAR.SYS becomes fully reentrant. SeeAlso: AX=1A21h,AX=1A3Fh ----------2F1A52----------------------------- INT 2F U - AVATAR.SYS v0.11 - GET ??? AX = 1A52h CX = size of buffer ES:DI -> buffer Return: ??? copied into user buffer Note: the maximum size of the data which may be copied is returned by AX=1A72h SeeAlso: AX=1A72h ----------2F1A53----------------------------- INT 2F U - AVATAR.SYS v0.11 - ??? AX = 1A53h CL = ??? (00h-05h) ??? Return: ??? ----------2F1A62BX4156----------------------- INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER AX = 1A62h BX = 4156h ('AV') CX = handle for IRQ routine returned by AX=1A42h SeeAlso: AX=1A42h,AX=1A63h ----------2F1A63BX4156----------------------- INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER AX = 1A63h BX = 4156h ('AV') CX = handle for IRQ routine returned by AX=1A43h SeeAlso: AX=1A43h,AX=1A62h ----------2F1A72----------------------------- INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE AX = 1A72h Return: CX = maximum size of ??? SeeAlso: AX=1A52h ----------2F1A7B----------------------------- INT 2F U - AVATAR.SYS v0.11 - ??? AX = 1A7Bh Return: AX = 0000h CX = 0000h ----------2F1A7D----------------------------- INT 2F U - AVATAR.SYS v0.11 - ??? AX = 1A7Dh Return: AX = ??? ----------2F1AADDX0000----------------------- INT 2F U - AVATAR.SYS v0.11 - ??? AX = 1AADh DX = 0000h CX = subfunction (00h-0Ch) ??? Return: AX = 0000h if DX was nonzero ??? ----------2F1B00----------------------------- INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK AX = 1B00h Return: AL = FFh if installed Note: XMA2EMS.SYS extension is only installed if DOS has page frames to hide. This extension hooks onto INT 67/AH=58h and returns from that call data which excludes the physical pages being used by DOS. SeeAlso: AH=1Bh"FRAME INFO" ----------2F1B------------------------------- INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION AH = 1Bh AL <> 00h DI = hidden physical page number Return: AX = FFFFh if failed (no such hidden page) AX = 0000h if OK, then ES = segment of page frame DI = physical page number Notes: this corresponds to the data edited out of the INT 67/AH=58h call FASTOPEN makes this call with AL = FFh SeeAlso: AX=1B00h ----------2F2300----------------------------- INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK AX = 2300h Return: AH = FFh Note: this installation check does not follow the usual format SeeAlso: AH=23h ----------2F23------------------------------- INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA AH = 23h AL nonzero Return: AH = FFh ES:BX -> graphics data SeeAlso: AX=2300h ----------2F2700----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK AX = 2700h Return: AL = 00h not installed = FFh installed ----------2F2701----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS AX = 2701h Return: AX = maximum simultaneous tasks BX = index into TASK_IDS of current foreground task CX = currently-active tasks DX = version number (DR-DOS 6.0 = 0001h) ES:SI -> TASK_IDS ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars) Notes: do not attempt to create a new task if CX == AX the task's index is its position on the task menu, while its ID is the position within the internal task name table SeeAlso: AX=2714h,AX=2716h ----------2F2702----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT AX = 2702h Return: DX = maximum pages INT 67/AH=42h will report available Note: TaskMAX does not limit EMS allocations other than by limiting the amount which is reported as being available at a given time SeeAlso: AX=2703h,INT 67/AH=42h ----------2F2703----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT AX = 2703h DX = maximum pages INT 67/AH=42h should report available Return: DX = new maximum for reporting SeeAlso: AX=2702h,INT 67/AH=42h ----------2F2704----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER AX = 2704h DL = subfunction 00h unregister task manager 01h register task manager Return: DL = status 00h registered 01h unregistered Notes: a task manager replaces TaskMAX's menu system with its own user interface; while one is registered, the TaskMAX hotkeys and Ctrl-Alt-Del invoke the manager rather than the built-in menu system unregister the task manager before terminating it SeeAlso: AX=2705h ----------2F2705----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING AX = 2705h DL = subfunction 00h disable keystrokes for switching to next/prev/specified task 01h enable Return: nothing Note: should only be called by a registered task manager (see AX=2704h) SeeAlso: AX=2704h,AX=2706h ----------2F2706----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK AX = 2706h DX = task index (see AX=2701h) of task to be activated Return: DX = task index of previously-active task SeeAlso: AX=2705h,AX=2707h,AX=2715h ----------2F2707----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK AX = 2707h DS:DX -> ASCIZ pathname of executable ES:BX -> parameter block (see below) CX = number of ticks before automatic return to task manager (0000h = run until termination or explicitly switched) Return: DX = new task's task index (FFFFh if task terminated) SeeAlso: AX=2706h,AX=2708h Format of parameter block: Offset Size Description 00h WORD reserved, should be 0000h 02h DWORD pointer to command tail to be copied into child's PSP 06h DWORD pointer to first FCB to be copied into child's PSP 0Ah DWORD pointer to second FCB to be copied into child's PSP ----------2F2708----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK AX = 2708h DX = task index Return: DX = FFFFh (task deleted) Notes: this call should only be used for abnormal task termination, after first checking for open files with AX=270Ch; should not be used with programs that allocate EMS or XMS memory switches to specified task first SeeAlso: AX=2707h ----------2F2709----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK AX = 2709h DX = task index DS:SI -> 8-byte name (8 NULs = remove name) Return: AL = task flags 00h ID unused or task terminated 01h ID in use, task name table entry valid 81h ID in use, task name fixed BX = task ID ES:DI -> name in task name table (see AX=2701h) Note: the task retains the given name until it terminates or the name is removed by specifying a name of 8 NULs. SeeAlso: AX=2701h,AX=2707h ----------2F270A----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID AX = 270Ah DX = task index Return: DX = task ID (FFFFh if index invalid) Note: task IDs stay constant, while indexes can change when other tasks are deleted SeeAlso: AX=2701h,AX=270Bh ----------2F270B----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX AX = 270Bh DX = task ID Return: DX = task index (FFFFh if task not active) SeeAlso: AX=270Ah ----------2F270C----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES AX = 270Ch DX = task index Return: AX = number of files currently open for specified task SeeAlso: AX=2708h ----------2F270D----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER AX = 270Dh DX = task index Return: DX = status 0000h if primary command interpreter (COMMAND.COM, etc.) running 0001h if not in root shell for task Note: TaskMAX will return 0001h if the specified task has spawned another command interpreter with AX=2707h SeeAlso: AX=2707h,AX=270Ch ----------2F270E----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN AX = 270Eh CX = length of string (max 15 keystrokes, 0000h to get current string) DS:SI -> pasting lead-in string (character/scan-code pairs) Return: ES:DI -> current lead-in string Note: the specified sequence of keystrokes is sent to the application before every line of a text-mode spreadsheet paste SeeAlso: AX=270Fh,AX=2710h,AX=2713h ----------2F270F----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN AX = 270Fh CX = length of string (max 15 keystrokes, 0000h to get current string) DS:SI -> pasting lead-in string (character/scan-code pairs) Return: ES:DI -> current lead-in string Note: the specified sequence of keystrokes is sent to the application before every number in a numeric-mode spreadsheet paste SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h ----------2F2710----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING AX = 2710h CX = length of string (max 15 keystrokes, 0000h to get current string) DS:SI -> pasting lead-in string (character/scan-code pairs) Return: ES:DI -> current lead-in string Note: the specified sequence of keystrokes is sent to the application after every line of a spreadsheet paste operation SeeAlso: AX=270Eh,AX=270Fh,AX=2713h ----------2F2711----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT AX = 2711h DX = ASCII code for separator (FFFFh to get current) Return: DL = current separator character SeeAlso: AX=270Fh ----------2F2712----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA AX = 2712h DX = task index ----------2F2713----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION AX = 2713h DX = task index CX = past mode 0000h alphanumeric 0001h numeric 0002h text SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h ----------2F2714----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO AX = 2714h Return: CX = total KB of swap space DX = available KB of swap space SeeAlso: AX=2701h ----------2F2715----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER AX = 2715h Return: only after calling task is again selected SeeAlso: AX=2706h ----------2F2716----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS AX = 2716h Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported CX = bytes in paste buffer DX = current generation number (updated after every copy operation) SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h ----------2F2717----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER AX = 2717h CX = bytes in destination buffer ES:DI -> destination buffer Return: AX = 0000h if function supported CX = bytes actually copied (FFFFh if buffer too small) DX = current generation number for paste buffer Note: the destination buffer may be too small if another task adds more data to the paste buffer after the AX=2716h call but before this call SeeAlso: AX=2713h,AX=2716h,AX=2718h ----------2F2718----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER AX = 2718h CX = bytes in source buffer DS:SI -> source buffer (plain ASCII, lines terminated with CR LF) Return: AX = 0000h if function supported CX = bytes actually copied DX = current generation number for paste buffer SeeAlso: AX=2712h,AX=2716h,AX=2717h ----------2F2A------------------------------- INT 2F - Gammafax DOS Dispatcher INTERFACE AH = 2Ah Note: details not available at this time SeeAlso: AX=8000h"FaxBIOS",AX=CB00h,AX=CBDDh,INT 66"BitFax" ----------2F3900----------------------------- INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE AX = 3900h Return: AL = status 00h not installed FFh one or more TSRs using this interface is installed Note: this function is provided to that the multiplex number will appear used to other programs SeeAlso: AH=39h/BL=00h ----------2F39--BL00------------------------- INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK AH = 39h BL = 00h AL = TSR ID number (01h-FFh, currently only 01h-0Eh used) (see below) Return: AL = status 00h not installed FFh installed DX = segment address of resident module Note: All of Kingswood Software's TSRs use this interface. Usually the resident module is installed by allocating a block of upper memory, setting its owner ID to 0008h (DOS data), and filling the MCB name field with the TSR's name. SeeAlso: AX=3900h,AH=39h/BL=01h Values for TSR ID number: 01h TSR Windows 02h NOBUSY 03h CD STACK 04h DISK WATCH 05h PUSHBP 06h ALIAS 07h KEYMACRO 08h SLOWDOWN 09h ANSIGRAB 0Ah TEE 0Bh FASTMOUS 0Ch EXTWILD 0Dh BREAKOUT 0Eh STOPDISK Format of TSR modules: Offset Size Description 00h 4 BYTEs signature "FTSR" 04h WORD segment address of this module 06h WORD number of words to skip (usually 0000h if no PSP present) 08h N WORDs module-defined data that must be at a fixed segment offset (usually only a PSP if file access is required) 5N BYTEs interrupt list (see below) BYTE FFh terminator Format of interrupt list entry: Offset Size Description 00h BYTE interrupt number (00h-FEh) 01h WORD offset within segment of DWORD pointer to previous interrupt 03h WORD offset within segment of begin of interrupt handler code ----------2F39--BL01------------------------- INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK AH = 39h BL = 01h AL = TSR ID number (01h-FFh) (see AH=39h/BL=00h) Return: AL = status 00h not ready to be removed FFh resident module may be removed by deassigning the interrupts hooked by the TSR and deallocating the TSR's memory block AH,BX,CX,DX,ES may be destroyed SeeAlso: AX=3900h,AH=39h/BL=00h ----------2F39------------------------------- INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS AH = 39h BL = function number (02h-FFh) AL = TSR ID number (01h-FFh) CX,DX,SI,DI,DS,ES may contain parameters Return: as appropriate for the called function SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h ----------2F3901BL02------------------------- INT 2F - Kingswood TSR Windows - OPEN WINDOW AX = 3901h BL = 02h Return: AX = error code (0000h if successful) Notes: opens the next TSR window on top of any others. Only three TSR windows can be opened at any one time. The three windows are all 40x11 characters, partly overlapping. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h ----------2F3901BL03------------------------- INT 2F - Kingswood TSR Windows - HIDE WINDOWS AX = 3901h BL = 03h Return: AX = error code (0000h if successful) Notes: Hide any visible TSR windows from view. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h ----------2F3901BL04------------------------- INT 2F - Kingswood TSR Windows - SHOW WINDOWS AX = 3901h BL = 04h Return: AX = error code (0000h if successful) Notes: Re-display all TSR windows after a HIDE WINDOWS call. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h ----------2F3901BL05------------------------- INT 2F - Kingswood TSR Windows - CLOSE WINDOW AX = 3901h BL = 05h Return: AX = error code (0000h if successful) Notes: Close the last opened TSR window. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h ----------2F3901BL06------------------------- INT 2F - Kingswood TSR Windows - SET WINDOW TITLE AX = 3901h BL = 06h DS:SI -> title string Return: AX = error code (0000h if successful) SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h ----------2F3901BL07------------------------- INT 2F - Kingswood TSR Windows - POSITION CURSOR AX = 3901h BL = 07h CH = Y coordinate (0-10) CL = X coordinate (0-39) Return: AX = error code (0000h if successful) Note: the hardware cursor is always disabled when a TSR window is opened; this call only sets a text position SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h ----------2F3901BL08------------------------- INT 2F - Kingswood TSR Windows - DISPLAY STRING AX = 3901h BL = 08h DS:SI -> string Return: AX = error code (0000h if successful) Notes: The text is not clipped. This routine understands Tab, NewLine and Carriage Return SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h ----------2F3901BL09------------------------- INT 2F - Kingswood TSR Windows - SCROLL WINDOW AX = 3901h BL = 09h CL = scroll direction: 00h up, FFh down, 00h clear window Return: AX = error code (0000h if successful) SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h ----------2F3901BL0A------------------------- INT 2F - Kingswood TSR Windows - SOUND BEEPER AX = 3901h BL = 0Ah DX = sound divisor, or 0 for silence. (divide 1843200 by required frequency to get value for DX) CL = sound length in 18.2 Hz clock ticks Return: AX = error code (0000h if successful) SeeAlso: AH=39h/BL=00h ----------2F3901BL0B------------------------- INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER AX = 3901h BL = 0Bh CL = number of users increment: +1 if adding a new user -1 if removing a user Return: AX = error code (0000h if successful) Note: the TSR windows resident module may only be removed when the internal user count is zero SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h ----------2F4000----------------------------- INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES AX = 4000h Return: AL = 01h does not virtualize video access 02h virtualizes the video when in text mode 03h virtualizes the video when in text mode or single plane graphics modes 04h virtualizes the video when in text mode, single plane graphics modes, and VGA multiplane modes FFh virtualizes the video fully Note: this function is used by display drivers to find out what capabilities exist for the VDD driver and also trigger then VDD driver to call functions 4005h and 4006h. This function also gives the Video Driver hardware access to the video registers. ----------2F4001----------------------------- INT 2F - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND AX = 4001h Note: called by OS/2 when the DOS box is about to be placed in the background and the video driver should save any necessary state SeeAlso: AX=4002h,AX=4005h ----------2F4002----------------------------- INT 2F - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND AX = 4002h Note: called by OS/2 when the DOS box is about to be placed in the foreground and the video driver should restore the previously-saved state SeeAlso: AX=4001h,AX=4006h ----------2F4003----------------------------- INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION AX = 4003h Note: This critical section must be exited within 1 second. SeeAlso: AX=4004h ----------2F4004----------------------------- INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION AX = 4004h SeeAlso: AX=4003h ----------2F4005----------------------------- INT 2F - Windows 3.x - SWITCHING DOS TO BACKGROUND AX = 4005h Note: called by Windows when the DOS box is about to be placed in the background and the video driver should save any necessary state information SeeAlso: AX=4001h,AX=4006h ----------2F4006----------------------------- INT 2F - Windows 3.x - SWITCHING DOS TO FOREGROUND AX = 4006h Note: called by Windows when the DOS box is about to be placed in the foreground and the video driver should restore any necessary state information SeeAlso: AX=4002h,AX=4005h ----------2F4007----------------------------- INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS AX = 4007h ----------2F41------------------------------- INT 2F - LAN Manager 2.0 DOS Enhanced NETPOPUP.EXE - NETWORK POP-UP SERVICE AH = 41h ??? Return: ??? Note: LAN Manager enhanced mode adds features beyond the standard redirector file/printer services SeeAlso: AX=118Ah,AH=42h,AH=4Bh ----------2F42------------------------------- INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE AH = 42h ??? Return: ??? Note: LAN Manager enhanced mode adds features beyond the standard redirector file/printer services SeeAlso: AX=118Ah,AH=41h,AH=4Bh ----------2F4300----------------------------- INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - INSTALLATION CHECK AX = 4300h Return: AL = 80h XMS driver installed AL <> 80h no driver Notes: XMS gives access to extended memory and noncontiguous/nonEMS memory above 640K this installation check DOES NOT follow the format used by other software SeeAlso: AX=4310h ----------2F4310----------------------------- INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - GET DRIVER ADDRESS AX = 4310h Return: ES:BX -> driver entry point Note: HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h SeeAlso: AX=4300h Perform a FAR call to the driver entry point with AH set to the function code AH function 00h Get XMS version number Return: AX = XMS version (in BCD, AH=major, AL=minor) BX = internal revision number DX = 0001h if HMA (1M to 1M + 64K) exists 0000h if HMA does not exist 01h Request High Memory Area (1M to 1M + 64K) DX = memory in bytes (for TSR or device drivers) FFFFh if application program Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,90h,91h,92h) (see below) 02h Release High Memory Area Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,90h,93h) (see below) 03h Global enable A20, for using the HMA Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,82h) (see below) 04h Global disable A20 Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,82h,94h) (see below) 05h Local enable A20, for direct access to extended memory Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,82h) (see below) 06h Local disable A20 Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,82h,94h) (see below) 07h Query A20 state Return: AX = 0001h enabled = 0000h disabled BL = error code (00h,80h,81h) (see below) 08h Query free extended memory, not counting HMA BL = 00h (some implementations leave BL unchanged on success) Return: AX = size of largest extended memory block in K DX = total extended memory in K BL = error code (00h,80h,81h,A0h) (see below) 09h Allocate extended memory block DX = Kbytes needed Return: AX = 0001h success DX = handle for memory block = 0000h failure BL = error code (80h,81h,A0h) (see below) 0Ah Free extended memory block DX = handle of block to free Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,A2h,ABh) (see below) 0Bh Move extended memory block DS:SI -> EMM structure (see below) Note: if either handle is 0000h, the corresponding offset is considered to be an absolute segment:offset address in directly addressable memory Return: AX = 0001h success = 0000h failure BL = error code (80h-82h,A3h-A9h) (see below) 0Ch Lock extended memory block DX = handle of block to lock Return: AX = 0001h success DX:BX = 32-bit linear address of locked block = 0000h failure BL = error code (80h,81h,A2h,ACh,ADh) (see below) 0Dh Unlock extended memory block DX = handle of block to unlock Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,A2h,AAh) (see below) 0Eh Get handle information DX = handle for which to get info Return: AX = 0001h success BH = block's lock count BL = number of free handles left DX = block size in K = 0000h failure BL = error code (80h,81h,A2h) (see below) 0Fh Reallocate extended memory block DX = handle of block BX = new size of block in K Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,A0h-A2h,ABh) (see below) 10h Request upper memory block (nonEMS memory above 640K) DX = size of block in paragraphs Return: AX = 0001h success BX = segment address of UMB DX = actual size of block = 0000h failure BL = error code (80h,B0h,B1h) (see below) DX = largest available block 11h Release upper memory block DX = segment address of UMB to release Return: AX = 0001h success = 0000h failure BL = error code (80h,B2h) (see below) 12h (XMS v3.0) Reallocate upper memory block DX = segment address of UMB to resize BX = new size of block in paragraphs Return: AX = 0001h success = 0000h failure BL = error code (80h,B0h,B2h) (see below) 34h (QEMM 5.11 only, undocumented) ??? 44h (QEMM 5.11 only, undocumented) ??? 88h (XMS v3.0) Query free extended memory Return: EAX = largest block of extended memory, in K BL = status 00h success 80h not implemented (i.e. on a 286 system) 81h VDISK detected A0h all extended memory allocated ECX = physical address of highest byte of memory (valid even on error codes 81h and A0h) EDX = total Kbytes of extended memory (0 if status A0h) 89h (XMS v3.0) Allocate any extended memory EDX = Kbytes needed Return: AX = 0001h success DX = handle for allocated block (free with AH=0Ah) = 0000h failure BL = status (80h,81h,A0h,A1h,A2h) (see below) 8Eh (XMS v3.0) Get extended EMB handle information DX = handle Return: AX = 0001h success BH = block's lock count CX = number of free handles left EDX = block size in K = 0000h failure BL = status (80h,81h,A2h) (see below) 8Fh (XMS v3.0) Reallocate any extended memory block DX = unlocked handle EBX = new size in K Return: AX = 0001h success = 0000h failure BL = status (80h,81h,A0h-A2h,ABh) (see below) Notes: HIMEM.SYS requires at least 256 bytes free stack space the XMS driver need not implement functions 10h through 12h to be considered compliant with the standard Format of EMM structure: Offset Size Description 00h DWORD number of bytes to move (must be even) 04h WORD source handle 06h DWORD offset into source block 0Ah WORD destination handle 0Ch DWORD offset into destination block Notes: if source and destination overlap, only forward moves (source base less than destination base) are guaranteed to work properly if either handle is zero, the corresponding offset is interpreted as a real-mode address referring to memory directly addressable by the processor Error codes returned in BL: 00h successful 80h function not implemented 81h Vdisk was detected 82h an A20 error occurred 8Eh a general driver error 8Fh unrecoverable driver error 90h HMA does not exist 91h HMA is already in use 92h DX is less than the /HMAMIN= parameter 93h HMA is not allocated 94h A20 line still enabled A0h all extended memory is allocated A1h all available extended memory handles are allocated A2h invalid handle A3h source handle is invalid A4h source offset is invalid A5h destination handle is invalid A6h destination offset is invalid A7h length is invalid A8h move has an invalid overlap A9h parity error occurred AAh block is not locked ABh block is locked ACh block lock count overflowed ADh lock failed B0h only a smaller UMB is available B1h no UMB's are available B2h UMB segment number is invalid ----------2F44------------------------------- INT 2F U - ??? AH = 44h AL = function (at least 0Bh, 15h, 17h) ??? Return: ??? Note: called by Codeview for Windows SeeAlso: AH=86h ----------2F4500----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK AX = 4500h Return: AL = 01h if PROF.COM installed AL = 02h if VPROD.386 installed SeeAlso: AX=4501h,AX=4502h ----------2F4501----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER AX = 4501h BX = CSIPS buffer size in KB (first parameter for ProfSetup) CX = output limit in KB (second parameter for ProfSetup) Note: this call is not supported by PROF.COM SeeAlso: AX=4502h,AX=4503h ----------2F4502----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE AX = 4502h BL = sampling rate for PROF.COM (0 < BL <= 13) (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s) CX = sampling rate for VPROD.386 Note: for PROF.COM, this programs the CMOS clock by setting BL+2 as the low four bits of CMOS register 0Ah. The interruption rate is 1 SHL (15 - BL) per second. SeeAlso: AX=4501h,AX=4503h ----------2F4503----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING AX = 4503h Notes: Profiling is also turned on by the key combinations LeftShift + RightShift + Alt LeftShift + RightShift + Ctrl for PROF.COM, this call programs the CMOS clock by reading register 0Ch, and setting bit 6 of register 0Bh. It then makes sure that IRQ8 is unmasked SeeAlso: AX=4504h ----------2F4504----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING AX = 4504h Notes: profiling is also turned off by the key combination LeftShift + RightShift for PROF.COM, this programs the CMOS clock by reading register 0Ch and clearing bit 6 of register 0Bh. It then masks IRQ8. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h ----------2F4505----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA AX = 4505h SeeAlso: AX=4503h,AX=4504h,AX=4506h ----------2F4506----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush" AX = 4506h SeeAlso: AX=4505h,AX=4507h ----------2F4507----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish" AX = 4507h Note: this call is essentially a "ProfStop" (AX=4504h) followed by "ProfFlush" (AX=4506h) SeeAlso: AX=4504h,AX=4505h,AX=4506h ----------2F4508----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE AX = 4508h BX = ordinal (or 0000h) CX = segment DX = instance (or 0000h) SI = type (or 0000h) ES:DI -> ASCIZ module name Notes: this call is an alternate entry to the profiler's SEGDEBUG interface, but only to function 0, for notifying the profiler of each new segment loaded. The SHOWHITS utility then examines the profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction with symbol files to provide information in a useful form. this call does not have a corresponding Windows function SeeAlso: AX=4500h ----------2F4601----------------------------- INT 2F U - DOS 5.0 kernel - ??? AX = 4601h Return: ??? Note: copies the MCB following the caller's PSP memory block into DOS data segment SeeAlso: AX=4602h ----------2F4602----------------------------- INT 2F U - DOS 5.0 kernel - ??? AX = 4602h Return: ??? Note: copies previously copied MCB from DOS data segment into MCB following caller's PSP memory block SeeAlso: AX=4601h ----------2F46------------------------------- INT 2F U - ??? AH = 46h AL = subfunction (03h,04h) Return: ??? Note: these two subfunctions are called by MS Windows 3.0 ----------2F4653CX0002----------------------- INT 2F - F-PROT v1.x only - F-LOCK.EXE AX = 4653h CX = 0002h BX = subfunction 0000h installation check Return: AX = FFFFh 0001h uninstall Return: AX,BX,ES destroyed 0002h disable (v1.08 and below only) 0003h enable (v1.08 and below only) Note: F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik Skulason SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh ----------2F4653CX0003----------------------- INT 2F - F-PROT v1.x only - F-XCHK.EXE AX = 4653h CX = 0003h BX = subfunction 0000h installation check Return: AX = FFFFh 0001h uninstall Return: AX,BX,ES destroyed Note: F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik Skulason SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h ----------2F4653CX0004----------------------- INT 2F - F-PROT v1.x only - F-POPUP.EXE AX = 4653h CX = 0004h BX = subfunction 0000h installation check Return: AX = FFFFh 0001h uninstall Return: AX,BX,ES destroyed 0002h disable (v1.08 and below only) display message (v1.14+) other registers: ??? 0003h enable (v1.08 and below only) display message (v1.14+) other registers: ??? Return: AX = key pressed by user Note: F-POPUP is part of the F-PROT virus/trojan protection package by Fridrik Skulason SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h ----------2F4653CX0005----------------------- INT 2F - F-PROT v1.x only - F-DLOCK.EXE AX = 4653h CX = 0005h BX = subfunction 0000h installation check Return: AX = FFFFh 0001h uninstall Return: AX,BX,ES destroyed Note: F-DLOCK is part of the F-PROT virus/trojan protection package by Fridrik Skulason SeeAlso: AX=4653h/CX=0004h,AX=CA00h ----------2F4680----------------------------- INT 2F - MS Windows v3.0 - INSTALLATION CHECK AX = 4680h Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode, or DOS 5 DOSSHELL active nonzero no Windows, Windows prior to 3.0, or Windows3 in enhanced mode Note: not officially documented, but Microsoft has indicated that they intend to provide an installation check which works in all modes SeeAlso: AX=1600h ----------2F4800----------------------------- INT 2F - DOS v5.0 DOSKEY - INSTALLATION CHECK AX = 4800h Return: AL = nonzero if installed SeeAlso: AX=4810h ----------2F4810----------------------------- INT 2F - DOS v5.0 DOSKEY - READ INPUT LINE FROM CONSOLE AX = 4810h DS:DX -> line buffer (see INT 21/AH=0Ah) Return: AX = 0000h if successful Notes: the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to the previous handler if the user's input is a macro name, no text is placed in the buffer even though AX=0000h on return; the program must immediately issue this call again to retrieve the expansion of the macro. Similarly, if the user enters a special parameter such as $*, this call must be repeated to retrieve the expansion; on the second call, DOSKEY overwrites the macro name on the screen with its expansion. SeeAlso: AX=4800h,INT 21/AH=0Ah ----------2F4A00CX0000----------------------- INT 2F U - DOS v5.0 - SINGLE-FLOPPY LOGICAL DRIVE CHANGE NOTIFICATION AX = 4A00h CX = 0000h DH = new drive number DL = current drive number Return: CX = FFFFh to skip "Insert diskette for drive X:" message Note: called by MSDOS 5.00 IO.SYS just before displaying the message "Insert diskette for drive X:" on single-floppy systems ----------2F4A01----------------------------- INT 2F - DOS v5.0 - QUERY FREE HMA SPACE AX = 4A01h Return: BX = number of bytes available in HMA (0000h if DOS not using HMA) ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA) SeeAlso: AX=4310h,AX=4A02h ----------2F4A02----------------------------- INT 2F - DOS v5.0 - ALLOCATE HMA SPACE AX = 4A02h BX = number of bytes Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh BX destroyed Note: this call is not valid unless DOS is loaded in the HMA (DOS=HIGH) SeeAlso: AX=4A01h ----------2F4A05----------------------------- INT 2F U - DOS v5.0 DOSSHELL - ??? AX = 4A05h SI = function 0000h reset??? 0001h ??? 0002h ??? 0003h ??? 0004h ??? BL = ??? 0005h ??? 0006h get ??? Return: ES:DI -> ??? 0007h get ??? Return: AX = ??? 0008h get ??? Return: DX:AX -> ??? 0009h get ??? Return: ES = ??? 000Ah ??? BL = ??? ES:DI -> ??? 000Bh get ??? Return: AX = ??? 000Ch ??? BL = ??? Return: DX:AX -> ??? Notes: DOSSHELL chains to the previous handler if SI is not one of the values listed above the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch SeeAlso: AX=4B01h ----------2F4A06----------------------------- INT 2F U - ??? - GET MEMORY SIZE AX = 4A06h DX = segment following last byte of conventional memory Return: DX = segment following last byte of memory available for use by DOS Note: called by MSDOS 5.00 IO.SYS startup code if the signature "RPL" is present three bytes beyond the INT 2F handler; this call overrides the value returned by INT 12 SeeAlso: INT 12 ----------2F4A10----------------------------- INT 2F - SMARTDRV v4.00+ - API AX = 4A10h BX = command 0000h installation check and hit ratios Return: AX = BABEh if installed DX:BX = cache hits DI:SI = cache misses CX = ??? BP = version (4.00 = 0400h) 0001h reset cache 0002h flush buffers 0003h status BP = drive # (0=A, 1=B, etc.) DL = subfunction 00h only get information 01h turn on read cache 02h turn off read cache 03h turn on write cache 04h turn off write cache Return: AX = BABEh if OK DL = status bit 7 not cached bit 6 write-through bit 5 ??? bits 0-4 drive # (0=A, 1=B...) DL = FFh if drive does not exist Note: If the read cache is off, reads will not be cached, but writes will continue to be cached if the write- cache is enabled. 0004h cache size Return: AX = ??? BX = largest number of elements CX = size of elements in bytes DX = number of elements under Windows 0005h double-buffer status BP = drive # (0=A, 1=B...) Return: AX = BABEh if double-buffered 0007h ??? Return: DI = random number??? 000Ah get table pointer??? Return: ES:BX -> table of about 10 bytes or 5 words. Seems to be words pointing to memory addresses containing info??? (see below) 1234h signal serious error pops up a message box saying that a serious error occurred and to hit R to retry. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV" Format of data table: Offset Size Description 00h 8 BYTEs ??? 08h WORD offset of WORD containing number of elements in cache ----------2F4B------------------------------- INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR AH = 4Bh ??? Return: ??? Note: LAN Manager enhanced mode adds features beyond the standard redirector file/printer services SeeAlso: AX=118Ah,AH=41h,AH=42h ----------2F4B01----------------------------- INT 2F - DOS v5.0 TASK SWITCHER - BUILD CALLOUT CHAIN AX = 4B01h CX:DX -> task switcher entry point (see AX=4B02h) ES:BX = 0000h:0000h Return: ES:BX -> callback info structure (see below) or 0000h:0000h Notes: called by the task switcher this function is hooked by clients which require notification of task switcher activities; the call must first be passed on to the prior handler with registers unchanged using a simulated interrupt. On return, the client must build a callback info structure and store the returned ES:BX in the "next" field, then return the address of its own callback info structure. a client program must add itself to the notification chain if it provides services to other programs; before terminating, it must remove itself from the chain by calling the task switcher's entry point with AX=0005h (see AX=4B02h) the task switcher entry point should not be saved, as it is subject to change and will be provided on any notification call the Windows 3.1 Standard Mode supports this API SeeAlso: AX=4B02h Format of callback info structure: Offset Size Description 00h DWORD pointer to next callback info structure 04h DWORD pointer to notification function (see below) 08h DWORD reserved 0Ch DWORD address of zero-terminated list of API info structures (see AX=4B02h) Notification function is called with: AX = function 0000h switcher initialization Return: AX = 0000h if OK to load = nonzero to abort task switcher 0001h query suspend BX = session ID Return: AX = 0000h if OK to switch session = 0001h if not 0002h suspend session BX = session ID interrupts disabled Return: AX = 0000h if OK to switch session = 0001h if not 0003h activate session BX = session ID CX = session status flags bit 0: set if first activation of session bits 1-15: reserved (0) interrupts disabled Return: AX = 0000h 0004h session active BX = session ID CX = session status flags bit 0: set if first activation of session bits 1-15: reserved (0) Return: AX = 0000h 0005h create session BX = session ID Return: AX = 0000h if OK to create session = 0001h if not 0006h destroy session BX = session ID Return: AX = 0000h 0007h switcher termination BX = flags bit 0: set if calling switcher is only switcher loaded bits 1-15: reserved (0) Return: AX = 0000h ES:DI -> task switcher entry point (see AX=4B02h) Notes: function 0000h is generally called by the program which controls or invokes the task switcher, rather than by the task switcher itself; the entry point supplied to this function is not necessarily the entry point to the task switcher itself, and may be 0000h:0000h. If any client indicates that loading is not possible, all clients will be called with function 0007h; thus it is possible for a client to receive a termination notice without a corresponding initialization notice. except for functions 0002h and 0003h, the notification handler is called with interrupts enabled and may make any INT 21h function call; interrupts must not be enabled in functions 0002h and 0003h function 0007h may be called with ES:DI = 0000h:0000h if the entry point is no longer valid ----------2F4B02BX0000----------------------- INT 2F - DOS v5.0 TASK SWITCHER - INSTALLATION CHECK AX = 4B02h BX = 0000h ES:DI = 0000h:0000h Return: ES:DI = 0000h:0000h if task switcher not loaded ES:DI -> task switcher entry point (see below) if loaded AX = 0000h Note: the returned entry point is that for the most-recently loaded task switcher; the entry points for prior task switchers may be determined with the "get version" call (see below) SeeAlso: AX=4A05h,AX=4B03h Call task switcher entry point with: AX = 0000h get version Return: CF clear if successful AX = 0000h ES:BX -> task switcher version struct (see below) CF set if unsupported function AX = 0001h test memory region ES:DI -> first byte to be tested CX = size of region to test Return: CF clear if successful AX = memory type of tested region 0000h global 0001h global and local 0002h local (replaced on session switch) CF set if unsupported function AX = 0002h suspend switcher ES:DI -> new task switcher's entry point Return: CF clear if successful AX = state 0000h switcher has been suspended 0001h switcher not suspended, new switcher must abort 0002h switcher not suspended, but new switcher may run anyway CF set if unsupported function AX = 0003h resume switcher ES:DI -> new task switcher's entry point Return: CF clear if successful AX = 0000h CF set if unsupported function AX = 0004h hook notification chain ES:DI -> callback info structure to be added to chain (see AX=4B01h) Return: CF clear if successful AX = 0000h CF set if unsupported function AX = 0005h unhook notification chain ES:DI -> callback info structure to be removed from chain (see AX=4B01h) Return: CF clear if successful AX = 0000h CF set if unsupported function AX = 0006h query API support BX = asynchronous API identifier Return: CF clear if successful AX = 0000h ES:BX -> API info structure (see below) for the client which provides the highest level of CF set if unsupported function Format of task switcher version structure: Offset Size Description 00h WORD major version of supported protocol (current protocol is 1.0) 02h WORD minor version of supported protocol 04h WORD major version of task switcher 06h WORD minor version of task switcher 08h WORD task switcher ID (see AX=4B03h) 0Ah WORD operation flags bit 0: set if task switcher disabled bits 1-15: reserved (0) 0Ch DWORD pointer to ASCIZ task switcher name ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher) 10h DWORD pointer to previous task switcher's entry point or 0000h:0000h Format of API info structure: Offset Size Description 00h WORD size of structure in bytes (000Ah) 02h WORD API identifier 0001h NetBIOS 0002h 802.2 0003h TCP/IP 0004h LAN Manager named pipes 0005h Novell NetWare IPX 04h WORD major version \ of highest version of API for which the support 06h WORD minor version / level specified in the next field is provided 08h WORD support level 0001h minimal support 0002h API-level support 0003h switcher compatibility 0004h seamless compatibility ----------2F4B03----------------------------- INT 2F - DOS v5.0 TASK SWITCHER - ALLOCATE SWITCHER ID AX = 4B03h ES:DI -> task switcher entry point (see AX=4B02h) Return: AX = 0000h BX = switcher ID (0001h-000Fh), or 0000h if no more available Notes: if a task switcher has determined that it is the first to be loaded, it must allocate an identifier for itself and provide this function to all subsequent task switchers; if it is not the first to be loaded, it must call this function to allocate an ID. The switcher ID is used as the high four bits of all session identifiers to ensure unique session IDs. if no more switcher IDs are available, the new task switcher making the call must terminate or disable itself the task switcher providing the identifiers may call the new task switcher's entry point as needed this call is available from within DOSSHELL even if the task switcher is not installed SeeAlso: AX=4B02h,AX=4B04h ----------2F4B04----------------------------- INT 2F - DOS v5.0 TASK SWITCHER - FREE SWITCHER ID AX = 4B04h BX = switcher ID ES:DI -> task switcher entry point (see AX=4B02h) Return: AX = 0000h BX = status 0000h successful other error (invalid ID or ID not allocated) Notes: called by a task switcher when it exits, unless it was the first loaded and is providing the support for AX=4B03h and AX=4B04h the task switcher providing the identifiers may call the terminating task switcher's entry point as needed this call is available from within DOSSHELL even if the task switcher is not installed SeeAlso: AX=4B02h,AX=4B03h ----------2F4B05----------------------------- INT 2F - DOS v5.0 DOSSHELL TASK SWITCHER - IDENTIFY INSTANCE DATA AX = 4B05h ES:BX = 0000h:0000h CX:DX -> task switcher entry point (see AX=4B02h) Return: ES:BX -> startup info structure (see below) or 0000h:0000h Notes: called by task switcher clients with instance data should hook this call, pass it through to the previous handler with unchanged registers using a simulated interrupt. On return, the client should create a startup info structure (see below), store the returned ES:BX in the "next" field, and return the address of the created structure in ES:BX all MSDOS function calls are available from within this call SeeAlso: AX=1605h,AX=4B02h Format of startup info structure: Offset Size Description 00h 2 BYTEs major, minor version of info structure (03h,00h) 02h DWORD pointer to next startup info structure or 0000h:0000h 06h DWORD 0000h:0000h (ignored) 0Ah DWORD ignored 0Eh DWORD pointer to instance data records Format of one instance data record in array: Offset Size Description 00h DWORD address of instance data (end of array if 0000h:0000h) 04h WORD size of instance data ----------2F53------------------------------- INT 2F U - ??? AH = 53h AL = subfunction (0Bh, maybe others???) Return: ??? Note: called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+ SeeAlso: AH=54h,INT 33/AX=002Fh ----------2F54------------------------------- INT 2F U - ??? AH = 54h AL = subfunction (00h, 01h, maybe others???) Return: ??? Note: called by MS Windows 3.1 POWER.DRV SeeAlso: AH=53h ----------2F5453----------------------------- INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE AX = 5453h BX = subfunction 00h installation check CX = 0000h DS:SI -> 8-char blank-padded name Return: AX = FFFFh installed CX = ID number of already-installed copy = anything else, not installed CX = ID number for TSR when installed 01h get user parameters CX = TSR ID number Return: AX = 0000h successful ES:BX -> user parameter block (see below) = nonzero failed 02h check if hotkey in use CL = scan code of hot key Return: AX = FFFFh hot key conflicts with another TSR otherwise safe to use the hotkey 03h replace default critical error handler CX = TSR ID number DS:SI -> new routine for INT 24h Return: AX = nonzero, unable to install new handler 04h get internal data area CX = TSR ID number Return: AX = 0000h ES:BX -> TSR's internal data area (see below) = nonzero, TSR not found 05h set multiple hot keys CX = TSR ID number DL = number of additional hot keys to allocate DS:SI -> table of hot keys BYTE hotkey scan code BYTE hotkey shift state BYTE flag value to pass to TSR (nonzero) Return: AX = nonzero, unable to install hot keys 06h - 0Fh reserved 10h enable TSR CX = TSR ID number Return: AX = nonzero, unable to enable 11h disable TSR CX = TSR ID number Return: AX = nonzero, unable to disable 12h unload TSR CX = TSR ID number Return: AX = nonzero, invalid TSR number Note: if any interrupts used by TSR have been grabbed by another TSR, the TesSeRact routines will wait until it is safe to remove the indicated TSR from memory 13h restart TSR CX = TSR ID number of TSR which was unloaded but is still in memory Return: AX = nonzero, unable to restart TSR 14h get status word CX = TSR ID number Return: AX = FFFFh invalid ID number = other, successful BX = bit flags 15h set status word CX = TSR ID number DX = new bit flags Return: AX = nonzero, unable to set status word 16h get INDOS state at popup CX = TSR ID number Return: AX = 0000h successful BX = value of INDOS flag 17h - 1Fh reserved 20h call user procedure CX = TSR ID number ES:DI -> user-defined data Return: AX = 0000h successful 21h stuff keystrokes into keyboard buffer CX = TSR ID number DL = speed 00h stuff keystrokes only when buffer is empty 01h stuff up to four keystrokes per clock tick 02h stuff up to 15 keystrokes per clock tick DH = scan code flag if zero, buffer contains alternating ASCII and scan codes if nonzero, buffer contains only ASCII codes SI = number of keystrokes ES:DI -> buffer to stuff Return: AX = 0000h success F0F0h user aborted with ^C or ^Break other unable to stuff keystrokes 22h (v1.10) trigger popup CX = TSR ID number Return: AX = 0000h success, TSR will either pop up or beep to indicate that it is unable to pop up nonzero invalid ID number 23h (v1.10) invoke TSR's background function CX = TSR ID number Return: AX = 0000h success FFFFh not safe to call background function nonzero invalid ID number 24h - 2Fh reserved Notes: Borland's THELP.COM popup help system for Turbo Pascal and Turbo C (versions 1.x and 2.x only) fully supports the TesSeRact API, as do the SWAP?? programs by Innovative Data Concepts. AVATAR.SYS supports functions 00h and 01h (only the first three fields of the user parameter block) using the name "AVATAR " SeeAlso: AX=CAFEh Format of User Parameter Block: Offset Size Description 00h 8 BYTEs blank-padded TSR name 08h WORD TSR ID number 0Ah DWORD bitmap of supported functions 0Eh BYTE scan code of primary hotkey 00h = pop up when shift states match FFh = no popup (if shift state also FFh) 0Fh BYTE shift state of primary hotkey FFh = no popup (if scan code also FFh) 10h BYTE number of secondary hotkeys 11h DWORD pointer to extra hotkeys set by func 05h 15h WORD current TSR status flags 17h WORD PSP segment of TSR 19h DWORD DTA for TSR 1Dh WORD default DS for TSR 1Fh DWORD stack at popup 23h DWORD stack at background invocation Format of TSR internal data area: Offset Size Description 00h BYTE revision level of TesSeRact library 01h BYTE type of popup in effect 02h BYTE INT 08 occurred since last invocation 03h BYTE INT 13 occurred since last invocation 04h BYTE active interrupts 05h BYTE active soft interrupts 06h BYTE DOS major version 07h BYTE how long to wait before popping up 08h DWORD pointer to INDOS flag 0CH DWORD pointer to DOS critical error flag 10h WORD PSP segment of interrupted program 12h WORD PSP segment of prog interrupted by INT 28 14h DWORD DTA of interrupted program 18h DWORD DTA of program interrupted by INT 28 1Ch WORD SS of interrupted program 1Eh WORD SP of interrupted program 20h WORD SS of program interrupted by INT 28 22h WORD SP of program interrupted by INT 28 24h DWORD INT 24 of interrupted program 28h 3 WORDs DOS 3+ extended error info 2Eh BYTE old BREAK setting 2Fh BYTE old VERIFY setting 30h BYTE were running MS WORD 4.0 before popup 31h BYTE MS WORD 4.0 special popup flag 32h BYTE enhanced keyboard call in use 33h BYTE delay for MS WORD 4.0 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h): DWORD old interrupt vector BYTE interrupt number WORD offset in TesSeRact code segment of new interrupt handler ----------2F5500----------------------------- INT 2F U - DOS v5.0 - COMMAND.COM INTERFACE AX = 5500h Return: AX = 0000h DS:SI -> entry point table Notes: used to access the shareable portion of COMMAND.COM, which may have been moved into the HMA; only the primary COMMAND.COM retains this portion procedures called from a dispatcher in COMMAND's resident portion; most assume that the segment address of the resident portion is on the stack and are thus not of general use ----------2F6282----------------------------- INT 2F U - PC Tools v7.0+ VDEFEND, DATAMON - SET ??? ADDRESS AX = 6282h CX:DX -> ??? or 0000h:0000h DI = 0000h ??? FFFFh ??? other segment of ??? Return: BX = 0062h Note: if CX:DX = 0000h:0000h on entry, the ??? address is not changed (DATAMON only) SeeAlso: INT 21/AH=FAh"VDEFEND" ----------2F6284BX0000----------------------- INT 2F U - PC Tools v7.0+ DATAMON - INSTALLATION CHECK AX = 6284h BX = 0000h CX = 0000h Return: AX = segment of resident code BX = 5555h CX = 5555h ----------2F6284BX0001----------------------- INT 2F U - PC Tools v7.0+ DATAMON - GET ??? AX = 6284h BX = 0001h CX = 0001h Return: AX:BX -> ??? CX = BX ----------2F6284BX0002----------------------- INT 2F U - PC Tools v7.0+ DATAMON - GET ??? AX = 6284h BX = 0002h CX = 0002h Return: AX = ??? BX = ??? CX = AX DX = BX ----------2F6284BX0003----------------------- INT 2F U - PC Tools v7.0+ DATAMON - SET ??? FLAGS AX = 6284h BX = 0003h CX = flags bit 12: ??? 10: ??? 5: ??? 3: ??? DX = flags bit 15: ??? ----------2F6400----------------------------- INT 2F - SCRNSAV2.COM - INSTALLATION CHECK AX = 6400h Return: AL = 00h not installed FFh installed Note: SCRNSAV2.COM is a screen saver for PS/2's with VGA by Alan Ballard SeeAlso: INT 10/AX=5555h ----------2F7200----------------------------- INT 2F - SRDISK v1.30 - INSTALLATION CHECK AX = 7200h Return: AL = FFh if installed ES = segment of device driver header (see below) Note: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala Format of device driver header: Offset Size Description 00h 10 BYTEs same as standard device driver header (see INT 21/AH=52h) 0Ah BYTE number of subunits (drives) supported by driver 0Bh 3 BYTEs signature "SRD" 0Eh 4 BYTEs memory type string (currently only "XMS ") 12h 4 BYTEs ASCII driver version string "N.NN" 16h BYTE 00h 17h BYTE configuration format version (currently 00h) 18h WORD offset of drive configuration data ----------2F7A00----------------------------- INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK AX = 7A00h Return: AL = 00h not installed = FFh installed ES:DI -> FAR entry point for routines accessed exclusively through INT 7A in NetWare versions through 2.0a. Call with same values as INT 7A SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"Novell" ----------2F7A10----------------------------- INT 2F - Novell NetWare - TBMI v2.0 - GET TBMI STATUS AX = 7A10h Return: DH = major TBMI version number DL = minor TBMI version number CX = segment address of TBMI resident part BX = status word of TBMI bit 0: INT2F intercepted by TBMI bit 1: INT7A intercepted by TBMI bit 2: INT64 intercepted by TBMI bits 3-14: reserved or unused ??? bit 15: outstanding task ID was detected Note: TBMI is the Task-Switched Buffer Manager Interface SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h ----------2F7A11----------------------------- INT 2F - Novell NetWare - TBMI v2.0 - GET INT2F HANDLERS AX = 7A11h Return: ES:BX -> old INT 2F handler DS:DX -> TBMI INT 2F handler SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h ----------2F7A12----------------------------- INT 2F - Novell NetWare - TBMI v2.0 - GET INT64 HANDLERS AX = 7A12h Return: ES:BX -> old INT 64 handler DS:DX -> TBMI INT 64 handler SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h ----------2F7A13----------------------------- INT 2F - Novell NetWare - TBMI v2.0 - GET INT7A HANDLERS AX = 7A13h Return: ES:BX = old INT 7A handler DS:DX = TBMI INT 7A handler SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h ----------2F7A14----------------------------- INT 2F - Novell NetWare - TBMI v2.0 - GET STATISTICS AX = 7A14h CX = statistic to retrieve 0000h available diagnostic functions??? Return: CX = maximum available function??? (000Ch for v2.0) 0001h buffers in use Return: CX = TBMI buffers currently in use 0002h maximum buffers used Return: CX = maximum number of buffers ever in use 0003h unavailable buffers Return: CX = count of unavailable TBMI buffers 0004h old interrupt usage Return: CX = TBMI accesses to intercepted old vectors INT 2F, INT 64, and INT 7A 0005h far call usage Return: CX = TBMI accesses to IPX/SPX far call handler (not including internal accesses) 0006h task buffering Return: CX = TBMI task buffering status (enabled/disabled or disable/enable switch count???) 0007h current task ID Return: CX = TBMI current task ID number (0000h if ???) 0008h outstanding ID count Return: CX = number of outstanding TBMI IDs 0009h configured ECBs Return: CX = number of TBMI Event Control Blocks configured 000Ah configured data ECBs Return: CX = number of TBMI data ECBs configured 000Bh configured sockets Return: CX = number of TBMI sockets configured (from NETCFG) 000Ch current sockets Return: CX = number of TBMI sockets currently in use SeeAlso: AX=7A10h ----------2F7A1B----------------------------- INT 2F - Novell NetWare - TBMI v2.0 - RESERVED??? AX = 7A1Bh Note: this call merely performs an IRET ----------2F7A80----------------------------- INT 2F - Novell NetWare - shell 3.01d - ??? AX = 7A80h Return: nothing Note: apparently called on abnormal exit of the shell ----------2F7A81----------------------------- INT 2F - Novell NetWare - shell 3.01d - ??? AX = 7A81h CX:DX -> ??? in shell's CS (may be callback address or data structure) Return: nothing??? ----------2F7A85----------------------------- INT 2F - Novell NetWare - shell 3.01 - BROADCAST INFORM AX = 7A85h CX = broadcast server number Return: CX = 0000h if broadcast message handled by another program CX unchanged if broadcast not handled ----------2F7AFE----------------------------- INT 2F - Novell NetWare - shell 3.01d - ??? AX = 7AFEh Return: AL = FFh ??? other ??? ----------2F7AFFBX0000----------------------- INT 2F - Novell NetWare - TBMI v2.0 - INSTALLATION CHECK??? AX = 7AFFh BX = 0000h CX = 4E65h ("Ne") DX = 7457h ("tW") ES:DI -> IPX/SPX special handler (XMS/EMS ???) Return: AL = FFh if installed CX = configured sockets (14h) DS:SI -> data table ??? ES:DI -> IPX far call handler Note: for IPX/SPX this call reportedly returns DS:DI pointing to the table of pointers to service events queue head and tail SeeAlso: AX=7AFFh/BX=0001h ----------2F7AFFBX0001----------------------- INT 2F - Novell NetWare - TBMI v2.0, shell v3.01d - INSTALLATION CHECK??? AX = 7AFFh BX = 0001h CX = 4E65h ("Ne") DX = 7457h ("tW") Return: AL = FFh if installed CX = ??? (8000h) SI = ??? (or -> ???) (0002h) ES:DI -> IPX far call handler ES:DX -> 6-byte data area ??? SeeAlso: AX=7AFFh/BX=0000h ----------2F7F24----------------------------- INT 2F - Multiplex - ??? AX = 7F24h ??? Return: ??? Note: called by PC/370, an IBM 370 emulator by Donald S. Higgins ----------2F7F26----------------------------- INT 2F - Multiplex - ??? AX = 7F26h ??? Return: ??? Note: called by PC/370, an IBM 370 emulator by Donald S. Higgins --------------------------------------------- Interrupt List, part 5 of 7 This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown ----------2F8000----------------------------- INT 2F - EASY-NET - INSTALLATION CHECK AX = 8000h Return: AL = 00h not installed FFh installed Note: EASY-NET is a shareware two-machine serial-port network ----------2F8000----------------------------- INT 2F - Nanosoft, Inc. TurboNET server - INSTALLATION CHECK AX = 8000h Return: AL = FFh if installed BX = CS of resident code CX = ??? (03FCh) Note: TurboNET is a NetBIOS-based file redirector and server; a demonstration version may be downloaded from Nanosoft's BBS SeeAlso: AX=8100h ----------2F8000DX0000----------------------- INT 2F - FaxBIOS interface - INSTALLATION CHECK AX = 8000h DX = 0000h DI = 0000h Return: AL = FFh if installed DX:DI -> signature "FaxBiosjpc" Note: FaxBIOS may use any multiplex number from 80h through FFh; to determine whether it is installed, it is necessary to poll all multiplex numbers for one which returns the above signature SeeAlso: AH=2Ah,AX=80FBh ----------2F8001----------------------------- INT 2F - Nanosoft, Inc. TurboNET server - ??? AX = 8001h DS:SI -> 16-byte buffer for ??? Return: AH = status 00h successful 01h error Note: makes NetBIOS calls ----------2F80FB----------------------------- INT 2F - FaxBIOS interface - COMMAND SUBMISSION AX = 80FBh BX = function number (see below) DX:DI -> command buffer (see below) Return: AL = FFh if submitted OK CX = result code (see below) Note: FaxBIOS may use any multiplex number from 80h through FFh SeeAlso: AX=8000h"FaxBIOS",AX=CBDDh Values for function number: 0001h SYS_LOGIN 0002h SYS_LOGOUT 0003h SYS_GET_FAXAPP_INFO 0004h STAT_IO_GET 0005h STAT_FAXBIOS_GET 0006h PDIR_OPEN 0007h PDIR_CLOSE 0008h PDIR_READ_PERSON 0009h PDIR_PARTIAL_READ 000Ah PDIR_READ_GROUP 000Bh PDIR_READ_MEMBER_LIST 000Ch PDIR_WRITE_PERSON 000Dh PDIR_WRITE_GROUP 000Eh PDIR_DELETE_PERSON 000Fh PDIR_DELETE_GROUP 0010h PDIR_READ_GROUP_LIST 0011h PDIR_IN_GROUP 0012h PDIR_OUT_GROUP 0013h SCHED_OPEN 0014h SCHED_ADD_DEST 0015h SCHED_ADD_FILE 0016h SCHED_SET_PARAMS 0017h SCHED_CANCEL 0018h SCHED_CLOSE 0019h SLOG_OPEN 001Ah SLOG_CLOSE 001Bh SLOG_SHORT_ENV_STAT 001Ch SLOG_LONG_ENV_STAT 001Dh SLOG_DEST_STAT 001Eh SLOG_FILE_STAT 001Fh SLOG_CANCEL_ENV 0020h RLOG_OPEN 0021h RLOG_CLOSE 0022h RLOG_READ 0023h GRAPH_GET_FILE_TYPE 0024h GRAPH_EXPORT_FILE 0025h GRAPH_GET_LAYOUT_INFO 0026h GRAPH_CREATE_FILE 0027h GRAPH_CLOSE_FILE 0028h GRAPH_CREATE_PAGE 0029h GRAPH_WRITE 002Ah GRAPH_END_PAGE 002Bh GRAPH_OPEN_FILE 002Ch GRAPH_GOTO_PAGE 002Dh GRAPH_READ 002Eh IOCTL_GET 002Fh IOCTL_SET 0030h IOCTL_ANSWER_FAX 0031h IOCTL_DIAL Values for result code: 0000h successful 0001h not prepared or servicing another client (busy) 0002h call failed due to sharing (LOCKED) 0003h logged-in client limit reached (FULL) 0004h transport denied (TRANSPORT_DENIED) 0005h not implemented (NOT_IMPLEMENTED) 0006h aborted while in progress (ABORTED) 0007h permissions denied (PERMISSION_DENIED) 0008h requested data is no longer valid (NO_LONGER_VALID) 0080h unspecified system error occurred 0081h an internal file was not found 0082h an internal file could not be created 0083h an internal file could not be opened 0084h an internal file could not be closed 0085h error occurred writing to an internal file 0086h error occurred reading from an internal file 0087h bad or corrupted file encountered 0088h an access violation occurred 0089h an internal file is empty 008Ah insufficient memory to process request 008Bh FaxBIOS was unable to issue a handle 008Ch an error internal to FaxBIOS occurred 008Dh no room on disk 0100h unspecified error accessing client file 0101h file not found 0102h creation fault 0103h open fault 0104h close fault 0105h write fault 0106h read fault 0107h file corrupted 0108h access violation 0109h empty file 0200h unspecified argument error 0201h bad function 0202h bad option 0203h bad structure size 0204h bad buffer size 0205h bad client ID 0300h unspecified error with token 0301h cover sheet token was invalid 0302h logo token was invalid 0303h signature token was invalid 0304h font token was invalid 0305h phone directory token was invalid 0306h outbound route token was invalid 0307h priority token was invalid 0308h sort token was invalid 0309h billing token was invalid 0400h unspecified handle error 0401h bad Phone Directory handle 0402h bad scheduling handle 0403h bad read send log handle 0404h bad read receive log handle 0405h bad graphics handle 0500h data passed in structure was invalid 0501h name field given is invalid 0502h phone number given is invalid 0503h poll code submitted is invalid 0504h file type constant was invalid 0505h BFT constant not defined or supported 0506h resolution not defined or supported 0507h page length not defined or supported 0508h page width not defined or supported 0509h date & time requested are ridiculous 050Ah Subject text was not an ASCIIZ string 050Bh From text was not an ASCIIZ string 050Ch requested envelope ID was not found 050Dh requested envelope ID is not valid 050Eh envelope requested was not found 050Fh destination index is out of range 0510h file index is out of range 0511h index into receive log is out of range 0512h file name specified was incomplete or invalid 0513h page selected was out of range 0514h bit width more than byte width 0515h mode for open is not defined 0516h person index is out of range 0517h person ID is out of range 0518h group index out of range or invalid 0519h group ID out of range or invalid 051Ah range of indices to read is invalid 051Bh group name given is invalid 051Ch field_to_use is badly specified 051Dh predicate invalid for field specified 0600h unspecified client procedure error 0601h device of interest is not present 0602h device of interest has been removed 0603h device of interest is not responding 0604h device of interest is disabled 0605h could not dial because device was in use 0606h maximum destination limit exceeded 0607h maximum file limit exceeded 0608h scheduling closed with no destination 0609h scheduling closed with no files or poll 060Ah scheduling closed with no parameters specified 060Bh file type specified does not match file 060Ch file type specified is not supported 060Dh file submitted is not exportable 060Eh file type specified is not imageable 060Fh error converting file 0610h envelope could not be cancelled 0611h Phone Directory is full 0612h record is already in the Phone Directory 0613h selected group in Phone Directory is full 0614h person is already in the group 0615h person is not in the group & cannot be removed 0616h a graphics file to be created already exists 0617h a grphics file to be read is empty 0618h GRAPH_CREATE_PAGE called before GRAPH_END_PAGE 0619h graph read or write attempted without goto or create 061Ah graph page contains no data 061Bh Phone Directory is already open for this client 061Ch schedule log is already open for this client 061Dh receive log is aready open for this client 061Eh Phone Directory function requires write mode 0800h denied exclusive use of the API Format of SYS_LOGIN command buffer: Offset Size Description 00h WORD structure size 02h WORD function number 04h WORD return code 06h WORD client ID 08h WORD API Major Version 0Ah WORD API Minor Version 0Ch DWORD reserved for manufacturer's use 10h 22 BYTEs manufacturer's ID 26h WORD highest possible device number 28h WORD maximum destinations per envelope 2Ah WORD maximum files per envelope 2Ch WORD FaxBIOS capabilities bitmap bit 0: transmit supported bit 1: receive supported bit 2: IOCTL supported bit 3: IOCTL_DIAL supported bit 4: IOCTL_ANSWER_FAX supported bit 5: manual transmit supported bit 6: optional phone services supported bit 7: canonical phone objects bit 8: seam with next supported 2Eh DWORD T.30 capabilities bitmap bit 0: low vertical resolution (minimum) bit 1: high vertical resolution bit 2: page width 107mm (4.21 in) bit 3: page width 151mm (5.91 in) bit 4: page width 215mm (8.46 in) (minimum) bit 5: page width 255mm (10.04 in) bit 6: page width 303mm (11.93 in) bit 7: unused bit 8: page length 297mm (11.69 in) (minimum) bit 9: page length 364mm (14.33 in) bit 10: page length 279mm (11 in) bit 11: page length unlimited bit 12: Group 4 resolution 300x300 bit 13: Group 4 resolution 400x400 bit 14: able to respond to poll from remote bit 15: able to poll remote bit 16: binary file transfer supported 32h WORD IPC handle 34h DWORD amount of memory needed to load 38h WORD scope (00h for public, nonzero for private) 3Ah 6 BYTEs future expansion 40h WORD structure size Format of SYS_LOGOUT command buffer: Offset Size Description 00h WORD structure size 02h WORD function number 04h WORD return code 06h WORD client ID 08h DWORD client tag (for client's internal use) 0Ch 6 BYTEs future expansion 12h WORD structure size Format of SYS_GET_FAXAPP_INFO command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs FaxBIOS data 5Ch 80 BYTEs default cover ACh 80 BYTEs default logo FCh 80 BYTEs default signature 14Ch 80 BYTEs default font 10 19Ch 80 BYTEs default font 165 1ECh 80 BYTEs default user font 23Ch 80 BYTEs default Pdir 28Ch 80 BYTEs default sort 2DCh 10 BYTEs default bill 2E6h 10 BYTEs default route 2F0h 40 BYTEs default cover sheet form 318h 34 BYTEs valid dial characters 33Ah 6 BYTEs local country code 340h 6 BYTEs local city or area code 346h 6 BYTEs future expansion 34Ch WORD structure size Format of STAT_IO_GET command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD device number 0Eh WORD current activity 10h WORD number of rings (if ringing) 12h WORD number of fascimiles transmitted 14h WORD number of fascimiles received 16h WORD status of last transmission 18h WORD envelope number of last transmission 1Ah WORD index of last destination in envelope 1Ch WORD status of last reception 1Eh WORD current page (if session in progress) 20h 80 BYTEs current file 70h104 BYTEs remote number D8h 20 BYTEs last name ECh 20 BYTEs first name 100h 32 BYTEs company name 120h 32 BYTEs notes 140h WORD current envelope ID (if sending) 142h WORD total pages in transmission (if sending) 144h 6 BYTEs future expansion 14h WORD structure size Format of STAT_FAXBIOS_GET command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD status ID 0Eh WORD currenty FaxBIOS function number 10h WORD current Client ID being serviced 12h WORD number of things to do 14h WORD number of them done 16h WORD number of pages to do (if any) 18h WORD number of them done 1Ah WORD number of files to do 1Ch WORD number of them done 1Eh 80 BYTEs current File 6Eh WORD 0 if all devices are idle 70h WORD number of fascimiles transmitted 72h WORD number of fascimiles received 74h WORD status of last transmission in system 76h WORD envelope ID of last transmission 78h WORD index of last destination in envelope 7Ah WORD status of last reception in system 7Ch DWORD time of next transmission 80h 6 BYTEs future expansion 86h WORD structure size Format of PDIR_OPEN command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs Phone Directory token 5Ch 80 BYTEs sort order token ACh WORD open Mode (0 = read, 1 = write) AEh WORD Phone Directory handle B0h WORD number of people B2h WORD number of groups B4h WORD bitmap of fields supported by partial read B6h 6 BYTEs future expansion BCh WORD structure size Format of PDIR_CLOSE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD Phone Directory handle 0Eh 6 BYTEs future expansion 14h WORD structure size Format of PDIR_READ_PERSON command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD Phone Directory handle 0Eh WORD retrieve by index 10h WORD person ID or index 12h WORD how many groups person is in 14h WORD person ID 16h 20 BYTEs last name 2Ah 20 BYTEs first name 3Eh 32 BYTEs company 5Eh 32 BYTEs notes 7Eh 6 BYTEs FAX country code 84h 6 BYTEs FAX city/area code 8Ah 14 BYTEs FAX local number 98h 14 BYTEs FAX extension A6h 24 BYTEs reserved BEh 6 BYTEs voice country code C4h 6 BYTEs voice city/area code CAh 14 BYTEs voice local number D8h 14 BYTEs voice extension E6h 24 BYTEs reserved FEh 10 BYTEs outbound routing information 108h 10 BYTEs billing information, credit card etc 112h DWORD remote FAX capabilities 116h 21 BYTEs T.30 poll code of FAX number 12Bh 15 BYTEs reserved 13Ah 6 BYTEs future expansion 140h WORD structure size Format of SCHED_OPEN, SCHED_CANCEL command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD scheduler handle 0Eh 6 BYTEs future expansion 14h WORD structure size Format of SCHED_ADD_DEST command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD schedule handle 0Eh WORD device number if manual send wanted 10h WORD non-zero if poll desired 12h WORD person ID 14h 20 BYTEs last name 28h 20 BYTEs first name 3Ch 32 BYTEs company 5Ch 32 BYTEs notes 7Ch 6 BYTEs FAX country code 82h 6 BYTEs FAX city/area code 88h 14 BYTEs FAX local number 96h 14 BYTEs FAX extension A4h 24 BYTEs reserved BCh 6 BYTEs voice country code C2h 6 BYTEs voice city/area code C8h 14 BYTEs voice local number D6h 14 BYTEs voice extension E4h 24 BYTEs reserved FCh 10 BYTEs outbound routing information 106h 10 BYTEs billing information, credit card etc 110h DWORD remote FAX capabilities 114h 21 BYTEs T.30 poll code of FAX number 129h 15 BYTEs reserved 138h 6 BYTEs future expansion 13Eh WORD structure size Format of SCHED_ADD_FILE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD schedule handle 0Eh WORD file type 0000h unidentified 0001h native file format 0002h ASCII 0003h FaxBIOS Tiff Class F 10h 80 BYTEs file name 60h 80 BYTEs font token B0h WORD conversion options bitmap B2h WORD resolution 0000h standard 98 lines per inch, 204 dpi 0001h fine 196 lines per inch, 204 dpi 0002h Group4 300 dpi 0003h Group4 400 dpi B4h WORD page length 0000h 279 mm (11 in) 0001h 297 mm (11.69 in) 0002h 364 mm (14.33 in) 0003h unlimited B6h WORD page width 0000h 215 mm (8.46 in) 0001h 255 mm (10.04 in) 0002h 303 mm (11.93 in) 0003h 151 mm (5.91 in) 0004h 107 mm (4.21 in) B8h WORD binary file transfer specification 0000h only as FAX 0001h only as file (for non-faxable files) 0002h as file when possible else FAX BAh WORD seam flag (nonzero for seam with next) BCh WORD delete flag (nonzero to delete when done) BEh 6 BYTEs future expansion C4h WORD structure size Format of SCHED_SET_PARAMS command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD scheduler handle 0Eh DWORD time to send 10h 10 BYTEs priority token 1Ch 80 BYTEs logo file token 6Ch 80 BYTEs signature file token BCh 80 BYTEs cover page token 10Ch 40 BYTEs Subject text 134h 40 BYTEs From text 15Ch WORD user ID 15Eh 6 BYTEs future expansion 164h WORD structure size Format of SCHED_CLOSE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD scheduler handle 0Eh WORD envelope ID generated 10h 6 BYTEs future expansion 16h WORD structure size Format of SLOG_OPEN, SLOG_CLOSE, RLOG_OPEN, RLOG_CLOSE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD log handle 0Eh WORD number of entries 10h 6 BYTEs future expansion 16h WORD structure size Format of GRAPH_GET_FILE_TYPE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs filename 5Ch WORD file type 0000h unidentified 0001h native file format 0002h ASCII 0003h FaxBIOS Tiff Class F 5Eh WORD bitmap of supported capabilities 60h 6 BYTEs future expansion 66h WORD structure size Format of GRAPH_CREATE_FILE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs filename 5Ch WORD graph handle 5Eh 6 BYTEs future expansion 64h WORD structure size Format of GRAPH_CLOSE_FILE, GRAPH_END_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh 6 BYTEs future expansion 14h WORD structure size Format of GRAPH_CREATE_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh WORD resolution 10h WORD page width 12h 6 BYTEs future expansion 18h WORD structure size Format of GRAPH_WRITE_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh DWORD pointer to storage for image 12h WORD band height in lines 14h WORD width of page image in bytes 16h WORD facsimile page width constant 18h WORD width of page image in bits 1Ah WORD number of bytes actually processed 1Ch 6 BYTEs future expansion 22h WORD structure size Format of GRAPH_OPEN_FILE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs filename 5Ch WORD file type 5Eh WORD graph handle 60h WORD number of pages 62h 6 BYTEs future expansion 68h WORD structure size Format of GRAPH_GOTO_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh WORD page number 10h WORD vertical resolution 12h WORD page width 14h DWORD page length 18h 6 BYTEs future expansion 1Eh WORD structure size Format of GRAPH_READ_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh DWORD pointer to storage for image 12h WORD band height in lines 14h WORD width of page image in bytes 16h WORD facsimile page width constant 18h WORD width of page image in bits 1Ah WORD number of bytes actually processed 1Ch 6 BYTEs future expansion 22h WORD structure size Format of IOCTL_ANSWER_FAX command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD device number 0Eh 6 BYTEs future expansion 14h WORD structure size Format of IOCTL_DIAL command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD device number 0Eh 6 BYTEs country code 14h 6 BYTEs city or area code 1Ah 14 BYTEs local number 28h 14 BYTEs extension 36h 14 BYTEs reserved 4Eh 6 BYTEs future expansion 54h WORD structure size ----------2F8100----------------------------- INT 2F U - Nanosoft, Inc. TurboNET redirector - INSTALLATION CHECK AX = 8100h Return: AL = FFh if installed Note: TurboNET is a NetBIOS-based file redirector and server; a demonstration version may be downloaded from Nanosoft's BBS SeeAlso: AX=8000h"TurboNET" ----------2F8101----------------------------- INT 2F U - Nanosoft, Inc. TurboNET redirector - ??? AX = 8101h Return: AL = ??? DL = ??? ----------2F8102----------------------------- INT 2F U - Nanosoft, Inc. TurboNET redirector - ??? AX = 8102h Return: AL = ??? DL = ??? ----------2F8103----------------------------- INT 2F U - Nanosoft, Inc. TurboNET redirector - GET MACHINE NAME??? AX = 8103h ES:DI -> 17-byte buffer Return: buffer filled ----------2F8104----------------------------- INT 2F U - Nanosoft, Inc. TurboNET redirector - ??? AX = 8104h BL = ??? BH = ??? CX = ??? DX = ??? DS:SI -> 16-byte buffer containing ??? Return: AL = 00h ??? ----------2F8105----------------------------- INT 2F U - Nanosoft, Inc. TurboNET redirector - ??? AX = 8105h CX = ??? (don't change current value if 0000h) DX = ??? (don't change current value if 0000h) Return: AL = 00h successful ----------2F82------------------------------- INT 2F U - Nanosoft, Inc. TurboNET - ??? AH = 82h ??? Return: ??? Note: called by TNR.EXE, the TurboNET redirector configuration program SeeAlso: AX=8100h ----------2F8200----------------------------- INT 2F - RESPLAY - SAMPLE/PLAYBACK AX = 8200h DX:DI -> start of sample space CX:BX = length in bytes Return: AX = status 1000h successful 2000h not initialized (see AX=8210h) other RESPLAY not installed Note: RESPLAY is a freeware sound sampling/playback utility by Mark J. Cox SeeAlso: AX=8201h,AX=8210h ----------2F8201----------------------------- INT 2F - RESPLAY - INSTALLATION CHECK AX = 8201h Return: AX = 7746h if installed SeeAlso: AX=8202h ----------2F8202----------------------------- INT 2F - RESPLAY - UNINSTALL AX = 8202h Return: AX = status 1000h successful SeeAlso: AX=8201h ----------2F8210----------------------------- INT 2F - RESPLAY - INITIALIZE AX = 8210h BL = sound device 00h printer port LPT1 01h printer port LPT2 02h prototype board at I/O address 0300h 03h printer port (alternative LPT1) 04h internal speaker BH = sample rate in multiples of 250 Hz (14h to A0h) CL = direction 00h playback 01h sample Return: AX = status 1000h successful 2000h parameter out of range other RESPLAY not installed SeeAlso: AX=8200h ----------2F86------------------------------- INT 2F U - ??? AH = 86h AL = function (at least 06h and 07h) ??? Return: ??? Note: called by Codeview for Windows SeeAlso: AH=44h ----------2F8900----------------------------- INT 2F - WHOA!.COM - INSTALLATION CHECK AX = 8900h Return: AL = 00h not installed = FFh installed Note: WHOA!.COM is a system slow-down utility by Brad D Crandall SeeAlso: AX=8901h,AX=8902h ----------2F8901----------------------------- INT 2F - WHOA!.COM - UNINSTALL AX = 8901h Return: AL = FDh successful = FEh error Note: WHOA!.COM is a system slow-down utility by Brad D Crandall SeeAlso: AX=8900h ----------2F8902----------------------------- INT 2F - WHOA!.COM - SET DELAY COUNT AX = 8902h BX = delay count (larger values slow system down more) Return: AL = FDh successful = FEh error Note: WHOA!.COM is a system slow-down utility by Brad D Crandall SeeAlso: AX=8900h ----------2F9000----------------------------- INT 2F U - RAID - INSTALLATION CHECK AX = 9000h Return: AL = FFh if installed Note: RAID (Resident AID) is a TSR utility program by Ross Neilson Wentworth that resides mostly in EMS ----------2F9001----------------------------- INT 2F U - RAID - GET ??? AX = 9001h Return: DX:AX -> ??? SeeAlso: AX=9000h ----------2F9002----------------------------- INT 2F U - RAID - GET RESIDENT SEGMENT AX = 9002h Return: AX = segment of resident (conventional memory) portion SeeAlso: AX=9000h ----------2F9003----------------------------- INT 2F U - RAID - UNINSTALL AX = 9003h Return: ??? SeeAlso: AX=9000h ----------2F9004----------------------------- INT 2F U - RAID - GET ??? AX = 9004h Return: AX = first available paragraph past end of resident portion??? CX destroyed SeeAlso: AX=9000h ----------2F92------------------------------- INT 2F - Couriers LAN E-Mail - API AH = 92h AL = function 00h installation check 01h uninstall 02h pop down MICRO.EXE notification window 03h ??? 04h ??? 05h ??? Return: ??? SeeAlso: AH=9Ch ----------2F93------------------------------- INT 2F - InnerMission v1.7+ - INSTALLATION CHECK AH = 93h BX = CX = AX Return: AL = FFh if installed and BX=CX=AX on entry BX = segment of resident code = 01h if installed but BX or CX differ from AX Note: InnerMission is a shareware graphical screen blanker by Kevin Stokes ----------2F9C------------------------------- INT 2F - Couriers LAN E-Mail OPERATOR.EXE - API AH = 9Ch AL = subfunction 01h uninstall Return: ??? SeeAlso: AH=92h ----------2FA1--BX0081----------------------- INT 2F - Ergo DOS extenders - INSTALLATION CHECK AH = A1h BX = 0081h AL = which FEh OS/286,OS/386 FFh HummingBoard DOS extender ES:DI -> 16-byte buffer Return: if installed, first four bytes of ES:DI buffer are "IABH" Note: since TKERNEL is a licensed version, it is likely that subfunctions BX=0082h and BX=0084h are present and function identically to the AX=FBA1h/BX=008xh calls SeeAlso: AX=ED00h,AX=FBA1h,INT 15/AX=BF02h ----------2FA189----------------------------- INT 2F U - Biologic HRAMDEV.SYS - API AX = A189h BX = subfunction 0000h set ??? 0001h remove ??? 0002h get status ??? 0003h enable ??? 0004h disable ??? 0005h set ??? flag 0006h clear ??? flag 0007h set ??? flag 0008h clear ??? flag 0009h set ??? ES:DI -> function-specific arguments if func 0000h: 20-byte buffer containing ??? if func 0001h: 20-byte buffer for returned ??? if func 0002h: 16-byte buffer for returned ??? if func 0009h: WORD containing ??? Return: BX = A189h if installed AH = status 00h successful FFh failed or invalid function number Notes: HRAMDEV.SYS is a part of the shareware package HRAM by Biologic which provides improved high memory access under MSDOS 5.0 functions 00h and 01h use a stack of four entries; function 01h always removes the values stored with the most recent function 00h call which has not yet been matched with a function 01h call. ----------2FA900----------------------------- INT 2F - METZTSR.COM - INSTALLATION CHECK AX = A900h CF set Return: CF clear if resident AX = 97FFh CF set if not present Notes: METZTSR.COM prevents METZ applications (such as the MAGIC screen saver) inactivity timeout while running a DOSapp under MS Windows. the default multiplex number is A9h, but may be set to any value from 80h to FFh with a commandline switch SeeAlso: AX=A901h,AX=A902h ----------2FA901----------------------------- INT 2F - METZTSR.COM - GET TIME OF LAST KEYBOARD ACTIVITY AX = A901h CF set Return: CF clear if successful AX:DX = BIOS time at which INT 09 was last invoked CF set if not present SeeAlso: INT 09,INT 1A/AH=00h ----------2FA902----------------------------- INT 2F - METZTSR.COM - SET METZ Ctrl-Alt-Del FLAG AX = A902h BL = new value 00h Ctrl-Alt-Del not allowed else Ctrl-Alt-Del allowed (startup default is 01h) CF set Return: CF clear if successful AX = 97FFh CF set if not resident SeeAlso: AX=A903h ----------2FA903----------------------------- INT 2F - METZTSR.COM - GET METZ Ctrl-Alt-Del FLAG AX = A903h CF set Return: CF clear if successful AX = 97FFh if Ctrl-Alt-Del allowed AX = 0000h if Ctrl-Alt-Del not allowed CF set if not resident SeeAlso: AX=A902h ----------2FAA00----------------------------- INT 2F - VIDCLOCK.COM - INSTALLATION CHECK AX = AA00h Return: AL = 00h not installed FFh installed Note: VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III ----------2FAB00----------------------------- INT 2F - Btrieve Multi-User - INSTALLATION CHECK AX = AB00h Return: AL = 4Dh if installed SeeAlso: AX=AB01h,AX=AB02h,INT 21/AX=3000h"Btrieve",INT 7B"Btrieve" ----------2FAB01----------------------------- INT 2F - Btrieve Multi-User - EXECUTE Btrieve OPERATION AX = AB01h BX = process ID DS:DX -> 38-byte parameter record (see INT 7B"Btrieve") Return: AL = 00h OK = other retry after calling INT 7F/AX=0200h SeeAlso: AX=AB00h,AX=AB02h,INT 7B"Btrieve",INT 7F/AX=0200h ----------2FAB02----------------------------- INT 2F - Btrieve Multi-User - GET NEW PROCESS ID AX = AB02h Return: AL = 00h succesful BX = process ID AL > 00h failed, retry after calling INT 7F/AX=0200h SeeAlso: AX=AB00h,AX=AB01h,INT 7B"Btrieve",INT 7F/AX=0200h ----------2FAC00----------------------------- INT 2F - DOS 4.01+ GRAPHICS.COM - INSTALLATION CHECK AX = AC00h Return: AX = FFFFh ES:DI -> ??? (graphics data?) (not documented) Note: this installation check was moved here to avoid the conflict with the CD-ROM extensions that occurred in DOS 4.00 SeeAlso: AX=1500h"GRAPHICS" ----------2FAD00----------------------------- INT 2F U - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK AX = AD00h Return: AL = FFh if installed BX = ??? (0100h in MS-DOS 3.30, PCDOS 4.01) Note: DOS 5.0 DISPLAY.SYS chains to previous handler if AL is not one of the subfunctions listed here ----------2FAD01----------------------------- INT 2F U - DOS 3.3+ DISPLAY.SYS internal - SET ??? AX = AD01h BX = ??? Return: ??? CF set on error ----------2FAD02----------------------------- INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET ??? AX = AD02h Return: BX = ??? (value set with AX=AD01h) ----------2FAD03----------------------------- INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET ??? AX = AD03h ES:DI -> user buffer CX = size of buffer Return: CF set if buffer too small CF clear if successful ----------2FAD04----------------------------- INT 2F U - DOS 4.x only DISPLAY.SYS internal - ??? AX = AD04h ??? Return: ??? ----------2FAD10----------------------------- INT 2F U - DOS 4+ DISPLAY.SYS internal - INSTALLATION CHECK??? AX = AD10h ??? Return: AX = FFFFh BX = ??? (0100h in PCDOS 4.01) ----------2FAD40----------------------------- INT 2F - DOS 4.0 - ??? AX = AD40h DX = ??? ??? Return: ??? Note: called by PCDOS 4.01 PRINT.COM ----------2FAD80----------------------------- INT 2F - DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK AX = AD80h Return: AL = FFh if installed BX = version number (BH = major, BL = minor) ES:DI -> internal data (see below) Note: MSDOS 3.30, PCDOS 4.01, and MSDOS 5.00 all report version 1.00. Format of KEYB internal data: Offset Size Description 00h DWORD original INT 09 04h DWORD original INT 2F 08h 6 BYTEs ??? 0Eh WORD flags 10h BYTE ??? 11h BYTE ??? 12h 4 BYTEs ??? 16h 2 BYTEs country ID letters 18h WORD current code page ---DOS 3.3--- 1Ah WORD pointer to first item in list of code page tables??? 1Ch WORD pointer to ??? item in list of code page tables 1Eh 2 BYTEs ??? 20h WORD pointer to key translation data 22h WORD pointer to last item in code page table list (see below) 24h 9 BYTEs ??? ---DOS 4.01--- 1Ah 2 BYTEs ??? 1Ch WORD pointer to first item in list of code page tables??? 1Eh WORD pointer to ??? item in list of code page tables 20h 2 BYTEs ??? 22h WORD pointer to key translation data 24h WORD pointer to last item in code page table list (see below) 26h 9 BYTEs ??? Format of code page table list entries: Offset Size Description 00h WORD pointer to next item, FFFFh = last 02h WORD code page 04h 2 BYTEs ??? Format of translation data: Offset Size Description 00h WORD size of data in bytes, including this word 02h N-2 BYTEs ??? ----------2FAD81----------------------------- INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD CODE PAGE AX = AD81h BX = code page (see INT 21/AX=6601h) Return: CF set on error AX = 0001h (code page not available) CF clear if successful Notes: called by DISPLAY.SYS documented for DOS 5+, but undocumented for earlier versions SeeAlso: AX=AD82h ----------2FAD82----------------------------- INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD MAPPING AX = AD82h BL = new state 00h US keyboard (Control-Alt-F1) FFh foreign keyboard (Control-Alt-F2) Return: CF set on error (BL not 00h or FFh) CF clear if successful Note: documented for DOS 5+, but undocumented for earlier versions SeeAlso: AX=AD81h,AX=AD83h ----------2FAD83----------------------------- INT 2F - DOS 5.0 KEYB.COM - GET KEYBOARD MAPPING AX = AD83h Return: BL = current state 00h US keyboard FFh foreign keyboard SeeAlso: AX=AD82h ----------2FAE00DXFFFF----------------------- INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALLATION CHECK AX = AE00h DX = FFFFh CH = FFh CL = length of command line tail (4DOS v4.0) DS:BX -> command line buffer (see below) DS:SI -> command name buffer (see below) DI = 0000h (4DOS v4.0) Return: AL = FFh if this command is a TSR extension to COMMAND.COM AL = 00h if the command should be executed as usual Notes: This call provides a mechanism for TSRs to install permanent extensions to the command repertoire of COMMAND.COM. It appears that COMMAND.COM makes this call before executing the current command line, and does not execute it itself if the return is FFh. APPEND hooks this call, to allow subsequent APPEND commands to execute without re-running APPEND Format of command line buffer: Offset Size Description 00h BYTE max length of command line, as in INT 21/AH=0Ah 01h BYTE count of bytes to follow, excluding terminating 0Dh N BYTEs command line text, terminated by 0Dh Format of command name buffer: Offset Size Description 00h BYTE length of command name 01h N BYTEs uppercased command name (blank-padded to 11 chars by 4DOS v4) ----------2FAE01DXFFFF----------------------- INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE AX = AE01h DX = FFFFh CH = 00h CL = length of command name (4DOS v4.0) DS:SI -> command name buffer (see AX=AE00h) DS:BX -> command line buffer (see AX=AE00h) Return: DS:SI buffer updated if length byte is nonzero, the following bytes contain the uppercase internal command to execute and the command line buffer contains the command's parameters (the first DS:[SI] bytes are ignored) Notes: this call requests execution of the command which a previous call to AX=AE00h indicated was resident APPEND hooks this call ----------2FB000----------------------------- INT 2F - DOS 3.3+ GRAFTABL.COM - INSTALLATION CHECK AX = B000h Return: AL = 00h not installed, OK to install = 01h not installed, not OK to install = FFh installed Notes: called by DISPLAY.SYS documented for DOS 5.0, but undocumented in prior versions SeeAlso: AX=B001h ----------2FB001----------------------------- INT 2F - DOS 3.3+ GRAFTABL.COM - GET GRAPHICS FONT TABLE AX = B001h DS:BX -> DWORD buffer for address of 8x8 font table Return: buffer filled AL = FFh Note: PCDOS 3.30/4.01 set the font table offset to 0130h, MSDOS 3.30 to 0030h SeeAlso: AX=B000h ----------2FB400----------------------------- INT 2F - IBM PC3270 EMULATION PROG v3 - INSTALLATION CHECK AX = B400h Return: AL = FFh if installed ----------2FB401----------------------------- INT 2F - IBM PC3270 EMULATION PROG v3 - GET HOST BUFFER ADDRESS AX = B401h Return: ES -> host screen buffer (PC ASCII format) ES unchanged if communications not started ----------2FB402----------------------------- INT 2F - IBM PC3270 EMULATION PROG v3 - ??? AX = B402h BX = ??? Return: ??? ----------2FB403----------------------------- INT 2F - IBM PC3270 EMULATION PROG v3 - ??? AX = B403h ??? Return: ??? ----------2FB404----------------------------- INT 2F - IBM PC3270 EMULATION PROG v3 - ??? AX = B404h ??? Return: ??? ----------2FB405----------------------------- INT 2F - IBM PC3270 EMULATION PROG v3 - ??? AX = B405h ??? Return: ??? ----------2FB700----------------------------- INT 2F - APPEND - INSTALLATION CHECK AX = B700h Return: AL = status 00h not installed FFh installed Note: MSDOS 3.30 APPEND refuses to install itself when run inside TopView or a TopView-compatible environment ----------2FB701----------------------------- INT 2F U - APPEND - ??? AX = B701h ??? Return: ??? Note: MSDOS 3.30 APPEND displays "Incorrect APPEND Version" and aborts caller ----------2FB702----------------------------- INT 2F - APPEND - VERSION CHECK AX = B702h Return: AX = FFFFh if not DOS 4.0 APPEND (also if DOS 5.0 APPEND) AL = major version number AH = minor version number, otherwise SeeAlso: AX=B710h ----------2FB703----------------------------- INT 2F U - DOS 3.3, DOS 5.0 APPEND - HOOK INT 21 AX = B703h ES:DI -> INT 21 handler APPEND should chain to Return: ES:DI -> APPEND's INT 21 handler Note: each invocation of this function toggles a flag which APPEND uses to determine whether to chain to the user handler or the original INT 21 ----------2FB704----------------------------- INT 2F - DOS 3.3+ APPEND - GET APPEND PATH AX = B704h Return: ES:DI -> active APPEND path (128 bytes max) ----------2FB706----------------------------- INT 2F - DOS 4+ APPEND - GET APPEND FUNCTION STATE AX = B706h Return: BX = APPEND state bit 0: set if APPEND enabled bits 1-11 reserved bit 12: (DOS 5.0) set if APPEND applies directory search even if a drive has been specified bit 13: set if /PATH flag active bit 14: set if /E flag active (environment var APPEND exists) bit 15: set if /X flag active ----------2FB707----------------------------- INT 2F - DOS 4+ APPEND - SET APPEND FUNCTION STATE AX = B707h BX = APPEND state bits (see AX=B706h) ----------2FB710----------------------------- INT 2F U - DOS 3.3+ APPEND - GET VERSION INFO AX = B710h Return: AX = current APPEND state (see AX=B706h) BX = ??? (0000h in MSDOS 3.30 and 5.00) CX = ??? (0000h in MSDOS 3.30 and 5.00) DL = major version DH = minor version SeeAlso: AX=B702h ----------2FB711----------------------------- INT 2F - DOS 4+ APPEND - SET RETURN FOUND NAME STATE AX = B711h Note: if the next INT 21h call (and ONLY the next) is function 3Dh, 43h, or 6Ch (also 4B03h and 4Eh if /X active), the fully qualified filename is written over top of the filename passed to the INT 21h call. The application must provide a sufficiently large buffer. This state is reset after the next INT 21h call processed by APPEND. BUG: DOS 4.0 APPEND reportedly overwrites DS:DX instead of DS:SI for INT 21/AH=6Ch SeeAlso: INT 21/AH=4Eh ----------2FB800----------------------------- INT 2F - network - INSTALLATION CHECK AX = B800h Return: AL = status 00h not installed nonzero installed BX = installed component flags (test in this order!) bit 6 server bit 2 messenger bit 7 receiver bit 3 redirector ----------2FB803----------------------------- INT 2F - network - GET NETWORK EVENT POST HANDLER AX = B803h Return: ES:BX -> event post handler (see AX=B804h) SeeAlso: AX=B804h,AX=B903h ----------2FB804----------------------------- INT 2F - network - SET NETWORK EVENT POST HANDLER AX = B804h ES:BX -> new event post handler Notes: used in conjunction with AX=B803h to hook into the network event post routine The specified handler is called on any network event. Two events are defined: message received and critical network error. SeeAlso: AX=B803h,AX=B904h Values post routine is called with: AX = 0000h single block message DS:SI -> ASCIZ originator name DS:DI -> ASCIZ destination name ES:BX -> text header (see below) AX = 0001h start multiple message block CX = block group ID DS:SI -> ASCIZ originator name DS:DI -> ASCIZ destination name AX = 0002h multiple block text CX = block group ID ES:BX -> text header (see below) AX = 0003h end multiple block message CX = block group ID AX = 0004h message aborted due to error CX = block group ID AX = 0101h server received badly formatted network request Return: AX = FFFFh (PC LAN will process error) AX = 0102h unexpected network error ES:BX -> NCB (see INT 5C) AX = 0103h server received INT 24 error other registers as for INT 24, except AH is in BH Return: as below, but only 0000h and FFFFh allowed Return: AX = response code 0000h user post routine processed message 0001h PC LAN will process message, but message window not displayed FFFFh PC LAN will process message Format of text header: Offset Size Description 00h WORD length of text (maximum 512 bytes) 02h N BYTEs text of message Note: all CRLF sequences in message text are replaced by 14h ----------2FB807----------------------------- INT 2F - Network - GET NetBIOS NAME NUMBER OF MACHINE NAME AX = B807h Return: CH = NetBIOS name number of the machine name SeeAlso: INT 21/AX=5E00h ----------2FB808----------------------------- INT 2F U - Network - RELINK KEYBOARD HANDLER AX = B908h ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09 Notes: this call replaces the address to which RECEIVER.COM chains on an INT 09 without preserving the original value. This allows a prior handler to unlink, but does not allow a new handler to be added such that RECEIVER gets the INT 09 first unless it completely takes over INT 09 and never chains. called by DOS 3.2 KEYBxx.COM SeeAlso: AX=B908h ----------2FB809----------------------------- INT 2F - LANtastic Network, NetWare Lite - VERSION CHECK AX = B809h Return: AH = major version AL = minor version (decimal) ----------2FB900----------------------------- INT 2F - PC Network RECEIVER.COM - INSTALLATION CHECK AX = B900h Return: AL = 00h if not installed FFh if installed ----------2FB901----------------------------- INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM INT 2F HANDLER ADDRESS AX = B901h Return: AL = ??? ES:BX -> RECEIVER.COM INT 2F handler Note: allows more efficient execution by letting the caller bypass any other INT 2F handlers which have been added since RECEIVER.COM was installed ----------2FB903----------------------------- INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM POST ADDRESS AX = B903h Return: ES:BX -> POST handler SeeAlso: AX=B803h,AX=B904h ----------2FB904----------------------------- INT 2F - PC Network RECEIVER.COM - SET RECEIVER.COM POST ADDRESS AX = B904h ES:BX -> new POST handler SeeAlso: AX=B804h,AX=B903h ----------2FB905----------------------------- INT 2F - PC Network RECEIVER.COM - GET FILENAME AX = B905h DS:BX -> 128-byte buffer for filename 1 DS:DX -> 128-byte buffer for filename 2 Return: buffers filled from RECEIVER.COM internal buffers Note: use of filenames is unknown, but one appears to be for storing messages SeeAlso: AX=B906h ----------2FB906----------------------------- INT 2F - PC Network RECEIVER.COM - SET FILENAME AX = B906h DS:BX -> 128-byte buffer for filename 1 DS:DX -> 128-byte buffer for filename 2 Return: RECEIVER.COM internal buffers filled from user buffers Note: use of filenames is unknown, but one appears to be for storing messages SeeAlso: AX=B905h ----------2FB908----------------------------- INT 2F - PC Network RECEIVER.COM - UNLINK KEYBOARD HANDLER AX = B908h ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09 Note: this call replaces the address to which RECEIVER.COM chains on an INT 09 without preserving the original value. This allows a prior handler to unlink, but does not allow a new handler to be added such that RECEIVER gets the INT 09 first. SeeAlso: AX=B808h ----------2FBC00----------------------------- INT 2F - Windows 3.0, DOS 5.0 EGA.SYS - INSTALLATION CHECK AX = BC00h Return: AL = 00h not installed, OK to install = 01h not installed, not OK to install = FFh installed BX = 5456h ("TV") Note: AH=BCh is the default value, which may be changed by a command line parameter to any value between 80h and FFh SeeAlso: AX=BC06h,INT 10/AH=FAh"EGA" ----------2FBC06----------------------------- INT 2F U - MS Windows 3.0, DOS 5.0 EGA.SYS - GET VERSION INFO AX = BC06h Return: BX = 5456h ("TV") CH = major version CL = minor version DL = revision SeeAlso: AX=BC00h,INT 10/AH=FAh"EGA" ----------2FBE00----------------------------- INT 2F - REDVIEW - INSTALLATION CHECK AX = BE00h Return: AL = FFh if installed Note: REDVIEW is a public-domain TSR by Alexandr Novy and Petr Horak which copies data sent to standard output to standard error when the former has been redirected to a file, thus allowing the data to be seen on the screen at the same time it is captured in a file ----------2FBF00----------------------------- INT 2F - PC LAN PROGRAM REDIRIFS.EXE internal - INSTALLATION CHECK AX = BF00h Return: AL = FFh if installed ----------2FBF01----------------------------- INT 2F U - PC LAN PROGRAM REDIRIFS.EXE internal - ??? AX = BF01h ??? Return: ??? ----------2FBF80----------------------------- INT 2F - PC LAN PROG REDIR.SYS internal - SET REDIRIFS ENTRY POINT AX = BF80h ES:DI -> FAR entry point to IFS handler in REDIRIFS Return: AL = FFh if installed ES:DI -> internal workspace Note: all future IFS calls to REDIR.SYS are passed to the ES:DI entry point ----------2FC000----------------------------- INT 2F - Novell ODI Link Support Layer (LSL.COM) - INSTALLATION CHECK AX = C000h Return: AL = FFh ES:BX -> call entry point ES:SI -> signature string "LINKSUP$" Note: LSL.COM may use any multiplex number between C0h and FFh; it searches for itself in that range, and installs using the first free multiplex number in the range if not already loaded. ----------2FC050----------------------------- INT 2F U - Explosiv 2.00 - INSTALLATION CHECK AX = C050h Return: AL = 51h if installed Notes: Explosiv is a shareware animated screen blanker for DOS and Windows 3 by Reidar Gresseth and Chris Hook AH=C0h is the default multiplex number, but may be reconfigured to any value from C0h to C9h SeeAlso: AX=C051h ----------2FC052----------------------------- INT 2F U - Explosiv 2.00 - UNINSTALL AX = C052h DX:BX = address to return to on successful uninstall Return: at specified address if successful AL = 53h on error Note: specified return address must have the segment of the caller's PSP SeeAlso: AX=C050h ----------2FC054----------------------------- INT 2F U - Explosiv 2.00 - GET ??? AX = C054h Return: AL = ??? Note: returns value set by AX=C057h SeeAlso: AX=C057h ----------2FC055----------------------------- INT 2F U - Explosiv 2.00 - SET BLANKING INTERVAL AX = C055h BX = new interval in clock ticks ----------2FC056----------------------------- INT 2F U - Explosiv 2.00 - SET ??? AX = C056h BL = ??? ----------2FC057----------------------------- INT 2F U - Explosiv 2.00 - SET ??? AX = C057h BL = ??? SeeAlso: AX=C054h ----------2FC058----------------------------- INT 2F U - Explosiv 2.00 - SET ??? AX = C058h BL = ??? ----------2FC059----------------------------- INT 2F U - Explosiv 2.00 - CLEAR ??? AX = C059h Note: clears flag set by AX=C05Ah SeeAlso: AX=C05Ah ----------2FC05A----------------------------- INT 2F U - Explosiv 2.00 - SET ??? AX = C05Ah BL = ??? Note: sets flag cleared by AX=C059h then stores BL SeeAlso: AX=C059h ----------2FC05B----------------------------- INT 2F U - Explosiv 2.00 - SET ??? AX = C05Bh BL = ??? ----------2FC05C----------------------------- INT 2F U - Explosiv 2.00 - SET ??? AX = C05Ch BL = ??? ----------2FC900BP0000----------------------- INT 2F U - ThunderByte??? - INSTALLATION CHECK AX = C900h BP = 0000h Return: AL = FFh if installed BP >= 0014h Note: called by TBSCANX SeeAlso: AX=C987h,AX=CA00h ----------2FC987----------------------------- INT 2F U - ThunderByte??? - DISINFECT FILE??? AX = C987h BX:DX -> filename BX:CX -> virus name Return: AX = status 0000h successful??? Note: called by TBSCANX SeeAlso: AX=CA00h ----------2FC9FF----------------------------- INT 2F - STACKMAN - INSTALLATION BROADCAST AX = C9FFh BL = BCD version number CX = number of stacks DX = stack size in bytes Notes: called by STACKMAN when it goes resident to inform interested TSRs that its API is available the installation check consists of testing for the string "STACKXXX" at offset 0Ah from the INT B4 handler SeeAlso: INT B4"STACKMAN",INT B5"STACKMAN" ----------2FCA00BX5442----------------------- INT 2F - TBSCANX - INSTALLATION CHECK AX = CA00h BX = 5442h ('TB') Return: AL = 00h not installed = FFh installed BX = 7462h ('tb') if BX was 5442h on entry Note: TBSCANX is a resident virus scanning module by Frans Veldman. Programs may perform virus checks on themselves, other program files, or their data files by invoking the TBSCANX API. SeeAlso: AX=4653h,AX=C900h ----------2FCA01----------------------------- INT 2F - TBSCANX - GET STATUS AX = CA01h Return: AH = BCD version number (v2.2+) = CAh for versions before 2.2 AL = state (00h = disabled, 01h = enabled) CX = number of signatures which will be searched ---v2.0--- BX = EMS handle, 0000h if not using EMS ---v2.3+--- BX = segment of swap area, 0000h if not swapped DX = EMS or XMS handle (XMS handle if BX=0000h), FFFFh if not using EMS SeeAlso: AX=CA02h ----------2FCA02----------------------------- INT 2F - TBSCANX - SET STATE AX = CA02h BL = new state (00h = disabled, 01h = enabled) SeeAlso: AX=CA01h ----------2FCA03----------------------------- INT 2F - TBSCANX - SCAN BUFFER AX = CA03h CX = size of buffer DS:DX -> buffer containing data to scan Return: CF clear if no virus signatures found BX,ES destroyed CF set if signature found ES:BX -> ASCIZ virus name (v2.3+) DS:DX -> ASCIZ virus name (v2.0) AX,CX,DX destroyed (v2.3+) all other registers except CS:IP and SS:SP destroyed (v2.0) SeeAlso: AX=CA04h ----------2FCA04----------------------------- INT 2F - TBSCANX - SCAN FILE AX = CA04h DS:DX -> filename Return: CF clear if no virus signatures found BX,ES destroyed CF set if signature found ES:BX -> ASCIZ virus name AX,CX,DX destroyed Note: this function requires at least 4K free memory SeeAlso: AX=CA03h ----------2FCAFEBX0000----------------------- INT 2F U - THELP v3.0 - INSTALLATION CHECK AX = CAFEh BX = 0000h Return: BX = segment of resident code if installed = 0000h if not installed SeeAlso: AX=5453h ----------2FCB00----------------------------- INT 2F - Communicating Applications Specification - INSTALLATION CHECK AX = CB00h Return: AL = 00h not installed, OK to install 01h not installed, not OK to install FFh installed Note: AH = CBh is the default identifier, but may be reconfigured SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=CB0Eh,AX=CBDCh ----------2FCB01----------------------------- INT 2F - Communicating Applications Specification - SUBMIT A TASK AX = CB01h DS:DX -> ASCIZ name of task control file Return: AX >= 0: event handle < 0: error code Note: files needed for an event must be kept until task is complete or error SeeAlso: AX=CB0Bh,AX=CB15h Error codes (AH = class, AL = subcode, value passed back is 2's complement): Class 00h --- FAX warnings Subcode 00h no error 02h bad scanline count 03h page sent with errors, could not retransmit 04h received data lost 05h invalid or missing logo file 06h filename does not match nonstandard format (NSF) header 07h file size does not match NSF header Class 01h --- DOS warnings (data was sent) Subcode 01h invalid function 05h access denied 06h invalid handle others see INT 21/AH=59h Class 02h --- fatal errors (data not sent) Subcode 00h multiplex handler failed 01h unknown command 02h bad event handle 03h FIND NEXT attempted before FIND FIRST 04h no more events 07h invalid queue type 08h bad control file 09h communication board busy 0Ah invalid command parameter 0Bh can't uninstall resident code 0Ch file exists 80h unknown task type 81h bad phone number 82h bad .PCX file header 83h unexpected EOF 84h unexpected disconnect 85h too many dialing retries 86h no file specified for send 87h communication board timeout 88h received too many pages (>1023) of data 89h manual connect initiated too long ago 8Ah hardware command set error 8Bh bad NonStandard Format (NSF) header file Class 03h --- fatal DOS errors Subcode 02h file not found 03h path not found others see INT 21/AH=59h Class 04h --- FAX errors Subcode 01h remote unit not Group 3 compatible 02h remote unit did not send capabilities 03h other FAX machine incompatible 04h other FAX incapable of file transfers 05h exceeded retrain or FAX resend limit 06h line noise or failure to agree on bit rate 07h remote disconnected after receiving data 08h no response from remote after sending data 09h remote's capabilities incompatible 0Ah no dial tone (v1.2+) 0Bh invalid response from remote unit after sending data 0Dh phone line dead or remote unit disconnected 0Eh timeout while waiting for secondary dial tone (v1.2+) 11h invalid command from remote after receiving data 15h tried to receive from incompatible hardware 5Ch received data overflowed input buffer 5Dh remote unexpectedly stopped sending data 5Eh other FAX machine jammed (no data sent) 5Fh remote took too long to send fax scan line 63h can't get through to remote unit 64h user canceled event Class 05h --- application-specific (v1.2+) ---Intel FAXPOP.EXE Subcode 00h tried to send while in graphics mode 01h insufficient disk space 02h internal buffer overflow Class 06h --- CAS implementation-specific (v1.2+) ----------2FCB02----------------------------- INT 2F - Communicating Applications Specification - ABORT CURRENT EVENT AX = CB02h Return: AX >= 0: event handle of aborted event < 0: error code (see AX=CB01h) Note: termination could take up to 30 seconds SeeAlso: AX=CB08h,AX=CB10h ----------2FCB05----------------------------- INT 2F - Communicating Applications Specification - FIND FIRST QUEUE ENTRY AX = CB05h CX = status of events to find 0000h successful completion 0001h waiting to be processed 0002h number has been dialed 0003h connection established, sending 0004h connection established, receiving 0005h event aborted FFFFh find any event, regardless of status other negative values, match error code DH = direction 00h chronological order, earliest to latest 01h reverse chronological order, latest to earliest DL = queue to search 00h task queue 01h receive queue 02h log queue Return: AX = 0000h successful BX = event handle for found event < 0 error code (see AX=CB01h) SeeAlso: AX=CB06h,AX=CB07h ----------2FCB06----------------------------- INT 2F - Communicating Applications Specification - FIND NEXT QUEUE ENTRY AX = CB06h DL = queue to search 00h task queue 01h receive queue 02h log queue Return: AX = 0000h successful BX = event handle for found event < 0 error code (see AX=CB01h) Note: direction of search is same as preceding FIND FIRST call SeeAlso: AX=CB05h ----------2FCB07----------------------------- INT 2F - Communicating Applications Specification - OPEN FILE AX = CB07h BX = event handle from find (AL=05h,06h) or submit task (AL=01h) CX = receive file number (ignored for task queue and log queue) 0000h open receive control file N open Nth received data file DL = queue 00h task queue 01h receive queue control file or received file, as given by CX 02h log queue 03h group file in task queue (v1.2+) 04h group file in log queue (v1.2+) Return: AX = 0000h successful BX = DOS file handle for requested file < 0 error code (see AX=CB01h) Note: the returned file handle has been opened in read-only mode and should be closed with INT 21/AH=3Eh after use SeeAlso: AX=CB01h,AX=CB05h,AX=CB14h ----------2FCB08----------------------------- INT 2F - Communicating Applications Specification - DELETE FILE AX = CB08h BX = event handle CX = receive file number 0000h delete ALL received files and receive control file N delete Nth received file DL = queue 00h delete control file in task queue and corresponding group file if it exists 01h delete file in receive queue, as given by CX 02h delete control file in log queue (individual deletions not recommended, to maintain integrity of log) and corresponding group file if it exists Return: AX = 0000h successful < 0 error code (see AX=CB01h)\ SeeAlso: AX=CB02h,AX=CB09h ----------2FCB09----------------------------- INT 2F - Communicating Applications Specification - DELETE ALL FILES IN Q AX = CB09h DL = queue 00h delete all control files in task queue, including all group files 01h delete all files in receive queue 02h delete all control files in log queue, including all group files Return: AX = 0000h successful < 0 error code (see AX=CB01h) SeeAlso: AX=CB08h ----------2FCB0A----------------------------- INT 2F - Communicating Applications Specification - GET EVENT DATE AX = CB0Ah BX = event handle DL = queue 00h task queue 01h receive queue 02h log queue Return: AX = 0000h successful CX = year DH = month DL = day < 0 error code (see AX=CB01h) SeeAlso: AX=CB0Bh,AX=CB0Ch ----------2FCB0B----------------------------- INT 2F - Communicating Applications Specification - SET TASK DATE AX = CB0Bh BX = event handle (task event only) CX = year DH = month DL = day Return: AX = 0000h successful < 0 error code (see AX=CB01h) Note: setting a task's date and time to before the current date and time causes it to execute immediately SeeAlso: AX=CB01h,AX=CB0Ah,AX=CB0Dh ----------2FCB0C----------------------------- INT 2F - Communicating Applications Specification - GET EVENT TIME AX = CB0Ch BX = event handle DL = queue 00h task queue 01h receive queue 02h log queue Return: AX = 0000h successful CH = hour CL = minute DH = second DL = 00h < 0 error code (see AX=CB01h) SeeAlso: AX=CB0Ah,AX=CB0Dh ----------2FCB0D----------------------------- INT 2F - Communicating Applications Specification - SET TASK TIME AX = CB0Dh BX = event handle (task events only) CH = hour CL = minute DH = second DL unused Return: AX = 0000h successful < 0 error code (see AX=CB01h) Note: setting a task's date and time to before the current date and time causes it to execute immediately SeeAlso: AX=CB0Bh,AX=CB0Ch,AX=CB10h ----------2FCB0E----------------------------- INT 2F - Communicating Applications Specification - GET EXTERNAL DATA BLOCK AX = CB0Eh DS:DX -> 256-byte buffer Return: AX = 0000h successful buffer filled < 0 error code (see AX=CB01h) Format of external data block: Offset Size Description 00h BYTE CAS major version 01h BYTE CAS minor version 02h 68 BYTEs ASCIZ path to directory containing CAS software, ends in slash 46h 13 BYTEs ASCIZ name of current phonebook (in CAS directory) 53h 13 BYTEs ASCIZ name of current logo file (in CAS directory) 60h 32 BYTEs ASCIZ default sender name 80h 21 BYTEs ASCIZ CCITT identification of fax device 95h 107 BYTEs reserved ----------2FCB0F----------------------------- INT 2F - Communicating Applications Specification - GET/SET AUTORECEIVE AX = CB0Fh DL = subfunction 00h get current autoreceive state 01h set autoreceive state DH = number of rings before answer, 00h = never Return: AX = 0000h autoreceive disabled = N number of rings before answer < 0 error code (see AX=CB01h) ----------2FCB10----------------------------- INT 2F - Communicating Applications Specification - GET CURRENT EVENT STATUS AX = CB10h DS:DX -> 512-byte buffer Return: AX = 0000h successful BX = event handle of current event or negative error code if no current event buffer filled < 0 error code (see AX=CB01h) SeeAlso: AX=CB02h,AX=CB0Dh Format of status area: Offset Size Description 00h BYTE event type 00h send 01h receive 02h polled send 03h polled receive 04h to 7Fh reserved FFh serious hardware error 01h BYTE transfer type 00h 200x200 dpi, FAX mode 01h 100x200 dpi, FAX mode 02h file transfer mode 03h to 7Fh reserved 02h WORD event status 0000h completed successfully 0001h waiting 0002h number dialed 0003h connected, sending 0004h connected, receiving 0005h aborted 0006h to 007Fh reserved 0080h to 7FFFh application-specific events 8000h to FFFFh error codes 04h WORD event time (packed DOS time format, see INT 21/AX=5700h) 06h WORD event date (packed DOS date format, see INT 21/AX=5700h) 08h WORD number of files to transfer, max 7FFFh 0Ah WORD offset of file transfer record 0Ch 47 BYTEs ASCIZ phone number to call 3Bh 64 BYTEs ASCIZ application-specific tag string 7Bh BYTE reserved (00h) 7Ch BYTE connect time, seconds 7Dh BYTE connect time, minutes 7Eh BYTE connect time, hours 7Fh DWORD total number of pages in all files 83h DWORD pages already transmitted 87h WORD number of files already transmitted 89h BYTE cover page flag 00h don't transmit cover page 01h transmit cover page 02h to 7Fh reserved 8Ah WORD total number of transmission errors 8Ch 78 BYTEs reserved (zeros) DAh 21 BYTEs ASCIZ remote FAX's CCITT identification EFH 32 BYTEs ASCIZ destination name 10Fh 32 BYTEs ASCIZ sender name 12Fh 80 BYTEs filename of PCX logo file (max 1780x800 pixels) 17Fh 128 BYTEs file transfer record for current event (see below) Format of file transfer record: Offset Size Description 00h BYTE file type (ignored unless FAX) 00h ASCII 01h PCX 02h DCX 03h to 7Fh reserved 01h BYTE text size for ASCII FAX file 00h = 80 columns by 66 lines (11 inches) 01h = 132 columns by 88 lines (11 inches) 02h to 7Fh reserved 02h BYTE status of file 00h untouched 01h opened 02h moved 03h deleted 04h not yet received 05h to 7Fh reserved 03h DWORD bytes already transmitted 07h DWORD file size in bytes 0Bh WORD pages alread transmitted 0Dh WORD number of pages in file 0Fh 80 BYTEs ASCIZ filename 5Fh BYTE 1/8 inch page length if page length below set to 01h through 7Fh, this value specifies additional 1/8 inch increments to page length 60h BYTE page length 00h = 11 inches 01h to 7Fh = page length is this number of inches plus value of 1/8 inch field above 80h to FEh reserved FFh = ASCII pages ending with formfeed 61h 31 BYTEs reserved (zeros) ----------2FCB11----------------------------- INT 2F - Communicating Applications Specification - GET QUEUE STATUS AX = CB11h DL = queue to get status of 00h task queue 01h receive queue 02h log queue 03h send events (v1.2+) 04h receive events (v1.2+) Return: AX >= 0 total number of changes made to queue, modulo 32768 BX = number of control files currently in queue CX = number of received files (zero for task and log queues) AX < 0 error code (see AX=CB01h) SeeAlso: AX=CB12h ----------2FCB11DL03------------------------- INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF SEND EVENTS AX = CB11h DL = 03h Return: AX = number of successful sends since resident manager started BX = number of unsuccessful sends, including warnings SeeAlso: AX=CB11h/DL=04h ----------2FCB11DL04------------------------- INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF RECEIVE EVENTS AX = CB11h DL = 04h Return: AX = number of received file events since resident manager started BX = number of received FAX events SeeAlso: AX=CB11h/DL=03h ----------2FCB12----------------------------- INT 2F - Communicating Applications Specification - GET HARDWARE STATUS AX = CB12h DS:DX -> 128-byte status buffer Return: AX = 0000h successful buffer filled with hardware-dependent status information < 0 error code (see AX=CB01h) SeeAlso: AX=CB10h,AX=CB11h Format of status buffer for Intel Connection CoProcessor: Offset Size Description 00h BYTE bit flags bit 7: hardware busy sending or receiving bit 6: last page of data bit 5: no data on current page bit 4: retransmit request for current page being transmitted bit 3: NSF mode active bits 2-0: reserved 01h BYTE number of kilobytes of free buffer space 02h BYTE page buffer status bit 7: Connection CoProcessor has documents to send bits 6-0: number of pages in buffer 03h BYTE number of retries left for dialing number 04h BYTE page number to retransmit 05h BYTE communications status bit 7: originating call bit 6: FAX message to be sent bit 5: on line bit 4: ring detected and receive enabled bit 3: buffer dumped on receive bits 2-0: hardware sequence state 000 idle 001 dial 010 answer 011 transmit 100 receive 101 pre-message 110 post-message 111 disconnect 06h BYTE baud rate bit 7: reserved bits 6-4: baud rate 000 = 300 baud (V.21 SDLC or HDLC mode) 100 = 2400 baud (V.27 ter) 101 = 4800 baud (V.27 ter) 110 = 7200 baud (V.29) 111 = 9600 baud (V.29) bits 3-0: reserved, should be 0110 07h 3 BYTEs reserved 0Ah BYTE hardware status bit 7: modem option installed bit 6: Connection CoProcessor has control of DAA (not latched) bit 5: on line (not latched) bit 4: ring detected (not latched) bit 3: data in command buffer (not latched) bit 2: set if using DMA channel 1, clear if using DMA channel 3 bit 1: line length compensation bit 1 set (not latched) bit 0: line length compensation bit 0 set (not latched) 0Bh BYTE switch states bit 7: reserved bit 6: unused bit 5: spare switch open bit 4: FAX ADR1 switch open bit 3: FAX ADR0 switch open bit 2: alternate interrupt switch open bit 1: COM SEL 1 switch open bit 0: COM SEL 0 switch open Note: valid combinations of bits 0-2 are 000 COM2 IRQ3 IObase 2F8h 001 COM1 IRQ4 IObase 3F8h 010 COM4 IRQ3 IObase 2E8h 011 COM3 IRQ4 IObase 3E8h 110 COM4 IRQ2 IObase 2E8h 111 COM3 IRQ5 IObase 3E8h 0Ch BYTE bit flags bit 7: reserved bit 6: auxiliary relay forced ON bit 5: modem select relay forced ON bit 4: offhook relay forced ON bit 3: 9600 bps enabled bit 2: 7200 bps enabled bit 1: 4800 bps enabled bit 0: 2400 bps enabled 0Dh BYTE reserved 0Eh WORD error count (only valid while busy, reset when idle) 10h DWORD size of nonstandard format (NSF) file in bytes 14h BYTE 'A' if Connection CoProcessor board present 15h 9 BYTEs reserved 1Eh 21 BYTEs ASCIZ CCITT identification 33h 77 BYTEs reserved Format of status buffer for Intel SatisFAXtion board: Offset Size Description 00h BYTE connection status flags bit 7: busy in T.30 CCITT fax protocol bit 6: data on current page/file (only used for block xfers) bit 5: retransmission of last page requested bit 4: in file transfer mode bit 3: data in buffer bit 2: data buffer dumped on receive bit 1: 200x100 dpi resolution instead of 200x200 dpi bit 0: data modem in use, FAX image modem not available 01h BYTE board state bit 7: reserved bit 6: handset jack active, data and FAX modems not available bits 5-3: current bit rate 000 300 bps (V.21 HDLC) 100 2400 bps (V.27 ter) 101 4800 bps (V.27 ter) 110 7200 bps (V.29) 111 9600 bps (V.29) bits 2-0: T.30 CCITT protocol state 000 idle 001 dialing 010 answering 011 transmitting 100 receiving 101 pre-message 110 post-message 111 disconnect 02h BYTE number of KB free in buffer 03h BYTE number of pages or files in buffer 04h BYTE number of redials remaining on current number 05h BYTE FAX page number to retransmit 06h BYTE current page/file in block transfer 07h BYTE number of rings received (only if auto-answer enabled) 08h WORD error count 0Ah DWORD length of file being transferred 0Eh 6 BYTEs reserved 14h BYTE 'B' is SatisFAXtion board present 15h 13 BYTEs ASCIZ transfer agent name 22h 5 BYTEs ASCIZ transfer agent version number 27h 13 BYTEs ASCIZ resident loader name 34h 5 BYTEs ASCIZ resident loader version number 39h 21 BYTEs ASCIZ remote CSID 4Eh 13 BYTEs ASCIZ resident manager name 5Bh 5 BYTEs ASCIZ resident manager version number 60h 32 BYTEs reserved Note: the Intel Connection CoProcessor and SatisFAXtion may be distinguished by examining the byte at offset 14h ----------2FCB13DL00------------------------- INT 2F - Communicating Applications Specification - GET DIAGNOSTICS RESULTS AX = CB13h DL = 00h Return: AX = 0040h in progress >= 0 passed < 0 hardware-dependent failure code (see below) SeeAlso: AX=CB13h/DL=01h Intel Connection CoProcessor failure codes: bit 3: 9600 bps FAX modem module failed bit 2: SDLC chip failed bit 1: RAM failed bit 0: ROM checksum failed Intel SatisFAXtion failure codes: bit 1: 2400 bps data modem failed bit 0: 9600 bps FAX modem failed ----------2FCB13DL01------------------------- INT 2F - Communicating Applications Specification - START DIAGNOSTICS AX = CB13h DL = 01h Return: AX = 0000h successfully started < 0 error code (see AX=CB01h) SeeAlso: AX=CB13h/DL=00h ----------2FCB14----------------------------- INT 2F - Communicating Applications Specification - MOVE RECEIVED FILE AX = CB14h BX = event handle CX = receive file number 0001h first received file N Nth received file DS:DX -> ASCIZ string specifying new name for file (must not exist) Return: AX = 0000h successful < 0 error code (see AX=CB01h) ----------2FCB15----------------------------- INT 2F - Communicating Applications Specification - SUBMIT FILE TO SEND AX = CB15h DS:DX -> variable-length data area (see below) Return: AX >= 0 event handle < 0 error code (see AX=CB01h) SeeAlso: AX=CB01h Format of data area: Offset Size Description 00h BYTE transfer type 00h = 200x200 dpi, fax mode 01h = 100x200 dpi, fax mode 02h = file transfer mode 03h to 7Fh reserved 01h BYTE text size 00h = 80 columns 01h = 132 columns 02h to 7Fh reserved 02h WORD time to send (DOS packed time format, see INT 21/AX=5700h) 04h WORD date to send (DOS packed date format, see INT 21/AX=5700h) 06h 32 BYTEs ASCIZ destination name 26h 80 BYTEs ASCIZ name of file to send 76h 47 BYTEs ASCIZ phone number to dial A5h 64 BYTEs ASCIZ application-specific tag string E5h BYTE reserved (00h) E6h BYTE cover page 00h don't send cover page 01h send cover page 02h to 7Fh reserved E7h 23 BYTEs reserved (zeros) FEh variable ASCIZ string containing text of cover page (if cover page flag set to 01h) ----------2FCB16BX1234----------------------- INT 2F - Communicating Applications Spec v1.2+ - UNLOAD RESIDENT MANAGER AX = CB16h BX = 1234h CX = 5678h DX = 9ABCh Return: AX = 0000h successful < 0 error code SeeAlso: AX=CB00h ----------2FCB17----------------------------- INT 2F - Communicating Applications Spec v1.2+ - SET COVER PAGE STATUS AX = CB17h BX = event handle CL = cover page status 00h not read 01h read by user Return: AX = 0000h successful < 0 error code ----------2FCB80----------------------------- INT 2F - Intel SatisFAXtion CASMGR - ??? AX = CB80h ??? Return: ??? ----------2FCB81----------------------------- INT 2F - Intel SatisFAXtion CASMGR - ??? AX = CB81h ??? Return: ??? ----------2FCB82----------------------------- INT 2F - Intel SatisFAXtion CASMGR - ??? AX = CB82h ??? Return: ??? ----------2FCBDC----------------------------- INT 2F - Comwave Microfax Specification - GET STATUS ARRAY AX = CBDCh BL = 56h BH = line number (starts with 1) CX:DX -> 32-byte status buffer or 80 character string Return: AX = number of cards installed, or FFFFh on error Program: Comwave manufacturers the Microfax line of fax cards which are a high- performance multi-card FAX solution for OEMs. Note: defaults to AH=CBh but can be changed SeeAlso: AX=CBDDh,AX=DA00h ----------2FCBDD----------------------------- INT 2F - Comwave Microfax Specification - COMMAND SUBMISSION AX = CBDDh BL = 56h BH = ? CX:DX -> command to execute Return: AX = status 0000h success FFFFh on error SeeAlso: AH=2Ah,AX=CBDCh,AX=80FBh ----------2FCC--SI5453----------------------- INT 2F U - Qualitas Qcach v4.00 AH = CCh SI = 5453h or 7473h AL = ??? DL = 00h or ??? Return: SI = 7473h ??? ----------2FCD00----------------------------- INT 2F - Intel Image Processing Interface - INSTALLATION CHECK AX = CD00h Return: AL = 00h not installed, OK to install 01h not installed, not OK to install FFh installed SeeAlso: AX=CD02h"Image" ----------2FCD00----------------------------- INT 2F - SWELL.EXE - INSTALLATION CHECK AX = CD00h Return: AX = 00FFh installed BH = major version BL = minor version Note: SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child process with INT 21/AH=4Bh ----------2FCD01----------------------------- INT 2F - Intel Image Processing Interface - SET DEVICE NAME AX = CD01h CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN") Return: AL = 00h successful CX:BX -> internal character device name = 80h error ----------2FCD01----------------------------- INT 2F - SWELL.EXE - SUSPEND ONCE AX = CD01h Return: AX = 0000h SeeAlso: AX=CD02h"SWELL" ----------2FCD02----------------------------- INT 2F - Intel Image Processing Interface - GET VERSION NUMBER AX = CD02h Return: AL = 00h/01h successful BH = major version number (BCD) BL = minor version number (BCD) = 80h error Note: if return AL = 01h, the IPI supports network redirection SeeAlso: AX=CD00h"Image" ----------2FCD02----------------------------- INT 2F - SWELL.EXE - SUSPEND AX = CD02h Return: AX = 0000h SeeAlso: AX=CD03h"SWELL" ----------2FCD03----------------------------- INT 2F - Intel Image Processing Interface - SELECT SCAN LINE AX = CD03h BX = scan line CX = requested density in dots per inch (300, 600, or 1200) Return: AL = 00h succesful CX = density at which scan line was mapped ES:DI -> start of scan line AL = 80h unsuccessful = 81h scan line out of range = 82h unsupported scan line density = 83h out of memory SeeAlso: AX=CD04h"Image" ----------2FCD03----------------------------- INT 2F - SWELL.EXE - ACTIVATE AX = CD03h Return: AX = 0000h SeeAlso: AX=CD02h"SWELL" ----------2FCD04----------------------------- INT 2F - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE AX = CD04h CX:BX -> structure (see below) Return: AL = 00h successful = 80h unsuccessful = 81h scan line out of range = 82h unsupported scan line density = 83h out of memory = 84h unrecognized source = 85h initialization error SeeAlso: AX=CD03h"Image" Format of structure: Offset Size Description 00h WORD image source (0 = conventional memory, 1 = expanded memory) 02h DWORD pointer to image data 06h WORD scan line on which to place 08h WORD bit offset from start of scan line at which to place 0Ah WORD density of bitmap data (300, 600, or 1200 dpi) 0Ch WORD width in bits of data 0Eh WORD source logical page number 10h WORD source handle (only if source in expanded memory) 12h WORD source offset (only if source in expanded memory) ----------2FCD04----------------------------- INT 2F - SWELL.EXE - TURN OFF VERBOSE MODE AX = CD04h Return: AX = 0000h SeeAlso: AX=CD05h"SWELL" ----------2FCD05----------------------------- INT 2F - Intel Image Processing Interface - PRINT PAGE AX = CD05h Return: AL = 00h successful = 80h unsuccessful Note: page image is retained, so multiple calls will print multiple copies of the page SeeAlso: AX=CD06h"Image" ----------2FCD05----------------------------- INT 2F - SWELL.EXE - TURN ON VERBOSE MODE AX = CD05h Return: AX = 0000h SeeAlso: AX=CD04h"SWELL" ----------2FCD06----------------------------- INT 2F - Intel Image Processing Interface - CLEAR PAGE AX = CD06h Return: AL = 00h successful = 80h unsuccessful Note: palette is reset to default SeeAlso: AX=CD09h"Image" ----------2FCD06----------------------------- INT 2F - SWELL.EXE - UNINSTALL AX = CD06h Return: AX = 0000h uninstalled = 8002h programs still swapped, not uninstalled ----------2FCD07----------------------------- INT 2F - Intel Image Processing Interface - reserved AX = CD07h ----------2FCD07----------------------------- INT 2F - SWELL.EXE - GET INFO AX = CD07h ES:BX -> 32-byte buffer for info Return: AX = 0000h successful ES:BX buffer filled = 8001h buffer wrong size Format of info buffer: Offset Size Description 00h WORD 20h (total size of buffer) 02h BYTE suspend-once mode active if nonzero 03h BYTE 00h active, 01h suspended 04h BYTE 00h quiet, 01h verbose 05h BYTE "Borland support" (allowing INT 21/AX=4B01h) on if nonzero 06h 26 BYTEs unused??? ----------2FCD08----------------------------- INT 2F - Intel Image Processing Interface - SCREEN IMAGE AX = CD08h CX:BX -> structure (see below) Return: AL = 00h successful = 80h unsuccessful = 81h scan line out of range = 82h unsupported scan line density = 83h out of memory = 84h unrecognized source = 85h initialization error SeeAlso: AX=CD05h"Image",AX=CD09h"Image" Format of structure: Offset Size Description 00h WORD image source (0 = conventional memory, 1 = expanded memory) 02h DWORD pointer to image data 06h WORD horizontal position on paper of left edge (in 1200 dpi units) 08h WORD vertical position on paper of top edge (in 1200 dpi units) 0Ah WORD left cropping (currently must be zero) 0Ch WORD top cropping (currently must be zero) 0Eh WORD width (currently must be 8000h) 10h WORD height (currently must be 8000h) 12h WORD horizontal size of image in 1200 dpi units 14h WORD vertical size of image in 1200 dpi units 16h WORD aspect ratio (currently reserved) 18h WORD initialization flag (if 01h, initialization is performed) 1Ah WORD pixels per line of source data 1Ch WORD number of scan lines in source data 1Eh WORD number of scan lines in packet 20h WORD bits per pixel (1,2,4,6, or 8) 22h WORD pixels per byte (1,2,4, or 8) 24h WORD compression type (currently only 00h [uncompressed] supported) 26h WORD source page number (if in expanded memory) 28h WORD source handle (if in expanded memory) 2Ah WORD source offset (if in expanded memory) ----------2FCD08----------------------------- INT 2F - SWELL.EXE - UNUSED AX = CD08h Return: AX = FFFFh (error) ----------2FCD09----------------------------- INT 2F - Intel Image Processing Interface - LOAD SCREEN AX = CD09h CX:BX -> structure (see below) Return: AL = 00h successful = 80h unsuccessful SeeAlso: AX=CD06h"Image Processing",AX=CD0Ah"Image Processing" Format of structure: Offset Size Description 00h BYTE style 44h ('D') diamond style 4Ch ('L') line style 01h BYTE reserved (00h) 02h WORD frequency in lines per inch [sic] currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100 04h WORD screen angle in degrees (-360 to 360) currently coerced to nearest of -45, 0, 45, or 90 ----------2FCD09----------------------------- INT 2F - SWELL.EXE - TURN OFF "BORLAND SUPPORT" AX = CD09h Return: AX = 0000h SeeAlso: AX=CD0Ah"SWELL" ----------2FCD0A----------------------------- INT 2F - Intel Image Processing Interface - LOAD PALETTE AX = CD0Ah CX:BX -> palette structure (see below) Return: AL = 00h successful = 80h unsuccessful SeeAlso: AX=CD09h"Image Processing" Format of palette structure: Offset Size Description 00h BYTE bits per pixel for which palette is to be used (1,2,4,6, or 8) 01h 2**N palette translation values, one per possible pixel value ----------2FCD0A----------------------------- INT 2F - SWELL.EXE - TURN ON "BORLAND SUPPORT" AX = CD0Ah Return: AX = 0000h SeeAlso: AX=CD09h"SWELL" ----------2FD000----------------------------- INT 2F - MDEBUG display driver - GET DRIVER STATUS AX = D000h Return: CF set on error all other registers must be unchanged) CF clear if successful AL = FFh AH = driver semaphor 00h driver is not active 01h driver is active BX = CS of the driver CX = driver version (CH = major, CL = minor, must be >= 013Ch) DL = buffer semaphor 00h driver is not pending 01h driver is pending between functions 02h and 03h DH = show semaphor 00h driver is not pending 01h driver is pending between functions 04h and 05h Notes: MDEBUG is a shareware memory-resident debugging tool by Bernd Schemmer, including a memory monitor, an interpreter and a disassembler MDEBUG can use any two consecutive multiplex numbers between C0h and FFh; the default is D0h for the display driver and D1h for the command driver (see INT 60/AH=00h"MDEBUG" for the actual multiplex numbers used) this function MUST be reentrant, as MDEBUG calls it after every popup before any other actions. The handler should not change any registers if the display is in an unsupported mode or in a mode MDEBUG supports itself, e.g. a normal text mode with at least 80x25 characters (i.e. 80x43 or 132x44 (v1.60+)). In this case MDEBUG will not call any of the other functions for this popup session. MDEBUG will not call the other functions if the returned version is less than the actual version of MDEBUG. if the driver is reentrant, DL and DH should be 00h SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h ----------2FD000----------------------------- INT 2F - ZWmous - INSTALLATION CHECK AX = D000h Return: AX = 5A57h ("ZW") if installed BX = segment of resident code Note: ZWmous is a shareware TSR by Zen Wu which permits the use of a mouse with many non-mouse applications by entering the letter under the mouse cursor on button presses SeeAlso: INT 33/AX=0003h ----------2FD000----------------------------- INT 2F - Lotus CD/Networker - INSTALLATION CHECK AX = D000h Return: AL = FF if CD/Networker TSR is loaded BX = 4D44h ("MD") signature CX = Windows mode word (from INT 2F/AX=1600h) at time of TSR load DX = bitmap identifying all loaded CD/Networker TSRs. Notes: INT 2F/AH=D0h is used by CD/Networker to communicate between a resident redirector TSR and a transient program that controls the TSR's CD-ROM drive emulation (volume attachments, caching, etc). At present there is only one CD/Networker TSR; the bitmap always = 4. SeeAlso: AX=D002h"Lotus",INT 2F/AX=1500h"CD-ROM" ----------2FD001----------------------------- INT 2F - MDEBUG display driver - INITIALIZE DRIVER AX = D001h Return: CF set on error AL = driver semaphor AH = buffer semaphor Notes: MDEBUG calls this function after every succesful call of the function 00h. The function should reset all internal data and the status of the driver. If this function returns an error, MDEBUG will not call the other functions in this popup session. MDEBUG can use any two consecutive multiplex numbers between C0h and FFh; the default is D0h for the display driver and D1h for the command driver SeeAlso: AX=D000h ----------2FD002----------------------------- INT 2F - MDEBUG display driver - SAVE GRAPHIC DATA AX = D002h Return: CF set on error CF clear if successful display memory saved and display switched to one of the text modes 02h, 03h or 07h. Note: MDEBUG calls this function only once every popup session before displaying its windows. SeeAlso: AX=D000h,AX=D003h ----------2FD002BX4D44----------------------- INT 2F - Multiplex - Lotus CD/Networker GET DATA AREA AX = D002h BX = 4D44h DX = bitmap identifying one loaded CD/Networker TSR Return: ES:DI -> data area owned by TSR Note: the format of the data area changes with each minor revision, so it cannot be counted on SeeAlso: AX=D000h"Lotus" ----------2FD003----------------------------- INT 2F - MDEBUG display driver - RESTORE GRAPHIC DATA AX = D003h Return: CF set on error CF clear if successful display restored to the mode it was in before calling AX=D002h and the display memory is restored Note: MDEBUG calls this function only once every popup session just before it exits to normal DOS. SeeAlso: AX=D000h,AX=D002h ----------2FD004----------------------------- INT 2F - MDEBUG display driver - SHOW SAVED DATA AX = D004h Return: CF set on error CF clear if successful display switched to mode it was in before calling AX=D002h and the display memory is restored Note: This function needn't save the display memory before changing it. SeeAlso: AX=D000h,AX=D005h ----------2FD005----------------------------- INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN AX = D005h Return: CF set on error CF clear if successful display restored to mode it was in before calling AX=D004h Note: This function needn't save or change the display memory SeeAlso: AX=D000h,AX=D004h ----------2FD0------------------------------- INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS AH = D0h AL = 06h-7Fh Note: these functions are reserved for future use ----------2FD0------------------------------- INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS AH = D0h AL = 80h-FFh Note: these functions numbers are reserved for user defined features (e.g. communication between the transient und resident parts of the driver) ----------2FD100----------------------------- INT 2F - MDEBUG command driver - GET STATUS AX = D100h BX = version of MDEBUG (BH = major, BL = minor) CX = command driver counter ---v1.60+--- DS:SI -> MDEBUG identification table (see below) ES = segment of display memory used by MDEBUG DI = size of video mode used by MDEBUG (high byte = lines, low byte = columns) Return: DL = FFh BX = version number of the driver if it is less than the version in BX, else unchanged CX incremented Notes: MDEBUG is a shareware memory-resident debugging tool by Bernd Schemmer, including a memory monitor, an interpreter, and a disassembler called by MDEBUG at start of popup session; if the version number returned in BX is less than 1.52 (1.60 for MDEBUG v1.70), MDEBUG will not call any of the other functions during this popup session MDEBUG can use any two consecutive multiplex numbers between C0h and FFh; the default is D0h for the display driver and D1h for the command driver (see INT 60/AH=00h"MDEBUG" for the multiplex numbers actually used) this function must end with a far call to the old INT 2F handler after changing the registers this function MUST be reentrant command drivers must also declare the following data at the given offsets in the code segment 100h 3 BYTEs JMP-command in .COM-files 103h BYTE NOP-command (90h) 104h 26 BYTEs signature "Kommandotreiber fr MDEBUG" 11Eh 12 BYTEs name of driver, e.g. "MDHISDRV.COM" each driver must have a unique name MDEBUG will pass every key and command to the command driver(s) before checking for a valid internal command SeeAlso: AX=D000h,AX=D101h Format of MDEBUG identification table: Offset Size Description -2 WORD entry offset 00h WORD CS of MDEBUG 02h DWORD old INT 08h vector 06h DWORD old INT 09h vector 0Ah DWORD address INT 16h routine used by MDEBUG 0Eh BYTE length of version string 0Fh N BYTEs version string ----------2FD101----------------------------- INT 2F - MDEBUG command driver - INITIALIZE DRIVER AX = D101h CX = command driver counter Return: DL = FFh if successful CX incremented else error: all registers unchanged Note: this function must end with a far call to the old INT 2F handler after changing the registers this function must be reentrant ----------2FD102----------------------------- INT 2F - MDEBUG command driver - EXECUTE INTERPRETER COMMAND AX = D102h BL = first character of the interpreter command BH = last character of the interpreter command (or blank) DS:SI -> parameter for the interpreter command as ASCIZ string DS:DI -> MDEBUG data structure (see below) Return: AL = FFh CF set on error AH = error number 01h syntax error 02h first shell of the command.com is activ 03h esc pressed 04h break pressed 05h DOS is busy 06h command ended 07h division by zero 08h invalid display driver 09h invalid command driver 0Ah error 8 and 9 0Bh unknown error 0Ch new error DS:SI -> ASCIZ error message (max 30 characters) else unknown error CF clear if successful AH = return code 00h continue processing the command line 01h leave MDEBUG popup session 02h leave MDEBUG popup session and automatically popup again if the InDOS flag is zero 03h not used (same as 00h) 04h not used (same as 00h) 05h put new command line into the input buffer, DS:SI -> new command line (ASCIZ string, max 66 chars) 06h process new command line DS:SI -> new command line (ASCIZ string, max 66 chars) else unknown status, but continue processing commmand line Note: this function must end with a far call to the old INT 2F handler (with registers unchanged) if the driver does not support the interpreter command in BX. Otherwise, the driver must not chain to the old INT 2F. Format of MDEBUG data structure: Offset Size Description 00h WORD register SE 02h WORD register OF 04h WORD register FS 06h WORD register FO 08h WORD register AX 0Ah WORD register BX 0Ch WORD register CX 0Eh WORD register DX 10h WORD register SI 12h WORD register DI 14h WORD register DS 16h WORD register ES 18h WORD register BP 1Ah WORD register SS 1Ch WORD register SP 1Eh WORD register FL (flags) 20h WORD register R0 22h WORD register R1 24h WORD register R2 26h WORD register R3 28h WORD register R4 2Ah WORD register R5 2Ch WORD register R6 2Eh WORD register R7 30h WORD register R8 32h WORD register CS, return-address 34h WORD register IP, return-address 36h DWORD saved pointer to data for key (v1.60) saved monitor address (v1.70) 3Ah 12 WORDs saved register values on last popup entry (for key) (original register values at popup entry of MDEBUG) AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags 52h 12 WORDs saved register values on last popup exit (for key) AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags 6Ah DWORD address of the DOS-invars-table 6Eh DWORD address of the InDOS flag 72h WORD offset of the register which is used for the segment of the first monitor window 74h WORD offset of the register which is used for the offset of the first monitor window 76h WORD name of the register which is used for the segment of the first monitor segment 78h WORD name of the register which is used for the offset of the first monitor window 7Ah WORD pseudo register 1 7Ch WORD pseudo register 2 ----------2FD103----------------------------- INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR AX = D103h BX = key code (like result of an interrupt 16h call) CX = 0 -> the cursor is in the ASCII column of the monitor CX = 1 -> the cursor is in one of the hex fields of the monitor DS:SI -> MDEBUG data structure (see AX=D102h) ES:DI -> actual byte in the monitor Return: AL = FFh AH = return code 00h key processed, read next key 01h leave MDEBUG popup session 02h leave MDEBUG popup session and automatically popup again if DOS is not busy 03h signal an error (beep) 04h driver has redefined the key, proceed with the new key BX = new key code MDEBUG will not pass the new key to the command driver(s) else treat like code 00h Note: this function must end with a far call to the old INT 2F handler (with registers unchanged) if the driver does not support the key in BX. Otherwise, the driver must not chain to the old INT 2F. SeeAlso: AX=D104h ----------2FD104----------------------------- INT 2F - MDEBUG command driver - EXECUTE KEY IN THE INTERPRETER AX = D104h DS:SI -> MDEBUG data structure (see AX=D102h) Return: AL = FFh AH = return code 00h key processed, read next key 01h leave MDEBUG popup session 02h leave MDEBUG popup session and automactically popup again if DOS is not busy 03h signal an error (beep) 04h driver has redefined the key, proceed with the new key BX = new key code MDEBUG won't pass the new key to the command driver(s) 05h put new command line into the input buffer DS:SI -> new command line (ASCIZ string, max 66 chars) 06h process new command line DS:SI -> new command line (ASCIZ string, max 66 chars) else treat like code 00h Note: this function must end with a far call to the old INT 2F handler if the driver does not support the key in BX. Otherwise, the driver must not chain to the old INT 2F. SeeAlso: AX=D103h ----------2FD1------------------------------- INT 2F - MDEBUG command driver - RESERVED FUNCTIONS AH = D1h AL = 05h-0Ah Note: these functions are reserved for future use ----------2FD110----------------------------- INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F AX = D110h Return: DL = FFh ES:BX -> next program in the chain for INT 2F CX = code segment of this driver DI = offset of driver identification table (see below) (v1.60+) Notes: only called by the transient part of the driver must be reentrant and the driver must not chain this function to the old INT 2F Format of the driver identification table: Offset Size Description 00h 26 BYTEs signature "Kommandotreiber fr MDEBUG" ^- Note: ASCII 129,German U-umlaut 27h 12 BYTEs name of driver, e.g. "MDHISDRV.COM" each driver must have a unique name ----------2FD111----------------------------- INT 2F - MDEBUG command driver - START DRIVER AX = D111h Return: DL = FFh Notes: only called by the transient part of the driver to inform the resident part that it is installed the function must be reentrant and the driver mustn't chain this function to the old INT 2F SeeAlso: AX=D101h,AX=D112h ----------2FD112----------------------------- INT 2F - MDEBUG command driver - END DRIVER AX = D112h Return: DL = FFh Notes: only called by the transient part of the driver to inform the resident part that it will be released after this function the function must be reentrant and the driver mustn't chain this function to the old INT 2F SeeAlso: AX=D101h,AX=D111h ----------2FD1------------------------------- INT 2F - MDEBUG command driver - RESERVED FUNCTIONS AH = D1h AL = 13h-7Fh Note: these functions are reserved for future use ----------2FD1------------------------------- INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS AH = D1h AL = 80h-FFh Note: these functions are reserved for user defined features (e.g. communication between the transient und resident parts of the driver) ----------2FD200BX5144----------------------- INT 2F U - Quarterdeck - QEMM/QRAM/VIDRAM/MANIFEST v5.0+ - INSTALLATION CHECK AX = D200h BX = 5144h ("QD") CX = 4D45h ("ME") DX = 4D30h ("M0") Return: AL = FFh installed if BX,CX,DX registers were as specified on entry: BX = 4D45h ("ME") CX = 4D44h ("MD") DX = 5652h ("VR") Notes: QEMM/QRAM/VIDRAM/MANIFEST/etc will search for a free AH value from D2h through FFh, then C0h through D1h for AL <> 0, if the BX/CX/DX values don't match a the identifier of a Quarterdeck product, it just chains to the previous INT 2F handler ----------2FD201BX4849----------------------- INT 2F U - Quarterdeck - GET QD HIMEM PRESENCE AX = D201h BX = 4849h ("HI") CX = 4D45h ("ME") DX = 4D51h ("MQ") Return: BX = 4F4Bh ("OK") ES:DI -> HIMEM entry point Notes: QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h through FFh, then C0h through D1h SeeAlso: AX=D201h/BX=5145h ----------2FD201BX4849----------------------- INT 2F U - Quarterdeck - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN AX = D201h BX = 4849h ("HI") CX = 5241h ("RA") DX = 4D30h ("M0") Return: BX = 4F4Bh ("OK") CX = segment of start of HIRAM chain DX = QEMM/QRAM code segment Notes: QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h through FFh, then C0h through D1h QEMM and QRAM both responded the same the HIRAM memory chain has the same format as the regular DOS 4.0 memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks have the block header program name field set to "UMB"; blocks whose "owner" field is set to the QEMM/QRAM code segment returned in DX are locked out regions such as video memory and ROMs. ----------2FD201BX4D41----------------------- INT 2F U - Quarterdeck - MANIFEST v1.0+ - INSTALLATION CHECK AX = D201h BX = 4D41h ("MA") CX = 4E49h ("NI") DX = 4645h ("FE") Return: BX = 5354h ("ST") Note: QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h through FFh, then C0h through D1h ----------2FD201BX4D45----------------------- INT 2F U - Quarterdeck - DVDOS4GX.DVR - ??? AX = D201h BX = 4D45h ("ME") CX = 5155h ("QU") DX = 5044h ("PD") Return: ??? Notes: AH=D2h is the default; use the Quarterdeck installation check described under AX=D200h called by QEMM 6.03 ----------2FD201BX5145----------------------- INT 2F U - Quarterdeck - QEMM v5.0+ - INSTALLATION CHECK AX = D201h BX = 5145h ("QE") CX = 4D4Dh ("MM") DX = 3432h ("42") Return: BX = 4F4Bh ("OK") ES:DI -> QEMM API entry point (see INT 67/AH=3Fh) Notes: QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h through FFh, then C0h through D1h this call is not available under QEMM v6.00 unless Windows3 support has been disabled with the NW3 switch to QEMM386.SYS SeeAlso: AX=D201h/BX=4849h,INT 67/AH=3Fh ----------2FD201BX5649----------------------- INT 2F U - Quarterdeck - VIDRAM v5.0+ - INSTALLATION CHECK AX = D201h BX = 5649h ("VI") CX = 4452h ("DR") DX = 414dh ("AM") Return: BX = 4F4Bh ("OK") ES:DI -> VIDRAM entry point Note: QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h through FFh, then C0h through D1h Call VIDRAM entry point with: AH = 00h get status Return: AL = VIDRAM state (see below) BL = bit 0: ??? bits 1-7 not used BH = flags??? bit 4: high RAM exists in video area??? CL = current monitor (01h = mono, 80h = color) SI = current top of memory (paragraph)??? DI = segment of ??? AH = 01h setup AL = VIDRAM state (00h off, 01h no EGA graphics, 02h no graph) BL = bit 0: ??? bits 1-7 not used BH = flags??? CL = monitor (01h = monochrome, 80h = color) SI = new top of memory (paragraph)??? AH = 02h get ??? Return: ES:DI -> ??? data Return: CF set on error CF clear if successful ----------2FD300BX4562----------------------- INT 2F U - TeleReplica - INSTALLATION CHECK AX = D300h BX = 4562h CX = 2745h DX = serial port I/O base address??? (03F8h for v3.9) Return: SI = segment of resident code AX = 251Dh BX = DF21h CX = F321h DX = ??? ----------2FD3CB----------------------------- INT 2F U - LapLink Quick Connect v6 - API AX = D3CBh CX = function 0002h get ??? Return: BX:AX -> ??? CL = ??? CH = ??? DX = ??? DI = COM1 I/O port??? SI = COM2 I/O port??? 0003h initialization??? 0004h ??? 0005h initialization??? 0006h reset/clear ??? Return: AX = 0000h ES:DI -> next byte after ??? cleared by this call 0007h initialization??? 0008h uninstall Return: BX = status 0000h successful FFFFh incomplete, stub remains in memory Return: CX = 534Bh (except function 0002h) ----------2FD44D----------------------------- INT 2F - 4DOS.COM v2.1+ - API AX = D44Dh BH = function 00h installation check Return: AX = 44DDh BL = minor version number BH = major version number CX = PSP segment address for current invocation DL = 4DOS shell number (0 for the first (root) shell, updated each time a new copy is loaded) 01h (internal, v2.1-3.03) terminate current copy of 4DOS Return: nothing (internal, v4.0) ??? Return: ES:BX -> data area (see below) 02h ??? DX = ??? ---v2.1-3.03 only--- 03h EXEC program CX:DX -> EXEC record FEh deallocate shell number (passed through to root shell) ??? FFh allocate shell number (passed through to root shell) Note: bug in v3.00 will crash system if unrecognized value in BH SeeAlso: AX=D44Eh,AX=E44Dh,INT 21/AX=4403h Format of EXEC record: Offset Size Description 00h WORD offset of ASCIZ program name in same segment as EXEC record 02h WORD offset of DOS commandline in same segment as EXEC record 04h WORD segment of environment for child process (see INT 21/AH=26h) Format of 4DOS v4.0 data area: Offset Size Description 00h 2 BYTEs ??? 06h WORD XMS handle for swapping ??? ----------2FD44E----------------------------- INT 2F - 4DOS v3.0+ - AWAITING USER INPUT AX = D44Eh ---4DOS v3.01+--- BX = 0000h 4DOS is ready to display prompt = 0001h 4DOS has displayed the prompt, about to accept user input Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS Note: v3.00 only makes the call corresponding to BX=0001h, does not set BX SeeAlso: AX=D44Dh ----------2FD44FBX0000----------------------- INT 2F - 4DOS v4.0+ - KSTACK.COM - INSTALLATION CHECK AX = D44Fh BX = 0000h Return: AX = 44DDh if installed SeeAlso: AX=D44Fh/BX=0001h ----------2FD44FBX0001----------------------- INT 2F - 4DOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK AX = D44Fh BX = 0001h CX = number of keystrokes (01h-FFh) DS:DX -> keystroke list (one word per keystroke) Return: AX = status 0000h successful nonzero failed BX,CX,DX destroyed Notes: the keystrokes are the exact values to return from subsequent calls to INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions: 0000h causes subfunctions 01h and 11h to indicate an empty keyboard buffer FFFFh is followed by a word indicating the number of clock ticks to delay before the next faked keystroke v4.00 KSTACK overwrites any unread keystrokes from the previous invocation, and does not range-check CX; it will overwrite memory following the resident portion if CX is greater than 100h. SeeAlso: AX=D44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h ----------2FD600----------------------------- INT 2F - HEART.COM - INSTALLATION CHECK AX = D600h Return: AX = 0303h (two hearts) if installed ES:DI -> buffer (see below) Note: HEART.COM is a CPU lock-up/critical indicator utility by Mitch Davis. Once the host program has identified the address of the data area, it can change this to indicate safe/critical, alternate colours, etc. The entries for the color table are in char/attrib form. Every two entries form a pair which is alternated between 68 times a minute. The first half of the table is for color videos, the second mono. Within each half, the first half is for the safe chars, and the second for the critical chars. Format of buffer: Offset Size Description 00h 8 WORD Table of colors/attributes (see notes). 10h BYTE flags bit 0: program is in critical section, so flash double exclamation mark bit 1: program is in safe code, so flash the heart character 11h WORD position of heartbeat on screen, normally 009Eh (last column of second line) ----------2FD600----------------------------- INT 2F U - VEDIT VSWAP - INSTALLATION CHECK AX = D600h Return: AL = D6h if installed Note: VSWAP is the resident portion of VEDIT's "swapper" capability. VEDIT is a programmer's text editor by Greenview Data. SeeAlso: AX=D601h,AX=D602h ----------2FD601----------------------------- INT 2F U - VEDIT VSWAP - ??? AX = D601h BL = subfunction number??? Return: BL = return code ??? ES = resident portion's data??? segment DX = resident portion's code segment SeeAlso: AX=D600h"VSWAP" ----------2FD602----------------------------- INT 2F U - VEDIT VSWAP - EXEC PROGRAM WITH SWAP AX = D602h other registers set as for INT 21/AX=4B00h Return: CF set on error AL = error code 82h = failure due to ??? CF clear on success SeeAlso: AX=D600h"VSWAP",INT 21/AX=4Bh"EXEC" ----------2FD701----------------------------- INT 2F - BANYAN VINES v4+ - GET BANV INTERRUPT NUMBER AX = D701h Return: AX = 0000h installed BX = interrupt number (60h to 66h) nonzero not present Note: if AX is nonzero, VINES 3.x or earlier may be installed, thus it is necessary to examine the four bytes preceding the handlers for INT 60 through INT 66 for the string "BANV" SeeAlso: AX=D702h,AX=D703h,AX=D704h ----------2FD702----------------------------- INT 2F U - BANYAN VINES v4+ - PCPRINT interface AX = D702h BX = function ??? Return: ??? SeeAlso: AX=D701h,AX=D703h,INT 61/AX=0005h"Banyan" ----------2FD703----------------------------- INT 2F U - BANYAN VINES v4+ - MAIL interface AX = D703h BX = function ??? Return: ??? SeeAlso: AX=D702h,AX=D704h ----------2FD704----------------------------- INT 2F U - BANYAN VINES v4+ - Streettalk Directory Assistance interface AX = D704h BX = function ??? Return: ??? SeeAlso: AX=D703h,INT 61/AX=0007h"Banyan" ----------2FD800----------------------------- INT 2F - Novell NetWare Lite - CLIENT.EXE - INSTALLATION CHECK AX = D800h Return: AL = FFh if installed DX = version number??? (0100h in 1.00) BX = data segment of resident copy??? ES:DI = FAR entry point for API routines Load BX = function number and call for various functions. Functions 00h - 10h supported in 1.00. SeeAlso: AX=7A00h,AX=D880h ----------2FD880----------------------------- INT 2F - Novell NetWare Lite - SERVER.EXE - INSTALLATION CHECK AX = D880h Return: AL = FFh if installed DX = version number??? (0100h in 1.00) BX = Data segment of resident copy??? CL = 01h if SERVER is active = 00h if SERVER is disabled SeeAlso: AX=7A00h,AX=D800h ----------2FDA00----------------------------- INT 2F - ZyXEL ZFAX - INSTALLATION CHECK AX = DA00h Return: AH = enabled state (00h = enabled, 01h = disabled) AL = 5Ah installed Note: ZFAX is the bundled FAX software which comes with the ZyXEL model fax modems. SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h ----------2FDA01----------------------------- INT 2F - ZyXEL ZFAX - UNINSTALL AX = DA01h Return: AL = 00h Success 01h Failure SeeAlso: AX=DA00h ----------2FDA02----------------------------- INT 2F - ZyXEL ZFAX - DISABLE AX = DA02h Return: AL = 00h SeeAlso: AX=DA03h ----------2FDA03----------------------------- INT 2F - ZyXEL ZFAX - ENABLE AX = DA03h Return: AL = 00h SeeAlso: AX=DA02h ----------2FDA55----------------------------- INT 2F U - TRAP.COM - INSTALLATION CHECK AX = DA55h DL = interrupt number DH = ??? Return: if installed AH = interrupt number AL = ??? ES:BX -> ??? Notes: TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel a separate copy of TRAP is loaded for each interrupt to be traced; thus the interrupt number is part of the installation check ----------2FDC00----------------------------- INT 2F - GOLD.COM - INSTALLATION CHECK AX = DC00h Return: AL = 00h not installed = FFh installed Note: GOLD is a TSR by Bob Eager which makes the NumLock key return the code for F1; the purpose is to improve Kermit's VTxxx emulation ----------2FDC01----------------------------- INT 2F - GOLD.COM - GET STATE AX = DC01h Return: AL = status 00h off 01h on SeeAlso: AX=DC00h,AX=DC02h ----------2FDC02----------------------------- INT 2F - GOLD.COM - SET STATE AX = DC02h DL = new state 00h off 01h on Return: AL = 00h (OK) SeeAlso: AX=DC01h ----------2FDD------------------------------- INT 2F - SoftCom programs - API AH = DDh AL = FEh get info Return: ES:BX -> TSR info list (see below) AL = program identifier BH = function FDh get version Return: BX = version FFh installation check Return: AL = FFh if installed BX = version ES = segment of resident code others vary by program Return: AL = status bit 7 set on error AL = 81h unknown function Format of TSR info list: Offset Size Description 00h 9 BYTEs blank-padded ASCIZ program name 09h BYTE program ID 0Ah WORD program's PSP segment 0Ch WORD program version (major in high byte) 0Eh DWORD pointer to next item in info list or 0000h:0000h 12h BYTE number of interrupts hooked 13h 5 BYTEs interrupt numbers hooked by program 18h 8 BYTEs reserved ----------2FDE00BX4445----------------------- INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK AX = DE00h BX = 4445h ("DE") CX = 5844h ("XD") DX = 4931h ("I1") Return: AL = FFh if installed (even if other registers do not match) if BX,CX, and DX were as specified on entry, BX = 4845h ("HE") CX = 5245h ("RE") DX = 4456h ("DV") Notes: AH=DEh is the default XDI multiplex number, but may range from C0h-FFh programs should check for XDI starting at DEh to FFh, then C0h to DDh the XDI handler should not issue any DOS or BIOS calls, nor should it issue DESQview API calls other than those allowed from hardware ints ----------2FDE01----------------------------- INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION AX = DE01h BX = driver ID other registers as needed by driver Notes: XDI drivers should pass this call through to previous handler if ID does not match DESQview never calls this function ----------2FDE01BX5242----------------------- INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers AX = DE01h BX = 5242h ("RB") CX:DX = program identifier 656F7000h ("eop",0) for DVeop Return: AX = 5242h ("RB") if installed ES:BX -> data or entry point CX = version number (CH = major, CL = minor) Call DVeop entry point with: ES:DI -> callback address or 0000h:0000h to remove callback Return: AX = status 0000h failed (callback table full or attempted to remove non- existent callback) 0001h successful ES:DI -> chaining address BX,CX,DX destroyed Notes: the callback function is called with a simulated interrupt when the DESQview window containing it is closed; it should perform all necessary cleanup and then perform a FAR jump to the chaining address or an IRET if the chaining address is 0000h:0000h if the program wishes to remove itself before the window is closed, it should call the DVeop entry point with the previously returned chaining address and ignore the returned chaining address. ----------2FDE01BX7474----------------------- INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM AX = DE01h BX = 7474h CL = function 00h installation check Return: AL = FFh 01h get process handle DX = keys on Open Window menu (DL = first, DH = second) Return: AX = process handle or 0000h if not running 02h (v1.3+) set TMAN handle DX = TMAN process handle 03h (v1.3+) set open keys to ignore on next CL=01h call DX = keys on Open Window menu (DL = first, DH = second) Return: BX = 4F4Bh ("OK") DL destroyed Note: DVTXDI is distributed as part of the shareware products DVTree (DOS shell/DESQview process manager) and DVTMAN by Mike Weaver ----------2FDE01BX7575----------------------- INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM AX = DE01h BX = 7575h CX = function 0000h installation check Return: AX = 00FFh if installed 0001h turn on notification (currently unused) Return: AX = 0001h 0002h turn off notification (currently unused) Return: AX = 0001h 0003h get process information Return: AX = status 0000h failed 0001h successful BX = last instantaneous time slice in 1/100s (v1.10) in 1/18s (v1.11+) CX = number of processes DX = number of "(starting)" records (v2.00+) SI = number of records in process info array (v2.00+) (always 15 for v1.x) ES:DI -> process info array (see below) 0004h get version Return: AH = major version AL = minor version 0005h (v1.10+) get time since DESQview started Return: DX:AX = 1/100s since DV start (v1.10) DX:AX = 1/18s since DV start (v1.11+) 0006h (v1.10+) get number of task switches Return: DX:AX = total task switches CX = task switches in last instantaneous interval Notes: DVSIXDI is part of the DVSI (DESQview System Information) package by Daniel J. Bodoh for v1.00, function 0003h allocates common memory, which the caller must deallocate after reading the process information; only the currently used records are placed in the buffer for v1.10+, function 0003h merely returns a pointer to the internal array of process information; the caller should make a copy of the array while inside a critical section (see INT 15/AX=101Bh). Only those records with bit 7 of the first byte set are valid. Format of information for one process (v1.00): Offset Size Description 00h BYTE flags bit 7: process slot is valid 01h WORD offset into DESQVIEW.DVO of program's record if started from Open Windows menu, else undefined 03h WORD Switch Windows window number 05h WORD segment of process handle 07h WORD number of tasks owned by process 09h WORD mapping context of process 0Bh DWORD hook for other programs Format of information for one process (v1.10-v2.00): Offset Size Description 00h BYTE flags bit 7: valid record 6: (v2.00+) record is allocated; if bit 7 clear, process is "(starting)" and only offsets 01h and 09h are valid 5: (v2.00+) this app currently owns the CPU 4: reserved (0) 3: DESQview system task 2: reserved (0) 1: task has keyboard (currently unused) 0: task swapped out (currently unused) 01h WORD Open Window keys 03h WORD Switch Windows number 05h WORD segment of process handle 07h WORD number of tasks for process 09h WORD process mapping context 0Bh DWORD time process started (relative to start of DESQview) 0Fh DWORD time process last got CPU (relative to start of DESQview) 13h DWORD time process last gave up CPU (relative to start of DESQview) 17h DWORD total CPU time since process started 1Bh DWORD CPU time at start of current instantaneous interval 1Fh DWORD CPU time in current instantaneous interval 23h DWORD hook for other programs Note: all times are in 1/100s for v1.10, in 1/18s for v1.11+ ----------2FDE01BXFFFE----------------------- INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ??? AX = DE01h BX = FFFEh CX = 4D47h ("MG") DX = 0052h (0,"R") Return: AL = FFh DX = 584Dh ----------2FDE02----------------------------- INT 2F - DESQview v2.26+ External Device Interface - DV INITIALIZATION COMPLETE AX = DE02h BX = mapping context of DESQview DX = handle of DESQview system task SeeAlso: AX=DE03h Note: driver should pass this call to previous handler after doing its work ----------2FDE03----------------------------- INT 2F - DESQview v2.26+ External Device Interface - DV TERMINATION AX = DE03h BX = mapping context of DESQview DX = handle of DESQview system task SeeAlso: AX=DE02h Notes: driver should pass this call to previous handler before doing its work DESQview makes this call when it is exiting, but before unhooking any interrupt vectors ----------2FDE04----------------------------- INT 2F - DESQview v2.26+ External Device Interface - ADD PROCESS AX = DE04h BX = mapping context of new process DX = handle of process Return: nothing Notes: XMS XDI handler (installed by default) allocates a 22-byte record (see below) from "common" memory to control access to XMS memory all DOS, BIOS, and DV API calls are valid in handler driver should pass this call to previous handler after processing it SeeAlso: AX=DE05h Format of XMS XDI structure: Offset Size Description 00h DWORD pointer to 10-byte record??? 04h DWORD pointer to next XMS XDI structure 08h WORD mapping context 0Ah BYTE ??? 0Bh 5 BYTEs XMS entry point to return for INT 2F/AX=4310h (FAR jump to next field) 10h 6 BYTEs FAR handler for XMS driver entry point (consists of a FAR CALL followed by RETF) ----------2FDE05----------------------------- INT 2F - DESQview v2.26+ External Device Interface - REMOVE PROCESS AX = DE05h BX = mapping context of process DX = handle of last task in process Return: nothing Notes: XMS XDI handler releases the structure allocated by AX=DE04h driver should pass this call to previous handler before processing it all DOS, BIOS, and DV API calls except those generating a task switch are valid in handler SeeAlso: AX=DE04h ----------2FDE06----------------------------- INT 2F - DESQview v2.26+ External Device Interface - CREATE TASK AX = DE06h BX = mapping context of process containing task DX = handle of new task Notes: driver should pass this call to previous handler after processing it all DOS, BIOS, and DV API calls are valid in handler ----------2FDE07----------------------------- INT 2F - DESQview v2.26+ External Device Interface - TERMINATE TASK AX = DE07h BX = mapping context of process containing task DX = handle of task Notes: driver should pass this call to previous handler before processing it all DOS, BIOS, and DV API calls except those generating a task switch are valid in handler ----------2FDE08----------------------------- INT 2F - DESQview v2.26+ External Device Interface - SAVE STATE AX = DE08h BX = mapping context of task being switched from DX = handle of task being switched from Notes: invoked prior to task swap, interrupts, etc driver should pass this call to previous handler after processing it ----------2FDE09----------------------------- INT 2F - DESQview v2.26+ External Device Interface - RESTORE STATE AX = DE09h BX = mapping context of task being switched to DX = handle of task being switched to Notes: state is restored except for interrupts driver should pass this call to previous handler before processing it ----------2FDE0A----------------------------- INT 2F - DESQview v2.26+ External Device Interface - CHANGE KEYBOARD FOCUS AX = DE0Ah BX = mapping context of task receiving focus DX = handle of running task Notes: driver should pass this call to previous handler before processing it this call often occurs inside a keyboard interrupt ----------2FDE0B----------------------------- INT 2F - DESQview v2.26+ External Device Interface - DVP PROCESSING COMPLETE AX = DE0Bh BX = mapping context of DESQview system task CX = number of system memory paragraphs required for the use of all XDI drivers (DV will add this to system memory in DVP buffer) DX = handle of DESQview system task SI = mapping context of new process if it starts ES:DI -> DVP buffer Return: CX incremented as needed Notes: once DV invokes this function, the DVP buffer contents may be changed driver should pass this call to previous handler before processing it ----------2FDE0C----------------------------- INT 2F - DESQview v2.26+ External Device Interface - SWAP OUT PROCESS AX = DE0Ch BX = mapping context of task being swapped out DX = handle of DESQview system task Note: driver should pass this call to previous handler after processing it ----------2FDE0D----------------------------- INT 2F - DESQview v2.26+ External Device Interface - SWAP IN PROCESS AX = DE0Dh BX = mapping context of process just swapped in DX = handle of DESQview system task Note: driver should pass this call to previous handler before processing it ----------2FDE0E----------------------------- INT 2F - DESQview v2.26+ External Device Interface - DVP START FAILED AX = DE0Eh BX = mapping context of DESQview system task DX = handle of DESQview system task SI = mapping context of failed process (same as for call to AX=DE0Bh) Note: driver should pass this call to previous handler after processing it ----------2FDF--BX4448----------------------- INT 2F U - HyperDisk v4.20+ - INSTALLATION CHECK AH = DFh BX = 4448h ('DH') Return: AL = FFh if installed CX = 5948h ('YH') BX:DX -> ??? in resident portion if BX=4448h on entry Note: HyperDisk is a shareware disk cache by HyperWare (Roger Cross) SeeAlso: INT 13/AX=8EEDh ----------2FE300----------------------------- INT 2F - ANARKEY.COM - INSTALLATION CHECK AX = E300h Return: AL = 00h not installed FEh if installed but suspended (v3.0+) FFh installed Notes: ANARKEY.COM is a commandline recall program by Steven Calwas E3h is the default function number, but can be set to any value from C0h to FFh SeeAlso: AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h,AX=E307h ----------2FE301----------------------------- INT 2F U - ANARKEY.COM v2+ - GET ??? AX = E301h Return: DX:BX -> ??? SeeAlso: AX=E300h Format of returned data structure for ANARKEY v2.0: Offset Size Description -7 7 BYTEs signature ('ANARKEY') 00h WORD ??? (I see 0001h in v2.0) 02h WORD ??? (I see 0001h in v2.0) 04h WORD ??? (I see 0 in v2.0) 06h WORD PSP segment of next program loaded Format of returned data structure for ANARKEY v3+: Offset Size Description -1 BYTE multiplex number 00h WORD ??? (I see 0001h in v3.0-4.0) 02h WORD ??? (I see 0001h in v3.0-4.0) 04h BYTE ??? (I see 0 in v3.0-4.0) 05h WORD PSP segment of next program loaded ----------2FE302----------------------------- INT 2F U - ANARKEY.COM v3+ - ??? AX = E302h BL = ??? Return: ??? SeeAlso: AX=E300h ----------2FE303----------------------------- INT 2F U - ANARKEY.COM v3+ - ANARKMD API AX = E303h BL = function 01h toggle insert mode 02h display contents of history buffer 03h write history buffer to file ES:DX -> file name 04h clear history buffer 05h undefine all aliases 06h show aliases 07h list programs using Unix switchar 08h jump to bottom of history buffer 09h (v4.0) add string to history buffer ES:DX -> ASCIZ string 0Ah (v4.0) ??? ES:DX -> ??? 0Bh (v4.0) copy string to edit buffer for use as next input line ES:DX -> ASCIZ string 0Ch (v4.0) ??? 0Dh (v4.0) copy ??? to ??? 0Eh (v4.0) ??? 0Fh (v4.0) ??? 10h (v4.0) set ??? flag 11h (v4.0) display error message about running in EMS under Windows Return: ??? SeeAlso: AX=E300h ----------2FE304----------------------------- INT 2F U - ANARKEY.COM v2+ - ??? AX = E304h BL = ??? Return: ??? SeeAlso: AX=E300h ----------2FE305----------------------------- INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY AX = E305h BL = new state 01h suspended 00h enabled SeeAlso: AX=E300h ----------2FE306----------------------------- INT 2F U - ANARKEY.COM v4.0 - GET ??? AX = E306h Return: AX = ??? SeeAlso: AX=E300h ----------2FE307----------------------------- INT 2F U - ANARKEY.COM v4.0 - GET ??? AX = E307h Return: AX = ??? BL = ??? SeeAlso: AX=E300h ----------2FE44D----------------------------- INT 2F - NDOS - API AX = E44Dh Note: as NDOS is a licensed version of 4DOS v3.03, the API is identical to that for 4DOS, except that AH=E4h instead of D4h and the installation check returns AX=44EEh instead of AX=44DDh SeeAlso: AX=D44Dh,AX=E44Eh ----------2FE44EBX0000----------------------- INT 2F - NDOS - AWAITING USER INPUT AX = E44Eh BX = 0000h NDOS is ready to display prompt = 0001h NDOS has displayed the prompt, about to accept user input Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS SeeAlso: AX=E44Dh ----------2FED00----------------------------- INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK AX = ED00h BL = DOS extender 01h 286dosx v1.3+ (Software Development Kit) 02h 286dosx v1.3+ (Run-Time Kit) 03h 386dosx v4.0+ (SDK) 04h 386dosx v4.0+ (RTK) Return: AL = status 00h not installed FFh installed SI = 5048h ("PH") DI = 4152h ("AR") CH = major version number CL = minor version number DX = flags bit 0: running under DPMI 1: running under Phar Lap VMM SeeAlso: AH=A1h,AX=F100h,AX=FBA1h ----------2FEE00----------------------------- INT 2F - GRIDLOC.EXE - INSTALLATION CHECK AX = EE00h Return: AL = FFh if installed Note: GRIDLOC is a PC security program by Intelligent Security Systems, Inc. ----------2FF000----------------------------- INT 2F U - 4MAP - INSTALLATION CHECK AX = F000h Return: AX = 00FFh Notes: returns AX=00FFh for any value of AL not listed here 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng ----------2FF001----------------------------- INT 2F U - 4MAP - GET KEY MAPPINGS AX = F001h Return: ES:BX -> key mappings SeeAlso: AX=F000h ----------2FF002----------------------------- INT 2F U - 4MAP - INSERT CHARACTER INTO ??? AX = F002h BL = character to insert Return: AX = status 0000h successful 0001h buffer full SeeAlso: AX=F000h,AX=F003h ----------2FF003----------------------------- INT 2F U - 4MAP - INSERT CHARACTER INTO ??? AX = F003h BL = character to insert Return: AX = status 0000h successful 0001h buffer full SeeAlso: AX=F000h,AX=F002h ----------2FF1------------------------------- INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK AH = F1h AL <> F1h Return: AL = F1h if installed Note: MIN-MEM is a shareware TSR manager by Biologic which permits up to 24 popup TSRs to be loaded but swapped out to disk, EMS, or XMS. One TSR at a time is brought back into memory at the user's request. ----------2FF100----------------------------- INT 2F - DOS EXTENDER INSTALLATION CHECK AX = F100h Return: AL = FFh if DOS extender present SI = 444Fh ("DO") DI = 5358h ("SX") Note: supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h ----------2FF700----------------------------- INT 2F - AUTOPARK.COM - INSTALLATION CHECK AX = F700h Return: AL = 00h not installed FFh installed Note: AUTOPARK.COM is a resident hard disk parker by Alan D. Jones ----------2FF701----------------------------- INT 2F - AUTOPARK.COM - SET PARKING DELAY AX = F701h BX:CX = 32-bit count of 55ms timer ticks ----------2FFB------------------------------- INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL AH = FBh ----------2FFB00----------------------------- INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK AX = FB00h Return: AX = 00FFh if installed Note: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. SeeAlso: INT 10/AH=38h,INT 14/AX=F0F1h ----------2FFB00----------------------------- INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK AX = FB00h Return: AX = FFFFh if installed BX = version (BCD, BH=major, BL=minor) SeeAlso: AX=FB03h"Jot-It",AX=FB01h"Jot-It" ----------2FFB01----------------------------- INT 2F U - AutoBraille v1.1A - ??? AX = FB01h ??? Return: ??? ----------2FFB01----------------------------- INT 2F U - Jot-It! v1.50 - GET USER NAME AX = FB01h Return: DX:BX -> ASCIZ user name SeeAlso: AX=FB02h"Jot-It" ----------2FFB02----------------------------- INT 2F U - AutoBraille v1.1A - ??? AX = FB02h Return: AH = ??? AL = ??? ----------2FFB02----------------------------- INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY AX = FB02h Return: DX:BX -> ASCIZ name of directory in which messages are stored SeeAlso: AX=FB01h"Jot-It" ----------2FFB03----------------------------- INT 2F U - AutoBraille v1.1A - GET NEXT ??? AX = FB03h Return: AX = ??? ----------2FFB03----------------------------- INT 2F U - Jot-It! v1.50 - UNINSTALL AX = FB03h Return: resident code removed from memory Note: CAUTION: NO checks are performed to ensure that the interrupt vectors being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code SeeAlso: AX=FB00h"Jot-It" ----------2FFB------------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AH = FBh AL = 04h-08h Return: AX = 0000h ----------2FFB------------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AH = FBh AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2) Return: ??? Note: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. ----------2FFB------------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AH = FBh AL = 10h-1Fh ??? Return: ??? ----------2FFB20----------------------------- INT 2F U - AutoBraille v1.1A - SET ??? FLAGS AX = FB20h BL = flags to set SeeAlso: AX=FB21h"AutoBraille" ----------2FFB21----------------------------- INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS AX = FB21h BL = flags to clear SeeAlso: AX=FB20h"AutoBraille" ----------2FFB22----------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AX = FB22h BL = ??? Note: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. ----------2FFB28----------------------------- INT 2F U - AutoBraille v1.1A - ??? AX = FB28h BX = ??? ??? Return: ??? SeeAlso: AX=FB29h"AutoBraille" ----------2FFB29----------------------------- INT 2F U - AutoBraille v1.1A - ??? AX = FB29h BX = ??? ??? Return: ??? SeeAlso: AX=FB28h"AutoBraille" ----------2FFB------------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AH = FBh AL = 2Bh-34h BX = ??? ----------2FFB35----------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AX = FB35h BL = ??? ----------2FFB36----------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AX = FB36h BL = ??? ----------2FFB37----------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AX = FB37h BL = ??? Note: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. ----------2FFB42BX0001----------------------- INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK??? AX = FB42h BX = 0001h Return: AX = version number??? (AL=major, AH=minor) CX = next-selector increment ---BC2.0--- ES:BX -> 80-byte buffer for ??? DX = DPMI version ---BC3.0--- BX = ??? (0000h) DX = ??? ES:SI -> list of valid selectors ??? Notes: The version of DPMILOAD distributed with BC++ v2.0 identifies itself as version 1.000, while the version distributed with BC++ 3.0 identifies itself as version 1.0; the former is 10864 bytes, the latter 22180 bytes. The BC2.0 version is a DPMI loader, while the BC3.0 version also adds a DPMI host and DOS extender the BC++ 2.0 version displays an error message if called with BX values other than 0001h-0008h ----------2FFB42BX0002----------------------- INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY AX = FB42h BX = 0002h CX = size in bytes DX = bit flags bit 2: set to allocate DOS memory, clear for DPMI memory SI = selector of descriptor to be modified to access allocated memory DI = selector of a second descriptor to be modified Return: AX = ??? or 0000h on error CX:DX = linear base address of DPMI memory block SI:DI = handle for DPMI memory block or FFFFh:FFFFh ??? Note: two segment descriptors may be set if a code and an aliased data segment are required; if only one descriptor is needed, SI should equal DI on entry BUG: when allocating DOS memory, the code computes the linear address by multiplying the segment number by 4 rather than shifting by 4 SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h ----------2FFB42BX0002----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY AX = FB42h BX = 0002h ES:SI -> memory block info (see below) Return: ??? Note: The version of DPMILOAD distributed with BC++ v2.0 identifies itself as version 1.000, while the version distributed with BC++ 3.0 identifies itself as version 1.0; the former is 10864 bytes, the latter 22180 bytes. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h Format of memory block info: Offset Size Description 00h WORD flags bit 0: set if data segment rather than code segment bit 1: information valid bit 2: set if DOS memory block rather than DPMI memory block bit 4: ??? bit 15: set if no LDT selectors for memory block??? 02h DWORD block size in bytes ---DPMI memory block--- 06h DWORD DPMI memory block handle ---DOS memory block--- 06h WORD real-mode segment of memory block 08h WORD selector of memory block --- 0Ah DWORD linear address of memory 0Eh WORD memory operation error code 0008h no more free LDT descriptors ---if flags bit 0 clear--- 10h WORD code segment selector for memory block or 0000h or FFFFh 12h WORD data alias selector for memory block or 0000h or FFFFh ---if flags bit 0 set--- 10h WORD data segment selector for memory block or 0000h or FFFFh 12h WORD unused??? ----------2FFB42BX0003----------------------- INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY AX = FB42h BX = 0003h Return: DX:AX = size of largest free block in paragraphs 0000h:0000h on error (BC3.0 version only) Note: AX and DX are destroyed on error, but no other error indicator is returned, under the BC++ 2.0 version of DPMILOAD SeeAlso: AX=FB42h/BX=0002h ----------2FFB42BX0004----------------------- INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE??? AX = FB42h BX = 0004h DS:DX -> ASCIZ filename of protected-mode executable Return: CX = selector of ??? or 0000h ---BC3.0--- DX = status (0000h,FFF4h,others???) (see below) Note: the filename may also be terminated by a CR rather than a NUL under the BC++ 3.0 version of DPMILOAD Values for status: 0000h successful 0001h ??? failure 0002h invalid selector 0004h unknown error 0008h no more LDT descriptors available??? FFDEh unable to set descriptor FFDFh unable to get segment base address FFE0h ??? FFF2h invalid parameter value FFF4h component of filename too long (name not in 8.3 format) FFF5h pathname too long (>79 chars) FFF6h ??? FFF8h ??? FFF9h index out of range FFFAh ??? FFFCh invalid access to code segment??? FFFEh ??? FFFFh general error ----------2FFB42BX0005----------------------- INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME AX = FB42h BX = 0005h CX = selector of DPMILOAD data (see below) DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored) Return: DX = status (see AX=FB42h/BX=0004h) 0000h successful AX:BX -> ??? FAR function (called with two words on top of stk) else BX destroyed SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh Format of DPMILOAD data: Offset Size Description 00h 12 BYTEs ??? 0Ch WORD ??? bit flags 0Eh 14 BYTEs ??? 1Ch WORD number of memory control records 1Eh 25 BYTEs ??? 37h BYTE ??? bit flags bit 4: data valid??? 38h 4 BYTEs ??? 3Ch WORD ??? 3Eh 12 BYTEs ??? 46h BYTE ??? counter 47h BYTE ??? 48h BYTE ??? 49h BYTE ??? 4Ah WORD ??? 4Ch 2 BYTEs ??? 4Eh WORD offset of array of 64-byte memory control records 52h WORD offset of name list (see below) 54h 4 BYTEs ??? 58h WORD offset of array of 6-byte objects 5Ah 8 BYTEs ??? 62h 9 BYTEs ASCIZ name for ??? 6Bh 9 BYTEs ASCIZ name for ??? ??? Format of name list entry [array]: Offset Size Description 00h BYTE length of name (00h if end of array) 01h N BYTEs name N+1 WORD 1-based index into array of unknown 6-byte objects Format of 6-byte objects: Offset Size Description 00h BYTE ??? 01h BYTE ??? 02h BYTE ??? 03h BYTE 1-based index of memory control record 04h WORD ??? Format of memory control record: Offset Size Description 00h 20 BYTEs memory block info (see AX=FB42h/BX=0002h) 14h 6 BYTEs ??? 1Ah BYTE ??? 1Bh 2 BYTEs ??? 1Dh BYTE ??? bit flags 1Eh 14 BYTEs ??? 2Ch DWORD pointer to ??? memory control record or 0000h:0000h 30h DWORD pointer to ??? memory control record or 0000h:0000h 34h DWORD pointer to next??? memory control record or 0000h:0000h 38h DWORD pointer to prev??? memory control record or 0000h:0000h 3Ch 4 BYTEs ??? Note: the pointers at offsets 2Ch and 30h form a doubly-linked list, as do the pointers at offsets 34h and 38h ----------2FFB42BX0006----------------------- INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER AX = FB42h BX = 0006h CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) DX = 1-based index into array of ??? 6-byte objects Return: DX = status (see AX=FB42h/BX=0004h) 0000h successful AX:BX -> ??? FAR function (called with two words on top of stk) else BX destroyed SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh ----------2FFB42BX0007----------------------- INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0007h CX = selector of ??? Return: ??? Note: The version of DPMILOAD distributed with BC++ v2.0 identifies itself as version 1.000, while the version distributed with BC++ 3.0 identifies itself as version 1.0; the former is 10864 bytes, the latter 22180 bytes. ----------2FFB42BX0007----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0007h CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) ??? Return: DX = status (see AX=FB42h/BX=0004h) 0000h successful AX = ??? ----------2FFB42BX0008----------------------- INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK AX = FB42h BX = 0008h CX = bit flags bit 2: set if DPMI memory, clear if DOS memory DX = selector of DOS memory block SI:DI = handle of DPMI memory block Return: DX = 0000h on error, unchanged if succcessful Note: The version of DPMILOAD distributed with BC++ v2.0 identifies itself as version 1.000, while the version distributed with BC++ 3.0 identifies itself as version 1.0; the former is 10864 bytes, the latter 22180 bytes. SeeAlso: AX=FB42h/BX=0002h ----------2FFB42BX0008----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK AX = FB42h BX = 0008h ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0") Return: ??? SeeAlso: AX=FB42h/BX=0009h ----------2FFB42BX0009----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK AX = FB42h BX = 0009h ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0") ??? Return: ??? SeeAlso: AX=FB42h/BX=0008h"3.0" ----------2FFB42BX000A----------------------- INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL AX = FB42h BX = 000Ah CX = 0001h DX = ??? SI = ??? Return: after user exits subshell Notes: this call is used by DPMIRES; unlike most of the DPMILOAD calls, this function is not available in protected mode. the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0 version also adds a DPMI host and DOS extender. SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h ----------2FFB42BX000B----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED AX = FB42h BX = 000Bh ----------2FFB42BX000C----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK??? AX = FB42h BX = 000Ch ??? ES:SI -> memory block info ??? (see AX=FB42h/BX=0002h"3.0") Return: DX = status??? SeeAlso: AX=FB42h/BX=000Fh ----------2FFB42BX000D----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT AX = FB42h BX = 000Dh CX = number of words to copy from protected-mode to real mode stack DL = interrupt number DH = flags bit 0: reset the interrupt controller and A20 line ES:DI -> real-mode call structure (see INT 31/AX=0300h) Return: CX = status 0000h successful 0001h failed SeeAlso: INT 31/AX=0300h ----------2FFB42BX000E----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ??? AX = FB42h BX = 000Eh DS:DX -> ASCIZ or CR-terminated name of ??? Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) corresponding to name, 0000h on error SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh ----------2FFB42BX000F----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK??? AX = FB42h BX = 000Fh ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0") Return: ??? SeeAlso: AX=FB42h/BX=000Ch ----------2FFB42BX0010----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR AX = FB42h BX = 0010h DX = segment number Return: CX = status (see also AX=FB42h/BX=0004h) 0000h successful DX = selector number for descriptor 0008h failed SeeAlso: AX=FB42h/BX=0023h ----------2FFB42BX0011----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0011h CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) ??? Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful AX:BX -> ??? name 0002h invalid selector FFFEh ??? error ----------2FFB42BX0012----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0012h CX = selector for ??? Return: CX = selector for ??? ----------2FFB42BX0013----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0013h CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) DX = 1-based index of ??? Return: CX = status (see also AX=FB42h/BX=0004h) 0000h successful BX = ??? or 0000h 0002h invalid selector FFF9h ??? error ----------2FFB42BX0014----------------------- INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0014h ??? CX = 0001h Return: BX = 0000h Note: unlike most of the DPMILOAD functions, this call is available only in real or V86 mode SeeAlso: AX=FB42h/BX=000Ah ----------2FFB42BX0015----------------------- INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0015h uninstall CX = 0001h Return: ??? Note: unlike most of the DPMILOAD functions, this call is available only in real or V86 mode SeeAlso: AX=FB42h/BX=000Ah ----------2FFB42BX0016----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ??? AX = FB42h BX = 0016h CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful CX = ??? ----------2FFB42BX0017----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0017h CX = ??? DX = ??? ??? Return: DX = status (0000h,0001h) (see below) ----------2FFB42BX0018----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ??? AX = FB42h BX = 0018h CX = ??? ----------2FFB42BX0019----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0019h CX = selector for ??? ??? Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful CX = selector for ??? ----------2FFB42BX001A----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 001Ah CX = selector for ??? ??? Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful 0004h failed CX:BX -> ??? ----------2FFB42BX001B----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 001Bh CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) DX = offset of ??? Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful BX = selector for ??? CX = selector for ??? 0002h invalid selector ----------2FFB42BX001C----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 001Ch ES = selector for DPMILOAD data (see AX=FB42h/BX=0005h) CX = 1-based index of ??? DX = 1-based index of ??? Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h) ----------2FFB42BX001D----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ??? AX = FB42h BX = 001Dh Return: CX:DX = ??? ----------2FFB42BX001E----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 001Eh CX = ??? ??? Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful FFF7h ??? error CX:BX -> ??? ----------2FFB42BX001F----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ??? AX = FB42h BX = 001Fh DS:DX -> 8-character name of ??? ??? Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) for ??? 0000h on error SeeAlso: AX=FB42h/BX=000Eh ----------2FFB42BX0020----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION??? AX = FB42h BX = 0020h Return: DX = ??? (always 0000h) ----------2FFB42BX0021----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT AX = FB42h BX = 0021h CL = exception number (00h-1Fh) Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful AX:BX = selector:offset of handler FFF2h unable to get exception handler vector SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h ----------2FFB42BX0022----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT AX = FB42h BX = 0022h CL = exception number (00h-1Fh) SI:DX = selector:offset of new handler Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h) SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h ----------2FFB42BX0023----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER AX = FB42h BX = 0023h CX = selector Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful CX = real-mode segment number FFF2h descriptor has invalid base address for real-mode segment SeeAlso: AX=FB42h/BX=0010h ----------2FFB42BX0024----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR AX = FB42h BX = 0024h CL = interrupt number Return: DX = status (0000h) (see also AX=FB42h/BX=0004h) AX:BX = selector:offset of handler SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h ----------2FFB42BX0025----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR AX = FB42h BX = 0025h CL = interrupt number SI:DX = selector:offset of new handler Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h) SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h ----------2FFB42BX0026----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0026h CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) DX = 1-based index of ??? ??? Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h) 0000h successful BX = offset of ??? within data structure ----------2FFB42BX0027----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ??? AX = FB42h BX = 0027h CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) DX = offset of ??? Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful BX = ??? ----------2FFB42BX0080----------------------- INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE AX = FB42h BX = 0080h ??? Return: AX = ??? ??? ----------2FFB42BX0081----------------------- INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE AX = FB42h BX = 0081h ??? Return: AX = ??? ??? ----------2FFB43----------------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION AX = FB43h BX = subfunction (at least 0000h-000Eh) Notes: this function is only present in protected mode; it does nothing but an immediate IRET DPMILOAD.EXE itself calls various subfunctions: subfunction 0004h is called with CX=selector of ???, DI=selector of DPMILOAD data subfunction 0008h is called with CX=selector of DPMILOAD data ----------2FFB64----------------------------- INT 2F U - AutoBraille v1.1A - GET ??? AX = FB64h Return: AX = ??? (0006h seen) Note: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. ----------2FFBA1BX0081----------------------- INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK AX = FBA1h BX = 0081h ES:DI -> 16-byte buffer Return: if installed, first four bytes of ES:DI buffer are "IABH" Note: TKERNEL is a licensed version of AI Architects/Ergo's OS/x86. It was present only in Borland C++ 2.0; with version 3.0, the DOS extender was moved into DPMILOAD. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h SeeAlso: INT 21/AX=4403h"TKERNEL" ----------2FFBA1BX0082----------------------- INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT AX = FBA1h BX = 0082h ES:DI -> response buffer (see below) Return: ES:DI buffer filled SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h Format of response buffer: Offset Size Description 00h 4 BYTEs signature "IABH" 04h DWORD pointer to FAR extender entry point Call entry point with: AX = function number 0000h initialize??? STACK: WORD ??? Return: AX = status??? STACK unchanged 0001h get version??? Return: AX = 0200h for v2.0.34 0002h get ??? Return: AX = ??? (011Eh or 0182h seen) 0003h load protected-mode executable STACK: DWORD -> ASCIZ filename of executable DWORD ??? DWORD -> program arguments (counted string plus CR) DWORD -> environment for protected-mode executable (terminated with two consecutive NULs) DWORD -> WORD buffer for ??? Return: AX = status??? STACK unchanged 0004h get descriptor STACK: WORD selector for which to get descriptor WORD segment number (when running in real mode) DWORD -> buffer for descriptor Return: CF clear if successful buffer filled CF set on error AX destroyed??? STACK unchanged 0005h ??? STACK: WORD selector for ??? WORD subfunction number??? 0000h run previously-loaded program??? 0001h ??? (similar to 0000h) 0002h 0003h 0005h ??? (similar to 0000h and 0001h) Return: AX = status??? STACK unchanged 0006h ??? STACK: WORD ??? DWORD -> WORD (call) max iterations of ??? (return) remaining iterations Return: AX = ??? STACK unchanged 0007h unused Return: AX = 0001h 0008h unused Return: AX = 0001h 0009h copy protected-mode memory into conventional memory STACK: WORD selector for source segment WORD segment of source if in real mode??? DWORD offset of source WORD number of bytes to copy DWORD -> low-memory destination Return: AX = status STACK unchanged 000Ah copy conventional memory into protected-mode memory STACK: WORD selector for destination segment WORD segment of destination if in real mode??? DWORD offset of destination WORD number of bytes to copy DWORD -> low-memory source Return: AX = status STACK unchanged 000Bh get ??? pointers STACK: WORD desired pointer 0000h get ??? 0002h get protected-mode CR3 0003h get 4K page table buffer pointer else Return: DX:AX = FFFFh:FFFFh Return: DX:AX = requested pointer STACK unchanged 000Ch set ??? pointers STACK: WORD desired pointer 0000h set ??? 0002h set protected-mode CR3 0003h set 4K page table buffer pointer else ignore DWORD new value for pointer Return: STACK unchanged 000Dh get ??? pointers STACK: WORD desired pointer 0000h get ??? 0001h get ??? 0002h get ??? 0003h get ??? 0004h get ??? 0005h get ??? 0006h get ??? 0007h get ??? else Return: DX:AX = FFFFh:FFFFh Return: DX:AX = desired pointer STACK unchanged 000Eh set ??? pointer STACK: WORD desired pointer 0000h set ??? 0001h set ??? 0002h set ??? 0003h set ??? 0004h set ??? 0005h set ??? 0006h set ??? 0007h set ??? else Return: DX:AX = FFFFh:FFFFh Return: STACK unchanged 000Fh get ??? Return: AX = ??? (seen 0008h) 0010h get ??? Return: AX = ??? 0011h determine whether selector is valid STACK: WORD possible selector Return: AX = selector or 0000h if invalid STACK unchanged 0012h get physical address STACK: WORD selector for desired segment WORD segment number if in real mode DWORD offset within segment Return: DX:AX = 32-bit physical address or 00000000h on error BX destroyed STACK unchanged 0013h ??? Note: normally jumps to code for function 0012h 0014h copy protected-mode memory to conventional memory, with ??? STACK: WORD selector for source segment WORD segment of source if in real mode??? DWORD offset of source WORD number of bytes to copy DWORD -> low-memory destination Return: AX = status??? STACK unchanged 0015h copy conventional memory to protected-mode memory, with ??? STACK: WORD selector for destination segment WORD segment of destination if in real mode??? DWORD offset of destination WORD number of bytes to copy DWORD -> low-memory source Return: AX = status??? STACK unchanged 0016h set ??? pointer STACK: WORD unused DWORD -> ??? or 0000h:0000h Return: AX = 0000h STACK unchanged 0017h allocate real-mode procedure??? STACK: DWORD ASCIZ name of procedure DWORD ??? DWORD address of subroutine to invoke Return: AX = status 0032h procedure by that name exists 0033h no more real-mode procedures available DX destroyed STACK unchanged 0018h unused Return: AX = 0001h 0019h get parameter block Return: DX:AX -> parameter block (format unknown at this time, but 92h bytes) (preceded by signature "!!PARAM-BLOCK!!") 001Ah get ??? Return: AX = ??? (0148h seen) 001Bh free real-mode procedure??? STACK: DWORD -> ASCIZ name of procedure Return: ??? STACK unchanged 001Ch check whether packets from protected mode task pending Return: AX = 0001h if packets pending, 0000h if not 001Dh set ??? STACK: DWORD ??? or 0000h:0000h Return: AX,BX destroyed STACK unchanged 001Eh ??? STACK: WORD ??? (high byte ignored) DWORD -> data structure (see below) Return: AX,BX,CX,DX destroyed data structure updated STACK unchanged Format of data structure Offset Size Description 00h 2 BYTEs unused 02h WORD ??? 04h WORD ??? 06h WORD ??? 08h 2 BYTEs unused 0Ah WORD ??? 0Ch WORD (call) ??? (return) offset of this data structure (BUG?) 001Fh set ??? STACK: WORD ??? (set to 0001h if zero) Return: AX destroyed STACK unchanged 0020h ??? STACK: DWORD -> ??? (8 bytes of data) Return: AX = ??? STACK unchanged 0021h ??? STACK: DWORD -> ??? (8 bytes of data) WORD ??? WORD ??? Return: AX = ??? STACK unchanged 0022h ??? STACK: DWORD -> ??? (8 bytes of data) DWORD -> 4-byte buffer for results Return: AX = ??? STACK unchanged 0023h ??? STACK: DWORD -> ??? (8 bytes of data) Return: AX = ??? STACK unchanged 0024h set ??? STACK: WORD ??? Return: AX destroyed STACK unchanged 0025h get ??? Return: AX = ??? (value set with func 0024h) 0026h BUG: jumps to hyperspace due to fencepost error FFFFh set DOS memory management functions BX:SI -> FAR routine for allocating DOS memory (called with AH=48h,BX=number of paragraphs to alloc; returns CF clear, AX=segment of allocated memory, or CF set on error) CX:DI -> FAR routine for freeing DOS memory (called with AH=49h,ES=segment of block to free; returns CF set on error,AX=error code) Note: each of these pointers normally points at INT 21/RETF other Return: AX = 0001h Note: BX may be destroyed by any of the API calls ----------2FFBA1BX0084----------------------- INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL AX = FBA1h BX = 0084h ES:DI -> response buffer (see below) Return: ES:DI buffer filled SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h Format of response buffer: Offset Size Description 00h 4 BYTEs signature "IABH" 04h WORD success indicator 0001h failed (INT 2F hooked by another program) unchanged if successful 06h WORD segment of ??? 08h WORD segment of ??? memory block to free if nonzero 0Ah WORD segment of ??? memory block to free if nonzero ----------2FFBFBES0000----------------------- INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK AX = FBFBh ES = 0000h Return: ES nonzero if installed ES:BX -> entry point data structure (see below) SeeAlso: INT 80/BX=0000h,INT F3"SoundBlaster" Format of entry point data structure: Offset Size Description 00h 3 BYTEs signature "FB " 03h BYTE driver major version number??? 04h DWORD speech driver entry point 08h 24 BYTEs ??? 20h ? BYTEs data buffer for calling speech driver Call driver entry point with: AL = function 07h speak a string data buffer (see above) contains: BYTE length of string N BYTEs string to speak ----------2FFE00DI4E55----------------------- INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT AX = FE00h DI = 4E55h ("NU") SI = TSR identifier 4346h ("CF") NCACHE-F (v5) / NCACHE (v6.0+) 4353h ("CS") NCACHE-S (v5 only) 4443h ("DC") DISKREET 444Dh ("DM") DISKMON 4653h ("FS") FILESAVE (v5) / EP (v6.0+) Return: SI = TSR reply lowercase version of SI on entry (i.e. SI OR 2020h) AH = status 00h installed but disabled internally 01h installed and enabled AL = status 00h NCACHE-x or DISKREET installed 01h FILESAVE / EP / DISKMON v6 installed 45h DISKMON v5 installed BX = length of *.INI file (DISKMON and FILESAVE/EP only) (see below) CX = segment of resident portion FFFFh if completely loaded high (NCACHE) ---FILESAVE/EP--- DL = ??? (apparently always 00h) ---DISKMON--- DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6]) Note: the value returned in CX is incorrect for NCACHE 6.00 SeeAlso: AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h Format of DISKMON.INI file: Offset Size Description -6Ch 108 BYTEs (in memory copy only) list of filenames which are always protected: IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS, MIO.SYS/IO.BIN, COMMAND.COM 00h BYTE ??? always 01h 01h BYTE disk light (00h off, 01h on) 02h BYTE disk protection (00h off, 01h on) 03h BYTE protected areas 01h system area 02h files 03h system area and files 04h entire disk 04h BYTE floppy access (00h not allowed, 01h allowed) 05h 27 BYTEs filename extension list (9 entries) (lowercase, blank padded or = 000000h) 20h 240 BYTEs filename list (20 entries) (lowercase, name and extension blank padded, with '.') Note: CX:0508h -> copy in installed TSR (v5) CX:052Fh -> copy in installed TSR (v6) Format of FILESAVE.INI / EP.INI file: Offset Size Description 00h 26 BITs drive list (bit set: file protection on, cleared: off): 00h BYTE drives A: - H: 01h BYTE drives I: - P: 02h BYTE drives Q: - X: 03h BYTE drives Y: - Z: 04h BYTE which files to protect 00h all files 01h all files with extension in list 02h all files except those with extension in list 05h 27 BYTEs filename extension list (9 entries, uppercase, ASCIZ) 20h BYTE include files with archive bit clear (00h no, 01h yes) 21h WORD number of days after which files are purged (0 = never) 23h WORD max kilobytes of erased file space to hold (0 = all) Note: CX:03D2h -> copy in installed TSR (v5.0) CX:03F5h -> copy in installed TSR (v6.0) ----------2FFE01DI4E55----------------------- INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE AX = FE01h DI = 4E55h ("NU") SI = TSR identifier (see AX=FE00h) Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h) AX = status 0002h successful (DISKMON, FILESAVE, EP) FE00h successful (NCACHE-x, DISKREET) Notes: if the enable/disable calls are used on DISKMON or NCACHE-x, the status report generated by the programs still indicates the previous state, and DISKMON.INI is not updated apparently has no effect on DISKREET SeeAlso: AX=FE00h,AX=FE02h ----------2FFE02DI4E55----------------------- INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE AX = FE02h DI = 4E55h ("NU") SI = TSR identifier (see AX=FE00h) Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h) AX = status 0004h successful (DISKMON, FILESAVE) FE00h successful (NCACHE-x, DISKREET) Note: (see AX=FE01h) SeeAlso: AX=FE00h,AX=FE01h ----------2FFE03DI4E55----------------------- INT 2F U - NORTON UTILITIES 5.0+ TSRs - internal - ??? AX = FE03h DI = 4E55h ("NU") SI = TSR identifier (see AX=FE00h) Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h) AX = status 0006h successful??? Notes: only supported by DISKMON, FILESAVE, and NCACHE-x reportedly dangerous SeeAlso: AX=FE00h ----------2FFE04DI4E55----------------------- INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ??? AX = FE04h DI = 4E55h ("NU") SI = TSR identifier (see AX=FE00h) Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h) AX = status 0008h successful??? SeeAlso: AX=FE00h ----------2FFE05DI4E55----------------------- INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ??? AX = FE05h DI = 4E55h ("NU") SI = TSR identifier (see AX=FE00h) Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h) AX = status 000Ah successful??? Note: reportedly dangerous SeeAlso: AX=FE00h ----------2FFF00----------------------------- INT 2F - Topware Network Operating System - INSTALLATION CHECK AX = FF00h Return: AL = 00h not installed, OK to install = 01h not installed, not OK to install = FFh installed SeeAlso: AX=FF01h,INT 21/AH=FFh"Topware",INT 7A"Topware" ----------2FFF01----------------------------- INT 2F - Topware Network Operating System - GET VERSION AX = FF01h Return: AX = version SeeAlso: AX=FF00h ----------30--------------------------------- INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls the CALL 5 entry point does a FAR jump to here Note: under DOS 2+, the instruction at PSP:0005 points two bytes too low in memory SeeAlso: INT 21/AH=26h ----------31--------------------------------- INT 31 - overwritten by CP/M jump instruction in INT 30 ----------310000----------------------------- INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS AX = 0000h CX = number of descriptors to allocate Return: CF clear if successful AX = base selector CF set on error AX = error code (DPMI 1.0+) 0000h-7FFFh DOS error passed through by DPMI 8001h unsupported function 8002h object in wrong state for function 8003h system integrity would be endangered 8004h deadlock detected 8005h pending serialization request cancelled 8010h out of DPMI internal resources 8011h descriptor unavailable 8012h linear memory unavailable 8013h physical memory unavailable 8014h backing store unavailable 8015h callback unavailable 8016h handle unavailable 8017h maximum lock count exceeded 8018h shared memory already serialized exclusively by another 8019h shared memory already serialized shared by another client 8021h invalid value for numeric or flag parameter 8022h invalid segment selector 8023h invalid handle 8024h invalid callback 8025h invalid linear address 8026h request not supported by hardware Notes: DPMI is the DOS Protected-Mode Interface the base and limit of the returned descriptors will be 0, and the type will be "data" add the value returned by INT 31/AX=0003h to move to subsequent descriptors if multiple descriptors were allocated not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0001h,AX=000Dh ----------310001----------------------------- INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR AX = 0001h BX = selector to free Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8022h) (see AX=0000h) Notes: only one descriptor is freed per call the program's initial CS, DS, and SS descriptors may be freed (DPMI 1.0+) any segment registers containing the freed selector are set to 0000h not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0000h,AX=000Ah,AX=000Dh ----------310002----------------------------- INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR AX = 0002h BX = real mode segment Return: CF clear if successful AX = selector corresponding to real mode segment (64K limit) CF set on error AX = error code (DPMI 1.0+) (8011h) (see AX=0000h) Notes: multiple calls for the same real mode segment return the same selector the returned descriptor can never be modified or freed not supported by MS Windows 3.0 in Standard mode ----------310003----------------------------- INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE AX = 0003h Return: CF clear AX = value to add to get next sequential selector Notes: the increment will be a power of two not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0000h ----------310004----------------------------- INT 31 P - DPMI 0.9+ - LOCK SELECTOR AX = 0004h BX = selector to lock (prevent paging) Return: ??? Note: although marked as reserved in versions 0.9 and 1.0 of the DPMI specification, this function is called by MS Windows TASKMAN, PROGMAN, and KERNEL SeeAlso: AX=0005h,AX=0600h ----------310005----------------------------- INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR AX = 0005h BX = selector to unlock (permit paging) Return: ??? Note: although marked as reserved in versions 0.9 and 1.0 of the DPMI specification, this function is called by MS Windows TASKMAN, PROGMAN, and KERNEL SeeAlso: AX=0004h,AX=0601h ----------310006----------------------------- INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS AX = 0006h BX = selector Return: CF clear if successful CX:DX = linear base address of segment CF set on error AX = error code (DPMI 1.0+) (8022h) (see AX=0000h) Note: not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0007h ----------310007----------------------------- INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS AX = 0007h BX = selector CX:DX = linear base address Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8022h,8025h) (see AX=0000h) Notes: only modify descriptors allocated with INT 31/AX=0000h only the low 24 bits of the address will be used by 16-bit DPMI implementations even on a 386 or higher DPMI 1.0+ automatically reloads any segment registers containing the selector being modified not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AH=E9h"OS/286" ----------310008----------------------------- INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT AX = 0008h BX = selector CX:DX = segment limit Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h) Notes: CX must be zero for 16-bit DPMI implementations limits greater than 1MB must be page aligned (low 12 bits set) only modify descriptors allocated with INT 31/AX=0000h DPMI 1.0+ automatically reloads any segment registers containing the selector being modified not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AH=E9h"OS/286" ----------310009----------------------------- INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS AX = 0009h BX = selector CL = access rights/type byte CH = 80386 extended rights/type byte (32-bit DPMI implementations only) Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h) Notes: if the Present bit is clear, CL bits 0-3 may have any value DPMI 1.0+ automatically reloads any segment registers containing the selector being modified not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h ----------31000A----------------------------- INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR AX = 000Ah BX = selector Return: CF clear if successful AX = new data selector CF set on error AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h) Notes: fails if selector in BX is not a code segment or is invalid use INT 31/AX=0001h to free new selector future changes to the original selector will not be reflected in the returned alias selector not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0001h ----------31000B----------------------------- INT 31 P - DPMI 0.9+ - GET DESCRIPTOR AX = 000Bh BX = LDT selector ES:(E)DI -> 8-byte buffer for copy of descriptor Return: CF clear if successful buffer filled CF set on error AX = error code (DPMI 1.0+) (8022h) (see AX=0000h) Notes: 16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=000Ch ----------31000C----------------------------- INT 31 P - DPMI 0.9+ - SET DESCRIPTOR AX = 000Ch BX = LDT selector ES:(E)DI -> 8-byte buffer containing descriptor Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h) Notes: 16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI only modify descriptors allocated with INT 31/AX=0000h DPMI 1.0+ automatically reloads any segment registers containing the selector being modified not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=000Bh ----------31000D----------------------------- INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR AX = 000Dh BX = LDT selector Return: CF clear if successful descriptor allocated CF set on error AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h) Notes: free descriptor with INT 31/AX=0001h the first 16 descriptors (04h-7Ch) are reserved for this function, but some may already be in use by other applications under DPMI 0.9; DPMI 1.0 guarantees 16 descriptors per client not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0000h,AX=0001h ----------31000E----------------------------- INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS AX = 000Eh CX = number of descriptors to copy ES:(E)DI -> descriptor buffer (see below) Return: CF clear if successful descriptors copied CF set on error AX = error code (8022h) (see AX=0000h) CX = number of descriptors successfully copied Notes: 16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI if the function fails, the first CX descriptors are valid; the remainder are not modified SeeAlso: AX=000Bh,AX=000Fh Format of descriptor buffer entry (one per descriptor to get): Offset Size Description 00h WORD selector (set by client) 02h QWORD descriptor (set by host) ----------31000F----------------------------- INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS AX = 000Fh CX = number of descriptors to copy ES:(E)DI -> descriptor buffer (see below) Return: CF clear if successful descriptors copied CF set on error AX = error code (8021h,8022h,8025h) (see AX=0000h) CX = number of descriptors successfully copied Notes: 16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI if the function fails, the first CX descriptors are valid; the remainder are not modified DPMI 1.0+ automatically reloads any segment registers containing a selector being modified SeeAlso: AX=000Ch,AX=000Eh Format of descriptor buffer entry (one per descriptor to set): Offset Size Description 00h WORD selector 02h QWORD descriptor ----------310100----------------------------- INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK AX = 0100h BX = number of paragraphs to allocate Return: CF clear if successful AX = real mode segment of allocated block DX = first selector for allocated block CF set on error AX = DOS error code (07h,08h) (see INT 21/AH=59h) (DPMI 1.0+) DPMI error code (8011h) (see AX=0000h) BX = size (in paragraphs) of largest available block Notes: multiple contiguous selectors are allocated for blocks of more than 64K if the caller is a 16-bit program never modify or deallocate returned descriptors not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0101h,AX=0501h ----------310101----------------------------- INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK AX = 0101h DX = selector of block Return: CF set if successful CF set on error AX = DOS error code (07h,09h) (see INT 21/AH=59h) Notes: all descriptors allocated for the block are automatically freed DPMI 1.0+ automatically zeros any segment registers containing a selector freed by this function not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0100h,AX=0102h,AX=0502h ----------310102----------------------------- INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK AX = 0102h BX = new block size in paragraphs DX = selector of block Return: CF clear if successful CF set on error AX = DOS error code (07h,08h,09h) (see INT 21/AH=59h) (DPMI 1.0+) DPMI error code (8011h,8022h) (see AX=0000h) BX = maximum block size (in paragraphs) possible Notes: increasing the size of a block past a 64K boundary will fail if the next descriptor in the LDT is already in use shrinking a block past a 64K boundary will cause some selectors to be freed; DPMI 1.0+ automatically zeros any segment registers containing a selector freed by this function not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0100h ----------310200----------------------------- INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR AX = 0200h BL = interrupt number Return: CF clear CX:DX = segment:offset of real mode interrupt handler Note: the DPMI implementation is required to support all 256 vectors SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h ----------310201----------------------------- INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR AX = 0201h BL = interrupt number CX:DX = segment:offset of real mode handler Return: CF clear Note: all memory that may be touched by a hardware interrupt handler must be locked down with INT 31/AX=0600h SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h ----------310202----------------------------- INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR AX = 0202h BL = exception number (00h-1Fh) Return: CF clear if successful CX:(E)DX = selector:offset of handler CF set on error AX = error code (DPMI 1.0+) (8021h) (see AX=0000h) Notes: 16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX DPMI 1.0+ supports this function only for backward compatibility; use AX=0210h or AX=0211h instead not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h ----------310203----------------------------- INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR AX = 0203h BL = exception number (00h-1Fh) CX:(E)DX = selector:offset of handler Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8021h,8022h) (see AX=0000h) Notes: 32-bit programs must supply an offset in EDX and use a 32-bit interrupt stack frame on chaining to the next exception handler the handler should return using a FAR return all fault stack frames contain an error code, but it is only valid for exceptions 08h and 0Ah-0Eh handlers will only be called if the exception occurs in protected mode, and the DPMI host does not transparently handle the exception the handler may change certain values on the stack frame (see below) DPMI 1.0+ supports this function only for backward compatibility; use AX=0212h or AX=0213h instead not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h Format of stack frame for 16-bit programs: (offset from SS:SP) Offset Size Description 00h DWORD return CS:IP (do not change) 04h WORD error code 06h DWORD CS:IP of exception 0Ah WORD flags 0Ch DWORD SS:SP Format of stack frame for 32-bit programs: (offset from SS:ESP) Offset Size Description 00h DWORD return EIP (do not change) 04h WORD return CS selector (do not change) 06h WORD reserved (do not change) 08h DWORD error code 0Ch DWORD EIP of exception 10h WORD CS selector of exception 12h WORD reserved (do not change) 14h DWORD EFLAGS 18h DWORD ESP 1Ch WORD SS 1Eh WORD reserved (do not change) ----------310204----------------------------- INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR AX = 0204h BL = interrupt number Return: CF clear CX:(E)DX = selector:offset of handler Notes: 16-bit programs use CX:DX, 32-bit programs use CX:EDX DPMI implementations are required to support all 256 vectors not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2F/AX=FB42h/BX=0024h ----------310205----------------------------- INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR AX = 0205h BL = interrupt number CX:(E)DX = selector:offset of handler Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8022h) (see AX=0000h) Notes: 16-bit programs use CX:DX, 32-bit programs use CX:EDX 32-bit programs must use a 32-bit interrupt stack frame when chaining to the next handler DPMI implementations are required to support all 256 vectors hardware interrupts are reflected to the virtual machine's primary client, software interrupts to the current client not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2F/AX=FB42h/BX=0025h ----------310210----------------------------- INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER AX = 0210h BL = exception number (00h-1Fh) Return: CF clear if successful CX:(EDX) = selector:offset of exception handler CF set on error AX = error code (8021h) (see AX=0000h) Note: DPMI host reflects exception to current client's handler SeeAlso: AX=0202h,AX=0211h,AX=0212h ----------310211----------------------------- INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER AX = 0211h BL = exception number (00h-1Fh) Return: CF clear if successful CX:(EDX) = selector:offset of exception handler CF set on error AX = error code (8021h) (see AX=0000h) Notes: returns address of protected-mode handler for real-mode exception DPMI host performs a switch to protected mode, reflects the exception to the virtual machine's primary client, and returns to real mode on the handler's completion SeeAlso: AX=0202h,AX=0210h,AX=0213h ----------310212----------------------------- INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER AX = 0212h BL = exception or fault number (00h-1Fh) CX:(E)DX = exception handler selector:offset Return: CF clear if successful CF set on error AX = error code (8021h,8022h) (see AX=0000h) Note: DPMI host sends exception to current client's handler SeeAlso: AX=0203h,AX=0210h,AX=0213h ----------310213----------------------------- INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER AX = 0213h BL = exception or fault number (00h-1Fh) CX:(E)DX = exception handler selector:offset Return: CF clear if successful CF set on error AX = error code (8021h,8022h) (see AX=0000h) Notes: specifies address of protected-mode handler for real-mode exception DPMI host performs a switch to protected mode, reflects the exception to the virtual machine's primary client, and returns to real mode on the handler's completion SeeAlso: AX=0203h,AX=0211h,AX=0212h ----------310300----------------------------- INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT AX = 0300h BL = interrupt number BH = flags bit 0: reset the interrupt controller and A20 line (DPMI 0.9) reserved, must be 0 (DPMI 1.0+) others must be 0 CX = number of words to copy from protected mode to real mode stack ES:(E)DI = selector:offset of real mode call structure (see below) Return: CF clear if successful real mode call structure modified (all fields except SS:SP, CS:IP filled with return values from real mode interrupt) CF set on error AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h) protected mode stack unchanged Notes: 16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI CS:IP in the real mode call structure is ignored for this call, instead, the indicated interrupt vector is used for the address the flags in the call structure are pushed on the real mode stack to form an interrupt stack frame, and the trace and interrupt flags are clear on entry to the handler DPMI will provide a small (30 words) real mode stack if SS:SP is zero the real mode handler must return with the stack in the same state as it was on being called SeeAlso: AX=0302h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286" SeeAlso: INT 2F/AX=FB42h/BX=000Dh Format of real mode call structure: Offset Size Description 00h DWORD EDI 04h DWORD ESI 08h DWORD EBP 0Ch DWORD reserved (00h) 10h DWORD EBX 14h DWORD EDX 18h DWORD ECX 1Ch DWORD EAX 20h WORD flags 22h WORD ES 24h WORD DS 26h WORD FS 28h WORD GS 2Ah WORD IP 2Ch WORD CS 2Eh WORD SP 30h WORD SS ----------310301----------------------------- INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME AX = 0301h BH = flags bit 0: reset the interrupt controller and A20 line (DPMI 0.9) reserved, must be 0 (DPMI 1.0+) others must be 0 CX = number of words to copy from protected mode to real mode stack ES:DI / ES:EDI = selector:offset of real mode call structure (see INT 31/AX=0300h) Return: CF clear if successful real mode call structure modified (all fields except SS:SP, CS:IP filled with return values from real mode interrupt) CF set on error AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h) protected mode stack unchanged Notes: 16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI the real mode procedure must exit with a FAR return DPMI will provide a small (30 words) real mode stack if SS:SP is zero the real mode handler must return with the stack in the same state as it was on being called SeeAlso: AX=0300h,AX=0302h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286" ----------310302----------------------------- INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME AX = 0302h BH = flags bit 0: reset the interrupt controller and A20 line (DPMI 0.9) reserved, must be 0 (DPMI 1.0+) others must be 0 CX = number of words to copy from protected mode to real mode stack ES:DI / ES:EDI = selector:offset of real mode call structure (see INT 31/AX=0300h) Return: CF clear if successful real mode call structure modified (all fields except SS:SP, CS:IP filled with return values from real mode interrupt) CF set on error AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h) protected mode stack unchanged Notes: 16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI the flags in the call structure are pushed on the real mode stack to form an interrupt stack frame, and the trace and interrupt flags are clear on entry to the handler the real mode procedure must exit with an IRET DPMI will provide a small (30 words) real mode stack if SS:SP is zero the real mode handler must return with the stack in the same state as it was on being called SeeAlso: AX=0300h ----------310303----------------------------- INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS AX = 0303h DS:SI / DS:ESI = selector:offset of procedure to call ES:DI / ES:EDI = selector:offset of real mode call structure (see AX=0300h) Return: CF clear if successful CX:DX = segment:offset of real mode call address CF set on error AX = error code (DPMI 1.0+) (8015h) (see AX=0000h) Notes: the real mode call structure is static, causing reentrancy problems; its contents are only valid at the time of a callback the called procedure must modify the real mode CS:IP before returning values are returned to real mode by modifying the real mode call struc DPMI hosts must provide at least 16 callbacks per client SeeAlso: AX=0304h,AX=0C00h Values callback procedure is called with: DS:SI / DS:ESI = selector:offset of real mode SS:SP ES:DI / ES:EDI = selector:offset of real mode call structure SS:SP / SS:ESP = locked protected mode API stack interrupts disabled Return: (with IRET) ES:DI / ES:EDI = selector:offset of real mode call structure to restore ----------310304----------------------------- INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS AX = 0304h CX:DX = real mode callback address Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8024h) (see AX=0000h) SeeAlso: AX=0303h ----------310305----------------------------- INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES AX = 0305h Return: CF clear AX = size in bytes of state buffer BX:CX = real mode address of procedure to save/restore state SI:DI / SI:EDI = protected mode procedure to save/restore state Notes: the buffer size will be zero if it is not necessary to preserve state 16-bit programs should call SI:DI, 32-bit programs should call SI:EDI this function is only needed if using the raw mode switch service SeeAlso: AX=0306h Values to call state-save procedures with: AL = direction 00h save state 01h restore state ES:DI / ES:EDI -> state buffer Return: all registers preserved ----------310306----------------------------- INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES AX = 0306h Return: CF clear BX:CX -> procedure to switch from real to protected mode SI:DI / SI:EDI -> procedure to switch from protected to real mode Notes: 16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI the caller must save and restore the state of the task with AX=0305h not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0305h Values to JUMP at mode-switch procedures with: AX = new DS CX = new ES DX = new SS BX / EBX = new SP / ESP SI = new CS DI / EDI = new IP / EIP Notes: BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX, DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h interrupts will stay disabled during the entire mode switch if they are disabled on entry to the mode-switch procedure ----------310400----------------------------- INT 31 P - DPMI 0.9+ - GET DPMI VERSION AX = 0400h Return: CF clear AH = major version of DPMI spec supported AL = two-digit minor version of DPMI spec supported BX = flags bit 0: running under an 80386 (32-bit) implementation bit 1: processor returns to real mode for reflected interrupts instead of V86 mode bit 2: virtual memory supported bit 3: reserved (undefined) others reserved (zero) CL = processor type (02h=80286, 03h=80386, 04h=80486) DH = curr value of virtual master interrupt controller base interrupt DL = curr value of virtual slave interrupt controller base interrupt SeeAlso: AX=0401h,INT 21/AX=250Ch ----------310401----------------------------- INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES AX = 0401h ES:(E)DI -> 128-byte buffer (see below) Return: CF clear if successful AX = capabilities bit 0: paged accessed/dirty supported (see AX=0506h,AX=0507h) 1: exceptions restartability supported 2: device mapping supported (see AX=0508h) 3: conventional memory mapping supported (see AX=0509h) 4: demand zero-fill supported 5: write-protect client capability supported 6: write-protect host capability supported 7-15: reserved CX = reserved (00h) DX = reserved (00h) buffer filled CF set on error (DPMI 0.9 only) SeeAlso: AX=0400h Format of buffer: Offset Size Description 00h BYTE host major version number 01h BYTE host minor version number 02h 126 BYTEs ASCIZ host vendor name ----------310500----------------------------- INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION AX = 0500h ES:DI / ES:EDI -> buffer for memory information (see below) Return: CF clear Notes: 16-bit programs use ES:DI, 32-bit programs use ES:EDI this function must be considered advisory because other applications may affect the results at any time after the call fields not supported by the DPMI implementation are filled with FFFFFFFFh DPMI 1.0+ supports this function solely for backward compatibility; use AX=050Bh instead SeeAlso: AX=0501h,AX=0604h Format of memory information: Offset Size Description 00h DWORD largest available block in bytes 04h DWORD maximum unlocked page allocation 08h DWORD maximum locked page allocation 0Ch DWORD total linear address space in pages 10h DWORD total unlocked pages 14h DWORD free pages 18h DWORD total physical pages 1Ch DWORD free linear address space in pages 20h DWORD size of paging file/partition in pages 24h 12 BYTEs reserved ----------310501----------------------------- INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK AX = 0501h BX:CX = size in bytes Return: CF clear if successful BX:CX = linear address of block SI:DI = memory block handle for resizing and freeing block CF set on error AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see AX=0000h) Notes: no selectors are allocated the memory block is allocated unlocked (can be locked with AX=0600h) allocations are often page granular (see AX=0604h) SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h ----------310502----------------------------- INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK AX = 0502h SI:DI = handle of memory block Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8023h) (see AX=0000h) Note: any selectors allocated for the memory block must also be freed, preferably before freeing the memory block SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h ----------310503----------------------------- INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK AX = 0503h BX:CX = new size in bytes (nonzero) SI:DI = handle of memory block Return: CF clear if successful BX:CX = new linear address SI:DI = new handle of memory block CF set on error AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h) (see AX=0000h) Notes: any selectors pointing at the block must be updated the previous memory block handle becomes invalid an error is returned if the new size is 0 SeeAlso: AX=0102h,AX=0501h,AX=0505h ----------310504----------------------------- INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK AX = 0504h EBX = page-aligned linear address of memory block (00000000h if any address is acceptable) ECX = size in bytes (nonzero) EDX = flags bit 0: set to create committed pages instead of uncommitted pages bits 1-31: reserved (0) Return: CF clear if successful EBX = linear address of memory block ESI = memory block handle CF set on error AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see AX=0000h) Note: only supported by 32-bit DPMI hosts, but may be used by 16-bit clients SeeAlso: AX=0501h,AX=0505h ----------310505----------------------------- INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK AX = 0505h ESI = memory block handle ECX = new size in bytes (nonzero) EDX = flags bit 0: create committed pages rather than uncommitted pages bit 1: segment descriptor update required ES:EBX -> buffer containing array of WORDs with selectors EDI = number of selectors in array bits 2-31: reserved (0) Return: CF clear if successful EBX = new linear base address ESI = new memory block handle CF set on error AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see AX=0000h) Notes: only supported by 32-bit DPMI hosts, but may be used by 16-bit clients the old memory block handle becomes invalid if EDX bit 1 set and the block's base address is changed, DPMI updates all descriptors for selectors in the update buffer which fall within the memory block SeeAlso: AX=0503h,AX=0504h ----------310506----------------------------- INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES AX = 0506h ESI = memory block handle EBX = offset in memory block of first page ECX = number of pages ES:EDX -> array of WORDs to hold page attributes (see below) Return: CF clear if successful buffer filled CF set on error AX = error code (8001h,8023h,8025h) (see AX=0000h) Notes: only supported by 32-bit DPMI hosts, but may be used by 16-bit clients if EBX is not page-aligned, it will be rounded down SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h Format of page attribute words: bits 0-2 page type 000 uncommitted 001 committed 010 mapped (see AX=0508h,AX=0509h) other currently unused bit 3 page is read/write rather than read-only bit 4 accessed/dirty bits supplied in bits 5 and 6 bit 5 page has been accessed (only valid if bit 4 set) bit 6 page has been written (only valid if bit 4 set) bits 7-15 reserved (0) ----------310507----------------------------- INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES AX = 0507h ESI = memory block handle EBX = offset in memory block of first page ECX = number of pages ES:EDX -> array of WORDs with new page attributes (see AX=0506h) Return: CF clear if successful CF set on error AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h) (see AX=0000h) ECX = number of pages which have been set Notes: only supported by 32-bit DPMI hosts, but may be used by 16-bit clients if EBX is not page-aligned, it will be rounded down SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh ----------310508----------------------------- INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK AX = 0508h ESI = memory block handle EBX = page-aligned offset within memory block of page(s) to be mapped ECX = number of pages to map EDX = page-aligned physical address of device Return: CF clear if successful CF set on error AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h) Notes: only supported by 32-bit DPMI hosts, but may be used by 16-bit clients support of this function is optional; hosts are also allowed to support the function for some devices but not others SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h ----------310509----------------------------- INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK AX = 0509h ESI = memory block handle EBX = page-aligned offset within memory block of page(s) to map ECX = number of pages to map EDX = page-aligned linear address of conventional (below 1M) memory Return: CF clear if successful CF set on error AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h) Notes: only supported by 32-bit DPMI hosts, but may be used by 16-bit clients support of this function is optional SeeAlso: AX=0504h,AX=0508h,AX=0801h ----------31050A----------------------------- INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE AX = 050AH SI:DI = memory block handle Return: CF clear if successful SI:DI = size in bytes BX:CX = base address CF set on error AX = error code (8023h) (see AX=0000h) SeeAlso: AX=0501h,AX=0504h ----------31050B----------------------------- INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION AX = 050Bh ES:(E)DI -> 128-byte buffer for memory information (see below) Return: CF clear if successful CF set on error (DPMI 0.9 only) Note: 16-bit programs use ES:DI, 32-bit programs must use ES:EDI SeeAlso: AX=0500h Format of memory information: Offset Size Description 00h DWORD total allocated bytes of physical memory controlled by host 04h DWORD total allocated bytes of virtual memory controlled by host 08h DWORD total available bytes of virtual memory controlled by host 0Ch DWORD total allocated bytes of virtual memory for curr virtual mach 10h DWORD total available bytes of virtual memory for curr virtual mach 14h DWORD total allocated bytes of virtual memory for current client 18h DWORD total available bytes of virtual memory for current client 1Ch DWORD total locked bytes for current client 20h DWORD maximum locked bytes for current client 24h DWORD highest linear address available to current client 28h DWORD largest available memory block in bytes 2Ch DWORD minimum allocation unit in bytes 30h DWORD allocation alignment unit size in bytes 34h 76 BYTEs reserved (00h) ----------310600----------------------------- INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION AX = 0600h BX:CX = starting linear address SI:DI = size of region in bytes Return: CF clear if successful CF set on error none of the memory is locked AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see AX=0000h) Notes: pages at beginning and end will be locked if the region overlaps them may be called multiple times for a given page; the DPMI host keeps a lock count for each page SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h ----------310601----------------------------- INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION AX = 0601h BX:CX = starting linear address SI:DI = size of region in bytes Return: CF clear if successful CF set on error none of the memory is unlocked AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h) Notes: pages at beginning and end will be unlocked if the region overlaps them memory whose lock count has not reached zero remains locked SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h ----------310602----------------------------- INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE AX = 0602h BX:CX = starting linear address SI:DI = size of region in bytes Return: CF clear if successful CF set on error none of the memory is made pageable AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h) Notes: must relock all unlocked real mode memory before terminating process for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory pages at beginning and end will be unlocked if the region overlaps them pageability of real mode pages is binary, not a count SeeAlso: AX=0600h,AX=0603h ----------310603----------------------------- INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION AX = 0603h BX:CX = starting linear address SI:DI = size of region in bytes Return: CF clear if successful CF set on error none of the memory is relocked AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see AX=0000h) Notes: pages at beginning and end will be relocked if the region overlaps them pageability of real mode pages is binary, not a count SeeAlso: AX=0602h ----------310604----------------------------- INT 31 P - DPMI 0.9+ - GET PAGE SIZE AX = 0604h Return: CF clear if successful BX:CX = page size in bytes CF set on error AX = error code (DPMI 1.0+) 8001h unsupported, 16-bit host ----------310700----------------------------- INT 31 P - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES AX = 0700h BX:CX = starting linear page number SI:DI = number of pages to mark as paging candidates Return: ??? Note: although marked as reserved in versions 0.9 and 1.0 of the DPMI specification, this function is called by MS Windows TASKMAN, PROGMAN, and KERNEL SeeAlso: AX=0701h,AX=0702h ----------310701----------------------------- INT 31 P - DPMI 0.9+ - DISCARD PAGES AX = 0701h BX:CX = starting linear page number SI:DI = number of pages to discard Return: ??? Note: although marked as reserved in versions 0.9 and 1.0 of the DPMI specification, this function is called by MS Windows TASKMAN, PROGMAN, and KERNEL SeeAlso: AX=0700h,AX=0703h ----------310702----------------------------- INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE AX = 0702h BX:CX = starting linear address SI:DI = number of bytes to mark as paging candidates Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8025h) (see AX=0000h) Notes: this function is advisory, and does not force immediate paging partial pages will not be discarded SeeAlso: AX=0700h,AX=0703h ----------310703----------------------------- INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS AX = 0703h BX:CX = starting linear address SI:DI = number of bytes to mark as discarded Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8025h) (see AX=0000h) Notes: this function is advisory, and may be ignored by DPMI implementations partial pages will not be discarded SeeAlso: AX=0701h,AX=0702h ----------310800----------------------------- INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING AX = 0800h BX:CX = physical address (should be above 1 MB) SI:DI = size in bytes Return: CF clear if successful BX:CX = linear address which maps the requested physical memory CF set on error AX = error code (DPMI 1.0+) (8003h,8021h) (see AX=0000h) Notes: implementations may refuse this call because it can circumvent protects the caller must build an appropriate selector for the memory do not use for memory mapped in the first megabyte SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h ----------310801----------------------------- INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING AX = 0801h BX:CX = linear address returned by AX=0800h Return: CF clear if successful CF set on error AX = error code (8025h) (see AX=0000h) Note: should be called at end of access to device mapped with AX=0800h SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h ----------310900----------------------------- INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE AX = 0900h Return: CF clear virtual interrupts disabled AL = 00h if previously disabled = 01h if previously enabled AH preserved Notes: the previous state may be restored simply by executing another INT 31 a CLI instruction may be used if the previous state is unimportant, but should be assumed to be very slow due to trapping by the host SeeAlso: AX=0901h,AX=0902h ----------310901----------------------------- INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE AX = 0901h Return: CF clear virtual interrupts enabled AL = 00h if previously disabled = 01h if previously enabled AH preserved Notes: the previous state may be restored simply by executing another INT 31 a STI instruction may be used if the previous state is unimportant, but should be assumed to be very slow due to trapping by the host SeeAlso: AX=0900h,AX=0902h ----------310902----------------------------- INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE AX = 0902h Return: CF clear AL = 00h if disabled = 01h if enabled Note: should be used rather than PUSHF because that instruction yields the physical interrupt state rather than the per-client virtualized interrupt flag SeeAlso: AX=0900h,AX=0901h ----------310A00----------------------------- INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT AX = 0A00h DS:SI / DS:ESI -> case-sensitive ASCIZ vendor name or identifier Return: CF clear if successful ES:DI / ES:EDI -> FAR extended API entry point DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed CF set on error AX = error code (DPMI 1.0+) (8001h) (see AX=0000h) Notes: extended API parameters are vendor-specific DPMI 1.0+ supports this function solely for backward compatibility; use INT 2F/AX=168Ah instead SeeAlso: INT 2F/AX=168Ah ----------310B00----------------------------- INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT AX = 0B00h BX:CX = linear address DL = size (1,2,4 bytes) DH = type (00h execute, 01h write, 02h read/write) Return: CF clear if successful BX = watchpoint handle CF set on error AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see AX=0000h) SeeAlso: AX=0212h,AX=0601h ----------310B01----------------------------- INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT AX = 0B01h BX = watchpoint handle Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8023h) (see AX=0000h) Note: the watchpoint handle is freed SeeAlso: AX=0B00h ----------310B02----------------------------- INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT AX = 0B02h BX = watchpoint handle Return: CF clear if successful AX = status flags bit 0: watch point has been executed since AX=0B00h or AX=0B03h CF set on error AX = error code (DPMI 1.0+) (8023h) (see AX=0000h) SeeAlso: AX=0B00h,AX=0B03h ----------310B03----------------------------- INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT AX = 0B03h BX = watchpoint handle Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8023h) (see AX=0000h) SeeAlso: AX=0B02h ----------310C00----------------------------- INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK AX = 0C00h ES:(E)DI -> resident service provider structure (see below) Return: CF clear if successful CF set on error AX = error code (8015h,8021h,8025h) (see AX=0000h) Note: calling this function declares an intent to provide resident protected mode services after terminating with AX=0C01h SeeAlso: AX=0303h,AX=0C01h Format of resident service provider structure: Offset Size Description 00h QWORD descriptor for 16-bit data segment 08h QWORD descriptor for 16-bit code segment (zeros if not supported) 10h WORD offset of 16-bit callback procedure 12h 2 BYTEs reserved 14h QWORD descriptor for 32-bit data segment 1Ch QWORD descriptor for 32-bit code segment (zeros if not supported) 24h DWORD offset of 32-bit callback procedure ----------310C01----------------------------- INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT AX = 0C01h BL = return code DX = number of paragraphs of DOS memory to reserve (0 or >= 6) Return: never Notes: should only be used if the program will only provide services to other DPMI programs any protected mode memory remains allocated to the program unless explicitly freed before this call must first call AX=0C00h or program will simply be terminated SeeAlso: AX=0C00h,INT 21/AH=31h ----------310D00----------------------------- INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY AX = 0D00h ES:(E)DI -> shared memory allocation request structure (see below) Return: CF clear if successful request structure updated CF set on error AX = error code (8012h,8013h,8014h,8016h,8021h) (see AX=0000h) Note: first 16 bytes of memory block will be initialized to zeros on the first allocation SeeAlso: AX=0501h,AX=0D01h,AX=0D02h Format of shared memory allocation request structure: Offset Size Description 00h DWORD requested length of shared memory block in bytes 04h DWORD (return) allocated length of block 08h DWORD (return) shared memory handle 0Ch DWORD (return) linear address of memory block 10h 6 BYTEs selector:offset32 of ASCIZ name for memory block (name max 128 bytes) 16h 2 BYTEs reserved 18h 4 BYTEs reserved (00h) ----------310D01----------------------------- INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY AX = 0D01h SI:DI = shared memory block handle Return: CF clear if successful CF set on error AX = error code (8023h) (see AX=0000h) Notes: handle becomes invalid after this call DPMI maintains separate global and virtual machine use counts for each shared memory block; when the global use counts reaches zero, the block is finally destroyed SeeAlso: AX=0502h,AX=0D00h ----------310D02----------------------------- INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY AX = 0D02h SI:DI = shared memory block handle DX = flags bit 0: return immediately rather than suspending if serialization unavailable 1: shared rather than exclusive serialization 2-15: reserved (0) Return: CF clear if successful CF set on error AX = error code (8004h,8005h,8017h-8019h,8023h) (see AX=0000h) Notes: an exclusive serialization blocks any other serialization attempts for the same block by another virtual machine; a shared serialization blocks attempts at exclusive serialization by another virtual machine hosts are not required to detect deadlock a client's interrupt handler can cancel a serialization call which caused it to block by calling AX=0D03h SeeAlso: AX=0D00h,AX=0D03h ----------310D03----------------------------- INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY AX = 0D03h SI:DI = shared memory block handle DX = flags bit 0: release shared serialization rather than exclusive serialztn bit 1: free pending serialization bits 2-15: reserved (0) Return: CF clear if successful CF set on error AX = error code (8002h,8023h) (see AX=0000h) SeeAlso: AX=0D00h,AX=0D02h ----------310E00----------------------------- INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS AX = 0E00h Return: CF clear AX = coprocessor status bit 0: numeric coprocessor enabled for current client bit 1: client is emulating coprocessor bit 2: numeric coprocessor is present bit 3: host is emulating coprocessor instructions bits 4-7: coprocessor type 0000 none 0010 80287 0011 80387 0100 80486 with numeric coprocessor other reserved bits 8-15: not used Note: supported by 386MAX v6.01, which otherwise only supports DPMI 0.9 SeeAlso: AX=0E01h ----------310E01----------------------------- INT 31 P - DPMI 1.0+ - SET EMULATION AX = 0E01h BX = coprocessor flag bits bit 0: enable numeric coprocessor for current client bit 1: client will emulate coprocessor bits 2-15: not used Return: CF clear if successful CF set on error AX = error code (8026h) (see AX=0000h) Note: supported by 386MAX v6.01, which otherwise only supports DPMI 0.9 SeeAlso: AX=0E00h ----------32--------------------------------- INT 32 - VIRUS - reportedly used by "Tiny" Viruses SeeAlso: INT 60"VIRUS" ----------330000----------------------------- INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS AX = 0000h Return: AX = status 0000h hardware/driver not installed FFFFh hardware/driver installed BX = number of buttons 0000h other than two 0002h two buttons (many drivers) 0003h Mouse Systems/Logitech three-button mouse FFFFh two buttons Notes: to use mouse on a Hercules-compatible monographics card in graphics mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1, and then call this function. Logitech drivers v5.01 and v6.00 reportedly do not correctly use Hercules graphics in dual-monitor systems, while version 4.10 does. the Logitech mouse driver contains the signature string "LOGITECH" three bytes past the interrupt handler; many of the Logitech mouse utilities check for this signature. SeeAlso: AX=0021h,INT 62/AX=007Ah,INT 74 ----------330001----------------------------- INT 33 - MS MOUSE - SHOW MOUSE CURSOR AX = 0001h SeeAlso: AX=0002h,INT 16/AX=FFFEh,INT 62/AX=007Bh ----------330002----------------------------- INT 33 - MS MOUSE - HIDE MOUSE CURSOR AX = 0002h Note: multiple calls to hide the cursor will require multiple calls to function 01h to unhide it. SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh,INT 62/AX=007Bh ----------330003----------------------------- INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS AX = 0003h Return: BX = button status bit 0 left button pressed if 1 bit 1 right button pressed if 1 bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse) CX = column DX = row SeeAlso: AX=0004h,AX=000Bh,INT 2F/AX=D000h"ZWmous" ----------330004----------------------------- INT 33 - MS MOUSE - POSITION MOUSE CURSOR AX = 0004h CX = column DX = row Note: the row and column are truncated to the next lower multiple of the cell size; however, some versions of the Microsoft documentation incorrectly state that the coordinates are rounded SeeAlso: AX=0003h,INT 62/AX=0081h ----------330005----------------------------- INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA AX = 0005h BX = button 0000h left 0001h right 0002h middle (Mouse Systems/Logitech mouse) Return: AX = button states bit 0 left button pressed if 1 bit 1 right button pressed if 1 bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse) BX = number of times specified button has been pressed since last call CX = column at time specified button was last pressed DX = row at time specified button was last pressed SeeAlso: AX=0006h,INT 62/AX=007Ch ----------330006----------------------------- INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA AX = 0006h BX = button 0000h left 0001h right 0002h middle (Mouse Systems/Logitech mouse) Return: AX = button states bit 0 left button pressed if 1 bit 1 right button pressed if 1 bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse) BX = number of times specified button has been released since last call CX = column at time specified button was last released DX = row at time specified button was last released SeeAlso: AX=0005h,INT 62/AX=007Ch ----------330007----------------------------- INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE AX = 0007h CX = minimum column DX = maximum column SeeAlso: AX=0008h,AX=0010h,INT 62/AX=0080h ----------330008----------------------------- INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE AX = 0008h CX = minimum row DX = maximum row SeeAlso: AX=0007h,AX=0010h,INT 62/AX=0080h ----------330009----------------------------- INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR AX = 0009h BX = column of cursor hot spot in bitmap (-16 to 16) CX = row of cursor hot spot (-16 to 16) ES:DX -> bitmap 16 words screen mask 16 words cursor mask each word defines the sixteen pixels of a row, low bit rightmost SeeAlso: AX=000Ah,AX=0012h,INT 62/AX=007Fh ----------33000A----------------------------- INT 33 - MS MOUSE - DEFINE TEXT CURSOR AX = 000Ah BX = hardware/software text cursor 0000h software CX = screen mask DX = cursor mask 0001h hardware CX = start scan line DX = end scan line Note: when the software cursor is selected, the char/attribute data at the current screen position is ANDed with the screen mask and then XORed with the cursor mask SeeAlso: AX=0009h,INT 62/AX=007Eh ----------33000B----------------------------- INT 33 - MS MOUSE - READ MOTION COUNTERS AX = 000Bh Return: CX = number of mickeys mouse moved horizontally since last call DX = number of mickeys mouse moved vertically Notes: a mickey is the smallest increment the mouse can sense positive values indicate down/right SeeAlso: AX=0003h,AX=001Bh ----------33000C----------------------------- INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS AX = 000Ch CX = call mask bit 0 call if mouse moves bit 1 call if left button pressed bit 2 call if left button released bit 3 call if right button pressed bit 4 call if right button released bit 5 call if middle button pressed (Mouse Systems/Logitech mouse) bit 6 call if middle button released (Mouse Sys/Logitech mouse) ES:DX -> FAR routine Notes: when the subroutine is called, it is passed the following values: AX = condition mask (same bit assignments as call mask) BX = button state CX = cursor column DX = cursor row SI = horizontal mickey count DI = vertical mickey count some versions of the Microsoft documentation incorrectly state that CX bit 0 means call if mouse cursor moves, and swap the meanings of SI and DI SeeAlso: AX=0018h ----------33000D----------------------------- INT 33 - MS MOUSE - LIGHT PEN EMULATION ON AX = 000Dh SeeAlso: AX=000Eh ----------33000E----------------------------- INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF AX = 000Eh SeeAlso: AX=000Dh ----------33000F----------------------------- INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO AX = 000Fh CX = number of mickeys per 8 pixels horizontally (default 8) DX = number of mickeys per 8 pixels vertically (default 16) SeeAlso: AX=0013h,AX=001Ah,INT 62/AX=0082h ----------330010----------------------------- INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING AX = 0010h CX,DX = X,Y coordinates of upper left corner SI,DI = X,Y coordinates of lower right corner Note: mouse cursor is hidden in the specified region, and needs to be explicitly turned on again SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"Genius MOUSE" ----------330010----------------------------- INT 33 - Genius MOUSE - DEFINE SCREEN REGION FOR UPDATING AX = 0010h ES:DX -> update region list (see below) Notes: mouse cursor is hidden in the specified region, and needs to be explicitly turned on again this version of the call is described in an August 1988 version of the Genius Mouse programmer's reference; it has presumably been changed to conform to the Microsoft version shown above SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"MS MOUSE" Format of update region list: Offset Size Description 00h WORD left-most column 02h WORD top-most row 04h WORD right-most column 06h WORD bottom-most row ----------330012----------------------------- INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK AX = 0012h BH = cursor width in words CH = rows in cursor BL = horizontal hot spot (-16 to 16) CL = vertical hot spot (-16 to 16) ES:DX -> bit map of screen and cursor maps Return: AX = FFFFh if successful SeeAlso: AX=0009h ----------330013----------------------------- INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD AX = 0013h DX = threshold speed in mickeys/second, 0000h = default of 64/second Note: if speed exceeds threshold, the cursor's on-screen motion is doubled SeeAlso: AX=000Fh,AX=001Bh,AX=002Ch ----------330014----------------------------- INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES AX = 0014h CX = call mask (see AX=000Ch) ES:DX -> FAR routine Return: CX = call mask of previous interrupt routine ES:DX = FAR address of previous interrupt routine SeeAlso: AX=0018h ----------330015----------------------------- INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS AX = 0015h Return: BX = size of buffer needed to store driver state SeeAlso: AX=0016h,AX=0017h,AX=0042h ----------330016----------------------------- INT 33 - MS MOUSE - SAVE DRIVER STATE AX = 0016h BX = size of buffer (see AX=0015h) ES:DX -> buffer for driver state Note: although not documented, many drivers appear to require BX on input SeeAlso: AX=0015h,AX=0017h ----------330017----------------------------- INT 33 - MS MOUSE - RESTORE DRIVER STATE AX = 0017h BX = size of buffer (see AX=0015h) ES:DX -> buffer containing saved state Notes: although not documented, many drivers appear to require BX on input some mouse drivers range-check the values in the saved state based on the current video mode; thus, the video mode should be restored before the mouse driver's state is restored SeeAlso: AX=0015h,AX=0016h ----------330018----------------------------- INT 33 - MS MOUSE - SET ALTERNATE MOUSE USER HANDLER AX = 0018h CX = call mask bit 0 call if alt key pressed during event bit 1 call if ctrl key pressed during event bit 2 call if shift button pressed during event bit 3 call if right button released bit 4 call if right button pressed bit 5 call if left button released bit 6 call if left button pressed bit 7 call if mouse moves ES:DX = address of FAR routine Return: AX = 0018h if successful = FFFFh on error Notes: when the subroutine is called, it is passed the following values: AX = condition mask (same bit assignments as call mask) BX = button state CX = cursor column DX = cursor row DI = horizontal mickey count SI = vertical mickey count up to three handlers can be defined by separate calls to this function SeeAlso: AX=0014h,AX=0019h ----------330019----------------------------- INT 33 - MS MOUSE - RETURN USER ALTERNATE INTERRUPT VECTOR AX = 0019h CX = call mask Return: BX:DX = user interrupt vector CX = call mask (0 if not found) Note: attempts to find a user event handler (defined by function 18h) whose call mask matches CX SeeAlso: AX=0018h ----------33001A----------------------------- INT 33 - MS MOUSE - SET MOUSE SENSITIVITY AX = 001Ah BX = horizontal speed \ CX = vertical speed / (see AX=000Fh) DX = double speed threshold (see AX=0013h) SeeAlso: AX=0013h,AX=001Bh,INT 62/AX=0082h ----------33001B----------------------------- INT 33 - MS MOUSE - RETURN MOUSE SENSITIVITY AX = 001Bh Return: BX = horizontal speed CX = vertical speed DX = double speed threshold SeeAlso: AX=000Bh,AX=001Ah ----------33001C----------------------------- INT 33 - MS MOUSE - SET INTERRUPT RATE AX = 001Ch BX = rate 00h no interrupts allowed 01h 30 per second 02h 50 per second 03h 100 per second 04h 200 per second Notes: only available on InPort mouse values greater than 4 may cause unpredictable driver behavior ----------33001D----------------------------- INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER AX = 001Dh BX = display page number Note: the cursor will be displayed on the specified page SeeAlso: AX=001Eh ----------33001E----------------------------- INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER AX = 001Eh Return: BX = display page number SeeAlso: AX=001Dh ----------33001F----------------------------- INT 33 - MS MOUSE - DISABLE MOUSE DRIVER AX = 001Fh Return: AX = 001Fh unsuccessful FFFFh successful ES:BX = vector for INT 33h before mouse driver was first installed Note: restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386) if you restore Int 33h to ES:BX, driver will be completely disabled SeeAlso: AX=0020h ----------330020----------------------------- INT 33 - MS MOUSE - ENABLE MOUSE DRIVER AX = 0020h Return: AX = 0020h unsuccessful (or driver not installed) FFFFh successful Note: restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386) which were removed by function 1Fh SeeAlso: AX=001Fh ----------330021----------------------------- INT 33 - MS MOUSE - SOFTWARE RESET AX = 0021h Return: AX = FFFFh if mouse driver installed 0021h if mouse driver not installed BX = 2 if mouse driver is installed Note: identical to funtion 00h, but does not reset the mouse SeeAlso: AX=0000h ----------330022----------------------------- INT 33 - MS MOUSE - SET LANGUAGE FOR MESSAGES AX = 0022h BX = language 00h English 01h French 02h Dutch 03h German 04h Swedish 05h Finnish 06h Spanish 07h Portugese 08h Italian Note: only available on international versions of the driver, US versions ignore this call SeeAlso: AX=0023h ----------330023----------------------------- INT 33 - MS MOUSE - GET LANGUAGE FOR MESSAGES AX = 0023h Return: BX = language (see AX=0022h) Note: the US version of the driver always returns zero SeeAlso: AX=0022h ----------330024----------------------------- INT 33 - MS MOUSE v7.00+ - GET SOFTWARE VERSION AND MOUSE TYPE AX = 0024h Return: AX = FFFFh on error otherwise, BH = major version BL = minor version CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP) CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7) SeeAlso: AX=004Dh ----------330025----------------------------- INT 33 - MS MOUSE v8.10+ - GET ??? AX = 0025h Return: AL = ??? BX = ??? CX = ??? DX = ??? ----------330026----------------------------- INT 33 - MS MOUSE v8.10+ - GET ??? AX = 0026h Return: BX = ??? CX = ??? DX = ??? Note: called by the newest Microsoft applications ----------330027----------------------------- INT 33 - MS MOUSE v8.10+ - GET ??? AX = 0027h Return: AX = ??? BX = ??? CX = horizontal mickeys moved since last call DX = vertical mickeys moved since last call ----------330028----------------------------- INT 33 - MS MOUSE v8.10+ - ??? AX = 0028h CX = ??? 0000h reset to default??? other DX = ??? Return: CL = 00h ----------330029----------------------------- INT 33 - MS MOUSE v8.10+ - GET SUPPORTED VIDEO MODES??? AX = 0029h CX = last video mode??? 0000h get first other get next supported mode after mode CX Return: CX = first/next video mode ES:DX = 0000h:0000h ----------33002A----------------------------- INT 33 - MS MOUSE v8.10+ - GET ??? AX = 002Ah Return: AX = ??? BX = ??? CX = ??? DX = ??? ----------33002B----------------------------- INT 33 - MS MOUSE v8.10+ - SET ACCELERATION PROFILES AX = 002Bh BX = active acceleration profile (0001h-0004h or FFFFh for current) ES:SI -> buffer containing acceleration profile data (see below) Return: ??? SeeAlso: AX=002Ch"v8.10",AX=002Dh,AX=0033h Format of acceleration profile data: Offset Size Description 00h BYTE length of acceleration profile 1 01h BYTE length of acceleration profile 2 02h BYTE length of acceleration profile 3 03h BYTE length of acceleration profile 4 04h 32 BYTEs threshold speeds for acceleration profile 1 24h 32 BYTEs threshold speeds for acceleration profile 2 44h 32 BYTEs threshold speeds for acceleration profile 3 64h 32 BYTEs threshold speeds for acceleration profile 4 84h 32 BYTEs speedup factor for acceleration profile 1 (10h = 1.0, 14h = 1.25, 20h = 2.0, etc) A4h 32 BYTEs speedup factor for acceleration profile 2 (10h = 1.0, 14h = 1.25, 20h = 2.0, etc) C4h 32 BYTEs speedup factor for acceleration profile 3 (10h = 1.0, 14h = 1.25, 20h = 2.0, etc) E4h 32 BYTEs speedup factor for acceleration profile 4 (10h = 1.0, 14h = 1.25, 20h = 2.0, etc) 104h 16 BYTEs name of acceleration profile 1 (blank-padded) 114h 16 BYTEs name of acceleration profile 2 (blank-padded) 124h 16 BYTEs name of acceleration profile 3 (blank-padded) 134h 16 BYTEs name of acceleration profile 4 (blank-padded) Note: unused bytes in the threshold speed fields are filled with 7Fh and unused bytes in the speedup factor fields are filled with 10h ----------33002C----------------------------- INT 33 - MS MOUSE v??? - SET ACCELERATION PROFILES AX = 002Ch ES:DX -> name of file containing profiles Note: see MOUSEPRO.FIL for an example set of acceleration profiles SeeAlso: AX=0013h,AX=002Dh,AX=002Eh ----------33002C----------------------------- INT 33 - MS MOUSE v8.10+ - GET ACCELERATION PROFILES AX = 002Ch Return: AX = 0000h BX = currently-active acceleration profile ES:SI -> acceleration profile data (see AX=002Bh) SeeAlso: AX=002Bh,AX=0033h ----------33002D----------------------------- INT 33 - MS MOUSE v8.10+ - SELECT ACCELERATION PROFILE AX = 002Dh BX = acceleration level (0001h to 0004h or FFFFh for current) Return: AX = status 0000h successful ES:SI -> 16-byte blank-padded name of acceleration profile FFFEh invalid acceleration level ES:SI destroyed BX = active acceleration level SeeAlso: AX=0013h,AX=002Bh,AX=002Ch,AX=002Eh ----------33002E----------------------------- INT 33 - MS MOUSE v8.10+ - SET ACCELERATION PROFILE NAMES AX = 002Eh BL = flag (if nonzero, fill ES:SI buffer with default names on return) ES:SI -> 64-byte buffer for profile names (16 bytes per name) Return: AX = 0000h ES:SI buffer filled with default names if BL nonzero on entry Note: not supported by Logitech driver v6.10 SeeAlso: AX=002Ch,AX=002Dh,AX=012Eh,AX=022Eh ----------33002F----------------------------- INT 33 - MS MOUSE v8.10+ - ??? AX = 002Fh ??? Return: ??? Note: invoked by mouse driver v8.20 on being called with INT 2F/AX=530Bh SeeAlso: INT 2F/AH=53h ----------330030----------------------------- INT 33 - MS MOUSE v8.10+ - ??? AX = 0030h CX = ??? 0000h ??? other ??? Return: ??? ----------330031----------------------------- INT 33 - MS MOUSE v8.10+ - GET ??? AX = 0031h Return: AX = ??? BX = ??? CX = ??? DX = ??? ----------330032----------------------------- INT 33 - MS MOUSE v8.10+ - GET ??? AX = 0032h Return: AX = ??? (FFFFh) BX = ??? (0000h) CX = ??? (E000h) DX = ??? (0000h) ----------330033----------------------------- INT 33 - MS MOUSE v8.10+ - GET ACCELERATION PROFILE DATA AX = 0033h CX = size of buffer 0000h get required buffer size Return: AX = 0000h CX = required size (0154h for Logitech v6.10, 0159h for MS v8.10-8.20) other ES:DX -> buffer of CX bytes Return: AX = 0000h ES:DX buffer filled (see below) SeeAlso: AX=002Bh Format of data buffer: Offset Size Description 00h 16 BYTEs ??? 10h 324 BYTEs acceleration profile data (see AX=002Bh) 154h 5 BYTEs ??? (Microsoft driver, but not Logitech) ----------330034----------------------------- INT 33 - MS MOUSE v8.10+ - GET INITIALIZATION FILE AX = 0034h Return: ES:DX -> ASCIZ initialization (.INI) file name ----------330035----------------------------- INT 33 - MS MOUSE v8.10+ - LCD SCREEN LARGE POINTER SUPPORT AX = 0035h BX = function FFFFh get current settings Return: AX = 0000h BH = style (see below) BL = size (see below) CH = threshold CL = active flag (00h disabled, 01h enabled) DX = delay other BH = style (00h normal, 01h reverse, 02h transparent) BL = size (00h small "1", 01h medium "1.5", 02h large "2") CH = threshold (00h-64h) CL = active flag (00h disable size change, 01h enable) DX = delay (0000h-0064h) Return: AX = 0000h Note: not supported by Logitech driver v6.10 ----------330042----------------------------- INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS AX = 0042h Return: AX = FFFFh successful BX = buffer size in bytes for functions 50h and 52h = 0000h MSMOUSE not installed = 0042h functions 42h, 50h, and 52h not supported SeeAlso: AX=0015h,AX=0050h,AX=0052h ----------330043----------------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CONFIGURE MOUSE??? AX = 0043h CX:BX -> ??? buffer (see below) DL = ??? Return: ??? Note: also calls routines for INT 33/AX=0053h and INT 33/AX=004Fh Format of buffer: Offset Size Description 00h WORD I/O port address 02h BYTE ??? 03h BYTE interrupt number 04h BYTE interrupt mask for interrupt controller 05h 5 BYTEs ??? ----------330044CXCDEF----------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ??? AX = 0044h CX = CDEFh Return: AX = new state of ??? SeeAlso: AX=0045h ----------330045CXCDEF----------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ??? AX = 0045h CX = CDEFh Return: AX = new state of ??? SeeAlso: AX=0044h ----------330047----------------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET BUTTON ASSIGNMENTS??? AX = 0047h ES:BX -> button assignments (3 bytes, combinations of "L", "M", "R") Return: ??? SeeAlso: AX=0067h ----------330048BXCDEF----------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET ??? AX = 0048h BX = CDEFh Return: CX = ??? BH = ??? BL = ??? (if 50h, driver is using PS/2 pointing device BIOS interface) --------------------------------------------- INT 33 - Z-NIX MOUSE DRIVER v7.04d - INSTALLATION CHECK AX = 004Bh Return: ES:DI -> signature/description string if installed Note: the signature string in v7.04d is "Z-NIX;BUS,AUX,Serial 3-byte and 5-byte Mouse Driver;ZMOUSE;v7.04d" ----------33004CBXCDEF----------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ??? FLAG AX = 004Ch BX = CDEFh SeeAlso: AX=006Ch ----------33004D----------------------------- INT 33 - MS MOUSE, LOGITECH - RETURN POINTER TO COPYRIGHT STRING AX = 004Dh Return: ES:DI -> copyright message "Copyright 1983 Microsoft ***" Note: also supported by Kraft mouse driver SeeAlso: AX=0024h,AX=006Dh ----------33004F----------------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ENABLE MOUSE AX = 004Fh Return: nothing SeeAlso: AX=0043h,AX=0053h ----------330050----------------------------- INT 33 - PCMOUSE - SAVE MSMOUSE STATE AX = 0050h BX = buffer size (ignored by some driver versions) ES:DX -> buffer Return: AX = FFFFh if successful Note: the buffer must be large enough to hold the entire state, or following data will be overwritten by state data in versions which ignore BX; use INT 33/AX=0042h to get the required size SeeAlso: AX=0042h,AX=0052h ----------330052----------------------------- INT 33 - PCMOUSE - RESTORE MSMOUSE STATE AX = 0052h BX = buffer size (ignored by some driver versions) ES:DX -> buffer Return: AX = FFFFh if successful SeeAlso: AX=0050h ----------330053----------------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - DISABLE MOUSE AX = 0053h Return: nothing SeeAlso: AX=0043h,AX=004Fh ----------330054CXCDEF----------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ??? AX = 0054h CX = CDEFh BX = ??? (NOP if <= 0000h) Return: ??? ----------330055----------------------------- INT 33 - Kraft Mouse - GET ??? AX = 0055h Return: CX = ??? DX = ??? ES = ??? ----------330058----------------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ??? AX = 0058h Return: AX = CS of driver CX:BX -> ??? DX = ??? ----------33005A----------------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ??? AX = 005Ah CX = number of WORDs to copy (max 0014h, but not range-checked) DX:SI -> buffer containing ??? (CX words) DX:BX -> buffer containing ??? (9*14h words, only first CX of each 14h used) ??? Return: CF clear ??? ----------330061BXCDEF----------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ??? AX = 0061h BX = CDEFh Return: CX = ??? ----------330067----------------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET MOUSE BUTTONS??? AX = 0067h Return: BL = number of buttons??? SeeAlso: AX=0047h ----------33006CBXCDEF----------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ??? AX = 006Ch BX = CDEFh SeeAlso: AX=004Ch ----------33006D----------------------------- INT 33 - MS MOUSE, Logitech - GET VERSION STRING AX = 006Dh Return: ES:DI -> Microsoft version number of resident driver Note: also supported by Mouse Systems and Kraft mouse drivers SeeAlso: AX=004Dh,AX=266Ch ----------330070BXABCD----------------------- INT 33 - Mouse Systems MOUSE DRIVER - POPUP.COM - INSTALLATION CHECK AX = 0070h BX = ABCDh Return: AX = ABCDh if installed BX:CX -> data structure (see below) Notes: the v7.01 POPUP.COM and menu drivers also check for the signature CDh ABh BAh DCh at offset -2Ch from the interrupt handler if POPUP is not loaded, the returned data structure contains the proper signature at offset 00h, but not at offset 08h Format of data structure: Offset Size Description 00h WORD signature ABCDh 02h DWORD pointer to info structure??? 06h 2 BYTEs ??? 08h WORD signature ABCDh Format of info structure: Offset Size Description 00h WORD driver version 02h 8 BYTEs ??? 0Ah WORD segment of ??? ??? ----------330072BXABCD----------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ??? AX = 0072h BX = ABCDh Return: ??? ----------330073BXCDEF----------------------- INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET BUTTON ASSIGNMENTS??? AX = 0073h BX = CDEFh ES:DX -> buffer for button assignments??? (3 bytes of data) Return: CX = number of buttons??? Note: the default return buffer is "LMR" SeeAlso: AX=0067h ----------33012E----------------------------- INT 33 - MS MOUSE v8.10+ - ??? AX = 012Eh BL = ??? Return: AX = 0000h Note: not supported by Logitech driver v6.10 SeeAlso: AX=002Eh,AX=022Eh ----------33022E----------------------------- INT 33 - MS MOUSE v8.10+ - ??? AX = 022Eh BL = ??? Return: AX = 0000h Note: not supported by Logitech driver v6.10 SeeAlso: AX=002Eh,AX=012Eh ----------33136C----------------------------- INT 33 - LOGITECH MOUSE v6.10+ - ??? AX = 136Ch BX = ??? Return: AX = ??? BX = ??? ----------33146C----------------------------- INT 33 - LOGITECH MOUSE v6.10+ - GET/SET ??? AX = 146Ch BL = function 00h set ??? BH = new value (zero/nonzero to clear/set) else get ??? Return: ??? ----------33156C----------------------------- INT 33 - LOGITECH MOUSE v6.10+ - GET SIGNATURE AND VERSION STRINGS AX = 156Ch Return: ES:DI -> signature "LOGITECH MOUSE DRIVER" ES:SI -> version string, terminated with CRLF ----------33166C----------------------------- INT 33 - LOGITECH MOUSE v6.10+ - ??? AX = 166Ch BL = ??? 00h ??? 01h ??? other ??? BH = new value of ??? Return: AX = FFFFh ----------33176C----------------------------- INT 33 - LOGITECH MOUSE v6.10+ - ??? AX = 176Ch ??? Return: ??? ----------33186C----------------------------- INT 33 - LOGITECH MOUSE v6.10+ - ??? AX = 186Ch ??? Return: ??? ----------33196C----------------------------- INT 33 - LOGITECH MOUSE v6.10+ - ??? AX = 196Ch ??? Return: ??? ----------331A6C----------------------------- INT 33 - LOGITECH MOUSE v6.10+ - GET ??? AX = 1A6Ch Return: AX = FFFFh BX = ??? CX = ??? SeeAlso: AX=1B6Ch ----------331B6C----------------------------- INT 33 - LOGITECH MOUSE v6.10+ - SET ??? AX = 1B6Ch BX = new value for ??? (0000h-0003h) Return: AX = FFFFh SeeAlso: AX=1A6Ch ----------331C6C----------------------------- INT 33 - LOGITECH MOUSE v6.10+ - ??? AX = 1C6Ch BX = ??? <42h ??? =42h ??? >42h ??? ES:DI -> ??? Return: AX = ??? ----------331D6C----------------------------- INT 33 - LOGITECH MOUSE - GET COMPASS PARAMETER AX = 1D6Ch Return: BX = direction (0=north, 1=south, 2=east, 3=west) SeeAlso: AX=1E6Ch ----------331E6C----------------------------- INT 33 - LOGITECH MOUSE - SET COMPASS PARAMETER AX = 1E6Ch BX = direction (0=north, 1=south, 2=east, 3=west) SeeAlso: AX=1D6Ch ----------331F6C----------------------------- INT 33 - LOGITECH MOUSE - GET BALLISTICS INFORMATION AX = 1F6Ch Return: BX = 0=off, 1=on CX = 1=low, 2=high SeeAlso: AX=002Ch,AX=236Ch ----------33206C----------------------------- INT 33 - LOGITECH MOUSE - SET LEFT OR RIGHT PARAMETER AX = 206Ch BX = parameter (00h = right, FFh = left) SeeAlso: AX=216Ch ----------33216C----------------------------- INT 33 - LOGITECH MOUSE - GET LEFT OR RIGHT PARAMETER AX = 216Ch Return: BX = parameter (00h = right, FFh = left) SeeAlso: AX=206Ch ----------33226C----------------------------- INT 33 - LOGITECH MOUSE - REMOVE DRIVER FROM MEMORY AX = 226Ch Note: this only frees memory; does not restore hooked interrupts ----------33236C----------------------------- INT 33 - LOGITECH MOUSE - SET BALLISTICS INFORMATION AX = 236Ch BX = 0=off, 1=on CX = 1=low, 2=high SeeAlso: AX=002Ch,AX=1F6Ch ----------33246C----------------------------- INT 33 - LOGITECH MOUSE - GET PARAMETERS AND RESET SERIAL MOUSE AX = 246Ch ES:DX -> parameter table buffer (see below) Return: AX = FFFFh if driver installed for serial mouse SeeAlso: AX=0000h,AX=256Ch Format of parameter table: Offset Size Description 00h WORD baud rate divided by 100 (serial mouse only) 02h WORD emulation (serial mouse only) 04h WORD report rate (serial mouse only) 06h WORD firmware revision (serial mouse only) 08h WORD 0 (serial mouse only) 0Ah WORD port (serial mouse only) 0Ch WORD physical buttons 0Eh WORD logical buttons ----------33256CBX00h ----------------------- INT 33 - LOGITECH MOUSE - SET PARAMETERS AX = 256Ch BX = 00h set baud rate (serial mouse only) CX = rate (0=1200, 1=2400, 2=4800, 3=9600) = 01h set emulation (serial mouse only) CX = emulation 0 = 5 byte packed binary 1 = 3 byte packed binary 2 = hexadecimal 3 = relative bit pad 4 = not supported 5 = MM Series 6 = not supported 7 = Microsoft = 02h set report rate (serial mouse only) CX = rate (0=10, 1=20, 2=35, 3=50, 4=70, 5=100, 6=150) = 03h set port (serial mouse only) CX = port (1, 2) = 04h set mouse logical buttons CX = buttons (2, 3) Return: AX = FFFFh if driver installed for serial mouse SeeAlso: AX=246Ch,AX=276Ch ----------33266C----------------------------- INT 33 - LOGITECH MOUSE - GET VERSION??? AX = 266Ch Return: BX = 'SS' CH = '4' major version number CL = '1' minor version number SeeAlso: AX=006Dh ----------33276C----------------------------- INT 33 - LOGITECH MOUSE - ??? Tries MMSeries, Baud 2400 AX = 276Ch SeeAlso: AX=256Ch ----------333000----------------------------- INT 33 - Smooth Mouse Driver, PrecisePoint - INSTALLATION CHECK AX = 3000h Return: AX = FFFFh if installed BX = version number (BH = major, BL = minor) Program: SMD is a programmer's library by Andy Hakim which provides a graphics-style mouse cursor in text mode. PrecisePoint is an SMD-based TSR which replaces the block mouse cursor in text applications. SeeAlso: AX=0000h,AX=3001h,AX=3003h ----------333001----------------------------- INT 33 - Smooth Mouse Driver, PrecisePoint - ENABLE SMOOTH MOUSE AX = 3001h Return: AX = status (0000h = disabled, 0001h = enabled) Note: SMD remains disabled if running under Desqview or in graphics mode SeeAlso: AX=0001h,AX=0002h,AX=3002h ----------333001----------------------------- INT 33 - Smooth Mouse Driver, PrecisePoint - DISABLE SMOOTH MOUSE AX = 3002h Return: AX = status (0000h = disabled, 0001h = enabled) SeeAlso: AX=0001h,AX=0002h,AX=3000h,AX=3001h ----------333003----------------------------- INT 33 - Smooth Mouse Driver, PrecisePoint - GET INFORMATION AX = 3003h BL = data structure selector 00h Primary Bitmap (used for 25 line mode) 01h Secondary Bitmap (used for 43/50 line modes) 02h Sacrifice Character Map 03h Program Information Return: ES:DI -> selected data structure SeeAlso: AX=3000h Format of Primary/Secondary Bitmap [SMD_BITMAP_STRUCT] Offset Size Description 00h BYTE vertical size of bitmap (00h - 10h) 01h BYTE horizontal size of bitmap (00h - 10h) 02h BYTE vertical hotspot position (00h - 10h) 03h BYTE horizontal hotspot position (00h - 10h) 04h 16 WORDs cursor bitmap data 14h 16 WORDs screen bitmap data Format of Sacrifice Character Map [SMD_SMAP_STRUCT] Offset Size Description 00h BYTE bytes are character values (00h-FFh) used in place of the 01h BYTE actual character for the corresponding position on the screen 02h BYTE +--------------+ occupied by part or all of the mouse 03h BYTE | 0h | 1h | 2h | cursor 04h BYTE |----+----+----| 05h BYTE | 3h | 4h | 5h | 06h BYTE |----+----+----| 07h BYTE | 6h | 7h | 8h | 08h BYTE +--------------+ Format of Program Information [SMD_INFO_STRUCT] Offset Size Description 00h WORD segment of old interrupt 33h handler 02h WORD offset of old interrupt 33h handler 04h WORD PSP of SMD 06h BYTE ENABLE/DISABLE manual setting status 07h BYTE ENABLE/DISABLE internal usage status ----------333004----------------------------- INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION AX = 3004 SeeAlso: AX=3000h ----------333005----------------------------- INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION AX = 3005 SeeAlso: AX=3000h ----------334F00----------------------------- INT 33 - LOGITECH MOUSE v6.10+ - GET ??? AX = 4F00h Return: AX = 004Fh if supported BX = ??? ES:DI -> ??? SeeAlso: AX=4F01h ----------334F01----------------------------- INT 33 - LOGITECH MOUSE v6.10+ - ??? AX = 4F01h ES = ??? Return: AX = 004Fh if supported ES:DI -> ??? SeeAlso: AX=4F00h ----------34--------------------------------- INT 34 - FLOATING POINT EMULATION - OPCODE D8h Note: the floating-point emulators in Borland and Microsoft languages and Lahey FORTRAN use this interrupt SeeAlso: INT 35,INT 3E ----------35--------------------------------- INT 35 - FLOATING POINT EMULATION - OPCODE D9h Note: the floating-point emulators in Borland and Microsoft languages and Lahey FORTRAN use this interrupt SeeAlso: INT 34,INT 36 ----------36--------------------------------- INT 36 - FLOATING POINT EMULATION - OPCODE DAh Note: the floating-point emulators in Borland and Microsoft languages and Lahey FORTRAN use this interrupt SeeAlso: INT 35,INT 37 ----------37--------------------------------- INT 37 - FLOATING POINT EMULATION - OPCODE DBh Note: the floating-point emulators in Borland and Microsoft languages and Lahey FORTRAN use this interrupt SeeAlso: INT 36,INT 38 ----------38--------------------------------- INT 38 - FLOATING POINT EMULATION - OPCODE DCh Note: the floating-point emulators in Borland and Microsoft languages and Lahey FORTRAN use this interrupt SeeAlso: INT 37,INT 39 ----------39--------------------------------- INT 39 - FLOATING POINT EMULATION - OPCODE DDh Note: the floating-point emulators in Borland and Microsoft languages and Lahey FORTRAN use this interrupt SeeAlso: INT 38,INT 3A ----------3A--------------------------------- INT 3A - FLOATING POINT EMULATION - OPCODE DEh Note: the floating-point emulators in Borland and Microsoft languages and Lahey FORTRAN use this interrupt SeeAlso: INT 39,INT 3B ----------3B--------------------------------- INT 3B - FLOATING POINT EMULATION - OPCODE DFh Note: the floating-point emulators in Borland and Microsoft languages and Lahey FORTRAN use this interrupt SeeAlso: INT 3A,INT 3C ----------3C--------------------------------- INT 3C - FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE Notes: the floating-point emulators in Borland and Microsoft languages and Lahey FORTRAN use this interrupt the generated code is CD 3C xy mm .... where xy is a modified ESC instruction and mm is the modR/M byte. The xy byte appears to be encoded as s s 0 1 1 x x x or s s 0 0 0 x x x where "ss" specifies the segment override: 00 -> DS: 01 -> SS: 10 -> CS: 11 -> ES: SeeAlso: INT 3B,INT 3D ----------3D--------------------------------- INT 3D - FLOATING POINT EMULATION - STANDALONE FWAIT Note: the floating-point emulators in Borland and Microsoft languages use this interrupt SeeAlso: INT 3C,INT 3E ----------3E--------------------------------- INT 3E - FLOATING POINT EMULATION - Borland LANGUAGES "SHORTCUT" CALL Note: the two bytes following the INT 3E instruction are the subcode and a NOP (90h), except for subcodes DCh and DEh, where the second byte is a register count (01h-08h) SeeAlso: INT 3D Subcode Function DCh load 8086 stack with 8087 registers; overwrites the 10*N bytes at the top of the stack prior to the INT 3E with the 8087 register contents DEh load 8087 registers from top of 8086 stack; ST0 is furthest from top of 8086 stack E0h round TOS and R1 to single precision, compare, pop twice returns AX=8087 status word, FLAGS=8087 condition bits E2h round TOS and R1 to double precision, compare, pop twice returns AX=8087 status word, FLAGS=8087 condition bits Note: buggy in TPas5.5, because it sets the 8087 precision control field to the undocumented value 01h; this results in actually rounding to single precision E4h compare TOS/R1 with two POP's returns FLAGS=8087 condition bits E6h compare TOS/R1 with POP returns FLAGS=8087 condition bits E8h FTST (check TOS value) returns FLAGS=8087 condition bits EAh FXAM (check TOS value) returns AX=8087 status word ECh sine(ST0) EEh cosine(ST0) F0h tangent(ST0) F2h arctangent(ST0) F4h ST0 = ln(ST0) F6h ST0 = log2(ST0) F8h ST0 = log10(ST0) FAh ST0 = e**ST0 FCh ST0 = 2**ST0 FEh ST0 = 10**ST0 ----------3F--------------------------------- INT 3F - Overlay manager interrupt (Microsoft LINK.EXE, Borland TLINK VROOMM) Note: INT 3F is the default, and may be overridden while linking SeeAlso: INT FE"OVERLAY" ----------3F--------------------------------- INT 3F - Microsoft Dynamic Link Library manager SeeAlso: INT 21/AH=4Bh --------------------------------------------- Interrupt List, part 6 of 7 This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown ----------40--------------------------------- INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS SeeAlso: INT 13,INT 63 ----------40--------------------------------- INT 40 - Z100 - Master 8259 - Parity error or S100 error SeeAlso: INT 41"Z100",INT FF"Z100" ----------41--------------------------------- INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE Note: the default parameter table array is located at F000h:E401h in 100% compatible BIOSes; the pointer may be overridden by the hard disk controller's BIOS to support drive formats unknown to the ROM BIOS SeeAlso: INT 13/AH=09h,INT 1E,INT 46 Format of fixed disk parameters: Offset Size Description 00h WORD number of cylinders 02h BYTE number of heads 03h WORD starting reduced write current cylinder (XT only, 0 for others) 05h WORD starting write precompensation cylinder number 07h BYTE maximum ECC burst length (XT only) 08h BYTE control byte bits 0-2: drive option (XT only, 0 for others) bit 3: set if more than 8 heads (AT and later only) bit 4: always 0 bit 5: set if manufacturer's defect map on max cylinder+1 (AT and later only) bit 6: disable ECC retries bit 7: disable access retries 09h BYTE standard timeout (XT only, 0 for others) 0Ah BYTE formatting timeout (XT only, 0 for others) 0Bh BYTE timeout for checking drive (XT only, 0 for others) 0Ch WORD cylinder number of landing zone (AT and later only) 0Eh BYTE number of sectors per track (AT and later only) 0Fh BYTE reserved ----------41--------------------------------- INT 41 - Z100 - Master 8259 - Processor Swap SeeAlso: INT 40"Z100",INT 42"Z100" ----------4112------------------------------- INT 41 P - MS Windows debugging kernel - "OutputDebugString" AH = 12h ??? Return: ??? SeeAlso: AH=50h ----------4150------------------------------- INT 41 P - MS Windows debugging kernel - "DefineDebugSegment" AH = 50h ??? Return: ??? SeeAlso: AH=12h ----------42--------------------------------- INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA) SeeAlso: INT 10 Note: not used by PS/2 built-in VGA or XGA ----------42--------------------------------- INT 42 - Z100 - Master 8259 - Timer SeeAlso: INT 41"Z100",INT 43"Z100" ----------43--------------------------------- INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA) points at graphics data for characters 00h-7Fh of the current font SeeAlso: INT 1F,INT 44"VIDEO" ----------43--------------------------------- INT 43 - Z100 - Master 8259 - Slave 8259 input Note: slave runs in special fully nested mode SeeAlso: INT 42"Z100",INT 44"Z100" ----------44--------------------------------- INT 44 - VIDEO DATA - ROM BIOS CHARACTER FONT, CHARACTERS 00h-7Fh (PCjr) points at graphics data for current character font SeeAlso: INT 1F,INT 43"VIDEO" ----------44--------------------------------- INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API ----------44--------------------------------- INT 44 - IBM 3270-PC High Level Language API DS:SI -> parameter control block ----------44--------------------------------- INT 44 - Z100 - Master 8259 - Serial A SeeAlso: INT 43"Z100",INT 45"Z100" ----------45--------------------------------- INT 45 - Z100 - Master 8259 - Serial B SeeAlso: INT 44"Z100",INT 46"Z100" ----------46--------------------------------- INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE SeeAlso: INT 13/AH=09h,INT 41 ----------46--------------------------------- INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen SeeAlso: INT 45"Z100",INT 47"Z100" ----------47--------------------------------- INT 47 - Z100 - Master 8259 - Printer SeeAlso: INT 46"Z100",INT 48"Z100" ----------478000----------------------------- INT 47 - SQL Base - DATABASE ENGINE API AX = 8000h DS:BX -> parameter block, first word is function number Note: SQL Base is a network-oriented database engine by Gupta Technologies Values for function number: 01h "SQLFINI" initalialize application's use of the database 02h "SQLFDON" application is done using the database 03h "SQLFCON" connect to a cursor/database 04h "SQLFDIS" disconnect from a cursor/database 05h "SQLFCOM" compile a SQL command 06h "SQLFEXE" execute a SQL command 07h "SQLFCEX" compile and execute a SQL command 08h "SQLFCMT" commit a transaction to the database 09h "SQLFDES" describe the items of a SELECT statement 0Ah "SQLFGFI" get fetch information 0Bh "SQLFFBK" fetch previous result row from SELECT statement 0Ch "SQLFFET" fetch next result row from SELECT statement 0Dh "SQLFEFB" enable fetch backwards 0Eh "SQLFPRS" position in result set 0Fh "SQLFURS" undo result set 10h "SQLFNBV" get number of bind variables 11h "SQLFBND" bind data variables 12h "SQLFBNN" bind numerics 13h "SQLFBLN" bind long number 14h "SQLFBLD" bind long data variables 15h "SQLFSRS" start restriction set processing 16h "SQLFRRS" restart restriction set processing 17h "SQLFCRS" close restriction set 18h "SQLFDRS" drop restriction set 19h "SQLFARF" apply Roll Forward journal 1Ah "SQLFERF" end Roll Forward journal 1Bh "SQLFSRF" start Roll Forward journal 1Ch "SQLFSTO" store a compiled SQL command 1Dh "SQLFRET" retrieve a compiled SQL command 1Eh "SQLFDST" drop a stored command 1Fh "SQLFCTY" get command type 20h "SQLFEPO" get error position 21h "SQLFGNR" get number of rows 22h "SQLFNSI" get number of select items 23h "SQLFRBF" get Roll Back flag 24h "SQLFRCD" get return code 25h "SQLFROW" get number of ROWs 26h "SQLFSCN" set cursor name 27h "SQLFSIL" set isolation level 28h "SQLFSLP" set log parameters 29h "SQLFSSB" set select buffer 2Ah "SQLFSSS" set sort space 2Bh "SQLFRLO" read long 2Ch "SQLFWLO" write long 2Dh "SQLFLSK" long seek 2Eh "SQLFGLS" get long size 2Fh "SQLFELO" end long operation 30h "SQLFRBK" roll back a transaction from the database 31h "SQLFERR" error message 32h "SQLFCPY" copy 33h "SQLFR01" reserved 34h "SQLFSYS" system 35h "SQLFSTA" statistics 36h "SQLFR02" reserved 37h "SQLFXAD" extra add 38h "SQLFXCN" extra character to number 39h "SQLFXDA" extra date add 3Ah "SQLFXDP" extra date picture 3Bh "SQLFXDV" extra divide 3Ch "SQLFXML" extra multiply 3Dh "SQLFXNP" extra number picture 3Eh "SQLFXPD" extra picture date 3Fh "SQLFXSB" extra subtract 40h "SQLFINS" install database 41h "SQLFDIN" deinstall database 42h "SQLFDIR" directory of databases 43h "SQLFTIO" timeout 44h "SQLFFQN" get fully qualified column name 45h "SQLFEXP" explain execution plan 46h "SQLFFER" get full error 47h "SQLFBKP" begin online backup 48h "SQLFRDC" read backup data chunk 49h "SQLFEBK" end backup 4Ah "SQLFRES" begin restore from backup 4Bh "SQLFWDC" write backup data chunk for restore 4Ch "SQLFRRD" recover restored database to consistent state 4Dh "SQLFERS" end restore 4Eh "SQLFNRR" return number of result set rows 4Fh "SQLFSTR" start restriction mode 50h "SQLFSPR" stop restriction mode 51h "SQLFCNC" connect 2 52h "SQLFCNR" connect with no recovery 53h "SQLFOMS" set output message size 54h "SQLFIMS" set input message size 55h "SQLFSCP" set cache pages 56h "SQLFDSC" describe items of a SELECT statement (external) 57h "SQLFLAB" get label info for items in SELECT statement 58h "SQLFCBV" clear bind variables 59h "SQLFGET" get database information 5Ah "SQLFSET" set database information 5Bh "SQLFTEC" translate error code ----------478001----------------------------- INT 47 - SQL Base - GET VERSION NUMBER AX = 8001h Return: ??? Note: SQL Base is a network-oriented database engine by Gupta Technologies ----------48--------------------------------- INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr) SeeAlso: INT 49"PCjr" ----------48--------------------------------- INT 48 - Z100 - Slave 8259 - S100 vectored line 0 SeeAlso: INT 47"Z100",INT 49"Z100" ----------48--------------------------------- INT 48 - Watstar PC Network data pointer 1 SeeAlso: INT 49"Watstar" ----------49--------------------------------- INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr) SeeAlso: INT 48"PCjr" Format of translation table: Offset Size Description 00h BYTE number of nonkeyboard scancodes in the table 01h N WORDs high byte 00h (NUL) byte scancode with low order byte representing the scancode mapped values relative to their input values within the range of 56h through 7Eh ----------49--------------------------------- INT 49 - Z100 - Slave 8259 - S100 vectored line 1 SeeAlso: INT 48"Z100",INT 4A"Z100" ----------49--------------------------------- INT 49 - Texas Instruments PC - VIDEO I/O??? apparently provides direct video display on the TI Professional PC ----------49--------------------------------- INT 49 - Watstar PC Network data pointer 2 SeeAlso: INT 49"Watstar" ----------490001----------------------------- INT 49 - MAGic v1.16+ - TURN ON MAGNIFICATION AX = 0001h Return: AX = status 0000h cannot magnify current video mode 0002h magnified (text mode) 0003h magnified (graphics mode) FFFDh function works only in magnified mode FFFFh MAGic busy, retry later BX,CX,DX destroyed Notes: MAGic (MAGnification In Color) is a TSR by Microsystems Software, Inc. providing 2x2 text and graphics magnification on VGA, XGA, and SVGA INT 49 is the default, but may be overridden on the commandline. The actual interrupt in use may be found by searching for the signature "MAGic" or "xMAGic" (for the deluxe version) immediately preceding the interrupt handler (this is also the installation check). MAGic uses CodeRunneR, which places the signature "RT" at offset 0000h in the interrupt handler's segment, followed by MAGic's TSR ID of "VMAG". SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0008h ----------490002----------------------------- INT 49 - MAGic v1.16+ - TURN OFF MAGNIFICATION AX = 0002h Return: AX = status (see AX=0001h) BX,CX,DX destroyed SeeAlso: AX=0001h ----------490003----------------------------- INT 49 - MAGic v1.16+ - SHIFT MAGNIFIED WINDOW TO INCLUDE SPECIFIED LOCATION AX = 0003h BX = vertical position (character row [text] or pixel row [graphics]) DX = horizontal position (char column [text] or 8-pixel units [gr]) Return: AX = status 0000h successful FFFFh MAGic busy, retry later BX,CX,DX destroyed Note: window is not moved if the position is inside the current window SeeAlso: AX=0001h,AX=0004h,AX=0005h ----------490004----------------------------- INT 49 - MAGic v1.16+ - REPOSITION MAGNIFIED WINDOW AX = 0004h BX = vertical position of upper left corner DX = horizontal position Return: AX = status (see AX=0003h) BX,CX,DX destroyed SeeAlso: AX=0001h,AX=0003h,AX=0005h ----------490005----------------------------- INT 49 - MAGic v1.16+ - GET POSITION OF MAGNIFIED WINDOW AX = 0005h Return: AX = status 0000h successful BX = vertical position (char row or pixel row) DX = horizontal position (char column or 8-pixel units) FFFFh MAGic busy, retry later BX,DX destroyed CX destroyed SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0006h,AX=0007h ----------490006----------------------------- INT 49 - MAGic v1.16+ - GET SIZE OF FULL SCREEN AX = 0006h Return: AX = status 0000h successful BX = vertical size (char rows or pixel rows) DX = horizontal size (char cols or 8-pixel units) FFFFh MAGic busy, retry later BX,DX destroyed CX destroyed SeeAlso: AX=0001h,AX=0005h,AX=0007h ----------490007----------------------------- INT 49 - MAGic v1.16+ - GET SIZE OF MAGNIFICATION WINDOW AX = 0007h Return: AX = status 0000h successful BX = vertical size (char rows or pixel rows) DX = horizontal size (char cols or 8-pixel units) FFFEh invalid function FFFFh MAGic busy, retry later BX,DX destroyed CX destroyed BUG: in v1.16 and v1.17, this function is not recognized as valid, but AX=0000h is accepted and will branch into hyperspace SeeAlso: AX=0001h,AX=0006h ----------490008----------------------------- INT 49 - MAGic v1.23+ - SET TEXT MODE MAGNIFICATION SIZE AX = 0008h BX = scaling factor (01h=1.4 times, 02h, 04h, 06h, 08h, 09h=12 times) Return: AX = status 0000h successful FFFBh scaling factor only available in MAGic Deluxe FFFCh already in magnified state, can't set size Notes: this call specifies the amount a subsequent call to AX=0001h should magnify the display scaling factors greater than 2 are only available in MAGic Deluxe SeeAlso: AX=0001h ----------4A--------------------------------- INT 4A - SYSTEM - USER ALARM HANDLER This interrupt is invoked by the BIOS when a real-time clock alarm occurs. An application may use it to perform an action at a predetermined time; however, this interrupt is called from within a hardware interrupt handler, so all usual precautions against reentering DOS must be taken. SeeAlso: INT 1A/AH=06h ----------4A--------------------------------- INT 4A - Z100 - Slave 8259 - S100 vectored line 2 SeeAlso: INT 49"Z100",INT 4B"Z100" ----------4B--------------------------------- INT 4B - Z100 - Slave 8259 - S100 vectored line 3 SeeAlso: INT 4A"Z100",INT 4C"Z100" ----------4B--------------------------------- INT 4B - Common Access Method SCSI interface (draft revision 1.9) ES:DI -> CAM Control Block (see INT 4F/AX=8100h) Notes: the CAM committee moved the interface to INT 4F after revision 1.9 to avoid conflicting with the IBM SCSI interface and the Virtual DMA specification the installation check for the driver is the string "SCSI_CAM" eight bytes past the INT 4Bh handler it is not known whether any drivers actually implemented this interface on INT 4B instead of INT 4F SeeAlso: INT 4F/AX=8100h ----------4B80------------------------------- INT 4B - IBM SCSI interface AH = 80h details not yet available ----------4B8102DX0000----------------------- INT 4B - Virtual DMA Specification (VDS) - GET VERSION AX = 8102h DX = 0000h Return: CF clear if successful AH = major version number AL = minor version number BX = product number 0000h for Quadtel's QMAPS and Hewlett-Packard's HPMM.SYS 0001h for Microsoft's EMM386.EXE 4560h ("E`") for Qualitas' 386MAX 4D43h ("MC") for V Communication's Memory Commander 5145h ("QE") for Quarterdeck's QEMM-386 CX = product revision number always 0000h for QMAPS and HPMM.SYS always 0001h for Microsoft's EMM386.EXE v4.20-4.41 SI:DI = maximum DMA buffer size DX = flags bit 0: PC/XT bus (DMA in first megabyte only) 1: physical buffer/remap region in first megabyte 2: automatic remap enabled 3: all memory is physically contiguous 4-15: reserved (zero) CF set on error AL = error code (see below) Note: bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is apparently not always the case SeeAlso: INT 31 Values for error code: 01h region not in contiguous memory 02h region crossed a physical alignment boundary 03h unable to lock pages 04h no buffer available 05h region too large for buffer 06h buffer currently in use 07h invalid memory region 08h region was not locked 09h number of physical pages greater than table length 0Ah invalid buffer ID 0Bh copy out of buffer range 0Ch invalid DMA channel number 0Dh disable count overflow 0Eh disable count underflow 0Fh function not supported 10h reserved flag bits set in DX Format of DMA descriptor structure (DDS): Offset Size Description 00h DWORD region size 04h DWORD offset 08h WORD segment/selector 0Ah WORD buffer ID 0Ch DWORD physical address Format of Extended DMA descriptor structure (EDDS): Offset Size Description 00h DWORD region size 04h DWORD offset 08h WORD segment/selector 0Ah WORD reserved 0Ch WORD number available 0Eh WORD number used 10h DWORD region 0 physical address 14h DWORD region 0 size in bytes 18h DWORD region 1 physical address 1Ch DWORD region 1 size in bytes ... Format of Extended DMA descriptor structure (EDDS) with page table entries: Offset Size Description 00h DWORD region size 04h DWORD offset 08h WORD segment/selector 0Ah WORD reserved 0Ch WORD number available 0Eh WORD number used 10h DWORD page table entry 0 (same as 80386 page table entry) 14h DWORD page table entry 1 ... Note: bits 1-11 of the page table entries should be zero; bit 0 set if page is present and locked ----------4B8103----------------------------- INT 4B - Virtual DMA Specification - LOCK DMA REGION AX = 8103h DX = flags bit 0: reserved (zero) 1: data should be copied into buffer (ignored if bit 2 set) 2: buffer should not be allocated if region noncontiguous or crosses physical alignment boundary specified by bits 4-5 3: don't attempt automatic remap 4: region must not cross 64K physical alignment boundary 5: region must not cross 128K physical alignment boundary 6-15: reserved (zero) ES:DI -> DMA descriptor structure (see AX=8102h) Return: CF clear if successful DDS physical address field filled in DDS buffer ID field filled (0000h if no buffer allocated) CF set on error AL = error code (see AX=8102h) DDS region size field filled wth maximum contiguous length in bytes SeeAlso: AX=8104h,AX=8105h ----------4B8104----------------------------- INT 4B - Virtual DMA Specification - UNLOCK DMA REGION AX = 8104h DX = flags bit 0: reserved (zero) 1: data should be copied out of buffer 2-15: reserved (zero) ES:DI -> DMA descriptor structure (see AX=8102h) with region size, physical address, and buffer ID fields set Return: CF clear if successful DDS physical address field set DDS buffer ID field set (0000h if no buffer allocated) CF set on error AL = error code (see AX=8102h) DDS region size field filled wth maximum contiguous length in bytes SeeAlso: AX=8103h,AX=8106h ----------4B8105----------------------------- INT 4B - Virtual DMA Specification - SCATTER/GATHER LOCK REGION AX = 8105h DX = flags bits 0-5: reserved (zero) 6: EDDS should be returned with page table entries 7: only present pages should be locked (not-present pages receive entry of 0000h) 8-15: reserved (zero) ES:DI -> Extended DMA descriptor structure (see AX=8102h) region size, linear segment, linear offset, and number avail fields set Return: CF clear if successful EDDS number used field set if DX bit 6 set, lower 12 bits of BX = offset in first page CF set on error AL = error code (see AX=8102h) EDDS region size field filled with max length in bytes that can be locked and described in the EDDS table SeeAlso: AX=8103h,AX=8106h ----------4B8106----------------------------- INT 4B - Virtual DMA Specification - SCATTER/GATHER UNLOCK REGION AX = 8106h DX = flags bits 0-5: reserved (zero) 6: EDDS contains page table entries 7: EDDS may contain not-present pages (entry = 0000h) 8-15: reserved (zero) ES:DI -> Extended DMA descriptor structure (see AX=8102h) returned by AX=8105h Return: CF clear if successful CF set on error AL = error code (see AX=8102h) SeeAlso: AX=8104h,AX=8105h ----------4B8107----------------------------- INT 4B - Virtual DMA Specification - REQUEST DMA BUFFER AX = 8107h DX = flags bit 0: reserved (zero) 1: data should be copied into buffer 2-15: reserved (zero) ES:DI -> DMA descriptor structure (see AX=8102h) with region size set (also region offset and region segment if DX bit 1 set) Return: CF clear if successful DDS physical address and buffer ID set DDS region size filled with length of buffer CF set on error AL = error code (see AX=8102h) SeeAlso: AX=8108h ----------4B8108----------------------------- INT 4B - Virtual DMA Specification - RELEASE DMA BUFFFER AX = 8108h DX = flags bit 0: reserved (zero) 1: data should be copied out of buffer 2-15: reserved (zero) ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID set (also region size/region offset/segment if DX bit 1 set) Return: CF clear if successful CF set on error AL = error code (see AX=8102h) SeeAlso: AX=8107h ----------4B8109DX0000----------------------- INT 4B - Virtual DMA Specification - COPY INTO DMA BUFFER AX = 8109h DX = 0000h ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID, region segment/offset, and region size fields set BX:CX = starting offset into DMA buffer Return: CF clear if successful CF set on error AL = error code (see AX=8102h) SeeAlso: AX=810Ah ----------4B810ADX0000----------------------- INT 4B - Virtual DMA Specification - COPY OUT OF DMA BUFFER AX = 810Ah DX = 0000h ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID, region segment/offset, and region size fields set BX:CX = starting offset into DMA buffer Return: CF clear if successful CF set on error AL = error code (see AX=8102h) SeeAlso: AX=8109h ----------4B810B----------------------------- INT 4B - Virtual DMA Specification - DISABLE DMA TRANSLATION AX = 810Bh BX = DMA channel number DX = 0000h Return: CF clear if successful CF set on error AL = error code (see AX=8102h) SeeAlso: AX=810Ch ----------4B810C----------------------------- INT 4B - Virtual DMA Specification - ENABLE DMA TRANSLATION AX = 810Ch BX = DMA channel number DX = 0000h Return: CF clear if successful ZF set if disable count decremented to zero CF set on error AL = error code (see AX=8102h) SeeAlso: AX=810Bh ----------4B810D----------------------------- INT 4B - QEMM-386 - BUG AX = 810Dh Note: the code in QEMM v5.11 and 6.00 jumps to an invalid location on this call ----------4C--------------------------------- INT 4C - Z100 - Slave 8259 - S100 vectored line 4 SeeAlso: INT 4B"Z100",INT 4D"Z100" ----------4D--------------------------------- INT 4D - Z100 - Slave 8259 - S100 vectored line 5 SeeAlso: INT 4C"Z100",INT 4E"Z100" ----------4E--------------------------------- INT 4E - TI Professional PC - DISK I/O used instead of INT 13 on the TI Professional PC SeeAlso: INT 13 ----------4E--------------------------------- INT 4E - Z100 - Slave 8259 - S100 vectored line 6 SeeAlso: INT 4D"Z100",INT 4F"Z100" ----------4F--------------------------------- INT 4F - Z100 - Slave 8259 - S100 vectored line 7 SeeAlso: INT 4E"Z100" ----------4F8100----------------------------- INT 4F - Common Access Method SCSI interface rev 2.3 - SEND CCB TO XPT/SIM AX = 8100h ES:BX -> CAM Control Block (CCB) (see below) Return: AH = status 00h successful 01h invalid CCB address (0000h:0000h) Note: the SCSI Interface Module (SIM) may complete the requested function and invoke the completion callback function before this call returns SeeAlso: AX=8200h,INT 4B"Common Access Method" Format of CAM Control Block: Offset Size Description 00h DWORD physical address of this CCB 04h WORD CAM control block length 06h BYTE function code (see below) 07h BYTE CAM status (see below) 08h BYTE SCSI status 09h BYTE path ID (FFh = XPT) 0Ah BYTE target ID 0Bh BYTE logical unit number 0Ch BYTE CAM flags bits 7-6: direction 00 reserved 01 in 10 out 11 no data transfer bit 5: disable autosense 4: scatter/gather 3: disable callback on completion 2: linked CDB 1: tagged queue action enable 0: CDB is a pointer 0Dh BYTE CAM flags bit 7: disable disconnect 6: initiate synchronous transfers \ mutually 5: disable synchronous transfers / exclusive 4: SIM queue priority 1 head insertion 0 tail insertion (normal) bit 3: SIM queue freeze 2: engine synchronize bits 1-0: reserved 0Eh BYTE CAM address flags bit 7: SG list/data (0 = host, 1 = engine) bit 6: CDB pointer (bits 6-1: 0=virtual addr, 1=phys addr) bit 5: SG list/data bit 4: sense buffer bit 3: message buffer bit 2: next CCB bit 1: callback on completion bit 0: reserved 0Fh BYTE target-mode flags bit 7: data buffer valid bit 6: status valid bit 5: message buffer valid bit 4: reserved bit 3: phase-cognizant mode bit 2: target CCB available bit 1: disable autodisconnect bit 0: disable autosave/restore ---function 02h--- 10h DWORD pointer to 36-byte buffer for inquiry data or 0000h:0000h 14h BYTE peripheral device type of target logical unit number ---function 03h--- 10h BYTE version number (00h-07h prior to rev 1.7, 08h = rev 1.7, 09h-FFh = rev no, i.e. 23h = rev 2.3) 11h BYTE SCSI capabilities bit 7: modify data pointers 6: wide bus (32 bits) 5: wide bus (16 bits) 4: synchronous transfers 3: linked commands 2: reserved 1: tagged queueing 0: soft reset 12h BYTE target mode support bit 7: processor mode 6: phase-cognizant mode 5-0: reserved 13h BYTE miscellaneous flags bit 7: scanned high to low instead of low to high 6: removables not included in scan 5: inquiry data not kept by XPT 4-0: reserved 14h WORD engine count 16h 14 BYTEs vendor-specific data 24h DWORD size of private data area 28h DWORD asynchronous event capabilities bits 31-24: vendor-specific 23-8: reserved 7: new devices found during rescan 6: SIM module deregistered 5: SIM module registered 4: sent bus device reset to target 3: SCSI AEN 2: reserved 1: unsolicited reselection 0: unsolicited SCSI bus reset 2Ch BYTE highest path ID assigned 2Dh BYTE SCSI device ID of initiator 2Eh 2 BYTEs reserved 30h 16 BYTEs SIM vendor ID 40h 16 BYTEs HBA (host bus adaptor) vendor ID 50h 4 BYTEs operating-system dependant usage ---functions 00h,04h,11h,12h--- no additional fields ---function 05h--- 10h DWORD asynchronous event enables (see CAM function 03h above) 14h DWORD pointer to asynchronous callback routine 18h DWORD pointer to peripheral driver buffer 1Ch BYTE size of peripheral buffer ---function 06h--- 10h BYTE peripheral device type of target ---functions 10h,13h--- 10h DWORD pointer to CCB to be aborted ---function 20h--- 10h WORD engine number 12h BYTE engine type 00h buffer memory 01h lossless compression 02h lossy compression 03h encryption 13h BYTE engine algorithm ID 00h vendor-unique 01h LZ1 variation 1 (STAC) 02h LZ2 variation 1 (HP DCZL) 03h LZ2 variation 2 (Infochip) 14h DWORD engine memory size ---function 21h--- 10h DWORD pointer to peripheral driver 14h 4 BYTEs reserved 18h DWORD OS-dependent request-mapping info 1Ch DWORD address of completion callback routine 20h DWORD pointer to scatter/gather list or data buffer 24h DWORD length of data transfer 28h DWORD pointer to engine buffer data 2Ch 2 BYTEs reserved 2Eh WORD number of scatter/gather entries 30h DWORD maximum destination data length 34h DWORD length of destination data 38h DWORD source residual length 3Ch 12 BYTEs reserved 48h DWORD OS-dependent timeout value 4Ch 4 BYTEs reserved 50h WORD engine number 52h WORD vendor-unique flags 54h 4 BYTEs reserved 58h N BYTEs private data area for SIM ---function 30h--- 10h WORD group 6 vendor-unique CDB length 12h WORD group 7 vendor-unique CDB length 14h DWORD pointer to target CCB list 18h WORD number of target CCBs ---other functions--- 10h DWORD pointer to peripheral driver 14h DWORD pointer to next CCB 18h DWORD OS-dependent request mapping information 1Ch DWORD address of completion callback routine 20h DWORD pointer to scatter/gather list or data buffer 24h DWORD length of data transfer 28h DWORD pointer to sense info buffer 2Ch BYTE length of sense info buffer 2Dh BYTE CDB length 2Eh WORD number of scatter/gather entries 30h 4 BYTEs reserved 34h BYTE SCSI status 35h 3 BYTEs reserved 38h DWORD residual length 40h 12 BYTEs Command Descriptor Block (CDB) 44h DWORD OS-dependent timeout value 48h DWORD pointer to message buffer 4Ch WORD length of message buffer 4Eh WORD vendor-unique flags 50h BYTE tag queue action 51h 3 BYTEs reserved 54h N BYTEs private data area for SIM Values for CAM function code: 00h NOP 01h execute SCSI I/O 02h get device type 03h path inquiry 04h release SIM queue 05h set async callback 06h set device type 07h-0Fh reserved 10h abort SCSI command 11h reset SCSI bus 12h reset SCSI device 13h terminate I/O process 14h-1Fh reserved 20h engine inquiry 21h execute engine request 22h-2Fh reserved 30h enable logical unit number 31h execute target I/O 32h-7Fh reserved 80h-FFh vendor-specific functions Values for CAM status: 00h request in progress 01h request successful 02h host aborted request 03h unable to abort request 04h request completed with error 05h CAM is busy 06h invalid request 07h invalid path ID 08h no such SCSI device 09h unable to terminate I/O process 0Ah timeout on target selection 0Bh timeout on command 0Dh receive message rejection 0Eh sent/received SCSI bus reset 0Fh detected uncorrectable parity error 10h Autosense request failed 11h no HBA detected 12h data over/underrun 13h bus freed unexpectedly 14h target bus phase sequence failure 15h CCB too small 16h requested capability not available 17h sent bus device reset 18h terminate I/O process 38h invalid LUN 39h invalid target ID 3Ah unimplemented function 3Bh nexus not established 3Ch invalid initiator ID 3Dh received SCSI Command Descriptor Block 3Eh LUN already enabled 3Fh SCSI bus busy Note: bit 6 set to indicate frozen SIM queue bit 7 set to indicate valid autosense Completion callback function called with: interrupts disabled ES:BX -> completed CCB Asynchronous callback function called with: AH = opcode AL = path ID generating callback DH = target ID causing event DL = LUN causing event CX = data byte count (if applicable) ES:BX -> data buffer (if applicable) Return: all registers preserved ----------4F8200CX8765----------------------- INT 4F - Common Access Method SCSI interface rev 2.3 - INSTALLATION CHECK AX = 8200h CX = 8765h DX = CBA9h Return: AH = 00h if installed CX = 9ABCh DX = 5678h ES:DI -> "SCSI_CAM" SeeAlso: AX=8100h,INT 4B"Common Access Method" ----------50--------------------------------- INT 50 - TIL Xpert AIM (X.25) AH = function ----------50--------------------------------- INT 50 - IRQ0 relocated by DESQview Notes: this is the default location for older versions; DESQview v2.26+ searches for unused ranges of interrupts and uses the lowest available range in its list for relocating these IRQs and the next lowest for relocating IRQ8-IRQ15 a range of eight interrupts starting at a multiple of 8 is considered available if all vectors are identical and it has not been excluded with an /XB:nn commandline switch the list of ranges for v2.26 is 50h,58h,68h,78h,F8h (if < two of these are available, F8h and then 50h are used anyway) the list of ranges for v2.31+ is 68h,78h,88h-B8h,F8h (if < two of these are available, F8h and then F0h are used anyway) SeeAlso: INT 08"IRQ0",INT 51"DESQview",INT 54"DESQview",INT 58"DESQview" ----------50--------------------------------- INT 50 - IRQ0 relocated by IBM 3278 emulation control program SeeAlso: INT 51"IBM 3278" ----------50--------------------------------- INT 50 - IRQ0 relocated by OS/2 v1.x SeeAlso: INT 51"OS/2" ----------500000----------------------------- INT 50 - Vanderaart TEXT WINDOWS - OPEN TEXT WINDOW AX = 0000h ES:BX -> name string or ES:0000h if none CH,CL = row,column of upper left corner DH,DL = row,column of lower right corner Return: AX = window handle or 0000h if not installed FFFFh on error SeeAlso: AX=0001h,AX=0002h ----------500001----------------------------- INT 50 - Vanderaart TEXT WINDOWS - CLOSE TEXT WINDOW AX = 0001h DI = window handle SeeAlso: AX=0000h ----------500002----------------------------- INT 50 - Vanderaart TEXT WINDOWS - PUT CHARACTER IN WINDOW AX = 0002h BL = character BH = attribute DL = column DH = row DI = window handle Return: AX = status 0000h if successful FFFFh if outside window SeeAlso: AX=0000h ----------500003----------------------------- INT 50 - Vanderaart TEXT WINDOWS - OUTPUT LINE TO WINDOW AX = 0003h ES:BX -> text string CX = string length (0000h if ASCIZ string) DL = position (FFh centered, else flush left) DH = starting row DI = window handle Return: AX = status 0000h successful FFFFh did not fit in window ----------500004----------------------------- INT 50 - Vanderaart TEXT WINDOWS - GET KEY AX = 0004h CH = type 00h any key 01h 'J' or 'N' (Dutch for yes/no) Return: AX = key ----------500005----------------------------- INT 50 - Vanderaart TEXT WINDOWS - CHANGE ATTRIBUTE AX = 0005h BL = new attribute CH,CL = row,column of upper left corner DH,DL = row,column of lower right corner DI = window handle ----------500006----------------------------- INT 50 - Vanderaart TEXT WINDOWS - EDIT LINE IN WINDOW AX = 0006h ES:BX -> text string CH = type 00h everything 01h uppercase only 02h positive numbers 03h Dutch postal code ("9999 AA") 04h 'J' or 'N' (Dutch yes/no) 05h telephone or FAX number 06h positive or negative number 07h date (dd/mm/yy) 08h money 09h '1' through '8' 0Ah '1' through '4' 0Bh uppercase filenames DH,DL = row,column of upper left corner DI = window handle Return: AX = key which terminated entry 0000h Enter 0001h Esc 0002h Down arrow 0003h Up arrow 0004h F10 ----------51--------------------------------- INT 51 - through 53 - IRQ1-IRQ3 relocated by DESQview Note: this is the default location for older versions; see INT 50"DESQview" for details of interrupt relocation SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview" ----------51--------------------------------- INT 51 - through 53 - IRQ1-IRQ3 relocated by IBM 3278 emulation control program SeeAlso: INT 50"IBM 3278",INT 54"IBM 3278" ----------51--------------------------------- INT 51 - through 53 - IRQ1-IRQ3 relocated by OS/2 v1.x SeeAlso: INT 50"OS/2",INT 54"OS/2" ----------53--------------------------------- INT 53 - ??? - API BX = function 0000h ??? AX = ??? Return: AX = ??? 0004h ??? 0009h ??? 0015h AX = ??? DX = ??? 0017h Return: ??? Notes: the installation check consists of looking for the signature "WEBCO" immediately prior to the interrupt handler the above calls are made by Show Partner F/X v3.6 (see INT 10/AH=53h) ----------54--------------------------------- INT 54 - through 57 - IRQ4-IRQ7 relocated by DESQview Note: this is the default location for older versions; see INT 50"DESQview" for details of interrupt relocation SeeAlso: INT 50"DESQview",INT 58"DESQview" ----------54--------------------------------- INT 54 - through 57 - IRQ4-IRQ7 relocated by IBM 3278 emulation control program SeeAlso: INT 51"IBM 3278" ----------54--------------------------------- INT 54 - through 57 - IRQ4-IRQ7 relocated by OS/2 v1.x SeeAlso: INT 51"OS/2" ----------58--------------------------------- INT 58 - IRQ8 relocated by DESQview 2.26+ Note: this is the default, but other INTs may be used (see INT 50"DESQview") SeeAlso: INT 50"DESQview",INT 70 ----------58--------------------------------- INT 58 - IRQ0 relocated by DoubleDOS SeeAlso: INT 08 ----------59--------------------------------- INT 59 - IRQ9 relocated by DESQview 2.26+ Note: this is the default, but other INTs may be used (see INT 50"DESQview") SeeAlso: INT 50"DESQview",INT 71 ----------59--------------------------------- INT 59 - IRQ1 relocated by DoubleDOS SeeAlso: INT 09 ----------59--------------------------------- INT 59 - GSS Computer Graphics Interface (GSS*CGI) DS:DX -> block of 5 array pointers Return: CF set on error AX = error code CF clear if successful AX = return code Note: INT 59 is the means by which GSS*CGI language bindings communicate with GSS*CGI device drivers and the GSS*CGI device driver controller. also used by the IBM Graphic Development Toolkit ----------5A--------------------------------- INT 5A - IRQ10 relocated by DESQview 2.26+ Note: this is the default, but other INTs may be used (see INT 50"DESQview") SeeAlso: INT 50"DESQview",INT 72 ----------5A--------------------------------- INT 5A - IRQ2 relocated by DoubleDOS SeeAlso: INT 0A ----------5A--------------------------------- INT 5A - Cluster adapter BIOS entry address ??? ----------5B--------------------------------- INT 5B - IRQ11 relocated by DESQview 2.26+ Note: this is the default, but other INTs may be used (see INT 50"DESQview") SeeAlso: INT50"DESQview",INT 73 ----------5B--------------------------------- INT 5B - IRQ3 relocated by DoubleDOS SeeAlso: INT 0B ----------5B--------------------------------- INT 5B - Used by cluster adapter ----------5B--------------------------------- INT 5B - AT&T Starlan Extended NetBIOS (variable length names) ES:BX -> Network Control Block (see below) Return: AL = status (see INT 5C) SeeAlso: INT 5C Format of Network Control Block Offset Size Description 00h BYTE ncb_command (see below) 01h BYTE ncb_retcode 02h BYTE ncb_lsn 03h BYTE ncb_num 04h DWORD -> ncb_buffer 08h WORD ncb_length 0Ah 16 BYTEs ncb_callname 1Ah 16 BYTEs ncb_name 2Ah BYTE ncb_rto 2Bh BYTE ncb_sto 2Ch DWORD -> ncb_post /* int (far *ncb_post)(); */ 30h BYTE ncb_lana_num 31h BYTE ncb_cmd_cplt 32h DWORD -> ncb_vname 36h BYTE ncb_vnamelen 37h 9 BYTEs ncb_reserve Note: fields 00h-31h are the same as for a standard NetBIOS NCB (see INT 5C) Values for ncb_command field same as for INT 5C, except 70h send net Break ----------5B--------------------------------- INT 5B - Microsoft Network Transport Layer Interface Note: used by MS-NET for executing network commands SeeAlso: INT 5C"NetBIOS" ----------5B--------------------------------- INT 5B - used by Alloy NTNX ----------5B--------------------------------- INT 5B - ISOLAN Multi Protocol Software ES:BX -> Transfer Control Block Return: AL - status Note: this software interface allows multiple protocols/software packages to access a BICC 411x network card Format of Transfer Control Block: Offset Type Description 00h BYTE command code B3h Status F2h Activate F3h Deactivate F4h Send Data 01h BYTE command identity 02h BYTE virtual circuit ID 03h WORD buffer length 05h DWORD buffer pointer 09h BYTE expedited data flag 0Ah BYTE cancelable flag 0Bh 16 BYTEs local network address 1Bh 16 BYTEs remote network address 2Bh DWORD asynchronous notification routine 30h DWORD local network number 34h DWORD remote network number 38h BYTE call timeout 39h BYTE not used 3Ah 8 BYTEs reserved 42h BYTE command code extension 43h WORD Blue Book MAC type ----------5C--------------------------------- INT 5C - IRQ12 relocated by DESQview 2.26+ Note: this is the default, but other INTs may be used (see INT 50"DESQview") SeeAlso: INT 50"DESQview",INT 74 ----------5C--------------------------------- INT 5C - IRQ4 relocated by DoubleDOS SeeAlso: INT 0C ----------5C--------------------------------- INT 5C - NetBIOS INTERFACE ES:BX -> network control block (NCB) (see below) Return: AL = status 00h successful 01h bad buffer size 03h invalid NETBIOS command 05h timeout 06h receive buffer too small 07h No-ACK command failed 08h bad session number 09h LAN card out of memory 0Ah session closed 0Bh command has been cancelled 0Dh name already exists 0Eh local name table full 0Fh name still in use, can't delete 11h local session table full 12h remote PC not listening 13h bad NCB_NUM field 14h no answer to CALL or no such remote 15h name not in local name table 16h duplicate name 17h bad delete 18h abnormal end 19h name error, multiple identical names in use 1Ah bad packet 21h network card busy 22h too many commands queued 23h bad LAN card number 24h command finished while cancelling 26h command can't be cancelled 30h name defined by another process (OS/2) 34h NetBIOS environment not defined, must issue reset (OS/2) 35h required operating system resources exhausted (OS/2) 36h maximum applications exceeded (OS/2) 37h no SAPs available for NetBIOS (OS/2) 38h requested resources not available (OS/2) 40h Lana System Error 41h Lana Remote Hot Carrier 42h Lana Local Hot Carrier 43h Lana No Carrier Detected 44h unusual network condition 45h-4Fh hardware error 50h adapter malfunction FFh NetBIOS busy (command pending) Note: Sytek PCnet card uses DMA 3. SeeAlso: INT 2A/AH=01h,INT 2A/AH=04h,INT 5B Format of Network Control Block: Offset Size Description 00h BYTE command code (see below) 01h BYTE return code 02h BYTE local session number (LSN) 03h BYTE "ncb_num" datagram table entry from ADD NAME 04h DWORD -> I/O buffer 08h WORD length of data in buffer 0Ah 16 BYTEs remote system to call 1Ah 16 BYTEs network name of local machine 2Ah BYTE receive timeout in 1/2 seconds 2Bh BYTE send timeout in 1/2 seconds 2Ch DWORD -> FAR post handler /* int (far *ncb_post)(); */ 30h BYTE network adapter number on which to execute command 00h-03h IBM NetBIOS specs F0h-FFh Eicon NABios interface (see also INT 7B"Eicon") 31h BYTE command completion code (see returned status above) 32h 14 BYTEs reserved for network card Values for command code field in NCB (or with 80h for non-waiting call): 10h start session with NCB_NAME name (call) 11h listen for call 12h end session with NCB_NAME name (hangup) 14h send data via NCB_LSN 15h receive data from a session 16h receive data from any session 17h send multiple data buffers 20h send unACKed message (datagram) 21h receive datagram 22h send broadcast datagram 23h receive broadcast datagram 30h add name to name table 31h delete name from name table 32h reset adapter card and tables 33h get adapter status (see structure "astatus" below) 34h status of all sessions for name (see structure "sstatus" below) 35h cancel 36h add group name to name table 48h send data and receive data (LAN Manager NETBEUI.DOS) 70h unlink from IBM remote program (no F0h function) 71h send data without ACK 72h send multiple buffers without ACK 72h UngermannBass Register (conflicts with above function) 73h UngermannBass SendNmc 74h UngermannBass Callniu 75h UngermannBass Calladdr 76h UngermannBass Listenaddr 77h UngermannBass SendPkt 78h find name 78h UngermannBass RcvPkt (conflicts with above function) 79h token-ring protocol trace 79h UngermannBass SendAttn (conflicts with above function) 7Ah UngermannBass RcvAttn 7Bh UngermannBass Listenniu 7Ch UngermannBass RcvRaw 7Dh UngermannBass SendNmc2 Format of structure "name": Offset Size Description 00h 16 BYTEs "nm_name" symbolic name 10h BYTE "nm_num" number associated with name 11h BYTE nm_status Format of structure "astatus": Offset Size Description 00h 6 BYTEs as_id 06h BYTE as_jumpers 07h BYTE as_post 08h BYTE as_major 09h BYTE as_minor 0Ah WORD as_interval 0Ch WORD as_crcerr 0Eh WORD as_algerr 10h WORD as_colerr 12h WORD as_abterr 14h DWORD as_tcount 18h DWORD as_rcount 1Ch WORD as_retran 1Eh WORD as_xresrc 20h 8 BYTEs as_res0 28h WORD as_ncbfree 2Ah WORD as_ncbmax 2Ch WORD as_ncbx 2Eh 4 BYTEs as_res1 32h WORD as_sespend 34h WORD as_msp 36h WORD as_sesmax 38h WORD as_bufsize 3Ah WORD as_names 3Ch 16 name structures as_name Format of structure "sstatus": Offset Size Description 00h BYTE number of sessions being reported 01h BYTE number of sessions with this name 02h BYTE number of outstanding receive datagrams 03h BYTE number of outstanding ReceiveAnys 04h var session structures (see below) Format of structure "session": Offset Size Description 00h BYTE local session number 01h BYTE state 01h listen pending 02h call pending 03h session established 04h hangup pending 05h hangup done 06h session aborted 02h 16 BYTEs local name 12h 16 BYTEs remote name 22h BYTE number of outstanding receives 23h BYTE number of outstanding sends/chainsends ----------5C--------------------------------- INT 5C - TOPS INTERFACE ES:BX -> Network Control Block Note: TOPS card uses DMA 1, 3 or none. ----------5C--------------------------------- INT 5C - ATALK.SYS - AppleTalk INTERFACE DX:BX -> control block (see below) Return: none Notes: this driver can use any interrupt from 5Ch to 70h the signature 'AppleTalk' appears 16 bytes prior to the interrupt handler; this serves as the installation check Format of AppleTalk control block: Offset Size Description 00h WORD command code 01h "AT_INIT" initialize the driver 02h "AT_KILL" 03h "AT_GETNETINFO" get current network info incl init status 04h "AT_GETCLOCKTICKS" 05h "AT_STARTTIMER" 06h "AT_RESETTIMER" 07h "AT_CANCELTIMER" 10h "LAP_INSTALL" 11h "LAP_REMOVE" 12h "LAP_WRITE" 13h "LAP_READ" 14h "LAP_CANCEL" 20h "DDP_OPENSOCKET" 21h "DDP_CLOSESOCKET" 22h "DDP_WRITE" 23h "DDP_READ" 24h "DDP_CANCEL" 30h "NBP_REGISTER" 31h "NBP_REMOVE" 32h "NBP_LOOKUP" 33h "NBP_CONFIRM" 34h "NBP_CANCEL" 35h "ZIP_GETZONELIST" 36h "ZIP_GETMYZONE" 37h "ZIP_TAKEDOWN" 38h "ZIP_BRINGUP" 40h "ATP_OPENSOCKET" 41h "ATP_CLOSESOCKET" 42h "ATP_SENDREQUEST" 43h "ATP_GETREQUEST" 44h "ATP_SENDRESPONSE" 45h "ATP_ADDRESPONSE" 46h "ATP_CANCELTRANS" 47h "ATP_CANCELRESPONSE" 48h "ATP_CANCELREQUEST" 50h "ASP_GETPARMS" 51h "ASP_CLOSESESSION" 52h "ASP_CANCEL" 53h "ASP_INIT" 54h "ASP_KILL" 55h "ASP_GETSESSION" 56h "ASP_GETREQUEST" 57h "ASP_CMDREPLY" 58h "ASP_WRTCONTINUE" 59h "ASP_WRTREPLY" 5Ah "ASP_CLOSEREPLY" 5Bh "ASP_NEWSTATUS" 5Ch "ASP_ATTENTION" 5Dh "ASP_GETSTATUS" 5Eh "ASP_OPENSESSION" 5Fh "ASP_COMMAND" 60h "ASP_WRITE" 61h "ASP_GETATTENTION" 70h "PAP_OPEN" 71h "PAP_CLOSE" 72h "PAP_READ" 73h "PAP_WRITE" 74h "PAP_STATUS" 75h "PAP_REGNAME" 76h "PAP_REMNAME" 77h "PAP_INIT" 78h "PAP_NEWSTATUS" 79h "PAP_GETNEXTJOB" 7Ah "PAP_KILL" 7Bh "PAP_CANCEL" or with the following flags 8000h start command then return 4000h wait for interrupt service to complete 02h WORD returned status 0000h success (already initialized if func 01h) 04h DWORD pointer to completion function 08h WORD network number 0Ah BYTE node ID ---if general func (01h,03h), control block continues: 0Bh BYTE "inf_abridge" 0Ch WORD "inf_config" 0Eh DWORD pointer to buffer 12h WORD buffer size ---if DDP function (20h-24h), control block continues: 0Bh BYTE "ddp_addr_socket" 0Ch BYTE "ddp_socket" 0Dh BYTE "ddp_type" 0Eh DWORD pointer to buffer 12h WORD buffer size 14h BYTE "ddp_chksum" ---if Name Binding Protocol (30h-34h), control block continues: 0Bh BYTE "nbp_addr_socket" 0Ch WORD "nbp_toget" 0Eh DWORD pointer to buffer 12h WORD buffer size 14h BYTE "nbp_interval" 15h BYTE "nbp_retry" 16h DWORD "nbp_entptr" ---if AppleTalk Transaction Protocol (42h), control block continues: 0Bh BYTE "atp_addr_socket" 0Ch WORD "atp_socket" 0Eh DWORD pointer to buffer 12h WORD buffer size 14h BYTE "atp_interval" 15h BYTE "atp_retry" 16h BYTE ATP flags bit 5: exactly one transaction 17h BYTE "atp_seqbit" 18h BYTE transaction ID 19h 4 BYTEs ATP user bytes 1Dh BYTE number of BDS buffers 1Eh BYTE number of BDS responses 1Fh DWORD pointer to BDS buffers (see below) Format of Name Binding Protocol Name-to-Address binding entries for NBP_LOOKUP: Offset Size Description 00h WORD "tup_address_network" 02h BYTE "tup_address_notid" 03h BYTE "tup_address_socket" 04h BYTE "tup_enum" 05h 99 BYTEs name Format of BDS entries: Offset Size Description 00h DWORD pointer to buffer 04h WORD size of buffer 06h WORD BDS data size 08h 4 BYTEs "bds_userbytes" ----------5C--------------------------------- INT 5C - IBM 802.2 INTERFACE (LLC) ES:BX -> CCB Return: none Format of CCB: Offset Size Description 00h BYTE adapter 01h BYTE command code 02h BYTE return code 03h BYTE work 04h DWORD pointer to ??? 08h DWORD pointer to completion function??? 0Ch DWORD pointer to parameters??? ----------5C--------------------------------- INT 5C - $25 LAN - INSTALLATION CHECK Notes: current versions only check whether the vector is 0000h:0000h or not future versions are supposed to have the signature "NET" in the three bytes preceding the INT 5C handler ----------5C04------------------------------- INT 5C - $25 LAN - CHECK IF CONNECTION ALIVE AH = 04h AL = COM port (0 = default) CX = wait count in character times (should be at least 100) Return: ZF set if link alive ----------5D--------------------------------- INT 5D - IRQ13 relocated by DESQview 2.26+ Note: this is the default, but other INTs may be used (see INT 50"DESQview") SeeAlso: INT 50"DESQview",INT 75 ----------5D--------------------------------- INT 5D - IRQ5 relocated by DoubleDOS SeeAlso: INT 0D,INT 5C"DoubleDOS" ----------5E--------------------------------- INT 5E - IRQ14 relocated by DESQview 2.26+ Note: this is the default, but other INTs may be used (see INT 50"DESQview") SeeAlso: INT 50"DESQview",INT 76 ----------5E--------------------------------- INT 5E - IRQ6 relocated by DoubleDOS SeeAlso: INT 0E,INT 5D"DoubleDOS" ----------5F--------------------------------- INT 5F - IRQ15 relocated by DESQview 2.26+ Note: this is the default, but other INTs may be used (see INT 50"DESQview") SeeAlso: INT 50"DESQview",INT 77 ----------5F--------------------------------- INT 5F - IRQ7 relocated by DoubleDOS SeeAlso: INT 0F,INT 5E"DoubleDOS" ----------5F00------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET VIDEO MODE AH = 00h AL = video mode 07h text, system manager compliant 20h 240x128 mono graphics, system manager compliant 87h text, not system manager compliant A0h 240x128 mono graphics, not system manager compliant Note: the defaults after setting the mode to graphics are (0,0) logical origin, full-screen clip region, (0,0) pen location, pen color 1, pixel replacement FORCE, line type and fill mask all bits set SeeAlso: INT 0F"HP 95LX",INT 10/AH=00h,INT 15/AX=4DD4h ----------5F01------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET FILL MASK AH = 01h ES:DI -> 8-byte fill mask Note: the fill mask represents an 8x8 pixel box and is repeated as necessary when drawing filled rectangles; it is always aligned with the byte boundaries of video memory, regardless of the actual boundaries of the rectangle SeeAlso: AH=02h ----------5F02------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - GET CURRENT GRAPHICS INFORMATION AH = 02h ES:DI -> graphics info record (see below) Return: DX:AX -> filled graphics info record (for return to high-level langs) Format of graphics info record: Offset Size Description 00h BYTE current video mode 01h BYTE default video mode 02h WORD display width in pixels 04h WORD display height in pixels 06h WORD current pen column 08h WORD current pen row 0Ah WORD current line type 0Ch WORD current replacement rule 0Eh WORD current pen color 10h WORD current leftmost column of clip region 12h WORD current rightmost column of clip region 14h WORD current topmost row of clip region 16h WORD current bottommost row of clip region 18h WORD current column of logical origin 1Ah WORD current row of logical origin 1Ch 8 BYTEs current fill mask ----------5F03------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET LOGICAL ORIGIN AH = 03h CX = column DX = row SeeAlso: AH=04h ----------5F04------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET CLIP REGION AH = 04h CX = left-most column DX = top-most row SI = right-most column DI = bottom-most row SeeAlso: AH=03h ----------5F05------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - DRAW RECTANGLE AH = 05h AL = fill type 00h outline, using current line type and color 01h solid, using current color 02h pattern, using current fill mask and color DX,CX = row,column of other corner of rectangle Note: the rectangle is drawn starting at the current pen position SeeAlso: AH=01h,AH=06h,AH=07h ----------5F06------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - DRAW LINE AH = 06h DX,CX = row,column of end point Note: the line is drawn starting at the current pen position SeeAlso: AH=05h,AH=07h ----------5F07------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - PLOT POINT AH = 07h DX,CX = row,column of point Note: also sets pen position to the specified point SeeAlso: AH=06h,AH=08h,AH=0Ch ----------5F08------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - MOVE PEN AH = 08h DX,CX = row,column of new pen position SeeAlso: AH=07h,AH=09h ----------5F09------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET PEN COLOR AH = 09h AL = new color (00h = white, 01h = black) SeeAlso: AH=08h,AH=0Ah,AH=0Bh ----------5F0A------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET REPLACEMENT RULE AH = 0Ah AL = new replacement rule 00h force 01h AND 02h OR 03h XOR SeeAlso: AH=01h,AH=09h,AH=0Bh ----------5F0B------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - SET LINE TYPE AH = 0Bh CX = new line type Note: the line type specifies 16 bits which are repeated over and over while drawing the pixels of a line SeeAlso: AH=09h,AH=0Ah ----------5F0C------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - GET PIXEL AH = 0Ch DX,CX = row,column of pixel to read Return: AX = pixel color SeeAlso: AH=07h ----------5F0D------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - GET IMAGE AH = 0Dh DX,CX = row,column of first corner BP,SI = row,column of second corner ES:DI -> image buffer (see below) Note: the specified corners are included in the saved image SeeAlso: AH=0Eh Format of image buffer: Offset Size Description 00h WORD number of planes (always 01h on HP 95LX) 02h WORD number of bits/pixel (always 01h on HP 95LX) 04h WORD image width in pixels 06h WORD image height in pixels 08h N BYTEs image data requires (WIDTH+7)/8 * HEIGHT bytes ----------5F0E------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - PUT IMAGE AH = 0Eh AL = replacement rule bit 2: invert image before applying rule bits 1-0: 00 force 01 AND 10 OR 11 XOR DX,CX = row,column of top left corner ES:DI -> image buffer (see AH=0Dh) Note: if the specified image does not fit completely on the screen, this call does nothing SeeAlso: AH=0Dh ----------5F0F------------------------------- INT 5F - HP 95LX GRAPHICS PRIMITIVES - WRITE TEXT AH = 0Fh AL = rotate flag (if nonzero, rotate 90 degrees counter-clockwise) DX,CX = row,column of first character's top left corner ES:DI -> ASCIZ text ----------60--------------------------------- INT 60 - reserved for user interrupt ----------60--------------------------------- INT 60 - VIRUS - "Zero Bug" - INSTALLATION CHECK The "Zero Bug" virus hooks this vector. It considers itself installed if offset 103h of the handler's segment contains the bytes "ZE" SeeAlso: INT 32,INT 61"SEMTEX" ----------60--------------------------------- INT 60 - Adaptec and OMTI controllers - DRIVE 0 DATA SeeAlso: INT 61"Adaptec",INT 62"Adaptec",INT 63"Adaptec",INT 64"Adaptec" Notes: this vector stores the first four bytes of the parameter table for hard disk 0 these vectors are used by the following Adaptec controllers: ACB 2370 A/B/C, ACB 2372 A/B/C, ACB 2333 A/B, 2322B-8, 2322B-16 these vectors are NOT used by the following Adaptec controllers: ACB 2310, ACB 2312, ACB 2320D, ACB 2322D ----------60--------------------------------- INT 60 - Atari Portfolio - USER INTERFACE FUNCTIONS supplies a number of subfunctions which perform such functions as drawing boxes and menus, and provide input line editing SeeAlso: INT 61"Atari" ----------60--------------------------------- INT 60 - PC-IPC API STACK: DWORD pointer to parameter block (see below) Return: STACK: unchanged Notes: PC-IPC is a shareware TSR by Donnelly Software Engineering which allows communication between independent programs INT 60 is the default, any interrupt vector may be used by specifying the vector on the commandline Format of parameter block: Offset Size Description 00h WORD caller's ID 02h WORD to ID 04h WORD command code (see below) 06h WORD returned status bit 0: unused bit 1: IPC enabled bit 2: IPC installed bit 3: error bit 4: message(s) available 08h WORD returned error code (see below) 0Ah WORD size of data 0Ch DWORD pointer to data buffer Values of command code: 01h "IPC_CMND_INQUIRE" inquire current status set status field, writes WORD to data buffer containing free message space in bytes, and sets the "size" field to the number of messages waiting 02h "IPC_CMND_ENABLE" reenable PC-IPC ignored unless called with the same ID that disabled PC-IPC 03h "IPC_CMND_DISABLE" disable PC-IPC 04h "IPC_CMND_INSTALL" reset PC-IPC 06h "IPC_CMND_RDATA" read data returns first message in data buffer, sets "size" to message length and "to ID" field to sender's ID if no messages available, bit 4 of status is cleared and "size" is set to zero 07h "IPC_CMND_SDATA" send data 08h "IPC_CMND_REQID" require user ID create a new recognized ID and return in "caller's ID" field 09h "IPC_CMND_DELID" cancel user ID delete caller's ID from pool of recognized IDs 0Ah "IPC_CMND_RDATAW" read data, wait if no messages available 0Bh "IPC_CMND_VERS" get PC-IPC version string representing version returned in data buffer, "size" field set to length of string Values for error code: 00h no error 01h invalid command or parameter 02h only process 0 can install/reset IPC 03h process can not install/reset IPC 04h IPC is not enabled 05h process can not disable IPC 06h invalid destination process ID 07h invalid sending process ID 08h invalid data destination 09h no more process IDs available 0Ah can not relinquish that process ID 0Bh message space is full 0Ch IPC is not installed ----------60--------------------------------- INT 60 - Tangram Arbiter - API Notes: Arbiter may use any interrupt from 60h to 66h (parameterized) identified by string "@ARB_API" immediately following a short jump at the interrupt handler address Arbiter makes a PC disk look like a slow disk over an SNA link to an IBM mainframe ----------60--------------------------------- INT 60 U - INTRSPY/CMDSPY API Notes: INTRSPY will hook the first available interrupt in the range 60h-67h. The installation check is to a) determine that the handler is an IRET instruction b) the signature 0Dh "INTRSPY vN.NN" immediately precedes the handler If INTRSPY is installed, the DWORD immediately after the IRET stores its entry point. INTRSPY is a script-driven debugger included with the book _Undocumented_DOS_. Call INTRSPY entry point with: AH = function 00h ??? 01h set current directory (for use in reporting) ES:DI -> counted string containing directory name (max 79 char) 02h set name of script file ES:DI -> counted string containing file name (max 79 chars) 03h set script arguments ES:DI -> counted string containing arguments (max 79 chars) 04h get directory set with function 01h ES:DI -> 80-byte buffer for directory name 05h get name of script file ES:DI -> 80-byte buffer for script filename 06h get script arguments ES:DI -> 80-byte buffer for script arguments 07h get ??? CL = 00h-15h specifies what to get ES:DI -> WORD to be set with desired value on return 08h get ??? ES:DI -> WORD to be set with returned value 09h get ??? ES:DI -> WORD to be set with returned value 0Bh store code for interrupt handler??? ES:DI -> data CX = number of bytes 0Ch ??? ES:DI -> ??? 0Dh get ??? ES:DI -> BYTE to be set with returned value 0Eh set ??? flag 0Fh clear ??? flag 10h ??? Return: AL = 04h or 05h if failed 11h ??? Return: AL = 05h if failed 12h get ??? ES:DI -> buffer Return: CX = number of bytes returned in buffer 13h ??? Return: AH = 00h AL = status 00h successful 01h invalid function 02h ??? 03h ??? 04h ??? 05h ??? ----------60--------------------------------- INT 60 U - PC/370 v4.2 - ??? ??? Return: ??? Notes: PC/370 is an IBM 370 emulator by Donald S. Higgins this is the default interrupt, however the documentation includes instructions for patching the system for another interrupt SeeAlso: INT 2F/AX=7F24h,INT DC"PC/370" ----------60--------------------------------- INT 60 - JPI TopSPEED Modula-2 v1 - PROCEDURE ENTRY TRAP SeeAlso: INT 61"JPI" ----------60--------------------------------- INT 60 - FTP Packet Driver - PC/TCP Packet Driver Specification Notes: The handler for the interrupt will start with a 3-byte jump instruction, followed by the ASCIZ string "PKT DRVR" (the terminating NUL is significant). To find the interrupt being used by the driver, an application should scan through interrupt vectors 60h to 80h (20h through FFh for v1.10+ of the specification) until it finds one with the "PKT DRVR" string. AH values of 80h to FFh have been reserved for user-defined additions. ----------60----DI0100----------------------- INT 60 u - HP 95LX System Manager - WAIT FOR EVENT DI = 0100h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to event record (see below) Return: event record filled STACK unchanged Note: this call will timeout after about 500ms SeeAlso: INT 15/AX=4DD4h,INT 60/DI=0101h,INT 61"HP 95LX",INT 62"HP 95LX" Format of event record: Offset Size Description 00h WORD event type 00h no events 01h keystroke available 02h Ctrl-Break 03h reactivation (always follows deactivation event) 04h about to deactivate (sleep) next get-event call will not return until reactivated 05h forced application termination 06h 1-2-3 bridge service request (only given to 1-2-3) 07h request to grow 08h request to shrink 09h application's alarm expired 0Ah daily chance to set an alarm 0Bh system date or time has been changed 02h WORD ASCII code page 850 translation of keystroke or grow/shrink amount in paragraphs or 0000h if error or alarm expiration data 04h BYTE scan code from BIOS 05h BYTE shift key states at time keystroke is retrieved 06h WORD LICS translation of keystroke 08h BYTE function key number (1-2-3 only) 09h DWORD pointer to 1-2-3 bridge record (see INT 60/DI=0104h) or pointer to time change structure (see below) Note: if the System Manager is waiting the conclusion of a bridge service or grow/shrink call and the event type field is set to FFFFh on entry, the SysMgr will resume Format of time change structure: Offset Size Description 00h WORD old year 02h BYTE old month 03h BYTE old date 04h BYTE old day 05h BYTE old hour 06h BYTE old minute 07h BYTE old second 08h BYTE old hundredth of a second 09h 9 BYTEs new time in same format as old time ----------60----DI0101----------------------- INT 60 u - HP 95LX System Manager - CHECK FOR EVENT DI = 0101h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to event record (INT 60/DI=0100h) Return: event record filled STACK unchanged Note: this call returns immediately if no event is available SeeAlso: INT 60/DI=0100h ----------60----DI0102----------------------- INT 60 u - HP 95LX System Manager - "SH_STATUS" DI = 0102h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged ----------60----DI0104----------------------- INT 60 u - HP 95LX System Manager - LOTUS 1-2-3 BRIDGE SERVICES DI = 0104h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to bridge record (see below) Return: ??? STACK unchanged Format of bridge record: Offset Size Description 00h WORD function code 00h test 01h get range 02h "GETRANGE_ADDR" 03h "SETRANGE_ADDR" 04h "GETRANGE_DATA" 05h "SETRANGE_DATA" 06h recalculate 07h get cursor 08h set cursor 09h redisplay 0Ah cell type 0Bh "CALCTYPE" 02h WORD return code from 1-2-3 04h 16 BYTEs ASCII range name 14h WORD start column of range 16h WORD start row of range 18h WORD end column of range 1Ah WORD end row of range 1Ch WORD order in which data is placed in buffer 1Eh WORD buffer size 20h WORD offset within bridge record's segment of buffer for cell data ----------60----DI0105----------------------- INT 60 u - HP 95LX System Manager - FLUSH KEYBOARD BUFFER DI = 0105h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged ----------60----DI0106----------------------- INT 60 u - HP 95LX System Manager - YIELD CPU DI = 0106h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 15/AX=1000h,INT 2F/AX=1680h ----------60----DI0107----------------------- INT 60 u - HP 95LX System Manager - "NO_FINI" - REFUSE TERMINATION REQUEST DI = 0107h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------60----DI0200----------------------- INT 60 u - HP 95LX System Manager - SETUP MENU DI = 0200h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to menu data (see below) DWORD pointer to ??? WORD number of items on menu??? WORD ??? DWORD pointer to ??? WORD ??? DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 60/DI=0201h,INT 60/DI=0203h,INT 60/DI=0205h Format of menu data: Offset Size Description 00h 80 BYTEs first line of menu text 50h 80 BYTEs second line of menu text A0h 80 BYTEs third line of menu text F0h WORD number of keywords F2h WORD index of currently highlighted keyword or FFFFh F4h WORD single prompt on top line if nonzero F6h 20 BYTEs which line each of 20 keywords is located on 10Ah 20 BYTEs offset of each of 20 keywords within its line 11Eh 20 BYTEs length of each of 20 keywords 132h 20 BYTEs first letter of each of 20 keywords 146h 20 WORDs offsets of long prompts for each of 20 keywords ----------60----DI0201----------------------- INT 60 u - HP 95LX System Manager - DISPLAY OR REDISPLAY MENU DI = 0201h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to menu data (see INT 60/DI=0200h) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0200h,INT 60/DI=0202h,INT 60/DI=0206h ----------60----DI0202----------------------- INT 60 u - HP 95LX System Manager - "MENU_ON" - ENABLE PROCESSING OF MENU DI = 0202h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to menu data (see INT 60/DI=0200h) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0200h,INT 60/DI=0201h,INT 60/DI=0203h ----------60----DI0203----------------------- INT 60 u - HP 95LX System Manager - REMOVE MENU DI = 0203h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to menu data (see INT 60/DI=0200h) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0201h,INT 60/DI=0202h,INT 60/DI=0204h,INT 60/DI=0208h ----------60----DI0204----------------------- INT 60 u - HP 95LX System Manager - LET SYSTEM MANAGER HANDLE MENU KEYSTROKE DI = 0204h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to menu data (see INT 60/DI=0200h) WORD keystroke DWORD pointer to WORD to receive selection number Return: buffer for selection number filled with index of selected menu item or FFFFh if no final selection yet STACK unchanged SeeAlso: INT 60/DI=0200h,INT 60/DI=0202h,INT 60/DI=0207h ----------60----DI0205----------------------- INT 60 u - HP 95LX System Manager - INITIALIZE FILE SELECTION MENU DI = 0205h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file menu structure (see below) DWORD pointer to edit record (see INT 60/DI=0400h) DWORD pointer to wildcard filespec for initial file list WORD row??? WORD column??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0200h,INT 60/DI=0206h,INT 60/DI=0208h Format of file menu structure: Offset Size Description 00h DWORD pointer to ASCIZ base directory name 04h DWORD pointer to ASCIZ file pattern (wildcard filespec) 08h DWORD pointer to file list workspace, at least 1024 bytes (see below) 0Ch WORD size of file list workspace in bytes 0Eh WORD starting row (-3 is topmost, 0 is first non-"reserved" line) 10h WORD starting column 12h WORD number of lines 14h WORD number of columns 16h WORD number of files displayed on each line ---the remaining fields are initialized by the System Manager--- 18h WORD 0000h if first edit character, else multiline 1Ah WORD number of files in file list 1Ch WORD max files workspace has room for 1Eh WORD file at top of list 20h WORD index of file to highlight 22h WORD index of file to unhighlight 24h WORD current focus (01h FMENU, 02h EDIT) Format of file list workspace entry: Offset Size Description 00h BYTE file attributes 01h WORD file time (see INT 21/AX=5700h) 03h WORD file date (see INT 21/AX=5700h) 05h DWORD file size 09h 13 BYTEs ASCIZ filename ----------60----DI0206----------------------- INT 60 u - HP 95LX System Manager - DISPLAY/REDISPLAY FILE SELECTION MENU DI = 0206h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file menu structure (see INT 60/DI=0205h) DWORD pointer to edit record (see INT 60/DI=0400h) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0205h ----------60----DI0207----------------------- INT 60 u - HP 95LX System Manager - LET SYSMGR PROCESS FILE SEL MENU KEYSTROKE DI = 0207h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file menu structure (see INT 60/DI=0205h) DWORD pointer to edit record (see INT 60/DI=0400h) WORD keystroke Return: AX = status 0000h keystroke processed, call INT 60/DI=0206h to refresh menu 0001h redisplay application area before refreshing menu 0002h user confirmed selection, filename is in edit record's buffer 0003h user aborted menu FFFBh bad filename FFFCh bad directory FFFDh bad drive FFFEh unknown keystroke FFFFh keystroke known but invalid in current context STACK unchanged SeeAlso: INT 60/DI=0205h,INT 60/DI=0208h ----------60----DI0208----------------------- INT 60 u - HP 95LX System Manager - REMOVE FILE SELECTION MENU DI = 0208h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file menu structure (see INT 60/DI=0205h) DWORD pointer to edit record (see INT 60/DI=0400h) Return: ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 60/DI=0205h,INT 60/DI=0206h ----------60----DI0300----------------------- INT 60 u - HP 95LX System Manager - DISPLAY STRING DI = 0300h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD starting row (-3 is topmost, 0 is first user line) WORD starting column DWORD pointer to string WORD length of string WORD display style: 0000h normal, 0001h reverse video WORD "OSTYLE" Return: ??? STACK unchanged SeeAlso: INT 60/DI=0F03h,INT 60/DI=1005h ----------60----DI0301----------------------- INT 60 u - HP 95LX System Manager - CLEAR PORTION OF SCREEN DI = 0301h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD starting row (-3 is topmost, 0 is first user line) WORD starting column WORD number of rows WORD number of columns Return: ??? STACK unchanged SeeAlso: INT 60/DI=0302h,INT 60/DI=1005h ----------60----DI0302----------------------- INT 60 u - HP 95LX System Manager - SCROLL PORTION OF SCREEN DI = 0302h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD starting row??? WORD starting column??? WORD height of scroll region??? WORD width of scroll region??? WORD number of lines to scroll region??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0301h ----------60----DI0303----------------------- INT 60 u - HP 95LX System Manager - SCREEN SERVICE "M_XCHG" DI = 0303h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? WORD ??? WORD ??? WORD ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0304----------------------- INT 60 u - HP 95LX System Manager - SCREEN SERVICE "M_CHRATTR" DI = 0304h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0305----------------------- INT 60 u - HP 95LX System Manager - SCREEN SERVICE "M_CHRRVRT" DI = 0305h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? WORD ??? DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0307----------------------- INT 60 u - HP 95LX System Manager - SCREEN SERVICE "M_CHRINV" DI = 0307h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? WORD ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0308----------------------- INT 60 u - HP 95LX System Manager - SCREEN SERVICE "M_ROWS_COLS" DI = 0308h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged ----------60----DI0309----------------------- INT 60 u - HP 95LX System Manager - SET SCREEN (VIDEO???) MODE DI = 0309h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD new mode Return: ??? STACK unchanged ----------60----DI030A----------------------- INT 60 u - HP 95LX System Manager - GET SCREEN (VIDEO???) MODE DI = 030Ah STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged ----------60----DI030B----------------------- INT 60 u - HP 95LX System Manager - SET CURSOR POSITION DI = 030Bh STACK: 2 WORDs unused dummies (for calls from high level languages) WORD row (-3 is topmost, 0 is first non-reserved line) WORD column Return: ??? STACK unchanged Note: cursor is hidden if the specified position is not on the physical display SeeAlso: INT 10/AH=02h,INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------60----DI0400----------------------- INT 60 u - HP 95LX System Manager - "EDIT_INIT" DI = 0400h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to edit record (see below) DWORD pointer to string to be edited WORD initial length of string being edited WORD maximum length of edited string WORD row of edit field WORD leftmost column of edit field Return: ??? STACK unchanged Format of edit record: Offset Size Description 00h WORD current length of edit buffer 02h BYTE flag for special processing on first character 03h BYTE flags bit 0: tab handling 04h WORD editing in prompt window? 06h DWORD pointer to top line of prompt window message 0Ah WORD length of top line of prompt 0Ch DWORD pointer to second line of prompt window message 10h WORD length of second line of prompt 12h 80 BYTEs workspace for editing 62h 2 WORDs line array needed for multi-line editing 66h 36 BYTEs multi-line edit record (see below) 8Ah WORD displayable columns Format of multi-line edit record: Offset Size Description 00h DWORD pointer to user-supplied edit buffer 04h WORD length of edit buffer 06h WORD current cursor position 08h WORD starting row of edit area (-3 is topmost, 0 is first user line) 0Ah WORD starting column of edit area 0Ch WORD height of edit area 0Eh WORD width of edit area 10h WORD current top row (-3 is topmost, 0 is first user line) 12h WORD number of rows displayable 14h BYTE cursor column 15h BYTE 01h if buffer has been modified 16h BYTE first displayable column (ticker fields only) 17h BYTE 01h if wordwrap enabled, FFh if ticker field 18h DWORD pointer to array of line starts (at least one bigger than edit area is high) 1Ch BYTE currently marking? 1Dh BYTE flag 1Eh WORD offset of mark start 20h WORD offset of mark end (inclusive) 22h WORD displayable columns ----------60----DI0401----------------------- INT 60 u - HP 95LX System Manager - EDIT ON TOP LINE DI = 0401h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to edit record (see INT 60/DI=0400h) DWORD pointer to string to edit WORD initial length of string being edited WORD maximum length of edited string DWORD pointer to first line of prompt WORD length of first line DWORD pointer to second line of prompt WORD length of second line Return: ??? STACK unchanged ----------60----DI0402----------------------- INT 60 u - HP 95LX System Manager - DISPLAY OR REDISPLAY EDIT FIELD DI = 0402h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to edit record (see INT 60/DI=0400h) Return: ??? STACK unchanged ----------60----DI0403----------------------- INT 60 u - HP 95LX System Manager - LET SYSTEM MANAGER PROCESS EDITING KEYSTROK DI = 0403h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to edit record (see INT 60/DI=0400h) WORD keystroke DWORD pointer to WORD buffer for result code Return: result code buffer filled with 0001h if editing complete STACK unchanged ----------60----DI0404----------------------- INT 60 u - HP 95LX System Manager - "MDIT_INI" DI = 0404h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? WORD ??? WORD ??? WORD ??? DWORD pointer to ??? WORD ??? WORD ??? WORD ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0405----------------------- INT 60 u - HP 95LX System Manager - "MDIT_DIS" DI = 0405h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0406----------------------- INT 60 u - HP 95LX System Manager - "MDIT_KEY" DI = 0406h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0407----------------------- INT 60 u - HP 95LX System Manager - "MDIT_FIL" DI = 0407h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0408----------------------- INT 60 u - HP 95LX System Manager - "MDIT_MARK" DI = 0408h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0409----------------------- INT 60 u - HP 95LX System Manager - "MDIT_UNMARK" DI = 0409h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI040A----------------------- INT 60 u - HP 95LX System Manager - "MDIT_CUTMARK" DI = 040Ah STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI040B----------------------- INT 60 u - HP 95LX System Manager - "MDIT_INS_STR" DI = 040Bh STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------60----DI0500----------------------- INT 60 u - HP 95LX System Manager - OPEN FILE DI = 0500h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file state record (see below) DWORD pointer to filename WORD length of filename WORD ??? WORD suppress buffering if nonzero Return: AX = status STACK unchanged SeeAlso: INT 60/DI=0501h,INT 60/DI=0502h,INT 60/DI=0508h Format of file state record: Offset Size Description 00h WORD DOS file handle 02h WORD flags bit 0: buffer contents valid bit 1: buffer is dirty and must be written bit 2: unbuffered I/O bit 3: file is a character device 04h DWORD current DOS physical file offset (FFFFFFFFh if unknown) 08h DWORD DOS file offset of start of buffer 0Ch DWORD effective file offset as seen by caller 10h WORD number of bytes in file buffer ---buffered I/O only--- 12h 512 BYTEs file buffer ----------60----DI0501----------------------- INT 60 u - HP 95LX System Manager - OPEN FILE IN READ-ONLY MODE DI = 0501h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file state record (see INT 60/DI=0500h) DWORD pointer to filename WORD length of filename WORD ??? WORD suppress buffering if nonzero Return: AX = status STACK unchanged SeeAlso: INT 60/DI=0500h ----------60----DI0502----------------------- INT 60 u - HP 95LX System Manager - CREATE NEW FILE DI = 0502h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file state record (see INT 60/DI=0500h) DWORD pointer to filename WORD length of filename WORD ??? WORD suppress buffering if nonzero Return: AX = status STACK unchanged SeeAlso: INT 60/DI=0500h,INT 60/DI=0503h ----------60----DI0503----------------------- INT 60 u - HP 95LX System Manager - CREATE OR TRUNCATE FILE DI = 0503h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file state record (see INT 60/DI=0500h) DWORD pointer to filename WORD length of filename WORD ??? WORD suppress buffering if nonzero Return: AX = status STACK unchanged SeeAlso: INT 60/DI=0502h ----------60----DI0504----------------------- INT 60 u - HP 95LX System Manager - READ FROM FILE DI = 0504h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file state record (see INT 60/DI=0500h) DWORD pointer to data buffer WORD number of bytes to read DWORD pointer to WORD in which to return actual bytes read Return: ??? STACK unchanged SeeAlso: INT 60/DI=0505h ----------60----DI0505----------------------- INT 60 - HP 95LX System Manager - WRITE TO FILE DI = 0505h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file state record (see INT 60/DI=0500h) DWORD pointer to data WORD length of data Return: AX = status STACK unchanged SeeAlso: INT 60/DI=0504h ----------60----DI0506----------------------- INT 60 u - HP 95LX System Manager - SET FILE POSITION DI = 0506h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file state record (see INT 60/DI=0500h) WORD ??? WORD ??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0507h ----------60----DI0507----------------------- INT 60 u - HP 95LX System Manager - GET FILE POSITION DI = 0507h "M_TELL" STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file state record (see INT 60/DI=0500h) DWORD pointer to DWORD buffer for file position??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0506h ----------60----DI0508----------------------- INT 60 u - HP 95LX System Manager - CLOSE FILE DI = 0508h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to file state record (see INT 60/DI=0500h) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0500h ----------60----DI0509----------------------- INT 60 u - HP 95LX System Manager - FILE SERVICE "M_SETPAT" DI = 0509h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? WORD ??? WORD ??? Return: ??? STACK unchanged ----------60----DI050A----------------------- INT 60 u - HP 95LX System Manager - FILE SERVICE "M_MATCH" DI = 050Ah STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged Format of pattern match control block: Offset Size Description 00h 43 BYTEs FindFirst data block (see INT 21/AH=4Eh) 2Bh 80 BYTEs full path name 7Bh BYTE offset of last component of filename 7Ch BYTE DOS function number (4Eh or 4Fh) ----------60----DI050B----------------------- INT 60 u - HP 95LX System Manager - IDENTIFY FILENAME REFERENT DI = 050Bh STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? WORD ??? DWORD pointer to ??? Return: ??? STACK unchanged Values returned: 0000h nonexistent 0001h file 0002h directory 0003h character device ----------60----DI050C----------------------- INT 60 u - HP 95LX System Manager - DELETE FILE DI = 050Ch "M_DELETE" STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? WORD ??? Return: ??? STACK unchanged ----------60----DI050D----------------------- INT 60 u - HP 95LX System Manager - RENAME FILE DI = 050Dh STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? WORD ??? DWORD pointer to ??? WORD ??? WORD ??? Return: ??? STACK unchanged ----------60----DI050E----------------------- INT 60 u - HP 95LX System Manager - FILE SERVICE "M_GETDIR" DI = 050Eh STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI050F----------------------- INT 60 u - HP 95LX System Manager - FILE SERVICE "M_SETDIR" DI = 050Fh STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0510----------------------- INT 60 u - HP 95LX System Manager - FILE SERVICE "M_VOLUME" DI = 0510h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0511----------------------- INT 60 u - HP 95LX System Manager - MAKE A SUBDIRECTORY DI = 0511h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0512----------------------- INT 60 u - HP 95LX System Manager - REMOVE A SUBDIRECTORY DI = 0512h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0513----------------------- INT 60 u - HP 95LX System Manager - GET DEFAULT DRIVE DI = 0513h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? buffer for current drive Return: ??? STACK unchanged ----------60----DI0514----------------------- INT 60 u - HP 95LX System Manager - SET DEFAULT DRIVE DI = 0514h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD new drive Return: ??? STACK unchanged ----------60----DI0515----------------------- INT 60 u - HP 95LX System Manager - FILE SERVICE "M_FDATE" DI = 0515h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0516----------------------- INT 60 u - HP 95LX System Manager - FILE SERVICE "M_GET_SYSDIR" DI = 0516h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0517----------------------- INT 60 u - HP 95LX System Manager - GET FILE ATTRIBUTES DI = 0517h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? WORD ??? DWORD pointer to ??? buffer for file's attributes??? Return: ??? STACK unchanged ----------60----DI0518----------------------- INT 60 u - HP 95LX System Manager - SET FILE ATTRIBUTES DI = 0518h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? WORD ??? WORD new attributes??? Return: ??? STACK unchanged ----------60----DI0519----------------------- INT 60 u - HP 95LX System Manager - FILE SERVICE "M_COMMON_OPEN" DI = 0519h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? WORD ??? WORD ??? WORD ??? WORD ??? WORD ??? Return: ??? STACK unchanged ----------60----DI051A----------------------- INT 60 u - HP 95LX System Manager - FILE SERVICE "M_COPYDT" DI = 051Ah STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI051B----------------------- INT 60 u - HP 95LX System Manager - FILE SERVICE "M_GETFDT" DI = 051Bh STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI051C----------------------- INT 60 u - HP 95LX System Manager - FILE SERVICE "M_PUTFDT" DI = 051Ch STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0600----------------------- INT 60 u - HP 95LX System Manager - PROCESS INITIALIZING DI = 0600h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 60/DI=0601h,INT 61"HP 95LX" ----------60----DI0601----------------------- INT 60 u - HP 95LX System Manager - PROCESS TERMINATION DI = 0601h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: never STACK unchanged SeeAlso: INT 21/AH=4Ch,INT 60/DI=0600h ----------60----DI0602----------------------- INT 60 u - HP 95LX System Manager - "M_LOCK" - PREVENT TASK SWITCHES DI = 0602h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 15/AX=101Bh,INT 60/DI=0603h ----------60----DI0603----------------------- INT 60 u - HP 95LX System Manager - "M_UNLOCK" - ALLOW TASK SWITCHES DI = 0603h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 15/AX=101Ch,INT 60/DI=0602h ----------60----DI0604----------------------- INT 60 u - HP 95LX System Manager - "M_SPAWN" DI = 0604h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? WORD ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0605----------------------- INT 60 u - HP 95LX System Manager - "M_APPCOUNT" DI = 0605h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged ----------60----DI0606----------------------- INT 60 u - HP 95LX System Manager - "M_REBOOT" DI = 0606h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged ----------60----DI0607----------------------- INT 60 u - HP 95LX System Manager - "M_SPAWNARG" DI = 0607h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0608----------------------- INT 60 u - HP 95LX System Manager - "M_REG_APP_NAME" DI = 0608h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0609----------------------- INT 60 u - HP 95LX System Manager - "M_APP_NAME" DI = 0609h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: DX:AX -> ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------60----DI0700----------------------- INT 60 u - HP 95LX System Manager - OPEN CLIPBOARD DI = 0700h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0701h,INT 60/DI=0702h Values for error code: 0000h successful FFF8h transfer request out of bounds FFF9h no such representation FFFAh no representation open FFFBh a representation is already open FFFCh representation already exists FFFDh heap allocation failure FFFEh clipboard not open FFFFh clipboard access denied ----------60----DI0701----------------------- INT 60 u - HP 95LX System Manager - CLOSE CLIPBOARD DI = 0701h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0700h,INT 60/DI=0702h ----------60----DI0702----------------------- INT 60 u - HP 95LX System Manager - RESET CLIPBOARD DI = 0702h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0700h ----------60----DI0704----------------------- INT 60 u - HP 95LX System Manager - "M_NEW_REP" - START A NEW REPRESENTATION??? DI = 0704h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0705h,INT 60/DI=0706h,INT 60/DI=0707h ----------60----DI0705----------------------- INT 60 u - HP 95LX System Manager - CLIPBOARD SERVICE "M_FINI_REP" DI = 0705h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0704h ----------60----DI0706----------------------- INT 60 u - HP 95LX System Manager - CLIPBOARD SERVICE "M_REP_NAME" DI = 0706h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0704h,INT 60/DI=0707h ----------60----DI0707----------------------- INT 60 u - HP 95LX System Manager - CLIPBOARD SERVICE "M_REP_INDEX" DI = 0707h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0704h,INT 60/DI=0706h ----------60----DI0708----------------------- INT 60 u - HP 95LX System Manager - WRITE TO CLIPBOARD DI = 0708h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to data to be written??? WORD length of data??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0709h ----------60----DI0709----------------------- INT 60 u - HP 95LX System Manager - READ FROM CLIPBOARD DI = 0709h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? WORD ??? DWORD pointer to buffer for data??? WORD length of buffer??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0708h ----------60----DI0800----------------------- INT 60 u - HP 95LX System Manager - BEEP DI = 0800h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0801h,INT 60/DI=0802h,INT 60/DI=0803h ----------60----DI0801----------------------- INT 60 u - HP 95LX System Manager - SOUND SERVICE "M_THUD" DI = 0801h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0800h,INT 60/DI=0802h,INT 60/DI=0803h ----------60----DI0802----------------------- INT 60 u - HP 95LX System Manager - MAKE A SOUND PATTERN DI = 0802h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD pattern number (00h-06h) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0800h,INT 60/DI=0801h,INT 60/DI=0803h ----------60----DI0803----------------------- INT 60 u - HP 95LX System Manager - TURN OFF SOUND DI = 0803h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0800h,INT 60/DI=0801h,INT 60/DI=0802h ----------60----DI0900----------------------- INT 60 - HP 95LX System Manager - ALLOCATE REGULAR MEMORY BLOCK DI = 0900h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD size of block in bytes Return: AX -> memory block STACK unchanged Note: System Manager-compliant applications are always small-model (64K code, 64K data) SeeAlso: INT 15/AX=4DD4h,INT 60/DI=0902h,INT 60/DI=0903h ----------60----DI0902----------------------- INT 60 u - HP 95LX System Manager - FREE REGULAR MEMORY BLOCK DI = 0902h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD offset of memory block??? Return: ??? STACK unchanged Note: System Manager-compliant applications are always small-model (64K code, 64K data) SeeAlso: INT 60/DI=0900h,INT 60/DI=0904h ----------60----DI0903----------------------- INT 60 u - HP 95LX System Manager - ALLOCATE LARGE MEMORY BLOCK DI = 0903h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD size of block in bytes??? Return: AX -> memory block??? STACK unchanged SeeAlso: INT 60/DI=0900h,INT 60/DI=0904h ----------60----DI0904----------------------- INT 60 u - HP 95LX System Manager - FREE LARGE MEMORY BLOCK DI = 0904h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD segment of memory block??? Return: AX -> ??? STACK unchanged SeeAlso: INT 60/DI=0902h,INT 60/DI=0903h ----------60----DI0B00----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_DTINFO" DI = 0B00h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0B01----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_GETDTM" DI = 0B01h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0B02----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_SETDTM" DI = 0B02h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0B03----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_XALARM" DI = 0B03h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? Return: ??? STACK unchanged ----------60----DI0B04----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_ALARM" DI = 0B04h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to alarm record??? WORD ??? Return: ??? STACK unchanged Format of alarm record: Offset Size Description 00h BYTE hour 01h BYTE minute 02h BYTE second 03h BYTE unused padding 04h WORD rescheduling interval, in seconds 06h BYTE are seconds significant? 07h BYTE alarm sound 08h 40 BYTEs message displayed when alarm activates 30h BYTE task ID of owner 31h BYTE application's own use for sub-class 32h 4 BYTEs application's own use for private data ----------60----DI0B05----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_START_SW" DI = 0B05h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0B06----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_GET_SW" DI = 0B06h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0B07----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_STOP_SW" DI = 0B07h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0B08----------------------- INT 60 u - HP 95LX System Manager - "M_TELLTIME" - DISPLAY TIMESTAMP DI = 0B08h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD timestamp format bits 1-0: 00 date only 01 time only 10 date and time 11 day and date bit 4: supply am/pm bit 5: supply seconds bit 6: show year bit 7: four-digit year WORD row (-3 is topmost, 0 is first non-reserved line) WORD column Return: ??? STACK unchanged ----------60----DI0B09----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_GET_SETTINGS" DI = 0B09h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0B0Ah,INT 60/DI=0B0Fh Format of system settings: Offset Size Description 00h WORD country code 02h WORD speaker volume (00h-03h or FFh for off) 04h WORD contrast level (00h-0Fh) 06h WORD week start (00h Sunday, 01h Monday) 08h WORD punctuation format code decimal arg thousands 00h . , , 01h , . . 02h . ; ; 03h , ; . 04h . , " " 05h , . " " 06h . ; " " 07h , ; " " 0Ah WORD two-character language code (only 5355h = "US" byte-swapped) 0Ch WORD current date format 00h dd-mmm-yy 01h dd-mmm 02h mmm-yy 03h mm/dd/yy 04h dd/mm/yy 05h dd.mm.yy 06h yy-mm-dd 07h mm/dd 08h dd/mm 09h dd.mm 0Ah mm-dd 0Eh WORD current time format 00h HH:MM:SS am/pm 01h HH:MM am/pm 02h HH:MM:SS 03h HH.MM.SS 04h HH,MM,SS 05h HHhMMmSSs 06h HH:MM 07h HH.MM 08h HH,MM 09h HHhMMm 10h WORD collating sequence 00h numbers first, 01h letters first, 02h ASCII 12h 80 BYTEs name of picture file 62h 30 BYTEs name 80h 30 BYTEs title 9Eh 28 BYTEs company name BAh WORD number of languages BCh 6 BYTEs available languages C2h 66 BYTEs language menu 104h 2 BYTEs ASCIZ date separator 106h 2 BYTEs ASCIZ time separator 108h BYTE date order 109h BYTE use 24 hour time? 10Ah 16 BYTEs currency string 11Ah WORD currency string position (00h prefix, 01h suffix) 11Ch WORD keyboard (see below) 11Eh WORD printer baud rate 00h 300, 01h 1200, 02h 2400, 03h 4800, 04h 9600, 05h 19200 120h WORD printer driver code 00h Epson FX80, 01h HP Laserjet, 02h IBM ProPrinter 122h WORD printer interface (00h COM1, 01h COM2, 02h IR, 03h LPT1) 124h WORD system manager interrupt (60h by default) 126h WORD code page (01h CP850, 02h CP437) 128h WORD active exit key 12Ah WORD active menu key 12Ch WORD active CHAR key toggle 12Eh 6 BYTEs alarm Values for keyboard: 0001h Belgium 0002h French Canadian 0004h Denmark 0008h Finland 0010h French 0020h Finland 0040h Italy 0080h Netherlands 0100h Norway 0200h Portugal 0400h Spain 0800h Sweden 1000h Swiss French 2000h Swiss German 4000h United Kingdom 8000h USA ----------60----DI0B0A----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_SET_SETTINGS" DI = 0B0Ah STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0B09h ----------60----DI0B0B----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_START_TIMER" DI = 0B0Bh STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0B0Ch,INT 60/DI=0B0Dh ----------60----DI0B0C----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_STOP_TIMER" DI = 0B0Ch STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0B0Bh,INT 60/DI=0B0Dh ----------60----DI0B0D----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_GET_TIMER" DI = 0B0Dh STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0B0Bh,INT 60/DI=0B0Ch ----------60----DI0B0E----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_TELL_ANYTIME" DI = 0B0Eh STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? WORD ??? WORD ??? DWORD pointer to ??? DWORD pointer to ??? Return: DX:AX -> ??? STACK unchanged ----------60----DI0B0F----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVCE "M_GET_SETTINGS_ADDR" DI = 0B0Fh STACK: 2 WORDs unused dummies (for calls from high level languages) Return: DX:AX -> system settings record (see INT 60/DI=0B09h) STACK unchanged SeeAlso: INT 60/DI=0B09h ----------60----DI0B10----------------------- INT 60 u - HP 95LX System Manager - PARSE DATE SPECIFICATION DI = 0B10h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0B11----------------------- INT 60 u - HP 95LX System Manager - PARSE TIME SPECIFICATION DI = 0B11h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? DWORD pointer to ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0B12----------------------- INT 60 u - HP 95LX System Manager - SET DATE PARSING RULE DI = 0B12h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD new parsing rule 01h day-month-year 02h month-day-year 03h year-month-day 04h "DMYO" 05h "MDYO" OR with 08h to get any year Return: ??? STACK unchanged SeeAlso: INT 60/DI=0B13h ----------60----DI0B13----------------------- INT 60 u - HP 95LX System Manager - SET TIME PARSING RULE DI = 0B13h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD new parsing rule 01h HH:MM:SS (am/pm) 02h HH:MM:SS (24hr) 03h HHMM:SS (24hr) 04h HH:MM:SS.hh (24hr) 05h HH:MM (am/pm) 06h HH:MM (24hr) 07h HHMM (24hr) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0B12h ----------60----DI0B14----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_POST_TIME" DI = 0B14h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged ----------60----DI0B15----------------------- INT 60 u - HP 95LX System Manager - CLOCK/CALENDAR SERVICE "M_DAY_TRIGGER" DI = 0B15h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? Return: ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------60----DI0C00----------------------- INT 60 u - HP 95LX System Manager - OPEN PRINTER DI = 0C00h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0C01h,INT 60/DI=0C02h,INT 60/DI=0C03h ----------60----DI0C01----------------------- INT 60 u - HP 95LX System Manager - CLOSE PRINTER DI = 0C01h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged Note: relinquishes control of printer SeeAlso: INT 60/DI=0C00h ----------60----DI0C02----------------------- INT 60 u - HP 95LX System Manager - WRITE TO PRINTER DI = 0C02h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to data to be written WORD length of data Return: ??? STACK unchanged SeeAlso: INT 60/DI=0C00h ----------60----DI0C03----------------------- INT 60 u - HP 95LX System Manager - INITIALIZE PRINTER DI = 0C03h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0C00h ----------60----DI0C04----------------------- INT 60 u - HP 95LX System Manager - "M_TRANS_PRINTER" DI = 0C04h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0C05----------------------- INT 60 u - HP 95LX System Manager - "M_FALL_PRINTER" DI = 0C05h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------60----DI0E00----------------------- INT 60 u - HP 95LX System Manager - COMMUNICATIONS SERVICE "M_COMM_INIT" DI = 0E00h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 60/DI=0E01h,INT 60/DI=0E02h Values for error code: 0000h successful FFF1h "E_BUSY" FFF2h timeout FFF3h framing error FFF4h parity error FFF5h overrun error FFF6h "E_EMPTY" FFF7h "E_CONECT" FFF8h not open FFF9h out of memory FFFAh buffer overflow FFFBh "E_NOFIT" FFFCh unsupported FFFDh "E_IVOPR" FFFEh "E_IVCHN" FFFFh "E_REOPEN" ----------60----DI0E01----------------------- INT 60 u - HP 95LX System Manager - OPEN COMMUNICATIONS CHANNEL DI = 0E01h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to WORD buffer for comm channel handle WORD communications line number (01h-04h) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0E00h,INT 60/DI=0E02h ----------60----DI0E02----------------------- INT 60 u - HP 95LX System Manager - CLOSE COMMUNICATIONS CHANNEL DI = 0E02h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD comm channel handle Return: ??? STACK unchanged SeeAlso: INT 60/DI=0E00h,INT 60/DI=0E01h ----------60----DI0E03----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_GETMDM" DI = 0E03h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? Return: ??? STACK unchanged ----------60----DI0E04----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_ANSWER" DI = 0E04h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0E05----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_DIAL" DI = 0E05h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0E06----------------------- INT 60 u - HP 95LX System Manager - RESET COMMUNICATIONS CHANNEL DI = 0E06h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD comm channel handle WORD reset options bit 0: reset line bit 1: flush transmit buffer bit 2: flush receive buffer bit 3: reset modem bit 4: reset receiver's ^S state bit 5: reset transmitter's ^S state Return: ??? STACK unchanged ----------60----DI0E07----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_HANGUP" DI = 0E07h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? Return: ??? STACK unchanged ----------60----DI0E08----------------------- INT 60 u - HP 95LX System Manager - SEND DATA OVER COMM CHANNEL DI = 0E08h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD comm channel handle DWORD pointer to data to be sent WORD option flags bit 0: send partial buffer bit 1: turn on receiver after sending DWORD pointer to WORD containing length of data to be sent Return: length WORD updated to contain number of bytes actually sent??? STACK unchanged SeeAlso: INT 60/DI=0E09h,INT 60/DI=0E0Bh ----------60----DI0E09----------------------- INT 60 u - HP 95LX System Manager - QUERY COMM CHANNEL TRANSMIT QUEUE DI = 0E09h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? DWORD pointer to ??? WORD DWORD pointer to ??? WORD Return: ??? STACK unchanged SeeAlso: INT 60/DI=0E0Ah ----------60----DI0E0A----------------------- INT 60 u - HP 95LX System Manager - QUERY COMM CHANNEL RECEIVE QUEUE DI = 0E0Ah STACK: 2 WORDs unused dummies (for calls from high level languages) WORD comm channel handle DWORD pointer to WORD to get receive buffer size DWORD pointer to WORD to get free bytes in receive buffer Return: ??? STACK unchanged SeeAlso: INT 60/DI=0E09h,INT 60/DI=0E0Bh ----------60----DI0E0B----------------------- INT 60 u - HP 95LX System Manager - RECEIVE DATA FROM COMM CHANNEL DI = 0E0Bh STACK: 2 WORDs unused dummies (for calls from high level languages) WORD comm channel handle DWORD pointer to data buffer DWORD pointer to WORD (input) length of data buffer (output) number of bytes received Return: ??? STACK unchanged SeeAlso: INT 60/DI=0E08h,INT 60/DI=0E0Ah ----------60----DI0E0C----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_HAZCMD" DI = 0E0Ch STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0E0D----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_COMAND" DI = 0E0Dh STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0E0E----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_BREAK" DI = 0E0Eh STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0E0F----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_FRCXON" DI = 0E0Fh STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? Return: ??? STACK unchanged ----------60----DI0E10----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_FRCXOF" DI = 0E10h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? Return: ??? STACK unchanged ----------60----DI0E11----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_SETDTR" DI = 0E11h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0E12----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_XMITNG" DI = 0E12h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? Return: ??? STACK unchanged ----------60----DI0E13----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_STATUS" DI = 0E13h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? Return: ??? STACK unchanged ----------60----DI0E14----------------------- INT 60 u - HP 95LX System Manager - SET COMMUNICATIONS SETTINGS DI = 0E14h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD comm channel handle DWORD pointer to comm settings (see below) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0E15h Format of comm settings: Offset Size Description 00h BYTE dial type ('T' tone, 'P' pulse) 01h WORD baud rate divisor (115200/baud_rate) 03h BYTE parity (00h none, 08h odd, 18h even, 28h mark, 38h space) 04h BYTE stop bits (00h one, 04h two) 05h BYTE data bits - 5 06h BYTE software handshake 01h none, 02h XOFF/XON, 04h XOFF/any, 08h ENQ/ACK 07h BYTE infrared (01h off, 02h on) 08h BYTE duplex (01h half, 02h full) 09h BYTE echo (01h echo, 02h no echo) ----------60----DI0E15----------------------- INT 60 u - HP 95LX System Manager - GET COMMUNICATIONS SETTINGS DI = 0E15h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? DWORD pointer to buffer for settings (see INT 60/DI=0E14h) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0E14h ----------60----DI0E16----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_CNFGUR" DI = 0E16h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? WORD ??? WORD ??? WORD ??? WORD ??? Return: ??? STACK unchanged ----------60----DI0E17----------------------- INT 60 u - HP 95LX System Manager - "M_COMM_QRYERR" DI = 0E17h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? Return: ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------60----DI0F00----------------------- INT 60 u - HP 95LX System Manager - "M_ERRMSG" DI = 0F00h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? DWORD pointer to ??? WORD ??? DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0F01----------------------- INT 60 u - HP 95LX System Manager - DRAW STANDARD TITLE BOX DI = 0F01h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ASCIZ title string Return: ??? STACK unchanged ----------60----DI0F02----------------------- INT 60 u - HP 95LX System Manager - "SHOWNAME" DI = 0F02h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI0F03----------------------- INT 60 u - HP 95LX System Manager - DISPLAY TWO-LINE MESSAGE BOX DI = 0F03h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to first line of message WORD length of first line DWORD pointer to second line of message WORD length of second line Return: ??? STACK unchanged SeeAlso: INT 60/DI=0300h,INT 60/DI=0F04h,INT 60/DI=0F09h ----------60----DI0F04----------------------- INT 60 u - HP 95LX System Manager - REMOVE MESSAGE BOX DI = 0F04h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0F03h,INT 60/DI=0F09h ----------60----DI0F05----------------------- INT 60 u - HP 95LX System Manager - "M_COM_TIMER_ADDR" DI = 0F05h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: DX:AX -> ??? STACK unchanged ----------60----DI0F06----------------------- INT 60 u - HP 95LX System Manager - "M_COM_TIMER_COUNT_ADDR" DI = 0F06h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: DX:AX -> ??? STACK unchanged ----------60----DI0F07----------------------- INT 60 u - HP 95LX System Manager - "M_SYS_RSRC_ADDR" DI = 0F07h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: DX:AX -> ??? STACK unchanged ----------60----DI0F08----------------------- INT 60 u - HP 95LX System Manager - "M_BIOS_OUTSTR" DI = 0F08h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI0F09----------------------- INT 60 u - HP 95LX System Manager - DISPLAY THREE-LINE MESSAGE BOX DI = 0F09h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to first line of message WORD length of first line DWORD pointer to second line of message WORD length of second line DWORD pointer to third line of message WORD length of third line Return: ??? STACK unchanged SeeAlso: INT 60/DI=0F03h,INT 60/DI=0F04h ----------60----DI0F0A----------------------- INT 60 u - HP 95LX System Manager - DISABLE MACROS DI = 0F0Ah STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0F0Bh ----------60----DI0F0B----------------------- INT 60 u - HP 95LX System Manager - ENABLE MACROS DI = 0F0Bh STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 60/DI=0F0Ah ----------60----DI0F0C----------------------- INT 60 u - HP 95LX System Manager - "M_DATE_TIME_SEPS" DI = 0F0Ch STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI0F0D----------------------- INT 60 u - HP 95LX System Manager - "M_FORM_FT" DI = 0F0Dh STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: DX:AX -> ??? STACK unchanged ----------60----DI0F0E----------------------- INT 60 u - HP 95LX System Manager - "M_RAM_IV_INFO" DI = 0F0Eh STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: DX:AX -> ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------60----DI1005----------------------- INT 60 u - HP 95LX System Manager - "M_DIRTY_SYNC" - FORCE SCREEN UPDATE DI = 1005h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged SeeAlso: INT 10/AH=FFh,INT 60/DI=0300h,INT 60/DI=0301h ----------60----DI1200----------------------- INT 60 u - HP 95LX System Manager - RESOURCE SERVICE "MAP_RESOURCE_FILE" DI = 1200h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI1201----------------------- INT 60 u - HP 95LX System Manager - "GET_RESOURCE_PTR" DI = 1201h STACK: 2 WORDs unused dummies (for calls from high level languages) WORD ??? Return: DX:AX -> ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------60----DI1202----------------------- INT 60 u - HP 95LX System Manager - "GET_RSRC_TAB_PTR" DI = 1202h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: DX:AX -> ??? STACK unchanged ----------60----DI1203----------------------- INT 60 u - HP 95LX System Manager - "INIT_SYSGMR_RSRCS" DI = 1203h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: ??? STACK unchanged ----------60----DI1300----------------------- INT 60 u - HP 95LX System Manager - INITIALIZE HELP SYSTEM DI = 1300h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged ----------60----DI1301----------------------- INT 60 u - HP 95LX System Manager - DISPLAY HELP DI = 1301h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged ----------60----DI1302----------------------- INT 60 u - HP 95LX System Manager - "M_HELP_KEY" DI = 1302h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged ----------60----DI1303----------------------- INT 60 u - HP 95LX System Manager - "M_HELP_TERM" DI = 1303h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? Return: ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------60----DI1400----------------------- INT 60 u - HP 95LX System Manager - "M_ColInit" DI = 1400h STACK: 2 WORDs unused dummies (for calls from high level languages) Return: AX = ??? STACK unchanged ----------60----DI1401----------------------- INT 60 u - HP 95LX System Manager - "M_ColCpStr" DI = 1401h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged ----------60----DI1402----------------------- INT 60 u - HP 95LX System Manager - "M_ColLicsStr" DI = 1402h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI1403----------------------- INT 60 u - HP 95LX System Manager - "M_ColLicsChar" DI = 1403h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI1404----------------------- INT 60 u - HP 95LX System Manager - "M_ColToLower" DI = 1404h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged ----------60----DI1405----------------------- INT 60 u - HP 95LX System Manager - "M_ColCpSearch" DI = 1405h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? DWORD pointer to ??? WORD ??? WORD ??? Return: ??? STACK unchanged ----------60----DI1406----------------------- INT 60 u - HP 95LX System Manager - "M_ColToUpper" DI = 1406h STACK: 2 WORDs unused dummies (for calls from high level languages) DWORD pointer to ??? WORD ??? Return: ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------60----DI1500----------------------- INT 60 u - HP 95LX System Manager - "GrDispInit" DI = 1500h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI1501----------------------- INT 60 u - HP 95LX System Manager - "GrDispClear" DI = 1501h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI1502----------------------- INT 60 u - HP 95LX System Manager - "GrDispDot" DI = 1502h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI1503----------------------- INT 60 u - HP 95LX System Manager - "GrDispDraw" DI = 1503h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI1504----------------------- INT 60 u - HP 95LX System Manager - "GrDispFill" DI = 1504h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI1505----------------------- INT 60 u - HP 95LX System Manager - "GrDispRead" DI = 1505h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI1506----------------------- INT 60 u - HP 95LX System Manager - "GrDispString" DI = 1506h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI1507----------------------- INT 60 u - HP 95LX System Manager - "GrDispPan" DI = 1507h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI1508----------------------- INT 60 u - HP 95LX System Manager - "GrDispZoom" DI = 1508h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI1509----------------------- INT 60 u - HP 95LX System Manager - "GrDispSave" DI = 1509h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI150A----------------------- INT 60 u - HP 95LX System Manager - "GrDispRestore" DI = 150Ah STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged ----------60----DI150B----------------------- INT 60 u - HP 95LX System Manager - "GrDispCorner" DI = 150Bh STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------60----DI1604----------------------- INT 60 u - HP 95LX System Manager - "CP_TO_LICS" DI = 1604h STACK: 2 WORDs unused dummies (for calls from high level languages) ??? Return: ??? STACK unchanged SeeAlso: INT 15/AX=4DD4h,INT 61"HP 95LX",INT 62"HP 95LX" ----------6000------------------------------- INT 60 - SYS_PROF.EXE - PROFILER STATUS AH = 00h Return: AX = 0000h profiling is off otherwise profiling is on Note: SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47 SeeAlso: AH=01h"SYS_PROF",02h"SYS_PROF" ----------6000------------------------------- INT 60 - MDEBUG - GET STATUS AH = 00h DS:SI -> password or a null byte Return: AX = return code FFFEh password is invalid FFFDh display mode is invalid else successful ES = value of the monitor register SE DI = value of the monitor register OF CH = monitor color CL = interpreter color BH = monitor start line BL = interpreter start line AH = makecode of the hotkey AL = ASCII code of the hotkey DL = status of special keys (only SHIFT, ALT, CTRL) for the hotkey (coded as for the keyboard flag at 0040h:0017h) DH = basic process number for the communication with drivers process number for the display driver, DH+1 = process number for the command driver(s) DS:SI -> MDEBUG identification table Notes: MDEBUG is a shareware memory-resident debugging tool by Bernd Schemmer, including a memory monitor, an interpreter, and a disassembler MDEBUG uses INT 60 by default, but may be directed to any of INT 60 through INT 67; the interrupt handler is preceded by the signature "USERINT" and is not chained if DS:SI points at a null byte, MDEBUG will prompt for a password if passwords are active; enough stack space must be provided for an INT 10h call (which MDEBUG uses while prompting for the password) SeeAlso: AH=02h"MDEBUG" Format of MDEBUG identification table: Offset Size Description -2 WORD entry offset 00h WORD CS of MDEBUG 02h DWORD old INT 08h vector 06h DWORD old INT 09h vector 0Ah DWORD address INT 16h routine used by MDEBUG 0Eh BYTE length of version string 0Fh N BYTEs version string ----------6001------------------------------- INT 60 - MDEBUG - GET ADDRESS OF THE HELP REGISTERS AH = 01h DS:SI -> password or a null byte Return: AX = return code FFFEh password is invalid FFFDh display mode is invalid else successful ES:DI point to the help registers of MDEBUG ES:DI-02h -> R0 (WORD) ES:DI -> R1 (WORD) ES:DI+02h -> R2 (WORD) ES:DI+04h -> R3 (WORD) ... ES:DI+0Eh -> R8 (WORD) ----------6001------------------------------- INT 60 - SYS_PROF.EXE - TURN PROFILING OFF AH = 01h Note: SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47 SeeAlso: AH=00h"SYS_PROF",02h"SYS_PROF" ----------6001FF----------------------------- INT 60 - FTP Packet Driver - BASIC FUNC - GET DRIVER INFO AX = 01FFh BX = handle returned by function 02h Return: CF set on error DH = error code (see below) CF clear if successful BX = version CH = network interface class (see below) DX = interface type (see below) CL = number DS:SI -> name AL = driver functions supported 01h basic 02h basic and extended 05h basic and high-performance 06h basic, high-performance, and extended FFh not installed Note: the handle in BX is optional for drivers written to v1.07 or later of the packet driver specification Values for error code: 01h "BAD_HANDLE" invalid handle number 02h "NO_CLASS" no interfaces of the specified class found 03h "NO_TYPE" no interfaces of the specified type found 04h "NO_NUMBER" no interfaces of the specified number found 05h "BAD_TYPE" bad packet type 06h "NO_MULTICAST" interface does not support multicast messages 07h "CANT_TERMINATE" this packet driver cannot terminate 08h "BAD_MODE" invalid receiver mode 09h "NO_SPACE" insufficient space 0Ah "TYPE_INUSE" type accessed but never released 0Bh "BAD_COMMAND" bad command 0Ch "CANT_SEND" packet could not be sent 0Dh "CANT_SET" hardware address could not be changed 0Eh "BAD_ADDRESS" hardware address has a bad length or format 0Fh "CANT_RESET" could not reset interface Values for Network Interface classes/types: Class 01h Ethernet/IEEE 802.3 01h 3COM 3C500/3C501 02h 3COM 3C505 03h MICOM-Interlan NI5010 04h BICC Data Networks 4110 05h BICC Data Networks 4117 06h MICOM-Interlan NP600 08h Ungermann-Bass PC-NIC 09h Univation NC-516 0Ah TRW PC-2000 0Bh MICOM-Interlan NI5210 0Ch 3COM 3C503 0Dh 3COM 3C523 0Eh Western Digital WD8003 0Fh Spider Systems S4 10h Torus Frame Level 11h 10Net Communications 12h Gateway PC-bus 13h Gateway AT-bus 14h Gateway MCA-bus 15h IMC PCnic 16h IMC PCnic II 17h IMC PCnic 8-bit 18h Tigan Communications 19h Micromatic Research 1Ah Clarkson "Multiplexor" 1Bh D-Link 8-bit 1Ch D-Link 16-bit 1Dh D-Link PS/2 1Eh Research Machines 8 1Fh Research Machines 16 20h Research Machines MCA 21h Radix Microsystems EXM1 16-bit 22h Interlan Ni9210 23h Interlan Ni6510 24h Vestra LANMASTER 16-bit 25h Vestra LANMASTER 8-bit 26h Allied Telesis PC/XT/AT 27h Allied Telesis NEC PC-98 28h Allied Telesis Fujitsu FMR 29h Ungermann-Bass NIC/PS2 2Ah Tiara LANCard/E AT 2Bh Tiara LANCard/E MC 2Ch Tiara LANCard/E TP 2Dh Spider Communications SpiderComm 8 2Eh Spider Communications SpiderComm 16 2Fh AT&T Starlan NAU 30h AT&T Starlan-10 NAU 31h AT&T Ethernet NAU 32h Intel smart card 33h Xircom Packet Adapter 34h Aquila Ethernet 35h Novell NE1000 36h Novell NE2000 37h SMC PC-510 38h AT&T Fiber NAU 39h NDIS to Packet Driver adapter 3Ah Racal-InterLan ES3210 3Bh General Systems ISDN simulated Ethernet 3Ch Hewlett-Packard 3Dh IMC EtherNic-8 3Eh IMC EtherNic-16 3Fh IMC EtherNic-MCA 40h NetWorth EtherNext 41h Dataco Scanet 42h DEC DEPCA 43h C-Net 44h Gandalf LANLine 45h Apricot built-in 46h David Systems Ether-T 47h ODI to Packet Driver adapter 48h AMD Am21110-16 49h Intel ICD Network controller family 4Ah Intel ICD PCL2 4Bh Intel ICD PCL2A 4Ch AT&T LANPacer 4Dh AT&T LANPacer+ 4Eh AT&T EVB 4Fh AT&T StarStation 50h SLIP simulated ethernet 51h Racal-Interlan NIA310 52h Racal-Interlan NISE 53h Racal-Interlan NISE30 54h Racal-Interlan NI6610 55h Ethernet over IP/UDP Class 02h ProNET-10 01h Proteon p1300 02h Proteon p1800 Class 03h IEEE 802.5/ProNet-4 01h IBM Token-Ring Adapter 02h Proteon p1340 03h Proteon p1344 04h Gateway PC-bus 05h Gateway AT-bus 06h Gateway MCA-bus 39h NDIS to Packet Driver adapter 47h ODI to Packet Driver adapter Class 04h Omninet Class 05h Appletalk 01h ATALK.SYS adapter Class 06h Serial Line 01h Clarkson 8250-SLIP 02h Clarkson "Multiplexor" Class 07h StarLAN (subsumed by Ethernet class) Class 08h ARCnet 01h Datapoint RIM Class 09h AX.25 01h Ottawa PI card Class 0Ah KISS Class 0Bh IEEE 802.3 with 802.2 headers types same as for class 01h Class 0Ch FDDI with 802.2 headers 01h Western Digital 02h Frontier Technology Class 0Dh Internet X.25 01h Western Digital 02h Frontier Technology Class 0Eh N.T. LANSTAR (encapsulating DIX Ethernet) 01h NT LANSTAR/8 02h NT LANSTAR/MC Class 0Fh SLFP (MIT serial specification) 01h MERIT Class 10h PPP (Point-to-Point Protocol) Note: class and type numbers are cleared through FTP Software ----------6002------------------------------- INT 60 - MDEBUG - SET STATUS AH = 02h DS:SI -> password or a null byte ES = new value for the register SE DI = new value for the register OF CH = new monitor color if nonzero CL = new interpreter color if nonzero BH = new monitor start line if nonzero BL = new interpreter start line if nonzero AL = new ASCII code for the hotkey ('A'..'Z', 'a'..'z') if nonzero DL = new status of the special keys (SHIFT, ALT, CTRL) for the hotkey if nonzero DH = if nonzero, new basic process number for communication with the drivers (DH = multiplex number for the display driver, DH+1 = multiplex number for the command driver or drivers) Return: AX = return code FFFFh call not allowed FFFEh password is invalid FFFDh display mode is invalid 0000h successful, status changed else AL = error code bit 0 invalid monitor start line 1 invalid interpreter start line 2 invalid hotkey 3 invalid process number 4-7 reserved Note: the values of the registers SE and OF are always changed, the other values are only changed if they are valid SeeAlso: AH=00h"MDEBUG" ----------6002------------------------------- INT 60 - FTP Packet Driver - BASIC FUNC - ACCESS TYPE AH = 02h AL = interface class BX = interface type DL = interface number DS:SI -> type CX = length of type (0000h for all packets) ES:DI -> receiver Return: CF set on error DH = error code (see AX=01FFh) CF clear if successful AX = handle SeeAlso: AH=03h"FTP" Receiver is called with: AX = subfunction 00h get packet buffer DX = lookahead length (v1.10+) DS:SI -> lookahead buffer if DX nonzero (v1.10+) DI = error flags (class dependent) (v1.10+) Return: ES:DI -> packet buffer 0000h:0000h means throw away packet CX = size of buffer (v1.10+), may be smaller than incoming data 01h copy completed DS:SI -> buffer CX = bytes actually copied (v1.10+) BX = handle CX = buffer length when a packet is received ----------6002------------------------------- INT 60 - SYS_PROF.EXE - TURN PROFILING ON AH = 02h Note: SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47 SeeAlso: AH=00h"SYS_PROF",01h"SYS_PROF" ----------6003------------------------------- INT 60 - MDEBUG - POP UP AH = 03h DS:SI -> password or a null byte ES -> new value for the register SE DI -> new value for the register OF Return: AX = return code FFFFh call not allowed FFFEh password is invalid FFFDh display mode is invalid else successful SeeAlso: AH=04h"MDEBUG" ----------6003------------------------------- INT 60 - FTP Packet Driver - BASIC FUNC - RELEASE TYPE AH = 03h BX = handle Return: CF set on error DH = error code (see AX=01FFh) CF clear if successful SeeAlso: AH=02h"FTP" ----------6003------------------------------- INT 60 - SYS_PROF.EXE - GET ADDRESS OF PROFILING TABLE AH = 03h Return: ES:BX -> profiling table Note: SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47 SeeAlso: AH=04h"SYS_PROF" ----------6004------------------------------- INT 60 - FTP Packet Driver - BASIC FUNC - SEND PACKET AH = 04h DS:SI -> buffer CX = length Return: CF set on error DH = error code (see AX=01FFh) CF clear if successful Note: the buffer may be modified immediately upon return from this call SeeAlso: AH=0Bh ----------6004------------------------------- INT 60 - MDEBUG - POP UP AH = 04h DS:SI -> password or a null byte Return: AX = return code FFFFh call not allowed FFFEh password is invalid FFFDh display mode is invalid else successful SeeAlso: AH=03h"MDEBUG",AH=07h"MDEBUG" ----------6004------------------------------- INT 60 - SYS_PROF.EXE - CLEAR PROFILING TABLE AH = 04h Note: SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47 SeeAlso: AH=03h"SYS_PROF" ----------6005------------------------------- INT 60 - FTP Packet Driver - BASIC FUNC - TERMINATE DRIVER FOR HANDLE AH = 05h BX = handle (optional for v1.10+) Return: CF set on error DH = error code (see AX=01FFh) CF clear if successful ----------6005------------------------------- INT 60 - MDEBUG - GET AND SET MDEBUG FLAGS AH = 05h DS:SI -> password or a null byte BL = new value for the semaphor of MDEBUG 00h enable popup of MDEBUG else disable popup of MDEBUG Return: AX = return code FFFEh password is invalid FFFDh display mode is invalid else successful BL = old value of the semapor of MDEBUG BH = old value of the INT 08h semaphor (this semaphor is always reset after this function) ----------6006------------------------------- INT 60 - FTP Packet Driver - BASIC FUNC - GET ADDRESS AH = 06h BX = handle (optional for v1.10+) ES:DI -> buffer CX = length Return: CF set on error DH = error code (see AX=01FFh) CF clear if successful CX = length Note: copies the local net address associated with the handle into the buffer ----------6006------------------------------- INT 60 - MDEBUG - GET PASSWORD STATUS AH = 06h Return: AL = status 00h password inactive 01h password active ----------6007------------------------------- INT 60 - FTP Packet Driver - BASIC FUNC - RESET INTERFACE AH = 07h BX = handle (optional for v1.10+) Return: CF set on error DH = error code (see AX=01FFh) CF clear if successful ----------6007------------------------------- INT 60 - MDEBUG v1.70+ - GET ACTIVE PART OF MDEBUG AH = 07h Return: AL = active part for the next popup session of MDEBUG: bit 0: the next popup session will start in the interpreter rather than in the monitor bit 1: the next popup session will sart in the online-help SeeAlso: AH=03h"MDEBUG",AH=04h"MDEBUG" ----------6008------------------------------- INT 60 - MDEBUG - UNUSED AH = 08h-FFh Return: AX = FFFCh ----------600A------------------------------- INT 60 - FTP Packet Driver 1.09+ - HIGH-PERF FUNC - GET PARAMETERS AH = 0Ah Return: CF set on error DH = error code (0Bh) (see AX=01FFh) CF clear if successful ES:DI -> parameter table (see below) Format of parameter table: Offset Size Description 00h BYTE major revision of packet driver spec driver conforms to 01h BYTE minor revision of packet driver spec 02h BYTE length of this structure in bytes 03h BYTE length of a MAC-layer address 04h WORD maximum transfer unit, including MAC headers 06h WORD buffer size for multicast addr 08h WORD number of receive buffers (one less than back-to-back MTU rcvs) 0Ah WORD number of transmit buffers 0Ch WORD interrupt number to hook for post-EOI processing, 00h=none ----------600B------------------------------- INT 60 - FTP Packet Driver 1.09 - HIGH-PERF FUNC - ASYNCHRONOUS SEND PACKET AH = 0Bh DS:SI -> buffer CX = length of buffer ES:DI -> FAR function to call when buffer becomes available Return: CF set on error DH = error code (0Bh,0Ch) (see AX=01FFh) CF clear if successful Notes: unlike function 04h, the buffer is not available for modification as soon as the call returns; the buffer may be queued by the driver and not processed until later this function has been dropped from v1.10+ of the specification and replaced by function 0Ch SeeAlso: AH=04h"Packet Driver",AH=0Ch"Packet Driver" Completion function called with: AX = result 00h copy OK nonzero error ES:DI -> buffer passed to INT 60/AH=0Bh call ----------600C------------------------------- INT 60 - FTP Packet Driver 1.10+ - HIGH-PERF FUNC - ASYNCHRONOUS SEND PACKET AH = 0Ch ES:DI -> pointer to IOCB Return: CF set on error DH = error code (see AX=01FFh) CF clear if successful SeeAlso: AH=04h"Packet Driver",AH=09h"Packet Driver" Format of IOCB: Offset Size Description 00h DWORD pointer to buffer 04h WORD length of buffer 06h BYTE flags bit 0: packet driver is finished with IOCB bit 1: application requests upcall when driver completes 07h DWORD function address for upcall 0Bh 4 BYTEs future gather write 0Fh BYTE ??? 10h 8 BYTEs private driver workspace Completion function called with: ES:DI -> IOCB passed to INT 60/AH=0Ch ----------600C------------------------------- INT 60 - Banyan VINES, 3com - GET STATION ADDRESS AH = 0Ch Return: AL = status 00h successful ES:SI -> 6-byte station address 02h semaphore service is unavailable ----------600D------------------------------- INT 60 - FTP Packet Driver 1.10+ - HIGH-PERF FUNC - DROP PACKET FROM QUEUE AH = 0Dh ES:DI -> IOCB Return: CF set on error DH = error code (see AX=01FFh) CF clear if successful SeeAlso: AH=0Ch"Packet Driver" ----------6011------------------------------- INT 60 - 3com, 10-NET, Banyan VINES - LOCK AND WAIT AH = 11h AL = drive number or 0 DX = number of seconds to wait ES:SI = Ethernet address or 0 DS:BX -> 31-byte ASCIZ semaphore name Return: AL = status 00h successful 01h timeout 02h server not responding 03h invalid semaphore name 04h semaphore list is full 05h invalid drive ID 06h invalid Ethernet address 07h not logged in 08h write to network failed 09h semaphore already logged for this CPU SeeAlso: AH=12h,AH=13h ----------6012------------------------------- INT 60 - 3com, 10-NET, Banyan VINES - LOCK AH = 12h AL = drive number or 00h ES:SI = Ethernet address or 0000h:0000h DS:BX -> 31-byte ASCIZ semaphore name Return: AL = status (see also AH=11h) 01h semaphore currently locked by another PC Note: unlike function 11h, this function returns immediately SeeAlso: AH=11h,AH=13h ----------6013------------------------------- INT 60 - 3com, 10-NET, Banyan VINES - UNLOCK AH = 13h AL = drive number or 00h ES:SI = Ethernet address or 0000h:0000h DS:BX -> 31-byte ASCIZ semaphore name Return: AL = status (see also AH=11h) 1 semaphore not locked SeeAlso: AH=11h,AH=12h ----------6014------------------------------- INT 60 - FTP Packet Driver - EXTENDED FUNC - SET RECEIVE MODE AH = 14h BX = handle (optional for v1.10+) CX = mode 01h turn off receiver 02h receive only packets sent to this interface 03h mode 2 plus broadcast packets 04h mode 3 plus limited multicast packets 05h mode 3 plus all multicast packets 06h all packets 07h raw mode for serial line only (v1.10+) Return: CF set on error DH = error code (01h,08h) (see AX=01FFh) CF clear if successful SeeAlso: AH=15h ----------6015------------------------------- INT 60 - FTP Packet Driver - EXTENDED FUNC - GET RECEIVE MODE AH = 15h BX = handle (optional for v1.10+) Return: CF set on error DH = error code (01h) (see AX=01FFh) CF clear if successful AX = mode SeeAlso: AH=14h ----------6016------------------------------- INT 60 - FTP Packet Driver - EXTENDED FUNC - SET MULTICAST LIST AH = 16h ES:DI -> multicast list CX = length of list in bytes Return: CF set on error DH = error code (06h,09h,0Eh) (see AX=01FFh) CF clear if successful SeeAlso: AH=17h ----------6017------------------------------- INT 60 - FTP Packet Driver - EXTENDED FUNC - GET MULTICAST LIST AH = 17h Return: CF set on error DH = error code (06h,09h) (see AX=01FFh) CF clear if successful ES:DI -> multicast addresses (do not modify) CX = bytes of multicast addresses currently in use SeeAlso: AH=16h ----------6018------------------------------- INT 60 - FTP Packet Driver - EXTENDED FUNC - GET STATISTICS AH = 18h BX = handle (optional for v1.10+) Return: CF set on error DH = error code (01h) (see AX=01FFh) CF clear if successful DS:SI -> statistics (see below) Format of statistics: Offset Size Description 00h DWORD packets in 04h DWORD packets out 08h DWORD bytes in 0Ch DWORD bytes out 10h DWORD errors in 14h DWORD errors out 18h DWORD packets dropped ----------6019------------------------------- INT 60 - FTP Packet Driver - EXTENDED FUNC - SET NETWORK ADDRESS AH = 19h ES:DI -> address CX = length of address Return: CF set on error DH = error code (0Dh,0Eh) (see AX=01FFh) CF clear if successful CX = length ----------601A------------------------------- INT 60 - FTP Packet Driver v1.10+ - EXTENDED FUNC - SEND RAW BYTES AH = 1Ah DS:SI -> buffer CX = length of buffer Return: CF set on error DH = error code (see AX=01FFh) CF clear if successful SeeAlso: AH=1Ch ----------601B------------------------------- INT 60 - FTP Packet Driver v1.10+ - EXTENDED FUNC - FLUSH RAW BYTES RECEIVED AH = 1Bh Return: CF set on error DH = error code (see AX=01FFh) CF clear if successful SeeAlso: AH=1Ch ----------601C------------------------------- INT 60 - FTP Packet Driver v1.10+ - EXTENDED FUNC - FETCH RAW BYTES RECEIVED AH = 1Ch DS:SI -> buffer CX = length of buffer DX = timeout in clock ticks Return: CF set on error DH = error code (see AX=01FFh) CF clear if successful CX = number of bytes transferred to buffer SeeAlso: AH=1Ah,AH=1Bh ----------60AD------------------------------- INT 60 - AccessDOS - API AH = ADh AL = function E1h ??? Return: AX = ??? E2h get configuration Return: BX:AX -> configuration data Notes: AccessDOS is a public domain TSR developed at The Trace Research and Development Center which provides extensions for keyboard, mouse, and sound access by the visually, hearing, or motor-control impaired. INT 60 is the default vector; AccessDOS will use the first 0000h:0000h vector in the range 60h through 66h. ----------61--------------------------------- INT 61 - reserved for user interrupt ----------61--------------------------------- INT 61 - Atari Portfolio - EXTENDED BIOS provides subfunctions such as turning off the machine, accessing internal variables, and mapping memory cards SeeAlso: INT 60"Atari" ----------61--------------------------------- INT 61 - HP 95LX System Manager - LOAD DS SeeAlso: INT 0F"HP 95LX",INT 60"HP 95LX" ----------61--------------------------------- INT 61 - JPI TopSPEED Modula-2 v1 - PROCEDURE EXIT TRAP SeeAlso: INT 61"JPI" ----------61--------------------------------- INT 61 - Adaptec and OMTI controllers - DRIVE 0 DATA Note: this vector stores the second four bytes of the parameter table for hard disk 0 SeeAlso: INT 60"Adaptec",INT 62"Adaptec",INT 63"Adaptec" ----------61--------------------------------- INT 61 - Sangoma CCIP (CCPOP 3270 resident module) INTERFACE BX:DX -> control block SeeAlso: INT 67"Sangoma" ----------61--------------------------------- INT 61 - VIRUS - "SEMTEX"/"Screen Trasher" - INT 21h SUBSTITUTE Note: the virus copies the original INT 21h vector into INT 61h SeeAlso: INT 21h,INT 60"VIRUS",INT 6B"VIRUS" ----------61--------------------------------- INT 61 - FTP Software PC/TCP - TCP/IP TSR System Call interface AH = system call number (see separate entries below) Return: CF clear if successful CF set on error AL = basic error 04h invalid handle??? 12h invalid subfunction 18h invalid system call 1Bh kernel busy, try again later AH = suberror number Notes: the installation check consists of testing for the signature "TCPTSR" three bytes beyond the start of the interrupt handler INT 61 is the default; PC/TCP v2.05 may be configured to use any interrupt from 20h through E0h BUG: the SLIP kernel for v2.05 bounds-checks the wrong register, so values greater than 54h in AH may crash the system. Other kernels may have this bug as well. SeeAlso: INT 61/AH=00h"PC/TCP",INT 61/AH=2Ah,INT 61/AH=54h ----------6100------------------------------- INT 61 U - PC/TCP kernel v2.05 - GET DEBUG INFORMATION AH = 00h DS:SI -> 216-byte buffer for network debugging information (see below) Return: CF clear AX = 0000h buffer filled SeeAlso: INT 61"PC/TCP",INT 61/AH=2Ah"PC/TCP" Format of network debugging information: Offset Size Description 00h DWORD number of interrupts 04h DWORD receive buffer low-water mark 08h DWORD transmit buffer low-water mark 0Ch DWORD number of packets received 10h DWORD number of packets transmitted 14h DWORD total receive errors 18h DWORD total transmit errors 1Ch 4 BYTEs ??? 20h DWORD receive resets 24h DWORD transmit resets 28h DWORD number of "runts" received 2Ch DWORD number of alignment errors on received packets 30h DWORD number of CRC errors on received packets 34h DWORD number of parity errors on received packets 38h DWORD number of receive overflow errors 3Ch DWORD number of oversized packets received 40h DWORD number of packets lost due to lack of buffers 44h DWORD receive timeouts 48h 32 BYTEs ??? 68h DWORD number of transmit collisions 6Ch DWORD number of transmit timeouts 70h DWORD number of transmit underflows 74h DWORD number of lost "crs" on transmit 78h DWORD number of times heartbeat failed on transmit 7Ch 24 BYTEs ??? 94h WORD free packet buffers 96h WORD total packet buffers 98h WORD minimum number of packet buffers free since kernel started 9Ah 24 BYTEs ??? B2h DWORD pointer to TCP connection list??? B6h DWORD pointer to IP routing table??? BAh 30 BYTEs ??? ----------610000----------------------------- INT 61 - OPTIMA 1024 VGA-Sync - ZOOM DISPLAY AX = 0000h BX = zoom factor (0-7) Notes: zooms the display based on the given zoom factor INT 61h is the default interrupt; the actual interrupt number can be obtained by calling INT 16/AH=FFh SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0001h"OPTIMA",INT 61/AX=0002h"OPTIMA" SeeAlso: INT 61/AX=0005h"OPTIMA" ----------610001----------------------------- INT 61 - Banyan VINES - "Sosock" - OPEN COMMUNICATIONS SOCKET AX = 0001h DS:DX -> communications control block (function 0001h) Return: AX = status 0000h successful 0001h service not installed 0002h invalid service ID 0098h resource already in use 009Eh address family does not exist 009Fh socket type does not exist 00A0h protocol does not exist 00A1h no more sockets available 00A2h no more buffer space available Note: BANYAN can use any interrupt from 60h through 66h. The Banyan interrupt handler is identified by the string "BANV" in the four bytes immediately preceding the interrupt handler Format of control block: Offset Size Description 00h WORD 0001h 02h WORD pointer to argument block 04h WORD error return code 06h 4 BYTEs reserved Format of argument block: Offset Size Description 00h WORD pointer to 2-byte buffer for socket identifier 02h WORD address family 0003h Banyan 04h WORD socket type in address family 0003h 0001h IPC socket 0002h SPP socket 06h WORD protocol number FFFFh default 08h WORD pointer to 16-byte buffer for socket address 0Ah WORD local port number 0000h if service should assign transient port number 0001h to 01FFh well-known port number (assigned by Banyan) Format of IPC port: Offset Size Description 00h WORD address family (always 0003h for Banyan ports) 04h 4 BYTEs network number (server's serial number) 06h WORD subnet number (0001h = server, 8000h-FFFEh = PC) 08h WORD port ID (0001h-01FFh for "well-known" ports) 0Ah BYTE hop count 0Bh 5 BYTEs filler ----------610001----------------------------- INT 61 - Banyan VINES - "Sosend" - INITIATE OUTPUT EVENT AX = 0001h DS:DX -> communications control block (function 0002h) Return: AX = status 0000h successful 0001h service not installed 0002h invalid service ID 0003h-000Ah reserved for BANV interface errors 0097h invalid socket identifier 009Bh destination node unreachable 009Ch message overflow 009Dh destination socket nonexistent 00A2h no more buffer space 00A3h timeout 00B1h resource disconnect Note: BANYAN can use any interrupt from 60h through 66h. The Banyan interrupt handler is identified by the string "BANV" in the four bytes immediately preceding the interrupt handler Format of control block: Offset Size Description 00h WORD 0002h 02h WORD pointer to argument block (see below) 04h WORD error return code 0000h successful 0097h invalid socket ID 00A2h no more buffer space 00A3h timeout event 00A5h resource not available 00A6h internal communication failure 00B1h resource disconnect 06h 4 BYTEs reserved Format of argument block: Offset Size Description 00h WORD routine metric 02h WORD error return code 04h WORD socket identifier 06h WORD pointer to send buffer 08h WORD length of send buffer 0Ah WORD flags bit 0: async request 1: reliable message 3: end of user message received 4: vectored request (if set, send buffer contains buffer descriptors) 5: connection-specific receive 6: change to connection-specific receive mode 0Ch 16 BYTEs socket address (see below) 1Ch WORD timeout value in multiples of 200ms 1Eh WORD connection identifier 20h WORD type of request 0001h send message 0002h establish a virtual connection 0003h terminate a virtual connection Format of buffer descriptor: Offset Size Description 00h WORD data segment 02h WORD buffer pointer 04h WORD buffer length 06h WORD character count Format of socket address for unreliable datagrams: Offset Size Description 00h WORD 0003h address family 02h DWORD FFFFFFFFh network number 06h WORD FFFFh subnet number 08h WORD local port number 0Ah BYTE 00h-0Fh hop count 0Bh 5 BYTEs 0000h filler ----------610001----------------------------- INT 61 - Banyan VINES - "Sorec" - RECEIVE INPUT EVENT NOTIFICATION AX = 0001h DS:DX -> communications control block (function 0003h) Return: AX = status 0000h successful 0001h service not installed 0002h invalid service ID 0003h-000Ah reserved for BANV interface errors 0097h invalid socket identifier 00A2h no more buffer space 00A3h timeout Note: BANYAN can use any interrupt from 60h through 66h. The Banyan interrupt handler is identified by the string "BANV" in the four bytes immediately preceding the interrupt handler Format of control block: Offset Size Description 00h WORD 0003h 02h WORD pointer to argument block (see below) 04h WORD error return code 0000h successful 0097h invalid socket ID 00A2h no more buffer space 00A3h timeout event 00A5h resource not available 00A6h internal communication failure 00B1h resource disconnect 06h 4 BYTEs reserved Format of argument block: Offset Size Description 00h WORD character count 02h WORD error return code 04h WORD socket identifier 06h WORD pointer to receive buffer 08h WORD length of receive buffer 0Ah WORD flags bit 0: async request 2: flush receive buffer on overflow 3: end of user message received 4: vectored request (if set, receive buffer contains buffer descriptors) 5: connection-specific receive 6: change to connection-specific receive mode 0Ch 16 BYTEs socket address 1Ch WORD timeout value in multiples of 200ms 1Eh WORD connection identifier 20h WORD type of response 0001h message received 0002h virtual connection established 0003h virtual connection terminated Format of buffer descriptor: Offset Size Description 00h WORD data segment 02h WORD buffer pointer 04h WORD buffer length 06h WORD character count ----------610001----------------------------- INT 61 - Banyan VINES - "Soclose" - CLOSE A SOCKET AX = 0001h DS:DX -> communications control block (function 0004h) Return: AX = status 0000h successful 0001h service not installed 0002h invalid service ID 0003h-000Ah reserved for BANV interface errors 0097h invalid socket identifier Note: BANYAN can use any interrupt from 60h through 66h. The Banyan interrupt handler is identified by the string "BANV" in the four bytes immediately preceding the interrupt handler Format of control block: Offset Size Description 00h WORD 0004h 02h WORD pointer to argument block (see below) 04h WORD error return code 06h 4 BYTEs reserved Format of argument block: Offset Size Description 00h WORD socket identifier ----------610001----------------------------- INT 61 - Banyan VINES - "Sowait" - WAIT FOR ASYNCHRONOUS EVENT COMPLETION AX = 0001h DS:DX -> communications control block (function 0005h) Return: AX = status 0000h successful 0001h service not installed 0002h invalid service ID 0003h-000Ah reserved for BANV interface errors 00A2h no more buffer space available 00A3h timeout event Notes: BANYAN can use any interrupt from 60h through 66h. The Banyan interrupt handler is identified by the string "BANV" in the four bytes immediately preceding the interrupt handler returns results for all asynchronous operations invoked from the data segment used for this call Format of control block: Offset Size Description 00h WORD 0005h 02h WORD pointer to argument block (see below) 04h WORD error return code 06h 4 BYTEs reserved Format of argument block: Offset Size Description 00h WORD pointer to WORD event pointer 02h WORD timeout in multiples of 200ms, FFFFh = infinite ----------610001----------------------------- INT 61 - Banyan VINES - "Sosession" - REGISTER APPLICATION WITH COMM SERVICE AX = 0001h DS:DX -> communications control block (function 0008h) Return: AX = status 0000h successful 00A2h no more buffer space available Note: BANYAN can use any interrupt from 60h through 66h (default 61h). The Banyan interrupt handler is identified by the string "BANV" in the four bytes immediately preceding the interrupt handler Format of control block: Offset Size Description 00h WORD 0008h 02h WORD process type 0001h transient process 0002h resident process 04h WORD error return code 06h 4 BYTEs reserved ----------610001----------------------------- INT 61 - Banyan VINES - "Soint" - SET USER COMPLETION FUNCTION AX = 0001h DS:DX -> communications control block (function 000Bh) Return: AX = status 0000h successful 0001h service not installed 0002h invalid service ID 0003h-000Ah reserved for BANV interface errors 00A2h no more buffer space available Notes: BANYAN can use any interrupt from 60h through 66h. The Banyan interrupt handler is identified by the string "BANV" in the four bytes immediately preceding the interrupt handler FAR user function is invoked with SS,DS, and ES set to segment of control block, and with the stack containing DWORD return address WORD argument pointer (sosend or sorec argument block) WORD error return code 0000h argument pointer is valid 00A3h timeout Format of control block: Offset Size Description 00h WORD 000Bh 02h WORD pointer to argument block (see below) 04h WORD error return code 06h 2 BYTEs reserved 08h WORD user CS register Format of argument block: Offset Size Description 00h WORD pointer to user interrupt function 02h WORD pointer to user stack 04h WORD initial timeout value in multiples of 200ms, FFFFh = infinite ----------610001----------------------------- INT 61 - OPTIMA 1024 VGA-Sync - CENTER ZOOM WINDOW AX = 0001h BX = X coordinate to center CX = Y coordinate to center Notes: Positions the zoom window such that the specified window-relative coordinates appear as close as possible to the center of the display. Useful for scrolling and panning. INT 61h is the default interrupt; the actual interrupt number can be obtained by calling INT 16/AH=FFh SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0002h"OPTIMA" SeeAlso: INT 61/AX=0005h"OPTIMA" ----------610002----------------------------- INT 61 - Banyan VINES - 3270 INTERFACE AX = 0002h BH = function 00h "pi2reset" reset 3270/SNA or 3270/BSC driver 02h "pi2bsc" (3270/BSC only) 03h "pi2get" get information stored in 3270 resident driver 04h "pi2put" store information in 3270 resident driver 05h "pi2gcur" get current screen position 07h "pi2sdat" send data keystroke 08h "pi2scom" send command keystroke 0Ah "pi2field" get field info for arbitrary screen positions 0Fh "pi2stat" get logical unit/device status 12h "pi2nlus" determine logical unit/device assignment 13h "pi2gate" specifies comm port address to gateway service 14h "pi2attach" attach a logical unit/device 15h "pi2sdev" save logical unit/device info in resident driver (not supported in >3.0) 16h "pi2gdev" get device information (not supported in >3.0) 17h "pi2luinfo" get info about specific logical unit/device 18h "pi2gerr" get finer error detail 19h "pi2dhold" (3270/SNA only) holds a 3270 device 1Ah "pi2shut" release memory-resident module 1Ch "pi2sprof" save profile info in res driver (not supp in >3.0) 1Dh "pi2gprof" get prevsly stored profile info (not supp in >3.0) DS:CX -> argument block (except BH=00h,1Ah) Return: AX = status 0000h successful 000Bh invalid parameter or data does not fit data area 000Ch another code path currently active in resident driver 000Dh operation currently not allowed 0032h encountered connection disconnect error 0033h encountered "sosend" completion error 0034h encountered "sosend" communication error 0035h attach request refused. extended error info via "pi2gerr": 01h resource unavailable 02h invalid type 03h version mismatch 04h invalid logical unit number 05h error during ARL processing 06h no access for user 0071h encountered "sosock" error 0072h encountered unrecognizable error 0073h encountered "sowait" error (extended info via "pi2gerr") 0074h encountered invalid type-of-request on "sowait" 0075h encountered "sorec" error (extended info via "pi2gerr") 0076h encountered "sorec" completion error (ext info via "pi2gerr") 0077h encountered connection request 0078h encountered unrecognizable data 0079h encountered unknown connection ID (ext info via "pi2gerr") Notes: Either 3270/SNA or 3270/BSC interface may use AX=0002h, depending on which is loaded first. The other interface will use AX=000Ah Status codes greater than 63h indicate an inconsistency in the 3270/SNA or 3270/BSC resident driver, which must be reloaded by the user Format of argument block for BH=03h,04h: Offset Size Description 00h WORD size of data area (max 256) 02h N BYTEs data area Format of argument block for BH=05h: Offset Size Description 00h WORD logical unit/device number 02h WORD pointer to WORD buffer for cursor index 04h WORD pointer to BYTE buffer for current field attribute Format of argument block for BH=07h: Offset Size Description 00h WORD logical unit/device number 02h WORD ASCII data byte 04h WORD pointer to WORD count of characters which will need updating Format of argument block for BH=08h: Offset Size Description 00h WORD logical unit/device number 02h WORD keystroke 0000h Enter 0001h Clear 0002h PA1 0003h PA2 0004h PA3 0005h PF1 ... 001Ch PF24 001Dh CSELECT (cursor select) 001Eh Insert 001Fh Delete 0020h EOField 0021h EINPUT (erase input) 0022h Reset 0023h Attention 0024h SysReq 0025h Duplicate 0026h Fieldmark 0027h Home 0028h NextLine 0029h Tab 002Ah BackTab 002Bh cursor up 002Ch cursor down 002Dh cursor right 002Eh cursor left 002Fh double cursor right 0030h double cursor left 0031h PRINT 0032h CANCEL 0033h Backspace Format of argument block for BH=0Ah: Offset Size Description 00h WORD logical unit/device number 02h WORD screen index 04h WORD pointer to WORD buffer for field length 06h WORD pointer to WORD buffer for offset in screen of field start Format of argument block for BH=0Fh: Offset Size Description 00h WORD logical unit/device number 02h WORD clear mask (clear these bits of status after returning status) 04h WORD pointer to WORD buffer for status bit 10: status modified bit 9: buffer modified bit 8: set cursor bit 5: sound alarm bits 0,1: size of print line for printer logical units 00 unformatted line 01 40-character line 10 64-character line 11 80-character line Format of argument block for BH=12h: Offset Size Description 00h WORD pointer to WORD buffer for number of logical units or devices 02h WORD pointer to WORD buffer for version number 04h WORD pointer to 64-byte buffer for logical unit/device list Format of argument block for BH=13h: Offset Size Description 00h 16 BYTEs communications port address (see AX=0001h#"Sosock") Format of argument block for BH=14h: Offset Size Description 00h WORD logical unit/device number 0000h attach any free device of the specified type 02h WORD logical unit/device type (3270/SNA) 01h, 02h, or 03h (3270/BSC) 02h display (3270/BSC) 03h printer 04h WORD pointer to WORD buffer for attached logical unit/device number Format of argument block for BH=16h: Offset Size Description 00h WORD pointer to 18-byte buffer for device block (see below) first WORD must be set to desired logical unit/device number Format of argument block for BH=17h: Offset Size Description 00h WORD logical unit/device number 02h WORD pointer to information block in caller's DS (see below) Format of argument block for BH=18h: Offset Size Description 00h WORD pointer to WORD buffer for major error code 02h WORD pointer to WORD buffer for minor error code Format of argument block for BH=19h: Offset Size Description 00h WORD logical unit/device number Format of argument block for BH=1Ch,1Dh: Offset Size Description 00h WORD pointer to profile block in caller's DS (see below) Format of device block, argument block for BH=15h: Offset Size Description 00h WORD logical unit/device number 02h WORD logical unit/device type 04h WORD display model number 06h WORD numeric checking 08h WORD status line 0Ah BYTE unprotected normal field attribute 0Bh BYTE unprotected intensified field attribute 0Ch BYTE protected normal field attribute 0Dh BYTE protected intensified field attribute 0Eh WORD reserved 10h WORD printer port number Format of information block: Offset Size Description 00h WORD device model number 02h DWORD screen buffer pointer 06h DWORD status line pointer (see below) 0Ah DWORD reserved Format of status line: Offset Size Description 00h BYTE comm line status 00h inactive 01h active 01h BYTE activation level 01h physical unit activated 02h logical unit also activated 03h session is bound 02h BYTE data traffic state 00h inactive 01h active 03h BYTE screen ownership 00h SLU->PLU sessoin owns screen 01h SLU->SSCP session owns screen 04h BYTE keyboard status 00h UNLOCK - ready to accept data 01h TIME - aid was struck 02h SYSTEM - received response no restore 03h FUNCTION - unavailable keyboard function 04h INPUT - not currently used 05h ENDFIELD - field filled in insert mode 06h PROTECTED - attempt to enter in protected field 07h NUMERIC - attempt to enter in numeric field 08h PROGRAM - error in outbound data stream 05h BYTE insert mode 01h if in insert mode 06h BYTE numeric 01h if current screen buffer is numeric only 07h BYTE printer status 00h printer not assigned 01h printer is inactive 02h printer error 03h currently printing 04h printer is busy 05h printer is very busy 08h BYTE printer assignment 09h BYTE maximum size of network name 0Ah N BYTEs ASCIZ network name BYTE maximum size of message window M BYTEs null-terminated message window BYTE code set 00h EBCDIC 01h ASCII M BYTEs extended attributes 01h extended attributes are in effect (stored at screen+1920) each extended attribute specifies bits 0,1: 00=normal, 01=blink, 10=reverse, 11=underscor bits 2-4: 000=default,001=blue,010=red,011=pink, 100=green,101=turquoise,110=yellow,111=white BYTE extended color 01h other than base color is in effect Format of profile block: Offset Size Description 00h 64 BYTEs gateway service name 40h 16 BYTEs gateway comm port address 50h WORD primary logical unit number 52h WORD secondary logical unit type 54h WORD secondary logical unit number 56h WORD printer assignment 58h 50 BYTEs keyboard definitions filename ----------610002----------------------------- INT 61 - OPTIMA 1024 VGA-Sync - END ZOOM AX = 0002h Note: switches off zoom and returns window to its original state INT 61h is the default interrupt; the actual interrupt number can be obtained by calling INT 16/AH=FFh SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA" ----------610003----------------------------- INT 61 - Banyan VINES - ASYNCHRONOUS TERMINAL EMULATION AX = 0003h DS:BX -> argument block with function number (see below) Return: AX = status 0000h successful 000Bh invalid session ID 000Ch session not active 000Dh invalid request type 000Eh invalid parameters 000Fh out of heap space 0010h timeout on send 0011h Banyan communications error 0012h session not waiting for host 0013h session is active 0014h duplicate suspend session request 0015h no session suspended 0016h ring data buffer full 0017h printer error encountered 0018h Banyan communications error 0019h unable to make connection 001Ah no ring buffer specified at startup 001Bh service is down 001Ch invalid service name 001Dh service is closed 001Eh invalid connection name 001Fh max session limit reached for service 0020h access rights list for connection/dialout does not include this user 0021h service not responding 0022h missing telephone number Format of argument block: Offset Size Description 00h BYTE session ID (00h) 01h BYTE asynchronous interface request number 00h initialize user buffer pointer information area 01h send to host 02h "control monitor" 03h "flow control data": freeze/unfreeze display, ring buffer 04h end active session 05h set session parameter 06h get session parameter 07h set tab settings 08h get tab settings 09h refresh emulation screen 0Ah suspend session temporarily 0Bh restore previously suspended session 0Ch set state of scroll lock checking 0Dh exit emulation 0Eh interrupt on character from host 0Fh start a session 10h start/stop printing of data received from host 11h get file transfer parameters 12h get connection information 13h start/stop tracing data traffic in session 14h interrupt on message from host 15h reset error ---request=00h--- 02h WORD pointer to info area in caller's current DS Offset Size Description 00h WORD flags 0000h don't read interface's data buffer 0001h read data buffer 02h DWORD pointer to ring buffer 06h WORD length of ring buffer 08h WORD ring buffer offset to last byte read by caller 0Ah DWORD pointer to WORD containing offset of last byte in ring buffer filled 0Eh DWORD pointer to screen buffer 12h DWORD pointer to field containing cursor position 16h DWORD pointer to terminal status area (see below) ---request=01h--- 02h BYTE type 00h ASCII byte 01h ASCII string 02h terminal function code 03h up arrow 04h down arrow 05h left arrow 06h right arrow 07h break 03h N BYTEs type-specific info Offset Size Description ---ASCII byte--- 03h BYTE byte to send to host ---ASCII string--- 03h WORD length of string 05h WORD pointer to string ---terminal function code (VT52/VT100)--- 03h BYTE function code 00h keypad 0 01h keypad 1 ... 09h keypad 9 0Ah keypad - 0Bh keypad , 0Ch keypad . 0Dh keypad ENTER 0Eh PF1 0Fh PF2 10h PF3 11h PF4 ---terminal function code (IBM3101)--- 03h BYTE function code 00h PF1 ... 07h PF8 08h Home ---request=02h--- 02h BYTE display flag 00h don't display data received from host 01h display data ---request=03h--- 02h BYTE flow control flag 00h allow characters to be put into display or ring buffer 01h don't place any more characters into display or ring buffer ---request=05h,06h--- 02h BYTE parameter number 00h line speed (00h=any, 01h=50, 02h=110, 03h=134.5, 04h=150, 05h=300,06h=600,07h=1200,08h=2400,09h=4800, 0Ah=9600) 01h parity (00h=none, 01h=odd, 02h=even) 02h duplex (00h=full, 01h=half) 03h character size (00h=7 bits, 01h=8 bits) 04h stop bits (00h=1, 01h=2) 05h XON/XOFF flow control (00h=no, 01h=yes) 07h intercharacter delay in tenths of a second 08h interline delay in tenths of a second 09h auto linefeed (00h=no, 01h=yes) 0Ah filter control characters (00h=no, 01h=yes) 0Bh terminal type (00h=VT100,01h=glassTTY,02h=VT52,03h=IBM3101) 0Ch auto wrap (00h=no, 01h=yes) 0Dh cursor shape (00h=underscore, 01h=block) 0Eh character set (00h=UK, 01h=US ASCII) 0Fh printer port (00h=LPT1, 01h=LPT2, 02h=LPT3) 03h BYTE parameter value (returned for 06h) ---request=07h,08h--- 02h WORD pointer to 80-byte buffer in caller's current DS each byte = 00h if no tab, 01h if tab at that position ---request=0Ah--- 02h WORD size of session information to be saved 04h WORD pointer to buffer in caller's DS ---request=0Bh--- 02h WORD size of buffer into which session info is restored 04h WORD pointer to buffer in caller's DS ---request=0Ch--- 02h BYTE check_scroll_lock flag 00h off 01h on (display of host data stopped while ScrollLock on) ---request=0Eh,14h--- 02h DWORD pointer to routine to be called (0000h:0000h = don't call) 06h DWORD stack pointer to use when call is made ---request=0Fh--- 02h WORD pointer to information area in caller's current DS Offset Size Description 00h WORD length of service name 02h WORD pointer to service name in caller's DS 04h BYTE type of connection (00h=connection name, 01h=dialout) 05h WORD length of connection name/telephone number 07h WORD pointer to connection name/telephone number ---request=10h--- 02h WORD print capture flag (00h=off, 01h=on) ---request=11h--- 02h WORD pointer to info area in caller's current DS Offset Size Description 00h BYTE protocol flag (00h none, 01h Kermit) 01h BYTE direction flag (00h send, 01h receive) 02h BYTE length of null-terminated PC filename 03h DWORD pointer to null-terminated PC filename 07h BYTE length of null-terminated host filename 08h DWORD pointer to null-terminated host filename ---request=12h--- 02h WORD pointer to info area in caller's current DS (see below) Offset Size Description 00h WORD length of service name (returned) 02h WORD pointer to 64-byte buffer for service name 04h BYTE type of connection 00h connection name 01h dialout 05h WORD length of connection name/telephone number 07h WORD pointer to 64-byte buffer for name/telno 09h BYTE server line number being used (returned) ---request=13h--- 02h BYTE trace flag (00h=off, 01h=on) Format of terminal status area: Offset Size Description 00h BYTE status of session: 4Eh=oNline, 46h=oFfline, 57h=Waiting 01h BYTE terminal type (00h=VT100, 01h=TTY, 02h=VT52, 03h=IBM3101) 02h BYTE current keypad mode (VT100,VT52 only) 4Eh ("N") numeric mode 41h ("A") application mode 03h 4 BYTEs current state of LEDs (VT100 only) 00h off 01h on 07h WORD line error count 09h WORD primary error code 0000h no error 0001h unable to make connection 0002h communications error, restart session 0003h async terminal emulation service unavailable 0004h lost carrier 0005h all matching lines busy 0006h no lines defined for connection name 0007h no dial lines available on server 0008h no matching dial lines available 0009h out of heap space 000Ah service error encountered 000Bh timed out waiting to connect 000Ch communications error 000Dh communications error 000Eh host wants file transferred to/from PC 000Fh host software changed session parameter 0010h host software changed tap settings 0011h host software changed LED indicator 0012h host software changed display background (secondary error code 00h for white on black, 01h for black on white) 0013h host software changed display option (secondary error code 00h for off, 01h for on) 0014h communications error 0015h communications error 0016h unable to make connection 0017h unable to make connection 0Bh WORD secondary error code ----------610003----------------------------- INT 61 - OPTIMA 1024 VGA-Sync - REPORT ZOOM FACTOR AX = 0003h Return: AX = zoom factor Note: returns the current zoom factor INT 61h is the default interrupt; the actual interrupt number can be obtained by calling INT 16/AH=FFh SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0005h"OPTIMA" ----------610004----------------------------- INT 61 - Banyan VINES - GET SERVER SERIAL NUMBER AX = 0004h DS:DX -> request block (function 0008h) Return: AX = status 0000h server ID returned in request block 000Fh invalid drive 0015h drive not ready Format of request block: Offset Size Description 00h WORD 0008h 02h WORD drive number (0=default, 1=A, ...) 04h 6 BYTEs buffer for server ID ----------610004----------------------------- INT 61 - OPTIMA 1024 VGA-Sync - ENTER SPECIFY MODE AX = 0004h Note: Specify Mode is enabled by hot key (seeAlso below), and allows panning and zooming via the numeric keypad. INT 61h is the default interrupt; the actual interrupt number can be obtained by calling INT 16/AH=FFh The Zoom interrupt no. can be obtained with function INT 16h,AH=0FFh SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0007h"OPTIMA" ----------610005----------------------------- INT 61 - Banyan VINES - PRINTER CONTROL AX = 0005h DS:DX -> request block Return: AX = status 0000h successful 0001h network software not installed or incompatible SeeAlso: INT 2F/AX=D702h Format of request block: Offset Size Description 00h WORD function 0201h "endspool" all data for a print job has been sent 0205h "getactive" get currently active printer port 02h WORD number of active port (1-3) 04h WORD ??? (0 for func 0201h, 3 for func 0205h) 06h WORD 0000h ----------610005----------------------------- INT 61 - OPTIMA 1024 VGA-Sync - QUERY ZOOM WINDOW AX = 0005h BX:CX -> buffer for window parameters (see below) Note: INT 61h is the default interrupt; the actual interrupt number can be obtained by calling INT 16/AH=FFh SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0003h"OPTIMA" SeeAlso: INT 61/AX=0006h"OPTIMA" Format of window parameters: Offset Size Description 00h WORD X start of zoom window 02h WORD Y start of zoom window 04h WORD X end of zoom window 06h WORD Y end of zoom window 08h WORD current zoom factor 0Ah WORD zoom offset start X 0Ch WORD zoom offset start Y ----------610006----------------------------- INT 61 - OPTIMA 1024 VGA-Sync - SET ZOOM WINDOW AX = 0006h BX:CX -> zoom window description (see below) Notes: width of zoom window must be a multiple of the pixel replication factor INT 61h is the default interrupt; the actual interrupt number can be obtained by calling INT 16/AH=FFh SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0001h"OPTIMA" SeeAlso: INT 61/AX=0005h"OPTIMA",INT 61/AX=0008h"OPTIMA" Format of zoom window description: Offset Size Description 00h WORD X start of zoom window 02h WORD Y start of zoom window 04h WORD X end of zoom window 06h WORD Y end of zoom window ----------610007----------------------------- INT 61 - OPTIMA 1024 VGA-Sync - QUERY APPLICATION KEY AX = 0007h Return: AX = 0000h/0001h Notes: In specify mode, the END key has been reserved for applications. Returns the current toggle state of that key. E.g. in the OPTIMA AutoCAD driver, 0 means, AutoCAD calls subfunction 0001h every time the cross cursor moves. INT 61h is the default interrupt; the actual interrupt number can be obtained by calling INT 16/AH=FFh SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0001h"OPTIMA" SeeAlso: INT 61/AX=0004h"OPTIMA",INT 7A"AutoCAD" ----------610007BX0002----------------------- INT 61 - Banyan VINES - GET PORTS FOR A SERVICE AX = 0007h BX = 0002h DS:DX -> StreetTalk service name DS:DI -> port record block (see below) Return: AX = status 0000h successful 0001h PC network software not installed or incompatible 03E9h incorrect name syntax 03EAh organization name too long 03EBh group name too long 03ECh item name too long 03EDh StreetTalk name too long 03F3h organization not found 03F4h group not found 03F5h StreetTalk name not found 03F8h not a StreetTalk name 040Dh appropriate StreetTalk name unavailable Format of port record block: Offset Size Description 00h WORD number of 17-byte elements 02h 17 BYTEs element (byte 00h = input port type, bytes 01h-10h = port) (see AX=0001h#"Sosock" for port format) ----------610007BX0004----------------------- INT 61 - Banyan VINES - SET PORTS FOR A SERVICE AX = 0007h BX = 0004h DS:DX -> StreetTalk name of service DS:DI -> port record block (see below) Return: AX = status 0000h successful 0001h PC network software not installed or incompatible 03E9h incorrect name syntax 03EAh organization name too long 03EBh group name too long 03ECh item name too long 03EDh StreetTalk name too long 03F3h organization not found 03F4h group not found 03F5h StreetTalk name not found 03F8h not a StreetTalk name 0409h modify access denied 040Dh appropriate StreetTalk name unavailable Format of port record block: Offset Size Description 00h WORD number of 17-byte elements 02h 17 BYTEs element: byte 00h = input port type, 01h-10h = port (see AX=0001h#"Sosock" for port format) ----------610007BX0005----------------------- INT 61 - Banyan VINES - GET USER NAME AX = 0007h BX = 0005h DS:DX -> 64-byte buffer for user's StreetTalk name Return: AX = status 0000h successful 0001h network software not installed or incompatible Note: if no user logged in, first byte of returned name will be 00h ----------610007BX0006----------------------- INT 61 - Banyan VINES - TRANSLATE ERROR INTO ASCII STRING AX = 0007h BX = 0006h SI = error code (>100) DS:DX -> 80-byte buffer for error text Return: AX = status 0000h successful 0001h network software not installed or incompatible ----------610007BX0007----------------------- INT 61 - Banyan VINES - VERIFY EXISTENCE OF NAME AND RETURN CANONICAL FORM AX = 0007h BX = 0007h DS:DX -> NiceName block (see below) Return: AX = status 0000h successful 0001h PC network software not installed or incompatible 03E9h incorrect name syntax 03EAh organization name too long 03EBh group name too long 03ECh item name too long 03EDh StreetTalk name too long 03F3h organization not found 03F4h group not found 03F5h StreetTalk name not found 03F8h not a StreetTalk name 040Dh appropriate StreetTalk name unavailable SeeAlso: AX=0007h/BX=0008h Format of NiceName block: Offset Size Description 00h WORD type of name 0064h organization 00C8h group 012Ch item 02h WORD pointer to ASCIZ input name 04h WORD pointer to 64-byte buffer for output name ----------610007BX0008----------------------- INT 61 - Banyan VINES - ENUMERATE StreetTalk NAMES AX = 0007h BX = 0008h DS:DX -> enumerate block (see below) Return: AX = status 0000h successful 0411h all matching names have been returned 0412h some groups unavailable, all available matches returned Note: each program using this call should continue until a nonzero status is returned; otherwise, some resources will not be freed for several hours SeeAlso: AX=0007h/BX=0007h Format of enumerate block: Offset Size Description 00h WORD return code 02h WORD pointer to pattern string 04h WORD enumerate type 0064h organization 00C8h group 012Ch item 06h WORD enumerate class 0000h unspecified (return all matching items) 0001h user names 0002h service names 0003h list names 0004h nicknames 08h WORD pointer to category criteria block (see below) or 0 0Ah WORD pointer to array of 64-byte returned names 0Ch WORD number of names returned 0Eh 6 BYTEs reserved for subsequent enumerated calls (set to zeros on first call) Format of category criteria block: Offset Size Description 00h WORD exclude flag 0000h return only items with the specified categories 0001h return all items except those with the given categories 02h WORD number of categories 04h WORD category 1 value 06h WORD category 2 value ... Values for common service categories: 0002h file service 0003h print service 0004h mail service 0005h StreetTalk 0006h time service 0008h semaphore service 0009h 3270/SNA service 000Ah asynchronous terminal emulation service 000Ch NETBIOS service 000Dh PC-based service ----------610008----------------------------- INT 61 - OPTIMA 1024 VGA-Sync - SET ZOOM OFFSET AX = 0008h BX = X start of zoom offset CX = Y start of zoom offset Notes: specifies the first byte of video memory to appear in the zoom window INT 61h is the default interrupt; the actual interrupt number can be obtained by calling INT 16/AH=FFh SeeAlso: INT 16/AH=FFh"OPTIMA",INT 61/AX=0000h"OPTIMA",INT 61/AX=0006h"OPTIMA" ----------610008BX0002----------------------- INT 61 - Banyan VINES - POST MESSAGE ON LOCAL DISPLAY AX = 0008h BX = 0002h CX = flags bit 0: message will remain on screen until user presses ^X bit 1: ring bell after displaying message bit 2: blink DS:DX -> ASCIZ string to display (only first 80 chars used) Return: AX = status 0000h successful 000Bh message display function currently busy 000Ch message queue full Note: queues up to three messages to be displayed on the bottom line ----------610008BX0003----------------------- INT 61 - Banyan VINES - INTERCEPT VINES 25th-LINE MESSAGES AT LOCAL PC AX = 0008h BX = 0003h DS:DX -> request block Return: AX = status 0000h successful 0001h network software not installed or incompatible Notes: message handler should not call BIOS or DOS functions, and should either call next handler or simply return to stop intercepting messages, set prev and next request blocks to point at each other Format of request block: Offset Size Description 00h DWORD pointer to user-written message handler 04h DWORD pointer to next request block (filled in by VINES) 08h DWORD pointer to previous request block (filled in by VINES) 0Ch DWORD pointer to message storage area (filled by VINES) (see below) Format of message storage area: Offset Size Description 00h 16 BYTEs IPC port of message sender (see AX=0001h#"Sosock") 10h BYTE message flags 11h WORD reserved 13h BYTE length of message 14h 80 BYTEs message text ----------61000A----------------------------- INT 61 - Banyan VINES - SECONDARY 3270 INTERFACE AX = 000Ah Notes: either 3270/SNA or 3270/BSC interface will use AX=000Ah, depending on which is loaded second. The first interface loaded will use AX=0002h SeeAlso: INT 61/AX=0002h ----------6101------------------------------- INT 61 - Banyan VINES - CHECK SERVICE AH = 01h AL = service ID 01h communications 02h primary 3270 emulation 03h async terminal emulation 04h file deflection 07h StreetTalk 08h environment 0Ah secondary 3270 emulation 0Bh semaphore service 0Ch 3270 emulation active status 0Dh 3270 keyboard interrupt simulator Return: AX = status 0000h installed 0001h not installed 0002h invalid ID ----------6102------------------------------- INT 61 - Banyan VINES - GET REVISION NUMBER AH = 02h DS:DX -> 2-byte buffer for result Return: AX = 0000h installed DS:DX buffer contains revision number as 10000d * major_ver + 100d * minor_ver + patch_revision ----------6105------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 05h BX = connection handle??? Return: CF clear if successful DX:AX = ??? CF set on error AX = error code (see INT 61"PC/TCP") Notes: the installation check consists of testing for the signature "TCPTSR" three bytes beyond the start of the interrupt handler INT 61 is the default; PC/TCP v2.05 may be configured to use any interrupt from 20h through E0h SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=06h ----------6106------------------------------- INT 61 U - PC/TCP kernel v2.05 - GET INTERFACE STATISTICS AH = 06h BX = connection handle??? DS:SI -> 38-byte buffer (see below) Return: CF clear if successful buffer filled CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=05h Format of buffer: Offset Size Description 00h WORD ??? 02h WORD ??? 04h WORD ??? 06h DWORD IP address of interface, high byte first 0Ah DWORD subnet mask 0Eh WORD ??? (apparently always 0001h) 10h DWORD total packets received 14h DWORD total packets sent 18h DWORD receive errors 1Ch DWORD send errors 20h WORD ??? (apparently always 0006h) 22h DWORD pointer to ??? ----------6107------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 07h BX = connection handle??? Return: CF clear if successful AX = ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6108------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 08h BX = connection handle??? Return: CF clear if successful CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6109------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? ALL AH = 09h Return: CF clear Notes: performs function 08h on every connection handle??? the installation check consists of testing for the signature "TCPTSR" three bytes beyond the start of the interrupt handler INT 61 is the default; PC/TCP v2.05 may be configured to use any interrupt from 20h through E0h SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------610C------------------------------- INT 61 U - PC/TCP kernel v2.05 - GET CONNECTION??? STATISTICS AH = 0Ch BX = connection handle??? FFFCh for kernel ICMP statistics FFFDh for kernel UDP statistics FFFEh for kernel IP statistics FFFFh for kernel TCP statistics DS:DX -> 64-byte buffer Return: CF clear if successful buffer filled CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" Format of handle statistics: Offset Size Description 00h 4 BYTEs unused 04h DWORD ??? 08h 8 BYTEs unused 10h DWORD ??? 14h DWORD ??? 18h 12 BYTEs unused 24h DWORD ??? 28h 24 BYTEs unused Format of kernel TCP statistics: Offset Size Description 00h 16 BYTEs unused 10h DWORD bytes sent 14h DWORD bytes received 18h 8 BYTEs unused 20h DWORD packets sent 24h DWORD packets received 28h DWORD bad checksums 2Ch DWORD protocol errors 30h DWORD timeouts 34h DWORD resets 38h DWORD duplicate packets 3Ch DWORD retransmits Format of kernel IP statistics: Offset Size Description 00h 8 BYTEs unused 08h DWORD ??? errors 0Ch DWORD ??? errors 10h DWORD ??? 14h DWORD ??? errors 18h DWORD security errors 1Ch DWORD ??? errors 20h DWORD packets sent 24h DWORD packets received 28h DWORD bad checksums 2Ch DWORD protocol errors 30h DWORD timeouts 34h DWORD errors 38h DWORD fragments 3Ch Format of kernel UDP statistics: Offset Size Description 00h 32 BYTEs unused 20h DWORD packets sent 24h DWORD packets received 28h DWORD bad checksums 2Ch DWORD port not listening errors 30h 4 BYTEs unused 34h DWORD truncated receives 38h 8 BYTEs unused Format of kernel ICMP statistics: Offset Size Description 00h DWORD "TimeEx" sent 04h DWORD "TimeEx" received 08h DWORD "ParamProb" sent 0Ch DWORD "ParamProb" received 10h DWORD redirects received 14h DWORD source quenches received 18h DWORD ??? 1Ch DWORD ??? 20h DWORD packets sent 24h DWORD packets received 28h DWORD bad packets received 2Ch DWORD "DestUn" received 30h DWORD packet send errors 34h DWORD "DestUn" sent 38h DWORD ??? 3Ch DWORD ??? ----------610D------------------------------- INT 61 U - PC/TCP kernel v2.05 - CHECK IF CONNECTION HANDLE??? VALID AH = 0Dh BX = connection handle??? Return: CF clear if valid CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------610E------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 0Eh BX = ??? DS:DX -> ??? ES:DI -> ??? Return: CF clear ??? Notes: the installation check consists of testing for the signature "TCPTSR" three bytes beyond the start of the interrupt handler INT 61 is the default; PC/TCP v2.05 may be configured to use any interrupt from 20h through E0h SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------610F------------------------------- INT 61 U - PC/TCP kernel v2.05 - GET VERSION AH = 0Fh Return: CF clear AX = version (AH = major, AL = minor) BX = patch level SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6110------------------------------- INT 61 U - PC/TCP kernel v2.05 - UNINSTALL AH = 10h Return: CF clear if successful CF set on error??? SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6111------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 11h Return: CF clear AX = ??? Note: clears location whose value is returned in AX and decrements another if it is not already zero SeeAlso: INT 61"PC/TCP",INT 61/AH=12h ----------6112------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 12h Return: CF clear AX = ??? Note: sets location whose value is returned in AX to 0001h and performs other actions if another location is nonzero; these two locations are the same ones used by AH=11h SeeAlso: INT 61"PC/TCP",INT 61/AH=11h ----------6113------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 13h BX = connection handle??? or FFFFh DX = subfunction 0000h ??? (returns error 0016h) 0001h ??? 0002h ??? 0003h ??? 0004h ??? 0005h ??? DS:SI -> result buffer??? Return: CF clear if successful AX = connection handle??? CF set on error AX = error code (see INT 61"PC/TCP") Note: invokes AH=22h if BX=FFFFh on entry; also invokes AH=19h in various cases SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=23h ----------6114------------------------------- INT 61 U - PC/TCP kernel v2.05 - NO LONGER SUPPORTED AH = 14h BX = connection handle??? Return: CF set AX = 0018h (see INT 61"PC/TCP") Note: displays error message "Illegal system call! Please upgrade your PCserver software" to standard output SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6116------------------------------- INT 61 U - PC/TCP kernel v2.05 - GET ??? AH = 16h BX = connection handle??? DS:DX -> 9-byte buffer for ??? Return: CF clear if successful ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6117------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 17h Return: CF clear if successful CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6118------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 18h BX = connection handle??? Return: CF clear if successful CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6119------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 19h BX = connection handle??? Return: CF clear if successful CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------611A------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 1Ah BX = connection handle??? CX = ??? DX = ??? DS:SI -> ??? Return: CF clear if successful AX = ??? DX = ??? CF set on error AX = error code (see INT 61"PC/TCP") Notes: the installation check consists of testing for the signature "TCPTSR" three bytes beyond the start of the interrupt handler INT 61 is the default; PC/TCP v2.05 may be configured to use any interrupt from 20h through E0h SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------611B------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 1Bh BX = connection handle??? CX = ??? DX = ??? DS:SI -> ??? ES:DI -> ??? Return: CF clear if successful CX = ??? DX = ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------611C------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 1Ch BX = connection handle??? CX = ??? DX = ??? DS:SI -> ??? ES:DI -> ??? Return: CF clear if successful AX = ??? DX = ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------611D------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 1Dh BX = connection handle??? CX = ??? DX = ??? DS:SI -> ??? ES:DI -> 9-byte buffer containing ??? Return: CF clear if successful CX = ??? DX = ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------611E------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 1Eh BX = connection handle??? Return: CF clear if successful CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------611F------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 1Fh BX = connection handle??? CX = ??? DS:SI -> ??? ES:DI -> ??? Return: CF clear if successful DS:DX -> ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6120------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 20h BX = connection handle??? CX = ??? DS:DX -> ??? SI = ??? DI = ??? Return: CF clear if successful CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6121------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 21h BX = connection handle??? CX = ??? DS:DX -> ??? SI = ??? DI = ??? Return: CF clear if successful DS:DX -> ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6122------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 22h BX = connection handle??? Return: CF clear if successful AX = ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6123------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 23h BX = connection handle??? or FFFFh DX = subfunction??? DS:SI -> ??? Return: CF clear if successful AX = ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP",INT 61/AH=13h ----------6124------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 24h ??? Return: ??? SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6125------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 25h BX = ??? CX = ??? DX = ??? DS:SI -> ??? Return: CF clear if successful CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6126------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 26h BX = ??? CX = ??? DX = ??? DS:SI -> ??? Return: CF clear if successful CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6127------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 27h BX = ??? CX = ??? DX = ??? DS:SI -> ??? Return: CF clear if successful CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6128------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 28h BX = connection handle??? CX = ??? Return: CF clear if successful ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6129------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 29h Return: CF clear if successful AX = ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------612A------------------------------- INT 61 U - PC/TCP kernel v2.05 - GET CONFIGURATION INFORMATION AH = 2Ah DS:SI -> 26-byte buffer for configuration information (see below) Return: CF clear AX = 0000h buffer filled SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" Format of configuration information: Offset Size Description 00h BYTE maximum TCP connections available 01h BYTE maximum UDP connections available 02h BYTE maximum IP connections available 03h BYTE ??? 04h BYTE number of TCP connections currently in use 05h BYTE number of UDP connections currently in use 06h BYTE number of IP connections currently in use 07h BYTE ??? 08h WORD number of local network descriptors active 0Ah WORD number of global network descriptors active 0Ch BYTE ??? 0Dh BYTE ??? 0Eh WORD ??? 10h WORD ??? 12h DWORD ??? 16h DWORD IP broadcast address ----------612B------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 2Bh BX = connection handle??? CX = ??? DX = ??? DS:SI -> ??? ES:DI -> ??? Return: CF clear if successful CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6130------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 30h BX = ??? CX = ??? DX = ??? Return: CF clear if successful CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------61--------------------------------- INT 61 U - PC/TCP kernel v2.05 - NOP for SLIP kernel AH = function (31h-33h) ----------6150------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 50h DS:DX -> 127-byte buffer containing ??? Return: CF clear if successful DX:AX -> ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6151------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 51h CX = size of destination buffer DS:DX -> 127-byte buffer containing ??? ES:DI -> destination buffer or 0000h:0000h Return: CF clear if successful DX:AX -> ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6152------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 52h CX = size of destination buffer DS:DX -> 127-byte buffer containing ??? ES:DI -> destination buffer or 0000h:0000h Return: CF clear if successful DX:AX -> ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6153------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 53h DS:DX -> 127-byte buffer containing ??? Return: CF clear if successful DX:AX -> ??? CF set on error AX = error code (see INT 61"PC/TCP") SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------6154------------------------------- INT 61 U - PC/TCP kernel v2.05 - ??? AH = 54h CX = size of destination buffer DS:DX -> 127-byte buffer containing ??? ES:DI -> destination buffer or 0000h:0000h Return: CF clear if successful DX:AX -> ??? CF set on error AX = error code (see INT 61"PC/TCP") BUG: the SLIP kernel for v2.05 bounds-checks the wrong register, so values greater than 54h in AH may crash the system. Other kernels may have this bug as well. SeeAlso: INT 61"PC/TCP",INT 61/AH=00h"PC/TCP" ----------62--------------------------------- INT 62 - reserved for user interrupt ----------62--------------------------------- INT 62 - Adaptec and OMTI controllers - DRIVE 0 DATA Notes: this vector stores the third four bytes of the parameter table for hard disk 0 SeeAlso: INT 60"Adaptec",INT 61"Adaptec",INT 63"Adaptec" ----------62--------------------------------- INT 62 - HP 95LX - USED BY CALCULATOR SeeAlso: INT 60"HP 95LX" ----------62--------------------------------- INT 62 - MS SQL Server/Sybase DBLIBRARY interface - ??? AH = function (00h to 07h) CX = FFFEh DX = FFFFh ??? Return: ??? Note: the installation check consists of testing for the string "DBLIBRARY" 2 bytes past the interrupt handler SeeAlso: AH=08h"SQL" ----------620000----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETMODE" - GET CURRENT VIDEO MODE NUMBER AX = 0000h ES:BX -> ??? Return: AX = current video mode number Notes: FGDRIVER is the external video driver for the shareware Fastgraph/Light by Ted Gruber Software the installation check consists of testing for the signature "FG" ten bytes beyond the start of the interrupt handler SeeAlso: AX=0001h,AX=0006h ----------620001----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETMODE" - SELECT VIDEO MODE AND INITIALIZE AX = 0001h BX = new video mode or FFFFh for current mode ES:DX -> ??? Notes: video modes are the same as the BIOS video modes except for 0Bh Hercules graphics 720x348 0Ch Hercules graphics 320x200 15h VGA graphics 320x400x256 16h VGA graphics 320x240x256 17h VGA graphics 320x480x256 this call resets the active video page to page 0000h, the clipping region to the entire screen, text rows to 25, etc. SeeAlso: AX=0000h,AX=0002h,INT 10/AH=00h ----------620002----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_TESTMODE" - CHECK IF VIDEO MODE AVAILABLE AX = 0002h BX = desired video mode (00h-17h) CX = required number of video pages (ignore memory size if <= 0) Return: AX = status 0000h mode not available with requested number of pages 0001h mode is available SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0005h ----------620003----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_BESTMODE" - GET BEST VIDEO MODE GIVEN RESOLUTN AX = 0003h BX = horizontal resolution CX = vertical resolution DX = number of video pages required (both physical and virtual) Return: AX = proposed video mode number or FFFFh if no matching video mode SeeAlso: AX=0002h,AX=0004h ----------620004----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_AUTOMODE" - GET VIDEO MODE WITH MOST FEATURES AX = 0004h Return: AX = proposed video mode number Note: FGDRIVER is the external video driver for the shareware Fastgraph/Light by Ted Gruber Software SeeAlso: AX=0002h,AX=0003h,AX=0005h ----------620005----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_EGACHECK" - GET INFO ABOUT ACTIVE EGA DISPLAY AX = 0005h Return: AX = number of 64K banks of video memory, or 0000h if no EGA or EGA without an Enhanced Color Display SeeAlso: AX=0002h,AX=0003h ----------620006----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_RESET" - ERASE SCREEN AND RESTORE SCREEN ATTR AX = 0006h Notes: this call is ignored in graphics modes the screen attributes are only restored if ANSI.SYS is loaded SeeAlso: AX=0000h ----------620007----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_CURSOR" - SPECIFY WHETHER TEXT CURSR IS VISIBLE AX = 0007h BX = new state (0000h invisible, 0001h visible) Note: this call is ignored in text modes ----------620008----------------------------- INT 62 - FGDRIVER v1.10 - UNUSED AX = 0008h to 0009h Return: AX = 0000h ----------62000A----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETMAXX" - GET MAXIMUM COLUMN IN SCREEN SPACE AX = 000Ah Return: AX = maximum X coordinate in screen space (or character space if in text mode) SeeAlso: AX=000Bh,AX=0045h ----------62000B----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETMAXY" - GET MAXIMUM ROW IN SCREEN SPACE AX = 000Bh Return: AX = maximum Y coordinate in screen space (or character space if in text mode) SeeAlso: AX=000Ah,AX=0045h ----------62000C----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_XALPHA" - CONVERT SCREEN COLUMN TO CHAR COLUMN AX = 000Ch BX = screen space column Return: AX = character space column containing specified coordinate SeeAlso: AX=000Dh,AX=000Eh ----------62000D----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_YALPHA" - CONVERT SCREEN ROW TO CHARACTER ROW AX = 000Dh BX = screen space row Return: AX = character space row containing specified coordinate SeeAlso: AX=000Ch,AX=000Fh ----------62000E----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_XCONVERT" - CONVERT CHAR COLUMN TO SCREEN COL AX = 000Eh BX = character space column Return: AX = screen space column of leftmost pixel in specified character col SeeAlso: AX=000Ch,AX=000Fh ----------62000F----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_YCONVERT" - CONVERT CHARACTER ROW TO SCREEN ROW AX = 000Fh BX = character space row Return: AX = screen space row of topmost pixel in specified character row SeeAlso: AX=000Dh,AX=000Eh ----------620010----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETLINES" - GET TEXT ROWS FOR CURR VIDEO MODE AX = 0010h Return: AX = number of text rows on screen in current video mode SeeAlso: AX=0011h ----------620011----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETLINES" - SET TEXT ROWS ON SCREEN AX = 0011h BX = new screen size (25, 43, 50) SeeAlso: AX=0010h ----------620012----------------------------- INT 62 - FGDRIVER v1.10 - UNUSED AX = 0012h to 0013h Return: AX = 0000h ----------620014----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DEFCOLOR" - ASSIGN COLOR VALUE TO COLOR INDEX AX = 0014h BX = color index (0000h-00FFh) CX = new color value (0 to maximum color value for current video mode) Note: this call is ignored in text modes and 256-color graphics modes SeeAlso: AX=0015h,AX=0016h,AX=001Dh ----------620015----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETCOLOR" - GET CURRENT TEXT ATTRIBUTE AX = 0015h Return: AX = current text attribute or color index (graphics modes) Note: FGDRIVER is the external video driver for the shareware Fastgraph/Light by Ted Gruber Software SeeAlso: AX=0019h,AX=001Ah ----------620016----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETINDEX" - GET COLOR VALUE FOR COLOR INDEX AX = 0016h BX = color index (0000h to 00FFh) Return: AX = color value for specified color index Note: this call returns the value passed to it in text and 256-color graphics modes SeeAlso: AX=0014h,AX=001Ch ----------620017----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_PALETTE" - SET PALETTE / SET VIDEO DAC REGISTER AX = 0017h ---CGA 4-color graphics--- BX = CGA paletee number CX = background color ---CGA 2-color graphics--- BX ignored CX = foreground color ---16-color graphics--- BX = palette register number CX = palette value ---256-color graphics--- BX = DAC register number CX = DAC value Notes: ignored in text modes and Hercules graphics modes few EGA/VGA adapters correctly set the foreground color in CGA mode 6 SeeAlso: AX=0018h,AX=001Dh ----------620018----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_PALETTES" - SET ALL PALETTE REGISTERS AX = 0018h ES:BX -> array of 16 WORDs containing values for palette registers (or first 16 DAC registers in 256-color modes) Note: ignored in text modes, CGA and Hercules graphics modes SeeAlso: AX=0017h ----------620019----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETATTR" - SET TEXT-MODE CHARACTER ATTRIBUTE AX = 0019h BX = foreground CX = background DX = blink (0000h nonblinking, 0001h blink) Note: this call is ignored in graphics modes SeeAlso: AX=0015h,AX=001Ah,AX=0037h ----------62001A----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETCOLOR" - SET CURRENT COLOR AX = 001Ah BX = new color index (or text attribute in text modes) SeeAlso: AX=0015h,AX=0019h ----------62001B----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETRGB" - SET VIDEO DAC REGISTER CONTENTS AX = 001Bh BX = palette or DAC register number CX = red color component DX = green component SI = blue component Notes: the register number may be negative for Tandy, PCjr, and 200-line EGA graphics modes to specify an intense color this call has no effect in text, CGA graphics, and Hercules graphics modes SeeAlso: AX=001Ch,AX=00A5h ----------62001C----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETRGB" - GET VIDEO DAC REGISTER CONTENTS AX = 001Ch ES:BX -> variable pointer record (see below) CX = DAC register number Return: variables updated Note: this call is ignored in text modes and CGA/EGA video modes (since they do not use DAC registers) SeeAlso: AX=001Bh,AX=001Dh,AX=00A4h Format of variable pointer record: Offset Size Description 00h WORD segment of WORD buffer for red component of DAC register 02h WORD offset of WORD buffer for red component 04h WORD segment of WORD buffer for green component of DAC register 06h WORD offset of WORD buffer for green component 08h WORD segment of WORD buffer for blue component of DAC register 0Ah WORD offset of WORD buffer for blue component ----------62001D----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MAPRGB" - MAP COLOR COMPONENTS INTO PALETTE VAL AX = 001Dh BX = red component CX = green component DX = blue component Return: AX = mode-specific palette value corresponding to specified components Note: only meaningful in 16-color graphics modes SeeAlso: AX=0015h,AX=0017h ----------62001E----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_ERASE" - CLEAR THE ACTIVE VIDEO PAGE AX = 001Eh Note: sets each pixel to 0 in graphics modes, each character cell to a blank with a gray foreground attribute in text modes ----------62001F----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_POINT" - DISPLAY A PIXEL AX = 001Fh BX = column CX = row Note: this call is ignored in text modes SeeAlso: AX=0020h ----------620020----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETPIXEL" - GET COLOR OF SPECIFIED PIXEL AX = 0020h BX = column in screen space CX = row in screen space Return: AX = color value of pixel (0 to num_colors-1) 0000h in text modes SeeAlso: AX=001Fh ----------620021----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETXPOS" - GET GRAPHICS CURSOR COLUMN AX = 0021h Return: AX = screen space X coordinate of graphics cursor position SeeAlso: AX=0022h,AX=0023h,AX=0024h ----------620022----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETXPOS" - GET GRAPHICS CURSOR ROW AX = 0022h Return: AX = screen space Y coordinate of graphics cursor position SeeAlso: AX=0021h,AX=0023h,AX=0024h ----------620023----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MOVE" - SET GRAPHICS CURSOR POSITION AX = 0023h BX = new column CX = new row Note: this call is ignored in text modes SeeAlso: AX=0021h,AX=0022h,AX=0024h ----------620024----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MOVEREL" - ADJUST GRAPHICS CURSOR POSITION AX = 0024h BX = column offset CX = row offset Note: this call is ignored in text modes SeeAlso: AX=0021h,AX=0022h,AX=0023h ----------620025----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DRAW" - DRAW SOLID LINE TO ABSOLUTE POSITION AX = 0025h BX = endpoint column CX = endpoint row Notes: this call is ignored in text modes the starting point is the current graphics cursor position; the cursor position is updated SeeAlso: AX=0026h,AX=0027h ----------620026----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DRAWREL" - DRAW SOLID LINE TO RELATIVE POSITION AX = 0026h BX = endpoint column offset CX = endpoint row offset Notes: this call is ignored in text modes the starting point is the current graphics cursor position; the cursor position is updated SeeAlso: AX=0025h,AX=0028h ----------620027----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DASH" - DRAW DASHED LINE TO ABSOLUTE POSITION AX = 0027h BX = endpoint column CX = endpoint row DX = dash pattern (set bits cause drawn pixels) Notes: this call is ignored in text modes the starting point is the current graphics cursor position; the cursor position is updated SeeAlso: AX=0025h,AX=0028h ----------620028----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DASHREL" - DRAW DASHED LINE TO RELATVE POSITION AX = 0028h BX = endpoint column offset CX = endpoint row offset DX = dash pattern (set bits cause drawn pixels) Notes: this call is ignored in text modes the starting point is the current graphics cursor position; the cursor position is updated SeeAlso: AX=0026h,AX=0027h ----------620029----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETCLIP" - SET CLIPPING REGION AX = 0029h BX = left edge of clipping region CX = right edge of clipping region DX = top edge of clipping region SI = bottom edge of clipping region SeeAlso: AX=004Ah,AX=004Ch,AX=0052h,AX=0054h ----------62002A----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_RECT" - DRAW UNFILLED RECTANGLE IN SCREEN SPACE AX = 002Ah BX = left edge column CX = right edge column DX = top edge row SI = bottom edge row SeeAlso: AX=002Bh,AX=002Ch,AX=002Eh,AX=00A2h ----------62002B----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_CLPRECT" - DRAW FILLED RECTANGLE IN SCREEN SPCE AX = 002Bh BX = screen space column of left edge CX = screen space column of right edge DX = screen space row of top edge SI = screen space row of bottom edge Note: this call is ignored in text modes SeeAlso: AX=002Ah,AX=002Ch,AX=00A2h ----------62002C----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DRECT" - DRAW DITHERED RECTANGLE IN SCRN SPACE AX = 002Ch BX = screen space column of left edge CX = screen space column of right edge DX = screen space row of top edge SI = screen space row of bottom edge ES:DI -> dithering matrix (video-mode dependent) Note: this call is ignored in text modes SeeAlso: AX=002Bh,AX=00A2h ----------62002D----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_ELLIPSE" - DRAW UNFILLED ELLIPSE IN SCRN SPACE AX = 002Dh BX = horizontal semi-axis length in screen space units CX = vertical semi-axis length in screen space units Notes: this call is ignored in text modes the ellipse is centered at the current graphics cursor position SeeAlso: AX=002Ah,AX=002Eh,AX=00A2h ----------62002E----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_POLYGON" - DRAW AN UNFILLED POLYGON AX = 002Eh CX = number of vertices in polygon ES:BX -> variable pointer record (see below) SeeAlso: AX=002Dh,AX=0030h,AX=00A2h Format of variable pointer record: Offset Size Description 00h WORD segment of WORD array containing vertex columns 02h WORD offset of WORD array containing vertex columns 04h WORD segment of WORD array containing vertex rows 06h WORD offset of WORD array containing vertex rows ----------62002F----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_PAINT" - FLOOD CLOSED REGION WITH COLOR AX = 002Fh BX = column CX = row Notes: fills an arbitrary closed region around the specified point with the current color; the screen edges are not considered region boundaries ignored in text modes ----------620030----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_CIRCLE" - DRAW UNFILLED CIRCLE AX = 0030h BX = radius in horizontal screen space units (> 0) Notes: the circle is drawn in screen space, centered at the current graphics cursor position this call is ignored in text modes SeeAlso: AX=00A2h ----------620031----------------------------- INT 62 - FGDRIVER v1.10 - UNUSED AX = 0031h Return: AX = 0000h ----------620032----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_TEXT" - DISPLAY STRING OF CHARACTERS AX = 0032h CX = length of string ES:BX -> string Notes: the string is displayed staring at the text cursor position using the current text attribute (text modes) or color index (graphics modes) the text cursor position is updated after this call SeeAlso: AX=001Ah,AX=0033h,AX=0035h,AX=0036h ----------620033----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_LOCATE" - SET TEXT-MODE CURSOR POSITION AX = 0033h BX = row CX = column Note: there are only eight text cursors shared by successive groups of eight video pages (pages 0, 8, 16, ... share one cursor, 1, 9, ... share the second, etc) SeeAlso: AX=0034h ----------620034----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_WHERE" - GET CURRENT CURSOR POSITION AX = 0034h ES:BX -> variable pointers (see below) Return: indicated variables filled with cursor row and column for active display Note: FGDRIVER is the external video driver for the shareware Fastgraph/Light by Ted Gruber Software SeeAlso: AX=0033h Format of variable pointers: Offset Size Description 00h WORD segment of WORD buffer for cursor row 02h WORD offset of WORD buffer for cursor row 04h WORD segment WORD buffer for cursor column 06h WORD offset WORD buffer for cursor column ----------620035----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_CHGATTR" - APPLY CURRENT TEXT ATTRIB TO CHARS AX = 0035h BX = number of characters to recolor Notes: this call is ignored in graphics modes starting at the current text cursor position, the specified number of characters have their attributes to the current text attribute SeeAlso: AX=0036h ----------620036----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_CHGTEXT" - DISPLAY STRING AT CURSOR POSITION AX = 0036h CX = length of string ES:BX -> string to be displayed Return: text cursor updated Note: this call is ignored in graphics modes SeeAlso: AX=0032h,AX=0035h ----------620037----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETATTR" - GET CHARACTER ATTRIB FOR POSITION AX = 0037h BX = row CX = column Return: AX = character attribute at specified location on active video page Note: this call is ignored in graphics modes SeeAlso: AX=0019h,AX=0038h ----------620038----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETCHAR" - GET CHARACTER FOR SCREEN POSITION AX = 0038h BX = row CX = column Return: AX = character at specified location on active video page Note: this call is ignored in graphics modes SeeAlso: AX=0037h ----------620039----------------------------- INT 62 - FGDRIVER v1.10 - UNUSED AX = 0039h to 003Bh Return: AX = 0000h ----------62003C----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETPAGE" - GET ACTIVE VIDEO PAGE NUMBER AX = 003Ch Return: AX = active video page (0000h-003Fh) SeeAlso: AX=003Dh,AX=003Eh,AX=0040h ----------62003D----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETPAGE" - SET ACTIVE VIDEO PAGE AX = 003Dh BX = new video page (0000h to 003Fh) Note: the specified page must be a physical or virtual page SeeAlso: AX=0001h,AX=003Ch,AX=003Fh,AX=0041h ----------62003E----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETVPAGE" - GET VISIBLE VIDEO PAGE NUMBER AX = 003Eh Return: AX = visible video page (0000h-003Fh) SeeAlso: AX=003Ch,AX=003Fh,AX=0040h ----------62003F----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETVPAGE" - SET VISIBLE VIDEO PAGE AX = 003Fh BX = new video page (0000h to 003Fh) Note: the specified page must be a physical or virtual page SeeAlso: AX=0001h,AX=003Dh,AX=003Eh,AX=0041h ----------620040----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETHPAGE" - GET CURRENT HIDDEN VIDEO PAGE NUM AX = 0040h Return: AX = current hidden video page number (0000h-003Fh) SeeAlso: AX=003Ch,AX=003Eh,AX=0041h ----------620041----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETHPAGE" - SET HIDDEN VIDEO PAGE AX = 0041h BX = new hidden page (0000h to 003Fh) Note: specified page must be a physical page or a virtual page SeeAlso: AX=003Dh,AX=003Fh,AX=0040h ----------620042----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_ALLOCATE" - CREATE VIRTUAL VIDEO PAGE AX = 0042h BX = page number (0000h-003Fh) Return: AX = status 0000h successful 0001h specified page is a physical or logical page 0007h virtual page created, but memory control blocks corrupted 0008h not enough memory Notes: FGDRIVER is the external video driver for the shareware Fastgraph/Light by Ted Gruber Software the amount of memory required by the virtual video page depends on the current video mode SeeAlso: AX=0043h,AX=009Dh,AX=009Fh ----------620043----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_FREEPAGE" - FREE VIRTUAL OR LOGICAL VIDEO PAGE AX = 0043h BX = page number (0000h-003Fh) Return: AX = status 0000h successful 0001h specified page is a physical page 0007h virtual page released, but memory control blocks corrupted 0009h attempt to free a page which was never created SeeAlso: AX=0042h,AX=009Dh,AX=009Eh,AX=009Fh ----------620044----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETADDR" - GET SEGMENT OF ACTIVE VIDEO PAGE AX = 0044h Return: AX = segment of active video page ----------620045----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_RESIZE" - SET GRAPHICS MODE VIDEO PAGE SIZE AX = 0045h BX = new page width in pixels CX = new page height in pixels Notes: the visible page must be set to 0000h before making this call mouse, joysticks, expanded memory, and extended memory must be reinitialized after this call SeeAlso: AX=000Ah,AX=000Bh,AX=0075h,AX=007Ah,AX=00A0h,AX=00A1h ----------620046----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETMAP" - STORE IMAGE AS MODE-INDEPENDNT BITMAP AX = 0046h ES:BX -> buffer for video mode-independent bitmap CX = width of bitmap in bytes DX = height of bitmap in pixel rows Return: each bit in bitmap is set if corresponding pixel is of the current color, cleared otherwise Note: this call is ignored in text modes SeeAlso: AX=0047h,AX=0048h ----------620047----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DRAWMAP" - DISPLAY MODE-INDEPENDENT BIT MAP AX = 0047h ES:BX -> bitmap (each set bit is pixel drawn in current color) CX = width of bitmap in bytes DX = height of bitmap in pixel rows SeeAlso: AX=0046h,AX=004Ah,AX=004Dh,AX=0052h ----------620048----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETIMAGE" - STORE IMAGE AS BITMAP AX = 0048h ES:BX -> buffer for video mode-specific bitmap CX = width of bitmap in bytes DX = height of bitmap in pixel rows SeeAlso: AX=0046h,AX=0049h,AX=0062h ----------620049----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DRWIMAGE" - DISPLAY BITMAPPED IMAGE AX = 0049h ES:BX -> video mode-specific bitmap CX = width of bitmap in bytes DX = height of bitmap in pixel rows Note: the image will be drawn with its lower left corner at the current cursor position (either text or graphics) SeeAlso: AX=0048h,AX=004Ah,AX=0062h ----------62004A----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_CLPIMAGE" - DISPLAY CLIPPED IMAGE (BITMAP) AX = 004Ah ES:BX -> mode-specific bitmap CX = width of bit map in bytes DX = height of bit map in pixel rows Notes: this call is ignored in text modes the image is drawn with its lower left corner at the current graphics cursor position the current clipping region is used, extended to a byte boundary SeeAlso: AX=0029h,AX=0047h,AX=0049h,AX=004Ch,AX=0052h ----------62004B----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_REVIMAGE" - DISPLAY REVERSED IMAGE (BITMAP) AX = 004Bh ES:BX -> mode-specific bitmap CX = width of bitmap in bytes DX = height of bitmap in pixel rows Notes: this call is ignored in text modes the image is drawn with its lower left corner at the current graphics cursor position SeeAlso: AX=004Ah,AX=004Ch ----------62004C----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_FLPIMAGE" - DISPLAY INV CLIPPED IMAGE (BITMAP) AX = 004Ch ES:BX -> mode-specific bitmap CX = width of bit map in bytes DX = height of bit map in pixel rows Notes: this call is ignored in text modes the image is drawn with its lower left corner at the current graphics cursor position the current clipping region is used, extended to a byte boundary SeeAlso: AX=0029h,AX=004Ah ----------62004D----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DISPLAY" - DISPLAY IMAGE (STD PIXEL RUN FORMAT) AX = 004Dh ES:BX -> pixel run map (pairs of bytes: color index, count) CX = number of pixel runs to display DX = width of image in pixels (> 0) Notes: this call is ignored in text modes the image is displayed with its lower left corner at the current graphics cursor position SeeAlso: AX=0047h,AX=004Eh,AX=004Fh,AX=0050h,AX=0060h ----------62004E----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DISPLAY" - DISPLAY IMAGE (PACKED PIXEL RUN FMT) AX = 004Eh ES:BX -> pixel run map (trios of bytes: colors, count1, count2; colors contains the color for the first run in its high nybble and the color for the second run in its low nybble) CX = number of pixel runs to display DX = width of image in pixels (> 0) Notes: this call is ignored in text modes the image is displayed with its lower left corner at the current graphics cursor position SeeAlso: AX=004Dh,AX=004Fh,AX=0050h,AX=0060h ----------62004F----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DISPFILE" - DISPLAY STORED IMAGE AX = 004Fh ES:BX -> ASCIZ filename CX = image width in pixels (> 0) DX = image format 0000h Fastgraph standard pixel run format 0001h packed pixel run format Notes: this call is ignored in text modes the image is displayed with its lower left corner at the current graphics cursor position SeeAlso: AX=004Dh,AX=004Eh,AX=0050h,AX=0060h ----------620050----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_PATTERN" - SPECIFY DISPLAY PATTERN FOR COLOR AX = 0050h BX = index of pattern to define CX = number of predefined display pattern Notes: when displaying a pixel run map, Fastgraph uses the pattern associated with each color index rather than displaying the actual color this call has no effect in text and 256-color graphics modes SeeAlso: AX=004Dh,AX=004Eh,AX=004Fh ----------620051----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DRAWMASK" - DISPLAY IMAGE (MASKING MAP) AX = 0051h ES:BX -> array containing image stores as a masking map (see below) CX = number of pixel runs in masking map DX = width of masking map in pixels Notes: this call is ignored in text modes and in native EGA and VGA graphics modes the image is drawn with its lower left corner at the current graphics cursor position SeeAlso: AX=0052h Format of masking map: Offset Size Description 00h BYTE length of first "protect" run (pixels remain unchanged) 01h BYTE length of first "zero" run (pixels set to background color) 02h BYTE length of second "protect" run 03h BYTE length of second "zero" run ... ----------620052----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_CLIPMASK" - DISPLAY CLIPPED IMAGE (MASKING MAP) AX = 0052h ES:BX -> array containing image stored as a masking map (see AX=0051h) CX = number of pixel runs in masking map DX = width of masking map in pixels Notes: this call is ignored in text modes and in native EGA and VGA graphics modes the image is drawn with its lower left corner at the current graphics cursor position SeeAlso: AX=0029h,AX=004Ah,AX=0051h,AX=0053h,AX=0054h ----------620053----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_REVMASK" - DISPLAY REVERSED IMAGE (MASKING MAP) AX = 0053h ES:BX -> array containing image stored as a masking map (see AX=0051h) CX = number of pixel runs in masking map DX = width of masking map in pixels Notes: this call is ignored in text modes and in native EGA and VGA graphics modes the image is drawn with its lower left corner at the current graphics cursor position SeeAlso: AX=0052h,AX=0054h ----------620054----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_FLIPMASK" - DISPLAY INV CLIPPED IMAGE (MASKMAP) AX = 0054h ES:BX -> array containing image stored as a masking map (see AX=0051h) CX = number of pixel runs in masking map DX = width of masking map in pixels Notes: this call is ignored in text modes and in native EGA and VGA graphics modes the image is drawn with its lower left corner at the current graphics cursor position SeeAlso: AX=0029h,AX=0052h,AX=0053h ----------620055----------------------------- INT 62 - FGDRIVER v1.10 - UNUSED AX = 0055h to 0059h Return: AX = 0000h ----------62005A----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SAVE" - COPY REGION FROM VISIBLE TO HIDDEN PAGE AX = 005Ah BX = left edge column CX = right edge column DX = top edge row SI = bottom edge row Note: left and right edges are adjusted to byte boundaries if necessary SeeAlso: AX=005Bh ----------62005B----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_RESTORE" - COPY REGION FROM HIDDEN TO VIS PAGE AX = 005Bh BX = left edge column CX = right edge column DX = top edge row SI = bottom edge row Note: left and right edges are adjusted to byte boundaries if necessary SeeAlso: AX=005Ah,AX=0064h ----------62005C----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_TRANSFER" - COPY REGION AX = 005Ch CX = source video page DX = destination video page ES:BX -> copy record (see below) Note: source and destination regions must not overlap if on the same page SeeAlso: AX=005Dh,AX=005Fh Format of copy record: Offset Size Description 00h WORD left edge column of source region 02h WORD right edge column of source region 04h WORD top edge row of source region 06h WORD bottom edge row of source region 08h WORD left edge of destination 0Ah WORD bottom edge of destination ----------62005D----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_TCXFER" - COPY REGION EXCLUDING TRANSPARENT AX = 005Dh CX = source video page DX = destination video page ES:BX -> copy record (see AX=005Ch) Notes: pixels which are in any of the colors defined as transparent with AX=005Eh are left unchanged in the destination region source and destination regions must not overlap if on the same page this call is ignored in text modes SeeAlso: AX=005Ch,AX=005Eh ----------62005E----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_TCMASK" - SET TRANSPARENT COLORS AX = 005Eh BX = colors to consider transparent (bit 0 = color 0, etc) Notes: this call is ignored in text modes the specified colors are considered transparent by AX=005Dh SeeAlso: AX=005Dh ----------62005F----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_COPYPAGE" - TRANSFER VIDEO PAGE CONTENTS AX = 005Fh BX = source page number (0000h-003Fh) CX = destination page number (0000h-003Fh) Note: if both source and destination pages are logical pages, they must both be located in the same type (conventional, EMS, XMS) of memory SeeAlso: AX=005Ch,AX=009Dh,AX=009Eh,AX=009Fh ----------620060----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_DISPPCX" - DISPLAY PCX FILE AX = 0060h ES:BX -> ASCIZ filename CX = flags bit 0: use current palette rather than PCX file's palette bits 1-15: reserved (0) Return: AX = status 0000h success 0001h file not found 0002h file is not a valid PCX file Notes: this call is ignored in text modes and Hercules low-resolution graphics the image is displayed with its upper left corner at the current graphics cursor position SeeAlso: AX=004Dh,AX=004Eh,AX=004Fh,AX=0061h ----------620061----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MAKEPCX" - CREATE PCX FILE FROM SCREEN WINDOW AX = 0061h BX = left edge in screen space units CX = right edge in screen space units DX = top edge in screen space units SI = bottom edge in screen space units ES:DI -> ASCIZ filename of PCX file to create Return: AX = status 0000h successful 0001h file not created Notes: the PCX file is created from the specified region of the active video page; the left and right edges are adjusted to a byte boundary if necessary if the specified file already exists, it is overwritten this call is ignored in text and Hercules low-resolution graphics modes SeeAlso: AX=0060h ----------620062----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_IMAGESIZ" - DETERMINE IMAGE STORAGE REQUIREMENT AX = 0062h BX = image width in pixels CX = image height in pixels Return: DX:AX = size in bytes of mode-specific bitmap for current video mode SeeAlso: AX=0048h ----------620063----------------------------- INT 62 - FGDRIVER v1.10 - UNUSED AX = 0063h Return: AX = 0000h ----------620064----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_FADEIN" - FADE IN HIDDEN PAGE AX = 0064h BX = delay (0000h = fastest possible fade-in) Notes: the current hidden page is copied to the current visible page in small random sections to produce a fade-in effect this call is ignored in text modes SeeAlso: AX=005Bh,AX=0065h ----------620065----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_FADEOUT" - FADE OUT TO CURRENT COLOR AX = 0065h BX = delay (0000h = fastest possible fade-out) Notes: this call is ignored in text modes the current visible page is filled with pixels of the current color in small random sections to give a fade-out effect SeeAlso: AX=0064h ----------620066----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_PAN" - SET SCREEN ORIGIN AX = 0066h BX = new column for screen origin CX = new row for screen origin SeeAlso: AX=0067h ----------620067----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SCROLL" - VERTICALLY SCROLL SCREEN REGION AX = 0067h BX = left edge column CX = right edge column DX = top edge row SI = bottom edge row DI = number of pixels by which to scroll (positive scrolls up, negative scrolls down) ES = type of scroll 0000h circular (rows scrolled off are copied to vacated rows) else vacated rows are filled with the current color Notes: in graphics modes, the left and right edges are adjusted to byte boundaries if necessary circular scrolling uses part of the hidden page as a workspace SeeAlso: AX=0066h ----------620068----------------------------- INT 62 - FGDRIVER v1.10 - UNUSED AX = 0068h to 006Ch Return: AX = 0000h ----------62006D----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_WAITKEY" - FLUSH KEYBOARD BUFFER AND AWAIT KEY AX = 006Dh Return: after next key pressed SeeAlso: AX=006Eh,AX=006Fh,AX=0096h ----------62006E----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETKEY" - GET NEXT KEYSTROKE AX = 006Eh ES:BX -> variable pointer record (see below) Return: (after next keystroke if no typeahead) variables updated SeeAlso: AX=006Dh,AX=006Fh,AX=0070h Format of variable pointer record: Offset Size Description 00h WORD segment of BYTE buffer for ASCII keycode 02h WORD offset of BYTE buffer for ASCII keycode 04h WORD segment of BYTE buffer for extended keycode 06h WORD offset of BYTE buffer for extended keycode ----------62006F----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_INTKEY" - GET KEYSTROKE, NO WAIT AX = 006Fh ES:BX -> variable pointer record (see below) Return: variables updated Note: if the keyboard buffer is empty, both the ASCII and extended keycodes are set to 00h SeeAlso: AX=006Dh,AX=006Eh,AX=0070h,AX=0079h Format of variable pointer record: Offset Size Description 00h WORD segment of BYTE buffer for ASCII keycode 02h WORD offset of BYTE buffer for ASCII keycode 04h WORD segment of BYTE buffer for extended keycode 06h WORD offset of BYTE buffer for extended keycode ----------620070----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_CAPSLOCK" - GET STATE OF CAPSLOCK KEY AX = 0070h Return: AX = CapsLock state (0000h off, 0001h on) SeeAlso: AX=006Eh,AX=006Fh,AX=0071h,AX=0072h,AX=0074h ----------620071----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETCAPS" - SET STATE OF CAPSLOCK KEY AX = 0071h BX = new state (0000h off, 0001h on) SeeAlso: AX=0070h,AX=0073h ----------620072----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_NUMLOCK" - GET STATE OF NUMLOCK KEY AX = 0072h Return: AX = NumLock state (0000h off, 0001h on) SeeAlso: AX=0070h,AX=0074h ----------620073----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETNUM" - SET STATE OF NUMLOCK KEY AX = 0073h BX = new state (0000h off, 0001h on) SeeAlso: AX=0071h,AX=0072h ----------620074----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SCRLOCK" - GET STATE OF SCROLL LOCK KEY AX = 0074h Return: AX = ScrollLock state (0000h off, 0001h on) SeeAlso: AX=0070h,AX=0072h ----------620075----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_INITJOY" - INITIALIZE JOYSTICK USE AX = 0075h BX = joystick number (0001h or 0002h) Return: AX = status 0000h successful FFFFh joystick not connected or no game port Note: Fastgraph assumes that the requested joystick is centered at the time this function is called SeeAlso: AX=0076h,AX=0077h,AX=0078h,AX=0079h ----------620076----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETXJOY" - GET HORIZONTAL POSITION OF JOYSTICK AX = 0076h BX = joystick number (0001h or 0002h) Return: AX = horizontal position of joystick FFFFh if joystick uninitialized or not present Notes: the actual coordinates are processor- and joystick-dependent you must call AX=0075h before this function SeeAlso: AX=0075h,AX=0077h,AX=0078h ----------620077----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETYJOY" - GET VERTICAL POSITION OF JOYSTICK AX = 0077h BX = joystick number (0001h or 0002h) Return: AX = vertical position of joystick FFFFh if joystick uninitialized or not present Notes: the actual coordinates are processor- and joystick-dependent you must call AX=0075h before this function SeeAlso: AX=0075h,AX=0076h,AX=0078h ----------620078----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_BUTTON" - GET JOYSTICK BUTTON STATE AX = 0078h BX = joystick number (0001h or 0002h) Return: AX = button states bit 0: top button pressed bit 1: bottom button pressed SeeAlso: AX=0075h,AX=0076h,AX=0077h,AX=0079h ----------620079----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_INTJOY" - GET KEYCODES CORRESP TO JOYSTICK POS AX = 0079h CX = joystick number (0001h or 0002h) ES:BX -> variable pointer record (see below) Notes: if the indicated joystick has not been initialized with AX=0075h, both the button code and joystick position will be set to 00h if either button is pressed, a button code of 0Dh is returned; otherwise, a button code of 00h is returned SeeAlso: AX=006Fh,AX=0075h,AX=0078h Format of variable pointer record: Offset Size Description 00h WORD segment of BYTE buffer for button code 02h WORD offset of BYTE buffer for button code 04h WORD segment of BYTE buffer for joystick position 06h WORD offset of BYTE buffer for joystick position ----------62007A----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MOUSEINI" - INITIALIZE MOUSE SUPPORT AX = 007Ah Return: AX = status 0002h two-button mouse 0003h three-button mouse FFFFh initialization failed Note: after this call, the mouse cursor is invisible SeeAlso: AX=007Bh,AX=007Ch,AX=007Eh,AX=0080h,INT 33/AX=0000h ----------62007B----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MOUSEVIS" - SET MOUSE CURSOR VISIBILITY AX = 007Bh BX = new state (0000h invisible, 0001h visible) SeeAlso: AX=007Ah,AX=007Eh,INT 33/AX=0001h,INT 33/AX=0002h ----------62007C----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MOUSEBUT" - GET MOUSE BUTTON PRESS/RELEASE CNTS AX = 007Ch CX = mouse button (1 = left press, 2 = right press, 3 = middle press, -1=left release, -2=right release, -3=middle release) ES:BX -> variable pointer record (see below) Return: variables updated Note: returns the count of presses or releases since the last call to this function; if the count is zero, row and col will also be zero SeeAlso: AX=007Ah,INT 33/AX=0005h,INT 33/AX=0006h Format of variable pointer record: Offset Size Description 00h WORD segment of WORD buffer for press/release count 02h WORD offset of WORD buffer for press/release count 04h WORD segment of WORD buffer for screen space col of last press/rls 06h WORD offset of WORD buffer for screen space col of last press/rels 08h WORD segment of WORD buffer for screen space row of last press/rls 0Ah WORD offset of WORD buffer for screen space row of last press/rls ----------62007D----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MOUSEPOS" - GET CURRENT MOUSE POSITION AX = 007Dh ES:BX -> variable pointer record (see below) SeeAlso: AX=007Ah,AX=0081h Format of variable pointer record: Offset Size Description 00h WORD segment of WORD buffer for mouse column 02h WORD offset of WORD buffer for mouse column 04h WORD segment of WORD buffer for mouse row 06h WORD offset of WORD buffer for mouse row 08h WORD segment of WORD buffer for button status 0Ah WORD offset of WORD buffer for button status Note: button status: bit 0 = left button, bit 1 = right, bit 2 = middle ----------62007E----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MOUSECUR" - SPECIFY TEXT-MODE MOUSE CURSOR AX = 007Eh BX = screen mask CX = cursor mask Note: this call is ignored in graphics modes SeeAlso: AX=007Ah,AX=007Fh,INT 33/AX=000Ah ----------62007F----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MOUSEPTR" - SPECIFY GRAPH-MODE MOUSE CURSOR AX = 007Fh ES:BX -> masks (16-byte screen mask followed by 16-byte cursor mask) CX = X offset of hot spot from upper left corner DX = Y offset of hot spot from upper left corner Note: this call is ignored in text modes SeeAlso: AX=007Ah,AX=007Eh,INT 33/AX=0009h ----------620080----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MOUSELIM" - SPECIFY MOUSE CURSOR LIMITS AX = 0080h BX = left-most position allowed for mouse cursor CX = right-most position allowed DX = top-most position allowed SI = bottom-most position allowed SeeAlso: AX=007Ah,AX=0081h,INT 33/AX=0007h,INT 33/AX=0008h ----------620081----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MOUSEMOV" - SET MOUSE CURSOR POSITION AX = 0081h BX = new column CX = new row Note: will not move the mouse cursor outside the bounding box specified with AX=0080h SeeAlso: AX=007Ah,AX=007Dh,AX=0080h,INT 33/AX=0004h ----------620082----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MOUSESPD" - SET MOUSE CURSOR SPEED AX = 0082h BX = horizontal mickeys per eight pixels of movement (default 16) CX = vertical mickeys per eight pixels of movement (default 16) SeeAlso: INT 33/AX=000Fh,INT 33/AX=001Ah ----------620083----------------------------- INT 62 - FGDRIVER v1.10 - UNUSED AX = 0083h to 0087h Return: AX = 0000h ----------620088----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SOUND" - MAKE SOUND FOR SPECIFIED DURATION AX = 0088h BX = frequency in Hertz (18-32767) CX = duration in clock ticks (0000h or negative for continuous sound) Note: ignored if asynchronous sound (AX=0089h,AX=008Bh,AX=008Dh) is in progress SeeAlso: AX=0089h,AX=008Ah,AX=008Eh,AX=0090h ----------620089----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SOUNDS" - PLAY SOUNDS IN BACKGROUND AX = 0089h CX = number of times to cycle through sound list ES:BX -> sounds array (see below) Note: ignored if asynchronous sound (AX=0089h,AX=008Bh,AX=008Dh) is in progress SeeAlso: AX=0088h,AX=008Eh,AX=008Fh Format of sounds array element: Offset Size Description 00h WORD frequency of sound in Hertz (0000h ends array) 02h WORD duration of sound in clock ticks ----------62008A----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_VOICE" - START SOUND AX = 008Ah BX = channel on TI sound chip 1-3 = channels 1-3, 4 = channel 4 with periodic noise, 5 = channel 4 with white noise CX = frequency in Hz (18-32767 for channels 1-3; 0=512 Hz, 1=1024 Hz, 2=2048 Hz for channels 4 and 5) DX = volume SI = duration in clock ticks (continuous if <= 0) Notes: FGDRIVER is the external video driver for the shareware Fastgraph/Light by Ted Gruber Software only available on PCjr and Tandy 1000 SeeAlso: AX=0088h,AX=008Bh,AX=008Ch ----------62008B----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_VOICES" - PLAY SOUNDS IN BACKGROUND AX = 008Bh ES:BX -> tone array (see below) CX = number of times to repeat tone array Notes: FGDRIVER is the external video driver for the shareware Fastgraph/Light by Ted Gruber Software only available on PCjr and Tandy 1000 SeeAlso: AX=008Ah,AX=008Dh,AX=008Eh,AX=008Fh,AX=0091h Format of tone array element: Offset Size Description 00h WORD channel number (0000h terminates array) 02h WORD frequency 04h WORD volume 06h WORD duration in 1/72.8 seconds ----------62008C----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MUSIC" - PLAY SERIES OF NOTES AX = 008Ch ES:BX -> '$'-terminated music string in BASIC PLAY format Return: after music completed Note: ignored if asynchronous sound (AX=0089h,AX=008Bh,AX=008Dh) is in progress SeeAlso: AX=008Ah,AX=008Dh ----------62008D----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MUSICB" - PLAY SERIES OF NOTES IN BACKGROUND AX = 008Dh CX = number of repetitions (negative = continuous play) ES:BX -> '$'-terminated music string in BASIC PLAY format Note: ignored if asynchronous sound (AX=0089h,AX=008Bh,AX=008Dh) is in progress SeeAlso: AX=008Bh,AX=008Ch,AX=008Eh,AX=008Fh,AX=0091h ----------62008E----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_HUSH" - STOP ASYNCHRONOUS SOUND IMMEDIATELY AX = 008Eh Note: immediately stops any sounds started with "FG_MUSICB", "FG_SOUNDS", or AX=008Bh; ignored if no asynchronous sound is playing SeeAlso: AX=0088h,AX=008Bh,AX=008Fh,AX=0090h,AX=0091h ----------62008F----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_HUSHNEXT" - STOP ASYNCHRONOUS SOUND AX = 008Fh Note: stops any sounds started with "FG_MUSICB", "FG_SOUNDS", or AX=008Bh after the current repetition completes; ignored unless asynchronous sound is continuous SeeAlso: AX=008Bh,AX=008Eh,AX=0090h ----------620090----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_QUIET" - STOP CONTINUOUS SYNCHRONOUS SOUND AX = 0090h Note: this call has no effect if there is no continuous sound playing SeeAlso: AX=008Eh,AX=008Fh,AX=0091h ----------620091----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_PLAYING" - DETERMINE WHETHER ASYNC SOUND ACTIVE AX = 0091h Return: AX = sound state (0 = no asynchronous sound, 1 = async sound playing) SeeAlso: AX=008Bh,AX=008Dh,AX=0090h ----------620092----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_RESUME" - RESTART ASYNCHRONOUS SOUND AX = 0092h SeeAlso: AX=008Eh,AX=008Fh,AX=0090h ----------620093----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SUSPEND" - TEMPORARILY STOP ASYNCHRONOUS SOUND AX = 0093h Notes: this call has no effect if there is no asynchronous sound in progress the program must not exit while sound is suspended SeeAlso: AX=0092h ----------620094----------------------------- INT 62 - FGDRIVER v1.10 - UNUSED AX = 0094h to 0095h Return: AX = 0000h ----------620096----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_WAITFOR" - DELAY FOR SPECIFIED DURATION AX = 0096h BX = duration in clock ticks Return: after delay elapses SeeAlso: AX=006Dh,AX=0097h ----------620097----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_STALL" - PAUSE FOR SPECIFIED DURATION AX = 0097h BX = duration in processor-dependent delay units (see AX=0098h) Return: after delay elapses SeeAlso: AX=0096h,AX=0098h ----------620098----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MEASURE" - GET DELAY UNITS PER CLOCK TICK AX = 0098h Return: AX = delay units per clock tick (processor-dependent) Note: delay units are used by "FG_STALL" (AX=0097h) SeeAlso: AX=0097h ----------620099----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETCLOCK" - GET CLOCK TICKS SINCE MIDNIGHT AX = 0099h Return: DX:AX = number of clock ticks since midnight Note: FGDRIVER is the external video driver for the shareware Fastgraph/Light by Ted Gruber Software ----------62009A----------------------------- INT 62 - FGDRIVER v1.10 - UNUSED AX = 009Ah Return: AX = 0000h ----------62009B----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_MEMAVAIL" - QUERY AMOUNT OF FREE MEMORY AX = 009Bh Return: DX:AX = number of bytes of conventional memory available SeeAlso: AX=009Dh ----------62009C----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETFUNC" - SET LOGICAL OPERATION FOR VIDEO OPS AX = 009Ch BX = operation 0000h replacement 0001h AND 0002h OR 0003h XOR Note: only available in native EGA/VGA graphics mode (0Dh to 12h) ----------62009D----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_ALLOCCMS" - CREATE LOGICAL VIDEO PAGE (CONVMEM) AX = 009Dh BX = page number (0001h-003Fh) Return: AX = status 0000h successful FFFCh insufficient memory FFFDh page already created, or exists as physical or virtual page FFFEh invalid page number Note: the only operation which is allowed on logical pages is AX=005Fh SeeAlso: AX=0043h,AX=005Fh,AX=009Bh,AX=009Eh,AX=009Fh ----------62009E----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_ALLOCEMS" - CREATE LOGICAL VIDEO PAGE (EMS) AX = 009Eh BX = page number (0001h-003Fh) Return: AX = status 0000h successful FFFCh insufficient memory FFFDh page already created, or exists as physical or virtual page FFFEh invalid page number FFFFh memory manager not initialized Notes: must first call AX=00A0h the only operation which is allowed on logical pages is AX=005Fh SeeAlso: AX=0043h,AX=005Fh,AX=009Dh,AX=009Fh,AX=00A0h ----------62009F----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_ALLOCXMS" - CREATE LOGICAL VIDEO PAGE (XMS) AX = 009Fh BX = page number (0001h-003Fh) Return: AX = status (see AX=009Eh) Notes: must first call AX=00A1h the only operation which is allowed on logical pages is AX=005Fh SeeAlso: AX=0043h,AX=005Fh,AX=009Dh,AX=009Eh,AX=00A1h ----------6200A0----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_INITEMS" - INITIALIZE EXPANDED MEMORY USE AX = 00A0h Return: AX = status 0000h successful FFFFh expanded memory manager inaccessible or not installed SeeAlso: AX=009Eh,AX=00A1h ----------6200A1----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_INITXMS" - INITIALIZE EXTENDED MEMORY USE AX = 00A1h Return: AX = status 0000h successful FFFFh extended memory manager inaccessible or not installed SeeAlso: AX=009Fh,AX=00A0h ----------6200A2----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_BOX" - DRAW UNFILLED RECTANGLE AX = 00A2h BX = left column CX = right column DX = top row SI = bottom row Notes: FGDRIVER is the external video driver for the shareware Fastgraph/Light by Ted Gruber Software the rectangle is drawn in screen space, respecting the clipping region, width edges of the width specified with AX=00A3h (default = 1 is set by "FG_SETMODE") this function has no effect in text modes SeeAlso: AX=002Bh,AX=002Ch,AX=002Eh,AX=0030h,AX=00A3h ----------6200A3----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_BOXDEPTH" - SET RECTANGLE BORDER WIDTH AX = 00A3h BX = width of left and right edges in pixels (> 0) CX = width of top and bottom edges in pixels (> 0) SeeAlso: AX=00A2h ----------6200A4----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_GETDACS" - GET VIDEO DAC CONTENTS AX = 00A4h CX = number of DAC registers to return (0001h to 0100h) DX = starting DAC register number (0000h to 00FFh) ES:BX -> buffer for DAC red/green/blue triples Note: the register number wraps back to zero after FFh SeeAlso: AX=001Ch,AX=00A5h ----------6200A5----------------------------- INT 62 u - FGDRIVER v1.10 - "FG_SETDACS" - SET VIDEO DAC CONTENTS AX = 00A5h CX = number of DAC registers to set (0001h to 0100h) DX = starting DAC register number (0000h to 00FFh) ES:BX -> buffer containing DAC red/green/blue triples Notes: the register number wraps back to zero after FFh this call has no effect in text modes or graphics modes below 11h SeeAlso: AX=001Bh,AX=00A4h ----------6201------------------------------- INT 62 - Cswitch - GIVE UP REST OF TIME-SLICE AH = 01h Note: Cswitch is a set of multitasking functions by Herb Rose SeeAlso: AH=05h,AH=06h,INT 15/AX=1000h ----------6202------------------------------- INT 62 - Cswitch - WAIT FOR SEMAPHORE AH = 02h DX = semaphore number (0-63) Return: AX = FFFFh bad semaphore number else success SeeAlso: AH=03h,AH=04h ----------6203------------------------------- INT 62 - Cswitch - CHECK SEMAPHORE AH = 03h DX = semaphore number (0-63) Return: AX = FFFFh not owned else owned SeeAlso: AH=02h,AH=04h ----------6204------------------------------- INT 62 - Cswitch - TRIGGER SEMAPHORE AH = 04h DX = semaphore number (0-63) Return: AX = FFFFh bad semaphore number else success SeeAlso: AH=02h,AH=03h ----------6205------------------------------- INT 62 - Cswitch - SLEEP AH = 05h BX = seconds to sleep SeeAlso: AH=01h,AH=06h,AH=08h"Cswitch" ----------6206------------------------------- INT 62 - Cswitch - SUSPEND AH = 06h SeeAlso: AH=05h,AH=08h"Cswitch" ----------6207------------------------------- INT 62 - Cswitch - SPAWN AH = 07h ES:BX -> function address to start executing at CX = priority (1-10) Return: AX = FFFDh no free memory control blocks = FFFEh no free task control blocks = FFFFh not enough memory to create new task stack = >0 the tcb number of the new task, indicating no error SeeAlso: AH=0Fh,AH=10h ----------6208------------------------------- INT 62 - Cswitch - WAKE UP TASK AH = 08h BX = tcb identifier SeeAlso: AH=05h,AH=06h ----------6208--CXFFFE----------------------- INT 62 - MS SQL Server/Sybase DBLIBRARY interface - UNINSTALL/GET PSP ADDR AH = 08h CX = FFFEh DX = FFFFh Return: AX = PSP address of resident DBLIBRARY Note: this call does not free the memory allocated to the TSR; the calling code must do the deallocation. SeeAlso: INT 62"DBLIBRARY" ----------6209------------------------------- INT 62 - Cswitch - SET PRIORITY AH = 09h BX = new base priority (1-10) Note: the lower the priority is numerically, the more often the task will run ----------620A------------------------------- INT 62 - Cswitch - TEST MESSAGE QUEUE AH = 0Ah DX = queue number (0-63) Return: AX = FFFFh bad queue number = 0000h nothing on queue else number of bytes in first message in queue SeeAlso: AH=0Bh,AH=0Ch ----------620B------------------------------- INT 62 - Cswitch - SEND MESSAGE AH = 0Bh CX = number of bytes to write DS:SI -> buffer DX = queue number (0-63) Return: AX = FFFEh triggered by something arriving, redo the call = FFFFh bad queue number = 0000h no message was on queue else number of bytes in message SeeAlso: AH=0Ah,AH=0Ch ----------620C------------------------------- INT 62 - Cswitch - READ MESSAGE AH = 0Ch CX = number of bytes to read DS:SI -> buffer DX = queue number (0-63) Return: AX = FFFFh bad queue number else number of bytes transferred SeeAlso: AH=0Ah,AH=0Bh ----------620D------------------------------- INT 62 - Cswitch - DON'T ALLOW TASK TO BE SWAPPED OUT AH = 0Dh SeeAlso: AH=0Eh ----------620E------------------------------- INT 62 - Cswitch - ALLOW TASK TO BE SWAPPED OUT AH = 0Eh SeeAlso: AH=0Dh ----------620F------------------------------- INT 62 - Cswitch - LOAD AND RUN PROGRAM FROM DISK AH = 0Fh ES:BX -> command line CX = priority (1-10) DX = background flag = != 0000h allows loading to EMS Return: AX = 0000h task loader queue is full = 0001h no error SeeAlso: AH=07h,AH=10h,AH=13h ----------6210------------------------------- INT 62 - Cswitch - TERMINATE SPAWNED PROGRAM AH = 10h SeeAlso: AH=07h,AH=0Fh ----------6211------------------------------- INT 62 - Cswitch - GET TCB INFORMATION AH = 11h ES:BX -> a pointer which will be set to the tcb address Return: AX = tcb indentifier SeeAlso: AH=12h ----------6212------------------------------- INT 62 - Cswitch - GET TCB ADDRESS AH = 12h ES:BX -> a pointer which will be set to the tcb table address Return: AX = tcb indentifier SeeAlso: AH=11h ----------6213------------------------------- INT 62 - Cswitch - CHECK STATUS OF PREVIOUS LOAD_TASK AH = 13h Return: AX = FFFCh no Memory Control Blocks available = FFFDh no TCBs available = FFFEh insufficient memory = FFFFh cannot open file = 0000h load in progress (not done yet) else tcb indentifier SeeAlso: AH=0Fh ----------6247------------------------------- INT 62 - PC Tools 7 COMMUTE - ??? AH = 47h AL = subfunction (00h-31h) ??? CF set Return: ??? ----------6248------------------------------- INT 62 - PC Tools 7 COMMUTE - ??? AH = 48h AL = ??? ??? CF set Return: ??? ----------6249------------------------------- INT 62 - PC Tools 7 COMMUTE - ??? AH = 49h ??? CF set Return: ??? Note: may be the same as AH=4Ch ----------624A------------------------------- INT 62 - PC Tools 7 COMMUTE - ??? AH = 4Ah AL = subfunction (00h-46h) ??? CF set Return: ??? ----------624B--BX1234----------------------- INT 62 - PC Tools 7 COMMUTE - ??? AH = 4Bh BX = 1234h CX = 1234h ES = ??? CF set Return: ??? ----------624C------------------------------- INT 62 - PC Tools 7 COMMUTE - ??? AH = 4Ch BL = subfunction 00h ??? 02h ??? Return: CF clear if successful CF set on error ----------626262----------------------------- INT 62 - PC Tools 7 COMMUTE - INSTALLATION CHECK AX = 6262h CF set Return: AX = 0000h BX = segment of resident code's PSP ----------63--------------------------------- INT 63 - reserved for user interrupt ----------63--------------------------------- INT 63 - Adaptec and OMTI controllers - DRIVE 0 DATA Notes: this vector stores the last four bytes of the parameter table for hard disk 0 SeeAlso: INT 60"Adaptec",INT 61"Adaptec",INT 62"Adaptec",INT 64"Adaptec" ----------63--------------------------------- INT 63 - Oracle SQL Protected Mode Executive - ??? ----------63--------------------------------- INT 63 - 4+Power FLOPPY CONTROLLER - ORIGINAL INT 13/40 the "4+Power" quad floppy controller BIOS hooks INT 13 (or INT 40 if INT 13 has been moved there) and places the old value here ----------63--------------------------------- INT 63 - Kofax KF9X00 image manipulation card interface ----------63--------------------------------- INT 63 - DESQview/X - ??? Notes: parameters are passed by patching!! data field immediately following the entry point, as detailed below the installation check consists of testing for the string "dvxunix" (yes, lowercase) at offset 9 from the interrupt handler start SeeAlso: INT BE"DESQview" Format of interrupt handler entry: Offset Size Description 00h 3 BYTEs near jump or short jump + NOP to actual interrupt handler 03h WORD offset from following pointer for initial top of local stack 05h DWORD pointer to argument/stack block (see below) 09h 7 BYTEs signature "dvxunix" Format of argument/stack block: Offset Size Description 00h WORD signature F0ADh 02h WORD function number (0000h-002Ah or FFFFh) 04h 4 BYTEs ??? 08h WORD PSP segment to use or 0000h for current PSP 0Ah WORD scratch space (JFT size) 0Ch DWORD scratch space (JFT address) 10h ??? ----------64--------------------------------- INT 64 - reserved for user interrupt ----------64--------------------------------- INT 64 - Adaptec controllers - DRIVE 1 DATA Notes: this vector stores the first four bytes of the parameter table for hard disk 1 these vectors are used by the following Adaptec controllers: ACB 2370 A/B/C, ACB 2372 A/B/C, ACB 2333 A/B, 2322B-8, 2322B-16 these vectors are NOT used by the following Adaptec controllers: ACB 2310, ACB 2312, ACB 2320D, ACB 2322D SeeAlso: INT 60"Adaptec",INT 65"Adaptec",INT 66"Adaptec",INT 67"Adaptec" ----------64--------------------------------- INT 64 - Oracle SQL Protected Mode Executive - ??? ----------64--------------------------------- INT 64 - Novell NetWare to v2.0a - LOW-LEVEL API Note: equivalent to INT 7A for NetWare versions through 2.0a only; later versions do not use this interrupt for IPX/SPX access, instead getting an entry point from INT 2F/AX=7A00h SeeAlso: INT 2F/AX=7A00h,INT 7A"Novell" ----------64--------------------------------- INT 64 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE SeeAlso: INT 65"DG10",INT 66"DG10" ----------64--------------------------------- INT 64 - Extended Batch Language v3.14+ AH = function 00h to 5Fh chained to previous handler 60h to 6Ch reserved, return immediately 80h to FFh chained to previous handler 6Dh (v4.01+) insert tone in queue AL = ??? CX = frequency in Hertz DL = duration in clock ticks Return: AL = 00h if note stored = 01h if no room to store 6Eh clear ??? counter/flag 6Fh return counter/flag that AH=6Eh clears 70h ??? AL = ??? 71h ??? AL = ??? 72h ??? 73h insert byte at end of keyboard buffer AL = byte to insert Return: AL = 00h if byte inserted = 01h if no room to store 74h insert byte at front of keyboard buffer AL = byte to insert Return: AL = 00h if byte inserted = 01h if no room to store 75h ??? 76h get keyboard "stack" status AL = 'K' if kbd read will read physical keyboard 'S' if it will read EBL internal keyboard buffer AH = ??? 77h clear internal keyboard buffer 78h ??? AL = ??? 79h ??? 7Ah ??? AL = ??? 7Bh ??? AL = ??? 7Ch ??? AL = ??? 7Dh ??? AL = ??? 7Eh clear buffer for ??? 7Fh installation check Return: CX = version in BCD DI = segment of ??? BX = segment of next program's PSP??? Notes: Extended Batch Language is a batch-file enhancer by Seaware the chaining does not check whether the interrupt had been hooked before, so if you try to chain when the previous vector was 0000h:0000h, you'll be in trouble functions 72h and 7Ah-7Dh appear to be interfaces to the optional floating-point and extended function packages ----------64--------------------------------- INT 64 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information Note: This vector is overwritten by Pdisk to install custom harddrive types. It can either destroy 4 vectors and take no memory or TSR and take up some memory. SeeAlso: INT 65"Pdisk" ----------65--------------------------------- INT 65 - reserved for user interrupt ----------65--------------------------------- INT 65 - Adaptec controllers - DRIVE 1 DATA Note: this vector stores the second four bytes of the parameter table for hard disk 1 SeeAlso: INT 64"Adaptec",INT 66"Adaptec",INT 67"Adaptec" ----------65--------------------------------- INT 65 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE SeeAlso: INT 64"DG10",INT 66"DG10" ----------65--------------------------------- INT 65 - FTP Software NDIS-Packet Driver adapter - POST PROCESSING INTERRUPT ----------65--------------------------------- INT 65 - SD.COM v6.2 The unregistered version of SD62.COM uses the low byte of this vector to count the number of invocations, displaying a registration reminder each time after the 20th use. ----------65--------------------------------- INT 65 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information SeeAlso: INT 64"Pdisk",INT 66"Pdisk" ----------65--------------------------------- INT 65 - Ad Lib SOUND.COM - INTERFACE SI = function number (see separate entries for details on several) = 0000h Init = 0002h RelTimeStart = 0003h SetState = 0004h GetState = 0005h Flush = 0006h SetMode = 0007h GetMode = 0008h SetRelVolume = 0009h SetTempo = 000Ah SetTranspose = 000Bh GetTranspose = 000Ch SetActVoice = 000Dh GetActVoice = 000Eh PlayNoteDel = 000Fh PlayNote = 0010h SetTimbre = 0011h SetPitch = 0012h SetTickBeat = 0013h NoteOn = 0014h NoteOff = 0015h Timbre = 0016h SetPitchBend = 0017h WaveForm ES:BX -> arguments Note: the installation check consists of checking for the signature block immediately preceding the interrupt handler (see below) Format of signature block: Offset Size Description 00h WORD version number 02h 19 BYTEs "SOUND-DRIVER-AD-LIB" 15h BYTE 01h 16h BYTE 01h 17h BYTE 00h ----------65----SI0000----------------------- INT 65 - Ad Lib SOUND.COM - INITIALIZE (RESET) SI = 0000h ----------65----SI0003----------------------- INT 65 - Ad Lib SOUND.COM - SET STATE SI = 0003h ES:BX -> WORD state = 0000h disabled = 0001h enabled SeeAlso: SI=0004h ----------65----SI0004----------------------- INT 65 - Ad Lib SOUND.COM - GET STATE SI = 0004h Return: AX = 0000h all done playing sounds = else still playing sounds SeeAlso: SI=0003h ----------65----SI0006----------------------- INT 65 - Ad Lib SOUND.COM - SET MODE SI = 0006h ES:BX -> WORD mode = 0000h melodic = 0001h percussive SeeAlso: SI=0007h ----------65----SI0007----------------------- INT 65 - Ad Lib SOUND.COM - GET MODE SI = 0007h Return: AX = 0000h melodic = 0001h percussive SeeAlso: SI=0006h ----------65----SI000C----------------------- INT 65 - Ad Lib SOUND.COM - SET ACTIVE VOICE SI = 000Ch ES:BX -> WORD voice = 0000h to 0008h SeeAlso: SI=000Dh ----------65----SI000D----------------------- INT 65 - Ad Lib SOUND.COM - GET ACTIVE VOICE SI = 000Dh Return: AX = voice (0000h to 0008h) SeeAlso: SI=000Ch ----------66--------------------------------- INT 66 - reserved for user interrupt ----------66--------------------------------- INT 66 - Adaptec controllers - DRIVE 1 DATA Note: this vector stores the third four bytes of the parameter table for hard disk 1 SeeAlso: INT 64"Adaptec",INT 65"Adaptec",INT 67"Adaptec" ----------66--------------------------------- INT 66 - Data General DG10 - MicroECLIPSE COPROCESSOR INTERFACE SeeAlso: INT 64"DG10" ----------66--------------------------------- INT 66 - Nanosoft, Inc. TurboNET - NETWORK PROCESSING ??? Notes: hooked but not used (IRET) by both redirector and server; called from server's INT 28 handler TurboNET is a NetBIOS-based file redirector and server SeeAlso: INT 2F/AX=8100h ----------66--------------------------------- INT 66 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information SeeAlso: INT 64"Pdisk",INT 67"Pdisk" ----------66--------------------------------- INT 66 - Microsoft Windows VITD.386 Virtual Interval Timer Note: This Windows 3.x Virtual Device Driver implements a virtual timer which will expire and call INT 66. This timer can be used to calculate elapsed execution time etc. ----------6601------------------------------- INT 66 - BitFax Scheduler - SET MODE??? AH = 01h SeeAlso: AH=02h ----------6602------------------------------- INT 66 - BitFax Scheduler - SET MODE??? AH = 02h SeeAlso: AH=01h ----------6603------------------------------- INT 66 - BitFax Scheduler - SCHEDULE FAX TRANSMISSIONS AH = 03h ??? Return: ??? SeeAlso: AH=05h ----------6604------------------------------- INT 66 - BitFax Scheduler - GET STATUS??? AH = 04h Return: AX = ??? (0000h or 0001h) DX = BitSched version??? (for versions >= 3.00) 9796h (ver. 3.00) 97E6h (ver. 3.02) 92D0h (ver. 3.04.06) 9510h (ver. 3.06.02) SeeAlso: AH=06h,AX=3345h,INT 2F/AX=8000h"FaxBIOS" ----------6605------------------------------- INT 66 - BitFax Scheduler - CONVERT FILE AND SEND FAX AH = 05h BX:CX -> command block (see below) ??? Return: ??? SeeAlso: AH=03h Format of command block: Offset Size Description 00h 18 BYTEs configuration bytes??? 12h BYTEs ASCIZ temporary file name to place converted fax 52h BYTEs ASCIZ directory containing BitFax executables 92h BYTEs ASCIZ telephone number C2h BYTE 00h don't send cover page 01h send cover page C3h 15 BYTEs configuration bytes??? E2h BYTEs ASCIZ path of BITFAX.TRA file (containing additional configuration information???) 122h BYTEs configuration bytes??? 12Ch BYTE 00h don't send cover page 01h send cover page 12Dh 7 BYTEs configuration bytes??? 134h BYTEs ASCIZ path of file to send 174h BYTEs more configuration bytes??? ??? ----------6606------------------------------- INT 66 - BitFax Scheduler - SET MODE??? AH = 06h Return: DX = BitSched version??? (same as AH=04h) SeeAlso: AH=04h ----------660688----------------------------- INT 66 - John W. Ratcliff (The IBM Digitized Sound Package) AX = 0688h ??? Return: ??? SeeAlso: AX=0689h ----------660689----------------------------- INT 66 - John W. Ratcliff (The IBM Digitized Sound Package) AX = 0689h ??? Return: ??? SeeAlso: AX=0688h ----------663345----------------------------- INT 66 - BitFax Scheduler - REMOVE TSR FROM MEMORY AX = 3345h Return: AX = FFFFh error removing TSR Note: the installation check consists of checking for the signature "BitFax Scheduler" beginning two bytes past the interrupt handler SeeAlso: AH=04h,INT 2F/AH=2Ah,INT 2F/AX=CB00h ----------66FFFBBXFFFB----------------------- INT 66 - MicroHelp Stay-Res Plus - ??? AX = FFFBh BX = FFFBh ??? Return: ??? SeeAlso: AX=FFFEh,INT 2D"AMIS" ----------66FFFEBXFFFE----------------------- INT 66 - MicroHelp Stay-Res/Stay-Res Plus - UNINSTALL AX = FFFEh BX = FFFEh Return: only if unsuccessful Notes: installation check is for the interrupt handler to begin with the bytes FBh 9Ch or 9Ch FAh, and the program name (not case-sensitive) to appear at offset 0005h (older versions) or the offset returned by AX=FFFFh/BX=FFF0h in the interrupt handler segment. Programs which use Stay-Res include ThesPlus (program name "THESPLUS") and Personal Calendar (program name "CAL") by Paul Mun~oz-Colman. SeeAlso: AX=FFFBh,AX=FFFFh,INT 2D"AMIS" ----------66FFFFBXFFF0----------------------- INT 66 - MicroHelp Stay-Res Plus - FIND PROGRAM NAME AX = FFFFh BX = FFF0h Return: DI = offset of program name in interrupt handler segment SeeAlso: AX=FFFBh,AX=FFFEh,INT 2D"AMIS" ----------67--------------------------------- INT 67 - Adaptec controllers - DRIVE 1 DATA Note: this vector stores the last four bytes of the parameter table for hard disk 1 SeeAlso: INT 64"Adaptec",INT 65"Adaptec",INT 66"Adaptec" ----------67--------------------------------- INT 67 - Pdisk by Scott Garfinkle - Overwritten for Hard Drive information SeeAlso: INT 64"Pdisk",INT 66"Pdisk" ----------67--------------------------------- INT 67 - Sangoma CCPOP 3270 resident module SeeAlso: INT 61"Sangoma",INT 68"Sangoma" ----------67--------------------------------- INT 67 - CUCKOO.COM - INSTALLATION CHECK Notes: this is not a vector; when loaded for the first time, CUCKOO.COM uses the last unused (0000h:0000h) vector in the range 60h-67h to store the signature value 434Ch:4F4Bh ('CLOK') CUCKOO is a resident on-screen clock with optional hourly chime or cuckoo by an unknown author with revisions by Thomas A. Lundin ----------6700------------------------------- INT 67 - PC-NET, Alloy NTNX - LOCK SEMAPHORE AND WAIT AH = 00h DS:DX -> ASCIZ semaphore name (max 64 bytes) Return: AL = status 00h successful 01h invalid function 02h semaphore already locked 03h unable to lock semaphore 04h semaphore space exhausted AH = semaphore owner if status=02h SeeAlso: AH=01h,AH=02h"PC-NET",INT 7F/AH=00h ----------6701------------------------------- INT 67 - PC-NET, Alloy NTNX - LOCK SEMAPHORE AH = 01h DS:DX -> ASCIZ semaphore name (max 64 bytes) Return: AL = status (see AH=00h) AH = semaphore owner if status=02h SeeAlso: AH=00h,AH=02h"PC-NET",INT 7F/AH=01h"Alloy" ----------6702------------------------------- INT 67 - PC-NET, Alloy NTNX - UNLOCK SEMAPHORE AH = 02h DS:DX -> ASCIZ semaphore name (max 64 bytes) Return: AL = status (see AH=00h) AH = semaphore owner if status=02h SeeAlso: AH=00h,AH=01h"PC-NET",INT 7F/AH=02h ----------673F--CX5145----------------------- INT 67 U - QEMM-386 v4.23+ - INSTALLATION CHECK AH = 3Fh CX = 5145h ("QE") DX = 4D4Dh ("MM") Return: AH = 00h if installed ES:DI -> QEMM API entry point Notes: if no other program has hooked INT 67, an alternate installation check is to test for the string "QUARTERDECK EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67 handler's segment; the word at offset 12h contains the offset in the handler's segment of the API entry point MICEMM (Micronics Expanded Memory Manager) versions 2.0C and 4D support the alternate QEMM installation check and entry point functions 00h, 02h, and 03h; version 4D only provides the signature string if the commandline argument "DV" is provided 386MAX v6.01 responds to this call, but DESQview 2.42 does not recognize the returned entry point as providing QEMM's capabilities because a) only functions 0Ch (different from QEMM 0Ch) and 1000h-1009h are supported, b) status is returned as for EMS functions, not QEMM funcs c) the protected-mode entry point returned by function 1000h only supports functions 0Ch, 1004h, 1005h, and 100Ah the string check mentioned above is not supported by 386MAX SeeAlso: AH=DDh,AX=5BF0h,AX=FFA5h,INT 15/AX=11DEh,INT 21/AX=4402h"QEMM" SeeAlso: INT 21/AX=4402h"386MAX",INT 2F/AX=D201h/BX=5145h Call QEMM entry point with: AH = 00h get QEMM state Return: CF clear AL = QEMM state bit 0 set if QEMM turned OFF bit 1 set if in "Auto" mode AH = 01h set QEMM state AL = new state bit 0 set: place QEMM in OFF state Return: CF clear if successful CF set on error AH = 02h get ??? Return: CF clear AX = segment of ??? data structure Data Structure Offset Size Description 00h BYTE ??? 01h WORD ??? ??? AH = 03h get QEMM version Return: CF clear AX = BX = version in BCD Notes: the official docs only state that the version is returned in BX MICEMM returns AX=0001h, BX unchanged AH = 04h allocate 4K page and set AUTO/ON mode Return: CF clear if successful DX = page number of a 4K page CF set if unable to allocate page Note: QEMM mode unchanged if not AUTO/OFF AH = 05h free 4K page and turn QEMM off DX = page number returned by function 04h Return: CF clear Note: QEMM mode unchanged if not AUTO/ON AH = 06h make new mapping context??? DX = page number of 4K page to hold page table Return: CF clear Note: copies page table into given page and then sets ??? page table entry to point at copy AH = 07h get mapping context??? Return: CF clear DX = page table number??? AH = 08h ??? DX = linear page number Return: CF clear AH = 09h get linear page number for page table entry CX = page table index Return: CF clear DX = linear page number AH = 0Ah set linear page number for page table entry CX = page table index DX = linear page number Return: CF clear AH = 0Bh map 4K pages??? BX = number of pages??? CX = first page number??? (must be 0100h to allocate HMA) DX = EMS handle??? Return: AH = 00h AH = 0Ch get available memory Return: CF clear BX = 0001h CX = total 4K pages??? DX = number of 4K pages free AH = 0Dh ??? (related to callbacks) AL = 00h/01h/02h ??? Return: CF clear AH = 0Eh set ??? callbacks DS:BX -> FAR routine for ??? ES:DX -> FAR routine for ??? Return: CF clear Note: DS:BX callback should return BX=???; ES:DX is called with BX=???, and should set the ??? from which the other handler read the value of BX. BH and BL appear to be separate values. AH = 0Fh unmap 4K pages??? CX = first page number DX = number of pages Return: CF clear AL = 00h/01h if ??? Note: if CX=0100h and DX=0010h, the HMA is remapped to simulate a disabled A20 AX = 1000h get protected-mode interface DS:SI -> 16-byte buffer for two GDT entries ES:DI -> buffer for 4K page table Return: CF clear EAX = offset of protected-mode API entry point DS:SI buffer filled with two GDT descriptors first is QEMM code segment, second is data??? ES:DI buffer filled with 4K page table DI points to first unused page table entry SeeAlso: INT 67/AX=DE01h AX = 1001h get CPU debug registers ES:DI -> buffer for debug registers (8 DWORDs) Return: CF clear BL = INT01 handling (see function 1002h) ES:DI buffer filled AX = 1002h set CPU debug registers BL = INT01 handling 00h reflect all debugging exceptions as V86-mode INT 01's else convert debugging exceptions other than single-step into V86-mode INT 03's, single-step to INT 01's ES:DI -> buffer containing debug registers (8 DWORDs) Return: CF clear Notes: identical to INT 67/AX=DE09h if BL=01h the INT01 handling flag is set to 01h by the general- protection violation handler for certain privileged instructions AX = 1003h get machine status word CR0 Return: CF clear EAX = contents of CR0 SeeAlso: INT 67/AX=DE07h AX = 1004h allocate a 4K page Return: CF clear if successful EDX = linear address of allocated page CF set on error SeeAlso: INT 67/AX=DE04h AX = 1005h free 4K page EDX = linear address of page to free Return: CF clear SeeAlso: INT 67/AX=DE05h AX = 1006h NOP Return: CF set AX = 1007h get maximum physical memory address Return: CF clear EDX = physical address of highest 4K memory page SeeAlso: INT 67/AX=DE02h AX = 1008h get physical address of page in first megabyte CX = page number (linear address shifted right 12 bits) Return: CF clear EDX = linear address of page SeeAlso: function 1F00h AX = 1009h switch to protected mode ESI = linear address in first megabyte of system reg values (see INT 67/AX=DE0Ch) interrupts disabled Return: interrupts disabled GDTR, IDTR, LDTR, TR loaded SS:ESP must have at least 16 bytes space, and the entry point is required to set up a new stack before enabling interrupts EAX, ESI, DS, ES, FS, GS destroyed AX = 100Ah switch back to virtual-86 mode DS = selector for data segment from function 1000h SS:ESP in first megabyte of linear memory interrupts disabled STACK: QWORD return address from FAR call to 32-bit segment DWORD EIP DWORD CS DWORD reserved for EFLAGS DWORD ESP DWORD SS DWORD ES DWORD DS DWORD FS DWORD GS will switch to virtual86 mode with interrupts disabled, all segment registers loaded, and EAX destroyed. AH = 11h get memory type map AL = zero/nonzero ??? (set by QEMM.COM but apparently ignored by QEMM 6.00) ES:DI -> 256-byte buffer for memory types Return: CF clear BL = ??? ES:DI buffer filled Note: each byte of the buffer corresponds to a 4K page, and contains the type of that page: 00h = mappable, 02h = mapped ROM, 03h = high RAM, 04h = excluded, 05h = video, 06h = ROM, 07h = adapter ROM, 08h = split ROM, 09h = page frame, 0Ah = RAMmable, 0Bh = conventional AH = 12h get HIRAM chain Return: CF clear BX = segment of first MCB in high memory 0000h if no high memory AX = 1300h VIDRAMEGA??? BL = 00h copy ??? nonzero copy ??? (reverse) Return: CF clear AL = 00h if all pages clean = 01h if any page dirty AX = 1301h check if ??? DX:DI = start address of range to check ??? CX = length of range Return: CF clear CX = ??? (0000h or 1000h) AX = 1302h ??? BL = ??? BH = ??? CX = ??? SI = offset of ??? DI = offset of ??? ??? Return: CF clear ??? Note: disables certain interrupts at the two 8259 PICs during execution; also modifies CRT controller during execution under certain circumstances AX = 1303h ??? EMS allocation BX = number of pages of EMS to allocate ??? Return: CF clear if successful CF set on error ??? AX = 1304h EMS deallocation DX = EMS handle Return: CF clear AX = 1305h ??? CX = ??? Return: CF clear Note: disables certain interrupts at the two 8259 PICs during execution (see AX=130Ch) AX = 1306h set DESQview critical section counter address ES:BX -> WORD DESQview critical section counter or 0000h:0000h Return: CF clear Note: also sets pointer in low-memory part of QEMM to current value of INT 15 if ES:BX not 0000h:0000h AX = 1307h ??? ??? Return: CF clear Note: disables certain interrupts at the two 8259 PICs during execution (see AX=130Ch) AX = 1308h ??? BL = ??? (zero/nonzero) Return: CF clear AX = 1309h Hercules mode-change support ES:BX -> new address for Hercules mode-change callback Return: CF clear Note: the callback function is called whenever the CRTC mode register is written, with AL set to the value written AX = 130Ah virtualize EGA/VGA I/O ports 03C8h/03C9h??? CX:DX -> buffer for storing CRTC register contents??? or 0000h:0000h to disable Return: CF clear AX = 130Bh ??? BL = ??? Return: CF clear ??? AX = 130Ch set interrupts to mask BX = interrupts to mask out during AX=1302h,AX=1307h,AX=1308h, AX=130Dh,AX=1310h (BL = master PIC, BH = slave PIC) Return: CF clear AX = 130Dh ??? ??? Return: CF clear Note: disables certain interrupts at the two 8259 PICs during execution (see AX=130Ch) AX = 130Eh ??? (modifies CRT controller setup) ??? Return: CF clear AX = 130Fh reset ??? Return: CF clear AX = 1310h ??? ??? Return: CF clear Note: disables certain interrupts at the two 8259 PICs during execution (see AX=130Ch) AX = 1311h set ??? BL = ??? Return: CF clear AX = 1312h (v6.02) NOP??? Note: called by DV 2.42, but appears to be a NOP in QEMM 6.02 AX = 1400h ??? ES:DI -> ??? data structure (at least 24 bytes) BL = ??? Return: AX = ??? Data structure Offset Size Description 00h WORD ??? 02h DWORD far pointer to ??? 06h DWORD far pointer to ??? pointer array (see below) 0Ah DWORD far pointer to ??? 0Eh DWORD ??? 12h WORD segment of ??? 14h DWORD far pointer to ??? Pointer array Offset Size Description 00h WORD number of pointers to follow 02h N DWORDs far pointers to ??? Note: QEMM converts the pointers into linear addresses in place AX = 1401h ??? Return: CF clear ??? AX = 1402h ??? BL = function 00h NOP 01h ??? 02h ??? other ??? ES:DI -> ??? Return: CF clear ??? Data structure Offset Size Description 00h WORD segment of ??? (X, word at X:0136h set to X) 02h WORD segment of ??? (word at X:0124h set to this) 04h WORD number of paragraphs of ??? 06h 3 WORDs ??? (copied to X:0000h) 0Ch WORD ??? AX = 1403h add ??? to list and ??? (execute func 1406h) ES:DI -> ??? structure added to end of ??? list (at least 31 bytes, DWORD at offset 06h used for storing pointer to next struc, WORD at offset 00h seems to be a key or index) Return: CF clear AX = 1404h NOP AX = 1405h remove ??? from ??? list BX = key??? Return: CF clear AX = 1406h ??? ??? Return: CF clear ??? AX = 1407h ??? ??? Return: CF clear ??? AX = 1408h ??? ??? Return: CF clear ??? AX = 1409h ??? ??? Return: CF clear ??? AX = 140Ah ??? BX = ??? Return: CF clear ??? AX = 140Bh ??? BX = ??? Return: CF clear SI = segment of 256-byte buffer??? AH = 15h ??? ES:BX -> ??? or 0000h:0000h Return: CF clear ---QEMM v5.00+ --- AX = 1600h get memory access status ES:DI -> 256-byte buffer Return: ES:DI buffer filled Note: each byte of the buffer indicates the status of a 4K page (bit 0 set if read, bit 1 set if written) AX = 1601h set memory access status ES:DI -> 256-byte buffer containing access statuses (see above) AH = 17h get memory usage statistics ES:DI -> 81-byte buffer for memory statistics (see below) Return: CF clear ---QEMM v5.11+ --- AH = 18h check whether conventional memory mapped into address range ES:BX = starting address CX = number of 4K pages Return: CF clear AL = 00h one or more pages is remapped 01h all pages in range are conventional memory (physical address == virtual address) AH = 19h NOP Return: CF set AH = 1Ah I/O port access AL = subfunction 00h get byte from I/O port Return: BL = port value 01h send byte to I/O port BL = value to send 02h send byte to I/O port, get byte from following port BH = value to send Return: BL = value read 03h send bytes to two consecutive I/O ports BH = value for first I/O port (DX) BL = value for second I/O port (DX+1) DX = port number Return: CF clear AH = 1Bh MS Windows 3 support AL = subfunction 00h get ??? ES:DI -> buffer for ??? data structure Return: CF set on error CF clear if successful Data structure: Offset Size Description 00h DWORD pointer to ??? 04h BYTE ??? (v6.00 sets to 01h) 05h BYTE ??? (v6.00 sets to 00h or 0Bh) SeeAlso: INT 21/AX=4402h"QEMM" 01h ??? Return: CF set on error CF clear if successful 02h ??? Return: CF set on error CF clear if successful 03h MS Windows initializing CX = segment from which Windows init broadcast made??? DL = Windows startup flags??? DI = Windows version number (major in upper byte) Return: ??? SeeAlso: INT 2F/AX=1605h 04h MS Windows terminating Return: CF clear 05h determine whether program is driver??? DS:DX -> ASCIZ filename Return: CF clear AL = 01h if string ends in ".DRV" = FFh if string ends in "GDI.EXE" = 00h otherwise 06h ??? CX = length of data pointed at by DS:DX DS:DX -> ??? Return: CF clear 07h BUG: QEMM 6.00-6.03 accept this and branch randomly else Return: CF set AH = 1Ch protected-mode hardware interrupt handlers ??? AL = subfunction 00h restore??? IRQ0-7 handlers 01h set??? IRQ0-7 handlers ES:DI -> 8 DWORDs containing ??? 02h restore??? IRQ8-15 handlers 03h set??? IRQ8-15 handlers ES:DI -> 8 DWORDs containing ??? BUG: although the jump table only contains four entries, QEMM 6.00 will attempt to use it for any value of AL between 00h and 2Ah, thus branching unpredictably for AL=04h-2Ah ---QEMM v6.00+ --- AH = 1Dh Stealth interrupts AL = subfunction 00h switch to pre-Stealth interrupt vector table Note: also switches VGA Save table pointer (0040h:00A8h) and overwrites the vectors currently assigned for use by the two interrupt controllers (see INT 67/AX=DE0Ah) with the vectors for INT 08-0F and 70-77 (to avoid crashing the system). 01h restore user interrupt vector table Notes: interrupts should be disabled around the AX=1D00h and AX=1D01h calls because QEMM does not modify the memory maps to map in ROM, so an interrupt could be disastrous clears any pending IRQ7 at end of function else Return: CF set AH = 1Eh Stealth information AL = subfunction 00h get Stealth configuration Return: BL = flags bit 0: conventional memory sorted bit 1: conventional memory filled bit 2: ??? bit 3: ??? bit 4: expanded memory is in use bit 5: ??? BH = ??? (always 00h for v6.00) CL = stealth type (00h none,46h Frame,4Dh Map) CH = ??? (zero/nonzero important) DX = ??? (always 0000h for v6.00) SI = ??? (always 0000h for v6.00) DI = ??? (always 0000h for v6.00) 01h get number of Stealth'ed ROMs Return: CF clear BX = number of Stealth'ed ROMs 02h get Stealth'ed ROM info ES:DI -> buffer for Stealth ROM info (see below) Return: CF clear BX = number of Stealth'ed ROMs ES:DI buffer filled else Return: CF set AH = 1Fh page table manipulation AL = subfunction 00h get page table entry CX = page number Return: EDX = page table entry CF clear 01h set page table entry CX = page number EDX = page table entry Return: CF clear SeeAlso: function 1008h else Return: CF set AH = 20h asynchronous disk access support??? AL = subfunction 00h get ??? Return: CF clear BL = flags bit 7: ??? (set if Stealth:F or :M active) bit 0: ??? 01h set ??? BL = ??? (bit 0 only) Return: CF clear else Return: CF set AH = 21h Stealth support AL = subfunction 00h copy data from Stealthed address space DS:SI -> start address of hidden memory to copy ES:DI -> buffer for copied data ECX = number of bytes to copy Return: CF clear if successful CF set on error (DS:SI < C000h:0000h or DS:SI + ECX > 1M) else Return: CF set ---QEMM v6.03 only--- AH = 22h DESQview/X support??? AL = subfunction 00h get ??? Return: CF clear ES:DI -> ??? 01h set ??? ES:DI -> ??? or 0000h:0000h Return: ??? other Return: CF set Format of QEMM 6.0 memory statistics: Offset Size Description 00h BYTE 01h if Shadow RAM found, 00h otherwise 01h DWORD initial conventional memory in bytes 05h DWORD initial extended memory in bytes 09h DWORD initial expanded memory in bytes 0Dh DWORD initial "top" or "shadow" memory in bytes 11h DWORD Unavailable conventional memory in bytes 15h DWORD Unavailable extended memory in bytes 19h DWORD Unavailable expanded memory in bytes 1Dh DWORD Unavailable "top" or "shadow" memory in bytes Add to offset 49h for Total unavailable top/shadow. 21h DWORD QEMM code size in bytes 25h DWORD QEMM data size in bytes 29h DWORD bytes used for TASKS= 2Dh DWORD DMA buffer size 31h DWORD bytes used for MAPS= 35h DWORD bytes of high RAM 39h DWORD bytes used by mapped ROMs 3Dh DWORD bytes of conventional memory provided by QEMM 41h DWORD bytes of extended memory NOT converted by QEMM (EXT=xxx) 45h DWORD bytes of EMS/XMS pool memory provided by QEMM 49h DWORD Unavailable "top" or "shadow" memory in bytes Add to offset 1Dh for Total unavailable top/shadow. 4Dh DWORD conventional memory overhead in bytes (set to 0 by QEMM.COM prior to call) Format of Stealth ROM info [array]: Offset Size Description 00h WORD starting segment of ROM 02h WORD length of ROM in paragraphs ----------6740------------------------------- INT 67 - LIM EMS - GET MANAGER STATUS AH = 40h Return: AH = status 00h successful 80h internal error 81h hardware malfunction 84h undefined function requested by application Note: this call can be used only after establishing that the EMS driver is in fact present SeeAlso: AH=3Fh,AX=FFA5h ----------6741------------------------------- INT 67 - LIM EMS - GET PAGE FRAME SEGMENT AH = 41h Return: AH = 00h function successful BX = segment of page frame AH = error code (see AH=40h) SeeAlso: AH=58h,AH=68h ----------6742------------------------------- INT 67 - LIM EMS - GET NUMBER OF PAGES AH = 42h Return: AH = 00h function successful BX = number of unallocated pages DX = total number of pages AH = error code (see AH=40h) SeeAlso: INT 2F/AX=2702h ----------6743------------------------------- INT 67 - LIM EMS - GET HANDLE AND ALLOCATE MEMORY AH = 43h BX = number of logical pages to allocate Return: AH = status 00h function successful DX = handle 80h internal error 81h hardware malfunction 84h undefined function requested 85h no more handles available 87h more pages requested than physically exist 88h more pages requested than currently available 89h zero pages requested SeeAlso: AH=45h ----------6744------------------------------- INT 67 - LIM EMS - MAP MEMORY AH = 44h AL = physical page number (0-3) BX = logical page number DX = handle Return: AH = status 00h function successful 80h internal error 81h hardware malfunction 83h invalid handle 84h undefined function requested 8Ah invalid logical page number 8Bh illegal physical-page number SeeAlso: AH=69h ----------6745------------------------------- INT 67 - LIM EMS - RELEASE HANDLE AND MEMORY AH = 45h DX = EMM handle Return: AH = status 00h successful 80h internal error 81h hardware malfunction 83h invalid handle 84h undefined function requested 86h error in save or restore of mapping context SeeAlso: AH=43h ----------6746------------------------------- INT 67 - LIM EMS - GET EMM VERSION AH = 46h Return: AH = status 00h successful AL = EMM version number 80h internal error 81h hardware malfunction 84h undefined function requested ----------6747------------------------------- INT 67 - LIM EMS - SAVE MAPPING CONTEXT AH = 47h DX = handle Return: AH = status 00h successful 80h internal error 81h hardware malfunction 83h invalid handle 84h undefined function requested 8Ch page-mapping hardware state save area is full 8Dh save of mapping context failed SeeAlso: AH=48h ----------6748------------------------------- INT 67 - LIM EMS - RESTORE MAPPING CONTEXT AH = 48h DX = handle Return: AH = status 00h successful 80h internal error 81h hardware malfunction 83h invalid handle 84h undefined function requested 8Eh restore of mapping context failed SeeAlso: AH=47h ----------6749------------------------------- INT 67 - LIM EMS - reserved - GET I/O PORT ADDRESSES AH = 49h Note: defined in EMS 3.0, but undocumented in EMS 3.2 ----------674A------------------------------- INT 67 - LIM EMS - reserved - GET TRANSLATION ARRAY AH = 4Ah Note: defined in EMS 3.0, but undocumented in EMS 3.2 ----------674B------------------------------- INT 67 - LIM EMS - GET NUMBER OF EMM HANDLES AH = 4Bh Return: AH = status 00h successful BX = number of EMM handles 80h internal error 81h hardware malfunction 83h invalid handle 84h undefined function requested ----------674C------------------------------- INT 67 - LIM EMS - GET PAGES OWNED BY HANDLE AH = 4Ch DX = EMM handle Return: AH = status 00h successful BX = number of logical pages 80h internal error 81h hardware malfunction 83h invalid handle 84h undefined function requested SeeAlso: AH=4Dh ----------674D------------------------------- INT 67 - LIM EMS - GET PAGES FOR ALL HANDLES AH = 4Dh ES:DI -> array to receive information Return: AH = status 00h successful BX = number of active EMM handles array filled with 2-word entries, consisting of a handle and the number of pages allocated to that handle 80h internal error 81h hardware malfunction 84h undefined function requested SeeAlso: AH=4Ch ----------674E------------------------------- INT 67 - LIM EMS - GET OR SET PAGE MAP AH = 4Eh AL = 00h if getting mapping registers 01h if setting mapping registers 02h if getting and setting mapping registers at once 03h if getting size of page-mapping array DS:SI -> array holding information (AL=01/02) ES:DI -> array to receive information (AL=00/02) Return: AH = status 00h successful AL = bytes in page-mapping array (AL=03h only) array pointed to by ES:DI receives mapping info (AL=00h/02h) 80h internal error 81h hardware malfunction 84h undefined function requested 8Fh undefined subfunction parameter A3h contents of source array corrupted (EMS 4.0?) Note: this function was designed to be used by multitasking operating systems and should not ordinarily be used by appplication software. SeeAlso: AH=4Fh ----------674F------------------------------- INT 67 - LIM EMS 4.0 - GET/SET PARTIAL PAGE MAP AH = 4Fh AL = subfunction 00h get partial page map DS:SI -> structure containing list of segments whose mapping contexts are to be saved ES:DI -> array to receive page map 01h set partial page map DS:SI -> structure containing saved partial page map 02h get size of partial page map BX = number of mappable segments in the partial map to be saved Return: AH = status 00h successful 80h internal error 81h hardware malfunction 84h undefined function requested 8Bh one of specified segments is not mappable 8Fh undefined subfunction parameter A3h contents of partial page map corrupted or count of mappable segments exceeds total number of mappable segments in system AL = size of partial page map for subfunction 02h SeeAlso: AH=4Eh ----------6750------------------------------- INT 67 - LIM EMS 4.0 - MAP/UNMAP MULTIPLE HANDLE PAGES AH = 50h AL = subfunction 00h use physical page numbers 01h use segment addresses DX = handle CX = number of entries in array DS:SI -> mapping array (see below) Return: AH = status 00h successful 80h internal error 81h hardware malfunction 83h invalid handle 84h undefined function requested 8Ah one or more logical pages are invalid 8Bh one or more physical pages are invalid 8Fh invalid subfunction SeeAlso: AH=40h Format of mapping array entry: Offset Size Description 00h WORD logical page number or FFFFh to unmap physical page 02h WORD physical page number or segment address ----------6751------------------------------- INT 67 - LIM EMS 4.0 - REALLOCATE PAGES AH = 51h DX = handle BX = number of pages to be allocated to handle Return: BX = actual number of pages allocated to handle AH = status 00h successful 80h internal error 81h hardware malfunction 83h invalid handle 84h undefined function requested 87h more pages requested than present in system 88h more pages requested than currently available ----------6752------------------------------- INT 67 - LIM EMS 4.0 - GET/SET HANDLE ATTRIBUTES AH = 52h AL = subfunction 00h get handle attributes Return: AL = attribute 00h handle is volatile 01h handle is nonvolatile 01h set handle attributes BL = new attribute (see returned AL) 02h get attribute capability Return: AL = attribute capability 00h only volatile handles supported 01h both volatile and non-volatile supported DX = handle Return: AH = status 00h successful 80h internal error 81h hardware malfunction 83h invalid handle 84h undefined function requested 8Fh undefined subfunction 90h undefined attribute type 91h feature not supported SeeAlso: AH=53h ----------6753------------------------------- INT 67 - LIM EMS 4.0 - GET/SET HANDLE NAME AH = 53h AL = subfunction 00h get handle name ES:DI -> 8-byte buffer for handle name 01h set handle name DS:SI -> 8-byte handle name DX = handle Return: AH = status 00h successful 80h internal error 81h hardware malfunction 83h invalid handle 84h undefined function requested 8Fh undefined subfunction A1h duplicate handle name SeeAlso: AH=52h ----------6754------------------------------- INT 67 - LIM EMS 4.0 - GET HANDLE DIRECTORY AH = 54h AL = subfunction 00h get handle directory ES:DI -> buffer for handle directory (see below) 01h search for named handle DS:SI -> 8-byte name 02h get total number of handles Return: AL = number of entries in handle directory (subfunction 00h) DX = value of named handle (subfunction 01h) BX = total number of handles (subfunction 02h) AH = status 00h successful 80h internal error 81h hardware malfunction 84h undefined function requested 8Fh undefined subfunction A0h no such handle name A1h a handle found had no name Format of handle directory entry: Offset Size Description 00h WORD handle 02h 8 BYTEs handle's name ----------6755------------------------------- INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND JUMP AH = 55h AL = subfunction 00h physical page numbers provided by caller 01h segment addresses provided by caller DX = handle DS:SI -> structure containing map and jump address Return: (at target address unless error) AH = status 00h successful 80h internal error 81h hardware failure 83h invalid handle 84h undefined function requested 8Ah invalid logical page number encountered 8Bh invalid physical page number encountered 8Fh invalid subfunction SeeAlso: AH=56h ----------6756------------------------------- INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND CALL AH = 56h AL = subfunction 00h physical page numbers provided by caller DX = handle DS:SI -> structure containing page map and call address 01h segment addresses provided by caller DX = handle DS:SI -> structure containing page map and call address 02h get page map stack space required Return: BX = stack space required Return: (if successful, the target address is called. Use a RETF to return and restore mapping context) AH = status (see AH=55h) SeeAlso: AH=55h ----------6757------------------------------- INT 67 - LIM EMS 4.0 - MOVE/EXCHANGE MEMORY REGION AH = 57h AL = subfunction 00h move memory region 01h exchange memory region DS:SI -> structure describing source and destination (see below) Return: AH = status 00h successful 80h internal error 81h hardware failure 83h invalid handle 84h undefined function requested 8Ah invalid logical page number encountered 8Fh undefined subfunction 92h successful, but a portion of the source region has been overwritten 93h length of source or destination region exceeds length of region allocated to either source or destination handle 94h conventional and expanded memory regions overlap 95h offset within logical page exceeds size of logical page 96h region length exceeds 1M 97h source and destination EMS regions have same handle and overlap 98h memory source or destination type undefined A2h attempted to wrap around 1M conventional address space Note: source and destination may overlap for a move, in which case the copy direction is chosen such that the destination receives an intact copy of the source region Format of EMS copy data: Offset Size Description 00h DWORD region length in bytes 04h BYTE source memory type 00h conventional 01h expanded 05h WORD source handle (0000h if conventional memory) 07h WORD source initial offset (within page if EMS, segment if convent) 09h WORD source initial segment (conv mem) or logical page (EMS) 0Bh BYTE destination memory type 00h conventional 01h expanded 0Ch WORD destination handle 0Eh WORD destination initial offset 10h WORD destination initial segment or page ----------6758------------------------------- INT 67 - LIM EMS 4.0 - GET MAPPABLE PHYSICAL ADDRESS ARRAY AH = 58h AL = subfunction 00h get mappable physical address array ES:DI -> buffer to be filled with array 01h get number of entries in m.p.a. array Return: CX = number of entries in array AH = status 00h successful 80h internal error 81h hardware failure 84h undefined function requested 8Fh undefined subfunction Note: the returned array for subfunction 00h is filled in physical segment address order Format of mappable physical address entry: Offset Size Description 00h WORD physical page segment 02h WORD physical page number ----------6759------------------------------- INT 67 - LIM EMS 4.0 - GET EXPANDED MEMORY HARDWARE INFORMATION AH = 59h AL = subfunction 00h get hardware configuration array ES:DI -> buffer to be filled with array (see below) 01h get unallocated raw page count Return: BX = unallocated raw pages DX = total raw pages Return: AH = status 00h successful 80h internal error 81h hardware failure 84h undefined function requested 8Fh undefined subfunction A4h access denied by operating system Note: subfunction 00h is for use by operating systems only, and can be enabled or disabled at any time by the operating system Format of hardware configuration array: Offset Size Description 00h WORD size of raw EMM pages in paragraphs 02h WORD number of alternate register sets 04h WORD size of mapping-context save area in bytes 06h WORD number of register sets assignable to DMA 08h WORD DMA operation type 0000h DMA with alternate register sets 0001h only one DMA register set ----------675A------------------------------- INT 67 - LIM EMS 4.0 - ALLOCATE STANDARD/RAW PAGES AH = 5Ah AL = subfunction 00h allocate standard pages 01h allocate raw pages BX = number of pages to allocate Return: DX = handle AH = status 00h successful 80h internal error 81h hardware failure 84h undefined function requested 85h no more handles available 87h insufficient memory pages in system 88h insufficient memory pages available 8Fh undefined subfunction ----------675B------------------------------- INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET AH = 5Bh AL = subfunction 00h get alternate map register set Return: BL = current active alternate map register set number ES:DI -> map register context save area if BL=00h 01h set alternate map register set BL = new alternate map register set number ES:DI -> map register context save area if BL=0 02h get alternate map save array size Return: DX = array size in bytes 03h allocate alternate map register set Return: BL = number of map register set; 00h = not supported 04h deallocate alternate map register set BL = number of alternate map register set Return: AH = status 00h successful 80h internal error 81h hardware malfunction 84h undefined function requested 8Fh undefined subfunction 9Ah specified alternate map register set not supported 9Bh all alternate map register sets currently allocated 9Ch alternate map register sets not supported 9Dh undefined or unallocated alternate map register set A3h source array corrupted A4h operating system denied access Note: this function is for use by operating systems only, and can be enabled or disabled at any time by the operating system ----------675B------------------------------- INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET - DMA REGISTERS AH = 5Bh AL = subfunction 05h allocate DMA register set Return: BL = DMA register set number, 00h if not supported 06h enable DMA on alternate map register set BL = DMA register set number DL = DMA channel number 07h disable DMA on alternate map register set BL = DMA register set number 08h deallocate DMA register set BL = DMA register set number Return: AH = status 00h successful 80h internal error 81h hardware malfunction 84h undefined function requested 8Fh undefined subfunction 9Ah specified DMA register set not supported 9Bh all DMA register sets currently allocated 9Ch alternate DMA sets not supported 9Dh undefined or unallocated DMA register set 9Eh dedicated DMA channels not supported 9Fh specified dedicated DMA channel not supported A3h source array corrupted A4h operating system denied access Note: this function is for use by operating systems only, and can be enabled or disabled at any time by the operating system ----------675BE0----------------------------- INT 67 - MICEMM v4D - GET LINEAR ADDRESS OF MEMORY AX = 5BE0h ES:BX -> memory for which to get linear address Return: AH = 00h DX:CX = linear address of physical memory corresponding to ES:BX SeeAlso: AX=5BF0h,AX=5BF1h ----------675BF0----------------------------- INT 67 - MICEMM v4D - INSTALLATION CHECK AX = 5BF0h Return: AH = 00h if MICEMM present BX = code segment of driver Note: MICEMM is the Micronics Expanded Memory Manager SeeAlso: AH=3Fh,AX=5BE0h,AX=5BF1h ----------675BF1----------------------------- INT 67 - MICEMM v4D - GET MEMORY TYPES AX = 5BF1h ES:BX -> 256-byte buffer for memory types Return: AH = 00h ES:BX buffer filled Note: each byte in the buffer specifies the type of a 4K page of memory: 00h unused 02h DOS extension 04h shadowed ROM 08h mappable EMS 10h page frame 20h ROM 40h reserved (video memory, etc) 80h RAM SeeAlso: AX=5BE0h,AX=5BF0h ----------675C------------------------------- INT 67 - LIM EMS 4.0 - PREPARE EXPANDED MEMORY HARDWARE FOR WARM BOOT AH = 5Ch Return: AH = status 00h successful 80h internal error 81h hardware malfunction 84h undefined function requested ----------675D------------------------------- INT 67 - LIM EMS 4.0 - ENABLE/DISABLE OS FUNCTION SET FUNCTIONS AH = 5Dh AL = subfunction 00h enable OS Function Set 01h disable OS Function Set 02h return access key (resets memory manager, returns access key at next invocation) BX,CX = access key returned by first invocation Return: BX,CX = access key, returned only on first invocation of function AH = status 00h successful 80h internal error 81h hardware malfunction 84h undefined function requested 8Fh undefined subfunction A4h operating system denied access ----------6760------------------------------- INT 67 - EEMS - GET PHYSICAL WINDOW ARRAY AH = 60h ES:DI -> buffer Return: AH = status AL = number of entries buffer at ES:DI filled ----------6761------------------------------- INT 67 - EEMS - GENERIC ACCELERATOR CARD SUPPORT AH = 61h ??? Return: ??? Note: can be used by accelerator card manufacturer to flush RAM cache, ensuring that the cache accurately reflects what the processor would see without the cache. ----------6768------------------------------- INT 67 - EEMS - GET ADDRESSES OF ALL PAGE FRAMES IN SYSTEM AH = 68h ES:DI -> buffer Return: AH = status AL = number of entries buffer at ES:DI filled Note: equivalent to LIM 4.0 function 58h ----------6769------------------------------- INT 67 - EEMS - MAP PAGE INTO FRAME AH = 69h AL = frame number BX = page number DX = handle Return: AH = status Note: similar to EMS function 44h SeeAlso: AH=44h,AH=50h,AH=6Ah ----------676A------------------------------- INT 67 - EEMS - PAGE MAPPING AH = 6Ah AL = subfunction 00h save partial page map CH = first page frame CL = number of frames ES:DI -> buffer which is to be filled 01h restore partial page map CH = first page frame CL = number of frames DI:SI -> previously saved page map 02h save and restore partial page map CH = first page frame CL = number of frames ES:DI = buffer for current page map DI:SI = new page map 03h get size of save array CH = first page frame CL = number of frames Return: AL = size of array in bytes 04h switch to standard map register setting 05h switch to alternate map register setting 06h deallocate pages mapped to frames in conventional memory CH = first page frame CL = number of frames Return: AH = status Note: similar to EMS function 4Eh, except that a subrange of pages can be specified SeeAlso: AH=69h ----------67DD------------------------------- INT 67 - Quadtel QMAPS - API AH = DDh AL = function ??? Return: ??? Notes: details are not yet available Hewlett-Packard's HPMM.SYS is a licensed version of QMAPS, and thus supports this API SeeAlso: AH=3Fh,AX=FFA5h ----------67DE00----------------------------- INT 67 - Virtual Control Program Interface - INSTALLATION CHECK AX = DE00h Return: AH = 00h VCPI is present BH = major version number BL = minor version number AH nonzero VCPI not present ----------67DE01----------------------------- INT 67 - Virtual Control Program Interface - GET PROTECTED MODE INTERFACE AX = DE01h ES:DI -> 4K page table buffer DS:SI -> three descriptor table entries in GDT first becomes code segment descriptor, other two for use by main control program Return: AH = 00h successful DI -> first unused page table entry in buffer EBX -> protected mode entry point in code segment AH = nonzero failed Note: protected mode entry point may be called with AX=DE00h-DE05h and AX=DE0Ch (in each case, all other registers as appropriate for the function) SeeAlso: INT 67/AH=3Fh QEMM v6.03 protected mode entry point may also be called with: AX = DF00h ??? ??? Return: ??? AX = DF01h ??? ??? Return: ??? ----------67DE02----------------------------- INT 67 - Virtual Control Program Interface - GET MAX PHYSICAL MEMORY ADDRESS AX = DE02h Return: AH = 00h successful EDX = physical address of highest 4K memory page AH nonzero: failed SeeAlso: AH=3Fh ----------67DE03----------------------------- INT 67 - Virtual Control Program Interface - GET NUMBER OF FREE 4K PAGES AX = DE03h Return: AH = 00h successful EDX = number of free 4K pages AH nonzero: failed Notes: returns total number of pages available to ALL tasks in system also available in protected mode by calling the protected-mode VCPI entry point SeeAlso: AX=DE04h ----------67DE04----------------------------- INT 67 - Virtual Control Program Interface - ALLOCATE A 4K PAGE AX = DE04h Return: AH = 00h successful EDX = physical address of allocated page AH nonzero: failed Notes: the client program is responsible for freeing all memory allocated with this call before terminating also available in protected mode by calling the protected-mode VCPI entry point SeeAlso: AH=3Fh,AX=DE03h,AX=DE05h ----------67DE05----------------------------- INT 67 - Virtual Control Program Interface - FREE 4K PAGE AX = DE05h EDX = physical address of 4K page Return: AH = 00h successful AH nonzero: failed Note: also available in protected mode by calling the protected-mode VCPI entry point SeeAlso: AH=3Fh,AX=DE04h ----------67DE06----------------------------- INT 67 - Virtual Control Program Interface - GET PHYS ADDR OF PAGE IN FIRST MB AX = DE06h CX = page number (linear address shifted right 12 bits) Return: AH = 00h successful EDX = physical address of page AH nonzero: invalid page number (AH = 8Bh recommended) ----------67DE07----------------------------- INT 67 - Virtual Control Program Interface - READ CR0 AX = DE07h Return: AH = 00h EBX = value of Control Register 0 SeeAlso: AH=3Fh,AX=DE07h ----------67DE08----------------------------- INT 67 - Virtual Control Program Interface - READ DEBUG REGISTERS AX = DE08h ES:DI -> array of 8 DWORDs Return: AH = 00h buffer filled with DR0 first, DR7 last, DR4 and DR5 unused SeeAlso: AH=3Fh,AX=DE09h ----------67DE09----------------------------- INT 67 - Virtual Control Program Interface - SET DEBUG REGISTERS AX = DE09h ES:DI -> array of 8 DWORDs holding new values of debug registers Return: AH = 00h Note: values for DR4 and DR5 ignored SeeAlso: AH=3Fh,AX=DE08h ----------67DE0A----------------------------- INT 67 - Virtual Control Program Interface - GET 8259 INTERRUPT VECTOR MAPPINGS AX = DE0Ah Return: AH = 00h successful BX = first vector used by master 8259 (IRQ0) CX = first vector used by slave 8259 (IRQ8) AH nonzero: failed Note: CX is undefined in systems without a slave 8259 SeeAlso: AX=DE0Bh ----------67DE0B----------------------------- INT 67 - Virtual Control Program Interface - SET 8259 INTERRUPT VECTOR MAPPINGS AX = DE0Bh BX = first vector used by master 8259 CX = first vector used by slave 8259 interrupts disabled Return: AH = 00h successful AH nonzero: failed Notes: This call merely informs the server that the client has changed the interrupt mappings. The client may not change the mappings if they have already been changed by the server or another client, and is responsible for restoring the original mappings before terminating. SeeAlso: AX=DE0Ah ----------67DE0C----------------------------- INT 67 - Virtual Control Program Interface - SWITCH TO PROTECTED MODE AX = DE0Ch ESI = linear address in first megabyte of values for system registers interrupts disabled Return: interrupts disabled GDTR, IDTR, LDTR, TR loaded SS:ESP must have at least 16 bytes space, and the entry point is required to set up a new stack before enabling interrupts EAX, ESI, DS, ES, FS, GS destroyed SeeAlso: AH=3Fh,INT 15/AH=89h Note: in protected mode, calling the protected-mode VCPI entry point with AX = DE0Ch DS = segment selector from function DE01h SS:ESP in first megabyte of linear memory STACK:QWORD return address from FAR call to 32-bit segment DWORD EIP DWORD CS DWORD reserved for EFLAGS DWORD ESP DWORD SS DWORD ES DWORD DS DWORD FS DWORD GS and interrupts disabled, will switch to virtual86 mode with interrupts disabled, all segment registers loaded, and EAX destroyed. Format of system register values for switch to protected mode: Offset Size Description 00h DWORD value for CR3 04h DWORD linear address in first megabyte of value for GDTR 08h DWORD linear address in first megabyte of value for IDTR 0Ch WORD value for LDTR 0Eh WORD value for TR 10h PWORD CS:EIP of protected mode entry-point ----------67FFA5----------------------------- INT 67 - Microsoft EMM386.EXE v4.20+ - INSTALLATION CHECK AX = FFA5h Return: AX = 845Ah if loaded BX:CX -> API entry point Notes: this call is available even if EMM386 is not providing EMS if no other program has hooked INT 67, an alternate installation check is to search for the string "MICROSOFT EXPANDED MEMORY MANAGER 386" early in the INT 67 handler's segment, usually at offset 14h SeeAlso: AH=3Fh Call API entry point with: AH = 00h get memory manager's status Return: AH = status bit 0: not active (OFF) bit 1: in "Auto" mode AH = 01h set memory manager's state AL = new state (00h ON, 01h OFF, 02h AUTO) AH = 02h Weitek coprocessor support AL = subfunction 00h get Weitek support state Return: AL = status bit 0: Weitek coprocessor is present bit 1: Weitek support is enabled 01h turn on Weitek support 02h turn off Weitek support --- v4.20-4.41 only --- AH = 03h Windows support??? AL = subfunction (00h, 01h) AH = 04h print copyright notice to standard output (using INT 21/AH=09h) AH = 05h print available report (the one shown when running EMM386 from the DOS prompt) --------------------------------------------- Interrupt List, part 7 of 7 This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown ----------68--------------------------------- INT 68 - Sangoma CCPOP 3270 resident module SeeAlso: INT 67"Sangoma",INT 92"Sangoma" ----------6801------------------------------- INT 68 - APPC/PC - NETWORK DEVICE CONTROL AH = 01h DS:DX -> control block Format of control block: Offset Size Description 00h 12 BYTEs reserved 0Ch WORD verb (action) 0Eh 6 BYTEs 00h 14h DWORD (high byte first) return code (see below) ---if verb = 1B00h (DISPLAY)--- 18h WORD 00h 1Ah 8 BYTEs (high byte first) logical unit ID 22h 8 BYTEs (high byte first) partner logical unit name 2Ah 8 BYTEs (high byte first) mode name 32h BYTE logical unit session limit 33h BYTE partner logical unit session limit 34h BYTE node maximum negotiable session limit 35h BYTE current session limit 36h BYTE minimum negotiated winner limit 37h BYTE maximum negotiated loser limit 38h BYTE active session count 39h BYTE active CONWINNER session count 3Ah BYTE active CONLOSER session count 3Bh BYTE session termination count 3Ch BYTE bit 7: SESSION_TERMINATION_TARGET_DRAIN bit 6: SESSION_TERMINATION_SOURCE_DRAIN ---if verb=2000h (Attach Physical Unit)--- 18h WORD 00h 1Ah BYTE version 1Bh BYTE release 1Ch 8 BYTEs (high byte first) net name 24h 8 BYTEs (high byte first) physical unit name 2Ch 8 BYTEs 00h 34h DWORD pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh=don't log errors 38h DWORD 00h 3Ch BYTE 00h RETURN_CONTROL: COMPLETE 01h RETURN_CONTROL: INCOMPLETE ---if verb=2100h (Attach Logical Unit)--- 18h WORD 70 offset to partner logical unit record 1Ah 8 BYTEs (high byte first) logical unit name 22h 8 BYTEs (high byte first) logical unit ID 2Ah BYTE logical unit local address 2Bh BYTE logical unit session limit 2Ch DWORD pointer to CREATE_TP_EXIT routine, FFFFFFFFh = reject incoming ALLOCATEs 00000000h = queue ALLOCATEs 30h DWORD 00h 34h DWORD pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh=don't log errors 38h DWORD 00h 3Ch BYTE maximum TPs 3Dh BYTE queue depth 3Eh DWORD pointer to LU_LU_PASSWORD_EXIT routine, FFFFFFFFh=no pswd exit 42h DWORD 00h 46h WORD total length of partner records for each partner logical unit: WORD length of this partner logical unit record WORD 42 offset to mode records 8 BYTEs (high byte first) partner logical unit name BYTE partner logical unit security capabilities bit 7: already verified bit 6: conversation level security bit 5: session level security BYTE partner logical unit session limit WORD partner logical unit maximum MC_SEND_LL 8 BYTEs (high byte first) partner logical unit DLC name BYTE partner logical unit adapter number 17 BYTEs (counted string) partner logical unit adapter address WORD total length of mode records for each mode: WORD 16 length of this mode record 8 BYTEs (high byte first) mode name WORD RU_SIZE high bound WORD RU_SIZE low bound BYTE mode maximum negotiable session limit BYTE pacing size for receive ---if verb=2200h (Detach Logical Unit)--- 18h 8 BYTEs (high byte first) logical unit ID 20h BYTE 00h ---if verb=2700h (Detach Physical Unit)--- 18h BYTE 00h type: hard 01h type: soft ---if verb=2B00h (Activate DLC)--- 18h 8 BYTEs (high byte first) DLC name 20h BYTE adapter number Values for return code: 0000h successful 0001h BAD_TP_ID 0002h BAD_CONV_ID 0003h bad logical unit ID 0008h no physical unit attached 0110h bad state 01B1h BAD_PART_LUNAME 01B2h bad mode name 0201h physical unit already active 0211h logical unit already active 0212h BAD_PART_SESS 0213h BAD_RU_SIZES 0214h BAD_MODE_SESS 0216h BAD_PACING_CNT 0219h EXTREME_RUS 021Ah SNASVCMG_1 0223h SSCP_CONNECTED_LU 0230h invalid change 0243h too many TPs 0272h adapter close failure 0281h GET_ALLOC_BAD_TYPE 0282h unsuccessful 0283h DLC failure 0284h unrecognized DLC 0286h duplicate DLC 0301h SSCP_PU_SESSION_NOT_ACTIVE 0302h data exceeds RU size 0401h invalid direction 0402h invalid type 0403h segment overlap 0404h invalid first character 0405h table error 0406h conversion error F0010000h APPC disabled F0020000h APPC busy F0030000h APPC abended F0040000h incomplete Routines defined by LU_LU_PASSWORD_EXIT, CREATE_TP_EXIT, and SYSTEM_LOG_EXIT pointers are called by pushing the DWORD pointer to the verb on the stack and then performing a FAR call. Format of ACCESS_LU_LU_PW verb: Offset Size Description 00h 12 BYTEs reserved 0Ch WORD 1900h 0Eh 8 BYTEs (high byte first) logical unit ID 16h 8 BYTEs (high byte first) logical unit name 1Eh 8 BYTEs (high byte first) partner logical unit name 26h 17 BYTEs (counted string) partner fully qualified logical unit name 37h BYTE password available (0=no, 1=yes) 38h 8 BYTEs password Format of CREATE_TP verb: Offset Size Description 00h 12 BYTEs reserved 0Ch WORD 2300h 0Eh 6 BYTEs 00h 14h DWORD (high byte first) sense code 00000000h Ok 080F6051h SECURITY_NOT_VALID 084B6031h TP_NOT_AVAIL_RETRY 084C0000h TP_NOT_AVAIL_NO_RETRY 10086021h TP_NAME_NOT_RECOGNIZED 10086034h CONVERSATION_TYPE_MISMATCH 10086041h SYNC_LEVEL_NOT_SUPPORTED 18h 8 BYTEs (high byte first) TP ID 20h 8 BYTEs (high byte first) logical unit ID 28h DWORD (high byte first) conversation ID 2Ch BYTE 0 basic conversation, 1 mapped conversation 2Dh BYTE 0 no sync level, 1 confirm 2Eh BYTE reserved 2Fh 65 BYTEs (counted string) transaction program name 70h 6 BYTEs 00h 76h WORD length of ERROR_LOG_DATA to return 78h DWORD pointer to ERROR_LOG_DATA buffer 7Ch 8 BYTEs (high byte first) partner logical unit name 84h 18 BYTEs (counted string) partner fully qualified logical unit name 96h 8 BYTEs (high byte first) mode name 9Eh 12 BYTEs 00h AAh 11 BYTEs (counted string) password B5h 11 BYTEs (counted string) user ID C0h BYTE 0 verification should be performed 1 already verified Format of SYSLOG verb: Offset Size Description 00h 12 BYTEs reserved 0Ch WORD 2600h 0Eh 10 BYTEs 00h 18h WORD (high byte first) type 1Ah DWORD (high byte first) subtype 1Eh DWORD pointer to ADDITIONAL_INFO 22h DWORD (high byte first) conversation ID 26h 8 BYTEs (high byte first) TP ID 2Eh 8 BYTEs (high byte first) physical unit or logical unit name 36h WORD length of data 38h DWORD pointer to data 3Ch BYTE 00h ----------6802------------------------------- INT 68 - APPC/PC - CONNECTION CONTROL AH = 02h DS:DX -> control block Format of control block: Offset Size Description 00h 12 BYTEs reserved 0Ch WORD verb (action) 0Eh BYTE 1 if MC_ (mapped conversation) form of verb 0 if basic verb 0Fh 5 BYTEs reserved (0) 14h WORD (high byte first) primary return code (see below) 16h DWORD (high byte first) error code (see below) 1Ah 8 BYTEs (high byte first) TP_ID 22h DWORD (high byte first) conversation ID ---if verb=0100h (Allocate or MC_Allocate)--- 26h BYTE (MC_Allocate only) 0 basic conversation 1 mapped conversation 27h BYTE 00h SYNC_LEVEL = none 01h SYNC_LEVEL = confirm 28h WORD 0000h 2Ah BYTE 00h RETURN_CONTROL: when session allocated 01h RETURN_CONTROL: immediate 02h RETURN_CONTROL: when session free 2Bh 8 BYTEs 00h 33h 8 BYTEs (high byte first) partner logical unit name 3Bh 8 BYTEs (high byte first) mode name 43h 65 BYTEs (counted string) TP name 84h BYTE 00h security: none 01h security: same 02h security: pgm 85h 11 BYTEs 00h 90h 11 BYTEs (counted string) password 9Bh 11 BYTEs (counted string) user ID A6h WORD PIP_DATA length A8h DWORD pointer to PIP_DATA ---if verb=0300h (Confirm or MC_Confirm)--- 26h BYTE request to send received (0=no, 1=yes) ---if verb=0400h (Confirmed or MC_Confirmed), no additional fields--- ---if verb=0500h (Deallocate or MC_Deallocate)--- 26h BYTE 00h 27h BYTE type 0 SYNC_LEVEL 1 FLUSH 2 ABEND_PROC 3 ABEND_SVC 4 ABEND_TIMER 5 ABEND 28h WORD (MC_Deallocate only) length of error log data 2Ah DWORD (MC_Deallocate only) pointer to error log data ---if verb=0600h (Flush or MC_Flush), no additional fields--- ---if verb=0700h (Get_Attributes or MC_Get_Attributes)--- 26h 8 BYTEs (high byte first) logical unit ID 2Eh BYTE 00h 2Fh BYTE SYNC_LEVEL (0=none, 1=confirm) 30h 8 BYTEs (high byte first) mode name 38h 8 BYTEs (high byte first) own net name 40h 8 BYTEs (high byte first) own logical unit name 48h 8 BYTEs (high byte first) partner logical unit name 50h 18 BYTEs (counted string) partner's fully qualified logical unit name 62h BYTE 00h 63h 11 BYTEs (counted string) user ID ---if verb=0800h (Get_Type)--- 26h BYTE type (0=basic conversation, 1=mapped conversation) ---if verb=0900h (Post_on_Receipt)--- 26h WORD maximum length 28h BYTE fill (0=buffer, 1=LL) ---if verb=0A00h (Prepare_to_Receive or MC_Prepare_to_Receive)--- 26h BYTE type (0=SYNC_LEVEL, 1=FLUSH) 27h BYTE locks (0=short, 1=long) ---if verb=0B00h (Receive_and_Wait or MC_Receive_and_Wait)--- 26h BYTE what received 00h data 01h data complete 02h data incomplete 03h confirm 04h confirm send 05h confirm deallocate 06h send 27h BYTE (MC_Receive_and_Wait only) fill (0=buffer, 1=LL) 28h BYTE Request_to_Send_Received (0=no, 1=yes) 29h WORD maximum length 2Bh WORD data length 2Dh DWORD pointer to data ---if verb=0C00h (Receive_Immediate or MC_Receive_Immediate)--- 26h BYTE what received 00h data 01h data complete 02h data incomplete 03h confirm 04h confirm send 05h confirm deallocate 06h send 27h BYTE (MC_Receive_Immediate only) fill (0=buffer, 1=LL) 28h BYTE Request_to_Send_Received (0=no, 1=yes) 29h WORD maximum length 2Bh WORD data length 2Dh DWORD pointer to data ---if verb=0E00h (Request_to_Send or MC_Request_to_Send), no other fields--- ---if verb=0F00h (Send_Data or MC_Send_Data)--- 26h BYTE request to send received (0=no, 1=yes) 27h BYTE 00h 28h WORD data length 2Ah DWORD pointer to data ---if verb=1000h (Send_Error or MC_Send_Error)--- 26h BYTE request to send received (0=no, 1=yes) 27h BYTE type (0=program, 1=SVC) 28h DWORD 00h 2Ch WORD (MC_Send_Error only) LOG_DATA length 2Eh DWORD (MC_Send_Error only) pointer to LOG_DATA ---if verb=1200h (Test or MC_Test)--- 26h BYTE (MC_Test only) test (0=posted, 1=request_to_send received) Note: error code has different interpretations for: 0 posted data 1 posted not data (primary return code = 0) 1 bad TP_ID (primary return code = 1) ---if verb=1300h (Wait)--- 26h BYTE number of conversations to wait on Note: error codes have interpretations as for 1200h above Values for primary return code: 0000h successful 0001h parameter check 0002h state check 0003h allocation error 0005h deallocate abended 0006h deallocate abended program 0007h deallocate abended SVC 0008h deallocate abended timer 0009h deallocate normal return 000Ah data posting blocked 000Bh posting not active 000Ch PROG_ERROR_NO_TRUNC 000Dh PROG_ERROR_TRUNC 000Eh PROG_ERROR_PURGING 000Fh CONV_FAILURE_RETRY 0010h CONV_FAILURE_NO_RETRY 0011h SVC_ERROR_NO_TRUNC 0012h SVC_ERROR_TRUNC 0013h SVC_ERROR_PURGING 0014h unsuccessful 0018h CNOS partner logical unit reject 0019h conversation type mixed F001h APPC disabled F002h APPC busy F003h APPC abended F004h incomplete Values for error code: 0001h bad TP ID 0002h bad conversation ID 0004h allocation error, no retry 0005h allocation error, retry 0006h data area crosses segment boundary 0010h bad TPN length 0011h bad CONV length 0012h bad SYNC level 0013h bad security selection 0014h bad return control 0015h SEC_TOKENS too big 0016h PIP_LEN incorrect 0017h no use of SNASVCMG 0018h unknown partner mode 0031h confirm: SYNC_NONE 0032h confirm: bad state 0033h confirm: NOT_LL_BDY 0041h confirmed: bad state 0051h deallocate: bad type 0052h deallocate: flush bad state 0053h deallocate: confirm bad state 0055h deallocate: NOT_LL_BDY 0057h deallocate: log LL_WRONG 0061h flush: not send state 0091h post on receipt: invalid length 0092h post on receipt: not in receive state 0093h post on receipt: bad fill 00A1h prepare to receive:invalid type 00A2h prepare to receive: unfinished LL 00A3h prepare to receive: not in send state 00B1h receive and wait: bad state 00B2h receive and wait: NOT_LL_BDY 00B5h receive and wait: bad fill 00C1h receive immediate: not in receive state 00C4h receive immediate: bad fill 00E1h request to send: not in receive state 00F1h send data: bad LL 00F2h send data: not in send state 0102h send error: log LL wrong 0103h send error: bad type 0121h test: invalid type 0122h test: not in receive state ----------6803------------------------------- INT 68 - APPC/PC AH = 03h DS:DX -> control block (see below) Format of control block: Offset Size Description 00h 12 BYTEs reserved 0Ch WORD verb (action) 0Eh 6 BYTEs 0 14h DWORD (high byte first) return code (see AH=01h) 18h WORD 0 1Ah 8 BYTEs (high byte first) logical unit ID ---if verb=2400h (TP Started), control block continues--- 22h 8 BYTEs (high byte first) TP ID ---if verb=2800h (Get ALLOCATE), control block continues--- 22h BYTE type 00h dequeue 01h test 23h DWORD pointer to CREATE_TP record ---if verb=2A00h (Change Logical Unit). control block continues--- 22h DWORD pointer to CREATE_TP_EXIT routine FFFFFFFFh reject incoming ALLOCATEs 00000000h queue ALLOCATEs 26h DWORD 00000000h 2Ah DWORD pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh= don't log errors 2Eh DWORD 00000000h 32h BYTE maximum TPs 33h BYTE 00h stop QUEUE_ALLOCATEs 01h resume QUEUE_ALLOCATEs 34h DWORD pointer to LU_LU_PASSWORD_EXIT routine, FFFFFFFFh = no exit 38h DWORD 00000000h ----------6804------------------------------- INT 68 - APPC/PC AH = 04h DS:DX -> control block (see below) Format of control block: Offset Size Description 00h 12 BYTEs reserved 0Ch WORD verb (action) 2500h TP_ENDED 2900h TP_VALID 0Eh 6 BYTEs 0 14h DWORD (high byte first) return code (see AH=01h) 18h WORD 0 1Ah 8 BYTEs (high byte first) TP_ID 22h DWORD -> CREATE_TP record (only if verb = 2900h) ----------6805------------------------------- INT 68 - APPC/PC - TRANSFER MSG DATA AH = 05h DS:DX -> control block (see below) Format of control block: Offset Size Description 00h 12 BYTEs reserved 0Ch WORD 1C00h 0Eh BYTE 00h user defined 01h NMVT 02h alert subvectors 03h PDSTATS subvectors 0Fh 5 BYTEs 0 14h DWORD (high byte first) return code (see AH=01h) 18h 12 BYTEs 0 24h BYTE if bit 0 clear, add correlation subvector if bit 1 clear, add product set ID subvector if bit 2 clear, do SYSLOG if bit 3 clear, send SSCP_PU_SESSION 25h BYTE 0 26h WORD length of data 28h N BYTEs data ----------6806------------------------------- INT 68 - APPC/PC - CHANGE NUMBER OF SESSIONS AH = 06h DS:DX -> control block (see below) Format of control block: Offset Size Description 00h 12 BYTEs reserved 0Ch WORD 1500h 0Eh 6 BYTEs 0 14h WORD (high byte first) primary return code (see AH=02h) 16h DWORD (high byte first) secondary return code (see below, AH=01h) 1Ah 8 BYTEs (high byte first) logical unit ID 22h 8 BYTEs blanks 2Ah 8 BYTEs (high byte first) partner logical unit name 32h 8 BYTEs (high byte first) mode name 3Ah BYTE bit 7: use MODE_NAME_SELECT_ALL rather than MODE_NAME bit 6: set negotiable values 3Bh BYTE partner logical unit mode session limit 3Ch BYTE minimum CONWINNERS_SOURCE 3Dh BYTE maximum CONWINNERS_TARGET 3Eh BYTE automatic activation 3Fh BYTE 0 40h BYTE bit 7: drain target bit 6: drain source bit 5: target responsible, not source Values for secondary return code (see also AH=01h): 0000h accepted 0001h negotiated 0003h bad logical unit ID 0004h allocation failure, no retry 0005h allocation failure, retry 0151h can't raise limits 0153h all modes must reset 0154h bad SNASVCMG limits 0155h minimum greater than total 0156h mode closed (prim return code = 1) CNOS mode closed (prim return code = 18h) 0157h bad mode name (prim return code = 1) CNOS bad mode name (prim return code = 18h) 0159h reset SNA drains 015Ah single not SRC response 015Bh bad partner logical unit 015Ch exceeds maximum allowed 015Dh change SRC drains 015Eh logical unit detached 015Fh CNOS command race reject ----------6807------------------------------- INT 68 - APPC/PC - PASSTHROUGH AH = 07h DS:DX -> control block (format depends on application subsystem) SeeAlso: AH=FFh ----------68FA------------------------------- INT 68 - APPC/PC - ENABLE/DISABLE APPC AH = FAh AL bit 0 = 0 enable 1 disable ----------68FB------------------------------- INT 68 - APPC/PC - CONVERT AH = FBh DS:DX -> control block (see below) Format of control block: Offset Size Description 00h 12 BYTEs reserved 0Ch WORD 1A00h 0Eh 6 BYTEs 0 14h DWORD (high byte first) return code 18h BYTE conversion 00h ASCII to EBCDIC 01h EBCDIC to ASCII 19h BYTE character set 00h AE 01h A 02h G 1Ah WORD length of string to convert 1Ch DWORD pointer to source 20h DWORD pointer to target ----------68FC------------------------------- INT 68 - APPC/PC - ENABLE/DISABLE MESSAGE TRACING AH = FCh AL = 00h disable tracing = 01h enable tracing DX = number of bytes to keep (0=all) SeeAlso: AH=FDh ----------68FD------------------------------- INT 68 - APPC/PC - ENABLE/DISABLE API VERB TRACING AH = FDh AL = 00h disable tracing 01h enable tracing SeeAlso: AH=FCh,AH=FEh ----------68FE------------------------------- INT 68 - APPC/PC - SET TRACE DESTINATION AH = FEh AL = trace destinations bit 0 storage (DS:DX -> trace stats record) bit 1 display bit 2 file (trace written to file OUTPUT.PC) bit 3 printer SeeAlso: AH=FDh Format of Trace Statistics Record: Offset Size Description 00h DWORD pointer to storage trace buffer 04h WORD max number of 80-byte records in trace 06h WORD (high-order byte first!) current record number (must init to 0) 08h DWORD (high-order byte first!) number of records written (init to 0) 0Ch DWORD reserved Note: do not move record while trace is active ----------68FF------------------------------- INT 68 - APPC/PC - SET PASSTHROUGH AH = FFh DS:DX -> passthrough exit routine SeeAlso: AH=07h ----------69--------------------------------- INT 69 - Zenith AT BIOS - ??? called by INT 09 handler ----------690100----------------------------- INT 69 - DECnet DOS CTERM - INSTALLATION CHECK AX = 0100h Return: AL = FFh if present SeeAlso: AX=010Fh ----------690101----------------------------- INT 69 - DECnet DOS CTERM - SEND BYTE AX = 0101h BL = character DX = session handle Return: AH >= 80h on error SeeAlso: AX=0102h ----------690102----------------------------- INT 69 - DECnet DOS CTERM - READ BYTE AX = 0102h DX = session handle Return: AH >= 80h on error AH < 80h if successful AL = character SeeAlso: AX=0101h ----------690103----------------------------- INT 69 - DECnet DOS CTERM - STATUS AX = 0103h DX = session handle Return: AH status flags bit 7 session has been aborted 6 DECnet error 1 trace data available 0 receive data available AL = reason code if DECnet error 00h normal disconnect 01h unknown message from host 02h protocol violation from host 03h could not process the initiate message 04h error receiving message from host 05h error sending message to host 06h error checking for message from host 07h remote system does not support CTERM 08h remote system does not support correct protocol version 09h did not receive BIND message from host 0Ah could not send BIND message to host 0Bh no more sessions available 0Ch session does not exist 0Dh not enough memory to complete operation 0Eh connection has broken SeeAlso: AX=0104h ----------690104----------------------------- INT 69 - DECnet DOS CTERM - DECnet STATUS AX = 0104h DX = session handle Return: AX = reason code (see AX=0103h) Note: use this call when AX=0103h returns a DECnet error SeeAlso: AX=0103h ----------690105----------------------------- INT 69 - DECnet DOS CTERM - OPEN SESSION AX = 0105h DS:BX -> ASCIZ node name ES:DX -> buffer for session control block (see INT 6A/AH=D0h) Return: AX <= 0 on error AX > 0 session handle SeeAlso: AX=0103h,AX=0106h,AX=010Ah ----------690106----------------------------- INT 69 - DECnet DOS CTERM - CLOSE SESSION AX = 0106h DX = session handle Return: AH = 00h good close other error code (see AX=0103h) SeeAlso: AX=0103h,AX=0105h ----------69010A----------------------------- INT 69 - DECnet DOS CTERM - GET SESSION CONTROL BLOCK SIZE AX = 010Ah Return: AX = length of session control block in bytes SeeAlso: AX=0105h ----------69010B----------------------------- INT 69 - DECnet DOS CTERM - GET DECnet SOCKET AX = 010Bh DX = session handle Return: AX > 0 DECnet socket for the session = 0 no match for handle ----------69010F----------------------------- INT 69 - DECnet DOS CTERM - DEINSTALL CTERM AX = 010Fh Return: AH = 00h succesful uninstall other error code Note: CTERM must have been the last TSR loaded in order to deinstall it SeeAlso: AX=0100h ----------690A------------------------------- INT 69 - DECnet DOS 2.1+ - DATA LINK LAYER AH = 0Ah AL = function 00h initialize 01h open portal 02h close portal 03h enable multicast address 04h disable multicast address 05h transmit 06h request transmit buffer 07h deallocate transmit buffer 08h read channel status 09h read datalink portal list 0Ah read information about a datalink portal 0Bh read and/or clear counters 0Ch request to boot from a network server 0Dh enable Ethernet channel 0Eh disable Ethernet channel 0Fh start MOP/send a System ID message 10h stop MOP 11h get DECPARM 12h set DECPARM 13h external loopback ES:BX -> Datalink Communication Block Return: AX = status 00h successful 01h hardware failed to initialize 02h channel state was not off (must be off to execute that command) 03h channel state is off (must be on to execute that command) 04h address not set 05h hardware missing 06h buffer too small 07h no more buffers available 08h no more resources available 09h promiscuous receiver active 0Ah non exclusive 0Bh unrecognized portal 0Ch protocol type in use 0Dh not a valid Multicast address 0Eh outstanding calls 0Fh hardware doesn't support receiving bad frames 10h none outstanding 11h no events 12h broken 13h buffer quota exceeded 14h already initialized 15h loopback failure SeeAlso: INT 6D"DECnet" Format of Datalink Communication Block Offset Type Description 00h WORD portal ID 02h 6 BYTEs source address 08h 6 BYTEs destination address 0Eh DWORD buffer pointer 12h WORD buffer length 14h WORD operation 16h BYTE pad flag (used on open) 00h no pad 01h pad 17h BYTE mode flag (used on open) 00h 802.3 01h Ethernet 02h promiscuous 18h DWORD line status change function 1Ch DWORD received data function 20h DWORD transmitted data function 24h BYTE maximum outstanding transmits/receives 25h 2 BYTEs protocol type 27h WORD buffers lost ----------696996----------------------------- INT 69 - ISR.COM v1.00 - SPECIFY INTERRUPT HANDLER AX = 6996h DS:DX -> interrupt handler or 0000h:0000h to disable Return: AX = 9669h Notes: ISR (Interrupt Service Reflector) is a TSR by Rich Bono which permits a program to provide hardware interrupt handlers even while being debugged with a debugger that swaps interrupt vectors during debugging. the interrupt vector which is to be reflected is set at installation time and cannot be changed ----------6A--------------------------------- INT 6A - OPTHELP.COM Notes: OPTHELP is an optionally-resident help system for SLR Systems's OPTASM assembler may be configured to use any interrupt from 60h to 7Fh (default 6Ah) ----------6A--------------------------------- INT 6A - DECnet DOS - LOCAL AREA TRANSPORT PROGRAM Note: the 3 bytes preceding the interrupt handler are "LAT"; this serves as the installation check ----------6A01--DHFF------------------------- INT 6A - DECnet DOS LOCAL AREA TRANSPORT - SEND BYTE AH = 01h DH = FFh AL = character DL = handle Return: AH >= 80h on error SeeAlso: AH=02h ----------6A02--DHFF------------------------- INT 6A - DECnet DOS LOCAL AREA TRANSPORT - READ BYTE AH = 02h DH = FFh DL = handle Return: AH < 80h if successful AL = character AH >= 80h on error SeeAlso: AH=01h ----------6A03--DHFF------------------------- INT 6A - DECnet DOS LOCAL AREA TRANSPORT - STATUS AH = 03h DH = FFh DL = handle Return: AH = status flags bit 5 transmit buffer empty 3 session in start state 2 session not active 1 unable to queue transmit data 0 receive data available ----------6AD0--DHFF------------------------- INT 6A - DECnet DOS LOCAL AREA TRANSPORT - OPEN SESSION AH = D0h DH = FFh AL = FFh no password = 0Fh password at ES:DI ES:BX -> LAT session control block (see below) ES:DI -> 16-byte blank-padded password Return: AH = 00h success DL = handle SeeAlso: AX=D000h Format of LAT Session Control Block: Offset Size Description 00h 18 BYTEs service name 12h 18 BYTEs node name (future use) 24h 18 BYTEs port name (future use) 36h DWORD -> session stopped post routine 3Ah DWORD -> service table overflow post routine 3Eh DWORD -> transmit post routine 42h DWORD -> receive post routine 46h WORD session status 04h circuit failure 08h stop slot received 48h WORD slot state (LAT driver use) 4Ah WORD local credits (LAT driver use) 4Ch DWORD -> VCB (LAT driver use) 50h WORD backward slot (LAT driver use) 52h WORD forward slot (LAT driver use) 54h WORD remote slot ID (LAT driver use) 56h WORD local slot ID (LAT driver use) 58h WORD slot byte count (LAT driver use) 5Ah BYTE remote credits (LAT driver use) 5Bh 255 BYTEs transmitted data slot 15Ah BYTE number of receive data slots (4 recommended) 15Bh BYTE number of occupied slots 15Ch BYTE index of next receive slot to use 15Dh BYTE index of current receive slot 15Eh WORD pointer to first received character 160h N WORDs pointers to receive slots (buffers); each is 259 bytes Note: set post routines to 0000h:0000h if polled operation will be used ----------6AD000DHFF------------------------- INT 6A - DECnet DOS LOCAL AREA TRANSPORT - CLOSE SESSION AX = D000h DH = FFh DL = handle Return: AX = 0000h successful = 0001h no such session = 0002h session not running, try again later SeeAlso: AH=D0h ----------6AD100DHFF------------------------- INT 6A - DECnet DOS LOCAL AREA TRANSPORT - SEND BREAK AX = D100h DH = FFh DL = handle Return: AX = 0000h if successful AH bit 7 set if unable to send break ----------6AD300DHFF------------------------- INT 6A - DECnet DOS LOCAL AREA TRANSPORT - RESET LAT COUNTERS AX = D300h DH = FFh SeeAlso: AX=D400h ----------6AD400DHFF------------------------- INT 6A - DECnet DOS LOCAL AREA TRANSPORT - COPY LAT COUNTERS AX = D400h DH = FFh CX = buffer size ES:BX -> buffer for LAT counters Return: AX = 0000h counters copied into buffer = FFFFh buffer too small SeeAlso: AX=D300h ----------6AD500DHFF------------------------- INT 6A - DECnet DOS LOCAL AREA TRANSPORT - GET NEXT LAT SERVICE NAME AX = D500h DH = FFh ES:BX -> 17-byte buffer for name Return: AH = 00h if successful ES:BX buffer filled AX = FFFFh if end of table or no name available Notes: use this function to get the names of the hosts on the network successive calls are necessary to get all names SeeAlso: AX=D600h ----------6AD600DHFF------------------------- INT 6A - DECnet DOS LOCAL AREA TRANSPORT - LAT SERVICE TABLE RESET AX = D600h DH = FFh Return: AX = number of service table entries BX = 0000h service table has not overflowed = FFFFh service table has overflowed SeeAlso: AX=D500h ----------6B0000----------------------------- INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - BUFFERED WRITE AX = 0000h CX = length ES:BX -> buffer Return: CX = number of bytes written Note: also supported by NPC NCSI SeeAlso: AX=0100h,AH=18h,INT 14/AH=19h ----------6B0100----------------------------- INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - BUFFERED READ AX = 0100h CX = length of buffer ES:BX -> buffer Return: CX = number of bytes read Note: also supported by NPC NCSI SeeAlso: AX=0000h,AH=19h,INT 14/AH=18h,INT 14/AX=FF02h ----------6B02------------------------------- INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - INSTALL CHECK AH = 02h AL nonzero Return: AL = 00h if present and OK Note: also supported by NPC NCSI SeeAlso: AX=0700h ----------6B0600----------------------------- INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - CONTROL AX = 0600h CX = command 02h send break 04h disconnect 06h hold Note: also supported by NPC NCSI ----------6B0700----------------------------- INT 6B - Novell NASI/NACS, Ungermann-Bass Net One SERIAL I/O - GET STATUS AX = 0700h Return: CH <> 00h if connection active Note: also supported by NPC NCSI SeeAlso: AH=02h,AH=10h ----------6B10------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - GET STATUS AH = 10h ??? Return: ??? SeeAlso: AX=0700h,AH=12h,AH=1Fh ----------6B11------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - ALLOCATE A VIRTUAL CIRCUIT AH = 11h ??? Return: ??? SeeAlso: AH=12h,AH=15h,AH=16h,AH=17h,AH=18h ----------6B12------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - VIRTUAL CIRCUIT STATUS AH = 12h ??? Return: ??? SeeAlso: AH=10h,AH=15h,AH=1Ah,AH=1Bh,AH=1Fh ----------6B13------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - SET/RETRIEVE REQUEST/REPLY SERVICE NAME AH = 13h ??? Return: ??? SeeAlso: AH=14h,AH=15h ----------6B14------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - SET/RETRIEVE SERVICE ADDRESS AH = 14h ??? Return: ??? SeeAlso: AH=13h,AH=15h,AH=21h ----------6B15------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - SET/RETRIEVE VIRTUAL CIRCUIT CONFIG AH = 15h ??? Return: ??? SeeAlso: AH=13h,AH=14h ----------6B16------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - LOG AND/OR INITIALIZE VIRTUAL CIRCUIT AH = 16h ??? Return: ??? SeeAlso: AH=11h,AH=12h,AH=17h ----------6B17------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - DISCONNECT A VIRTUAL CIRCUIT AH = 17h ??? Return: ??? SeeAlso: AH=11h,AH=16h ----------6B18------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - WRITE DATA ON A VIRTUAL CIRCUIT AH = 18h ??? Return: ??? SeeAlso: AX=0000h,AH=12h,AH=19h ----------6B19------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - READ DATA ON A VIRTUAL CIRCUIT AH = 19h ??? Return: ??? SeeAlso: AX=0100h,AH=12h,AH=18h ----------6B1A------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - RECEIVE STATUS AH = 1Ah ??? Return: ??? SeeAlso: AH=12h,AH=1Bh ----------6B1B------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - TRANSMIT STATUS AH = 1Bh ??? Return: ??? SeeAlso: AH=12h,AH=1Ah ----------6B1C------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - RECEIVE BUFFER CONTROL AH = 1Ch ??? Return: ??? SeeAlso: AH=1Dh,AH=1Eh ----------6B1D------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - TRANSMIT BUFFER CONTROL AH = 1Dh ??? Return: ??? SeeAlso: AH=1Ch,AH=1Eh ----------6B1E------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - ISSUE CONTROL REQUEST AH = 1Eh ??? Return: ??? SeeAlso: AH=1Ch,AH=1Dh ----------6B1F------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - EXTERNAL STATUS AH = 1Fh ??? Return: ??? SeeAlso: AH=10h,AH=12h ----------6B21------------------------------- INT 6B - NPC NCSI EXTENDED SERIAL I/O - QUERY NAME SERVICE AH = 21h ??? Return: ??? SeeAlso: AH=14h ----------6B6B------------------------------- INT 6B - Tandy SCHOOLMATE PLUS - API AH = 6Bh AL = E0h to FFh ----------6B--------------------------------- INT 6B - VIRUS - "Saddam" - ??? SeeAlso: INT 21/AX=FFFFh,INT 61"VIRUS",INT 70"VIRUS" ----------6C--------------------------------- INT 6C - system resume vector (CONVERTIBLE) ----------6C--------------------------------- INT 6C - DOS 3.2 Realtime Clock update ----------6C--------------------------------- INT 6C - DECnet DOS network scheduler SeeAlso: INT 6D"DECnet",INT 6E"DECnet" ----------6D--------------------------------- INT 6D - VGA - internal Note: used by IBM, Paradise, Video7, and NCR ----------6D--------------------------------- INT 6D - ATI VGA Wonder - VIDEO BIOS ENTRY POINT points at the original INT 10 entry point set up by the ATI BIOS SeeAlso: INT 10 ----------6D--------------------------------- INT 6D - DECnet DOS (before 2.1) - DATA LINK LAYER PROGRAM AH = function ??? Return: ??? SeeAlso: INT 69/AH=0Ah,INT 6C"DECnet",INT 6E"DECnet" ----------6E--------------------------------- INT 6E - DECnet DOS - DECnet NETWORK PROCESS API Notes: this is the main DECnet DOS access, and is described in Digital manual AA-EB46B-TV ("DECnet-DOS Programmer's Reference Manual") there is a signature/data area immediately prior to the interrupt handler which may be used as an installation check Format of signature area: Offset Size Description -5 BYTE major version number -4 BYTE minor version number -3 3 BYTEs signature (ASCII "DNP") ----------6F----BP0012----------------------- INT 6F - HP ES-12 EXTENDED BIOS - READ CMOS MEMORY BP = 0012h AH = 22h BL = address of CMOS byte to read Return: AH = status AL = byte read BP, DS destroyed SeeAlso: BP=0012h/AH=24h ----------6F----BP0012----------------------- INT 6F - HP ES-12 EXTENDED BIOS - WRITE CMOS MEMORY BP = 0012h AH = 24h BL = address of CMOS byte to write AL = new value Return: AH = status BP, DS destroyed SeeAlso: BP=0012h/AH=22h ----------6F--------------------------------- INT 6F - Novell NetWare - PCOX API (3270 PC terminal interface) ----------6F00------------------------------- INT 6F - 10-NET - LOGIN AH = 00h DS:DX -> login record (see below) Return: CL = security level AX = status 0000h successful 01FFh time out on response 02FFh network (hardware) error 03FFh invalid password 04FFh local resource not available 05FFh server resource not available 06FFh already logged in under different name 07FFh login security failure (node) 08FFh not logged in 09FFh position calc error 0AFFh receive subfunction not = send subfunction (i.e. read, write) 0BFFh request function not in range 0CFFh no more server file handle entries left 0DFFh no more shared file table entries left 0EFFh no more user file handle entries left 0FFFh chat permit not on 10FFh not a server on request 11FFh no transporter board error 12FFh time out on send 13FFh item not found (spool item not on queue) 14FFh DOS access incompatible 15FFh record already locked 16FFh invalid parameter 17FFh record lock time out error 18FFh currently spooling to named device 19FFh dropped receive message (throttle) 1AFFh open sharing violation 1BFFh no more tuf entries left 1CFFh not file owner on open 1DFFh read security not passed 1EFFh write security not passed 1FFFh group security not passed 20FFh security file failure 21FFh activity file failure 22FFh spool cntrl file failure 23FFh device not mounted (spooling) 24FFh spool file has not been terminated 25FFh device not mounted or is not being shared 26FFh duplicate node id 27FFh file not found error 28FFh no more files 29FFh unknown internal system error 2AFFh print queue is full or corrupted 2BFFh invalid function 2CFFh invalid handle 2DFFh too many files opened 2EFFh path not found 2FFFh named file is active /* I've gotten one submission which says FFxxh, and another with xxFFh */ /* I don't know which way around these should be, does somebody else know? */ FF01h timeout FF02h network error FF03h invalid password FF04h no local buffer FF05h superstation not available FF06h node already logged in FF07h login not valid from this node FF08h node ID already in use FF16h invalid parameter (bad length, invalid node ID, etc) FF17h record locked by another user FF18h sent message has been dropped SeeAlso: AH=01h Format of login record: Offset Size Description 00h 8 BYTEs user name 08h 8 BYTEs password 10h 12 BYTEs name of SuperStation ----------6F01------------------------------- INT 6F - 10-NET - LOGOFF AH = 01h DS:DX -> superstation ID or nulls (12 bytes) Return: CX = number of files closed AX = status (see AH=00h) FF08h superstation ID not already logged in SeeAlso: AH=00h ----------6F02------------------------------- INT 6F - 10-NET - STATUS OF NODE AH = 02h DS:DX -> 512-byte status record (see below) Return: CF set on error AX = error code (see AH=00h) CF clear if successful Format of node status record: Offset Size Description 00h 8 BYTEs user name (0 if none) 08h BYTE station type 00h workstation 01h superstation 02h gateway station 03h gateway active 04h logged into multiple superstations 05h reserved 09h 24 BYTEs list of superstations logged into more than one superstation 21h 12 BYTEs node ID 2Dh WORD message count for this station (send for user node, receive for superstations) ---for superstations only--- 2Fh WORD drives allocated (bit 0=A:, bit 1=B:,...) 31h BYTE user service flag bit 7: gate 6: print permit on 4: SUBMIT is on 3: mail waiting for node 2: calendar waiting for you 1: news waiting for you 0: mail waiting for you 32h BYTE printers allocated (bit 0=LPT1,...) 33h BYTE number of unprinted spool files 34h BYTE number of opened files 35h BYTE number of logged on nodes 36h BYTE primary drive (1=A:) 37h BYTE reserved 38h N BYTEs list of logged on node IDs (each 12 bytes, max 37 IDs) 1F4h 3 BYTEs time: sec/min/hrs 1F7h 3 BYTEs date: day/mon/year-1980 ----------6F03------------------------------- INT 6F - 10-NET - GET ADDRESS OF CONFIGURATION TABLE AH = 03h DS:DI -> node ID (optional) Return: ES:BX -> configuration table SeeAlso: AH=13h Format of configuration table: Offset Size Description -41 WORD local device table address -39 WORD extended network error mapping table address -37 WORD shared device table address -35 WORD mounted device table address -33 BYTE receive buffer counter -32 BYTE collect buffer counter -31 WORD TUF address -29 BYTE enable flag -28 BYTE FCB keep flag -27 WORD reserved ---up to here, 10-Net v3.3--- -25 WORD count of dropped Send6F -23 WORD buffer start address -21 WORD comm driver base address -19 WORD send/receive retry count -17 BYTE number of 550ms loops before timeout -16 WORD UFH address -14 WORD CDIR address -12 WORD LTAB address -10 WORD SFH address -8 WORD FTAB address -6 WORD RLTAB address -4 WORD SMI address -2 WORD NTAB address 00h WORD address of first CT_DRV 02h BYTE number of DRV entries 03h 8 BYTEs login name 0Bh 12 BYTEs node ID (blank-padded) 17h 6 BYTEs node address 1Dh BYTE flag 1Eh BYTE CT_CFLG (chat permit) bit 1: sound bell bit 0: CHAT permit 1Fh BYTE CT_PSFLG bit 5: PRINT permit bit 4: KB initiated bit 3: CHAT called FOXPTRM bit 2: SUBMIT active bit 1: SUBMIT received bit 0: SUBMIT permit 20h BYTE in 10Net flag 21h WORD receive message count 23h WORD send message count 25h WORD retry count 27h WORD failed count 29h WORD driver errors 2Bh WORD dropped responses/CHATs 2Dh 9 BYTEs LIST ID/NTAB address (3 entries--LPT1-3) 36h 6 BYTEs AUX ID/NTAB address (2 entries--COM1-2) 3Ch BYTE active CB channel 3Dh BYTE received 6F messages on queue 3Eh 9 BYTEs activity counters for channels 1-9 ---beyond here, 10-Net v3.3--- 47h BYTE bit 0 = RS232 gate 1 = Send6F gate (user set) 48h DWORD pointer into gate (user set) 4Ch DWORD pointer into 10Net send 50h N WORDs addresses of timer blocks ----------6F04------------------------------- INT 6F - 10-NET - SEND AH = 04h DS:BX -> record 12 BYTEs receiving node's ID if first byte has high-order bit set, message is directed to the CT_RGATE vector at the receiver if second byte is 00h, first byte is taken as a CB channel number and delivered to all nodes on same channel WORD length of data at DX DS:DX -> data (max 1024 bytes) Return: CF set on error AX = error code (see AH=00h) CF clear if successful SeeAlso: AH=05h ----------6F05------------------------------- INT 6F - 10-NET - RECEIVE AH = 05h CX = number of seconds before timeout DS:DX -> receive buffer (see below) Return: CF set on error AX = error code (see AH=00h) CF clear if successful AH = FEh if dequeued message is a CB message SeeAlso: AH=04h Format of receive buffer: Offset Size Description 00h 12 BYTEs sending node's ID 0Ch WORD length of message 0Eh N BYTEs message (maximum 1024 bytes) ----------6F07------------------------------- INT 6F - 10-NET - LOCK HANDLE AH = 07h BX = file handle CX:DX = starting offset in file SI = record length Return: CF set on error AX = error code (see also AH=00h) 0002h file not found CF clear if successful SeeAlso: AH=08h,INT 21/AH=5Ch ----------6F08------------------------------- INT 6F - 10-NET - UNLOCK HANDLE AH = 08h BX = file handle AL = mode 00h unlock all 01h unlock record at CX:DX Return: CF set on error AX = error code (see also AH=00h) 0002h file not found CF clear if successful SeeAlso: AH=07h,INT 21/AH=5Ch ----------6F09------------------------------- INT 6F - 10-NET - SUBMIT AH = 09h DS:BX -> submit record (see below) Format of submit record: Offset Size Description 00h 12 BYTEs destination node ID (must be logged in) 0Ch WORD length+2 of following 'command line' text 0Eh N BYTEs command line text (<=100 bytes), system adds CR ----------6F0A------------------------------- INT 6F - 10-NET - CHAT AH = 0Ah DS:BX -> control parameters (see below) DS:DX -> chat message (see below) Format of control parameters: Offset Size Description 00h 8 BYTEs sender ID, defaults to node's userID if nulls 08h 8 BYTEs destination user ID, 'EVERYONE' may be used 10h 12 BYTEs destination node ID Format of chat message: Offset Size Description 00h WORD length+2 of following text 02h N BYTEs text, max 101 bytes ----------6F0B------------------------------- INT 6F - 10-NET - LOCK SEMAPHORE, RETURN IMMEDIATELY AH = 0Bh AL = drive number or 0 ES:SI = Ethernet address or 0 DS:BX -> 31-byte ASCIZ semaphore name Return: AL = status 00h successful 01h semaphore currently locked 02h server not responding 03h invalid semaphore name 04h semaphore list is full 05h invalid drive ID 06h invalid Ethernet address 07h not logged in 08h write to network failed 09h semaphore already logged in this CPU Note: same as INT 60/AH=12h SeeAlso: AH=0Ch,INT 60/AH=12h ----------6F0C------------------------------- INT 6F - 10-NET - UNLOCK SEMAPHORE AH = 0Ch AL = drive number or 0 ES:SI = Ethernet address or 0 DS:BX -> 31-byte ASCIZ semaphore name Return: AL = status (see also AH=0Bh) 01h semaphore not locked Note: same as INT 60/AH=13h SeeAlso: AH=0Bh,INT 60/AH=13h ----------6F0D------------------------------- INT 6F - 10-NET - WHO AH = 0Dh AL = type code 01h return superstations only 02h return non-superstations only otherwise return all CX = length of data DS:DX -> array of records to be filled (see below) Return: CL = number of records returned (responding stations) Format of station record: Offset Size Description 00h 12 BYTEs node ID 0Ch BYTE flags bit 1 = workstation 2 = superstation 3 = xgate 4 = active gate ---if AL = 01h--- 0Dh BYTE version number WORD level number of 10Net software in responding node ---if AL = 02h--- 0Dh 8 BYTEs user ID 15h BYTE version number 16h WORD level number ----------6F0E------------------------------- INT 6F - 10-NET - SPOOL/PRINT AH = 0Eh DS:DX -> spool/print record (see below) Return: CF set on error AX = error code (see also AH=00h) FF17h device not mounted FF18h already spooling to named device CF clear if successful Format of Spool/Print record: Offset Size Description 00h WORD operation code 00h initiate spool 01h abort print 02h close spool 03h delete spool 04h print 05h get report info 06h set chat template 07h queue 08h return queue 09h queue non-spooled file for printing 02h 11 BYTEs file name in FCB format ---if operation code = 00h or 06h--- 0Dh BYTE notification bit 7: queue to top bit 6: do ID page bit 5: no form feed bit 4: reserved bit 3: explicity queuing only bit 2: notify at print completion bit 1: notify server operator/reply bit 0: notify at print start 0Eh BYTE days to keep (FFh=forever) 0Fh BYTE bits 0,1: device (1=LPT1) bits 4-7: remote drive to store spool file (1=A,...) 10h WORD length of following data area 12h N BYTEs up to 64 bytes of description ---if operation code = 03h--- 0Dh 8 BYTEs user ID to associate with filename ---if operation code = 04h--- 0Dh WORD block number 0Fh 8 BYTEs user ID to associate with filename ---if operation code = 05h--- 0Dh BYTE RRN to start retrieve 0Eh BYTE bits 0,1: local print device (LPTx) bit 3: if set, return entries for all users 0Fh WORD length of following area 11h N BYTEs up to 1500 bytes to receive $SCNTL records returned ---if operation code = 07h--- 0Dh BYTE queue number 0Eh BYTE bits 0,1: local print device (LPTx) 0Fh WORD number of bytes of test print to be done 11h BYTE code: 01h print device 02h test print count 03h prn ---if operation code = 08h--- 0Dh BYTE queue location or $SCNTL location to start access returns next item for access: 00h-7Fh queued items 80h-FEh non-queued, non-printed items FFh no more items 0Eh WORD unused 10h WORD length of following area 12h N BYTEs up to 64 bytes to receive $SCNTL records ---if operation code = 09h--- 0Dh 3 BYTEs unused 10h N BYTEs path to non-spooled file to be queued for printing Format of $SCNTL record: Offset Size Description 00h 8 BYTEs user ID 08h 11 BYTEs filename in FCB format 13h 6 BYTEs node ID 19h 3 BYTEs creation date 1Ch BYTE flags bit 7: queue to top 6: do ID page 5: no form feed at end 4: reserved 3: explicit queueing only 2: notify at completion 1: notify server operator/reply 0: notify at start 1Dh BYTE retention time in days 1Eh BYTE printing device (LPTx) 1Fh 3 BYTEs date last printed (0 = never) 22h BYTE device containing spoolfile 23h WORD bytes to print for test print 25h WORD block number to start print 27h BYTE reserved ----------6F10------------------------------- INT 6F - 10-NET - ATTACH/DETACH PRINTER AH = 10h AL = subfunction 00h initiate spooling if LPT1 is mounted 01h terminate spooling if LPT1 is mounted SeeAlso: INT 21/AX=5D08h ----------6F11------------------------------- INT 6F - 10-NET - LOCK FCB AH = 11h AL = mode 01h sequential 02h random 03h random block CX = number of records DS:DX -> FCB (see INT 21/AH=0Fh) Return: CF set on error AX = error code (see also AH=00h) 0002h file not found CF clear if successful SeeAlso: AH=12h ----------6F12------------------------------- INT 6F - 10-NET - UNLOCK FCB AH = 12h AL = mode 00h sequential 01h random 02h random block CX = number of records DS:DX -> FCB (see INT 21/AH=0Fh) Return: CF set on error AX = error code (see also AH=00h) 0002h file not found CF clear if successful SeeAlso: AH=11h ----------6F13------------------------------- INT 6F - 10-NET v3.3 - GET REMOTE CONFIGURATION TABLE ADDRESS AH = 13h DS:DX -> node ID, 12 bytes blank-padded Return: CF set on error AX = error code (see AH=00h) CF clear if successful ES:BX = configuration table address on given machine SeeAlso: AH=03h ----------6F14------------------------------- INT 6F - 10-NET v3.3 - GET REMOTE MEMORY AH = 14h BX:SI = address of remote memory CX = length (<=1024 bytes) DS:DX -> node ID, 12 bytes blank-padded DS:DI -> area to receive remote memory image Return: CF set on error AX = error code (see AH=00h) CF clear if successful CX = amount of memory copied to DS:SI ----------6F1501----------------------------- INT 6F - 10-NET v3.3 - GET SHARED DEVICE ENTRY AX = 1501h BX = zero-based index DS:SI -> node ID, 12 bytes blank-padded ES:DI -> 85-byte buffer for shared device table entry (see below) Return: CF set on error AX = error code (see AH=00h) CF clear if successful ES:DI buffer contains shared device table entry of BXth device: SeeAlso: AX=1502h,AX=1503h Format of shared device table entry: Offset Size Description 00h 8 BYTEs device 08h 8 BYTEs alias 10h 64 BYTEs path 50h 8 BYTEs password 58h BYTE access 59h 4 BYTEs mask ----------6F1502----------------------------- INT 6F - 10-NET v3.3 - SET SHARED DEVICE ENTRY AX = 1502h DS:SI -> node ID, 12 bytes blank-padded ES:DI -> valid shared device table entry Return: CF set on error AX = error code (see AH=00h) CF clear if successful SeeAlso: AX=1501h,AX=1503h ----------6F1503----------------------------- INT 6F - 10-NET v3.3 - DELETE SHARED DEVICE ENTRY AX = 1503h BX = zero-based index DS:SI -> node ID, 12 bytes blank-padded Return: CF set on error AX = error code (see AH=00h) CF clear if successful SeeAlso: AX=1501h,AX=1502h ----------6F17------------------------------- INT 6F - 10-NET v3.3 - MOUNT AH = 17h AL = local drive number (0=A:) BL = remote drive letter or '1'..'3' for LPTn or '4' or '5' for COMx DS:DX -> node ID, 12 bytes blank-padded Return: CF set on error AX = error code (see AH=00h) CF clear if successful SeeAlso: AH=18h ----------6F18------------------------------- INT 6F - 10-NET v3.3 - UNMOUNT AH = 18h AL = local drive number (0=A:) BL = type 00h disk 01h-03h LPTn 04h,05h COMx Return: CF set on error AX = error code (see AH=00h) CF clear if successful SeeAlso: AH=17h ----------70--------------------------------- INT 70 - IRQ8 - CMOS REAL-TIME CLOCK Notes: this interrupt is called when the real-time clock chip generates an alarm or periodic interrupt, among others. The periodic interrupt occurs 1024 times per second, although many BIOSes turn it off in the INT 70h handler unless in an event wait (see INT 15/AH=83h or INT 15/AH=86h). may be masked by setting bit 0 on I/O port A1h SeeAlso: INT 08,INT 0F"HP 95LX",INT 15/AH=01h"Amstrad",INT 15/AH=83h SeeAlso: INT 15/AH=86h,INT 1A/AH=02h,INT 58"DESQview" ----------70--------------------------------- INT 70 - VIRUS "Stupid" - ??? SeeAlso: INT 6B"VIRUS",INT E0"VIRUS" ----------71--------------------------------- INT 71 - IRQ9 - REDIRECTED TO INT 0A BY BIOS Notes: may be masked by setting bit 1 on I/O port A1h the default BIOS handler invokes INT 0A for compatibility, since the pin for IRQ2 on the PC expansion bus became the pin for IRQ9 on the AT expansion bus. under DESQview, only the INT 15h vector and BASIC segment address (the word at 0000h:0510h) may be assumed to be valid for the handler's process SeeAlso: INT 0A,INT 59 ----------72--------------------------------- INT 72 - IRQ10 - RESERVED Note: may be masked by setting bit 2 on I/O port A1h SeeAlso: INT 5A ----------73--------------------------------- INT 73 - IRQ11 - RESERVED Note: may be masked by setting bit 3 on I/O port A1h SeeAlso: INT 5B ----------74--------------------------------- INT 74 - IRQ12 - POINTING DEVICE (PS) Notes: may be masked by setting bit 4 on I/O port A1h under DESQview, only the INT 15h vector and BASIC segment address (the word at 0000h:0510h) may be assumed to be valid for the handler's process SeeAlso: INT 33,INT 5C ----------75--------------------------------- INT 75 - IRQ13 - MATH COPROCESSOR EXCEPTION (AT and up) redirected to INT 02 by the BIOS, for compatibility with the PC Notes: may be masked by setting bit 5 on I/O port A1h not all clones wire the coprocessor to generate this IRQ; some systems generate an NMI (see INT 02) or assert the -ERROR pin on the CPU (see INT 10"COPROCESSOR") under DESQview, only the INT 15h vector and BASIC segment address (the word at 0000h:0510h) may be assumed to be valid for the handler's process SeeAlso: INT 10"COPROCESSOR",INT 5D ----------76--------------------------------- INT 76 - IRQ14 - HARD DISK CONTROLLER (AT and later) Note: may be masked by setting bit 6 on I/O port A1h SeeAlso: INT 0E"IRQ6",INT 5E ----------77--------------------------------- INT 77 - IRQ15 - RESERVED (AT,PS) Note: may be masked by setting bit 7 on I/O port A1h SeeAlso: INT 5F ----------77--------------------------------- INT 77 - IRQ15 - POWER CONSERVATION (Compaq SLT/286) Note: may be masked by setting bit 7 on I/O port A1h SeeAlso: INT 15/AX=4600h,INT 5F ----------78--------------------------------- INT 78 - UofSalford DBOS DOS extender - API BYTE following INT instruction contains function code 03h switch to protected mode 1Eh set real-mode memory size (specify how much real-mode memory to leave free when running FTN77 programs) 22h uninstall ??? Return: ??? Note: DBOS supports functions 00h through 50h ----------78--------------------------------- INT 78 - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ0 Note: this vector is overwritten when GO32 starts but is not restored SeeAlso: INT 08,INT 10/AH=FFh"GO32",INT 79"GO32" ----------78--------------------------------- INT 78 - AutoCAD 10 ADI for Plotters AX = function 0001h initialize comm port and reset plotter BX = ??? (comm port?) 0002h close plotter 0003h move (pen up) BX = new X position CX = new Y position 0004h move (pen down) BX = new X position CX = new Y position 0005h select pen BX = pen number 0006h select drawing speed BX = drawing speed N 0007h select line style BX = line style N 0008h return pen to pen carrier??? (called before change-pen cmd) Return: ??? SeeAlso: INT 7A"AutoCAD",INT 7B"AutoCAD" ----------78--------------------------------- INT 78 - ADP-60 IDE controller - ORIGINAL INT 13 SeeAlso: INT 79"ADP-60" ----------7800------------------------------- INT 78 - TARGA.DEV - CMC International SCSI device driver - SET I/O PORT AH = 00h DX = interface board I/O port Return: CF set on error AL = error code 00h illegal command given to SCSI code 01h invalid I/O port specified (must be from 100H to 3F8H, and must be on an 8-port boundary) 02h invalid DMA channel specified (must be from 1 to 3) 03h invalid SCSI board number specified (must be from 0 to 7) 04h error from data register test during self-test 05h SCSI input signals not all 0 when SCSI RST activated 06h SCSI input signals not all 0 before selecting a SCSI device 07h BSY signal is active; SCSI bus is busy 08h SCSI board not selected, BSY signal did not come on in response to raising SEL 09h time-out waiting for status state, signifying end of DMA transfer Note: if this routine is not called, the port is the driver's default (usually 0280h or 0300h) an installation check is performed by TARGA.DEV upon initialization by checking for the string "SCSI" at offset 03h into the interrupt handler SeeAlso: AH=01h,AH=02h ----------7801------------------------------- INT 78 - TARGA.DEV - GET I/O PORT AH = 01h Return: DX = current interface board I/O port SeeAlso: AH=00h,AH=03h"TARGA" ----------7802------------------------------- INT 78 - TARGA.DEV - SET DMA CHANNEL AH = 02h AL = interface board DMA channel Return: CF set on error AL = error code (see AH=00h) Note: if this routine is not called, the DMA channel is the driver's default (usually 3) SeeAlso: AH=00h,AH=03h"TARGA" ----------7803------------------------------- INT 78 - TARGA.DEV - GET DMA CHANNEL AH = 03h Return: AL = current interface board DMA channel SeeAlso: AH=01h,AH=02h ----------7804------------------------------- INT 78 - TARGA.DEV - SET SCSI DEVICE NUMBER AH = 04h AL = SCSI device number Return: CF set on error AL = error code (see AH=00h) Note: if this routine is not called, the device number used is the driver's default (usually 0) SeeAlso: AH=02h,AH=05h ----------7805------------------------------- INT 78 - TARGA.DEV - GET SCSI DEVICE NUMBER AH = 05h Return: AL = current SCSI device number SeeAlso: AH=03h"TARGA",AH=04h ----------7806------------------------------- INT 78 - TARGA.DEV - SET/CLEAR EARLY RETURN MODE AH = 06h AL = 00h clear early return mode = 01h set early return mode Note: if early return mode is set then SCSI will return with no errors when the last DMA transfer is started in a call with AH=13h or AH=14h if this routine is not called, early return mode is cleared SeeAlso: AH=13h,AH=14h,AH=15h ----------7808------------------------------- INT 78 - TARGA.DEV - INTERFACE BOARD SELF-TEST AH = 08h Return: CF set on error AL = error code (see AH=00h) Note: the SCSI bus is also reset SeeAlso: AH=09h ----------7809------------------------------- INT 78 - TARGA.DEV - RESET SCSI BUS AH = 09h Return: AL = error code if carry set (see AH=00h) SeeAlso: AH=08h ----------7810------------------------------- INT 78 - TARGA.DEV - SEND SCSI COMMAND AH = 10h DS:SI -> command bytes Return: AH = SCSI status byte CF clear if successful AL = SCSI message byte CF set on error AL = error code (see AH=00h) SeeAlso: AH=11h,INT 21/AX=4403h"ST-01" Format of SCSI Command: Offset Size Description 00h BYTE length of command 01h ??? command bytes ----------7811------------------------------- INT 78 - TARGA.DEV - SEND SCSI COMMAND, RECEIVE DATA (PROGRAMMED I/O) AH = 11h DS:SI -> command bytes ES:BX -> data storage area CX = number of data bytes to transfer Return: AH = SCSI status byte CF clear if successful AL = SCSI message byte CF set on error AL = error code (see AH=00h) Note: this command receives data internally one byte at a time SeeAlso: AH=10h,AH=13h Format of SCSI Command: Offset Size Description 00h BYTE length of command 01h ??? command bytes ----------7812------------------------------- INT 78 - TARGA.DEV - SEND SCSI COMMAND AND DATA (PROGRAMMED I/O) AH = 12h DS:SI -> command bytes ES:BX -> data storage area CX = number of data bytes to transfer Return: AH = SCSI status byte CF clear if successful AL = SCSI message byte CF set on error AL = error code (see AH=00h) Note: this command sends data internally one byte at a time SeeAlso: AH=14h Format of SCSI Command: Offset Size Description 00h BYTE length of command 01h ??? command bytes ----------7813------------------------------- INT 78 - TARGA.DEV - SEND SCSI COMMAND, RECEIVE DATA (DMA) AH = 13h DS:SI -> command bytes ES:BX -> data storage area DX:CX = number of data bytes to transfer Return: AH = SCSI status byte (if early return mode is clear) CF clear if successful AL = SCSI message byte (if early return mode is clear) CF set on error AL = error code (see AH=00h) Note: this command receives data using DMA SeeAlso: AH=11h,AH=12h Format of SCSI Command: Offset Size Description 00h BYTE length of command 01h ??? command bytes ----------7814------------------------------- INT 78 - TARGA.DEV - SEND SCSI COMMAND AND DATA (DMA) AH = 14h DS:SI -> command bytes ES:BX -> data storage area DX:CX = number of data bytes to transfer Return: AH = SCSI status byte (if early return mode is clear) CF clear if successful AL = SCSI message byte (if early return mode is clear) CF set on error AL = error code (see AH=00h) Note: this command sends data using DMA SeeAlso: AH=12h,AH=13h Format of SCSI Command: Offset Size Description 00h BYTE length of command 01h ??? command bytes ----------7815------------------------------- INT 78 - TARGA.DEV - FINISH DATA TRANSFER (DMA) AH = 15h Return: AH = SCSI status byte CF clear if successful AL = SCSI message byte CF set on error AL = error code (see AH=00h) Note: if AH=06h was previously called to set the early return mode, this function finishes a command AH=13h or AH=14h which returned before the last DMA transfer was finished SeeAlso: AH=06h,AH=13h,AH=14h ----------79--------------------------------- INT 79 - AVATAR.SYS - FAST GET KEYSTROKE Return: CF set if no keystroke available AX = FFFFh CF clear if key pressed AX = keystroke Notes: if a keystroke is available, it is removed from the keyboard buffer before being returned AVATAR.SYS is a CON driver by George Adam Stanislav which interprets AVATAR command codes just as ANSI.SYS interprets ANSI commands SeeAlso: INT 29 ----------79--------------------------------- INT 79 - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ1 Note: this vector is overwritten when GO32 starts but is not restored SeeAlso: INT 09,INT 78"GO32",INT 7A"GO32" ----------79--------------------------------- INT 79 U - ADP-60 IDE adapter - ??? SeeAlso: INT 78"ADP-60" ----------790001----------------------------- INT 79 U - AutoCAD Device Interface - DIGITIZER - INITIALIZE AX = 0001h Return: AX = 0001h ??? self-test result??? BX = 0001h SeeAlso: AX=0002h,AX=0003h,INT 7A"AutoCAD" ----------790002----------------------------- INT 79 U - AutoCAD Device Interface - DIGITIZER - CLOSE AX = 0002h SeeAlso: AX=0001h,AX=0003h ----------790003----------------------------- INT 79 U - AutoCAD Device Interface - DIGITIZER - GET DIGITIZER STATUS AX = 0003h Return: AX = button state 0002h no button pressed BX = X coordinate CX = Y coordinate 0003h Pick button (0,A,B,C,D) pressed BX = X coordinate CX = Y coordinate 0005h other button (1-9) pressed BX = number of button - 1 CX = X coordinate DX = Y coordinate Note: these return values are valid for the Houston Instruments HiPad Plus 9236 digitizer with a 16-button cursor SeeAlso: AX=0001h,AX=0002h ----------7A--------------------------------- INT 7A U - Topware Network Operating System - ??? AL = ??? ??? Return: ??? SeeAlso: INT 21/AH=FFh"Topware",INT 2F/AX=FF00h ----------7A--------------------------------- INT 7A - AutoCAD Device Interface ??? SeeAlso: INT 61/AX=0007h"OPTIMA",INT 78"AutoCAD",INT 79/AX=0001h SeeAlso: INT 7B"AutoCAD" ----------7A--------------------------------- INT 7A - X.PC Packet software interface ES:BX -> parameter block SeeAlso: INT 60/AX=01FFh ----------7A--------------------------------- INT 7A - Novell NetWare - LOW-LEVEL API - Notes Note: this interrupt is used for IPX/SPX access in NetWare versions through 2.0a; in later versions, you should use INT 2F/AX=7A00h to get an entry point even though INT 7A still exists. For both INT 7A and the FAR entry point, BX contains the function number; IPX is sometimes called internally with BX bit 15 set. SeeAlso: INT 2F/AX=7A00h,INT 64"Novell",INT 7A/BX=0000h ----------7A--------------------------------- INT 7A - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ2 Note: this vector is overwritten when GO32 starts but is not restored SeeAlso: INT 0A,INT 79"GO32",INT 7B"GO32" ----------7A----BX0000----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - OPEN SOCKET BX = 0000h AL = mode 00h open until close or terminate FFh open until close DX = socket number (high byte in DL) 0000h dynamic allocation else socket to open Return: AL = return code 00h success DX = socket number FEh socket table full FFh socket already open SeeAlso: BX=0001h ----------7A----BX0001----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - CLOSE SOCKET BX = 0001h DX = socket (high byte in DL) SeeAlso: BX=0000h ----------7A----BX0002----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - GET LOCAL TARGET BX = 0002h ES:SI -> target internetwork address ES:DI -> 6-byte buffer for local target Return: AL = return code 00h success CX = expected one-way transfer time (clock ticks) ES:DI -> local target FAh unsuccessful Note: The internetwork address consists of a 4-byte network address followed by a 6-byte node address. The local target is only a 6-byte node address. If the target is in the same network, the local target is just the node address of target; otherwise, the local target is the node address of the bridge that leads to the target. SeeAlso: BX=0009h ----------7A----BX0003----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - SEND PACKET BX = 0003h ES:SI -> Event Control Block (see below) SeeAlso: BX=0004h,BX=000Fh Format of Event Control Block: Offset Size Description 00h DWORD Link 04h DWORD -> Event Service Routine (00000000h if none) 08h BYTE in use flag 09h BYTE completion code 0Ah WORD socket (high byte first [big-endian]) 0Ch 4 BYTES IPX workspace 10h 12 BYTES driver workspace 1Ch 6 BYTES immediate local node address 22h WORD fragment count 26h var fragment descriptors Offset Size Description 00h DWORD -> fragment data 04h WORD size of fragment in bytes. Notes: ESR is a far procedure that is called when the ECB has been handled. On call, the in use flag is zero if the ECB has been handled, non-zero otherwise. If the flag is zero, the completion code holds the result of the event: 00h success F9h event should not be cancelled FCh cancelled FDh malformed packet FEh packet undeliverable FFh physical error the first fragment should start with an IPX header all fragments are concatenated and sent in one piece node address FF FF FF FF FF FF broadcasts to all nodes Event Service Routine called with: AL = caller's identity (00h = AES, FFh = IPX) ES:SI -> event control block interrupts disabled Format of IPX header: Offset Size Description 00h WORD checksum (high byte first [big-endian]) 02h WORD length in bytes (high byte first) of total packet 04h BYTE transport control 05h BYTE packet type 00h unknown packet type 01h routing information packet 02h echo packet 03h error packet 04h packet exchange packet (always use this one) 05h SPX packet 11h (used internally) 06h 10 BYTES destination internetwork address 10h WORD destination socket (high byte first) 12h 10 BYTES source internetwork address 1Ch WORD source socket ----------7A----BX0004----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - LISTEN FOR PACKET BX = 0004h ES:SI -> Event Control Block (see BX=0003h) SeeAlso: BX=0003h ----------7A----BX0005----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - SCHEDULE IPX EVENT BX = 0005h AX = delay time ES:SI -> Event Control Block (see BX=0003h) SeeAlso: BX=0006h,BX=0007h,BX=0008h ----------7A----BX0006----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - CANCEL EVENT BX = 0006h ES:SI -> Event Control Block (see BX=0003h) Return: AL = return code 00h success F9h event in use FFh unsuccessful, event not in use SeeAlso: BX=0005h ----------7A----BX0007----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - SCHEDULE SPECIAL EVENT BX = 0007h AX = delay time ES:SI -> Event Control Block (see BX=0003h) SeeAlso: BX=0006h ----------7A----BX0008----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - GET INTERVAL MARKER BX = 0008h Return: AX = interval marker in clock ticks SeeAlso: BX=0005h ----------7A----BX0009----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - GET INTERNETWORK ADDRESS BX = 0009h ES:SI -> 10-byte buffer Return: ES:SI -> own internetwork address SeeAlso: BX=0002h,BX=000Bh ----------7A----BX000A----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - RELINQUISH CONTROL BX = 000Ah Note: this call permits the IPX driver to do some work SeeAlso: INT 15/AX=1000h,INT 2F/AX=1680h ----------7A----BX000B----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - DISCONNECT FROM TARGET BX = 000Bh ES:SI -> internetwork address Note: only use in point-to-point networks SeeAlso: BX=0002h,BX=0009h ----------7A----BX000C----------------------- INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL BX = 000Ch ??? Return: ??? ----------7A----BX000D----------------------- INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL BX = 000Dh ??? Return: ??? ----------7A----BX000E----------------------- INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL BX = 000Eh ??? Return: ??? ----------7A----BX000F----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - INTERNAL - SEND PACKET BX = 000Fh ES:SI -> Event Control Block (see BX=0003h) Note: similar to function 0003h, but apparently does not allow multiple fragments SeeAlso: BX=0003h ----------7A----BX0010----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - SPX INSTALLATION CHECK BX = 0010h AL = 00h Return: AL = FFh if SPX loaded SeeAlso: BX=0015h ----------7A----BX0011----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - ESTABLISH SPX CONNECTION BX = 0011h AL = retry count AH = watchdog flag ES:SI -> Event Control Block (see BX=0003h) Return: DX = assigned connection number Notes: there should always be at least two SPX ECB's listening to a socket, so that NetWare can perform its internal packet exchanges The first fragment should start with a SPX header. Fill in all destination addresses. SeeAlso: BX=0000h,BX=0012h,BX=0013h,BX=0014h Format of SPX header: Offset Size Description 00h WORD checksum (high byte first [big-endian]) 02h WORD length in bytes of total packet (high byte first) 04h BYTE transport control 05h BYTE packet type 06h 10 BYTEs destination internet address 10h WORD destination socket (high byte first) 12h 10 BYTEs source internet address 1Ch WORD source socket (high byte first) 1Eh BYTE connection control 1Fh BYTE datastreamtype 20h WORD source connection ID 22h WORD destination connection ID 24h WORD sequence number 26h WORD acknowledge number 28h WORD allocation number ----------7A----BX0012----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - LISTEN FOR SPX CONNECTION BX = 0012h AL = retry count AH = watchdog flag ES:SI -> Event Control Block (see BX=0003h) Notes: there should always be at least two SPX ECB's listening to a socket, so that NetWare can perform its internal packet exchanges SeeAlso: BX=0011h,BX=0013h,BX=0014h ----------7A----BX0013----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - TERMINATE SPX CONNECTION BX = 0013h DX = connection ID to terminate ES:SI -> Event Control Block (see BX=0003h) SeeAlso: BX=0011h,BX=0012h,BX=0014h ----------7A----BX0014----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - ABORT SPX CONNECTION BX = 0014h DX = connection ID to terminate Note: this function does not tell the other side that the connection has been terminated SeeAlso: BX=0011h,BX=0013h ----------7A----BX0015----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - GET SPX STATUS BX = 0015h DX = connection ID ES:SI -> status buffer (see below) Return: AL = return code 00h connection still valid ES:SI -> status buffer filled SeeAlso: BX=0010h Format of status buffer: Offset Size Description 00h BYTE status 01h BYTE flag 02h WORD source connection (high byte first [big-endian]) 04h WORD destination connection (high byte first) 06h WORD sequence number (high byte first) 08h WORD acknowledge number (high byte first) 0Ah WORD allocation number (high byte first) 0Ch WORD remote acknowledge number (high byte first) 0Eh WORD remote allocation number (high byte first) 10h WORD connection socket (high byte first) 12h 6 BYTEs immediate node address 18h 10 BYTEs destination internet address 22h WORD retransmit count (high byte first) 24h WORD estimated roundtrip delay 26h WORD retransmitted packets 28h WORD suppressed packets ----------7A----BX0016----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - SEND SPX PACKET BX = 0016h DX = connection ID ES:SI -> Event Control Block (see BX=0003h) Note: CX may need to be 0001h ??? SeeAlso: BX=0011h,BX=0017h ----------7A----BX0017----------------------- INT 7A - Novell NetWare Low-Level API (IPX) Driver - LISTEN FOR SPX PACKET BX = 0017h DX = connection ID ES:SI -> Event Control Block (see BX=0003h) Note: CX may need to be 0001h ??? SeeAlso: BX=0011h,BX=0016h ----------7A----BX0018----------------------- INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL BX = 0018h ??? Return: ??? ----------7A----BX0019----------------------- INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL BX = 0019h ??? Return: ??? ----------7A----BX001A----------------------- INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL BX = 001Ah ??? Return: ??? ----------7A----BX001B----------------------- INT 7A U - Novell NetWare Low-Level API (IPX) Driver - INTERNAL BX = 001Bh ??? Return: ??? ----------7A04------------------------------- INT 7A - IBM 3270 Workstation Program API - CREATE A QUEUE AH = 04h ??? Return: ??? SeeAlso: AH=06h ----------7A06------------------------------- INT 7A - IBM 3270 Workstation Program API - DELETE A QUEUE AH = 06h ??? Return: ??? SeeAlso: AH=04h ----------7A09--BX8020----------------------- INT 7A - IBM 3270 Workstation Program API - SESSION SERVICES AH = 09h BX = 8020h (synchronous request) CX = 0000h DX = ID of session manager (SESSMGR) AL = service 01h get session ID 02h get session info 04h dettach from session 05h attach to session 06h get list of windows available 07h get environment of window 08h get 'PIF' (program information file) info 0Ah get base window ID 0Bh get cursor info ES:DI -> control block Return: ??? ----------7A09--BX8020----------------------- INT 7A - IBM 3270 Workstation Program API - KEYBOARD SERVICES AH = 09h BX = 8020h (synchronous request) CX = 0000h DX = ID of keyboard manager AL = service 01h connect to keyboard 02h disconnect from keyboard 03h read from keyboard 04h send keystroke to session 05h disable input 06h enable input 07h update status code ES:DI -> control block Return: ??? ----------7A09--BX8020----------------------- INT 7A - IBM 3270 Workstation Program API - WINDOW SERVICES AH = 09h BX = 8020h (synchronous request) CX = 00FFh DX = ID of window service controller (WSCTRL) AL = service 01h connect to WS control 02h disconnect from WS control 03h add a window 04h change window's position on screen 05h change window's size 06h change window's color 07h change window's position in the presentation space 08h hide/unhide toggle 09h enlarge/reduce toggle 0Ah change screen background color 0Bh get window's position on screen 0Ch get window's size 0Dh get window's color 0Eh get window's position in the presentation space 0Fh determine whether hidden 10h determine whether enlarged 11h get background color 12h get window names 13h delete all windows from profile 14h pick active window 15h redraw screen 16h redraw window 17h delete a window from profile 18h get active window 19h get active screen 1Ah get window data 1Bh change window data 1Ch select active screen ES:DI -> control block Return: ??? ----------7A09--BX8020----------------------- INT 7A - IBM 3270 Workstation Program API - PRESENTATION SPACE SERVICES AH = 09h BX = 8020h CX = 00FFh DX = ID of PCPSM AL = service 01h define presentation space 02h delete presentation space 03h display presentation space 04h position cursor in presentation space 05h change default presentation space ES:DI -> control block Return: ??? ----------7A09--BX8020----------------------- INT 7A - IBM 3270 Workstation Program API - 3270 EMULATION AH = 09h BX = 8020h CX = 00FFh DX = ID of 3270EML AL = service 01h connect 02h disconnect ES:DI -> control block Return: ??? ----------7A09--BX8020----------------------- INT 7A - IBM 3270 Workstation Program API - OPERATOR INFORMATION AREA AH = 09h BX = 8020h CX = 00FFh DX = ID of OIAM AL = service 01h read Operator Information Area 02h read OIA subset ES:DI -> control block Return: ??? Note: the OIA is the 25th line on the Host session ----------7A09--BX8020----------------------- INT 7A - IBM 3270 Workstation Program API - TRANSLATE DATA AH = 09h BX = 8020h CX = 00FFh DX = ID of XLATE AL = service 01h translate from host characters to ASCII and vice versa (determined by control block byte 11) ES:DI -> control block Return: ??? ----------7A09--BX8020----------------------- INT 7A - IBM 3270 Workstation Program API - COPY SERVICE AH = 09h BX = 8020h CX = 00FFh DX = ID of copy service AL = service 01h copy string from one presentation space to another 02h copy block from one presentation space to another 03h connect to PC session for copy 04h disconnect PC session from copy ES:DI -> control block Return: ??? ----------7A09--BX8020----------------------- INT 7A - IBM 3270 Workstation Program API - Multi-DOS AH = 09h BX = 8020h CX = 00FFh ES:DI -> control block DX = ID of INDJQRY get environment size = ID of INDJASY request DOS functions from workstation = ID of MEMORY AL = function 01h allocate memory 02h deallocate memory 03h modify allocated size Return: ??? ----------7A09------------------------------- INT 7A - IBM 3270 Workstation Program API - HOST SERVICES AH = 09h BX = request type (4000h async, 8028h synchronous) CX = 0000h DX = ID of MFIC AL = service 01h connect to host 02h disconnect from host 03h read DFT structured data from host 04h write DFT structured data to host 05h create a host buffer ES:DI -> control block ----------7A13------------------------------- INT 7A - IBM 3270 Workstation Program API - GET DATA FROM A QUEUE AH = 13h ??? Return: ??? ----------7A7A------------------------------- INT 7A - Canon IX-30F Image Scanner SI3.SYS - INTERFACE AH = 7Ah ??? Return: AX = 0000h success 000Eh undefined function code Note: this interface is normally on INT 7A but can be changed via device driver command line arguments ----------7A81------------------------------- INT 7A - IBM 3270 Workstation Program API - RESOLVE A GATE NAME AH = 81h ES:DI -> 8-char blank-padded gate name "SESSMGR ", "KEYBOARD", "WSCTRL ", "MFIC ", "PCPSM ", "3270EML ", "COPY ", "XLATE ", "OIAM ", "MEMORY ", "INDJQRY ", or "INDJASY " Return: DX = gate ID ----------7A83------------------------------- INT 7A - IBM 3270 Workstation Program API - GET COMPLETION RESULTS AH = 83h ??? Return: ??? ----------7AFDCB----------------------------- INT 7A - IBM Personal Communications/3270 - INSTALLATION CHECK AX = FDCBh Return: DX:AX -> PCS/3270 signature block if loaded (see below) Format of signature block: Offset Size Description 04h WORD PCS/3270 signature (5741h) 06h WORD version (0501h = PCS/3270 v1.0) ----------7AFE01----------------------------- INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL SEND/RECEIVE FUNCTION AX = FE01h ??? Return: ??? SeeAlso: AX=FE02h ----------7AFE02----------------------------- INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL SEND/RECEIVE FUNCTION AX = FE02h ??? Return: ??? SeeAlso: AX=FE01h ----------7AFF01----------------------------- INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL API INITIALIZATION AX = FF01h ES:DI -> API function handler routine Return: CX = 1200h SeeAlso: AX=FF02h,AX=FF03h ----------7AFF02----------------------------- INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL API TERMINATION AX = FF02h Return: CX = 1200h SeeAlso: AX=FF01h ----------7AFF03----------------------------- INT 7A - IBM PC3270 EMUL PROG v3 - INTERNAL API INITIALIZATION AX = FF03h ES:DI -> send/receive function handler routine Return: CX = 1200h SeeAlso: AX=FF01h ----------7AFF04----------------------------- INT 7A U - IBM PC3270 EMUL PROG v3 - INTERNAL ??? AX = FF04h ES:DI -> ??? Return: CX = 1200h ----------7B--------------------------------- INT 7B - Btrieve API (single user) DS:DX -> 38-byte parameter record (see below) Return: return code field set Note: Btrieve sets low byte of vector to 33h; this serves as the installation check SeeAlso: INT 21/AX=3000h"Btrieve",INT 2F/AX=AB01h,INT 7F/AX=0200h Format of Btrieve parameter record: Offset Size Description 00h DWORD pointer to data buffer 04h WORD data buffer length 06h DWORD pointer to 90-byte record containing positioning info (should be same for all calls for same file) 0Ah DWORD pointer to 38-byte FCB info buffer (should be same for all calls for same file) 0Eh WORD function code (see below) 10h DWORD pointer to file name/key buffer 14h BYTE key length 15h BYTE key number 16h DWORD pointer to status code (see below) 1Ah WORD interface code (version specific) 6176h version 5.10 Values for function code: 00h open 01h close 02h insert 03h update 04h delete 05h get_equal 06h get_next 07h get_prev 08h get_greater 09h get_gr_eql 0Ah get_less 0Bh get_less_eq 0Ch get_first 0Dh get_last 0Eh create 0Fh stat 10h extend 11h set_dir: set directory information 12h get_dir: get directory information 13h begin_trans 14h end_trans 15h abort_trans 16h get_pos: get record position number 17h get_direct: get data by sending record position 18h step_next 19h stop 1Ah version 1Bh unlock 1Ch reset 1Dh set owner 1Eh clear owner 1Fh create supplemental index 20h drop supplemental index 21h step first 22h step last 23h step previous 24h get next extended: get multiple records using a filter 25h get previous extended: get multiple records using a filter 26h step next extended: get multiple records using a filter 27h step previous extended: get multiple records using a filter 28h insert extended: insert one or more records 31h ??? add 50 (32h) to any "get" operation to just return the key data add 100 (64h) for a single-record wait lock (automatically released on next get) add 200 (C8h) for a single-record nowait lock (nowait lock returns error 54h or 55h if record already locked) add 300 (12Ch) for a multiple-record wait lock (not released until unlock called) add 400 (190h) for a multiple-record nowait lock (nowait lock returns error 54h or 55h if record already locked) Values for status code: 00h successful 01h invalid operation 02h I/O error 03h file not open 04h key value not found 05h duplicate key value 06h invalid key number 07h different key number 08h invalid positioning 09h end of file 0Ah modifiable key value error 0Bh invalid file name 0Ch file not found 0Dh extended file error 0Eh pre-image open error 0Fh pre-image I/O error 10h expansion error 11h close error 12h disk full 13h unrecoverable error 14h record manager inactive 15h key buffer too short 16h data buffer length overrun 17h position block length 18h page size error 19h create I/O error 1Ah number of keys 1Bh invalid key position 1Ch invalid record length 1Dh invalid key length 1Eh not a Btrieve file 1Fh file already extended 20h extended I/O error 22h invalid extension name 23h directory error 24h transaction error 25h transaction is active 26h transaction control file I/O error 27h end/abort transaction error 28h transaction max files 29h operation not allowed 2Ah incomplete accelerated access 2Bh invalid record address 2Ch null key path 2Dh inconsistent key flags 2Eh access to file denied 2Fh maximum open files 30h invalid alternate sequence definition 31h key type error 32h owner already set 33h invalid owner 34h error writing cache 35h invalid interface 36h variable page error 37h autoincrement error 38h incomplete index 39h expanded memory error 3Ah compression buffer too short 3Bh file already exists 3Ch reject count reached 3Dh work space too small 3Eh incorrect descriptor 3Fh invalid extended insert 40h filter limit reached 41h incorrect field offset 4Ah automatic transaction abort 4Eh deadlock detected 50h conflict 51h lock error 52h lost position 53h read outside transaction 54h record in use 55h file in use 56h file table full 57h handle table full 58h incompatible open mode 5Ah redirected device table full 5Bh server error 5Ch transaction table full 5Dh incompatible lock type 5Eh permission error 5Fh session no longer valid 60h communications environment error 61h data message too small 62h internal transaction error ----------7B--------------------------------- INT 7B - Eicon Access API (3270/5250 gateways) ----------7B--------------------------------- INT 7B U - AutoCAD ADI INTERFACE AX = function 0000h output blank line other ??? Return: ??? Note: called by AutoCAD to perform its output SeeAlso: INT 78"AutoCAD",INT 7A"AutoCAD" ----------7B--------------------------------- INT 7B - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ3 Note: this vector is overwritten when GO32 starts but is not restored SeeAlso: INT 0B,INT 10/AH=FFh"GO32",INT 7A"GO32",INT 7C"GO32" ----------7C--------------------------------- INT 7C U - IBM REXX88PC command language ??? ----------7C--------------------------------- INT 7C - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ4 Note: this vector is overwritten when GO32 starts but is not restored SeeAlso: INT 0C,INT 7B"GO32",INT 7D"GO32" ----------7D--------------------------------- INT 7D - [proposed] - ALTERNATE MULTIPLEX INTERRUPT Note: this interface proposal has been moved to INT 2D; there are no known implementations on INT 7D SeeAlso: INT 2D, INT 2F ----------7D--------------------------------- INT 7D U - YTERM 1.4 - CLOCK SUPPORT SeeAlso: INT 7E"YTERM" ----------7D--------------------------------- INT 7D - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ5 Note: this vector is overwritten when GO32 starts but is not restored SeeAlso: INT 0D,INT 7C"GO32",INT 7E"GO32" ----------7E--------------------------------- INT 7E - RESERVED FOR DIP, Ltd. ROM LIBRARY ----------7E--------------------------------- INT 7E U - YTERM 1.4 - ??? SeeAlso: INT 7D"YTERM",INT 7F"YTERM" ----------7E--------------------------------- INT 7E - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ6 Note: this vector is overwritten when GO32 starts but is not restored SeeAlso: INT 0E,INT 7D"GO32",INT 7F"GO32" ----------7F--------------------------------- INT 7F - IBM XGA - ??? ----------7F--------------------------------- INT 7F - Halo88 - API BX = function 64h arc 65h bar 66h box 67h circle 68h clr 69h default hatch style 6Ah default line style 6Bh delhcur 6Ch delln / deltcur 6Dh ellipse 6Eh fill 6Fh flood 70h flood2 71h init graphics 72h init hcur 73h init marker 74h init tcur 75h inqarc 76h inqbknd 77h inqclr 78h inqerr 79h inqgcur 7Ah inqhcur 7Bh inqmarker 7Dh inqtcur 7Eh inqtext 7Fh lnabs 80h lnrel 81h markerabs 82h markerrel 83h moveabs 84h movehcurabs 85h movehcurrel 86h moverel 87h movetcurabs 88h movetcurrel 89h movefrom 8Ah moveto 8Bh pie 8Ch polylnabs 8Dh polylnrel 8Eh ptabs 8Fh ptrel 91h setasp 92h set color 93h set font 94h set hatch style 95h set line style 97h settext 98h set text color 99h btext 9Ah setseg 9Bh display 9Ch setscreen 9Eh close graphics 9Fh ftinit A0h ftlocate A1h ftext A5h set viewport A6h set window A7h set world AAh ftcolor ACh initlp ADh inqasp AEh inqdev AFh inqdisplay B0h inqft B1h inqftcolor B2h inqinterlace B3h inqlpa B4h inqlpg B5h inqmode B6h inqscreen B7h inqversion B8h roam B9h scroll BAh setieee BBh set interlace BCh shift BDh start graphics BEh vpan CBh gwrite CCh gread CDh setxor CEh rbox CFh rcir D0h rlnabs D1h rlnrel D2h delbox D3h delcir D5h setseg2 DCh worldoff DDh mapwtod DEh mapdtow DFh mapwton E0h mapntow E1h mapdton E2h mapntod E3h inqworld E4h inqviewport E5h set line width E6h lnjoint E7h set locator E8h read locator E9h setdev EBh setstext ECh setstclr EDh setstang EEh stext EFh inqstext F0h setdegree F1h inqstsize F2h polyfabs F3h polyfrel F4h inqdrange F5h inqstang F6h orglocator F7h inqlocator F8h inqarea F9h setipal FAh setborder FBh inqcrange FEh setclip FFh fcir 100h setcrange 101h setdrange 102h setlattr 103h polycabs 104h polycrel 108h memcom 109h memexp 10Ah memmov 10Eh movefx 10Fh movetx 110h inqrgb 111h save image 112h restore image 113h setapal 114h setxpal 118h inqtsize 12Eh gprint 130h setprn 131h setpattr 133h setbattr 135h pexpand 136h ptnorm 137h pfnorm 13Bh inqprn 13Ch lopen 13Dh lclose 13Eh lappend 13Fh lrecord 140h lswitch 142h inqfun 15Dh lsetup 15Eh lrest 15Fh lsave additional parameters on stack Return: ??? Notes: Halo88 is a suite of graphics routines according to Stuart Kemp, the code appears to make no provisions for chaining ----------7F--------------------------------- INT 7F - CONVERGENT TECHNOLOGIES ClusterShare CTOS ACCESS VECTOR AL = request ID 01h "Request"/"RequestDirect" ES:BX -> pRq DX ignored 04h "Wait" ES:BX -> ppMsgRet DX = exchange 05h "AllocExch" ES:BX -> pExchRet 06h "DeAllocExch" DX = exchange 07h "Check" ES:BX -> ppMsgRet DX = exchange CX = 4354h ('CT') Return: AX = status 0000h successful ----------7F--------------------------------- INT 7F - Telebit ACS SERIAL I/O ES:SI-> parameter block Return: CF set on error CF clear on success Notes: the signature "PDGATEWRKSTNIF" appears just prior to the interrupt handler; this serves as the installation check Format of Telebit ACS parameter block: Offset Size Description 00h BYTE command 3Ch status 3Dh connect 3Eh disconnect 3Fh read 40h data/command write 41h clear receive buffer 42h get configuration 43h get receiver status 44h raw write 45h search servers 46h set transmit buffer size 01h BYTE gateway number 02h BYTE reserved 03h BYTE port 04h 17 BYTES auxiliary buffer 15h BYTE session 16h WORD count of bytes passed to API 18h DWORD buffer pointer passed to/from API 1Ch WORD count of bytes passed from API 1Eh BYTE return code (see below) Values for return code: 00h - success 01h - invalid session 05h - servername invalid 06h - netware fileserver bindery is locked 07h communication server not active 08h general failure in netware fileserver 09h not logged into a fileserver 10h connection table full 11h no response from communication server 12h connection attempt terminated abnormally 13h connection refused - no sessions available 14h gw_no/port already in use 15h invalid connection response 16h port invalid 17h incorrect version in server response 18h gw_no/port combination not configured 19h initialization has not been completed 20h no more sockets are available 21h no active poolname 23h FATAL internal interface error 24h registration of host workstation failed - name is already in used 25h registration of host workstation failed - workstation name table full 26h registration of host workstation failed - only one session may be registered for dial-in FFh telebit acs api is busy - retry later ----------7F--------------------------------- INT 7F - Non-dedicated NetWare 2.x File Server - ENTER CONSOLE MODE Notes: the installation check consists of checking for the signature "Lynn" in the four bytes preceding the interrupt handler; if present, the current program is running as a DOS task on a non-dedicated NetWare 2.x file server. Before placing the server into "console" mode, it is recommended that NetWare broadcast messages be disabled with INT 21/AX=DE00h. SeeAlso: INT 21/AX=DE00h ----------7F--------------------------------- INT 7F U - YTERM - ??? SeeAlso: INT 7E"YTERM" ----------7F--------------------------------- INT 7F - DJGPP GO32 DOS EXTENDER - RELOCATED IRQ7 Note: this vector is overwritten when GO32 starts but is not restored SeeAlso: INT 0F,INT 7E"GO32" ----------7F--------------------------------- INT 7F - Canon IXHND2 Scanner Interface ----------7F--------------------------------- INT 7F - Alloy 386/MultiWare (MW386), Novell-Type Network Executive (NTNX) Notes: the words at C800h:0000h and C800h:0002h will both be 584Eh if the MW386 multitasking system is present (i.e. signature "NXNX") NTNX allows its API to be placed on a different interrupt than 7Fh at load time. To determine the actual vector used, open the device "SPOOLER" with INT 21/AX=3D02h, place it in RAW mode with INT 21/AX=4400h and INT 21/AX=4401h, then read one byte which will be the actual interrupt number being used; the other interrupts may be found with INT 7F/AH=09h/CL=03h ----------7F--------------------------------- INT 7F - Alloy NetWare Support Kit (ANSK) v2.2+ - INSTALLATION CHECK Note: a program may determine that it is running on an ANSK Slave by checking the five bytes at F000h:0000h for the ASCIZ signature "ANSK"; this address is RAM, and should not be written. However, the above check will not work on Slaves with <1MB RAM or those using the SLIM.SYS device driver ----------7F00------------------------------- INT 7F - Alloy NTNX, MW386 - SEMAPHORE LOCK AND WAIT AH = 00h DS:DX -> ASCIZ semaphore name (max 64 bytes) Return: AL = status 00h successful 01h invalid function 02h semaphore already locked 03h unable to lock semaphore 04h semaphore space exhausted 05h host/target PC did not respond (NTNX) AH = semaphore owner if status=02h SeeAlso: AH=01h,AH=02h,AH=41h,INT 67/AH=00h ----------7F01------------------------------- INT 7F - Alloy NTNX, MW386 - SEMAPHORE LOCK AH = 01h DS:DX -> ASCIZ semaphore name (max 64 bytes) Return: AL = status (see AH=00h) AH = semaphore owner if status=02h SeeAlso: AH=00h,AH=02h,AH=41h ----------7F0104BX0000----------------------- INT 7F - HLLAPI (IBM 3270 High-Level Language API)/LLAPI (Rabbit Low Level API) AX = 0104h (HLLAPI gate ID) BX = 0000h DS:SI -> parameter control block (see below) Return: parameter control block updated Format of parameter control block: Offset Size Description 00h 3 BYTEs signature = 'PCB' 03h BYTE function number (see below) 04h WORD segment of control string 06h WORD offset of control string 08h WORD length of control string, unless explicit end-of-str char set 0Ah BYTE unused (IBM) ControlString[0] (Rabbit) 0Bh WORD return code 0Dh WORD maximum length of control string (IBM) unused (Rabbit) Values for HLLAPI function number: 00h Query system (Attachmate implementation only) 01h Connect presentation space 02h Disconnect presentation space 03h Send string of keystrokes as if typed from keyboard 04h Wait ~60s, returns status of presentation space 05h Copy current presentation space into a user-defined buffer 06h Search presentation space for first occurrence of a specified string 07h Query cursor location in current presentation space 08h Copy part or all of current presentation space into user buffer 09h Set session parameters; parameters vary by vendor 0Ah Get info on sessions currently connected 0Bh Lock current presentation space 0Ch Unlock previously locked presentation space 0Dh Return copy of operator info area (OIA) of current presentation space 0Eh get attribute byte for given position in the current presentation space 0Fh copy string of characters to the current presentation space 10h workstation control functions 11h storage manager functions, intended primarily for BASIC applications (not implemented by Rabbit) 12h set delay period in half-second intervals 14h get info on level of workstation support used 15h reset session parameters to default values 16h get detailed info on the current session 17h start host notification to application on presentation sp or OIA update 18h check host update when host notification enabled 19h stop host notification 1Eh search field within current presentation space for string 1Fh get first positionof a selected field in the current presentation space 20h get length of specified field 21h copy string into a specified field 22h copy specified field into a user-defined buffer 23h create alternate presentation space (IBM only), don't use with BASIC 24h switch to alternate presentation space (IBM only), not with BASIC 25h display cursor in specified area (IBM only), don't use with BASIC 26h display alternate presentation space (IBM only), don't use with BASIC 27h delete alternate presentation space (IBM only), don't use with BASIC 32h start intercepting keystrokes to allow filtering 33h get keystrokes after turning on interception 34h notify operator when keystroke rejected by filter subroutine 35h stop intercepting keystrokes 5Ah send file 5Bh receive file 5Ch run a program (not implemented by Rabbit) 5Dh execute DOS command (not implemented by Rabbit) 63h change presentation space position to PC display row/col or vice versa FFh Get info on DCA implementation Values for LLAPI function number: 80h initialize LLAPI (internal call) 83h set Session ID (one-character ID) 84h read Session ID (one-character ID) 85h lock 327x keyboard 86h unlock 327x keyboard 87h wait for Clear to Send 88h type ASCII character 89h type 327x key 8Ah read keyboard lock state 8Fh force screen update 90h view session 91h relinquish (suspend foreground until background becomes idle) 92h poke screen character 93h poke translated character 94h peek screen character 95h peek translated character 96h set cursor position 97h send scan code (Rabbit only) 98h synchronize (returns after keystroke queue empty) 99h type PC key (Rabbit only) Session Parameters for function 09h: ASCII ??? (Rabbit only) ATTRIB return attributes in hex NOATTRIB return attributes as blanks CONPHYS make physical connection CONLOG only make logical connection EAB copy extended attribute bytes along with data NOEAB copy data only ESC=n set escape character to "n" (default '@') EOT=n set end of string character (default 00h) FPAUSE full-duration pause FTNOWAIT return immediately from functions 5Ah and 5Bh (Rabbit only) FTWAIT wait for file transfer to complete (Rabbit only) IPAUSE interruptible pause RABESC ??? (Rabbit only) NORABESC ??? (Rabbit only) SCANCODE ??? (Rabbit only) STRLEN use explicit string lengths STREOT use terminated strings SRCHALL search entire presentation space SRCHFROM search from specified offset SRCHFRWD search forward from position 1 SRCHBKWD search backward from last position in presentation space TIMEOUT=n ??? (Rabbit only) TWAIT wait specified time for keyboard ready LWAIT wait until keyboard ready NWAIT no wait TRON enable tracing TROFF disable tracing AUTORESET send reset before sending keys with function 03h NORESET don't send reset QUIET don't display messages sent with INT 21/AH=09h NOQUIET allow messages to be displayed TIMEOUT=n set timeout in 30-second intervals, 0 = wait until ^Break XLATE translate extended attribute bytes NOXLATE don't translate NEWRET use HLLAPI v3.0 return code conventions OLDRET use HLLAPI v2.0 return code conventions ----------7F0105----------------------------- INT 7F - HDILOAD.EXE - 8514/A VIDEO CONTROLLER INTERFACE AX = 0105h get 8514/A entry points Return: CF set on error CF clear if successful CX:DX -> array of FAR pointers to entry points Note: most functions are invoked by pushing the DWORD parameter block pointer and then performing a FAR call via the appropriate vector of the entry point array Function numbers: (do FAR call via entry_points+4*function) 08h HOPEN 10h HINT 13h HLDPAL 15h HBBW 17h HBBR 18h HBBCHN 1Dh HQMODE 22h HCLOSE 30h HINIT 31h HSYNC 39h HSPAL 3Ah HRPAL ----------7F02------------------------------- INT 7F - Alloy NTNX, MW386 - RELEASE SEMAPHORE AH = 02h DS:DX -> ASCIZ semaphore name (max 64 bytes) Return: AL = status 00h successful 01h invalid function 02h semaphore locked by other user AH = semaphore owner 03h unable to unlock semaphore 05h target PC did not respond SeeAlso: AH=00h,AH=01h,AH=42h ----------7F0200----------------------------- INT 7F - Btrieve Multi-User - GIVE UP TIME??? AX = 0200h SeeAlso: INT 21/AX=3000h"Btrieve",INT 2F/AX=AB01h,INT 2F/AX=AB02h SeeAlso: INT 7B"Btrieve" ----------7F03------------------------------- INT 7F - Alloy ANSK, NTNX, MW386 - GET USER NUMBER AH = 03h Return: AL = user number AH = machine number (MW386) Note: this function call is the recommended method for a CPU-bound process to prevent its priority from being lowered SeeAlso: AH=04h,AH=05h,AH=A1h ----------7F04------------------------------- INT 7F - Alloy NTNX, MW386 - GET NUMBER OF USERS AH = 04h Return: AL = total number of users on currrent machine (MW386) AL = number of slaves on system (NTNX) SeeAlso: AH=03h ----------7F05------------------------------- INT 7F - Alloy NTNX (Host) - LOCK/UNLOCK SYSTEM, SPOOLER CONTROL AH = 05h AL = function 00h lock system (disable slave services) 01h unlock system 02h enable spooler 03h disable spooler 04h enable slave timer update 05h disable slave timer update 06h enable form feeds 07h disable form feeds SeeAlso: INT 17/AH=A4h ----------7F05------------------------------- INT 7F - Alloy NTNX (Slave), MW386 - GET USER PARAMETERS AH = 05h DX:DI -> buffer for user information record (see below) Notes: MW386 provides this function for backward compatibility only, and sets many of the fields to zero because they are meaningless under MW386 this function has no effect when called by the host (user 0) SeeAlso: AH=03h Format of user information record: Offset Size Description 00h WORD segment of video RAM 02h WORD segment of secondary copy of video RAM 04h WORD offset of screen update flag (see INT 10/AH=8Bh) flag nonzero if update needed 06h WORD video NMI enable port (not used by MW386, set to 0000h) 08h WORD video NMI disable port (not used by MW386, set to 0000h) 0Ah BYTE processor type 00h 8088 01h V20 02h 8086 03h V30 06h 80386 0Bh WORD multitasking flag (00h = single tasking, 01h = multitasking) (not used by MW386, set to 0000h) 0Dh WORD offset of terminal driver (not used by MW386, set to 0000h) 0Fh BYTE port for console I/O (not used by MW386, set to 0000h) 10h WORD offset of processor communication busy flag bit 7 set when slave communicating with host 12h WORD pointer to FAR NX system call (not used by MW386, set to 0000h) 14h WORD offset of 16-byte user configuration record (see AH=38h) 16h WORD offset of command/status word 18h WORD offset of screen valid flag (see INT 10/AH=93h) nonzero if screen must be repainted 1Ah WORD offset of screen repaint flag 1Ch WORD pointer to NEAR NX system call (not used by MW386, set to 0000h) 1Eh WORD offset for intercept flags (not used by MW386, set to 0000h) intercept flag = FFh if MSDOS intercepts should be disabled 20h WORD offset of terminal lock flag (see INT 10/AH=92h) lock flag = FFh if backgrnd screen updates should be suspended 22h 26 BYTEs reserved ----------7F06------------------------------- INT 7F - Alloy NTNX (Host) - GET SHARED DRIVE INFO AH = 06h AL = drive number (1=A:, 2=B:, etc) ES:DI -> drive info record (see below) Return: AX = status 0000h successful ES:DI buffer filled 0001h not shared drive Format of drive info record: Offset Size Description 00h WORD segment of drive IO-REQUEST structure (MSDOS DPB) 02h WORD segment of allocation map (owner table) one byte per FAT entry, containing user ID owning that entry 04h WORD segment of master FAT for drive (copy of FAT on disk) 06h WORD pointer to configuration file 08h WORD total number of clusters 0Ah WORD bytes per sector 0Ch WORD sectors per cluster 0Eh BYTE FAT type (0Ch = 12-bit, 10h = 16-bit) ----------7F06------------------------------- INT 7F - Alloy NTNX (Slave) - ALLOCATE FREE CLUSTER ON SHARED DRIVE AH = 06h DL = drive number (1=A:,2=B:,etc) CX = number of clusters to allocate Return: AH = status 00h successful CX = number of clusters still free 10h invalid shared drive request CL = first and second shared drives 11h invalid cluster count (must be 01h-FFh) ----------7F07------------------------------- INT 7F - Alloy NTNX, MW386 - GET LIST OF SHARED DRIVES AH = 07h Return: ES:DI -> shared drive list (see below) Note: MW386 considers all fixed disks to be shared drives; only C and D will be returned as shared Format of shared drive list: Offset Size Description 00h BYTE string length 01h BYTE number of shared drives 02h N BYTEs one byte per shared drive ----------7F08------------------------------- INT 7F - Alloy NTNX (Host) - GET INTERRUPT VECTORS AH = 08h CL = function 00h get original interrupt vector 01h get Network Executive interrrupt AL = interrupt number DX:SI -> DWORD to hold interrupt vector Return: AL = status 00h successful 01h interrupt vector not used by network executive 02h invalid subfunction Note: the network executive uses interrupts 02h,08h,09h,0Fh,10h,13h,16h-19h, 1Ch,20h,28h,2Ah,2Fh,5Bh,67h,7Fh,ECh, and F0h-FFh SeeAlso: AH=09h/CL=03h,INT 21/AH=35h ----------7F08--CL02------------------------- INT 7F - Alloy NTNX - SET MESSAGE DISPLAY TIMEOUT AH = 08h CL = 02h DX = timeout in seconds Return: AL = status 00h successful 02h invalid subfunction ----------7F09------------------------------- INT 7F - MultiLink Advanced - SET TASK PRIORITY AH = 09h AL = priority (0-7) Note: the installation check consists of ensuring that the interrupt vector is not pointing at segment 0000h, then checking whether the byte at offset 0000h in the interrupt handler's segment is E9h ----------7F09------------------------------- INT 7F - Alloy NTNX - ENABLE/DISABLE MUD FILE CHECKING AH = 09h CL = function 00h enable checking of RTNX.MUD file 01h disable RTNX.MUD checking ----------7F09--CL02------------------------- INT 7F - Alloy NTNX - SWITCH HOST TO DEDICATED MODE AH = 09h CL = 02h Note: in dedicated mode, the host will only poll for I/O requests from the slave processors, and not provide workstation services ----------7F09--CL03------------------------- INT 7F - Alloy NTNX,MW386 - GET ALTERNATE INTERRUPT AH = 09h CL = 03h AL = default interrupt number (67h,7Fh,etc) Return: CL = actual interrupt which handles specified interrupt's calls SeeAlso: AH=08h ----------7F0A--CL00------------------------- INT 7F - Alloy NTNX - GET SYSTEM FLAGS AH = 0Ah CL = 00h ES:DI -> buffer for system flags (see below) Return: ES:DI buffer filled Notes: on a slave, only the NX_Busy flag is returned all three flags are at fixed positions, so this function only needs to be called once an interrupt handler should only perform DOS or device accesses when all three flags are 00h Format of system flags: Offset Size Description 00h DWORD pointer to NX_Busy flag (nonzero when communicating with users) 04h DWORD pointer to device driver busy flag 08h DWORD pointer to InTimer flag ----------7F0B--CL02------------------------- INT 7F - Alloy NTNX (Host) - SET/RESET GRAPHICS DOS ON SLAVE AH = 0Bh CL = 02h AL = slave ID number CH = DOS to activate 00h graphics DOS 01h character DOS Return: AL = status 00h successful 01h nothing done, proper DOS type already loaded ----------7F10--CL00------------------------- INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - OPEN CHANNEL AH = 10h CL = 00h AL = channel number DX:DI -> channel buffer Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction 0Dh unable to open Note: may not be invoked from within a hardware interrupt handler SeeAlso: AH=10h/CL=01h,AH=10h/CL=04h,AH=14h/CL=02h ----------7F10--CL01------------------------- INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - CLOSE CHANNEL AH = 10h CL = 01h AL = channel number Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction 0Ah channel not open Note: may not be invoked from within a hardware interrupt handler SeeAlso: AH=10h/CL=00h,AH=10h/CL=05h ----------7F10--CL02------------------------- INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - LOCK CHANNEL AH = 10h CL = 02h AL = channel number Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction 0Ah channel not open 0Ch channel already locked Note: may not be invoked from within a hardware interrupt handler SeeAlso: AH=10h/CL=03h,AH=10h/CL=06h,AH=10h/CL=08h ----------7F10--CL03------------------------- INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - UNLOCK CHANNEL AH = 10h CL = 03h AL = channel number Return: AL = status (see AH=10h/CL=02h) Notes: should only be used on channels locked with AH=10h/CL=02h, not on those locked by receipt of a datagram may not be invoked from within a hardware interrupt handler SeeAlso: AH=10h/CL=02h,AH=10h/CL=04h,AH=10h/CL=09h ----------7F10--CL04------------------------- INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - RELEASE BUFFER AH = 10h CL = 04h AL = channel number Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction Notes: unlocks buffer after received datagram has been processed may not be invoked from within a hardware interrupt handler SeeAlso: AH=10h/CL=00h ----------7F10--CL05------------------------- INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - CLOSE ALL CHANNELS AH = 10h CL = 05h Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction Notes: clears all pending datagrams and clears buffer pointers before closing the channels may not be invoked from within a hardware interrupt handler SeeAlso: AH=10h/CL=01h ----------7F10--CL06------------------------- INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - LOCK ALL OPEN CHANNELS AH = 10h CL = 06h Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction Note: may not be invoked from within a hardware interrupt handler SeeAlso: AH=10h/CL=02h,AH=10h/CL=08h ----------7F10--CL07------------------------- INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - UNLOCK ALL LOCKED IDLE CHANNELS AH = 10h CL = 07h Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction Notes: unlocks all locked channels which have no pending datagrams may not be invoked from within a hardware interrupt handler SeeAlso: AH=10h/CL=03h,AH=10h/CL=09h ----------7F10--CL08------------------------- INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - LOCK MULTIPLE CHANNELS AH = 10h CL = 08h DX = maximum channel number to lock Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction Notes: locks channels numbered 00h through the value in DX may not be invoked from within a hardware interrupt handler SeeAlso: AH=10h/CL=02h,AH=10h/CL=06h,AH=10h/CL=09h ----------7F10--CL09------------------------- INT 7F - Alloy NTNX, MW386 - CHANNEL CONTROL - UNLOCK MULTIPLE CHANNELS AH = 10h CL = 09h DX = maximum channel number to unlock Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction Notes: unlocks channels numbered 00h through the value in DX may not be invoked from within a hardware interrupt handler SeeAlso: AH=10h/CL=03h,AH=10h/CL=07h,AH=10h/CL=08h ----------7F11------------------------------- INT 7F - Alloy NTNX, MW386 - SEND DATAGRAM AH = 11h DX:SI -> request block (see below) Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction 0Ah packet too large (or <2 bytes if NTNX) 0Bh can't send packet to itself 0Ch invalid number of destinations 0Dh destination channel number out of range 0Eh destination user is busy 0Fh destination user has locked channel 10h channel not open 11h no datagram server on destination (NTNX) Note: if wildcard channel FFh used, actual channel number will be filled in SeeAlso: AH=12h Format of request block: Offset Size Description 00h DWORD pointer to packet to send 04h WORD packet size in bytes (1-4096) 06h BYTE number of destinations for packet (max 1Fh) 07h 31 BYTEs destination user IDs (FFh = broadcast to all except sender) 26h 31 BYTEs destination channels (FFh = first available channel) 45h 31 BYTEs return destination statuses ----------7F12------------------------------- INT 7F - Alloy NTNX, MW386 - ACKNOWLEDGE DATAGRAM AH = 12h AL = channel number being acknowledged DI:DX = 32-bit status to return to sender Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction 0Ah channel not open 0Bh no message in channel 0Ch destination slave busy--retry (NTNX) 0Dh destination user not active 0Eh destination slave not active (NTNX) 0Fh destination disabled datagram service Note: also unlocks the channel, allowing the next datagram to be received SeeAlso: AH=11h,AH=15h/CL=04h ----------7F13--CL00------------------------- INT 7F - Alloy NTNX, MW386 - RESET USER DATAGRAMS AH = 13h CL = 00h Note: clears all pending datagrams and removes all channels opened in NTNX compatibility mode ----------7F14--CL00------------------------- INT 7F - Alloy NTNX, MW386 - SET RECEIVE ISR AH = 14h CL = 00h DX:DI -> application FAR receive service routine (see below) Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction SeeAlso: AH=14h/CL=01h,AH=14h/CL=03h Service routine called with: DH = sender ID DL = channel with datagram interrupts disabled Return: AL = response code 00h leave buffer locked, set channel status, and repeat call later 01h release channel buffer 02h change buffer pointer to DX:DI AH,CX,DX,DI,SI may be destroyed ----------7F14--CL01------------------------- INT 7F - Alloy NTNX, MW386 - SET ACKNOWLEDGE ISR AH = 14h CL = 01h DX:DI -> application FAR acknowledge service routine (see below) Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction Note: the service routine will be called as soon as an acknowledgment arrives SeeAlso: AH=12h,AH=14h/CL=00h,AH=14h/CL=04h,AH=15/CL=04h Service routine called with: DS:SI -> acknowledge structure (see AH=15h/CL=04h) Return: AL = response code 00h application busy, network executive should call again later 01h acknowledge accepted AH,DX,SI may be destroyed ----------7F14--CL02------------------------- INT 7F - Alloy NTNX, MW386 - SET CHANNEL BUFFER POINTER AH = 14h CL = 02h AL = channel number DX:DI -> receive buffer Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction Note: may be called from within a receive ISR or when a datagram is pending SeeAlso: AH=10h/CL=00h,AH=14h/CL=00h ----------7F14--CL03------------------------- INT 7F - Alloy NTNX, MW386 - GET RECEIVE ISR AH = 14h CL = 03h Return: DX:DI -> current receive ISR SeeAlso: AH=14h/CL=00h,AH=14h/CL=04h ----------7F14--CL04------------------------- INT 7F - Alloy NTNX, MW386 - GET ACKNOWLEDGE ISR AH = 14h CL = 04h Return: DX:DI -> current acknowledge ISR SeeAlso: AH=14h/CL=01h,AH=14h/CL=03h ----------7F14--CL05------------------------- INT 7F - Alloy NTNX (Host), MW386 - GET BUSY POINTER AH = 14h CL = 05h DX:DI -> buffer for busy structure (see below) Return: DX:DI buffer filled Format of busy structure: Offset Size Description 00h DWORD pointer to busy flag byte 04h WORD fixed port address (FF00h) ----------7F15--CL00------------------------- INT 7F - Alloy NTNX, MW386 - GET CHANNEL STATUS AH = 15h CL = 00h AL = channel number DX:DI -> status structure (see below) Return: AL = status 00h successful 01h busy 02h channel range error (not 00h-3Fh) 03h invalid subfunction SeeAlso: AH=15h/CL=01h Format of status structure: Offset Size Description 00h BYTE channel status bit 0: channel open 1: channel buffer contains received data 7: channel locked 01h BYTE sender ID ----------7F15--CL01------------------------- INT 7F - Alloy NTNX, MW386 - GET NEXT FULL CHANNEL AH = 15h CL = 01h DX:DI -> full-channel structure Return: AL = status 00h successful 01h busy 0Ah no datagrams available Note: MW386 v1.0 returns the lowest channel with a datagram; newer versions and NTNX return the oldest datagram SeeAlso: AH=15h/CL=00h Format of full-channel structure: Offset Size Description 00h BYTE number of channel with oldest datagram 01h BYTE sender ID ----------7F15--CL02------------------------- INT 7F - Alloy NTNX, MW386 - GET MAXIMUM NUMBER OF CHANNELS AH = 15h CL = 02h Return: AH = number of channels available (40h for MW386) Note: the application may always assume at least 32 channels available SeeAlso: AH=15h/CL=03h ----------7F15--CL03------------------------- INT 7F - Alloy NTNX, MW386 - GET MAXIMUM PACKET SIZE AH = 15h CL = 03h DX:DI -> WORD for return value Return: buffer WORD filled with maximum packet size (4096 for MW386) SeeAlso: AH=15h/CL=02h ----------7F15--CL04------------------------- INT 7F - Alloy NTNX, MW386 - GET AND CLEAR ACKNOWLEDGE STATUS AH = 15h CL = 04h DX:DI -> status structure (see below) Return: AL = status 00h successful DX:DI structure filled 01h busy 0Ah no acknowledgement has arrived SeeAlso: AH=12h,AH=14h/CL=01h Format of status structure: Offset Size Description 00h BYTE sender ID 01h BYTE channel number 02h 4 BYTEs receiver status (see AH=12h) ----------7F16------------------------------- INT 7F - Alloy NTNX, MW386 - DIRECT MEMORY TRANSFER AH = 16h DX:SI -> transfer structure (see below) Return: AL = status 00h successful 0Ah source or destination out of range 0Bh transfer kernal busy--try again Notes: this call transfers memory contents directly between users; both source and destination user IDs may differ from the caller's ID no segment wrap is allowed Format of transfer structure: Offset Size Description 00h WORD bytes to transfer 02h BYTE source ID FEh = caller 03h DWORD source address 07h BYTE destination ID FFh = all slaves except caller FEh = caller 08h DWORD destination address ----------7F21------------------------------- INT 7F - Alloy NTNX, MW386 - SEND MESSAGE OR COMMAND TO USER(S) AH = 21h AL = sender's user ID DS:DX -> control packet (see below) Note: messages or commands are ignored if disabled by the destination user SeeAlso: AH=22h Format of control packet: Offset Size Description 00h BYTE packet type 00h message 01h NTNX command 02h MW386 command 01h BYTE destination user ID or 'A' for all users 02h 62 BYTEs ASCIZ message (packet type 00h) BIOS keycodes terminated by NUL byte (type 01h) or word (02h) Note: a maximum of 16 keycodes will be processed for NTNX and MW386 commands ----------7F22------------------------------- INT 7F - Alloy NTNX - GET MESSAGE AH = 22h Return: pending messages displayed on user's screen SeeAlso: AH=21h ----------7F24------------------------------- INT 7F - Alloy NTNX, MW386 - ATTACH OR RELEASE DRIVE FOR LOW-LEVEL WRITE ACCESS AH = 24h CL = function 00h attach 01h release CH = drive (0=A:,1=B:,etc) Return: AX = status 00h successful 01h invalid request 02h already attached 03h not attached 04h lock table full Note: only drives on the current machine may be attached ----------7F24------------------------------- INT 7F - Alloy NTNX - ATTACH/RELEASE HOST PROCESSOR AH = 24h CL = function 02h attach host 03h release host Return: AX = status 00h successful 01h invalid request 02h already attached 03h not attached 04h lock table full Note: the host processor may be attached in order to perform I/O via the host ----------7F25--CL00------------------------- INT 7F - Alloy ANSK, NTNX, MW386 - GET NETWORK EXECUTIVE VERSION AH = 25h CL = 00h Return: AH = version suffix letter CH = major version number CL = minor version number SeeAlso: AH=25h/CL=01h ----------7F25--CL01------------------------- INT 7F - Alloy ANSK, NTNX, MW386 - GET NETWORK EXECUTIVE TYPE AH = 25h CL = 01h Return: CL = type 00h RTNX 01h ATNX 02h NTNX 03h BTNX 04h MW386 05h ANSK SeeAlso: AH=25h/CL=00h ----------7F26--CL00------------------------- INT 7F - Alloy NTNX, MW386 - GET NTNX FILE MODE AH = 26h CL = 00h Return: AX = file mode bits bit 0: directory protection enabled 1: extended open enabled 2: flush on every disk write 3: flush on every disk write in locked interval 4: flush on reads from simultaneously opened file Note: MW386 does not support file modes, and always returns AX=001Fh SeeAlso: AH=26h,AH=26h/CL=06h ----------7F26------------------------------- INT 7F - Alloy NTNX - SET FILE I/O CHECKING LEVEL AH = 26h CL = check type to set/reset 01h directory protection 02h extended open 03h flush on every disk write 04h flush on disk write if any lock set during write 05h flush on all reads if file written AL = new state (00h off, 01h on) SeeAlso: AH=26h/CL=00h,AH=26h/CL=06h ----------7F26--CL06------------------------- INT 7F - Alloy NTNX - CANCEL FLUSH ON WRITE AH = 26h CL = 06h Note: cancels flags set by AH=26h/CL=03h and AH=26h/CL=04h SeeAlso: AH=26h/CL=00h ----------7F30------------------------------- INT 7F - Alloy MW386 - GET PORT INFORMATION AH = 30h CX = MW386 port number Return: AL = FFh if port not found else driver unit number BL = port mode BH = port type 02h remote DH = owner's machine ID DL = owner's user ID SeeAlso: INT 17/AH=8Bh ----------7F31------------------------------- INT 7F - Alloy MW386 v1.x only - CHECK PORT ASSIGNMENT AH = 31h ??? Return: ??? ----------7F37------------------------------- INT 7F - Alloy NTNX (Host) - GET SEMAPHORE TABLE AH = 37h Return: ES:AX -> semaphore table ----------7F37------------------------------- INT 7F - Alloy ANSK, NTNX (Slave) - DUMP STRING TO TERMINAL AH = 37h DS:DX -> ASCIZ string to display Note: if the string is empty, a terminal update will be forced ----------7F38------------------------------- INT 7F - Alloy NTNX (Slave), MW386 - SET NEW TERMINAL DRIVER AH = 38h AL = new terminal driver number FFh dummy driver FEh current driver FDh load new driver DS:SI -> new driver SeeAlso: AH=39h ----------7F39------------------------------- INT 7F - Alloy MW386 - SET TERMINAL DRIVER FOR ANOTHER USER AH = 39h AL = new terminal driver number DL = user number (FFh = caller) DH = machine number if DL <> FFh Return: CF set if invalid user number CF clear if successful Notes: only available to supervisors the new driver number will not take effect until the user is rebooted SeeAlso: AH=38h ----------7F3A------------------------------- INT 7F - Alloy MW386 - GET TERMINAL PARAMETERS AH = 3Ah DL = user number (FFh = caller) DH = machine number Return: CF clear if successful AH = terminal driver number AL = baud rate (00h = 38400, 01h = 19200, etc) CL = parity (00h none, 01h even, 02h odd) CH = handshaking (00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC) CF set if invalid user number SeeAlso: AH=3Bh ----------7F3B------------------------------- INT 7F - Alloy MW386 - SET TERMINAL PARAMETERS AH = 3Bh AL = baud rate (00h = 38400, 01h = 19200, etc) CL = parity (00h none, 01h even, 02h odd) CH = handshaking (00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC) DL = user number (FFh = caller) DH = machine number for user Return: CF set if invalid user number Notes: only available to supervisors the new parameters will take effect immediately if the user's terminal has not been started, else AH=3Dh must be called to post the changes SeeAlso: AH=3Ah,AH=3Dh ----------7F3C------------------------------- INT 7F - Alloy MW386 - ENABLE/DISABLE AUTOBAUD DETECT AH = 3Ch AL = new state 00h disabled, 01h enabled DL = user number (FFh = caller) DH = machine number for user Return: CF set if invalid user number Note: only available to supervisors SeeAlso: AH=3Dh ----------7F3D------------------------------- INT 7F - Alloy MW386 - POST TERMINAL CONFIGURATION CHANGES AH = 3Dh Note: should be called whenever a program changes the terminal type or its parameters SeeAlso: AH=3Bh ----------7F41------------------------------- INT 7F - Alloy NTNX - LOCK FILE FOR USER AH = 41h AL = user ID DS:DX -> ASCIZ filename Return: AL = status 00h successful 01h invalid function 02h already locked 03h unable to lock 04h lock table full Note: requests exclusive read/write access to file SeeAlso: AH=00h,,AH=41h"MW386",AH=42h"NTNX" ----------7F41------------------------------- INT 7F - Alloy MW386 - LOCK SEMAPHORE FOR USER AH = 41h AL = user ID DS:DX -> ASCIZ semaphore name Return: AL = status 00h successful 01h invalid function 02h semaphore already locked 03h unable to lock semaphore 04h semaphore space exhausted SeeAlso: AH=00h,AH=42h"MW386" ----------7F42------------------------------- INT 7F - Alloy NTNX - UNLOCK FILE FOR USER AH = 42h AL = user ID DS:DX -> ASCIZ filename Return: AL = status 00h successful 01h invalid function 02h already locked 03h unable to lock 04h lock table full SeeAlso: AH=00h,AH=41h"NTNX",AH=42h"MW386" ----------7F42------------------------------- INT 7F - Alloy MW386 - UNLOCK SEMAPHORE FOR USER AH = 42h AL = user ID DS:DX -> ASCIZ semaphore name Return: AL = status 00h successful 01h invalid function 03h unable to unlock semaphore SeeAlso: AH=02h,AH=41h"MW386",AH=42h"NTNX" ----------7F4E------------------------------- INT 7F - Alloy MW386 v2+ - SET ERROR MODE AH = 4Eh AL = error mode flags bit 0: display critical disk errors 1: display sharing errors DX = 4E58h ("NX") Return: AL = status 00h successful SeeAlso: AH=4Fh ----------7F4F------------------------------- INT 7F - Alloy MW386 v2+ - SET FCB MODE AH = 4Fh AL = FCB mode 02h read/write compatibility 42h read/write shared DX = 4E58h ("NX") Return: AL = status 00h successful ----------7F81------------------------------- INT 7F - Alloy NTNX - ATTACH DEVICE FOR USER AH = 81h AL = user ID DS:DX -> ASCIZ device name SeeAlso: AH=82h ----------7F82------------------------------- INT 7F - Alloy NTNX - RELEASE DEVICE FOR USER AH = 82h AL = user ID DS:DX -> ASCIZ device name SeeAlso: AH=81h ----------7FA0------------------------------- INT 7F - Alloy MW386 - GET USER NAME AH = A0h DL = user number (FFh = caller) DH = machine number for user ES:DI -> 17-byte buffer for ASCIZ user name Return: CF set if invalid user number SeeAlso: AH=03h,AH=A1h ----------7FA1------------------------------- INT 7F - Alloy MW386 - GET MACHINE, USER, AND PROCESS NUMBER AH = A1h Return: AL = process number DL = user number DH = machine number SeeAlso: AH=03h,AH=A0h,AH=A2h ----------7FA2------------------------------- INT 7F - Alloy MW386 - GET USER PRIVILEGE LEVEL AH = A2h DL = user number (FFh = caller) DH = machine number for user Return: CF clear if successful AL = privilege level 00h supervisor 01h high 02h medium 03h low CF set if invalid user number SeeAlso: AH=A1h,AH=A3h ----------7FA3------------------------------- INT 7F - Alloy MW386 - GET USER LOGIN STATE AH = A3h DL = user number DH = machine number for user Return: CF clear if successful AL = login state 00h never logged in 01h currently logged out 03h currently logged in CF set if invalid user number or user not active SeeAlso: AH=A2h ----------7FA4------------------------------- INT 7F - Alloy MW386 - VERIFY USER PASSWORD AH = A4h DS:DX -> ASCIZ password (null-padded to 16 bytes) Return: AL = 00h if accepted else invalid password ----------7FA5------------------------------- INT 7F - Alloy MW386 - GET/SET USER STATUS AH = A5h AL = function 00h get status Return: BX = user flags bit 5: allow messages CL = scan code for task manager hotkey CH = scan code for spooler hotkey DL = scan code for task swapper hotkey DH = modifier key status 01h set status BX = user flags (see above) CL = scan code for task manager hotkey CH = scan code for spooler hotkey DL = scan code for task swapper hotkey DH = modifier key status DI = machine number and user number Return: CF set if invalid user number Note: must have supervisor privilege to set another user's status ----------7FB0------------------------------- INT 7F - Alloy NTNX, MW386 - RELEASE ALL SEMAPHORES FOR USER AH = B0h AL = user number DS = code segment Note: MW386 ignores AL and DS; it releases all semaphores locked using INT 67 or INT 7F locking functions SeeAlso: AH=B1h,AH=B2h,AH=B3h,AH=B4h ----------7FB1------------------------------- INT 7F - Alloy NTNX, MW386 - RELEASE NORMAL SEMAPHORES FOR USER AH = B1h AL = (bits 7-5) 000 (bits 4-0) user ID Note: MW386 ignores AL; it releases all semaphores locked using INT 67 or INT 7F locking functions SeeAlso: AH=B0h,AH=B2h,AH=B3h,AH=B4h ----------7FB2------------------------------- INT 7F - Alloy NTNX - RELEASE MESSAGES FOR USER AH = B2h AL = (bits 7-5) 001 (bits 4-0) user ID SeeAlso: AH=B0h,AH=B1h,AH=B3h,AH=B4h ----------7FB3------------------------------- INT 7F - Alloy NTNX - RELEASE FILES FOR USER AH = B3h AL = (bits 7-5) 010 (bits 4-0) user ID SeeAlso: AH=B0h,AH=B1h,AH=B2h,AH=B4h ----------7FB4------------------------------- INT 7F - Alloy NTNX - RELEASE DEVICES FOR USER AH = B4h AL = user ID SeeAlso: AH=B0h,AH=B1h,AH=B2h,AH=B3h ----------7FC3------------------------------- INT 7F - Alloy MW386 - WRITE BYTE TO TERMINAL AUX PORT AH = C3h AL = byte to write Return: CF clear if successful CF set on error SeeAlso: AH=C6h ----------7FC5------------------------------- INT 7F - Alloy MW386 - CHANGE CONSOLE MODE AH = C5h AL = new console mode 00h keyboard indirect 01h keyboard direct 02h data handshake enforced 03h no data handshake Return: CF clear if successful AL = prior console mode CF set on error (caller is not remote user) Note: modes 2 and 3 may be used for input through the console port; no video output should be performed in these modes ----------7FC6------------------------------- INT 7F - Alloy MW386 - WRITE BYTE TO CONSOLE PORT AH = C6h AL = byte to write Return: CF clear if successful CF set on error (caller is not remote user) Note: any terminal driver data translation will be bypassed SeeAlso: AH=C3h,AH=C7h ----------7FC7------------------------------- INT 7F - Alloy MW386 - READ CONSOLE DATA BYTE AH = C7h Return: CF clear if successful AL = byte read CF set on error (no data available or caller is not remote user) Note: used to read data after placing console in mode 2 or 3 (see AH=C5h) SeeAlso: AH=C5h,AH=C6h,AH=C8h ----------7FC8------------------------------- INT 7F - Alloy MW386 - READ CONSOLE DATA INTO BUFFER AH = C8h AL = maximum bytes to read ES:DI -> buffer for console data Return: CF clear if successful CX = number of bytes read CF set on error (caller is not remote user) SeeAlso: AH=C7h ----------7FCF------------------------------- INT 7F - Alloy NTNX - REBOOT USER PROCESSOR AH = CFh DS:DX -> ASCIZ string containing user number to be reset SeeAlso: AH=D6h ----------7FD6------------------------------- INT 7F - Alloy MW386 - RESET NETWORK EXECUTIVE AH = D6h DS:DX -> reset packet (see below) Return: never if succesful Note: all users will be shut down immediately if successful SeeAlso: AH=CFh Format of reset packet: Offset Size Description 00h DWORD reset code (60606060h) 04h 16 BYTEs ASCIZ supervisor password padded with nulls ----------7FD7------------------------------- INT 7F - Alloy MW386 - POST EVENT AH = D7h AL = user number (if local event) DX = event number ----------7FD8------------------------------- INT 7F - Alloy MW386 - FLUSH DISK BUFFERS AH = D8h Return: CF set on error Note: forces all disk buffers to be written out immediately SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h,INT 2F/AX=1120h ----------7FDB------------------------------- INT 7F - Alloy MW386 v2+ - GET MW386 INVOCATION DRIVE AH = DBh Return: AL = drive from which MW386 was started (2=C:,3=D:,etc) ----------7FE0------------------------------- INT 7F - Alloy MW386 - CREATE DOS TASK AH = E0h AL = memory size (00h=128K, 01h=256K, 02h=384K, 03h=512K, 04h=640K) DS:DX -> ASCIZ task name (max 16 bytes) Return: CF clear if successful AL = task create ID CF set on error Note: only foreground DOS tasks can use this function SeeAlso: AH=E1h,AH=E2h,AH=E3h,AH=E6h,AH=E7h ----------7FE1------------------------------- INT 7F - Alloy MW386 - GET DOS TASK PID FROM CREATE ID AH = E1h AL = create ID (from AH=E0h) Return: AL = DOS process number CL = memory size (00h=128K, 01h=256K, 02h=384K, 03h=512K, 04h=640K) Note: this function should not be called immediately after creating a new DOS task, since the new task is being initialized by a concurrent process SeeAlso: AH=E0h,AH=E2h ----------7FE2------------------------------- INT 7F - Alloy MW386 - SWITCH TO NEW DOS TASK AH = E2h AL = DOS process number (from AH=E1h) Return: CF set on error (invalid process number or caller not foreground task) Notes: specified task becomes the foreground task and current task is placed in the background may only be called by a foreground task SeeAlso: AH=E0h,AH=E1h ----------7FE3------------------------------- INT 7F - Alloy MW386 - CHANGE NAME OF DOS TASK AH = E3h ---v1.x--- AL = user number ---v2+--- BH = user number BL = task number --- DS:DX -> ASCIZ task name Return: CF set on error (invalid process number) SeeAlso: AH=E0h,AH=E4h,AH=E5h ----------7FE4------------------------------- INT 7F - Alloy MW386 - GET TASK NAME FROM PROCESS NUMBER AH = E4h ---v1.x--- AL = user number ---v2+--- BH = user number BL = task number --- ES:DI -> buffer for task name Return: CF clear if successful CL = memory size (00h=128K, 01h=256K, 02h=384K, 03h=512K, 04h=640K) DX = task flags bit 7: MSDOS process ES:DI buffer filled CF set on error (invalid process number) SeeAlso: AH=E3h,AH=E5h ----------7FE5------------------------------- INT 7F - Alloy MW386 - GET PROCESS NUMBER FROM TASK NAME AH = E5h DS:DX -> ASCIZ task name BH = user number Return: CF clear if successful AL = DOS process number CL = memory size (00h=128K, 01h=256K, 02h=384K, 03h=512K, 04h=640K) CF set on error (no match for name) SeeAlso: AH=E3h,AH=E4h ----------7FE6------------------------------- INT 7F - Alloy MW386 - GET NUMBER OF AVAILABLE USER TASKS AH = E6h Return: AX = number of processes available to current user SeeAlso: AH=E0h ----------7FE7------------------------------- INT 7F - Alloy MW386 - REMOVE DOS TASK AH = E7h AL = DOS process number Return: CF set on error (invalid process number or first process) Note: can only be called by a foreground task SeeAlso: AH=E0h ----------7FE8------------------------------- INT 7F - Alloy MW386 - DOS TASK DELAY AH = E8h CX = delay time in milliseconds Note: a delay of 0 may be used to surrender the current time slice SeeAlso: INT 15/AX=1000h,INT 21/AH=EEh"DoubleDOS",INT 2F/AX=1680h ----------7FF0------------------------------- INT 7F - Alloy MW386 - RESTRICT DIRECTORY TO GROUP AH = F0h AL = group number DS:DX -> ASCIZ directory name Return: CF clear if successful AX = status 0002h directory not found 0003h directory not found 0005h directory in use, cannot be restricted 02xxh restricted to group xxh CF set on error Note: the restriction on the directory may be removed by calling this function with group 0, then using AH=F1h to assign the directory to group 0 SeeAlso: AH=F1h,AH=F2h,AH=F3h ----------7FF1------------------------------- INT 7F - Alloy MW386 - ASSIGN DIRECTORY TO GROUP AH = F1h AL = group number DS:DX -> ASCIZ directory name Notes: performs permanent assignment to a group; no immediate action is taken unless the directory has been restricted with AH=F0h may be used to restrict a nonexistent directory SeeAlso: AH=F0h ----------7FF2------------------------------- INT 7F - Alloy MW386 - READ RESTRICTED DIRECTORY ENTRY AH = F2h CX = entry number ES:DI -> 64-byte buffer Return: CF clear if successful buffer filled with 63-byte directory info and 1-byte group number CF set on error (invalid entry) SeeAlso: AH=F0h,AH=F3h ----------7FF3------------------------------- INT 7F - Alloy MW386 - READ RESTRICTED DIRECTORY ENTRY FOR GROUP AH = F3h AL = group number CX = entry number ES:DI -> 64-byte buffer Return: CF clear if successful CX = next entry number buffer filled with 63-byte directory info and 1-byte group number CF set on error (no more matching entries) Note: like AH=F2h, but only returns directories belonging to the specified group SeeAlso: AH=F2h ----------7FF8------------------------------- INT 7F - Alloy MW386 - ASSIGN USER TO GROUP AH = F8h AL = group number DL = user number DH = machine number (currently 00h) Return: CF clear if successful CF set on error (user already in maximum number of groups) Note: each user is allowed eight group assignments SeeAlso: AH=F9h,AH=FAh ----------7FF9------------------------------- INT 7F - Alloy MW386 - REMOVE USER FROM GROUP AH = F9h AL = group number DL = user number DH = machine number (currently 00h) Return: CF set if failed SeeAlso: AH=F8h,AH=FAh ----------7FFA------------------------------- INT 7F - Alloy MW386 - GET USER GROUP LIST AH = FAh DL = user number DH = machine number (currently 00h) ES:DI -> 16-byte buffer for group list Return: CX = number of groups ES:DI buffer filled with group numbers SeeAlso: AH=F8h,AH=F9h ----------7FFB------------------------------- INT 7F - Alloy MW386 - ASSIGN GROUP NAME AH = FBh CL = group number ES:DI -> ASCIZ group name (max 17 bytes) SeeAlso: AH=FCh ----------7FFC------------------------------- INT 7F - Alloy MW386 - GET GROUP NAME AH = FCh CL = group number ES:DI -> 17-byte buffer for ASCIZ name Return: ES:DI buffer filled Note: if the group has not been named, "(unnamed)" is returned SeeAlso: AH=FBh ----------80--------------------------------- INT 80 - Q-PRO4 - ??? ----------80--------------------------------- INT 80 - reserved for BASIC ----------80----BX0000----------------------- INT 80 - SoundBlaster SBFM driver - GET VERSION BX = 0000h Return: ??? Note: SBFM installs at a free interrupt in the range 80h through BFh SeeAlso: BX=0008h,INT 2F/AX=FBFBh ----------80----BX0001----------------------- INT 80 - SoundBlaster SBFM driver - SET MUSIC STATUS BYTE ADDRESS BX = 0001h DX:AX -> music status byte SeeAlso: BX=0000h,BX=0002h,BX=0003h ----------80----BX0002----------------------- INT 80 - SoundBlaster SBFM driver - SET INSTRUMENT TABLE BX = 0002h CX = number of instruments DX:AX -> instrument table SeeAlso: BX=0000h,BX=0001h,BX=0005h ----------80----BX0003----------------------- INT 80 - SoundBlaster SBFM driver - SET SYSTEM CLOCK RATE BX = 0003h AX = clock rate divisor (1193180 / desired frequency in Hertz) FFFFh to restore to 18.2 Hz SeeAlso: BX=0000h,BX=0001h,BX=0004h ----------80----BX0004----------------------- INT 80 - SoundBlaster SBFM driver - SET DRIVER CLOCK RATE BX = 0004h AX = driver clock rate divisor (1193180 / frequency in Hertz) Note: default frequency is 96 Hz SeeAlso: BX=0000h,BX=0003h ----------80----BX0005----------------------- INT 80 - SoundBlaster SBFM driver - TRANSPOSE MUSIC BX = 0005h AX = semi-tone offset SeeAlso: BX=0000h,BX=0002h,BX=0006h ----------80----BX0006----------------------- INT 80 - SoundBlaster SBFM driver - PLAY MUSIC BX = 0006h DX:AX -> music block Return: AX = status 0000h successful 0001h music already active SeeAlso: BX=0000h,BX=0007h,BX=000Ah ----------80----BX0007----------------------- INT 80 - SoundBlaster SBFM driver - STOP MUSIC BX = 0007h Return: AX = status 0000h successful 0001h music not active SeeAlso: BX=0000h,BX=0006h,BX=0009h ----------80----BX0008----------------------- INT 80 - SoundBlaster SBFM driver - RESET DRIVER BX = 0008h Return: AX = status 0000h successful 0001h music is active SeeAlso: BX=0000h ----------80----BX0009----------------------- INT 80 - SoundBlaster SBFM driver - PAUSE MUSIC BX = 0009h Return: AX = status 0000h successful 0001h no music active SeeAlso: BX=0000h,BX=0007h,BX=000Ah ----------80----BX000A----------------------- INT 80 - SoundBlaster SBFM driver - RESUME MUSIC BX = 000Ah Return: AX = status 0000h successful 0001h no music paused SeeAlso: BX=0000h,BX=0006h,BX=0009h ----------80----BX000B----------------------- INT 80 - SoundBlaster SBFM driver - SET USER-DEF TRAP FOR SYSTEM-EXCLUSIVE CMDS BX = 000Bh DX:AX -> trap routine SeeAlso: BX=0000h ----------8001------------------------------- INT 80 - QPC Software PKTINT.COM - INITIALIZE AH = 01h Return: AX = 0000h CX = FFFFh DX = FFFFh Notes: this interrupt is the WinQVTNet protected mode interface to Windows 3.0 all buffer pointers are reset back to 0 ----------8002------------------------------- INT 80 - QPC Software PKTINT.COM - GET BUFFER ADDRESSES AH = 02h BX = extra bytes to allocate per packet Return: AX = segment address of 10K buffer (for receives???) BX = segment address of 2K buffer (for sends???) SeeAlso: AH=05h ----------8003------------------------------- INT 80 - QPC Software PKTINT.COM - GET ENTRY POINT AH = 03h Return: CX:DX -> receive call address Note: the returned address can be used in the packet driver calls since it will be a valid address in all DOS boxes SeeAlso: AH=06h ----------8004------------------------------- INT 80 - QPC Software PKTINT.COM - ENABLE??? AH = 04h BX = ??? Return: ??? ----------8005------------------------------- INT 80 - QPC Software PKTINT.COM - GET RECEIVE STATISTICS AH = 05h Return: AX = amount of buffer currently in use BX = current offset in buffer CX = number of times receive has been called SeeAlso: AH=02h ----------8006------------------------------- INT 80 - QPC Software PKTINT.COM - REMOVE RECEIVED PACKET AH = 06h Return: BX = next packet offset CX = number of bytes still buffered DX = size of packet released back into buffer pool SeeAlso: AH=03h ----------81--------------------------------- INT 81 - reserved for BASIC ----------81--------------------------------- INT 81 - IBM TOKEN RING ADAPTER - ??? ----------82--------------------------------- INT 82 - reserved for BASIC ----------82--------------------------------- INT 82 - IBM TOKEN RING ADAPTER - ??? AH = function 00h display message??? DS:BX -> string ??? Return: ??? ----------83--------------------------------- INT 83 - reserved for BASIC ----------84--------------------------------- INT 84 - reserved for BASIC ----------85--------------------------------- INT 85 - reserved for BASIC ----------86--------------------------------- INT 86 - NetBIOS - ORIGINAL INT 18 Note: some implementations of NetBIOS reportedly relocate INT 18 here SeeAlso: INT 18 ----------86--------------------------------- INT 86 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------86--------------------------------- INT 86 - APL*PLUS/PC - Terminate APL session and return to DOS ----------87--------------------------------- INT 87 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------87--------------------------------- INT 87 - APL*PLUS/PC - ???? ----------88--------------------------------- INT 88 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------88----AL00------------------------- INT 88 - APL*PLUS/PC - CREATE OBJECT OF ARBITRARY RANK OR SHAPE AL = 00h BX = STPTR of the variable to be assigned ES:SI -> model of type, rank, and shape (see below) Return: ES:DI -> first data byte of object DX:CX = number of elements in the object SeeAlso: INT C8"APL" Format of shape model: Offset Size Description 00h BYTE type 01h character (2-byte dimension sizes) 02h integer (2-byte dimension sizes) 08h floating point (2-byte dimension sizes) 11h character (4-byte dimension sizes) 12h integer (4-byte dimension sizes) 18h floating point (4-byte dimension sizes) 01h BYTE rank 02h WORD/DWORD first dimension of shape N WORD/DWORD second dimension of shape ... ----------88----AL01------------------------- INT 88 - APL*PLUS/PC - CREATE CHARACTER SCALAR/VECTOR/MATRIX <64K IN SIZE AL = 01h AH = rank BX = STPTR of the variable to be assigned CX = first dimension (if any) DX = second dimension (if any) Return: ES:DI -> object CX = number of elements in the object Note: each dimension must be 32767 or smaller SeeAlso: AL=02h,AL=08h,INT C8"APL" ----------88----AL02------------------------- INT 88 - APL*PLUS/PC - CREATE INTEGER SCALAR/VECTOR/MATRIX <64K IN SIZE AL = 02h AH = rank BX = STPTR of the variable to be assigned CX = first dimension (if any) DX = second dimension (if any) Return: ES:DI -> object CX = number of elements in the object Note: each dimension must be 32767 or smaller SeeAlso: AL=01h,AL=08h,INT C8"APL" ----------88----AL08------------------------- INT 88 - APL*PLUS/PC - CREATE FLOATING POINT SCALAR/VECTOR/MATRIX <64K IN SIZE AL = 08h AH = rank BX = STPTR of the variable to be assigned CX = first dimension (if any) DX = second dimension (if any) Return: ES:DI -> object CX = number of elements in the object Note: each dimension must be 32767 or smaller SeeAlso: AL=01h,AL=02h,INT C8"APL" ----------88----ALF5------------------------- INT 88 - APL*PLUS/PC - FORCE OBJECT INTO REAL WORKSPACE FROM VIRTUAL AL = F5h BX = STPTR of object SeeAlso: INT C8"APL" ----------88----ALF6------------------------- INT 88 - APL*PLUS/PC - MAKE NAME IMMUNE FROM OUTSWAPPING AL = F6h BX = STPTR of object SeeAlso: AL=F7h,AL=F8h,INT C8"APL" ----------88----ALF7------------------------- INT 88 - APL*PLUS/PC - MAKE NAME ELIGIBLE FOR OUTSWAPPING AL = F7h BX = STPTR of object SeeAlso: AL=F6h,AL=F8h,INT C8"APL" ----------88----ALF8------------------------- INT 88 - APL*PLUS/PC - REPORT WHETHER NAME IS ELIGIBLE FOR OUTSWAPPING AL = F8h BX = STPTR of object Return: BX = 0000h eligible 0001h not eligible SeeAlso: AL=F6h,AL=F7h,INT C8"APL" ----------88----ALF9------------------------- INT 88 - APL*PLUS/PC - DETERMINE NAME STATUS AL = F9h ES:SI -> name CX = length of name Return: CF set if name ill-formed or already in use BX = STPTR if already in symbol table CF clear if name is available for use BX = 0000h Note: does not force the name into the workspace SeeAlso: AL=FEh,AL=FFh,INT C8"APL" ----------88----ALFC------------------------- INT 88 - APL*PLUS/PC - DETERMINE IF MEMORY AVAIL WITHOUT GARBAGE COLLECTION AL = FCh BX = amount of memory needed (paragraphs) Return: CF clear if memory available CF set if a workspace compaction is required SeeAlso: AL=FDh,INT C8"APL" ----------88----ALFD------------------------- INT 88 - APL*PLUS/PC - PERFORM GARBAGE COLLECTION AND RETURN AVAILABLE MEMORY AL = FDh Return: BX = number of paragraphs available in workspace SeeAlso: AL=FCh,INT C8"APL" ----------88----ALFE------------------------- INT 88 - APL*PLUS/PC - CREATE NAME AL = FEh ES:SI -> name CX = length of name Return: BX = STPTR of name DX = interpreter's data segment SeeAlso: AL=F9h,AL=FFh,INT C8"APL" ----------88----ALFF------------------------- INT 88 - APL*PLUS/PC - DETERMINE NAME STATUS AL = FFh ES:SI -> name CX = length of name Return: CF set if name ill-formed or already in use BX = STPTR if already in symbol table CF clear if name is available for use BX = 0000h Note: forces the name into the workspace and makes it immune from outswapping SeeAlso: AL=F9h,AL=FEh,INT C8"APL" ----------89--------------------------------- INT 89 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------8A--------------------------------- INT 8A - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------8A--------------------------------- INT 8A - APL*PLUS/PC - PRINT SCREEN Note: same as INT 05 SeeAlso: INT 05,INT 8C"APL",INT CA"APL" ----------8B--------------------------------- INT 8B - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------8B--------------------------------- INT 8B - APL*PLUS/PC - BEEP Note: same as printing a ^G via INT 21/AH=02h SeeAlso: INT 21/AH=02h,INT CB"APL" ----------8C--------------------------------- INT 8C - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------8C--------------------------------- INT 8C - APL*PLUS/PC - CLEAR SCREEN MEMORY AX = flag 0000h do not save display attributes 0001h save attributes SeeAlso: INT CC"APL" ----------8D--------------------------------- INT 8D - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------8E--------------------------------- INT 8E - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------8F--------------------------------- INT 8F - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------90--------------------------------- INT 90 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------90--------------------------------- INT 90 - APL*PLUS/PC - USED BY PORT 10 PRINTER DRIVER ----------91--------------------------------- INT 91 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------91--------------------------------- INT 91 - IBM TOKEN RING ADAPTER - ??? ----------92--------------------------------- INT 92 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------92--------------------------------- INT 92 - Sangoma X.25 INTERFACE PROGRAM BX:DX -> control block SeeAlso: INT 68"Sangoma" ----------92E1------------------------------- INT 92 - Da Vinci eMail Dispatcher INTERFACE AH = E1h AL = function BX = stack count (number of words to push) CX:DX -> stack data (in word-reversed order ready to push) Return: AX = status 0001h success FF97h "ERS_NOT_AVAILABLE" FF99h "ERS_TOO_MANY_NAMES" FF9Ah "ERS_BAD_NAME_PASSWORD" FFE3h "ERS_NAME_NOT_FOUND" FFF8h "ERS_USE_STRING" (call NetGetError to get error string) FFFFh "ERS_NO_SUCH_FILE" Note: preserves BP, DS, SI, DI; other registers may be destroyed ----------92E100BX000A----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetInitStart" AX = E100h BX = 000Ah CX:DX -> parameter block (see below) Return: AX = 0001h success Note: this function is used to initialize the dispatcher SeeAlso: AX=E101h,AX=E103h Format of parameter block: Offset Size Description 00h WORD segment of ??? 02h WORD offset of ??? 04h WORD high part of long ??? 06h WORD low part of long ??? 08h WORD high part of long ??? 0Ah WORD low part of long ??? 0Ch WORD high part of long ??? 0Eh WORD low part of long ??? 10h WORD high part of long ??? 12h WORD low part of long ??? ----------92E101BX0000----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetInitCheck" AX = E101h BX = 0000h CX:DX ignored Return: AX = 0001h success SeeAlso: AX=E100h ----------92E102BX0000----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetCheckDriver" AX = E102h BX = 0000h CX:DX ignored Return: AX = 0001h success Note: this function is used to determine if the dispatcher is loaded SeeAlso: AX=E10Bh,AX=E180h ----------92E103BX0000----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetTerminate" AX = E103h BX = 0000h CX:DX ignored Return: AX = status (see AH=E1h) SeeAlso: AX=E100h ----------92E104BX0006----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetWhereIs" AX = E104h BX = 0006h CX:DX -> parameter block (see below) Return: AX = status (see AH=E1h) Note: this function is used to verify node address for usernames Format of parameter block: Offset Size Description 00h WORD segment of node address buffer 02h WORD offset of node address buffer 04h WORD segment of uppercase username 06h WORD offset of uppercase username 08h WORD segment of "DVSEMAIL" 0Ah WORD offset of "DVSEMAIL" ----------92E105BX0007----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetOpen" AX = E105h BX = 0007h CX:DX -> parameter block (see below) Return: AX = 0000h Error AX = handle Note: this function is used to open a submission channel SeeAlso: AX=E10Ah Format of parameter block: Offset Size Description 00h WORD operation (1 = read, 2 = write) 02h WORD segment of uppercase To: username 04h WORD offset of uppercase To: username 06h WORD segment of "DVSEMAIL" 08h WORD offset of "DVSEMAIL" 0Ah WORD segment of node address 0Ch WORD offset of node address ----------92E106BX0004----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetRead" AX = E106h BX = 0004h CX:DX -> parameter block Return: AX = 0001h SeeAlso: AX=E108h ----------92E107BX0002----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetGetError" AX = E107h BX = 0002h CX:DX -> parameter block Return: AX = 0001h ----------92E108BX0004----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetWrite" AX = E108h BX = 0004h CX:DX -> parameter block (see below) Return: AX = amount written Note: this function is used to write transactions to the dispatcher. The command block is written first and then another call is used to write the associated data. SeeAlso: AX=E106h Format of parameter block: Offset Size Description 00h WORD buffer count 02h WORD segment of command buffer 04h WORD offset of command buffer 06h WORD handle from NetOpen Format of command buffer: Offset Size Description 00h BYTE command 21h '!' Protocol commands for remote control 41h 'A' Authorization protocol element 42h 'B' Return(back) routing information Associated data is the From: username 43h 'C' Carbon Copy list Associated data is a comma delimitted list of usernames 44h 'D' Distribution list Associated data is a comma delimitted list of usernames 45h 'E' Mail end marker No associated data 48h 'H' Mail message header Associated data is a message header buffer 4Dh 'M' Mail message Associated data is the body of the message 4Fh 'O' Object 50h 'P' Paperclip attachment 52h 'R' Routing information Associated data is the To: username 53h 'S' Subject Associated data is the subject of the message 54h 'T' Trail of Reply/Forwards 01h BYTE subcommand 02h DWORD length of associated data Format of message header buffer: Offset Size Description 00h 30 BYTEs subject line 1Eh 24 BYTEs To 36h 24 BYTEs From 4Eh DWORD Time BYTE 0 BYTE hour BYTE minute BYTE second 52h DWORD Date BYTE 0 BYTE year BYTE month BYTE day 56h DWORD serial number (0L) 5Ah WORD mail types bit 7 blind carbon copy bit 6 carbon copy bit 5 priority bit 4 confidential bit 3 certified bit 2 bulk bits 1-0 class (first, second, third, bulk) 5Ch WORD special types (0) ----------92E109BX0001----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetErrorFix" (UNUSED) AX = E109h BX = 0001h CX:DX -> ??? Return: AX = FF97h (ERS_NOT_AVAILABLE) ----------92E10ABX0001----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetClose" AX = E10Ah BX = 0001h CX:DX -> parameter block (see below) Return: AX = 0001h Note: this function is used to close a dispatcher handle SeeAlso: AX=E105h Format of parameter block: Offset Size Description 00h WORD handle from NetOpen ----------92E10BBX0004----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetCheckQueue" AX = E10Bh BX = 0004h CX:DX -> parameter block (see below) Return: AX = 0001h SeeAlso: AX=E102h,AX=E10Ch Format of parameter block: Offset Size Description 00h WORD segment of 24 byte username buffer 02h WORD offset of 24 byte username buffer 04h WORD segment of 24 byte protocol buffer 06h WORD offset of 24 byte protocol buffer ----------92E10CBX0002----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetReadQueue" AX = E10Ch BX = 0002h CX:DX -> parameter block (see below) Return: AX = 0001h SeeAlso: AX=E10Bh Format of parameter block: Offset Size Description 00h WORD Segment of 128 byte node address buffer 02h WORD Offset of 128 byte node address buffer ----------92E10DBX0006----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetSubmitName" AX = E10Dh BX = 0006h CX:DX -> parameter block (see below) Return: AX = status (see AH=E1h) Note: this function is used to verify username/password SeeAlso: AX=E10Eh Format of parameter block: Offset Size Description 00h WORD segment of uppercase password string 02h WORD offset of uppercase password string 04h WORD segment of uppercase username string 06h WORD offset of uppercase username string 08h WORD segment of "DVSEMAIL" 0Ah WORD offset of "DVSEMAIL" ----------92E10EBX0004----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetRemoveName" AX = E10Eh BX = 0004h CX:DX -> parameter block (see below) Return: AX = 0001h Note: this function is used to remove a username SeeAlso: AX=E10Dh Format of parameter block: Offset Type Description 00h WORD segment of uppercase username 02h WORD offset of uppercase username 04h WORD segment of "DVSEMAIL" 06h WORD offset of "DVSEMAIL" ----------92E10FBX0000----------------------- INT 92 - Da Vinci eMail Dispatcher - IS ANYONE THERE? QUERY AX = E10Fh BX = 0000h CX:DX ignored Return: AX = 0001h ----------92E110BX0006----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetGetAltRoute" AX = E110h BX = 0006h CX:DX -> ??? Return: AX = 0001h SeeAlso: AX=E111h,AX=E113h ----------92E111BX0004----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetDeleteAltRoutes" AX = E111h BX = 0004h CX:DX -> ??? Return: AX = 0001h SeeAlso: AX=E110h,AX=E113h ----------92E112BX0008----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetChangePassword" AX = E112h BX = 0008h CX:DX -> ??? Return: AX = 0001h ----------92E113BX0008----------------------- INT 92 - Da Vinci eMail Dispatcher - "NetSetAltRoute" AX = E113h BX = 0008h CX:DX -> ??? Return: AX = 0001h SeeAlso: AX=E110h,AX=E111h ----------92E175----------------------------- INT 92 - Da Vinci eMail Dispatcher - BECOME MICRO TSR AX = E175h Return: AX = 0012h BX = PSP ----------92E180----------------------------- INT 92 - Da Vinci eMail Dispatcher - INSTALLATION CHECK AX = E180h Return: AX = 0012h if installed ES:DX -> '$'-terminated driver information string SeeAlso: AX=E102h ----------93--------------------------------- INT 93 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------93--------------------------------- INT 93 - IBM TOKEN RING ADAPTER - ??? ----------94--------------------------------- INT 94 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------95--------------------------------- INT 95 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------95--------------------------------- INT 95 - APL*PLUS/PC - DETERMINE R= SPACE Note: use only when the R= option is invoked on entering APL ----------96--------------------------------- INT 96 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------97--------------------------------- INT 97 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------98--------------------------------- INT 98 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------99--------------------------------- INT 99 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------9A--------------------------------- INT 9A - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------9B--------------------------------- INT 9B - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------9C--------------------------------- INT 9C - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------9D--------------------------------- INT 9D - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------9E--------------------------------- INT 9E - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------9F--------------------------------- INT 9F - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------A0--------------------------------- INT A0 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------A0--------------------------------- INT A0 - APL*PLUS/PC - USED BY APL/GSS*CGI GRAPHICS INTERFACE SeeAlso: INT 59 ----------A1--------------------------------- INT A1 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------A2--------------------------------- INT A2 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------A3--------------------------------- INT A3 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------A4--------------------------------- INT A4 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------A4--------------------------------- INT A4 U - Right Hand Man API function number in AH Note: Right-Hand Man is a TSR desk-top utility, and only hooks this interrupt while popped up ----------A5--------------------------------- INT A5 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------A6--------------------------------- INT A6 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------A7--------------------------------- INT A7 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------A8--------------------------------- INT A8 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------A9--------------------------------- INT A9 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------AA--------------------------------- INT AA - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------AB--------------------------------- INT AB - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------AC--------------------------------- INT AC - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------AD--------------------------------- INT AD - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------AE--------------------------------- INT AE - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------AF--------------------------------- INT AF - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------B0--------------------------------- INT B0 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------B1--------------------------------- INT B1 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------B2--------------------------------- INT B2 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------B3--------------------------------- INT B3 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------B370------------------------------- INT B3 - ZIPKEY - GET VERSION AH = 70h Return: AH = major version AL = minor version CL = number of states and territories in current database DH = year of current database - 1900 DL = month of current database's file date Return: AX destroyed Notes: if installed, the string "ZIPKEY" is present at offset 75h in the interrupt handler's segment, and the byte at 7Bh contains the API version number (00h for v1.x, 01h for v2.0) ZIPKEY is a resident ZIPCODE database by Eric Isaacson ----------B371------------------------------- INT B3 - ZIPKEY - CONVERT TWO-LETTER ABBREVIATION TO STATE CODE AH = 71h BX = abbreviation, in either case (first letter in BL) Return: CF set on error AL = FFh CF clear if successful AL = ZIPKEY state code SeeAlso: AH=72h ----------B372------------------------------- INT B3 - ZIPKEY - CONVERT STATE CODE TO TWO-LETTER ABBREVIATION AH = 72h BL = ZIPKEY state code Return: CF set on error AX destroyed CF clear if successful AX = abbreviation, in upper case SeeAlso: AH=71h,AH=73h ----------B373------------------------------- INT B3 - ZIPKEY - CONVERT STATE CODE TO STATE NAME AH = 73h BL = ZIPKEY state code ES:DI -> buffer for name Return: CF set on error AX destroyed CF clear if successful ES:DI points one byte beyond end of name SeeAlso: AH=72h ----------B374------------------------------- INT B3 - ZIPKEY - CONVERT ZIPCODE TO ASCII DIGITS AH = 74h DX = zipcode region (0-999) CH = last two digits of zipcode (0-99) ES:DI -> buffer Return: CF set on error AX destroyed CF clear if successful ES:DI points one byte beyond end of digit string ----------B375------------------------------- INT B3 - ZIPKEY - LOOK UP STATE CODE FOR ZIPCODE AH = 75h DX = zipcode region (0-999) CH = last two digits of zipcode (0-99) Return: CF set on error (zipcode not found) AL = suggested state code, FFh if none CF clear if successful AL = ZIPKEY state code BX = area code (v2.0+) SeeAlso: AH=76h,AH=79h ----------B376------------------------------- INT B3 - ZIPKEY - LOOK UP CITY AND STATE FOR ZIPCODE AH = 76h DX = zipcode region (0-999) CH = last two digits of zipcode (0-99) ES:DI -> buffer for name Return: CF set on error AL = suggested state code, FFh if none ES:DI buffer filled with suggested city name CF clear if successful AL = ZIPKEY state code BX = area code (v2.0+) ES:DI points one byte beyond end of name SeeAlso: AH=75h,AH=78h ----------B377------------------------------- INT B3 - ZIPKEY - PLAY BACK EXIT KEY FOR ENTRY WITH GIVEN ZIPCODE AH = 77h DX = zipcode region (0-999) CH = last two digits of zipcode (0-99) BX = 16-bit BIOS keycode for a defined ZIPKEY alternate exit key Return: CF set on error AX destroyed CF clear if successful zipcode specification as defined by the BX keystroke is placed in keyboard buffer, as if the user had popped up ZIPKEY and exited by pressing the key specified by BX ----------B378------------------------------- INT B3 - ZIPKEY - LOOK UP ZIPCODES FOR A GIVEN STATE AND CITY AH = 78h BL = ZIPKEY state code DS:SI -> city name, terminated with 0Dh if complete name, 00h if prefix Return: BH = number of matching entries (set to 51 if more than 50) DX = zipcode region of first match (0-999) CL = last two digits of first zipcode in the range (0-99) CH = last two digits of last zipcode in the range (0-99) AX destroyed SeeAlso: AH=79h,AH=7Ah ----------B379------------------------------- INT B3 - ZIPKEY - LOOK UP ZIPCODES FOR A GIVEN CITY AH = 79h BL = ZIPKEY state code of first state to search DS:SI -> city name, terminated with 0Dh if complete name, 00h if prefix Return: AL = ZIPKEY state code of first matching state BH = number of matching entries (set to 51 if more than 50) DX = zipcode region of first match (0-999) CL = last two digits of first zipcode in first range (0-99) CH = last two digits of last zipcode in first range (0-99) Note: to find all matching cities, repeat search with BL set to one more than the returned AL SeeAlso: AH=78h,AH=7Ah ----------B37A------------------------------- INT B3 - ZIPKEY - FETCH AN ENTRY FROM A PREVIOUS LOOKUP AH = 7Ah BL = case number (0 to one less than value returned in BH by lookup) Return: AL = ZIPKEY state code DX = zipcode region (0-999) CL = last two digits of first zipcode in the range (0-99) CH = last two digits of last zipcode in the range (0-99) SeeAlso: AH=78h,AH=79h ----------B37B------------------------------- INT B3 - ZIPKEY - GET VALUES NEEDED TO SAVE ZIPKEY CONTEXT AH = 7Bh Return: BL = maximum number of characters for a city name BH = ZIPKEY state code for last city-name search FFh if none CX:DX = internal code identifying last city search AX destroyed SeeAlso: AH=7Ch ----------B37C------------------------------- INT B3 - ZIPKEY - RESTORE ZIPKEY CONTEXT AH = 7Ch BL = maximum number of characters for a city name BH = ZIPKEY state code for last city-name search FFh if none CX:DX = internal code returned by AH=7Bh Return: CF set on error CF clear if successful AX destroyed SeeAlso: AH=7Bh ----------B37D------------------------------- INT B3 - ZIPKEY - REQUEST POP UP AH = 7Dh BL = index number to simulate pressing a hotkey FFh for immediate popup with no playback on return Return: CF set on error AL = FDh already busy with another request = FEh illegal function CF clear if successful AX destroyed window popped up and was closed by the user ----------B37E------------------------------- INT B3 - ZIPKEY - GET NAME OF PRIMARY CITY FOR A ZIPCODE REGION AH = 7Eh DX = zipcode region (0-999) ES:DI -> buffer for name Return: CF set on error AL = FFh region does not exist CF clear if successful AL = ZIPKEY state code ES:DI points one byte beyond end of name ----------B37F------------------------------- INT B3 - ZIPKEY - ENABLE/DISABLE HOTKEYS AH = 7Fh BL = function 00h turn off hotkeys 01h turn on hotkeys 02h return hotkey status 03h toggle hotkey status Return: AL = hotkey status 00h off 01h on ----------B380------------------------------- INT B3 - ZIPKEY v2.0+ - DETERMINE STATE FOR AREA CODE AH = 80h BX = telephone area code (decimal) Return: CF clear if successful AL = ZIPKEY state code DX = first ZIP region for state (03E8h if Canada) CX = number of ZIP regions in state CF set on error AL = FFh DX = 03E9h ----------B4--------------------------------- INT B4 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------B4--------------------------------- INT B4 - STACKMAN - REQUEST NEW STACK Return: SS:SP -> new stack Note: the installation check consists of testing for the string "STACKXXX" at offset 0Ah from the interrupt handler SeeAlso: INT 2F/AX=C9FFh,INT B5"STACKMAN" ----------B5--------------------------------- INT B5 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------B5--------------------------------- INT B5 - STACKMAN - RESTORE ORIGINAL STACK SS:SP -> stack returned by INT B4 Return: SS:SP restored to value before INT B4 SeeAlso: INT 2F/AX=C9FFh,INT B4"STACKMAN" ----------B6--------------------------------- INT B6 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------B7--------------------------------- INT B7 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------B8--------------------------------- INT B8 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------B9--------------------------------- INT B9 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------BA--------------------------------- INT BA - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------BB--------------------------------- INT BB - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------BC--------------------------------- INT BC - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------BD--------------------------------- INT BD - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------BE--------------------------------- INT BE - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------BE--------------------------------- INT BE - DESQview/X - ??? Note: points at an IRET SeeAlso: INT 15/AX=BFDEh/BX=0006h,INT 63"DESQview" ----------BF--------------------------------- INT BF - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------C0--------------------------------- INT C0 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------C1--------------------------------- INT C1 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------C2--------------------------------- INT C2 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------C3--------------------------------- INT C3 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------C4--------------------------------- INT C4 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------C5--------------------------------- INT C5 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------C6--------------------------------- INT C6 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------C6--------------------------------- INT C6 - APL*PLUS/PC - IDENTICAL TO INT 86 Note: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete the older interrupts SeeAlso: INT 86"APL" ----------C7--------------------------------- INT C7 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------C7--------------------------------- INT C7 - APL*PLUS/PC - ??? Note: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete the older interrupts SeeAlso: INT 87"APL" ----------C8--------------------------------- INT C8 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------C8--------------------------------- INT C8 - APL*PLUS/PC - IDENTICAL TO INT 88 Note: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete the older interrupts SeeAlso: INT 88"APL" ----------C9--------------------------------- INT C9 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------C9--------------------------------- INT C9 - APL*PLUS/PC - ??? Note: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete the older interrupts SeeAlso: INT 89"APL" ----------CA--------------------------------- INT CA - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------CA--------------------------------- INT CA - APL*PLUS/PC - PRINT SCREEN Note: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete the older interrupts SeeAlso: INT 8A"APL" ----------CB--------------------------------- INT CB - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------CB--------------------------------- INT CB - APL*PLUS/PC - BEEP Notes: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete the older interrupts same as printing a ^G via INT 21/AH=02h SeeAlso: INT 8B"APL" ----------CC--------------------------------- INT CC - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------CC--------------------------------- INT CC - APL*PLUS/PC - CLEAR SCREEN MEMORY AX = flag 0000h do not save display attributes 0001h save attributes Note: STSC moved its interrupts from 86h-8Ch to C6h-CCh, but did not delete the older interrupts SeeAlso: INT 8C"APL" ----------CD--------------------------------- INT CD - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------CD--------------------------------- INT CD - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------CE--------------------------------- INT CE - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------CE--------------------------------- INT CE - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------CF--------------------------------- INT CF - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------CF--------------------------------- INT CF - APL*PLUS/PC - DEFAULT LOW-RESOLUTION TIMER FOR QUAD MF FUNCTION SeeAlso: INT E0"APL" ----------D0--------------------------------- INT D0 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------D0--------------------------------- INT D0 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES --------------------------------------------- INT D0 - [not a vector!] - NJFRERAM SIGNATURE VECTOR Notes: NJFRERAM is a resident free-memory display utility by Mike "Nifty James" Blaszczak if NJFRERAM is installed, this vector points at the signature "NJ" ----------D1--------------------------------- INT D1 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------D1--------------------------------- INT D1 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------D2--------------------------------- INT D2 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------D2--------------------------------- INT D2 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------D3--------------------------------- INT D3 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------D3--------------------------------- INT D3 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------D4--------------------------------- INT D4 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------D4--------------------------------- INT D4 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------D4--------------------------------- INT D4 - PC-MOS/386 - API ----------D5--------------------------------- INT D5 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------D5--------------------------------- INT D5 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------D6--------------------------------- INT D6 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------D6--------------------------------- INT D6 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------D7--------------------------------- INT D7 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------D7--------------------------------- INT D7 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------D8--------------------------------- INT D8 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------D8--------------------------------- INT D8 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------D9--------------------------------- INT D9 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------D9--------------------------------- INT D9 - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------DA--------------------------------- INT DA - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------DA--------------------------------- INT DA - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------DB--------------------------------- INT DB - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------DB--------------------------------- INT DB - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------DC--------------------------------- INT DC - PC/370 v4.1- - API SeeAlso: INT 60"PC/370" ----------DC--------------------------------- INT DC - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------DC--------------------------------- INT DC - STSC APL*PLUS/PC - MAY BE USED IN FUTURE RELEASES ----------DD--------------------------------- INT DD - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------DD--------------------------------- INT DD - STSC APL*PLUS/PC v9.0 - PLACE KEYSTROKE EVENTS IN INPUT BUFFER BX = where to place keystrokes FFFFh insert before current buffer contents 0000h replace current contents 0001h insert after current contents CX = number of keystroke events to insert ES:SI -> data to be placed into buffer (list of WORD key codes) 4000h + N = normal ASCII keystroke N (N = 00h to FFh) 4100h + N = extended ASCII keystroke N (N = 03h to 84h) SeeAlso: INT 16/AH=05h ----------DE--------------------------------- INT DE - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------DE--------------------------------- INT DE - APL*PLUS/PC - ??? Note: appears to be the same as INT 16 ----------DF--------------------------------- INT DF - Victor 9000 - SuperBIOS ----------DF--------------------------------- INT DF - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------DF--------------------------------- INT DF - APL*PLUS/PC - SAME AS INT 10 SeeAlso: INT 10 ----------E0--------------------------------- INT E0 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------E0--------------------------------- INT E0 - APL*PLUS/PC - RESTIME HIGH-RESOLUTION TIMER FOR QUAD MF FUNCTION SeeAlso: INT CF"APL" ----------E0--------------------------------- INT E0 - VIRUS - "Micro-128" - ??? Note: Micro-128 also overwrites the upper half of the interrupt table SeeAlso: INT 70"VIRUS" ----------E0--------------------------------- INT E0 - CP/M-86, Concurrent CP/M, DR Multiuser DOS - FUNCTION CALLS CL = function number DS,DX = parameters Return: as appropriate for function Note: several functions are covered in more detail in following entries SeeAlso: INT 21/AX=4459h Values for function number: 00h terminate calling process (see also INT 21/AH=00h) 02h write character to default console (see also INT 21/AH=02h) 03h read character from default AUX (see also INT 21/AH=03h) 05h write character to default list device (see also INT 21/AH=05h) 06h perform raw I/O on default console (see also INT 21/AH=06h) 07h return default AUX input status 08h return default AUX output status 09h write string to default console (see also INT 21/AH=09h) 0Ah read string from default console (see also INT 21/AH=0Ah) 0Bh return default console input status (see also INT 21/AH=0Bh) 0Ch get BDOS release ID 0Dh reset all disk drives (see also INT 21/AH=0Dh) 0Eh set default drive (see also INT 21/AH=0Eh) 0Fh open file via FCB (see also INT 21/AH=0Fh) 10h close file via FCB (see also INT 21/AH=10h) 11h search for first matching file with FCB (see also INT 21/AH=11h) 12h search for next matching file with FCB (see also INT 21/AH=12h) 13h delete file via FCB (see also INT 21/AH=13h) 14h sequential read via FCB (see also INT 21/AH=14h) 15h sequential write via FCB (see also INT 21/AH=15h) 16h create file via FCB (see also INT 21/AH=16h) 17h rename file via FCB (see also INT 21/AH=17h) 18h get bit map of logged drives 19h get default drive (see also INT 21/AH=19h) 1Ah set DMA address offset 1Bh get default disk allocation vector (see also INT 21/AH=1Bh) 1Ch set default drive to read-only 1Dh get bit map of read-only drives 1Eh set file attributes via FCB 1Fh get address of disk parameter block (see also INT 21/AH=1Fh) 20h get/set default user number 21h read random record via FCB (see also INT 21/AH=21h) 22h write random record via FCB (see also INT 21/AH=22h) 23h compute file size with FCB (see also INT 21/AH=23h) 24h get FCB random record number (see also INT 21/AH=24h) 25h reset specified drives 26h access specified drives 27h free specified drives 28h write random with FCB, zero fill (see also also INT 21/AH=28h) 2Ah lock records in FCB file (see also INT 21/AH=5Ch) 2Bh unlock records in FCB file (see also INT 21/AH=5Ch) 2Ch set BDOS multisector count 2Dh set BDOS error mode 2Eh get free space on disk 2Fh load, initialize, and jump to process 30h flush write-deferred buffers 32h call BIOS character routine 33h set DMA address segment 34h get DMA buffer address 35h CP/M-86 allocate maximum memory 36h allocate maximum memory segment absolute 37h CP/M-86 allocate memory segment (see also INT 21/AH=48h) 38h allocate memory segment absolute 39h CP/M-86 free specified memory segment (see also INT 21/AH=49h) 3Ah CP/M-86 free all memory 3Bh load .CMD file into memory 40h (DR-NET) log on a server 41h (DR-NET) log off a server 42h (DR-NET) send a message 43h (DR-NET) receive a message 44h (DR-NET) get network status 45h (DR-NET) get requestor configuration table 46h (DR-NET) set compatibility attributes 47h (DR-NET) get server configuration table 48h (DR-NET) set network error mode 49h (DR-NET) attach network 4Ah (DR-NET) detach network 4Bh (DR-NET) set default password 4Ch (DR-NET) get-set long timeout 4Dh (DR-NET) get parameter table 50h (DR-NET) get network information 53h get current time (see also INT 21/AH=2Ch) 54h set current time (see also INT 21/AH=2Dh) 55h get binary system date (see also INT 21/AH=2Ah) 56h set system date (see also INT 21/AH=2Bh) 57h allocate system flag 58h deallocate system flag 59h reserve memory in global area 5Ah lock physical drive 5Bh unlock physical drive 5Ch search path for executable file 5Dh load and execute command (see also INT 21/AH=4Bh) 5Eh get/set process exit code 5Fh set country information 60h get country information 63h truncate FCB file (see also INT 21/AH=28h) 64h create/update directory label 65h get directory label 66h get FCB date stamp and password mode 67h write extended FCB 68h set system date and time 69h get system date and time in binary 6Ah establish password for file access 6Bh get OS serial number 6Dh get/set console mode 6Eh get/set string delimiter 6Fh write block to default console 70h write block to default list device 71h execute DOS-compatible function 74h set FCB time and date stamps 80h allocate memory 82h deallocate memory 83h poll I/O device 84h wait on system flag 85h set system flag 86h create message queue 87h open message queue 88h delete message queue 89h read from message queue 8Ah conditionally read from message queue 8Bh write to message queue 8Ch conditionally write to message queue 8Dh delay calling process 8Eh call process dispatcher 8Fh terminate calling process 90h create a process 91h set calling process' priority 92h attach to default console 93h detach from default console 95h assign default console to process 96h interpret and execute commandline 97h resident procedure library 98h parse ASCII string into FCB (see also INT 21/AH=29h) 99h return default console 9Ah get address of system data 9Bh get system time and date 9Ch return calling process' descriptor 9Dh terminate process by name or PD address 9Eh attach to default list device 9Fh detach from default list device A0h select default list device A1h conditionally attach to default list device A2h conditionally attach to default console A3h get OS version number A4h get default list device A5h attach to default AUX A6h detach from default AUX A7h conditionally attach to default AUX A8h set default AUX A9h return default AUX ACh read block from default AUX B0h configure default AUX B1h get/set device control parameters B2h send Break through default AUX B3h allocate physical memory B4h free physical memory B5h map physical memory B6h nondestructive message queue read B7h timed wait on system flag B8h get/set I/O port mapping B9h set list device timeout BAh set AUX timeout value BBh execute XIOS service BDh (DR Multiuser DOS) delay FFh return 80386 to native mode DR Multiuser DOS Error Return Codes: 00h no error 01h system call not implmented 02h illegal system call number 03h cannot find memory 04h illegal flag number 05h flag overrun 06h flag underrun 07h no unused Queue Descriptors 08h no free queue buffer 09h cannot find queue 0Ah queue in use 0Ch no free Process Descriptors 0Dh no queue access 0Eh empty queue 0Fh full queue 10h CLI queue missing 11h no 8087 in system 12h no unused Memory Descriptors 13h illegal console number 14h no Process Descriptor match 15h no console match 16h no CLI process 17h illegal disk number 18h illegal filename 19h illegal filetype 1Ah character not ready 1Bh illegal Memory Descriptor 1Ch bad return from BDOS load 1Dh bad return from BDOS read 1Eh bad return from BDOS open 1Fh null command 20h not owner of resource 21h no CSEG in load file 22h process Descriptor exists on Thread Root 23h could not terminate process 24h cannot attach to process 25h illegal list device number 26h illegal password 28h external termination occurred 29h fixup error upon load 2Ah flag set ignored 2Bh illegal auxilliary device number ----------E0----CL03------------------------- INT E0 - DR Multiuser DOS - "A_READ" - READ CHARACTER FROM AUX DEVICE CL = 03h Return: AL = ASCII character Notes: A_READ reads the next 8-bit character from the logical auxilliary input device (AUXn:); control is not returned to the calling process until a character has been read. if another process owns AUX, this call blocks until the device becomes available SeeAlso: INT 21/AH=03h,INT E0/CL=04h,INT E0/CL=07h,INT E0/CL=A5h,INT E0/CL=ACh ----------E0----CL04------------------------- INT E0 - DR Multiuser DOS - "A_WRITE" - WRITE CHARACTER TO AUX DEVICE CL = 04h DL = ASCII character Return: nothing Note: if another process owns AUX, this call blocks until the device becomes available SeeAlso: INT 21/AH=04h,INT E0/CL=03h,INT E0/CL=08h,INT E0/CL=A5h,INT E0/CL=ADh ----------E0----CL07------------------------- INT E0 - DR Multiuser DOS - "A_STATIN" - GET INPUT STATUS OF AUX DEVICE CL = 07h Return: AL = status 00h not ready FFh character available SeeAlso: INT E0/CL=03h,INT E0/CL=08h ----------E0----CL08------------------------- INT E0 - DR Multiuser DOS - "A_STATOUT" - GET OUTPUT STATUS OF AUX DEVICE CL = 08h Return: AL = status 00h not ready FFh ready for output SeeAlso: INT E0/CL=04h,INT E0/CL=07h ----------E0----CL59------------------------- INT E0 - ConcCP/M,DR Multiuser DOS - "S_MEMORY" - RESERVE MEMORY IN GLOBAL AREA CL = 59h DX = size in bytes Return: AX = FFFFh if failed AX = other if successful ES:BX -> reserved memory ----------E0----CL86------------------------- INT E0 - ConcCP/M,DR Multiuser DOS - "Q_MAKE" - CREATE MESSAGE QUEUE CL = 86h DS:DX -> queue descriptor (see below) Return: AX = status 0000h success FFFFh failure CX = error code SeeAlso: INT E0/CL=87h Format of queue descriptor: Offset Size Description 00h 2 WORDs internal use, initialize to zeros 04h WORD flags 06h 8 BYTEs queue name 0Eh WORD length of message 10h WORD number of messages 12h 4 WORDs internal use, initialize to zeros 1Ah WORD offset in system area of buffer for messages ----------E0----CL87------------------------- INT E0 - ConcCP/M,DR Multiuser DOS - "Q_OPEN" - OPEN MESSAGE QUEUE CL = 87h DS:DX -> queue parameter block (see below) Return: AX = status 0000h success FFFFh failure CX = error code SeeAlso: INT E0/CL=86h,INT E0/CL=89h Format of queue parameter block: Offset Size Description 00h WORD internal use, initialize to zero 02h WORD queue ID (set by INT E0/CL=87h) 04h WORD internal use, initialize to zero 06h WORD offset of queue message buffer 08h 8 BYTEs queue name ----------E0----CL89------------------------- INT E0 - ConcCP/M,DR Multiuser DOS - "Q_READ" - READ MESSAGE QUEUE CL = 89h DS:DX -> queue parameter block (see INT E0/CL=87h) Return: AX = status 0000h success FFFFh failure CX = error code SeeAlso: INT E0/CL=87h,INT E0/CL=8Ah,INT E0/CL=8Bh ----------E0----CL8A------------------------- INT E0 - ConcCP/M,DR Multiuser DOS - "Q_CREAD" - CONDITIONALLY READ MSG QUEUE CL = 8Ah DS:DX -> queue parameter block (see INT E0/CL=87h) Return: AX = status 0000h success FFFFh failure CX = error code SeeAlso: INT E0/CL=87h,INT E0/CL=89h,INT E0/CL=8Ch ----------E0----CL8B------------------------- INT E0 - ConcCP/M,DR Multiuser DOS - "Q_WRITE" - WRITE MESSAGE QUEUE CL = 8Bh DS:DX -> queue parameter block (see INT E0/CL=87h) Return: AX = status 0000h success FFFFh failure CX = error code SeeAlso: INT E0/CL=89h,INT E0/CL=8Ch ----------E0----CL8B------------------------- INT E0 - ConcCP/M,DR Multiuser DOS - "Q_CWRITE" - CONDITIONALLY WRITE MSG QUEUE CL = 8Bh DS:DX -> queue parameter block (see INT E0/CL=87h) Return: AX = status 0000h success FFFFh failure CX = error code SeeAlso: INT E0/CL=8Ah,INT E0/CL=8Bh ----------E0----CL8E------------------------- INT E0 - ConcCP/M,DR Multiuser DOS - "P_DISPATCH" - CALL DISPATCHER CL = 8Eh DX = FFFFh (optional) to force dispatch Return: nothing Note: if DX=FFFFh, a dispatch is forced even if no other process is ready SeeAlso: INT E0/CL=91h ----------E0----CL91------------------------- INT E0 - ConcCP/M,DR Multiuser DOS - "P_PRIORITY" - SET PROCESS PRIORITY CL = 91h DL = new priority (00h highest to FFh lowest) Note: sets priority of calling process; transient processes are initialized to priority C8h SeeAlso: INT E0/CL=8Eh ----------E0----CL93------------------------- INT E0 - ConcCP/M,DR Multiuser DOS - "C_DETACH" - DETACH FROM DEFAULT CONSOLE CL = 93h Return: AX = status 0000h successfully detached FFFFh detach failed ----------E0----CLA5------------------------- INT E0 - DR Multiuser DOS - "A_ATTACH" - ATTACH AUX DEVICE CL = A5h Desc: attaches the default auxiliary device to the calling process unless it is already attached to another process, in which case the call blocks until the device becomes available Note: this call should be used before attempting to read or write from the AUX device; however, the I/O calls internally call this function to ensure device ownership SeeAlso: INT E0/CL=03h,INT E0/CL=04h,INT E0/CL=A6h,INT E0/CL=A7h,INT E0/CL=A8h SeeAlso: INT E0/CL=ACh,INT E0/CL=ADh,INT E0/CL=B0h ----------E0----CLA6------------------------- INT E0 - DR Multiuser DOS - "A_DETACH" - DETACH FROM AUX DEVICE CL = A6h Return: AX = status 0000h successfully detached FFFFh detach failed CX = error code SeeAlso: INT E0/CL=A5h,INT E0/CL=A7h ----------E0----CLA7------------------------- INT E0 - DR Multiuser DOS - "A_CATTACH" - CONDITIONALLY ATTACH TO AUX DEVICE CL = A7h Return: AX = status 0000h attached FFFFh unable to attach Desc: attaches the default auxiliary device to the calling process if it is available Note: does not block if the device is already in use SeeAlso: INT E0/CL=A5h,INT E0/CL=A6h,INT E0/CL=A8h,INT E0/CL=B0h ----------E0----CLA8------------------------- INT E0 - DR Multiuser DOS - "A_SET" - SET DEFAULT AUX DEVICE NUMBER CL = A8h DL = auxiliary device number Return: AX = status 0000h successful FFFFh failed CX = error code SeeAlso: INT E0/CL=A5h,INT E0/CL=A9h ----------E0----CLA9------------------------- INT E0 - DR Multiuser DOS - "A_GET" - GET DEFAULT AUX DEVICE NUMBER CL = A9h Return: AL = current default auxiliary device number SeeAlso: INT E0/CL=A8h ----------E0----CLAC------------------------- INT E0 - DR Multiuser DOS - "A_READBLK" - READ STRING FROM AUX DEVICE CL = ACh DS:DX -> character control block (CHCB) (see below) Return: AX = number of characters read Desc: read characters from the default auxiliary (AUXn:) device into a buffer until the buffer is full or the device is no longer ready Notes: if the device is initially not ready, blocks until at least one character has been read if another process owns AUX, this call blocks until the device becomes available SeeAlso: INT E0/CL=03h,INT E0/CL=A5h,INT E0/CL=ADh Format of character control block (CHCB): Offset Size Description 00h DWORD pointer to character buffer 04h WORD length of character buffer ----------E0----CLAD------------------------- INT E0 - DR Multiuser DOS - "A_WRITEBLK" - WRITE STRING TO AUX DEVICE CL = ADh DS:DX -> character control block (see INT E0/CL=ACh) Return: AX = number of characters written Note: does not return until at least one character has been written SeeAlso: INT E0/CL=04h,INT E0/CL=A5h,INT E0/CL=ACh ----------E0----CLB0------------------------- INT E0 - DR Multiuser DOS - "A_CONFIG" - GET/SET AUX DEVICE PARAMETERS CL = B0h DX:DX -> AUX device parameter block (see below) Return: AX = status 0000h successful parameter block updated FFFFh failed CX = error code SeeAlso: INT E0/CL=A5h,INT E0/CL=B1h Format of AUX device parameter block: Offset Size Description 00h BYTE function (00h get, 01h set) 01h BYTE baud rate (see below) FFh = don't change/unknown 02h BYTE parity 00h none 01h odd 02h none 03h even 04h stick parity bit FFh don't change/unknown 03h BYTE stop bits (00h one, 01h 1.5, 02h two, FFh unknown/don't change) 04h BYTE data bits (05h-08h or FFh unknown/don't change) 05h BYTE handshake (00h none, 01h DTS/DSR, 02h RTS/CTS, 04h XON/XOFF, FFh unknown/don't change) 06h BYTE XON character, FFh unknown/don't change 07h BYTE XOFF character, FFh unknown/don't change Values for baud rate: 00h = 50 baud 01h = 62.5 baud 02h = 75 baud 03h = 110 baud 04h = 134.5 baud 05h = 150 baud 06h = 200 baud 07h = 300 baud 08h = 600 baud 09h = 1200 baud 0Ah = 1800 baud 0Bh = 2000 baud 0Ch = 2400 baud 0Dh = 3600 baud 0Eh = 4800 baud 0Fh = 7200 baud 10h = 9600 baud 11h = 19200 baud 12h = 38400 baud 13h = 56000 baud 14h = 76800 baud 15h = 115200 baud ----------E0----CLB1------------------------- INT E0 - DR Multiuser DOS - "A_CONTROL" - GET/SET AUX CONTROL PARAMETERS CL = B1h DS:DX -> AUX device control block (see below) Return: AX = status 0000h successful control block updated FFFFh failed CX = error code SeeAlso: INT E0/CL=B0h,INT E0/CL=B2h Format of AUX device control block: Offset Size Description 00h BYTE function (00h get, 01h set) 01h BYTE DTR state (00h low, 01h high, FFh unknown/don't change) 02h BYTE RTS state (00h low, 01h high, FFh unknown/don't change) 03h BYTE DSR state (00h low, 01h high, FFh unknown/don't change) 04h BYTE CTS state (00h low, 01h high, FFh unknown/don't change) 05h BYTE DCD state (00h low, 01h high, FFh unknown/don't change) 06h BYTE RI state (00h inactive, 01h active, FFh unknown/don't change) ----------E0----CLB2------------------------- INT E0 - DR Multiuser DOS - "A_BREAK" - SEND BREAK TO AUX DEVICE CL = B2h DX = duration of break in system ticks (0001h-FFFFh) Return: AX = status 0000h successful break signal completed FFFFh failed CX = error code Note: if the AUX device is currently owned by another process, this call will block until the device becomes available SeeAlso: INT E0/CL=A5h,INT E0/CL=B1h ----------E0----CLBD------------------------- INT E0 - DR Multiuser DOS - "P_DELAY" - DELAY EXECUTION CL = BDh DX = delay in system ticks Return: after the delay elapses Notes: the length of a system tick is installation-dependent (typically 1/50 or 1/60 second); the length may be determined by reading the TICKSPERSEC value from the system data segment the actual delay before the process is rescheduled to run may be up to one tick longer than requested; the delay between rescheduling and actual execution cannot be predicted if higher-priority processes are awaiting a turn at the CPU ----------E1--------------------------------- INT E1 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------E1--------------------------------- INT E1 - PC Cluster Disk Server Information SeeAlso: INT E2 ----------E2--------------------------------- INT E2 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------E2--------------------------------- INT E2 - PC Cluster Program ----------E3--------------------------------- INT E3 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------E40005----------------------------- INT E4 - Logitech Modula v2.0 - MonitorEntry AX = 0005h BX = priority SeeAlso: AX=0006h ----------E40006----------------------------- INT E4 - Logitech Modula v2.0 - MonitorExit AX = 0006h SeeAlso: AX=0005h ----------E4--------------------------------- INT E4 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------E5--------------------------------- INT E5 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------E6--------------------------------- INT E6 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------E7--------------------------------- INT E7 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------E8--------------------------------- INT E8 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------E9--------------------------------- INT E9 - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------EA--------------------------------- INT EA - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------EB--------------------------------- INT EB - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------EC--------------------------------- INT EC - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC BASIC.COM/BASICA.COM do not restore vector on termination ----------EC--------------------------------- INT EC - used by Alloy NTNX ----------EC--------------------------------- INT EC - Exact - RUNTIME INTERFACE MULTIPLEXOR AX = function number (0000h to 0140h) STACK: DWORD address to return to any arguments required by function Return: STACK: return address popped, but otherwise unchanged Notes: this is the interface from applications to the runtime system by Exact Automatisering B.V. of the Netherlands. By using this interrupt, it can provide DLL-style capabilities under MSDOS. the interrupt handler removes the return address and flags placed on the stack by the INT EC, then jumps to the appropriate function ----------ED--------------------------------- INT ED - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------EE--------------------------------- INT EE - IBM ROM BASIC - used while in interpreter Notes: called by ROM BASIC, but pointed at IRET by BASIC.COM/BASICA.COM BASIC.COM/BASICA.COM do not restore vector on termination ----------EF--------------------------------- INT EF - BASIC - ORIGINAL INT 09 VECTOR Note: BASIC.COM/BASICA.COM do not restore vector on termination SeeAlso: INT F0"BASIC" ----------EF----CX0473----------------------- INT EF - GEM - INTERFACE CX = 0473h DS:DX -> GEM parameter block ----------F0--------------------------------- INT F0 - BASICA.COM, GWBASIC, compiled BASIC - ORIGINAL INT 08 VECTOR Note: BASICA.COM does not restore vector on termination SeeAlso: INT EF"BASIC" ----------F1--------------------------------- INT F1 - reserved for user interrupt ----------F1--------------------------------- INT F1 - SPEECH.COM - CONVERT TEXT STRING TO SPEECH DS:BX -> '$'-terminated text string Note: SPEECH.COM is a resident text-to-speech converter by Douglas Sisco ----------F1--------------------------------- INT F1 - Andy C. McGuire SPEECH.COM/SAY.COM SeeAlso: INT F2"SPEECH" ----------F1--------------------------------- INT F1 - AQUEDUCT, PIPELINE - GET DATA AREA ADDRESS Return: AX:BX -> data area Notes: AQUEDUCT and PIPELINE are TSRs by James W. Birdsall to connect COM1 and COM2 in software The installation check consists of testing for the following signature immediately preceding the interrupt handler: "JWBtvv" where 't' is either "A" for AQUEDUCT or "P" for PIPELINE and "vv" is a two-digit version number ----------F2--------------------------------- INT F2 - reserved for user interrupt ----------F2--------------------------------- INT F2 - Andy C. McGuire SPEECH.COM/SAY.COM SeeAlso: INT F1"SPEECH" ----------F2--------------------------------- INT F2 - ICCTSR 1.0 - ImageCapture COLOR Developer's Kit - API AH = function 01h power up 02h power down 03h set controls 04h capture image 05h display image 06h read file 07h write file 08h write array 09h read pixel 0Ah write pixel 0Bh check if VGA present 0Ch set video mode 0Dh check for keystroke 0Eh delay ??? Return: ??? Note: ImageCapture is a product of International Computers SeeAlso: INT F3"ICCTSR" ----------F3--------------------------------- INT F3 - reserved for user interrupt ----------F3--------------------------------- INT F3 - SoundBlaster - POINTER TO ECHO VALUE Note: this is not a vector, but a pointer to a DWORD containing the echo value selected with SET-ECHO.EXE SeeAlso: INT 2F/AX=FBFBh ----------F3--------------------------------- INT F3 - ICCTSR 1.0 - HANDSHAKE ID VECTOR Note: ImageCapture is a product of International Computers SeeAlso: INT F2"ICCTSR" ----------F4--------------------------------- INT F4 - reserved for user interrupt ----------F4--------------------------------- INT F4 - DoubleDOS - GIVE UP REST OF CURRENT CLOCK TICK AND ALL OF NEXT TICK SeeAlso: INT 21/AH=EEh"DoubleDOS",INT FE"DoubleDOS" ----------F5--------------------------------- INT F5 - reserved for user interrupt ----------F5--------------------------------- INT F5 - DoubleDOS - ??? ----------F6--------------------------------- INT F6 - reserved for user interrupt ----------F6--------------------------------- INT F6 - DoubleDOS - ??? ----------F7--------------------------------- INT F7 - reserved for user interrupt ----------F7--------------------------------- INT F7 - DoubleDOS - ??? ----------F700------------------------------- INT F7 - FSBBS 2.0 - CONFIGURATION RECORD AH = 00h AL = function 00h get configuration record Return: DS:DX -> configuration record 01h set configuration record 02h get path for option DS:DX -> option name Return: DS:DX -> path 03h determine whether configuration record set Return: AX = status 0000h set 0001h not yet set 04h get link state Return: AX = state 0000h unlinked 0001h linked Notes: this information is preliminary and still subject to change all of the INT F7 calls for FSBBS are used for interprogram communication between the BBS kernel and the programs it spawns SeeAlso: AH=01h ----------F701------------------------------- INT F7 - FSBBS 2.0 - USER RECORD AH = 01h AL = function 00h get user record for user currently online Return: DS:DX -> user record 01h set user record DS:DX -> user record SeeAlso: AH=00h,AH=02h ----------F702------------------------------- INT F7 - FSBBS 2.0 - GET ACCOUNT NAME AH = 02h Return: DS:DX -> 8-character blank-padded account name SeeAlso: AH=01h ----------F703------------------------------- INT F7 - FSBBS 2.0 - TERMINAL NUMBER AH = 03h AL = function 00h get terminal index number Return: DX = index number 01h set terminal index number DX = terminal index ----------F704------------------------------- INT F7 - FSBBS 2.0 - PASSDATA BUFFER AH = 04h AL = function 00h get PassData buffer contents DS:DX -> buffer for PassData contents 01h set PassData contents DS:DX -> buffer containing new PassData CH = length of data in buffer ----------F705------------------------------- INT F7 - FSBBS 2.0 - TIMER FUNCTIONS AH = 05h AL = function 00h get time remaining Return: DX = number of minutes remaining 01h get current time Return: DS:DX -> 8-character time string 02h increment time DX = number of additional minutes 03h decrement time DX = number of minutes SeeAlso: AH=06h ----------F706------------------------------- INT F7 - FSBBS 2.0 - FUNCTION AVAILABILITY AH = 06h AL = function 00h determine whether function is available DX = index of function 01h set function availability DX = index of function ??? SeeAlso: AH=05h,AH=07h ----------F707------------------------------- INT F7 - FSBBS 2.0 - DUMP FUNCTIONS AH = 07h AL = function 00h get current dump mode Return: DL = mode 01h set dump mode DL = mode SeeAlso: AH=06h ----------F8--------------------------------- INT F8 - TANDY??? - 100 HZ INTERRUPT SeeAlso: INT FA"USART" ----------F8--------------------------------- INT F8 - DoubleDOS - ??? ----------F9--------------------------------- INT F9 - reserved for user interrupt ----------F9--------------------------------- INT F9 - DoubleDOS - ??? ----------FA--------------------------------- INT FA - TANDY??? - SERIAL PORT USART INTERRUPT SeeAlso: INT F8"100 HZ",INT FB"USART" ----------FA--------------------------------- INT FA - DoubleDOS - TURN OFF TIMESHARING SeeAlso: INT 21/AH=EAh"DoubleDOS",INT FB"DoubleDOS" ----------FB--------------------------------- INT FB - TANDY??? - KEYBOARD USART RECEIVE INTERRUPT SeeAlso: INT FA"USART" ----------FB--------------------------------- INT FB - DoubleDOS - TURN ON TIMESHARING SeeAlso: INT 21/AH=EBh"DoubleDOS",INT FA"DoubleDOS" ----------FC--------------------------------- INT FC - reserved for user interrupt ----------FC--------------------------------- INT FC - DoubleDOS - GET CURRENT SCREEN BUFFER ADDRESS Return: ES = segment of display buffer Note: the display buffer may be moved if multitasking is enabled SeeAlso: INT 21/AH=ECh"DoubleDOS",INT FB"DoubleDOS" ----------FD--------------------------------- INT FD - reserved for user interrupt ----------FD--------------------------------- INT FD - DoubleDOS - ??? ----------FE--------------------------------- INT FE - AT/XT286/PS50+ - destroyed by return from protected mode SeeAlso: INT FF"XT286" ----------FE--------------------------------- INT FE - DoubleDOS - GIVE UP TIME AL = number of 55ms time slices to give away SeeAlso: INT 21/AH=EEh"DoubleDOS",INT F4"DoubleDOS" ----------FE--------------------------------- INT FE - Turbo Debugger 8086 v2.5+ - OVERLAY MANAGER SeeAlso: INT 3F ----------FF--------------------------------- INT FF - AT/XT286/PS50+ - destroyed by return from protected mode SeeAlso: INT FE"XT286" ----------FF--------------------------------- INT FF - Z100 - WARM BOOT SeeAlso: INT 40"Z100" --------------------------------------------- Please redistribute the following files unmodified as a group, in a pair of archives named INTER31A and INTER31B (preferably the original authenticated PKZIP archives): INTERRUP.1ST the read-me file, containing credits, availability info INTERRUP.A INT 00 through INT 14 INTERRUP.B INT 15 through INT 1F INTERRUP.C INT 20 through INT 21/7F INTERRUP.D INT 21/80 through INT 2F/7F INTERRUP.E INT 2F/80 through INT 3F INTERRUP.F INT 40 through INT 67 INTERRUP.G INT 68 through INT FF INTERRUP.PRI a brief introduction to interrupts INTPRINT.COM a simple formatter that also generates a list summary INTPRINT.DOC instructions for INTPRINT INTPRINT.C source code for INTPRINT MEMORY.LST format of the BIOS data area The following files should be distributed in an archive called INTER31C: INT.COM invoke interrupts from commandline INT2HLP.BAT Perl script to convert list into QuickHelp database INT2GUID.* convert list into TurboPower GUIDE or POPHELP database INT2QH.* program to convert list into QuickHelp database INTHELP.* convert list into TurboPower GUIDE database This compilation is Copyright (c) 1989, 1990, 1991, 1992 Ralf Brown --------------------------------------------- ARPA: ralf@cs.cmu.edu UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf BIT: ralf%cs.cmu.edu@carnegie FIDO: Ralf Brown 1:129/26.1 or post a message to me in the DR_DEBUG echo CIS: >INTERNET:ralf@cs.cmu.edu