Int 78 Fn 0001 - Hugerealmode Driver - Get Entry Point [E]
AX = 0001h
Return: ES:BX -> far call entry point (see #3459,#3474)
See Also: AX=0000h
(Table 3458)
Values for HugeRealMode Server error code:
00h successful
01h unknown function
02h A20 disabled
03h A20 enabled
04h memory allocation error
05h memory not fixeable (LOCK)
06h memory not deallocaable
07h memory not moveable (UNLOCK)
08h change in memory allocation size not possible
09h file error (with .XMF-file)
0Ah memory error (with .XMF-file)
0Bh unknown procedure (currently Turbo Pascal unit only)
(Table 3459)
Call HugeRealMode Server "Enable A20" function with:
AL = 00h
Return: AX = error code (see #3458)
Note: The HugeRealMode Server requires an XMS-driver like HIMEM.SYS loaded
before HUGEREAL (for XMS-memory allocation and A20 control). It
utilizes some undocumented 386+ features to enable 4G code and data
segments (flat memory model) in the CPUs real-mode. It is not
compatible with V86-mode (as with most EMM386). For maximum speed
and compatibility with DOS it uses a two stage interrupt model
(see #3462)
See Also: #3460,#3461,#3462
(Table 3460)
Call HugeRealMode Server "Disable A20" function with:
AL = 01h
Return: AX = error code (see #3458)
See Also: #3459,#3461
(Table 3461)
Call HugeRealMode Server "Query A20 State" function with:
AL = 02h
Return: AX = A20 state (0000h disabled, 0001h enabled)
See Also: #3459,#3460
(Table 3462)
Call HugeRealMode Server "Enable Two-Stage Interrupt Model" function with:
AL = 03h
Return: AX = error code (see #3458)
Notes: If the two stage interrupt model is disabled, the IP must stay below
1MB, because the high word of EIP is not saved correctly by the
standard interrupt management in real mode. Routines in extended
memory may only be called with interrupts disabled (only usable for
very short routines).
If the two stage interupt model is enabled, these conventions are not
required. The outer (transparent) ISRs save the higher word of EIP
in the high word of CR3 (possible modification: in memory, if this
is not safe) and then invoke the standard ISRs.
Because of this handling, one should use pseudo segmented code even in
extended memory (64K blocks located on 64K boundaries) to avoid the
misalignment of the saved EIP (in CR3). Another way is to track and
realign CR3 each time when jumping over a 64K boundary in extended
memory
See Also: #3459,#3463
(Table 3463)
Call HugeRealMode Server "Disable Two-Stage Interrupt Model" function with:
AL = 04h
Return: AX = error code (see #3458)
See Also: #3459,#3462
(Table 3464)
Call HugeRealMode Server "Get Segment Address Of Server-Management Range" with:
AL = 05h
Return: AX = error code (see #3458)
ES = segment address
See Also: #3474
(Table 3465)
Call HugeRealMode Server "Allocate Memory" function with:
AL = 06h
DX = length in KB
Return: AX = error code (see #3458)
DX = handle
EBX = start address of allocated block
See Also: #3466,#3467
(Table 3466)
Call HugeRealMode Server "Deallocate Memory" function with:
AL = 07h
DX = handle
Return: AX = error code (see #3458)
See Also: #3465,#3467
(Table 3467)
Call HugeRealMode Server "Modify Allocated Memory Size" function with:
AL = 08h
DX = handle
BX = new size in KB
Return: AX = error code (see #3458)
EBX = new address
See Also: #3465,#3466
(Table 3468)
Call HugeRealMode Server "Load .XMF-file" function with:
AL = 09h
ES:BX -> filename (see #3469)
Return: AX = error code (see #3458)
ECX = target address
Notes: memory must be allocated before loading
.XMF file format (eXtended Memory executable File format) is supported
by the HugeRealMode server for easier handling of XMS-code.
The utility CONFXMF converts .OBJ-files (.COM 'tiny' model) to
.XMF-format
See Also: #3465
Format of .XMF program file header:
Offset Size Description (Table 3469)
00h DWORD signature "XMF_"
04h WORD length of programs code
06h WORD count of 32bit addresses to relocate
08h WORD offset to code start (releative to file start) (see #3470)
0Ah WORD relocation table
Note: each word contains a 16bit address, where a relocation has to be
performed
See Also: #3468,#3470
Format of .XMF-file code header:
Offset Size Description (Table 3470)
00h WORD count of exported functions
02h N PWORDs 48bit pointers (16bit segment+32bit offset) to each function
(16bit segment is always zero)
var start of program's code
See Also: #3468,#3469
(Table 3471)
Call HugeRealMode Server "Set Segment Limits" function with:
AL = 0Ah
BL = segment limits (see #3472)
Return: AX = error code (see #3458)
See Also: #3464
Bitfields for HugeRealMode Server segment limits:
Bit(s) Description (Table 3472)
7 CS size: 1=4GB, 0=64KB
6-5 not used
4 SS size: 1=4GB, 0=64KB
3 GS size
2 FS size
1 ES size
0 DS size
See Also: #3471
(Table 3473)
Call HugeRealMode Server "Transfer Memory From DOS To XMS" function with:
AL = 0Bh
ES:SI = source address
EDI = target address
ECX = length
Return: AX = error code
See Also: #3474
(Table 3474)
Call HugeRealMode Server "Transfer Memory From XMS To DOS" function with:
AL = 0Ch
ESI = source address
ES:DI = target address
ECX = length
Return: AX = error code
See Also: #3473