aboutsummaryrefslogtreecommitdiffstats
path: root/asm/ext_std.py
diff options
context:
space:
mode:
Diffstat (limited to 'asm/ext_std.py')
-rw-r--r--asm/ext_std.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/asm/ext_std.py b/asm/ext_std.py
index de7cd43..3d87372 100644
--- a/asm/ext_std.py
+++ b/asm/ext_std.py
@@ -72,9 +72,34 @@ def expand_csi(addr_imm: str):
*expand_spu("__CSR_SCRATCH"),
["jpi", addr_imm]
]
+
def expand_rsr():
return expand_spo("__CSR_SCRATCH") + [["jpr", "__CSR_SCRATCH"]]
+
+def stack_stash(*rs: str):
+ result: ExpandResult = []
+ for r in rs:
+ result += expand_spu(r)
+
+ return result
+
+def stack_restore(*rs: str):
+ result: ExpandResult = []
+ for r in rs:
+ prefix = expand_spu(r)
+ result = prefix + result
+
+ return result
+
+def set_graphics_mode(mode: str):
+ return [
+ ["ldi", "vt_gr_mode_addr", "RA"],
+ ["ldr", "RA", "RA"],
+ ["ldi", mode, "RB"],
+ ["str", "RB", "RA"],
+ ]
+
expansions: OpExpansionDict = {
"add": expand_add,
"sub": expand_sub,
@@ -98,4 +123,7 @@ expansions: OpExpansionDict = {
"csr": expand_csr,
"csi": expand_csi,
"rsr": expand_rsr,
+ "stack_stash": stack_stash,
+ "stack_restore": stack_restore,
+ "set_graphics_mode": set_graphics_mode,
}