NSF ripper Guide Level 10


Level 0   Level 1   Level 2   Level 3   Level 4  

Level 5   Level 6   Level 7   Level 8   Level 9

Level 10   Level 11   Level 12   Level 13   Level 14

Level 15   Level 16   Level 17   Level 18   Level 19

Level 20


LEVEL 10 Human Creative Egypt

Egypt is a puzzel game that gets rather hard at the end where it kicks you totally. This game also has Egypt sounding music and is rather cool sounding. This NSF is rather hard to rip, took me quite awhile to figure it out and the solution wasn't as hard as I thought. When you rip the NSF and find the right init and play addresses it crashes in some players and won't work in others. When you load the game up in a emulator and set a write for $4000 - $4009 and you end up seeing the writes to the sound registers in the WRAM area. The first thing you should check is if these memory addresses are being initialized in the init code and at the right time. So I shall show you the code here that is in the rom.


$01D8:8D 00 40  STA $4000 = #$FF

$01DB:60        RTS

This code is used over and over again and the sound register address is changed a lot. 8D 00 40 the 00 byte is changed all the time and is updated in the play code thousands of times. You probally know by now that the init code initializes memory addresses and you need to trace the init code once you find it. I would check the sound registers first when you have them in the WRAM area and then go from there. In this case the sound registers are not being initialized and so you have to do them manually. So you need to make a loop to initialize these addresses. A countdown decrement loop might be best in this case. You should use the Y register and not the X register because the X register is used most often. Also you need to check the code to see that this routine doesnt mess anything else up by using the Y register. So here is the code to use and some data to go along with it.


FF70   48        PHA

FF71   A0 04     LDY   #04

FF73   B9 8CAD   LDA   AD8C,Y

FF76   99 D701   STA   01D7,Y

FF79   88        DEY

FF7A   D0 F7     BNE   $FF73

FF7C   68        PLA

FF7D   4C 6FB7   JMP   B76F

.db 60,40,00,8D

You can place the code wherever you want. However this is where I placed the code. And so this initializes the addresses and you can do this with other games as well that has register writes in WRAM. You can also initialize any other code that ends up here in WRAM in the same way. This is a simple level and so ends
here.