INT 15h,  87h (135)      Move Block                                XT-286, AT

Provides the ability for a Real Mode program to move a block of data
to or from the area above 1 Megabyte in the Protected Mode.

On entry:      AH         87h
CX         Size in words of block to move (maximum:
8000h = 32K)
ES:SI      Pointer to a Global Descriptor Table (GDT)
(see below)

Returns:       Carry      Set if error, else cleared
Zero       Cleared if error, else set
AH         Status of Operation
00h - Successful
01h - Memory Parity error
02h - Exception interrupt error occurred
03h - Gate address line 20h failed

                                                                          

Notes:         This service is available only for the AT and XT-
286.

ES:SI points to a list of 6 descriptors. Each
descriptor is 8 bytes long. A descriptor is
formatted as follows:

Offset    Bytes     Description
00h       2       Word containing segment limit
02h       2       Low word of 24-bit address
04h       1       High byte of 24-bit address
05h       1       Access rights byte
06h       2       Reserved (must be 0)

The Global Descriptor Table (GDT) pointed to by
ES:SI consists of a list of 6 descriptors. The
descriptors are defined below, appearing in the same
order as they appear in memory.

Offset    Bytes     Description
00h       8       Dummy Descriptor. Initialized by
user to 0.
08h       8       Descriptor of this GDT.
Initialized by user to 0.
Modified by BIOS.
10h       8       Descriptor of Source block.
Initialized by user.
18h       8       Descriptor of Destination block.
Initialized by user.
20h       8       Descriptor for Protected Mode
Code Segment. Initialized by user
to 0. Modified by BIOS.
28h       8       Descriptor for Protected Mode
Stack Segment. Initialized by
user to 0. Modified by BIOS.

Therefore, for a block move to be performed, only
the third and fourth descriptors need to contain
values other than 0s. The source and target
descriptor fields should be initialized as follows:

*  The segment limit field (offset 00h) must contain 2 *
(CX - 1) or greater.

*  The 24-bit address field (offset 02h) must contain
the source or destination address.

*  The Access Rights byte (offset 05h) must contain 93h
(CPL0-R/W).

Transfers of large blocks of data may result in lost
interrupts, since no interrupts are allowed during
the move.

See also: INT 15h, 89h

INT 15h, 87h (135) Move Block XT-286, AT