Up ] Docs Home ]

Call 386MAX API (via OUT DX,AL) with

Back ] Next ]

Data:
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
Return: never
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 ???
Call: ???
Return: ???
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 = ???
Call:

???

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 ???
Return: AX

=

???
AH = 40h-5Dh EMS services (see INT 67/AH=40h, etc.)
AH = DEh VCPI services (see INT 67/AX=DE00h, etc.)
Return:
AH = status (as for EMS INT 67 calls)
00h - successful
80h - internal error
81h - hardware malfunction
83h - invalid handle
84h - undefined function
8Ah - invalid logical page nuber
8Bh - illegal physical page number
8Fh - undefined subfunction
A4h - access denied

etc

STACK : popped (value placed in DX if no specific return value for DX)