forked from TCShenanigans/symphony_stdlib
Add ISA definitions for symphony
Adds both a 'stock' ISA (copied from the game) and one modified for test code
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
Symphony ISA specs for use in stdlib
|
||||
|
||||
# `default.isa`
|
||||
The stock game ISA. Production code must comply to this. Taken from `symphony_11_functions` in game version 2.1.330A
|
||||
|
||||
# `test.isa`
|
||||
ISA with additional instructions. These additional instructions may be used in
|
||||
the tests directory only. Some of these instructions require hardware changes.
|
||||
|
||||
## Labels in more instructions
|
||||
|
||||
`cmp`, `load`, and `store` instructions (but not `pload` and `pstore`) now also accept labels.
|
||||
|
||||
## `qcall %a(label)`
|
||||
Performs a jump-and-link function call, with label size up to 32 bits.
|
||||
|
||||
_HARDWARE:_ Store PC+4 in the result register when in jump mode.
|
||||
|
||||
## `li %a(register) %b:U32(immediate | label)`
|
||||
Loads an immediate up to 32 bits long
|
||||
|
||||
_HARDWARE:_ No requirements
|
||||
|
||||
## `halt%c(condition)`
|
||||
Halts if `flags` matches the condition.
|
||||
|
||||
_HARDWARE:_ Halt if instruction bit 31 is set AND the condition block is true.
|
||||
|
||||
```
|
||||
condition
|
||||
"" 1000
|
||||
".all" 1000
|
||||
".e" 0001
|
||||
".ne" 1001
|
||||
".b" 0010
|
||||
".ae" 1010
|
||||
".be" 0011
|
||||
".a" 1011
|
||||
".l" 0100
|
||||
".ge" 1100
|
||||
".le" 0101
|
||||
".g" 1101
|
||||
```
|
||||
Reference in New Issue
Block a user