I finally got around to making a program to better visualise/test this behaviour. I will be making separate threads for individual FDS test programs from now on as to not clutter the FDS emulation thread with different topics.TakuikaNinja wrote: Tue Apr 08, 2025 4:39 pm (I swear I posted here last night... whatever)
So it turns out that the read-only registers are mapped and functional even they're disabled via $4023. I haven't checked the sound registers yet but I would expect them to behave in the same way. This means that only the write-only registers are actually disabled in this state. I've seen some emulators map the read-only registers to open bus when "disabled", so those are incorrect.
Exhibit 1 - $4030-$4033 are still readable when $4023 = 0:
registers_disabled_but_still_readable.png
Exhibit 2 - $4032 can still recognise the disk being inserted/ejected while in this state (first/second reads = while inserted, third read = after ejection):
registers_disabled_but_eject_is_recognised.png
Summary:
- $4023 state at top of screen. %10000011 on startup/reset, bit 7 cannot be changed.
- Hex dump of $4020-$409F below, updated in realtime so it can recognise actions such as ejecting/inserting a disk.
- B toggles $4023.D1 (sound registers), A toggles $4023.D0 (timer IRQ & disk I/O registers).
- Measures have been put in place to reduce the chance of PRG-RAM corruption caused by leaving $4023.D0 = 0 (DRAM refresh watchdog is disabled). However, it may be necessary to do a full power-cycle/reload should the program ever halt or otherwise fail to reset properly.
I'll just have the program attached here. I might get a GitHub release going once I get results from other consoles/emulators. I think I need to update the mirroring test as a result of this new one, and then get back to the DRAM refresh watchdog at some point... Not to mention the tests I also want to make for the byte transfer flag and its IRQs.
Hardware recordings from my Twin Famicom will be posted here soon.