<< Previous | Next >>

> LDP HL,(HL)
> LDP HL,(IX)
> LDP HL,(IY) Load Physical Rabbit 2000/3000/4000 Instruction

> Opcode | Instruction | Clocks | Operation
> ED 6C | LDP HL,(HL) | 10 (2,2,2,2,2) | L = (HL) H = (HL + 1) (Addr[19:16] = A[3:0])
> DD 6C | LDP HL,(IX) | 10 (2,2,2,2,2) | L = (IX) H = (IX + 1) (Addr[19:16] = A[3:0])
> FD 6C | LDP HL,(IY) | 10 (2,2,2,2,2) | L = (IY) H = (IY + 1) (Addr[19:16] = A[3:0])

> Flags | ALTD | IOI/IOE
> S | Z | L/V | C | F | R | SP | S | D
> - | - | - | - |  |  |  |  |

> #### Description

> These instructions are used to access 20-bit addresses. In all cases, the four most significant bits of the 20- bit address (bits 19 through 16) are defined as the four least significant bits of A (bits 3 though 0). The LDP instructions bypass the MMU's address translation unit for direct access to the 20-bit memory address space.

> - `LDP HL,(HL):` Loads L with the data whose 16 least significant bits of its 20-bit address are the data in HL, and then loads H with the data in the following 20-bit address.

> - `LDP HL,(IX):` Loads L with the data whose 16 least significant bits of its 20-bit address are the data in IX, and then loads H with the data in the following 20-bit address.

> - `LDP HL,(IY):` Loads L with the data whose 16 least significant bits of its 20-bit address are the data in IY, and then loads H with the data in the following 20-bit address.

> Note that the LDP instructions wrap around on a 64K page boundary. Since the LDP instruction operates on two-byte values, the second byte will wrap around and be written at the start of the page if you try to read or write across a page boundary. Thus, if you fetch or store at address 0xn,0xFFFF, you will get the bytes located at 0xn, 0xFFFF and 0xn,0x0000 instead of 0xn,0xFFFF and 0x(n+1),0x0000 as you might expect. Therefore, do not use LDP at any physical address ending in 0xFFFF.

<< Previous | Next >>