From 23bd15c063e40872f065d6b90c6d057e6f1756aa Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Mon, 15 Dec 2025 15:07:01 +0100 Subject: asan: addresses >= 0x2000 cannot be reserved space MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These addresses are merely references to real APU/PPU addresses which can be used for ease of use. Signed-off-by: Miquel Sabaté Solà --- lib/xixanta/src/assembler.rs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/lib/xixanta/src/assembler.rs b/lib/xixanta/src/assembler.rs index e7843a3..6b82645 100644 --- a/lib/xixanta/src/assembler.rs +++ b/lib/xixanta/src/assembler.rs @@ -923,20 +923,23 @@ impl<'a> Assembler<'a> { }); } } - memory.memory_ranges.push(range); // Increase the counters for memory usage on either RAM slot and // check for bounds. if actual_name.starts_with("zp_") || actual_name.starts_with("m_") { - memory.total_internal_ram += bundle.asan_reserve; - - if memory.total_internal_ram > 0x800 { - errors.push(Error { - line: 0, - global: true, - message: "out of internal RAM".to_string(), - source: self.sources[0].clone(), - }); + // Avoid considering references to PPU/APU addresses as + // reserved memory. + if range.range.start < 0x2000 { + memory.total_internal_ram += bundle.asan_reserve; + + if memory.total_internal_ram > 0x800 { + errors.push(Error { + line: 0, + global: true, + message: "out of internal RAM".to_string(), + source: self.sources[0].clone(), + }); + } } } else if actual_name.starts_with("wr_") { memory.total_working_ram += bundle.asan_reserve; @@ -950,6 +953,8 @@ impl<'a> Assembler<'a> { }); } } + + memory.memory_ranges.push(range); } } -- cgit v1.2.3