Can someone shed some light on what's actually going on below? This is taken from Dr. Mario, run under Nintendulator. The game consists of 32KBytes of PRG (total) and 32KBytes of CHR (total). According to Nestopia it's an SEROM game, using MMC1B.
The code below happens almost immediately (after waiting for PPU power-on/2 VBlanks).
The questions I have are:
1. What's with the INC $FC80? Won't this affect the PRG bank select later on (writes to $FFF0)?
2. What exactly is the mapper behaviour as a result of this? The CHR ROM page size selection makes sense, but the PRG setup doesn't. Basically I'm asking what gets swapped in/out PRG-wise and what is the PRG size chosen?
I'm going off of the information here:
http://wiki.nesdev.com/w/index.php/MMC1
The code below happens almost immediately (after waiting for PPU power-on/2 VBlanks).
The questions I have are:
1. What's with the INC $FC80? Won't this affect the PRG bank select later on (writes to $FFF0)?
2. What exactly is the mapper behaviour as a result of this? The CHR ROM page size selection makes sense, but the PRG setup doesn't. Basically I'm asking what gets swapped in/out PRG-wise and what is the PRG size chosen?
I'm going off of the information here:
http://wiki.nesdev.com/w/index.php/MMC1
Code:
FC94 A2 FF LDX #$FF A:80 X:00 Y:00 P:A4 SP:FD CYC: 20 SL:241
FC96 9A TXS A:80 X:FF Y:00 P:A4 SP:FD CYC: 26 SL:241
FC97 EE 80 FC INC $FC80 = D8 A:80 X:FF Y:00 P:A4 SP:FF CYC: 32 SL:241 ; ?!?!?!?!?
FC9A A9 10 LDA #$10 A:80 X:FF Y:00 P:A4 SP:FF CYC: 50 SL:241 ; $10 = %00010000
FC9C 20 D5 B8 JSR $B8D5 A:10 X:FF Y:00 P:24 SP:FF CYC: 56 SL:241
B8D5 8D FF 9F STA $9FFF = 4F A:10 X:FF Y:00 P:24 SP:FD CYC: 74 SL:241 ; $9FFF = control reg
B8D8 4A LSR A A:10 X:FF Y:00 P:24 SP:FD CYC: 86 SL:241 ;
B8D9 8D FF 9F STA $9FFF = 4F A:08 X:FF Y:00 P:24 SP:FD CYC: 92 SL:241 ; Should result in CHR ROM
B8DC 4A LSR A A:08 X:FF Y:00 P:24 SP:FD CYC:104 SL:241 ; bank mode being set to 1
B8DD 8D FF 9F STA $9FFF = 4F A:04 X:FF Y:00 P:24 SP:FD CYC:110 SL:241 ; (4KByte CHR ROM swap)
B8E0 4A LSR A A:04 X:FF Y:00 P:24 SP:FD CYC:122 SL:241 ;
B8E1 8D FF 9F STA $9FFF = 4F A:02 X:FF Y:00 P:24 SP:FD CYC:128 SL:241 ;
B8E4 4A LSR A A:02 X:FF Y:00 P:24 SP:FD CYC:140 SL:241 ;
B8E5 8D FF 9F STA $9FFF = 4F A:01 X:FF Y:00 P:24 SP:FD CYC:146 SL:241 ;
B8E8 60 RTS A:01 X:FF Y:00 P:24 SP:FD CYC:158 SL:241
FC9F A9 02 LDA #$02 A:01 X:FF Y:00 P:24 SP:FF CYC:176 SL:241 ; $02 = %00000010
FCA1 20 E9 B8 JSR $B8E9 A:02 X:FF Y:00 P:24 SP:FF CYC:182 SL:241 ;
B8E9 8D FF BF STA $BFFF = FD A:02 X:FF Y:00 P:24 SP:FD CYC:200 SL:241 ; $BFFF = CHR bank 0 select
B8EC 4A LSR A A:02 X:FF Y:00 P:24 SP:FD CYC:212 SL:241 ;
B8ED 8D FF BF STA $BFFF = FD A:01 X:FF Y:00 P:24 SP:FD CYC:218 SL:241 ;
B8F0 4A LSR A A:01 X:FF Y:00 P:24 SP:FD CYC:230 SL:241 ;
B8F1 8D FF BF STA $BFFF = FD A:00 X:FF Y:00 P:27 SP:FD CYC:236 SL:241 ;
B8F4 4A LSR A A:00 X:FF Y:00 P:27 SP:FD CYC:248 SL:241 ;
B8F5 8D FF BF STA $BFFF = FD A:00 X:FF Y:00 P:26 SP:FD CYC:254 SL:241 ;
B8F8 4A LSR A A:00 X:FF Y:00 P:26 SP:FD CYC:266 SL:241 ;
B8F9 8D FF BF STA $BFFF = FD A:00 X:FF Y:00 P:26 SP:FD CYC:272 SL:241 ;
B8FC 60 RTS A:00 X:FF Y:00 P:26 SP:FD CYC:284 SL:241
FCA4 A9 03 LDA #$03 A:00 X:FF Y:00 P:26 SP:FF CYC:302 SL:241 ; $03 = %00000011
FCA6 20 FD B8 JSR $B8FD A:03 X:FF Y:00 P:24 SP:FF CYC:308 SL:241 ;
B8FD 8D FF DF STA $DFFF = 55 A:03 X:FF Y:00 P:24 SP:FD CYC:326 SL:241 ; $DFFF = CHR bank 1 select
B900 4A LSR A A:03 X:FF Y:00 P:24 SP:FD CYC:338 SL:241 ;
B901 8D FF DF STA $DFFF = 55 A:01 X:FF Y:00 P:25 SP:FD CYC: 3 SL:242 ;
B904 4A LSR A A:01 X:FF Y:00 P:25 SP:FD CYC: 15 SL:242 ;
B905 8D FF DF STA $DFFF = 55 A:00 X:FF Y:00 P:27 SP:FD CYC: 21 SL:242 ;
B908 4A LSR A A:00 X:FF Y:00 P:27 SP:FD CYC: 33 SL:242 ;
B909 8D FF DF STA $DFFF = 55 A:00 X:FF Y:00 P:26 SP:FD CYC: 39 SL:242 ;
B90C 4A LSR A A:00 X:FF Y:00 P:26 SP:FD CYC: 51 SL:242 ;
B90D 8D FF DF STA $DFFF = 55 A:00 X:FF Y:00 P:26 SP:FD CYC: 57 SL:242 ;
B910 60 RTS A:00 X:FF Y:00 P:26 SP:FD CYC: 69 SL:242
FCA9 A9 00 LDA #$00 A:00 X:FF Y:00 P:26 SP:FF CYC: 87 SL:242 ; $00 = %00000000
FCAB 20 11 B9 JSR $B911 A:00 X:FF Y:00 P:26 SP:FF CYC: 93 SL:242 ;
B911 8D F0 FF STA $FFF0 = 64 A:00 X:FF Y:00 P:26 SP:FD CYC:111 SL:242 ; $FFF0 = PRG bank select
B914 4A LSR A A:00 X:FF Y:00 P:26 SP:FD CYC:123 SL:242 ;
B915 8D F0 FF STA $FFF0 = 64 A:00 X:FF Y:00 P:26 SP:FD CYC:129 SL:242 ;
B918 4A LSR A A:00 X:FF Y:00 P:26 SP:FD CYC:141 SL:242 ;
B919 8D F0 FF STA $FFF0 = 64 A:00 X:FF Y:00 P:26 SP:FD CYC:147 SL:242 ;
B91C 4A LSR A A:00 X:FF Y:00 P:26 SP:FD CYC:159 SL:242 ;
B91D 8D F0 FF STA $FFF0 = 64 A:00 X:FF Y:00 P:26 SP:FD CYC:165 SL:242 ;
B920 4A LSR A A:00 X:FF Y:00 P:26 SP:FD CYC:177 SL:242 ;
B921 8D F0 FF STA $FFF0 = 64 A:00 X:FF Y:00 P:26 SP:FD CYC:183 SL:242 ;
B924 60 RTS A:00 X:FF Y:00 P:26 SP:FD CYC:195 SL:242
FCAE 4C 00 80 JMP $8000 A:00 X:FF Y:00 P:26 SP:FF CYC:213 SL:242
FC96 9A TXS A:80 X:FF Y:00 P:A4 SP:FD CYC: 26 SL:241
FC97 EE 80 FC INC $FC80 = D8 A:80 X:FF Y:00 P:A4 SP:FF CYC: 32 SL:241 ; ?!?!?!?!?
FC9A A9 10 LDA #$10 A:80 X:FF Y:00 P:A4 SP:FF CYC: 50 SL:241 ; $10 = %00010000
FC9C 20 D5 B8 JSR $B8D5 A:10 X:FF Y:00 P:24 SP:FF CYC: 56 SL:241
B8D5 8D FF 9F STA $9FFF = 4F A:10 X:FF Y:00 P:24 SP:FD CYC: 74 SL:241 ; $9FFF = control reg
B8D8 4A LSR A A:10 X:FF Y:00 P:24 SP:FD CYC: 86 SL:241 ;
B8D9 8D FF 9F STA $9FFF = 4F A:08 X:FF Y:00 P:24 SP:FD CYC: 92 SL:241 ; Should result in CHR ROM
B8DC 4A LSR A A:08 X:FF Y:00 P:24 SP:FD CYC:104 SL:241 ; bank mode being set to 1
B8DD 8D FF 9F STA $9FFF = 4F A:04 X:FF Y:00 P:24 SP:FD CYC:110 SL:241 ; (4KByte CHR ROM swap)
B8E0 4A LSR A A:04 X:FF Y:00 P:24 SP:FD CYC:122 SL:241 ;
B8E1 8D FF 9F STA $9FFF = 4F A:02 X:FF Y:00 P:24 SP:FD CYC:128 SL:241 ;
B8E4 4A LSR A A:02 X:FF Y:00 P:24 SP:FD CYC:140 SL:241 ;
B8E5 8D FF 9F STA $9FFF = 4F A:01 X:FF Y:00 P:24 SP:FD CYC:146 SL:241 ;
B8E8 60 RTS A:01 X:FF Y:00 P:24 SP:FD CYC:158 SL:241
FC9F A9 02 LDA #$02 A:01 X:FF Y:00 P:24 SP:FF CYC:176 SL:241 ; $02 = %00000010
FCA1 20 E9 B8 JSR $B8E9 A:02 X:FF Y:00 P:24 SP:FF CYC:182 SL:241 ;
B8E9 8D FF BF STA $BFFF = FD A:02 X:FF Y:00 P:24 SP:FD CYC:200 SL:241 ; $BFFF = CHR bank 0 select
B8EC 4A LSR A A:02 X:FF Y:00 P:24 SP:FD CYC:212 SL:241 ;
B8ED 8D FF BF STA $BFFF = FD A:01 X:FF Y:00 P:24 SP:FD CYC:218 SL:241 ;
B8F0 4A LSR A A:01 X:FF Y:00 P:24 SP:FD CYC:230 SL:241 ;
B8F1 8D FF BF STA $BFFF = FD A:00 X:FF Y:00 P:27 SP:FD CYC:236 SL:241 ;
B8F4 4A LSR A A:00 X:FF Y:00 P:27 SP:FD CYC:248 SL:241 ;
B8F5 8D FF BF STA $BFFF = FD A:00 X:FF Y:00 P:26 SP:FD CYC:254 SL:241 ;
B8F8 4A LSR A A:00 X:FF Y:00 P:26 SP:FD CYC:266 SL:241 ;
B8F9 8D FF BF STA $BFFF = FD A:00 X:FF Y:00 P:26 SP:FD CYC:272 SL:241 ;
B8FC 60 RTS A:00 X:FF Y:00 P:26 SP:FD CYC:284 SL:241
FCA4 A9 03 LDA #$03 A:00 X:FF Y:00 P:26 SP:FF CYC:302 SL:241 ; $03 = %00000011
FCA6 20 FD B8 JSR $B8FD A:03 X:FF Y:00 P:24 SP:FF CYC:308 SL:241 ;
B8FD 8D FF DF STA $DFFF = 55 A:03 X:FF Y:00 P:24 SP:FD CYC:326 SL:241 ; $DFFF = CHR bank 1 select
B900 4A LSR A A:03 X:FF Y:00 P:24 SP:FD CYC:338 SL:241 ;
B901 8D FF DF STA $DFFF = 55 A:01 X:FF Y:00 P:25 SP:FD CYC: 3 SL:242 ;
B904 4A LSR A A:01 X:FF Y:00 P:25 SP:FD CYC: 15 SL:242 ;
B905 8D FF DF STA $DFFF = 55 A:00 X:FF Y:00 P:27 SP:FD CYC: 21 SL:242 ;
B908 4A LSR A A:00 X:FF Y:00 P:27 SP:FD CYC: 33 SL:242 ;
B909 8D FF DF STA $DFFF = 55 A:00 X:FF Y:00 P:26 SP:FD CYC: 39 SL:242 ;
B90C 4A LSR A A:00 X:FF Y:00 P:26 SP:FD CYC: 51 SL:242 ;
B90D 8D FF DF STA $DFFF = 55 A:00 X:FF Y:00 P:26 SP:FD CYC: 57 SL:242 ;
B910 60 RTS A:00 X:FF Y:00 P:26 SP:FD CYC: 69 SL:242
FCA9 A9 00 LDA #$00 A:00 X:FF Y:00 P:26 SP:FF CYC: 87 SL:242 ; $00 = %00000000
FCAB 20 11 B9 JSR $B911 A:00 X:FF Y:00 P:26 SP:FF CYC: 93 SL:242 ;
B911 8D F0 FF STA $FFF0 = 64 A:00 X:FF Y:00 P:26 SP:FD CYC:111 SL:242 ; $FFF0 = PRG bank select
B914 4A LSR A A:00 X:FF Y:00 P:26 SP:FD CYC:123 SL:242 ;
B915 8D F0 FF STA $FFF0 = 64 A:00 X:FF Y:00 P:26 SP:FD CYC:129 SL:242 ;
B918 4A LSR A A:00 X:FF Y:00 P:26 SP:FD CYC:141 SL:242 ;
B919 8D F0 FF STA $FFF0 = 64 A:00 X:FF Y:00 P:26 SP:FD CYC:147 SL:242 ;
B91C 4A LSR A A:00 X:FF Y:00 P:26 SP:FD CYC:159 SL:242 ;
B91D 8D F0 FF STA $FFF0 = 64 A:00 X:FF Y:00 P:26 SP:FD CYC:165 SL:242 ;
B920 4A LSR A A:00 X:FF Y:00 P:26 SP:FD CYC:177 SL:242 ;
B921 8D F0 FF STA $FFF0 = 64 A:00 X:FF Y:00 P:26 SP:FD CYC:183 SL:242 ;
B924 60 RTS A:00 X:FF Y:00 P:26 SP:FD CYC:195 SL:242
FCAE 4C 00 80 JMP $8000 A:00 X:FF Y:00 P:26 SP:FF CYC:213 SL:242