Posted By
![](/images/g.gif) Waz on 2024-02-22 17:27:14
| Re: Rockman built-in cheat mode
Thanks for that info @MIK - really useful, and as @Ulysses777 says, a reset appears to work (which is what I did when testing, I did reset rather than RUN/STOP and reset.)
All it basically does is to place an RTS at the routine at $1E53 that checks so returns straight back from the subroutine called. That subroutine uses $7E and $7F in zero page as counters, $7E to do a count to $0C, and only then read the value of $7F to set the notedata offset from $14C4,X, which has 60 ($3C) bytes of notes in a table, which are set into $FF0F as needed and then with a small subroutine to set $FF11 also. Bear in mind on some memory maps I've read, those $7E and $7F zero page bytes can be temporary set for note and volume also.
If you never wanted to even go there, you could either fill $14C4-$14FF with zero (and add a RTS at $1E75 so that $FF11 isn't set either), or the JSR $1E53 is at $1CDF in memory, so you could replace those bytes with say NOPs instead.
It may be worth seeing if any of these methods work on the revision A board with the C16 and Plus4 compatible version, and should be compatible also with other releases, so you can use either of:
Zero bytes in ingame music data and RTS to stop $FF11 being set: FOR A=0 TO 59:POKE 5316+A,0:NEXT:POKE 7797,96
Stop subroutine being called: POKE 7391,234: POKE7392,234: POKE7393,234
These may be alternatives to try but don't have a C16 Rev A to test here.
|