Skip to content

Commit 478dec3

Browse files
Merge pull request #43 from zohassadar/mmc5
Add MMC5 support
2 parents f6bc06e + 4a3653c commit 478dec3

File tree

8 files changed

+41
-3
lines changed

8 files changed

+41
-3
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
* Famicom Keyboard support
88
* Fixed Floor-0 disabled burns
99
* MMC3 Support
10+
* MMC5 Support
11+
* Fixed CNROM legal screen CHR bank
12+
* Fixed CNROM legal to title flicker
13+
* Block Tool pieces wrap around
1014
* Added hidden score option
1115

1216
## [v5 tournament]

build.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ while getopts "vm:askh" flag; do
1616
case "${flag}" in
1717
v) set -x ;;
1818
m)
19-
if ! [[ "${OPTARG}" =~ ^[134]$ ]]; then
20-
echo "Valid INES_MAPPER (-m) options are 1, 3 or 4"
19+
if ! [[ "${OPTARG}" =~ ^[1345]$ ]]; then
20+
echo "Valid INES_MAPPER (-m) options are 1, 3, 4 or 5"
2121
exit 1
2222
fi
2323
compile_flags+=("-D INES_MAPPER=${OPTARG}")

src/constants.asm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
INES_MAPPER := 1 ; supports 1, 3 and 4 (MMC1 / CNROM / MMC3)
33
.endif
44

5-
HAS_MMC = INES_MAPPER = 1 || INES_MAPPER = 4
5+
HAS_MMC = INES_MAPPER = 1 || INES_MAPPER = 4 || INES_MAPPER = 5
66

77
.ifndef SAVE_HIGHSCORES
88
SAVE_HIGHSCORES := 1

src/gamemode/gametypemenu/menu.asm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ gameMode_gameTypeMenu:
2121
; Horizontal mirroring
2222
lda #$1
2323
sta MMC3_MIRRORING
24+
.elseif INES_MAPPER = 5
25+
; Horizontal mirroring
26+
lda #$50
27+
sta MMC5_NT_MAPPING
2428
.endif
2529
lda #%10011 ; used to be $10 (enable horizontal mirroring)
2630
jsr setMMC1Control

src/gamemodestate/initbackground.asm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ gameModeState_initGameBackground:
5151
; Vertical mirroring (Prevents screen glitching)
5252
lda #$0
5353
sta MMC3_MIRRORING
54+
.elseif INES_MAPPER = 5
55+
; Single screen (Prevents screen glitching)
56+
lda #$0
57+
sta MMC5_NT_MAPPING
5458
.endif
5559
jsr resetScroll
5660
jsr waitForVBlankAndEnableNmi

src/io.asm

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ MMC3_BANK_DATA := $8001
5151
MMC3_MIRRORING := $A000
5252
MMC3_PRG_RAM := $A001
5353

54+
; https://www.nesdev.org/wiki/MMC5#Configuration
55+
MMC5_PRG_MODE := $5100
56+
MMC5_CHR_MODE := $5101
57+
MMC5_RAM_PROTECT1 := $5102
58+
MMC5_RAM_PROTECT2 := $5103
59+
MMC5_NT_MAPPING := $5105 ; $50 horizontal, $44 vertical, $00 single
60+
MMC5_CHR_BANK0 := $5123 ; 4kb page index
61+
MMC5_CHR_BANK1 := $5127
62+
5463
.macro RESET_MMC1
5564
.if INES_MAPPER = 1
5665
inc $8000 ; initRam

src/reset.asm

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ reset: cld
1616
inc reset
1717
.elseif INES_MAPPER = 4
1818
jsr mmc3Init
19+
.elseif INES_MAPPER = 5
20+
jsr mmc5Init
1921
.endif
2022
lda #$10
2123
jsr setMMC1Control
@@ -44,6 +46,17 @@ mmc3Init:
4446
lda #$80 ; enable PRG RAM
4547
sta MMC3_PRG_RAM
4648
rts
49+
.elseif INES_MAPPER = 5
50+
; https://www.nesdev.org/wiki/MMC5
51+
mmc5Init:
52+
ldx #$00
53+
stx MMC5_PRG_MODE ; 0: 1 32Kb bank
54+
inx
55+
stx MMC5_CHR_MODE ; 1: 4kb CHR pages
56+
stx MMC5_RAM_PROTECT2 ; 1: enable PRG RAM
57+
inx
58+
stx MMC5_RAM_PROTECT1 ; 2: enable PRG RAM
59+
rts
4760
.endif
4861

4962

src/util/core.asm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,8 @@ changeCHRBank0:
322322
adc #$02
323323
stx MMC3_BANK_SELECT
324324
sta MMC3_BANK_DATA
325+
.elseif INES_MAPPER = 5
326+
sta MMC5_CHR_BANK0
325327
.endif
326328
rts
327329

@@ -357,6 +359,8 @@ changeCHRBank1:
357359
adc #$01
358360
stx MMC3_BANK_SELECT
359361
sta MMC3_BANK_DATA
362+
.elseif INES_MAPPER = 5
363+
sta MMC5_CHR_BANK1
360364
.endif
361365
rts
362366

0 commit comments

Comments
 (0)