Doommaster1994 wrote:
720 Degrees plays too fast in most NSF players. Would it be possible for you to fix that one as well? I'd deeply appreciate it.
I can't fix most NSF players. 720 specifies a 30Hz update rate instead of 60hz for some reason. It'll play fine in any NSF player that correctly uses the update rate.
If you think it is worthwhile to convert it to 60hz you can write a little stub for the PLAY code that skips every second update. I will write a guide here, which you can follow along and attempt for yourself.
1. Use FCEUX, put a breakpoint on some RAM address you think might be unused by the NSF. Try $07FF, and break on reads or writes, and play some tracks from the NSF. If it's being used, try another until you find one that isn't ($07FE, etc. refer to a memory map if you need to learn what addresses the RAM uses). When you find one, remember this address (I will refer to it as "variable" below).
2. Find an empty space in the NSF. This is easy because there is no bankswitching-- just stick it on the end of the existing code (at the end of the file).
3. Insert some code that executes the play routine once every second time. This is probably what I'd write:
Code:
PHA ; save A register in case it's in use (probably not, but this is safe)
LDA variable ; load your variable into A register (will be initialized to 0)
XOR #1 ; toggle variable
STA variable ; store it back to RAM
BNE skip ; if variable != 1, skip the play routine
PLA ; restore A register
JMP play ; execute the play routine
skip:
PLA ; restore A register
RTS ; return without playing
Note that the value of "play" in this example can be read from the NSF header. (NSFPlay's info page will show you what PLAY is equal to.)
4. Assemble your code (pick your favourite assembler, or use FCEUX's built in assembler, whatever's convenient) and insert it at the end of the NSF. Figure out the starting address of this code (it will be the NSF header's LOAD value + the position of the code in the file after the header). Replace the address in PLAY with the address of your code.
5. Replace the NSF header's NTSC update rate with $4100 (the proper NTSC play rate).
If you need help with any of these steps, you can ask me, but this is basically what I'd do.