Difference between revisions of "Notes:RealQ Architecture"
UberLambda (Talk | contribs) (→Conventions) |
m |
||
| (One intermediate revision by one other user not shown) | |||
| Line 43: | Line 43: | ||
| {{C|10}} | | {{C|10}} | ||
|- | |- | ||
| − | | '''Unused''': However, in some scenarios, '''this could be a special operation | + | | '''Unused''': However, in some scenarios, '''this could be a special operation''' |
| {{C|11}} | | {{C|11}} | ||
|} | |} | ||
| Line 64: | Line 64: | ||
==1-Byte operations== | ==1-Byte operations== | ||
| − | (Given | + | (Given in ascending binary order) |
{{Notes:RealQ_Architecture/1-Byte operations}} | {{Notes:RealQ_Architecture/1-Byte operations}} | ||
Latest revision as of 19:38, 2 October 2015
The RealQ architecture is a realistic architecture[Note 1] developed Quickly.
Contents
Architecture
The RealQ architecture has 4 general purpose 16 bit registers. They are A, B, C and D. Each general purpose register is further split into two smaller registers, L and H, which refer to the low byte and high byte respectively. That is XL refers to the first 8 bits (or byte) of whatever is in register X.
Conventions
We use r to denote a general purpose register. Use r1, r2,... for separating registers in an expression (example, you would write: MOV r1, r2, or just SWP r) and r may be written rr if it is neater.
A GP (general purpose) register requires 2 bits to denote, we use the following codes:
| Register | Code |
|---|---|
| A | 00 |
| B | 01 |
| C | 10 |
| D | 11 |
s(r) denotes the size of a register expression. It's identified by 2 bits:
| Meaning | Identifier |
|---|---|
| 16-bit: The operation will applied to all 16 bits of the register | 00 |
| XL: The operation will be applied to the lower 8 bits | 01 |
| XH: The operation will be applied to the higher 8 bits | 10 |
| Unused: However, in some scenarios, this could be a special operation | 11 |
Modes
The architecture defines 2 modes, Kernel and User
Operations
(Given alphabetically)
| Operation | Type | Comment |
|---|---|---|
| HLT | 3-byte | KERNEL MODE ONLY - stops the machine |
1-Byte operations
(Given in ascending binary order)
| Operation | bits | Comment | Caveats | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| LOAD r1,r2 | 00 | sr2 | r1 | r2 | r1 must be 16bit, sr2=11 is unused | |||||
| (Unused) | 00 | 11 | xx | xx | ||||||
| MOV r1,r2 | 01 | sr | r1 | r2 | registers must have same size-code[N 1] | |||||
| SWP r | 01 | 11 | 00 | rr | ||||||
| INC | 01 | 11 | 01 | 00 | Only affects the A register | |||||
| INC2 | 01 | 11 | 01 | 01 | Only affects the A register | |||||
| DEC | 01 | 11 | 01 | 10 | Only affects the A register | |||||
| DEC2 | 01 | 11 | 01 | 11 | Only affects the A register | |||||
| (Unused) | 01 | 11 | 1 | x | xx | |||||
Opcode notes
- ↑ That is must both be 16bit, low or high
Notes
- ↑ In the sense of it models a real CPU that could actually exist. It deals with bytes and has no knowledge of types (in contrast to say Lua's VM)