Skip to content

Commit 5186cc7

Browse files
Merge pull request #35 from zohassadar/mmc3
Mmc3
2 parents 3a03115 + 6737c0e commit 5186cc7

File tree

9 files changed

+65
-9
lines changed

9 files changed

+65
-9
lines changed

build.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
compile_flags=()
44

55
help () {
6-
echo "Usage: $0 [-v] [-m <1|3>] [-a] [-s] [-k] [-h]"
6+
echo "Usage: $0 [-v] [-m <1|3|4>] [-a] [-s] [-k] [-h]"
77
echo "-v verbose"
88
echo "-m mapper"
99
echo "-a faster aeppoz + press select to end game"
@@ -16,8 +16,8 @@ while getopts "vm:askh" flag; do
1616
case "${flag}" in
1717
v) set -x ;;
1818
m)
19-
if ! [[ "${OPTARG}" =~ ^[13]$ ]]; then
20-
echo "Valid INES_MAPPER (-m) options are 1 or 3"
19+
if ! [[ "${OPTARG}" =~ ^[134]$ ]]; then
20+
echo "Valid INES_MAPPER (-m) options are 1, 3 or 4"
2121
exit 1
2222
fi
2323
compile_flags+=("-D INES_MAPPER=${OPTARG}")

src/chr.asm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
.segment "CHR"
22

3-
.if INES_MAPPER = 1
3+
.if INES_MAPPER = 1 || INES_MAPPER = 4
44
.incbin "chr/title_menu_tileset.chr"
55
.incbin "chr/game_tileset.chr"
66
.incbin "chr/rocket_tileset.chr"

src/gamemode/gametypemenu/menu.asm

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,16 @@ gameMode_gameTypeMenu:
1111
lda #0
1212
sta displayNextPiece
1313
RESET_MMC1
14-
.if INES_MAPPER = 1
14+
.if INES_MAPPER = 1 || INES_MAPPER = 4
1515
; switch to blank charmap
1616
; (stops glitching when resetting)
1717
lda #$03
1818
jsr changeCHRBank1
19+
.endif
20+
.if INES_MAPPER = 4
21+
; Horizontal mirroring
22+
lda #$1
23+
sta MMC3_MIRRORING
1924
.endif
2025
lda #%10011 ; used to be $10 (enable horizontal mirroring)
2126
jsr setMMC1Control

src/gamemode/speedtest.asm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ gameMode_speedTest:
2121
sta PPUADDR
2222
lda #$30
2323
sta PPUDATA
24-
.if INES_MAPPER = 1
24+
.if INES_MAPPER = 1 || INES_MAPPER = 4
2525
lda #$01
2626
jsr changeCHRBank0
2727
lda #$01

src/gamemode/waitscreen.asm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ waitScreenLoad:
66
sta renderMode
77
jsr updateAudioWaitForNmiAndDisablePpuRendering
88
jsr disableNmi
9-
.if INES_MAPPER = 1
9+
.if INES_MAPPER = 1 || INES_MAPPER = 4
1010
lda #$02
1111
jsr changeCHRBank0
1212
lda #$02

src/gamemodestate/initbackground.asm

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
gameModeState_initGameBackground:
22
jsr updateAudioWaitForNmiAndDisablePpuRendering
33
jsr disableNmi
4-
.if INES_MAPPER = 1
4+
.if INES_MAPPER = 1 || INES_MAPPER = 4
55
lda #$01
66
jsr changeCHRBank0
77
lda #$01
@@ -47,6 +47,10 @@ gameModeState_initGameBackground:
4747
lda #%10011000
4848
sta PPUCTRL
4949
sta currentPpuCtrl
50+
.elseif INES_MAPPER = 4
51+
; Vertical mirroring (Prevents screen glitching)
52+
lda #$0
53+
sta MMC3_MIRRORING
5054
.endif
5155
jsr resetScroll
5256
jsr waitForVBlankAndEnableNmi

src/io.asm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ MMC1_Control := $8000
4646
MMC1_CHR0 := $BFFF
4747
MMC1_CHR1 := $DFFF
4848

49+
MMC3_BANK_SELECT := $8000
50+
MMC3_BANK_DATA := $8001
51+
MMC3_MIRRORING := $A000
52+
4953
.macro RESET_MMC1
5054
.if INES_MAPPER = 1
5155
inc $8000 ; initRam

src/playstate/gameover_rocket.asm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ sleep_gameplay:
7676
endingAnimation: ; rocket_screen
7777
jsr updateAudioWaitForNmiAndDisablePpuRendering
7878
jsr disableNmi
79-
.if INES_MAPPER = 1
79+
.if INES_MAPPER = 1 || INES_MAPPER = 4
8080
lda #$02
8181
jsr changeCHRBank0
8282
lda #$02

src/util/core.asm

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,17 @@ changeCHRBank0:
311311
sta MMC1_CHR0
312312
lsr a
313313
sta MMC1_CHR0
314+
.elseif INES_MAPPER = 4
315+
asl a
316+
asl a
317+
ldx #$00
318+
stx MMC3_BANK_SELECT
319+
sta MMC3_BANK_DATA
320+
inx
321+
clc
322+
adc #$02
323+
stx MMC3_BANK_SELECT
324+
sta MMC3_BANK_DATA
314325
.endif
315326
rts
316327

@@ -325,6 +336,27 @@ changeCHRBank1:
325336
sta MMC1_CHR1
326337
lsr a
327338
sta MMC1_CHR1
339+
.elseif INES_MAPPER = 4
340+
asl a
341+
asl a
342+
ldx #$02
343+
stx MMC3_BANK_SELECT
344+
sta MMC3_BANK_DATA
345+
inx
346+
clc
347+
adc #$01
348+
stx MMC3_BANK_SELECT
349+
sta MMC3_BANK_DATA
350+
inx
351+
clc
352+
adc #$01
353+
stx MMC3_BANK_SELECT
354+
sta MMC3_BANK_DATA
355+
inx
356+
clc
357+
adc #$01
358+
stx MMC3_BANK_SELECT
359+
sta MMC3_BANK_DATA
328360
.endif
329361
rts
330362

@@ -339,5 +371,16 @@ changePRGBank:
339371
sta MMC1_PRG
340372
lsr a
341373
sta MMC1_PRG
374+
.elseif INES_MAPPER = 4
375+
asl a
376+
asl a
377+
ldx #$06
378+
stx MMC3_BANK_SELECT
379+
sta MMC3_BANK_DATA
380+
inx
381+
clc
382+
adc #$01
383+
stx MMC3_BANK_SELECT
384+
sta MMC3_BANK_DATA
342385
.endif
343386
rts

0 commit comments

Comments
 (0)