AOH :: INT-B.TXT
PC Interrupt Listing Part 2 of 8
|
Interrupt List, part 2 of 8
This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown
----------15---------------------------------
INT 15 - Microsoft TSR Specification
No additional information available at this time.
----------1500-------------------------------
INT 15 - 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"
----------1500-------------------------------
INT 15 - 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"
----------150C-------------------------------
INT 15 - VMiX - GET POINTER TO PROCESS TSS STACK
AH = 0Ch
STACK: WORD process ID
Return: DX:AX??? -> TSS stack store
----------150C-------------------------------
INT 15 - 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"
----------150D-------------------------------
INT 15 - 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=89h,INT 21/AH=EEh"DoubleDOS"
SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah
SeeAlso: 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
Note: under DESQview versions prior to 2.50, an object handle is always a
pointer to the object; for versions 2.50 and up, only task handles
are always pointers (other handles may consist of an object number
and offset into DESQview's common memory)
SeeAlso: AX=DE14h,AX=DE2Bh
Format of object:
Offset Size Description
00h WORD offset in common memory of previous object of same type
02h WORD offset in common memory of next object of same type
04h WORD signature FEDCh (DV 2.42-)
signature FEDCh or object number (DV 2.50+)
06h WORD object type
08h DWORD object handle to return to caller
0Ch DWORD canonicalized object address (segment = common memory)
... varies by object type and DESQview version
----------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",INT 21/AH=81h
----------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,INT 21/AH=82h
----------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,INT 21/AH=82h
----------15102C-----------------------------
INT 15 - DESQview v2.00+ - "NEWPROC" - 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
SeeAlso: AX=DE24h,INT 21/AH=4Bh
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 X flags
bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
(NEWPROC) inherit DOS client layer usage
bit 1: don't display DOS window
bit 2: don't display wait message when opening window
bits 3-7: unused (0)
18Eh BYTE X keyboard behavior (0-3)
18Fh BYTE font scaling
00h fixed fonts
01h scalable fonts
190h 10 BYTEs reserved (0)
19Ah WORD length of data follownig XDVP signature
19Ch 4 BYTEs signature "XDVP"
1A0h N BYTEs list of variable length records (see below)
Format of variable length record:
Offset Size Description
00h WORD length of following record, 0000h if end of record list
02h BYTE record type
01h script filename, up to 64 characters
02h command-line parameters (allows >64 characters on cmdline)
03h environment inheritance
04h environment string
05h starting window position
---types 01h,02h,04h---
03h N BYTEs ASCII data
---type 03h---
03h BYTE inheritance
00h do not inherit
01h inherit environment
---type 05h---
03h N BYTEs ASCII copy of fields as typed into DVPMAN, separated by commas:
starting row, starting column, starting height, starting width
Note: if there are multiple occurrences of record types 01h, 02h, or 03h,
only the last instance of each type is used; multiple occurrences of
type 04h are concatenated
----------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)
SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
----------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,AH=12h/BH=81h
----------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,AH=12h/BH=82h
----------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,AH=12h/BH=83h
----------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
SeeAlso: AH=12h/BH=83h
----------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
SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h
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,AH=12h/BH=84h
----------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",AH=12h/BH=84h
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
SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
----------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.
SeeAlso: AH=12h/BH=84h
----------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,AH=12h/BH=85h
----------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
SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
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
(DV 2.50+) window
01h (DV 2.50+) current task's window
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
(new priority of task if window handle)
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
for window handles, only the non-blocked task(s) with the highest
priority receive CPU time under DESQview 2.50-2.52; the default
priority is 0Ah
SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
----------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
(DV 2.50+) window
01h (DV 2.50+) current task's window
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
mailbox: (DV/X) get number of bytes queued to mailbox
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: AH=12h/BH=12h"GETNAME",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--BH12-------------------------
INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
AH = 12h
BH = 12h
BL = mailbox for which to retrieve 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 buffer for name
DWORD pointer to buffer
Return: STACK: DWORD length of returned name (or size of buffer, if less)
Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
Note: the returned name is not NUL-terminated
SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
----------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--BH13-------------------------
INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
AH = 12h
BH = 13h
BL = mailbox from which to read
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 size of buffer in bytes
DWORD pointer to buffer
Return: STACK: DWORD number of bytes read
Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
Notes: this call blocks if no input is available, but will return less than
the requested number of bytes if some (but insufficient) data is
available
use this call instead of AH=12h/BH=04h if the mailbox has flag bits
4 or 5 set, as common memory may be exhausted by that call when
attempting to read the next message
SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
----------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
bit 4: (DV/X) append messages with like status and
sender (stream-oriented mail)
bit 5: (DV/X) store mail in expanded memory (pool
grows as needed)
bit 6: (DV/X) make mailbox into non-owned mailbox
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
if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
"READ" (see AH=12h/BX=1300h"READINTO") to retrieve messages
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 (see AH=12h/BH=15h)
Notes: only available if the API level has been set to at least 2.20
if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
"READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",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
----------1512--BH80-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 80h
Note: this function is identical to AH=12h/BH=00h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL:
00h no error
01h invalid values
02h alias invalid
03h handle valid but wrong type
04h invalid handle
SeeAlso: AH=12h/BH=00h
----------1512--BH81-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 81h
Note: this function is identical to AH=12h/BH=01h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=01h
----------1512--BH82-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 82h
Note: this function is identical to AH=12h/BH=02h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=02h
----------1512--BH83-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 83h
Note: this function is identical to AH=12h/BH=03h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
----------1512--BH84-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 84h
Note: this function is identical to AH=12h/BH=04h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
----------1512--BH85-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 85h
Note: this function is identical to AH=12h/BH=05h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=05h
----------1512--BH86-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 86h
Note: this function is identical to AH=12h/BH=06h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=06h
----------1512--BH87-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 87h
Note: this function is identical to AH=12h/BH=07h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=07h
----------1512--BH88-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 88h
Note: this function is identical to AH=12h/BH=08h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=08h
----------1512--BH89-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 89h
Note: this function is identical to AH=12h/BH=09h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=09h
----------1512--BH8A-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 8Ah
Note: this function is identical to AH=12h/BH=0Ah, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=0Ah
----------1512--BH8B-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 8Bh
Note: this function is identical to AH=12h/BH=0Bh, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=0Bh
----------1512--BH8C-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 8Ch
Note: this function is identical to AH=12h/BH=0Ch, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=0Ch
----------1512--BH8D-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 8Dh
Note: this function is identical to AH=12h/BH=0Dh, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=0Dh
----------1512--BH8E-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 8Eh
Note: this function is identical to AH=12h/BH=0Eh, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=0Eh
----------1512--BH8F-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 8Fh
Note: this function is identical to AH=12h/BH=0Fh, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=0Fh
----------1512--BH90-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 90h
Note: this function is identical to AH=12h/BH=10h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=10h
----------1512--BH91-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 91h
Note: this function is identical to AH=12h/BH=11h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
----------1512--BH92-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 92h
Note: this function is identical to AH=12h/BH=12h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
----------1512--BH93-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 93h
Note: this function is identical to AH=12h/BH=13h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=13h
----------1512--BH94-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 94h
Note: this function is identical to AH=12h/BH=14h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=14h
----------1512--BH95-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 95h
Note: this function is identical to AH=12h/BH=15h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=15h
----------1512--BH96-------------------------
INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
AH = 12h
BH = 96h
Note: this function is identical to AH=12h/BH=16h, except that DESQview will
not pop up a "Programming Error" window, instead returning an error
code in AL (see AH=12h/BH=80h)
SeeAlso: AH=12h/BH=16h
----------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 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 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 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.
----------1522-------------------------------
INT 15 U - SYSTEM - LOCATE ROM BASIC (later PS/2's only)
AH = 22h
Return: CF set on error
AH = status
CF clear on success:
ES -> segment of ROM BASIC
----------152400-----------------------------
INT 15 - Qualitas 386MAX v6.01 - TURN ON ???
AX = 2400h
Return: CF clear
AH = 00h
SeeAlso: AX=2401h,AX=2402h
----------152401-----------------------------
INT 15 - Qualitas 386MAX v6.01 - TURN OFF ???
AX = 2401h
Return: CF clear
AH = 00h
SeeAlso: AX=2400h,AX=2402h
----------152402-----------------------------
INT 15 - Qualitas 386MAX v6.01 - GET STATE OF ???
AX = 2402h
Return: CF clear
AH = 00h
AL = current state (00h off, 01h on)
SeeAlso: AX=2400h,AX=2401h
----------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,HP 95LX)
AH = 42h
AL = 00h to use system profile
01h to force suspend regardless of system profile
Note: the HP 95LX apparently suspends regardless of the value in AL; on
power-up, execution will resume following the instruction calling
this function
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
----------154900-----------------------------
INT 15 - Far East MSDOS - GET DOS TYPE
AX = 4900h
Return: CF clear if successful
AH = 00h
BL = type of DOS running
00h DOS/V
01h DOS/J or DOS/K (early IBM Japan versions of MSDOS)
CF set on error
AH = 86h (function not supported)
Note: in practice, DOS/J returns AH=86h; AX DOS does not support this call
SeeAlso: INT 21/AH=30h
----------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 3x9,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