From 4f4805760be2dcd7a74367824d4b26d2e4c71f2d Mon Sep 17 00:00:00 2001 From: zeromus Date: Sun, 15 Apr 2012 04:24:29 +0000 Subject: [PATCH] rewrite more of mapper 227 to work even better (fixes Xiang Shuai Chuan Qi better) --- src/mappers/227.cpp | 70 ++++++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/src/mappers/227.cpp b/src/mappers/227.cpp index 81da154a..9dd61621 100644 --- a/src/mappers/227.cpp +++ b/src/mappers/227.cpp @@ -20,51 +20,63 @@ #include "mapinc.h" +//zero 14-apr-2012 - redid this entirely to match bizhawk + #define rg mapbyte1 static void DoSync(uint32 A) -{ - int32 p=((A>>3)&0xF) | ((A>>4)&0x10); +{ + int S = A & 1; + int M_horz = (A>>1)&1; + int p = (A >> 2) & 0x1F; + p += (A&0x100) ? 0x20 : 0; + bool o = (A>>7)&1; + bool L = (A>>9)&1; + + if (o && !S ) + { + ROM_BANK16(0x8000,p); + ROM_BANK16(0xC000,p); + } + if (o && S ) + { + ROM_BANK16(0x8000,p); + ROM_BANK16(0xC000,p+1); + } + if (!o && !S && !L ) + { + ROM_BANK16(0x8000,p); + ROM_BANK16(0xC000,p&0x38); + } + if (!o && S && !L ) + { + ROM_BANK16(0x8000,p&0x3E); + ROM_BANK16(0xC000,p&0x38); + } + if (!o && !S && L) + { + ROM_BANK16(0x8000,p); + ROM_BANK16(0xC000,p|7); + } + if (!o && S && L ) + { + ROM_BANK16(0x8000,p&0x3E); + ROM_BANK16(0xC000,p|7); + } rg[0]=A; rg[1]=A>>8; MIRROR_SET((A>>1)&1); - if(A&1) //32 KB - { - ROM_BANK32(p); - } - else //16 KB - { - ROM_BANK16(0x8000,(p<<1)|((A&4)>>2)); - ROM_BANK16(0xc000,(p<<1)|((A&4)>>2)); - } - if(A&0x80) - { - //zero 09-apr-2012 - re #3515350 - //removed this to fix [NJXXX] Xiang Shuai Chuan Qi which wouldnt be able to write any of its vram otherwise - //if this needs to be here for some other reason, then we'll have to learn how to decide when to do it - //PPUCHRRAM=0; - } - else - { - PPUCHRRAM=0xFF; - if(A&0x200) - ROM_BANK16(0xC000,(p<<1)|7); - else - ROM_BANK16(0xC000,(p<<1)&(~7)); - } } static DECLFW(Mapper227_write) { - rg[A&1]=V; DoSync(A); } static void M227Reset(void) { - rg[0]=rg[1]=0; DoSync(0); } @@ -75,7 +87,7 @@ static void M227Restore(int version) void Mapper227_init(void) { - SetWriteHandler(0x6000,0xffff,Mapper227_write); + SetWriteHandler(0x8000,0xffff,Mapper227_write); MapperReset=M227Reset; GameStateRestore=M227Restore; M227Reset();