Int 15H [AT] [PS/2] Function 87H (135) Move extended memory block

Transfers data between conventional memory and extended memory.

Call with:

AH = 87H

CX = number of words to move

ES:SI = segment:offset of Global Descriptor Table (see Notes)

Returns:

If function successful

Carry flag = clear

AH = 00H

If function unsuccessful

Carry flag = set

AH = status

01H if RAM parity error

02H if exception interrupt error

03H if gate address line 20 failed

Notes:

Conventional memory lies at addresses below the 640 KB boundary, and is used for the execution of MS-DOS and its application programs. Extended memory lies at addresses above 1 MB, and can only be accessed by an 80286 or 80386 CPU running in protected mode. As much as 15 MB of extended memory can be installed in an IBM PC/AT or compatible.

The Global Descriptor Table (GDT) used by this function must be set up as follows:

Byte(s) Contents 00H—0FH reserved (should be 0) 10H—11H segment length in bytes (2*CX - 1 or greater) 12H—14H 24-bit source address 15H access rights byte (always 93H) 16H—17H reserved (should be 0) 18H—19H segment length in bytes (2*CX - 1 or greater) 1AH—1CH 24-bit destination address 1DH access rights byte (always 93H) 1EH—2FH reserved (should be 0)

The table is composed of six 8-byte descriptors to be used by the CPU in protected mode. The four descriptors in offsets 00H—0FH and 20H—2FH are filled in by the ROM BIOS before the CPU mode switch.

The addresses used in the descriptor table are linear (physical) 24-bit addresses in the range 000000H—FFFFFFH——not segments and offsets——with the least significant byte at the lowest address and the most significant byte at the highest address.

The block move is performed with interrupts disabled; thus, use of this function may interfere with the operation of communications programs, network drivers, or other software that relies on prompt servicing of hardware interrupts.

Programs and drivers that access extended memory with this function cannot be executed in the Compatibility Environment of OS/2.

This function is not supported on the PS/2 Models 25 and 30.