Addressing variations
Seairth
Posts: 2,474
The "New Spin" thread prompted me to think about the various ways addressing can be done in the P2. Here's what I came up with. Does this look correct to everyone else?
Hub RAM Instructions (WRxxxx/RDxxxx):
- Immediate address
- Without AUGS:
- $000-$0FF: Hub addresses $000-$0FF
- $100-$1FF: PTRx Expression
- With AUGS:
- 20-bit hub address
- Indirect address
- Absolute 9-bit cog address that contains a 20-bit absolute hub address
Branch Instructions (conditional jumps, CALL):
- Immediate address
- Relative: 9-bit (20-bit with AUGS) signed offset from PC
- Absolute: 9-bit (20-bit with AUGS) address
- Default is relative if not switching exec modes, otherwise absolute
- Can always force absolute
- Indirect address
- Absolute 9-bit cog address that contains a 20-bit absolute instruction address
Long Branch Instructions (JMP, CALL, CALLA, CALLB) and LOC:
- Immediate address
- Relative: 20-bit signed offset from PC
- Absolute: 20-bit address
- Relative is default
- Can always force absolute
- No Indirect address
All Other Instructions:
- Immediate value
- 9-bit (32-bit with AUGD/AUGS) value
- Indirect value
- Absolute 9-bit cog address that contains a 32-bit value
