<< Previous | Next >>

> LDDR
> LDIR Byte Copy Rabbit 2000/3000/4000 Instruction

> Opcode | Instruction | Clocks | Operation
> ED B8 | LDDR | 6 + 7i (2,2,1,(2,3,2)i,1) | (DE) = (HL) BC = BC - 1 DE = DE - 1 HL = HL - 1 repeat while { BC != 0 }
> ED B0 | LDIR | 6 + 7i (2,2,1,(2,3,2)i,1) | (DE) = (HL) BC = BC - 1 DE = DE + 1 HL = HL + 1 repeat while { BC != 0 }

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

> #### Description

> - `LDDR:` BC holds the count, which is the number of bytes that will be moved from the source address in HL to the destination address in DE. If the count starts at zero, the number of bytes that will be moved is 65536. After each byte is copied, BC, DE and HL are decremented. The instruction repeats until BC reaches zero.

> - `LDIR:` BC holds the count, which is the number of bytes that will be moved from the source address in HL to the destination address in DE. If the count starts at zero, the number of bytes that will be moved is 65536. After each byte is copied, BC is decremented and DE and HL are incremented. The instruction repeats until BC reaches zero.

> If either of these instructions is prefixed by IOI or IOE, the destination will be in the specified I/O space. If the prefix is IOI, add 1 clock for each iteration. If the prefix is IOE, add 2 clocks plus the number of I/O wait states enabled.

> The V flag is cleared when BC transitions from 1 to 0, which ends the block copy.

> Interrupts can occur between different repeats (after the registers have been updated), but not within an iteration. Return from the interrupt is to the first byte of the instruction, which is the I/O prefix byte if there is one.

<< Previous | Next >>