You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6166 lines
230 KiB
6166 lines
230 KiB
3 years ago
|
DESQview/QEMM Interrupt List Release 43 Last change 11/6/94
|
||
|
This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
|
||
|
--------!---FILELIST-------------------------
|
||
|
Please redistribute the following files unmodified as a group, in an archive
|
||
|
named DVINT43 (preferably the original authenticated PKZIP archive):
|
||
|
INTERRUP.1ST the read-me file, containing credits, availability info
|
||
|
DVINT.LST this file (103 pages at 60 lines per page)
|
||
|
RBROWN.TXT a list of other products by Ralf Brown
|
||
|
--------!---CONTACT_INFO---------------------
|
||
|
If you notice any mistakes or omissions, please let me know! It is only with
|
||
|
YOUR help that the list can continue to grow at the current rate. Please send
|
||
|
all changes to me rather than distributing a modified version of the list.
|
||
|
|
||
|
Please read the file INTERRUP.1ST before asking me any questions. You may find
|
||
|
that they have already been addressed.
|
||
|
|
||
|
Ralf Brown
|
||
|
|
||
|
Internet: ralf@telerama.lm.com
|
||
|
UUCP: {uunet,harvard}!telerama.lm.com!ralf
|
||
|
FIDO: Ralf Brown 1:129/26.1
|
||
|
or post a message to me in the DR_DEBUG echo (I probably won't see it
|
||
|
unless you address it to me)
|
||
|
CIS: >INTERNET:ralf@telerama.lm.com
|
||
|
|
||
|
I reply to all e-mail submissions and inquiries, but some of my replies bounce
|
||
|
because of bad return paths. If you don't get a response from me within a
|
||
|
reasonable period of time, send it again with a better return path (starting at
|
||
|
harvard or ucbvax for UUCP, from the Internet for others).
|
||
|
--------!------------------------------------
|
||
|
See INTERRUP.1ST for the key to system abbreviations and a list of the
|
||
|
trademarks mentioned here.
|
||
|
--------!---DISCLAIMER-----------------------
|
||
|
DISCLAIMER: THIS MATERIAL IS PROVIDED "AS IS". I verify the information
|
||
|
contained in this list to the best of my ability, but I cannot be held
|
||
|
responsible for any problems caused by use or misuse of the information,
|
||
|
especially for those functions not officially documented. If it is marked
|
||
|
"internal" or undocumented, you should check it carefully to make sure it
|
||
|
works the same way in your version of the software (and please let me know
|
||
|
whether or not it works the same way). Information marked with "???" is
|
||
|
known to be incomplete or guesswork.
|
||
|
--------!---FLAGS----------------------------
|
||
|
The use of -> instead of = signifies that the indicated register or register
|
||
|
pair contains a pointer to the specified item, rather than the item itself.
|
||
|
One or more letters may follow the interrupt number; they have the following
|
||
|
meanings: U - undocumented function, u - partially documented function,
|
||
|
P - available only in protected mode, R - available only in real or V86 mode,
|
||
|
C - callout or callback (usually hooked rather than called),
|
||
|
O - obsolete (no longer present in current versions)
|
||
|
--------!---CATEGORIES-----------------------
|
||
|
The ninth column of the divider line preceding an entry usually contains a
|
||
|
classification code (the entry has not been classified if that character is
|
||
|
a dash). The codes currently in use are:
|
||
|
A - applications, a - access software (screen readers, etc),
|
||
|
B - BIOS, b - vendor-specific BIOS extensions,
|
||
|
C - CPU-generated, c - caches/spoolers,
|
||
|
D - DOS kernel, d - disk I/O enhancements,
|
||
|
E - DOS extenders, e - electronic mail, F - FAX,
|
||
|
f - file manipulation, G - debuggers/debugging tools, g - games,
|
||
|
H - hardware, h - vendor-specific hardware,
|
||
|
I - IBM workstation/terminal emulators, i - system info/monitoring
|
||
|
J - Japanese, j - joke programs,
|
||
|
K - keyboard enhancers, k - file/disk compression,
|
||
|
l - shells/command interpreters,
|
||
|
M - mouse/pointing device, m - memory management,
|
||
|
N - network, n - non-traditional input devices,
|
||
|
O - other operating systems,
|
||
|
P - printer enhancements, p - power management,
|
||
|
Q - DESQview/TopView and Quarterdeck programs,
|
||
|
R - remote control/file access, r - runtime support,
|
||
|
S - serial I/O, s - sound/speech,
|
||
|
T - DOS-based task switchers/multitaskers, t - TSR libraries
|
||
|
U - resident utilities, u - emulators,
|
||
|
V - video, v - virus/antivirus,
|
||
|
W - MS Windows, X - expansion bus BIOSes,
|
||
|
y - security, * - reserved (and not otherwise classified)
|
||
|
--------H-0A---------------------------------
|
||
|
INT 0A - IRQ2 - LPT2 (PC), VERTICAL RETRACE INTERRUPT (EGA,VGA)
|
||
|
Notes: the TOPS and PCnet adapters use this interrupt request line by default
|
||
|
DOS 3.2 revectors IRQ2 to a stack-switching routine
|
||
|
on ATs and above, the physical data line for IRQ2 is labeled IRQ9 and
|
||
|
connects to the slave 8259. The BIOS redirects the interrupt for
|
||
|
IRQ9 back here.
|
||
|
under DESQview, only the INT 15h vector and BASIC segment address (the
|
||
|
word at 0000h:0510h) may be assumed to be valid for the handler's
|
||
|
process
|
||
|
many VGA boards do not implement the vertical retrace interrupt,
|
||
|
including the IBM VGA Adapter where the traces are either cut or
|
||
|
removed
|
||
|
SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71,INT 7A"GO32"
|
||
|
--------H-0D---------------------------------
|
||
|
INT 0D - IRQ5 - FIXED DISK (PC,XT), LPT2 (AT), reserved (PS/2)
|
||
|
Notes: under DESQview, only the INT 15h vector and BASIC segment address (the
|
||
|
word at 0000h:0510h) may be assumed to be valid for the handler's
|
||
|
process
|
||
|
the Tandy 1000, 1000A, and 1000HD use IRQ2 for the hard disk; the
|
||
|
1000EX, HX, RLX, RLX-HD, RLX-B, RLX-HD-B use IRQ5 instead; the
|
||
|
1000RL, RL-HD, SL, SL/2, TL, TL/2, and TL/3 are jumper-selectable
|
||
|
for either IRQ2 or IRQ5 (default IRQ5); the 1000SX and TX are
|
||
|
DIP-switch selectable for IRQ2 or IRQ5 (default IRQ2); the RSX and
|
||
|
RSX-HD use IRQ14. Tandy systems which use IRQ2 for the hard disk
|
||
|
interrupt use IRQ5 for vertical retrace.
|
||
|
may be masked by setting bit 5 on I/O port 21h
|
||
|
SeeAlso: INT 0E"IRQ6",INT 0F"IRQ7",INT 55"DESQview",INT 5D"DoubleDOS"
|
||
|
SeeAlso: INT 7D"GO32"
|
||
|
--------V-1000-------------------------------
|
||
|
INT 10 - VIDEO - SET VIDEO MODE
|
||
|
AH = 00h
|
||
|
AL = mode (see #0009)
|
||
|
Return: AL = video mode flag (Phoenix, AMI BIOS)
|
||
|
20h mode > 7
|
||
|
30h modes 0-5 and 7
|
||
|
3Fh mode 6
|
||
|
AL = CRT controller mode byte (Phoenix 386 BIOS v1.10)
|
||
|
Desc: specify the display mode for the currently active display adapter
|
||
|
Notes: IBM standard modes do not clear the screen if the high bit of AL is set
|
||
|
(EGA or higher only)
|
||
|
SeeAlso: AX=0070h,AX=007Eh,AX=10E0h,AX=10F0h,AH=40h,AX=6F05h,AH=FFh"GO32"
|
||
|
|
||
|
(Table 0009)
|
||
|
Values for video mode:
|
||
|
text/ text pixel pixel colors disply scrn system
|
||
|
grph resol box resolution pages addr
|
||
|
21h = T 132x30 . . 16 . . Avance Logic AL2101
|
||
|
= G 80x43 8x8 720x348 mono . B000 DESQview 2.x+Hercules [4]
|
||
|
22h = T 132x43 . . . . . Allstar Peacock (VGA)
|
||
|
= G 80x43 8x8 720x348 mono . B800 DESQview 2.x+Hercules [4]
|
||
|
Notes:
|
||
|
[4] DESQview intercepts calls to change into these two modes (21h is page 0,
|
||
|
22h is page 1) even if there is no Hercules graphics board installed
|
||
|
--------Q-1080--DX4456-----------------------
|
||
|
INT 10 U - VIDEO - DESQview 2.0x only - internal - SET ??? HANDLER
|
||
|
AH = 80h
|
||
|
DX = 4456h ('DV')
|
||
|
ES:DI -> FAR subroutine to be called on ???
|
||
|
Return: DS = segment of DESQview data structure for video buffer
|
||
|
Note: this function is probably meant for internal use only, due to the magic
|
||
|
value required in DX
|
||
|
the subroutine seems to be called when the DESQview menu is accessed;
|
||
|
on entry, AL = 03h or 04h
|
||
|
--------Q-1081--DX4456-----------------------
|
||
|
INT 10 U - VIDEO - DESQview 2.0x only - internal - GET ???
|
||
|
AH = 81h
|
||
|
DX = 4456h ('DV')
|
||
|
Return: ES = segment of DESQview data structure for video buffer
|
||
|
BYTE ES:[0] = current window number in DV 2.0x
|
||
|
Note: this function is probably meant for internal use only, due to the magic
|
||
|
value required in DX
|
||
|
SeeAlso: AH=82h"DESQview"
|
||
|
--------Q-1082--DX4456-----------------------
|
||
|
INT 10 U - VIDEO - DESQview 2.0x only - internal - GET CURRENT WINDOW INFO
|
||
|
AH = 82h
|
||
|
DX = 4456h ('DV')
|
||
|
Return: DS = segment in DESQview for data structure
|
||
|
in DV 2.00,
|
||
|
BYTE DS:[0] = window number
|
||
|
WORD DS:[1] = segment of other data structure
|
||
|
WORD DS:[3] = segment of window's object handle
|
||
|
ES = segment of DESQview data structure for video buffer
|
||
|
AL = current window number
|
||
|
AH = ???
|
||
|
BL = direct screen writes
|
||
|
00h program does not do direct writes
|
||
|
01h program does direct writes, so shadow buffer not usable
|
||
|
BH = ???
|
||
|
CL = current video mode
|
||
|
CH = ???
|
||
|
Note: this function is probably meant for internal use only, due to the magic
|
||
|
value required in DX
|
||
|
SeeAlso: AH=81h"DESQview"
|
||
|
--------V-10FE-------------------------------
|
||
|
INT 10 - TopView - GET SHADOW BUFFER
|
||
|
AH = FEh
|
||
|
ES:DI -> assumed video buffer
|
||
|
B800h:0000h color text/CGA graphics, B000h:0000h mono text,
|
||
|
or A000h:0000h EGA/VGA graphics (RSIS environments only)
|
||
|
Return: ES:DI -> actual video buffer for calling process
|
||
|
Desc: Determine the address of the virtual screen to which the program
|
||
|
should write instead of the actual video memory; this permits
|
||
|
programs to be multitasked without interfering with each other's
|
||
|
output, and allows memory managers to move the video memory to
|
||
|
permit larger programs to be loaded.
|
||
|
Notes: if no multitasker or RSIS-compliant environment is installed, ES:DI is
|
||
|
returned unchanged; RSIS is the Relocated Screen Interface
|
||
|
Specification
|
||
|
for display pages other than 0, use AH=05h and AH=0Fh to determine
|
||
|
whether a particular page exists
|
||
|
TopView requires a call to AH=FFh to notify it that the screen has
|
||
|
changed; DESQview will check for changes itself until the first call
|
||
|
to AH=FFh
|
||
|
SeeAlso: AH=05h,AX=5201h,AH=FFh,INT 15/AX=1024h,INT 21/AH=2Bh"DESQview"
|
||
|
SeeAlso: INT 21/AH=ECh"DoubleDOS"
|
||
|
--------V-10FF-------------------------------
|
||
|
INT 10 - TopView - UPDATE SCREEN FROM SHADOW BUFFER
|
||
|
AH = FFh
|
||
|
CX = number of consecutive changed characters
|
||
|
ES:DI -> first changed character in shadow buffer
|
||
|
Notes: avoid CX=0000h
|
||
|
DESQview will discontinue the automatic screen updating initiated by
|
||
|
AH=FEh after this call
|
||
|
not supported (ignored) by DESQview/X 1.0x
|
||
|
SeeAlso: AH=93h,AH=FEh
|
||
|
--------d-1320-------------------------------
|
||
|
INT 13 - DISK - ??? (Western Digital "Super BIOS")
|
||
|
AH = 20h
|
||
|
???
|
||
|
Return: ???
|
||
|
Notes: returns some kind of status related to whether the drive contains its
|
||
|
default media type
|
||
|
QEMM v6.00 calls INT 13/AX=2000h/DL=81h in some cases
|
||
|
--------Q-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
|
||
|
--------Q-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+)
|
||
|
AX = status (DV v2.42)
|
||
|
0000h successful
|
||
|
0001h failed
|
||
|
Note: use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
|
||
|
common memory. Under DV v2.42, this call never generates a user
|
||
|
prompt regardless of the SETERROR value; instead, it always returns
|
||
|
AX=0001h and ES:DI=0000h:0000h if out of memory
|
||
|
SeeAlso: AX=1002h,AX=102Eh,AX=DE0Ch,AX=DE15h
|
||
|
--------Q-151002-----------------------------
|
||
|
INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
|
||
|
AX = 1002h
|
||
|
ES:DI -> previously allocated block
|
||
|
Return: block freed
|
||
|
SeeAlso: AX=1001h,AX=DE0Dh
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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)
|
||
|
--------Q-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
|
||
|
--------Q-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 on return from
|
||
|
hardware interrupt
|
||
|
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
|
||
|
--------Q-151016-----------------------------
|
||
|
INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
|
||
|
AX = 1016h
|
||
|
ES:DI = possible object handle
|
||
|
Return: BX = status
|
||
|
FFFFh if ES:DI is a valid object handle (see #0282)
|
||
|
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 a unique object
|
||
|
number and offset into DESQview's common memory)
|
||
|
SeeAlso: AX=DE14h,AX=DE2Bh,AX=DE2Ch
|
||
|
|
||
|
(Table 0281)
|
||
|
Values for DESQview object type:
|
||
|
00h window/task
|
||
|
01h mailbox
|
||
|
02h keyboard
|
||
|
03h timer
|
||
|
04h pointer
|
||
|
05h panel
|
||
|
06h objectq
|
||
|
|
||
|
Format of DESQview object:
|
||
|
Offset Size Description (Table 0282)
|
||
|
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 (see #0281)
|
||
|
08h DWORD object handle to return to caller
|
||
|
0Ch DWORD canonicalized object address (segment = common memory)
|
||
|
10h WORD offset in common memory of owning task
|
||
|
(0000h for unowned OBJECTQs)
|
||
|
12h WORD mapping context
|
||
|
offset in common memory of mapping context record (see #0284)
|
||
|
remainder varies by object type and DESQview version
|
||
|
---v2.42 keyboard object---
|
||
|
14h WORD flag bits (see also AH=12h/BH=0Ah"OBJECT")
|
||
|
bit 15: keyboard opened
|
||
|
16h 4 BYTEs ???
|
||
|
1Ah WORD priority in OBJECTQ???
|
||
|
1Ch ...
|
||
|
25h WORD offset in common memory of ??? task
|
||
|
27h 4 BYTEs ???
|
||
|
---v2.42 objectq object---
|
||
|
14h WORD flag bits (see also AH=12h/BH=0Ah"OBJECT")
|
||
|
bit 15: OBJECTQ opened
|
||
|
16h 2 BYTEs ???
|
||
|
18h WORD offset in common memory of ??? task
|
||
|
1Ah 6 BYTEs ???
|
||
|
---v2.42 mailbox object---
|
||
|
14h WORD flag bits (see also AH=12h/BH=0Ah"OBJECT")
|
||
|
bit 15: mailbox opened
|
||
|
1Ah WORD priority in OBJECTQ???
|
||
|
1Ch 6 BYTEs ???
|
||
|
22h WORD offset in common memory of mailbox name (counted string)
|
||
|
0000h if no name
|
||
|
<= 5 BYTEs ???
|
||
|
---v2.22-2.42,2.52,2.60 window/task object---
|
||
|
14h BYTE 00h window, 01h task
|
||
|
15h BYTE internal (not Switch menu) window number???
|
||
|
16h BYTE internal (not Switch menu) window number???
|
||
|
17h WORD segment of internal window record (see #0285)
|
||
|
19h 2 BYTEs ???
|
||
|
1Bh BYTE cursor row
|
||
|
1Ch BYTE cursor column
|
||
|
1Dh BYTE visible window origin, row
|
||
|
1Eh BYTE visible window origin, column
|
||
|
1Fh BYTE window height (logical)
|
||
|
20h BYTE window width (logical)
|
||
|
21h BYTE window position, row
|
||
|
22h BYTE window position, column
|
||
|
23h BYTE window height (visible)
|
||
|
24h BYTE window width (visible)
|
||
|
25h BYTE row of top of frame (or window if unframed)
|
||
|
26h BYTE column of left of frame (or window if unframed)
|
||
|
27h BYTE window height (physical, including frame)
|
||
|
28h BYTE window width (physical, including frame)
|
||
|
29h BYTE unzoomed visible origin, row (00h before first zoom)
|
||
|
2Ah BYTE unzoomed visible origin, column (00h before first zoom)
|
||
|
2Bh BYTE unzoomed window position, row (00h before first zoom)
|
||
|
2Ch BYTE unzoomed window position, column (00h before first zoom)
|
||
|
2Dh BYTE unzoomed window height (00h before first zoom)
|
||
|
2Eh BYTE unzoomed window width (00h before first zoom)
|
||
|
unzoomed parameters above are updated when window is zoomed
|
||
|
to full screen
|
||
|
2Fh BYTE ??? initially logical window height
|
||
|
30h BYTE ??? initially logical window width
|
||
|
31h 2 BYTEs ???
|
||
|
33h BYTE minimum height of window
|
||
|
34h BYTE minimum width of window
|
||
|
35h BYTE maximum height of window
|
||
|
36h BYTE maximum width of window
|
||
|
37h 3 BYTEs ???
|
||
|
3Ah 8 BYTEs window frame characters: ul,ur,ll,lr,t,b,l,r
|
||
|
42h 24 BYTEs attributes???
|
||
|
5Ah 8 BYTEs window frame characters: ul,ur,ll,lr,t,b,l,r
|
||
|
62h 3 BYTEs ???
|
||
|
65h BYTE ??? bitflags
|
||
|
66h BYTE bit 0: window is zoomed
|
||
|
67h BYTE ???
|
||
|
68h WORD offset in common memory of window name or 0000h if untitled
|
||
|
6Ah WORD length of window name
|
||
|
6Ch 2 BYTEs ???
|
||
|
6Eh WORD offset of logical cursor in window (in character cells)
|
||
|
70h DWORD pointer to field table for window
|
||
|
74h BYTE ???
|
||
|
75h 2 BYTEs ???
|
||
|
77h BYTE number of last-visited field
|
||
|
78h DWORD pointer to field table entry for last-visited field
|
||
|
7Ch 3 BYTEs ???
|
||
|
7Fh BYTE select field marker character
|
||
|
80h BYTE ??? bit flags
|
||
|
bit 0: allow ECh window stream opcode to change reverse logattr
|
||
|
bit 1: alternate field processing mode selected
|
||
|
81h BYTE ???
|
||
|
82h DWORD notification function (manager stream opcode 8Ah)
|
||
|
no notification if segment = 0000h
|
||
|
86h DWORD notification argument (manager stream opcode 8Bh)
|
||
|
8Ah WORD offset in common memory of ??? window object or 0000h
|
||
|
8Ch WORD offset in common memory of ??? window object or 0000h
|
||
|
8Eh WORD offset in common memory of ??? window object or 0000h
|
||
|
90h BYTE ??? bitflags
|
||
|
91h BYTE ???
|
||
|
---task object only
|
||
|
92h BYTE bit flags (bits 0-4)
|
||
|
93h BYTE character for ??? (default 20h)
|
||
|
94h BYTE ??? flag
|
||
|
95h WORD offset in common memory of ???
|
||
|
97h 2 BYTEs ???
|
||
|
99h WORD ???
|
||
|
9Bh BYTE ??? bit flags
|
||
|
bit 3: ???
|
||
|
bit 6: perform protected-attribute processing on select fields
|
||
|
9Ch BYTE ???
|
||
|
9Dh WORD offset in common memory of current register save record
|
||
|
(see #0283). No register save record in use if < 01C0h
|
||
|
9Fh WORD offset in common memory of task's keyboard object
|
||
|
A1h WORD offset in common memory of task's OBJECTQ object
|
||
|
A3h WORD offset in common memory of task's mailbox object
|
||
|
A5h WORD semaphore: FFFFh if on user stack, else on task's private stack
|
||
|
A7h DWORD user's SS:SP
|
||
|
ABh WORD task's private SP (SS read from offset 0Ah)
|
||
|
ADh 6 BYTEs ???
|
||
|
B3h BYTE ??? bit flags
|
||
|
bit 0: run in foreground only
|
||
|
B4h BYTE ???
|
||
|
B5h BYTE ??? bitflags
|
||
|
B6h BYTE task status (see #0386 at AX=DE2Ch)
|
||
|
B7h 9 BYTEs ???
|
||
|
C0h WORD head pointer for keyboard buffer (wraps back to 00h after 80h)
|
||
|
C2h WORD tail pointer for keyboard buffer (wraps back to 00h after 80h)
|
||
|
C4h 2 BYTEs ??? (0000h)
|
||
|
C6h WORD segment of keyboard buffer for task
|
||
|
C8h WORD offset in common memory of ??? keyboard object
|
||
|
CAh BYTE ???
|
||
|
---v2.22-2.42
|
||
|
CBh WORD offset in common memory of ??? object
|
||
|
CEh BYTE ??? flag
|
||
|
CFh WORD offset in common memory of default notify window for task
|
||
|
or 0000h if none
|
||
|
D1h 4 BYTEs ???
|
||
|
D5h BYTE window number on Switch Window menu
|
||
|
D6h 5 BYTEs ???
|
||
|
DBh WORD offset in common memory of ??? object
|
||
|
DDh 2 BYTEs ???
|
||
|
DFh WORD API level for task
|
||
|
E1h WORD offset in common memory of object task is waiting on if task
|
||
|
status is 'waiting', else 0000h
|
||
|
E7h WORD segment of ???
|
||
|
E9h 4 BYTEs ???
|
||
|
EDh WORD EMS handle of virtualization buffer, 0000h if no virtualization
|
||
|
F1h 12 BYTEs ???
|
||
|
FBh WORD ???
|
||
|
FDh BYTE ???
|
||
|
FFh 12 BYTEs ???
|
||
|
10Bh DWORD pointer to process record (see #0286,#0287)
|
||
|
10Dh 10 BYTEs ???
|
||
|
119h DWORD SS:SP for ???
|
||
|
11Dh 4 BYTEs ???
|
||
|
121h DWORD pointer to ???
|
||
|
125h 25 BYTEs ???
|
||
|
13Eh DWORD pointer to ??? in system memory
|
||
|
---v2.22
|
||
|
142h 3 BYTEs ???
|
||
|
145h task's default keyboard object
|
||
|
---v2.42
|
||
|
142h DWORD pointer to first task instance data record in system memory
|
||
|
148h DWORD pointer to last task instance data record in system memory
|
||
|
(see #0288)
|
||
|
14Ah BYTE ???
|
||
|
14Dh 42 BYTEs task's default keyboard object
|
||
|
177h 32 BYTEs task's ObjectQ object
|
||
|
197h 41 BYTEs task's default mailbox object
|
||
|
1C0h 24 BYTEs first register save record
|
||
|
450h -- default top of private stack
|
||
|
---v2.52 (probably all DV/X)
|
||
|
Same as v2.60 below except there is an extra 29 bytes inserted somewhere
|
||
|
before offset 9Fh, but not yet known exactly where. Also, for the WAIT_ON
|
||
|
field (v2.60 offset E3h), some X apps (probably waiting on a socket) have
|
||
|
0000h even when waiting.
|
||
|
---v2.60
|
||
|
CBh WORD ??? (added in 2.50 - rest is same as 2.42)
|
||
|
CDh WORD offset in common memory of ??? object
|
||
|
D0h BYTE ??? flag
|
||
|
D1h WORD offset in common memory of default notify window for task
|
||
|
or 0000h if none
|
||
|
D3h 4 BYTEs ???
|
||
|
D7h BYTE window number on Switch Window menu
|
||
|
D8h 5 BYTEs ???
|
||
|
DDh WORD offset in common memory of ??? object
|
||
|
DFh 2 BYTEs ???
|
||
|
E1h WORD API level for task
|
||
|
E3h WORD If status at B6h=waiting, offset in common memory of object
|
||
|
that task is waiting on, else 0000h. (Task with CPU also
|
||
|
has 0000h here)
|
||
|
E9h WORD segment of ???
|
||
|
EBh 4 BYTEs ???
|
||
|
EFh WORD EMS handle of virtualization buffer, 0 if no virtualization
|
||
|
F3h 12 BYTEs ???
|
||
|
FDh WORD ???
|
||
|
FFh BYTE ???
|
||
|
101h 8 BYTEs ???
|
||
|
109h DWORD pointer to process record in system memory
|
||
|
10Dh 14 BYTEs ???
|
||
|
11Bh DWORD SS:SP for ???
|
||
|
11Fh 4 BYTEs ???
|
||
|
123h DWORD pointer to ???
|
||
|
127h 25 BYTEs ???
|
||
|
140h DWORD pointer to ??? in system memory
|
||
|
144h DWORD pointer to first task instance data record in system memory
|
||
|
148h DWORD pointer to last task instance data record in system memory
|
||
|
(from INT 15/AX=DE27h, see below)
|
||
|
14Ch BYTE ???
|
||
|
14Eh 42 BYTEs task's default keyboard object
|
||
|
179h 32 BYTEs task's ObjectQ object
|
||
|
199h 41 BYTEs task's default mailbox object
|
||
|
1C2h 24 BYTEs first register save record
|
||
|
452h -- default top of private stack
|
||
|
|
||
|
Format of DESQview Register Save Record:
|
||
|
Offset Size Description (Table 0283)
|
||
|
00h WORD AX
|
||
|
02h WORD BX
|
||
|
04h WORD CX
|
||
|
06h WORD DX
|
||
|
08h WORD DI
|
||
|
0Ah WORD SI
|
||
|
0Eh WORD DS
|
||
|
10h WORD ES
|
||
|
12h DWORD return address
|
||
|
16h WORD original flags
|
||
|
|
||
|
Format of DESQview mapping context record:
|
||
|
Offset Size Description (Table 0284)
|
||
|
00h WORD lowest segment in process's memory
|
||
|
(often start of system memory chain)
|
||
|
02h WORD size of process's memory in paragraphs
|
||
|
04h BYTE flag: 00h if process swapped out, 01h otherwise
|
||
|
05h BYTE flag: 00h if allocated in conventional memory, 01h if EMS
|
||
|
06h 2 BYTEs ???
|
||
|
08h WORD EMS handle if in EMS, else 0
|
||
|
0Ah 2 BYTEs ??? (nonzero if system memory resides in shared mem???)
|
||
|
0Ch WORD segment of system memory block that contains process record,
|
||
|
referenced from segment of start of system memory chain
|
||
|
0Eh BYTE ???
|
||
|
0Fh WORD size of system memory block that contains process record
|
||
|
and DOS memory in paragraphs
|
||
|
11h BYTE bit flags
|
||
|
Bit 0: Swapped out???
|
||
|
Bit 1: ???
|
||
|
Bit 2: Swapped out???
|
||
|
12h BYTE ???
|
||
|
13h BYTE reference count
|
||
|
---v2.31
|
||
|
14h 10 BYTEs ???
|
||
|
1Eh WORD segment of process record
|
||
|
20h 2 BYTEs ???
|
||
|
22h WORD segment of ??? (in first free system memory block???)
|
||
|
24h WORD segment of end of system memory chain
|
||
|
26h WORD segment of start of system memory chain
|
||
|
28h 8 BYTEs ???
|
||
|
2Ah DWORD pointer to ??? (process record???)
|
||
|
2Dh 10 BYTEs ???
|
||
|
37h BYTE lowest interrupt vector to save on context switch
|
||
|
38h BYTE highest interrupt vector to save on context switch
|
||
|
39h WORD offset in common memory of main task with this context
|
||
|
3Ah 12 BYTEs ???
|
||
|
46h BYTE internal mapping context number
|
||
|
47h 12 BYTEs ???
|
||
|
---v2.5x-2.60
|
||
|
14h 6 BYTEs ???
|
||
|
1Ah WORD segment of process record
|
||
|
1Ch 2 BYTEs ???
|
||
|
1Eh WORD segment of first free system memory block
|
||
|
20h WORD segment of start of system memory chain
|
||
|
22h WORD segment of end of system memory chain
|
||
|
24h 8 BYTEs ???
|
||
|
2Ch DWORD pointer to ??? (1 segment into process record???)
|
||
|
30h 3 BYTEs ???
|
||
|
33h WORD Offset in common memory of main task with this context
|
||
|
35h 7 BYTEs ???
|
||
|
3Ch BYTE internal mapping context number
|
||
|
3Dh 14 BYTEs ???
|
||
|
4Bh WORD first DOS memory segment (first MCB segment+1)
|
||
|
4Dh BYTE ??? (flag???)
|
||
|
---v2.53 (2.5x???)
|
||
|
4Eh 12 BYTEs ???
|
||
|
---v2.60
|
||
|
4Eh WORD segment of script buffer (see #0289)
|
||
|
50h 6 BYTEs ???
|
||
|
|
||
|
Format of DESQview Internal Window Record (v2.31-2.60):
|
||
|
Offset Size Description (Table 0285)
|
||
|
00h BYTE internal window number???
|
||
|
01h BYTE display page???
|
||
|
02h BYTE video mode
|
||
|
03h 3 BYTEs ???
|
||
|
06h BYTE logical window height
|
||
|
07h BYTE logical window width
|
||
|
08h DWORD pointer to text video buffer
|
||
|
0Ch 116 BYTEs ???
|
||
|
|
||
|
Format of DESQview process record (v2.31):
|
||
|
Offset Size Description (Table 0286)
|
||
|
-470h 13 BYTEs filename of ??? Script
|
||
|
-463h 1117 BYTEs ??? (script buffer???)
|
||
|
-6h 6 BYTEs ???
|
||
|
00h WORD segment of parent PSP in process
|
||
|
02h 5 BYTEs ???
|
||
|
07h WORD segment of current PSP in process
|
||
|
09h WORD segment of first MCB in process
|
||
|
0Bh 13 BYTEs ???
|
||
|
18h 1024 BYTEs process's interrupt vector table
|
||
|
418h 376 BYTEs ???
|
||
|
590h first MCB in process
|
||
|
|
||
|
Format of DESQview process record (v2.52-v2.60) (probably also 2.5x):
|
||
|
Offset Size Description (Table 0287)
|
||
|
00h 28 BYTEs EXE header of last EXE, ??? if last program run was COM
|
||
|
1Ch ??? BYTEs overwritten with ASCIZ filename of last program run (EXE/COM)
|
||
|
11Ch WORD segment of parent PSP in process
|
||
|
11Eh 4 BYTEs ???
|
||
|
122h WORD segment of current PSP
|
||
|
124h WORD segment of current PSP
|
||
|
126h WORD segment of first MCB in process
|
||
|
128h 4 BYTEs ???
|
||
|
12Ch DWORD pointer to first process instance data record in system memory
|
||
|
130h DWORD pointer to last process instance data record in system memory
|
||
|
(from INT 15/AX=DE27h, see below)
|
||
|
134h 8 BYTEs ???
|
||
|
13Ch WORD size of current environment
|
||
|
13Eh WORD segment of current environment
|
||
|
140h WORD segment of current PSP
|
||
|
142h DWORD entry point of current program
|
||
|
146h 10 BYTEs ???
|
||
|
---v2.52 (v2.5x???)
|
||
|
150h BYTE ???
|
||
|
151h WORD segment of parent PSP in process
|
||
|
153h WORD ???
|
||
|
155h WORD ???
|
||
|
157h WORD ???
|
||
|
159h 4 BYTEs ???
|
||
|
15Dh WORD segment of current environment
|
||
|
15Fh WORD segment of current PSP
|
||
|
161h WORD segment of ???
|
||
|
162h WORD ???
|
||
|
164h 3 BYTEs ???
|
||
|
168h 1024 BYTEs process's interrupt vector table
|
||
|
568h 120 BYTEs ???
|
||
|
5E0h first MCB in process
|
||
|
---v2.60
|
||
|
150h WORD segment of parent PSP in process
|
||
|
152h WORD ???
|
||
|
154h WORD ???
|
||
|
156h WORD ???
|
||
|
158h 4 BYTEs ???
|
||
|
15Ch WORD segment of current environment
|
||
|
15Eh WORD segment of current PSP
|
||
|
160h WORD segment of ???
|
||
|
162h WORD ???
|
||
|
164h 1024 BYTEs process's interrupt vector table
|
||
|
564h 108 BYTEs ???
|
||
|
5D0h first MCB in process
|
||
|
|
||
|
Format of DESQview task or process instance data record (v2.5x???, v2.60):
|
||
|
Offset Size Description (Table 0288)
|
||
|
00h DWORD pointer to next record of same type or 00000000
|
||
|
04h DWORD pointer to previous record of same type or 00000000
|
||
|
08h DWORD pointer to source area of memory during restore state
|
||
|
0Ch WORD number of bytes to save/restore
|
||
|
0Eh DWORD pointer to destination area of memory during restore state
|
||
|
12h WORD ??? (0)
|
||
|
14h N BYTEs source memory buffer during restore state
|
||
|
|
||
|
Format of DESQview script buffer (v2.60):
|
||
|
Offset Size Description (Table 0289)
|
||
|
00h 13 BYTEs ASCIZ Script filename
|
||
|
0Dh 80 BYTEs ???
|
||
|
5Eh N BYTEs script records (see #0290)
|
||
|
|
||
|
Format of one DESQview script record (v2.60):
|
||
|
Offset Size Description (Table 0290)
|
||
|
00h BYTE signature 12h
|
||
|
01h 18 BYTEs blank-padded script name
|
||
|
13h BYTE ASCII code of key attached to script or 0 if non-ASCII key
|
||
|
14h BYTE scan code of key attached to script if non-ASCII, else 0
|
||
|
15h BYTE ???
|
||
|
16h WORD size of script in bytes
|
||
|
18h N BYTEs script (ASCII code of each keystroke; if 0, next byte is
|
||
|
scan code of non-ASCII key)
|
||
|
|
||
|
Format of DESQview Common Memory Header (v2.31-2.60):
|
||
|
Offset Size Description (Table 0291)
|
||
|
00h WORD offset of lowest used block
|
||
|
02h WORD bytes of commom memory, including header
|
||
|
04h WORD offset of first free block
|
||
|
06h N BYTEs size depends of DV version, ??? (DVP buffer???)
|
||
|
Note: the above is located at the beginning of the commom memory segment
|
||
|
SeeAlso: #0292,#0293,#0298
|
||
|
|
||
|
Format of DESQview Free block header:
|
||
|
Offset Size Description (Table 0292)
|
||
|
00h WORD size of block in bytes including header
|
||
|
02h WORD offset of next free block
|
||
|
04h N BYTEs free block
|
||
|
SeeAlso: #0291,#0293
|
||
|
|
||
|
Format of DESQview Used block header:
|
||
|
Offset Size Description (Table 0293)
|
||
|
00h WORD size of block in bytes including header
|
||
|
02h N BYTEs used block
|
||
|
SeeAlso: #0291,#0292
|
||
|
--------Q-151017-----------------------------
|
||
|
INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
|
||
|
AX = 1017h
|
||
|
Return: pops up "Programming error" window in DV 2.x
|
||
|
--------Q-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 if no window
|
||
|
SeeAlso: AX=1023h,AX=1024h
|
||
|
--------Q-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: AH=82h"HUNTER",INT 16/AH=73h
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-151020-----------------------------
|
||
|
INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
|
||
|
AX = 1020h
|
||
|
Return: pops up "Programming error" window in DV v2.00+
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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 = general window position (see #0294)
|
||
|
CH = number of columns to offset from position specified by DL
|
||
|
CL = number of rows to offset from position specified by DL
|
||
|
Return: nothing
|
||
|
|
||
|
Bitfields for TopView general window position:
|
||
|
Bit(s) Description (Table 0294)
|
||
|
0,1 horizontal position
|
||
|
00 = current, 01 = center, 10 = left, 11 = right
|
||
|
2,3 vertical position
|
||
|
00 = current, 01 = center, 10 = top, 11 = bottom
|
||
|
4 don't redraw screen if set
|
||
|
5-7 not used
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-15102C-----------------------------
|
||
|
INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
|
||
|
AX = 102Ch
|
||
|
ES:DI -> contents of .PIF/.DVP file (see #0295)
|
||
|
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 (Table 0295)
|
||
|
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 KB
|
||
|
22h WORD minimum memory required in KB
|
||
|
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 KB
|
||
|
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 (see also offset 184h)
|
||
|
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 (see also offset 18Bh)
|
||
|
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 KB
|
||
|
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
|
||
|
set by DV 2.3+ when "Runs in Background" = "D" (undoc)
|
||
|
bit 2: don't virtualize (see also offset 18Bh)
|
||
|
bit 1: foreground-only during DOS calls
|
||
|
set by DV 2.3+ when "Runs in Background" = "D" (undoc)
|
||
|
185h BYTE keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
|
||
|
(see #0296)
|
||
|
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 (see also offset 17Ch)
|
||
|
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 (see also offset 184h)
|
||
|
bit 2: virtualize graphics (see also offset 184h)
|
||
|
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
|
||
|
bits 3-7: unused (0)
|
||
|
bit 2: don't display wait message when opening window
|
||
|
bit 1: don't display DOS window
|
||
|
bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
|
||
|
(NEWPROC) inherit DOS client layer usage
|
||
|
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 #0297)
|
||
|
|
||
|
Bitfields for DESQview keyboard conflict level:
|
||
|
Bit(s) Description (Table 0296)
|
||
|
3 save/restore entire INT 09 handler state every taskswtch
|
||
|
2 take special precautions for programs which read the BIOS keyboard
|
||
|
buffer directly from memory
|
||
|
1 never indicate keystroke available during scripts/xfers
|
||
|
0 only indicate keystroke available every sixth poll
|
||
|
|
||
|
Format of DESQview/X variable length record:
|
||
|
Offset Size Description (Table 0297)
|
||
|
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
|
||
|
--------Q-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
|
||
|
--------Q-15102E-----------------------------
|
||
|
INT 15 - DESQview v2.40+ - ALLOCATE SYSTEM MEMORY
|
||
|
AX = 102Eh
|
||
|
BX = number of bytes
|
||
|
Return: AX = status
|
||
|
0000h successful
|
||
|
ES:DI -> allocated system memory (see #0298)
|
||
|
0001h failed
|
||
|
ES:DI = 0000h:0000h
|
||
|
Note: under DV 2.42, this call is identical to AX=1001h
|
||
|
SeeAlso: AX=1001h,AX=1002h,AX=DE0Ch
|
||
|
|
||
|
Format of DESQview system memory block header:
|
||
|
Offset Size Description (Table 0298)
|
||
|
00h WORD segment of next header or 0000h
|
||
|
02h WORD segment of previous header or 0000h
|
||
|
04h WORD size of block in paragraphs, including header
|
||
|
06h BYTE availability flag (00h in use, 01h free)
|
||
|
Note: this header is located one paragraph before the memory block proper
|
||
|
SeeAlso: #0291
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------m-1511DE-----------------------------
|
||
|
INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
|
||
|
AX = 11DEh
|
||
|
Return: CF clear if installed
|
||
|
AX = segment at which QEXT.SYS is located
|
||
|
Desc: QEXT.SYS is Quarterdeck's HMA manager for DESQview; more recent
|
||
|
versions also implement the XMS standard
|
||
|
Note: a private entry point (see #0299) 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 2F/AX=4310h,INT 67/AH=3Fh
|
||
|
|
||
|
(Table 0299)
|
||
|
Call QEXT.SYS private entry point with:
|
||
|
AH = 00h ???
|
||
|
AH = nonzero ???
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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: STACK popped
|
||
|
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
|
||
|
--------Q-1512--BX0300-----------------------
|
||
|
INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
|
||
|
AH = 12h
|
||
|
BX = 0300h
|
||
|
STACK: DWORD handle of panel object (see #0300)
|
||
|
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 TopView panel file:
|
||
|
Offset Size Description (Table 0300)
|
||
|
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
|
||
|
--------Q-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
|
||
|
--------Q-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 of pointer message (see #0301)
|
||
|
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 DESQview pointer message:
|
||
|
Offset Size Description (Table 0301)
|
||
|
00h WORD row
|
||
|
02h WORD column
|
||
|
04h BYTE status (see #0302)
|
||
|
05h BYTE field number or zero (APILEVEL >= 2.00 only)
|
||
|
|
||
|
Bitfields for DESQview pointer status:
|
||
|
Bit(s) Description (Table 0302)
|
||
|
7-2 number of clicks-1 if multiple-click mode active
|
||
|
7 set when press/release mode active and button pressed
|
||
|
6 set when press/release mode active and button released
|
||
|
1-0 button pressed (00=none,01=button1,10=button2)
|
||
|
--------Q-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
|
||
|
--------Q-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 window which was used
|
||
|
DWORD handle of keyboard or 0
|
||
|
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
|
||
|
--------Q-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
|
||
|
--------Q-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 (see #0303)
|
||
|
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
|
||
|
|
||
|
Format of stream data structure:
|
||
|
Offset Size Description (Table 0303)
|
||
|
00h BYTE 1Bh magic value identifying start of stream
|
||
|
01h BYTE stream type (00h, 01h, 10h, 14h-1Fh legal)
|
||
|
(see #0304,#0310,#0311,#0312)
|
||
|
02h WORD length of remainder of stream in bytes
|
||
|
var-length fields follow, each an OPCODE followed by
|
||
|
zero or more args
|
||
|
|
||
|
(Table 0304)
|
||
|
Values for MODE 00h (set or display values) "WINDOW STREAM" opcodes:
|
||
|
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 number of rows
|
||
|
A7h set width of physical window
|
||
|
BYTE number of 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 number of rows (signed, negative values move up)
|
||
|
[if rows=0 and hardware cursor owner, update hardware cursor]
|
||
|
B1h move logical cursor right
|
||
|
BYTE number of columns (signed, negative values move left)
|
||
|
[if cols=0 and hardware cursor owner, update hardware cursor]
|
||
|
B2h shift top edge of scrolling region
|
||
|
BYTE number of rows (signed)
|
||
|
B3h shift left edge of scrolling region
|
||
|
BYTE number of columns (signed)
|
||
|
B4h shift physical window down
|
||
|
BYTE number of lines (signed)
|
||
|
B5h shift physical window right
|
||
|
BYTE number of columns (signed)
|
||
|
B6h expand physical window vertically
|
||
|
BYTE number of lines (signed)
|
||
|
B7h expand physical window horizontally
|
||
|
BYTE number of columns (signed)
|
||
|
B8h adjust viewport row
|
||
|
BYTE number of rows (signed)
|
||
|
B9h adjust viewport column
|
||
|
BYTE number of columns (signed)
|
||
|
BAh adjust virtual screen height [contents of window unpredict after]
|
||
|
BYTE number of rows to increase (signed)
|
||
|
BBh adjust virtual screen width [contents of window unpredictbl after]
|
||
|
BYTE number of columns 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 number of rows
|
||
|
BYTE number of columns
|
||
|
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 number of rows
|
||
|
BYTE number of columns
|
||
|
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 hardw cursor]
|
||
|
C9h shift top left corner of scrolling region
|
||
|
BYTE number of rows (signed)
|
||
|
BYTE number of columns (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 number of rows to expand (signed)
|
||
|
BYTE number of columns 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 (see #0305)
|
||
|
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
|
||
|
Note: the window is created with a physical size of 0x0 at the
|
||
|
same position as the window to which this stream was sent
|
||
|
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 number of first attribute to change - 1
|
||
|
bits 0-3 number 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 number of first attribute to change - 1
|
||
|
bits 0-3 number 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 number of first character to change - 1
|
||
|
bits 0-3 number of consecutive characters 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
|
||
|
the 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
|
||
|
6 BYTEs field table header (see #0306)
|
||
|
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 #0306)
|
||
|
7/8N BYTEs the field table entries, one for each field (see #0308)
|
||
|
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.
|
||
|
|
||
|
(Table 0305)
|
||
|
Values for TopView logical attributes:
|
||
|
01h normal text
|
||
|
02h highlighted normal text
|
||
|
03h help text
|
||
|
04h highlighted help text
|
||
|
05h error message
|
||
|
06h highlighted error message
|
||
|
07h emphasized text
|
||
|
08h marked text
|
||
|
9-16 reverse video versions of 1-8
|
||
|
|
||
|
Format of TopView field table header:
|
||
|
Offset Size Description (Table 0306)
|
||
|
00h BYTE number of fields (must be <= existing number of fields)
|
||
|
01h BYTE screen behavior bits (see #0307)
|
||
|
02h BYTE current input field (updated by DESQview)
|
||
|
03h BYTE current select field (updated by DESQview)
|
||
|
04h BYTE attribute for select fields when they are pointed at
|
||
|
05h BYTE attribute for select fields which have been selected
|
||
|
|
||
|
Bitfields for TopView screen behavior bits:
|
||
|
Bit(s) Description (Table 0307)
|
||
|
7 reserved
|
||
|
6 menu items may be selected via keyboard
|
||
|
5 left mouse button in "status" mode (press anywhere in window
|
||
|
immediately returns control to application)
|
||
|
4 right mouse button in "status" mode
|
||
|
3 select fields return contents or blanks rather than 'Y' or 'N'
|
||
|
2 modified bits reset on return to application
|
||
|
1-0 type of data returned
|
||
|
00 no data returned on read of keyboard
|
||
|
01 data returned as array of characters 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
|
||
|
|
||
|
Format of TopView field table entry:
|
||
|
Offset Size Description (Table 0308)
|
||
|
00h BYTE start row \
|
||
|
01h BYTE start column \ if menu selection and start is to
|
||
|
02h BYTE end row / right or below end, select from kbd only
|
||
|
03h BYTE end column /
|
||
|
04h BYTE field type (see #0309)
|
||
|
05h BYTE modifier
|
||
|
if type is fill-in, then bit flags to determine behavior
|
||
|
bit 7 automatically enter CR when field full
|
||
|
bit 6 move to next field when current field is full
|
||
|
bit 5 enter text from right end (for numbers)
|
||
|
bit 4 force input to uppercase
|
||
|
bit 3 clear old contents on first keystroke
|
||
|
bit 2 input returned when cursor moves out of
|
||
|
modified field ("validate", 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)
|
||
|
06h BYTE (select field only) normal color of field
|
||
|
07h 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
|
||
|
|
||
|
Bitfields for TopView field type:
|
||
|
Bit(s) Description (Table 0309)
|
||
|
7,6 field class
|
||
|
00 inactive (non-entry) field
|
||
|
01 echos keystrokes input to make menu selection
|
||
|
10 fill-in field
|
||
|
11 select field
|
||
|
5 field can be filled by broadcast write (F7h opcode)
|
||
|
4 reserved
|
||
|
3 reserved
|
||
|
2 reserved
|
||
|
1 set if field selected
|
||
|
0 set if field modified
|
||
|
|
||
|
(Table 0310)
|
||
|
Values for MODE 01h "QUERY STREAM" opcodes:
|
||
|
(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 number of 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 number of 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 number of 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 equal to field size)
|
||
|
F5h get field table entry
|
||
|
BYTE field number
|
||
|
7-8 BYTEs buffer to hold field table entry (see #0308)
|
||
|
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 field table header (see #0306)
|
||
|
|
||
|
(Table 0311)
|
||
|
Values for MODE 10h "MANAGER STREAM" opcodes (valid only for those listed):
|
||
|
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 (see #0313)
|
||
|
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
|
||
|
|
||
|
(Table 0312)
|
||
|
Values for 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 = number of bytes in stream
|
||
|
ES:DI = window's handle
|
||
|
|
||
|
(Table 0313)
|
||
|
Values asynchronous notification routine defined by man.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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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"
|
||
|
--------Q-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"
|
||
|
--------Q-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 (see #0315)
|
||
|
keyboard: set control flags (see #0314)
|
||
|
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"
|
||
|
|
||
|
Bitfields for DESQview keyboard object bits:
|
||
|
Bit(s) Description (Table 0314)
|
||
|
15 reserved, can't be set
|
||
|
14 unused
|
||
|
13 reserved, can't be set
|
||
|
12-6 unused
|
||
|
5 (DV 2.2+) exclusive input
|
||
|
4 filter all keys (used with handler established by SETESC)
|
||
|
if 0, only keys that would normally be displayed are filtered
|
||
|
3 program continues executing while input in progress
|
||
|
2 insert mode active for field mode
|
||
|
1 hardware cursor displayed when task is hardware cursor owner
|
||
|
must be set if keyboard in field mode and field table includes input
|
||
|
fields
|
||
|
0 keyboard is in field mode rather than keystroke mode
|
||
|
|
||
|
Bitfields for DESQview pointer object bits:
|
||
|
Bit(s) Description (Table 0315)
|
||
|
15 reserved, can't be set
|
||
|
14-8 unused
|
||
|
7 mouse pointer is hidden while in window
|
||
|
6 get messages even if window not topmost
|
||
|
5 get messages even if window not foreground
|
||
|
4 multiple clicks separated by less than 1/3 second are counted and
|
||
|
returned in a single message
|
||
|
3 pointer position is relative to screen origin, not window origin
|
||
|
2 send message on button release as well as button press
|
||
|
1 (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever the
|
||
|
pointer leaves the window
|
||
|
0 send message only on button activity, not movement
|
||
|
DV-specific, and INT 15/AX=DE0Fh must have been called first
|
||
|
--------Q-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"
|
||
|
--------Q-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"
|
||
|
--------Q-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
|
||
|
--------Q-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 #0314,#0315)
|
||
|
SeeAlso: AH=12h/BH=0Ah"OBJECT"
|
||
|
--------Q-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"
|
||
|
--------Q-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 given 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"
|
||
|
--------Q-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
|
||
|
--------Q-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 stat 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 the 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"
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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 number of bytes actually read
|
||
|
DWORD address of buffer containing data
|
||
|
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"
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
--------Q-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
|
||
|
Return: STACK popped
|
||
|
--------Q-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 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 (see #0316)
|
||
|
Return: STACK popped
|
||
|
|
||
|
(Table 0316)
|
||
|
Values keyboard filter function is called with when keyboard is in field mode:
|
||
|
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
|
||
|
Return: AH = action to take
|
||
|
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
|
||
|
--------Q-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
|
||
|
Return: STACK popped if BL=00h
|
||
|
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
|
||
|
--------Q-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 (see #0317,#0318)
|
||
|
Return: STACK popped
|
||
|
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
|
||
|
|
||
|
Bitfields for DESQview mailbox object flags:
|
||
|
Bit(s) Description (Table 0317)
|
||
|
0 all mail messages in common memory
|
||
|
1 allow write even if closed
|
||
|
2 don't erase messages when mailbox closed
|
||
|
4 (DV/X) append messages with like status and sender (stream-oriented
|
||
|
mail)
|
||
|
5 (DV/X) store mail in expanded memory (pool grows as needed)
|
||
|
6 (DV/X) make mailbox into non-owned mailbox
|
||
|
|
||
|
Bitfields for DESQview keyboard object flags:
|
||
|
Bit(s) Description (Table 0318)
|
||
|
5 exclusive input when keyboard in use for input
|
||
|
--------Q-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 #0317,#0318)
|
||
|
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
|
||
|
--------Q-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
|
||
|
--------Q-1512--BH80-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 00h 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 (see #0319)
|
||
|
SeeAlso: AH=12h/BH=00h
|
||
|
|
||
|
(Table 0319)
|
||
|
Values for DESQview error code:
|
||
|
00h no error
|
||
|
01h invalid values
|
||
|
02h alias invalid
|
||
|
03h handle valid but wrong type
|
||
|
04h invalid handle
|
||
|
--------Q-1512--BH81-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 01h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=01h
|
||
|
--------Q-1512--BH82-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 02h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=02h
|
||
|
--------Q-1512--BH83-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 03h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
|
||
|
--------Q-1512--BH84-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 04h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
|
||
|
--------Q-1512--BH85-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 05h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=05h
|
||
|
--------Q-1512--BH86-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 06h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=06h
|
||
|
--------Q-1512--BH87-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 07h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=07h
|
||
|
--------Q-1512--BH88-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 08h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=08h
|
||
|
--------Q-1512--BH89-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 09h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=09h
|
||
|
--------Q-1512--BH8A-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ah 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=0Ah
|
||
|
--------Q-1512--BH8B-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 0Bh 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=0Bh
|
||
|
--------Q-1512--BH8C-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ch 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=0Ch
|
||
|
--------Q-1512--BH8D-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 0Dh 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=0Dh
|
||
|
--------Q-1512--BH8E-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 0Eh 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=0Eh
|
||
|
--------Q-1512--BH8F-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 0Fh 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=0Fh
|
||
|
--------Q-1512--BH90-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 10h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=10h
|
||
|
--------Q-1512--BH91-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 11h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
|
||
|
--------Q-1512--BH92-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 12h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
|
||
|
--------Q-1512--BH93-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 13h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=13h
|
||
|
--------Q-1512--BH94-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 14h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=14h
|
||
|
--------Q-1512--BH95-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 15h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=15h
|
||
|
--------Q-1512--BH96-------------------------
|
||
|
INT 15 - DESQview v2.50+ - SEND MESSAGE 16h 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 #0319)
|
||
|
SeeAlso: AH=12h/BH=16h
|
||
|
--------E-15BF00-----------------------------
|
||
|
INT 15 - Rational Systems DOS/16M - ???
|
||
|
AX = BF00h
|
||
|
???
|
||
|
Return: ???
|
||
|
Note: under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
|
||
|
SeeAlso: AX=BF02h
|
||
|
--------E-15BF01-----------------------------
|
||
|
INT 15 - Rational Systems DOS/16M - ???
|
||
|
AX = BF01h
|
||
|
???
|
||
|
Return: ???
|
||
|
Notes: under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
|
||
|
called by DOS/4GW
|
||
|
SeeAlso: AX=BF00h,AX=BF02h
|
||
|
--------E-15BF02DX0000-----------------------
|
||
|
INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
|
||
|
AX = BF02h
|
||
|
DX = 0000h
|
||
|
Return: DX = nonzero if installed
|
||
|
DX:SI -> XBRK structure (see #0352)
|
||
|
Note: this function is also supported by DOS/4G
|
||
|
SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
|
||
|
SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
|
||
|
|
||
|
Format of DOS/16M XBRK structure:
|
||
|
Offset Size Description (Table 0352)
|
||
|
00h DWORD linear address of first available byte
|
||
|
04h DWORD linear address of last available byte + 1 ???
|
||
|
08h DWORD real-mode address of XBRK structure???
|
||
|
0Ch DWORD ???
|
||
|
10h 2 BYTEs ???
|
||
|
12h WORD segment of ???
|
||
|
14h 8 BYTEs ???
|
||
|
1Ch 512 BYTEs protected-mode IDT
|
||
|
21Ch N BYTEs protected-mode GDT
|
||
|
--------E-15BFDEBX0000-----------------------
|
||
|
INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
|
||
|
AX = BFDEh
|
||
|
BX = 0000h
|
||
|
Return: AX = ??? (0003h)
|
||
|
BX = FFFFh
|
||
|
SeeAlso: AX=BF02h
|
||
|
--------E-15BFDEBX0001-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
|
||
|
AX = BFDEh
|
||
|
BX = 0001h
|
||
|
Return: BX = 0000h (success)
|
||
|
CX:DX -> name of process manager executable
|
||
|
SeeAlso: AX=BFDEh/BX=0000h
|
||
|
--------E-15BFDEBX0002-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
|
||
|
AX = BFDEh
|
||
|
BX = 0002h
|
||
|
CX:DX -> ???
|
||
|
Return: BX = 0000h (success)
|
||
|
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
|
||
|
--------E-15BFDEBX0003-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
|
||
|
AX = BFDEh
|
||
|
BX = 0003h
|
||
|
Return: BX = 0000h (success)
|
||
|
CX:DX -> ???
|
||
|
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
|
||
|
--------E-15BFDEBX0004-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
|
||
|
AX = BFDEh
|
||
|
BX = 0004h
|
||
|
CL = ???
|
||
|
Return: BX = 0000h (success)
|
||
|
CX:DX -> XBRK structure (see #0352)
|
||
|
SeeAlso: AX=BFDEh/BX=0000h
|
||
|
--------E-15BFDEBX0005-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
|
||
|
AX = BFDEh
|
||
|
BX = 0005h
|
||
|
CX = new value for ???
|
||
|
Return: BX = 0000h (success)
|
||
|
AX = old value of ???
|
||
|
DS:SI -> ??? (if AX nonzero on return)
|
||
|
ES:DI -> ??? (if AX zero on return)
|
||
|
Note: called by DOS4GW.EXE
|
||
|
SeeAlso: AX=BFDEh/BX=0000h
|
||
|
--------E-15BFDEBX0006-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
|
||
|
AX = BFDEh
|
||
|
BX = 0006h
|
||
|
Return: BX = 0000h (success)
|
||
|
AH = interrupt number??? (BEh)
|
||
|
CX:DX = ???
|
||
|
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
|
||
|
--------E-15BFDEBX0007-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
|
||
|
AX = BFDEh
|
||
|
BX = 0007h
|
||
|
CX:DX = ???
|
||
|
Return: BX = 0000h (success)
|
||
|
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
|
||
|
--------E-15BFDEBX0008-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
|
||
|
AX = BFDEh
|
||
|
BX = 0008h
|
||
|
CX = segment of ???
|
||
|
DS = ???
|
||
|
Return: BX = status
|
||
|
0000h successful
|
||
|
AL = ??? (80h or C0h)
|
||
|
DX = ??? (0603h) if AL=C0h
|
||
|
0001h failed
|
||
|
AX = 0000h
|
||
|
Note: called by DOS4GW.EXE
|
||
|
SeeAlso: AX=BFDEh/BX=0000h
|
||
|
--------E-15BFDEBX0009-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
|
||
|
AX = BFDEh
|
||
|
BX = 0009h
|
||
|
Return: BX = 0000h (success)
|
||
|
CX:DX -> full pathname to LOAD32.EXP
|
||
|
SeeAlso: AX=BFDEh/BX=0000h
|
||
|
--------E-15BFDEBX000A-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - DECREMENT ???
|
||
|
AX = BFDEh
|
||
|
BX = 000Ah
|
||
|
Return: BX = 0000h (success)
|
||
|
AX = new value of ??? counter
|
||
|
Notes: also resets a variety of values if the counter goes negative
|
||
|
called by DOS4GW.EXE
|
||
|
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
|
||
|
--------E-15BFDEBX000B-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - INCREMENT ???
|
||
|
AX = BFDEh
|
||
|
BX = 000Bh
|
||
|
Return: AX = new value of ??? counter
|
||
|
Note: called by DOS4GW.EXE
|
||
|
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
|
||
|
--------E-15BFDEBX000C-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
|
||
|
AX = BFDEh
|
||
|
BX = 000Ch
|
||
|
CL = ???
|
||
|
00h
|
||
|
nonzero
|
||
|
Return: ???
|
||
|
SeeAlso: AX=BFDEh/BX=0000h
|
||
|
--------E-15BFDEBX000D-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
|
||
|
AX = BFDEh
|
||
|
BX = 000Dh
|
||
|
???
|
||
|
Return: ???
|
||
|
SeeAlso: AX=BFDEh/BX=0000h
|
||
|
--------E-15BFDEBX000E-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
|
||
|
AX = BFDEh
|
||
|
BX = 000Eh
|
||
|
DX:CX -> ???
|
||
|
Return: AX = segment of handle for calling task
|
||
|
BX = ??? (probably destroyed)
|
||
|
DX:CX -> ???
|
||
|
SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
|
||
|
--------E-15BFDEBX000F-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
|
||
|
AX = BFDEh
|
||
|
BX = 000Fh
|
||
|
Return: AX = segment of handle for calling task
|
||
|
BX = ??? (probably destroyed)
|
||
|
DX:CX -> ???
|
||
|
Note: identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
|
||
|
SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
|
||
|
--------E-15BFDEBX0010-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET TASK HANDLE
|
||
|
AX = BFDEh
|
||
|
BX = 0010h
|
||
|
Return: AX = segment of caller's task handle
|
||
|
BX destroyed
|
||
|
SeeAlso: AX=BFDEh/BX=000Fh
|
||
|
--------E-15BFDEBX0011-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
|
||
|
AX = BFDEh
|
||
|
BX = 0011h
|
||
|
Return: CX = code segment of DVDOS4GX.DVR
|
||
|
BX = ??? (0004h)
|
||
|
SeeAlso: AX=BFDEh/BX=0000h
|
||
|
--------E-15BFDEBX0012-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
|
||
|
AX = BFDEh
|
||
|
BX = 0012h
|
||
|
Return: DX = code segment of DVDOS4GX.DVR
|
||
|
BX = ??? (012Ch)
|
||
|
CX = ??? (0006h)
|
||
|
SeeAlso: AX=BFDEh/BX=0000h
|
||
|
--------E-15BFDEBX0013-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
|
||
|
AX = BFDEh
|
||
|
BX = 0013h
|
||
|
Return: DX:CX -> ???
|
||
|
SeeAlso: AX=BFDEh/BX=000Eh
|
||
|
--------E-15BFDEBX0014-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - LOCK ??? MAILBOX
|
||
|
AX = BFDEh
|
||
|
BX = 0014h
|
||
|
CX = index of ??? mailbox
|
||
|
(0000h-0004h valid, but no range checking done)
|
||
|
Return: AX,BX destroyed
|
||
|
SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
|
||
|
--------E-15BFDEBX0015-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
|
||
|
AX = BFDEh
|
||
|
BX = 0015h
|
||
|
CX = index of ??? mailbox
|
||
|
(0000h-0004h valid, but no range checking done)
|
||
|
Return: AX,BX destroyed
|
||
|
SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
|
||
|
--------E-15BFDEBX0016-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
|
||
|
AX = BFDEh
|
||
|
BX = 0016h
|
||
|
CX = index of ??? mailbox
|
||
|
(0000h-0004h valid, but no range checking done)
|
||
|
Return: AX = status
|
||
|
0000h no one owns mailbox
|
||
|
0001h mailbox has an owner
|
||
|
BX destroyed
|
||
|
SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
|
||
|
--------E-15BFDEBX0017-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
|
||
|
AX = BFDEh
|
||
|
BX = 0017h
|
||
|
CX = index of ??? mailbox
|
||
|
(0000h-0004h valid, but no range checking done)
|
||
|
Return: AX = segment of mailbox owner's handle
|
||
|
BX = segment of caller's task handle
|
||
|
SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
|
||
|
--------E-15BFDEBXFFFD-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
|
||
|
AX = BFDEh
|
||
|
BX = FFFDh
|
||
|
Return: CX:DX = ???
|
||
|
SeeAlso: AX=BFDEh/BX=FFFEh
|
||
|
--------E-15BFDEBXFFFE-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
|
||
|
AX = BFDEh
|
||
|
BX = FFFEh
|
||
|
CX:DX = ???
|
||
|
SeeAlso: AX=BFDEh/BX=FFFDh
|
||
|
--------E-15BFDEBXFFFF-----------------------
|
||
|
INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - NOP
|
||
|
AX = BFDEh
|
||
|
BX = FFFFh
|
||
|
SeeAlso: AX=BFDEh/BX=0000h
|
||
|
--------Q-15DE00-----------------------------
|
||
|
INT 15 - DESQview - GET PROGRAM NAME
|
||
|
AX = DE00h
|
||
|
Return: AX = offset into DESQVIEW.DVO of program most recently selected from
|
||
|
the "Switch Windows" menu (see #0381)
|
||
|
Note: always returns AX=0000h under DESQview/X
|
||
|
SeeAlso: AX=DE07h
|
||
|
|
||
|
Format of program entry in DESQVIEW.DVO:
|
||
|
Offset Size Description (Table 0381)
|
||
|
00h BYTE length of name (FFh if end of file)
|
||
|
01h N BYTEs name
|
||
|
2 BYTEs keys to invoke program (second = 00h if only one key used)
|
||
|
BYTE program type
|
||
|
00h normal program
|
||
|
04h divider
|
||
|
80h Delete a Program
|
||
|
81h Change a Program
|
||
|
WORD ??? apparently always 0000h
|
||
|
--------Q-15DE01-----------------------------
|
||
|
INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
|
||
|
AX = DE01h
|
||
|
Return: nothing
|
||
|
Notes: reads DESQVIEW.DVO, disables Open menu if file not in current directory
|
||
|
NOP for DESQview/X
|
||
|
--------Q-15DE02-----------------------------
|
||
|
INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
|
||
|
AX = DE02h
|
||
|
Return: nothing
|
||
|
Note: this call is a NOP in DV 2.x
|
||
|
SeeAlso: AX=DE03h
|
||
|
--------Q-15DE03-----------------------------
|
||
|
INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
|
||
|
AX = DE03h
|
||
|
Return: AX = ??? for current window
|
||
|
BX = ??? for current window
|
||
|
Note: this call is a NOP in DV 2.x
|
||
|
SeeAlso: AX=DE02h
|
||
|
--------Q-15DE04-----------------------------
|
||
|
INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
|
||
|
AX = DE04h
|
||
|
Return: BX = bytes of common memory available
|
||
|
CX = largest block available
|
||
|
DX = total common memory in bytes
|
||
|
SeeAlso: AX=DE05h,AX=DE06h
|
||
|
--------Q-15DE05-----------------------------
|
||
|
INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
|
||
|
AX = DE05h
|
||
|
Return: BX = KB of memory available
|
||
|
CX = largest block available
|
||
|
DX = total conventional memory in KB
|
||
|
SeeAlso: AX=DE04h,AX=DE06h
|
||
|
--------Q-15DE06-----------------------------
|
||
|
INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
|
||
|
AX = DE06h
|
||
|
Return: BX = KB of expanded memory available
|
||
|
CX = largest block available
|
||
|
DX = total expanded memory in KB
|
||
|
SeeAlso: AX=DE04h,AX=DE05h
|
||
|
--------Q-15DE07-----------------------------
|
||
|
INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
|
||
|
AX = DE07h
|
||
|
Return: AX = number of program as it appears on the "Switch Windows" menu
|
||
|
Note: this API call may be made from a hardware interrupt handler
|
||
|
SeeAlso: AX=DE00h
|
||
|
--------Q-15DE08-----------------------------
|
||
|
INT 15 - DESQview - GET ???
|
||
|
AX = DE08h
|
||
|
Return: AX = 0000h if ??? is not set to the current task
|
||
|
0001h if ??? is set to the current task
|
||
|
--------Q-15DE09-----------------------------
|
||
|
INT 15 - DESQview - UNIMPLEMENTED
|
||
|
AX = DE09h
|
||
|
Return: nothing (NOP in DV 1.x and 2.x)
|
||
|
--------Q-15DE0A-----------------------------
|
||
|
INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
|
||
|
AX = DE0Ah
|
||
|
BL = character
|
||
|
Return: character displayed, next call will display in next position (which
|
||
|
wraps back to the start of the line if off the right edge of screen)
|
||
|
Notes: displays character on bottom line of *physical* screen, regardless
|
||
|
of current size of window (even entirely hidden)
|
||
|
does not know about graphics display modes, just pokes the characters
|
||
|
into display memory
|
||
|
this API call may be made from a hardware interrupt handler
|
||
|
SeeAlso: AX=1003h
|
||
|
--------Q-15DE0B-----------------------------
|
||
|
INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
|
||
|
AX = DE0Bh
|
||
|
BL = API level minor version number
|
||
|
BH = API level major version number
|
||
|
Return: AX = maximum API level (AH = major, AL = minor)
|
||
|
Notes: if the requested API level is greater than the version of DESQview, a
|
||
|
"You need a newer version" error window is popped up
|
||
|
the API level defaults to 1.00, and is inherited by child tasks
|
||
|
--------Q-15DE0C-----------------------------
|
||
|
INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
|
||
|
AX = DE0Ch
|
||
|
BX = number of bytes
|
||
|
Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
|
||
|
Note: use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
|
||
|
system memory
|
||
|
SeeAlso: AX=1001h,AX=102Eh,AX=DE0Dh,AX=DE15h,AX=DE19h
|
||
|
--------Q-15DE0D-----------------------------
|
||
|
INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
|
||
|
AX = DE0Dh
|
||
|
ES:DI -> previously allocated block
|
||
|
Return: nothing
|
||
|
SeeAlso: AX=1002h,AX=DE0Ch
|
||
|
--------Q-15DE0E-----------------------------
|
||
|
INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
|
||
|
AX = DE0Eh
|
||
|
ES:DI -> name to find (see #0382)
|
||
|
CX = length of name
|
||
|
Return: BX = 0000h not found
|
||
|
0001h found
|
||
|
DS:SI = object handle
|
||
|
SeeAlso: AH=12h/BH=11h,AH=12h/BX=1200h"GETNAME"
|
||
|
|
||
|
(Table 0382)
|
||
|
Values for special DESQview mailbox names:
|
||
|
"COM1" ... "COM4" RBcomm using COM1 ... COM4
|
||
|
"DESQview/X Help Engine"
|
||
|
"DESQview/X Network Server" Network Manager
|
||
|
"DESQview X Server0" X-Windows server
|
||
|
"DESQview X Server7" X-Windows printing service
|
||
|
"INBOX" DESQview/X LPD requests
|
||
|
"OUTBOX" DESQview/X LPD responses
|
||
|
"WAITBOX" semaphore to synchronize DESQview/X LPD communications
|
||
|
"_DVNM_" DV/X v1.10 network manager
|
||
|
--------Q-15DE0F-----------------------------
|
||
|
INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
|
||
|
AX = DE0Fh
|
||
|
Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
|
||
|
Notes: sends a manager stream with opcodes AEh, BDh, and BFh to task's window
|
||
|
enables an additional mouse mode
|
||
|
--------Q-15DE10-----------------------------
|
||
|
INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
|
||
|
AX = DE10h
|
||
|
BH = scan code
|
||
|
BL = character
|
||
|
Return: nothing
|
||
|
Notes: a later read will get the keystroke as if it had been typed by the user
|
||
|
multiple pushes are read last-in first-out
|
||
|
if a script exists for the pushed key in the current application, the
|
||
|
script will be executed
|
||
|
early copies of DV 2.00 destroy AX, BX, ES, and DI
|
||
|
SeeAlso: INT 16/AH=05h
|
||
|
--------Q-15DE11BL00-------------------------
|
||
|
INT 15 - DESQview v2.00+ - "JUSTIFY" - EN/DISABLE AUTOM. WINDOW JUSTIFICATION
|
||
|
AX = DE11h
|
||
|
BL = 00h viewport will not move automatically
|
||
|
nonzero viewport will move to keep cursor visible (default)
|
||
|
Return: nothing
|
||
|
--------Q-15DE12BX0000-----------------------
|
||
|
INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
|
||
|
AX = DE12h
|
||
|
BX = 0000h select normal style (linefeed only moves down)
|
||
|
nonzero select C style (linefeed moves to start of next line)
|
||
|
Return: nothing
|
||
|
Note: set on a per-task basis, and inherited from the parent task
|
||
|
--------Q-15DE13-----------------------------
|
||
|
INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
|
||
|
AX = DE13h
|
||
|
Return: BX = number of calls to BEGINC or ENTERC
|
||
|
(see INT 15/AX=101Bh,INT 15/AX=DE1Ch) without matching ENDC
|
||
|
(see INT 15/AX=101Ch)
|
||
|
Note: this API call may be made from within a hardware interrupt handler
|
||
|
SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
|
||
|
--------Q-15DE14-----------------------------
|
||
|
INT 15 - DESQview v2.20+ - GET OBJECT TYPE
|
||
|
AX = DE14h
|
||
|
ES:DI -> object
|
||
|
Return: BL = 00h not an object
|
||
|
08h window or task
|
||
|
09h mailbox
|
||
|
0Ah keyboard
|
||
|
0Bh timer
|
||
|
0Ch objectq
|
||
|
0Fh pointer
|
||
|
10h panel
|
||
|
SeeAlso: AX=1016h
|
||
|
--------Q-15DE15-----------------------------
|
||
|
INT 15 - DESQview v2.20+ - SET ERROR HANDLING
|
||
|
AX = DE15h
|
||
|
BL = error handling mode
|
||
|
00h post system error on all error conditions
|
||
|
01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
|
||
|
messages sent to mailboxes which fail due to lack of system
|
||
|
or common memory
|
||
|
02h (v2.26+) same as 01h, but also return null pointer for GETMEM
|
||
|
calls which fail due to lack of system memory
|
||
|
Return: nothing
|
||
|
SeeAlso: AX=DE0Ch,AX=DE16h
|
||
|
--------Q-15DE16-----------------------------
|
||
|
INT 15 - DESQview v2.20+ - GET ERROR HANDLING
|
||
|
AX = DE16h
|
||
|
Return: BL = current mode
|
||
|
00h always post system error
|
||
|
01h return carry flag set on failed mailbox writes
|
||
|
02h return CF set on failed mailbox writes and NULL on failed
|
||
|
GETMEM calls
|
||
|
SeeAlso: AX=DE15h
|
||
|
--------Q-15DE17-----------------------------
|
||
|
INT 15 - DESQview v2.20-2.25 - reserved
|
||
|
AX = DE17h
|
||
|
Return: pops up "Programming error" window
|
||
|
Note: AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
|
||
|
SeeAlso: AX=1117h
|
||
|
--------Q-15DE17-----------------------------
|
||
|
INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
|
||
|
AX = DE17h
|
||
|
BX = function
|
||
|
0000h get current mapping context without setting
|
||
|
nonzero set new mapping context to BX
|
||
|
Return: BX = mapping context in effect before call
|
||
|
Notes: mapping contexts determine conventional-memory addressability; setting
|
||
|
a mapping context ensures that the associated program and data areas
|
||
|
are in memory for access. Usable by drivers, TSRs and shared
|
||
|
programs.
|
||
|
caller need not be running under DESQview
|
||
|
this API call may be made from a hardware interrupt handler
|
||
|
SeeAlso: AX=1016h,AX=1117h,AX=DE21h,INT 2F/AX=1685h
|
||
|
--------Q-15DE18-----------------------------
|
||
|
INT 15 - DESQview v2.20+ - internal - ???
|
||
|
AX = DE18h
|
||
|
BP = function number
|
||
|
high byte must be 10h
|
||
|
low byte is function
|
||
|
00h set ???
|
||
|
BL = ??? (00h-10h, video mode???)
|
||
|
BH = value to store
|
||
|
03h set ???
|
||
|
BL = ??? (stored in driver)
|
||
|
0Ah get ???
|
||
|
ES:DI -> 18-byte buffer to hold ???
|
||
|
Note: calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
|
||
|
--------Q-15DE19-----------------------------
|
||
|
INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
|
||
|
AX = DE19h
|
||
|
BX = number of bytes to allocate
|
||
|
Return: AX = 0000h successful
|
||
|
ES:DI -> allocated block
|
||
|
nonzero insufficient memory
|
||
|
Note: this API call may be made from within a hardware interrupt handler
|
||
|
SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
|
||
|
--------Q-15DE1A-----------------------------
|
||
|
INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
|
||
|
AX = DE1Ah
|
||
|
ES:DI -> previously allocated block
|
||
|
Return: AX = 0000h (successful)
|
||
|
Note: this function may be called from within a hardware interrupt handler
|
||
|
SeeAlso: AX=DE0Dh,AX=DE19h
|
||
|
--------Q-15DE1B-----------------------------
|
||
|
INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
|
||
|
AX = DE1Bh
|
||
|
Return: nothing
|
||
|
SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
|
||
|
--------Q-15DE1C-----------------------------
|
||
|
INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
|
||
|
AX = DE1Ch
|
||
|
Return: nothing
|
||
|
Notes: similar to AX=101Bh, but begins the critical region without ensuring
|
||
|
that DOS is free
|
||
|
the official documentation states that this call should be paired with
|
||
|
"ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
|
||
|
this API call may be made from within a hardware interrupt handler
|
||
|
SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
|
||
|
--------Q-15DE1D-----------------------------
|
||
|
INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
|
||
|
AX = DE1Dh
|
||
|
DX = segment of handle for task to receive keystroke
|
||
|
BL = character
|
||
|
BH = scan code
|
||
|
Return: AX = 0000h if successful
|
||
|
nonzero if receiver's keyboard buffer was full
|
||
|
Notes: the key is treated as though the user had pressed it, ignoring any
|
||
|
script which may be bound to the key, and using the current field
|
||
|
table if the keyboard object is in field processing mode
|
||
|
multiple PUTKEYs are seen in the order in which they are executed
|
||
|
SeeAlso: AX=DE10h
|
||
|
--------Q-15DE1E-----------------------------
|
||
|
INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
|
||
|
AX = DE1Eh
|
||
|
Return: CL = actual number of rows on screen
|
||
|
CH = actual number of columns on screen
|
||
|
BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
|
||
|
Note: this API call may be made from a hardware interrupt handler
|
||
|
SeeAlso: INT 10/AH=0Fh
|
||
|
--------Q-15DE1F-----------------------------
|
||
|
INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
|
||
|
AX = DE1Fh
|
||
|
Return: BX = segment of task handle or 0000h if no tasks are using DOS
|
||
|
Note: this API call may be made from within a hardware interrupt handler
|
||
|
SeeAlso: AX=DE13h,INT 21/AH=34h
|
||
|
--------Q-15DE20-----------------------------
|
||
|
INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
|
||
|
AX = DE20h
|
||
|
BX = segment of handle of task to interupt
|
||
|
DX:CX -> FAR interrupt routine
|
||
|
BP,SI,DI,DS,ES as required by interrupt routine
|
||
|
Return: nothing
|
||
|
Notes: unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
|
||
|
making the DISPATCHINT call
|
||
|
multiple "DISPATCHINT" calls are processed in the order in which they
|
||
|
were executed
|
||
|
the FAR routine is entered with the current ES, DS, SI, DI, and BP
|
||
|
values, using the task's internal stack (see AX=101Ah); only SS:SP
|
||
|
needs to be preserved
|
||
|
this API call may be made from within a hardware interrupt handler
|
||
|
SeeAlso: AX=1021h,AX=DE2Ah
|
||
|
--------Q-15DE21-----------------------------
|
||
|
INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
|
||
|
AX = DE21h
|
||
|
BX = new state
|
||
|
0000h turn off
|
||
|
nonzero turn on
|
||
|
Return: BX = old state of virtualization
|
||
|
Notes: this API call may be made from within a hardware interrupt handler
|
||
|
under DV 2.40 and 2.42, this call appears to have no effect and always
|
||
|
returns a nonzero value in BX which appears to be the offset within
|
||
|
the DV common memory segment of the caller's task object; it may
|
||
|
only have an effect within a hardware interrupt handler
|
||
|
SeeAlso: AX=1117h,AX=DE17h
|
||
|
--------Q-15DE22-----------------------------
|
||
|
INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
|
||
|
AX = DE22h
|
||
|
DX = segment of task handle
|
||
|
Return: DX = total amount of memory in paragraphs
|
||
|
BX = amount of system memory in paragraphs
|
||
|
CX = largest block of system memory available in paragraphs
|
||
|
AX = memory flags (see #0383)
|
||
|
Notes: if the task handle is a child task, the returned values will be for the
|
||
|
process containing the task, rather than the task itself
|
||
|
if the process's system memory is swapped out, BX,CX,DX remain
|
||
|
unchanged, because the memory usage cannot be determined
|
||
|
SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
|
||
|
|
||
|
Bitfields for DESQview process memory flags:
|
||
|
Bit(s) Description (Table 0383)
|
||
|
0 system memory resides in shared memory
|
||
|
1 process's memory is swapped out
|
||
|
2 process's system memory is swapped out
|
||
|
--------Q-15DE23-----------------------------
|
||
|
INT 15 U - DESQview v2.31+ - ???
|
||
|
AX = DE23h
|
||
|
BX = ??? IRQ number on first PIC?
|
||
|
CX = ??? IRQ number on second PIC?
|
||
|
Return: ???
|
||
|
Note: called by QEMM 6.00+
|
||
|
--------Q-15DE24-----------------------------
|
||
|
INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
|
||
|
AX = DE24h
|
||
|
BX = length of .DVP data
|
||
|
CX = length of ??? string
|
||
|
DS:SI -> ??? string
|
||
|
ES:DI -> .DVP data (see #0295 at AX=102Ch)
|
||
|
Return: BX = segment of task handle??? or 0000h on error
|
||
|
Note: this call is similar to AX=102Ch except that it can interpret the
|
||
|
extended DVP data
|
||
|
SeeAlso: AX=102Ch
|
||
|
--------Q-15DE25-----------------------------
|
||
|
INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
|
||
|
AX = DE25h
|
||
|
ES:DI -> 67-byte buffer for ASCIZ directory name
|
||
|
Return: ES:DI buffer filled with directory from which DESQview was started
|
||
|
BUG: DV 2.42 does not place a terminating NUL at the end of the directory
|
||
|
name, so if the buffer is not cleared to zeros before the call,
|
||
|
there is no way to tell where the directory name ends. This bug
|
||
|
has been fixed in DV 2.52 (DV/X 1.02)
|
||
|
SeeAlso: AX=DE2Eh,INT 21/AH=47h
|
||
|
--------Q-15DE26-----------------------------
|
||
|
INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
|
||
|
AX = DE26h
|
||
|
Return: BX = segment of handle for task with keyboard focus
|
||
|
Note: under DESQview/X, the X server always has the keyboard focus unless a
|
||
|
"direct" window is active
|
||
|
SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
|
||
|
--------Q-15DE27-----------------------------
|
||
|
INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
|
||
|
AX = DE27h
|
||
|
BX = type
|
||
|
0000h process
|
||
|
0001h task
|
||
|
ES:DI -> list of Instance Item Structures (see #0384)
|
||
|
Return: CF clear if successful
|
||
|
AX = ???
|
||
|
BX = ???
|
||
|
CF set on error
|
||
|
AX = error code???
|
||
|
0004h invalid BX value
|
||
|
Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
|
||
|
SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h
|
||
|
|
||
|
Format of DESQview Instance Item Structure [one element of list]:
|
||
|
Offset Size Description (Table 0384)
|
||
|
00h WORD length of data area DESQview should save and restore on context
|
||
|
switches (0000h = end of list)
|
||
|
02h DWORD pointer to area to be saved/restored
|
||
|
--------Q-15DE28-----------------------------
|
||
|
INT 15 U - DESQview v2.50+ - ???
|
||
|
AX = DE28h
|
||
|
BX = segment of ??? or 0000h for default
|
||
|
???
|
||
|
Return: ???
|
||
|
Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
|
||
|
SeeAlso: AX=DE2Ah
|
||
|
--------Q-15DE29BX0000-----------------------
|
||
|
INT 15 U - DESQview/X - ???
|
||
|
AX = DE29h
|
||
|
BX = 0000h
|
||
|
???
|
||
|
Return: CF clear if successful
|
||
|
???
|
||
|
CF set on error
|
||
|
Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
|
||
|
under DESQview 2.60, this function and all other subfunctions of
|
||
|
AX=DE29h always return CF set, as they are unique to DESQview/X
|
||
|
--------Q-15DE29BX0001-----------------------
|
||
|
INT 15 U - DESQview/X - ???
|
||
|
AX = DE29h
|
||
|
BX = 0001h
|
||
|
DX = segment of window handle
|
||
|
Return: CF clear if successful
|
||
|
AX = ???
|
||
|
DX = ???
|
||
|
CF set on error
|
||
|
Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
|
||
|
--------Q-15DE29BX0002-----------------------
|
||
|
INT 15 U - DESQview/X - ???
|
||
|
AX = DE29h
|
||
|
BX = 0002h
|
||
|
DX = segment of window handle
|
||
|
Return: CF clear if successful
|
||
|
AX = ???
|
||
|
DX = ???
|
||
|
CF set on error
|
||
|
Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
|
||
|
--------Q-15DE29BX0003-----------------------
|
||
|
INT 15 U - DESQview/X - ???
|
||
|
AX = DE29h
|
||
|
BX = 0003h
|
||
|
DX = segment of window handle
|
||
|
Return: CF clear if successful
|
||
|
???
|
||
|
CF set on error
|
||
|
Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
|
||
|
--------Q-15DE29BX0004-----------------------
|
||
|
INT 15 U - DESQview/X - GET DISPLAY NAME
|
||
|
AX = DE29h
|
||
|
BX = 0004h
|
||
|
CX = size of buffer in bytes
|
||
|
DX = segment of window handle
|
||
|
ES:DI -> buffer for display name
|
||
|
Return: CF clear if successful
|
||
|
buffer filled with ASCIZ display name (truncated if necessary) or
|
||
|
null string if no display
|
||
|
CF set on error
|
||
|
Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
|
||
|
the name ":0" refers to the local display
|
||
|
--------Q-15DE29BX0005-----------------------
|
||
|
INT 15 U - DESQview/X - ???
|
||
|
AX = DE29h
|
||
|
BX = 0005h
|
||
|
???
|
||
|
Return: CF clear if successful
|
||
|
???
|
||
|
CF set on error
|
||
|
Note: under DESQview 2.60, this function and all other subfunctions of
|
||
|
AX=DE29h always return CF set, as they are unique to DESQview/X
|
||
|
--------Q-15DE2A-----------------------------
|
||
|
INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
|
||
|
AX = DE2Ah
|
||
|
BX = segment of handle for task to interrupt or 0000h for caller
|
||
|
DX:CX -> interrupt routine
|
||
|
BP,SI,DI,DS,ES as required by interrupt routine
|
||
|
Return: nothing
|
||
|
Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
|
||
|
this call is the same as AX=DE20h except that it will delay
|
||
|
interrupting the specified task until after it has exited DOS
|
||
|
SeeAlso: AX=1021h,AX=DE20h
|
||
|
--------Q-15DE2B-----------------------------
|
||
|
INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
|
||
|
AX = DE2Bh
|
||
|
ES:DI -> starting object
|
||
|
0000h:0000h for first object in list???
|
||
|
Return: AX = status
|
||
|
0000h successful
|
||
|
ES:DI -> next object of same type (window/non-window)
|
||
|
0001h failed (ES:DI was not a valid handle)
|
||
|
Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
|
||
|
there are two separate lists, one for window/task objects and one
|
||
|
for all other objects
|
||
|
SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
|
||
|
--------Q-15DE2C-----------------------------
|
||
|
INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
|
||
|
AX = DE2Ch
|
||
|
DX = window information format version (0100h for DESQview 2.5x)
|
||
|
BX = segment of window handle or 0000h for default
|
||
|
ES:DI -> buffer for window information (see #0385)
|
||
|
Return: AX = status
|
||
|
0000h successful
|
||
|
Note: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
|
||
|
SeeAlso: AX=1000h,AX=1016h,AX=DE01h,AX=DE2Bh
|
||
|
|
||
|
Format of DESQview window information:
|
||
|
Offset Size Description (Table 0385)
|
||
|
00h BYTE task flag: 00h window, 01h task
|
||
|
01h BYTE process number if owner task
|
||
|
00h if non-owner task
|
||
|
02h WORD segment of owner's handle, 0000h if orphaned
|
||
|
04h WORD mapping context (see #0284 at AX=1016h)
|
||
|
06h BYTE task status (see #0386)
|
||
|
07h BYTE unused
|
||
|
08h WORD status bits (see #0387)
|
||
|
0Ah BYTE 01h if foreground-only window
|
||
|
|
||
|
(Table 0386)
|
||
|
Values for DESQview task status:
|
||
|
00h "Waiting" waiting for input
|
||
|
01h "Idle" keyboard poll limit reached
|
||
|
03h same as 01h
|
||
|
04h "Pausing" INT 15/AX=1000h pause called
|
||
|
04h DV/X direct: user did something to allow task switch
|
||
|
05h "ModeChg" video mode about to be changed
|
||
|
06h "ModeNtf" notify that video mode changed
|
||
|
07h "MoniCh" requested change to other monitor
|
||
|
08h "StartPgm" control relinquished to start new process
|
||
|
09h "MgrCan" made window manager CANCEL command
|
||
|
0Ah "Slicing" time slice expired
|
||
|
0Bh "Exit DOS" notify on DOS calls
|
||
|
0Ch "Enter DOS" process is re-entering DOS
|
||
|
0Dh "Terminate" INT 21/AH=4Ch or task freed
|
||
|
0Eh "BrkNxt" Control-Break pressed
|
||
|
0Fh "MgrCol" keyboard focus taken away
|
||
|
10h "PgmInt" interrupted by API call from another task
|
||
|
11h "BldOpen" call to INT 15/AX=DE01h
|
||
|
|
||
|
Bitfields for DESQview task status bits:
|
||
|
Bit(s) Description (Table 0387)
|
||
|
6 task is freeing another task
|
||
|
5 process is being created
|
||
|
4 user suspended process
|
||
|
3 process suspended itself
|
||
|
2 process is resized direct window (suspended)
|
||
|
1 process swapped out
|
||
|
0 DESQview process
|
||
|
--------Q-15DE2D-----------------------------
|
||
|
INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
|
||
|
AX = DE2Dh
|
||
|
CX = direction
|
||
|
FFFFh set socket handler
|
||
|
DX:BX -> FAR function for socket interface
|
||
|
must be of the format described under INT 63"DESQview"
|
||
|
other get socket handler
|
||
|
Return: DX:BX -> socket handler
|
||
|
Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
|
||
|
the "set" subfunction is normally called only by SOCKET.DVR
|
||
|
SeeAlso: AX=DE2Eh,INT 63"DESQview"
|
||
|
--------Q-15DE2E-----------------------------
|
||
|
INT 15 U - DESQview v2.50+ - SOCKET API
|
||
|
AX = DE2Eh
|
||
|
DX:BX -> socket record (see #0389)
|
||
|
0000h:0000h to create a new socket record
|
||
|
Return: CX = size of socket record in bytes
|
||
|
DX:BX -> socket record which was used
|
||
|
Notes: DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
|
||
|
socket records are allocated from common memory
|
||
|
for Unix compatibility, each socket and connection on a socket is
|
||
|
allocated a DOS file handle (referencing an SFT for NUL) which is
|
||
|
used on various calls to specify which of possibly multiple
|
||
|
connections is to be operated upon
|
||
|
SeeAlso: AX=DE2Dh,INT 61/AX=0001h/SF=0001h"VINES",INT 63"DESQview"
|
||
|
|
||
|
(Table 0388)
|
||
|
Values for DESQview/X socket API function number:
|
||
|
0000h initialize socket???
|
||
|
0001h "gethostname"
|
||
|
0002h "ioctl" check for input
|
||
|
0003h "sleep" delay for specified period
|
||
|
0004h "htons" convert word to network (big-endian) byte order
|
||
|
0005h "select"
|
||
|
0006h "bsd_close"/"so_close" close socket
|
||
|
0007h NOP
|
||
|
0008h "connect" initiate connection on socket
|
||
|
0009h "recv"/"recvfrom" read from socket
|
||
|
000Ah "socket"
|
||
|
000Bh ???
|
||
|
000Ch "gethostbyname"
|
||
|
000Dh "send"/"sendto" write to socket
|
||
|
000Eh ??? (does something to all connections for process)
|
||
|
000Fh "getpid" get process identifier
|
||
|
0010h "gettimeofday"
|
||
|
0011h "bind" assign name to socket
|
||
|
0012h "listen" listen for connections on socket
|
||
|
0013h "accept" accept connection on socket
|
||
|
0014h connect to X server
|
||
|
0015h "gethostbyaddr" get host information for an address
|
||
|
0016h "getprotobyname"
|
||
|
0017h "getprotobynumber"
|
||
|
0018h "getservbyname"
|
||
|
0019h "getservbyport"
|
||
|
001Ah "getsockname" determine name bound to socket
|
||
|
001Bh "getpeername" get name of connected peer
|
||
|
001Ch "getsockopt"/"setsockopt"
|
||
|
001Dh "so_exit" close all sockets for calling process
|
||
|
001Eh "issock" determine whether file handle references socket
|
||
|
001Fh "so_attach" reattach previously detached socket
|
||
|
0020h "so_detach" temporarily detach socket
|
||
|
0021h get DESQview directory
|
||
|
0022h "NewProc" start new application (see AX=102Ch)
|
||
|
0023h "so_linkup"
|
||
|
0024h canonicalize filename
|
||
|
0025h indirect INT 15h call
|
||
|
0026h Network Manager interface
|
||
|
0027h "so_unlink" close connection from "so_linkup"
|
||
|
0028h "raisepriority"
|
||
|
0029h "lowerpriority"
|
||
|
002Ah ???
|
||
|
FFFFh "NetExit" (appears to be a NOP)
|
||
|
|
||
|
Format of DESQview/X socket record:
|
||
|
Offset Size Description (Table 0389)
|
||
|
00h WORD signature F0ADh
|
||
|
02h WORD function number (see #0388)
|
||
|
04h WORD returned error code (see #0406)
|
||
|
06h WORD maximum message size??? (usually 0400h)
|
||
|
08h WORD PSP segment to use or 0000h if socket not valid
|
||
|
0Ah WORD scratch space (JFT size)
|
||
|
0Ch DWORD scratch space (JFT address)
|
||
|
10h DWORD mailbox handle (initialized by function 0000h)
|
||
|
14h DWORD timer object handle (initialized by function 0000h)
|
||
|
---function 0000h---
|
||
|
18h WORD (return) ???
|
||
|
---function 0001h---
|
||
|
18h WORD (return) status???
|
||
|
1Ah 128 BYTEs (return) ASCIZ hostname (empty string if not on network)
|
||
|
9Ah WORD maximum length of hostname to return
|
||
|
---function 0002h---
|
||
|
18h WORD (return) status
|
||
|
1Ah WORD socket's file handle
|
||
|
1Ch WORD IOCTL function
|
||
|
05h "FIONREAD" determine available input
|
||
|
06h "FIONBIO" set blocking state of socket
|
||
|
1Eh WORD (return, subfn 05h) number of bytes available for reading
|
||
|
(call, subfn 06h) 0000h blocking, nonzero nonblocking
|
||
|
---function 0003h---
|
||
|
18h 2 BYTEs unused
|
||
|
1Ah WORD delay time in seconds
|
||
|
---function 0004h---
|
||
|
18h WORD (return) result in network (big-endian) byte order
|
||
|
1Ah WORD value to convert to network byte order
|
||
|
---function 0005h---
|
||
|
18h WORD (return) number of handles meeting the specified conditions???
|
||
|
1Ah WORD number of file handles in each bitset???
|
||
|
1Ch DWORD bitset of socket handles to check for readability???
|
||
|
20h DWORD bitset of socket handles to check for writability???
|
||
|
24h DWORD bitset of socket handles to check for errors???
|
||
|
28h WORD timeout in ??? or 0000h to block until some socket ready
|
||
|
2Ah DWORD ???
|
||
|
2Eh DWORD ???
|
||
|
---function 0006h---
|
||
|
18h WORD (return) status: 0000h if successful, FFFFh on error
|
||
|
1Ah WORD socket's file handle
|
||
|
---function 0008h---
|
||
|
18h WORD (return) status: 0000h if successful, FFFFh on error
|
||
|
1Ah WORD socket's file handle
|
||
|
1Ch WORD 0001h if socket name specified, 0000h if not
|
||
|
1Eh WORD length of socket name
|
||
|
20h N BYTEs name of socket to which to connect
|
||
|
---function 0009h---
|
||
|
18h WORD (return) number of bytes actually read, 0000h if connection
|
||
|
closed, or FFFFh on error
|
||
|
1Ah WORD socket's file handle
|
||
|
1Ch WORD number of bytes to read
|
||
|
1Eh WORD flags
|
||
|
20h WORD 0000h if no source address desired
|
||
|
0001h if source address is to be stored (datagram sockets)
|
||
|
22h WORD length of source address
|
||
|
24h 110 BYTEs source address
|
||
|
92h 1K BYTEs buffer for data to be read
|
||
|
---function 000Ah---
|
||
|
18h WORD (return) socket's file handle or FFFFh on error
|
||
|
1Ah WORD address family (0001h,0002h)
|
||
|
1Ch WORD socket type
|
||
|
1Eh WORD protocol
|
||
|
---function 000Bh---
|
||
|
18h WORD (return) 0001h if ??? or FFFFh on error
|
||
|
1Ah WORD socket's file handle
|
||
|
1Eh WORD (call) ???
|
||
|
---function 000Ch---
|
||
|
18h 128 BYTEs buffer containing ASCIZ hostname
|
||
|
special case if empty string or "unix"
|
||
|
98h ??? 'struct hostent' ???
|
||
|
A2h ??? (return) ???
|
||
|
---function 000Dh---
|
||
|
18h WORD (return) number of bytes actually written or FFFFh on error
|
||
|
1Ah WORD socket's file handle
|
||
|
1Ch WORD number of bytes to write
|
||
|
1Eh WORD number of bytes to follow in subsequent writes???
|
||
|
20h WORD flags
|
||
|
22h WORD 0000h if no destination specified, 0001h if destination present
|
||
|
24h WORD ???
|
||
|
26h WORD length of destination address
|
||
|
28h 110 BYTEs destination address
|
||
|
96h 1K BYTEs buffer containing data to be written
|
||
|
---function 000Eh---
|
||
|
no additional fields
|
||
|
---function 000Fh---
|
||
|
18h DWORD (return) DESQview task handle of calling process
|
||
|
---function 0010h---
|
||
|
18h DWORD (return) current time
|
||
|
1Ch DWORD (return) ???
|
||
|
---function 0011h---
|
||
|
18h WORD (return) status: 0000h if successful, FFFFh on error
|
||
|
1Ah WORD socket's file handle
|
||
|
1Ch WORD length of name
|
||
|
1Eh N BYTEs buffer for socket name
|
||
|
---function 0012h---
|
||
|
18h WORD (return) status: 0000h if successful, FFFFh on error
|
||
|
1Ah WORD socket's file handle
|
||
|
1Ch WORD maximum backlog of pending connections allowed on socket
|
||
|
---function 0013h---
|
||
|
18h WORD (return) file handle for new connection or FFFFh on error
|
||
|
1Ah WORD listen()ing socket's file handle
|
||
|
1Ch WORD (call) length of buffer for connecting entity's address
|
||
|
(return) actual length of address
|
||
|
1Eh N BYTEs buffer for connecting entity's address
|
||
|
---function 0014h---
|
||
|
18h WORD (return) socket's file handle or FFFFh on error
|
||
|
1Ah 4 BYTEs (return) ???
|
||
|
1Eh WORD (return) ???
|
||
|
20h WORD (return) ???
|
||
|
22h 256 BYTEs ASCIZ X display name
|
||
|
122h ???
|
||
|
---function 0015h---
|
||
|
18h WORD (call) type of address??? (test for 0001h seen)
|
||
|
1Ah WORD (call) length of buffer for host address
|
||
|
1Ch 110 BYTEs buffer containing host address
|
||
|
8Ah WORD (return) offset of official host name???
|
||
|
8Ch WORD (return) offset of alias list???
|
||
|
8Eh WORD (return) address type???
|
||
|
90h WORD (return) length of an address in bytes???
|
||
|
92h WORD (return) offset of address???
|
||
|
9Ah N BYTEs (return) ??? buffer for hostname, alias list, and host address
|
||
|
---function 0016h---
|
||
|
18h ??? buffer for protocol name???
|
||
|
98h ???
|
||
|
---function 0017h---
|
||
|
18h WORD (call) protocol number???
|
||
|
1Ah WORD (return) ??? or 0001h
|
||
|
---function 0018h---
|
||
|
18h 128 BYTEs buffer containing ???
|
||
|
98h 128 BYTEs buffer containing ???
|
||
|
118h WORD (return) ???
|
||
|
---function 0019h---
|
||
|
18h WORD length of name???
|
||
|
1Ah 128 BYTEs buffer for name???
|
||
|
9Ah WORD (return) ???
|
||
|
---function 001Ah---
|
||
|
18h WORD (return) 0000h if successful, FFFFh on error
|
||
|
1Ah WORD socket's file handle
|
||
|
1Ch WORD (call) length of buffer for socket name
|
||
|
(return) actual length of socket name
|
||
|
1Eh N BYTEs buffer for socket name
|
||
|
---function 001Bh---
|
||
|
18h WORD (return) status: 0000h if successful, FFFFh on error
|
||
|
1Ah WORD socket's file handle
|
||
|
1Ch WORD (call) size of buffer for name
|
||
|
(return) actual size of name
|
||
|
1Eh N BYTEs buffer for peer's name
|
||
|
---function 001Ch---
|
||
|
18h WORD (return) status: 0000h if successful, FFFFh on error
|
||
|
1Ah WORD direction: 0000h to get, 0001h to set
|
||
|
1Ch WORD socket's file handle
|
||
|
1Eh WORD option level
|
||
|
20h WORD option name
|
||
|
22h WORD (call) length of buffer for option value
|
||
|
(return) actual length of option value
|
||
|
24h N BYTEs buffer for option value
|
||
|
---function 001Dh---
|
||
|
no additional fields
|
||
|
---function 001Eh---
|
||
|
18h WORD (return) status: 0000h ??? or 0001h ???
|
||
|
1Ah WORD file handle which may or may not be a socket
|
||
|
---function 001Fh---
|
||
|
18h WORD (return) file handle or FFFFh on error
|
||
|
1Ah DWORD (call) pointer to Socket Context Record (see #0407) of a
|
||
|
previously detached socket
|
||
|
---function 0020h---
|
||
|
18h WORD (return) status: 0000h if successful or FFFFh on error
|
||
|
1Ah WORD socket's file handle
|
||
|
1Ch DWORD (return) pointer to Socket Context Record (see #0407) for
|
||
|
the file handle
|
||
|
---function 0021h---
|
||
|
18h 64 BYTEs buffer for DESQview startup directory (see AX=DE25h)
|
||
|
---function 0022h---
|
||
|
18h DWORD (return) task handle of new application
|
||
|
1Ch WORD size of .DVP data
|
||
|
1Eh 129 BYTEs ASCIZ ???
|
||
|
9Fh N BYTEs .DVP data (see #0295 at AX=102Ch)
|
||
|
---function 0023h---
|
||
|
18h WORD (return) ??? or FFFFh on error
|
||
|
1Ah WORD socket's file handle???
|
||
|
---function 0024h---
|
||
|
18h WORD (return) DOS error code (see #0811 at INT 21/AH=59h)
|
||
|
0000h if successful
|
||
|
1Ah 129 BYTEs ASCIZ filename/pathname
|
||
|
11Bh 129 BYTEs ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
|
||
|
---function 0025h---
|
||
|
18h WORD value of AX
|
||
|
1Ah WORD value of BX
|
||
|
1Ch WORD (call) value of CX for call if AH value other than 12h
|
||
|
(call) number of stack parameters if AH value is 12h
|
||
|
(return) returned CX for calls other than INT 15/AH=12h
|
||
|
1Eh WORD value of DX
|
||
|
20h WORD value of DI
|
||
|
22h WORD value of SI
|
||
|
24h WORD value of DS
|
||
|
26h WORD value of ES
|
||
|
28h WORD (return) value of FLAGS after call
|
||
|
2Ah N DWORDs (call) stack parameters for INT 15/AH=12h call
|
||
|
(return) stack results from INT 15/AH=12h call
|
||
|
---function 0026h---
|
||
|
18h WORD (call) Network Manager subfunction (see #0390)
|
||
|
(return) status???
|
||
|
1Ah WORD (call) size of parameter data
|
||
|
(return) size of returned data
|
||
|
1Ch N BYTEs (call) parameter data required by call (see #0391,#0392,#0393)
|
||
|
(return) result data (see #0401,#0402,#0405)
|
||
|
---function 0027h---
|
||
|
18h WORD (return) status: 0000h if successful, FFFFh on error
|
||
|
1Ah WORD socket's file handle
|
||
|
---functions 0028h,0029h---
|
||
|
18h WORD (call) file handle for which to set priority low/high
|
||
|
FFFFh to change calling task's priority
|
||
|
---function 002Ah---
|
||
|
no additional fields
|
||
|
|
||
|
(Table 0390)
|
||
|
Values for DESQview/X Network Manager subfunction:
|
||
|
0004h "so_exit"???
|
||
|
0005h "gethostbyname"
|
||
|
0006h "gethostname"
|
||
|
0009h "socket"
|
||
|
000Dh "gethostbyaddr"
|
||
|
000Fh "getprotobyname"
|
||
|
0010h get protocol name for protocol number
|
||
|
0011h "getservbyname"
|
||
|
0012h "getservbyport" (see #0394)
|
||
|
0013h "getsockname"??? (see #0395)
|
||
|
0016h ??? (see #0396)
|
||
|
0017h kill Network Manager
|
||
|
0018h "getpeername"??? (see #0397)
|
||
|
0019h ??? (called by socket function 0000h) (see #0398)
|
||
|
001Ah ??? (see #0399)
|
||
|
001Bh "so_linkup" (see #0400)
|
||
|
001Dh get network services (see #0401)
|
||
|
001Fh "getpwuid"
|
||
|
0020h "getpwnam"
|
||
|
0021h "getpwvar"
|
||
|
0022h "crypt"
|
||
|
0023h "so_unlink"
|
||
|
0024h "getlogin" (see #0402)
|
||
|
0028h "sethostent"
|
||
|
0029h "gethostent"
|
||
|
002Ah "soaddhost"
|
||
|
002Bh "soupdatehost"
|
||
|
002Ch "sodeletehost"
|
||
|
002Dh "setservent"
|
||
|
002Eh "getservent"
|
||
|
002Fh "setpwent"
|
||
|
0030h "getpwent" (see #0403)
|
||
|
0031h ???
|
||
|
0032h ???
|
||
|
0033h ???
|
||
|
0034h get IP network number (see #0404)
|
||
|
0035h ??? (pops up Network Manager window)
|
||
|
0037h ???
|
||
|
0038h get machine name and IP address (see #0405)
|
||
|
0039h ???
|
||
|
|
||
|
Format of Function 0026h/Subfunction 000Fh data:
|
||
|
Offset Size Description (Table 0391)
|
||
|
00h 8 BYTEs (return) ???
|
||
|
|
||
|
Format of Function 0026h/Subfunction 0010h data:
|
||
|
Offset Size Description (Table 0392)
|
||
|
00h 2 BYTEs (return) ???
|
||
|
02h WORD (return) protocol number
|
||
|
04h WORD (call) protocol number for which to get name
|
||
|
06h WORD (return) ???
|
||
|
08h var (return) ASCIZ protocol name
|
||
|
N var (return) ASCIZ protocol name
|
||
|
|
||
|
Format of Function 0026h/Subfunction 0011h data:
|
||
|
Offset Size Description (Table 0393)
|
||
|
00h 8 BYTEs ???
|
||
|
08h var (return) ASCIZ protocol name
|
||
|
var (return) ASCIZ ??? name
|
||
|
var (return) ASCIZ ??? name
|
||
|
|
||
|
Format of Function 0026h/Subfunction 0012h data:
|
||
|
Offset Size Description (Table 0394)
|
||
|
00h 8 BYTEs (return) ???
|
||
|
|
||
|
Format of Function 0026h/Subfunction 0013h data:
|
||
|
Offset Size Description (Table 0395)
|
||
|
00h 116 BYTEs (return) ???
|
||
|
|
||
|
Format of Function 0026h/Subfunction 0016h data:
|
||
|
Offset Size Description (Table 0396)
|
||
|
00h 4 BYTEs (return) ???
|
||
|
|
||
|
Format of Function 0026h/Subfunction 0018h data:
|
||
|
Offset Size Description (Table 0397)
|
||
|
00h 116 BYTEs (return) ???
|
||
|
|
||
|
Format of Function 0026h/Subfunction 0019h data:
|
||
|
Offset Size Description (Table 0398)
|
||
|
00h 4 BYTEs (return) ???
|
||
|
04h DWORD (return) task handle of ???
|
||
|
|
||
|
Format of Function 0026h/Subfunction 001Ah data:
|
||
|
Offset Size Description (Table 0399)
|
||
|
00h 38 BYTEs (return) ???
|
||
|
|
||
|
Format of Function 0026h/Subfunction 001Bh data:
|
||
|
Offset Size Description (Table 0400)
|
||
|
00h 10 BYTEs (return) ???
|
||
|
|
||
|
Format of Function 0026h/Subfunction 001Dh return data [array]:
|
||
|
Offset Size Description (Table 0401)
|
||
|
00h WORD ??? or FFFFh if end of array
|
||
|
02h 7 BYTEs ???
|
||
|
09h 27 BYTEs ASCIZ name of service
|
||
|
|
||
|
Format of Function 0026h/Subfunction 0024h return data:
|
||
|
Offset Size Description (Table 0402)
|
||
|
00h var ASCIZ username
|
||
|
|
||
|
Format of Function 0026h/Subfunction 0030h data:
|
||
|
Offset Size Description (Table 0403)
|
||
|
00h WORD (call) UID or 0000h for current user
|
||
|
(return) ???
|
||
|
02h WORD (return) UID
|
||
|
04h 6 BYTEs (return) ???
|
||
|
0Ah var (return) ASCIZ username
|
||
|
var (return) ASCIZ encrypted password
|
||
|
var (return) ASCIZ initial ("home") directory
|
||
|
|
||
|
Format of Function 0026h/Subfunction 0034h data:
|
||
|
Offset Size Description (Table 0404)
|
||
|
00h 1-3 BYTEs IP network number of caller's machine (low byte first)
|
||
|
|
||
|
Format of Function 0026h/Subfunction 0038h return data:
|
||
|
Offset Size Description (Table 0405)
|
||
|
00h BYTE ???
|
||
|
01h 4 BYTEs IP address
|
||
|
05h var ASCIZ machine name
|
||
|
???
|
||
|
|
||
|
(Table 0406)
|
||
|
Values for DESQview/X socket error code:
|
||
|
0000h successful
|
||
|
0009h "BADF" bad file handle
|
||
|
000Ch "ENOMEM" out of memory
|
||
|
000Eh "EFAULT" bad address
|
||
|
0016h "EINVAL" invalid argument
|
||
|
0018h "EMFILE" too many open files
|
||
|
0020h "EPIPE" ??? broken pipe
|
||
|
0023h "EWOULDBLOCK" operation cannot be completed at this time
|
||
|
0024h "EINPROGRESS" operation now in progress
|
||
|
0026h "ENOTSOCK" socket invalid
|
||
|
0028h "EMSGSIZE" message too long to send atomically
|
||
|
002Ch "ESOCKTNOSUPPORT" socket type not supported
|
||
|
002Fh "EAFNOSUPPORT" address family not supp. by protocol fam.
|
||
|
0031h "EDOM" argument too large
|
||
|
0038h "EISCONN" socket is already connected
|
||
|
0039h "ENOTCONN" socket is not connected
|
||
|
|
||
|
Format of DESQview/X Socket Context Record:
|
||
|
Offset Size Description (Table 0407)
|
||
|
00h DWORD pointer to next Socket Context Record, 0000h:0000h if last
|
||
|
04h WORD SFT index for socket, 00FFh if not connected, FFFFh if detached
|
||
|
06h WORD PSP segment of owner or 0000h
|
||
|
08h WORD mapping context of owning window (see #0284 at AX=1016h)
|
||
|
0Ah 2 BYTEs ???
|
||
|
0Ch WORD address family
|
||
|
0Eh WORD socket type
|
||
|
10h WORD protocol
|
||
|
12h WORD socket state
|
||
|
0001h created
|
||
|
0002h bound
|
||
|
0003h listening???
|
||
|
0005h connected
|
||
|
14h DWORD timer object handle
|
||
|
18h DWORD object handle (mailbox???)
|
||
|
1Ch DWORD object handle of parent of above object or 0000h:0000h
|
||
|
20h DWORD pointer to ??? or 0000h
|
||
|
24h 6 BYTEs ???
|
||
|
2Ah WORD file handle for socket or FFFFh
|
||
|
2Ch 2 BYTEs ???
|
||
|
2Eh WORD nonzero if socket nonblocking
|
||
|
---network connections only---
|
||
|
30h 2 BYTEs ???
|
||
|
32h WORD ???
|
||
|
34h 4 BYTEs (big-endian) IP address of remote
|
||
|
38h 6 BYTEs ???
|
||
|
--------Q-15DE2F-----------------------------
|
||
|
INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
|
||
|
AX = DE2Fh
|
||
|
Return: BX = status
|
||
|
0001h keyboard focus has been given to a direct window since the
|
||
|
last call
|
||
|
0000h if not
|
||
|
Notes: DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
|
||
|
Quarterdeck stated that this call would not be available under future
|
||
|
versions of DESQview Classic, but it is still present in v2.60
|
||
|
--------Q-15DE30-----------------------------
|
||
|
INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
|
||
|
AX = DE30h
|
||
|
Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
|
||
|
Notes: DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
|
||
|
you must first check the DESQview version to verify that it is 2.50 or
|
||
|
greater
|
||
|
SeeAlso: INT 21/AH=2Bh/CX=4445h
|
||
|
--------Q-15DE31-----------------------------
|
||
|
INT 15 - DESQview/X v1.10 - ???
|
||
|
AX = DE31h
|
||
|
CX = ???
|
||
|
0000h ???
|
||
|
nonzero ???
|
||
|
???
|
||
|
Return: ???
|
||
|
--------B-1605-------------------------------
|
||
|
INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
|
||
|
AH = 05h
|
||
|
CH = scan code
|
||
|
CL = ASCII character
|
||
|
Return: AL = 00h if successful
|
||
|
01h if keyboard buffer full
|
||
|
Note: under DESQview, a number of "keystrokes" invoke specific
|
||
|
DESQview-related actions when they are read from the keyboard
|
||
|
buffer (see #0409)
|
||
|
SeeAlso: AH=00h,AH=25h"K3",AH=71h,AH=FFh,INT 15/AX=DE10h
|
||
|
|
||
|
(Table 0409)
|
||
|
Values for pseudo-keystrokes for DESQview:
|
||
|
38FBh or FB00h switch to next window (only if main menu already popped up)
|
||
|
38FCh or FC00h pop up DESQview main menu
|
||
|
38FEh or FE00h close the current window
|
||
|
38FFh or FF00h pop up DESQview learn menu
|
||
|
--------Q-212B--CX4445-----------------------
|
||
|
INT 21 - DESQview - INSTALLATION CHECK
|
||
|
AH = 2Bh
|
||
|
CX = 4445h ('DE')
|
||
|
DX = 5351h ('SQ')
|
||
|
AL = subfunction (DV v2.00+)
|
||
|
01h get version
|
||
|
Return: BX = version (BH = major, BL = minor)
|
||
|
Note: early copies of v2.00 return 0002h
|
||
|
02h get shadow buffer info, and start shadowing
|
||
|
Return: BH = rows in shadow buffer
|
||
|
BL = columns in shadow buffer
|
||
|
DX = segment of shadow buffer
|
||
|
04h get shadow buffer info
|
||
|
Return: BH = rows in shadow buffer
|
||
|
BL = columns in shadow buffer
|
||
|
DX = segment of shadow buffer
|
||
|
05h stop shadowing
|
||
|
Return: AL = FFh if DESQview not installed
|
||
|
Notes: in DESQview v1.x, there were no subfunctions; this call only identified
|
||
|
whether or not DESQview was loaded. DESQview v2.52 performs function
|
||
|
01h for all subfunction requests 0Ch and higher and appears to ignore
|
||
|
all lower-numbered functions not listed here.
|
||
|
DESQview versions 2.50-2.52 are part of DESQview/X v1.0x; version 2.53
|
||
|
is part of DESQview/X v1.10; and version 2.63 is part of DESQview/X
|
||
|
v2.00.
|
||
|
BUG: subfunction 05h does not appear to work correctly in DESQview 2.52
|
||
|
SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
|
||
|
--------m-212B01CX444D-----------------------
|
||
|
INT 21 - Quarterdeck DOS-UP.SYS v2.00 - INSTALLATION CHECK
|
||
|
AX = 2B01h
|
||
|
CX = 444Dh ('DM')
|
||
|
DX = 4158h ('AX')
|
||
|
Return: AX = 0000h if installed
|
||
|
BX = version??? (0002h)
|
||
|
CX = 4845h ('HE')
|
||
|
DX = 5245h ('RE')
|
||
|
ES = DOS-UP driver segment
|
||
|
----------2130FFCX4445-----------------------
|
||
|
INT 21 - DESQ??? - INSTALLATION CHECK
|
||
|
AX = 30FFh
|
||
|
CX = 4445h ("DE")
|
||
|
DX = 5351h ("SQ")
|
||
|
Return: BH = 05h if installed
|
||
|
???
|
||
|
Note: called by DUBLDISK.COM v2.6; this function is not supported by
|
||
|
DESQview, so it may be for DESQview's precursor DESQ.
|
||
|
SeeAlso: AX=4404h"DUBLDISK"
|
||
|
--------m-214402-----------------------------
|
||
|
INT 21 - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT
|
||
|
AX = 4402h
|
||
|
BX = file handle for device "QEMM386$"
|
||
|
CX = 0004h
|
||
|
DS:DX -> DWORD buffer for API entry point
|
||
|
Return: CF clear if successful
|
||
|
buffer filled (see INT 67/AH=3Fh for entry point parameters)
|
||
|
CF set on error
|
||
|
AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h)
|
||
|
Note: Quarterdeck recently (June 1993) documented this function, but the
|
||
|
documentation incorrectly states that it is only available for
|
||
|
QEMM 6+
|
||
|
SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
|
||
|
--------Q-214402-----------------------------
|
||
|
INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
|
||
|
AX = 4402h
|
||
|
BX = file handle for device "HOOKROM$"
|
||
|
CX = 0004h
|
||
|
DS:DX -> DWORD buffer for address of hooked vector table (see #0604)
|
||
|
Return: CF clear if successful
|
||
|
DS:DX buffer filled
|
||
|
CF set on error
|
||
|
AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h)
|
||
|
SeeAlso: AX=4402h/SF=01h
|
||
|
|
||
|
Format of HOOKROM.SYS hooked vector table entry:
|
||
|
Offset Size Description (Table 0604)
|
||
|
00h 5 BYTEs FAR jump to actual interrupt handler
|
||
|
(end of table if first byte is not EAh)
|
||
|
05h BYTE interrupt vector number
|
||
|
--------m-214402SF01-------------------------
|
||
|
INT 21 U - Memory Managers - GET EMM IMPORT STRUCTURE ADDRESS
|
||
|
AX = 4402h subfn 01h
|
||
|
BX = file handle for device "EMMXXXX0"
|
||
|
CX = 0006h (size of buffer in bytes)
|
||
|
DS:DX -> buffer for EMM import structure record (see #0661)
|
||
|
first byte must be 01h on entry
|
||
|
Return: CF clear if successful
|
||
|
buffer filled (see also #2044 at INT 67/AH=3Fh)
|
||
|
CF set on error
|
||
|
AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h)
|
||
|
Notes: this function is supported by Microsoft EMM386.EXE v4.45+,
|
||
|
QEMM-386 v6+, and CEMM v5.10+, and is intended for use by MS Windows
|
||
|
as it starts up
|
||
|
for QEMM-386, this call always returns an error if Windows3 support
|
||
|
has been disabled with the NW3 switch
|
||
|
SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 2F/AX=D201h/BX=5145h
|
||
|
SeeAlso: INT 67/AH=3Fh
|
||
|
|
||
|
Format of EMM import structure record:
|
||
|
Offset Size Description (Table 0661)
|
||
|
00h DWORD physical address of EMM import structure (see #0662)
|
||
|
04h BYTE EMM import structure major version
|
||
|
05h BYTE EMM import structure minor version
|
||
|
Note: version 1.00 contains only EMS information (Windows 3.0+)
|
||
|
version 1.10 contains UMB/XMS/HMA/EMS information (Windows 3.1)
|
||
|
version 1.11 is version 1.10 plus memory manager maker/product name
|
||
|
SeeAlso: #2084
|
||
|
|
||
|
Format of Global EMM Import record:
|
||
|
Offset Size Description (Table 0662)
|
||
|
00h BYTE bit flags
|
||
|
bit 2: ???
|
||
|
bit 3: free EMM386 virtual HMA only if hma_page_table_paddr!=0
|
||
|
bit 4: no UMB???
|
||
|
01h BYTE reserved (0)
|
||
|
02h WORD size of structure in bytes
|
||
|
04h WORD structure version
|
||
|
06h DWORD reserved
|
||
|
0Ah 384 BYTEs 64 EMS frame status records (see #0663), one per 16K of
|
||
|
real-mode 1M address space
|
||
|
18Ah BYTE ??? (must be at least 3*number_of_EMS_frames+4)
|
||
|
18Bh BYTE number of UMB frame descriptors following
|
||
|
18Ch 4N DWORDs UMB frame descriptors
|
||
|
each is 4 DWORDs giving physical page numbers for the four
|
||
|
4K pages of a 16K EMS frame (00000000h if non-UMB page)
|
||
|
var BYTE number of EMS handle info records following
|
||
|
16N BYTEs EMS handle info records (see #0665)
|
||
|
---version 1.10+ ---
|
||
|
DWORD realmode INT 67 vector (used by Windows to set breakpoints)
|
||
|
DWORD physical address of HMA page table values
|
||
|
BYTE number of free page entries following
|
||
|
2N DWORDs free page entries
|
||
|
each is:
|
||
|
DWORD physical page number
|
||
|
DWORD number of consecutive physical pages
|
||
|
BYTE number of XMS handle info records following
|
||
|
00h if memory manager does not emulate XMS or has real mode
|
||
|
XMS code which can execute in the Windows environment
|
||
|
12N BYTEs XMS handle info records (see #0666)
|
||
|
BYTE number of free UMB info records following
|
||
|
2N WORDs free UMB info records
|
||
|
each is:
|
||
|
WORD real mode start segment
|
||
|
WORD size in paragraphs
|
||
|
---version 1.11---
|
||
|
20 BYTEs blank-padded maker name
|
||
|
20 BYTEs blank-padded product name
|
||
|
|
||
|
Format of EMS frame status record:
|
||
|
Offset Size Description (Table 0663)
|
||
|
00h BYTE frame type (see #0664)
|
||
|
01h BYTE owner handle (00h/FFh = none) from frame including UMB
|
||
|
index to UMB frame descriptors
|
||
|
02h WORD logical page for frame, 7FFFh if none, FFFFh if non-EMS frame
|
||
|
04h BYTE EMS physical page number (FFh for non-EMS = don't care???)
|
||
|
05h BYTE flags for non-EMS frames (00h for EMS frame)
|
||
|
bits 0,1 for first 4K, bits 2,3 for second 4K, etc:
|
||
|
10: direct mapping (linear address = physical address)
|
||
|
01: UMB mapping
|
||
|
|
||
|
Bitfields for EMS frame type:
|
||
|
Bit(s) Description (Table 0664)
|
||
|
0 EMS frame
|
||
|
1 (if EMS frame) in standard 64K page frame
|
||
|
2 first 4K of frame is UMB
|
||
|
3 second 4K of frame is UMB
|
||
|
4 third 4K of frame is UMB
|
||
|
5 last 4K of frame is UMB
|
||
|
|
||
|
Format of EMS handle info record:
|
||
|
Offset Size Description (Table 0665)
|
||
|
00h BYTE handle number (00h = system handle)
|
||
|
01h BYTE flags
|
||
|
bit 0: normal handle rather than system handle
|
||
|
bit 2: ??? (set by some EMS managers)
|
||
|
02h 8 BYTEs EMS handle's name
|
||
|
0Ah WORD number of 16K pages for handle
|
||
|
0Ch DWORD physical address of page table entries forming page map
|
||
|
Note: all values should be zero for the system handle if no large frame
|
||
|
support is present
|
||
|
|
||
|
Format of XMS handle info record:
|
||
|
Offset Size Description (Table 0666)
|
||
|
00h WORD handle
|
||
|
02h WORD flags
|
||
|
bit 0: handle usable by Windows
|
||
|
(already in use when Windows started if clear)
|
||
|
bit 1: reserved (0)
|
||
|
04h DWORD size in KB (may be zero, used only if flags bit 0 set)
|
||
|
08h DWORD physical address (only if flags bit 0 set)
|
||
|
--------D-2152-------------------------------
|
||
|
INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
|
||
|
AH = 52h
|
||
|
Return: ES:BX -> DOS list of lists (see #0765)
|
||
|
Notes: partially supported by OS/2 v1.1 compatibility box (however, most
|
||
|
pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
|
||
|
pointer is FFFFh:FFFFh).
|
||
|
partially supported by the Windows NT DOS box; contains only a
|
||
|
rudimentary Current Directory Structure (see #0782)
|
||
|
on return, ES points at the DOS data segment (see also INT 2F/AX=1203h)
|
||
|
Quarterdeck's suggested check for the use of its DOSDATA.SYS or
|
||
|
DOS-UP.SYS is to test whether the list-of-lists segment is greater
|
||
|
than the segment of the first memory block; a better check for
|
||
|
DOS-UP.SYS is INT 21/AX=2B01h/CX=444Dh
|
||
|
SeeAlso: INT 2F/AX=1203h
|
||
|
--------D-29---------------------------------
|
||
|
INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
|
||
|
AL = character to display
|
||
|
Return: nothing
|
||
|
Notes: automatically called when writing to a device with bit 4 of its device
|
||
|
driver header set (see also INT 21/AH=52h)
|
||
|
COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
|
||
|
vector and assume that ANSI.SYS is installed if the segment is larger
|
||
|
the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
|
||
|
the default handler under DESQview 2.2 understands the <Esc>[2J
|
||
|
screen-clearing sequence, calls INT 10/AH=0Eh for all others
|
||
|
SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79
|
||
|
--------N-2A2001-----------------------------
|
||
|
INT 2A - MS Networks or NETBIOS - ???
|
||
|
AX = 2001h
|
||
|
???
|
||
|
Return: ???
|
||
|
Note: intercepted by DESQview 2.x
|
||
|
--------V-2F1A00BX4156-----------------------
|
||
|
INT 2F - AVATAR.SYS - INSTALLATION CHECK
|
||
|
AX = 1A00h
|
||
|
BX = 4156h ('AV')
|
||
|
CX = 4154h ('AT')
|
||
|
DX = 4152h ('AR')
|
||
|
Return: AL = FFh if installed
|
||
|
CF clear
|
||
|
BX = AVATAR protocol level supported
|
||
|
CX = driver type
|
||
|
0000h AVATAR.SYS
|
||
|
4456h DVAVATAR.COM inside DESQview window
|
||
|
DX = 0016h
|
||
|
Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
|
||
|
interprets AVATAR command codes in the same way that ANSI interprets
|
||
|
ANSI command codes
|
||
|
Notes: AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
|
||
|
the magic values
|
||
|
SeeAlso: AX=1A21h,AX=1A3Ch,AX=1A3Fh,AX=1A52h,AX=1A72h,AX=1A7Dh,AX=1AADh"AVATAR"
|
||
|
--------m-2F4310-----------------------------
|
||
|
INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
|
||
|
AX = 4310h
|
||
|
Return: ES:BX -> driver entry point (see #1369,#1370,#1380,#1398)
|
||
|
Notes: HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
|
||
|
HIMEM.SYS requires at least 256 bytes free stack space when calling
|
||
|
the driver entry point
|
||
|
SeeAlso: AX=4300h,AX=4310h"Cloaking"
|
||
|
|
||
|
Format of XMS driver entry point:
|
||
|
Offset Size Description (Table 1369)
|
||
|
00h 5 BYTEs jump to actual handler
|
||
|
either short jump (EBh XXh) followed by three NOPs or
|
||
|
far jump (EAh XXXX:XXXX) to a program which has hooked itself
|
||
|
into the XMS driver chain
|
||
|
Note: to hook into the XMS driver chain, a program should follow the chain of
|
||
|
far jumps until it reaches the short jump of the driver at the end
|
||
|
of the chain; this short jump is to be replaced with a far jump to
|
||
|
the new handler's entry point, which should contain a short jump
|
||
|
followed by three NOPs. The new handler must return to the address
|
||
|
pointed at by the short jump which was overwritten. Using this
|
||
|
method, the new handler becomes the first to see every XMS request.
|
||
|
|
||
|
(Table 1389)
|
||
|
Call the QEMM v5.11 "???" function with:
|
||
|
AH = 34h (QEMM 5.11 only, undocumented)
|
||
|
???
|
||
|
Return: ???
|
||
|
|
||
|
(Table 1390)
|
||
|
Call the QEMM v5.11 "???" function with:
|
||
|
AH = 44h (QEMM 5.11 only, undocumented)
|
||
|
???
|
||
|
Return: ???
|
||
|
--------Q-2FD200BX5144-----------------------
|
||
|
INT 2F - Quarterdeck RPCI - INSTALLATION CHECK
|
||
|
AX = D200h
|
||
|
BX = 5144h ("QD")
|
||
|
CX = 4D45h ("ME")
|
||
|
DX = 4D30h ("M0")
|
||
|
Return: AL = FFh installed
|
||
|
if BX,CX,DX registers were as specified on entry:
|
||
|
BX = 4D45h ("ME")
|
||
|
CX = 4D44h ("MD")
|
||
|
DX = 5652h ("VR")
|
||
|
Range: AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
|
||
|
Notes: the Quarterdeck RPCI (Resident Program Communication Interface) is
|
||
|
supported by QEMM v5.0+, QRAM, MANIFEST, VIDRAM, etc.
|
||
|
for AL <> 0, if the BX/CX/DX values don't match the identifier of a
|
||
|
Quarterdeck product, it just chains to the previous INT 2F handler
|
||
|
SeeAlso: AX=D201h/BX=4849h,AX=D201h/BX=4D41h,AX=D201h/BX=4D45h
|
||
|
SeeAlso: AX=D201h/BX=5145h,AX=D201h/BX=5649h
|
||
|
--------m-2FD201BX4849-----------------------
|
||
|
INT 2F - Quarterdeck RPCI - GET QD HIMEM PRESENCE
|
||
|
AX = D201h
|
||
|
BX = 4849h ("HI")
|
||
|
CX = 4D45h ("ME")
|
||
|
DX = 4D51h ("MQ")
|
||
|
Return: BX = 4F4Bh ("OK")
|
||
|
ES:DI -> HIMEM entry point
|
||
|
Range: AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
|
||
|
SeeAlso: AX=D200h,AX=D201h/BX=5145h
|
||
|
--------m-2FD201BX4849-----------------------
|
||
|
INT 2F - Quarterdeck RPCI - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
|
||
|
AX = D201h
|
||
|
BX = 4849h ("HI")
|
||
|
CX = 5241h ("RA")
|
||
|
DX = 4D30h ("M0")
|
||
|
Return: BX = 4F4Bh ("OK")
|
||
|
CX = segment of start of HIRAM chain
|
||
|
DX = reserved block owner (QEMM/QRAM code segment)
|
||
|
Range: AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
|
||
|
Note: the HIRAM memory chain has the same format as the regular DOS 4.0
|
||
|
memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks
|
||
|
have the block header program name field set to "UMB"; blocks whose
|
||
|
"owner" field is set to the reserved segment returned in DX are
|
||
|
locked-out regions such as video memory and ROMs.
|
||
|
SeeAlso: AX=12FFh/BX=0006h,AX=D200h
|
||
|
--------G-2FD201BX4D41-----------------------
|
||
|
INT 2F U - Quarterdeck RPCI - MANIFEST v1.0+ - INSTALLATION CHECK
|
||
|
AX = D201h
|
||
|
BX = 4D41h ("MA")
|
||
|
CX = 4E49h ("NI")
|
||
|
DX = 4645h ("FE")
|
||
|
Return: BX = 5354h ("ST") if installed
|
||
|
Range: AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
|
||
|
SeeAlso: AX=D200h
|
||
|
--------E-2FD201BX4D45-----------------------
|
||
|
INT 2F U - Quarterdeck RPCI - DVDOS4GX.DVR - ???
|
||
|
AX = D201h
|
||
|
BX = 4D45h ("ME")
|
||
|
CX = 5155h ("QU")
|
||
|
DX = 5044h ("PD")
|
||
|
Return: AL = FFh
|
||
|
BX = 4F4Bh ("OK")
|
||
|
Range: AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
|
||
|
Note: this function is called by QEMM 6.03
|
||
|
performs a variety of actions before setting return registers
|
||
|
SeeAlso: AX=D200h
|
||
|
--------m-2FD201BX5145-----------------------
|
||
|
INT 2F - Quarterdeck RPCI - QEMM v5.0+ - INSTALLATION CHECK
|
||
|
AX = D201h
|
||
|
BX = 5145h ("QE")
|
||
|
CX = 4D4Dh ("MM")
|
||
|
DX = 3432h ("42")
|
||
|
Return: BX = 4F4Bh ("OK")
|
||
|
ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
|
||
|
Range: AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
|
||
|
Note: this call is not available under QEMM v6.00 unless Windows3 support
|
||
|
has been disabled with the NW3 switch to QEMM386.SYS
|
||
|
SeeAlso: AX=D200h,AX=D201h/BX=4849h,INT 67/AH=3Fh
|
||
|
--------V-2FD201BX5649-----------------------
|
||
|
INT 2F u - Quarterdeck RPCI - VIDRAM v5.0+ - INSTALLATION CHECK
|
||
|
AX = D201h
|
||
|
BX = 5649h ("VI")
|
||
|
CX = 4452h ("DR")
|
||
|
DX = 414Dh ("AM")
|
||
|
Return: BX = 4F4Bh ("OK")
|
||
|
ES:DI -> VIDRAM entry point
|
||
|
Range: AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
|
||
|
SeeAlso: AX=D200h
|
||
|
|
||
|
(Table 1621)
|
||
|
Call VIDRAM entry point with:
|
||
|
AH = 00h get status
|
||
|
Return: AL = VIDRAM state (see #1622)
|
||
|
BL = extra RAM status
|
||
|
00h VIDRAM does not use extra RAM
|
||
|
01h VIDRAM uses EMS as extra RAM
|
||
|
02h VIDRAM uses EGA as extra RAM
|
||
|
BH = feature flags (see #1623)
|
||
|
CL = current monitor (01h = mono, 80h = color)
|
||
|
SI = current top of memory (paragraph)
|
||
|
DI = segment of start of HiRAM chain
|
||
|
AH = 01h setup
|
||
|
AL = VIDRAM state (see #1622)
|
||
|
BL = extra RAM status (see above)
|
||
|
BH = feature flags (see #1623)
|
||
|
CL = monitor (01h = monochrome, 80h = color)
|
||
|
SI = new top of memory (paragraph)
|
||
|
DI = segment of start of HiRAM chain
|
||
|
AH = 02h get end address of VIDRAM code
|
||
|
Return: ES:DI -> VIDRAM partial map context (see #1624,#1625)
|
||
|
Return: CF set on error
|
||
|
CF clear if successful
|
||
|
|
||
|
(Table 1622)
|
||
|
Values for VIDRAM state:
|
||
|
00h off
|
||
|
01h no EGA graphics
|
||
|
02h no graphics at all
|
||
|
|
||
|
Bitfields for VIDRAM feature flags:
|
||
|
Bit(s) Description (Table 1623)
|
||
|
0 override enabled
|
||
|
1 mapped memory detected in A000h-B000h range
|
||
|
2 top of memory not at 640K
|
||
|
3 MDA detected
|
||
|
4 high RAM exists in video area
|
||
|
5 mapped memory detected in video area
|
||
|
6-7 reserved???
|
||
|
|
||
|
Format of VIDRAM partial map context (EMS 3.2):
|
||
|
Offset Size Description (Table 1624)
|
||
|
00h BYTE EMS version ID (32h)
|
||
|
01h WORD EMM handle for this entry
|
||
|
03h BYTE number of frames
|
||
|
04h BYTE first page frame
|
||
|
05h WORD offset from ES to previously saved map
|
||
|
|
||
|
Format of VIDRAM partial map context (EMS 4.0):
|
||
|
Offset Size Description (Table 1625)
|
||
|
00h BYTE EMS version ID (40h)
|
||
|
01h WORD mappable segment count
|
||
|
03h N WORD mappable segments
|
||
|
WORD offset to previously saved map???
|
||
|
--------Q-2FDE00BX4456-----------------------
|
||
|
INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
|
||
|
AX = DE00h
|
||
|
BX = 4456h ("DV")
|
||
|
CX = 5844h ("XD")
|
||
|
DX = 4931h ("I1")
|
||
|
Return: AL = FFh if installed (even if other registers do not match)
|
||
|
if BX,CX, and DX were as specified on entry,
|
||
|
BX = 4845h ("HE")
|
||
|
CX = 5245h ("RE")
|
||
|
DX = 4456h ("DV")
|
||
|
Range: AH=C0h to AH=FFh, selected by scanning AH=DEh-FFh, then AH=C0h-DDh
|
||
|
Note: the XDI handler should not issue any DOS or BIOS calls, nor should it
|
||
|
issue DESQview API calls other than those allowed from hardware ints
|
||
|
SeeAlso: AX=DE02h,INT 15/AX=5400h
|
||
|
--------Q-2FDE01-----------------------------
|
||
|
INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
|
||
|
AX = DE01h
|
||
|
BX = driver ID
|
||
|
other registers as needed by driver
|
||
|
Notes: XDI drivers should pass this call through to previous handler if ID
|
||
|
does not match
|
||
|
DESQview never calls this function
|
||
|
--------Q-2FDE01BX4450-----------------------
|
||
|
INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK
|
||
|
AX = DE01h
|
||
|
BX = 4450h ("DP")
|
||
|
CX = 4D49h ("MI")
|
||
|
DX = 3039h ("09")
|
||
|
Return: AL = FFh if installed
|
||
|
BX = 4D42h ("MB")
|
||
|
CX = 4921h ("I!")
|
||
|
DX = 8F4Fh
|
||
|
ES:DI -> filename of DPMI host overlay
|
||
|
Note: the installation check consists of testing for the existence of the
|
||
|
character device QDPMI$$$
|
||
|
SeeAlso: INT 2F/AX=1687h,INT 31/AX=0000h
|
||
|
Index: installation check;QDPMI
|
||
|
--------U-2FDE01BX5242-----------------------
|
||
|
INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
|
||
|
AX = DE01h
|
||
|
BX = 5242h ("RB")
|
||
|
CX:DX = program identifier
|
||
|
656F7000h ("eop",0) for DVeop
|
||
|
Return: AX = 5242h ("RB") if installed
|
||
|
ES:BX -> data or entry point
|
||
|
CX = version number (CH = major, CL = minor)
|
||
|
|
||
|
(Table 1639)
|
||
|
Call DVeop entry point with:
|
||
|
ES:DI -> callback address or 0000h:0000h to remove callback
|
||
|
Return: AX = status
|
||
|
0000h failed (callback table full or attempted to remove non-
|
||
|
existent callback)
|
||
|
0001h successful
|
||
|
ES:DI -> chaining address
|
||
|
BX,CX,DX destroyed
|
||
|
Notes: the callback function is called with a simulated interrupt when the
|
||
|
DESQview window containing it is closed; it should perform all
|
||
|
necessary cleanup and then perform a FAR jump to the chaining address
|
||
|
or an IRET if the chaining address is 0000h:0000h
|
||
|
if the program wishes to remove itself before the window is closed, it
|
||
|
should call the DVeop entry point with the previously returned
|
||
|
chaining address and ignore the returned chaining address.
|
||
|
--------U-2FDE01BX7474-----------------------
|
||
|
INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
|
||
|
AX = DE01h
|
||
|
BX = 7474h
|
||
|
CL = function
|
||
|
00h installation check
|
||
|
Return: AL = FFh
|
||
|
01h get process handle
|
||
|
DX = keys on Open Window menu (DL = first, DH = second)
|
||
|
Return: AX = process handle or 0000h if not running
|
||
|
02h (v1.3+) set TMAN handle
|
||
|
DX = TMAN process handle
|
||
|
03h (v1.3+) set open keys to ignore on next CL=01h call
|
||
|
DX = keys on Open Window menu (DL = first, DH = second)
|
||
|
Return: BX = 4F4Bh ("OK")
|
||
|
DL destroyed
|
||
|
Note: DVTXDI is distributed as part of the shareware products DVTree (DOS
|
||
|
shell/DESQview process manager) and DVTMAN by Mike Weaver
|
||
|
Index: installation check;DVTXDI
|
||
|
--------U-2FDE01BX7575-----------------------
|
||
|
INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
|
||
|
AX = DE01h
|
||
|
BX = 7575h
|
||
|
CX = function
|
||
|
0000h installation check
|
||
|
Return: AX = 00FFh if installed
|
||
|
0001h turn on notification (currently unused)
|
||
|
Return: AX = 0001h
|
||
|
0002h turn off notification (currently unused)
|
||
|
Return: AX = 0001h
|
||
|
0003h get process information
|
||
|
Return: AX = status
|
||
|
0000h failed
|
||
|
0001h successful
|
||
|
BX = last instantaneous time slice
|
||
|
in 1/100s (v1.10)
|
||
|
in 1/18s (v1.11+)
|
||
|
CX = number of processes
|
||
|
DX = number of "(starting)" records (v2.00+)
|
||
|
SI = number of records in process info array
|
||
|
(v2.00+) (always 15 for v1.x)
|
||
|
ES:DI -> process info array (see #1640,#1641)
|
||
|
0004h get version
|
||
|
Return: AH = major version
|
||
|
AL = minor version
|
||
|
0005h (v1.10+) get time since DESQview started
|
||
|
Return: DX:AX = 1/100s since DV start (v1.10)
|
||
|
DX:AX = 1/18s since DV start (v1.11+)
|
||
|
0006h (v1.10+) get number of task switches
|
||
|
Return: DX:AX = total task switches
|
||
|
CX = task switches in last instantaneous interval
|
||
|
Notes: DVSIXDI is part of the DVSI (DESQview System Information) package by
|
||
|
Daniel J. Bodoh
|
||
|
for v1.00, function 0003h allocates common memory, which the caller
|
||
|
must deallocate after reading the process information; only the
|
||
|
currently used records are placed in the buffer
|
||
|
for v1.10+, function 0003h merely returns a pointer to the internal
|
||
|
array of process information; the caller should make a copy of the
|
||
|
array while inside a critical section (see INT 15/AX=101Bh). Only
|
||
|
those records with bit 7 of the first byte set are valid.
|
||
|
Index: installation check;DVSIXDI
|
||
|
|
||
|
Format of DVSIXDI v1.00 information for one process:
|
||
|
Offset Size Description (Table 1640)
|
||
|
00h BYTE flags
|
||
|
bit 7: process slot is valid
|
||
|
01h WORD offset into DESQVIEW.DVO of program's record if started from
|
||
|
Open Windows menu, else undefined
|
||
|
03h WORD Switch Windows window number
|
||
|
05h WORD segment of process handle
|
||
|
07h WORD number of tasks owned by process
|
||
|
09h WORD mapping context of process (see INT 15/AX=1016h)
|
||
|
0Bh DWORD hook for other programs
|
||
|
|
||
|
Format of DVSIXDI v1.10-v2.00 information for one process:
|
||
|
Offset Size Description (Table 1641)
|
||
|
00h BYTE process flags (see #1642)
|
||
|
01h WORD Open Window keys
|
||
|
03h WORD Switch Windows number
|
||
|
05h WORD segment of process handle
|
||
|
07h WORD number of tasks for process
|
||
|
09h WORD process mapping context
|
||
|
0Bh DWORD time process started (relative to start of DESQview)
|
||
|
0Fh DWORD time process last got CPU (relative to start of DESQview)
|
||
|
13h DWORD time process last gave up CPU (relative to start of DESQview)
|
||
|
17h DWORD total CPU time since process started
|
||
|
1Bh DWORD CPU time at start of current instantaneous interval
|
||
|
1Fh DWORD CPU time in current instantaneous interval
|
||
|
23h DWORD hook for other programs
|
||
|
Note: all times are in 1/100s for v1.10, in 1/18s for v1.11+
|
||
|
|
||
|
Bitfields for DVSIXDI process flags:
|
||
|
Bit(s) Description (Table 1642)
|
||
|
7 valid record
|
||
|
6 (v2.00+) record is allocated; if bit 7 clear, process is "(starting)"
|
||
|
and only offsets 01h and 09h are valid
|
||
|
5 (v2.00+) this app currently owns the CPU
|
||
|
4 reserved (0)
|
||
|
3 DESQview system task
|
||
|
2 reserved (0)
|
||
|
1 task has keyboard (currently unused)
|
||
|
0 task swapped out (currently unused)
|
||
|
--------Q-2FDE01BXFFFE-----------------------
|
||
|
INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???
|
||
|
AX = DE01h
|
||
|
BX = FFFEh
|
||
|
CX = 4D47h ("MG")
|
||
|
DX = 0052h (0,"R")
|
||
|
Return: AL = FFh
|
||
|
DX = 584Dh
|
||
|
--------Q-2FDE02-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - DV INITIALIZATION COMPLETE
|
||
|
AX = DE02h
|
||
|
BX = mapping context of DESQview
|
||
|
DX = handle of DESQview system task
|
||
|
Note: driver should pass this call to previous handler after doing its work
|
||
|
SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h
|
||
|
--------Q-2FDE03-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - DV TERMINATION
|
||
|
AX = DE03h
|
||
|
BX = mapping context of DESQview
|
||
|
DX = handle of DESQview system task
|
||
|
Notes: driver should pass this call to previous handler before doing its work
|
||
|
DESQview makes this call when it is exiting, but before unhooking any
|
||
|
interrupt vectors
|
||
|
SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h
|
||
|
--------Q-2FDE04-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - ADD PROCESS
|
||
|
AX = DE04h
|
||
|
BX = mapping context of new process (see INT 15/AX=1016h)
|
||
|
DX = handle of process
|
||
|
Return: nothing
|
||
|
Notes: XMS XDI handler (installed by default) allocates a 22-byte record
|
||
|
(see #1643) from "common" memory to control access to XMS memory
|
||
|
all DOS, BIOS, and DV API calls are valid in handler
|
||
|
driver should pass this call to previous handler after processing it
|
||
|
SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h
|
||
|
|
||
|
Format of XMS XDI structure:
|
||
|
Offset Size Description (Table 1643)
|
||
|
00h DWORD pointer to 10-byte record???
|
||
|
04h DWORD pointer to next XMS XDI structure
|
||
|
08h WORD mapping context
|
||
|
0Ah BYTE ???
|
||
|
0Bh 5 BYTEs XMS entry point to return for INT 2F/AX=4310h
|
||
|
(FAR jump to next field)
|
||
|
10h 6 BYTEs FAR handler for XMS driver entry point
|
||
|
(consists of a FAR CALL followed by RETF)
|
||
|
--------Q-2FDE05-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - REMOVE PROCESS
|
||
|
AX = DE05h
|
||
|
BX = mapping context of process (see INT 15/AX=1016h)
|
||
|
DX = handle of last task in process
|
||
|
Return: nothing
|
||
|
Notes: XMS XDI handler releases the structure allocated by AX=DE04h
|
||
|
driver should pass this call to previous handler before processing it
|
||
|
all DOS, BIOS, and DV API calls except those generating a task switch
|
||
|
are valid in handler
|
||
|
SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h
|
||
|
--------Q-2FDE06-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - CREATE TASK
|
||
|
AX = DE06h
|
||
|
BX = mapping context of process containing task
|
||
|
DX = handle of new task
|
||
|
Notes: driver should pass this call to previous handler after processing it
|
||
|
all DOS, BIOS, and DV API calls are valid in handler
|
||
|
--------Q-2FDE07-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - TERMINATE TASK
|
||
|
AX = DE07h
|
||
|
BX = mapping context of process containing task
|
||
|
DX = handle of task
|
||
|
Notes: driver should pass this call to previous handler before processing it
|
||
|
all DOS, BIOS, and DV API calls except those generating a task switch
|
||
|
are valid in handler
|
||
|
SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h
|
||
|
--------Q-2FDE08-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - SAVE STATE
|
||
|
AX = DE08h
|
||
|
BX = mapping context of task being switched from (see INT 15/AX=1016h)
|
||
|
DX = handle of task being switched from
|
||
|
Notes: invoked prior to task swap, interrupts, etc
|
||
|
driver should pass this call to previous handler after processing it
|
||
|
SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h
|
||
|
--------Q-2FDE09-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - RESTORE STATE
|
||
|
AX = DE09h
|
||
|
BX = mapping context of task being switched to (see INT 15/AX=1016h)
|
||
|
DX = handle of task being switched to
|
||
|
Notes: state is restored except for interrupts
|
||
|
driver should pass this call to previous handler before processing it
|
||
|
SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h
|
||
|
--------Q-2FDE0A-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - CHANGE KEYBOARD FOCUS
|
||
|
AX = DE0Ah
|
||
|
BX = mapping context of task receiving focus
|
||
|
DX = handle of running task
|
||
|
Notes: driver should pass this call to previous handler before processing it
|
||
|
this call often occurs inside a keyboard interrupt
|
||
|
DV 2.42 does not provide this call to XDI handlers running inside a
|
||
|
window; instead, it directly calls the INT 2F handler which was
|
||
|
active at the time DV started
|
||
|
SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh
|
||
|
--------Q-2FDE0B-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - DVP PROCESSING COMPLETE
|
||
|
AX = DE0Bh
|
||
|
BX = mapping context of DESQview system task
|
||
|
CX = number of system memory paragraphs required for the use of all
|
||
|
XDI drivers (DV will add this to system memory in DVP buffer)
|
||
|
DX = handle of DESQview system task
|
||
|
SI = mapping context of new process if it starts
|
||
|
ES:DI -> DVP buffer
|
||
|
Return: CX incremented as needed
|
||
|
Notes: once DV invokes this function, the DVP buffer contents may be changed
|
||
|
driver should pass this call to previous handler before processing it
|
||
|
--------Q-2FDE0C-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - SWAP OUT PROCESS
|
||
|
AX = DE0Ch
|
||
|
BX = mapping context of task being swapped out (see INT 15/AX=1016h)
|
||
|
DX = handle of DESQview system task
|
||
|
Note: driver should pass this call to previous handler after processing it
|
||
|
--------Q-2FDE0D-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - SWAP IN PROCESS
|
||
|
AX = DE0Dh
|
||
|
BX = mapping context of process just swapped in (see INT 15/AX=1016h)
|
||
|
DX = handle of DESQview system task
|
||
|
Note: driver should pass this call to previous handler before processing it
|
||
|
--------Q-2FDE0E-----------------------------
|
||
|
INT 2F C - DESQview v2.26+ External Dev Interface - DVP START FAILED
|
||
|
AX = DE0Eh
|
||
|
BX = mapping context of DESQview system task
|
||
|
DX = handle of DESQview system task
|
||
|
SI = mapping context of failed process (same as for call to AX=DE0Bh)
|
||
|
Note: driver should pass this call to previous handler after processing it
|
||
|
--------Q-2FDE0F-----------------------------
|
||
|
INT 2F C - DESQview v2.50+ External Dev Interface - INITIALIZE DV
|
||
|
AX = DE0Fh
|
||
|
Note: DESQview 2.50+ calls this function just before it completes its
|
||
|
initialization. At the time of the call, DESQview has not yet
|
||
|
changed any interrupt vectors
|
||
|
SeeAlso: AX=DE02h
|
||
|
--------Q-2FDE10-----------------------------
|
||
|
INT 2F C - DESQview v2.50+ External Dev Interface - FREE TASK
|
||
|
AX = DE10h
|
||
|
BX = mapping context of process (see INT 15/AX=1016h)
|
||
|
DX = task handle of process
|
||
|
Note: DESQview 2.50+ calls this function before it frees the task; it is
|
||
|
similar to AX=DE07h but allows the XDI handler to make calls which
|
||
|
cause context switches
|
||
|
SeeAlso: AX=DE06h,AX=DE07h
|
||
|
----------2FDF00BX5445-----------------------
|
||
|
INT 2F U - TELTSR.COM - INSTALLATION CHECK
|
||
|
AX = DF00h
|
||
|
BX = 5445h ('TE')
|
||
|
CX = 4C54h ('LT')
|
||
|
DX = 5352h ('SR')
|
||
|
Return: BX = 5454h ('TT') if installed
|
||
|
CX = 494Eh ('IN') if installed
|
||
|
DX = 5454h ('ST') if installed
|
||
|
Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
|
||
|
Range: AH=???h to ???h, selected automatically
|
||
|
SeeAlso: AX=DF01h"TELTSR",AX=DF02h"TELTSR"
|
||
|
----------2FDF02-----------------------------
|
||
|
INT 2F U - TELTSR.COM - ???
|
||
|
AX = DF02h
|
||
|
???
|
||
|
Return: ???
|
||
|
Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
|
||
|
SeeAlso: AX=DF00h"TELTSR",AX=DF01h"TELTSR"
|
||
|
--------V-427503-----------------------------
|
||
|
INT 42 - Toshiba laptops - GET DISPLAY STATUS
|
||
|
AX = 7503h
|
||
|
Return: AX = 7575h if supported
|
||
|
CX = 0001h if supported
|
||
|
BH = display type (00h color, 03h monochrome)
|
||
|
BL = display state
|
||
|
01h internal LCD display is active
|
||
|
02h external VGA display is active
|
||
|
03h both displays active / DeskStation display mode enabled
|
||
|
(not possible on all machines)
|
||
|
Note: used by VCHAD.EXE and supported by all Toshiba VGA laptops
|
||
|
(string "TOSHIBA " at F000:E010h should be checked before call)
|
||
|
INT 42 normally points to F000:F065h but may be redirected by QEMM386
|
||
|
SeeAlso: AX=7500h,AX=7504h,INT 15/AH=C0h
|
||
|
--------d-4B8102DX0000-----------------------
|
||
|
INT 4B - Virtual DMA Specification (VDS) - GET VERSION
|
||
|
AX = 8102h
|
||
|
DX = 0000h
|
||
|
Return: CF clear if successful
|
||
|
AH = major version number
|
||
|
AL = minor version number
|
||
|
BX = product number (see #1739)
|
||
|
CX = product revision number
|
||
|
always 0000h for QMAPS and HPMM.SYS
|
||
|
always 0001h for Microsoft's EMM386.EXE v4.20-4.41
|
||
|
DX = flags (see #1741)
|
||
|
SI:DI = maximum DMA buffer size
|
||
|
CF set on error
|
||
|
AL = error code (see #1740)
|
||
|
Note: bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
|
||
|
apparently not always the case
|
||
|
SeeAlso: INT 2C/AX=002Bh,INT 31
|
||
|
Index: installation check;Virtual DMA Spec
|
||
|
|
||
|
(Table 1739)
|
||
|
Values for VDS product number:
|
||
|
0000h for Quadtel's QMAPS and Hewlett-Packard's HPMM.SYS
|
||
|
0001h for Microsoft's EMM386.EXE
|
||
|
0003h for Windows 3.x WIN386.EXE
|
||
|
0EDCh for DR-DOS 6.0 EMM386.SYS
|
||
|
4560h ("E`") for Qualitas' 386MAX
|
||
|
4D43h ("MC") for V Communications' Memory Commander
|
||
|
5145h ("QE") for Quarterdeck's QEMM-386
|
||
|
524Dh ("RM") for Helix's Netroom RM386
|
||
|
|
||
|
(Table 1740)
|
||
|
Values for VDS error code:
|
||
|
01h region not in contiguous memory
|
||
|
02h region crossed a physical alignment boundary
|
||
|
03h unable to lock pages
|
||
|
04h no buffer available
|
||
|
05h region too large for buffer
|
||
|
06h buffer currently in use
|
||
|
07h invalid memory region
|
||
|
08h region was not locked
|
||
|
09h number of physical pages greater than table length
|
||
|
0Ah invalid buffer ID
|
||
|
0Bh copy out of buffer range
|
||
|
0Ch invalid DMA channel number
|
||
|
0Dh disable count overflow
|
||
|
0Eh disable count underflow
|
||
|
0Fh function not supported
|
||
|
10h reserved flag bits set in DX
|
||
|
|
||
|
Bitfields for VDS flags:
|
||
|
Bit(s) Description (Table 1741)
|
||
|
0 PC/XT bus (DMA in first megabyte only)
|
||
|
1 physical buffer/remap region in first megabyte
|
||
|
2 automatic remap enabled
|
||
|
3 all memory is physically contiguous
|
||
|
4-15 reserved (zero)
|
||
|
--------Q-4B810D-----------------------------
|
||
|
INT 4B - QEMM-386 - BUG
|
||
|
AX = 810Dh
|
||
|
Note: the code in QEMM v5.11 and 6.00 jumps to an invalid location on this
|
||
|
call
|
||
|
--------H-50---------------------------------
|
||
|
INT 50 - IRQ0 relocated by DESQview
|
||
|
Range: INT 50 to INT F8, selected automatically
|
||
|
Notes: this is the default location for older versions; DESQview v2.26+
|
||
|
searches for unused ranges of interrupts and uses the lowest
|
||
|
available range in its list for relocating these IRQs and the next
|
||
|
lowest for relocating IRQ8-IRQ15
|
||
|
a range of eight interrupts starting at a multiple of 8 is considered
|
||
|
available if all vectors are identical and it has not been excluded
|
||
|
with an /XB:nn commandline switch
|
||
|
the list of ranges for v2.26 is 50h,58h,68h,78h,F8h (if < two of these
|
||
|
are available, F8h and then 50h are used anyway)
|
||
|
the list of ranges for v2.31+ is 68h,78h,88h-B8h,F8h (if < two of these
|
||
|
are available, F8h and then F0h are used anyway)
|
||
|
SeeAlso: INT 08"IRQ0",INT 51"DESQview",INT 54"DESQview",INT 58"DESQview"
|
||
|
SeeAlso: INT D8"Screen Thief"
|
||
|
--------H-51---------------------------------
|
||
|
INT 51 - IRQ1 relocated by DESQview
|
||
|
Range: INT 51 to INT F9, selected automatically
|
||
|
Note: this is the default location for older versions; see INT 50"DESQview"
|
||
|
for details of interrupt relocation
|
||
|
SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
|
||
|
--------H-52---------------------------------
|
||
|
INT 52 - IRQ2 relocated by DESQview
|
||
|
Range: INT 52 to INT FA, selected automatically
|
||
|
Note: this is the default location for older versions; see INT 50"DESQview"
|
||
|
for details of interrupt relocation
|
||
|
SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
|
||
|
--------H-53---------------------------------
|
||
|
INT 53 - IRQ3 relocated by DESQview
|
||
|
Range: INT 53 to INT FB, selected automatically
|
||
|
Note: this is the default location for older versions; see INT 50"DESQview"
|
||
|
for details of interrupt relocation
|
||
|
SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
|
||
|
--------H-54---------------------------------
|
||
|
INT 54 - IRQ4 relocated by DESQview
|
||
|
Range: INT 54 to INT FC, selected automatically
|
||
|
Note: this is the default location for older versions; see INT 50"DESQview"
|
||
|
for details of interrupt relocation
|
||
|
SeeAlso: INT 50"DESQview",INT 58"DESQview"
|
||
|
--------H-55---------------------------------
|
||
|
INT 55 - IRQ5 relocated by DESQview
|
||
|
Range: INT 55 to INT FD, selected automatically
|
||
|
Note: this is the default location for older versions; see INT 50"DESQview"
|
||
|
for details of interrupt relocation
|
||
|
SeeAlso: INT 50"DESQview",INT 58"DESQview"
|
||
|
--------H-56---------------------------------
|
||
|
INT 56 - IRQ6 relocated by DESQview
|
||
|
Range: INT 56 to INT FE, selected automatically
|
||
|
Note: this is the default location for older versions; see INT 50"DESQview"
|
||
|
for details of interrupt relocation
|
||
|
SeeAlso: INT 50"DESQview",INT 58"DESQview"
|
||
|
--------H-57---------------------------------
|
||
|
INT 57 - IRQ7 relocated by DESQview
|
||
|
Range: INT 57 to INT FF, selected automatically
|
||
|
Note: this is the default location for older versions; see INT 50"DESQview"
|
||
|
for details of interrupt relocation
|
||
|
SeeAlso: INT 50"DESQview",INT 58"DESQview"
|
||
|
--------H-58---------------------------------
|
||
|
INT 58 - IRQ8 relocated by DESQview 2.26+
|
||
|
Range: INT 58 to INT F8, selected automatically
|
||
|
Note: this is the default, but other INTs may be used (see INT 50"DESQview")
|
||
|
SeeAlso: INT 50"DESQview",INT 59"DESQview",INT 70
|
||
|
--------H-59---------------------------------
|
||
|
INT 59 - IRQ9 relocated by DESQview 2.26+
|
||
|
Range: INT 59 to INT F9, selected automatically
|
||
|
Note: this is the default, but other INTs may be used (see INT 50"DESQview")
|
||
|
SeeAlso: INT 50"DESQview",INT 58"DESQview",INT 5A"DESQview",INT 71
|
||
|
--------H-5A---------------------------------
|
||
|
INT 5A - IRQ10 relocated by DESQview 2.26+
|
||
|
Range: INT 5A to INT FA, selected automatically
|
||
|
Note: this is the default, but other INTs may be used (see INT 50"DESQview")
|
||
|
SeeAlso: INT 50"DESQview",INT 59"DESQview",INT 5B"DESQview",INT 72
|
||
|
--------H-5B---------------------------------
|
||
|
INT 5B - IRQ11 relocated by DESQview 2.26+
|
||
|
Range: INT 5B to INT FB, selected automatically
|
||
|
Note: this is the default, but other INTs may be used (see INT 50"DESQview")
|
||
|
SeeAlso: INT 50"DESQview",INT 5A"DESQview",INT 5C"DESQview",INT 73
|
||
|
--------H-5C---------------------------------
|
||
|
INT 5C - IRQ12 relocated by DESQview 2.26+
|
||
|
Range: INT 5C to INT FC, selected automatically
|
||
|
Note: this is the default, but other INTs may be used (see INT 50"DESQview")
|
||
|
SeeAlso: INT 50"DESQview",INT 5B"DESQview",INT 5D"DESQview",INT 74
|
||
|
--------H-5D---------------------------------
|
||
|
INT 5D - IRQ13 relocated by DESQview 2.26+
|
||
|
Range: INT 5D to INT FD, selected automatically
|
||
|
Note: this is the default, but other INTs may be used (see INT 50"DESQview")
|
||
|
SeeAlso: INT 50"DESQview",INT 5C"DESQview",INT 5E"DESQview",INT 75
|
||
|
--------H-5E---------------------------------
|
||
|
INT 5E - IRQ14 relocated by DESQview 2.26+
|
||
|
Range: INT 5E to INT FE, selected automatically
|
||
|
Note: this is the default, but other INTs may be used (see INT 50"DESQview")
|
||
|
SeeAlso: INT 50"DESQview",INT 5D"DESQview",INT 5F"DESQview",INT 76
|
||
|
--------H-5F---------------------------------
|
||
|
INT 5F - IRQ15 relocated by DESQview 2.26+
|
||
|
Range: INT 5F to INT FF, selected automatically
|
||
|
Note: this is the default, but other INTs may be used (see INT 50"DESQview")
|
||
|
SeeAlso: INT 50"DESQview",INT 5E"DESQview",INT 77
|
||
|
--------Q-63---------------------------------
|
||
|
INT 63 - DESQview/X - SOCKET API
|
||
|
Notes: parameters are passed by patching!! data field immediately following
|
||
|
the entry point, as detailed below; the preferred method for calling
|
||
|
the socket API is via INT 15/AX=DE2Eh
|
||
|
the installation check consists of testing for the string "dvxunix"
|
||
|
(yes, lowercase) at offset 9 from the interrupt handler start
|
||
|
SeeAlso: INT 15/AX=DE2Eh,INT BE"DESQview"
|
||
|
Index: installation check;DESQview/X socket interface
|
||
|
|
||
|
Format of DESQview/X socket interrupt handler entry:
|
||
|
Offset Size Description (Table 1959)
|
||
|
00h 3 BYTEs near jump or short jump + NOP to actual interrupt handler
|
||
|
03h WORD offset from following pointer for initial top of local stack
|
||
|
05h DWORD pointer to argument/stack block (see INT 15/AX=DE2Eh)
|
||
|
09h 7 BYTEs signature "dvxunix"
|
||
|
--------m-673F--CX5145-----------------------
|
||
|
INT 67 U - QEMM-386 v4.23+ - INSTALLATION CHECK
|
||
|
AH = 3Fh
|
||
|
CX = 5145h ("QE")
|
||
|
DX = 4D4Dh ("MM")
|
||
|
Return: AH = 00h if installed
|
||
|
ES:DI -> QEMM API entry point
|
||
|
Notes: if no other program has hooked INT 67, an alternate installation
|
||
|
check is to test for the string
|
||
|
"QUARTERDECK EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
|
||
|
handler's segment; the word at offset 12h contains the offset in
|
||
|
the handler's segment of the API entry point
|
||
|
although this function is still undocumented, Quarterdeck has recently
|
||
|
documented two alternate methods for determining the QEMM API entry
|
||
|
point, as well as several of the API functions
|
||
|
MICEMM (Micronics Expanded Memory Manager) versions 2.0C and 4D support
|
||
|
the alternate QEMM installation check and entry point functions 00h,
|
||
|
02h, and 03h; version 4D only provides the signature string if the
|
||
|
commandline argument "DV" is provided
|
||
|
386MAX v6.01 responds to this call, but DESQview 2.42 does not
|
||
|
recognize the returned entry point as providing QEMM's capabilities
|
||
|
because a) only functions 0Ch (different from QEMM 0Ch) and
|
||
|
1000h-1009h are supported,
|
||
|
b) status is returned as for EMS functions, not QEMM funcs
|
||
|
c) the protected-mode entry point returned by function 1000h
|
||
|
only supports functions 0Ch, 1004h, 1005h, and 100Ah
|
||
|
the string check mentioned above is not supported by 386MAX
|
||
|
SeeAlso: AX=5BF0h,AH=DDh,AX=FFA5h,INT 15/AX=11DEh,INT 21/AX=4402h/SF=01h
|
||
|
SeeAlso: INT 21/AX=4402h"QEMM",INT 21/AX=4402h"386MAX",INT 2F/AX=D201h/BX=5145h
|
||
|
|
||
|
(Table 1967)
|
||
|
Values for calling QEMM "QPI_GetStatus" function:
|
||
|
AH = 00h get QEMM state
|
||
|
Return: CF clear
|
||
|
AL = QEMM state
|
||
|
bit 0 set if QEMM turned OFF
|
||
|
bit 1 set if in "Auto" mode
|
||
|
Note: this function is officially documented
|
||
|
|
||
|
(Table 1968)
|
||
|
Values for calling QEMM "QPI_SetStatus" function:
|
||
|
AH = 01h set QEMM state
|
||
|
AL = new state
|
||
|
bit 0 set: place QEMM in OFF state
|
||
|
Return: CF clear if successful
|
||
|
CF set on error
|
||
|
Note: this function is officially documented
|
||
|
|
||
|
(Table 1969)
|
||
|
Values for calling QEMM QPI function 02h:
|
||
|
AH = 02h get ???
|
||
|
Return: CF clear
|
||
|
AX = segment of ??? data structure
|
||
|
Data Structure
|
||
|
Offset Size Description
|
||
|
00h DWORD page table entry for ???
|
||
|
???
|
||
|
|
||
|
(Table 1970)
|
||
|
Values for calling QEMM "QPI_GetVersion" function:
|
||
|
AH = 03h get QEMM version
|
||
|
Return: CF clear
|
||
|
AX = BX = version in BCD
|
||
|
Notes: this function is officially documented. The most recent official docs
|
||
|
state that the version is returned in both AX and BX; older
|
||
|
documentation only mentions BX
|
||
|
MICEMM returns AX=0001h, BX unchanged
|
||
|
|
||
|
(Table 1971)
|
||
|
Values for calling QEMM QPI function 04h:
|
||
|
AH = 04h allocate 4K page and set AUTO/ON mode
|
||
|
Return: CF clear if successful
|
||
|
DX = page number of a 4K page
|
||
|
CF set if unable to allocate page
|
||
|
Note: QEMM mode unchanged if not AUTO/OFF
|
||
|
|
||
|
(Table 1972)
|
||
|
Values for calling QEMM QPI function 05h:
|
||
|
AH = 05h free 4K page and turn QEMM off
|
||
|
DX = page number returned by function 04h
|
||
|
Return: CF clear
|
||
|
Note: QEMM mode unchanged if not AUTO/ON
|
||
|
|
||
|
(Table 1973)
|
||
|
Values for calling QEMM QPI function 06h:
|
||
|
AH = 06h make new mapping context???
|
||
|
DX = page number of 4K page to hold page table
|
||
|
Return: CF clear
|
||
|
Note: copies page table into given page and then sets ??? page table entry
|
||
|
to point at copy
|
||
|
|
||
|
(Table 1974)
|
||
|
Values for calling QEMM QPI function 07h:
|
||
|
AH = 07h get mapping context
|
||
|
Return: CF clear
|
||
|
DX = page number of page table for current mapping context
|
||
|
|
||
|
(Table 1975)
|
||
|
Values for calling QEMM QPI function 08h:
|
||
|
AH = 08h set mapping context???
|
||
|
DX = linear page number of page table
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 1976)
|
||
|
Values for calling QEMM QPI function 09h:
|
||
|
AH = 09h get linear page number for page table entry
|
||
|
CX = page table index
|
||
|
Return: CF clear
|
||
|
DX = linear page number
|
||
|
|
||
|
(Table 1977)
|
||
|
Values for calling QEMM QPI function 0Ah:
|
||
|
AH = 0Ah set linear page number for page table entry
|
||
|
CX = page table index
|
||
|
DX = linear page number
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 1978)
|
||
|
Values for calling QEMM QPI function 0Bh:
|
||
|
AH = 0Bh map 4K pages
|
||
|
BX = number of pages
|
||
|
CX = first page number (must be 0100h to allocate HMA)
|
||
|
DX = EMS handle (memory belonging to EMS handle will be mapped
|
||
|
into the address space beginning with the first page
|
||
|
allocated to the handle)
|
||
|
Return: AH = 00h
|
||
|
|
||
|
(Table 1979)
|
||
|
Values for calling QEMM QPI function 0Ch:
|
||
|
AH = 0Ch get available memory
|
||
|
Return: CF clear
|
||
|
BX = 0001h
|
||
|
CX = total 4K pages???
|
||
|
DX = number of 4K pages free
|
||
|
|
||
|
(Table 1980)
|
||
|
Values for calling QEMM QPI function 0Dh:
|
||
|
AH = 0Dh CRT controller I/O port trapping
|
||
|
AL = mode
|
||
|
00h only trap on I/O ports 03C0h-03C5h, 03C7h, 03CAh-03CFh
|
||
|
01h trap on ports 03B4h, 03B5h, 03B8h, 03C6h, 03C8h, 03C9h,
|
||
|
03D4h, and 03D5h
|
||
|
02h only trap on I/O ports 03C6h, 03C8h, and 03C9h
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 1981)
|
||
|
Values for calling QEMM QPI function 0Eh:
|
||
|
AH = 0Eh set cursor virtualization callbacks
|
||
|
DS:BX -> FAR routine for getting hardware cursor address
|
||
|
ES:DX -> FAR routine for setting hardware cursor address
|
||
|
Return: CF clear
|
||
|
Note: both callbacks are invoked with CL indicating which
|
||
|
CRT controller register to access (0Eh for high
|
||
|
byte of cursor address, 0Fh for low byte)
|
||
|
the DS:BX callback should return BX=cursor address;
|
||
|
ES:DX is called with BL or BH (depending on CL)
|
||
|
set to the appropriate half of the cursor's address
|
||
|
|
||
|
(Table 1982)
|
||
|
Values for calling QEMM QPI function 0Fh:
|
||
|
AH = 0Fh unmap 4K pages
|
||
|
CX = first page number
|
||
|
DX = number of pages
|
||
|
Return: CF clear
|
||
|
AL = 00h/01h if ???
|
||
|
Note: if CX=0100h and DX=0010h, the HMA is remapped to
|
||
|
simulate a disabled A20
|
||
|
|
||
|
(Table 1983)
|
||
|
Values for calling QEMM QPI function 1000h:
|
||
|
AX = 1000h get protected-mode interface
|
||
|
DS:SI -> 16-byte buffer for two GDT entries
|
||
|
ES:DI -> buffer for 4K page table
|
||
|
Return: CF clear
|
||
|
EAX = offset of protected-mode API entry point
|
||
|
DS:SI buffer filled with two GDT descriptors
|
||
|
first is QEMM code segment, second is data???
|
||
|
ES:DI buffer filled with 4K page table
|
||
|
DI points to first unused page table entry
|
||
|
SeeAlso: INT 67/AX=DE01h
|
||
|
|
||
|
(Table 1984)
|
||
|
Values for calling QEMM QPI function 1001h:
|
||
|
AX = 1001h get CPU debug registers
|
||
|
ES:DI -> buffer for debug registers (8 DWORDs)
|
||
|
Return: CF clear
|
||
|
BL = INT01 handling (see function 1002h)
|
||
|
ES:DI buffer filled
|
||
|
|
||
|
(Table 1985)
|
||
|
Values for calling QEMM QPI function 1002h:
|
||
|
AX = 1002h set CPU debug registers
|
||
|
BL = INT01 handling
|
||
|
00h reflect all debugging exceptions as V86-mode INT 01's
|
||
|
else convert debugging exceptions other than single-step
|
||
|
into V86-mode INT 03's, single-step to INT 01's
|
||
|
ES:DI -> buffer containing debug registers (8 DWORDs)
|
||
|
Return: CF clear
|
||
|
Notes: identical to INT 67/AX=DE09h if BL=01h
|
||
|
the INT01 handling flag is set to 01h by the general-protection
|
||
|
violation handler for certain privileged instructions
|
||
|
|
||
|
(Table 1986)
|
||
|
Values for calling QEMM QPI function 1003h:
|
||
|
AX = 1003h get machine status word CR0
|
||
|
Return: CF clear
|
||
|
EAX = contents of CR0
|
||
|
SeeAlso: INT 67/AX=DE07h
|
||
|
|
||
|
(Table 1987)
|
||
|
Values for calling QEMM QPI function 1004h:
|
||
|
AX = 1004h allocate a 4K page
|
||
|
Return: CF clear if successful
|
||
|
EDX = linear address of allocated page
|
||
|
CF set on error
|
||
|
SeeAlso: INT 67/AX=DE04h
|
||
|
|
||
|
(Table 1988)
|
||
|
Values for calling QEMM QPI function 1005h:
|
||
|
AX = 1005h free 4K page
|
||
|
EDX = linear address of page to free
|
||
|
Return: CF clear
|
||
|
SeeAlso: INT 67/AX=DE05h
|
||
|
|
||
|
(Table 1989)
|
||
|
Values for calling QEMM QPI function 1006h:
|
||
|
AX = 1006h NOP
|
||
|
Return: CF set
|
||
|
|
||
|
(Table 1990)
|
||
|
Values for calling QEMM QPI function 1007h:
|
||
|
AX = 1007h get maximum physical memory address
|
||
|
Return: CF clear
|
||
|
EDX = physical address of highest 4K memory page
|
||
|
SeeAlso: INT 67/AX=DE02h
|
||
|
|
||
|
(Table 1991)
|
||
|
Values for calling QEMM QPI function 1008h:
|
||
|
AX = 1008h get physical address of page in first megabyte
|
||
|
CX = page number (linear address shifted right 12 bits)
|
||
|
Return: CF clear
|
||
|
EDX = linear address of page
|
||
|
SeeAlso: function 1F00h
|
||
|
|
||
|
(Table 1992)
|
||
|
Values for calling QEMM QPI function 1009h:
|
||
|
AX = 1009h switch to protected mode
|
||
|
ESI = linear address in first megabyte of system reg values
|
||
|
(see INT 67/AX=DE0Ch)
|
||
|
interrupts disabled
|
||
|
Return: interrupts disabled
|
||
|
GDTR, IDTR, LDTR, TR loaded
|
||
|
SS:ESP must have at least 16 bytes space, and the
|
||
|
entry point is required to set up a new stack
|
||
|
before enabling interrupts
|
||
|
EAX, ESI, DS, ES, FS, GS destroyed
|
||
|
|
||
|
(Table 1993)
|
||
|
Values for calling QEMM QPI function 100Ah:
|
||
|
AX = 100Ah switch back to virtual-86 mode
|
||
|
DS = selector for data segment from function 1000h
|
||
|
SS:ESP in first megabyte of linear memory
|
||
|
interrupts disabled
|
||
|
STACK: QWORD return address from FAR call to 32-bit segment
|
||
|
DWORD EIP
|
||
|
DWORD CS
|
||
|
DWORD reserved for EFLAGS
|
||
|
DWORD ESP
|
||
|
DWORD SS
|
||
|
DWORD ES
|
||
|
DWORD DS
|
||
|
DWORD FS
|
||
|
DWORD GS
|
||
|
will switch to virtual86 mode with interrupts disabled, all
|
||
|
segment registers loaded, and EAX destroyed.
|
||
|
|
||
|
(Table 1994)
|
||
|
Values for calling QEMM QPI function 11h:
|
||
|
AH = 11h get memory type map
|
||
|
AL = zero/nonzero ??? (set by QEMM.COM but apparently ignored
|
||
|
by QEMM 6.00)
|
||
|
ES:DI -> 256-byte buffer for memory types
|
||
|
Return: CF clear
|
||
|
BL = ???
|
||
|
ES:DI buffer filled
|
||
|
Note: each byte of the buffer corresponds to a 4K page, and
|
||
|
contains the type of that page: 00h = mappable,
|
||
|
02h = mapped ROM, 03h = high RAM, 04h = excluded,
|
||
|
05h = video, 06h = ROM, 07h = adapter ROM,
|
||
|
08h = split ROM, 09h = page frame, 0Ah = RAMmable,
|
||
|
0Bh = conventional, 83h = high RAM under MS Windows
|
||
|
|
||
|
(Table 1995)
|
||
|
Values for calling QEMM QPI function 12h:
|
||
|
AH = 12h get HIRAM chain
|
||
|
Return: CF clear
|
||
|
BX = segment of first MCB in high memory
|
||
|
0000h if no high memory
|
||
|
|
||
|
(Table 1996)
|
||
|
Values for calling QEMM QPI function 1300h:
|
||
|
AX = 1300h VIDRAMEGA???
|
||
|
BL = 00h copy ???
|
||
|
nonzero copy ??? (reverse)
|
||
|
Return: CF clear
|
||
|
AL = status
|
||
|
00h if all pages clean
|
||
|
01h if any page dirty
|
||
|
|
||
|
(Table 1997)
|
||
|
Values for calling QEMM QPI function 1301h:
|
||
|
AX = 1301h check if pages modified
|
||
|
DX:DI = start address of range to check
|
||
|
CX = length of range in paragraphs
|
||
|
Return: CF clear
|
||
|
CX = status
|
||
|
0000h none of the indicated pages is dirty
|
||
|
DI destroyed
|
||
|
1000h one or more pages is dirty
|
||
|
DI = low word of first dirty page's linear addr
|
||
|
|
||
|
(Table 1998)
|
||
|
Values for calling QEMM QPI function 1302h:
|
||
|
AX = 1302h ???
|
||
|
BL = ???
|
||
|
BH = ???
|
||
|
CX = ???
|
||
|
SI = offset of ???
|
||
|
DI = offset of ???
|
||
|
???
|
||
|
Return: CF clear
|
||
|
???
|
||
|
Note: disables certain interrupts at the two 8259 PICs during
|
||
|
execution; also modifies CRT controller during
|
||
|
execution under certain circumstances
|
||
|
|
||
|
(Table 1999)
|
||
|
Values for calling QEMM QPI function 1303h:
|
||
|
AX = 1303h initialize EGA graphics virtualization
|
||
|
BX = number of pages (less 1) of EMS to allocate
|
||
|
Return: CF clear if successful
|
||
|
DX = EMS handle
|
||
|
CF set on error
|
||
|
|
||
|
(Table 2000)
|
||
|
Values for calling QEMM QPI function 1304h:
|
||
|
AX = 1304h shutdown EGA graphics virtualization
|
||
|
DX = EMS handle being used for virtualization
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2001)
|
||
|
Values for calling QEMM QPI function 1305h:
|
||
|
AX = 1305h select portion of EGA graphics to virtualize???
|
||
|
(related to graphics virtualization, changes memory mappings)
|
||
|
CX = start offset within A000h segment of virtualized mem???
|
||
|
Return: CF clear
|
||
|
Note: disables certain interrupts at the two 8259 PICs during
|
||
|
execution (see func 130Ch) and runs inside a QEMM
|
||
|
critical section
|
||
|
|
||
|
(Table 2002)
|
||
|
Values for calling QEMM QPI function 1306h:
|
||
|
AX = 1306h set DESQview critical section counter address
|
||
|
ES:BX -> WORD DESQview critical section counter or 0000h:0000h
|
||
|
Return: CF clear
|
||
|
Note: also sets a pointer in the low-memory part of QEMM to
|
||
|
the current value of INT 15 if ES:BX not 0000h:0000h
|
||
|
|
||
|
(Table 2003)
|
||
|
Values for calling QEMM QPI function 1307h:
|
||
|
AX = 1307h ??? (changes memory mappings for entire A000h segment)
|
||
|
Return: CF clear
|
||
|
Note: disables certain interrupts at the two 8259 PICs during
|
||
|
execution (see func 130Ch) and runs inside a QEMM
|
||
|
critical section
|
||
|
|
||
|
(Table 2004)
|
||
|
Values for calling QEMM QPI function 1308h:
|
||
|
AX = 1308h start/reset CRT controller I/O trapping
|
||
|
BL = subfunction
|
||
|
00h restore CRTC I/O port trapping to previous state
|
||
|
else start trapping all accesses to I/O ports 03B0-03DF
|
||
|
Return: CF clear
|
||
|
Note: if called more than once in a row with BL nonzero, the
|
||
|
original state of the I/O port trapping will be lost
|
||
|
|
||
|
(Table 2005)
|
||
|
Values for calling QEMM QPI function 1309h:
|
||
|
AX = 1309h Hercules mode-change support
|
||
|
ES:BX -> new address for Hercules mode-change callback
|
||
|
Return: CF clear
|
||
|
Note: the callback function is called whenever the CRTC mode
|
||
|
register is written, with AL set to the value written
|
||
|
|
||
|
(Table 2006)
|
||
|
Values for calling QEMM QPI function 130Ah:
|
||
|
AX = 130Ah virtualize EGA/VGA DAC registers (I/O ports 03C8h/03C9h)
|
||
|
CX:DX -> DAC register virtualization buffer (see #2088)
|
||
|
or 0000h:0000h to disable
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2007)
|
||
|
Values for calling QEMM QPI function 130Bh:
|
||
|
AX = 130Bh ???
|
||
|
BL = ??? (??? or 00h)
|
||
|
Return: CF clear
|
||
|
???
|
||
|
Note: calls AX=130Eh in some cases
|
||
|
|
||
|
(Table 2008)
|
||
|
Values for calling QEMM QPI function 130Ch:
|
||
|
AX = 130Ch set interrupts to mask
|
||
|
BX = interrupts to mask out during AX=1302h,AX=1307h,AX=1308h,
|
||
|
AX=130Dh,AX=1310h (BL = master PIC, BH = slave PIC)
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2009)
|
||
|
Values for calling QEMM QPI function 130Dh:
|
||
|
AX = 130Dh map EGA memory at A0000h
|
||
|
???
|
||
|
Return: CF clear
|
||
|
Note: disables certain interrupts at the two 8259 PICs during execution
|
||
|
(see #2008) and runs inside a QEMM critical section
|
||
|
calls AX=1307h (see #2003)
|
||
|
|
||
|
(Table 2010)
|
||
|
Values for calling QEMM QPI function 130Eh:
|
||
|
AX = 130Eh ??? (modifies CRT controller setup)
|
||
|
???
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2011)
|
||
|
Values for calling QEMM QPI function 130Fh:
|
||
|
AX = 130Fh reset ???
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2012)
|
||
|
Values for calling QEMM QPI function 1310h:
|
||
|
AX = 1310h copy modified pages to physical video RAM???
|
||
|
???
|
||
|
Return: CF clear
|
||
|
Note: disables certain interrupts at the two 8259 PICs during execution
|
||
|
(see #2008) and runs inside a QEMM critical section
|
||
|
also calls AX=130Dh (see #2009)
|
||
|
|
||
|
(Table 2013)
|
||
|
Values for calling QEMM QPI function 1311h:
|
||
|
AX = 1311h set ???
|
||
|
BL = zero/nonzero???
|
||
|
Return: CF clear
|
||
|
Note: certain operations will be performed with interrupts
|
||
|
(as set by AX=130Ch) enabled rather than disabled if
|
||
|
called with BL nonzero
|
||
|
|
||
|
(Table 2014)
|
||
|
Values for calling QEMM QPI function 1312h:
|
||
|
AX = 1312h (v6.02) NOP???
|
||
|
Note: called by DV 2.42, but appears to be a NOP in QEMM 6.02
|
||
|
|
||
|
(Table 2015)
|
||
|
Values for calling QEMM QPI function 1400h:
|
||
|
AX = 1400h initialize DESQview "protection level" support
|
||
|
ES:DI -> protection level configuration (at least 24 bytes)
|
||
|
(see #2082)
|
||
|
BL = highest ??? to return (one less than number of words)
|
||
|
Return: CF clear
|
||
|
AX = ??? (4204h for v6.00)
|
||
|
Note: QEMM also sets the protected mode INT 02 and INT 06
|
||
|
vectors to alternate handlers in certain cases
|
||
|
|
||
|
(Table 2016)
|
||
|
Values for calling QEMM QPI function 1401h:
|
||
|
AX = 1401h turn off DESQview protection level support
|
||
|
Return: CF clear
|
||
|
???
|
||
|
Notes: clears the DV critical-section flag address set with
|
||
|
function 1306h
|
||
|
QEMM also sets the protected mode INT 02 and INT 06
|
||
|
vectors to the default handlers if they had been
|
||
|
revectored by function 1400h
|
||
|
|
||
|
(Table 2017)
|
||
|
Values for calling QEMM QPI function 1402h:
|
||
|
AX = 1402h set protection level???
|
||
|
BL = protection level???
|
||
|
00h NOP
|
||
|
01h ???
|
||
|
02h ???
|
||
|
other (03h) ???
|
||
|
ES:DI -> ???
|
||
|
Return: CF clear
|
||
|
???
|
||
|
Format of Data structure:
|
||
|
Offset Size Description
|
||
|
00h WORD segment of ??? (X, word at X:0136h set to X)
|
||
|
02h WORD segment of ??? (word at X:0124h set to this)
|
||
|
04h WORD number of paragraphs of ???
|
||
|
06h 3 WORDs ??? (copied to X:0000h)
|
||
|
0Ch WORD ???
|
||
|
|
||
|
(Table 2018)
|
||
|
Values for calling QEMM QPI function 1403h:
|
||
|
AX = 1403h add ??? to end of list and ??? (execute func 1406h)
|
||
|
ES:DI -> ??? structure added to end of ??? list
|
||
|
(at least 31 bytes, DWORD at offset 06h used for
|
||
|
storing pointer to next struc, WORD at offset 00h
|
||
|
seems to be a key or index)
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2019)
|
||
|
Values for calling QEMM QPI function 1404h:
|
||
|
AX = 1404h NOP
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2020)
|
||
|
Values for calling QEMM QPI function 1405h:
|
||
|
AX = 1405h remove ??? from ??? list
|
||
|
BX = key???
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2021)
|
||
|
Values for calling QEMM QPI function 1406h:
|
||
|
AX = 1406h ???
|
||
|
???
|
||
|
Return: CF clear
|
||
|
???
|
||
|
Notes: this function is a NOP unless protection level 2 or 3
|
||
|
is active
|
||
|
when not a NOP, one of the actions is to write-protect
|
||
|
certain memory pages
|
||
|
|
||
|
(Table 2022)
|
||
|
Values for calling QEMM QPI function 1407h:
|
||
|
AX = 1407h ???
|
||
|
???
|
||
|
Return: CF clear
|
||
|
???
|
||
|
Note: same as function 1406h, but only does anything if
|
||
|
protection level 2 is active
|
||
|
|
||
|
(Table 2023)
|
||
|
Values for calling QEMM QPI function 1408h:
|
||
|
AX = 1408h unprotect???
|
||
|
???
|
||
|
Return: CF clear
|
||
|
???
|
||
|
|
||
|
(Table 2024)
|
||
|
Values for calling QEMM QPI function 1409h:
|
||
|
AX = 1409h abort program causing protection violation???
|
||
|
???
|
||
|
Return: CF clear
|
||
|
???
|
||
|
|
||
|
(Table 2025)
|
||
|
Values for calling QEMM QPI function 140Ah:
|
||
|
AX = 140Ah set ???
|
||
|
BX = index of ???
|
||
|
Return: CF clear
|
||
|
???
|
||
|
Notes: no range checking is performed on BX
|
||
|
this function is a NOP unless protection level 3 active
|
||
|
|
||
|
(Table 2026)
|
||
|
Values for calling QEMM QPI function 140Bh:
|
||
|
AX = 140Bh get ???
|
||
|
BX = index of ???
|
||
|
SI = 0000h
|
||
|
Return: CF clear
|
||
|
SI = segment of 256-byte buffer??? or 0000h
|
||
|
Notes: no range checking is performed on BX
|
||
|
this function is a NOP unless protection level 3 active
|
||
|
|
||
|
(Table 2027)
|
||
|
Values for calling QEMM QPI function 15h:
|
||
|
AH = 15h set timer channel 0 virtualization buffer
|
||
|
ES:BX -> WORD buffer for timer channel 0 divisor
|
||
|
0000h:0000h to disable virtualization
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2028)
|
||
|
Values for calling QEMM v5.00+ QPI function 1600h:
|
||
|
AX = 1600h get memory access status
|
||
|
ES:DI -> 256-byte buffer
|
||
|
Return: ES:DI buffer filled
|
||
|
Note: each byte of the buffer indicates the status of a 4K
|
||
|
page (bit 0 set if read, bit 1 set if written)
|
||
|
|
||
|
(Table 2029)
|
||
|
Values for calling QEMM v5.00+ QPI function 1601h:
|
||
|
AX = 1601h set memory access status
|
||
|
ES:DI -> 256-byte buffer containing access statuses (see above)
|
||
|
|
||
|
(Table 2030)
|
||
|
Values for calling QEMM v5.00+ QPI function 17h:
|
||
|
AH = 17h get memory usage statistics
|
||
|
ES:DI -> 81-byte buffer for memory statistics (see #2086)
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2031)
|
||
|
Values for calling QEMM v5.11+ QPI function 18h:
|
||
|
AH = 18h check whether conventional memory mapped into address range
|
||
|
ES:BX = starting address
|
||
|
CX = number of 4K pages
|
||
|
Return: CF clear
|
||
|
AL = 00h one or more pages is remapped
|
||
|
01h all pages in range are conventional memory
|
||
|
(physical address == virtual address)
|
||
|
|
||
|
(Table 2032)
|
||
|
Values for calling QEMM v5.11+ QPI function 19h:
|
||
|
AH = 19h NOP
|
||
|
Return: CF set
|
||
|
|
||
|
(Table 2033)
|
||
|
Values for calling QEMM v5.11+ "QPI_UntrappedIORead" function:
|
||
|
AX = 1A00h get byte from I/O port
|
||
|
DX = port number
|
||
|
Return: CF clear
|
||
|
BL = port value
|
||
|
Note: this function was officially documented with the release of QEMM 7.50
|
||
|
|
||
|
(Table 2034)
|
||
|
Values for calling QEMM v5.11+ "QPI_UntrappedIOWrite" function:
|
||
|
AX = 1A01h send byte to I/O port
|
||
|
BL = value to send
|
||
|
DX = port number
|
||
|
Return: CF clear
|
||
|
Note: this function was officially documented with the release of QEMM 7.50
|
||
|
|
||
|
(Table 2035)
|
||
|
Values for calling QEMM v5.11+ "QPI_UntrappedIOReadIndexed" function:
|
||
|
AX = 1A02h
|
||
|
BH = index value to send
|
||
|
DX = base port number
|
||
|
Return: CF clear
|
||
|
BL = value read from I/O port (DX+1)
|
||
|
Note: this function was officially documented with the release of QEMM 7.50
|
||
|
|
||
|
(Table 2036)
|
||
|
Values for calling QEMM v5.11+ "QPI_UntrappedIOWriteIndexed" function:
|
||
|
AX = 1A03h send bytes to two consecutive I/O ports
|
||
|
BH = value for first I/O port (DX)
|
||
|
BL = value for second I/O port (DX+1)
|
||
|
DX = base port number
|
||
|
Return: CF clear
|
||
|
Note: this function was officially documented with the release of QEMM 7.50
|
||
|
|
||
|
(Table 2037)
|
||
|
Values for calling QEMM v7.03+ "QPI_UntrappedIO" function:
|
||
|
AX = 1A04h
|
||
|
BX = value to write to port
|
||
|
CX = direction and size
|
||
|
bit 2: output instead of input
|
||
|
bit 3: word instead of byte
|
||
|
DX = I/O port to be accessed
|
||
|
Return: CF clear
|
||
|
BX = value read (if CX indicates read)
|
||
|
Note: this function was officially documented with the release of QEMM 7.50
|
||
|
|
||
|
(Table 2038)
|
||
|
Values for calling QEMM v7.03+ function 1A05h
|
||
|
AX = 1A05h
|
||
|
???
|
||
|
Return: ???
|
||
|
|
||
|
(Table 2039)
|
||
|
Values for calling QEMM v7.03+ "QPI_GetIOCallback" function:
|
||
|
AX = 1A06h
|
||
|
Return: CF clear
|
||
|
ES:DI -> current I/O callback function
|
||
|
Note: this function was officially documented with the release of QEMM 7.50
|
||
|
|
||
|
(Table 2040)
|
||
|
Values for calling QEMM v7.03+ "QPI_SetIOCallback" function:
|
||
|
AX = 1A07h
|
||
|
ES:DI -> new I/O callback function
|
||
|
Return: CF clear
|
||
|
Note: this function was officially documented with the release of QEMM 7.50
|
||
|
|
||
|
(Table 2041)
|
||
|
Values for calling QEMM v7.03+ "QPI_GetPortTrap" function:
|
||
|
AX = 1A08h
|
||
|
DX = I/O port number
|
||
|
Return: CF clear
|
||
|
BL = trapping state (00h not being trapped, 01h trap installed)
|
||
|
Note: this function was officially documented with the release of QEMM 7.50
|
||
|
|
||
|
(Table 2042)
|
||
|
Values for calling QEMM v7.03+ "QPI_SetPortTrap" function:
|
||
|
AX = 1A09h
|
||
|
DX = I/O port number
|
||
|
Return: CF clear
|
||
|
Note: this function was officially documented with the release of QEMM 7.50
|
||
|
|
||
|
(Table 2043)
|
||
|
Values for calling QEMM v7.03+ "QPI_ClearPortTrap" function:
|
||
|
AX = 1A0Ah
|
||
|
DX = I/O port number
|
||
|
Return: CF clear
|
||
|
Note: this function was officially documented with the release of QEMM 7.50
|
||
|
|
||
|
(Table 2044)
|
||
|
Values for calling QEMM v5.11+ QPI function 1B00h:
|
||
|
AX = 1B00h get EMM Import Structure address
|
||
|
ES:DI -> buffer for EMM import data structure (see #2084)
|
||
|
Return: CF set on error
|
||
|
CF clear if successful
|
||
|
SeeAlso: INT 21/AX=4402h/SF=01h
|
||
|
|
||
|
(Table 2045)
|
||
|
Values for calling QEMM v5.11+ QPI function 1B01h:
|
||
|
AX = 1B01h disable V86 mode
|
||
|
Return: CF set on error
|
||
|
(i.e. no Global EMM Import rec. allocated)
|
||
|
CF clear if successful
|
||
|
Note: shuts down EMS and initializes Global EMM Import record; this function
|
||
|
is invoked from the callback supplied by INT 2F/AX=1605h
|
||
|
|
||
|
(Table 2046)
|
||
|
Values for calling QEMM v5.11+ QPI function 1B02h:
|
||
|
AX = 1B02h enable V86 mode
|
||
|
Return: CF set on error
|
||
|
CF clear if successful
|
||
|
Note: restarts EMS and frees Global EMM Import record; this function is
|
||
|
invoked from the callback supplied by INT 2F/AX=1605h
|
||
|
|
||
|
(Table 2047)
|
||
|
Values for calling QEMM v5.11+ QPI function 1B03h:
|
||
|
AX = 1B03h MS Windows initializing
|
||
|
CX = segment from which Windows init broadcast made???
|
||
|
DX = Windows startup flags
|
||
|
DI = Windows version number (major in upper byte)
|
||
|
Return: CF clear if successful
|
||
|
DS:SI -> V86 mode enable/disable callback (see INT 2F/AX=1605h)
|
||
|
ES:BX -> startup info structure (see INT 2F/AX=1605h)
|
||
|
CF set on error (unable to start Windows)
|
||
|
SeeAlso: INT 2F/AX=1605h
|
||
|
|
||
|
(Table 2048)
|
||
|
Values for calling QEMM v5.11+ QPI function 1B04h:
|
||
|
AX = 1B04h MS Windows terminating
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2049)
|
||
|
Values for calling QEMM v5.11+ QPI function 1B05h:
|
||
|
AX = 1B05h determine whether program is driver
|
||
|
DS:DX -> ASCIZ filename
|
||
|
Return: CF clear
|
||
|
AL = status
|
||
|
01h if string ends in ".DRV"
|
||
|
FFh if string ends in "GDI.EXE"
|
||
|
00h otherwise
|
||
|
Note: when MS Windows 3.0 standard mode starts, QEMM patches all drivers
|
||
|
until GDI.EXE is loaded
|
||
|
|
||
|
(Table 2050)
|
||
|
Values for calling QEMM v5.11+ QPI function 1B06h:
|
||
|
AX = 1B06h patch protected-mode check in Windows driver
|
||
|
CX = length of data pointed at by DS:DX
|
||
|
DS:DX -> buffer containing Windows driver code
|
||
|
Return: CF clear
|
||
|
Note: patches all SMSW x/TEST x,1 instruction sequences into MOV x,CS/VERW x
|
||
|
sequences, which has the effect that the protected-mode check will
|
||
|
only indicate protected mode in native protected mode and not in V86
|
||
|
mode
|
||
|
|
||
|
(Table 2051)
|
||
|
Values for calling QEMM v5.11+ QPI function 1B07h:
|
||
|
AX = 1B07h
|
||
|
BUG: QEMM 6.00-7.01 accept this and branch randomly
|
||
|
|
||
|
(Table 2052)
|
||
|
Values for calling QEMM v5.11+ QPI function 1Bxxh:
|
||
|
AX = 1B08h to 1BFFh
|
||
|
Return: CF set
|
||
|
|
||
|
(Table 2053)
|
||
|
Values for calling QEMM v5.11+ QPI function 1C00h:
|
||
|
AX = 1C00h disable IRQ0-7 calldowns
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2054)
|
||
|
Values for calling QEMM v5.11+ QPI function 1C01h:
|
||
|
AX = 1C01h set V86-mode IRQ0-7 handlers
|
||
|
ES:DI -> 8 DWORDs containing V86-mode handler addresses
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2055)
|
||
|
Values for calling QEMM v5.11+ QPI function 1C02h:
|
||
|
AX = 1C02h disable IRQ8-15 handlers
|
||
|
Return: CF clear
|
||
|
|
||
|
(Table 2056)
|
||
|
Values for calling QEMM v5.11+ QPI function 1C03h:
|
||
|
AX = 1C03h set V86-mode IRQ8-15 handlers
|
||
|
ES:DI -> 8 DWORDs containing V86-mode handler addresses
|
||
|
BUG: although the jump table only contains four entries, QEMM 6.00 will
|
||
|
attempt to use it for any value of AL between 00h and 2Ah, thus
|
||
|
branching unpredictably for AL=04h-2Ah; QEMM v7.01 behaves
|
||
|
similarly for AL=04h-1Bh
|
||
|
Note: when enabled, the appropriate IRQs are reflected back to the specified
|
||
|
handlers in virtual-86 mode after the CPU automatically invokes the
|
||
|
protected-mode handler inside QEMM
|
||
|
|
||
|
(Table 2057)
|
||
|
Values for calling QEMM v7.03+ "QPI_SimulateHWInt" function:
|
||
|
AX = 1C04h
|
||
|
BX = number of interrupt to simulate
|
||
|
Return: ???
|
||
|
Notes: this function will allow proper simulation of a hardware interrupt
|
||
|
under DESQview and DESQview/X, where the correct interrupt handler
|
||
|
may be in a different process with a completely different address
|
||
|
space
|
||
|
this function was officially documented with the release of QEMM v7.50
|
||
|
|
||
|
(Table 2058)
|
||
|
Values for calling QEMM v6.00+ QPI function 1D00h:
|
||
|
AX = 1D00h switch to pre-Stealth interrupt vector table
|
||
|
Return: CF clear if supported (QEMM v6.x)
|
||
|
CF set if not supported (QEMM v7+)
|
||
|
Notes: also switches VGA Save table pointer
|
||
|
(0040h:00A8h) and overwrites the vectors
|
||
|
currently assigned for use by the two
|
||
|
interrupt controllers (see INT 67/AX=DE0Ah)
|
||
|
with the vectors for INT 08-0F and 70-77 (to
|
||
|
avoid crashing the system).
|
||
|
functions 1Dxxh are not supported by QEMM v7.01, and always return CF
|
||
|
set
|
||
|
|
||
|
(Table 2059)
|
||
|
Values for calling QEMM v6.00+ QPI function 1D01h:
|
||
|
AX = 1D01h restore user interrupt vector table
|
||
|
Return: CF clear if supported (QEMM v6.x)
|
||
|
CF set if not supported (QEMM v7+)
|
||
|
Notes: interrupts should be disabled around the
|
||
|
AX=1D00h and AX=1D01h calls because QEMM does
|
||
|
not modify the memory maps to map in ROM, so
|
||
|
an interrupt could be disastrous
|
||
|
clears any pending IRQ7 at end of function
|
||
|
functions 1Dxxh are not supported by QEMM v7.01, and always return CF
|
||
|
set
|
||
|
|
||
|
(Table 2060)
|
||
|
Values for calling QEMM v6.00+ QPI function 1Dxxh:
|
||
|
AX = 1D02h to 1DFFh
|
||
|
Return: CF set
|
||
|
|
||
|
(Table 2061)
|
||
|
Values for calling QEMM v6.00+ "QEMM_GET_INFO"/"QPI_GetInfo" function:
|
||
|
AX = 1E00h get Stealth configuration
|
||
|
Return: CF clear
|
||
|
BL = memory configuration flags (documented as "reserved") (see #2085)
|
||
|
BH = (v7.00+) disk buffer flags
|
||
|
bit 0: DISKBUFFRAME buffer instead of DISKBUF buffer
|
||
|
bit 1: buffer has already been used
|
||
|
CL = stealth type (00h none, 46h Frame, 4Dh Map, 50h Protect)
|
||
|
CH = suspend/resume interrupt (00h none)
|
||
|
DL = (v7.00+) size of QEMM disk buffer in KB (00h none)
|
||
|
DH = reserved (always 00h for v6.00)
|
||
|
SI = reserved (always 0000h for v6.00)
|
||
|
DI = reserved (always 0000h for v6.00)
|
||
|
Note: this function is officially documented
|
||
|
|
||
|
(Table 2062)
|
||
|
Values for calling QEMM v6.00+ "QPI_GetStealthCount" function:
|
||
|
AX = 1E01h get number of Stealth'ed ROMs
|
||
|
Return: CF clear
|
||
|
BX = number of Stealth'ed ROMs
|
||
|
Note: this function is officially documented
|
||
|
|
||
|
(Table 2063)
|
||
|
Values for calling QEMM v6.00+ "QPI_GetStealthList" function:
|
||
|
AX = 1E02h
|
||
|
ES:DI -> buffer for Stealth ROM info (see #2087)
|
||
|
Return: CF clear
|
||
|
BX = number of Stealth'ed ROMs
|
||
|
ES:DI buffer filled
|
||
|
Note: this function is officially documented
|
||
|
|
||
|
(Table 2064)
|
||
|
Values for unimplemented Stealth information functions:
|
||
|
AX = 1E03h to 1EFFh
|
||
|
Return: CF set
|
||
|
|
||
|
|
||
|
(Table 2065)
|
||
|
Values for calling QEMM v6.00+ "QEMM_GET_PTE"/"QPI_GetPTE" function:
|
||
|
AX = 1F00h get page table entry
|
||
|
CX = page number (0000h-010Fh)
|
||
|
Return: CF clear
|
||
|
EDX = page table entry
|
||
|
Note: this function is officially documented
|
||
|
|
||
|
(Table 2066)
|
||
|
Values for calling QEMM v6.00+ "QEMM_SET_PTE"/"QPI_SetPTE" function:
|
||
|
AX = 1F01h set page table entry
|
||
|
CX = page number (0000h-010Fh)
|
||
|
EDX = new page table entry
|
||
|
Return: CF clear
|
||
|
Note: this function is officially documented
|
||
|
SeeAlso: function 1008h
|
||
|
|
||
|
(Table 2067)
|
||
|
Values for calling QEMM v6.00+ QPI function 1Fxxh:
|
||
|
AX = 1F02h to 1FFFh
|
||
|
Return: CF set
|
||
|
|
||
|
(Table 2068)
|
||
|
Values for calling QEMM v6.00+ "QEMM_GET_VHI_INFO"/"QPI_GetVHIInfo" function:
|
||
|
AX = 2000h "QEMM_GET_VHI_INFO" get VirtualHDIRQ information
|
||
|
Return: CF clear
|
||
|
BL = flags
|
||
|
bit 7: VirtualHDIRQ setting respected
|
||
|
(set if Stealth active)
|
||
|
bits 6-1 reserved
|
||
|
bit 0: VirtualHDIRQ currently enabled
|
||
|
(INT 15/AH=90h suppressed when enabled)
|
||
|
Note: this function is officially documented
|
||
|
SeeAlso: #2069
|
||
|
|
||
|
(Table 2069)
|
||
|
Values for calling QEMM v6.00+ "QEMM_SET_VHI_INFO"/"QPI_SetVHIInfo" function:
|
||
|
AX = 2001h set VirtualHDIRQ state
|
||
|
BL bit 0 = new VirtualHDIRQ state
|
||
|
Return: CF clear
|
||
|
BL = old VHI setting (bits 0 and 7, see #2068)
|
||
|
Note: this function is officially documented
|
||
|
SeeAlso: #2068
|
||
|
|
||
|
(Table 2070)
|
||
|
Values for calling QEMM v6.00+ QPI function 20xxh:
|
||
|
AX = 2002h to 20FFh
|
||
|
Return: CF set
|
||
|
|
||
|
(Table 2071)
|
||
|
Values for calling QEMM v6.00+ "QEMM_COPY_STEALTH_ROMS"/"QPI_CopyStealthRoms":
|
||
|
AX = 2100h copy data from Stealthed address space
|
||
|
DS:SI -> start address of hidden memory to copy
|
||
|
ES:DI -> buffer for copied data
|
||
|
ECX = number of bytes to copy
|
||
|
Return: CF clear if successful
|
||
|
CF set on error (no Stealth or DS:SI < C000h:0000h or DS:SI + ECX > 1M)
|
||
|
Note: this function was officially documented with the release of QEMM 7.50
|
||
|
|
||
|
(Table 2072)
|
||
|
Values for calling QEMM v6.00+ QPI function 21xxh:
|
||
|
AX = 2101h to 21FFh
|
||
|
Return: CF set
|
||
|
|
||
|
(Table 2073)
|
||
|
Values for calling QEMM v6.03+ QPI function 2200h:
|
||
|
AX = 2200h DESQview/X support -- get ???
|
||
|
Return: CF clear
|
||
|
ES:DI -> ???
|
||
|
|
||
|
(Table 2074)
|
||
|
Values for calling QEMM v6.03+ QPI function 2201h:
|
||
|
AX = 2201h DESQview/X support -- set ???
|
||
|
ES:DI -> ??? or 0000h:0000h
|
||
|
Return: CF clear if successful
|
||
|
CF set on error
|
||
|
|
||
|
(Table 2075)
|
||
|
Values for calling QEMM v6.04+ QPI function 2300h:
|
||
|
AX = 2300h get ???
|
||
|
BX = which ??? to get (must be 0000h for v6.04)
|
||
|
Return: CF clear if successful
|
||
|
ES:DI -> ???
|
||
|
CF set on error
|
||
|
|
||
|
(Table 2076)
|
||
|
Values for calling QEMM v6.04+ QPI function 2301h:
|
||
|
AX = 2301h set ???
|
||
|
BX = which ??? to set (must be 0000h for v6.04)
|
||
|
ES:DI -> ???
|
||
|
Return: CF clear if successful
|
||
|
CF set on error
|
||
|
|
||
|
(Table 2077)
|
||
|
Values for calling QEMM v6.04+ QPI function 2302h:
|
||
|
AX = 2302h clear specified ???
|
||
|
BX = which ??? to clear (must be 0000h for v6.04)
|
||
|
Return: CF clear if successful
|
||
|
CF set on error
|
||
|
|
||
|
(Table 2078)
|
||
|
Values for calling QEMM v6.04+ QPI function 23FFh:
|
||
|
AX = 23FFh clear all ???
|
||
|
Return: CF clear if successful
|
||
|
CF set on error
|
||
|
|
||
|
(Table 2079)
|
||
|
Values for calling QEMM v6.04+ QPI function 23xxh:
|
||
|
AX = 2303h to 23FEh
|
||
|
Return: CF set
|
||
|
|
||
|
(Table 2080)
|
||
|
Values for calling QEMM v7.01+ QPI function 24h:
|
||
|
AH = 24h ST-DBL support
|
||
|
AL = subfunction
|
||
|
00h set ???
|
||
|
EDX -> information table (EDX = segment SHL 16 + offset)
|
||
|
01h ???
|
||
|
Return: CF clear if successful
|
||
|
CF set on error
|
||
|
|
||
|
(Table 2081)
|
||
|
Values for calling QEMM unimplemented QPI functions:
|
||
|
AH = 25h to FFh
|
||
|
Return: CF set
|
||
|
|
||
|
Format of QEMM protection level configuration:
|
||
|
Offset Size Description (Table 2082)
|
||
|
00h WORD segment of 128 breakpoint (INT 3) instructions for use in
|
||
|
DESQview protection level 3 interrupt vector checking, or
|
||
|
0000h to disable; in pl3, INTs 00-7F are pointed at these
|
||
|
breakpoints
|
||
|
02h DWORD -> array of actual interrupt handler addresses for INT 00-7F
|
||
|
when interrupt vectors are pointed at protection level 3
|
||
|
breakpoints
|
||
|
06h DWORD far pointer to ??? region list (see #2083)
|
||
|
0Ah DWORD far pointer to buffer for returned ???
|
||
|
0Eh DWORD seg:ofs of function to call on protection violation???
|
||
|
12h WORD segment of ???
|
||
|
14h DWORD far pointer to DWORD containing number of paragraphs of
|
||
|
??? for segment at offset 12h
|
||
|
???
|
||
|
|
||
|
Format of protection level Region List:
|
||
|
Offset Size Description (Table 2083)
|
||
|
00h WORD number of PAIRS of pointers to follow
|
||
|
02h 2N DWORDs start/end seg:ofs addresses of ??? regions
|
||
|
Note: QEMM converts the segmented addresses into linear addresses in place
|
||
|
|
||
|
Format of EMM Import structure:
|
||
|
Offset Size Description (Table 2084)
|
||
|
00h DWORD physical address of EMM import struct
|
||
|
04h BYTE major version (v6.00 sets to 01h)
|
||
|
05h BYTE minor version (v6.00 sets to 00h/0Bh)
|
||
|
SeeAlso: INT 21/AX=4402h/SF=01h
|
||
|
|
||
|
Bitfields for memory configuration flags:
|
||
|
Bit(s) Description (Table 2085)
|
||
|
0 conventional memory sorted
|
||
|
1 conventional memory filled
|
||
|
2 ???
|
||
|
3 ???
|
||
|
4 expanded memory is in use
|
||
|
5 ???
|
||
|
|
||
|
Format of QEMM 6.0 memory statistics:
|
||
|
Offset Size Description (Table 2086)
|
||
|
00h BYTE 01h if Shadow RAM found, 00h otherwise
|
||
|
01h DWORD initial conventional memory in bytes
|
||
|
05h DWORD initial extended memory in bytes
|
||
|
09h DWORD initial expanded memory in bytes
|
||
|
0Dh DWORD initial "top" or "shadow" memory in bytes
|
||
|
11h DWORD Unavailable conventional memory in bytes
|
||
|
15h DWORD Unavailable extended memory in bytes
|
||
|
19h DWORD Unavailable expanded memory in bytes
|
||
|
1Dh DWORD Unavailable "top" or "shadow" memory in bytes
|
||
|
Add to offset 49h for Total unavailable top/shadow.
|
||
|
21h DWORD QEMM code size in bytes
|
||
|
25h DWORD QEMM data size in bytes
|
||
|
29h DWORD bytes used for TASKS=
|
||
|
2Dh DWORD DMA buffer size
|
||
|
31h DWORD bytes used for MAPS=
|
||
|
35h DWORD bytes of high RAM
|
||
|
39h DWORD bytes used by mapped ROMs
|
||
|
3Dh DWORD bytes of conventional memory provided by QEMM
|
||
|
41h DWORD bytes of extended memory NOT converted by QEMM (EXT=xxx)
|
||
|
45h DWORD bytes of EMS/XMS pool memory provided by QEMM
|
||
|
49h DWORD Unavailable "top" or "shadow" memory in bytes
|
||
|
Add to offset 1Dh for Total unavailable top/shadow.
|
||
|
4Dh DWORD conventional memory overhead in bytes
|
||
|
(set to 0 by QEMM.COM prior to call)
|
||
|
|
||
|
Format of Stealth ROM info [array]:
|
||
|
Offset Size Description (Table 2087)
|
||
|
00h WORD starting segment of ROM
|
||
|
02h WORD length of ROM in paragraphs
|
||
|
|
||
|
Format of QEMM EGA/VGA DAC register virtualization buffer:
|
||
|
Offset Size Description (Table 2088)
|
||
|
00h BYTE (temp) current color register number
|
||
|
01h BYTE (temp) number of bytes written so far for current color reg
|
||
|
02h 768 BYTEs three bytes per color register
|
||
|
--------m-6744-------------------------------
|
||
|
INT 67 - LIM EMS - MAP MEMORY
|
||
|
AH = 44h
|
||
|
AL = physical page number (0-3)
|
||
|
BX = logical page number
|
||
|
or FFFFh to unmap (QEMM)
|
||
|
DX = handle
|
||
|
Return: AH = status (00h,80h,81h,83h,84h,8Ah,8Bh) (see #2089)
|
||
|
SeeAlso: AH=69h
|
||
|
--------m-676B-------------------------------
|
||
|
INT 67 - DESQview 2.42-2.53 - BUG
|
||
|
AH = 6Bh
|
||
|
Note: the EMM.DVR portion of DESQview branches to a random location on this
|
||
|
function due to a fencepost error
|
||
|
--------E-67DE01-----------------------------
|
||
|
INT 67 - Virtual Control Program Interface - GET PROTECTED MODE INTERFACE
|
||
|
AX = DE01h
|
||
|
ES:DI -> 4K page table buffer
|
||
|
DS:SI -> three descriptor table entries in GDT
|
||
|
first becomes code segment descriptor, other two for use by
|
||
|
main control program
|
||
|
Return: AH = 00h successful
|
||
|
DI -> first unused page table entry in buffer
|
||
|
EBX -> protected mode entry point in code segment
|
||
|
AH = nonzero failed
|
||
|
Note: protected mode entry point may be called with AX=DE00h-DE05h and
|
||
|
AX=DE0Ch (in each case, all other registers as appropriate for
|
||
|
the function)
|
||
|
SeeAlso: INT 2F/AX=1687h,INT 67/AH=3Fh
|
||
|
|
||
|
(Table 2105)
|
||
|
Call QEMM v6.03 protected mode entry point additionally with:
|
||
|
AX = DF00h ???
|
||
|
???
|
||
|
Return: ???
|
||
|
AX = DF01h ???
|
||
|
???
|
||
|
Return: ???
|
||
|
--------H-71---------------------------------
|
||
|
INT 71 - IRQ9 - REDIRECTED TO INT 0A BY BIOS
|
||
|
Notes: may be masked by setting bit 1 on I/O port A1h
|
||
|
the default BIOS handler invokes INT 0A for compatibility, since the
|
||
|
pin for IRQ2 on the PC expansion bus became the pin for IRQ9 on the
|
||
|
AT expansion bus.
|
||
|
under DESQview, only the INT 15h vector and BASIC segment address (the
|
||
|
word at 0000h:0510h) may be assumed to be valid for the handler's
|
||
|
process
|
||
|
SeeAlso: INT 0A,INT 59
|
||
|
--------H-74---------------------------------
|
||
|
INT 74 - IRQ12 - POINTING DEVICE (PS)
|
||
|
Notes: may be masked by setting bit 4 on I/O port A1h
|
||
|
under DESQview, only the INT 15h vector and BASIC segment address (the
|
||
|
word at 0000h:0510h) may be assumed to be valid for the handler's
|
||
|
process
|
||
|
SeeAlso: INT 33,INT 5C
|
||
|
--------H-75---------------------------------
|
||
|
INT 75 - IRQ13 - MATH COPROCESSOR EXCEPTION (AT and up)
|
||
|
Desc: redirected to INT 02 by the BIOS, for compatibility with the PC
|
||
|
Notes: may be masked by setting bit 5 on I/O port A1h
|
||
|
not all clones wire the coprocessor to generate this IRQ; some systems
|
||
|
generate an NMI (see INT 02) or assert the -ERROR pin on the CPU
|
||
|
(see INT 10"COPROCESSOR")
|
||
|
under DESQview, only the INT 15h vector and BASIC segment address (the
|
||
|
word at 0000h:0510h) may be assumed to be valid for the handler's
|
||
|
process
|
||
|
SeeAlso: INT 10"COPROCESSOR",INT 5D
|
||
|
--------Q-BE---------------------------------
|
||
|
INT BE - DESQview/X - ???
|
||
|
Note: points at an IRET
|
||
|
SeeAlso: INT 15/AX=BFDEh/BX=0006h,INT 63"DESQview"
|
||
|
--------Q-FF---------------------------------
|
||
|
INT FF U - QEMM-386.SYS v6.0+ - internal
|
||
|
Notes: requires that a byte in the conventional-memory stub be set to the
|
||
|
desired function number (00h through 0Ch)
|
||
|
|
||
|
(Table 2431)
|
||
|
Values for QEMM internal functions:
|
||
|
00h reflect back to Virtual86-mode interrupt handler (default)
|
||
|
01h ???
|
||
|
02h access DR7???
|
||
|
03h QPI upcall (see INT 67/AH=3Fh)
|
||
|
04h ???
|
||
|
05h ???
|
||
|
06h INT 15/AH=87h
|
||
|
07h EMS services (see INT 67/AH=40h,INT 67/AH=5Dh)
|
||
|
08h ???
|
||
|
09h QEMM exception handler
|
||
|
0Ah XMS services (see INT 2F/AX=4310h)
|
||
|
0Bh Virtual DMA Services (see INT 4B/AX=8102h)
|
||
|
0Ch ???
|
||
|
--------!---CONTACT_INFO---------------------
|
||
|
Internet: ralf@telerama.lm.com
|
||
|
UUCP: {uunet,harvard}!telerama.lm.com!ralf
|
||
|
FIDO: Ralf Brown 1:129/26.1
|
||
|
or post a message to me in the DR_DEBUG echo (I probably won't see it
|
||
|
unless you address it to me)
|
||
|
CIS: >INTERNET:ralf@telerama.lm.com
|