This is an old revision of the document!
KK/K = PBR, BB/B = DBR. For indirect modes, the target address is the contents of the memory at the operand effective address.
Instructions and their operands always wrap at the program bank boundary.
Direct page addresses always wrap at the bank 0 boundary (in native mode).
Targets where the upper byte of the base address is the program bank register always wrap at the program bank boundary.
Targets where the upper byte of the base address is the data bank register never wrap.
Simple Modes | ||
---|---|---|
Mode | Operand Size | Notes |
Immediate | 1 or 2 | A reg operand size controlled by M bit, X/Y reg operand size controlled by X bit |
Implied | 0 | |
Accumulator | 0 |
Simple and Basic Indexed Memory Access | |||
---|---|---|---|
Mode | Operand Size | Base Address | Effective Address |
Absolute {JMP, JSR} | 2 | KK0000 | base+operand |
Absolute {others} | 2 | BB0000 | base+operand |
Absolute,X or ,Y | 2 | BB0000 | base+operand+X or Y |
Direct | 1 | 00DDDD | base+operand, wrap to 00xxxx |
Direct,X or ,Y | 1 | 00DDDD | base+operand+X or Y, wrap to 00xxxx |
Long | 3 | 000000 | base+operand |
Long,X | 3 | 000000 | base+operand+x |
Relative {8} | 1 | KK0000 | base+signed operand, wrap to KKxxxx |
Relative {16(BRL)} | 2 | KK0000 | base+signed operand, wrap to KKxxxx |
Basic Stack Access | |||
---|---|---|---|
Mode | Operand Size | Base Address | Effective Address wrap to 00xxxx |
Stack {push, pull} | 0 | 00SSSS | base+0 |
Stack,S | 1 | 00SSSS | base+operand |
Stack Indirect Access | ||||||
---|---|---|---|---|---|---|
Mode | Operand Size | Pointer Base Address | Pointer EA wrap to 00xxxx | Pointer Size | Target Base | Target EA |
(Stack,S) | 1 | 00SSSS | base+operand | 2 | BB0000 | base+pointer |
Indirect Jumps | ||||||
---|---|---|---|---|---|---|
Mode | Operand Size | Pointer Base Address | Pointer EA | Pointer Size | Target Base | Target EA |
(Absolute) {JMP} | 2 | KK0000 | base+operand | 2 | KK0000 | base+pointer, wrap to KKxxxx |
(Absolute,X) {JMP} | 2 | KK0000 | base+operand+X | 2 | KK0000 | base+pointer, wrap to KKxxxx |
[Absolute] {JML} | 2 | KK0000 | base+operand | 3 | 000000 | base+pointer |
Direct Page Indirect | ||||||
---|---|---|---|---|---|---|
Mode | Operand Size | Pointer Base Address wrap to 00xxxx | Pointer EA | Pointer Size | Target Base | Target EA |
(Direct) | 1 | 00DDDD | base+operand | 2 | BB0000 | base+pointer |
[Direct] | 1 | 00DDDD | base+operand | 3 | 000000 | base+pointer |
(Direct,X) | 1 | 00DDDD | base+operand+X | 2 | BB0000 | base+pointer |
(Direct),Y | 1 | 00DDDD | base+operand | 2 | BB0000 | base+pointer+Y |
[Direct],Y | 1 | 00DDDD | base+operand | 3 | 000000 | base+pointer+Y |
Memory Move {MVN, MVP} | ||
---|---|---|
Mode | Operand Size | Note |
Src {II}, Dest {JJ} | 2 * 1 | Effective addresses for the move are II0000+X and JJ0000+Y, wrapped at the bank boundary. |