Outils pour utilisateurs

Outils du site


Action unknown: copypageplugin__copy
back2root:ibm-pc-ms-dos:interrupts:old:ms_interrupt_list-11-15

Table des matières

MSDOS - Interrupt List 11h-20h

INT 11

INT 11 - CPU-generated (80486+) - ALIGNMENT CHECK

Bit AC in the EFLAGS register enables this interrupt on a memory reference on a mis-aligned address when in privilege mode 3.

INT 11 - BIOS - GET EQUIPMENT LIST

Return: AX = BIOS equipment list word
	    bits
	    0	  floppy disk(s) installed (see bits 6-7)
	    1	  80x87 coprocessor installed
	    2,3	  number of 16K banks of RAM on motherboard (PC only)
		  number of 64K banks of RAM on motherboard (XT only)
	    2	  pointing device installed (PS)
	    3	  unused (PS)
	    4-5	  initial video mode
		  00 EGA, VGA, or PGA
		  01 40x25 color
		  10 80x25 color
		  11 80x25 monochrome
	    6-7	  number of floppies installed less 1 (if bit 0 set)
	    8	  DMA support installed (PCjr, some Tandy 1000s, 1400LT)
	    9-11  number of serial ports installed
	    12	  game port installed
	    13	  serial printer attached (PCjr)
		  internal modem installed (PC/Convertible)
	    14-15 number of parallel ports installed

—Compaq and many other 386/486 machines–

EAX bit 23: page tables set so that Weitek coprocessor addressable in
		real mode
    bit 24: Weitek math coprocessor present

—Compaq Systempro

EAX bit 25: internal DMA parallel port available
	26: IRQ for internal DMA parallel port (if bit 25 set)
	    0 = IRQ5
	    1 = IRQ7
     27,28: parallel port DMA channel
	    00 DMA channel 0
	    01 DMA channel 0 ???
	    10 reserved
	    11 DMA channel 3

SeeAlso: INT 12

INT 11 - BNU FOSSIL - INSTALLATION CHECK

AH = BCh
DX = 1954h

Return: AX = 1954h

ES:DX -> entry point of driver (instead of INT 14)

INT 11 - WD7000 SDLP interface - EXECUTE GENERIC SCSI COMMAND

AH = FFh
SI = 6A6Ah
AL = SCSI Addressing
    bits 2-0 SCSI Target LUN (logical unit number)
    bits 5-3 SCSI Target ID
    bit 7    write flag, set for write operations, clear otherwise
CX = bytes of data to be transmitted (max FFF0h)
DH = 00h
DL = length of SCSI Command Descriptor Block
DS:DI -> SCSI Command Descriptor Block
ES:BX -> data buffer

Return: CF set on error

    AL = error code
CF clear if successful

Note: because of busmaster operations with WD7000FASST avoid accessing

  video memory directly; check 386 memory manager for VDS support.
  The WD7000XTAT works with programmed IO and does not have this
  limitation.

SeeAlso: INT 21/AX=4402“ASPI”

INT 11 - BACK&FORTH (before v1.62) API

AX = FFFEh
CX = FFFEh
BX = function
    00h installation check
	Return: AX = 0001h BNFHIGH and BNFLOW both loaded
		   = 0003h only BNFHIGH loaded
		   else neither loaded
    01h ???
	Return: DX:AX -> ???
    02h ???
    03h ???
    04h ???
    05h ??? switches current PSP segment and stack if BNFLOW has not
	    yet announced itself installed
    06h ???
	Return: AX = ???

SeeAlso: INT 12/AX=FFFEh

INT 12

INT 12 - BIOS - GET MEMORY SIZE

Return: AX = kilobytes of contiguous memory starting at absolute address 00000h Note: this call returns the contents of the word at 0040h:0013h; in PC and

  XT, this value is set from the switches on the motherboard

SeeAlso: INT 11,INT 2F/AX=4A06h

INT 12 - KEYBUI v2.0+ - INSTALLATION CHECK

CX = 1806h

Return: AX = kilobytes of contiguous memory starting at absolute address 00000h

CX = 1960h if installed

Note: KEYBUI is a resident keyboard driver by Johan Zwiekhorst which allows

  accented characters and box drawing on standard QWERTY keyboards; it
  also provides break-to-DOS and screen blanking capabilities

INT 12 - PARKER v2.0+ - INSTALLATION CHECK

CX = 1807h

Return: AX = kilobytes of contiguous memory starting at absolute address 00000h

CX = 1961h if installed

Note: PARKER is an optionally-resident hard disk parking program by Johan

  Zwiekhorst

INT 12 - Back&Forth v1.62+ - API

AX = FFFEh
CX = FFFEh
BX = function
    00h installation check
	Return: AX = 0001h installed
		     else  not loaded
    02h build program ID list
	ES:DI -> buffer of at least 100 bytes, to be filled with words
	Return: AX = number of programs defined
		ES:DI buffer filled with AX words
    03h switch to specified task (task need not be open yet)
	DX = two-letter program ID
	Return: AX = 0000h if task undefined
    04h ???
    05h	???
    06h	get version (undoc)
	Return: AX = version * 100 (v1.71 = 00ABh)
    07h ???
    08h get open tasks (undoc)
	ES:DI -> task info buffer (see below)
	Return: AX = number of open tasks (max 20)
    09h	???

Note: Back & Forth is a task switcher by Progressive Solutions, Inc. SeeAlso: INT 11/AX=FFFEh

Format of task info buffer: Offset Size Description 00h 21 BYTEs ASCIZ task name 15h BYTE hotkey shift state (as for INT 16/AH=02h) 16h WORD hotkey scan code 18h WORD program ID

INT 13

INT 13 - DISK - RESET DISK SYSTEM

AH = 00h
DL = drive (if bit 7 is set both hard disks and floppy disks reset)

Return: AH = status (see AH=01h)

CF clear if successful (returned AH=00h)
CF set on error

Note: forces controller to recalibrate drive heads (seek to track 0) SeeAlso: AH=0Dh,AH=11h,INT 21/AH=0Dh,INT 4E“TI Professional”

INT 13 - DISK - GET STATUS OF LAST OPERATION

AH = 01h
DL = drive (bit 7 set for hard disk)

Return: CF clear if successful (returned status 00h)

CF set on error
AH = status of previous operation
    00h successful completion
    01h invalid function in AH or invalid parameter
    02h address mark not found
    03h disk write-protected (floppy)
    04h sector not found
    05h reset failed (hard disk)
    06h disk changed (floppy)
    07h drive parameter activity failed (hard disk)
    08h DMA overrun
    09h attempted DMA across 64K boundary
    0Ah bad sector detected (hard disk)
    0Bh bad track detected (hard disk)
    0Ch unsupported track or invalid media
    0Dh invalid number of sectors on format (hard disk)
    0Eh control data address mark detected (hard disk)
    0Fh DMA arbitration level out of range (hard disk)
    10h uncorrectable CRC or ECC error on read
    11h data ECC corrected (hard disk)
    20h controller failure
    40h seek failed
    80h timeout (not ready)
    AAh drive not ready (hard disk)
    BBh undefined error (hard disk)
    CCh write fault (hard disk)
    E0h status register error (hard disk)
    FFh sense operation failed (hard disk)

Note: some BIOSes return the status in AL; the PS/2 Model 30/286 returns the

  status in both AH and AL

INT 13 - DISK - READ SECTOR(S) INTO MEMORY

AH = 02h
AL = number of sectors to read (must be nonzero)
CH = low eight bits of cylinder number
CL = sector number (bits 0-5)
     high two bits of cylinder (bits 6-7, hard disk only)
DH = head number
DL = drive number (bit 7 set for hard disk)
ES:BX -> data buffer

Return: CF set on error

    if AH = 11h (corrected ECC error), AL = burst length
CF clear if successful
AH = status (see AH=01h)
AL = number of sectors transferred

Notes: errors on a floppy may be due to the motor failing to spin up quickly

  enough; the read should be retried at least three times, resetting
  the disk with AH=00h between attempts
AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  bits 10 and 11 of the cylinder number into bits 6 and 7 of DH

SeeAlso: AH=03h,AH=0Ah

INT 13 - DISK - WRITE DISK SECTOR(S)

AH = 03h
AL = number of sectors to write (must be nonzero)
CH = low eight bits of cylinder number
CL = sector number (bits 0-5)
     high two bits of cylinder (bits 6-7, hard disk only)
DH = head number
DL = drive number (bit 7 set for hard disk)
ES:BX -> data buffer

Return: CF set on error

CF clear if successful
AH = status (see AH=01h)
AL = number of sectors transferred

Notes: errors on a floppy may be due to the motor failing to spin up quickly

  enough; the write should be retried at least three times, resetting
  the disk with AH=00h between attempts
AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  bits 10 and 11 of the cylinder number into bits 6 and 7 of DH

SeeAlso: AH=02h,AH=0Bh

INT 13 - DISK - VERIFY DISK SECTOR(S)

AH = 04h
AL = number of sectors to verify (must be nonzero)
CH = low eight bits of cylinder number
CL = sector number (bits 0-5)
     high two bits of cylinder (bits 6-7, hard disk only)
DH = head number
DL = drive number (bit 7 set for hard disk)
ES:BX -> data buffer (PC,XT,AT with BIOS prior to 11/15/85)

Return: CF set on error

CF clear if successful
AH = status (see AH=01h)
AL = number of sectors verified

Notes: errors on a floppy may be due to the motor failing to spin up quickly

  enough; the write should be retried at least three times, resetting
  the disk with AH=00h between attempts
this function does not compare the disk with memory, it merely
  checks whether the sector's stored CRC matches the data's actual CRC
AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  bits 10 and 11 of the cylinder number into bits 6 and 7 of DH

SeeAlso: AH=02h

INT 13 - FLOPPY - FORMAT TRACK

AH = 05h
AL = number of sectors to format
CH = track number
DH = head number
DL = drive number
ES:BX -> address field buffer (see below)

Return: CF set on error

CF clear if successful
AH = status (see AH=01h)

Notes: on AT or higher, call AH=17h first

the number of sectors per track is read from the diskette parameter
  table pointed at by INT 1E

SeeAlso: AH=05h“FIXED”,AH=17h,AH=18h,INT 1E

Format of address field buffer entry (one per sector in track): Offset Size Description 00h BYTE track number 01h BYTE head number (0-based) 02h BYTE sector number 03h BYTE sector size (00h=128 bytes, 01h=256 bytes, 02h=512, 03h=1024)

INT 13 - FIXED DISK - FORMAT TRACK

AH = 05h
AL = interleave value (XT-type controllers only)
ES:BX = 512-byte format buffer
	the first 2*(sectors/track) bytes contain F,N for each sector
	   F = 00h for good sector, 80h for bad sector
	   N = sector number
CH = cylinder number (bits 8,9 in high bits of CL)
CL = high bits of cylinder number (bits 7,6)
DH = head
DL = drive

Return: AH = status code (see AH=01h) Notes: AWARD AT BIOS extended to handle more than 1024 cylinders by placing

  bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
for XT-type controllers on an AT or higher, AH=0Fh should be called
  first

SeeAlso: AH=05h“FLOPPY”,AH=06h,AH=07h,AH=0Fh,AH=18h,AH=1Ah

INT 13 - FIXED DISK - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT,PORT)

AH = 06h
AL = interleave value
CH = cylinder number (bits 8,9 in high bits of CL)
CL = sector number
DH = head
DL = drive

Return: AH = status code (see AH=01h) Note: AWARD AT BIOS extended to handle more than 1024 cylinders by placing

  bits 10 and 11 of the cylinder number into bits 6 and 7 of DH

INT 13 - FIXED DISK - FORMAT DRIVE STARTING AT GIVEN TRACK (XT,PORT)

AH = 07h
AL = interleave value (XT only)
ES:BX = 512-byte format buffer (see AH=05h)
CH = cylinder number (bits 8,9 in high bits of CL)
CL = sector number
DH = head
DL = drive

Return: AH = status code (see AH=01h) Note: AWARD AT BIOS extended to handle more than 1024 cylinders by placing

  bits 10 and 11 of the cylinder number into bits 6 and 7 of DH

SeeAlso: AH=1Ah

INT 13 - DISK - GET DRIVE PARAMETERS (PC,XT286,CONV,PS,ESDI,SCSI)

AH = 08h
DL = drive (bit 7 set for hard disk)

Return: CF set on error

    AH = status (07h) (see AH=01h)
CF clear if successful
    AH = 00h
    BL = drive type (AT/PS2 floppies only)
    	01h 360K
	02h 1.2M
	03h 720K
	04h 1.44M
	06h ??? (checked by 386MAX v6.01)
    CH = low eight bits of maximum cylinder number
    CL = maximum sector number (bits 5-0)
	 high two bits of maximum cylinder number (bits 7-6)
    DH = maximum head number
    DL = number of drives
    ES:DI -> drive parameter table (floppies only)

Notes: may return successful even though specified drive is greater than the

  number of attached drives of that type (floppy/hard); check DL to
  ensure validity
for systems predating the IBM AT, this call is only valid for hard
  disks, as it is implemented by the hard disk BIOS rather than the
  ROM BIOS
Toshiba laptops with HardRAM return DL=02h when called with DL=80h,
  but fail on DL=81h.  The BIOS data at 40h:75h correctly reports 01h.

SeeAlso: AH=15h,INT 1E,INT 41

INT 13 - HARD DISK - INITIALIZE CONTROLLER WITH DRIVE PARAMETERS (AT,PS)

AH = 09h
DL = drive (80h for first, 81h for second)

Return: CF clear if successful

CF set on error
AH = status (see AH=01h)

Notes: on the PC and XT, this function uses the parameter table pointed at by

  INT 41
on the AT and later, this function uses the parameter table pointed at
  by INT 41 if DL=80h, and the parameter table pointed at by INT 46 if
  DL=81h

SeeAlso: INT 41,INT 46

INT 13 - HARD DISK - READ LONG SECTOR(S) (AT and later)

AH = 0Ah
AL = number of sectors
CH = low eight bits of cylinder number
CL = sector number (bits 5-0)
     high two bits of cylinder number (bits 7-6)
DH = head number
DL = drive number (80h = first, 81h = second)
ES:BX -> data buffer

Return: CF clear if successful

CF set on error
AH = status (see AH=01h)
AL = number of sectors transferred

Notes: this function reads in four to seven bytes of error-correcting code

  along with each sector's worth of information
data errors are not automatically corrected, and the read is aborted
  after the first sector with an ECC error
used for diagnostics only on PS/2 systems

SeeAlso: AH=02h,AH=0Bh

INT 13 - HARD DISK - WRITE LONG SECTOR(S) (AT and later)

AH = 0Bh
AL = number of sectors
CH = low eight bits of cylinder number
CL = sector number (bits 5-0)
     high two bits of cylinder number (bits 7-6)
DH = head number
DL = drive number (80h = first, 81h = second)
ES:BX -> data buffer

Return: CF clear if successful

CF set on error
AH = status (see AH=01h)
AL = number of sectors transferred

Notes: each sector's worth of data must be followed by four to seven bytes of

  error-correction information
used for diagnostics only on PS/2 systems

SeeAlso: AH=03h,AH=0Ah

INT 13 - HARD DISK - SEEK TO CYLINDER

AH = 0Ch
CH = low eight bits of cylinder number
CL = sector number (bits 5-0)
     high two bits of cylinder number (bits 7-6)
DH = head number
DL = drive number (80h = first, 81h = second hard disk)

Return: CF set on error

CF clear if successful
AH = status (see AH=01h)

SeeAlso: AH=00h,AH=02h,AH=0Ah

INT 13 - HARD DISK - RESET HARD DISKS

AH = 0Dh
DL = drive number (80h = first, 81h = second hard disk)

Return: CF set on error

CF clear if successful
AH = status (see AH=01h)

Notes: reinitializes the hard disk controller, resets the specified drive's

  parameters, and recalibrates the drive's heads (seek to track 0)
not for PS/2 ESDI drives

SeeAlso: AH=00h,INT 21/AH=0Dh

INT 13 - HARD DISK - READ SECTOR BUFFER (XT only)

AH = 0Eh
DL = drive number (80h = first, 81h = second hard disk)
ES:BX -> buffer

Return: CF set on error

CF clear if successful
AH = status code (see AH=01h)

Notes: transfers controller's sector buffer. No data is read from the drive

used for diagnostics only on PS/2 systems

SeeAlso: AH=0Ah

INT 13 - HARD DISK - WRITE SECTOR BUFFER (XT only)

AH = 0Fh
DL = drive number (80h = first, 81h = second hard disk)
ES:BX -> buffer

Return: CF set on error

CF clear if successful
AH = status code (see AH=01h)

Notes: does not write data to the drive

should be called before formatting to initialize an XT-type
  controller's sector buffer
used for diagnostics only on PS/2 systems

SeeAlso: AH=0Bh

INT 13 - HARD DISK - CHECK IF DRIVE READY

AH = 10h
DL = drive number (80h = first, 81h = second hard disk)

Return: CF set on error

CF clear if successful
AH = status (see AH=01h)

INT 13 - HARD DISK - RECALIBRATE DRIVE

AH = 11h
DL = drive number (80h = first, 81h = second hard disk)

Return: CF set on error

CF clear if successful
AH = status (see AH=01h)

Note: causes hard disk controller to seek the specified drive to cylinder 0 SeeAlso: AH=00h,AH=0Ch,AH=19h“FIXED DISK”

INT 13 - HARD DISK - CONTROLLER RAM DIAGNOSTIC (XT,PS)

AH = 12h
DL = drive number (80h = first, 81h = second hard disk)

Return: CF set on error

CF clear if successful
AH = status code (see AH=01h)

SeeAlso: AH=13h,AH=14h

INT 13 - Future Domain SCSI CONTROLLER - STOP SCSI DISK

AH = 12h
DL = hard drive ID

Return: CF set on error

AH = status code (see AH=01h)

Notes: available at least on the TMC-870 8-bit SCSI controller BIOS v6.0A

if the given drive is a SCSI device, the SCSI Stop Unit command is sent
  and either "Disk prepared for shipping" or "Disk Stop command failed"
  is displayed

INT 13 - HARD DISK - DRIVE DIAGNOSTIC (XT,PS)

AH = 13h
DL = drive number (80h = first, 81h = second hard disk)

Return: CF set on error

CF clear if successful
AH = status code (see AH=01h)

SeeAlso: AH=12h,AH=14h

INT 13 - HARD DISK - CONTROLLER INTERNAL DIAGNOSTIC

AH = 14h

Return: CF set on error

CF clear if successful
AH = status code (see AH=01h)

SeeAlso: AH=12h,AH=13h

INT 13 - DISK - GET DISK TYPE (XT 1/10/86 or later,XT286,AT,PS)

AH = 15h
DL = drive number (bit 7 set for hard disk)

Return: CF clear if successful

    AH = type code
	00h no such drive
	01h floppy without change-line support
	02h floppy with change-line support
	03h hard disk
	    CX:DX = number of 512-byte sectors
CF set on error
    AH = status (see AH=01h)

SeeAlso: AH=08h,AH=16h,AH=17h,AH=19h“SCSI”

INT 13 - FLOPPY DISK - DETECT DISK CHANGE (XT 1/10/86 or later,XT286,AT,PS)

AH = 16h
DL = drive number

Return: CF clear if change line inactive

    AH = 00h (disk not changed)
CF set if change line active
    AH = 06h change line active or not supported
       = 80h drive not ready or not present

Note: call AH=15h first to determine whether the drive supports a change

  line

SeeAlso: AH=15h

INT 13 - FLOPPY DISK - SET DISK TYPE FOR FORMAT (AT,PS)

AH = 17h
AL = format type
    01h = 320/360K disk in 360K drive
    02h = 320/360K disk in 1.2M drive
    03h = 1.2M disk in 1.2M drive
    04h = 720K disk in 720K drive
DL = drive number

Return: CF set on error

CF clear if successful
AH = status (see AH=01h)

Note: this function does not handle 1.44M drives; use AH=18h instead SeeAlso: AH=15h,AH=18h

INT 13 - DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS)

AH = 18h
DL = drive number
CH = lower 8 bits of highest cylinder number (number of cylinders - 1)
CL = sectors per track (bits 0-5)
     top 2 bits of highest cylinder number (bits 6,7)

Return: AH = status

    00h requested combination supported
    01h function not available
    0Ch not supported or drive type unknown
    80h there is no disk in the drive
ES:DI -> 11-byte parameter table

SeeAlso: AH=05h,AH=07h,AH=17h

INT 13 - Future Domain SCSI BIOS - GET SCSI CONTROLLER INFORMATION

AH = 18h
DL = hard drive ID

Return: CF set on error

    AH = status code (see AH=01h)
CF clear if successful
    AX = 4321h (magic number???)
    BH = number of SCSI drives connected
    BL = SCSI device number for specified drive
    CX = 040Ah (magic number???)

Note: also sets an internal flag (non-resettable) which prevents some

  controller messages from being displayed, allows writes to
  removable devices, and enables the INT 13 interface for more than
  one drive (i.e. DL >= 81h)

SeeAlso: AH=1Bh“SCSI”

INT 13 - FIXED DISK - PARK HEADS (XT286,PS)

AH = 19h
DL = drive

Return: CF set on error

AH = status (see AH=01h)

SeeAlso: AH=11h

INT 13 - Future Domain SCSI CONTROLLER - REINITIALIZE DRIVE

AH = 19h
DL = hard drive ID

Return: CF set on error

    AH = status code (see AH=01h)
CF clear if successful
    AH = disk type (03h = fixed disk)
    CX:DX = number of 512-byte sectors

Notes: sends SCSI Read Capacity command to get number of logical blocks and

  adjusts the result for 512-byte sectors
displays either "Error in Read Capacity Command" or "nnn Bytes per
  sector" (nnn=256 or 512, the only sizes supported in the translation
  code)
should probably be called when a removable device has its media changed
returns the same values as AH=15h

SeeAlso: AH=15h,AH=1Ah

INT 13 - ESDI FIXED DISK - FORMAT UNIT (PS)

AH = 1Ah
AL = defect table count
CL = format modifiers
    bit 4: generate periodic interrupt
    bit 3: perform surface analysis
    bit 2: update secondary defect map
    bit 1: ignore secondary defect map
    bit 0: ignore primary defect map
DL = drive
ES:BX -> defect table

Return: CF set on error

AH = status (see AH=01h)

Note: if periodic interrupt selected, INT 15/AH=0Fh is called after each

  cylinder is formatted

SeeAlso: AH=07h,INT 15/AH=0Fh

INT 13 - Future Domain SCSI CONTROLLER - GET SCSI PARTIAL MEDIUM CAPACITY

AH = 1Ah
CH = track (bits 8,9 in high bits of CL)
CL = sector (01h to number of sectors/track for drive)
DH = head
DL = hard drive ID

Return: CF set on error

AH = status code (see AH=01h)
CX:DX = logical block number of last quickly-accessible block after
	given block

Note: sends SCSI Read Capacity command with the PMI bit set to obtain the

  logical block address of the last block after which a substantial
  delay in data transfer will be encountered (usually the last block
  on the current cylinder).  No translation to 512 byte sectors is
  performed on the result if data is stored on the disk in other than
  512 byte sectors.

SeeAlso: AH=15h,AH=19h“SCSI”

INT 13 - ESDI FIXED DISK - GET MANUFACTURING HEADER

AH = 1Bh
AL = number of record
DL = drive
ES:BX -> buffer for manufacturing header (defect list)

Return: CF set on error

    AH = status

Note: manufacturing header format (Defect Map Record format) can be found

  in IBM 70MB, 115MB Fixed Disk Drives Technical Reference

INT 13 - Future Domain SCSI CONTROLLER - GET POINTER TO SCSI DISK INFO BLOCK

AH = 1Bh
DL = hard drive ID

Return: CF set on error

    AH = status code (see AH=01h)
CF clear if successful
    ES:BX -> SCSI disk information block

Note: also sets a non-resettable flag which prevents some controller messages

  from being displayed

SeeAlso: AH=18h“SCSI”,AH=1Ch“SCSI”

Format of SCSI disk information block: Offset Size Description 00h BYTE drive physical information

	bit 0: ???
	bit 1: device uses parity
	bit 2: 256 bytes per sector instead of 512
	bit 3: don't have capacity yet???
	bit 4: disk is removable
	bit 5: logical unit number is not present

01h WORD translated number of cylinders 03h BYTE translated number of heads 04h BYTE translated number of sectors per track (17, 34, or 63) 05h BYTE drive address

	bits 0-2: logical unit number
	bits 3-5: device number

06h BYTE 01h at initialization 07h BYTE sense code byte 00h, or extended sense code byte 0Ch 08h BYTE 00h 09h BYTE 00h or extended sense code byte 02h (sense key) 0Ah BYTE 00h 0Bh 10 BYTEs copy of Command Descriptor Block (CDB) 15h DWORD translated number of sectors on device

INT 13 - Future Domain SCSI CONTROLLER - GET POINTER TO FREE CONTROLLER RAM

AH = 1Ch
DL = hard drive ID (any valid SCSI hard disk)

Return: CF set on error

    AH = status code (see AH=01h)
CF clear if successful
    ES:BX -> first byte of free RAM on controller

Notes: the Future Domain TMC-870 contains 1024 bytes of RAM at offsets 1800h

  to 1BFFh on-bard the controller for storing drive information and
  controller status; ES:BX points to the first byte available for other
  uses
ES contains the segment at which the controller resides; the
  controller's two memory-mapped I/O ports are at offsets 1C00h, 1E00h

SeeAlso: AH=1Bh“SCSI”

INT 13 - ESDI FIXED DISK - GET DEVICE CONFIGURATION

AX = 1C0Ah
DL = drive
ES:BX -> buffer for device configuration (drive physical parameter)

Return: CF set on error

    AH = status

Note: device configuration format can be found in IBM ESDI Fixed Disk Drive

  Adapter/A Technical Reference

INT 13 - ESDI FIXED DISK - GET ADAPTER CONFIGURATION

AX = 1C0Bh
ES:BX -> buffer for adapter configuration

Return: CF set on error

    AH = status

SeeAlso: AX=1C0Ch

INT 13 - ESDI FIXED DISK - GET POS INFORMATION

AX = 1C0Ch
ES:BX -> POS information

Return: CF set on error

    AH = status

SeeAlso: AX=1C0Bh

INT 13 - ESDI FIXED DISK - TRANSLATE RBA TO ABA

AX = 1C0Eh
CH = low 8 bits of cylinder number
CL = sector number, high two bits of cylinder number in bits 6 and 7
DH = head number
DL = drive number
ES:BX -> ABA number

Return: CF set on error

    AH = status

Note: ABA (absolute block address) format can be found in IBM ESDI Adapter

  Technical Reference by using its Device Configuration Status Block

INT 13 - IBMCACHE.SYS - CACHE STATUS

AH = 1Dh
AL = subfunction
    01h get status record
	DL = drive???
	Return: ES:BX -> status record
		CF set on error
		    AH = error code
    02h set cache status
	ES:BX -> status record
	DL = drive???
	Return: CF set on error

Format of status record: Offset Size Description 00h DWORD total number of read requests 04h DWORD total number of hits 08h DWORD number of physical disk reads 0Ch DWORD total number of sectors requested by physical disk reads 10h 6 bytes ??? 16h DWORD pointer to start of error list 1Ah DWORD pointer to end of error list 1Eh WORD ??? 20h BYTE using extended memory if nonzero 21h BYTE ??? 22h 4 BYTEs ASCII version number 26h WORD cache size in K 28h WORD sectors per page

Format of error list: Offset Size Description 00h DWORD relative block address of bad page 04h BYTE drive 05h BYTE sector bit-map 06h WORD next error

INT 13 - DISK - ??? (Western Digital "Super BIOS")

AH = 20h
???

Return: ??? Note: seems to return some kind of status

INT 13 - QCACHE - DISMOUNT

AX = 20FFh

Return: ???

INT 13 - QCACHE - FLUSH CACHE

AH = 21h

Return: ??? SeeAlso: AH=25h,AH=2Eh

INT 13 - QCACHE - ENABLE/DISABLE CACHE

AH = 22h
AL = 00h disable cache
     01h enable cache

INT 13 - QCACHE - SET SECTORS

AH = 24h
BX = number of sectors

Return: ???

INT 13 - QCACHE - SET FLUSH INTERVAL

AH = 25h
BC = interval

Return: ??? SeeAlso: AH=21h,AH=2Eh

INT 13 - QCACHE - INSTALLATION CHECK

AH = 27h
BX = 0000h

Return: BX nonzero if installed

INT 13 - QCACHE - SET BUFFER SIZE

AH = 2Ah
AL = buffer size

Return: ???

INT 13 - QCACHE - SET BUFFERED WRITES

AH = 2Ch
AL = state
    00h disable
    01h enable

Return: ??? SeeAlso: AH=2Dh

INT 13 - QCACHE - SET BUFFERED READ

AH = 2Dh
AL = state
    00h disable
    01h enable

Return: ??? SeeAlso: AH=2Ch

INT 13 - QCACHE - SET FLUSH COUNT

AH = 2Eh
BX = flush count

Return: ??? SeeAlso: AH=21h,AH=25h

INT 13 - QCACHE - GET INFO

AH = 30h
AL = what to get
    00h system info
    01h drive info
DS:DX -> buffer for info

Return: ???

INT 13 - Priam EDVR.SYS DISK PARTITIONING SOFTWARE???

AH = 70h
???

Return: ??? Note: Priam's EDISK.EXE (FDISK replacement) and EFMT.EXE (low-level

  formatting program) make this call, presumably to EDVR.SYS (the
  partitioning driver)

SeeAlso: AH=ADh

INT 13 - ???

AH = 75h
???

Return: AH = ???

???

Note: intercepted by PC-Cache (v5.1 only)

INT 13 - ???

AH = 76h
???

Return: AH = ???

???

Note: intercepted by PC-Cache (v5.1 only)

INT 13 - FAST! - API

AH = 80h
CX = 6572h
DX = 1970h
ES:BX -> data structure (see below)
AL = function
    01h ???
    04h ???
    05h ???
    06h installation check
	Return: AX = 1965h if installed
    07h ???
    09h ???
    0Ah ???
    0Bh ???
    0Ch set ??? flag
    0Dh clear ??? flag

Return: AH = 00h if successful (except function 06h)

Format of data structure: Offset Size Description 00h DWORD pointer to 19-byte signature string

	13h 07h 06h 08h 11h 18h 0Fh 0Eh 02h 18h 13h 08h 0Bh 08h 01h 00h
	  04h 08h 15h  (v4.04)

04h ??? ???

INT 13 - Super PC Kwik/PC-Cache 5.x - ???

AH = 81h
SI = 4358h
???

Return: ??? Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of

  Super PC Kwik, and thus support this call
returns immediately in PC-Cache v5.x

INT 13 - Super PC Kwik/PC-Cache 5.x - ???

AH = 82h
SI = 4358h
???

Return: AL = ??? Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of

  Super PC Kwik, and thus support this call

SeeAlso: AH=84h

INT 13 - Super PC Kwik/PC-Cache 5.x - ???

AH = 83h
SI = 4358h
AL = ???
ES:BX -> ???
???

Return: ??? Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of

  Super PC Kwik, and thus support this call

SeeAlso: AH=85h

INT 13 - Super PC Kwik/PC-Cache 5.x - ???

AH = 84h
SI = 4358h
AL = ???
???

Return: AL = ??? Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of

  Super PC Kwik, and thus support this call

SeeAlso: AH=82h

INT 13 - Super PC Kwik/PC-Cache 5.x - ???

AH = 85h
SI = 4358h
AL = ???
DL = ???
???

Return: ??? Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of

  Super PC Kwik, and thus support this call

SeeAlso: AH=83h

INT 13 - Qualitas Qcache v4.00 - ???

AH = 86h
SI = 4358h
???

Return: ??? ———-1387–SI4358———————– INT 13 - Qualitas Qcache v4.00 - ???

AH = 87h
SI = 4358h
???

Return: ??? ———-1388–SI4358———————– INT 13 - Qualitas Qcache v4.00 - ???

AH = 88h
SI = 4358h
???

Return: ??? ———-138EED—————————– INT 13 - HyperDisk v4.01+ - ???

AX = 8EEDh
???

Return: ??? Note: HyperDisk is a shareware disk cache by HyperWare (Roger Cross) SeeAlso: AX=8EEEh,AX=8EEFh,AH=EEh,INT 2F/AH=DFh ———-138EEE—————————– INT 13 - HyperDisk v4.01+ - ???

AX = 8EEEh

Return: CF set

AX = CS of HyperDisk resident code
???

Note: identical to AX=8EEFh in HYPERDKX v4.21-4.30 SeeAlso: AX=8EEDh,AX=8EEFh,AH=EEh ———-138EEF—————————– INT 13 - HyperDisk v4.01+ - ???

AX = 8EEFh

Return: CF set

AX = CS of HyperDisk resident code
???

Note: identical to AX=8EEEh in HYPERDKX v4.21-4.30 SeeAlso: AX=8EEDh,AX=8EEEh,AH=EEh ———-13A0–SI4358———————– INT 13 - Super PC Kwik - GET RESIDENT CODE SEGMENT

AH = A0h
SI = 4358h

Return: AX = segment of resident code Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of

  Super PC Kwik, and thus support this call

SeeAlso: INT 16/AX=FFA5h/CX=1111h ———-13A1–SI4358———————– INT 13 - Super PC Kwik - FLUSH CACHE

AH = A1h
SI = 4358h

Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of

  Super PC Kwik, and thus support this call

SeeAlso: INT 16/AX=FFA5h/CX=FFFFh ———-13A2–SI4358———————– INT 13 - Super PC Kwik - ???

AH = A2h
SI = 4358h
???

Return: ??? Note: PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of

  Super PC Kwik, and thus support this call

———-13A5——————————- INT 13 - Super PC Kwik - ???

AH = A5h
SI = ???

Return: AX = ???

SI = ???

Notes: called when a program terminates but stays resident (see INT 21/AH=31h)

this call is not supported by Qualitas Qcache 4.00

———-13AA–SI4358———————– INT 13 - Qualitas Qcache v4.00 - ???

AH = AAh
SI = 4358h
???

Return: ??? ———-13AB–SI4358———————– INT 13 - Qualitas Qcache v4.00 - ???

AH = ABh
SI = 4358h
???

Return: ??? ———-13AC–SI4358———————– INT 13 - Qualitas Qcache v4.00 - ???

AH = ACh
SI = 4358h
???

Return: ??? ———-13AD——————————- INT 13 - Priam HARD DISK CONTROLLER???

AH = ADh
???

Return: ??? Note: this call is made from Priam's EFMT.EXE (low-level formatter), probably

  to check the ROM type on the controller for their hard disk kits

SeeAlso: AH=70h ———-13AD–SI4358———————– INT 13 - Qualitas Qcache v4.00 - ???

AH = ADh
SI = 4358h
???

Return: ??? ———-13B0–SI4358———————– INT 13 - Super PC Kwik - ???

AH = B0h
SI = 4358h
???

Return: ??? Note: PC Tools PC-Cache 5.x is an OEM version of Super PC Kwik, and thus

  supports this call; Qualitas Qcache does not support it

———-13EE——————————- INT 13 - SWBIOS - SET 1024 CYLINDER FLAG

AH = EEh
DL = drive number (80h, 81h)

Return: CF clear

   AH = 00h

Notes: the following INT 13 call will interpret the cylinder number as 1024

  less than the desired cylinder
flag cleared by all INT 13 calls except AH=EEh
SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports
  these calls
also supported by HyperDisk v4.01+ and PC-Cache v5.5+, in order to allow
  caching of drives using SWBIOS to access more than 1024 cylinders

SeeAlso: AH=F9h,AH=FEh,INT 16/AX=FFA5h/CX=1111h,INT 2F/AH=DFh ———-13F9——————————- INT 13 - SWBIOS - INSTALLATION CHECK

AH = F9h
DL = drive number (80h,81h)

Return: CF clear

    DX = configuration word
	bit 15 set if other SWBIOS extensions available
CF set on error

Note: SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports

  these calls

SeeAlso: AH=EEh ———-13FE——————————- INT 13 - SWBIOS - GET EXTENDED CYLINDER COUNT

AH = FEh
DL = drive number (80h, 81h)

Return: CF clear

DX = number of cylinders beyond 1024 on drive

Notes: standard INT 13/AH=08h will return a cylinder count truncated to 1024

BIOS without this extension would return count modulo 1024
SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports
  these calls

SeeAlso: AH=EEh

INT 14

INT 14 - SERIAL I/O- Digiboard DigiCHANNEL PC/X* Extender INT 14 (XAPCM232.SYS)

Note: the installation check for this driver is to determine whether the

  "~DOSXAM~" character device exists

———-1400——————————- INT 14 - SERIAL - INITIALIZE PORT

AH = 00h
AL = port parameters
    bits 7-5 data rate (110,150,300,600,1200,2400,4800,9600 bps)
    bits 4-3 parity (00 or 10 = none, 01 = odd, 11 = even)
    bit 2    stop bits (set = 2, clear = 1)
    bits 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8)
DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)

Return: AH = line status (see AH=03h)

    FFh if error on Digiboard XAPCM232.SYS
AL = modem status (see AH=03h)

Notes: default handler is at F000h:E739h in IBM PC and 100% compatible BIOSes

since the PCjr supports a maximum of 4800 bps, attempting to set 9600
  bps will result in 4800 bps

SeeAlso: AH=04h“SERIAL”,AH=04h“MultiDOS”,AH=05h“SERIAL”,AH=81h“COMM-DRV” SeeAlso: AH=82h“COURIERS”,AH=8Ch ———-1400——————————- INT 14 - FOSSIL (Fido/Opus/Seadog Standard Interface Level) - INITIALIZE

AH = 00h
AL = initializing parameters
    7 - 6 - 5	   4 - 3     2	  1 - 0
    -BAUD RATE-	   PARITY   STOP   WORD
			    BITS  LENGTH
    000 19200 bd   00 none  0: 1  00: 5
    001 38400 bd   01 odd   1: 2  01: 6
    010	  300 bd   11 even	  10: 7
    011	  600 bd		  11: 8
    100	 1200 bd
    101	 2400 bd
    110	 4800 bd
    111	 9600 bd (4800 on PCjr)
DX = port number (0-3 or FFh if only performing non-I/O setup)

Return: AH = RS-232 status code bits

    0: RDA - input data is available in buffer
    1: OVRN - data has been lost
    5: THRE - room is available in output buffer
    6: TSRE - output buffer empty
AL = modem status bits
    3: always 1
    7: DCD - carrier detect

SeeAlso: AH=05h“FOSSIL”,AH=81h“COMM-DRV”,AH=82h“COURIERS” ———-1400——————————- INT 14 - MBBIOS - INITIALIZE PORT

AH = 00h
AL = port parameters
    bits 7-5 data rate
    		(normally 110,150,300,600,1200,2400,4800,9600 bps;
		9600,14400,19200,28800,38400,57600,115200,330400 bps
		if the high-speed option is set)
    bits 4-3 parity (00 or 10 = none, 01 = odd, 11 = even)
    bit 2    stop bits (set = 2, clear = 1)
    bits 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8)
DX = port number

Return: AH = line status (see AH=03h)

AL = modem status (see AH=03h)

Note: MBBIOS was written by H. Roy Engehausen SeeAlso: AH=04h“MBBIOS”,AH=05h“MBBIOS” ———-1401——————————- INT 14 - SERIAL - WRITE CHARACTER TO PORT

AH = 01h
AL = character to write
DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)

Return: AH bit 7 clear if successful

AH bit 7 set on error
AH bits 6-0 = port status (see AH=03h)

SeeAlso: AH=02h,AH=0Bh“FOSSIL”,AH=89h ———-1402——————————- INT 14 - SERIAL - READ CHARACTER FROM PORT

AH = 02h
DX = port number (00h-03h (04h-43h for Digiboard XAPCM232.SYS))

Return: AH = line status (see AH=03h)

AL = received character if AH bit 7 clear

Note: will timeout if DSR is not asserted, even if function 03h returns

  data ready

SeeAlso: AH=01h,AH=02h“FOSSIL”,AH=84h,AH=FCh ———-1402——————————- INT 14 - FOSSIL - RECEIVE CHARACTER WITH WAIT

AH = 02h
DX = port number (0-3)

Return: AL = character received

AH = 00h

SeeAlso: AH=01h,AH=02h“SERIAL” ———-1403——————————- INT 14 - SERIAL - GET PORT STATUS

AH = 03h
DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)

Return: AH = line status

    bit 7: timeout
	6: transmit shift register empty
	5: transmit holding register empty
	4: break detected
	3: framing error
	2: parity error
	1: overrun error
	0: receive data ready
AL = modem status
    bit 7: carrier detect
	6: ring indicator
	5: data set ready
	4: clear to send
	3: delta carrier detect
	2: trailing edge of ring indicator
	1: delta data set ready
	0: delta clear to send

SeeAlso: AH=00h,AH=07h“MultiDOS”,AH=81h“COURIERS”,AX=FD02h ———-1404——————————- INT 14 - SERIAL I/O - EXTENDED INITIALIZE (CONVERTIBLE,PS)

AH = 04h
AL = break status
    00h if break
    01h if no break
BH = parity
    00h no parity
    01h odd parity
    02h even parity
    03h stick parity odd
    04h stick parity even
BL = number of stop bits
    00h one stop bit
    01h two stop bits (1.5 if 5 bit word length)
CH = word length
    00h 5 bits
    01h 6 bits
    02h 7 bits
    03h 8 bits
CL = bps rate
    00h 110
    01h 150
    02h 300
    03h 600
    04h 1200
    05h 2400
    06h 4800
    07h 9600
    08h 19200
DX = port number

Return: AX = port status code (see AH=00h) SeeAlso: AH=00h,AH=1Eh ———-1404——————————- INT 14 - FOSSIL - INITIALIZE DRIVER

AH = 04h
DX = port number
optionally BX=4F50h
	   ES:CX -> byte to be set upon ^C

Return: AX = 1954h (if successful)

BL = maximum function number supported (excluding 7Eh and above)
BH = revision of FOSSIL supported
DTR is raised

Note: the word at offset 6 in the interrupt handler contains 1954h, and the

  following byte contains the maximum function number supported

SeeAlso: AH=05h“FOSSIL”,AH=1Ch ———-1404——————————- INT 14 - MultiDOS Plus IODRV - INITIALIZE PORT

AH = 04h

Return: port initialized; if Hayes-compatible modem, a connection has been

  established

Note: the port number is stored at offset BEh in the Task Control Block

  (see INT 15/AH=13h"MultiDOS")

SeeAlso: AH=00h,AH=05h“MultiDOS”,AH=20h“MultiDOS”,INT 15/AH=13h“MultiDOS” ———-1404——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - CHANGE BAUD RATE

AH = 04h
AL = initializing parameters
    bits 7-5 unused
    bits 4,3: parity (00 none, 01 odd, 11 even)
    bit 2: stop bits (0 = one, 1 = two)
    bits 1,0: data bits (00 = five, 01 = six, 10 = seven, 11 = eight)
BX = baud rate
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AH = status

    00h successful
    FFh error

SeeAlso: AH=05h“Digiboard” ———-1404——————————- INT 14 - MBBIOS - INQUIRY

AH = 04h

Return: AH = AAh

AL = 55h

SeeAlso: AH=00h“MBBIOS”,AH=09h“MBBIOS” ———-1405——————————- INT 14 - SERIAL I/O - EXTENDED COMMUNICATION PORT CONTROL (CONVERTIBLE,PS)

AH = 05h
AL = 00h read modem control register
      Return: BL = modem control register (see below)
	      AH = status
AL = 01h write modem control register
      BL = modem control register
	  bit 0: data terminal ready
	  bit 1: request to send
	  bit 2: OUT1
	  bit 3: OUT2
	  bit 4: LOOP
	  bits 5-7 reserved
      Return: AX = status
DX = port number

SeeAlso: AH=00h,AH=1Fh ———-1405——————————- INT 14 - FOSSIL - DEINITIALIZE DRIVER

AH = 05h
DX = port number

Return: none

DTR is not affected

SeeAlso: AH=00h,AH=04h“FOSSIL”,AH=1Dh,AH=8Dh ———-1405——————————- INT 14 - MultiDOS Plus IODRV - READ CHARACTER FROM PORT

AH = 05h
AL = timeout in seconds (00h = never)

Return: AL = status

    00h successful
	AH = character read
    01h read error
    02h timed out
    other modem status (CTS, DSR) changed

Note: the port number is stored at offset BEh in the Task Control Block SeeAlso: AH=02h,AH=04h“MultiDOS”,AH=06h“MultiDOS”,AH=22h“MultiDOS” SeeAlso: INT 15/AH=13h“MultiDOS” ———-1405——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - CHANGE PROTOCOL

AH = 05h
AL = protocol
    bits 7-4 unused
    bit 3: RTS/CTS
    bit 2: DSR
    bits 1,0: XON/XOFF
BH = new XOFF character (00h = current)
BL = new XON character (00h = current)
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AH = status

    00h successful
    FFh error

SeeAlso: AH=04h“Digiboard” ———-1405——————————- INT 14 - MBBIOS - DROP DTR AND RTS

AH = 05h
DX = port number

Return: none SeeAlso: AH=00h“MBBIOS”,AH=06h“MBBIOS”,AH=06h“FOSSIL” ———-1406——————————- INT 14 - FOSSIL - RAISE/LOWER DTR

AH = 06h
DX = port
AL = DTR state to be set
    00h = lower
    01h = raise

SeeAlso: AH=05h“MBBIOS”,AH=1Ah ———-1406——————————- INT 14 - MultiDOS Plus IODRV - WRITE CHARACTER TO PORT

AH = 06h
AL = character

Return: AL = status

    00h successful

Notes: the port number is stored at offset BEh in the Task Control Block

if output queue is full, the calling task is blocked until the
  character can be stored

SeeAlso: AH=01h,AH=04h“MultiDOS”,AH=05h“MultiDOS”,AH=21h“MultiDOS” SeeAlso: INT 15/AH=13h“MultiDOS” ———-1406——————————- INT 14 - MBBIOS - RAISE DTR AND RTS

AH = 06h
DX = port number

Return: none SeeAlso: AH=05h“MBBIOS”,AH=07h“MBBIOS” ———-1407——————————- INT 14 - FOSSIL - RETURN TIMER TICK PARAMETERS

AH = 07h

Return: AL = timer tick interrupt number

AH = ticks per second on interrupt number in AL
DX = approximate number of milliseconds per tick

SeeAlso: AH=16h ———-1407——————————- INT 14 - MultiDOS Plus IODRV - GET PORT STATUS

AH = 07h

Return: CL = modem status (see AH=03h)

CH = character at head of input queue (if any)
DX = number of characters in input queue

Note: the port number is stored at offset BEh in the Task Control Block SeeAlso: AH=03h,AH=05h“MultiDOS”,AH=08h“MultiDOS”,AH=09h“MultiDOS” SeeAlso: AH=23h“MultiDOS”,INT 15/AH=13h“MultiDOS” ———-1407——————————- INT 14 - MBBIOS - SEND BREAK

AH = 07h
DX = port number

Return: none SeeAlso: AH=06h“MBBIOS” ———-1408——————————- INT 14 - FOSSIL - FLUSH OUTPUT BUFFER WAITING TILL ALL OUTPUT IS DONE

AH = 08h
DX = port number

SeeAlso: AH=09h“FOSSIL” ———-1408——————————- INT 14 - MultiDOS Plus 4.0 IODRV - GET AND RESET PORT LINE STATUS

AH = 08h

Return: AL = line status (see AH=03h)

AH destroyed

Notes: the port number is stored at offset BEh in the Task Control Block

on every line status change, the line status is ORed with the line
  status accumulator; this function returns the accumulator and clears
  it

SeeAlso: AH=03h,AH=04h“MultiDOS”,AH=07h“MultiDOS”,INT 15/AH=13h“MultiDOS” ———-1408——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - ALTERNATE STATUS CHECK

AH = 08h
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AH = RS232 status bits (see AH=03h)

ZF set if no characters queued
ZF clear if character available
    AL = next character

SeeAlso: AH=03h,AH=09h“Digiboard” ———-1408——————————- INT 14 - MBBIOS - NON-DESTRUCTIVE READ

AH = 08h
DX = port number

Return: AL = character

AH = status (see AH=02h)

SeeAlso: AH=0Bh“MBBIOS”,AH=0Ch“FOSSIL” ———-1409——————————- INT 14 - FOSSIL - PURGE OUTPUT BUFFER THROWING AWAY ALL PENDING OUTPUT

AH = 09h
DX = port number

SeeAlso: AH=08h“FOSSIL”,AH=0Ah“FOSSIL”,AH=88h ———-1409——————————- INT 14 - MultiDOS Plus IODRV - RESET PORT STATUS

AH = 09h

Return: modem status byte cleared Note: the port number is stored at offset BEh in the Task Control Block SeeAlso: AH=04h“MultiDOS”,AH=07h“MultiDOS”,INT 15/AH=13h“MultiDOS” ———-1409——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR BUFFERS

AH = 09h
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AH = status

    00h successful
    FFh error

SeeAlso: AH=08h“Digiboard”,AH=0Ah“Digiboard”,AH=10h“Digiboard” ———-1409——————————- INT 14 - MBBIOS - GET/SET OPTIONS

AH = 09h
AL = option byte
	00000001b - Transmit Buffering Enabled
	00000101b - Hardware Handshaking Enabled
	00100000b - High Speed Option Enabled
DX = port number???

Return: AL = old option byte SeeAlso: AH=04h“MBBIOS”,AH=10h“FOSSIL” ———-140A——————————- INT 14 - FOSSIL - PURGE INPUT BUFFER THROWING AWAY ALL PENDING INPUT

AH = 0Ah
DX = port number

SeeAlso: AH=09h“FOSSIL”,AH=85h ———-140A——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - INPUT QUEUE CHECK

AH = 0Ah
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AX = number of characters available in buffer SeeAlso: AH=09h“Digiboard”,AH=0Dh“Digiboard” ———-140A——————————- INT 14 - MBBIOS - WRITE BUFFER

AH = 0Ah
CX = count
ES:DI -> buffer

Return: AX = status (see AH=03h)

DI = is updated
CX = unsent character count

SeeAlso: AH=0Bh“MBBIOS”,AH=19h“FOSSIL” ———-140B——————————- INT 14 - FOSSIL - TRANSMIT NO WAIT

AH = 0Bh
AL = character
DX = port number

Return: AX = 0000h character not accepted

   = 0001h character accepted

SeeAlso: AH=01h ———-140B——————————- INT 14 - MBBIOS - READ BUFFER

AH = 0Bh
CX = size of buffer
ES:DI -> buffer

Return: AH = LSR

AL = MSR
CX = count of characters
DI = is updated

SeeAlso: AH=08h“MBBIOS”,AH=0Ah“MBBIOS”,AH=18h“FOSSIL” ———-140C——————————- INT 14 - FOSSIL - NON-DESTRUCTIVE READ AHEAD

AH = 0Ch
DX = port number

Return: AX = FFFFh character not available

AX = 00xxh character xx available

SeeAlso: AH=08h“MBBIOS”,AH=20h“FOSSIL” ———-140D——————————- INT 14 - FOSSIL - KEYBOARD READ WITHOUT WAIT

AH = 0Dh

Return: AX = FFFFh character not available

   = xxyyh standard IBM-style scan code

SeeAlso: AH=0Eh ———-140D——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - GET POINTER TO CH_KEY_RDY FLAG

AH = 0Dh
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: ES:BX → CH_KEY_RDY flag SeeAlso: AH=0Ah“Digiboard”

Values for CH_KEY_RDY flag: 00h receive buffer empty FFh characters available ———-140E——————————- INT 14 - FOSSIL - KEYBOARD READ WITH WAIT

AH = 0Eh

Return: AX = xxyyh standard IBM-style scan code SeeAlso: AH=0Dh“FOSSIL” ———-140E——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - WRITE STRING

AH = 0EH
CX = number of characters to write
ES:BX -> string
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AX = number of characters actually written

ZF clear if successful
ZF set on error

SeeAlso: AH=0Fh“Digiboard” ———-140F——————————- INT 14 - FOSSIL - ENABLE/DISABLE FLOW CONTROL

AH = 0Fh
AL = bit mask describing flow control requested
    0: xon/xoff on transmit (watch for xoff while sending)
    1: CTS/RTS (CTS on transmit/RTS on receive)
    2: reserved
    3: xon/xoff on receive (send xoff when buffer near full)
    4-7: all 1
DX = port number

SeeAlso: AH=09h“MBBIOS”,AH=10h“FOSSIL” ———-140F——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - READ STRING

AH = 0Fh
CX = number of characters to read
ES:BX -> buffer
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AX = number of characters read

ZF clear if successful
ZF set on error (line status or wrong number of characters)

SeeAlso: AH=0Eh“Digiboard” ———-1410——————————- INT 14 - FOSSIL - EXTENDED ^C/^K CHECKING AND TRANSMIT ON/OFF

AH = 10h
AL = bit mask
    0: enable/disable ^C/^K checking
    1: enable/disable the transmitter
DX = port number

SeeAlso: AH=0Fh“FOSSIL” ———-1410——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR RECEIVE BUFFER

AH = 10h
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AH = status

    00h successful
    FFh error

SeeAlso: AH=09h“Digiboard”,AH=11h“Digiboard” ———-1411——————————- INT 14 - FOSSIL - SET CURRENT CURSOR LOCATION

AH = 11h
DH = row
DL = column

Note: this is the same as INT 10/AH=02h SeeAlso: AH=12h“FOSSIL” ———-1411——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR TRANSMIT BUFFER

AH = 11h
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AH = status

    00h successful
    FFh error

SeeAlso: AH=09h“Digiboard”,AH=10h“Digiboard” ———-1412——————————- INT 14 - FOSSIL - READ CURRENT CURSOR LOCATION

AH = 12h

Return: DH = row

DL = column

Note: this is the same as INT 10/AH=03h SeeAlso: AH=11h“FOSSIL” ———-1412——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - GET TRANSMIT BUFFER FREE SPACE

AH = 12h
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AX = number of bytes free SeeAlso: AH=0Ah“Digiboard” ———-1413——————————- INT 14 - FOSSIL - SINGLE CHARACTER ANSI WRITE TO SCREEN

AH = 13h
AL = character

Note: should not be called if it is unsafe to call DOS SeeAlso: AH=15h ———-1414——————————- INT 14 - FOSSIL - ENABLE OR DISABLE WATCHDOG PROCESSING

AH = 14h
AL = 01h enable watchdog
     00h disable watchdog
DX = port number

———-1415——————————- INT 14 - FOSSIL - WRITE CHARACTER TO SCREEN USING BIOS SUPPORT ROUTINES

AH = 15h
AL = character

SeeAlso: AH=13h ———-1416——————————- INT 14 - FOSSIL - INSERT/DELETE FUNCTION FROM TIMER TICK CHAIN

AH = 16h
AL = function
    00h = delete
    01h = add
ES:DX -> routine to call

Return: AX = status

    0000h successful
    0001h unsuccessful

SeeAlso: AH=07h“FOSSIL” ———-1416——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - CCB COMMAND

AH = 16h
AL = CCB command number (see below)
BL = byte 2
BH = byte 3
CL = byte 1 (for all channel functions except 4Eh and 4Fh)
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AH = status

    00h successful
    FFh error

SeeAlso: AH=18h“Digiboard”

Values for CCB command number: 40h Set Receive Mid Water Mark 41h Set Receive High Water Mark 42h Flush Receive Buffer 43h Flush Transmit Buffer 44h Transmit Pause 45h Transmit Resume 46h Set Interrupt to Host Mask 47h Set Baud, Data, Stop and Parity 48h Send Break 49h Set Modem Lines 4Ah Set Break Count 4Bh Set Handshake 4Ch Set Xon/Xoff Characters 4Dh Set Transmit Mid Water Mark 4Eh IRQ Polling Timer to Host 4Fh Buffer Set All 50h Port On 51h Port Off 52h Receive Pause 53h Special Character Interrupt 54h RS-422 Enable ———-1417——————————- INT 14 - FOSSIL - REBOOT SYSTEM

AH = 17h
AL = method
    00h = cold boot
    01h = warm boot

SeeAlso: INT 19 ———-1418——————————- INT 14 - FOSSIL - READ BLOCK

AH = 18h
CX = maximum number of characters to transfer
DX = port number
ES:DI -> user buffer

Return: AX = number of characters transferred SeeAlso: AH=19h“FOSSIL”,AH=83h“COURIERS”,AX=FF02h,INT 6B/AX=0100h ———-1418——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - SEND BIOS COMMAND

AH = 18h
ES:BX -> 16-byte command string
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AH = status

    00h successful
    80h timeout
AL = mailbox status
    00h no errors
    8Xh BIOS error
ES:BX buffer filled in with mailbox string
ZF clear if no errors
ZF set if either status byte contains an error code

SeeAlso: AH=16h“Digiboard” ———-1419——————————- INT 14 - FOSSIL - WRITE BLOCK

AH = 19h
CX = maximum number of characters to transfer
DX = port number
ES:DI -> user buffer

Return: AX = number of characters transferred SeeAlso: AH=18h“FOSSIL”,AH=86h,INT 6B/AX=0000h ———-1419——————————- INT 14 - Digiboard DigiCHANNEL PC/X* - SPECIAL CHARACTER INTERRUPT

AH = 19h
BL = flag
    00h disable special character interrupt
    FFh enable interrupt
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: AH = status

    00h successful	
    FFh failed

SeeAlso: AH=1Ah“Digiboard” ———-141A——————————- INT 14 - FOSSIL - BREAK BEGIN OR END

AH = 1Ah
AL = 00h stop sending 'break'
     01h start sending 'break'
DX = port number

SeeAlso: AH=06h“FOSSIL”,AH=8Ah,AH=FAh ———-141A——————————- INT 14 - Digiboard DigiCHANNEL PC/X - SPECIAL CHARACTER FLAG/COUNTER

AH = 1Ah
BX = subfunction
    00h return pointer to special character flag byte
    01h return pointer to special character counter word
DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)

Return: ES:BX → special character flag or counter Notes: flag is FFh if one or more special characters are in the receive

  buffer; it is 00h and the counter is invalid if no special characters
  are in the receive buffer
counter (if valid) contains the number of characters in the receive
  buffer up to and including the last-received special character

———-141B——————————- INT 14 - FOSSIL - RETURN INFORMATION ABOUT THE DRIVER

AH = 1Bh
DX = port number
CX = size of user buffer
ES:DI -> user buffer for driver info (see below)

Return: AX = number of characters transferred

CX = 3058h ("0X") (X00 FOSSIL only)
DX = 2030h (" 0") (X00 FOSSIL only)

Format of driver info: Offset Size Description 00h WORD size of structure in bytes 02h BYTE FOSSIL spec driver conforms to 03h BYTE revision level of this specific driver 04h DWORD pointer to ASCIZ identification string 08h WORD size of the input buffer 0Ah WORD number of bytes left in buffer 0Ch WORD size of the output buffer 0Eh WORD number of bytes left in buffer 10h BYTE width of screen 11h BYTE length of screen 12h BYTE actual baud rate, computer to modem ———-141C——————————- INT 14 - X00 FOSSIL - ACTIVATE PORT

AH = 1Ch
DX = port number

Return: AX = 1954h if successful

BL = maximum function number supported (not including 7Eh and above)
BH = revision of FOSSIL specification supported

Note: this is a duplicate of AH=04h, so that AH=04h may be made compatible

  with the PS/2 BIOS in a future release

SeeAlso: AH=04h“FOSSIL”,AH=1Dh ———-141D——————————- INT 14 - X00 FOSSIL - DEACTIVATE PORT

AH = 1Dh
DX = port number

Return: none Notes: this is a duplicate of AH=05h, so that AH=05h may be made compatible

  with the PS/2 BIOS in a future release
ignored if the port was never activated with AH=04h or AH=1Ch

SeeAlso: AH=05h“FOSSIL”,AH=1Ch ———-141E——————————- INT 14 - X00 FOSSIL - EXTENDED LINE CONTROL INITIALIZATION

AH = 1Eh
AL = break status
    00h if break
    01h if no break
BH = parity
    00h no parity
    01h odd parity
    02h even parity
    03h stick parity odd
    04h stick parity even
BL = number of stop bits
    00h one stop bit
    01h two stop bits (1.5 if 5 bit word length)
CH = word length
    00h 5 bits
    01h 6 bits
    02h 7 bits
    03h 8 bits
CL = bps rate
    00h 110
    01h 150
    02h 300
    03h 600
    04h 1200
    05h 2400
    06h 4800
    07h 9600
    08h 19200
DX = port number

Return: AX = port status code (see AH=00h) Notes: this function is intended to exactly emulate the PS/2 BIOS AH=04h call

if the port was locked at X00 load time, the appropriate parameters are
  ignored

SeeAlso: AH=00h,AH=04h“SERIAL I/O” ———-141F——————————- INT 14 - X00 FOSSIL - EXTENDED SERIAL PORT STATUS/CONTROL

AH = 1Fh
AL = 00h read modem control register
      Return: BL = modem control register (see below)
	      AH = status
AL = 01h write modem control register
      BL = modem control register
	  bit 0: data terminal ready
	  bit 1: request to send
	  bit 2: OUT1
	  bit 3: OUT2 (interrupts) enabled
	  bit 4: LOOP
	  bits 5-7 reserved
      Return: AX = status
DX = port number

SeeAlso: AH=00h,AH=05h“SERIAL I/O” Notes: this function is intended to exactly emulate the PS/2 BIOS AH=05h call

X00 forces BL bit 3 set (interrupts cannot be disabled)

———-1420——————————- INT 14 - X00 FOSSIL - DESTRUCTIVE READ WITH NO WAIT

AH = 20h
DX = port number

Return: AH = 00h if character was available

    AL = next character (removed from receive buffer)
AX = FFFFh if no character available

SeeAlso: AH=0Ch,AH=21h“X00” ———-1420——————————- INT 14 - Alloy MW386 - ATTACH LOGICAL COMMUNICATIONS PORT TO PHYSICAL PORT

AH = 20h
AL = logical port (01h COM1, 02h COM2)
DX = physical port number

Return: AX = status

    0000h successful
    FFFFh failed

SeeAlso: AH=21h“Alloy”,AH=22h“Alloy”,AH=23h“Alloy”,INT 17/AH=8Bh“Alloy” ———-1420——————————- INT 14 - MultiDOS Plus - INITIALIZE PORT

AH = 20h
AL = port parameters (see AH=00h"SERIAL")
DX = port number (0-3)

Return: AH = status

    00h successful
    41h no such port
    64h monitor mode already active

SeeAlso: AH=00h“SERIAL”,AH=04h“MultiDOS”,AH=21h“MultiDOS”,AH=23h“MultiDOS” ———-1421——————————- INT 14 - X00 FOSSIL - STUFF RECEIVE BUFFER

AH = 21h
AL = character
DX = port number

Notes: the given character is inserted at the end of the receive buffer as if

  it had just arrived from the serial port; all normal receive
  processing (XON/XOFF, ^C/^K) is performed on the character
fully re-entrant

SeeAlso: AH=20h“X00” ———-1421——————————- INT 14 - Alloy MW386 v1.x only - RELEASE PHYSICAL COMMUNICATIONS PORT

AH = 21h
DX = physical port number

Return: AX = status

    0000h successful
    FFFFh failed

SeeAlso: AH=20h“Alloy”,AH=22h“Alloy” ———-1421——————————- INT 14 - MultiDOS Plus - TRANSMIT CHARACTER

AH = 21h
AL = character to send
DX = port number

Return: AH = status

    00h successful
    39h no DSR or CTS
    3Ch no DSR
    3Bh no CTS
    41h no such port
    42h monitor mode not active
    97h timed out

Note: monitor mode must have been turned on with AH=24h before calling SeeAlso: AH=20h“MultiDOS”,AH=22h“MultiDOS”,AH=24h“MultiDOS” ———-1422——————————- INT 14 - Alloy MW386 v2+ - RELEASE LOGICAL COMMUNICATIONS PORT

AH = 22h
AL = logical port (01h COM1, 02h COM2)

Return: AX = status (0000h successful) SeeAlso: AH=20h“Alloy”,AH=21h“Alloy” ———-1422——————————- INT 14 - MultiDOS Plus - RECEIVE CHARACTER

AH = 22h
DX = port number

Return: AH = status (see also AH=21h“MultiDOS”)

    00h successful
	AL = character
    3Dh framing and parity error
    3Eh overrun error
    3Fh framing error
    40h parity error
    96h ring buffer overflow

Note: if no character is available, this function waits until a character

  arrives or an implementation-dependent timeout elapses

SeeAlso: AH=20h“MultiDOS”,AH=21h“MultiDOS”,AH=27h ———-1423——————————- INT 14 - Alloy MW386 v2+ - GET PORT NUMBER FROM LOGICAL PORT ID

AH = 23h
AL = logical port (01h COM1, 02h COM2)
DH = user ID
DL = process ID (DH,DL both FFh for current task)

Return: AL = MW386 port mode

    bit 0: port is shared (spooler only)
	1: port is spooled instead of direct (spooler only)
	2: port is assigned as logical COM device, not in spooler
	3: port is free
CX = MW386 port number
DH = owner's user ID
DL = owner's task ID

SeeAlso: AH=20h“Alloy”,INT 17/AH=8Bh“Alloy” ———-1423——————————- INT 14 - MultiDOS Plus - GET PORT STATUS

AH = 23h
DX = port number

Return: AH = line status (see AH=03h)

AL = modem status (see AH=03h)

SeeAlso: AH=03h,AH=07h“MultiDOS”,AH=20h“MultiDOS” ———-1424——————————- INT 14 - Alloy MW386 v2+ - CHANGE PHYSICAL PORT PARAMETERS

AH = 24h
CX = physical I/O port number
DS:DX -> configuration table (see below)

Return: AH = 00h Note: invalid port numbers are merely ignored SeeAlso: INT 17/AH=96h

Format of configuration table: Offset Size Description 00h BYTE baud rate

	00h 38400
	01h 19200
	02h  9600
	03h  7200
	04h  4800
	05h  3600
	06h  2400
	07h  2000
	08h  1200
	09h   600
	0Ah   300
	0Bh   150
	0Ch   134.5

01h BYTE data bits (00h=5, 01h=6, 02h=7, 03h=8) 02h BYTE parity (00h none, 01h odd, 02h even) 03h BYTE stop bits (00h=1, 01h=2) 04h BYTE receive flow control

	00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC, 04h RTS/CTS

05h BYTE transmit flow control (as for receive) ———-1424——————————- INT 14 - MultiDOS Plus - SET MONITOR MODE

AH = 24h
AL = port status storage
    00h single status for entire receive buffer
    01h separate status kept for each byte in receive buffer
DX = port number

Return: AH = status

    00h successful
    3Ah invalid status storage specified
    41h no such port
    64h monitor mode already active

Note: in monitor mode, MultiDOS redirects all BIOS video output to a serial

  port

SeeAlso: AH=20h“MultiDOS”,AH=25h ———-1425——————————- INT 14 - MultiDOS Plus - CLEAR BUFFERS

AH = 25h
AL = function
    00h only clear buffers
    01h clear buffers and deactivate
DX = port number

Return: AH = status

    00h successful
    3Ah invalid function
    41h no such port
    42h monitor mode not active

SeeAlso: AH=20h“MultiDOS”,AH=24h“MultiDOS” ———-1427——————————- INT 14 - MultiDOS Plus - GET BUFFER CHARACTER COUNT

AH = 27h
DX = port number

Return: AH = status

    00h successful
    41h no such port
    42h monitor mode not active
AL = number of characters in receive buffer

———-147E——————————- INT 14 - FOSSIL - INSTALL AN EXTERNAL APPLICATION FUNCTION

AH = 7Eh
AL = code assigned to external application (80h-BFh)
    80h reserved for communications FOSSIL
    81h video FOSSIL
    82h reserved for keyboard FOSSIL
    83h reserved for system FOSSIL
ES:DX -> entry point

Return: AX = 1954h

BL = code assigned to application (same as input AL)
DH = 00h failed
     01h successful

SeeAlso: AH=7Fh,AH=80h“FOSSIL”,AX=8100h,AH=82h“FOSSIL”,AH=83h“FOSSIL” ———-147F——————————- INT 14 - FOSSIL - REMOVE AN EXTERNAL APPLICATION FUNCTION

AH = 7Fh
AL = code assigned to external application
ES:DX -> entry point

Return: AX = 1954h

BL = code assigned to application (same as input AL)
DH = 00h failed
     01h successful

SeeAlso: AH=7Eh ———-1480——————————- INT 14 - COMMUNICATIONS FOSSIL

AH = 80h

SeeAlso: AH=7Eh ———-1480——————————- INT 14 - COURIERS.COM - INSTALLATION CHECK

AH = 80h

Return: AH = E8h if loaded Note: COURIERS is a TSR utility by PC Magazine ———-1481——————————- INT 14 - COURIERS.COM - CHECK IF PORT BUSY

AH = 81h
AL = port number (1-4)

Return: AH = 00h port available

     01h port exists but already in use
     02h port nonexistent

Note: COURIERS is a TSR utility by PC Magazine SeeAlso: AH=83h,AH=8Dh ———-1481——————————- INT 14 - Egberto Willies COMM-DRV - EXTENDED INITIALIZATION

AH = 81h
BX:DI -> port control block

Return: ??? SeeAlso: AH=00h

Format of port control block: Offset Type Description 00h WORD port IO address 02h WORD port IRQ 04h WORD baud rate 06h WORD parity 08h WORD data bits 0Ah WORD stop bits 0Ch WORD break status

	    0000h off

0Eh WORD flow control protocol 10h BYTE input block 11h BYTE output block 12h WORD low threshold 14h WORD high threshold 16h WORD segment of buffer 18h WORD offset of buffer 1Ah WORD input buffer length 1Ch WORD output buffer length 1Eh BYTE auxiliary address 1Fh BYTE spare 20h 4 WORDs spares ———-148100—————————– INT 14 - VIDEO FOSSIL - RETURN VFOSSIL INFORMATION

AX = 8100h
ES:DI -> buffer for VFOSSIL information (see below)

Return: AX = 1954h if installed SeeAlso: AH=7Eh,AX=8101h

Format of VFOSSIL information: Offset Size Description 00h WORD size of information in bytes, including this field 02h WORD VFOSSIL major version 04h WORD VFOSSIL revision level 06h WORD highest VFOSSIL application function supported ———-148101—————————– INT 14 - VIDEO FOSSIL - OPEN VFOSSIL

AX = 8101h
ES:DI -> buffer for application function table (see below)
CX = length of buffer in bytes

Return: AX = 1954h if installed

    BH = highest VFOSSIL application function supported

Note: the number of initialized pointers in the application function table

  will never exceed CX/4; if the buffer is large enough, BH+1 pointers
  will be initialized

SeeAlso: AX=8102h

Format of application function table: Offset Size Description 00h DWORD → function to query current video mode (VioGetMode) 04h DWORD → function to set video mode (VioSetMode) 08h DWORD → function to query hardware config (VioGetConfig) 0Ch DWORD → function to write data in TTY mode (VioWrtTTY) 10h DWORD → function to get current ANSI state (VioGetANSI) 14h DWORD → function to set new ANSI state (VioSetANSI) 18h DWORD → function to get curr cursor position (VioGetCurPos) 1Ch DWORD → function to set cursor position (VioSetCurPos) 20h DWORD → function to get cursor shape (VioGetCurType) 24h DWORD → function to set cursor shape (VioSetCurType) 28h DWORD → function to scroll screen up (VioScrollUp) 2Ch DWORD → function to scroll screen down (VioScrollDn) 30h DWORD → function to read cell string from screen (VioReadCellStr) 34h DWORD → function to read char string from screen (VioReadCharStr) 38h DWORD → function to write a cell string (VioWrtCellStr) 3Ch DWORD → function to write char string, leaving attr (VioWrtCharStr) 40h DWORD → function to write char string,const attr (VioWrtCharStrAttr) 44h DWORD → function to replicate an attribute (VioWrtNAttr) 48h DWORD → function to replicate a cell (VioWrtNCell) 4Ch DWORD → function to replicate a character (VioWrtNChar)

Format of video mode data structure: Offset Size Description 00h WORD length of structure including this field 02h BYTE mode characteristics

	bit 0: clear if MDA, set otherwise
	bit 1: graphics mode
	bit 2: color disabled (black-and-white)

03h BYTE number of colors supported (1=2 colors, 4=16 colors, etc) 04h WORD number of text columns 06h WORD number of text rows 08h WORD reserved 0Ah WORD reserved 0Ch DWORD reserved

Format of video configuration data: Offset Size Description 00h WORD structure length including this field 02h WORD adapter type

	00h monochrome/printer
	01h CGA
	02h EGA
	03h VGA
	07h 8514/A

04h WORD display type

	00h monochrome
	01h color
	02h enhanced color
	09h 8514

06h DWORD adapter memory size

Format of cursor type record: Offset Size Description 00h WORD cursor start line 02h WORD cursor end line 04h WORD cursor width (always 01h) 06h WORD cursor attribute (FFFFh = hidden)

Call VioGetMode with:

STACK:	WORD	VIO handle (must be 00h)
	DWORD	pointer to video mode data structure (see above)

Return: AX = error code (00h, 74h, 17Eh, 1B4h)

    0000h successful
    0074h internal VIO failure
    0163h unsupported mode
    0166h invalid row value
    0167h invalid column value
    017Eh buffer too small
    01A5h invalid VIO parameter
    01B4h invalid VIO handle

Call VioSetMode with:

STACK:	WORD	VIO handle (must be 00h)
	DWORD	pointer to video mode data structure (see above)

Return: AX = error code (00h, 74h, 163h, 17Eh, 1A5h, 1B4h) (see above)

Call VioGetConfig with:

STACK:	WORD	VIO handle (must be 00h)
	DWORD	pointer to video configuration data buffer (see above)

Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see above)

Call VioWrtTTY with:

STACK:	WORD	VIO handle (must be 00h)
	WORD	length of string
	DWORD	pointer to character string to be written to screen

Return: AX = error code (00h, 74h, 1B4h) (see above) Notes: write wraps at end of line and terminates if it reaches end of screen

in ANSI mode, ANSI control sequences are interpreted, and this func is
  not required to be reentrant; in non-ANSI mode, the function is
  reentrant and may be called from within an MSDOS function call

Call VioGetANSI with:

STACK:	WORD	VIO handle (must be 00h)
	DWORD	pointer to WORD which will be set to 00h if ANSI is off
		or 01h if ANSI is on

Return: AX = error code (00h, 74h, 1B4h) (see above)

Call VioSetANSI with:

STACK:	WORD	VIO handle (must be 00h)
	DWORD	pointer to WORD indicating new state of ANSI
		00h off
		01h on

Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)

Call VioGetCurPos with:

STACK:	WORD	VIO handle (must be 00h)
	DWORD	pointer to WORD to hold current cursor column (0-based)
	DWORD	pointer to WORD to hold current cursor row (0-based)

Return: AX = error code (00h, 74h, 1B4h) (see above)

Call VioSetCurPos with:

STACK:	WORD	VIO handle (must be 00h)
	WORD	cursor column
	WORD	cursor row

Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: if either coordinate is invalid, the cursor is not moved

Call VioGetCurType with:

STACK:	WORD	VIO handle (must be 00h)
	DWORD	pointer to cursor type record (see above)

Return: AX = error code (00h, 74h, 1B4h) (see above)

Call VioSetCurType with:

STACK:	WORD	VIO handle (must be 00h)
	DWORD	pointer to cursor type record (see above)

Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)

Call VioScrollUp with:

STACK:	WORD	VIO handle (must be 00h)
	DWORD	pointer to char/attr cell for filling emptied rows
	WORD	number or rows to scroll (FFFFh = clear area)
	WORD	right column of scroll area
	WORD	bottom row of scroll area
	WORD	left column of scroll area
	WORD	top row of scroll area

Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)

Call VioScrollDn with:

STACK:	WORD	VIO handle (must be 00h)
	DWORD	pointer to char/attr cell for filling emptied rows
	WORD	number or rows to scroll (FFFFh = clear area)
	WORD	right column of scroll area
	WORD	bottom row of scroll area
	WORD	left column of scroll area
	WORD	top row of scroll area

Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)

Call VioReadCellStr with:

STACK:	WORD	VIO handle (must be 00h)
	WORD	column at which to start reading
	WORD	row at which to start reading
	DWORD	pointer to WORD containing length of buffer in bytes
		on return, WORD contains number of bytes actually read
	DWORD	pointer to buffer for cell string

Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)

Call VioReadCharStr with:

STACK:	WORD	VIO handle (must be 00h)
	WORD	column at which to start reading
	WORD	row at which to start reading
	DWORD	pointer to WORD containing length of buffer in bytes
		on return, WORD contains number of bytes actually read
	DWORD	pointer to buffer for character string

Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)

Call VioWrtCellStr with:

STACK:	WORD	VIO handle (must be 00h)
	WORD	column at which to start writing
	WORD	row at which to start writing
	WORD	length of cell string in bytes
	DWORD	pointer to cell string to write

Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: write wraps at end of line and terminates if it reaches end of screen

Call VioWrtCharStr with:

STACK:	WORD	VIO handle (must be 00h)
	WORD	column at which to start writing
	WORD	row at which to start writing
	WORD	length of character string
	DWORD	pointer to character string to write

Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: write wraps at end of line and terminates if it reaches end of screen

Call VioWrtCharStrAttr with:

STACK:	WORD	VIO handle (must be 00h)
	DWORD	pointer to attribute to be applied to each character
	WORD	column at which to start writing
	WORD	row at which to start writing
	WORD	length of character string
	DWORD	pointer to character string to write

Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: write wraps at end of line and terminates if it reaches end of screen

Call VioWrtNAttr with:

STACK:	WORD	VIO handle (must be 00h)
	WORD	column at which to start writing
	WORD	row at which to start writing
	WORD	number of times to write attribute
	DWORD	pointer to display attribute to replicate

Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: write wraps at end of line and terminates if it reaches end of screen

Call VioWrtNCell with:

STACK:	WORD	VIO handle (must be 00h)
	WORD	column at which to start writing
	WORD	row at which to start writing
	WORD	number of times to write cell
	DWORD	pointer to cell to replicate

Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: write wraps at end of line and terminates if it reaches end of screen

Call VioWrtNChar with:

STACK:	WORD	VIO handle (must be 00h)
	WORD	column at which to start writing
	WORD	row at which to start writing
	WORD	number of times to write character
	DWORD	pointer to character to replicate

Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above) Note: write wraps at end of line and terminates if it reaches end of screen ———-148102—————————– INT 14 - VIDEO FOSSIL - CLOSE VFOSSIL

AX = 8102h

Return: AX = 1954h Note: terminates all operations; after this call, the video FOSSIL may either

  be removed from memory or reinitialized

SeeAlso: AX=8101h,AX=8103h ———-148103—————————– INT 14 - VIDEO FOSSIL - UNINSTALL

AX = 8103h

Return: AX = 1954h Note: this is an extension to the VFOSSIL spec by Bob Hartman's VFOS_IBM ———-1482——————————- INT 14 - KEYBOARD FOSSIL

AH = 82h

SeeAlso: AH=7Eh ———-1482——————————- INT 14 - COURIERS.COM - CONFIGURE PORT

AH = 82h
AL = port number (1-4)
BX = speed (bps)
CX = bit flags
    bit 0: enable input flow control
    bit 1: enable output flow control
    bit 2: use X.PC protocol (not yet implemented)

SeeAlso: AH=00h,AH=8Ch,INT 7A“X.PC” ———-1483——————————- INT 14 - SYSTEM FOSSIL

AH = 83h

SeeAlso: AH=7Eh ———-1483——————————- INT 14 - COURIERS.COM - START INPUT

AH = 83h
ES:BX -> circular input buffer
CX = length of buffer 
	(should be at least 128 bytes if input flow control enabled)

SeeAlso: AH=18h,AH=87h,AH=8Dh,AH=A5h“BAPI” ———-1484——————————- INT 14 - COURIERS.COM - READ CHARACTER

AH = 84h

Return: ZF set if no characters available

ZF clear
   AL = character
   AH = modem status bits
	bit 7: set on input buffer overflow

SeeAlso: AH=02h,AH=86h,AH=89h ———-1485——————————- INT 14 - COURIERS.COM - FLUSH PENDING INPUT

AH = 85h

SeeAlso: AH=0Ah,AH=88h ———-1486——————————- INT 14 - COURIERS.COM - START OUTPUT

AH = 86h
ES:BX -> output buffer
CX = length of output buffer

SeeAlso: AH=19h,AH=83h“COURIERS”,AH=A4h“BAPI” ———-1487——————————- INT 14 - COURIERS.COM - OUTPUT STATUS

AH = 87h

Return: AX = number of unsent characters ———-1488——————————- INT 14 - COURIERS.COM - ABORT OUTPUT

AH = 88h

SeeAlso: AH=09h,AH=85h ———-1489——————————- INT 14 - COURIERS.COM - SEND SINGLE CHARACTER

AH = 89h
CL = character to send

SeeAlso: AH=01h,AH=84h ———-148A——————————- INT 14 - COURIERS.COM - SEND BREAK

AH = 8Ah

SeeAlso: AH=89h,AH=FAh ———-148C——————————- INT 14 - COURIERS.COM - SET SPEED

AH = 8Ch
BX = speed in bps

SeeAlso: AH=00h,AH=82h“COURIERS” ———-148D——————————- INT 14 - COURIERS.COM - DECONFIGURE PORT

AH = 8Dh

SeeAlso: AH=82h“COURIERS” ———-14A0——————————- INT 14 - 3com BAPI SERIAL I/O - CONNECT TO PORT

AH = A0h
???

Return: ??? SeeAlso: AH=A1h“BAPI” ———-14A0–CXFFFF———————– INT 14 - Interconnections Inc. TES - INSTALLATION CHECK/STATUS REPORT

AH = A0h
CX = FFFFh

Return: CF clear if successful

    AX = 5445h ('TE')
    CX <> FFFFh
    DX = port number
CF set on error

Note: TES is a network serial port emulation program SeeAlso: AH=A1h“TES” ———-14A1——————————- INT 14 - 3com BAPI SERIAL I/O - DISCONNECT FROM PORT

AH = A1h
???

Return: ??? SeeAlso: AH=A0h“BAPI” ———-14A1——————————- INT 14 - Interconnections Inc. TES - GET LIST OF SESSIONS WITH STATUS

AH = A1h

Return: CX = number of active sessions

ES:SI -> status array (see below)

SeeAlso: AH=A2h“TES”,AH=A3h“TES”

Format of status array entry: Offset Size Description 00h BYTE status 01h WORD offset of name ———-14A2——————————- INT 14 - Interconnections Inc. TES - GET LIST OF SERVER NAMES

AH = A2h

Return: CX = number of servers

ES:SI -> array of offsets from ES for server names

SeeAlso: AH=A1h“TES” ———-14A3——————————- INT 14 - Interconnections Inc. TES - START A NEW SESSION

AH = A3h
ES:SI -> ???

Return: CF clear if successful

    AX = 5445h ('TE')
    CX <> FFFFh
    DX = port number
CF set on error

SeeAlso: AH=A1h“TES”,AH=A4h“TES”,AH=A6h“TES” ———-14A4——————————- INT 14 - 3com BAPI SERIAL I/O - WRITE BLOCK

AH = A4h
CX = length
DH = session number (00h)
ES:BX -> buffer

Return: CX = number of bytes sent SeeAlso: AH=19h,AH=86h,AH=A5h“BAPI” ———-14A4——————————- INT 14 - Interconnections Inc. TES - HOLD CURRENTLY ACTIVE SESSION

AH = A4h
???

Return: ??? SeeAlso: AH=A3h“TES”,AH=A5h“TES” ———-14A5——————————- INT 14 - 3com BAPI SERIAL I/O - READ BLOCK

AH = A5h
CX = length
DH = session number (00h)
ES:BX -> buffer

Return: CX = number of bytes read SeeAlso: AH=18h,AH=83h“COURIERS”,AH=A4h“BAPI”,AX=FF02h ———-14A5——————————- INT 14 - Interconnections Inc. TES - RESUME A SESSION

AH = A5h
AL = session number

Return: ??? SeeAlso: AH=A4h“TES”,AH=A6h“TES” ———-14A6——————————- INT 14 - 3com BAPI SERIAL I/O - SEND SHORT BREAK

AH = A6h
DH = session number (00h)

SeeAlso: AH=1Ah,AH=8Ah,AH=FAh ———-14A6——————————- INT 14 - Interconnections Inc. TES - DROP A SESSION

AH = A6h
AL = session number

Return: AH = status

    00h successful
    else error

SeeAlso: AH=A3h“TES”,AH=A5h“TES” ———-14A7——————————- INT 14 - 3com BAPI SERIAL I/O - READ STATUS

AH = A7h
???

Return: ??? ———-14A7——————————- INT 14 - Interconnections Inc. TES - SWITCH TO NEXT ACTIVE SESSION

AH = A7h
???

Return: ??? SeeAlso: AH=A3h“TES”,AH=A5h“TES” ———-14A8——————————- INT 14 - Interconnections Inc. TES - SEND STRING TO COMMAND INTERPRETER

AH = A8h
AL = 00h no visible response
ES:SI -> ASCIZ command

Return: ??? ———-14AF00BXAAAA———————– INT 14 - 3com BAPI SERIAL I/O - INSTALLATION CHECK

AX = AF00h
BX = AAAAh

Return: AX = AF01h if installed ———-14B0——————————- INT 14 - 3com BAPI SERIAL I/O - ENABLE/DISABLE “ENTER COMMAND MODE” CHARACTER

AH = B0h
AL = 00h disable
   = 01h enable

———-14B1——————————- INT 14 - 3com BAPI SERIAL I/O - ENTER COMMAND MODE

AH = B1h

———-14F0F0—————————– INT 14 - ASAP v1.0 - ???

AX = F0F0h
DX = ???
???

Return: ??? Note: ASAP (Automatic Screen Access Program) is a shareware screen reader by

  MicroTalk

SeeAlso: AX=F0F1h ———-14F0F1DX0000———————– INT 14 - ASAP v1.0 - INSTALLATION CHECK

AX = F0F1h
DX = 0000h

Return: DX = segment of resident code

   = 0000h if not installed

Note: ASAP (Automatic Screen Access Program) is a shareware screen reader by

  MicroTalk

SeeAlso: AX=F0F0h,INT 10/AH=38h ———-14F4FF—————————– INT 14 - IBM/Yale EBIOS SERIAL I/O - INSTALLATION CHECK

AX = F4FFh
DX = port (00h-03h)

Return: CF clear if present

    AX = 0000h
CF set if not present
    AX <> 0000h

———-14F9——————————- INT 14 - IBM/Yale EBIOS SERIAL I/O - REGAIN CONTROL

AH = F9h
DX = port (00h-03h)

———-14FA——————————- INT 14 - IBM/Yale EBIOS SERIAL I/O - SEND BREAK

AH = FAh
DX = port (00h-03h)

SeeAlso: AH=1Ah,AH=8Ah ———-14FB——————————- INT 14 - IBM/Yale EBIOS SERIAL I/O - SET OUTGOING MODEM SIGNALS

AH = FBh
AL = modem control register
    bit 0: data terminal ready
	1: request to send
	2: OUT1
	3: OUT2
	4: loopback
    bits 5-7 unused
DX = port (00h-03h)

———-14FC——————————- INT 14 - IBM/Yale EBIOS SERIAL I/O - READ CHARACTER, NO WAIT

AH = FCh
DX = port (00h-03h)

Return: AH = RS232 status bits (see AH=00h)

AL = character

SeeAlso: AH=02h,AH=0Ch,AX=FF02h ———-14FD02—————————– INT 14 - IBM/Yale EBIOS SERIAL I/O - READ STATUS

AX = FD02h

Return: CX = number of characters available ———-14FF02—————————– INT 14 - IBM/Yale EBIOS SERIAL I/O - BUFFERED READ

AX = FF02h
CX = length
DX = port (00h-03h)
ES:BX -> buffer

Return: CX = number of characters read SeeAlso: AH=18h,AH=83h“COURIERS”,AH=A5h“BAPI”,AH=FCh


INT 15

Microsoft TSR Specification

No additional information available at this time.

00h - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)

AH = 00h

Return: CF set on error

    AH = 86h no cassette present
CF clear if successful

SeeAlso: AH=01h“CASSETTE”

00h - Amstrad PC1512 - GET AND RESET MOUSE COUNTS

AH = 00h

Return: CX = signed X count

DX = signed Y count

———-1500——————————- INT 15 - VMiX v2+ - INSTALLATION CHECK???

AH = 00h

Return: DX = 0798h??? ———-1500——————————- INT 15 - MultiDOS Plus - GIVE UP TIME SLICE

AH = 00h

Note: if issued by the highest-priority task while MultiDOS is using

  priority-based rather than round-robin scheduling, control will be
  returned to the caller immediately

SeeAlso: AH=03h“MultiDOS”,AX=1000h ———-1501——————————- INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)

AH = 01h

Return: CF set on error

    AH = 86h no cassette present
CF clear if successful

SeeAlso: AH=00h“CASSETTE” ———-1501——————————- INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM

AH = 01h
AL = NVRAM location (00h to 3Fh)
BL = NVRAM data value

Return: AH = return code

    00h OK
    01h address bad
    02h write error

SeeAlso: AH=02h“Amstrad”

Format of NVRAM: Offset Size Description 00h BYTE time of day: seconds 01h BYTE alarm time: seconds 02h BYTE time of day: minutes 03h BYTE alarm time: minutes 04h BYTE time of day: hours 05h BYTE alarm time: hours 06h BYTE day of week, 1 = Sunday 07h BYTE day of month 08h BYTE month 09h BYTE year mod 100 0Ah BYTE RTC status register A

	bit 7: set if date/time being updated
	    6-4: time base speed, default 010 = 32768 Hz
	    3-0: interrupt rate selection, default 0110 = 1024 Hz

0Bh BYTE RTC status register B

	bit 7: clear if normal update, set if abort update
	    6: periodic interrupt enable
	    5: alarm interrupt enable
	    4: update end interrupt enable
	    3: square wave enable
	    2: date mode (clear = BCD, set = binary)
	    1: 24-hour format
	    0: daylight saving time enable

0Ch BYTE RTC status register C (read-only)

	bit 7: IRQF flag
	    6: PF flag
	    5: AF flag
	    4: UF flag

0Dh BYTE RTC status register D

	bit 7: battery good

0Eh 6 BYTEs time and date machine last used 14h BYTE user RAM checksum 15h WORD Enter key scancode/ASCII code 17h WORD Forward delete key scancode/ASCII code 19h WORD Joystick fire button 1 scancode/ASCII code 1Bh WORD Joystick fire button 2 scancode/ASCII code 1Dh WORD mouse button 1 scancode/ASCII code 1Fh WORD mouse button 2 scancode/ASCII code 21h BYTE mouse X scaling factor 22h BYTE mouse Y scaling factor 23h BYTE initial VDU mode and drive count 24h BYTE initial VDU character attribute 25h BYTE size of RAM disk in 2K blocks 26h BYTE initial system UART setup byte 27h BYTE initial external UART setup byte 28h 24 BYTEs available for user application Note: bytes 00h-0Dh are the same on the IBM AT as they are used/updated by

  the clock chip

———-1501——————————- INT 15 - VMiX - I/O CHANNEL OBJECT MANAGER

AH = 01h
STACK: WORD  object ID of requestor
       DWORD pointer to name of requested method
       WORD  arg1
       WORD  arg2
       WORD  arg3
       WORD  arg4

Return: DX:AX??? → IRP structure or 0000h:0000h ———-1501——————————- INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE

AH = 01h
AL = semaphore number (00h-3Fh)

Return: AH = status

    00h successful
    02h invalid semaphore number

Notes: if the semaphore is not owned, ownership is assigned to the calling

  task and the call returns immediately
if the semaphore is already owned by another task, the calling task
  is placed on a queue for the semaphore and suspended until it can
  become owner of the semaphore
semaphore 0 is used internally by MultiDOS to synchronize DOS access

SeeAlso: AH=02h“MultiDOS”,AH=10h“MultiDOS”,AH=1Bh“MultiDOS” ———-1502——————————- INT 15 - CASSETTE - READ DATA

AH = 02h
CX = number of bytes to read
ES:BX -> buffer

Return: CF clear if successful

    DX = number of bytes read
    ES:BX -> byte following last byte read
CF set on error
AH = status
    00h successful
    01h CRC error
    02h bad tape signals
    04h no data
    80h invalid command
    86h no cassette present

SeeAlso: AH=00h“CASSETTE”,AH=03h“CASSETTE” ———-1502——————————- INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM

AH = 02h
AL = NVRAM location (00h to 3Fh)

Return: AH = return code

    00h OK
    01h address bad
    02h checksum error
AL = NVRAM data value

SeeAlso: AH=01h“Amstrad” ———-1502——————————- INT 15 - VMiX - MEMORY OBJECT MANAGER

AH = 02h
STACK:	WORD	object ID of requestor
	DWORD	pointer to name of requested method
	WORD	arg1
	WORD	arg2
	WORD	arg3
	WORD	arg4
	WORD	arg5

Return: DX:AX??? = pointer to memory block ———-1502——————————- INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE

AH = 02h
AL = semaphore number (00h-3Fh)

Return: AH = status

    00h successful
    01h not semaphore owner
    02h invalid semaphore number

Notes: if any tasks are waiting for the semaphore, the first task on the wait

  queue will become the new owner and be reawakened
do not use within an interrupt handler

SeeAlso: AH=01h“MultiDOS”,AH=10h“MultiDOS”,AH=1Ch“MultiDOS” ———-1503——————————- INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)

AH = 03h
CX = number of bytes to write
ES:BX -> data buffer

Return: CF clear if successful

    ES:BX -> byte following last byte written
CF set on error
AH = status (see AH=02h"CASSETTE")
CX = 0000h

SeeAlso: AH=00h“CASSETTE”,AH=02h“CASSETTE” ———-1503——————————- INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER

AH = 03h
AL = value (I,R,G,B bits)

SeeAlso: AH=04h“Amstrad” ———-1503——————————- INT 15 - VMiX - PROMPTED CONSOLE INPUT

AH = 03h
STACK:	DWORD	pointer to ASCII prompt
	WORD	field outline character
	WORD	length of input field
	DWORD	address of pointer to input buffer
	WORD	number of characters input

Return: AX = length of input (input buffer is padded with blanks) ———-1503——————————- INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL

AH = 03h
DX = number of time slices to remain suspended

Return: after specified interval has elapsed Note: when priority-based scheduling is in use, high-priority tasks should

  use this function to yield the processor

SeeAlso: AH=00h“MultiDOS”,AH=0Ah“MultiDOS” ———-1504——————————- INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)

AH = 04h
ES:DI -> results buffer length 20h for System Parameter Table
DS = segment containing ABIOS RAM extensions (zero if none)

Return: AH = 00h success: results at ES:DI

CF set on failure

SeeAlso: AH=05h“ABIOS”,C1h

Format of ABIOS System Parameter Table: Offset Size Description 00h DWORD FAR address of ABIOS Common Start Routine 04h DWORD FAR address of ABIOS Interrupt Routine 08h DWORD FAR address of ABIOS Time-out Routine 0Ch WORD number of bytes of stack required by this ABIOS implementation 0Eh 16 BYTEs reserved 1Eh WORD number of entries in initialization table ———-1504——————————- INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER

AH = 04h
AL = value (RDSEL1 and RDSEL0)

SeeAlso: AH=03h“Amstrad”,05h“Amstrad” ———-1504——————————- INT 15 - VMiX - VPRINTF

AH = 04h
STACK:	DWORD	control string
	DWORD	array of arguments

———-1504——————————- INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK

AH = 04h
AL = mailbox number (00h-3Fh)
CX = message length in bytes
DS:SI -> message

Return: AH = status

    00h successful
    01h out of message memory
    02h invalid mailbox number

Note: the message is copied into a system buffer; the caller may immediately

  reuse its buffer

SeeAlso: AH=05h“MultiDOS” ———-1505——————————- INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)

AH = 05h
ES:DI -> results buffer length (18h * Number_of_Entries)
DS = segment containing ABIOS RAM extensions (zero if none)

Return: AH = 00h success: results at ES:DI

CF set on failure

SeeAlso: AH=04h“ABIOS”,C1h

Format of one entry of ABIOS Initialization Table: Offset Size Description 00h WORD device ID 02h WORD number of Logical IDs 04h WORD Device Block length (zero for ABIOS patch or extension) 06h DWORD → init routine for Device Block and Function Transfer Table 0Ah WORD request block length 0Ch WORD Function Transfer Table length (zero for a patch) 0Eh WORD Data Pointers length (in Common Data Area) 10h BYTE secondary device ID (hardware level this ABIOS ver supports) 11h BYTE revision (device driver revision level this ABIOS supports) 12h 6 BYTEs reserved ———-1505——————————- INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER

AH = 05h
AL = value (I,R,G,B bits)

SeeAlso: AH=04h“Amstrad” ———-1505——————————- INT 15 - VMiX - GET PROCESS ID OF CURRENT PROCESS

AH = 05h

Return: AX = process ID SeeAlso: AH=06h“VMiX”,AH=0Bh“VMiX” ———-1505——————————- INT 15 - MultiDOS Plus - CHECK MAILBOX

AH = 05h
AL = mailbox number (00h-3Fh)

Return: AH = status

    00h successful
	DX = length of first message in queue, 0000h if no message
    02h invalid mailbox number

SeeAlso: AH=04h“MultiDOS”,AH=06h“MultiDOS” ———-1506——————————- INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER

AH = 06h

Return: BX = version number ———-1506——————————- INT 15 - VMiX - GET POINTER TO PROCESS CONTROL BLOCK

AH = 06h
STACK:	WORD	process ID

Return: DX:AX??? → process control block SeeAlso: AH=07h“VMiX”,AH=08h“VMiX” ———-1506——————————- INT 15 - MultiDOS Plus - READ MAILBOX

AH = 06h
AL = mailbox number (00h-3Fh)
CX = size of buffer in bytes
ES:DI -> buffer for message

Return: AH = status

    00h successful
	CX = number of bytes copied
	DX = actual length of message
    02h invalid mailbox number

Note: if the caller's buffer is not large enough, the message is truncated

  and the remainder is lost

SeeAlso: AH=04h“MultiDOS”,AH=05h“MultiDOS” ———-1507——————————- INT 15 - VMiX - GET POINTER TO OBJECT CONTROL BLOCK

AH = 07h
STACK:	WORD	object type

Return: DX:AX??? → object control block SeeAlso: AH=06h“VMiX”,AH=08h“VMiX” ———-1507——————————- INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)

AH = 07h
BX:CX = entry point of new task
DX = stack size in paragraphs

Return: AH = status

    00h successful
    01h no free task control blocks
    02h no free memory for task's stack

Note: execution returns immediately to calling task SeeAlso: AH=08h“MultiDOS”,AH=09h“MultiDOS”,AH=13h“MultiDOS” ———-1508——————————- INT 15 - VMiX - GET CHANNEL CONTROL BLOCK

AH = 08h
STACK:	WORD	channel ID

Return: DX:AX??? → channel control block SeeAlso: AH=06h“VMiX”,AH=07h“VMiX” ———-1508——————————- INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)

AH = 08h

Return: calling task terminated, so execution never returns to caller Notes: an internal task must be terminated with this function rather than a

  DOS termination function
task's stack space is returned to parent task's memory pool

SeeAlso: AH=07h“MultiDOS” ———-1509——————————- INT 15 - VMiX - GET ID OF QUEUED ELEMENT

AH = 09h
STACK:	WORD	queue ID (0 = process queue, 1 = object, 3 = type)
	WORD	subqueue ID

Return: AX = ID SeeAlso: AH=0Ah“VMiX” ———-1509——————————- INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY

AH = 09h
AL = new priority

Note: the priority has different meanings depending on whether priority-

  based or round-robin scheduling is used

SeeAlso: AH=07h“MultiDOS” ———-150A——————————- INT 15 - VMiX - GET ID OF NEXT QUEUED ELEMENT

AH = 0Ah
STACK:	WORD	queue ID (0 = process queue, 1 = object, 3 = type)
	WORD	ID of current element in queue chain

Return: AX = ID of next element SeeAlso: AH=09h“VMiX”,AH=0Fh“VMiX” ———-150A——————————- INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL

AH = 0Ah
AL = new interval
    00h = 55.0 ms (default)
    80h = 27.5 ms
    40h = 13.75 ms
    20h = 6.88 ms
    10h = 3.44 ms
    08h = 1.72 ms

SeeAlso: AH=03h“MultiDOS” ———-150B——————————- INT 15 - VMiX - GET TOTAL NUMBER OF ACTIVE PROCESSES

AH = 0Bh

Return: AX = number of active processes SeeAlso: AH=05h“VMiX”,AH=0Eh“VMiX” ———-150B——————————- INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY

AH = 0Bh

Notes: sets calling task's screen pointer to actual screen memory; the pointer

  may be restored with AH=0Ch
caller's video mode must be same as foreground task's video mode
any text written while in the background will be saved to the
  foreground task's virtual screen when it switches to the background
useful if a background task wants to display a message on the
  foreground screen

SeeAlso: AH=0Ch“MultiDOS”

0Ch - VMiX - GET POINTER TO PROCESS TSS STACK

AH = 0Ch
STACK:	WORD	process ID

Return: DX:AX??? → TSS stack store

0Ch - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY

AH = 0Ch

Note: restores task's screen pointer saved by AH=0Bh; must not be called

  unless AH=0Bh has been called first

SeeAlso: AH=0Bh“MultiDOS”

0Dh - VMiX - START A CHILD PROCESS JOB SHELL

AH = 0Dh
STACK:	DWORD	ASCIZ string starting with requested I/O channel and
		followed by standard VMiX shell command string

Return: AX = status SeeAlso: AH=0Eh“VMIX” ———-150D——————————- INT 15 - MultiDOS Plus - DISABLE MULTITASKING

AH = 0Dh

Note: calling task receives all time slices until AH=0Eh is called; this

  allows time-critical events or nonreentrant code to be processed

SeeAlso: AH=0Eh“MultiDOS”,AH=10h“MultiDOS”,AX=101Bh,AH=20h“MultiDOS” ———-150E——————————- INT 15 - VMiX - TERMINATE PROCESS

AH = 0Eh
STACK:	WORD	process ID

Return: AX = status SeeAlso: AH=0Bh“VMiX”,AH=0Dh“VMIX” ———-150E——————————- INT 15 - MultiDOS Plus - ENABLE MULTITASKING

AH = 0Eh

SeeAlso: AH=0Dh“MultiDOS”,AX=101Ch,AH=20h“MultiDOS” ———-150F——————————- INT 15 - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)

AH = 0Fh
AL = phase code
    00h reserved
    01h surface analysis
    02h formatting

Return: CF clear if formatting should continue, set if it should terminate Note: called during ESDI drive formatting after each cylinder is completed SeeAlso: INT 13/AH=1Ah ———-150F——————————- INT 15 - VMiX - GET KEY FIELD OF QUEUED ELEMENT

AH = 0Fh
STACK:	WORD	queue ID (0 = process queue, 1 = object q, 3 = type q)
	WORD	ID of element in queue chain

Return: AX = key SeeAlso: AH=0Ah“VMiX” ———-150F——————————- INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND

AH = 0Fh
DS:BX -> ASCIZ command

Return: after command has been processed Notes: specified string is executed as if it had been typed at the MultiDOS

  command prompt
the task is placed on a queue which MultiDOS examines periodically and
  is suspended until MultiDOS has processed the command
all lowercase characters up to the first blank are converted to upper
  case within the given buffer

———-1510——————————- INT 15 - VMiX - EXECUTE FUNCTION IN PROTECTED MODE

AH = 10h
STACK:	DWORD	pointer to function
      N	WORDs	function args

Return: ??? ———-1510——————————- INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE

AH = 10h
AL = semaphore number (00h-3Fh)

Return: AH = status

    00h semaphore not in use
    01h semaphore owned by another task
    02h invalid semaphore number
    03h semaphore owned by caller

SeeAlso: AH=02h“MultiDOS”,AH=0Dh“MultiDOS”,AH=1Dh“MultiDOS” ———-151000—————————– INT 15 - TopView - “PAUSE” - GIVE UP CPU TIME

AX = 1000h

Return: after other processes run Note: under DESQview, if the process issuing this call has hooked INT 08h,

  the current time-slice is set to expire at the next clock tick rather
  than immediately

SeeAlso: AH=00h“MultiDOS”,AX=5305h,INT 21/AH=EEh“DoubleDOS”,INT 2F/AX=1680h SeeAlso: INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah,INT 7F/AH=E8h ———-151001—————————– INT 15 - TopView - “GETMEM” - ALLOCATE “SYSTEM” MEMORY

AX = 1001h
BX = number of bytes to allocate

Return: ES:DI → block of memory or 0000h:0000h (DV v2.26+) Note: use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient

  common memory

SeeAlso: AX=1002h,AX=DE0Ch,AX=DE15h ———-151002—————————– INT 15 - TopView - “PUTMEM” - DEALLOCATE “SYSTEM” MEMORY

AX = 1002h
ES:DI -> previously allocated block

Return: block freed SeeAlso: AX=1001h,AX=DE0Dh ———-151003—————————– INT 15 - TopView - “PRINTC” - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN

AX = 1003h
BH = attribute
BL = character
DX = segment of object handle for window

Note: BX=0 does not display anything, it only positions the hardware cursor ———-1510——————————- INT 15 - TopView - UNIMPLEMENTED IN DV 2.x

AH = 10h
AL = 04h thru 12h

Return: pops up “Programming error” window in DV 2.x ———-151013—————————– INT 15 - TopView - “GETBIT” - DEFINE A 2ND-LEVEL INTERRUPT HANDLER

AX = 1013h
ES:DI -> FAR service routine

Return: BX = bit mask indicating which bit was allocated

     0000h if no more bits available

SeeAlso: AX=1014h,AX=1015h Note: only a few TopView/DESQview API calls are allowed during a hardware

  interrupt; if other calls need to be made, the interrupt handler
  must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)

———-151014—————————– INT 15 - TopView - “FREEBIT” - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER

AX = 1014h
BX = bit mask from INT 15/AX=1013h

SeeAlso: AX=1013h,AX=1015h ———-151015—————————– INT 15 - TopView - “SETBIT” - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS

AX = 1015h
BX = bit mask for interrupts to post

Return: indicated routines will be called: (DV 2.0x) at next task switch

				   (DV 2.2x) immediately

SeeAlso: AX=1013h,AX=1014h Notes: this is one of the few TopView calls which are allowed from a hardware

  interrupt handler
the handler will be called with ES containing the segment of the handle
  of the next task to be executed; on return, ES must be the segment of
  a task handle

———-151016—————————– INT 15 - TopView - “ISOBJ” - VERIFY OBJECT HANDLE

AX = 1016h
ES:DI = possible object handle

Return: BX = FFFFh if ES:DI is a valid object handle

     0000h if ES:DI is not

SeeAlso: AX=DE14h,AX=DE2Bh ———-151017—————————– INT 15 - TopView - UNIMPLEMENTED IN DV 2.x

AX = 1017h

Return: pops up “Programming error” window in DV 2.x ———-151018—————————– INT 15 - TopView - “LOCATE” - FIND WINDOW AT A GIVEN SCREEN LOCATION

AX = 1018h
BH = column
BL = row
ES = segment of object handle for window below which to search
     0000h = start search with topmost window

Return: ES = segment of object handle for window which is visible at the

       indicated position, or covered by indicated window
   = 0000h no window

SeeAlso: AX=1023h,AX=1024h ———-151019—————————– INT 15 - TopView - “SOUND” - MAKE TONE

AX = 1019h
BX = frequency in Hertz (0000h = silence)
CX = duration in clock ticks (18.2 ticks/sec)

Return: immediately, tone continues to completion Notes: if another tone is already playing, the new tone does not start until

  completion of the previous one.  Up to 32 tones may be queued before
  the process is blocked until a note completes.
in DV 2.00, the lowest tone allowed is 20 Hz
if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  notes are also cancelled

SeeAlso: INT 16/AH=73h ———-15101A—————————– INT 15 - TopView - “OSTACK” - SWITCH TO TASK'S INTERNAL STACK

AX = 101Ah

Return: stack switched Notes: this call may not be nested; a second call must be preceded by a call

  to "USTACK" (AX=1025h)
while TopView requires many API calls to be executed while on the
  task's internal stack, DESQview allows those calls to be executed
  regardless of the current stack

SeeAlso: AX=1025h ———-15101B—————————– INT 15 - TopView - “BEGINC” - BEGIN CRITICAL REGION

AX = 101Bh

Return: task-switching temporarily disabled Notes: will not task-switch until “ENDC” (AX = 101Ch) called unless task

  voluntarily releases the CPU (upon regaining the CPU, task-switching
  will again be disabled)
suspends the caller until DOS is free

SeeAlso: AH=0Dh“MultiDOS”,AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h SeeAlso: INT 60/DI=0602h ———-15101C—————————– INT 15 - TopView - “ENDC” - END CRITICAL REGION

AX = 101Ch

Return: task-switching enabled Note: this API call may be made from within a hardware interrupt handler SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h ———-15101D—————————– INT 15 - TopView - “STOP” - STOP TASK

AX = 101Dh
ES = segment of object handle for task to be stopped
     (== handle of main window for that task)

Return: indicated task will not get any CPU time until restarted with AX=101Eh Note: once a task has been stopped, additional “STOP”s are ignored BUG: in DV 2.00, this function is ignored unless the indicated task is the

  current task

SeeAlso: AX=101Eh,AX=102Bh,AH=12h“VMiX” ———-15101E—————————– INT 15 - TopView - “START” - START TASK

AX = 101Eh
ES = segment of object handle for task to be started
     (== handle of main window for that task)

Return: indicated task is started up again Note: once a task has been started, additional “START”s are ignored SeeAlso: AX=101Dh,AX=102Bh ———-15101F—————————– INT 15 - TopView - “DISPEROR” - POP-UP ERROR WINDOW

AX = 101Fh
BX = bit fields
     bits 0-12: number of characters to display
     bits 13,14: which mouse button may be pressed to remove window
		 00 = either
		 01 = left
		 10 = right
		 11 = either
     bit 15: beep if 1
ES:DI -> text of message
CH = width of error window (0 = default)
CL = height of error window (0 = default)
DX = segment of object handle

Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed Note: window remains on-screen until ESC or indicated mouse button is pressed ———-151020—————————– INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+

AX = 1020h

Return: pops up “Programming error” window in DV v2.00+ ———-151021—————————– INT 15 - TopView - “PGMINT” - INTERRUPT ANOTHER TASK

AX = 1021h
BX = segment of object handle for task to interrupt (not self)
DX:CX -> FAR routine to jump to next time task is run

Return: nothing Notes: the FAR routine is entered with the current ES, DS, SI, DI, and BP

  values, using the task's internal stack (see AX=101Ah); only SS:SP
  needs to be preserved
multiple PGMINTs to a single task are processed last-in first-out
if the other task is in a DOS or DV API call, the interruption will
  occur on return from that call

———-151022BX0000———————– INT 15 - TopView - “GETVER” - GET VERSION

AX = 1022h
BX = 0000h

Return: BX nonzero, TopView or compatible loaded

(BL = major version, BH = minor version)

Notes: TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h ———-151023—————————– INT 15 - TopView - “POSWIN” - POSITION WINDOW

AX = 1023h
BX = segment of object handle for parent window within which to
     position the window (0 = full screen)
ES = segment of object handle for window to be positioned
DL = bit flags
     bits 0,1: horizontal position
	00 = current
	01 = center
	10 = left
	11 = right
     bits 2,3: vertical position
	00 = current
	01 = center
	10 = top
	11 = bottom
     bit 4: don't redraw screen if set
     bits 5-7 not used
CH = number of columns to offset from position specified by DL
CL = number of rows to offset from position specified by DL

Return: nothing ———-151024—————————– INT 15 - TopView - “GETBUF” - GET VIRTUAL SCREEN INFO

AX = 1024h
BX = segment of object handle for window
      (0 = use default)

Return: ES:DI → virtual screen

CX = size of virtual screen in bytes
DL = 00h text screen
     01h graphics screen

SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h ———-151025—————————– INT 15 - TopView - “USTACK” - SWITCH BACK TO USER'S STACK

AX = 1025h

Return: stack switched back Notes: call only after having switched to internal stack with AX=101Ah

while TopView requires many API calls to be executed while on the
  task's private stack, DESQview allows those calls to be executed
  regardless of the current stack

SeeAlso: AX=101Ah ———-1510——————————- INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x

AH = 10h
AL = 26h thru 2Ah

Return: pops up “Programming error” window in DV 2.x ———-15102B—————————– INT 15 - DESQview v2.00+ (TopView???) - “POSTTASK” - AWAKEN TASK

AX = 102Bh
BX = segment of object handle for task

Return: nothing Note: forces a task which is waiting on its objectq to continue by placing

  the handle for the task on the objectq

SeeAlso: AX=101Dh,AX=101Eh ———-15102C—————————– INT 15 - DESQview v2.00+ (TopView???) - START NEW APPLICATION IN NEW PROCESS

AX = 102Ch
ES:DI -> contents of .PIF/.DVP file (see below)
BX = size of .PIF/.DVP info

Return: BX = segment of object handle for new task

     0000h on error

Format of .PIF/.DVP file: Offset Size Description 00h BYTE reserved (0) 01h BYTE checksum of bytes 02h through 170h 02h 30 BYTEs blank-padded program title 20h WORD maximum memory to allocate to partition in K 22h WORD minimum memory required in K 24h 64 BYTEs ASCIZ program pathname 64h BYTE default drive letter ('A',…) 65h 64 BYTEs ASCIZ default directory name A5h 64 BYTEs ASCIZ program parameters E5h BYTE initial screen mode (0-7) (see also offset 189h) E6h BYTE number of text pages used E7h BYTE number of first interrupt to save E8h BYTE number of last interrupt to save E9h BYTE rows in virtual screen buffer EAh BYTE columns in virtual screen buffer EBh BYTE initial window position, row ECh BYTE initial window position, column EDh WORD system memory in K EFh 64 BYTEs ASCIZ shared program name 12Fh 64 BYTEs ASCIZ shared program data file 16Fh BYTE flags1

	bit 7: writes text directly to screen
	bit 6: runs in foreground only
	bit 5: uses math coprocessor
	bit 4: accesses system keyboard buffer directly
	bits 3-1: reserved (0)
	bit 0: swappable

170h BYTE flags2

	bit 6: uses command-line parameters in field at A5h
	bit 5: swaps interrupt vectors

—information unique to .DVP files— 171h 2 BYTEs keys to use on open menu 173h WORD size of script buffer in bytes 175h WORD automatically give up CPU after this many tests for keyboard

	input in one clock tick (default 0 = never)

177h BYTE nonzero = “uses own colors” 178h BYTE nonzero if application swappable 179h 3 BYTEs reserved (0) according to Quarterdeck documentation

	in actual .DVP files, frequently 01h

17Ch BYTE nonzero to automatically close on exit 17Dh BYTE nonzero if copy-protect floppy is required —information unique to DESQview 2.0+— 17Eh BYTE .DVP version number

	00h DESQview v1.2+
	01h DESQview v2.0+
	02h DESQview v2.2+

17Fh BYTE reserved (0) 180h BYTE initial number of rows in physical window 181h BYTE initial number of columns in physical window 182h WORD maximum expanded memory to allow, in K 184h BYTE flags3

	bit 7: automatically assign window position
	bit 5: maximum memory value has been specified
	bit 4: disallow "Close" command
	bit 3: foreground-only when doing graphics
	bit 2: don't virtualize
	bit 1: ??? set by DV 2.31 when "Runs in Background" = "D"

185h BYTE keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+) 186h BYTE number of graphics pages used 187h WORD extra system memory size 189h BYTE initial screen mode (FFh = default) (overrides offset E5h) —information unique to DESQview 2.2+— 18Ah BYTE serial port usage

	FFh uses all serial ports
	00h no serial ports
	01h only COM1
	02h only COM2

18Bh BYTE flags4

	bit 7: automatically close application on exit if .COM or .EXE
		specified
	bit 6: swappable if not using serial ports
	bit 5: start program with window hidden (v2.26+)
	bit 4: start program in background (v2.26+)
	bit 3: virtualize text
	bit 2: virtualize graphics
	bit 1: share CPU when foreground
	bit 0: share EGA when foreground and zoomed

18Ch BYTE protection level for 386 machines 18Dh 19 BYTEs reserved (0) for regular DESQview —information unique to DESQview/X 1.0— 18Dh BYTE flags5

	bit 0: unused (0)
	bit 1: don't display DOS window
	bit 2: don't wait for windows to open
	bits 3-7: unused (0)

18Eh BYTE X keyboard behavior (0-3) 18Fh BYTE 01h = uses scalable fonts 190h 10 BYTEs unused (0) 19Ah WORD??? sum of all record size fields in records starting at 1A0h 19Ch 4 BYTEs signature “XDVP” 1A0h N BYTEs variable length records

	Offset	Size	Description
	 00h	BYTE	length of following record, 00h if end of file
	 01h	BYTE	always 0??? (or length may be WORD)
	 02h	BYTE	record type
			01h Script filename, up to 64 characters
			05h Starting... values: ASCII copy of fields
			    as typed into DVPMAN, separated by commas:
			    	starting row, starting column, starting
				height, starting width
	 03h  N BYTEs	ASCII data

———-15102D—————————– INT 15 - DESQview v2.00+ - “KMOUSE” - KEYBOARD MOUSE CONTROL

AX = 102Dh
BL = subfunction
     00h determine whether using keyboard mouse
	Return: BL = 00h using real mouse
		     01h using keyboard mouse
     01h turn keyboard mouse on
     02h turn keyboard mouse off

———-15102E—————————– INT 15 - DESQview v2.40 - ALLOCATE ??? MEMORY

AX = 102Eh
BX = number of bytes

Return: AX = status

    0000h successful
	ES = segment of allocated memory
    0001h failed	

———-1511——————————- INT 15 - TopView commands

AH = 11h
AL = various (except 17h)

Note: in DESQview 2.x, these function calls are identical to AH=DEh, so

  see those below

SeeAlso: AH=DEh ———-1511——————————- INT 15 - VMiX - EXECUTE SHELL SYSTEM COMMANDS

AH = 11h
STACK:	DWORD	pointer to ASCIZ string containing a VMiX shell
		request (max len = 127)

Return: AX = status ———-1511——————————- INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE

AH = 11h

Note: disables the Alt-Z MultiDOS command/program-selection hotkey SeeAlso: AH=12h“MultiDOS” ———-151117BX0000———————– INT 15 - DESQview v2.20+ - “ASSERTMAP” - GET/SET MAPPING CONTEXT

AX = 1117h
BX = 0000h	get current mapping context without setting
     nonzero	set new mapping context

Return: BX = mapping context in effect before call

interrupts enabled

Notes: this function differs from AX = DE17h for DESQview v2.20 through 2.25

mapping contexts determine conventional-memory addressability; setting
  a mapping context ensures that the associated program and data areas
  are in memory for access.  Usable by drivers, TSRs and shared
  programs.
caller need not be running under DESQview, but must ensure that the
  stack in use will not be mapped out by the call

SeeAlso: AX=DE17h,INT 2F/AX=1685h ———-1511DE—————————– INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK

AX = 11DEh

Return: CF clear if installed

    AX = segment at which QEXT.SYS is located

Note: a private entry point may be found by searching the beginning of the

  returned segment for the signature string
  "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  prior to the signature contains the QEXT version number in BCD,
  and the word prior to that contains the offset within the QEXT
  code segment of the private entry point

SeeAlso: INT 67/AH=3Fh

Call private entry point with:

AH = 00h ???
AH = nonzero ???

———-1512——————————- INT 15 - VMiX - PUT PROCESS TO SLEEP

AH = 12h
STACK:	WORD	process ID

Return: AX = status SeeAlso: AH=03h“MultiDOS”,AX=101Dh,AH=13h“VMiX” ———-1512——————————- INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE

AH = 12h

Note: enables the Alt-Z MultiDOS command/program-selection hotkey SeeAlso: AH=11h“MultiDOS” ———-1512–BH00————————- INT 15 - TopView - SEND MESSAGE - “HANDLE” - RETURN OBJECT HANDLE

AH = 12h
BH = 00h
BL = which handle to return
    00h handle in DWORD on top of stack
    01h current task's window handle
    02h given task's mailbox handle (task's handle on stack)
    03h current task's mailbox handle
    04h given task's keyboard handle (task's handle on stack)
    05h current task's keyboard object handle
    06h given task's OBJECTQ handle (task's handle on stack)
    07h current task's OBJECTQ handle
    08h	  \
      thru > return 0000:0000 under DV < 2.26
    10h	  /
    0Ch (2.26+) task owning object with handle in DWORD on top of stack
    0Dh (2.26+) task handle of owner (parent) of current task

Return: DWORD on top of stack is object handle Note: BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,

  mailbox, panel, pointer, and timer objects) or is an orphan (task,
  window)

———-1512–BH01————————- INT 15 - TopView - SEND MESSAGE - “NEW” - CREATE NEW OBJECT

AH = 12h
BH = 01h
BL = object type to create
    00h (DV 2.0x only) handle is DWORD on top of stack
    01h (DV 2.0x only) use task's window handle
    02h (DV 2.0x only) given task's mailbox (task's handle on stack)
    03h (DV 2.0x only) current task's mailbox
    04h (DV 2.0x only) given task's keyboard (task's handle on stack)
    05h (DV 2.0x only) current task's keyboard object
    08h WINDOW class
    09h MAILBOX class
    0Ah KEYBOARD class
    0Bh TIMER object (counts down 32-bit time in 10ms increments)
    0Fh POINTER object
    10h PANEL object
STACK: (if window object or WINDOW class)
       DWORD address to jump to (no new task if high word == 0)
       DWORD (reserved) 0 = non-task window, FFFFh = task window
       DWORD bytes for task's private stack (FFFFh == default of 0100h)
       DWORD bytes system memory for input buffer for READ/READN
		(0 == none, -1 == default--same as logical window size)
       DWORD window size, columns
       DWORD window size, rows
       DWORD length of window title
       DWORD address of window title

Return: DWORD on top of stack is new object handle Notes: if a new task is created, it is started with

  AX = BX = SI = DI = BP = 0
  DX:CX = handle of parent task
  DS = ES = SS = segment of private stack (and new task's handle)
new windows are orphans, inherit the colors/hidden status of the
  creating task's window, and are placed in the upper left hand corner
  of the screen but not automatically redrawn
new keyboards are closed, and have all object bits cleared except for
  the hardware cursor bit

SeeAlso: AH=12h/BH=02h ———-1512–BH02————————- INT 15 - TopView - SEND MESSAGE - “FREE” - FREE AN OBJECT

AH = 12h
BH = 02h
BL = object
    00h handle in DWORD on top of stack
	window: close window and free
	timer: free timer
	panel: free panel object
	pointer: free pointer
    01h task's window handle - kills task, never returns
    02h given task's mailbox (task's handle on top of stack)
    03h current task's mailbox
    04h given task's keyboard (task's handle on top of stack)
    05h current task's keyboard object

Notes: when a window is freed, its keyboard and pointer objects are freed;

  task windows also free any mailbox, objectq, and panel objects held
  by the task and any child tasks
if the keyboard being freed is the default keyboard for a task, this
  call is equivalent to CLOSE
panel and pointer objects are automatically closed if open

SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh ———-1512–BH03————————- INT 15 - TopView - SEND MESSAGE - “ADDR” - GET HANDLE OF MESSAGE SENDER

AH = 12h
BH = 03h
BL = object
    00h mailbox handle in DWORD on top of stack
    02h sender of last msg read from mailbox (task's handle on stack)
    03h sender of last msg read from current task's mailbox

Return: DWORD on stack is task handle of message sender SeeAlso: AH=12h/BH=00h ———-1512–BH03————————- INT 15 - DESQview v2.26+ - “CONNECT” - CONNECT TWO WINDOWS

AH = 12h
BH = 03h
BL = window to be connected
    00h handle of window to be attached in DWORD on top of stack
    01h attach current task's main window
STACK: DWORD handle of window to attach to or 00000000h to detach

Return: ??? Notes: when two windows are connected, both will move if the user moves either

multiple windows may be attached to a single window, but each window
  may only be attached to one window at a time

———-1512–BX0300———————– INT 15 - TopView - SEND MESSAGE - “DIR” - GET PANEL FILE DIRECTORY

AH = 12h
BX = 0300h
STACK: DWORD handle of panel object

Return: STACK: DWORD length of directory (always multiple of 14 bytes)

       DWORD address of directory

Note: a null string is returned if the object is not open

Format of panel file: Offset Size Description 00h 2 BYTEs C0h C3h 02h BYTE number of panels in file 03h for each panel in file:

    8 BYTEs  blank-padded panel name
      DWORD  panel offset in file
      WORD   panel length
data for panels (each consists of one or more window/query/manager
streams)
    first byte of each panel must be 1Bh, fifth byte must be E5h

———-1512–BH04————————- INT 15 - TopView - SEND MESSAGE - “READ” - READ NEXT LOGICAL LINE OF WINDOW

AH = 12h
BH = 04h
BL = window to read from
    00h handle is DWORD on top of stack
    01h use calling task's default window
    0Ch (DV 2.26+) default window of task owning handle on top of stack
    0Dh (DV 2.26+) default window of parent task of current task

Return: STACK: DWORD number of bytes read

	DWORD address of buffer

Notes: reading starts at the current logical cursor position; the cursor is

  updated to point at the character following the last one read
any translucent blanks (FFh) which are visible on screen are changed
  to the character which is seen through them
the string produced by the read is placed in an input buffer which may
  be reused by the next READ or READN of a window
window stream opcodes D8h and D9h determine whether the read returns
  characters or attributes

SeeAlso: AH=12h/BH=05h“WINDOW”,AH=12h/BH=12h ———-1512–BH04————————- INT 15 - TopView - SEND MESSAGE - “READ” - GET NEXT RECORD FROM OBJECT

AH = 12h
BH = 04h
BL = object
    00h handle is DWORD on top of stack
	mailbox: wait for and get next message
	keyboard: wait for and get pointer to next input buffer
	pointer: wait for and get next message
    02h get next message from mailbox (task's handle on top of stack)
    03h get next message from current task's mailbox
    04h get the next input from keyboard (handle on top of stack)
    05h get the next input from task's default keyboard
    06h wait for input from any object in OBJECTQ (handle on stack)
    07h wait for input from any object in task's default OBJECTQ

Return: STACK: (if objectq) DWORD handle of object with input

       (otherwise)  DWORD number of bytes
		    DWORD address

Notes: for a keyboard in keystroke mode, the input buffer is a single byte

  containing the character code as returned by the BIOS; the BIOS scan
  code is available via the STATUS call if the character is zero
for a keyboard in field mode, the input buffer format is determined
  by the field table header for the window the keyboard is attached to
keyboard input buffers and mailbox message buffers may be invalidated
  by the next READ, ERASE, CLOSE, or FREE message to the same object

SeeAlso: AH=12h/BH=05h“OBJECT”

Format of pointer message: Offset Size Description 00h WORD row 02h WORD column 04h BYTE status

	bit 6: set when press/release mode active and button released
	bits 7-2: number of clicks-1 if multiple-click mode active
	bits 1,0: button pressed (00=none,01=button1,10=button2)

05h BYTE field number or zero (APILEVEL >= 2.00 only) ———-1512–BX0400———————– INT 15 - TopView - SEND MESSAGE - “READ” - WAIT FOR TIMER TO EXPIRE

AH = 12h
BX = 0400h
STACK: DWORD timer's handle

Return: after timer expires

STACK: DWORD time in 1/100 sec after midnight when timer expired

———-1512–BX0400———————– INT 15 - TopView - SEND MESSAGE - “APPLY” - WRITE PANEL TO WINDOW

AH = 12h
BX = 0400h
STACK: DWORD handle of panel object
       DWORD window's handle (or 0 for current task's window)
       DWORD length of panel name
       DWORD pointer to panel name

Return: STACK: DWORD handle of keyboard or 0

       DWORD handle of window which was used

Notes: status of APPLY may be checked with STATUS message

panel MUST have the following format
  first byte must be 1Bh (i.e. must start with a stream)
  first opcode in stream must be E5h
    single byte arg of opcode is interpreted thus:
      bits 7,6	11 means create new window
		10 means create new field table for existing window
		01 means use existing window and field table
      bit 5 if set, panel contains a field table 
		(creates a new keyboard and puts it in field mode)
      bit 4 if set, panel contains input fields
      bit 3 if set, panel contains select fields but no input fields
if the panel contains input or select fields, a keyboard handle is
  returned; either the window's current open keyboard or a
  newly-created keyboard object.  The caller should read that keyboard
  to obtain input from the panel.

———-1512–BH05———————— INT 15 - TopView - SEND MESSAGE - “WRITE” - WRITE TO OBJECT

AH = 12h
BH = 05h
BL = object
    00h handle is DWORD on top of stack
	timer: start timer to end at a specified time
	keyboard: add input buffer to queue
	pointer: move pointer icon to specified position
    02h send message by value/status=0 to mbox (task's handle on stack)
    03h send message by value/status=0 to current task's mailbox
    04h add input buffer to KEYBOARD queue (handle on top of stack)
    05h add input buffer to task's default KEYBOARD queue
    06h add an object to OBJECTQ (handle on top of stack)
    07h add an object to task's default OBJECTQ
STACK: (if mailbox)  DWORD length
		     DWORD address
       (if keyboard) DWORD status (scan code in keystroke mode)
		     DWORD length (should be 1 in keystroke mode)
		     DWORD address
       (if objectq)  DWORD handle of object to add
       (if timer)    DWORD 1/100ths seconds since midnight (actually
			   only accurate to 1/18 sec)
       (if pointer)  DWORD column relative to origin of window
		     DWORD row relative to origin of window

Notes: under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)

the data and status written to a keyboard object must match the format
  returned by the keyboard object in the current mode
the pointer position is scaled according to the current scaling factors

SeeAlso: AH=12h/BH=04h ———-1512–BH05————————- INT 15 - TopView - SEND MESSAGE - “WRITE” - WRITE STRING TO WINDOW

AH = 12h
BH = 05h
BL = window to write to
    00h DWORD on top of stack is window handle
    01h write string to task's default window
    0Ch (DV 2.26+) default window of task owning handle on top of stack
    0Dh (DV 2.26+) default window of parent of current task
STACK: DWORD object handle if handle passed on stack
       DWORD total length of string (high word == 0)
       DWORD address of string to display

Return: indicated actions performed

a. non-control characters are displayed (opcodes DEh and DFh control
   whether the attributes are left or changed to the current attrib)
b. CR/LF/BS/Tab cause the usual cursor movement
c. ESC starts a data structure with additional commands if following
   byte is less than 20h; otherwise, it is written to the window
STACK:	DWORD handle of new window if window stream opcode E6h
	else nothing

Data Structure:

MAGIC  DB  1Bh
MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
LENGTH DW  ?   ; length of remainder in bytes
var-length fields follow, each an OPCODE followed by
     zero or more args

MODE 00h (set or display values) “WINDOW STREAM”

  Opcodes:args
00h  display 20h blanks with the default attribute
01h-1Fh display OPCODE blanks with the default attribute
20h  display char with default attribute 20h times
     BYTE char to repeat
21h-3Fh display char with default attribute OPCODE-20h times
     BYTE char to repeat
40h  display 20h blanks with specified attribute
     BYTE attribute of blanks
41h-5Fh display OPCODE-40h blanks with specified attribute
     BYTE attribute of blanks
60h  display next 20h characters
     20h BYTEs characters to display
61h-7Fh display next OPCODE-60h characters
     N BYTEs characters to display
80h-87h	 display N blanks with default attribute
     BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
	      [000h means 800h]
88h-8Fh display N copies of the character
     BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
	      [000h means 800h]
     BYTE character to repeat
90h-97h	 display N blanks with specified attribute
     BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
	      [000h means 800h]
     BYTE attribute
98h-9FH	 display string at logical cursor pos
     BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
	      [000h means 800h]
     N BYTEs string to display
A0h  set logical cursor row
     BYTE row number (0 is top)
A1h  set logical cursor column
     BYTE column number (0 is leftmost)
A2h  set top edge of scrolling region
     BYTE row
A3h  set left edge of scrolling region
     BYTE column
A4h  set row of physical window position
     BYTE line
A5h  set column of physical window position
     BYTE column
A6h  set height of physical window
     BYTE #rows
A7h  set width of physical window
     BYTE #columns
A8h  set viewport row
     BYTE row
A9h  set viewport column
     BYTE column
AAh  set virtual screen height [contents of window unpredictable after]
     BYTE rows
ABh  set virtual screen width [contents of window unpredictable after]
     BYTE columns
ACh-AEh	 unused
AFh  set compatible/preferred video modes
     BYTE compatibility/preference mask
	bit 7	compatible with monochrome
	bit 6	compatible with color text, EGA/VGA graphics
	bit 5	compatible with medium-resolution CGA graphics
	bit 4	compatible with high-resolution CGA graphics
	bit 3	prefer monochrome
	bit 2	prefer color text, EGA/VGA graphics
	bit 1	prefer medium-resolution CGA graphics
	bit 0	prefer high-resolution CGA graphics
B0h  move logical cursor down
     BYTE #rows (signed, negative values move up)
		[if #rows=0 and hardware cursor owner, update hw crsr]
B1h  move logical cursor right
     BYTE #cols (signed, negative values move left)
		[if #cols=0 and hardware cursor owner, update hw crsr]
B2h  shift top edge of scrolling region
     BYTE #rows (signed)
B3h  shift left edge of scrolling region
     BYTE #cols (signed)
B4h  shift physical window down
     BYTE #lines (signed)
B5h  shift physical window right
     BYTE #columns (signed)
B6h  expand physical window vertically
     BYTE #lines (signed)
B7h  expand physical window horizontally
     BYTE #columns (signed)
B8h  adjust viewport row
     BYTE #rows (signed)
B9h  adjust viewport column
     BYTE #columns (signed)
BAh  adjust virtual screen height [contents of window unpredict after]
     BYTE #rows to increase (signed)
BBh  adjust virtual screen width [contents of window unpredictbl after]
     BYTE #cols to increase (signed)
BCh-BFh	 reserved (currently unused)
C0h  set logical cursor position
     BYTE row number (0 is top border)
     BYTE column number (0 is left border)
C1h  set top left corner of scrolling region
     BYTE row
     BYTE column
C2h  set physical window pos
     BYTE upper left row (no top border if 0)
     BYTE upper left column (no left border if 0)
C3h  set current window size
     BYTE #rows
     BYTE #cols
C4h  set upper left corner of viewport (portion of virtual screen
     displayed in window)
     BYTE row
     BYTE column
C5h  set size of virtual screen [contents unpredictable afterwards]
     BYTE #rows
     BYTE #cols
C6h  unused
C7h  unused
C8h  set logical cursor relative to current position
     BYTE number of rows to move down (signed)
     BYTE number of columns to move right (signed)
	  [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
C9h  shift top left corner of scrolling region
     BYTE #rows (signed)
     BYTE #cols (signed)
CAh  set window pos relative to current position
     BYTE number of rows to shift down (signed)
     BYTE number of columns to shift right (signed)
CBh  set window size relative to current size
     BYTE number of rows to expand (signed)
     BYTE number of cols to expand (signed)
CCh  shift viewport relative to current position
     BYTE rows to shift (signed)
     BYTE cols to shift (signed)
CDh  resize virtual screen
     BYTE #rows to expand (signed)
     BYTE #cols to expand (signed)
CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
D0h  allow window frame to extend beyond screen
D1h  always display a complete frame, even if window extends beyond 
     edge of screen
D2h  allow DV to change logical colors on video mode switch (default)
D3h  application changes logical attributes
D4h  window is visible [must redraw to actually make visible]
D5h  window is hidden [must redraw to actually remove]
D6h  window has frame (default)
D7h  window unframed [must redraw to actually remove frame]
D8h  READ/READN will read characters from window (default)
D9h  READ/READN will read attributes from window
DAh  use logical attributes, which may be remapped
	attributes
	   1 normal text
	   2 highlighted normal text
	   3 help text
	   4 highlighted help text
	   5 error message
	   6 highlighted error message
	   7 emphasized text
	   8 marked text
	   9-16 are reverse video versions of 1-8
DBh  use physical attributes for characters
DCh  enable special actions for control characters (default)
DDh  disable special control char handling, all chars displayable by
     BIOS TTY call
DEh  write both character and attribute (default)
DFh  write character only, leave attribute untouched
E0h  repeat following commands through E1h opcode
     BYTE number of times to repeat (00h means 256 times)
E1h  end of commands to repeat, start repeating them
E2h  set current output color
     BYTE color
E3h  clear virtual screen from scroll origin to end using current color
E4h  redraw window
E5h  select menu style
     BYTE style (normally 18h)
	bits 5,4 = 01 use two-letter menu entries for remainder of
	  this stream
E5h  (panel file only)
     BYTE modifier
	bits 7,6 = 11 panel stream creates new window
		 = 10 panel defines new field table for existing window
		 = 01 panel stream uses existing window & field table
	bit 5 = 1 stream contains a field table (create kyboard object)
	bit 4 = 1 stream defines input fields (create keyboard object)
	bit 3 = 1 stream defines select fields but not input fields
	bit 2 = 1 stream defines exclusive input window (DV 2.2)
	bit 1 reserved
	bit 0 reserved
E6h  create new window and perform rest of manipulations in new window
     BYTE number of rows
     BYTE number of columns
     Return: DWORD object handle of new window returned on stack at end
E7h  no operation
E8h  scroll area up (top left corner defined by opcode C1h)
     BYTE height
     BYTE width
E9h  scroll area down (top left corner defined by opcode C1h)
     BYTE height
     BYTE width
EAh  scroll area left (top left corner defined by opcode C1h)
     BYTE height
     BYTE width
EBh  scroll area right (top left corner defined by opcode C1h)
     BYTE height
     BYTE width
ECh  set logical attributes for window contents
     BYTE video modes command applies to
	bit 7	monochrome
	bit 6	color text, EGA/VGA graphics
	bit 5	medium-resolution CGA graphics
	bit 4	high-resolution CGA graphics
     BYTE which attributes to set
	bit 7  if set, copy single following byte to indicated attribs
	bits 4-6  # of first attribute to change - 1
	bits 0-3  # of consecutive attributes to change
     N BYTEs new attributes
EDh  set logical attributes for window frame
     BYTE video modes command applies to (see opcode ECh)
     BYTE which attributes to set
	bit 7  if set, copy single following byte to indicated attrs
	bits 4-6  # of first attribute to change - 1
	bits 0-3  # of consecutive attributes to change
     N BYTEs new attributes
	  attributes
	       1 = top left corner
	       2 = top right corner
	       3 = bottom left corner
	       4 = bottom right corner
	       5 = top edge
	       6 = bottom edge
	       7 = left edge
	       8 = right edge
EEh  set characters for window frame
     BYTE video modes command applies to (see opcode ECh)
     BYTE which characters to set
	bit 7  if set, copy single following byte to indicated chars
	bits 4-6  # of first char to change - 1
	bits 0-3  # of consecutive chars to change
     N BYTEs new chars (same relative position as attributes above)
EFh  set window name
     BYTE length of name (should be in range 0 to logical screen width)
     N BYTEs name
F0h  clear input field to blanks
     BYTE field number
F1h  fill input field with character
     BYTE field number
     BYTE char
F2h  set color of input field
     BYTE field number (1-N)
     BYTE attribute
F3h  set initial contents of input field
     BYTE field number (1-N)
     N BYTEs enough chars to exactly fill field as defined by op FFh
F4h  position cursor to start of specific input field
     BYTE field number (1-N)
F5h  change field table entry
     BYTE field number
     7-8 BYTEs field table entry (see opcode FFh below)
F6h  set field type
     BYTE field number
     BYTE type
		00h inactive
		40h output field
		80h input field
		C0h deselected field
		C2h selected field
F7h  "broadcast write"	write data to fields with program output bit
	set in field table entry, in field number order
     N BYTEs (total length of all program output fields)
F8h  scroll field up a line
     BYTE field number
F9h  scroll field down a line
     BYTE field number
FAh  scroll field left
     BYTE field number
FBh  scroll field right
     BYTE field number
FCh  set field table header
     BYTE number of fields (must be <= existing number of fields)
     BYTE screen behavior bits
	bit 7  reserved
	bit 6  set if menu items may be selected via keyboard
	bit 5  set if left mouse button may terminate entry
	bit 4  set if right mouse button may terminate entry
	bit 3  if set, select fields return contents or blanks rather
		than 'Y' or 'N'
	bit 2  if set, modified bits reset on return to application
	bits 0,1 = 00 no data returned on read of keyboard
		   01 data returned as array of chars containing
			all fields packed together, with no field
			numbers
		   10 data returned as numbered variable-length
			records for all fields
		   11 data returned as numbered variable-length
			records for the fields which were modified
     BYTE current input field (updated by DESQview)
     BYTE current select field (updated by DESQview)
     BYTE attribute for select fields when they are pointed at
     BYTE attribute for select fields which have been selected
FDh  reset modified bit for all fields
FEh  reset selected and modified bits for all fields
FFh  set up input fields
     6 BYTEs table header (see opcode FCh above)
     the field table entries, one for each field
	 BYTE start row	   \
	 BYTE start column  \ if menu selection and start is to
	 BYTE end row	    / right or below end, select from kbd only
	 BYTE end column   /
	 BYTE field type
	    bits 7,6 = 00 inactive (non-entry) field
		       01 echos keystrokes input to make menu selection
		       10 fill-in field
		       11 select field
	    bit 5  field can be filled by broadcast write (F7h opcode)
	    bit 4  reserved
	    bit 3  reserved
	    bit 2  reserved
	    bit 1  set if field selected
	    bit 0  set if field modified
	 BYTE modifier
	      if type is fill-in, then bit flags to determine behavior
		  bit 7	 if set, automatically enter CR when field full
		  bit 6	 move to next field when current field is full
		  bit 5	 if set, enter text from right end (for numbers)
		  bit 4	 if set, force input to uppercase
		  bit 3	 if set, clear old contents on first keystroke
		  bit 2	 if set, input returned when cursor moves out
			 of modified field (API level 2.02+)
		  bit 1	 reserved
		  bit 0	 reserved
	      if select field, first key to press to activate
		  00h if have to point-&-click or is an extended-ASCII
		      keystroke (only if two-key menus enabled)
	 BYTE (select field only) normal color of field
	 BYTE second key for select field.  This byte is present iff
	      two-letter menu entries selected with opcode E5h, and
	      in that case is present regardless of field type
     Note: DESQview uses and updates the actual copy of the information
       which is contained in the stream.  Thus this info must remain
       intact until after the data entry is complete.

MODE 01h “QUERY STREAM” (valid only for those opcodes listed here)

A0h return logical cursor row in next byte
A1h return logical cursor column in next byte
A2h return top row of scrolling region in next byte
A3h return left column of scrolling region in next byte
A4h return row of physical window origin in next byte
A5h return column of physical window origin in next byte
A6h return height of physcial window in next byte
A7h return width of physical window in next byte
A8h return row of viewport origin in next byte
A9h return column of viewport origin in next byte
AAh return height of virtual screen in next byte
ABh return width of virtual screen in next byte
AFh return current video mode in next byte
C0h return current logical cursor position in next two bytes
C1h return top left corner of scrolling region in next two bytes
C2h return current window position in next two bytes
C3h return current window size in next two bytes
C4h return current viewport origin in next two bytes
C5h return current virtual screen size in next two bytes
D0h \ overwritten with D0h if frames may fall off screen edge
D1h /		       D1h if frames always displayed entirely
D2h \ overwritten with D2h if DESQview controls color palette
D3h /		       D3h if application changes color palette
D4h \ overwritten with D4h if window visible
D5h /		       D5h if window hidden
D6h \ overwritten with D6h if window has frame
D7h /		       D7h if window unframed
D8h \ overwritten with D8h if reading characters from window
D9h /		       D9h if reading attributes from window
DAh \ overwritten with DAh if using logical attributes
DBh /		       DBh if using physical attributes
DCh \ overwritten with DCh if TTY control char interpretation on
DDh /		       DDh if TTY control char interpretation off
DEh \ overwritten with DEh if writing both characters and attributes
DFh /		       DFh if leaving attributes untouched
E2h return current color in next byte
ECh get logical attributes for window contents
    BYTE execute call if currently in specified video mode
	bit 7	monochrome
	bit 6	color text, EGA/VGA graphics
	bit 5	medium-resolution CGA graphics
	bit 4	high-resolution CGA graphics
    BYTE which attributes to get
	bit 7 unused???
	bits 4-6 first attribute to get - 1
	bits 0-3 # consecutive attributes
    N BYTEs buffer to hold attributes
EDh get logical attributes for window frame
    BYTE execute call if currently in video mode (see opcode ECh)
    BYTE which attributes to get
	bit 7 unused???
	bits 4-6 first attribute to get - 1
	bits 0-3 # consecutive attributes
    N BYTEs buffer to hold attributes
EEh get characters for window frame
    BYTE execute call if currently in video mode (see opcode ECh)
    BYTE which attributes to get
	bit 7 unused???
	bits 4-6 first char to get - 1
	bits 0-3 # consecutive chars
    N BYTEs buffer to hold chars
EFh return first N characters of current window name
    BYTE    max length of returned name
    N BYTEs buffer to hold window name
F3h return contents of specified field
    BYTE field number
    N BYTEs buffer to hold field contents (size exactly equal to field
	    size)
F5h get field table entry
    BYTE field number
    7-8 BYTEs buffer to hold field table entry
       Notes: DV < 2.26 always returns 7 bytes
	      DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
		table is using 8-byte entries and eighth byte after
		F5h is E7h (NOP); otherwise, 7 bytes are returned
	      DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
		depending on the field table entry size
F6h get type of a field
    BYTE field number
    BYTE type
FCh get field table header
    6 BYTEs buffer to store header

MODE 10h “MANAGER STREAM” (valid only for opcodes listed here)

00h allow window to be moved horizontally
01h allow window to be moved vertically
02h allow window to change width
03h allow window to change height
04h allow window to be scrolled horizontally
05h allow window to be scrolled vertically
06h allow "Close Window" menu selection for application
07h allow "Hide Window" menu selection for application
08h allow application to be suspended ("Rearrange/Freeze")
0Eh allow "Scissors" menu
10h allow DESQview main menu to be popped up
11h allow "Switch Windows" menu
12h allow "Open Window" menu
13h allow "Quit" menu selection
20h-33h opposite of 00h-13h, disallow specified action
40h notify if horizontal position of window changes
41h notify if vertical position of window changes
42h notify if width of window changes
43h notify if height of window changes
44h notify if window scrolled horizontally
45h notify if window scrolled vertically
46h notify if window is closed--program has to clean up and exit itself
47h notify if window is hidden
48h notify if "?" on main menu selected
49h notify if pointer message sent to window
4Ah notify if window is placed in foreground
4Bh notify if window is placed in background
4Ch notify if video mode changes
4Dh notify if "Scissors" menu "Cut" option selected
4Eh notify if "Scissors" menu "Copy" option selected
4Fh notify if "Scissors" menu "Paste" option selected
50h notify if DESQview main menu about to pop up
51h notify if DESQview main menu popped down
60h-71h	 opposite of 40h-51h: don't notify on specified event
84h attach window to parent task's window (both move together)
85h detach window from parent task's window (may move independently)
86h disable background operation for application
87h enable running in background
88h set minimum size of physical window
    BYTE rows
    BYTE columns
89h set maximum size of physical window
    BYTE rows
    BYTE cols
8Ah set primary asynchronous notification routine
    DWORD address of routine, 0000h:0000h means none (see also below)
8Bh set async notification parameter
    DWORD 32-bit value passed to 8Ah async routine in DS:SI
ACh (DV2.2+) perform regular select field attribute processing
ADh (DV2.2+) protect attributes in selected field from being lost
AEh make window default notify window for owning app (API level 2.00+)
AFh set selected field marker character
    BYTE character to display at left edge of selected fields
BCh set standard field processing mode 
BDh set alternate field processing mode (enables cursor pad for menus)
BEh disables changing reverse logical attributes with ECh opcode
BFh enables changing reverse logical attributes with ECh opcode
C0h make current window topmost in system
C1h force current process into foreground
C2h make current window topmost in process
C3h position mouse pointer relative to origin of current field
    BYTE rows below upper left corner of field
    BYTE columns to right of upper left corner of field
C4h position mouse pointer relative to origin of given field
    BYTE field number
    BYTE rows below upper left corner of field
    BYTE columns to right of upper left corner of field
C5h orphan current window (also hides it)
	Note: must be last in stream; all subsequent commands ignored
C6h show all windows for this process
C7h hide all windows for this process
C8h suspend process and hide all its windows
C9h force current process into background
CAh make current window bottom-most in process
CBh cancel current window manager operation, remove DV menu, give 
    control to topmost application
CCh orphan window and give it to the system for use as paste data
CEh reorder windows
    DWORD pointer to null-terminated list of words
	  each word is segment of object handle for a window
FFh no operation

MODES 14h to 1Fh “USER STREAMS”

normally NOPs, but may be defined by SETESC message to invoke FAR
routines, one for each mode number
  on entry to handler,
	DS:SI -> first byte of actual stream (not header)
	CX = #bytes in stream
	ES:DI = window's handle

Asynchronous notification routine defined by manager stream 8Ah called with:

ES:DI = handle of window
DS:SI is 32-bit value set by 8Bh manager stream opcode
   mailbox contains message indicating event
      Opcode
       40h  horizontal movement
	   DWORD object handle of window
	   BYTE	 new row
	   BYTE	 new col
       41h  vertical movement
	   DWORD object handle of window
	   BYTE	 new row
	   BYTE	 new col
       42h  horizontal size change
	   DWORD object handle of window
	   BYTE	 new rows
	   BYTE	 new cols
       43h  vertical size change
	   DWORD object handle of window
	   BYTE	 new rows
	   BYTE	 new cols
       44h  scrolled horizontally
	   DWORD object handle of window
	   BYTE	 mouse row within window
	   BYTE	 mouse column within window
	   BYTE	 field mouse is on, 0 if none
	   BYTE	 amount moved: >0 right, <0 left, 0 done
       45h  scrolled vertically
	   DWORD object hande of window
	   BYTE	 mouse row within window
	   BYTE	 mouse column within window
	   BYTE	 field mouse is on, 0 if none
	   BYTE	 amount moved: >0 down, <0 up, 0 done
       46h  window close request
	   DWORD object handle of window
	   BYTE	 mouse pointer row
	   BYTE	 mouse pointer column
	   BYTE	 field mouse is on, 0 if none
       47h  application's windows hidden
       48h  Help for Program selected
	   DWORD object handle of window
	   BYTE	 mouse pointer row
	   BYTE	 mouse pointer column
	   BYTE	 field mouse is on, 0 if none
       49h  pointer message sent to window
	   DWORD pointer handle which received message
       4Ah  switched to window from another ("raise")
       4Bh  switched away from the window ("lower")
       4Ch  video mode changed
	   BYTE new BIOS video mode
       4Dh  Scissors/cUt selected
	   DWORD object handle of window
	   BYTE	 row of upper left corner
	   BYTE	 column of upper left corner
	   BYTE	 field number ul corner is in, 0=none
	   DWORD handle of orphaned window created with
		 copy of data from specified region
	   BYTE	 height of region
	   BYTE	 width of region
       4Eh  Scissors/Copy selected
	   DWORD object handle of window
	   BYTE	 row of upper left corner
	   BYTE	 column of upper left corner
	   BYTE	 field number ul corner is in, 0=none
	   DWORD handle of orphaned window created with
		 copy of data from specified region
	   BYTE	 height of region
	   BYTE	 width of region
       4Fh  Scissors/Paste selected
	   DWORD object handle of window
	   BYTE	 row of upper left corner
	   BYTE	 column of upper left corner
	   BYTE	 field number ul corner is in, 0=none
	   DWORD handle of orphaned window with data
	   BYTE	 height of region
	   BYTE	 width of region
		Note: orphaned data window should be adopted or freed
			when done
       50h  main menu about to pop up
       51h  main menu popped down

Return: all registers unchanged ———-1512–BH06————————- INT 15 - DESQview 2.20+ - SEND MESSAGE - “SETPRI” - SET PRIORITY WITHIN OBJECTQ

AH = 12h
BH = 06h
BL = object
    00h object handle in DWORD on top of stack
	mailbox, keyboard, pointer, or timer
    04h given task's keyboard (task's handle on top of stack)
    05h current task's default keyboard
STACK: DWORD new priority of object in task's OBJECTQ 

Notes: initially all objects have the same default value. Should only make

  relative adjustments to this default value.
when changing priorities, all objects already on the objectq are
  reordered

SeeAlso: AH=12h/BH=07h ———-1512–BH07————————- INT 15 - DESQview 2.20+ - SEND MESSAGE - “GETPRI” - GET PRIORITY WITHIN OBJECTQ

AH = 12h
BH = 07h
BL = object
    00h object handle in DWORD on top of stack
	mailbox, keyboard, pointer, or timer
    04h given task's keyboard (task's handle on top of stack)
    05h current task's default keyboard

Return: STACK: DWORD object priority Note: initially all objects have the same default value. Should only make

  relative adjustments to this default value.

SeeAlso: AH=12h/BH=06h ———-1512–BH08————————- INT 15 - TopView - SEND MESSAGE - “SIZEOF” - GET OBJECT SIZE

AH = 12h
BH = 08h
BL = object
    00h handle in DWORD on top of stack
	window: total character positions in window
	timer: elapsed time since timer started
	pointer: number of messages queued to pointer object
	panel: number of panels in panel file
	keyboard: number of input buffers queued
    01h total chars in current task's default window
    02h number of messages in task's mailbox (task's handle on stack)
    03h number of messages in current task's mailbox
    04h number of input buffers queued in task's kbd (handle on stack)
    05h number of input buffers queued for current task's default kbd
    06h number of objects queued in OBJECTQ (task's handle on stack)
    07h number of objects queued in current task's OBJECTQ
    0Ch (DV 2.26+) total chars in window owning handle on top of stack
    0Dh (DV 2.26+) total chars in parent task's window

Return: DWORD on top of stack is result Note: for panel objects, a count of zero is returned if no panel file is open

  for the object

SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h ———-1512–BH09————————- INT 15 - TopView - SEND MESSAGE - “LEN” - GET OBJECT LENGTH

AH = 12h
BH = 09h
BL = object
    00h handle in DWORD on top of stack
	window: get chars/line
	timer: get 1/100 seconds remaining before timer expires
    01h get number of chars/line in current task's default window
    0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
    0Dh (DV 2.26+) get chars/line in parent task's window

Return: DWORD on top of stack is length SeeAlso: AH=12h/BH=08h ———-1512–BH0A————————- INT 15 - TopView - SEND MESSAGE - “ADDTO” - WRITE CHARS AND ATTRIBS TO WINDOW

AH = 12h
BH = 0Ah
BL = window to write to
    00h window handle is DWORD on top of stack
    01h current task's default window
    0Ch (DV 2.26+) default window of task owning handle on top of stack
    0Dh (DV 2.26+) default window of parent of current task
STACK:	DWORD count of attributes
	DWORD address of attribute string
	DWORD count of characters
	DWORD address of character string

Notes: if one string is longer than the other, the shorter one will be reused

  until the longer one is exhausted
the cursor is left just after the last character written

SeeAlso: AH=12h/BH=0Bh“WINDOW” ———-1512–BH0A————————- INT 15 - TopView - SEND MESSAGE - “ADDTO” - SEND MAILBOX MESSAGE/STAT BY VALUE

AH = 12h
BH = 0Ah
BL = mailbox to write to
    00h handle is DWORD on top of stack
    02h default mailbox of task whose handle is on top of stack
    03h current task's default mailbox
STACK:	DWORD	status (low byte)
	DWORD	length of message
	DWORD	address of message

Notes: the message is copied into either system or common memory

insufficient memory normally causes the process to be aborted; under
  DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)

SeeAlso: AH=12h/BH=0Bh“MAILBOX” ———-1512–BH0A————————- INT 15 - TopView - SEND MESSAGE - “ADDTO” - SET OBJECT BITS

AH = 12h
BH = 0Ah
BL = object
    00h handle is DWORD on top of stack
	timer: start timer for specified interval
	pointer: set control flags
	keyboard: set control flags
    04h set control flags on KEYBOARD object (handle on top of stack)
    05h set control flags on task's default KEYBOARD object
STACK: (if timer)   DWORD duration in 1/100 seconds
       (otherwise)  DWORD bits to set

SeeAlso: AH=12h/BH=0Bh“OBJECT”

For keyboard objects, the bits have the following significance:

bit 15 reserved, can't be set
bit 14 unused
bit 13 reserved, can't be set
bit 12-6 unused
bit 5  (DV 2.2+) exclusive input
bit 4  filter all keys (used with handler established by SETESC)
	if 0, only keys that would normally be displayed are filtered
bit 3  program continues executing while input in progress
bit 2  insert mode active for field mode
bit 1  hardware cursor displayed when task is hardware cursor owner
	must be set if keyboard in field mode and field table includes
	input fields
bit 0  keyboard is in field mode rather than keystroke mode

For pointer objects, the bits have the following significance:

bit 15 reserved, can't be set
bit 14-8 unused
bit 7  mouse pointer is hidden while in window
bit 6  get messages even if window not topmost
bit 5  get messages even if window not foreground
bit 4  multiple clicks separated by less than 1/3 second are counted
	and returned in a single message
bit 3  pointer position is relative to screen origin, not window origin
bit 2  send message on button release as well as button press
bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
	pointer leaves the window
bit 0  send message only on button activity, not movement
       DV-specific, and INT 15/AX=DE0Fh must have been called first

———-1512–BH0B————————- INT 15 - TopView - SEND MESSAGE - “SUBFROM” - WRITE ATTRIBUTES TO WINDOW

AH = 12h
BH = 0Bh
BL = window to write attributes to
    00h handle is DWORD on top of stack
    01h current task's default window
    0Ch (DV 2.26+) default window of task owning handle on top of stack
    0Dh (DV 2.26+) default window of parent of current task
STACK:	DWORD number of attributes to write
	DWORD address of attributes

Note: the attributes are written starting at the current cursor position; the

  cursor is left just after the last position written

SeeAlso: AH=12h/BH=0Ah“WINDOW” ———-1512–BH0B————————- INT 15 - TopView - SEND MESSAGE - “SUBFROM” - SEND MAILBOX MESSAGE/STAT BY REF

AH = 12h
BH = 0Bh
BL = mailbox to write to
    00h handle is DWORD on top of stack
    02h default mailbox of task whose handle is on top of stack
    03h current task's default mailbox
STACK:	DWORD	status (low byte)
	DWORD	length of message
	DWORD	address of message

Notes: only a pointer to the message is stored, but the write may still fail

  due to insufficient memory
under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)

SeeAlso: AH=12h/BH=0Ah“MAILBOX” ———-1512–BH0B————————- INT 15 - TopView - SEND MESSAGE - “SUBFROM” - REMOVE OBJECT FROM OBJECTQ

AH = 12h
BH = 0Bh
BL = OBJECTQ from which to remove all copies of a particular object
    06h OBJECTQ of task whose handle is on top of stack
    07h task's default OBJECTQ
STACK:	DWORD	handle of object to remove

Note: should be sent whenever an object is erased or closed ———-1512–BH0B————————- INT 15 - TopView - SEND MESSAGE - “SUBFROM” - RESET OBJECT BITS

AH = 12h
BH = 0Bh
BL = object
    00h handle is DWORD on top of stack
	pointer: reset control flags
	keyboard: reset control flags
    04h clear control flags on KEYBOARD object (handle on top of stack)
    05h clear control flags on task's default KEYBOARD object
STACK:	DWORD	which bits to clear (see AH=12h/BH=0Ah"OBJECT")

SeeAlso: AH=12h/BH=0Ah“OBJECT” ———-1512–BH0C————————- INT 15 - TopView - SEND MESSAGE - “OPEN” - OPEN OBJECT

AH = 12h
BH = 0Ch
BL = object
    00h handle is DWORD on top of stack
	window:	  fill with given character from scroll origin to end
	keyboard: attach to a window
	timer:	  open
	pointer:  start taking input for window
	panel:	  associate with a panel file
    01h fill task's default window with given char from scrl org to end
    02h open given task's mailbox for input (task's handle on stack)
    03h open current task's mailbox
    04h attach a KEYBOARD to a window (handle on top of stack)
    05h attach task's default KEYBOARD to a window
    06h open a task's OBJECTQ (task's handle on top of stack)
    07h open current task's OBJECTQ
    0Ch (DV 2.26+) fill def window of task owning handle on top of stck
    0Dh (DV 2.26+) fill default window of parent of current task
 STACK: (if window)   DWORD character to fill with
	(if keyboard) DWORD handle of window to attach to
	(if pointer)  DWORD handle of window to attach to
	(if panel)    DWORD length of filename or resident panel
		      DWORD address of filename or resident panel
	(otherwise)   nothing

Notes: if first byte of panel file name is 1Bh, then the “name” IS a panel

if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  the panel file
result code of open may be retrieved with STATUS message
logical cursor is left at scroll origin after filling window
the task opening a mailbox becomes its owner, and the only task allowed
  to read the mailbox
messages are only sent to a pointer object when the mouse is positioned
  in the window to which the pointer has been attached
there is no need to explicitly open a timer object, as ADDTO and WRITE
  messages automatically open the timer

SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h“LOCK” ———-1512–BH0D————————- INT 15 - TopView - SEND MESSAGE - “CLOSE” - CLOSE OBJECT

AH = 12h
BH = 0Dh
BL = object
    00h handle is DWORD on top of stack
	timer:	  close
	keyboard: detach from window and discard queued input
	pointer:  stop taking input
	panel:	  close
	mailbox:  close, unlock, and discard any pending messages
    02h close given task's mailbox (task's handle on top of stack)
    03h close task's default mailbox
    04h close KEYBOARD object (handle on top of stack)
    05h close task's default KEYBOARD
    06h close givent task's OBJECTQ (task's handle on top of stack)
    07h close current task's OBJECTQ

Notes: when an OBJECTQ is closed, each object in the OBJECTQ is sent an

  ERASE message (AH=12h/BH=0Eh)
when a panel object is closed, the panel file and any panels currently
  in use are freed; window and keyboard objects created by APPLY are
  not affected, but field mode input ceases
open but idle timer objects consume a small amount of CPU time

SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h“LOCK” ———-1512–BH0E————————- INT 15 - TopView - SEND MESSAGE - “ERASE” - ERASE OBJECT

AH = 12h
BH = 0Eh
BL = object
    00h handle is DWORD on top of stack
	window:	  clear from scroll origin to end of window
	keyboard: discard input
	timer:	  cancel current interval
	pointer:  discard all pending messages
	mailbox:  discard all pending messages
    01h clear task's default window from scroll origin to end
    02h discard all queued messages in mailbox (handle on top of stack)
    03h discard all queued messages in current task's default mailbox
    04h discard all input queued to KEYBOARD (handle on top of stack)
    05h discard all input queued to task's default KEYBOARD
    06h remove all objects from OBJECTQ (task's handle on top of stack)
    07h remove all objects from current task's OBJECTQ
    0Ch (DV 2.26+) clear window of task owning handle on top of stack
    0Dh (DV 2.26+) clear default window of parent of current task

Note: when an OBJECTQ is erased, each object in the OBJECTQ is also erased SeeAlso: AH=12h/BH=02h ———-1512–BH0F————————- INT 15 - TopView - SEND MESSAGE - “STATUS” - GET OBJECT STATUS

AH = 12h
BH = 0Fh
BL = object
    00h handle is DWORD on top of stack
	timer:	 is it running?
	pointer: return status of last message
	panel:	 verify success of last OPEN or APPLY
    02h return status of last msg READ from mailbox (handle on stack)
    03h return status of last msg READ from task's default mailbox
    04h get status of last msg from task's KEYBOARD (task handle on stk)
    05h get status of last msg from task's default KEYBOARD
    06h return whether OBJECTQ is open or not (handle on top of stack)
    07h return whether task's default OBJECTQ is open or not

Return: DWORD on top of stack is status Notes: if object is a panel object, the status indicates the error code:

  00h successful
  14h panel name not in panel directory
  15h not enough memory to apply panel
  16h invalid panel format
  17h panel file already open
  81h-92h  DOS error codes+80h			\  codes > 80h indicate
  95h not enough memory to open panel file	 > that the panel was
  98h null panel file name			/  not opened
if object is a timer, the status is:
  00000000h open but not running
  40000000h open and running
  80000000h closed
if object is an OBJECTQ, the status is:
  00000000h open
  80000000h closed
if object is a keyboard in keystroke mode, the status is the extended
  character code (scan code) of teh last keystroke
if object is a keyboard in field mode, the status indicates the reason
  for the last return from the field manager
  00h Enter key pressed
  01h Button 1 or keystroke selection
  02h Button 2
  03h validation
  04h auto Enter on field
  1Bh Escape pressed
  46h ^Break pressed
  other: extended code for key terminating input
the status of mailbox messages sent by the window manager is always 80h
the status of a pointer message is the same as the status field in the
  message

SeeAlso: AH=12h/BH=04h“READ” ———-1512–BH10————————- INT 15 - TopView - SEND MESSAGE - “EOF” - GET OBJECT EOF STATUS

AH = 12h
BH = 10h
BL = object
    00h handle is DWORD on top of stack
	window: return TRUE if logical cursor past end of window
	mailbox: ???
    01h returns TRUE if logical cursor past end of task's def window
    02h return ??? for task's mailbox (task's handle on top of stack)
    03h return ??? for current task's mailbox
    0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
    0Dh (DV 2.26+) check log cursor of window of parent task

Return: DWORD on top of stack is status ———-1512–BH11————————- INT 15 - TopView - SEND MESSAGE - “AT” - POSITION OBJECT CURSOR

AH = 12h
BH = 11h
BL = window for which to move cursor
    00h window's handle is DWORD on top of stack
    01h task's default window
    0Ch (DV 2.26+) default window of task owning handle on top of stack
    0Dh (DV 2.26+) default window of parent of current task
STACK: DWORD column
       DWORD row

———-1512–BH11————————- INT 15 - TopView - SEND MESSAGE - “SETNAME” - ASSIGN NAME TO MAILBOX

AH = 12h
BH = 11h
BL = mailbox to name
    00h DWORD on top of stack is mailbox handle
    02h use given task's mailbox (task's handle on top of stack)
    03h use current task's default mailbox
STACK: DWORD length of name
       DWORD address of name

SeeAlso: AX=DE0Eh ———-1512–BX1100———————– INT 15 - TopView - SEND MESSAGE - “SETSCALE” - SET POINTER SCALE FACTOR

AH = 12h
BX = 1100h
STACK: DWORD object handle for pointer object
       DWORD number of colums to scale pointer position to
       DWORD number of rows to scale pointer position to

SeeAlso: AH=12h/BX=1200h ———-1512–BH12————————- INT 15 - TopView - SEND MESSAGE - “READN” - GET NEXT N OBJECT BYTES

AH = 12h
BH = 12h
BL = window to read from
    00h handle is DWORD on top of stack
    01h read next N chars or attributes on task's default window
    0Ch (DV 2.26+) read window of task owning handle on top of stack
    0Dh (DV 2.26+) read default window of parent of current task
STACK: DWORD count

Return: STACK: DWORD width of screen line

       DWORD address
       DWORD count actually read

Notes: reading starts at the current logical cursor position; the cursor is

  updated to point at the character following the last one read
any translucent blanks (FFh) which are visible on screen are changed
  to the character which is seen through them
the string produced by the read is placed in an input buffer which may
  be reused by the next READ or READN of a window
window stream opcodes D8h and D9h determine whether the read returns
  characters or attributes

SeeAlso: AH=12h/BH=04h“WINDOW”,AH=12h/BH=05h“WINDOW” ———-1512–BX1200———————– INT 15 - TopView - SEND MESSAGE - “GETSCALE” - GET POINTER SCALE FACTOR

AH = 12h
BX = 1200h
STACK: DWORD object handle for pointer

Return: STACK: DWORD pointer pos scaled as if window were this many colums wide

       DWORD pointer pos scaled as if window were this many rows high

SeeAlso: AH=12h/BX=1100h ———-1512–BH13————————- INT 15 - TopView - SEND MESSAGE - “REDRAW” - REDRAW WINDOW

AH = 12h
BH = 13h
BL = window object
    00h DWORD on top of stack is handle for window to redraw
    01h redraw task's default window
    0Ch (DV 2.26+) redraw window of task owning handle on top of stack
    0Dh (DV 2.26+) redraw default window of parent of current task

SeeAlso: AH=12h/BH=05h“WINDOW”,AH=12h/BH=0Eh ———-1512–BX1300———————– INT 15 - TopView - SEND MESSAGE - “SETICON” - SPECIFY POINTER ICON

AH = 12h
BX = 1300h
STACK: DWORD object handle for pointer
       DWORD character to use for pointer

———-1512–BH14————————- INT 15 - TopView - SEND MESSAGE - “SETESC” - SET ESCAPE ROUTINE ADDRESS

AH = 12h
BH = 14h
BL = message modifier
    00h handle is DWORD on top of stack
    01h define user stream
    04h intercept keystrokes from KEYBOARD to a window (handle on stack)
    05h intercept keystrokes from task's default KEYBOARD to a window
STACK: (if window)   DWORD user stream number (14h-1Fh)
		     DWORD address of FAR user stream handler
       (if keyboard) DWORD address of FAR filter function

The keyboard filter function is called when the keyboard is in field mode. On entry,

AL = character
AH = 00h or extended ASCII code if AL = 00h
BL = field number
CH = cursor column
CL = cursor row
DL = field type modifier (sixth item in field table entry)
DH = seventh item in field table entry
ES:SI = window's handle
DS:DI -> field table entry for field containing the cursor

The filter function should return

AH = 00h use keystroke
     01h ignore keystroke
     FFh beep and ignore keystroke

Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls ———-1512–BH14————————- INT 15 - TopView - SEND MESSAGE - “LOCK” - REQUEST EXCLUSIVE ACCESS TO RESOURCE

AH = 12h
BH = 14h
BL = object
    00h mailbox handle is DWORD on top of stack
    02h use given task's mailbox (task's handle on top of stack)
    03h use current task's default mailbox

Note: release exclusive access by sending CLOSE message to mailbox

access may be requested multiple times, and requires multiple CLOSEs

SeeAlso: AH=12h/BH=0Dh ———-1512–BH15————————- INT 15 - DESQview v2.20+ - SEND MESSAGE - “SETFLAGS” - SET OBJECT FLAGS

AH = 12h
BH = 15h
BL = object
    00h DWORD on top of stack
	mailbox, keyboard, or pointer only
    02h mailbox for task whose handle is on top of stack
    03h mailbox for current task
    04h keyboard for task whose handle is on top of stack
    05h keyboard for current task
STACK: DWORD flags
	if mailbox:
		bit 0: all mail messages in common memory
		bit 1: allow write even if closed
		bit 2: don't erase messages when mailbox closed
	if keyboard:
		bit 5: exclusive input when keyboard in use for input

Return: nothing Notes: only available if the API level has been set to at least 2.20

equivalent to performing SUBFROM and ADDTO calls on the object

SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h ———-1512–BH16————————- INT 15 - DESQview v2.20+ - SEND MESSAGE - “GETFLAGS” - GET OBJECT FLAGS

AH = 12h 
BH = 16h
BL = object
    00h DWORD on top of stack
	mailbox, keyboard, or pointer only
    02h mailbox for task whose handle is on top of stack
    03h mailbox for current task
    04h keyboard for task whose handle is on top of stack
    05h keyboard for current task

Return: STACK: DWORD current control flags Note: only available if the API level has been set to at least 2.20 SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=15h ———-1512–BH17————————- INT 15 - DESQview v2.42-2.52 - BUG

AH = 12h
BH = 17h
BL = object
    00h DWORD on top of stack
	mailbox, keyboard, or pointer only
    02h mailbox for task whose handle is on top of stack
    03h mailbox for current task
    04h keyboard for task whose handle is on top of stack
    05h keyboard for current task

Notes: due to a fencepost error, message 17h is accepted for mailboxes,

  keyboards, and pointers, but causes a random branch
DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02

———-1513——————————- INT 15 - VMiX - WAKE PROCESS

AH = 13h
STACK:	WORD	process ID

Return: AX = status SeeAlso: AH=12h“VMiX” ———-1513——————————- INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK

AH = 13h

Return: BX:AX → task control block (see below) SeeAlso: AH=15h“MultiDOS”

Format of MultiDOS Plus v4.0 task control block: Offset Size Description 00h DWORD pointer to next TCB 04h 8 BYTEs ASCIZ task name 0Ch 2 BYTEs ??? 0Eh WORD task PSP segment 10h WORD abort/suspend flags 12h WORD current screen segment (see AH=0Bh,AH=0Ch) 14h WORD priority level (0000h-FFFEh) 16h WORD time slice counter 18h 2 BYTEs ??? 1Ah WORD suspend timer value 1Ch WORD stack segment 1Eh WORD stack pointer 20h WORD display type 22h WORD display memory 24h 2 BYTEs ??? 26h WORD termination count 28h WORD equipment flag for BIO10 driver 2Ah BYTE background CRT mode 2Bh WORD screen width in columns 2Dh WORD screen size in bytes 2Fh WORD segment of physical screen memory 31h 16 BYTEs eight cursor positions 41h WORD current cursor shape 43h BYTE active display page 44h WORD CRT controller I/O port base 46h 2 BYTEs ??? 48h WORD foreground task flag 4Ah 6 BYTEs ??? 50h WORD saved video segment (see AH=0Bh,AH=0Ch) 52h DWORD old INT 22 56h DWORD old INT 23 5Ah DWORD old INT 24 5Eh WORD top of memory for task 60h 4 BYTEs ??? 64h WORD DTA segment (see INT 21/AH=1Ah) 66h WORD DTA offset 68h 4 BYTEs ??? 6Ch BYTE current ANSI.SYS attribute 6Dh BYTE current ANSI.SYS column 6Eh BYTE current ANSI.SYS row 6Fh BYTE current ANSI.SYS display state 70h BYTE maximum ANSI.SYS columns 71h BYTE current ANSI.SYS page 72h WORD saved ANSI.SYS cursor position 74h BYTE ANSI.SYS parameter buffer index 75h BYTE current ANSI.SYS screen mode 76h BYTE ANSI.SYS wrap flag 77h 6 BYTEs ANSI.SYS parameter buffer 7Dh BYTE ANSI.SYS keyboard DSR state 7Eh 7 BYTEs ANSI.SYS keyboard DSR buffer 85h 3 BYTEs ??? 88h 16 BYTEs request header for DOS driver calls 98h 14 BYTEs ??? A6h WORD segment of EMS map if EMS task A8h WORD flag: task makes EMS calls AAh WORD EMS handle for task ACh WORD keyboard shift state AEh 12 BYTEs ??? BAh WORD TCB of parent if child task BCh WORD termination code BEh WORD COM port number C0h 4 BYTEs ??? C4h WORD current IRQ number C6h 2 BYTEs ??? C8h WORD miscellaneous flag word CAh 2 BYTEs ??? CCh DWORD old INT 10 D0h WORD EMS alternate map set number D2h 414 BYTEs DOS current disk and directory context (optional) ———-1514——————————- INT 15 - VMiX - CLEAR WINDOW

AH = 14h
STACK:	WORD	top left corner of window
	WORD	bottom right corner of window

Return: AX = status SeeAlso: AH=15h“VMiX” ———-1514——————————- INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND

AH = 14h

Return: AX = current state

    0000h MultiDOS Plus command prompt is background task
    0001h command prompt is foreground task

SeeAlso: AH=0Bh“MultiDOS” ———-1515——————————- INT 15 - VMiX - SET BANNER WINDOW MESSAGE

AH = 15h
STACK:	DWORD	pointer to ASCIZ banner	message

Return: AX = status SeeAlso: AH=14h“VMiX” ———-1515——————————- INT 15 - MultiDOS Plus - GET SYSTEM BLOCK

AH = 15h

Return: BX:AX → system block (see below) SeeAlso: AH=13h“MultiDOS”

Format of MultiDOS Plus 4.0 system block: Offset Size Description 00h WORD segment of system control block 02h WORD redirection flag set by /NOREDIRECT 04h WORD no-INT 10 flag set by /NO10 06h DWORD old INT 10 0Ah DWORD new INT 10 0Eh DWORD pointer to WORD with current TCB offset (see AH=13h) 12h DWORD pointer to WORD with idle task TCB offset 16h DWORD pointer to WORD with foreground TCB offset 1Ah DWORD pointer to WORD with MultiDOS TCB offset 1Eh WORD Task Control Block size 20h WORD number of TCBs 22h WORD flag: EMS present 24h WORD EMS page frame base segment 26h WORD 16K pages in EMS page frame 28h WORD base segment for conventional memory tasks 2Ah WORD conventional memory size in paragraphs 2Ch DWORD pointer to list of queue pointers ———-1516——————————- INT 15 - VMiX - SET ROOT WINDOW SIZE AND HOME CURSOR

AH = 16h
STACK:	DWORD	pointer to I/O Request Packet
	WORD	top left corner of window
	WORD	bottom right corner of window

Return: AX = status SeeAlso: AH=17h“VMiX” ———-1516——————————- INT 15 - MultiDOS Plus - INITIALIZATION

AH = 16h

Note: used internally during initialization; any other calls will cause

  unpredicatable results

———-1517——————————- INT 15 - VMiX - GET CONSOLE WINDOW COLORS

AH = 17h

Return: AH = foreground color

AL = background color

SeeAlso: AH=16h“VMiX”,AH=18h“VMiX” ———-1517——————————- INT 15 - MultiDOS Plus - MAP IRQ

AH = 17h
AL = IRQ to map (01h-0Fh)
BX = offset of task control block (see AH=13h) to associate with IRQ

Return: AX = status

    0000h successful
    other invalid IRQ

Note: the EMS map of the specified TCB is associated with the given interrupt SeeAlso: AH=18h“MultiDOS”,AH=19h“MultiDOS” ———-1518——————————- INT 15 - VMiX - SET CONSOLE COLORS

AH = 18h
STACK:	WORD	new background/foreground colors

Return: AX = color SeeAlso: AH=17h“VMiX” ———-1518——————————- INT 15 - MultiDOS Plus - UNMAP IRQ

AH = 18h
AL = IRQ to unmap (01h-0Fh)

Return: AX = status

    0000h successful
    0001h invalid IRQ

Note: results are unpredictable if the IRQ has not been mapped SeeAlso: AH=17h“MultiDOS”,AH=19h“MultiDOS” ———-1519——————————- INT 15 - VMiX v2+ - ???

AH = 19h
STACK: WORD ???

Return: ??? ———-1519——————————- INT 15 - MultiDOS Plus - UNMAP ALL IRQs

AH = 19h

Return: AX destroyed Note: for MultiDOS internal use only SeeAlso: AH=17h“MultiDOS”,AH=18h“MultiDOS” ———-151A——————————- INT 15 - VMiX v2+ - ???

AH = 1Ah
STACK: 3 WORDs ???

Return: ??? ———-151A——————————- INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER

AH = 1Ah
DS:SI -> 8-byte name

Return: AL = status

    00h successful
	AH = semaphore number (20h-3Fh)
    04h out of string space

Notes: all eight bytes of the name are significant

if the name does not already exist, it is added to the name table and
  associated with a free semaphore number
names cannot be destroyed

SeeAlso: AH=1Bh“MultiDOS”,AH=1Ch“MultiDOS”,AH=1Dh“MultiDOS” ———-151B——————————- INT 15 - VMiX v2+ - ???

AH = 1Bh
STACK: 5 WORDs ???

Return: ??? ———-151B——————————- INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME

AH = 1Bh
DS:SI -> 8-byte name

Return: AH = status

    00h successful
    02h invalid semaphore number
    03h caller already owns semaphore
    04h out of string space

Notes: (see notes for AH=01h“MultiDOS”)

equivalent to AH=1Ah followed by AH=01h

SeeAlso: AH=01h“MultiDOS”,AH=1Ah“MultiDOS”,AH=1Ch“MultiDOS”,AH=1Dh“MultiDOS” ———-151C——————————- INT 15 - VMiX v2+ - ???

AH = 1Ch
STACK: 5 WORDs ???

Return: ??? ———-151C——————————- INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME

AH = 1Ch
DS:SI -> 8-byte name

Return: AH = status

    00h successful
    01h not semaphore owner
    02h invalid semaphore number
    04h out of string space

Notes: (see notes for AH=02h“MultiDOS”)

equivalent to AH=1Ah followed by AH=02h

SeeAlso: AH=02h“MultiDOS”,AH=1Ah“MultiDOS”,AH=1Bh“MultiDOS”,AH=1Dh“MultiDOS” ———-151D——————————- INT 15 - VMiX v2+ - ???

AH = 1Dh
???

Return: ??? ———-151D——————————- INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME

AH = 1Dh
DS:SI -> 8-byte name

Return; AH = status

    00h semaphore not in use
    01h semaphore owned by another task
    02h invalid semaphore number
    03h caller owns semaphore
    04h out of string space

Notes: (see notes for AH=10h“MultiDOS”)

equivalent to AH=1Ah followed by AH=10h

SeeAlso: AH=10h“MultiDOS”,AH=1Ah“MultiDOS”,AH=1Bh“MultiDOS”,AH=1Ch“MultiDOS” ———-151E——————————- INT 15 - VMiX v2+ - ???

AH = 1Eh
STACK: WORD ???

Return: ??? ———-151E00—————————– INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER

AX = 1E00h
DX = event/trigger number (00h-3Fh)

Return: AH = status

    00h successful

SeeAlso: AX=1E01h,AX=1E02h ———-151E01—————————– INT 15 - MultiDOS Plus - TRIGGER EVENT

AX = 1E01h
DX = event/trigger number (00h-3Fh)

Return: AH = status

    00h successful
    01h invalid event/trigger number

Notes: schedules any task waiting for event; if no task is waiting, the event

  counter is incremented (and will roll over if it was 65535)
may be invoked by interrupt handler

SeeAlso: AX=1E00h,AX=1E02h ———-151E02—————————– INT 15 - MultiDOS Plus - WAIT FOR EVENT

AX = 1E02h
DX = event/trigger number (00h-3Fh)

Return: AH = status

    00h successful
    01h invalid event/trigger number

Note: if the event counter is zero, the task is suspended until the event is

  triggered with AX=1E01h; else, the counter is decremented and the
  call returns immediately

SeeAlso: AX=1E00h,AX=1E01h ———-151F——————————- INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS

AH = 1Fh

Return: BX = first segment of conventional memory

DX = first segment of EMS swap frame into which MultiDOS will load
	programs

———-1520——————————- INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED

AH = 20h

Return: AX = current state

    0000h multitasking enabled
    other TCB of task that disabled multitasking

SeeAlso: AH=0Dh“MultiDOS”,AH=13h“MultiDOS” ———-152000—————————– INT 15 - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG

AX = 2000h

SeeAlso: AX=2001h ———-152001—————————– INT 15 - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG

AX = 2001h
ES:BX -> byte which is to be incremented while in a DOS call

SeeAlso: AX=2000h ———-152010—————————– INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)

AX = 2010h
???

Return: ??? SeeAlso: AX=2011h ———-152011—————————– INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)

AX = 2011h
???

Return: ??? SeeAlso: AX=2010h ———-1521——————————- INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)

AH = 21h
AL = subfunction
    00h read POST log
    01h write POST log
	BH = device ID
	BL = error code

Return: CF set on error

AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
if function 00h:
   BX = number of error codes stored
   ES:DI -> error log

Note: the log is a series of words, the first byte of which identifies the

  error code and the second the device.

———-152400—————————– INT 15 - Qualitas 386MAX v6.01 - TURN ON ???

AX = 2400h

Return: CF clear

AH = 00h

———-152401—————————– INT 15 - Qualitas 386MAX v6.01 - TURN OFF ???

AX = 2401h

Return: CF clear

AH = 00h

———-152402—————————– INT 15 - Qualitas 386MAX v6.01 - GET STATE OF ???

AX = 2402h

Return: CF clear

AH = 00h
AL = current state (00h off, 01h on)

———-152403—————————– INT 15 - Qualitas 386MAX v6.01 - GET ???

AX = 2403h
???

Return: CF clear

AH = 00h
BX = bit flags???
    bit 0: ???
    bit 1: ???

Note: reportedly also used by some PS/2 models ———-1540——————————- INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)

AH = 40h
AL = subfunction
    00h get system profile in CX and BX
    01h set system profile from CX and BX
    02h get internal modem profile in BX
    03h set internal modem profile from BX

———-154000—————————– INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT

AX = 4000h

Return: AX = 4000h

CL = 00h timeout disabled
   else timeout in minutes

SeeAlso: AX=4001h,AX=4600h ———-154001CL00————————- INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT

AX = 4001h
CL = 00h timeout disabled
   else	 timeout in minutes

Return: AL = 00h timeout modified

     01h timeout cannot be modified
     40h timeout cannot be modified
CL = 00h timeout disabled
   else timeout in minutes

SeeAlso: AX=4000h,AX=4601h ———-1541——————————- INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE)

AH = 41h
AL = condition type
    bits 0-2: condition to wait for
	     0 any external event
	     1 compare and return if equal
	     2 compare and return if not equal
	     3 test and return if not zero
	     4 test and return if zero
    bit 3:    reserved
    bit 4:    1=port address, 0=user byte
    bits 5-7: reserved
BH = condition compare or mask value
BL = timeout value times 55 milliseconds
    00h means no timeout
DX = I/O port address if AL bit 4 set
ES:DI -> user byte if AL bit 4 clear

———-1542——————————- INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE)

AH = 42h
AL = 00h to use system profile
     01h to force suspend regardless of system profile

SeeAlso: AH=44h ———-154280—————————– INT 15 - Compaq SLT/286 - ENTER STANDBY

AX = 4280h

Return: AH = 42h

CF clear if successful
CF set if unable to enter standby

SeeAlso: AX=4600h,AX=5307h/BX=0001h/CX=0001h ———-1543——————————- INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)

AH = 43h

Return: AL = status bits

    bit 0: LCD detached
    bit 1: reserved
    bit 2: RS232/parallel adapter powered on
    bit 3: internal modem powered on
    bit 4: power activated by alarm
    bit 5: standby power lost
    bit 6: external power in use
    bit 7: power low

———-1544——————————- INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)

AH = 44h
AL = 00h to power off
     01h to power on

SeeAlso: AH=42h ———-154600—————————– INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION

AX = 4600h

Return: AH = modem configuration information

    bit 0 powerup state
	    0 off
	    1 on
	1 modem installed
	2 IRQ line assignment
	    0 IRQ 4
	    1 IRQ 3
	3 COM port assignment
	    0 = COM 2
	    1 = COM 1
	4 modem state
	    0 not assigned
	    1 assigned
	5 modem is on
AL = power conservation status information
    bit 0  power source (0 internal, 1 external)
       1-2 low battery state
	    00 no low battery condition
	    01 low battery 1
	    10 reserved
	    11 low battery 2
       3-4 power conservation mode
	    00 automatic
	    01 on
	    10 off
	    11 reserved
BH = default system inactivity timeout (1-21 minutes)
BL = current system inactivity timeout (1-21 minutes)
CH = default video display inactivity timeout (1-63 minutes)
CL = current video display inactivity timeout (1-63 minutes)	    
DH = default fixed disk drive inactivity timeout (1-21 minutes)
DL = current fixed disk drive inactivity timeout (1-21 minutes)

SeeAlso: AX=4280h,AX=4601h,INT 77 ———-154601—————————– INT 15 - Compaq SLT/286 - Modify Power Conservation/Modem Configuration

AX = 4601h
BL = system inactivity timeout (1-21 minutes)
   = FFh do not change
CL = video display inactivity timeout (1-63 minutes)	    
   = FFh do not change
DL = current fixed disk drive inactivity timeout (1-21 minutes)
   = FFh do not change
DH = 00h turn modem OFF
   = 01h turn modem ON
   = FFh do not change modem state

Return: CF clear if successful

    AH = 00h
    BL = current system inactivity timeout (1-21 minutes)
    CL = current video display inactivity timeout (1-63 minutes)	
    DL = current fixed disk drive inactivity timeout (1-21 minutes)
    DH = FFh modem state unchanged
       = 00h modem turned OFF
       = 01h modem turned ON
CF set on error
    AH = 01h input is out of range
       = 02h - No modem present

SeeAlso: AX=4600h,INT 77 ———-154DD4—————————– INT 15 - HP 95LX - INSTALLATION CHECK

AX = 4DD4h

Return: BX = 4850h (“HP”) if HP 95LX

    CX = ??? (0101h)
    DL = ??? (00h)

SeeAlso: INT 0B“HP 95LX”,INT 0F“HP 95LX”,INT 5F/AH=00h,INT 60/DI=0100h SeeAlso: INT 61“HP 95LX” ———-154E——————————- INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP

AH = 4Eh
AL = light sleep
    00h disabled
    01h enabled

Note: when light sleep is disabled, the system will continue running at full

  speed; when enabled, it may automatically slow to conserve batteries

SeeAlso: INT 06“HP 95LX”,INT 60/DI=0100h ———-154F——————————- INT 15 - OS HOOK - KEYBOARD INTERCEPT (AT model 3×9,XT2,XT286,CONV,PS)

AH = 4Fh
AL = hardware scan code
CF set

Return: CF set

   AL = hardware scan code
CF clear
   scan code should be ignored

Note: called by INT 9 handler to translate scan codes; the INT 09 code does

  not examine the scan code it reads from the keyboard until after
  this function returns.  This permits software to rearrange the
  keyboard; for example, swapping the CapsLock and Control keys, or
  turning the right Shift key into Enter.

SeeAlso: INT 09,INT 15/AH=C0h ———-155300BX0000———————– INT 15 - Advanced Power Management Specification - INSTALLATION CHECK

AX = 5300h
BX = 0000h (device ID of system BIOS)

Return: CF clear if successful

    AH = major version (BCD)
    AL = minor version (BCD)
    BX = 504Dh ("PM")
    CX = flags
        bit 0: 16-bit protected mode interface supported
	bit 1: 32-bit protected mode interface supported
	bit 2: CPU idle call reduces processor speed
	bit 3: BIOS power management disabled
	bits 4-7 reserved
CF set on error
    AH = error code (86h) (see below)

Values for error code: 01h power management functionality disabled 02h interface connection already in effect 03h interface not connected 04h real-mode interface not connected 05h 16-bit protected-mode interface already connected 06h 16-bit protected-mode interface not supported 07h 32-bit protected-mode interface already connected 08h 32-bit protected-mode interface not supported 09h unrecognized device ID 0Ah invalid parameter value in CX 0Bh-1Fh reserved for other interface and general errors 20h-3Fh reserved for CPU errors 40h-5Fh reserved for device errors 60h can't enter requested state 61h-7Fh reserved for other system errors 80h no power management events pending 81h-85h reserved for other power management event errors 86h APM not present 87h-9Fh reserved for other power management event errors ———-155301BX0000———————– INT 15 - Advanced Power Management Specification - CONNECT REAL-MODE INTERFACE

AX = 5301h
BX = 0000h (device ID of system BIOS)

Return: CF clear if successful

CF set on error
    AH = error code (02h,09h) (see AX=5300h)

SeeAlso: AX=5302h,AX=5303h,AX=5304h ———-155302BX0000———————– INT 15 R - Advanced Power Management Spec - CONNECT 16-BIT PROTMODE INTERFACE

AX = 5302h
BX = 0000h (device ID of system BIOS)

Return: CF clear if successful

    AX = real-mode segment base address of protected-mode 16-bit code
    	segment
    BX = offset of entry point
    CX = real-mode segment base address of protected-mode 16-bit data
    	segment
CF set on error
    AH = error code (05h,06h,09h) (see AX=5300h)

Notes: the caller must initialize two consecutive descriptors with the

  returned segment base addresses; these descriptors must be valid
  whenever the protected-mode interface is called, and will have
  their limits arbitrarily set to 64K.
the protected mode interface is invoked by making a far call with the
  same register values as for INT 15; it must be invoked while CPL=0,
  the code segment descriptor must have a DPL of 0, the stack must be
  in a 16-bit segment and have enough room for BIOS use and possible
  interrupts, and the current I/O permission bit map must allow access
  to the I/O ports used for power management.
functions 00h-03h are not available from protected mode

SeeAlso: AX=5301h,AX=5303h,AX=5304h ———-155303BX0000———————– INT 15 - Advanced Power Management Spec - CONNECT 32-BIT PROTMODE INTERFACE

AX = 5303h
BX = 0000h (device ID of system BIOS)

Return: CF clear if successful

    AX = real-mode segment base address of protected-mode 32-bit code
    	segment
    EBX = offset of entry point
    CX = real-mode segment base address of protected-mode 16-bit code
    	segment
    DX = real-mode segment base address of protected-mode 16-bit data
    	segment
CF set on error
    AH = error code (07h,08h,09h) (see AX=5300h)

Notes: the caller must initialize three consecutive descriptors with the

  returned segment base addresses for 32-bit code, 16-bit code, and
  16-bit data, respectively; these descriptors must be valid whenever
  the protected-mode interface is called, and will have their limits
  arbitrarily set to 64K.
the protected mode interface is invoked by making a far call to the
  32-bit code segment with the same register values as for INT 15; it
  must be invoked while CPL=0, the code segment descriptor must have a
  DPL of 0, the stack must be in a 32-bit segment and have enough room
  for BIOS use and possible interrupts, and the current I/O permission
  bit map must allow access to the I/O ports used for power management.
functions 00h-03h are not available from protected mode

SeeAlso: AX=5301h,AX=5302h,AX=5304h ———-155304BX0000———————– INT 15 - Advanced Power Management Specification - DISCONNECT INTERFACE

AX = 5304h
BX = 0000h (device ID of system BIOS)

Return: CF clear if successful

CF set on error
    AH = error code (03h,09h) (see AX=5300h)

SeeAlso: AX=5301h,AX=5302h,AX=5303h ———-155305—————————– INT 15 - Advanced Power Management Specification - CPU IDLE

AX = 5305h

Return: after system leaves idle state

CF clear

Notes: call when the system is idle and should be suspended until the next

  system event or interrupt
should not be called from within a hardware interrupt handler to avoid
  reentrance problems
if an interrupt causes the system to resume normal processing, the
  interrupt may or may not have been handled when the BIOS returns
  from this call; thus, the caller should allow interrupts on return
interrupt handlers may not retain control if the BIOS allows
  interrupts while in idle mode even if they are able to determine
  that they were called from idle mode
the caller should issue this call continuously in a loop until it needs
  to perform some processing of its own

SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h ———-155306—————————– INT 15 - Advanced Power Management Specification - CPU BUSY

AX = 5306h

Return: CF clear Notes: called to ensure that the system runs at full speed even on systems

  where the BIOS is unable to recognize increased activity (especially
  if interrupts are hooked by other programs and not chained to the
  BIOS)
this call may be made even when the system is already running at full
  speed, but it will create unnecessary overhead
should not be called from within a hardware interrupt handler to avoid
  reentrance problems

SeeAlso: AX=5305h ———-155307—————————– INT 15 - Advanced Power Management Specification - SET POWER STATE

AX = 5307h
BX = device ID (see below)
CX = system state ID
    0000h ready (not supported for device ID 0001h)
    0001h stand-by
    0002h suspend
    0003h off (not supported for device ID 0001h)
    0004h-FFFFh reserved

Return: CF clear if successful

CF set on error
    AH = error code (01h,09h,0Ah,60h) (see AX=5300h)

Note: should not be called from within a hardware interrupt handler to avoid

  reentrance problems

Values for device IDs: 0000h system BIOS 0001h all devices for which the system BIOS manages power 01xxh display (01FFh for all attached display devices) 02xxh secondary storage (02FFh for all attached secondary storage devices) 03xxh parallel ports (03FFh for all attached parallel ports) 04xxh serial ports (04FFh for all attached serial ports) 0500h-FFFFh reserved ———-155307BX0001———————– INT 15 - Advanced Power Management Specification - SYSTEM STAND-BY

AX = 5307h
BX = 0001h
CX = 0001h

Return: CF clear Notes: puts the entire system into stand-by mode; normally called in response

  to a System Stand-by Request notification after any necessary
  processing, but may also be invoked at the caller's discretion
should not be called from within a hardware interrupt handler to avoid
  reentrance problems
the stand-by state is typically exited on an interrupt

SeeAlso: AX=4280h,AX=5307h/BX=0001h/CX=0002h,AX=530Bh ———-155307BX0001———————– INT 15 - Advanced Power Management Specification - SUSPEND SYSTEM

AX = 5307h
BX = 0001h
CX = 0002h

Return: after system is resumed

CF clear

Notes: puts the entire system into a low-power suspended state; normally

  called in response to a Suspend System Request notification after
  any necessary processing, but may also be invoked at the caller's
  discretion
should not be called from within a hardware interrupt handler to avoid
  reentrance problems
the caller may need to update its date and time values because the
  system could have been suspended for a long period of time

SeeAlso: AX=5307h/BX=0001h/CX=0001h,AX=530Bh ———-155308BXFFFF———————– INT 15 - Advanced Power Management Spec - ENABLE/DISABLE POWER MANAGEMENT

AX = 5308h
BX = FFFFh
CX = new state
    0000h disabled
    0001h enabled

Return: CF clear if successful

CF set on error
    AH = error code (01h,09h,0Ah) (see AX=5300h)

Notes: when power management is disabled, the system BIOS will not

  automatically power down devices, enter stand-by or suspended mode,
  or perform any power-saving actions in response to AX=5305h calls
should not be called from within a hardware interrupt handler to avoid
  reentrance problems

SeeAlso: AX=5309h ———-155309BXFFFF———————– INT 15 - Advanced Power Management Specification - RESTORE POWER-ON DEFAULTS

AX = 5309h
BX = FFFFh

Return: CF clear if successful

CF set on error
    AH = error code (09h) (see AX=5300h)

Note: should not be called from within a hardware interrupt handler to avoid

  reentrance problems

SeeAlso: AX=5308h ———-15530ABX0001———————– INT 15 - Advanced Power Management Specification - GET POWER STATUS

AX = 530Ah
BX = 0001h

Return: CF clear if successful

    BH = AC line status
        00h off-line
	01h on-line
	FFh unknown
	other reserved
    BL = battery status
        00h high
	01h low
	02h critical
	03h charging
	FFh unknown
	other reserved
    CL = remaining battery life
        00h-64h (0-100) percentage of full charge
	FFh unknown
CF set on error
    AH = error code (09h) (see AX=5300h)

Note: should not be called from within a hardware interrupt handler to avoid

  reentrance problems

———-15530B—————————– INT 15 - Advanced Power Management Specification - GET POWER MANAGEMENT EVENT

AX = 530Bh

Return: CF clear if successful

    BX = event code
        0001h system stand-by request
	0002h system suspend request
	0003h normal resume system notification
	0004h critical resume system notification
	0005h battery low notification
CF set on error
    AH = error code (03h,80h) (see AX=5300h)

Notes: although power management events are often asynchronous, notification

  will not be made until polled via this call to permit software to
  only receive event notification when it is prepared to process
  power management events; since these events are not very time-
  critical, it should be sufficient to poll once or twice per second
the critical resume notification is made after the system resumes
  from an emergency suspension; normally, the system BIOS only notifies
  its partner that it wishes to suspend and relies on the partner to
  actually request the suspension, but no notification is made on an
  emergency suspension
should not be called from within a hardware interrupt handler to avoid
  reentrance problems

SeeAlso: AX=5307h,AX=5307h/BX=0001h/CX=0001h,AX=5307h/BX=0001h/CX=0002h ———-155400—————————– INT 15 - Omniview Multitasker - INSTALLATION NOTIFICATION

AX = 5400h
ES:BX -> device information tables
DI:DX -> dispatcher entry point

Note: called by OmniView to notify programs loaded before OmniView of state

  changes inside OmniView

SeeAlso: AX=5407h ———-155401—————————– INT 15 - Omniview Multitasker - PROCESS CREATION

AX = 5401h
ES:BX = process handle

Note: called by OmniView to notify programs loaded before OmniView of state

  changes inside OmniView

SeeAlso: AX=5402h ———-155402—————————– INT 15 - Omniview Multitasker - PROCESS DESTRUCTION

AX = 5402h
ES:DX = process handle

Note: called by OmniView to notify programs loaded before OmniView of state

  changes inside OmniView

SeeAlso: AX=5401h ———-155403—————————– INT 15 - Omniview Multitasker - SAVE

AX = 5403h
ES:DX = process swapping out

Note: called by OmniView to notify programs loaded before OmniView of state

  changes inside OmniView

SeeAlso: AX=5404h ———-155404—————————– INT 15 - Omniview Multitasker - RESTORE

AX = 5404h
ES:DX = process swapping in

Note: called by OmniView to notify programs loaded before OmniView of state

  changes inside OmniView

SeeAlso: AX=5403h ———-155405—————————– INT 15 - Omniview Multitasker - SWITCHING TO BACKGROUND

AX = 5405h
ES:DX = process swapping in

Note: called by OmniView to notify programs loaded before OmniView of state

  changes inside OmniView

SeeAlso: AX=5406h ———-155406—————————– INT 15 - Omniview Multitasker - SWITCHING TO FOREGROUND

AX = 5406h
ES:DX = process swapping in

Note: called by OmniView to notify programs loaded before OmniView of state

  changes inside OmniView

SeeAlso: AX=5405h ———-155407—————————– INT 15 - Omniview Multitasker - EXIT NOTIFICATION

AX = 5407h

Note: called by OmniView to notify programs loaded before OmniView of state

  changes inside OmniView

SeeAlso: AX=5400h ———-1580——————————- INT 15 - OS HOOK - DEVICE OPEN (AT,XT286,PS)

AH = 80h
BX = device ID
CX = process ID
CF clear

Return: CF clear if successful

    AH = 00h
CF set on error
    AH = status
	80h invalid command (PC,PCjr)
	86h function not supported (XT)

Note: this function should be hooked by a multitasker which wishes to keep

  track of device ownership; the default BIOS handler merely returns
  successfully

SeeAlso: AH=81h,AH=82h ———-1581——————————- INT 15 - OS HOOK - DEVICE CLOSE

AH = 81h
BX = device ID
CX = process ID
CF clear

Return: CF clear if successful

    AH = 00h
CF set on error
    AH = status (see AH=80h)

Note: this function should be hooked by a multitasker which wishes to keep

  track of device ownership; the default BIOS handler merely returns
  successfully

SeeAlso: AH=80h,AH=82h ———-1582——————————- INT 15 - OS HOOK - PROGRAM TERMINATION

AH = 82h
BX = process ID
CF clear

Return: CF clear if successful

    AH = 00h
CF set on error
    AH = status (see AH=80h)

Notes: closes all devices opened by the given process ID with function 80h

this function should be hooked by a multitasker which wishes to keep
  track of device ownership; the default BIOS handler merely returns
  successfully

SeeAlso: AH=80h,AH=81h ———-1583——————————- INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)

AH = 83h
AL = subfunction
    00h set interval
	CX:DX = microseconds to delay
	ES:BX -> byte whose high bit is to be set at end of interval
    01h cancel wait interval

Return: CF set on error or function already busy

    AH = status
	80h invalid command (PC,PCjr)
	86h function not supported (XT and later)
CF clear if successful

Note: the resolution of the wait period is 977 microseconds on most systems

  because most BIOSes use the 1/1024 second fast interrupt from the AT
  real-time clock chip which is available on INT 70

SeeAlso: AH=86h,INT 70 ———-1584——————————- INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)

AH = 84h
DX = subfunction
    0000h read joystick switches
	Return: AL bits 7-4 = switch settings
    0001h read positions of joysticks
	Return: AX = X position of joystick A
		BX = Y position of joystick A
		CX = X position of joystick B
		DX = Y position of joystick B

Return: CF set on error

    AH = status
	80h invalid command (PC,PCjr)
	86h function not supported (other)
CF clear if successful

Notes: if no game port is installed, subfunction 0000h returns AL=00h (all

  switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
a 250kOhm joystick typically returns 0000h-01A0h

———-1585——————————- INT 15 - OS HOOK - SysRq KEY ACTIVITY (AT,PS)

AH = 85h
AL = 00h SysRq key pressed
   = 01h SysRq key released
CF clear

Return: CF clear if successful

    AH = 00h
CF set on error
    AH = status (see AH=84h)

Notes: called by keyboard decode routine

the default handler simply returns successfully; programs which wish
  to monitor the SysRq key must hook this call

SeeAlso: INT 09 ———-1586——————————- INT 15 - BIOS - WAIT (AT,PS)

AH = 86h
CX:DX = interval in microseconds

Return: CF clear if successful (wait interval elapsed)

CF set on error or AH=83h wait already in progress
    AH = status (see AH=84h)

Note: the resolution of the wait period is 977 microseconds on most systems

  because most BIOSes use the 1/1024 second fast interrupt from the AT
  real-time clock chip which is available on INT 70

SeeAlso: AH=83h,INT 70 ———-1587——————————- INT 15 - SYSTEM - COPY EXTENDED MEMORY

AH = 87h
CX = number of words to copy (max 8000h)
ES:SI -> global descriptor table

Return: CF set on error

CF clear if successful
AH = status
    00h source copied into destination
    01h parity error
    02h interrupt error
    03h address line 20 gating failed
    80h invalid command (PC,PCjr)
    86h unsupported function (XT,PS30)

Notes: copy is done in protected mode with interrupts disabled

this function is incompatible with the OS/2 compatibility box

SeeAlso: AH=88h,AH=89h

Format of global descriptor table: Offset Size Description 00h 16 BYTEs zeros 10h WORD source segment length in bytes (2*CX-1 or greater) 12h 3 BYTEs 24-bit linear source address, low byte first 15h BYTE source segment access rights (93h) 16h WORD zero 18h WORD destination segment length in bytes (2*CX-1 or greater) 1Ah 3 BYTEs 24-bit linear destination address, low byte first 1Dh BYTE destination segment access rights (93h) 1Eh 18 BYTEs zeros ———-1588——————————- INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)

AH = 88h

Return: CF clear if successful

    AX = number of contiguous KB starting at absolute address 100000h
CF set on error
    AH = status
	80h invalid command (PC,PCjr)
	86h unsupported function (XT,PS30)

Note: TSRs which wish to allocate extended memory to themselves often hook

  this call, and return a reduced memory size.	They are then free to
  use the memory between the new and old sizes at will.

SeeAlso: AH=87h ———-1589——————————- INT 15 - SYSTEM - SWITCH TO PROTECTED MODE

AH = 89h
BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
ES:SI -> GDT for protected mode
       offset 0h  null descriptor (initialize to zeros)
	      8h  GDT descriptor
	     10h  IDT descriptor
	     18h  DS
	     20h  ES
	     28h  SS
	     30h  CS
	     38h  uninitialized, used to build descriptor for BIOS CS
CX = offset into protected-mode CS to jump to

Return: CF set on error

   AH = FFh  error enabling address line 20
CF clear if successful
   AH = 00h
   in protected mode at specified address

Note: BL and BH must be multiples of 8 SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch ———-1590——————————- INT 15 - OS HOOK - DEVICE BUSY (AT,PS)

AH = 90h
AL = device type
    00h disk
    01h diskette
    02h keyboard
    03h PS/2 pointing device
    21h waiting for keyboard input (Phoenix BIOS)
    80h network
    FBh digital sound (Tandy)
    FCh disk reset (PS)
    FDh diskette motor start
    FEh printer
ES:BX -> request block for type codes 80h through BFh
CF clear

Return: CF set if wait time satisfied

CF clear if driver must perform wait
    AH = 00h

Notes: type codes are allocated as follows:

  00-7F non-reentrant devices; OS must arbitrate access
  80-BF reentrant devices; ES:BX points to a unique control block
  C0-FF wait-only calls, no complementary INT 15/AH=91h call
floppy and hard disk BIOS code uses this call to implement a timeout;
  for device types 00h and 01h, a return of CF set means that the
  timeout expired before the disk responded.
this function should be hooked by a multitasker to allow other tasks
  to execute while the BIOS is waiting for I/O completion; the default
  handler merely returns with AH=00h and CF clear

SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h ———-1591——————————- INT 15 - OS HOOK - DEVICE POST (AT,PS)

AH = 91h
AL = device type (see AH=90h)
ES:BX -> request block for type codes 80h through BFh
CF clear

Return: AH = 00h Note: this function should be hooked by a multitasker to allow other tasks

  to execute while the BIOS is waiting for I/O completion; the default
  handler merely returns with AH=00h and CF clear

SeeAlso: AH=90h ———-15BC——————————- INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED

AH = BCh

Return: CF clear

BYTE 0040h:00B0h set to ??? (43 on my 386/33)

Note: reads system timer channel 0 twice, then does calculations on returned

  values

———-15BF00—————————– INT 15 - Rational Systems DOS/16M - ???

AX = BF00h
???

Return: ??? Note: under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h SeeAlso: AX=BF02h ———-15BF01—————————– INT 15 - Rational Systems DOS/16M - ???

AX = BF01h
???

Return: ??? Note: under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h SeeAlso: AX=BF02h ———-15BF02DX0000———————– INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK

AX = BF02h
DX = 0000h

Return: DX = nonzero if installed

    DX:SI -> XBRK structure (see below)

SeeAlso: AX=BFDEh/BX=0000h SeeAlso: INT 21/AX=FF00h,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h

Format of XBRK structure: Offset Size Description 00h DWORD linear address of last available byte + 1 ??? ??? ———-15BFDEBX0000———————– INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK

AX = BFDEh
BX = 0000h

Return: AX = ??? (0003h)

BX = FFFFh

SeeAlso: AX=BF02h ———-15BFDEBX0001———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET PROCESS MANAGER NAME

AX = BFDEh
BX = 0001h

Return: BX = 0000h (success)

CX:DX -> name of process manager executable

SeeAlso: AX=BFDEh/BX=0000h ———-15BFDEBX0002———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???

AX = BFDEh
BX = 0002h
CX:DX -> ???

Return: BX = 0000h (success) SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h ———-15BFDEBX0003———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???

AX = BFDEh
BX = 0003h

Return: BX = 0000h (success)

CX:DX -> ???

SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h ———-15BFDEBX0004———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???

AX = BFDEh
BX = 0004h

Return: BX = 0000h (success)

CX:DX -> ???

SeeAlso: AX=BFDEh/BX=0000h ———-15BFDEBX0005———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???

AX = BFDEh
BX = 0005h
CX = new value for ???

Return: BX = 0000h (success)

AX = old value of ???
DS:SI -> ??? (if AX nonzero on return)
ES:DI -> ??? (if AX zero on return)

SeeAlso: AX=BFDEh/BX=0000h ———-15BFDEBX0006———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???

AX = BFDEh
BX = 0006h

Return: BX = 0000h (success)

AH = interrupt number??? (BEh)
CX:DX = ???

SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE“DESQview” ———-15BFDEBX0007———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???

AX = BFDEh
BX = 0007h
CX:DX = ???

Return: BX = 0000h (success) SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h ———-15BFDEBX0008———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???

AX = BFDEh
BX = 0008h
CX = ???
DS = ???

Return: BX = status

    0000h successful
    	AL = ??? (80h or C0h)
	DX = ??? (0603h) if AL=C0h
    0001h failed
    	AX = 0000h

SeeAlso: AX=BFDEh/BX=0000h ———-15BFDEBX0009———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER

AX = BFDEh
BX = 0009h

Return: BX = 0000h (success)

CX:DX -> full pathname to LOAD32.EXP

SeeAlso: AX=BFDEh/BX=0000h ———-15BFDEBX000A———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - DECREMENT ???

AX = BFDEh
BX = 000Ah

Return: BX = 0000h (success)

AX = new value of ??? counter

Note: also resets a variety of values if the counter goes negative SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh ———-15BFDEBX000B———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - INCREMENT ???

AX = BFDEh
BX = 000Bh

Return: AX = new value of ??? counter SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah ———-15BFDEBX000C———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???

AX = BFDEh
BX = 000Ch
CL = ???
    00h
    nonzero

Return: ??? SeeAlso: AX=BFDEh/BX=0000h ———-15BFDEBX000D———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???

AX = BFDEh
BX = 000Dh
???

Return: ??? SeeAlso: AX=BFDEh/BX=0000h ———-15BFDEBX000E———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???

AX = BFDEh
BX = 000Eh
DX:CX -> ???

Return: AX = segment of handle for calling task

BX = ??? (probably destroyed)
DX:CX -> ???

SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h ———-15BFDEBX000F———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???

AX = BFDEh
BX = 000Fh

Return: AX = segment of handle for calling task

BX = ??? (probably destroyed)
DX:CX -> ???

Note: identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h ———-15BFDEBX0010———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET TASK HANDLE

AX = BFDEh
BX = 0010h

Return: AX = segment of caller's task handle

BX destroyed

SeeAlso: AX=BFDEh/BX=000Fh ———-15BFDEBX0011———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???

AX = BFDEh
BX = 0011h

Return: CX = code segment of DVDOS4GX.DVR

BX = ??? (0004h)

SeeAlso: AX=BFDEh/BX=0000h ———-15BFDEBX0012———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???

AX = BFDEh
BX = 0012h

Return: DX = code segment of DVDOS4GX.DVR

BX = ??? (012Ch)
CX = ??? (0006h)

SeeAlso: AX=BFDEh/BX=0000h ———-15BFDEBX0013———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???

AX = BFDEh
BX = 0013h

Return: DX:CX → ??? SeeAlso: AX=BFDEh/BX=000Eh ———-15BFDEBX0014———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - LOCK ??? MAILBOX

AX = BFDEh
BX = 0014h
CX = index of ??? mailbox
	(0000h-0004h valid, but no range checking done)

Return: AX,BX destroyed SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h ———-15BFDEBX0015———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - UNLOCK ??? MAILBOX

AX = BFDEh
BX = 0015h
CX = index of ??? mailbox
	(0000h-0004h valid, but no range checking done)

Return: AX,BX destroyed SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h ———-15BFDEBX0016———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED

AX = BFDEh
BX = 0016h
CX = index of ??? mailbox
	(0000h-0004h valid, but no range checking done)

Return: AX = status

    0000h no one owns mailbox
    0001h mailbox has an owner
BX destroyed

SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h ———-15BFDEBX0017———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? MAILBOX OWNER

AX = BFDEh
BX = 0017h
CX = index of ??? mailbox
	(0000h-0004h valid, but no range checking done)

Return: AX = segment of mailbox owner's handle

BX = segment of caller's task handle

SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h ———-15BFDEBXFFFD———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???

AX = BFDEh
BX = FFFDh

Return: CX:DX = ??? SeeAlso: AX=BFDEh/BX=FFFEh ———-15BFDEBXFFFE———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???

AX = BFDEh
BX = FFFEh
CX:DX = ???

SeeAlso: AX=BFDEh/BX=FFFDh ———-15BFDEBXFFFF———————– INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - NOP

AX = BFDEh
BX = FFFFh

SeeAlso: AX=BFDEh/BX=0000h ———-15C0——————————- INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3×9,CONV,XT286,PS)

AH = C0h

Return: CF set if BIOS doesn't support call

CF clear on success
    ES:BX -> ROM table (see below)
AH = status
    00h successful
    86h unsupported function

Notes: the 1/10/86 XT BIOS returns an incorrect value for the feature byte

the configuration table is at F000h:E6F5h in 100% compatible BIOSes
Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
  and a model byte at absolute address FE845h
Tandy 1000 machines contain 21h in the byte at F000h:C000h
some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
  past the end of the configuration table

Format of ROM configuration table: Offset Size Description 00h WORD number of bytes following 02h BYTE model (see below) 03h BYTE submodel (see below) 04h BYTE BIOS revision: 0 for first release, 1 for 2nd, etc. 05h BYTE feature byte 1:

	bit 7 = DMA channel 3 used by hard disk BIOS
	bit 6 = 2nd 8259 installed
	bit 5 = Real-Time Clock installed
	bit 4 = INT 15/AH=4Fh called upon INT 9h
	bit 3 = wait for external event supported
	bit 2 = extended BIOS area allocated (usually at top of RAM)
	bit 1 = bus is Micro Channel instead of ISA
	bit 0 reserved

06h BYTE feature byte 2:

	bit 7 = ???
	bit 6 = INT 16/AH=09h (keyboard functionality) supported
	bits 5-0 = ???

07h BYTE feature byte 3:

	reserved (0)

08h BYTE feature byte 4:

	reserved (0)

09h BYTE feature byte 5:

	reserved (0) (IBM)
	??? (08h) (Phoenix 386 v1.10)

—AWARD BIOS— 0Ah N BYTEs AWARD copyright notice —Phoenix BIOS— 0Ah BYTE ??? (00h) 0Bh BYTE major version 0Ch BYTE minor version (BCD) 0Dh 4 BYTEs ASCIZ string “PTL” (Phoenix Technologies Ltd)

Values for model/submodel/revision: Model Submdl Rev BIOS date System FFh * * 04/24/81 PC (original) FFh * * 10/19/81 PC (some bugfixes) FFh * * 10/27/82 PC (HD, 640K, EGA support) FFh 46h * ??? Olivetti M15 FEh * * 08/16/82 PC XT FEh * * 11/08/82 PC XT and Portable FEh 43h * ??? Olivetti M240 FEh A6h ??? ??? ??? (checked for by 386MAX v6.01) FDh * * 06/01/83 PCjr FCh * * 01/10/84 AT models 068,099 6 MHz 20MB FCh 00h 01h 06/10/85 AT model 239 6 MHz 30MB FCh 00h <> 01h ??? 7531/2 Industrial AT FCh 01h 00h 11/15/85 AT models 319,339 8 MHz, Enh Keyb, 3.5“ FCh 01h 00h 09/17/87 Tandy 3000 FCh 01h 00h 01/15&88 Toshiba T5200/100 FCh 01h 00h 12/26*89 Toshiba T1200/XE

		(Those date characters are not typos)

FCh 01h 30h ??? Tandy 3000NL FCh 01h ??? ??? Compaq 286/386 FCh 02h 00h 04/21/86 PC XT-286 FCh 04h 00h 02/13/87 PS/2 Model 50 (10 MHz/1 ws 286) FCh 04h 03h 04/18/88 PS/2 Model 50Z (10 MHz/0 ws 286) FCh 05h 00h 02/13/87 PS/2 Model 60 (10 MHz 286) FCh 06h ??? ??? 7552 “Gearbox” FCh 08h * ??? Epson, unknown model FCh 09h 00h ??? PS/2 Model 25 (10 MHz 286) FCh 09h 02h 06/28/89 PS/2 Model 30-286 FCh 0Bh 00h 02/16/90 PS/1 Model 2011 (10 MHz 286) FCh 30h * ??? Epson, unknown model FCh 31h * ??? Epson, unknown model FCh 33h * ??? Epson, unknown model FCh 42h * ??? Olivetti M280 FCh 45h * ??? Olivetti M380 (XP 1, XP3, XP 5) FCh 48h * ??? Olivetti M290 FCh 4Fh * ??? Olivetti M250 FCh 50h * ??? Olivetti M380 (XP 7) FCh 51h * ??? Olivetti PCS286 FCh 52h * ??? Olivetti M300 FCh 81h 00h 01/15/88 Phoenix 386 BIOS v1.10 10a FBh 00h 01h 01/10/86 PC XT, Enh Keyb, 3.5” support FBh 00h 02h 05/09/86 PC XT FBh 4Ch * ??? Olivetti M200 FAh 00h 00h 09/02/86 PS/2 Model 30 (8 MHz 8086) FAh 00h 01h 12/12/86 PS/2 Model 30 FAh 01h 00h ??? PS/2 Model 25/25L (8 MHz 8086) FAh 4Eh * ??? Olivetti M111 F9h 00h 00h 09/13/85 PC Convertible F8h 00h 00h 03/30/87 PS/2 Model 80 (16MHz 386) F8h 01h 00h 10/07/87 PS/2 Model 80 (20MHz 386) F8h 04h 02h 04/11/88 PS/2 Model 70 20MHz, type 2 system brd F8h 04h 03h 03/17/89 PS/2 Model 70 20MHz, type 2 system brd F8h 09h 00h ??? PS/2 Model 70 16MHz, type 1 system brd F8h 09h 02h 04/11/88 PS/2 Model 70 some models F8h 09h 03h 03/17/89 PS/2 Model 70 some models F8h 0Bh 00h 01/18/89 PS/2 Model P70 (8573-121) typ 2 sys brd F8h 0Bh 02h 12/16/89 PS/2 Model P70 ?? F8h 0Ch 00h 11/02/88 PS/2 Model 55SX (16 MHz 386SX) F8h 0Dh 00h ??? PS/2 Model 70 25MHz, type 3 system brd F8h 11h 00h 10/01/90 PS/2 Model 90 (25 MHz 486) F8h 13h 00h 10/01/90 PS/2 Model 90 (33 MHz 486) F8h 14h 00h 10/01/90 PS/2 Model 90-AK9 (25 MHz 486) F8h 16h 00h 10/01/90 PS/2 Model 90-AKD (33 MHz 486) F8h 19h 05h ??? PS/2 Model 35/35LS or 40 (20 MHz 386SX) F8h 1Bh 00h 10/02/89 PS/2 Model 70-486 (25 MHz 486) F8h 1Ch 00h 02/08/90 PS/2 Model 65-121 (16 MHz 386SX) F8h 1Eh 00h 02/08/90 PS/2 Model 55LS (16 MHz 386SX) F8h 23h 01h ??? PS/2 Model L40 (20 MHz 386SX) F8h 25h 06h ??? PS/2 Model M57 (20 MHz 386SLC) F8h 26h 01h ??? PS/2 Model 57 (20 MHz 386SX) F8h 2Ah 00h ??? PS/2 Model 95 (50 MHz 486) F8h 2Bh 00h ??? PS/2 Model 90 (50 MHz 486) F8h 2Ch 01h ??? PS/2 Model 95 (20 MHz 486SX) F8h 2Dh 00h ??? PS/2 Model 90 (20 MHz 486SX) F8h 2Eh 01h ??? PS/2 Model 95 (20 MHz 486SX + 487SX) F8h 2Fh 00h ??? PS/2 Model 90 (20 MHz 486SX + 487SX) F8h 30h 00h ??? PS/1 Model 2121 (16 MHz 386SX) F8h 50h 00h ??? PS/2 Model P70 (8573) (16 MHz 386) F8h 50h 01h 12/16/89 PS/2 Model P70 (8570-031) F8h 52h 00h ??? PS/2 Model P75 (33 MHz 486) F8h 61h * ??? Olivetti P500 F8h 62h * ??? Olivetti P800 F8h 80h 00h ??? PS/2 Model 80 (25 MHz 386) F8h 80h 01h 11/21/89 PS/2 Model 80-A21 F8h ??? ??? ??? PS/2 Model 90 (25 MHz 486SX) F8h ??? ??? ??? PS/2 Model 95 (25 MHz 486SX) F8h ??? ??? ??? PS/2 Model 90 (25 MHz 486SX + 487SX) F8h ??? ??? ??? PS/2 Model 95 (25 MHz 486SX + 487SX) 9Ah * * ??? Compaq XT/Compaq Plus 30h ??? ??? ??? Sperry PC 2Dh * * ??? Compaq PC/Compaq Deskpro ??? 56h ??? ??? Olivetti, unknown model ??? 74h ??? ??? Olivetti, unknown model

  • This BIOS call is not implemented in these early versions.

Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.

  • * These BIOS versions require the DASDDRVR.SYS patches.
  • ** These Olivetti and Epson machines store the submodel in the byte at

F000h:FFFDh.

Values for Dell model byte: 02h Dell 200 03h Dell 300 05h Dell 220 06h Dell 310 07h Dell 325 09h Dell 310A 0Ah Dell 316 0Bh Dell 220E 0Ch Dell 210 0Dh Dell 316SX 0Eh Dell 316LT 0Fh Dell 320LX 11h Dell 425E ———-15C1——————————- INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)

AH = C1h

Return: CF set on error

CF clear if successful
    ES = segment of data area

SeeAlso: AH=04h“ABIOS” ———-15C200BH00————————- INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE

AX = C200h
BH = 00h disable
     01h enable

Return: CF set on error

AH = status
    00h successful
    01h invalid function
    02h invalid input
    03h interface error
    04h need to resend
    05h no device handler installed

———-15C201—————————– INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET

AX = C201h

Return: CF set on error

    AH = status (see AX=C200h)
CF clear if successful
    BH = device ID

SeeAlso: INT 33/AX=0000h ———-15C202—————————– INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE

AX = C202h
BH = sampling rate
    00h 10/second
    01h 20/second
    02h 40/second
    03h 60/second
    04h 80/second
    05h 100/second
    06h 200/second

Return: CF set on error

    AH = status (see AX=C200h)

SeeAlso: INT 33/AX=001Ch ———-15C203—————————– INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION

AX = C203h
BH = resolution
    00h one count per mm
    01h two counts per mm
    02h four counts per mm
    03h eight counts per mm

Return: CF set on error

    AH = status (see AX=C200h)

———-15C204—————————– INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE

AX = C204h

Return: CF set on error

    AH = status (see AX=C200h)
CF clear if successful
    BH = device ID

———-15C205—————————– INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE

AX = C205h
BH = data package size (1 - 8 bytes)

Return: CF set on error

    AH = status (see AX=C200h)

SeeAlso: AX=C201h ———-15C206—————————– INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET/SET SCALING FACTOR

AX = C206h
BH = subfunction
    00h return device status
	Return: BL = status
		   bit 0: right button pressed
		   bit 1: reserved
		   bit 2: left button pressed
		   bit 3: reserved
		   bit 4: 0 if 1:1 scaling, 1 if 2:1 scaling
		   bit 5: device enabled
		   bit 6: 0 if stream mode, 1 if remote mode
		   bit 7: reserved
		CL = resolution (see AX=C203h)
		DL = sample rate, reports per second
    01h set scaling at 1:1
    02h set scaling at 2:1

Return: CF set on error

    AH = status (see AX=C200h)

———-15C207—————————– INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR

AX = C207h
ES:BX -> FAR user device handler

Return: CF set on error

    AH = status (see AX=C200h)

SeeAlso: INT 33/AX=000Ch ———-15C3—————————— INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)

AH = C3h
AL = 00h disable
     01h enable
	BX = timer counter

Return: CF set on error

CF clear if successful

Note: the watchdog timer generates an NMI ———-15C4——————————- INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)

AH = C4h
AL = 00h return base POS register address
     01h enable slot
	 BL = slot number
     02h enable adapter

Return: CF set on error

DX = base POS register address (if function 00h)

———-15C5——————————- INT 15 U - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)

AH = C5h
AL = interrupt being invoked
    01h INT 19
    02h INT 14
    03h INT 16
    04h INT 40 (floppy INT 13)
    05h INT 17
    06h INT 10
    07h INT 12
    08h INT 11
    09h INT 1A

Return: all registers except AX must be preserved Notes: called as the very first action of the indicated ROM BIOS interrupt

  handlers on the PS/2 Models 30/286, 50Z, and 95
default handler does nothing and returns CF clear for the above
  subfunctions, CF set and AH=86h for all other subfunctions
value of AX passed to the original interrupt handler is pushed on
  stack immediately prior to call

———-15C6——————————- INT 15 U - PS/2 Model 95 - ???

AH = C6h
???

Return: ??? ———-15C7——————————- INT 15 U - PS/2 Model 95 - ???

AH = C7h
???

Return: ??? ———-15C8——————————- INT 15 U - PS/2 Model 95 - ???

AH = C8h
???

Return: ??? ———-15C9——————————- INT 15 U - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION

      AH = C9h
AL = 10h (may be required on some non-PS BIOSes)

Return: AH = 00h

CH = CPU type
    03h 80386
          04h 80486
      CL = mask revision
    23h 386SX

Notes: the BIOS must save DX at startup in order to be able to support this

  call; PS/2 Models 56, 57, 90, and 95 are known to support it
the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)

———-15CA——————————- INT 15 U - PS/2 Model 95 - ???

AH = CAh
???

Return: ??? ———-15CB——————————- INT 15 U - PS/2 Model 95 - ???

AH = CBh
???

Return: ??? ———-15CC——————————- INT 15 U - PS/2 Model 95 - ???

AH = CCh
???

Return: ??? ———-15CD——————————- INT 15 U - PS/2 Model 95 - ???

AH = CDh
???

Return: ??? ———-15CE——————————- INT 15 U - PS/2 Model 95 - ???

AH = CEh
???

Return: ??? ———-15CF——————————- INT 15 U - PS/2 Model 95 - ???

AH = CFh
???

Return: ??? ———-15D800—————————– INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION

AX = D800h
CL = slot number (including embedded and virtual)

Return: CF clear if successful

    AH = 00h
CF set on error
    AH = error code
	80h invalid slot number
	82h EISA CMOS corrupt
	83h empty slot
	86h invalid BIOS-FW function call
	87h invalid system configuration
AL bit flags
    bit 7: set if duplicate IDs
	6: set if product ID readable
      4,5: slot type (00=expansion, 01=embedded, 10=virtual device)
      0-3: duplicate ID number if bit 7 set
BH = major revision level of configuration utility
BL = minor revision level of configuration utility
CX = checksum of configuration file
DH = number of device functions
DL = combined function information byte
SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)

Note: call with AL=80h if using 32-bit CS addressing mode instead of 16-bit SeeAlso: AX=D801h,AX=D804h ———-15D801—————————– INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION

AX = D801h
CH = function number to read
CL = slot number (including embedded and virtual)
DS:SI -> 320-byte buffer for standard configuration data block

Return: CF clear if successful

    AH = 00h
    DS:SI buffer filled
CF set on error
    AH = error code
	80h invalid slot number
	81h invalid function number
	82h EISA CMOS corrupt
	83h empty slot
	86h invalid BIOS-FW function call
	87h invalid system configuration
BX destroyed

Note: call with AL=81h if using 32-bit CS addressing mode instead of 16-bit ———-15D802—————————– INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)

AX = D802h
BH = EISA config utility major revision level
BL = EISA config utility minor revision level

Return: CF clear if successful

    AH = 00h
CF set on error
    AH = error code
	84h error clearing CMOS
	86h invalid BIOS-FW function call
	88h config utility version not supported

Note: call with AL=82h if using 32-bit CS addressing mode instead of 16-bit SeeAlso: AX=D803h ———-15D803—————————– INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY

AX = D803h
CX = length of data structure (0000h = empty slot)
	includes two bytes for config file checksum
DS:SI -> configuration data

Return: CF clear if successful

    AH = 00h
CF set on error
    AH = error code
	84h error clearing CMOS
	85h EISA CMOS is full
	86h invalid BIOS-FW function call

Note: call with AL=83h if using 32-bit CS addressing mode instead of 16-bit SeeAlso: AX=D802h ———-15D804—————————– INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT

AX = D804h
CL = slot number (including embedded and virtual)

Return: CF clear if successful

    AH = 00h
CF set on error
    AH = error code
	80h invalid slot number
	83h empty slot
	86h invalid BIOS-FW function call
SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)

Note: call with AL=84h if using 32-bit CS addressing mode instead of 16-bit SeeAlso: AX=D800h ———-15D8——————————- INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS

AH = D8h
AL = 80h to 84h
other registers as appropriate for AL=00h to 04h

Return: as appropriate for AL=00h to 04h Note: these functions are identical to AX=D800h to D804h, except that they

  should be called when using 32-bit CS addressing mode (pointers use
  ESI rather than SI as offset) instead of 16-bit addressing mode

SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h ———-15DE00—————————– INT 15 - DESQview - GET PROGRAM NAME

AX = DE00h

Return: AX = offset into DESQVIEW.DVO of program most recently selected from

	the "Switch Windows" menu (see below)

Note: always returns AX=0000h under DESQview/X SeeAlso: AX=DE07h

Format of program entry in DESQVIEW.DVO: Offset Size Description 00h BYTE length of name (FFh if end of file) 01h N BYTEs name

    2 BYTEs	keys to invoke program (second = 00h if only one key used)
BYTE	program type
	00h normal program
	04h divider
	80h Delete a Program
	81h Change a Program
WORD	??? apparently always 0000h

———-15DE01—————————– INT 15 - DESQview - UPDATE “OPEN WINDOW” MENU

AX = DE01h

Return: nothing Notes: reads DESQVIEW.DVO, disables Open menu if file not in current directory

NOP for DESQview/X

———-15DE02—————————– INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW

AX = DE02h

Return: nothing Note: this call is a NOP in DV 2.x SeeAlso: AX=DE03h ———-15DE03—————————– INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW

AX = DE03h

Return: AX = ??? for current window

BX = ??? for current window

Note: this call is a NOP in DV 2.x SeeAlso: AX=DE02h ———-15DE04—————————– INT 15 - DESQview - GET AVAILABLE COMMON MEMORY

AX = DE04h

Return: BX = bytes of common memory available

CX = largest block available
DX = total common memory in bytes

SeeAlso: AX=DE05h,AX=DE06h ———-15DE05—————————– INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY

AX = DE05h

Return: BX = K of memory available

CX = largest block available
DX = total conventional memory in K

SeeAlso: AX=DE04h,AX=DE06h ———-15DE06—————————– INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY

AX = DE06h

Return: BX = K of expanded memory available

CX = largest block available
DX = total expanded memory in K

SeeAlso: AX=DE04h,AX=DE05h ———-15DE07—————————– INT 15 - DESQview - “APPNUM” - GET CURRENT PROGRAM'S NUMBER

AX = DE07h

Return: AX = number of program as it appears on the “Switch Windows” menu Note: this API call may be made from a hardware interrupt handler SeeAlso: AX=DE00h ———-15DE08—————————– INT 15 - DESQview - GET ???

AX = DE08h

Return: AX = 0000h if ??? is not set to the current task

     0001h if ??? is set to the current task

———-15DE09—————————– INT 15 - DESQview - UNIMPLEMENTED

AX = DE09h

Return: nothing (NOP in DV 1.x and 2.x) ———-15DE0A—————————– INT 15 - DESQview v2.00+ - “DBGPOKE” - DISPLAY CHARACTER ON STATUS LINE

AX = DE0Ah
BL = character

Return: character displayed, next call will display in next position (which

wraps back to the start of the line if off the right edge of screen)

Notes: displays character on bottom line of *physical* screen, regardless

  of current size of window (even entirely hidden)
does not know about graphics display modes, just pokes the characters
  into display memory
this API call may be made from a hardware interrupt handler

SeeAlso: AX=1003h ———-15DE0B—————————– INT 15 - DESQview v2.00+ - “APILEVEL” - DEFINE MINIMUM API LEVEL REQUIRED

AX = DE0Bh
BL = API level minor version number
BH = API level major version number

Return: AX = maximum API level (AH = major, AL = minor) Notes: if the requested API level is greater than the version of DESQview, a

  "You need a newer version" error window is popped up
the API level defaults to 1.00, and is inherited by child tasks

———-15DE0C—————————– INT 15 - DESQview v2.00+ - “GETMEM” - ALLOCATE “SYSTEM” MEMORY

AX = DE0Ch
BX = number of bytes

Return: ES:DI → allocated block or 0000h:0000h (DV 2.26+) Note: use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient

  system memory

SeeAlso: AX=1001h,AX=DE0Dh,AX=DE15h ———-15DE0D—————————– INT 15 - DESQview v2.00+ - “PUTMEM” - DEALLOCATE “SYSTEM” MEMORY

AX = DE0Dh
ES:DI -> previously allocated block

Return: nothing SeeAlso: AX=1002h,AX=DE0Ch ———-15DE0E—————————– INT 15 - DESQview v2.00+ - “FINDMAIL” - FIND MAILBOX BY NAME

AX = DE0Eh
ES:DI -> name to find
CX = length of name

Return: BX = 0000h not found

     0001h found
	DS:SI = object handle

SeeAlso: AH=12h/BH=11h

Special mailbox names: “COM1” … “COM4” RBcomm using COM1 … COM4 “DESQview/X Help Engine” “DESQview/X Network Server” “DESQview X Server0” “INBOX” DESQview/X LPD requests “OUTBOX” DESQview/X LPD responses “WAITBOX” semaphore to synchronize DESQview/X LPD communications ———-15DE0F—————————– INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS

AX = DE0Fh

Return: AX and BX destroyed (seems to be bug, weren't saved&restored) Notes: sends a manager stream with opcodes AEh, BDh, and BFh to task's window

enables an additional mouse mode

———-15DE10—————————– INT 15 - DESQview v2.00+ - “PUSHKEY” - PUT KEY INTO KEYBOARD INPUT STREAM

AX = DE10h
BH = scan code
BL = character

Return: nothing Notes: a later read will get the keystroke as if it had been typed by the user

multiple pushes are read last-in first-out
if a script exists for the pushed key in the current application, the
  script will be executed
early copies of DV 2.00 destroy AX, BX, ES, and DI

SeeAlso: INT 16/AH=05h ———-15DE11BL00————————- INT 15 - DESQview 2.00+ - “JUSTIFY” - EN/DISABLE AUTOMATIC WINDOW JUSTIFICATION

AX = DE11h
BL = 00h      viewport will not move automatically
     nonzero  viewport will move to keep cursor visible (default)

Return: nothing ———-15DE12BX0000———————– INT 15 - DESQview v2.01+ - “CSTYLE” - SET “C”-COMPATIBLE CONTROL CHAR INTERPRET

AX = DE12h
BX = 0000h    select normal style (linefeed only moves down)
     nonzero  select C style (linefeed moves to start of next line)

Return: nothing Note: set on a per-task basis, and inherited from the parent task ———-15DE13—————————– INT 15 - DESQview v2.20+ - “GETCRIT” - GET CRITICAL NESTING COUNT

AX = DE13h

Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)

     without matching ENDC (see INT 15/AX=101Ch)

Note: this API call may be made from within a hardware interrupt handler SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch ———-15DE14—————————– INT 15 - DESQview v2.20+ - GET OBJECT TYPE

AX = DE14h
ES:DI -> object

Return: BL = 00h not an object

     08h window or task
     09h mailbox
     0Ah keyboard
     0Bh timer
     0Ch objectq
     0Fh pointer
     10h panel

SeeAlso: AX=1016h ———-15DE15BL00————————- INT 15 - DESQview v2.20+ - SET ERROR HANDLING

AX = DE15h
BL = 00h post system error on all error conditions
     01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
	 messages sent to mailboxes which fail due to lack of system
	 or common memory
     02h (v2.26+) same as 01h, but return null pointer for GETMEM
	 calls which fail due to lack of system memory

Return: nothing SeeAlso: AX=DE16h ———-15DE16—————————– INT 15 - DESQview v2.20+ - GET ERROR HANDLING

AX = DE16h

Return: BL = 00h always post system error

     01h return carry flag set on failed mailbox writes
     02h return CF set on failed mailbox writes and NULL on failed
	 GETMEM calls

SeeAlso: AX=DE15h ———-15DE17—————————– INT 15 - DESQview v2.20-2.25 - reserved

AX = DE17h

Return: pops up “Programming error” window Note: AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25 SeeAlso: AX=1117h ———-15DE17BX0000———————– INT 15 - DESQview v2.26+ - “ASSERTMAP” - GET/SET MAPPING CONTEXT

AX = DE17h
BX = 0000h	get current mapping context without setting
     nonzero	set new mapping context

Return: BX = mapping context in effect before call Notes: mapping contexts determine conventional-memory addressability; setting

  a mapping context ensures that the associated program and data areas
  are in memory for access.  Usable by drivers, TSRs and shared
  programs.
caller need not be running under DESQview
this API call may be made from a hardware interrupt handler

SeeAlso: AX=1117h,INT 2F/AX=1685h ———-15DE18—————————– INT 15 - DESQview v2.20+ - internal - ???

AX = DE18h
BP = function number
    high byte must be 10h
    low byte is function
	00h set ???
	    BL = ???  (00h-10h, video mode???)
	    BH = value to store
	03h set ???
	    BL = ??? (stored in driver)
	0Ah get ???
	    ES:DI -> 18-byte buffer to hold ???

Note: calls video driver (NOP for Hercules driver,probably CGA and MCGA also) ———-15DE19—————————– INT 15 - DESQview v2.23+ - “GETCOMMON” - ALLOCATE “COMMON” MEMORY

AX = DE19h
BX = number of bytes to allocate

Return: AX = 0000h successful

	ES:DI -> allocated block
     nonzero insufficient memory

Note: this API call may be made from within a hardware interrupt handler SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah ———-15DE1A—————————– INT 15 - DESQview v2.23+ - “PUTCOMMON” - DEALLOCATE “COMMON” MEMORY

AX = DE1Ah
DS:SI -> previously allocated block

Note: this function may be called from within a hardware interrupt handler SeeAlso: AX=DE0Dh,AX=DE19h ———-15DE1B—————————– INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT

AX = DE1Bh

Return: nothing SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch ———-15DE1C—————————– INT 15 - DESQview v2.23+ - “ENTERC” - INCREMENT CRITICAL NESTING COUNT

AX = DE1Ch

Return: nothing Notes: similar to AX=101Bh, but begins the critical region without ensuring

  that DOS is free
the official documentation states that this call should be paired with
  "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
this API call may be made from within a hardware interrupt handler

SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh ———-15DE1D—————————– INT 15 - DESQview v2.23+ - “PUTKEY” - FAKE USER KEYSTROKES

AX = DE1Dh
DX = segment of handle for task to receive keystroke
BL = character
BH = scan code

Return: AX = 0000h if successful

   nonzero if receiver's keyboard buffer was full

Notes: the key is treated as though the user had pressed it, ignoring any

  script which may be bound to the key, and using the current field
  table if the keyboard object is in field processing mode
multiple PUTKEYs are seen in the order in which they are executed

SeeAlso: AX=DE10h ———-15DE1E—————————– INT 15 - DESQview v2.23+ - “SCRNINFO” - GET TRUE VIDEO PARAMETERS

AX = DE1Eh

Return: CL = actual number of rows on screen

CH = actual number of columns on screen
BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)

Note: this API call may be made from a hardware interrupt handler SeeAlso: INT 10/AH=0Fh ———-15DE1F—————————– INT 15 - DESQview v2.23+ - “DOSUSER” - GET HANDLE OF TASK CURRENTLY USING DOS

AX = DE1Fh

Return: BX = segment of task handle or 0000h if no tasks are using DOS Note: this API call may be made from within a hardware interrupt handler SeeAlso: AX=DE13h ———-15DE20—————————– INT 15 - DESQview v2.26+ - “DISPATCHINT” - INTERRUPT ANOTHER TASK

AX = DE20h
BX = segment of handle of task to interupt
DX:CX -> FAR interrupt routine

Return: nothing Notes: unlike “PGMINT” (AX=1021h), DISPATCHINT may be applied to the task

  making the DISPATCHINT call
multiple "DISPATCHINT" calls are processed in the order in which they
  were executed
the FAR routine is entered with the current ES, DS, SI, DI, and BP
  values, using the task's internal stack (see AX=101Ah); only SS:SP
  needs to be preserved
this API call may be made from within a hardware interrupt handler

SeeAlso: AX=1021h ———-15DE21BX0000———————– INT 15 - DESQview v2.26+ - “ASSERTVIR” - CONTROL 386 SCREEN VIRTUALIZATION

AX = DE21h
BX = 0000h turn off
     nonzero turn on

Return: BX = old state of virtualization Note: this API call may be made from within a hardware interrupt handler ———-15DE22—————————– INT 15 - DESQview v2.26+ - “PROCESSMEM” - GET TASK MEMORY STATUS

AX = DE22h
DX = segment of task handle

Return: DX = total amount of memory in paragraphs

BX = amount of system memory in paragraphs
CX = largest block of system memory available in paragraphs
AX = flags
    bit 0: system memory resides in shared memory
	1: process's memory is swapped out
	2: process's system memory is swapped out

Notes: if the task handle is a child task, the returned values will be for the

  process containing the task, rather than the task itself
if the process's system memory is swapped out, BX,CX,DX remain
  unchanged, because the memory usage cannot be determined

SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h ———-15DE23—————————– INT 15 - DESQview v2.31+ - ???

AX = DE23h
BX = ??? IRQ number on first PIC?
CX = ??? IRQ number on second PIC?

Return: ??? Note: called by QEMM 6.00+ ———-15DE24—————————– INT 15 - DESQview v2.40+ - ???

AX = DE24h

Return: BX = ??? (0000h for v2.40) ———-15DE25—————————– INT 15 - DESQview v2.40+ - ???

AX = DE25h
???

Return: nothing ———-15DE26—————————– INT 15 - DESQview v2.40+ - GET ???

AX = DE26h

Return: BX = segment of handle for X server??? ———-15DE27—————————– INT 15 - DESQview v2.50+ - ???

AX = DE27h
BX = ??? (0000h,0001h)
ES:DI -> ???

Return: CF clear if successful

    AX = ???
    BX = ???
CF set on error
    AX = ???

Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ———-15DE28—————————– INT 15 - DESQview v2.50+ - ???

AX = DE28h
BX = segment of ??? or 0000h for default
???

Return: ??? Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: AX=DE2Ah ———-15DE29BX0000———————– INT 15 - DESQview v2.50+ - ???

AX = DE29h
BX = 0000h
???

Return: CF clear if successful

    ???
CF set on error

Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ———-15DE29BX0001———————– INT 15 - DESQview v2.50+ - ???

AX = DE29h
BX = 0001h
DX = segment of window handle

Return: CF clear if successful

    AX = ???
    DX = ???
CF set on error

Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ———-15DE29BX0002———————– INT 15 - DESQview v2.50+ - ???

AX = DE29h
BX = 0002h
DX = segment of window handle

Return: CF clear if successful

    AX = ???
    DX = ???
CF set on error

Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ———-15DE29BX0003———————– INT 15 - DESQview v2.50+ - ???

AX = DE29h
BX = 0003h
DX = segment of window handle

Return: CF clear if successful

    ???
CF set on error

Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ———-15DE29BX0004———————– INT 15 - DESQview v2.50+ - GET DISPLAY NAME

AX = DE29h
BX = 0004h
CX = size of buffer in bytes
DX = segment of window handle
ES:DI -> buffer for display name

Return: CF clear if successful

    buffer filled with ASCIZ display name (truncated if necessary) or
      null string if no display
CF set on error

Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.

the name ":0" refers to the local display

———-15DE29BX0005———————– INT 15 - DESQview v2.50+ - ???

AX = DE29h
BX = 0005h
???

Return: CF clear if successful

    ???
CF set on error

Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ———-15DE2A—————————– INT 15 - DESQview v2.50+ - ???

AX = DE2Ah
BX = segment of ??? or 0000h for default
???

Return: ??? Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: AX=DE28h,AX=DE2Bh ———-15DE2B—————————– INT 15 - DESQview v2.50+ - TRAVERSE OBJECT LIST

AX = DE2Bh
ES:DI -> object

Return: AX = status

    0000h successful
        ES:DI -> next object of same type in circular linked list
    0001h failed (ES:DI was not a valid handle)

Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch ———-15DE2C—————————– INT 15 - DESQview v2.50+ - GET WINDOW INFORMATION???

AX = DE2Ch
DX = 0100h
BX = segment of window handle or 0000h for default
ES:DI -> buffer for info (see below)

Return: AX = status???

    0000h successful

Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: AX=DE2Bh

Format of window information: Offset Size Description 00h BYTE task flag: 00h window, 01h task 01h BYTE process number if task 02h WORD segment of owner's handle 04h WORD mapping context??? 06h BYTE status 00h waiting

	01h idle
	04h pausing
	0Ah slicing
	0Bh exit DOS

07h BYTE ??? 08h BYTE 01h if DESQview task??? 09h 2 BYTEs ??? ———-15DE2D—————————– INT 15 - DESQview v2.50+ - GET/SET ??? FUNCTION

AX = DE2Dh
CX = direction
    FFFFh set ??? function
        DX:BX -> FAR function for ???
		must contain data storage for a WORD three bytes past
		the function entry point and a DWORD five bytes past
		the start
    other get ??? function

Return: DX:BX → function if CX<>FFFFh on entry Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: AX=DE2Eh,INT 63“DESQview” ———-15DE2E—————————– INT 15 - DESQview v2.50+ - ???

AX = DE2Eh
DX:BX = ??? or 0000h:0000h for default

Return: CX = ???

DX:BX = ???

Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: AX=DE2Dh


INT 15 - DESQview v2.50+ - ???

AX = DE2Fh

Return: BL = ??? (00h,01h) Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. ———-15DE30—————————– INT 15 - DESQview v2.50+ - GET DESQview/X VERSION

AX = DE30h

Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x. SeeAlso: INT 21/AH=2Bh/CX=4445h ———-15E00F—————————– INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH

AX = E00Fh
ES:BX -> start of 2nd processor's execution

Return: AL = 0Fh successful

   = 00h failure	

SeeAlso: AX=E10Eh,AX=E200h ———-15E10E—————————– INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH

AX = E10Eh
ES:BX -> start of 2nd processor's execution

Return: AL = 0Fh successful (halted)

   = 00h failure (not halted)

SeeAlso: AX=E00Fh,AX=E200h ———-15E200—————————– INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE

AX = E200h

Return: AX = 8000h if 2nd processor available SeeAlso: AX=E00Fh,AX=E10Eh ———-15E4——————————- INT 15 - ???

AH = E4h
AL = subfunction
    21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
DL = ???

Return: ??? ———-15F200CX454D———————– INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALISATION CHECK ???

AX = F200h
CX = 454Dh

Return: CF clear if hardware already initialised

    BX = upper RAM areas in use
	bit 0: C000-C3FF
	bit 1: C400-C7FF
	...
	bit 11: EC00-EFFF
CF set if hardware not initialised yet
back2root/ibm-pc-ms-dos/interrupts/old/ms_interrupt_list-11-15.txt · Dernière modification : 2023/01/05 04:01 de frater