home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-09-05 | 82.9 KB | 1,858 lines |
-
- ** Programmer's Technical Reference for MSDOS and the IBM PC **
- USA copyright TXG 392-616 ALL RIGHTS RESERVED
- ───────────────────────────────┤ DOSREF (tm) ├────────────────────────────────
- ISBN 1-878830-02-3 (disk-based text)
- Copyright (c) 1987, 1991 Dave Williams
- ┌─────────────────────────────┐
- │ Shareware Version, 09/05/91 │
- │ Please Register Your Copy │
- └─────────────────────────────┘
-
-
- C H A P T E R F I V E
-
- Interrupts 22h Through 86h
-
- note: the registered version of this chapter is more than twice this size.
-
-
- Interrupt 22h Terminate Address
- (0:0088h)
- This interrupt transfers control to the far (dword) address at this interrupt
- location when an application program terminates. The default address for this
- interrupt is 0:0088h through 0:008Bh. This address is copied into the program's
- Program Segment Prefix at bytes 0Ah through 0Dh at the time the segment is
- created and is restored from the PSP when the program terminates. The calling
- program is normally COMMAND.COM or an application. Do not issue this interrupt
- directly, as the EXEC function call does this for you. If an application
- spawns a child process, it must set the Terminate Address prior to issuing the
- EXEC function call, otherwise when the second program terminated it would
- return to the calling program's Terminate Address rather than its own. This
- address may be set with int 21, function 25h.
-
-
- Interrupt 23h Ctrl-Break Exit Address
- (0:008Ch)
- If the user enters a Ctrl-Break during STDIN, STDOUT, STDPRN, or STDAUX, int
- 23h is executed. If BREAK is on, int 23h is checked on MOST function calls
- (notably 06h). If the user written Ctrl-Break routine saves all registers, it
- may end with a return-from-interrupt instruction (IRET) to continue program
- execution. If the user-written interrupt program returns with a long return, the
- carry flag is used to determine whether the program will be aborted. If the
- carry flag is set, the program is aborted, otherwise execution continues (as
- with a return by IRET). If the user-written Ctrl-Break interrupt uses function
- calls 09h or 0Ah, (Display String or Buffered Keyboard Input) then a three-byte
- string of 03h-0Dh-0Ah (ETX/CR/LF) is sent to STDOUT. If execution is continued
- with an IRET, I/O continues from the start of the line. When the interrupt
- occurs, all registers are set to the value they had when the original function
- call to DOS was made. There are no restrictions on what the Ctrl-Break handler
- is allowed to do, including DOS function calls, as long as the registers are
- unchanged if an IRET is used. If the program creates a new segment and loads a
- second program which itself changes the Ctrl-Break address, the termination of
- the second program and return to the first causes the Ctrl-Break address to
- be restored from the PSP to the value it had before execution of the second
- program.
-
-
- Interrupt 24h Critical Error Handler
- (0:0090h)
-
- When a critical error occurs within DOS, control is transferred to an error
- handler with an int 24h. This may be the standard DOS error handler (ABORT,
- RETRY, IGNORE) or a user-written routine.
- On entry to the error handler, AH will have its bit 7=0 (high order bit)
- if the error was a disk error (probably the most common error), bit 7=1 if
- not.
- BP:SI contains the address of a Device Header Control Block from which
- additional information can be retrieved (see below).
- The register is set up for a retry operation and an error code is in the
- lower half of the DI register with the upper half undefined. These are the
- error codes:
-
- The user stack is in effect and contains the following from top to bottom:
-
- IP DOS registers from issuing int 24h
- CS int 24h
- flags
- AX user registers at time of signal
- BX int 21h request
- CX
- DX
- SI
- DI
- BP
- DS
- ES
- IP from original int 21h
- CS
- flags
-
- To reroute the critical error handler to a user-writen critical error handler,
- the following should be done:
-
- Before an int 24h occurs:
- 1) The user application initialization code should save the int 24h vector and
- replace the vector with one pointing to the user error routine.
-
- When the int 24h occurs:
- 2) When the user error routine received control it should push the flag
- registers onto the stack and execute a far call to the original int 24h
- vector saved in step 1.
- 3) DOS gives the appropriate prompt, and waits for user input (Abort, Retry,
- Ignore, Fail). After the user input, DOS returns control to the user error
- routine instruction following the far call.
- 4) The user error routine can now do any tasks nescessary. To return to the
- original application at the point the error occurred, the error routine needs
- to execute an IRET instruction. Otherwise, the user error routine should
- remove the IP, CS, and flag registers from the stack. Control can then be
- passed to the desired point.
-
- Int 24h provides the following values in registers on entry to the interrupt
- handler:
-
- entry AH status byte (bits)
- 7 0 disk I/O hard error
- 1 other error - if block device, bad FAT
- - if char device, code in DI
- 6 unused
- 5 0 if IGNORE is not allowed
- 1 if IGNORE is allowed
- 4 0 if RETRY is not allowed
- 1 if RETRY is allowed
- 3 0 if FAIL is not allowed
- 1 if FAIL is allowed
- 2 \ disk area of error 00 = DOS area 01 = FAT
- 1 / 10 = root dir 11 = data area
- 0 0 if read operation
- 1 if write operation
- AL drive number if AH bit 7 = 1, otherwise undefined
- If it is as hard error on disk (AH bit 7=0), register AL
- contains the failing drive number (0=A:, 1=B:, etc.).
- BP:SI address of a Device Header Control Block for which error
- occurred block device if high bit of BP:SI+4 = 1
- low byte of DI: error code (note: high byte is undefined)
- error code description
- 00h attempt to write on write-protected diskette
- 01h unknown unit
- 02h drive not ready
- 03h unknown command
- 04h data error (bad CRC)
- 05h bad 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
- 0Fh invalid disk change (DOS 3.x+)
- 10h (DOS 3.x) FCB unavailable
- 11h (DOS 3.x) sharing buffer overflow
-
- The handler must return this information:
-
- The registers are set such that if an IRET is executed, DOS responds according
- to (AL) as follows:
- AL 00h ignore the error
- 01h retry the operation
- 02h terminate via int 22h
- 03h fail the system call that is in progress (DOS 3.x+)
- note 1) Be careful when choosing to ignore a response because this causes DOS to
- beleive that an operation has completed successfully when it may not
- have.
- 2) If the error was a character device, the contents of AL are invalid.
-
-
-
- OTHER ERRORS
-
- If AH bit 7=1, the error occurred on a character device, or was the result of
- a bad memory image of the FAT. The device header passed in BP:SI can be examined
- to determine which case exists. If the attribute byte high-order bit indicates
- a block device, then the error was a bad FAT. Otherwise, the error is on a
- character device.
- If a character device is involved, the contents of AL are unpredictable, the
- error code is in DI as above.
-
- Notes:
- 1. Before giving this routine control for disk errors, DOS performs several
- retries. The number of retries varies according to the DOS version.
- 2. For disk errors, this exit is taken only for errors occurring during an
- int 21h function call. It is not used for errors during an int 25h or 26h.
- 3. This routine is entered in a disabled state.
- 4. All registers must be preserved.
- 5. This interrupt handler should refrain from using DOS function calls. If
- necessary, it may use calls 01h through 12h. Use of any other call destroys
- the DOS stack and leaves DOS in an unpredictable state.
- 6. The interrupt handler must not change the contents of the device header.
- 7. If the interrupt handler handles errors itself rather than returning to DOS,
- it should restore the application program's registers from the stack,
- remove all but the last three words on the stack, then issue an IRET. This
- will return to the program immediately after the int 21h that experienced
- the error. Note that if this is done DOS will be in an unstable state until
- a function call higher than 12h is issued, therefore not recommended.
- 8. For DOS 3.x, IGNORE requests (AL=0) are converted to FAIL for critical
- errors that occur on FAT or DIR sectors.
- 9. For DOS 3.10 up, IGNORE requests (AL=0) are converted to FAIL requests
- for network critical errors (50-79).
-
- The device header pointed to by BP:SI is as follows:
-
- DWORD Pointer to next device (0FFFFh if last device)
-
- WORD Attributes:
-
- Bit 15 1 if character device.
- If bit 15 is 1:
- Bit 0 = 1 if current standard input
- Bit 1 = 1 if current standard output
- Bit 2 = 1 if current NULL device
- Bit 3 = 1 if current CLOCK device
- 0 if block device
- Bit 14 is the IOCTL bit
- WORD pointer to device driver strategy entry point
- WORD pointer to device driver interrupt entry point
- 8-BYTE character device named field for block devices. The first byte is the
- number of units.
- To tell if the error occurred on a block or character device, look at bit 15
- in the attribute field (WORD at BP:SI+4).
- If the name of the character device is desired, look at the eight bytes
- starting at BP:SI+10.
-
-
- HANDLING OF INVALID RESPONSES (DOS 3.x)
-
- A) If IGNORE (AL=0) is specified by the user and IGNORE is not allowed
- (bit 5=0), make the response FAIL (AL=3).
- B) If RETRY (AL=1) is specified by the user and RETRY is not allowed
- (bit 4=0), make the response FAIL (AL=3).
- C) If FAIL (AL=3) is specified by the user and FAIL is not allowed (bit
- 3=0), make the response ABORT. (AL=2)
-
-
-
-
-
- Interrupt 25h Absolute Disk Read
- Interrupt 26h Absolute Disk Write
- (0:0094h, 0:0098h)
- These transfer control directly to the device driver. On return, the original
- flags are still on the stack (put there by the INT instruction). This is
- necessary because return information is passed back in the current flags.
- The number of sectors specified is transferred between the given drive and the
- transfer address. Logical sector numbers are obtained by numbering each sector
- sequentially starting from track 0, head 0, sector 1 (logical sector 0) and
- continuing along the same head, then to the next head until the last sector on
- the last head of the track is counted. Thus, logical sector 1 is track 0, head
- 0, sector 2; logical sector 2 is track 0, head 0, sector 3; and so on. Numbering
- then continues wih sector 1 on head 0 of the next track. Note that although the
- sectors are sequentially numbered (for example, sectors 2 and 3 on track 0 in
- the example above), they may not be physically adjacent on disk, due to
- interleaving. Note that the mapping is different from that used by DOS 1.10 for
- dual-sided diskettes.
-
- The request is as follows:
-
- int 25 for Absolute Disk Read,
- int 26 for Absolute Disk Write
- entry AL drive number (0=A:, 1=B:, etc)
- CX number of sectors to read
- DS:BX disk transfer address (buffer)
- DX first relative sector to read - beginning logical sector number
- return CF set if error
- AL error code issued to int 24h in low half of DI
- AH 01h bad command
- 02h bad address mark
- 03h write-protected disk
- 04h requested sector not found
- 08h DMA failure
- 10h data error (bad CRC)
- 20h controller failed
- 40h seek operation failed
- 80h attachment failed to respond
- note 1) Original flags on stack! Be sure to pop the stack to prevent
- uncontrolled growth
- 2) Ints 25 and 26 will try rereading a disk if they get an error the first
- time.
- 3) All registers except the segment registers are destroyed by these calls
-
-
- Interrupt 25h ABSOLUTE DISK READ
- (except DOS 4.0/Compaq DOS 3.31 >32M partition)
- entry AL drive number (0=A, 1=B, etc)
- DS:BX pointer to Disk Transfer Address (buffer)
- CX number of sectors to read
- DX first relative sector to read
- return CF 1 if error
- AL error code issued to int 24h in low half of DI
- AH 80h attachment failed to respond
- 40h seek operation failed
- 20h controller failed
- 10h data error (bad CRC)
- 08h DMA failure
- 04h requested sector not found
- 03h write-protected disk
- 02h bad address mark
- 01h bad command
- note Original flags on stack!
-
- Interrupt 25h DOS 4.0/Compaq DOS 3.31 - ABSOLUTE DISK READ
- (>32M hard-disk partition)
- entry AL drive number (0=A, 1=B, etc)
- CX 0FFFFh
- DS:BX Packet address
- DWORD sector number
- WORD number of sectors to read
- DWORD transfer address
- return same as above?
- note Partition is potentially >32Mb (and requires this form of the call) if
- bit 1 of device attribute word in device driver is set
-
- Interrupt 26h ABSOLUTE DISK WRITE
- (except DOS 4.0/Compaq DOS 3.31 >32M partition)
- entry AL drive number (0=A, 1=B, etc)
- DS:BX pointer to Disk Transfer Address (buffer)
- CX number of sectors to write
- DX first relative sector to write
- return CF 1 if error
- AL error code issued to int 24h in low half of DI
- AH same error codes as for int 25h
- note Original flags on stack!
-
- Interrupt 26h DOS 4.0/Compaq DOS 3.31 - ABSOLUTE DISK WRITE
- (>32M hard disk partitions)
- entry AL drive number (0=A, 1=B, etc)
- CX 0FFFFh
- DS:BX Packet address
- DWORD sector number
- WORD number of sectors to write
- DWORD transfer address
- return same as above?
- note Partition is potentially >32M (and requires this form of the call) if
- bit 1 of device attribute word in device driver is set
-
-
-
-
- Interrupt 27h Terminate And Stay Resident
- (0:009Ch) (obsolete)
- This vector is used by programs that are to remain resident when COMMAND.COM
- regains control.
- After initializing itself, the program must set DX to its last address plus
- one relative to the program's initial DS or ES value (the offset at which other
- programs can be loaded), then execute interrupt 27h. DOS then considers the
- program as an extension of itself, so the program is not overlaid when other
- programs are executed. This is useful for loading programs such as utilities
- and interrupt handlers that must remain resident.
-
- entry CS current program segment
- DX last program byte + 1
- return none
- note 1) This interrupt must not be used by .EXE programs that are loaded into
- the high end of memory.
- 2) This interrupt restores the interrupt 22h, 23h, and 24h vectors in the
- same manner as interrupt 20h. Therefore, it cannot be used to install
- permanently resident Ctrl-Break or critical error handler routines.
- 3) The maximum size of memory that can be made resident by this method is
- 64K.
- 4) Memory can be more efficiently used if the block containing a copy of
- the environment is deallocated before terminating. This can be done by
- loading ES with the segment contained in 2Ch of the PSP, and issuing
- function call 49h (Free Allocated Memory).
- 5) DOS function call 4Ch allows a program to pass a completion code to DOS,
- which can be interpreted with processing (see function call 31h).
- 6) Terminate and stay resident programs do not close files.
- 7) Int 21, function 31h is the preferred method to cause a program to
- remain resident because this allows return information to be passed and
- allows a program larger than 64K to remain resident.
-
-
-
-
- Interrupt 28h (not documented by Microsoft)
- * DOS Idle Interrupt
- Int 28h has been provided by DOS since release 2.0. The int 28h process is
- similar to the "Timer Tick" process provided by BIOS via int 1Ch in that it is
- an "outbound" (from DOS) call which an application can "hook onto" to get
- service at a particular entry point. DOS normally only issues int 28h when it
- recieves a function call (int 21h) from a foreground application with an
- argument in the range of 0 thru 12 (0Ch) in the AH register, or when it is
- idling waiting for keyboard input. In effect, when DOS issues int 28h, it is
- saying to the background task "I'm not doing anything hot right now, if you can
- use the time, go ahead." This means that a foreground application which doesn't
- do many low-number DOS functions can preempt CPU time easily.
-
- It is possible, if you are careful, to enhance the background priority by
- providing more int 28h calls than DOS normally would issue.
-
- When int 28h is being issued it is usually safe to do DOS calls. You won't get
- int 28hs if a program is running that doesn't do its keyboard input through
- DOS. You should rely on the timer interrupt for these.
-
- It is used primarily by the PRINT.COM routines, but any number of other
- routines can be chained to it by saving the original vector and calling it with
- a FAR call (or just JMPing to it) at the end of the new routine.
-
- Int 28h is not called at all when any non-trivial foreground task is running.
- As soon as a foreground program has a file open, int 28h no longer gets called.
- Could make a good driver for for a background program that works as long as
- there is nothing else going on in the machine.
-
- DOS uses 3 separate internal stacks: one for calls 01h through 0Ch; another
- for calls 0Dh and above; and a third for calls 01h through 0Ch when a Critical
- Error is in progress. When int 28h is called, any calls above 0Ch can be
- executed without destroying the internal stack used by DOS at the time.
-
- The byte which is pushed on the stack before an int 28h just indicates which
- stack area is being used by the current int 21h call. In DOS 3.1, the code
- sequence that calls int 28h looks like this:
-
- PUSH SS:[0304]
- INT 28
- POP SS:[0304]
-
- The low-order byte of the word pushed contains 1 if the int 21h call currently
- in progress is for services 1 through 0Ch, and 0 for service 0 and for 0Dh and
- up. Assuming that the last DOS call was not a reentrant one, this tells you
- which set of DOS services should be safe to call.
-
- If the InDOS flag is zero on int 28h, then it was called by someone other than
- DOS, and the word on the stack should NOT be examined.
-
-
- entry no parameters availible
- return none
- note 1) The int 28h handler may invoke any int 21h function except functions
- 00h through 0Ch (and 50h/51h under DOS 2.x unless DOS CritErr flag is
- set).
- 2) Apparently int 28h is also called during screen writes
- 3) Until some program installs its own routine, this interrupt vector
- simply points to an IRET opcode.
- 4) Supported in OS/2 1.0's DOS Compatibility Box
-
-
-
-
- Interrupt 29h (not documented by Microsoft)
- * Internal - Quick Screen Output
-
- This method is extremely fast (much faster than DOS 21h subfunctions 2 and 9,
- for example), and it is portable, even to "non-compatible" MS-DOS computers.
-
- entry AL character to output to screen
- return unknown
- note 1) Documented by Digital Research's DOS Reference as provided with the
- DEC Rainbow
- 2) If ANSI.SYS is installed, character output is filtered through it.
- 3) Works on the IBM PC and compatibles, Wang PC, HP-150 and Vectra, DEC
- Rainbow, NEC APC, Texas Instruments PC and others
- 4) This interrupt is called from the DOS's output routines if output is
- going to a device rather than a file, and the device driver's attribute
- word has bit 3 (04h) set to "1".
- 5) This call has been tested with MSDOS 2.11, PCDOS 2.1, PCDOS 3.1, PCDOS
- 3.2, and PCDOS 3.3.
- 6) Used in IBMBIO.COM as a vector to int 10, function 0Eh (write TTY)
- followed by an IRET.
-
-
-
-
- Interrupt 2Ah Microsoft Networks - Session Layer Interrupt
- * (not documented by Microsoft)
-
- entry AH 00h check to see if network BIOS installed
- return AH <> 0 if installed
- 01h execute NETBIOS request
- 02h set net printer mode
- 03h get shared-device status (check direct I/O)
- AL 00h
- DS:SI pointer to ASCIIZ disk device name
- return CF 0 if allowed
- 04h execute NETBIOS
- AL 0 for error retry
- 1 for no retry
- ES:BX pointer to network control block
- return AX 0 for no error
- AH 1 if error
- AL error code
- 05h get network resource information
- AL 00h
- return AX reserved
- BX number of network names
- CX number of commands
- DX number of sessions
- 06h Network Print-stream Control
- note NETBIOS 1.10
- 20h unknown
- note AL=01h intercepted by DESQview 2.0
- 80h Begin DOS Critical Section
- AL 1 to 6
- 81h End DOS Critical Section
- AL 1 to 6
- 82h Server Hook
- return unknown
- note called by the int 21h function dispatcher
- in DOS 3.10+ for function 0 and functions
- greater than 0Ch except 59h
- 84h keyboard busy loop
- note similar to DOS's int 28h
-
-
- Interrupt 2Bh (not documented by Microsoft)
- * Unknown - Internal Routine for DOS (IRET)
-
-
- Interrupt 2Ch (not documented by Microsoft)
- * Unknown - Internal Routine for DOS (IRET)
-
-
- Interrupt 2Dh (not documented by Microsoft)
- * Unknown - Internal Routine for DOS (IRET)
-
-
- Interrupt 2Eh (undocumented by Microsoft) (DOS 2.0+)
- * Internal Routine for DOS (Alternate EXEC)
-
- This interrupt passes a command line addressed by DS:SI to COMMAND.COM. The
- command line must be formatted just like the unformatted parameter area of a
- Program Segment Prefix. That is, the first byte must be a count of characters,
- and the second and subsequent bytes must be a command line with parameters,
- terminated by a carriage return character.
- When executed, int 2Eh will reload the transient part of the command
- interpreter if it is not currently in memory. If called from a program that
- was called from a batch file, it will abort the batch file. If executed from a
- program which has been spawned by the EXEC function, it will abort the whole
- chain and probably lock up the computer. Int 2Eh also destroys all registers
- including the stack pointer.
- Int 2Eh is called from the transient portion of the program to reset the DOS
- PSP pointers using the above Functions #81 & #80, and then reenters the
- resident program.
- When called with a valid command line, the command will be carried out by
- COMMAND.COM just as though you had typed it in at the DOS prompt. Note that the
- count does not include the carriage return. This is an elegant way to perform a
- SET from an application program against the master environment block for
- example.
-
- entry DS:SI pointer to an ASCIIZ command line in the form:
- count byte
- ASCII string
- carriage return
- null byte
- note 1) Destroys all registers including stack pointer
- 2) Seems to work OK in both DOS 2.x and 3.x
- 3) It is reportedly not used by DOS.
- 4) As far as known, int 2Eh is not used by DOS 3.1, although it was called
- by COMMAND.COM of PCDOS 3.0, so it appears to be in 3.1 only for the
- sake of compatibility.
-
- Interrupt 2Fh Multiplex Interrupt
-
- Interrupt 2Fh is the multiplex interrupt. A general interface is defined
- between two processes. It is up to the specific application using interrupt
- 2Fh to define specific functions and parameters.
- This interrupt is becoming more commonly used as the availible interrupt 21
- functions are getting to be in short supply. Int 2Fh doesn't require any
- support from DOS itself for it to be used in application programs. It's not
- handled by DOS, but by the programs themselves.
- Every multiplex interrupt handler is assigned a specific multiplex number.
- The multiplex number is specified in the AH register; the AH value tells which
- program your request is directed toward. The specific function that the handler
- is to perform is placed in the AL register. Other parameters are places in the
- other registers as needed. The handlers are chained into the 2Fh interrupt
- vector and the multiplex number is checked to see if any other application is
- using the same multiplex number. There is no predefined method for assigning a
- multiplex number to a handler. You must just pick one. To avoid a conflict if
- two applications choose the same multiplex number, the multiplex numbers used by
- an application should be patchable. In order to check for a previous
- installation of the current application, you can search memory for a unique
- string included in your program. If the value you wanted in AH is taken but
- you don't find the string, then another application has grabbed that location.
- Int 2Fh was not documented under DOS 2.x. There is no reason not to use int 2Fh
- as the multiplex interrupt in DOS 2.x. The only problem is that DOS 2.x does not
- initialize the int 2Fh vector, so when you try to chain to it like you are
- supposed to, it will crash. If your program checks the vector for being zero
- and initializes it itself or doesn't chain in that case, it will work for you
- n 2.x just the same as 3.x.
-
- Function 01h PRINT.COM
- Register AH identifies which program is to handle the interrupt.
- Values 00h-7Fh are reserved for DOS, not that anyone cares much.
- Values 0C0h-0FFh are reserved for applications.
- Register AL contains the function code if used
- entry AH 01h
- AL 00h PRINT Get Installed State
- This call must be defined by all int 2Fh handlers. It
- is used by the caller of the handler to determine if
- the handler is present. On entry, AL=0. On return, AL
- contains the installed state as follows:
- return AL 0FFh installed
- 01h not installed, not OK to install
- 00h not installed, OK to install
-
- 01h PRINT Submit File
- DS:DX pointer to submit packet
- format byte level
- dword pointer to ASCIIZ filename
- return CF set if error
- AX error code
- note 1) A submit packet contains the level (BYTE) and a pointer
- to the ASCIIZ string (DWORD in offset:segment form).
- The ASCIIZ string must contain the drive, path, and
- filename of the file you want to print. The filename
- cannot contain global filename characters.
- return CF set if error
- AX error code
-
- 02h PRINT Cancel File
- On entry, AL=2 and DS:DX points to the ASCIIZ string for
- the print file you want to cancel. Global filename
- characters are allowed in the filename.
- DS:DX pointer to ASCIIZ file name to cancel (wildcards OK)
- return CF set if error
- AX error code
-
- 03h PRINT remove all files
- return CF set if error
- AX error code
-
- 04h PRINT hold queue/get status
- This call holds the jobs in the print queue so that you
- can scan the queue. Issuing any other code releases the
- jobs. On entry, AL=4. On return, DX contains the error
- count. DS:SI points to the print queue. The print queue
- consists of a series of filename entries. Each entry is
- 64 bytes long. The first entry in the queue is the file
- currently being printed. The end of the queue is marked
- by the entry having a null as the first character.
- return DX error count
- DS:SI pointer to print queue (null-string terminated
- list of 64-byte ASCIIZ filenames)
- CF set if error
- AX error code
- 01h function invalid
- 02h file not found
- 03h path not found
- 04h too many open files
- 05h access denied
- 08h queue full
- 09h spooler busy
- 0Ch name too long
- 0Fh drive invalid
-
- 05h PRINT restart queue
- return CF set if error
- AX error code
-
-
- Function 05h DOS 3.x critical error handler
- entry AH 05h
- AL 00h installation check
- return AL 00h not installed, OK to install
- 01h not installed, can't install
- 0FFh installed
- note This set of functions allows a user program to
- partially or completely override the default
- critical error handler in COMMAND.COM
- AL 01h handle error - nonzero error code in AL
- return CF clear
- ES:DI pointer to ASCIIZ error message
- CF set use default error handler
- AL (?)
-
-
- Function 06h ASSIGN
- entry AH 06h
- 00h installation check
- return AH <> 0 if installed
-
- 01h get memory segment
- return ES segment of ASSIGN work area
-
-
- Function 10h SHARE
- entry AH 10h
- AL 00h installation check
- return AL 00h not installed, OK to install
- 01h not installed, not OK to install
- 0FFh installed
-
-
- Function 11h Multiplex - network redirection
- entry AH 11h
- AL 00h installation check
- return AL 00h not installed, OK to install
- 01h not installed, not OK to install
- 0FFh installed
- 01h-05h unknown
- 06h close remote file
- 07h-09h unknown
- 0Ah unknown
- stack word (?)
- return CF set on error
- 0Bh unknown
- stack word (?)
- return CF set on error(?)
- 0Ch unknown
- 0Dh unknown
- 0Eh unknown
- stack word (?)
- return (?)
- 0Fh-16h unknown
- 17h unknown
- stack word (?)
- return (?)
- 18h unknown
- stack word (?)
- return (?)
- 19h-1Dh unknown
- 1Eh do redirection
- stack word function to execute
- return CF set on error
- 1Fh printer setup
- stack word function(?)
- return CF set on error(?)
- 20h-25h unknown
- stack word (?)
- 26h unknown
-
- Function 12h multiplex, DOS 3.x internal services
- entry AH 12h
- AL 00h installation check
- return AL 0FFh for compatibility with other
- int 2Fh functions
- 01h close file (?)
- stack word value - unknown
- return BX unknown
- CX unknown
- ES:DI pointer to unknown value
- note Can be called only from within DOS
- 02h get interrupt address
- stack word vector number
- return ES:BX pointer to interrupt vector
- stack unchanged
- 03h get DOS data segment
- return DS segment of IBMDOS.COM file
- 04h normalize path separator
- stack word character to normalize
- return AL normalized character (forward slash
- turned to backslash)
- stack unchanged
- 05h output character
- stack word character to output
- return stack unchanged
- note Can be called only from within DOS
- 06h invoke critical error
- return AL 0-3 for Abort, Retry, Ignore, Fail
- note Can be called only from within DOS
- 07h move disk buffer (?)
- DS:DI pointer to disk buffer
- return buffer moved to end of buffer list
- note Can be called only from within DOS
- 08h decrement word
- ES:DI pointer to word to decrement
- return AX new value of word
- note Word pointed to by ES:DI decremented,
- skipping zero
- 09h unknown
- DS:DI pointer to disk buffer(?)
- return (?)
- note Can be called only from within DOS
- 0Ah unknown
- note Can be called only from within DOS
- 0Bh unknown
- ES:DI pointer to system file table entry(?)
- return AX (?)
- note Can be called only from within DOS
- 0Ch unknown
- note Can be called only from within DOS
- 0Dh get date and time
- return AX current date in packed format
- DX current time in packed format
- note Can be called only from within DOS
- 0Eh do something to all disk buffers (?)
- return DS:DI pointer to first disk buffer
- note can be called only from within DOS
- 0Fh unknown
- DS:DI pointer to (?)
- return DS:DI pointer to (?)
- note 1) Can be called only from within DOS
- 2) Calls on function 1207h
- 10h find dirty/clean(?) buffer
- DS:DI pointer to first disk buffer
- return DS:DI pointer to first disk buffer which has
- (?) flag clear
- ZF clear if found
- set if not found
- 11h normalize ASCIIZ filename
- DS:SI pointer to ASCIIZ filename to normalize
- ES:DI pointer to buffer for normalized filename
- return destination buffer filled with uppercase
- filename, with slashes turned to backslashes
- 12h get length of ASCIIZ string
- ES:DI pointer to ASCIIZ string
- return CX length of string
- 13h uppercase character
- stack word character to convert to uppercase
- return AL uppercase character
- stack unchanged
- 14h compare far pointers
- DS:SI first pointer
- ES:DI second pointer
- return ZF set if pointers are equal
- ZF clear if not equal
- 15h unknown
- DS:DI pointer to disk buffer
- stack word (?)
- return stack unchanged
- note Can be called only from within DOS
- 16h get address of system FCB
- BX system file table entry number
- return ES:DI pointer to system file table entry
- 17h set default drive (?)
- stack word drive (0=A:, 1=B:, etc)
- return DS:SI pointer to drive data block for
- specified drive
- stack unchanged
- note Can be called only from within DOS
- 18h get something (?)
- return DS:SI pointer to (?)
- 19h unknown
- stack word drive (0=default, 1=A:, etc)
- return (?)
- stack unchanged
- note 1) Can be called only from within DOS
- 2) Calls function 1217h
- 1Ah get file's drive
- DS:SI pointer to filename
- return AL drive
- (0=default, 1=A:, etc, 0FFh=invalid)
- 1Bh set something (?)
- CL unknown
- return AL (?)
- note Can be called only from within DOS
- 1Ch checksum memory
- DS:SI pointer to start of memory to checksum
- CX number of bytes
- DX initial checksum
- return DX checksum
- note Can be called only from within DOS
- 1Dh unknown
- DS:SI pointer to (?)
- CX (?)
- DX (?)
- return AX (?)
- CX (?)
- DX (?)
-
- 1Eh compare filenames
- DS:SI pointer to first ASCIIZ filename
- ES:DI pointer to second ASCIIZ filename
- return ZF set if filenames equivalent
- clear if not
- 1Fh build drive info block
- stack word drive letter
- return ES:DI pointer to drive info block
- (will be overwritten by next call)
- stack unchanged
- note Can be called only from within DOS
- 20h get system file table number
- BX file handle
- return CF set on error, error code in AL
- AL 06h (invalid file handle)
- CF clear if successful
- byte ES:[DI] = system file table entry
- number for file handle
- 21h unknown
- DS:SI pointer to (?)
- return (?)
- note Can be called only from within DOS
- 22h unknown
- SS:SI pointer to (?)
- return nothing(?)
- note Can be called only from within DOS
- 23h check if character device (?)
- return DS:SI pointer to device driver with
- same name as (?)
- note Can be called only from within DOS
- 24h delay
- return after delay of (?) ms
- note Can be called only from within DOS
- 25h get length of ASCIIZ string
- DS:SI pointer to ASCIIZ string
- return CX length of string
-
-
- Function 43h Microsoft Extended Memory Specification (XMS)
-
-
- Function 5453h TesSeRact Standard for Ram-Resident Program Communication
-
-
- Function 64h SCRNSAV2.COM
- entry AH 64h
- AL 00h installation check
- return AL 00h not installed
- 0FFh installed
- note SCRNSAV2.COM is a screen saver for PS/2's with VGA by Alan Ballard
-
-
- Function 7Ah Novell NetWare
- entry AH 7Ah
- AL 00h installation check
- note 1) Returns address of entry point for IPX and SPX
- 2) Parameters are listed under int 21
-
-
- Function 087h APPEND
- entry AH 087h
- AL 00h APPEND installation check
- return AH <> 0 if installed
- 01h APPEND - unknown
- 02h APPEND - version check
-
- Function 088h Microsoft Networks
- entry AH 088h
- AL 00h network program installation check
- return AH <> 0 if installed
- BX installed component flags (test in this order!)
- bit 6 server
- bit 2 messenger
- bit 7 receiver
- bit 3 redirector
- 01h unknown
- 02h unknown
- 03h get current POST address
- return ES:BX POST address
- 04h set new POST address
- ES:BX new POST address
- 09h network version check
-
-
- Function 0AAh VIDCLOCK.COM
- entry AH 0AAh
- AL 00h installation check
- return AL 00h not installed
- 0FFh installed
- note VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III
-
-
- Function 0BBh Network Functions
- entry AH 0BBh
- AL 00h net command installation check
- 01h, 02h unknown
- 03h get server POST address
- 04h get server POST address
-
-
- Function 0F7h AUTOPARK.COM (PD TSR hard disk parking utility)
- entry AH 0F7h
- AL 00h installation check
- return AL 00h not installed
- 0FFh installed
- note AUTOPARK is a TSR HD parker by Alan D. Jones
- 01h set parking delay
- BX:CX 32 bit count of 55ms timer ticks
-
-
-
- MSDOS 2Fh functions 01h (PRINT), 02h (ASSIGN), 10h (SHARE):
- return AX Error
- Codes Description
- 01h invalid function number
- 02h file not found
- 03h path not found
- 04h too many open files
- 05h access denied
- 06h invalid handle
- 08h queue full
- 09h busy
- 0Ch name too long
- 0Fh invalid drive was specified
- CF clear (0) if OK
- set (1) if error - error returned in AX
- note 1) The multiplex numbers AH=0h through AH=7Fh are reserved for DOS.
- Applications should use multiplex numbers 80h through 0FFh.
- 2) When in the chain for int 2Fh, if your code calls DOS or if you execute
- with interrupts enabled, your code must be reentrant/recursive.
- 3) Important! In versions of DOS prior to 3.0, the int 2Fh vector was
- initialized to zero rather than being pointed into the DOS service area.
- You must initialize this vector manually under DOS 2.x.
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │ Miscellaneous Interrupts - in numerical order │
- └─────────────────────────────────────────────────────────────────────────────┘
-
- Interrupt 30h (not a vector!) far jump instruction for CP/M-style calls
-
-
- Interrupt 31h Unknown
- note The CALL 5 entry point does a FAR jump to here
-
-
- Interrupt 32h Unknown
-
-
- Interrupt 33h Used by Microsoft Mouse Driver
- Function Calls
-
- Function Requests
-
- 00h Reset Driver and Read Status
- entry AH 00h
- return AH 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
-
- 01h Show Mouse Cursor
- entry AH 01h
- return unknown
-
- 02h Hide Mouse Cursor
- entry AH 02h
- return unknown
- note multiple calls to hide the cursor will require multiple calls
- to function 01h to unhide it.
-
- 03h Return Position and Button Status
- entry AH 03h
- 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
-
- 04h Position Mouse Cursor
- entry AH 04h
- CX column
- DX row
- return unknown
-
- 05h Return Button Press Data
- entry AH 05h
- BX button
- 0 left
- 1 right
- 2 middle (Mouse Systems mouse)
- return AH 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 no. of times specified button pressed since last call
- CX column at time specified button was last pressed
- DX row at time specified button was last pressed
-
- 06h Return Button Release Data
- entry AH 06h
- BX button
- 0 left
- 1 right
- 2 middle (Mouse Systems mouse)
- return AH 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 no. of times specified button released since last call
- CX column at time specified button was last released
- DX row at time specified button was last released
-
- 07h Define Horizontal Cursor Range
- entry AH 0007h
- CX minimum column
- DX maximum column
- return unknown
-
- 08h Define Vertical Cursor Range
- entry AH 08h
- CX minimum row
- DX maximum row
- return unknown
-
- 09h Define Graphics Cursor
- entry AH 09h
- BX column of cursor hot spot in bitmap (-16 to 16)
- CX row of cursor hot spot (-16 to 16)
- ES:DX pointer to bitmap
- 16 words screen mask
- 16 words cursor mask
- return unknown
- note Each word defines the sixteen pixels of a row, low bit
- rightmost
-
- 0Ah Define Text Cursor
- entry AH 0Ah
- BX hardware/software text cursor
- 00h software
- CX screen mask
- DX cursor mask
- 01h hardware
- CX start scan line
- DX end scan line
- return unknown
- note When the software cursor is selected, the char/attribute data
- at the current screen position is ANDed with the screen mask
- and the with the cursor mask
-
- 0Bh Read Motion Counters
- entry AH 0Bh
- return CX number of mickeys mouse moved horiz. since last call
- DX number of mickeys mouse moved vertically
- note 1) A mickey is the smallest increment the mouse can sense.
- Positive values indicate up/right
-
- 0Ch Define Interrupt Subroutine Parameters
- entry AH 0Ch
- CX call mask bit
- 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)
- bit 6 call if middle button released (Mouse Systems)
- ES:DX address of FAR routine
- return unknown
- note when the subroutine is called, it is passed these values:
- AH 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
-
- 0Dh Light Pen Emulation On
- entry AH 0Dh
- return unknown
-
- 0Eh Light Pen Emulation Off
- entry AH 0Eh
- return unknown
-
- 0Fh Define Mickey/Pixel Ratio
- entry AH 0Fh
- CX number of mickeys per 8 pixels horizontally
- DX number of mickeys per 8 pixels vertically
- return unknown
-
- 10h Define Screen Region for Updating
- entry AH 10h
- CX,DX X,Y coordinates of upper left corner
- SI,DI X,Y coordinates of lower right corner
- return unknown
- note Mouse cursor is hidden during updating, and needs to be
- explicitly turned on again
-
- 11h not documented by Microsoft
-
- 12h Set Large Graphics Cursor Block
- AH 12h
- 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 pointer to bit map of screen and cursor maps
- return AH -1 if successful
- note PC Mouse. Not documented by Microsoft
-
- 13h Define Double-Speed Threshold
- entry AH 13h
- DX threshold speed in mickeys/second,
- 0 = default of 64/second
- return unknown
- note If speed exceeds threshold, the cursor's on-screen motion
- is doubled
-
- 14h Exchange Interrupt Subroutines
- entry AH 14h
- return unknown
-
- 15h Return Drive Storage Requirements
- entry AH 15h
- return BX size of buffer needed to store driver state
-
- 16h Save Driver State
- entry AH 16h
- ES:DX pointer to buffer
- return unknown
-
- 17h Restore Driver State
- entry AH 17h
- ES:DX pointer to buffer containing saved state
- return unknown
-
- 18h-1Ch not documented by Microsoft; unknown
-
- 1Dh Define Display Page Number
- entry AH 1Dh
-
- 1Eh Return Display Page Number
- entry AH 1Eh
- return unknown
-
- 42h PCMouse - Get MSmouse Storage Requirements
- AH 42h
- return AX 0FFFFh successful
- BX buffer size in bytes for functions 50h and 52h
- 00h MSmouse not installed
- 42h functions 42h, 50h, and 52h not supported
-
- 52h PCMouse - Save MSmouse State
- entry AH 50h
- BX buffer size
- ES:DX pointer to buffer
- return AX 0FFFFh if successful
-
- 52h PCMouse - restore MSmouse state
- entry AH 52h
- BX buffer size
- ES:DX pointer to buffer
- return AX 0FFFFh if successful
-
-
- Int 33: In addition, the following functions are appended to BIOS int 10h and
- implemented as the EGA Register Interface Library:
-
- 0F0h read one register
- 0F1h write one register
- 0F2h read consecutive register range
- 0F3h write consecutive register range
- 0F4h read non-consecutive register set
- 0F5h write non-consecutive register set
- 0F6h revert to default register values
- 0F7h define default register values
- 0FAh get driver status
-
-
-
- Interrupt 34h Turbo C/Microsoft languages - Floating Point emulation
- This interrupt emulates opcode 0D8h
-
-
- Interrupt 35h Turbo C/Microsoft languages - Floating Point emulation
- This interrupt emulates opcode 0D9h
-
-
- Interrupt 36h Turbo C/Microsoft languages - Floating Point emulation
- This interrupt emulates opcode 0DAh
-
-
- Interrupt 37h Turbo C/Microsoft languages - Floating Point emulation
- This interrupt emulates opcode 0DBh
-
-
- Interrupt 38h Turbo C/Microsoft languages - Floating Point emulation
- This interrupt emulates opcode 0DCh
-
-
- Interrupt 39h Turbo C/Microsoft languages - Floating Point emulation
- This interrupt emulates opcode 0DDh
-
-
- Interrupt 3Ah Turbo C/Microsoft languages - Floating Point emulation
- This interrupt emulates opcode 0DEh
-
-
- Interrupt 3Bh Turbo C/Microsoft languages - Floating Point emulation
- This interrupt emulates opcode 0DFh
-
-
- Interrupt 3Ch Turbo C/Microsoft languages - Floating Point emulation
- This int emulates instructions with an ES segment override
-
-
- Interrupt 3Dh Turbo C/Microsoft languages - Floating Point emulation
- This interrupt emulates a standalone FWAIT instruction
-
-
- Interrupt 3Eh Turbo C/Microsoft languages - Floating Point emulation
-
-
- Interrupt 3Fh Overlay manager interrupt (Microsoft LINK.EXE)
- Default overlay interrupt; may be changed with LINK switch
-
-
- Interrupt 40h Hard Disk BIOS
- Pointer to disk BIOS entry when a hard disk controller is
- installed. The BIOS routines use int 30h to revector the
- diskette handler (original int 13h) here so int 40 may be used
- for hard disk control
-
-
- Interrupt 41h Hard Disk Parameters (XT,AT,XT2,XT286,PS except ESDI disks)
- Pointer to first Hard Disk Parameter Block, normally located
- in the controller card's ROM. This table may be copied to RAM
- and changed, and this pointer revectored to the new table.
- note 1) format of parameter table is:
- dw cylinders
- db heads
- dw starting reduced write current cylinder (XT only, 0 for others)
- db maximum ECC burst length
- db 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
- db standard timeout (XT only, 0 for others)
- db formatting timeout (XT only, 0 for others)
- db timeout for checking drive (XT only, 0 for others)
- dw landing zone (AT, PS/2)
- db sectors/track (AT, PS/2)
- db 0
- 2) normally vectored to ROM table when system is initialized.
-
-
- Interrupt 42h Pointer to screen BIOS entry (EGA, VGA, PS/2)
- Relocated (by EGA, etc.) video handler (original int 10h).
- Revectors int 10 calls to EGA BIOS.
-
-
- Interrupt 43h Pointer to EGA graphics character table. The POST initializes
- this vector pointing to the default table located in the EGA
- ROM BIOS. (PC-2 and up). Not initialized if EGA not present.
- This vector was referred to (mistakenly) as the Video
- Parameters table in the original EGA BIOS listings.
-
-
- Interrupt 44h Pointer to graphics character table. This table contains the
- (0:0110h) dot patterns for the first 128 characters in video modes 4,5,
- and 6, and all 256 characters in all additional graphics modes.
- Not initialized if EGA not present.
- 2) EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh
- 3) Novell NetWare - High-Level Language API
- 4) This interrupt is not used by some EGA cards.
-
-
- Interrupt 45h Reserved by IBM (not initialized)
-
-
- Interrupt 46h Pointer to second hard disk, parameter block (AT, XT/286, PS/2)
- (see int 41h) (except ESDI hard disks) (not initialized unless
- specific user software calls for it)
-
-
- Interrupt 47h Reserved by IBM (not initialized)
-
-
- Interrupt 48h Cordless Keyboard Translation (PCjr, XT [never delivered])
- (0:0120h) This vector points to code to translate the cordless keyboard
- scancodes into normal 83-key values. The translated scancodes
- are then passed to int 9. (not initialized on PC or AT)
-
-
- Interrupt 49h Non-keyboard Scan Code Translation Table Address (PCjr)
- (0:0124h) This interrupt is used for operation of non-keyboard devices
- on the PCjr, such as the Keystronic Numeric Keypad.
- This interrupt has the address of a table used to translate
- non-keyboard scancodes (greater than 85 excepting 255). This
- interrupt can be revectored by a user application. IBM
- recommends that the default table be stored at the beginning
- of an application that required revectoring this interrupt,
- and that the default table be restored when the application
- terminates. (not initialized on PC or AT)
-
- The PCjr BIOS can interpret scancodes other than those
- generated by the keyboard to allow for expansion. The keyboard
- generates scancodes from 01h to 055h, including 0FFh. Any
- scancodes above 55h (56h through 7Eh for make codes and 0D6h
- through 0FEh for break codes) are processed in the following
- manner:
- 1) if the incoming make code falls within the range of the
- translate table whose address is pointed to by int 49h, it
- is translated into the corresponding scancode. Any incoming
- break codes above 0D5h are ignored.
- 2) if the new translated scancode ius less and 56h, it is
- processed by the BIOS as a keyboard scancode and the same
- data is placed in the BIOS keyboard buffer.
- 3) if the translated scancode is higher than 55h or the
- incoming scancode is outside the range of the translate
- table, 40h is added creating a new extended scancode. The
- extended scancode is placed in the BIOS keyboard buffer with
- the character code of 00h (NUL). This utilitizes the range
- of 96h through 0BEh for scancodes 56h through 7Eh.
-
- The default translate-table maps scancodes 56h through 6Ah to
- existing keyboard values. Codes 6Bh theough 0BEh are mapped (by
- adding 40h) to extended codes 0ABh through 0FEh since they are
- outside the range of the default translate table.
-
- The format of the translate table is:
- 0 length - the number of nonkeyboard scancodes that are
- mapped within the table (from 1 to n)
- 1 to n word 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
-
- With this layout, all keyboard scancodes can be intercepted
- through int 9h and and nonkeyboard scancodes can be intercepted
- through int 48h.
-
-
- Interrupt 4Ah Real-Time Clock Alarm (Convertible, PS/2)
- (not initialized on PC or AT)
- Invoked by BIOS when real-time clock alarm occurs
-
-
- Interrupt 4Bh Reserved by IBM (not initialized)
-
-
- Interrupt 4Ch Reserved by IBM (not initialized)
-
-
- Interrupt 4Dh Reserved by IBM (not initialized)
-
-
- Interrupt 4Eh Reserved by IBM (not initialized)
- Used instead of int 13h for disk I/O on TI Professional PC
-
-
- Interrupt 4Fh Reserved by IBM (not initialized)
-
-
- Interrupt 50-57 IRQ0-IRQ7 relocated by DesQview
- (normally not initialized)
-
-
- Interrupt 58h Reserved by IBM (not initialized)
-
-
- Interrupt 59h Reserved by IBM (not initialized)
- GSS Computer Graphics Interface (GSS*CGI)
- DS:DX Pointer to block of 5 array pointers
- return CF 0
- AX return code
- CF 1
- AX error code
- note 1) Int 59 is the means by which GSS*CGI language bindings
- communicate with GSS*CGI device drivers and the GSS*CGI
- device driver controller.
- 2) Also used by the IBM Graphic Development Toolkit
-
-
- Interrupt 5Ah Reserved by IBM (not initialized)
-
-
- Interrupt 5Bh Reserved by IBM (not initialized)
-
-
- Interrupt 5Ah Cluster Adapter BIOS entry address
- (normally not initialized)
-
-
- Interrupt 5Bh Reserved by IBM (not initialized) (cluster adapter?)
-
-
- Interrupt 5Ch NETBIOS interface entry port
- ES:BX pointer to network control block
- return AL error code (0 if none)
- note 1) When the NETBIOS is installed, interrupts 13 and 17 are interrupted by
- the NETBIOS; interrupt 18 is moved to int 86 and one of int 2 or 3 is
- used by NETBIOS. Also, NETBIOS extends the int 15 function 90 and 91h
- functions (scheduler functions)
- 2) Normally not initialized.
- 3) TOPS network card uses DMA 1, 3 or none.
-
-
- Interrupt 5Dh Reserved by IBM (not initialized)
-
-
- Interrupt 5Eh Reserved by IBM (not initialized)
-
-
- Interrupt 5Fh Reserved by IBM (not initialized)
-
-
- Interrupt 60h-67h User Program Interrupts (availible for general use)
- Various major programs make standardized use of this group
- of interrupts. Details of common use follows
-
-
- Interrupt 60h 10-Net Network
-
- entry AH 11h Lock and Wait
- AL drive number or 0
- DX number of seconds to wait
- ES:SI Ethernet address or 0
- DS:BX pointer to 31-byte ASCIIZ 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
-
- entry AH 12h Lock
- AL drive number or 0 for default
- ES:SI Ethernet address or 0
- DS:BX pointer to 31-byte ASCIIZ semaphore name
- return AL status (see function 11h)
- 1 semaphore currently logged
- note Unlike function 11h, this function returns immediately
-
- entry AH 13h Unlock
- AL drive number or 0
- ES:SI Ethernet address or 0
- DS:BX pointer to 31-byte ASCIIZ semaphore name
- return AL status (see function 11h)
- 1 semaphore not logged
-
-
- Interrupt 67h Used by Lotus-Intel-Microsoft Expanded Memory Specification
- user and Ashton-Tate/Quadram/AST Enhanced Expanded Memory
- specification (See Chapter 10)
-
-
- Interrupt 68h Not Used (not initialized)
-
-
- Interrupt 69h Not Used (not initialized)
-
-
- Interrupt 6Ah Not Used (not initialized)
-
-
- Interrupt 6Bh Not Used (not initialized)
-
-
- Interrupt 6Ch System Resume Vector (Convertible) (not initialized on PC)
- DOS 3.2 Realtime Clock update
-
-
- Interrupt 6Dh Not Used (not initialized)
-
-
- Interrupt 6Eh Not Used (not initialized)
-
-
- Interrupt 6Fh Novell NetWare - PCOX API (3270 PC terminal interface)
- Interrupt 6Fh 10-Net Network API
- entry AH 00h Login
- DS:DX login record
- 8 bytes user name
- 8 bytes password
- 12 bytes name of super-station
- return CL security level
- AX status
- 0000h good login
- 0FF01h no response from superstation
- 0FF02h network error
- 0FF03h invalid password
- 0FF04h no local buffer
- 0FF05h superstation not available
- 0FF06h node already logged in
- 0FF07h login not valid from this node
- 0FF08h node ID already in use
- 01h Logoff
- return CX number of files closed
- AX status
- 0000h successful
- 0FF08h superstation ID not already logged in
- 02h Status of node
- DS:DX pointer to 512-byte record
- 8 bytes user name (0 if none)
- byte station type
- 0 workstation
- 1 superstation
- 4 logged into multiple superstations
- 24 bytes list of superstations logged into more than one
- superstation
- 12 bytes node ID
- word message count for this station (send for user
- node, receive for superstations)
- for superstations only:
- word drives allocated (bit 0=A:, bit 1=B:,...)
- byte user service flag
- bit 4: SUBMIT is on
- 3: mail waiting for node
- 2: calendar waiting for you
- 1: news waiting for you
- 0: mail waiting for you
- byte printers allocated (bit 0=LPT1,...)
- byte number of unprinted spool files
- byte number of opened files
- byte number of logged on files
- byte primary drive (1=A:)
- byte reserved
- n bytes list of logged on node IDs (each 12 bytes, max
- 38 IDs)
- return CF set on error
- AX error code
- 0FF01h no response from node
- 0FF02h network error
- 0FF04h no local buffer
- 0FF16h invalid node ID
- 03h Get Address of Configuration Table
- return ES:BX pointer to record (actually starts at [BX-25])
- word count of dropped Send6F
- word buffer start address
- word comm driver base address
- word send/receive retry count
- byte number of 550ms loops
- word UFH address
- word CDIR address
- word LTAB address
- word SFH address
- word FTAB address
- word RLTAB address
- word SMI address
- word NTAB address
- ES:BX pointer to word address of first CT_DRV
- byte number of DRV entries
- 8 bytes login name
- 12 bytes node ID
- 6 bytes node address
- byte flag
- byte CT_CFLG
- bit 1: sound bell
- bit 0: CHAT permit
- 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
- byte reserved
- word receive message count
- word send message count
- word retry count
- word failed count
- word driver errors
- word dropped responses/CHATs
- 9 bytes list ID/NTAB address (3 entries-LPT1-3?)
- 6 bytes AUX ID/NTAB address (2 entries-COM1-2?)
- byte active CB channel
- byte received 6F messages on queue
- 9 bytes activity counters for channels 1-9
- 04h Send
- DS:BX pointer to record
- 12 bytes receiving node's ID
- word length of data at DX
- DS:DX pointer to data (max 1024 bytes)
- return CF set on error
- AX error code
- 0FF01h timeout
- 0FF02h network error
- 0FF04h no local buffer
- 0FF16h invalid parameter (bad length)
- 05h Receive
- CX number of seconds before timeout
- DS:DX pointer to receive buffer
- 12 bytes sending node's ID
- word length of message
- n bytes message (maximum 1024 bytes)
- return CF set on error
- AX error code
- 0FF01h timeout
- 0FF18h sent message has been dropped
- 06h Unknown
- 07h Lock Handle
- BX file handle
- CX:DX starting offset in file
- SI record length
- return CF set on error
- AX error code
- 0FF01h timeout
- 02h file not found
- 0FF17h record locked by another user
- 08h Unlock Handle
- BX file handle
- AL mode
- 0 unlock all
- 1 unlock record at CX:DX
- return CF set on error
- AX error code
- 02h file not found
- 0Bh Lock Semaphore, Return Immediately
- AL drive number or 0
- ES:SI Ethernet address or 0
- DS:BX pointer to 31-byte ASCIIZ semaphore name
- return AL status
- 0 successful
- 1 semaphore currently locked
- 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 in this CPU
- 0Ch unlock semaphore
- AL drive number or 0
- ES:SI Ethernet address or 0
- DS:BX pointer to 31-byte ASCIIZ semaphore name
- return AL status (see AH=0Bh)
- 1 semaphore not locked
- 0Dh Who
- CX length of data
- DS:DX pointer to array of records to be filled
- 12 bytes node ID
- byte flag (1=workstation, 2=superstation)
- return CL number of records returned (responding stations)
- 0Eh spool/print
- DS:DX pointer to record
- word 0 initiate spool
- 1 abort print
- 2 close spool
- 3 delete spool
- 4 print
- 5 get report info
- 11 bytes file name
- byte notification
- bit 6: do ID page
- bit 5: no form feed
- bit 3: notify at print completion
- bit 2: notify at print start and reply?
- bit 1: notify at print start
- bit 0: no notification
- byte days to keep (0FFh=forever)
- byte device (1=LPT1)
- word length of following data area
- n bytes $SCNT records returned if code in first word
- is 05h
- return CF set on error
- AX error code
- 0FF16h invalid parameter
- 0FF17h device not mounted
- 0FF18h already spooling to named device
- 11h Lock FCB
- AL mode
- 0 sequential
- 1 random
- 2 random block
- DS:DX pointer to FCB
- return CF set on error
- AX 02h file not found
- 0FF01h timeout
- 0FF17h record locked by another user
- 12h Unlock FCB
- AL mode
- 0 sequential
- 1 random
- 2 random block
- DS:DX pointer to FCB
- return CF set on error
- AX 02h file not found
-
-
- Interrupt 70h IRQ 8, Real Time Clock Interrupt (AT, XT/286, PS/2)
-
-
- Interrupt 71h IRQ 9, Redirected to IRQ 8 (AT, XT/286, PS/2)
- LAN Adapter 1 (rerouted to int 0Ah [IRQ2] by BIOS)
-
-
- Interrupt 72h IRQ 10 (AT, XT/286, PS/2) Reserved
-
-
- Interrupt 73h IRQ 11 (AT, XT/286, PS/2) Reserved
-
-
- Interrupt 74h IRQ 12 Mouse Interrupt (PS/2)
-
-
- Interrupt 75h IRQ 13, Coprocessor Error, BIOS Redirect to int 2 (NMI) (AT)
-
-
- Interrupt 76h IRQ 14, Hard Disk Controller (AT, XT/286, PS/2)
-
-
- Interrupt 77h IRQ 15 (AT, XT/286, PS/2) Reserved
-
-
- Interrupt 78h Not Used
-
-
- Interrupt 79h Not Used
-
-
- Interrupt 7Ah Novell NetWare - LOW-LEVEL API
-
-
- Interrupt 7Bh-7Eh Not Used
-
-
- Interrupt 7Fh unknown
- Used by second copy of COMMAND set with SHELL=
- Not used by COMMAND /C at DOS prompt
-
-
- Interrupt 80h-85h Reserved by BASIC
- note interrupts 80h through ECh are apparently unused and not initialized.
-
-
- Interrupt 86h Relocated by NETBIOS int 18
-
-
- Interrupt 86h-0F0h Used by BASIC when BASIC interpreter is running
-
-
- Intrerrupt 0E0h CP/M-86 function calls
-
-
- Interrupt 0E4h Logitech Modula-2 v2.0 MONITOR
- entry AX 05h monitor entry
- 06h monitor exit
- BX priority
-
-
- Interrupt 0F0h unknown
- Used by secondary copy of COMMAND when SHELL= set
- Not used by COMMAND /C at DOS prompt
-
-
- Interrupts 0F1h-0FFh (absolute addresses 3C4-3FF)
- Location of Interprocess Communications Area
-
-
- Interrupt 0F8h Set Shell Interrupt (OEM)
- Set OEM handler for int 21h calls from 0F9h through 0FFh
- entry AH 0F8h
- DS:DX pointer to handler for Functions 0F9h thru 0FFh
- note 1) To reset these calls, pass DS and DX with 0FFFFh. DOS is set up to
- allow ONE handler for all 7 of these calls. Any call to these handlers
- will result in the carry bit being set and AX will contain 1 if they are
- not initialized. The handling routine is passed all registers just as
- the user set them. The OEM handler routine should be exited through an
- IRET.
- 2) 10 ms interval timer (Tandy?)
-
-
- Interrupt 0F9h First of 8 SHELL service codes, reserved for OEM shell (WINDOW);
- use like HP Vectra user interface?
-
-
- Interrupt 0FAh USART ready (RS-232C)
-
-
- Interrupt 0FBh USART RS ready (keyboard)
-
-
- Interrupt 0FCh Unknown
-
-
- Interrupt 0FDh reserved for user interrupt
-
-
- Interrupt 0FEh AT/XT286/PS50+ - destroyed by return from protected mode
-
-
- Interrupt 0FFh AT/XT286/PS50+ - destroyed by return from protected mode
-
-
-