aboutsummaryrefslogtreecommitdiffstats
path: root/resources/asm/monitor_macros.py
diff options
context:
space:
mode:
Diffstat (limited to 'resources/asm/monitor_macros.py')
-rw-r--r--resources/asm/monitor_macros.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/resources/asm/monitor_macros.py b/resources/asm/monitor_macros.py
new file mode 100644
index 0000000..e753996
--- /dev/null
+++ b/resources/asm/monitor_macros.py
@@ -0,0 +1,29 @@
+from atk16_asm.asm_ops import *
+
+expansions: dict[str, Callable[..., ExpandResult]] = {}
+def register_macro(func):
+ expansions[func.__name__] = func
+ return func
+
+@register_macro
+def m_newline(r1: str, r2: str) -> ExpandResult:
+ return [
+ *expand_ldi("text_cursor_p", r1),
+ *expand_ldr(r1, r1),
+ *expand_ldr(r1, r2),
+ *expand_slri(r2, "6", r2), # cursor = cursor / 64
+ *expand_addi(r2, "1", r2), # cursor = cursor + 1
+ *expand_slli(r2, "6", r2), # cursor = cursor * 64
+ *expand_str(r2, r1),
+ ]
+
+@register_macro
+def m_put_char(char_r: str, r1: str, r2: str) -> ExpandResult:
+ return [
+ *expand_ldi("text_cursor_p", r1),
+ *expand_ldr(r1, r1),
+ *expand_ldr(r1, r2),
+ *expand_str(char_r, r2),
+ *expand_addi(r2, "1", r2),
+ *expand_str(r2, r1),
+ ]