SWAP

From Intellivision Wiki
Jump to: navigation, search
Instruction NameSwap Bytes
MnemonicSWAP
CP1610 Clock Cycles6 or 8
InterruptibleNo
Opcode Range$0040-$0047
Input FlagsNone
Output FlagsSign Flag, Zero Flag

The Swap Bytes (SWAP) instruction can perform two very different functions depending on the "double swap" indicator. A single swap trades the lowest eight bits in a register with the upper eight bits. A double swap essentially copies the lowest eight bits in a register to the upper eight bits. Regardless of which swap is specified, the CP1610 then sets or clears the Sign Flag and Zero Flag according to the resulting value. The Sign Flag gets set based on bit 7 of the result. This makes double-swap useful for testing the sign bit of an 8-bit value. The number of clock cycles used depends on the type of swap specified. A single swap will use 6 clock cycles and a double swap will use 8 clock cycles.

Swap diagram.png


The opcode format is as follows.

   0000:0000:0100:0srr
where: s indicates the type of swap such that: s == 0 indicates a single swap s == 1 indicates a double swap
rr indicates the target register such that: rr == 00 indicates register R0 rr == 01 indicates register R1 rr == 10 indicates register R2 rr == 11 indicates register R3