KNOWN RAM ADDRESSES FOR SUPER MARIO BROTHERS 3 04/01/01 Jeff Connelly From ~/mnt/ad4s2d/jeff/xmax/games/emu/nes/smb3/smb3.ram If you have a NES Pro Action Replay, you can use these codes directly. Type in 00, the four-digit address, and a two-digit value. For example, use NES PAR code 0003DD7F to have the takeoff meter always floored. For NES Game Genie users, you'll need to find the ROM address which manipulates the RAM variable in the way you want to stop or counter. $0079 mario on map X $0093 turtle status, spinning? (values vary) $00BD acceleration X (left=negative, right=positive) $00CF acceleration Y (distance from ground) $00D8 jumping stance, if 1 is jumping (if set cannot jump) $00E5 if 191, turtle floats away $00ED ability $00 small $01 big $02 big $03 tail $04 racoon $05 bear suit $06 sledgehammer $00EE stance (sprite image, varies. probably an index) $00 running, leg up $01 running, hands up $02 standing $03 tail out $04 going away $05 coming forward $06 jumping $07 crouching $08 jumping $09 jumping, tail out $0A jumping, tail up $1A bear suit: sitting, legs up $1B bear suit: laying $1C bear suit: half rolling $1D bear suit: rolling $1E bear suit: statue $00F7 button status, or of: $01 Right $02 Left $04 Down $08 Up $10 Start $20 Start $40 B $80 A $028F half of mario on map X $0229 mario stance/direction $05 facing left $07 facing right $35 hand is out $0293 half of mario 2 on map X $03DD p meter, each bit being an arrow (last being the P). for example: $00 0-0-0-0-0-0-0 zero $7F 1-1-1-1-1-1-1 floored, whissle, can fly $FF floored, but don't wissile and can't fly $04D3-A music $056F stance when in air? $0588 behind scenery flag $00 no $B5 yes $072B number of players-1 $071B something with stance $0736 Mario's lifes $07D2 suit color $07D3 skin color $558 (181=B5=behind scenery flag) sightings: File prg8000.asm: 008F0E AD 58 05 LDA $0558 File prg18000.asm: 018F2F AD 58 05 LDA $0558 018F32 D0 11 BNE $8F45 ; check if behind scenery? 018F40 A9 07 LDA #$07 018F42 8D 58 05 STA $0558 018F45 CE 58 05 DEC $0558 ; 558=6 initially File prg28000.asm: 028BC2 2C 58 05 BIT $0558 $ED (ability) sightings: File prg8000.asm: 00892F A5 ED LDA $ED 008F37 A4 ED LDY $ED 009855 A5 ED LDA $ED 0099F1 A5 ED LDA $ED 0099FF A4 ED LDY $ED 009A1A A5 ED LDA $ED 009A4E A5 ED LDA $ED 009A57 A5 ED LDA $ED File prg10000.asm: 012C38 A4 ED LDY $ED 012C3A D0 02 BNE $2C3E ;NE if [ED] nonzero 012C3C A9 0C LDA #$0C ; A=$0C unless small 012C3E 18 CLC 012FE5 A4 ED LDY $ED ; A=$08 unless small 0130A8 A4 ED LDY $ED ; A=$12 unless small 013144 A4 ED LDY $ED ; A=$14 unless small 013154 A4 ED LDY $ED ; A=$F0 unless small 01369C A4 ED LDY $ED 01369E F0 05 BEQ $36A5 ;EQ if small 0136A0 AC 6F 05 LDY $056F ; 0136A3 F0 02 BEQ $36A7 0136A5 A9 F8 LDA #$F8 ; A=$F8 unless small 0136A7 18 CLC File prg14000.asm: 016247 A5 ED LDA $ED 016249 C9 06 CMP #$06 ; sledgehammer mario 01624B F0 04 BEQ $6251 01624D C9 02 CMP #$02 ; big mario 01624F D0 17 BNE $6268 ; Sledgehammer mario gets special powers 016251 AD 56 05 LDA $0556 016254 0D 6F 05 ORA $056F 016257 0D 57 05 ORA $0557 01625A 0D 8C 05 ORA $058C 01625D 05 CE ORA $CE 01625F D0 07 BNE $6268 ; Anything but big mario 016268 AD 46 7A LDA $7A46 01626B F0 41 BEQ $62AE 01626D CE 46 7A DEC $7A46 016270 A0 00 LDY #$00 016272 AD 47 7A LDA $7A47 016275 38 SEC 016276 ED 43 05 SBC $0543 016279 99 00 02 STA $0200,Y 01627C 99 04 02 STA $0204,Y 01627F AD 48 7A LDA $7A48 016282 38 SEC 016283 E5 FD SBC $FD 016285 99 03 02 STA $0203,Y 016288 18 CLC 016289 69 08 ADC #$08 0162DB A4 ED LDY $ED 0162DD C0 06 CPY #$06 0162DF 38 SEC 0162E0 D0 01 BNE $62E3 ; Not sledgehammer mario 0162E2 0A ASL A ; ASL A if sledgehammar mario 0162E3 9D E1 7C STA $7CE1,X 01643C A5 ED LDA $ED 01643E C9 06 CMP #$06 ; Sledgehammar mario 016440 D0 5B BNE $649D 01683F A6 ED LDX $ED 016841 D0 02 BNE $6845 ; If ability is not small 016843 A9 08 LDA #$08 016845 A6 CD LDX $CD 0173E9 A5 ED LDA $ED 0173EB F0 06 BEQ $73F3 ; EQ if no ability 0173ED AD 6F 05 LDA $056F ;| 0173F0 D0 01 BNE $73F3 ;|has an ability 0173F2 C8 INY :| 0173F3 BD BF 05 LDA $05BF,X; No ability 017631 A4 ED LDY $ED 0177DA A5 ED LDA $ED 017A73 A5 ED LDA $ED File prg18000.asm: 0180BF A5 ED LDA $ED 01824A AE 26 07 LDX $0726 ; map index? 01824D BD 46 07 LDA $0746,X 018250 85 ED STA $ED ; ED-> 0182D0 A4 ED LDY $ED 0182D2 B9 E0 C3 LDA $C3E0,Y ; ability array? 0182D5 29 02 AND #$02 ; mask, only allowing bits 11 0182D7 D0 03 BNE $82DC 0182D9 EE 45 05 INC $0545 0183E0 A9 C0 LDA #$C0 0183E2 8D 7A 05 STA $057A 0183E5 D0 0B BNE $83F2 0183E7 EE 75 05 INC $0575 0183EA D0 06 BNE $83F2 0183EC 29 0F AND #$0F 0183EE A8 TAY 0183EF 88 DEY ; dec ability when hit? 0183F0 84 ED STY $ED ; ED-> 018415 A9 00 LDA #$00 ; initial ability? 018417 85 ED STA $ED ; ED-> 018550 A5 ED LDA $ED 0186F2 A4 ED LDY $ED 018738 A5 ED LDA $ED 0188B1 A5 ED LDA $ED 01894C A5 ED LDA $ED 018B25 A4 ED LDY $ED 018B98 A5 ED LDA $ED 018C5A A5 ED LDA $ED 018CA2 A4 ED LDY $ED 018CDE A6 ED LDX $ED 018DAF A5 ED LDA $ED 018DCB A4 ED LDY $ED 018E39 A5 ED LDA $ED 018E58 A5 ED LDA $ED 018E79 A4 ED LDY $ED 018E95 A4 ED LDY $ED 018EB8 A4 ED LDY $ED 018EE3 A5 ED LDA $ED 018F1D A5 ED LDA $ED 018F22 A5 ED LDA $ED 018F4A A4 ED LDY $ED 018F5E A5 ED LDA $ED 018F73 A5 ED LDA $ED 018FA6 A4 ED LDY $ED 01901F A4 ED LDY $ED 0194A7 A5 ED LDA $ED 019511 A5 ED LDA $ED 0197F3 A5 ED LDA $ED 019801 A5 ED LDA $ED 019847 A5 ED LDA $ED 019A2C A6 ED LDX $ED 019A6C A4 ED LDY $ED 019B1B A6 ED LDX $ED 019BC7 A4 ED LDY $ED 019D1A A5 ED LDA $ED 019F04 A4 ED LDY $ED 019F6D A4 ED LDY $ED 01BDD5 A4 ED LDY $ED 01BE8E A5 ED LDA $ED File prg20000.asm: X 022176 A5 ED LDA $ED ; data X 0227E9 85 ED STA $ED ; data File prg24000.asm: 02578F A4 ED LDY $ED ; data? 026176 A5 ED LDA $ED ; data? File prg28000.asm: 028176 A5 ED LDA $ED 02A176 A5 ED LDA $ED File prg2C000.asm: 02C176 A5 ED LDA $ED 02E176 A5 ED LDA $ED File prg30000.asm: 030176 A5 ED LDA $ED ^ occurs at ...176. Probably not worth looking at. 0301ED A5 ED LDA $ED 032176 A5 ED LDA $ED File prg34000.asm: 036176 A5 ED LDA $ED File prg38000.asm: 0389B4 A9 00 LDA #$00 ; init ability? 0389B6 85 EC STA $EC 0389B8 85 ED STA $ED ; ED-> 038B5E A9 00 LDA #$00 038B60 85 E9 STA $E9 038B62 85 ED STA $ED ; ED-> 038B75 85 ED STA $ED ; ED-> File prg3C000.asm: 03E06D 85 ED STA $ED ; ED-> 03E293 A4 ED LDY $ED File prg40000.asm: 042EA6 A4 ED LDY $ED 043017 A5 ED LDA $ED 04322C A4 ED LDY $ED 0432F5 A4 ED LDY $ED 043354 A4 ED LDY $ED 043407 A6 ED LDX $ED 043460 A4 ED LDY $ED 043485 A4 ED LDY $ED 043491 A5 ED LDA $ED File prgc000.asm: 00C2BC A5 ED LDA $ED 00C33C A4 ED LDY $ED 00C3A4 A4 ED LDY $ED 00CB86 A4 ED LDY $ED 00DAC0 A4 ED LDY $ED 00FD20 A5 ED LDA $ED X File prg4C000.asm: X 04DFDA 06 ED ASL $ED (data) $7D2 (suit color) sightings: File prg14000.asm: 016200 AD D2 07 LDA $07D2 File prg18000.asm: 018586 8D D2 07 STA $07D2 File prg1C000.asm: 01CE54 8D D2 07 STA $07D2 ; 4E5F 01D538 9D D2 07 STA $07D2,X ; 5539?D2:D3 File prg3C000.asm: 03C5DC 8D D2 07 STA $07D2 $03DD (power meter bitmap) sightings: The idea is to find a $7F in $0300 so only one byte needs to be replaced, equaling one GG code. Change an LDA $03DD to LDA $03?? where $03?? is usually a $7F, so then the p-meter will always be on. $038A has a FF. File prg18000.asm: 01826D A9 7F LDA #$7F 01826F 8D DD 03 STA $03DD ; 270?DD:8A 0184D8 8C DD 03 STY $03DD ; 4D9?DD:8A 0184E4 AD DD 03 LDA $03DD ; 4E5?DD:8A 0184E7 C9 7F CMP #$7F 0184E9 D0 0D BNE $84F8 0184FE 2E DD 03 ROL $03DD ; down - 4FF?DD:8A 018506 6E DD 03 ROR $03DD ; up - 507?DD:8A 018509 4E DD 03 LSR $03DD ; 50A?DD:8A 01850E AD DD 03 LDA $03DD ; 50F?DD:8A 018B7A AD DD 03 LDA $03DD ; B7B?DD:8A 018B7D C9 7F CMP #$7F 018B7F D0 02 BNE $8B83 018C4E AD DD 03 LDA $03DD ; C4F?DD:8A 018C8D AD DD 03 LDA $03DD ; C8E?DD:8A File prg3C000.asm: 03D25E AD DD 03 LDA $03DD ; 525F?DD:8A 03D276 AD DD 03 LDA $03DD ; 5277?DD:8A ; TODO: SOLVE THIS