diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2024-04-26 15:40:14 +0300 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2024-04-26 15:40:14 +0300 |
| commit | 7ca56c1a730fcecd0fe3af5e6b652fa09514a18b (patch) | |
| tree | e2ef6a4d28fa26adf11e00d138ef21b8316497f6 /atk16_projects/monitor/monitor_macros.py | |
| parent | 2b18b320e97260f1d27143a37fe14953cf62e56d (diff) | |
Refactor project structure, add README and LICENSE
Diffstat (limited to 'atk16_projects/monitor/monitor_macros.py')
| -rw-r--r-- | atk16_projects/monitor/monitor_macros.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/atk16_projects/monitor/monitor_macros.py b/atk16_projects/monitor/monitor_macros.py new file mode 100644 index 0000000..b40be9e --- /dev/null +++ b/atk16_projects/monitor/monitor_macros.py @@ -0,0 +1,45 @@ +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), + ] + +def m_set_interrupt_state(r1: str, r2: str, value: int) -> ExpandResult: + return [ + *expand_ldi("vt_iset_addr", r1), + *expand_ldr(r1, r1), + *expand_ldi(value, r2), + *expand_str(r2, r1), + ] + +@register_macro +def m_set_critical(r1: str, r2: str) -> ExpandResult: + return m_set_interrupt_state(r1, r2, 1) + +@register_macro +def m_clear_critical(r1: str, r2: str) -> ExpandResult: + return m_set_interrupt_state(r1, r2, 0) |
