aboutsummaryrefslogtreecommitdiffstats
path: root/atk16_asm/asm_ops.py
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2024-05-17 12:17:34 +0300
committerJan Tuomi <jan@jantuomi.fi>2024-05-17 12:17:34 +0300
commitd433a9f0cdddd27b0aaae88aca8e8f909fc14a13 (patch)
tree92abd92228eca9d948c2b0acc88a4603f59c1c5e /atk16_asm/asm_ops.py
parent853918f4b7e9f3724be4d71014689c18c28fe61e (diff)
Add call macro, *_p subroutine naming convention
Diffstat (limited to 'atk16_asm/asm_ops.py')
-rw-r--r--atk16_asm/asm_ops.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/atk16_asm/asm_ops.py b/atk16_asm/asm_ops.py
index 65cf0da..1da8cf0 100644
--- a/atk16_asm/asm_ops.py
+++ b/atk16_asm/asm_ops.py
@@ -346,6 +346,16 @@ def expand_calli(addr_imm: int | str) -> ExpandResult:
]
@register_macro
+def expand_call(label: str, clobber_r = "RF") -> ExpandResult:
+ """Convenience wrapper for ldi + ldr + callr, clobbers RF by default."""
+ pointer_label = f"{label}_p"
+ return [
+ ["ldi", pointer_label, clobber_r],
+ ["ldr", clobber_r, clobber_r],
+ *expand_callr(clobber_r),
+ ]
+
+@register_macro
def expand_return() -> ExpandResult:
return [
["str", "RG", "SP"], # store returned value on stack but don't increment SP