From 85b0c36979bca2a888093320913226f8d2b89c16 Mon Sep 17 00:00:00 2001 From: leiradel Date: Thu, 5 Jun 2025 15:42:55 +0100 Subject: [PATCH 1/2] Allow invalid registers --- chips/ay38910.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/chips/ay38910.h b/chips/ay38910.h index 5965613b..9871c228 100644 --- a/chips/ay38910.h +++ b/chips/ay38910.h @@ -643,16 +643,18 @@ uint64_t ay38910_tick(ay38910_t* ay, uint64_t pins) { */ void ay38910_set_register(ay38910_t* ay, uint8_t addr, uint8_t data) { - CHIPS_ASSERT(ay && (addr < AY38910_NUM_REGISTERS)); - ay->reg[addr] = data & _ay38910_reg_mask[addr]; - _ay38910_update_values(ay); - if (addr == AY38910_REG_ENV_SHAPE_CYCLE) { - _ay38910_restart_env_shape(ay); + CHIPS_ASSERT(ay); + if (addr < AY38910_NUM_REGISTERS) { + ay->reg[addr] = data & _ay38910_reg_mask[addr]; + _ay38910_update_values(ay); + if (addr == AY38910_REG_ENV_SHAPE_CYCLE) { + _ay38910_restart_env_shape(ay); + } } } void ay38910_set_addr_latch(ay38910_t* ay, uint8_t addr) { - CHIPS_ASSERT(ay && (addr < AY38910_NUM_REGISTERS)); + CHIPS_ASSERT(ay); ay->addr = addr; } From 4f928d3e9ec9e208701e7298cdedefbe1f66ff10 Mon Sep 17 00:00:00 2001 From: leiradel Date: Thu, 5 Jun 2025 15:43:08 +0100 Subject: [PATCH 2/2] Return 0 when reading from an invalid register --- chips/ay38910.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/chips/ay38910.h b/chips/ay38910.h index 9871c228..46c81bc1 100644 --- a/chips/ay38910.h +++ b/chips/ay38910.h @@ -622,6 +622,9 @@ uint64_t ay38910_iorq(ay38910_t* ay, uint64_t pins) { const uint8_t data = ay->reg[ay->addr]; AY38910_SET_DATA(pins, data); } + else { + AY38910_SET_DATA(pins, 0); + } AY38910_SET_PA(pins, ay->port_a); AY38910_SET_PB(pins, ay->port_b); ay->pins = pins;