From 46459fc1b753abc83c355440a014c696c0dacd3a Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Sat, 13 Apr 2024 17:05:21 +0300 Subject: Add override_mode to allow user to write own ISRs to vector table --- atk16_asm/asm_pass3.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'atk16_asm/asm_pass3.py') diff --git a/atk16_asm/asm_pass3.py b/atk16_asm/asm_pass3.py index ec8b20c..a3f9537 100644 --- a/atk16_asm/asm_pass3.py +++ b/atk16_asm/asm_pass3.py @@ -50,12 +50,22 @@ def pass_3(result2: Result2) -> Result3: original_text=original_text, ) + # On address conflict, if override_mode is True, the last definition wins + # otherwise, an exception is raised + override_mode = False + for line in result2.lines: keyword, *args = line.parts match keyword: case "@address": address = eval_expr(symbols, args[0]) continue + case "@begin_override": + override_mode = True + continue + case "@end_override": + override_mode = False + continue case "@label": label = args[0] if label in symbols: @@ -67,6 +77,10 @@ def pass_3(result2: Result2) -> Result3: symbols[args[0]] = eval_expr(symbols, args[1]) continue case _: + if override_mode: + # TODO this is a bit inefficient, but works + result_lines = list(filter(lambda l: l.address != address, result_lines)) + dbg_original_text = " ".join(line.original_parts) dbg_expanded_text = " ".join(line.parts) save_dbg_source(address, line.src_file, line.line_num, dbg_expanded_text, dbg_original_text) -- cgit v1.3