ralf@b.gp.cs.cmu.edu (Ralf Brown) (12/18/88)
--------------------------------------------- INT 2F - Multiplexor - CDROM 2.00 - GET DIRECTORY ENTRY AX = 150Fh CX = drive number (0=A:) ES:BX -> ASCIZ path name SI:DI -> 255-byte buffer for directory entry Return: CF set on error AX = error code CF clear if succesful AX = disk format (0=High Sierra,1=ISO 9660) directory entry BYTE length of directory entry BYTE length of XAR in LBN's (don't ask me what that means...) DWORD LBN of data, Intel (little-endian) format DWORD LBN of data, Motorola (big-endian) format DWORD length of file, Intal format DWORD length of file, Motorola format ---High Sierra--- 6 BYTEs date and time BYTE bit flags BYTE reserved ---ISO 9660--- 7 BYTEs data and time BYTE bit flags ---both formats--- BYTE interleave size BYTE interleave skip factor WORD volume set sequence number, Intel format WORD volume set sequence number, Motorola format BYTE length of file name N BYTEs file name BYTE (optional) padding if filename is odd length N BYTEs system data --------------------------------------------- INT 2F - Multiplexor - XMS - INSTALLATION CHECK AX = 4300h Return: AL = 80h XMS driver installed AL <> 80h no driver Note: XMS gives access to extended memory and noncontiguous/nonEMS memory above 640K --------------------------------------------- INT 2F - Multiplexor - XMS - GET DRIVER ADDRESS AX = 4310h Return: ES:BX -> driver entry point 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) BX = internal revision number DX = 1 if HMA (1M to 1M + 64K) exists 0 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 = 1 success = 0 failure BL = error code 02h Release High Memory Area Return: AX = 1 success = 0 failure BL = error code 03h Global enable A20, for using the HMA Return: AX = 1 success = 0 failure BL = error code 04h Global disable A20 Return: AX = 1 success = 0 failure BL = error code 05h Local enable A20, for direct access to extended memory Return: AX = 1 success = 0 failure BL = error code 06h Local disable A20 Return: AX = 1 success = 0 failure BL = error code 07h Query A20 Return: AX = 1 enabled = 0 disabled BL = error code (0 = successful) 08h Query free extended memory, not counting HMA Return: AX = size of largest extended memory block in K DX = total extended memory in K BL = error code 09h Allocate extended memory block DX = Kbytes needed Return: AX = 1 success DX = handle for memory block = 0 failure BL = error code 0Ah Free extended memory block DX = handle of block to free Return: AX = 1 success = 0 failure BL = error code 0Bh Move extended memory block DS:SI -> EMM structure DWORD number of bytes to move (must be even) WORD source handle DWORD offset into source block WORD destination handle DWORD offset into destination block Note: if either handle is 0000h, the corresponding offset is considered to be an absolute Segment:Offset address in directly addressable memory Return: AX = 1 success = 0 failure BL = error code 0Ch Lock extended memory block DX = handle of block to lock Return: AX = 1 success DX:BX = 32-bit linear address of locked block = 0 failure BL = error code 0Dh Unlock extended memory block DX = handle of block to unlock Return: AX = 1 success = 0 failure BL = error code 0Eh Get handle information DX = handle for which to get info Return: AX = 1 success BH = block's lock count BL = number of free handles left DX = block size in K = 0 failure BL = error code 0Fh Reallocate extended memory block DX = handle of block BX = new size of block in K Return: AX = 1 success = 0 failure BL = error code 10h Request upper memory block (nonEMS memory above 640K) DX = size of block in paragraphs Return: AX = 1 success BX = segment address of UMB DX = actual size of block = 0 failure BL = error code DX = largest available block 11h Release upper memory block DX = segment address of UMB to release Return: AX = 1 success = 0 failure BL = error code Note: HIMEM.SYS requires at least 256 bytes stack Error codes returned in BL: 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 --------------------------------------------- INT 2F - Multiplexor - TesSeRact RAM-RESIDENT PROGRAM INTERFACE AX = 5453h BX = subfunction 00h installation check 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 = 0 successful ES:BX -> user parameter block 8 BYTEs blank-padded TSR name WORD TSR ID number DWORD bitmap of supported functions BYTE scan code of primary hotkey 00h = pop up when shift states match FFh = no popup (if shift state also FFh) BYTE shift state of primary hotkey FFh = no popup (if scan code also FFh) BYTE number of secondary hotkeys DWORD pointer to extra hotkeys set by func 05h WORD current TSR status flags WORD PSP segment of TSR DWORD DTA for TSR WORD default DS for TSR DWORD stack at popup DWORD stack at background invocation = 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 = 0 ES:BX -> TSR's internal data area BYTE revision level of TesSeRact library BYTE type of popup in effect BYTE INT 08 occurred since last invocation BYTE INT 13 occurred since last invocation BYTE active interrupts BYTE active soft interrupts BYTE DOS major version BYTE how long to wait before popping up DWORD pointer to INDOS flag DWORD pointer to DOS critical error flag WORD PSP segment of interrupted program WORD PSP segment of prog interrupted by INT 28 DWORD DTA of interrupted program DWORD DTA of program interrupted by INT 28 WORD SS of interrupted program WORD SP of interrupted program WORD SS of program interrupted by INT 28 WORD SP of program interrupted by INT 28 DWORD INT 24 of interrupted program 3 WORDs DOS 3.x extended error info BYTE old BREAK setting BYTE old VERIFY setting BYTE were running MS WORD 4.0 before popup BYTE MS WORD 4.0 special popup flag BYTE enhanced keyboard call in use BYTE delay for MS WORD 4.0 11 times: DWORD old interrupt vector BYTE interrupt number DWORD new interrupt vector = 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 = 0 successful BX = value of INDOS flag 17h - 1Fh reserved 20h call user procedure CX = TSR ID number ES:DI -> user-defined data Return: AX = 0 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 zeor, 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 = 0 success F0F0h user aborted with ^C or ^Break other unable to stuff keystrokes 22h - 2Fh reserved Note: Borland's THELP.COM popup help system for Turbo Pascal and Turbo C fully supports the TesSeRact API --------------------------------------------- INT 2F - Multiplexor - 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 --------------------------------------------- INT 2F - Multiplexor - Novell NetWare - INSTALLATION CHECK AX = 7A00h Return: AL = 00h not installed = FFh installed ES:DI -> FAR entry point for routines otherwise accessed through INT 21h --------------------------------------------- INT 2F - Multiplexor - 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 --------------------------------------------- INT 2F - Multiplexor - GRAFTABL.COM or DISPLAY.SYS AH = B0h ??? --------------------------------------------- INT 2F - Multiplexor - APPEND - INSTALLATION CHECK AX = B700h Return: AH <> 0 if installed --------------------------------------------- INT 2F - Multiplexor - APPEND - ??? AX = B701h ??? --------------------------------------------- INT 2F - Multiplexor - APPEND - VERSION CHECK AX = B702h ??? Return: ??? --------------------------------------------- INT 2F - Multiplexor - Network - INSTALLATION CHECK AX = B800h Return: AH = 0 not installed <> 0 installed BX = installed component flags (test in this order!) bit 6 server bit 2 messenger bit 7 receiver bit 3 redirector --------------------------------------------- INT 2F - Multiplexor - Network - GET CURRENT POST ADDRESS AX = B803h Return: ES:BX = post address --------------------------------------------- INT 2F - Multiplexor - Network - SET NEW POST ADDRESS AX = B804h ES:BX = new post address --------------------------------------------- INT 2F - Multiplexor - Network - VERSION CHECK AX = B809h ??? Return: ??? --------------------------------------------- INT 2F - Multiplexor - ANARKEY.COM - INSTALLATION CHECK AX = E300h Return: AL = 00h not installed 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. --------------------------------------------- INT 2F - Multiplexor - 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 --------------------------------------------- INT 2F - Multiplexor - AUTOPARK.COM - SET PARKING DELAY AX = F701h BX:CX = 32 bit count of 55ms timer ticks --------------------------------------------- INT 30 - (NOT A VECTOR!) FAR JuMP instruction for CP/M-style calls the CALL 5 entry point does a FAR jump to here --------------------------------------------- INT 31 - overwritten by CP/M jump instruction in INT 30h --------------------------------------------- INT 32 - reserved --------------------------------------------- INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS AX = 0000h Return: AX = status 0 hardware/driver not installed -1 hardware/driver installed BX = number of buttons -1 two buttons 0 other than two 3 Mouse Systems mouse --------------------------------------------- INT 33 - MS MOUSE - SHOW MOUSE CURSOR AX = 0001h --------------------------------------------- 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. --------------------------------------------- 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 mouse) CX = column DX = row --------------------------------------------- INT 33 - MS MOUSE - POSITION MOUSE CURSOR AX = 0004h CX = column DX = row --------------------------------------------- INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA AX = 0005h BX = button 0 left 1 right 2 middle (Mouse Systems 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 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 --------------------------------------------- INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA AX = 0006h BX = button 0 left 1 right 2 middle (Mouse Systems 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 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 --------------------------------------------- INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE AX = 0007h CX = minimum column DX = maximum column --------------------------------------------- INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE AX = 0008h CX = minimum row DX = maximum row --------------------------------------------- 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 --------------------------------------------- INT 33 - MS MOUSE - DEFINE TEXT CURSOR AX = 000Ah BX = hardware/software text cursor 0 software CX = screen mask DX = cursor mask 1 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 --------------------------------------------- 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 up/right --------------------------------------------- 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 mouse) bit 6 call if middle button released (Mouse Systems mouse) ES:DX = address of FAR routine Note: 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 --------------------------------------------- INT 33 - MS MOUSE - LIGHT PEN EMULATION ON AX = 000Dh --------------------------------------------- INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF AX = 000Eh --------------------------------------------- INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO AX = 000Fh CX = number of mickeys per 8 pixels horizontally DX = number of mickeys per 8 pixels vertically --------------------------------------------- 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 during updating, and needs to be explicitly turned on again --------------------------------------------- INT 33 - PCMOUSE - 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 = -1 if successful --------------------------------------------- INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD AX = 0013h DX = threshold speed in mickeys/second, 0 = default of 64/second Note: if speed exceeds threshold, the cursor's on-screen motion is doubled --------------------------------------------- INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES AX = 0014h ??? --------------------------------------------- INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS AX = 0015h Return: BX = size of buffer needed to store driver state --------------------------------------------- INT 33 - MS MOUSE - SAVE DRIVER STATE AX = 0016h ES:DX -> buffer for driver state --------------------------------------------- INT 33 - MS MOUSE - RESTORE DRIVER STATE AX = 0017h ES:DX -> buffer containing saved state --------------------------------------------- INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER AX = 001Dh ??? --------------------------------------------- INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER AX = 001Eh Return: ??? --------------------------------------------- INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS AX = 0042h Return: AX = FFFFh successful BX = buffer size in bytes for functions 50h and 52h = 0 MSMOUSE not installed = 42h functions 42h, 50h, and 52h not supported --------------------------------------------- INT 33 - PCMOUSE - SAVE MSMOUSE STATE AX = 0050h BX = buffer size ES:DX -> buffer Return: AX = FFFFh if successful --------------------------------------------- INT 33 - PCMOUSE - RESTORE MSMOUSE STATE AX = 0052h BX = buffer size ES:DX -> buffer Return: AX = FFFFh if successful --------------------------------------------- INT 34 - Turbo C/Microsoft languages - Floating Point emulation This interrupt emulates opcode D8h --------------------------------------------- INT 35 - Turbo C/Microsoft languages - Floating Point emulation This interrupt emulates opcode D9h --------------------------------------------- INT 36 - Turbo C/Microsoft languages - Floating Point emulation This interrupt emulates opcode DAh --------------------------------------------- INT 37 - Turbo C/Microsoft languages - Floating Point emulation This interrupt emulates opcode DBh --------------------------------------------- INT 38 - Turbo C/Microsoft languages - Floating Point emulation This interrupt emulates opcode DCh --------------------------------------------- INT 39 - Turbo C/Microsoft languages - Floating Point emulation This interrupt emulates opcode DDh --------------------------------------------- INT 3A - Turbo C/Microsoft languages - Floating Point emulation This interrupt emulates opcode DEh --------------------------------------------- INT 3B - Turbo C/Microsoft languages - Floating Point emulation This interrupt emulates opcode DFh --------------------------------------------- INT 3C - Turbo C/Microsoft languages - Floating Point emulation This interrupt emulates instructions with an ES segment override --------------------------------------------- INT 3D - Turbo C/Microsoft languages - Floating Point emulation This interrupt emulates a standalone FWAIT instruction --------------------------------------------- INT 3E - Turbo C/Microsoft languages - Floating Point emulation --------------------------------------------- INT 3F - Overlay manager interrupt (Microsoft LINK.EXE) --------------------------------------------- INT 40 - Hard disk - Relocated Floppy Handler (original INT 13h) --------------------------------------------- INT 41 - FIXED DISK PARAMETERS (XT,AT,XT2,XT286,PS except ESDI disks) WORD cylinders BYTE heads WORD starting reduced write current cylinder (XT only, 0 for others) WORD starting write pre-comp cylinder BYTE maximum ECC burst length BYTE control byte bits 0-2: drive option (XT only, 0 for others) bit 3: set if more than 8 heads bit 4: always 0 bit 5: set if manufacturer's defect map on max cylinder+1 bit 6: disable ECC retries bit 7: disable access retries BYTE standard timeout (XT only, 0 for others) BYTE formatting timeout (XT only, 0 for others) BYTE timeout for checking drive (XT only, 0 for others) WORD landing zone (AT/PS2) BYTE sectors/track (AT/PS2) BYTE 0 --------------------------------------------- INT 42 - EGA/VGA/PS - Relocated (by EGA) Video Handler (original INT 10h) --------------------------------------------- INT 42 - Z100 - ??? --------------------------------------------- INT 43 - EGA/VGA/PS - User font table --------------------------------------------- INT 44 - EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh --------------------------------------------- INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API --------------------------------------------- INT 44 - Z100 - ??? --------------------------------------------- INT 45 - Z100 - ??? --------------------------------------------- INT 46 - Secondary Fixed Disk Params (see INT 41h) (AT,XT286,PS except ESDI) --------------------------------------------- INT 46 - Z100 - ??? --------------------------------------------- INT 47 - reserved --------------------------------------------- INT 48 - PCjr - Cordless Keyboard Translation --------------------------------------------- INT 49 - PCjr - Non-keyboard Scan Code Translation Table --------------------------------------------- INT 4A - AT/CONV/PS - User Alarm Invoked by BIOS when real-time clock alarm occurs --------------------------------------------- INT 4B - reserved --------------------------------------------- INT 4C - reserved --------------------------------------------- INT 4D - reserved --------------------------------------------- INT 4E - reserved --------------------------------------------- INT 4F - reserved --------------------------------------------- INT 50 to 57 - IRQ0-IRQ7 relocated by DESQview --------------------------------------------- INT 50 to 57 - IRQ0-IRQ7 relocated by IBM 3278 emulation control program --------------------------------------------- INT 58 - reserved --------------------------------------------- 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 --------------------------------------------- INT 5A - Cluster adapter BIOS entry address ??? --------------------------------------------- INT 5B - Used by cluster adapter --------------------------------------------- INT 5C - NETBIOS INTERFACE ES:BX -> Network Control Block Subfunction in first NCB field (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 34h status of all sessions for name 35h cancel 36h add group name to name table 70h unlink from IBM remote program (no F0h function) 71h send data without ACK 72h send multiple buffers without ACK 78h find name 79h token-ring protocol trace Return: AL = status 00h successful 01h bad buffer size 03h invalid NETBIOS command 05h timeout 06h receive buffer too small 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 FFh NETBIOS busy Structure of Network Control Block: BYTE ncb_command BYTE ncb_retcode BYTE ncb_lsn BYTE ncb_num DWORD -> ncb_buffer WORD ncb_length 16 BYTEs ncb_callname 16 BYTEs ncb_name BYTE ncb_rto BYTE ncb_sto DWORD -> ncb_post /* int (far *ncb_post)(); */ BYTE ncb_lana_num BYTE ncb_cmd_cplt 14 BYTEs ncb_reserve Structure name: 16 BYTEs nm_name BYTE nm_num BYTE nm_status Structure astatus: 6 BYTEs as_id BYTE as_jumpers BYTE as_post BYTE as_major BYTE as_minor WORD as_interval WORD as_crcerr WORD as_algerr WORD as_colerr WORD as_abterr DWORD as_tcount DWORD as_rcount WORD as_retran WORD as_xresrc 8 BYTEs as_res0 WORD as_ncbfree WORD as_ncbmax WORD as_ncbx 4 BYTEs as_res1 WORD as_sespend WORD as_msp WORD as_sesmax WORD as_bufsize WORD as_names 16 name structures as_name Note: Sytek PCnet card uses DMA 3. --------------------------------------------- INT 5C - TOPS INTERFACE ES:BX -> Network Control Block Note: TOPS card uses DMA 1, 3 or none. --------------------------------------------- INT 5D - reserved --------------------------------------------- INT 5E - reserved --------------------------------------------- INT 5F - reserved --------------------------------------------- INT 60 - reserved for user interrupt --------------------------------------------- INT 60 - FTP Driver - PC/TCP Packet Driver Specification The handler for the interrupt will start with a 3-byte jump instruction, followed by the ASCIZ string "PKT DRVR". To find the interrupt being used by the driver, an application should scan through interrupt vectors 60h to 80h until it finds one with the "PKT DRVR" string. 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 Class 02h ProNET-10 01h Proteon p1300 Class 03h IEEE 802.5/ProNet-4 01h IBM Token-Ring Adapter 02h Proteon p1340 03h Proteon p1344 Class 04h Omninet Class 05h Appletalk Class 06h Serial Line Class 07h StarLAN Class 08h ARCnet 01h Datapoint RIM --------------------------------------------- INT 60 - FTP Driver - DRIVER INFO AX = 01FFh BX = handler returned by function 02h Return: CF set on error DH = error code 01h invalid handle number 02h no interfaces of the specified class found 03h no interfaces of the specified type found 04h no interfaces of the specified number found 05h bad packet type 06h interface does not support multicast messages 07h this packet driver cannot terminate 08h invalid receiver mode 09h insufficient space 0Ah type accessed but never released 0Bh bad command 0Ch packet could not be sent CF clear if successful BX = version CH = class DX = type CL = number DS:SI -> name AL = driver type 01h basic 02h extended FFh not installed --------------------------------------------- INT 60 - FTP Driver - ACCESS TYPE AH = 02h AL = interface class BX = interface type DL = interface number DS:SI -> type CX = length of type ES:DI -> receiver Return: CF set on error DH = error code (see above) CF clear if successful AX = handle Receiver called with AX = subfunction 00h application to return pointer to buffer in ES:DI ES:DI = 0:0 means throw away packet 01h copy to DS:SI buffer completed BX = handle CX = buffer length when a packet is received --------------------------------------------- INT 60 - FTP Driver - RELEASE TYPE AH = 03h BX = handle Return: CF set on error DH = error code (see above) CF clear if successful --------------------------------------------- INT 60 - FTP Driver - SEND PACKET AH = 04h DS:SI -> buffer CX = length Return: CF set on error DH = error code (see above) --------------------------------------------- INT 60 - FTP Driver - TERMINATE DRIVER FOR HANDLE AH = 05h BX = handle Return: CF set on error DH = error code (see above) --------------------------------------------- INT 60 - FTP Driver - GET ADDRESS AH = 06h BX = handle ES:DI -> buffer CX = length Return: CF set on error DH = error code (see above) CF clear if successful CX = length Note: copies the local net address associated with the handle into the buffer --------------------------------------------- INT 60 - FTP Driver - RESET INTERFACE AH = 07h BX = handle Return: CF set on error DH = error code (see above) --------------------------------------------- INT 60 - 10-NET - 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 0 successful 1 timeout 2 server not responding 3 invalid semaphore name 4 semaphore list is full 5 invalid drive ID 6 invalid Ethernet address 7 not logged in 8 write to network failed 9 semaphore already logged for this CPU --------------------------------------------- INT 60 - 10-NET - LOCK AH = 12h AL = drive number or 0 ES:SI = Ethernet address or 0 DS:BX -> 31-byte ASCIZ semaphore name Return: AL = status (see function 11h) 1 semaphore currently logged Note: unlike function 11h, this function returns immediately --------------------------------------------- INT 60 - 10-NET - UNLOCK AH = 13h AL = drive number or 0 ES:SI = Ethernet address or 0 DS:BX -> 31-byte ASCIZ semaphore name Return: AL = status (see function 11h) 1 semaphore not logged --------------------------------------------- INT 60 - FTP Driver - SET RECEIVE MODE AH = 20h BX = handle 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 Return: CF set on error DH = error code --------------------------------------------- INT 60 - FTP Driver - GET RECEIVE MODE AH = 21h BX = handle Return: CF set on error DH = error code (see function 01h above) CF clear if successful AX = mode --------------------------------------------- INT 60 - FTP Driver - GET STATISTICS AH = 24h BX = handle Return: CF set on error DH = error code CF clear if successful DS:SI -> statistics DWORD packets in DWORD packets out DWORD bytes in DWORD bytes out DWORD errors in DWORD errors out DWORD packets dropped --------------------------------------------- INT 61 - reserved for user interrupt --------------------------------------------- INT 62 - reserved for user interrupt --------------------------------------------- INT 63 - reserved for user interrupt --------------------------------------------- INT 64 - reserved for user interrupt --------------------------------------------- INT 65 - reserved for user interrupt --------------------------------------------- INT 66 - reserved for user interrupt --------------------------------------------- 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 --------------------------------------------- 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 above) --------------------------------------------- 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 above) --------------------------------------------- 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 --------------------------------------------- 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 --------------------------------------------- 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 --------------------------------------------- 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 --------------------------------------------- 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 --------------------------------------------- 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 --------------------------------------------- INT 67 - LIM EMS - reserved - GET I/O PORT ADDRESSES AH = 49h Note: defined in EMS 3.0, but undocumented in EMS 3.2 --------------------------------------------- INT 67 - LIM EMS - reserved - GET TRANSLATION ARRAY AH = 4Ah Note: defined in EMS 3.0, but undocumented in EMS 3.2 --------------------------------------------- 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 --------------------------------------------- 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 --------------------------------------------- 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 --------------------------------------------- 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 (subfunction 03h only) array pointed to by ES:DI receives mapping info (AL=00/02) 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. --------------------------------------------- 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 --------------------------------------------- INT 67 - LIM EMS 4.0 - MAP/UNMAP MULTIPLE HANDLE PAGES AH = 50h AL = subfunction 00h 01h DX = handle CX = number of entries in array DS:SI -> mapping array 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 --------------------------------------------- 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 --------------------------------------------- INT 67 - LIM EMS 4.0 - GET/SET HANDLE ATTRIBUTES AH = 52h AL = subfunction 00h get handle attributes 01h set handle attributes BL = new attribute (see returned AL) 02h get attribute capability DX = handle Return: AL = attribute (for subfunction 00h) 00h handle is volatile 01h handle is nonvolatile AL = attribute capability (for subfunction 02h) 00h only volatile handles supported 01h both volatile and non-volatile supported 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 --------------------------------------------- INT 67 - LIM EMS 4.0 - GET/SET HANDLE NAME AH = 53h AL = subfunction 00h get handle name ES:DI -> 8-byte handle name array 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 --------------------------------------------- INT 67 - LIM EMS 4.0 - GET HANDLE DIRECTORY AH = 54h AL = subfunction 00h get handle directory ES:DI -> buffer for handle directory 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 --------------------------------------------- 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 --------------------------------------------- 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: (if successful, the target address is called. Use a RETF to return and restore mapping context) BX = stack space required (subfunction 02h) 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 undefined subfunction --------------------------------------------- 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 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 --------------------------------------------- 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 --------------------------------------------- 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 01h get unallocated raw page count Return: BX = unallocated raw pages (subfunction 01h) DX = total raw pages (subfunction 01h) 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 --------------------------------------------- INT 67 - LIM EMS 4.0 - ALLOCATE STANDARD/RAW PAGES AH = 5Ah --