<< Previous | Next >>

> IOE
> IOI Input/Output External/Internal Rabbit 2000/3000/4000 Instruction

> Opcode | Instruction | Clocks | Operation
> D3 | IOI | 2 | I/O internal prefix
> DB | IOE | 2 | I/O external prefix

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

> #### Description

> - `IOI:` The IOI prefix allows the use of existing memory access instructions as internal I/O instructions. Writes to internal I/O registers require two clocks rather than the three required for memory write operations.

>   If an IOI prefix effects the destination of an instruction, that is, it causes an internal I/O write instead of a memory write, then the net effect of adding an IOI prefix to such an instruction is to add one cycle to the total time for the instruction because an internal write takes 2 cycles instead of 3, while the instruction fetch for the prefix byte adds 2 cycles.

>   For Rabbit 2000 and 3000 only: When prefixed, a 16-bit memory instruction accesses the I/O space at the address specified by the lower byte of the 16-bit address. With IOI, the upper byte of a 16-bit address is ignored since internal I/O peripherals are mapped within the first 256-bytes of the I/O address space. This does not apply to the Rabbit 3000A or Rabbit 4000.

> - `IOE:` The IOE prefix allows the use of existing memory access instructions as external I/O instructions. Unlike internal I/O peripherals, external I/O devices can be mapped within 8K of the available 64K address space. Therefore, prefixed 16-bit memory access instructions can be used more appropriately for external I/O operations. By default, writes are inhibited for external I/O operations and fifteen wait states are added for I/O accesses.

> NOTE | If using the original Rabbit 2000 and a Dynamic C version prior to 6.57, read Technical Note 302 (TN302) for an easy solution to an unlikely problem.

<< Previous | Next >>