summaryrefslogtreecommitdiff
path: root/sys/src/games/nes/mem.c
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2014-03-02 12:24:07 +0100
committeraiju <devnull@localhost>2014-03-02 12:24:07 +0100
commit142858b176c3b3a256389e1c700b78ba89e85e69 (patch)
tree667b52a14c98882a7ad109b4d424eb0d9f696980 /sys/src/games/nes/mem.c
parent88405371b1bcdc2e03eb7559ff2e993949c9b5a7 (diff)
games/nes: SUROM support, subtle NMI timing bug fixed
Diffstat (limited to 'sys/src/games/nes/mem.c')
-rw-r--r--sys/src/games/nes/mem.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/src/games/nes/mem.c b/sys/src/games/nes/mem.c
index 69951a124..63a851d56 100644
--- a/sys/src/games/nes/mem.c
+++ b/sys/src/games/nes/mem.c
@@ -54,6 +54,8 @@ mmc1(int v, u8int p)
if(v < 0){
switch(v){
case INIT:
+ if(nprg > 32)
+ sysfatal("bad rom, too much prg rom for mmc1");
mode = 0x0C;
prgsh = 14;
chrsh = 12;
@@ -99,6 +101,10 @@ mmc1(int v, u8int p)
mirr = mirrs[mode & 3];
break;
case 0xA000:
+ if(nprg > 16){
+ pr = s & 0x10 | pr & 0x0f;
+ pr %= nprg;
+ }
c0 = s & 0x1f;
c0 %= 2*nchr;
break;
@@ -107,7 +113,7 @@ mmc1(int v, u8int p)
c1 %= 2*nchr;
break;
case 0xE000:
- pr = s & 0x0f;
+ pr = pr & 0x10 | s & 0x0f;
pr %= nprg;
break;
}
@@ -121,7 +127,7 @@ t:
break;
case 0x0C:
prgb[0] = prg + pr * 0x4000;
- prgb[1] = prg + (0x0f % nprg) * 0x4000;
+ prgb[1] = prg + ((pr & 0x10 | 0x0f) % nprg) * 0x4000;
break;
default:
prgb[0] = prg + (pr & 0xfe) * 0x4000;