AH |
= |
00h unused
Return: |
AH |
= |
84h (unsupported function) |
|
AH |
= |
01h get high memory information
Call: |
ES:DI |
|
buffer for array of high memory info records (see #01478) |
Return: |
CX |
= |
number of records placed in buffer |
|
AH |
= |
02h get shadowed ROM info
Call: |
ES:DI |
|
buffer for array of ROM shadowing records (see #01479) |
Return: |
CX |
= |
number of records placed in buffer |
|
AH |
= |
03h get 386MAX state
Call: |
ES:DI |
|
90-byte buffer for state (see #01467) |
Return: |
AH |
= |
00h (successful) |
buffer filled |
|
AH |
= |
04h get memory types???
Call: |
ES:DI |
|
buffer for memory type info (array of bytes, one per 16K
page) (see #01480 |
Return: |
CX |
= |
number of bytes placed in buffer |
|
AH |
= |
05h get page table entries
Call: |
AL |
= |
A20 control
00h |
= |
enable A20 first |
01h |
= |
leave unchanged |
|
CX |
= |
buffer size in bytes (0000h = enough for all memory
from given start to end of memory managed by 386MAX) |
SI |
= |
first K to report (rounded down to 4K page) |
ES:DI |
|
buffer for returned page table entries |
Return: |
CX |
= |
number of bytes returned (four per 4K page) |
|
ES:DI |
- |
buffer filled |
|
AH |
= |
06h get memory speed info
Call: |
ES:DI |
|
buffer for memory speed records (see #01482)
|
Return: |
AX |
= |
00h (successful) |
CX |
= |
number of bytes placed in buffer |
Note: |
This function can take over a
second to execute. |
|
AH |
= |
07h map/unmap multiple handle pages
Call: |
DX |
=
|
EMS handle (on stack)
|
STACK |
DWORD |
EMS mapping record |
Return:
|
AX |
= |
status (00h,80h,83h,8Ah,8Bh) |
|
|
Format of EMS mapping record:
Offset |
Size |
Description |
00h
|
WORD
|
function
0000h |
= |
use physical page numbers |
0001h |
= |
use segment addresses |
|
02h
|
WORD
|
EMS handle |
04h
|
WORD
|
number of mapping entries
following |
06h
|
2N WORDs
|
logical page number and physical
page/segment
logical page FFFFh means unmap physical page |
|
See Also:
|
INT 67/AH=50h
|
|
AH |
= |
08h "EMM2_GOREAL" check whether possible to disable
386MAX
Call: |
AL |
= |
??? (00h or nonzero)
|
Return: |
AH |
= |
status (00h OK, A4h not possible at this time) |
Note: |
If AL=00h, this function always returns success. |
|
AH |
= |
09h toggle Bit Flags 1 flags
Call: |
BX |
= |
bitmask of bit flags 1's flags to toggle (see #01468)
|
Return: |
AH |
= |
00h (successful) |
Note: |
Enables A20 first. |
|
AH |
= |
0Ah toggle Debugging Flags 1 flags
Call: |
BX |
= |
bitmask of Debugging Flags 1's bits to toggle (see #01470)
|
Return: |
AH |
= |
00h (successful) |
Note: |
Enables A20 first.
Does ??? if bit 3 on after specified bits are toggled. |
|
AH |
= |
0Bh toggle Debugging Flags 2 flags
Call: |
BX |
= |
bitmask of Debugging Flags 2's bits to toggle (see #01471)
|
Return: |
AH |
= |
00h (successful) |
Note: |
Enables A20 first. |
|
AH |
= |
0Ch toggle feature flags 3
Call: |
BX |
= |
bitmask of feature flags 3's bits to toggle (see #01475)
|
Return: |
AH |
= |
00h (successful) |
Note: |
Enables A20 first. |
|
AH |
= |
0Dh specify 386MAX high-memory location
Call: |
BX |
= |
segment address of high-memory real-mode portion of 386MAX
|
CX |
= |
current segment of real-mode stub??? |
Return: |
AH |
= |
status (00h successful) |
|
??? |
|
|
|
AH |
= |
0Eh CRT controller register virtualization
Call: |
AL |
= |
subfunction
00h |
= |
allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h |
01h |
= |
trap accesses to CRTC I/O ports |
|
|
AH |
= |
0Fh reboot system
|
AH |
= |
10h unused
Return: |
AH |
= |
AH = 84h (unsupported function) |
|
AH |
= |
11h get high memory information
Call: |
ES:DI |
|
96-byte buffer for high memory info
|
Return:
|
AH |
= |
00h (successful) |
ES:DI |
- |
buffer filled |
Note: |
Each byte in buffer contains bit flags for a
4K page in the A000h-FFFFh region:
bit 0 |
: |
page is writeable |
bit 1 |
: |
physical address same as linear address |
bit 2 |
: |
EMS page frame |
bit 6 |
: |
page is part of the QPMS window |
this function can take over a second to execute, because it
does a 128K read for each page in an attempt to flush any RAM
cache the system may have
|
|
AH |
= |
12h shadow RAM mapping
Call: |
AL |
= |
subfunction
00h |
= |
unshadow ROMs (except page FFh if NOWARMBOOT set) |
01h |
= |
map shadow RAM into ROM regions??? |
|
Return:
|
AH |
= |
00h (successful) if AL=00h or 01h |
AH |
= |
8Fh otherwise |
|
AH |
= |
13h shadow RAM page protection
Call: |
AL |
= |
subfunction
00h |
= |
set all shadowed ROM 4K pages to read-only |
01h |
= |
set all shadowed ROM 4K pages to read-write |
|
Return:
|
AH |
= |
00h (successful) if AL=00h or 01h |
AH |
= |
8Fh otherwise |
|
AH |
= |
14h get Programmable Option Select info???
Call: |
ES:DI |
|
54-byte buffer for POS data???
|
Return:
|
AH |
= |
00h if successful |
AH |
= |
A4h on error |
Note: |
The buffer consists of nine 6-byte fields; the
first eight for slots 1-8, the last for the system board. |
|
AH |
= |
15h ???
|
AH |
= |
16h get 386MAX memory usage screen
Call: |
ES:DI |
|
buffer for memory info display
|
CX |
= |
size of buffer in bytes |
Return: |
ES:DI |
- |
buffer filled with '$'-terminated string (if large enough to
hold entire usage screen) |
Note: |
the screen is 0303h bytes in v7.00 |
|
AH |
= |
17h Windows 3 startup/termination
Call: |
AL |
= |
subfunction
00h |
= |
Windows3 initializing
Call:
|
DX (on stack) |
= |
Windows startup flags
|
DI |
= |
Windows version number (major in upper byte)
|
ES:BX |
= |
0000h:0000h
|
DS:SI |
= |
0000h:0000h
|
Return:
|
CX |
= |
0000h if OK for Windows to load |
CX |
<> |
0 if Windows should not load |
ES:BX |
|
startup info structure |
DS:SI |
|
Virtual86 mode enable/disable callback |
|
01h |
= |
Windows3 terminating
Call:
|
DX (on stack) |
= |
Windows exit flags
|
ES:BX |
|
???
|
Return:
|
??? |
|
|
|
AH |
= |
18h QPMS (Qualitas Protected Memory Services)
Call: |
AL |
= |
subfunction
00h |
= |
get QPMS configuration
Return: |
BX |
= |
starting segment of QPMS memory window |
CX |
= |
number of 4K pages reserved for QPMS??? |
DX |
= |
number of 4K pages in QPMS window??? |
|
01h |
= |
map QPMS memory page???
Call: |
BX |
= |
4K page number within memory reserved for QPMS??? |
CL |
= |
page number within QPMS memory window??? |
|
02h |
= |
mark all QPMS memory read-only |
03h |
= |
mark all QPMS memory read-write |
|
Return: |
AH |
= |
status (00h,8Ah,8Bh,8Fh)
|
|
AH |
= |
19h get linear address for physical address
Call: |
EDX |
= |
physical address (low word on stack)
|
Return: |
AH |
= |
status
00h |
= |
successful
EDX |
= |
linear address at which physical address may be
accessed |
|
8Bh |
= |
physical address currently not addressable |
|
Note: |
enables A20 first |
|
AH |
= |
1Ah set page table entry
Call: |
EDX |
= |
new page table entry (low word on stack)
|
ESI |
= |
linear address of page to map (bits 0-11 clear) |
Return: |
AH |
= |
status (00h,8Bh) |
Note: |
enables A20 first |
|
AH |
= |
1Bh get ???
Return:
|
AH |
= |
status |
BX |
= |
??? |
CX |
= |
number of ??? |
EDX |
= |
physical address of ??? |
|
AH |
= |
1Ch get original interrupt vector
Call: |
AL |
= |
interrupt vector (00h-7Fh)
|
Return:
|
AH |
= |
00h (successful) |
DX |
= |
original vector before 386MAX loaded (segment in high word,
offset in low word) |
Note: |
No range checking is performed; requests for
INTs 80h- FFh will return random values. |
|
AH |
= |
1Dh display string???
Call: |
AI |
= |
???
|
Return:
|
AH |
= |
00h (successful) |
??? |
Note: |
This function appears to be broken in v7.00. |
|
AH |
= |
1Eh get memory info
Call: |
ES:DI |
|
memory info (see #01483) |
Return: |
??? |
|
AH |
= |
1Fh get DPMI host information
Return:
|
AX |
= |
0000h if successful |
BX |
= |
DPMI flags (see #03152
at INT 31/AX=0400h) |
CL |
= |
CPU type
02h |
= |
80286 |
03h |
= |
80386 |
etc. |
|
DX |
= |
DPMI ver supported
DH |
= |
major |
DL |
= |
2-digit minor |
|
SI |
= |
??? |
ES???:DI |
|
??? |
Note: |
NOP if NODPMI switch specified. |
|
AH |
= |
20h (v7.00) get ???
Call: |
AL |
= |
index of ???
|
Return: |
EDX |
= |
??? for specified ??? |
|
AH |
= |
21h (v7.00) STACKS support
Call: |
AL |
= |
00h |
= |
Return:
|
BX |
= |
??? (0060h for v7.00) |
CX |
= |
number of stacks for hardware interrupts |
DX |
= |
size of each stack in bytes |
SI |
= |
??? (low and high bytes are separate values) |
DI |
= |
??? (low and high bytes are separate values) low byte =
logical page number set by subfn 02h |
ES |
= |
??? |
|
01h |
= |
Call: |
EBX |
= |
???
|
ECX |
= |
??? |
|
02h |
= |
Call: |
BL |
= |
logical page number for ??? (00h-03h)
|
Return: |
AH |
= |
status (00h,8Ah) |
|
|
|
AH |
= |
22h (v7.00) call ??? for every load module
Call: |
AL |
= |
which function to call
00h |
= |
call ??? |
else |
- |
call ???? |
|
Return: |
AH |
= |
00h |
Note: |
If AL=00h, calls the protected-mode function
pointed at by the DWORD at offset 22h from the start of each
module installed by a LOAD= directive; if AL<>00h, it
calls the function pointed at by the DWORD at offset 28h of
the load module. |
|
AH |
= |
23h (v7.00) ???
Call: |
AL |
= |
subfunction
00h |
= |
00h set ???
Call: |
BL |
= |
???
|
Return: |
AH |
= |
00h or unchanged (depending on ???) |
|
01h |
= |
01h set ???
Call:
|
BL |
= |
???
|
BH |
= |
??? |
CX |
= |
??? |
DX |
= |
??? (on top of stack) |
Return: |
AH |
= |
status
00h |
= |
if successful |
8Fh |
= |
once table full |
|
Note: |
This call adds one entry to an internal table
on each call, until the table is full. |
|
02h |
= |
02h get ???
Call: |
CX |
= |
size of buffer
|
ES:DI |
|
buffer for ??? (60 bytes total data) |
Return: |
CX |
= |
number of bytes actually returned |
Note: |
Returns the array storing the values set with
AX=2301h.
Format of one entry in array:
Offset |
Size |
Description |
00h |
BYTE |
??? (BL from subfn 01h) |
01h |
WORD |
??? (CX from subfn 01h) |
02h |
BYTE |
??? (BH from subfn 01h) |
03h |
WORD |
??? (DX from subfn 01h) |
|
|
03h |
= |
03h set ??? name/path
Call: |
ES:DI |
|
buffer containing ASCIZ ??? |
|
04h |
= |
04h get ???
Call: |
ES:DI |
|
buffer for ASCIZ ??? |
|
|
Note: |
The ASCIZ string for subfunctions 03h and 04h
does not appear to be used by 386MAX, and may serve merely for
communication between two other Qualitas programs. |
|
AH |
= |
24h (v7.00) high memory control
Call: |
AL |
= |
subfunction
00h |
= |
get high memory state
Return: |
BX |
= |
current state
00h |
= |
high memory removed from DOS memory chain |
01h |
= |
high memory included in DOS memory chain |
|
|
01h |
= |
set high memory state
Return: |
BX |
= |
new state
00h |
= |
high memory removed from DOS memory chain |
01h |
= |
high memory included in DOS memory chain |
else |
- |
Return: |
??? (error, but return
varies according to ???) |
|
|
|
|
|
AH |
= |
25h (v7.00) remove high RAM from DOS memory chain
|
AH |
= |
26h (v7.00) ???
Call:
|
BX |
= |
???
|
CX |
= |
??? |
SI |
= |
??? |
DI |
= |
??? |
Return:
|
AH |
= |
status |
BX |
= |
??? |
CX |
= |
??? |
|
AH |
= |
27h (v7.00) ???
Call: |
AL |
= |
subfunction
00h |
= |
get ???
Return: |
BX |
= |
number of paragraphs for ??? |
|
01h |
= |
???
Call: |
BX |
= |
???
|
ES??? |
= |
??? |
|
02h |
= |
???
|
03h |
= |
???
Call:
|
CX |
= |
???
|
DX |
= |
??? |
ES??? |
= |
??? |
Return: |
??? |
|
|
|
AH |
= |
28h (v7.00) get ???
Return:
|
AH |
= |
status 00h (see #03648
at INT 67/AH=40h)
Return: |
CX |
= |
??? |
DX |
= |
??? |
|
AH |
= |
status 8Fh (see #03648
at INT 67/AH=40h) |
|
AH |
= |
29h (v7.00) get ???
|
AH |
= |
40h-5Dh EMS services (see INT 67/AH=40h, etc.)
|
AH |
= |
DEh VCPI services (see INT 67/AX=DE00h, etc.)
|