summaryrefslogtreecommitdiff
path: root/programs/sub-suite/subasm-syntax
diff options
context:
space:
mode:
authormrb0nk500 <b0nk@b0nk.xyz>2021-01-27 13:42:57 -0500
committermrb0nk500 <b0nk@b0nk.xyz>2021-01-27 13:42:57 -0500
commitcd6982e5da1f5facdc1e0154b3a27c01e8b076c9 (patch)
treec8db5ade59d054c6f88ff2ab2cb99df45b250fad /programs/sub-suite/subasm-syntax
parent1700d8d10453ffe046438de0e6fbd496def915a1 (diff)
- Fixed some bugs in the emulator.
- Started work on implementing the Super VIA emulation. - Added support for disabling disassembly per instruction, when in debug mode. - Did some more work on rewriting the SuB Suite to work with the new calling convention. - Rewrote the symbol handling code in the emulator's assembler, to make it both simpler, and to add support for arbitrarily deep symbol scopes. - Added support for arbitrarily deep local symbol scopes. For example, to declare a symbol of depth 2, you add two '@' characters to the start of the symbol name. In other words, the number of '@' characters before the symbol name is what determines the scope of that symbol. And to use a symbol thats outside the current scope, you would use the same syntax as using a struct member, so you would do `global.local`.
Diffstat (limited to 'programs/sub-suite/subasm-syntax')
-rw-r--r--programs/sub-suite/subasm-syntax56
1 files changed, 56 insertions, 0 deletions
diff --git a/programs/sub-suite/subasm-syntax b/programs/sub-suite/subasm-syntax
new file mode 100644
index 0000000..1337914
--- /dev/null
+++ b/programs/sub-suite/subasm-syntax
@@ -0,0 +1,56 @@
+/* Assembly language syntax for SuBAsm. */
+
+/* Comments begin with "/*", and end with "*/".
+ * Directives begin with a `\`.
+ */
+
+/* mnemonic is the instruction name/mnemonic.
+ * expr is an expression.
+ * Indirect Indexed means applying the index after the indirection.
+ * Indexed Indirect means applying the index before the indirection.
+ */
+
+Expression syntax:
+ /* TODO */
+Instruction syntax:
+ Base ISA, and Base Extension:
+ Implied:
+ <mnemonic>
+ B register:
+ <mnemonic> b
+ Absolute/Zero Matrix:
+ /* [, <x|y>] means Indexed with x, or y. */
+ <mnemonic> <expr>[, <x|y>]
+ Immediate Data:
+ <mnemonic> #<expr>
+ Absolute/Zero Matrix Indirect:
+ /* Indexing with x means Indexed Indirect.
+ * Indexing with y means Indirect Indexed.
+ */
+ <mnemonic> (<expr>[, x])[, y]
+ E Indirect:
+ <mnemonic> (e)
+ Orthogonal Extension:
+ <mnemonic> <operand>[, operand]
+ Operand syntax:
+ <\(
+ /* The operand starts with a register.
+ * If the statment is inside brackets, then
+ * it's a register indirect mode.
+ */
+ [(]reg[+<reg>][\(+|-\)<expr>][)]
+ /* The operand starts with an expression.
+ * If the statment is inside brackets, then
+ * it's an indirect mode.
+ */
+ |[(]expr
+ /* Is the operand using Indirect, or Indirect Indexed? */
+ \if (ind || ind_indexed) {
+ [)]
+ \}
+ [\(+|-\)<reg[+<reg>]>]
+ /* Is the operand using Indexed Indirect? */
+ \if (indexed_ind) {
+ [)]
+ \}
+ \)>