CPU Test Mode: Difference between revisions
From NESdev Wiki
Jump to navigationJump to search
m (→2A03E / 2A03G Test Mode: reflow text so that it's not wider that my screen) |
(→2A03E / 2A03G Test Mode: no test mode in 2A03E) |
||
Line 1: | Line 1: | ||
== 2A03E / 2A03G Test Mode == | == 2A03E ??? == | ||
The schematic for the [//nesdev.org/Playchoice.pdf Playchoice 10] permits the supervisor CPU to stop or "res" the 2A03E; the signal is synchronized to M2 before it gets into the 2A03E. Testing with just a button only crashed the 2A03E, so the synchronization must be necessary. | |||
== 2A03G / 2A03H Test Mode == | |||
Pin 30 of the 2A03 revision G can be activated to enable a special test mode for the APU. This activates registers for testing the APU at $4018-$401A at the expense of deactivating the joypad input registers at $4016-$4017: | Pin 30 of the 2A03 revision G can be activated to enable a special test mode for the APU. This activates registers for testing the APU at $4018-$401A at the expense of deactivating the joypad input registers at $4016-$4017: | ||
R$4018: [BBBB AAAA] - current instant DAC value of B=pulse2 and A=pulse1 (either 0 or current volume) | R$4018: [BBBB AAAA] - current instant DAC value of B=pulse2 and A=pulse1 (either 0 or current volume) | ||
Line 7: | Line 10: | ||
W$401A: [L..T TTTT] - set state of triangle's sequencer to T, and lock all channels | W$401A: [L..T TTTT] - set state of triangle's sequencer to T, and lock all channels | ||
(pulse+noise always output current volume, triangle/DPCM no longer advance) if L=1 | (pulse+noise always output current volume, triangle/DPCM no longer advance) if L=1 | ||
== 2A03letterless Programmable Interval Timer == | == 2A03letterless Programmable Interval Timer == |
Revision as of 03:10, 14 November 2021
2A03E ???
The schematic for the Playchoice 10 permits the supervisor CPU to stop or "res" the 2A03E; the signal is synchronized to M2 before it gets into the 2A03E. Testing with just a button only crashed the 2A03E, so the synchronization must be necessary.
2A03G / 2A03H Test Mode
Pin 30 of the 2A03 revision G can be activated to enable a special test mode for the APU. This activates registers for testing the APU at $4018-$401A at the expense of deactivating the joypad input registers at $4016-$4017:
R$4018: [BBBB AAAA] - current instant DAC value of B=pulse2 and A=pulse1 (either 0 or current volume) R$4019: [NNNN TTTT] - current instant DAC value of N=noise (either 0 or current volume) and T=triangle (anywhere from 0 to 15) R$401A: [.DDD DDDD] - current instant DAC value of DPCM channel (same as value written to $4011) W$401A: [L..T TTTT] - set state of triangle's sequencer to T, and lock all channels (pulse+noise always output current volume, triangle/DPCM no longer advance) if L=1
2A03letterless Programmable Interval Timer
Visual inspection of the original 2A03 revision indicates there was planned IRQ functionality from $401C-$401F, but this was left unfinished and unusable and was outright removed from later CPU revisions.
W$401C,D,E: write lower, middle, upper bits of counter reload value R$401C,D,E: read lower, middle, upper bits of current counter value W$401F: [ELAC DTZC] |||| |||| |||+----+-- Clock source ||| ||| 00: M2÷16 10: M2÷256 ||| ||| 01: Rising edges of JOY2 11: Falling edges of JOY2 ||| ||+--- Exists but does nothing. Toggles (invisibly) on terminal count. ||| |+---- Value driven out on JOY1. Toggles on terminal count. ||| +----- 1:count up; 0:count down ||+-------- 1:automatic reload when counter reaches 0; 0:counter stops while zero |+--------- 1:reload immediately +---------- 1:IRQ enabled (counts regardless) R$401F: [E... ...I] | | | +-- Timer IRQ would be asserted if enabled +---------- IRQ is enabled Reads from $401F acknowledge the IRQ