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
--