DOS Reference chapter 5


       **  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, 12/20/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


Comments

Popular posts from this blog

BOTTOM LIVE script

Fawlty Towers script for "A Touch of Class"