Retro video games delivered to your door every month!
Click above to get retro games delivered to your door ever month!
X-Hacker.org- BIOS ref. - <b>int 15h, 87h move block xt-286, at</b> http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
Int 15h, 87h            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.

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

        Return  CF   Set if error, else cleared
                ZF   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

    ------------------------------------------------------------------

    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 a value
           of 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

Online resources provided by: http://www.X-Hacker.org --- NG 2 HTML conversion by Dave Pearson