diff --git a/src/boards/.gitignore b/src/boards/.gitignore deleted file mode 100644 index cbf84a4e..00000000 --- a/src/boards/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/onebus.c diff --git a/src/boards/106.cpp b/src/boards/106.cpp index 638dda9d..5dd8b617 100644 --- a/src/boards/106.cpp +++ b/src/boards/106.cpp @@ -28,7 +28,7 @@ static uint32 WRAMSIZE; static SFORMAT StateRegs[]= { {&IRQa, 1, "IRQA"}, - {&IRQCount, 4, "IRQCOUNT"}, + {&IRQCount, 4, "IRQC"}, {reg, 16, "REGS"}, {0} }; diff --git a/src/boards/108.cpp b/src/boards/108.cpp index fc3aebdb..a762cf4f 100644 --- a/src/boards/108.cpp +++ b/src/boards/108.cpp @@ -37,8 +37,8 @@ static void Sync(void) static DECLFW(M108Write) { - reg=V; - Sync(); + reg=V; + Sync(); } static void M108Power(void) @@ -46,7 +46,8 @@ static void M108Power(void) Sync(); SetReadHandler(0x6000,0x7FFF,CartBR); SetReadHandler(0x8000,0xFFFF,CartBR); - SetWriteHandler(0x8FFF,0x8FFF,M108Write); + SetWriteHandler(0x8000,0x8FFF,M108Write); // regular 108 + SetWriteHandler(0xF000,0xFFFF,M108Write); // simplified Kaiser BB Hack } static void StateRestore(int version) diff --git a/src/boards/116.cpp b/src/boards/116.cpp index 8ac2a1cf..309cf09f 100644 --- a/src/boards/116.cpp +++ b/src/boards/116.cpp @@ -27,38 +27,37 @@ * Kart Fighter (008, Huang-1, GAL dip: W conf.) * Somari (008, C5052-13, GAL dip: P conf., GK2-P/GK2-V maskroms) * Somari (008, Huang-1, GAL dip: W conf., GK1-P/GK1-V maskroms) - * AV Mei Shao Nv Zhan Shi () + * AV Mei Shao Nv Zhan Shi (aka AV Pretty Girl Fighting) (SL-12 PCB, Hunag-1, GAL dip: unk conf. SL-11A/SL-11B maskroms) * Samurai Spirits (Full version) (Huang-1, GAL dip: unk conf. GS-2A/GS-4A maskroms) - * Contra Fighter (603-5052 board, C5052-3, GAL dip: unk conf. SC603-A/SCB603-B maskroms) + * Contra Fighter (603-5052 PCB, C5052-3, GAL dip: unk conf. SC603-A/SCB603-B maskroms) * */ #include "mapinc.h" -#include "mmc3.h" static uint8 mode; static uint8 vrc2_chr[8], vrc2_prg[2], vrc2_mirr; static uint8 mmc3_regs[10], mmc3_ctrl, mmc3_mirr; -extern uint8 IRQCount,IRQLatch,IRQa; -extern uint8 IRQReload; +static uint8 IRQCount,IRQLatch,IRQa; +static uint8 IRQReload; static uint8 mmc1_regs[4], mmc1_buffer, mmc1_shift; static SFORMAT StateRegs[]= { {&mode, 1, "MODE"}, - {vrc2_chr, 8, "vrch"}, - {vrc2_prg, 2, "vrpr"}, - {&vrc2_mirr, 1, "vrmi"}, - {mmc3_regs, 10, "m3re"}, - {&mmc3_ctrl, 1, "m3ct"}, - {&mmc3_mirr, 1, "m3mi"}, + {vrc2_chr, 8, "VRCC"}, + {vrc2_prg, 2, "VRCP"}, + {&vrc2_mirr, 1, "VRCM"}, + {mmc3_regs, 10, "M3RG"}, + {&mmc3_ctrl, 1, "M3CT"}, + {&mmc3_mirr, 1, "M3MR"}, {&IRQReload, 1, "IRQR"}, {&IRQCount, 1, "IRQC"}, {&IRQLatch, 1, "IRQL"}, {&IRQa, 1, "IRQA"}, - {mmc1_regs, 4, "m1r"}, - {&mmc1_buffer, 1, "m1bf"}, - {&mmc1_shift, 1, "m1mi"}, + {mmc1_regs, 4, "M1RG"}, + {&mmc1_buffer, 1, "M1BF"}, + {&mmc1_shift, 1, "M1MR"}, {0} }; @@ -174,7 +173,7 @@ static void Sync(void) static DECLFW(UNLSL12ModeWrite) { - printf("%04X:%02X\n",A,V); +// printf("%04X:%02X\n",A,V); if((A & 0x4100) == 0x4100) { mode = V; if(A&1) { // hacky hacky, there are two configuration modes on SOMARI HUANG-1 PCBs @@ -194,7 +193,7 @@ static DECLFW(UNLSL12ModeWrite) static DECLFW(UNLSL12Write) { - printf("%04X:%02X\n",A,V); +// printf("%04X:%02X\n",A,V); if(A==0xA123) { int zzz=9; diff --git a/src/boards/117.cpp b/src/boards/117.cpp index 66a45e9c..ec7b2141 100644 --- a/src/boards/117.cpp +++ b/src/boards/117.cpp @@ -28,8 +28,8 @@ static SFORMAT StateRegs[]= {&IRQa, 1, "IRQA"}, {&IRQCount, 1, "IRQC"}, {&IRQLatch, 1, "IRQL"}, - {prgreg, 4, "PREGS"}, - {chrreg, 8, "CREGS"}, + {prgreg, 4, "PREG"}, + {chrreg, 8, "CREG"}, {&mirror, 1, "MREG"}, {0} }; diff --git a/src/boards/120.cpp b/src/boards/120.cpp index ed681b91..097c69df 100644 --- a/src/boards/120.cpp +++ b/src/boards/120.cpp @@ -48,8 +48,7 @@ static void M120Power(void) { reg=0; Sync(); - SetReadHandler(0x6000,0x7FFF,CartBR); - SetReadHandler(0x8000,0xFFFF,CartBR); + SetReadHandler(0x6000,0xFFFF,CartBR); SetWriteHandler(0x4100,0x5FFF,M120Write); } diff --git a/src/boards/15.cpp b/src/boards/15.cpp index 6405afa7..bd15ffc6 100644 --- a/src/boards/15.cpp +++ b/src/boards/15.cpp @@ -64,7 +64,7 @@ static DECLFW(M15Write) { latchea=A; latched=V; - printf("%04X = %02X\n",A,V); +// printf("%04X = %02X\n",A,V); Sync(); } diff --git a/src/boards/178.cpp b/src/boards/178.cpp index 19e1b8dc..ee465b4d 100644 --- a/src/boards/178.cpp +++ b/src/boards/178.cpp @@ -20,52 +20,51 @@ #include "mapinc.h" -static uint8 reg[3]; +static uint8 reg[4]; static uint8 *WRAM=NULL; static uint32 WRAMSIZE; static SFORMAT StateRegs[]= { - {reg, 3, "REGS"}, + {reg, 4, "REGS"}, {0} }; static void Sync(void) { - setmirror(reg[0]); + uint8 bank = (reg[2]&3)<<3; + setmirror((reg[0]&1)^1); setprg8r(0x10,0x6000,0); setchr8(0); - setprg32(0x8000,(reg[1]+reg[2])); + if(reg[0]&2) + { + setprg16(0x8000,(reg[1]&7)|bank); + setprg16(0xC000,((~0)&7)|bank); + } + else + { + setprg16(0x8000,(reg[1]&6)|bank); + setprg16(0xC000,(reg[1]&6)|bank|1); + } } -static DECLFW(M178Write0) +static DECLFW(M178Write) { - reg[0]=(V&1)^1; - Sync(); -} - -static DECLFW(M178Write1) -{ - reg[1]=(V>>1)&0xf; - Sync(); -} - -static DECLFW(M178Write2) -{ - reg[2]=(V<<2); + reg[A&3]=V; Sync(); } static void M178Power(void) { - reg[0]=1; reg[1]=0; reg[2]=0; + reg[0]=1; + reg[1]=0; + reg[2]=0; + reg[3]=0; Sync(); SetReadHandler(0x6000,0x7FFF,CartBR); SetWriteHandler(0x6000,0x7FFF,CartBW); SetReadHandler(0x8000,0xFFFF,CartBR); - SetWriteHandler(0x4800,0x4800,M178Write0); - SetWriteHandler(0x4801,0x4801,M178Write1); - SetWriteHandler(0x4802,0x4802,M178Write2); + SetWriteHandler(0x4800,0x4803,M178Write); } static void M178Close(void) diff --git a/src/boards/183.cpp b/src/boards/183.cpp index bf0b7c04..9fe4ecd3 100644 --- a/src/boards/183.cpp +++ b/src/boards/183.cpp @@ -32,8 +32,8 @@ static SFORMAT StateRegs[]= { {prg, 4, "PRG"}, {chr, 8, "CHR"}, - {&IRQCount, 1, "IRQCOUNT"}, - {&IRQPre, 1, "IRQPRE"}, + {&IRQCount, 1, "IRQC"}, + {&IRQPre, 1, "IRQP"}, {&IRQa, 1, "IRQA"}, {0} }; @@ -64,7 +64,7 @@ static DECLFW(M183Write) { if(((A&0xF80C)>=0xB000)&&((A&0xF80C)<=0xE00C)) { - uint8 index=(((A>>11)-6)|(A>>3))&7; + int index=(((A>>11)-6)|(A>>3))&7; chr[index]=(chr[index]&(0xF0>>(A&4)))|((V&0x0F)<<(A&4)); SyncChr(); } diff --git a/src/boards/185.cpp b/src/boards/185.cpp index 3767d322..b865a8f5 100644 --- a/src/boards/185.cpp +++ b/src/boards/185.cpp @@ -32,7 +32,7 @@ static SFORMAT StateRegs[]= {0} }; -// on off +// on off //1 0x0F, 0xF0 - Bird Week //2 0x33, 0x00 - B-Wings //3 0x11, 0x00 - Mighty Bomb Jack diff --git a/src/boards/186.cpp b/src/boards/186.cpp index 49762650..ceff2b1a 100644 --- a/src/boards/186.cpp +++ b/src/boards/186.cpp @@ -29,7 +29,7 @@ static uint8 regs[4]; static SFORMAT StateRegs[]= { {regs, 4, "DREG"}, - {SWRAM, 2816, "SWRAM"}, + {SWRAM, 2816, "SWRM"}, {0} }; diff --git a/src/boards/187.cpp b/src/boards/187.cpp index 0f497488..bc8b61d2 100644 --- a/src/boards/187.cpp +++ b/src/boards/187.cpp @@ -35,7 +35,12 @@ static void M187PW(uint32 A, uint8 V) { uint8 bank=EXPREGS[0]&0x1F; if(EXPREGS[0]&0x20) - setprg32(0x8000,bank>>2); + { + if(EXPREGS[0]&0x40) + setprg32(0x8000,bank>>2); + else + setprg32(0x8000,bank>>1); // hacky hacky! two mappers in one! need real hw carts to test + } else { setprg16(0x8000,bank); @@ -48,28 +53,19 @@ static void M187PW(uint32 A, uint8 V) static DECLFW(M187Write8000) { - EXPREGS[2]=1; + EXPREGS[1]=1; MMC3_CMDWrite(A,V); } static DECLFW(M187Write8001) { - if(EXPREGS[2]) + if(EXPREGS[1]) MMC3_CMDWrite(A,V); } -static DECLFW(M187Write8003) -{ - EXPREGS[2]=0; - if(V==0x28)setprg8(0xC000,0x17); - else if(V==0x2A)setprg8(0xA000,0x0F); -} - - static DECLFW(M187WriteLo) { - EXPREGS[1]=V; - if(A==0x5000) + if((A==0x5000)||(A==0x6000)) { EXPREGS[0]=V; FixMMC3PRG(MMC3_cmd); @@ -84,13 +80,12 @@ static DECLFR(M187Read) static void M187Power(void) { - EXPREGS[0]=EXPREGS[1]=EXPREGS[2]=0; + EXPREGS[0]=EXPREGS[1]=0; GenMMC3Power(); SetReadHandler(0x5000,0x5FFF,M187Read); - SetWriteHandler(0x5000,0x5FFF,M187WriteLo); + SetWriteHandler(0x5000,0x6FFF,M187WriteLo); SetWriteHandler(0x8000,0x8000,M187Write8000); SetWriteHandler(0x8001,0x8001,M187Write8001); - SetWriteHandler(0x8003,0x8003,M187Write8003); } void Mapper187_Init(CartInfo *info) diff --git a/src/boards/189.cpp b/src/boards/189.cpp index ff045a55..6d88650e 100644 --- a/src/boards/189.cpp +++ b/src/boards/189.cpp @@ -23,7 +23,7 @@ static void M189PW(uint32 A, uint8 V) { - setprg32(0x8000,EXPREGS[0]&3); + setprg32(0x8000,EXPREGS[0]&7); } static DECLFW(M189Write) diff --git a/src/boards/199.cpp b/src/boards/199.cpp index 29844de9..ce024c64 100644 --- a/src/boards/199.cpp +++ b/src/boards/199.cpp @@ -26,7 +26,8 @@ #include "mapinc.h" #include "mmc3.h" -static uint8 *CHRRAM=NULL; // and here too +static uint8 *CHRRAM=NULL; +static uint32 CHRRAMSIZE; static void M199PW(uint32 A, uint8 V) { @@ -60,7 +61,6 @@ static DECLFW(M199Write) { if((A==0x8001)&&(MMC3_cmd&8)) { -// FCEU_printf("%02x=>%02x\n",MMC3_cmd,V); EXPREGS[MMC3_cmd&3]=V; FixMMC3PRG(MMC3_cmd); FixMMC3CHR(MMC3_cmd); @@ -82,16 +82,26 @@ static void M199Power(void) SetWriteHandler(0x8000,0xFFFF,M199Write); } +static void M199Close(void) +{ + if(CHRRAM) + FCEU_gfree(CHRRAM); + CHRRAM=NULL; +} + void Mapper199_Init(CartInfo *info) { - int CHRRAMSize=1024*8; GenMMC3_Init(info, 512, 256, 8, info->battery); cwrap=M199CW; pwrap=M199PW; mwrap=M199MW; info->Power=M199Power; - CHRRAM=(uint8*)FCEU_gmalloc(CHRRAMSize); - SetupCartCHRMapping(0x10, CHRRAM, CHRRAMSize, 1); - AddExState(CHRRAM, CHRRAMSize, 0, "CHRR"); + info->Close=M199Close; + + CHRRAMSIZE=8192; + CHRRAM=(uint8*)FCEU_gmalloc(CHRRAMSIZE); + SetupCartCHRMapping(0x10, CHRRAM, CHRRAMSIZE, 1); + AddExState(CHRRAM, CHRRAMSIZE, 0, "CHRR"); + AddExState(EXPREGS, 4, 0, "EXPR"); } diff --git a/src/boards/208.cpp b/src/boards/208.cpp index 3bbb34d1..b2a3ed98 100644 --- a/src/boards/208.cpp +++ b/src/boards/208.cpp @@ -22,22 +22,22 @@ #include "mmc3.h" static uint8 lut[256]={ - 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59,0x59, 0x49, 0x19, 0x09, 0x59, 0x49, 0x19, 0x09, - 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59,0x51, 0x41, 0x11, 0x01, 0x51, 0x41, 0x11, 0x01, - 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59,0x59, 0x49, 0x19, 0x09, 0x59, 0x49, 0x19, 0x09, - 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59,0x51, 0x41, 0x11, 0x01, 0x51, 0x41, 0x11, 0x01, - 0x00, 0x10, 0x40, 0x50, 0x00, 0x10, 0x40, 0x50,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x18, 0x48, 0x58, 0x08, 0x18, 0x48, 0x58,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x40, 0x50, 0x00, 0x10, 0x40, 0x50,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x18, 0x48, 0x58, 0x08, 0x18, 0x48, 0x58,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59,0x58, 0x48, 0x18, 0x08, 0x58, 0x48, 0x18, 0x08, - 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59,0x50, 0x40, 0x10, 0x00, 0x50, 0x40, 0x10, 0x00, - 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59,0x58, 0x48, 0x18, 0x08, 0x58, 0x48, 0x18, 0x08, - 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59,0x50, 0x40, 0x10, 0x00, 0x50, 0x40, 0x10, 0x00, - 0x01, 0x11, 0x41, 0x51, 0x01, 0x11, 0x41, 0x51,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x19, 0x49, 0x59, 0x09, 0x19, 0x49, 0x59,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x11, 0x41, 0x51, 0x01, 0x11, 0x41, 0x51,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x19, 0x49, 0x59, 0x09, 0x19, 0x49, 0x59,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x49, 0x19, 0x09, 0x59, 0x49, 0x19, 0x09, + 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x51, 0x41, 0x11, 0x01, 0x51, 0x41, 0x11, 0x01, + 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x49, 0x19, 0x09, 0x59, 0x49, 0x19, 0x09, + 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x51, 0x41, 0x11, 0x01, 0x51, 0x41, 0x11, 0x01, + 0x00, 0x10, 0x40, 0x50, 0x00, 0x10, 0x40, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x18, 0x48, 0x58, 0x08, 0x18, 0x48, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x40, 0x50, 0x00, 0x10, 0x40, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x18, 0x48, 0x58, 0x08, 0x18, 0x48, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x58, 0x48, 0x18, 0x08, 0x58, 0x48, 0x18, 0x08, + 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x50, 0x40, 0x10, 0x00, 0x50, 0x40, 0x10, 0x00, + 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x58, 0x48, 0x18, 0x08, 0x58, 0x48, 0x18, 0x08, + 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x50, 0x40, 0x10, 0x00, 0x50, 0x40, 0x10, 0x00, + 0x01, 0x11, 0x41, 0x51, 0x01, 0x11, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x19, 0x49, 0x59, 0x09, 0x19, 0x49, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x11, 0x41, 0x51, 0x01, 0x11, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x19, 0x49, 0x59, 0x09, 0x19, 0x49, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static void M208PW(uint32 A, uint8 V) diff --git a/src/boards/222.cpp b/src/boards/222.cpp index 97e6f908..a06989de 100644 --- a/src/boards/222.cpp +++ b/src/boards/222.cpp @@ -45,7 +45,7 @@ static void M222IRQ(void) if(IRQCount>=238) { X6502_IRQBegin(FCEU_IQEXT); -// IRQa=0; +// IRQa=0; } } } @@ -75,11 +75,11 @@ static DECLFW(M222Write) case 0xD002: chr_reg[5]=V; break; case 0xE000: chr_reg[6]=V; break; case 0xE002: chr_reg[7]=V; break; -// case 0xF000: FCEU_printf("%04x:%02x %d\n",A,V,scanline); IRQa=V; if(!V)IRQPre=0; X6502_IRQEnd(FCEU_IQEXT); break; -// / case 0xF001: FCEU_printf("%04x:%02x %d\n",A,V,scanline); IRQCount=V; break; -// case 0xF002: FCEU_printf("%04x:%02x %d\n",A,V,scanline); break; -// case 0xD001: IRQa=V; X6502_IRQEnd(FCEU_IQEXT); FCEU_printf("%04x:%02x %d\n",A,V,scanline); break; -// case 0xC001: IRQPre=16; FCEU_printf("%04x:%02x %d\n",A,V,scanline); break; +// case 0xF000: FCEU_printf("%04x:%02x %d\n",A,V,scanline); IRQa=V; if(!V)IRQPre=0; X6502_IRQEnd(FCEU_IQEXT); break; +// case 0xF001: FCEU_printf("%04x:%02x %d\n",A,V,scanline); IRQCount=V; break; +// case 0xF002: FCEU_printf("%04x:%02x %d\n",A,V,scanline); break; +// case 0xD001: IRQa=V; X6502_IRQEnd(FCEU_IQEXT); FCEU_printf("%04x:%02x %d\n",A,V,scanline); break; +// case 0xC001: IRQPre=16; FCEU_printf("%04x:%02x %d\n",A,V,scanline); break; case 0xF000: IRQa=IRQCount=V; if(scanline<240) IRQCount-=8; else IRQCount+=4; X6502_IRQEnd(FCEU_IQEXT); break; } Sync(); diff --git a/src/boards/23.cpp b/src/boards/23.cpp index 78c17501..cf5927fc 100644 --- a/src/boards/23.cpp +++ b/src/boards/23.cpp @@ -33,13 +33,13 @@ static uint32 WRAMSIZE; static SFORMAT StateRegs[]= { - {prgreg, 2, "PRGREGS"}, - {chrreg, 8, "CHRREGS"}, - {®cmd, 1, "REGCMD"}, - {&irqcmd, 1, "IRQCMD"}, + {prgreg, 2, "PREG"}, + {chrreg, 8, "CREG"}, + {®cmd, 1, "CMDR"}, + {&irqcmd, 1, "CMDI"}, {&mirr, 1, "MIRR"}, {&big_bank, 1, "BIGB"}, - {&IRQCount, 2, "IRCN"}, + {&IRQCount, 2, "IRQC"}, {&IRQLatch, 1, "IRQL"}, {&IRQa, 1, "IRQA"}, {0} @@ -138,10 +138,6 @@ static void M23Power(void) SetWriteHandler(0x8000,0xFFFF,M23Write); } -static void M23Reset(void) -{ -} - void M23IRQHook(int a) { #define LCYCS 341 diff --git a/src/boards/235.cpp b/src/boards/235.cpp index 4cae9469..1d70833d 100644 --- a/src/boards/235.cpp +++ b/src/boards/235.cpp @@ -23,7 +23,7 @@ static uint16 cmdreg; static SFORMAT StateRegs[]= { - {&cmdreg, 2, "CMDREG"}, + {&cmdreg, 2, "CREG"}, {0} }; diff --git a/src/boards/253.cpp b/src/boards/253.cpp index cf3161dd..6b5e37b4 100644 --- a/src/boards/253.cpp +++ b/src/boards/253.cpp @@ -29,11 +29,11 @@ static uint32 CHRRAMSIZE; static SFORMAT StateRegs[]= { - {chrlo, 8, "CHRLO"}, - {chrhi, 8, "CHRHI"}, + {chrlo, 8, "CHRL"}, + {chrhi, 8, "CHRH"}, {prg, 2, "PRGR"}, {&mirr, 1, "MIRR"}, - {&vlock, 1, "VLOCK"}, + {&vlock, 1, "VLCK"}, {&IRQa, 4, "IRQA"}, {&IRQCount, 4, "IRQC"}, {&IRQLatch, 4, "IRQL"}, diff --git a/src/boards/43.cpp b/src/boards/43.cpp index b49115f5..c862e4c4 100644 --- a/src/boards/43.cpp +++ b/src/boards/43.cpp @@ -23,8 +23,7 @@ #include "mapinc.h" static uint8 reg; -static uint8 IRQa; -static uint32 IRQCount; +static uint32 IRQCount, IRQa; static SFORMAT StateRegs[]= { @@ -36,7 +35,7 @@ static SFORMAT StateRegs[]= static void Sync(void) { - setprg4(0x5000,16); + setprg4(0x5000,16); // Only YS-612 advdnced version setprg8(0x6000,2); setprg8(0x8000,1); setprg8(0xa000,0); @@ -47,11 +46,13 @@ static void Sync(void) static DECLFW(M43Write) { - int transo[8]={4,3,4,4,4,7,5,6}; +// int transo[8]={4,3,4,4,4,7,5,6}; + int transo[8]={4,3,5,3,6,3,7,3}; // According to hardware tests switch(A&0xf1ff) { case 0x4022: reg=transo[V&7]; Sync(); break; - case 0x8122: IRQa=V&1; IRQCount=0; break; + case 0x8122: // hacked version + case 0x4122: IRQa=V&1; X6502_IRQEnd(FCEU_IQEXT); IRQCount=0; break; // original version } } @@ -59,7 +60,6 @@ static void M43Power(void) { reg=0; Sync(); -// SetReadHandler(0x5000,0x5fff,CartBR); SetReadHandler(0x5000,0xffff,CartBR); SetWriteHandler(0x4020,0xffff,M43Write); } @@ -70,13 +70,13 @@ static void M43Reset(void) static void M43IRQHook(int a) { - IRQCount+=a; - if(IRQa) - if(IRQCount>=4096) - { - IRQa=0; - X6502_IRQBegin(FCEU_IQEXT); - } + IRQCount+=a; + if(IRQa) + if(IRQCount>=4096) + { + IRQa=0; + X6502_IRQBegin(FCEU_IQEXT); + } } static void StateRestore(int version) diff --git a/src/boards/57.cpp b/src/boards/57.cpp index ba5de0b3..970d68bd 100644 --- a/src/boards/57.cpp +++ b/src/boards/57.cpp @@ -27,7 +27,7 @@ static uint8 hrd_flag; static SFORMAT StateRegs[]= { - {&hrd_flag, 1, "DIPSW"}, + {&hrd_flag, 1, "DPSW"}, {&prg_reg, 1, "PRG"}, {&chr_reg, 1, "CHR"}, {0} diff --git a/src/boards/68.cpp b/src/boards/68.cpp index 85ab29d8..bccd46ef 100644 --- a/src/boards/68.cpp +++ b/src/boards/68.cpp @@ -32,8 +32,8 @@ static SFORMAT StateRegs[]= {&nt2, 1, "NT2"}, {&mirr, 1, "MIRR"}, {&prg_reg, 1, "PRG"}, - {&kogame, 1, "KOGAME"}, - {&count, 4, "COUNT"}, + {&kogame, 1, "KGME"}, + {&count, 4, "CNT"}, {chr_reg, 4, "CHR"}, {0} }; diff --git a/src/boards/8157.cpp b/src/boards/8157.cpp index 85209bcd..76ba3c37 100644 --- a/src/boards/8157.cpp +++ b/src/boards/8157.cpp @@ -25,7 +25,7 @@ static uint8 invalid_data; static SFORMAT StateRegs[]= { {&invalid_data, 1, "INVD"}, - {&cmdreg, 2, "CMDREG"}, + {&cmdreg, 2, "CREG"}, {0} }; diff --git a/src/boards/8237.cpp b/src/boards/8237.cpp index 4c0aab77..1507362b 100644 --- a/src/boards/8237.cpp +++ b/src/boards/8237.cpp @@ -181,7 +181,7 @@ void UNL8237_Init(CartInfo *info) pwrap=UNL8237PW; info->Power=UNL8237Power; AddExState(EXPREGS, 3, 0, "EXPR"); - AddExState(&cmdin, 1, 0, "CMDIN"); + AddExState(&cmdin, 1, 0, "CMDI"); } void UNL8237A_Init(CartInfo *info) @@ -191,5 +191,5 @@ void UNL8237A_Init(CartInfo *info) pwrap=UNL8237APW; info->Power=UNL8237Power; AddExState(EXPREGS, 3, 0, "EXPR"); - AddExState(&cmdin, 1, 0, "CMDIN"); + AddExState(&cmdin, 1, 0, "CMDI"); } diff --git a/src/boards/830118C.cpp b/src/boards/830118C.cpp index 4ab64892..8073b778 100644 --- a/src/boards/830118C.cpp +++ b/src/boards/830118C.cpp @@ -23,8 +23,6 @@ #include "mapinc.h" #include "mmc3.h" -static uint8 reset_flag = 0; - static void BMC830118CCW(uint32 A, uint8 V) { setchr1(A,(V&0x7F)|((EXPREGS[0]&0x0c)<<5)); diff --git a/src/boards/90.cpp b/src/boards/90.cpp index d9675470..bcd7c836 100644 --- a/src/boards/90.cpp +++ b/src/boards/90.cpp @@ -52,15 +52,15 @@ static uint8 tekker; static SFORMAT Tek_StateRegs[]={ {&IRQMode, 1, "IRQM"}, {&IRQPre, 1, "IRQP"}, - {&IRQPreSize, 1, "IRQS"}, + {&IRQPreSize, 1, "IRQR"}, {&IRQCount, 1, "IRQC"}, {&IRQXOR, 1, "IRQX"}, - {&IRQa, 1, "IRQa"}, + {&IRQa, 1, "IRQA"}, {mul, 2, "MUL"}, {®ie, 1, "REGI"}, {tkcom, 4, "TKCO"}, {prgb, 4, "PRGB"}, - {chr, 2, "CHRA"}, + {chr, 2, "CLTC"}, {chrlow, 4, "CHRL"}, {chrhigh, 8, "CHRH"}, {&names[0], 2|FCEUSTATE_RLSB, "NMS0"}, diff --git a/src/boards/a9746.cpp b/src/boards/a9746.cpp index e7289042..58cc9e8c 100644 --- a/src/boards/a9746.cpp +++ b/src/boards/a9746.cpp @@ -1,109 +1,4 @@ -/* FCE Ultra - NES/Famicom Emulator - * - * Copyright notice for this file: - * Copyright (C) 2007 CaH4e3 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -/* -#include "mapinc.h" - -static uint8 chr_cmd, prg_cmd, mirror; -static uint8 chr_reg[6], prg_reg[4]; - -static SFORMAT StateRegs[]= -{ - {&chr_cmd, 1, "CHRCMD"}, - {&prg_cmd, 1, "PRGCMD"}, - {&mirror, 1, "MIRR"}, - {chr_reg, 6, "CREGS"}, - {prg_reg, 4, "PREGS"}, - {0} -}; - -static void Sync(void) -{ - setprg8(0x8000, prg_reg[0]); - setprg8(0xA000, prg_reg[1]); - setprg8(0xC000, prg_reg[2]); - setprg8(0xE000, prg_reg[3]); - - setchr2(0x0000, chr_reg[0]); - setchr2(0x0800, chr_reg[1]); - setchr1(0x1000, chr_reg[2]); - setchr1(0x1400, chr_reg[3]); - setchr1(0x1800, chr_reg[4]); - setchr1(0x1c00, chr_reg[5]); - - setmirror(mirror); -} - -static DECLFW(UNLA9746Write) -{ - uint8 bits_rev; -// FCEU_printf("write raw %04x:%02x\n",A,V); - switch (A&0xE003) - { -// case 0xA000: mirror = V; break; - case 0x8000: chr_cmd = V; prg_cmd = 0; break; - case 0x8002: prg_cmd = V; chr_cmd = 0; break; - case 0x8001: bits_rev = ((V&0x20)>>5)|((V&0x10)>>3)|((V&0x08)>>1)|((V&0x04)<<1); -// if(prg_cmd>0x23) -// prg_reg[(0x26-prg_cmd)&3] = bits_rev; - switch(chr_cmd) - { - case 0x08: chr_reg[0] = (V << 3); break; - case 0x09: chr_reg[0] = chr_reg[0]|(V >> 2); break; - case 0x0e: chr_reg[1] = (V << 3); break; - case 0x0d: chr_reg[1] = chr_reg[1]|(V >> 2); break; - case 0x12: chr_reg[2] = (V << 4); break; - case 0x11: chr_reg[2] = chr_reg[2]|(V >> 1); FCEU_printf("Sync CHR 0x1000:%02x\n",chr_reg[2]); break; - case 0x16: chr_reg[3] = (V << 4); break; - case 0x15: chr_reg[3] = chr_reg[3]|(V >> 1); break; - case 0x1a: chr_reg[4] = (V << 4); break; - case 0x19: chr_reg[4] = chr_reg[4]|(V >> 1); break; - case 0x1e: chr_reg[5] = (V << 4); break; - case 0x1d: chr_reg[5] = chr_reg[5]|(V >> 1); break; - } - Sync(); - break; - } -} - -static void UNLA9746Power(void) -{ - prg_reg[2]=~1; - prg_reg[3]=~0; - Sync(); - SetReadHandler(0x8000,0xFFFF,CartBR); - SetWriteHandler(0x8000,0xbfff,UNLA9746Write); -} - -static void StateRestore(int version) -{ - Sync(); -} - -void UNLA9746_Init(CartInfo *info) -{ - info->Power=UNLA9746Power; - AddExState(&StateRegs, ~0, 0, 0); -} -/**/ - /* FCE Ultra - NES/Famicom Emulator * * Copyright notice for this file: @@ -183,4 +78,4 @@ void UNLA9746_Init(CartInfo *info) info->Power=UNLA9746Power; AddExState(EXPREGS, 6, 0, "EXPR"); } -/**/ + diff --git a/src/boards/addrlatch.cpp b/src/boards/addrlatch.cpp index 1b7d0ade..63d23149 100644 --- a/src/boards/addrlatch.cpp +++ b/src/boards/addrlatch.cpp @@ -27,7 +27,7 @@ static readfunc defread; static DECLFW(LatchWrite) { - FCEU_printf("%04x:%02x\n",A,V); +// FCEU_printf("%04x:%02x\n",A,V); latche=A; WSync(); } @@ -119,6 +119,41 @@ void BMCD1038_Init(CartInfo *info) } +//------------------ UNL43272 --------------------------- +// mapper much complex, including 16K bankswitching +static void UNL43272Sync(void) +{ + if((latche&0x81) == 0x81) + { + setprg32(0x8000,(latche&0x38)>>3); + } + else + FCEU_printf("unrecognized command %04!\n",latche); + setchr8(0); + setmirror(0); +} + +static DECLFR(UNL43272Read) +{ + if(latche&0x400) + return CartBR(A & 0xFE); + else + return CartBR(A); +} + +static void UNL43272Reset(void) +{ + latche = 0; + UNL43272Sync(); +} + +void UNL43272_Init(CartInfo *info) +{ + Latch_Init(info, UNL43272Sync, UNL43272Read, 0x81, 0x8000, 0xFFFF); + info->Reset=UNL43272Reset; + AddExState(&dipswitch, 1, 0, "DIPSW"); +} + //------------------ Map 058 --------------------------- static void BMCGK192Sync(void) @@ -139,6 +174,39 @@ void BMCGK192_Init(CartInfo *info) Latch_Init(info, BMCGK192Sync, 0, 0, 0x8000, 0xFFFF); } +//------------------ Map 092 --------------------------- +// Another two-in-one mapper, two Jaleco carts uses similar +// hardware, but with different wiring. +// Original code provided by LULU +// Additionally, PCB contains DSP extra sound chip, used for voice samples (unemulated) + +static void M92Sync(void) +{ + uint8 reg = latche & 0xF0; + setprg16(0x8000,0); + if(latche>=0x9000) + { + switch (reg) + { + case 0xD0: setprg16(0xc000, latche & 15); break; + case 0xE0: setchr8(latche & 15); break; + } + } + else + { + switch (reg) + { + case 0xB0: setprg16(0xc000, latche & 15); break; + case 0x70: setchr8(latche & 15); break; + } + } +} + +void Mapper92_Init(CartInfo *info) +{ + Latch_Init(info, M92Sync, 0, 0x80B0, 0x8000, 0xFFFF); +} + //------------------ Map 200 --------------------------- static void M200Sync(void) @@ -170,3 +238,49 @@ void BMC190in1_Init(CartInfo *info) Latch_Init(info, BMC190in1Sync, 0, 0, 0x8000, 0xFFFF); } +//-------------- BMC810544-C-A1 ------------------------ + +static void BMC810544CA1Sync(void) +{ + uint32 bank = latche>>7; + if(latche&0x40) + setprg32(0x8000,bank); + else + { + setprg16(0x8000,(bank<<1)|((latche>>5)&1)); + setprg16(0xC000,(bank<<1)|((latche>>5)&1)); + } + setchr8(latche&0x0f); + setmirror(((latche>>4)&1)^1); +} + +void BMC810544CA1_Init(CartInfo *info) +{ + Latch_Init(info, BMC810544CA1Sync, 0, 0, 0x8000, 0xFFFF); +} + +//-------------- BMCNTD-03 ------------------------ + +static void BMCNTD03Sync(void) +{ + // 1PPP Pmcc spxx xccc + // 1000 0000 0000 0000 v + // 1001 1100 0000 0100 h + // 1011 1010 1100 0100 + uint32 prg = ((latche>>10)&0x1e); + uint32 chr = ((latche&0x0300)>>5)|(latche&7); + if(latche&0x80) + { + setprg16(0x8000,prg|((latche>>6)&1)); + setprg16(0xC000,prg|((latche>>6)&1)); + } + else + setprg32(0x8000,prg>>1); + setchr8(chr); + setmirror(((latche>>10)&1)^1); +} + +void BMCNTD03_Init(CartInfo *info) +{ + Latch_Init(info, BMCNTD03Sync, 0, 0, 0x8000, 0xFFFF); +} diff --git a/src/boards/bandai.cpp b/src/boards/bandai.cpp index e48162ef..7501299b 100644 --- a/src/boards/bandai.cpp +++ b/src/boards/bandai.cpp @@ -102,17 +102,25 @@ static DECLFW(BandaiWrite) } } -DECLFR(BandaiRead) -{ - return 0; -} - static void BandaiPower(void) { BandaiSync(); SetReadHandler(0x8000,0xFFFF,CartBR); SetWriteHandler(0x6000,0xFFFF,BandaiWrite); - SetReadHandler(0x6000,0x7FFF,BandaiRead); +} + +static void StateRestore(int version) +{ + BandaiSync(); +} + +void Mapper16_Init(CartInfo *info) +{ + is153=0; + info->Power=BandaiPower; + MapIRQHook=BandaiIRQHook; + GameStateRestore=StateRestore; + AddExState(&StateRegs, ~0, 0, 0); } static void M153Power(void) @@ -133,26 +141,6 @@ static void M153Close(void) WRAM=NULL; } -static void StateRestore(int version) -{ - BandaiSync(); -} - -void Mapper16_Init(CartInfo *info) -{ - is153=0; - info->Power=BandaiPower; - MapIRQHook=BandaiIRQHook; - GameStateRestore=StateRestore; - AddExState(&StateRegs, ~0, 0, 0); -} - -void Mapper159_Init(CartInfo *info) -{ - Mapper16_Init(info); -} - - void Mapper153_Init(CartInfo *info) { is153=1; @@ -174,3 +162,190 @@ void Mapper153_Init(CartInfo *info) GameStateRestore=StateRestore; AddExState(&StateRegs, ~0, 0, 0); } + +// Datach Barcode Battler + +static uint8 BarcodeData[256]; +static int BarcodeReadPos; +static int BarcodeCycleCount; +static uint32 BarcodeOut; + +int FCEUI_DatachSet(const uint8 *rcode) +{ + int prefix_parity_type[10][6] = { + {0,0,0,0,0,0}, {0,0,1,0,1,1}, {0,0,1,1,0,1}, {0,0,1,1,1,0}, + {0,1,0,0,1,1}, {0,1,1,0,0,1}, {0,1,1,1,0,0}, {0,1,0,1,0,1}, + {0,1,0,1,1,0}, {0,1,1,0,1,0} + }; + int data_left_odd[10][7] = { + {0,0,0,1,1,0,1}, {0,0,1,1,0,0,1}, {0,0,1,0,0,1,1}, {0,1,1,1,1,0,1}, + {0,1,0,0,0,1,1}, {0,1,1,0,0,0,1}, {0,1,0,1,1,1,1}, {0,1,1,1,0,1,1}, + {0,1,1,0,1,1,1}, {0,0,0,1,0,1,1} + }; + int data_left_even[10][7] = { + {0,1,0,0,1,1,1}, {0,1,1,0,0,1,1}, {0,0,1,1,0,1,1}, {0,1,0,0,0,0,1}, + {0,0,1,1,1,0,1}, {0,1,1,1,0,0,1}, {0,0,0,0,1,0,1}, {0,0,1,0,0,0,1}, + {0,0,0,1,0,0,1}, {0,0,1,0,1,1,1} + }; + int data_right[10][7] = { + {1,1,1,0,0,1,0}, {1,1,0,0,1,1,0}, {1,1,0,1,1,0,0}, {1,0,0,0,0,1,0}, + {1,0,1,1,1,0,0}, {1,0,0,1,1,1,0}, {1,0,1,0,0,0,0}, {1,0,0,0,1,0,0}, + {1,0,0,1,0,0,0}, {1,1,1,0,1,0,0} + }; + uint8 code[13+1]; + uint32 tmp_p=0; + int i, j; + int len; + + for(i=len=0;i<13;i++) + { + if(!rcode[i]) break; + if((code[i]=rcode[i]-'0') > 9) + return(0); + len++; + } + if(len!=13 && len!=12 && len!=8 && len!=7) return(0); + + #define BS(x) BarcodeData[tmp_p]=x;tmp_p++ + + for(j=0;j<32;j++) + { + BS(0x00); + } + + /* Left guard bars */ + BS(1); BS(0); BS(1); + + if(len==13 || len==12) + { + uint32 csum; + + for(i=0;i<6;i++) + if(prefix_parity_type[code[0]][i]) + { + for(j=0;j<7;j++) + { + BS(data_left_even[code[i+1]][j]); + } + } + else + for(j=0;j<7;j++) + { + BS(data_left_odd[code[i+1]][j]); + } + + /* Center guard bars */ + BS(0); BS(1); BS(0); BS(1); BS(0); + + for(i=7;i<12;i++) + for(j=0;j<7;j++) + { + BS(data_right[code[i]][j]); + } + csum=0; + for(i=0;i<12;i++) csum+=code[i]*((i&1)?3:1); + csum=(10-(csum%10))%10; + for(j=0;j<7;j++) + { + BS(data_right[csum][j]); + } + + } + else if(len==8 || len==7) + { + uint32 csum=0; + + for(i=0;i<7;i++) csum+=(i&1)?code[i]:(code[i]*3); + + csum=(10-(csum%10))%10; + + for(i=0;i<4;i++) + for(j=0;j<7;j++) + { + BS(data_left_odd[code[i]][j]); + } + + + /* Center guard bars */ + BS(0); BS(1); BS(0); BS(1); BS(0); + + for(i=4;i<7;i++) + for(j=0;j<7;j++) + { + BS(data_right[code[i]][j]); + } + + for(j=0;j<7;j++) + { BS(data_right[csum][j]);} + + } + + /* Right guard bars */ + BS(1); BS(0); BS(1); + + for(j=0;j<32;j++) + { + BS(0x00); + } + + BS(0xFF); + + #undef BS + + BarcodeReadPos=0; + BarcodeOut=0x8; + BarcodeCycleCount=0; + return(1); +} + +static void BarcodeIRQHook(int a) +{ + BandaiIRQHook(a); + + BarcodeCycleCount+=a; + + if(BarcodeCycleCount >= 1000) + { + BarcodeCycleCount -= 1000; + if(BarcodeData[BarcodeReadPos]==0xFF) + { + BarcodeOut=0; + } + else + { + BarcodeOut=(BarcodeData[BarcodeReadPos]^1)<<3; + BarcodeReadPos++; + } + } +} + +static DECLFR(BarcodeRead) +{ + return BarcodeOut; +} + +static void M157Power(void) +{ + BarcodeData[0]=0xFF; + BarcodeReadPos=0; + BarcodeOut=0; + BarcodeCycleCount=0; + + BandaiSync(); + + SetWriteHandler(0x6000,0xFFFF,BandaiWrite); + SetReadHandler(0x6000,0x7FFF,BarcodeRead); + SetReadHandler(0x8000,0xFFFF,CartBR); +} + +void Mapper157_Init(CartInfo *info) +{ + is153=0; + info->Power=M157Power; + MapIRQHook=BarcodeIRQHook; + + GameInfo->cspecial = SIS_DATACH; + + GameStateRestore=StateRestore; + AddExState(&StateRegs, ~0, 0, 0); +} diff --git a/src/boards/bmc42in1r.cpp b/src/boards/bmc42in1r.cpp index bcbdfc1a..b596ddd1 100644 --- a/src/boards/bmc42in1r.cpp +++ b/src/boards/bmc42in1r.cpp @@ -18,25 +18,28 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - * BMC 42-in-1 - * it seems now, mapper not reset-based, - * tested on real hardware and it does menus switch by pressing just Select, not Reset - * new registers behaviour proven this too + * BMC 42-in-1 "reset switch" + "select switch" * */ #include "mapinc.h" -static uint8 latche[2]; +static uint8 isresetbased = 0; +static uint8 latche[2], reset; static SFORMAT StateRegs[]= { - {&latche, sizeof(latche), "LATCHE"}, + {&reset, 1, "RST"}, + {latche, 2, "LATC"}, {0} }; static void Sync(void) { - uint8 bank = (latche[0]&0x1f)|((latche[0]&0x80)>>2)|((latche[1]&1))<<6; + uint8 bank; + if(isresetbased) + bank = (latche[0]&0x1f)|(reset<<5)|((latche[1]&1)<<6); + else + bank = (latche[0]&0x1f)|((latche[0]&0x80)>>2)|((latche[1]&1)<<6); if(!(latche[0] & 0x20)) setprg32(0x8000,bank >> 1); else @@ -56,7 +59,7 @@ static DECLFW(M226Write) static void M226Power(void) { - latche[0] = latche[1] = 0; + latche[0] = latche[1] = reset = 0; Sync(); SetWriteHandler(0x8000,0xFFFF,M226Write); SetReadHandler(0x8000,0xFFFF,CartBR); @@ -69,8 +72,23 @@ static void StateRestore(int version) void Mapper226_Init(CartInfo *info) { + isresetbased = 0; info->Power=M226Power; AddExState(&StateRegs, ~0, 0, 0); GameStateRestore=StateRestore; } +static void BMC42in1Reset(void) +{ + reset ^= 1; + Sync(); +} + +void BMC42in1r_Init(CartInfo *info) +{ + isresetbased = 1; + info->Power=M226Power; + info->Reset=BMC42in1Reset; + AddExState(&StateRegs, ~0, 0, 0); + GameStateRestore=StateRestore; +} diff --git a/src/boards/bmc64in1nr.cpp b/src/boards/bmc64in1nr.cpp index 4f90c9f5..e2fa5c15 100644 --- a/src/boards/bmc64in1nr.cpp +++ b/src/boards/bmc64in1nr.cpp @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - * BMC 42-in-1 reset switch + * BMC 42-in-1 "reset switch" type */ #include "mapinc.h" diff --git a/src/boards/bmc70in1.cpp b/src/boards/bmc70in1.cpp index a5998bb0..f34c717a 100644 --- a/src/boards/bmc70in1.cpp +++ b/src/boards/bmc70in1.cpp @@ -29,7 +29,7 @@ static uint8 mirroring; static SFORMAT StateRegs[]= { {&large_bank, 1, "LB"}, - {&hw_switch, 1, "DIPSW"}, + {&hw_switch, 1, "DPSW"}, {&prg_bank, 1, "PRG"}, {&chr_bank, 1, "CHR"}, {&bank_mode, 1, "BM"}, @@ -59,10 +59,10 @@ static void Sync(void) static DECLFR(BMC70in1Read) { if(bank_mode==0x10) -// if(is_large_banks) +// if(is_large_banks) return CartBR((A&0xFFF0)|hw_switch); -// else -// return CartBR((A&0xFFF0)|hw_switch); +// else +// return CartBR((A&0xFFF0)|hw_switch); else return CartBR(A); } diff --git a/src/boards/bs-5.cpp b/src/boards/bs-5.cpp index 2b4bc7f2..0fc063db 100644 --- a/src/boards/bs-5.cpp +++ b/src/boards/bs-5.cpp @@ -26,8 +26,8 @@ static uint8 dip_switch; static SFORMAT StateRegs[]= { - {reg_prg, 4, "PREGS"}, - {reg_chr, 4, "CREGS"}, + {reg_prg, 4, "PREG"}, + {reg_chr, 4, "CREG"}, {0} }; diff --git a/src/boards/datalatch.cpp b/src/boards/datalatch.cpp index 3275bd20..908cf54e 100644 --- a/src/boards/datalatch.cpp +++ b/src/boards/datalatch.cpp @@ -29,11 +29,11 @@ static void(*WSync)(void); static DECLFW(LatchWrite) { -// FCEU_printf("bs %04x %02x\n",A,V); +// FCEU_printf("bs %04x %02x\n",A,V); if(bus_conflict) latche=V&CartBR(A); else - latche=V; + latche=V; WSync(); } @@ -88,57 +88,88 @@ static void Latch_Init(CartInfo *info, void (*proc)(void), uint8 init, uint16 ad AddExState(WRAM, WRAMSIZE, 0, "WRAM"); } AddExState(&latche, 1, 0, "LATC"); + AddExState(&bus_conflict, 1, 0, "BUSC"); } -//------------------ CPROM --------------------------- +//------------------ Map 0 --------------------------- -static void CPROMSync(void) +#ifdef DEBUG_MAPPER +static DECLFW(NROMWrite) { - setchr4(0x0000,0); - setchr4(0x1000,latche&3); + FCEU_printf("bs %04x %02x\n",A,V); + CartBW(A,V); +} +#endif + +static void NROMPower(void) +{ + setprg8r(0x10,0x6000,0); // Famili BASIC (v3.0) need it (uses only 4KB), FP-BASIC uses 8KB setprg16(0x8000,0); - setprg16(0xC000,1); + setprg16(0xC000,~0); + setchr8(0); + + SetReadHandler(0x6000,0x7FFF,CartBR); + SetWriteHandler(0x6000,0x7FFF,CartBW); + SetReadHandler(0x8000,0xFFFF,CartBR); + + #ifdef DEBUG_MAPPER + SetWriteHandler(0x4020,0xFFFF,NROMWrite); + #endif } -void CPROM_Init(CartInfo *info) +void NROM_Init(CartInfo *info) { - Latch_Init(info, CPROMSync, 0, 0x8000, 0xFFFF, 0, 0); + info->Power=NROMPower; + info->Close=LatchClose; + + WRAMSIZE=8192; + WRAM=(uint8*)FCEU_gmalloc(WRAMSIZE); + SetupCartPRGMapping(0x10,WRAM,WRAMSIZE,1); + if(info->battery) + { + info->SaveGame[0]=WRAM; + info->SaveGameLen[0]=WRAMSIZE; + } + AddExState(WRAM, WRAMSIZE, 0, "WRAM"); } -//------------------ Map 184 --------------------------- +//------------------ Map 2 --------------------------- -static void M184Sync(void) +static void UNROMSync(void) { - setchr4(0x0000,latche); - setchr4(0x1000,latche>>4); - setprg16(0x8000,0); - setprg16(0xC000,1); + static uint32 mirror_in_use = 0; + if(PRGsize[0] <= 128 * 1024) + { + setprg16(0x8000,latche&0x7); + if(latche&8) mirror_in_use = 1; + if(mirror_in_use) + setmirror(((latche >> 3)&1)^1); // Higway Star Hacked mapper + } else + setprg16(0x8000,latche&0xf); + setprg16(0xc000,~0); + setchr8(0); } -void Mapper184_Init(CartInfo *info) +void UNROM_Init(CartInfo *info) { - Latch_Init(info, M184Sync, 0, 0x6000, 0x7FFF, 0, 0); + Latch_Init(info, UNROMSync, 0, 0x8000, 0xFFFF, 0, 1); } -//------------------ CNROM --------------------------- +//------------------ Map 3 --------------------------- static void CNROMSync(void) { - //mbg 8/10/08 - fixed this so that large homebrew roms would work. - //setchr8(latche&3); - setchr8(latche); - setprg16(0x8000,0); - setprg16(0xC000,1); + setchr8(latche); + setprg32(0x8000,0); setprg8r(0x10,0x6000,0); // Hayauchy IGO uses 2Kb or RAM } void CNROM_Init(CartInfo *info) { - bool busc = MasterRomInfoParams.ContainsKey("busc"); - Latch_Init(info, CNROMSync, 0, 0x8000, 0xFFFF, 1, busc?1:0); + Latch_Init(info, CNROMSync, 0, 0x8000, 0xFFFF, 1, 1); } -//------------------ ANROM --------------------------- +//------------------ Map 7 --------------------------- static void ANROMSync() { @@ -152,101 +183,18 @@ void ANROM_Init(CartInfo *info) Latch_Init(info, ANROMSync, 0, 0x8000, 0xFFFF, 0, 0); } -//------------------ Map 70 --------------------------- +//------------------ Map 8 --------------------------- -static void M70Sync() +static void M8Sync() { - setprg16(0x8000,latche>>4); - setprg16(0xc000,~0); - setchr8(latche&0xf); + setprg16(0x8000,latche>>3); + setprg16(0xc000,1); + setchr8(latche&3); } -void Mapper70_Init(CartInfo *info) +void Mapper8_Init(CartInfo *info) { - Latch_Init(info, M70Sync, 0, 0x8000, 0xFFFF, 0, 0); -} - -//------------------ Map 152 --------------------------- - -static void M152Sync() -{ - setprg16(0x8000,(latche>>4)&7); - setprg16(0xc000,~0); - setchr8(latche&0xf); - setmirror(MI_0+((latche>>7)&1)); /* Saint Seiya...hmm. */ -} - -void Mapper152_Init(CartInfo *info) -{ - Latch_Init(info, M152Sync, 0, 0x8000, 0xFFFF, 0, 0); -} - -//------------------ Map 78 --------------------------- -/* Should be two separate emulation functions for this "mapper". Sigh. URGE TO KILL RISING. */ -static void M78Sync() -{ - setprg16(0x8000,(latche&7)); - setprg16(0xc000,~0); - setchr8(latche>>4); - setmirror(MI_0+((latche>>3)&1)); -} - -void Mapper78_Init(CartInfo *info) -{ - Latch_Init(info, M78Sync, 0, 0x8000, 0xFFFF, 0, 0); -} - -//------------------ MHROM --------------------------- - -static void MHROMSync(void) -{ - setprg32(0x8000,latche>>4); - setchr8(latche&0xf); -} - -void MHROM_Init(CartInfo *info) -{ - Latch_Init(info, MHROMSync, 0, 0x8000, 0xFFFF, 0, 0); -} - -void Mapper140_Init(CartInfo *info) -{ - Latch_Init(info, MHROMSync, 0, 0x6000, 0x7FFF, 0, 0); -} - -void Mapper240_Init(CartInfo *info) -{ - Latch_Init(info, MHROMSync, 0, 0x4020, 0x5FFF, 0, 0); - // need SRAM. -} - -//------------------ Map 87 --------------------------- - -static void M87Sync(void) -{ - setprg16(0x8000,0); - setprg16(0xC000,1); - setchr8(((latche>>1)&1)|((latche<<1)&2)); -// setchr8(latche); -} - -void Mapper87_Init(CartInfo *info) -{ - Latch_Init(info, M87Sync, ~0, 0x6000, 0xFFFF, 0, 0); -} - -//------------------ Map 101 --------------------------- - -static void M101Sync(void) -{ - setprg16(0x8000,0); - setprg16(0xC000,1); - setchr8(latche); -} - -void Mapper101_Init(CartInfo *info) -{ - Latch_Init(info, M101Sync, ~0, 0x6000, 0x7FFF, 0, 0); + Latch_Init(info, M8Sync, 0, 0x8000, 0xFFFF, 0, 0); } //------------------ Map 11 --------------------------- @@ -267,17 +215,18 @@ void Mapper144_Init(CartInfo *info) Latch_Init(info, M11Sync, 0, 0x8001, 0xFFFF, 0, 0); } -//------------------ Map 38 --------------------------- +//------------------ Map 13 --------------------------- -static void M38Sync(void) +static void CPROMSync(void) { - setprg32(0x8000,latche&3); - setchr8(latche>>2); + setchr4(0x0000,0); + setchr4(0x1000,latche&3); + setprg32(0x8000,0); } -void Mapper38_Init(CartInfo *info) +void CPROM_Init(CartInfo *info) { - Latch_Init(info, M38Sync, 0, 0x7000, 0x7FFF, 0, 0); + Latch_Init(info, CPROMSync, 0, 0x8000, 0xFFFF, 0, 0); } //------------------ Map 36 --------------------------- @@ -292,18 +241,101 @@ void Mapper36_Init(CartInfo *info) { Latch_Init(info, M36Sync, 0, 0x8400, 0xfffe, 0, 0); } -//------------------ UNROM --------------------------- -static void UNROMSync(void) +//------------------ Map 38 --------------------------- + +static void M38Sync(void) { - setprg16(0x8000,latche); - setprg16(0xc000,~0); - setchr8(0); + setprg32(0x8000,latche&3); + setchr8(latche>>2); } -void UNROM_Init(CartInfo *info) +void Mapper38_Init(CartInfo *info) { - Latch_Init(info, UNROMSync, 0, 0x8000, 0xFFFF, 0, 1); + Latch_Init(info, M38Sync, 0, 0x7000, 0x7FFF, 0, 0); +} + +//------------------ Map 66 --------------------------- + +static void MHROMSync(void) +{ + setprg32(0x8000,latche>>4); + setchr8(latche&0xf); +} + +void MHROM_Init(CartInfo *info) +{ + Latch_Init(info, MHROMSync, 0, 0x8000, 0xFFFF, 0, 0); +} + +//------------------ Map 70 --------------------------- + +static void M70Sync() +{ + setprg16(0x8000,latche>>4); + setprg16(0xc000,~0); + setchr8(latche&0xf); +} + +void Mapper70_Init(CartInfo *info) +{ + Latch_Init(info, M70Sync, 0, 0x8000, 0xFFFF, 0, 0); +} + +//------------------ Map 78 --------------------------- +/* Should be two separate emulation functions for this "mapper". Sigh. URGE TO KILL RISING. */ +static void M78Sync() +{ + setprg16(0x8000,(latche&7)); + setprg16(0xc000,~0); + setchr8(latche>>4); + setmirror(MI_0+((latche>>3)&1)); +} + +void Mapper78_Init(CartInfo *info) +{ + Latch_Init(info, M78Sync, 0, 0x8000, 0xFFFF, 0, 0); +} + +//------------------ Map 86 --------------------------- + +static void M86Sync(void) +{ + setprg32(0x8000,(latche >> 4) & 3); + setchr8((latche & 3) | ((latche >> 4) & 4)); +} + +void Mapper86_Init(CartInfo *info) +{ + Latch_Init(info, M86Sync, ~0, 0x6000, 0x6FFF, 0, 0); +} + +//------------------ Map 87 --------------------------- + +static void M87Sync(void) +{ + setprg32(0x8000,0); + setchr8(((latche>>1)&1)|((latche<<1)&2)); +} + +void Mapper87_Init(CartInfo *info) +{ + Latch_Init(info, M87Sync, ~0, 0x6000, 0xFFFF, 0, 0); +} + +//------------------ Map 89 --------------------------- + +static void M89Sync(void) +{ + setprg16(0x8000,(latche >> 4) & 7); + setprg16(0xc000, ~0); + setchr8((latche & 7) | ((latche >> 4) & 8)); + setmirror(MI_0 + ((latche >> 3) & 1)); +} + +void Mapper89_Init(CartInfo *info) +{ + Latch_Init(info, M89Sync, 0, 0x8000, 0xFFFF, 0, 0); } //------------------ Map 93 --------------------------- @@ -334,18 +366,39 @@ void Mapper94_Init(CartInfo *info) Latch_Init(info, M94Sync, 0, 0x8000, 0xFFFF, 0, 0); } -//------------------ Map 180 --------------------------- +//------------------ Map 97 --------------------------- -static void M180Sync(void) +static void M97Sync(void) { - setprg16(0x8000,0); - setprg16(0xc000,latche); setchr8(0); + setprg16(0x8000,~0); + setprg16(0xc000,latche & 15); + switch(latche >> 6) + { + case 0: break; + case 1: setmirror(MI_H); break; + case 2: setmirror(MI_V); break; + case 3: break; + } + setchr8(((latche>>1)&1)|((latche<<1)&2)); } -void Mapper180_Init(CartInfo *info) +void Mapper97_Init(CartInfo *info) { - Latch_Init(info, M180Sync, 0, 0x8000, 0xFFFF, 0, 0); + Latch_Init(info, M97Sync, ~0, 0x8000, 0xFFFF, 0, 0); +} + +//------------------ Map 101 --------------------------- + +static void M101Sync(void) +{ + setprg32(0x8000,0); + setchr8(latche); +} + +void Mapper101_Init(CartInfo *info) +{ + Latch_Init(info, M101Sync, ~0, 0x6000, 0x7FFF, 0, 0); } //------------------ Map 107 --------------------------- @@ -367,7 +420,7 @@ static void M113Sync(void) { setprg32(0x8000,(latche>>3)&7); setchr8(((latche>>3)&8)|(latche&7)); -// setmirror(latche>>7); // only for HES 6in1 +// setmirror(latche>>7); // only for HES 6in1 } void Mapper113_Init(CartInfo *info) @@ -375,6 +428,64 @@ void Mapper113_Init(CartInfo *info) Latch_Init(info, M113Sync, 0, 0x4100, 0x7FFF, 0, 0); } +//------------------ Map 140 --------------------------- + +void Mapper140_Init(CartInfo *info) +{ + Latch_Init(info, MHROMSync, 0, 0x6000, 0x7FFF, 0, 0); +} + +//------------------ Map 152 --------------------------- + +static void M152Sync() +{ + setprg16(0x8000,(latche>>4)&7); + setprg16(0xc000,~0); + setchr8(latche&0xf); + setmirror(MI_0+((latche>>7)&1)); /* Saint Seiya...hmm. */ +} + +void Mapper152_Init(CartInfo *info) +{ + Latch_Init(info, M152Sync, 0, 0x8000, 0xFFFF, 0, 0); +} + +//------------------ Map 180 --------------------------- + +static void M180Sync(void) +{ + setprg16(0x8000,0); + setprg16(0xc000,latche); + setchr8(0); +} + +void Mapper180_Init(CartInfo *info) +{ + Latch_Init(info, M180Sync, 0, 0x8000, 0xFFFF, 0, 0); +} + +//------------------ Map 184 --------------------------- + +static void M184Sync(void) +{ + setchr4(0x0000,latche); + setchr4(0x1000,latche>>4); + setprg32(0x8000,0); +} + +void Mapper184_Init(CartInfo *info) +{ + Latch_Init(info, M184Sync, 0, 0x6000, 0x7FFF, 0, 0); +} + +//------------------ Map 240 --------------------------- + +void Mapper240_Init(CartInfo *info) +{ + Latch_Init(info, MHROMSync, 0, 0x4020, 0x5FFF, 0, 0); + // need SRAM. +} + //------------------ A65AS --------------------------- // actually, there is two cart in one... First have extra mirroring @@ -403,44 +514,3 @@ void BMCA65AS_Init(CartInfo *info) Latch_Init(info, BMCA65ASSync, 0, 0x8000, 0xFFFF, 0, 0); } -//------------------ NROM --------------------------- - -#ifdef DEBUG_MAPPER -static DECLFW(WriteHandler) -{ - FCEU_printf("bs %04x %02x\n",A,V); - CartBW(A,V); -} -#endif - -static void NROMPower(void) -{ - setprg8r(0x10,0x6000,0); // Famili BASIC (v3.0) need it (uses only 4KB), FP-BASIC uses 8KB - setprg16(0x8000,0); - setprg16(0xC000,~0); - setchr8(0); - - SetReadHandler(0x6000,0x7FFF,CartBR); - SetWriteHandler(0x6000,0x7FFF,CartBW); - SetReadHandler(0x8000,0xFFFF,CartBR); - - #ifdef DEBUG_MAPPER - SetWriteHandler(0x4020,0xFFFF,WriteHandler); - #endif -} - -void NROM_Init(CartInfo *info) -{ - info->Power=NROMPower; - info->Close=LatchClose; - - WRAMSIZE=8192; - WRAM=(uint8*)FCEU_gmalloc(WRAMSIZE); - SetupCartPRGMapping(0x10,WRAM,WRAMSIZE,1); - if(info->battery) - { - info->SaveGame[0]=WRAM; - info->SaveGameLen[0]=WRAMSIZE; - } - AddExState(WRAM, WRAMSIZE, 0, "WRAM"); -} diff --git a/src/boards/dream.cpp b/src/boards/dream.cpp index d2a9cb82..5eeaf167 100644 --- a/src/boards/dream.cpp +++ b/src/boards/dream.cpp @@ -52,5 +52,5 @@ void DreamTech01_Init(CartInfo *info) { GameStateRestore=Restore; info->Power=DREAMPower; - AddExState(&latche, 1, 0, "LATCH"); + AddExState(&latche, 1, 0, "LATC"); } diff --git a/src/boards/edu2000.cpp b/src/boards/edu2000.cpp index 7d046dc0..9b5218e8 100644 --- a/src/boards/edu2000.cpp +++ b/src/boards/edu2000.cpp @@ -35,12 +35,12 @@ static void Sync(void) setchr8(0); setprg8r(0x10,0x6000,(reg&0xC0)>>6); setprg32(0x8000,reg&0x1F); -// setmirror(((reg&0x20)>>5)); +// setmirror(((reg&0x20)>>5)); } static DECLFW(UNLEDU2000HiWrite) { -// FCEU_printf("%04x:%02x\n",A,V); +// FCEU_printf("%04x:%02x\n",A,V); reg=V; Sync(); } @@ -76,8 +76,8 @@ void UNLEDU2000_Init(CartInfo *info) SetupCartPRGMapping(0x10,WRAM,32768,1); if(info->battery) { - info->SaveGame[0]=WRAM; - info->SaveGameLen[0]=32768; + info->SaveGame[0]=WRAM; + info->SaveGameLen[0]=32768; } AddExState(WRAM, 32768, 0, "WRAM"); AddExState(StateRegs, ~0, 0, 0); diff --git a/src/boards/fk23c.cpp b/src/boards/fk23c.cpp index c869680e..f5ff15ae 100644 --- a/src/boards/fk23c.cpp +++ b/src/boards/fk23c.cpp @@ -253,8 +253,8 @@ void BMCFK23C_Init(CartInfo *info) info->Power=BMCFK23CPower; info->Reset=BMCFK23CReset; AddExState(EXPREGS, 8, 0, "EXPR"); - AddExState(&unromchr, 1, 0, "UNCHR"); - AddExState(&dipswitch, 1, 0, "DIPSW"); + AddExState(&unromchr, 1, 0, "UCHR"); + AddExState(&dipswitch, 1, 0, "DPSW"); prg_bonus = 1; if(MasterRomInfoParams.find("bonus") != MasterRomInfoParams.end()) @@ -280,8 +280,8 @@ void BMCFK23CA_Init(CartInfo *info) AddExState(CHRRAM, CHRRAMSize, 0, "CRAM"); AddExState(EXPREGS, 8, 0, "EXPR"); - AddExState(&unromchr, 1, 0, "UNCHR"); - AddExState(&dipswitch, 1, 0, "DIPSW"); + AddExState(&unromchr, 1, 0, "UCHR"); + AddExState(&dipswitch, 1, 0, "DPSW"); prg_bonus = 1; if(MasterRomInfoParams.find("bonus") != MasterRomInfoParams.end()) diff --git a/src/boards/ghostbusters63in1.cpp b/src/boards/ghostbusters63in1.cpp index 3fcb4f59..6e6cef80 100644 --- a/src/boards/ghostbusters63in1.cpp +++ b/src/boards/ghostbusters63in1.cpp @@ -99,7 +99,7 @@ void BMCGhostbusters63in1_Init(CartInfo *info) CHRROMSIZE=8192; // dummy CHRROM, VRAM disable CHRROM=(uint8*)FCEU_gmalloc(CHRROMSIZE); SetupCartPRGMapping(0x10,CHRROM,CHRROMSIZE,0); - AddExState(CHRROM, CHRROMSIZE, 0, "CHRROM"); + AddExState(CHRROM, CHRROMSIZE, 0, "CROM"); GameStateRestore=StateRestore; AddExState(&StateRegs, ~0, 0, 0); diff --git a/src/boards/h2288.cpp b/src/boards/h2288.cpp index 7786daf4..4aaf9276 100644 --- a/src/boards/h2288.cpp +++ b/src/boards/h2288.cpp @@ -61,23 +61,14 @@ static DECLFW(H2288WriteLo) } } -static DECLFR(H2288Read) -{ - int bit; - bit=(A&1)^1; - bit&=((A>>8)&1); - bit^=1; - return((X.DB&0xFE)|bit); -} - static void H2288Power(void) { EXPREGS[0]=EXPREGS[1]=0; GenMMC3Power(); - SetReadHandler(0x5000,0x5FFF,H2288Read); +// SetReadHandler(0x5000,0x5FFF,H2288Read); SetReadHandler(0x8000,0xFFFF,CartBR); SetWriteHandler(0x5000,0x5FFF,H2288WriteLo); - SetWriteHandler(0x8000,0x8FFF,H2288WriteHi); + SetWriteHandler(0x8000,0x9FFF,H2288WriteHi); } void UNLH2288_Init(CartInfo *info) diff --git a/src/boards/karaoke.cpp b/src/boards/karaoke.cpp index dfb4cc84..7555fe2f 100644 --- a/src/boards/karaoke.cpp +++ b/src/boards/karaoke.cpp @@ -67,5 +67,5 @@ void Mapper188_Init(CartInfo *info) { info->Power=Power; GameStateRestore=StateRestore; - AddExState(&latche, 1, 0, "LATCH"); + AddExState(&latche, 1, 0, "LATC"); } diff --git a/src/boards/konami-qtai.cpp b/src/boards/konami-qtai.cpp index dc37062f..878219cd 100644 --- a/src/boards/konami-qtai.cpp +++ b/src/boards/konami-qtai.cpp @@ -40,7 +40,7 @@ static SFORMAT StateRegs[]= {&IRQCount, 1, "IRQC"}, {&IRQLatch, 1, "IRQL"}, {&IRQa, 1, "IRQA"}, - {&K4IRQ, 1, "K4IRQ"}, + {&K4IRQ, 1, "KIRQ"}, {regs, 16, "REGS"}, {0} }; @@ -226,7 +226,7 @@ void Mapper190_Init(CartInfo *info) CHRRAM=(uint8*)FCEU_gmalloc(CHRSIZE); SetupCartCHRMapping(0x10,CHRRAM,CHRSIZE,1); - AddExState(CHRRAM, CHRSIZE, 0, "CHRRAM"); + AddExState(CHRRAM, CHRSIZE, 0, "CRAM"); WRAM=(uint8*)FCEU_gmalloc(WRAMSIZE); SetupCartPRGMapping(0x10,WRAM,WRAMSIZE,1); diff --git a/src/boards/ks7032.cpp b/src/boards/ks7032.cpp index 3d0d142f..ca30e82f 100644 --- a/src/boards/ks7032.cpp +++ b/src/boards/ks7032.cpp @@ -20,7 +20,7 @@ #include "mapinc.h" -static uint8 reg[8], cmd, IRQa; +static uint8 reg[8], cmd, IRQa = 0, isirqused = 0; static int32 IRQCount; static SFORMAT StateRegs[]= @@ -44,15 +44,15 @@ static void Sync(void) static DECLFW(UNLKS7032Write) { -// FCEU_printf("bs %04x %02x\n",A,V); - switch(A) +// FCEU_printf("bs %04x %02x\n",A,V); + switch(A&0xF000) { -// case 0x8FFF: reg[4]=V; Sync(); break; - case 0x8000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0x000F)|(V&0x0F); break; - case 0x9000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0x00F0)|((V&0x0F)<<4); break; - case 0xA000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0x0F00)|((V&0x0F)<<8); break; - case 0xB000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0xF000)|(V<<12); break; - case 0xC000: X6502_IRQEnd(FCEU_IQEXT); IRQa=1; break; +// case 0x8FFF: reg[4]=V; Sync(); break; + case 0x8000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0x000F)|(V&0x0F); isirqused = 1; break; + case 0x9000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0x00F0)|((V&0x0F)<<4); isirqused = 1; break; + case 0xA000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0x0F00)|((V&0x0F)<<8); isirqused = 1; break; + case 0xB000: X6502_IRQEnd(FCEU_IQEXT); IRQCount=(IRQCount&0xF000)|(V<<12); isirqused = 1; break; + case 0xC000: if(isirqused) { X6502_IRQEnd(FCEU_IQEXT); IRQa=1; } break; case 0xE000: cmd=V&7; break; case 0xF000: reg[cmd]=V; Sync(); break; } diff --git a/src/boards/malee.cpp b/src/boards/malee.cpp index 8c301829..59321423 100644 --- a/src/boards/malee.cpp +++ b/src/boards/malee.cpp @@ -38,5 +38,5 @@ void MALEE_Init(CartInfo *info) { info->Power=MALEEPower; SetupCartPRGMapping(0x10, WRAM, 2048, 1); - AddExState(WRAM, 2048, 0,"RAM"); + AddExState(WRAM, 2048, 0,"WRAM"); } diff --git a/src/boards/mmc1.cpp b/src/boards/mmc1.cpp index 0cb4bcf1..72b084dc 100644 --- a/src/boards/mmc1.cpp +++ b/src/boards/mmc1.cpp @@ -107,39 +107,39 @@ static void MMC1PRG(void) else { switch(DRegs[0]&0xC) - { - case 0xC: setprg16(0x8000,(DRegs[3]+offs)); - setprg16(0xC000,0xF+offs); - break; - case 0x8: setprg16(0xC000,(DRegs[3]+offs)); - setprg16(0x8000,offs); - break; - case 0x0: - case 0x4: - setprg16(0x8000,((DRegs[3]&~1)+offs)); - setprg16(0xc000,((DRegs[3]&~1)+offs+1)); - break; + { + case 0xC: setprg16(0x8000,(DRegs[3]+offs)); + setprg16(0xC000,0xF+offs); + break; + case 0x8: setprg16(0xC000,(DRegs[3]+offs)); + setprg16(0x8000,offs); + break; + case 0x0: + case 0x4: + setprg16(0x8000,((DRegs[3]&~1)+offs)); + setprg16(0xc000,((DRegs[3]&~1)+offs+1)); + break; + } } } -} static void MMC1MIRROR(void) { if(!is171) - switch(DRegs[0]&3) - { - case 2: setmirror(MI_V); break; - case 3: setmirror(MI_H); break; - case 0: setmirror(MI_0); break; - case 1: setmirror(MI_1); break; - } + switch(DRegs[0]&3) + { + case 2: setmirror(MI_V); break; + case 3: setmirror(MI_H); break; + case 0: setmirror(MI_0); break; + case 1: setmirror(MI_1); break; + } } static uint64 lreset; static DECLFW(MMC1_write) { int n=(A>>13)-4; - //FCEU_DispMessage("%016x",0,timestampbase+timestamp); + //FCEU_DispMessage("%016x",timestampbase+timestamp); // FCEU_printf("$%04x:$%02x, $%04x\n",A,V,X.PC); //DumpMem("out",0xe000,0xffff); diff --git a/src/boards/mmc3.cpp b/src/boards/mmc3.cpp index f9cf39e8..d8e5358f 100644 --- a/src/boards/mmc3.cpp +++ b/src/boards/mmc3.cpp @@ -21,7 +21,7 @@ */ /* Code for emulating iNES mappers 4,12,44,45,47,49,52,74,114,115,116,118, - 119,165,205,214,215,245,249,250,254 + 119,165,205,245,249,250,254 */ #include "mapinc.h" @@ -34,6 +34,7 @@ uint32 CHRRAMSize; uint8 DRegBuf[8]; uint8 EXPREGS[8]; /* For bootleg games, mostly. */ uint8 A000B,A001B; +int mmc3opts=0; #undef IRQCount #undef IRQLatch @@ -54,7 +55,6 @@ static SFORMAT MMC3_StateRegs[]= {0} }; -static int mmc3opts=0; static int wrams; static int isRevB=1; @@ -289,7 +289,7 @@ void GenMMC3Power(void) } MMC3RegReset(); if(CHRRAM) - FCEU_dwmemset(CHRRAM,0,CHRRAMSize); + FCEU_dwmemset(CHRRAM,0,CHRRAMSize); } static void GenMMC3Close(void) @@ -318,7 +318,7 @@ void GenMMC3_Init(CartInfo *info, int prg, int chr, int wram, int battery) mmc3opts|=1; WRAM=(uint8*)FCEU_gmalloc(wrams); SetupCartPRGMapping(0x10,WRAM,wrams,1); - AddExState(WRAM, wrams, 0, "MMC3WRAM"); + AddExState(WRAM, wrams, 0, "MRAM"); } if(battery) @@ -547,9 +547,20 @@ static DECLFW(M45Write) FixMMC3CHR(MMC3_cmd); } +static DECLFR(M45Read) +{ + uint32 addr = 1<<(EXPREGS[5]+4); + if(A&(addr|(addr-1))) + return X.DB | 1; + else + return X.DB; +} + static void M45Reset(void) { EXPREGS[0]=EXPREGS[1]=EXPREGS[2]=EXPREGS[3]=EXPREGS[4]=0; + EXPREGS[5]++; + EXPREGS[5] &= 7; MMC3RegReset(); } @@ -557,7 +568,9 @@ static void M45Power(void) { setchr8(0); GenMMC3Power(); - SetWriteHandler(0x6000,0x7FFF,M45Write); + EXPREGS[0]=EXPREGS[1]=EXPREGS[2]=EXPREGS[3]=EXPREGS[4]=EXPREGS[5]=0; + SetWriteHandler(0x5000,0x7FFF,M45Write); + SetReadHandler(0x5000,0x5FFF,M45Read); } void Mapper45_Init(CartInfo *info) @@ -668,21 +681,19 @@ void Mapper49_Init(CartInfo *info) } // ---------------------------- Mapper 52 ------------------------------- - static void M52PW(uint32 A, uint8 V) { - uint32 NV=V; - NV&=0x1F^((EXPREGS[0]&8)<<1); - NV|=((EXPREGS[0]&6)|((EXPREGS[0]>>3)&EXPREGS[0]&1))<<4; - setprg8(A,NV); + uint32 mask = 0x1F^((EXPREGS[0]&8)<<1); + uint32 bank = ((EXPREGS[0]&6)|((EXPREGS[0]>>3)&EXPREGS[0]&1))<<4; + setprg8(A, bank|(V & mask)); } static void M52CW(uint32 A, uint8 V) { - uint32 NV=V; - NV&=0xFF^((EXPREGS[0]&0x40)<<1); - NV|=(((EXPREGS[0]>>3)&4)|((EXPREGS[0]>>1)&2)|((EXPREGS[0]>>6)&(EXPREGS[0]>>4)&1))<<7; - setchr1(A,NV); + uint32 mask = 0xFF^((EXPREGS[0]&0x40)<<1); +// uint32 bank = (((EXPREGS[0]>>3)&4)|((EXPREGS[0]>>1)&2)|((EXPREGS[0]>>6)&(EXPREGS[0]>>4)&1))<<7; + uint32 bank = (((EXPREGS[0]>>4)&2)|(EXPREGS[0]&4)|((EXPREGS[0]>>6)&(EXPREGS[0]>>4)&1))<<7; // actually 256K CHR banks index bits is inverted! + setchr1(A, bank|(V & mask)); } static DECLFW(M52Write) @@ -692,7 +703,7 @@ static DECLFW(M52Write) WRAM[A-0x6000]=V; return; } - EXPREGS[1]=1; + EXPREGS[1]=V&0x80; EXPREGS[0]=V; FixMMC3PRG(MMC3_cmd); FixMMC3CHR(MMC3_cmd); @@ -713,7 +724,7 @@ static void M52Power(void) void Mapper52_Init(CartInfo *info) { - GenMMC3_Init(info, 512, 256, 8, info->battery); + GenMMC3_Init(info, 256, 256, 8, info->battery); cwrap=M52CW; pwrap=M52PW; info->Reset=M52Reset; @@ -759,59 +770,59 @@ static void M114PWRAP(uint32 A, uint8 V) static DECLFW(M114Write) { - switch(A&0xE001) - { - case 0x8001: MMC3_CMDWrite(0xA000,V); break; - case 0xA000: MMC3_CMDWrite(0x8000,(V&0xC0)|(m114_perm[V&7])); cmdin=1; break; - case 0xC000: if(!cmdin) break; MMC3_CMDWrite(0x8001,V); cmdin=0; break; - case 0xA001: IRQLatch=V; break; - case 0xC001: IRQReload=1; break; - case 0xE000: X6502_IRQEnd(FCEU_IQEXT);IRQa=0; break; - case 0xE001: IRQa=1; break; - } + switch(A&0xE001) + { + case 0x8001: MMC3_CMDWrite(0xA000,V); break; + case 0xA000: MMC3_CMDWrite(0x8000,(V&0xC0)|(m114_perm[V&7])); cmdin=1; break; + case 0xC000: if(!cmdin) break; MMC3_CMDWrite(0x8001,V); cmdin=0; break; + case 0xA001: IRQLatch=V; break; + case 0xC001: IRQReload=1; break; + case 0xE000: X6502_IRQEnd(FCEU_IQEXT);IRQa=0; break; + case 0xE001: IRQa=1; break; + } } static DECLFW(M114ExWrite) { if(A<=0x7FFF) { - EXPREGS[0]=V; - FixMMC3PRG(MMC3_cmd); + EXPREGS[0]=V; + FixMMC3PRG(MMC3_cmd); } } static void M114Power(void) { - GenMMC3Power(); - SetWriteHandler(0x8000,0xFFFF,M114Write); - SetWriteHandler(0x5000,0x7FFF,M114ExWrite); + GenMMC3Power(); + SetWriteHandler(0x8000,0xFFFF,M114Write); + SetWriteHandler(0x5000,0x7FFF,M114ExWrite); } static void M114Reset(void) { - EXPREGS[0]=0; - MMC3RegReset(); + EXPREGS[0]=0; + MMC3RegReset(); } void Mapper114_Init(CartInfo *info) { - isRevB=0; - GenMMC3_Init(info, 256, 256, 0, 0); - pwrap=M114PWRAP; - info->Power=M114Power; - info->Reset=M114Reset; - AddExState(EXPREGS, 1, 0, "EXPR"); - AddExState(&cmdin, 1, 0, "CMDIN"); + isRevB=0; + GenMMC3_Init(info, 256, 256, 0, 0); + pwrap=M114PWRAP; + info->Power=M114Power; + info->Reset=M114Reset; + AddExState(EXPREGS, 1, 0, "EXPR"); + AddExState(&cmdin, 1, 0, "CMDI"); } -// ---------------------------- Mapper 115 ------------------------------ +// ---------------------------- Mapper 115 KN-658 board ------------------------------ static void M115PW(uint32 A, uint8 V) { - //zero 09-apr-2012 - #3515357 - changed to support Bao Qing Tian (mapper 248) which was missing BG gfx. 115 game(s?) seem still to work OK. - GENPWRAP(A,V); - if(A==0x8000 && EXPREGS[0]&0x80) - setprg16(0x8000,(EXPREGS[0]&0xF)); + if(EXPREGS[0]&0x80) + setprg32(0x8000,(EXPREGS[0]&7)>>1); + else + setprg8(A,V); } static void M115CW(uint32 A, uint8 V) @@ -1095,29 +1106,62 @@ void Mapper195_Init(CartInfo *info) wramtw=(uint8*)FCEU_gmalloc(wramsize); SetupCartPRGMapping(0x10, wramtw, wramsize, 1); AddExState(CHRRAM, CHRRAMSize, 0, "CHRR"); - AddExState(wramtw, wramsize, 0, "WRAMTW"); + AddExState(wramtw, wramsize, 0, "TRAM"); } // ---------------------------- Mapper 196 ------------------------------- +// MMC3 board with optional command address line connection, allows to +// make three-four different wirings to IRQ address lines and separately to +// CMD address line, Mali Boss additionally check if wiring are correct for +// game + +static void M196PW(uint32 A, uint8 V) +{ + if(EXPREGS[0]) // Tenchi o Kurau II - Shokatsu Koumei Den (J) (C).nes + setprg32(0x8000,EXPREGS[1]); + else + setprg8(A,V); +// setprg8(A,(V&3)|((V&8)>>1)|((V&4)<<1)); // Mali Splash Bomb +} + +//static void M196CW(uint32 A, uint8 V) +//{ +// setchr1(A,(V&0xDD)|((V&0x20)>>4)|((V&2)<<4)); +//} static DECLFW(Mapper196Write) { - A=(A&0xFFFE)|((A>>2)&1)|((A>>3)&1)|((A>>1)&1); - if(A >= 0xC000) + if(A >= 0xC000) { + A=(A&0xFFFE)|((A>>2)&1)|((A>>3)&1); MMC3_IRQWrite(A,V); - else + } + else { + A=(A&0xFFFE)|((A>>2)&1)|((A>>3)&1)|((A>>1)&1); +// A=(A&0xFFFE)|((A>>3)&1); // Mali Splash Bomb MMC3_CMDWrite(A,V); + } +} + +static DECLFW(Mapper196WriteLo) +{ + EXPREGS[0]=1; + EXPREGS[1]=(V&0xf)|(V>>4); + FixMMC3PRG(MMC3_cmd); } static void Mapper196Power(void) { GenMMC3Power(); + EXPREGS[0] = EXPREGS[1] = 0; + SetWriteHandler(0x6000,0x6FFF,Mapper196WriteLo); SetWriteHandler(0x8000,0xFFFF,Mapper196Write); } void Mapper196_Init(CartInfo *info) { GenMMC3_Init(info, 128, 128, 0, 0); + pwrap=M196PW; +// cwrap=M196CW; // Mali Splash Bomb info->Power=Mapper196Power; } @@ -1158,46 +1202,51 @@ void Mapper198_Init(CartInfo *info) wramsize=4096; wramtw=(uint8*)FCEU_gmalloc(wramsize); SetupCartPRGMapping(0x10, wramtw, wramsize, 1); - AddExState(wramtw, wramsize, 0, "WRAMTW"); + AddExState(wramtw, wramsize, 0, "TRAM"); } // ---------------------------- Mapper 205 ------------------------------ +// GN-45 BOARD static void M205PW(uint32 A, uint8 V) { - if(EXPREGS[0]&2) - setprg8(A,(V&0x0f)|((EXPREGS[0]&3)<<4)); - else - setprg8(A,(V&0x1f)|((EXPREGS[0]&3)<<4)); +// GN-30A - начальная маска должна быть 1F + аппаратный переключатель на шине адреса + setprg8(A,(V&0x0f)|EXPREGS[0]); } static void M205CW(uint32 A, uint8 V) { - setchr1(A,V|((EXPREGS[0]&3)<<7)); +// GN-30A - начальная маска должна быть FF + setchr1(A,(V&0x7F)|(EXPREGS[0]<<3)); } static DECLFW(M205Write) { - if((A&0x6800)==0x6800) EXPREGS[0]= V; - FixMMC3PRG(MMC3_cmd); - FixMMC3CHR(MMC3_cmd); + if(EXPREGS[2] == 0) { + EXPREGS[0] = A & 0x30; + EXPREGS[2] = A & 0x80; + FixMMC3PRG(MMC3_cmd); + FixMMC3CHR(MMC3_cmd); + } + else + CartBW(A,V); } static void M205Reset(void) { - EXPREGS[0]=0; + EXPREGS[0]=EXPREGS[2]=0; MMC3RegReset(); } static void M205Power(void) { GenMMC3Power(); - SetWriteHandler(0x4020,0x7FFF,M205Write); + SetWriteHandler(0x6000,0x6fff,M205Write); } void Mapper205_Init(CartInfo *info) { - GenMMC3_Init(info, 512, 256, 8, 0); + GenMMC3_Init(info, 256, 256, 8, 0); pwrap=M205PW; cwrap=M205CW; info->Power=M205Power; diff --git a/src/boards/n106.cpp b/src/boards/n106.cpp index 5127a2a7..5cb9a0bb 100644 --- a/src/boards/n106.cpp +++ b/src/boards/n106.cpp @@ -88,7 +88,9 @@ static DECLFR(Namco_Read4800) { uint8 ret=IRAM[dopol&0x7f]; /* Maybe I should call NamcoSoundHack() here? */ + #ifdef FCEUDEF_DEBUGGER if(!fceuindbg) + #endif if(dopol&0x80) dopol=(dopol&0x80)|((dopol+1)&0x7f); return ret; diff --git a/src/boards/n625092.cpp b/src/boards/n625092.cpp index 75bc1669..3d9e5fe9 100644 --- a/src/boards/n625092.cpp +++ b/src/boards/n625092.cpp @@ -18,7 +18,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * 700in1 and 400in1 carts */ - + #include "mapinc.h" @@ -39,26 +39,36 @@ static void Sync(void) { if(cmd&0x100) { - setprg16(0x8000,((cmd&0xe0)>>2)|bank); - setprg16(0xC000,((cmd&0xe0)>>2)|7); + setprg16(0x8000,((cmd&0xfc)>>2)|bank); + setprg16(0xC000,((cmd&0xfc)>>2)|7); } else { - setprg16(0x8000,((cmd&0xe0)>>2)|(bank&6)); - setprg16(0xC000,((cmd&0xe0)>>2)|((bank&6)|1)); + setprg16(0x8000,((cmd&0xfc)>>2)|(bank&6)); + setprg16(0xC000,((cmd&0xfc)>>2)|((bank&6)|1)); } } else { - setprg16(0x8000,((cmd&0xe0)>>2)|bank); - setprg16(0xC000,((cmd&0xe0)>>2)|bank); - } + setprg16(0x8000,((cmd&0xfc)>>2)|bank); + setprg16(0xC000,((cmd&0xfc)>>2)|bank); + } } +static uint16 ass = 0; + static DECLFW(UNLN625092WriteCommand) { cmd=A; - Sync(); + if(A==0x80F8) + { + setprg16(0x8000,ass); + setprg16(0xC000,ass); + } + else + { + Sync(); + } } static DECLFW(UNLN625092WriteBank) @@ -81,6 +91,8 @@ static void UNLN625092Reset(void) { cmd=0; bank=0; + ass++; + FCEU_printf("%04x\n",ass); } static void StateRestore(int version) diff --git a/src/boards/onebus.cpp b/src/boards/onebus.cpp index a23cadcc..9e1dbfa2 100644 --- a/src/boards/onebus.cpp +++ b/src/boards/onebus.cpp @@ -17,140 +17,161 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - * OneBus system + * VR02/VT03 Console and OneBus System + * * Street Dance (Dance pad) (Unl) * 101-in-1 Arcade Action II - * DreamGEAR 75-in-1 + * DreamGEAR 75-in-1, etc. + * */ #include "mapinc.h" -static uint8 isDance; -static uint8 regs[16],regc[6]; -static uint8 IRQCount,IRQLatch,IRQa, IRQReload, pcm_enable = 0, pcm_irq = 0; +// General Purpose Registers +static uint8 cpu410x[16], ppu201x[16], apu40xx[64]; + +// IRQ Registers +static uint8 IRQCount, IRQa, IRQReload; +#define IRQLatch cpu410x[0x1] + +// MMC3 Registers +static uint8 inv_hack = 0; // some OneBus Systems have swapped PRG reg commans in MMC3 inplementation, + // trying to autodetect unusual behavior, due not to add a new mapper. +#define mmc3cmd cpu410x[0x5] +#define mirror cpu410x[0x6] + +// APU Registers +static uint8 pcm_enable = 0, pcm_irq = 0; static int16 pcm_addr, pcm_size, pcm_latch, pcm_clock = 0xF6; -static writefunc old4011write, old4012write, old4013write, old4015write; -static readfunc old4015read; + +static writefunc defapuwrite[64]; +static readfunc defapuread[64]; static SFORMAT StateRegs[]= { - {regc, 6, "REGC"}, - {regs, 16, "REGS"}, + {cpu410x, 16, "REGC"}, + {ppu201x, 16, "REGS"}, + {apu40xx, 64, "REGA"}, {&IRQReload, 1, "IRQR"}, {&IRQCount, 1, "IRQC"}, - {&IRQLatch, 1, "IRQL"}, {&IRQa, 1, "IRQA"}, {&pcm_enable, 1, "PCME"}, - {&pcm_irq, 1, "PCMIRQ"}, - {&pcm_addr, 2, "PCMADDR"}, - {&pcm_size, 2, "PCMSIZE"}, - {&pcm_latch, 2, "PCMLATCH"}, - {&pcm_clock, 2, "PCMCLOCK"}, + {&pcm_irq, 1, "PCMI"}, + {&pcm_addr, 2, "PCMA"}, + {&pcm_size, 2, "PCMS"}, + {&pcm_latch, 2, "PCML"}, + {&pcm_clock, 2, "PCMC"}, {0} }; -static void Sync(void) +static void PSync(void) { - uint16 cswap = (regs[0xf] & 0x80) << 5; - uint16 pswap = (regs[0xd]&1)?((regs[0xf] & 0x40) << 8):0; - uint16 pbase = (regs[0]&0xf0)<<4; - uint16 cbase = (((regs[0]&0x0f)<<8)|(regs[0xc]<<1)|((regs[0xd]&0xf8)>>3))<<3; - uint16 pmask = 0x3f>>(regs[0xb]&0xf); + uint8 bankmode = cpu410x[0xb] & 7; + uint8 mask = (bankmode == 0x7)?(0xff):(0x3f >> bankmode); + uint32 block = ((cpu410x[0x0] & 0xf0) << 4) + (cpu410x[0xa] & (~mask)); + uint32 pswap = (mmc3cmd & 0x40) << 8; - setchr1(cswap^0x0000,cbase|(regc[0]&(~1))); - setchr1(cswap^0x0400,cbase|(regc[0]|1)); - setchr1(cswap^0x0800,cbase|(regc[1]&(-1))); - setchr1(cswap^0x0c00,cbase|(regc[1]|1)); - setchr1(cswap^0x1000,cbase|(regc[2])); - setchr1(cswap^0x1400,cbase|(regc[3])); - setchr1(cswap^0x1800,cbase|(regc[4])); - setchr1(cswap^0x1c00,cbase|(regc[5])); +// uint8 bank0 = (cpu410x[0xb] & 0x40)?(~1):(cpu410x[0x7]); +// uint8 bank1 = cpu410x[0x8]; +// uint8 bank2 = (cpu410x[0xb] & 0x40)?(cpu410x[0x9]):(~1); +// uint8 bank3 = ~0; + uint8 bank0 = cpu410x[0x7^inv_hack]; + uint8 bank1 = cpu410x[0x8^inv_hack]; + uint8 bank2 = (cpu410x[0xb] & 0x40)?(cpu410x[0x9]):(~1); + uint8 bank3 = ~0; - if(regs[0xd]&2) - { - setprg8(pswap^0x8000, pbase|(regs[0x7]&pmask)|(regs[0xa]&(~pmask))); - setprg8( 0xA000, pbase|(regs[0x8]&pmask)|(regs[0xa]&(~pmask))); - setprg8(pswap^0xC000, pbase|(regs[0x9]&pmask)|(regs[0xa]&(~pmask))); - setprg8( 0xE000, pbase|regs[0xa]); - } - else - { - setprg8(pswap^0x8000, pbase|(regs[0x7]&pmask)|(regs[0xa]&(~pmask))); - setprg8( 0xA000, pbase|(regs[0x8]&pmask)|(regs[0xa]&(~pmask))); - setprg8(pswap^0xC000, pbase|((~1)&pmask)|(regs[0xa]&(~pmask))); - setprg8( 0xE000, pbase|((~0)&pmask)|(regs[0xa]&(~pmask))); - } - - setmirror(regs[0xe]); +// FCEU_printf(" PRG: %04x [%02x]",0x8000^pswap,block | (bank0 & mask)); + setprg8(0x8000^pswap, block | (bank0 & mask)); +// FCEU_printf(" %04x [%02x]",0xa000^pswap,block | (bank1 & mask)); + setprg8(0xa000, block | (bank1 & mask)); +// FCEU_printf(" %04x [%02x]",0xc000^pswap,block | (bank2 & mask)); + setprg8(0xc000^pswap, block | (bank2 & mask)); +// FCEU_printf(" %04x [%02x]\n",0xe000^pswap,block | (bank3 & mask)); + setprg8(0xe000, block | (bank3 & mask)); } -static DECLFW(UNLOneBusWrite20XX) +static void CSync(void) { -// FCEU_printf("PPU %04x:%04x\n",A,V); - if(A == 0x201A) - regs[0xd] = V; - else if(A == 0x2018) - regs[0xc] = V; + static const uint8 midx[8] = {0, 1, 2, 0, 3, 4, 5, 0 }; + uint8 mask = 0xff >> midx[ppu201x[0xa] & 7]; + uint32 block = ((cpu410x[0x0] & 0x0f) << 11) + ((ppu201x[0x8] & 0x70) << 4) + (ppu201x[0xa] & (~mask)); + uint32 cswap = (mmc3cmd & 0x80) << 5; + + uint8 bank0 = ppu201x[0x6]&(~1); + uint8 bank1 = ppu201x[0x6]|1; + uint8 bank2 = ppu201x[0x7]&(~1); + uint8 bank3 = ppu201x[0x7]|1; + uint8 bank4 = ppu201x[0x2]; + uint8 bank5 = ppu201x[0x3]; + uint8 bank6 = ppu201x[0x4]; + uint8 bank7 = ppu201x[0x5]; + + setchr1(0x0000^cswap, block | (bank0 & mask)); + setchr1(0x0400^cswap, block | (bank1 & mask)); + setchr1(0x0800^cswap, block | (bank2 & mask)); + setchr1(0x0c00^cswap, block | (bank3 & mask)); + setchr1(0x1000^cswap, block | (bank4 & mask)); + setchr1(0x1400^cswap, block | (bank5 & mask)); + setchr1(0x1800^cswap, block | (bank6 & mask)); + setchr1(0x1c00^cswap, block | (bank7 & mask)); + + setmirror((mirror & 1) ^ 1); +} + +static void Sync(void) +{ + PSync(); + CSync(); +} + +static DECLFW(UNLOneBusWriteCPU410X) +{ +// FCEU_printf("CPU %04x:%04x\n",A,V); + switch(A & 0xf) + { + case 0x1: IRQLatch = V & 0xfe; break; + case 0x2: IRQReload = 1; break; + case 0x3: X6502_IRQEnd(FCEU_IQEXT); IRQa = 0; break; + case 0x4: IRQa = 1; break; + default: + cpu410x[A & 0xf] = V; + Sync(); + } +} + +static DECLFW(UNLOneBusWritePPU201X) +{ +// FCEU_printf("PPU %04x:%04x\n",A,V); + ppu201x[A & 0x0f] = V; Sync(); } -static DECLFW(UNLOneBusWriteExp) +static DECLFW(UNLOneBusWriteMMC3) { -// FCEU_printf("EXP %04x:%04x\n",A,V); -// switch(A & 0x0F) -// { -// case 2: pcm_latch = pcm_clock; FCEU_printf("write %04x:%04x\n",A,V); break; -// case 3: pcm_irqa = 0; X6502_IRQEnd(FCEU_IQEXT); pcm_irq = 0; FCEU_printf("write %04x:%04x\n",A,V); break; -// case 4: pcm_irqa = 1; FCEU_printf("write %04x:%04x\n",A,V); break; -// default: - regs[A & 0x0F] = V; - Sync(); -// } -} - -static DECLFW(UNLOneBusWriteDebug) -{ -// FCEU_printf("write %04x:%04x\n",A,V); -} - -static DECLFW(UNLOneBusWriteMMC) -{ -// FCEU_printf("MMC %04x:%04x\n",A,V); - switch(A&0xE001) +// FCEU_printf("MMC %04x:%04x\n",A,V); + switch(A&0xe001) { - case 0x8000: regs[0xf] = V; Sync(); break; + case 0x8000: mmc3cmd = (mmc3cmd & 0x38) | (V & 0xc7); Sync(); break; case 0x8001: { - uint8 mask = 0xff, mmc3cmd = regs[0xf]&7; - switch(mmc3cmd) + switch(mmc3cmd & 7) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - if(regs[0xd]&4) - mask = 0x0f; - else - mask >>= ((regs[0xb]&0xf0)>>4); - regc[mmc3cmd] = V&mask; - break; - case 6: - case 7: - mask = (mask&0x3f)>>(regs[0xb]&0xf); - regs[mmc3cmd+1] = (regs[mmc3cmd+1]&(~mask))|(V&mask); - break; + case 0: ppu201x[0x6] = V; CSync(); break; + case 1: ppu201x[0x7] = V; CSync(); break; + case 2: ppu201x[0x2] = V; CSync(); break; + case 3: ppu201x[0x3] = V; CSync(); break; + case 4: ppu201x[0x4] = V; CSync(); break; + case 5: ppu201x[0x5] = V; CSync(); break; + case 6: cpu410x[0x7] = V; PSync(); break; + case 7: cpu410x[0x8] = V; PSync(); break; } - - Sync(); break; } - case 0xA000: regs[0xe] = (V & 1)^1; Sync(); break; - case 0xC000: IRQLatch = V&0xfe; break; - case 0xC001: IRQReload = 1; break; - case 0xE000: X6502_IRQEnd(FCEU_IQEXT); IRQa = 0; break; - case 0xE001: IRQa = 1; break; + case 0xa000: mirror = V; CSync(); break; + case 0xc000: IRQLatch = V & 0xfe; break; + case 0xc001: IRQReload = 1; break; + case 0xe000: X6502_IRQEnd(FCEU_IQEXT); IRQa = 0; break; + case 0xe001: IRQa = 1; break; } } @@ -171,44 +192,51 @@ static void UNLOneBusIRQHook(void) } } -static DECLFW(UNLOneBusWriteAPU2) +static DECLFW(UNLOneBusWriteAPU40XX) { -// FCEU_printf("APU2 %04x:%04x\n",A,V); - CartBW(A&0xffdf,V); -} - -static DECLFW(UNLOneBusWrite4012) -{ -// FCEU_printf("write %04x:%04x\n",A,V); - pcm_addr = V << 6; - old4012write(A,V); -} - -static DECLFW(UNLOneBusWrite4013) -{ -// FCEU_printf("write %04x:%04x\n",A,V); - pcm_size = (V << 4) + 1; - old4013write(A,V); -} - -static DECLFW(UNLOneBusWrite4015) -{ -// FCEU_printf("write %04x:%04x\n",A,V); - pcm_enable = V&0x10; - if(pcm_irq) +// FCEU_printf("APU %04x:%04x\n",A,V); + apu40xx[A & 0x3f] = V; + switch(A & 0x3f) { - X6502_IRQEnd(FCEU_IQEXT); - pcm_irq = 0; + case 0x12: + if(apu40xx[0x30] & 0x10) + { + pcm_addr = V << 6; + } + case 0x13: + if(apu40xx[0x30] & 0x10) + { + pcm_size = (V << 4) + 1; + } + case 0x15: + if(apu40xx[0x30] & 0x10) + { + pcm_enable = V&0x10; + if(pcm_irq) + { + X6502_IRQEnd(FCEU_IQEXT); + pcm_irq = 0; + } + if(pcm_enable) + pcm_latch = pcm_clock; + V &= 0xef; + } } - if(pcm_enable) - pcm_latch = pcm_clock; - old4015write(A,V&0xEF); + defapuwrite[A & 0x3f](A, V); } -static DECLFR(UNLOneBusRead4015) +static DECLFR(UNLOneBusReadAPU40XX) { - uint8 result = (old4015read(A) & 0x7F)|pcm_irq; -// FCEU_printf("read %04x, %02x\n",A,result); + uint8 result = defapuread[A & 0x3f](A); +// FCEU_printf("read %04x, %02x\n",A,result); + switch(A & 0x3f) + { + case 0x15: + if(apu40xx[0x30] & 0x10) + { + result = (result & 0x7f) | pcm_irq; + } + } return result; } @@ -230,7 +258,7 @@ static void UNLOneBusCpuHook(int a) else { uint8 raw_pcm = ARead[pcm_addr](pcm_addr) >> 1; - old4011write(0x4011,raw_pcm); + defapuwrite[0x11](0x4011,raw_pcm); pcm_addr++; pcm_addr&=0x7FFF; } @@ -240,43 +268,39 @@ static void UNLOneBusCpuHook(int a) static void UNLOneBusPower(void) { - IRQCount=IRQLatch=IRQa==0; - regs[0]=regs[1]=regs[1]=regs[2]=regs[3]=regs[4]=regs[5]=regs[6]=0; - regs[7]=regs[8]=regs[11]=regs[12]=regs[13]=regs[14]=regs[15]=0; - regs[0x09]=0x3E; - regs[0x0A]=0x3F; + uint32 i; + IRQReload = IRQCount = IRQa = 0; - SetupCartCHRMapping(0,PRGptr[0],4096 * 1024,0); + memset(cpu410x, 0x00, sizeof(cpu410x)); + memset(ppu201x, 0x00, sizeof(ppu201x)); + memset(apu40xx, 0x00, sizeof(apu40xx)); - if(isDance) // quick workaround, TODO: figure out how it works together + SetupCartCHRMapping(0, PRGptr[0], PRGsize[0], 0); + + for(i=0; i<64; i++) { - old4015read=GetReadHandler(0x4015); - SetReadHandler(0x4015,0x4015,UNLOneBusRead4015); - old4011write=GetWriteHandler(0x4011); - old4012write=GetWriteHandler(0x4012); - SetWriteHandler(0x4012,0x4012,UNLOneBusWrite4012); - old4013write=GetWriteHandler(0x4013); - SetWriteHandler(0x4013,0x4013,UNLOneBusWrite4013); - old4015write=GetWriteHandler(0x4015); - SetWriteHandler(0x4015,0x4015,UNLOneBusWrite4015); + defapuread[i] = GetReadHandler(0x4000|i); + defapuwrite[i] = GetWriteHandler(0x4000|i); } + SetReadHandler(0x4000,0x403f,UNLOneBusReadAPU40XX); + SetWriteHandler(0x4000,0x403f,UNLOneBusWriteAPU40XX); SetReadHandler(0x8000,0xFFFF,CartBR); - SetWriteHandler(0x2009,0x2fff,UNLOneBusWrite20XX); -// SetWriteHandler(0x4020,0xffff,UNLOneBusWriteDebug); -// SetWriteHandler(0x4020,0x4040,UNLOneBusWriteAPU2); - SetWriteHandler(0x4100,0x410f,UNLOneBusWriteExp); - SetWriteHandler(0x8000,0xefff,UNLOneBusWriteMMC); + SetWriteHandler(0x2010,0x201f,UNLOneBusWritePPU201X); + SetWriteHandler(0x4100,0x410f,UNLOneBusWriteCPU410X); + SetWriteHandler(0x8000,0xffff,UNLOneBusWriteMMC3); + Sync(); } static void UNLOneBusReset(void) { - IRQCount=IRQLatch=IRQa=0; - regs[0]=regs[1]=regs[1]=regs[2]=regs[3]=regs[4]=regs[5]=regs[6]=0; - regs[7]=regs[8]=regs[11]=regs[12]=regs[13]=regs[14]=regs[15]=0; - regs[0x09]=0x3E; - regs[0x0A]=0x3F; + IRQReload = IRQCount = IRQa = 0; + + memset(cpu410x, 0x00, sizeof(cpu410x)); + memset(ppu201x, 0x00, sizeof(ppu201x)); + memset(apu40xx, 0x00, sizeof(apu40xx)); + Sync(); } @@ -287,20 +311,13 @@ static void StateRestore(int version) void UNLOneBus_Init(CartInfo *info) { - isDance = 0; info->Power=UNLOneBusPower; info->Reset=UNLOneBusReset; - GameHBIRQHook=UNLOneBusIRQHook; -// MapIRQHook=UNLOneBusCpuHook; - GameStateRestore=StateRestore; - AddExState(&StateRegs, ~0, 0, 0); -} -void UNLDANCE_Init(CartInfo *info) -{ - isDance = 1; - info->Power=UNLOneBusPower; - info->Reset=UNLOneBusReset; + if(((*(uint32*)&(info->MD5)) == 0x305fcdc3) || // PowerJoy Supermax Carts + ((*(uint32*)&(info->MD5)) == 0x6abfce8e) ) + inv_hack = 0xf; + GameHBIRQHook=UNLOneBusIRQHook; MapIRQHook=UNLOneBusCpuHook; GameStateRestore=StateRestore; diff --git a/src/boards/sl1632.cpp b/src/boards/sl1632.cpp index 18895fbb..515ce6ba 100644 --- a/src/boards/sl1632.cpp +++ b/src/boards/sl1632.cpp @@ -25,7 +25,7 @@ static uint8 chrcmd[8], prg0, prg1, bbrk, mirr, swap; static SFORMAT StateRegs[]= { - {chrcmd, 8, "CHRCMD"}, + {chrcmd, 8, "CHRC"}, {&prg0, 1, "PRG0"}, {&prg1, 1, "PRG1"}, {&bbrk, 1, "BRK"}, @@ -110,7 +110,6 @@ static void StateRestore(int version) static void UNLSL1632Power(void) { GenMMC3Power(); - SetReadHandler(0x8000,0xFFFF,CartBR); SetWriteHandler(0x4100,0xFFFF,UNLSL1632CMDWrite); } diff --git a/src/boards/smb2j.cpp b/src/boards/smb2j.cpp index 305722b8..84c2ba81 100644 --- a/src/boards/smb2j.cpp +++ b/src/boards/smb2j.cpp @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Super Mario Bros 2 J alt version * as well as "Voleyball" FDS conversion, bank layot is similar but no bankswitching and CHR ROM present + * + * mapper seems wrongly researched by me ;( it should be mapper 43 modification */ #include "mapinc.h" diff --git a/src/boards/subor.cpp b/src/boards/subor.cpp index 9f0386db..3442cd2e 100644 --- a/src/boards/subor.cpp +++ b/src/boards/subor.cpp @@ -1,3 +1,23 @@ +/* FCE Ultra - NES/Famicom Emulator + * + * Copyright notice for this file: + * Copyright (C) 2005 CaH4e3 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + #include "mapinc.h" static uint8 mode; diff --git a/src/boards/t-262.cpp b/src/boards/t-262.cpp index 1e1682f6..0804d520 100644 --- a/src/boards/t-262.cpp +++ b/src/boards/t-262.cpp @@ -25,8 +25,8 @@ static uint8 datareg; static uint8 busy; static SFORMAT StateRegs[]= { - {&addrreg, 2, "ADDRREG"}, - {&datareg, 1, "DATAREG"}, + {&addrreg, 2, "AREG"}, + {&datareg, 1, "DREG"}, {&busy, 1, "BUSY"}, {0} }; diff --git a/src/boards/tengen.cpp b/src/boards/tengen.cpp index ebc44374..38816226 100644 --- a/src/boards/tengen.cpp +++ b/src/boards/tengen.cpp @@ -104,7 +104,7 @@ static DECLFW(RAMBO1_write) switch(A&0xF001) { case 0xa000: mir=V&1; -// if(!nomirror) +// if(!nomirror) setmirror(mir^1); break; case 0x8000: cmd = V; @@ -138,7 +138,7 @@ static DECLFW(RAMBO1_write) static void RAMBO1_Restore(int version) { Synco(); -// if(!nomirror) +// if(!nomirror) setmirror(mir^1); } @@ -148,7 +148,7 @@ static void RAMBO1_init(void) for(x=0;x<11;x++) DRegs[x]=~0; cmd=mir=0; -// if(!nomirror) +// if(!nomirror) setmirror(1); Synco(); GameHBIRQHook=RAMBO1_hb; @@ -166,7 +166,7 @@ static void CHRWrap(unsigned int A, unsigned int V) void Mapper64_init(void) { setchr1wrap=CHRWrap; -// nomirror=0; +// nomirror=0; RAMBO1_init(); } /* diff --git a/src/boards/tf-1201.cpp b/src/boards/tf-1201.cpp index f958754a..b0c96dc0 100644 --- a/src/boards/tf-1201.cpp +++ b/src/boards/tf-1201.cpp @@ -35,8 +35,8 @@ static SFORMAT StateRegs[]= {&mirr, 1, "MIRR"}, {&swap, 1, "SWAP"}, {chr, 8, "CHR"}, - {&IRQCount, 1, "IRQCOUNT"}, - {&IRQPre, 1, "IRQPRE"}, + {&IRQCount, 1, "IRQC"}, + {&IRQPre, 1, "IRQP"}, {&IRQa, 1, "IRQA"}, {0} }; diff --git a/src/ines.cpp b/src/ines.cpp index ce273467..04ad610b 100644 --- a/src/ines.cpp +++ b/src/ines.cpp @@ -612,7 +612,8 @@ static BMAPPINGLocal bmap[] = { {"", 154, Mapper154_Init}, {"", 155, Mapper155_Init}, {"", 156, Mapper156_Init}, - {"", 159, Mapper159_Init}, + {"", 157, Mapper157_Init}, + {"", 159, Mapper16_Init}, // Obsolete, remove me! {"SA009", 160, SA009_Init}, {"", 162, UNLFS304_Init}, {"", 163, Mapper163_Init}, @@ -1216,7 +1217,7 @@ void (*MapInitTab[256])(void)= 0, //Mapper154_init, 0, 0, - Mapper157_init, + 0, //Mapper157_init, 0, //Mapper158_init, removed 0, 0, diff --git a/src/ines.h b/src/ines.h index abb3430e..cf3a9c04 100644 --- a/src/ines.h +++ b/src/ines.h @@ -281,7 +281,7 @@ void Mapper151_init(void); //void Mapper152_init(void); //void Mapper153_init(void); void Mapper154_init(void); -void Mapper157_init(void); +//void Mapper157_init(void); //void Mapper158_init(void); void Mapper159_init(void); void Mapper160_init(void); @@ -421,6 +421,7 @@ void Mapper153_Init(CartInfo *); void Mapper154_Init(CartInfo *); void Mapper155_Init(CartInfo *); void Mapper156_Init(CartInfo *); +void Mapper157_Init(CartInfo *); void Mapper159_Init(CartInfo *); void Mapper163_Init(CartInfo *); void Mapper164_Init(CartInfo *); diff --git a/src/mappers/16.cpp b/src/mappers/16.cpp deleted file mode 100644 index 002d3cb5..00000000 --- a/src/mappers/16.cpp +++ /dev/null @@ -1,303 +0,0 @@ -/* FCE Ultra - NES/Famicom Emulator - * - * Copyright notice for this file: - * Copyright (C) 1998 BERO - * Copyright (C) 2002 Xodnizel - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "mapinc.h" - -static void BandaiIRQHook(int a) -{ - if(IRQa) - { - IRQCount-=a; - if(IRQCount<0) - { - X6502_IRQBegin(FCEU_IQEXT); - //printf("IRQ: %d, %d\n",scanline,timestamp); - IRQa=0; - IRQCount=0xFFFF; - } - } -} - -static DECLFW(Mapper16_write) -{ - A&=0xF; - - if(A<=0x7) - VROM_BANK1(A<<10,V); - else if(A==0x8) - ROM_BANK16(0x8000,V); - else switch(A) { - case 0x9: switch(V&3) { - case 0x00:MIRROR_SET2(1);break; - case 0x01:MIRROR_SET2(0);break; - case 0x02:onemir(0);break; - case 0x03:onemir(1);break; - } - break; - case 0xA:X6502_IRQEnd(FCEU_IQEXT); - IRQa=V&1; - IRQCount=IRQLatch; - break; - case 0xB:IRQLatch&=0xFF00; IRQLatch|=V; - break; - case 0xC:IRQLatch&=0xFF; IRQLatch|=V<<8; - break; - case 0xD: break;/* Serial EEPROM control port */ - } -} - -// Famicom jump 2: -// 0-7: Lower bit of data selects which 256KB PRG block is in use. -// This seems to be a hack on the developers' part, so I'll make emulation -// of it a hack(I think the current PRG block would depend on whatever the -// lowest bit of the CHR bank switching register that corresponds to the -// last CHR address read). -/* -static void PRGO(void) -{ - uint32 base=(mapbyte1[0]&1)<<4; - ROM_BANK16(0x8000,(mapbyte2[0]&0xF)|base); - ROM_BANK16(0xC000,base|0xF); -} - -static DECLFW(Mapper153_write) -{ - A&=0xF; - if(A<=0x7) - { - mapbyte1[A&7]=V; - PRGO(); - } - else if(A==0x8) - { - mapbyte2[0]=V; - PRGO(); - } - else switch(A) { - case 0x9: switch(V&3) { - case 0x00:MIRROR_SET2(1);break; - case 0x01:MIRROR_SET2(0);break; - case 0x02:onemir(0);break; - case 0x03:onemir(1);break; - } - break; - case 0xA:X6502_IRQEnd(FCEU_IQEXT); - IRQa=V&1; - IRQCount=IRQLatch; - break; - case 0xB:IRQLatch&=0xFF00; - IRQLatch|=V; - break; - case 0xC:IRQLatch&=0xFF; - IRQLatch|=V<<8; - break; - } -}*/ - -//void Mapper16_init(void) -//{ -// MapIRQHook=BandaiIRQHook; -//SetWriteHandler(0x6000,0xFFFF,Mapper16_write); -//} - -//void Mapper153_init(void) -//{ -// MapIRQHook=BandaiIRQHook; -// SetWriteHandler(0x8000,0xFFFF,Mapper153_write); - /* This mapper/board seems to have WRAM at $6000-$7FFF, so I'll let the - main ines code take care of that memory region. */ -//} - - -static uint8 BarcodeData[256]; -static int BarcodeReadPos; -static int BarcodeCycleCount; -static uint32 BarcodeOut; - -int FCEUI_DatachSet(const uint8 *rcode) -{ - int prefix_parity_type[10][6] = { - {0,0,0,0,0,0}, {0,0,1,0,1,1}, {0,0,1,1,0,1}, {0,0,1,1,1,0}, - {0,1,0,0,1,1}, {0,1,1,0,0,1}, {0,1,1,1,0,0}, {0,1,0,1,0,1}, - {0,1,0,1,1,0}, {0,1,1,0,1,0} - }; - int data_left_odd[10][7] = { - {0,0,0,1,1,0,1}, {0,0,1,1,0,0,1}, {0,0,1,0,0,1,1}, {0,1,1,1,1,0,1}, - {0,1,0,0,0,1,1}, {0,1,1,0,0,0,1}, {0,1,0,1,1,1,1}, {0,1,1,1,0,1,1}, - {0,1,1,0,1,1,1}, {0,0,0,1,0,1,1} - }; - int data_left_even[10][7] = { - {0,1,0,0,1,1,1}, {0,1,1,0,0,1,1}, {0,0,1,1,0,1,1}, {0,1,0,0,0,0,1}, - {0,0,1,1,1,0,1}, {0,1,1,1,0,0,1}, {0,0,0,0,1,0,1}, {0,0,1,0,0,0,1}, - {0,0,0,1,0,0,1}, {0,0,1,0,1,1,1} - }; - int data_right[10][7] = { - {1,1,1,0,0,1,0}, {1,1,0,0,1,1,0}, {1,1,0,1,1,0,0}, {1,0,0,0,0,1,0}, - {1,0,1,1,1,0,0}, {1,0,0,1,1,1,0}, {1,0,1,0,0,0,0}, {1,0,0,0,1,0,0}, - {1,0,0,1,0,0,0}, {1,1,1,0,1,0,0} - }; - uint8 code[13+1]; - uint32 tmp_p=0; - int i, j; - int len; - - for(i=len=0;i<13;i++) - { - if(!rcode[i]) break; - - if((code[i]=rcode[i]-'0') > 9) - return(0); - len++; - } - if(len!=13 && len!=12 && len!=8 && len!=7) return(0); - - #define BS(x) BarcodeData[tmp_p]=x;tmp_p++ - - for(j=0;j<32;j++) - { - BS(0x00); - } - - /* Left guard bars */ - BS(1); BS(0); BS(1); - - if(len==13 || len==12) - { - uint32 csum; - - for(i=0;i<6;i++) - if(prefix_parity_type[code[0]][i]) - { - for(j=0;j<7;j++) - { - BS(data_left_even[code[i+1]][j]); - } - } - else - for(j=0;j<7;j++) - { - BS(data_left_odd[code[i+1]][j]); - } - - /* Center guard bars */ - BS(0); BS(1); BS(0); BS(1); BS(0); - - for(i=7;i<12;i++) - for(j=0;j<7;j++) - { - BS(data_right[code[i]][j]); - } - csum=0; - for(i=0;i<12;i++) csum+=code[i]*((i&1)?3:1); - csum=(10-(csum%10))%10; - //printf("%d\n",csum); - for(j=0;j<7;j++) - { - BS(data_right[csum][j]); - } - - } - else if(len==8 || len==7) - { - uint32 csum=0; - - for(i=0;i<7;i++) csum+=(i&1)?code[i]:(code[i]*3); - - csum=(10-(csum%10))%10; - - for(i=0;i<4;i++) - for(j=0;j<7;j++) - { - BS(data_left_odd[code[i]][j]); - } - - - /* Center guard bars */ - BS(0); BS(1); BS(0); BS(1); BS(0); - - for(i=4;i<7;i++) - for(j=0;j<7;j++) - { - BS(data_right[code[i]][j]); - } - - for(j=0;j<7;j++) - { BS(data_right[csum][j]);} - - } - - /* Right guard bars */ - BS(1); BS(0); BS(1); - - for(j=0;j<32;j++) - { - BS(0x00); - } - - BS(0xFF); - #undef BS - BarcodeReadPos=0; - BarcodeOut=0x8; - BarcodeCycleCount=0; - return(1); -} - -static void BarcodeIRQHook(int a) -{ - BandaiIRQHook(a); - - BarcodeCycleCount+=a; - - if(BarcodeCycleCount >= 1000) - { - BarcodeCycleCount -= 1000; - if(BarcodeData[BarcodeReadPos]==0xFF) - { - BarcodeOut=0; - } - else - { - BarcodeOut=(BarcodeData[BarcodeReadPos]^1)<<3; - BarcodeReadPos++; - } - } -} - -static DECLFR(Mapper157_read) -{ - uint8 ret; - - ret=BarcodeOut; - return(ret); -} - -void Mapper157_init(void) -{ - GameInfo->cspecial = SIS_DATACH; - MapIRQHook=BarcodeIRQHook; - SetWriteHandler(0x6000,0xFFFF,Mapper16_write); - SetReadHandler(0x6000,0x7FFF,Mapper157_read); - - BarcodeData[0]=0xFF; - BarcodeReadPos=0; - BarcodeOut=0; - BarcodeCycleCount=0; -} diff --git a/src/unif.cpp b/src/unif.cpp index 7ed8e562..d1a8f32d 100644 --- a/src/unif.cpp +++ b/src/unif.cpp @@ -317,133 +317,112 @@ static int LoadCHR(FCEUFILE *fp) static BMAPPING bmap[] = { - /* Sachen Carts */ - { "TC-U01-1.5M", TCU01_Init,0}, + { "13in1JY110", BMC13in1JY110_Init, 0}, + { "190in1", BMC190in1_Init, 0}, + { "22211", UNL22211_Init,0}, + { "3D-BLOCK", UNL3DBlock_Init, 0}, + { "411120-C",BMC411120C_Init, 0}, + { "603-5052", UNL6035052_Init,0}, + { "64in1NoRepeat", BMC64in1nr_Init, 0}, + { "70in1", BMC70in1_Init, 0}, + { "70in1B", BMC70in1B_Init, 0}, + { "8157", UNL8157_Init,0}, + { "8237", UNL8237_Init,0}, + { "8237A", UNL8237A_Init,0}, + { "830118C",BMC830118C_Init, 0}, + { "A65AS", BMCA65AS_Init,0}, + { "ANROM", ANROM_Init,0}, + { "AX5705", UNLAX5705_Init, 0}, + { "BS-5",BMCBS5_Init, 0}, + { "C-N22M", UNLCN22M_Init,0}, + { "CC-21", UNLCC21_Init,0}, + { "CITYFIGHT", UNLCITYFIGHT_Init, 0}, + { "CNROM", CNROM_Init,0}, + { "CPROM", CPROM_Init,BMCFLAG_16KCHRR}, + { "D1038", BMCD1038_Init, 0}, + { "DREAMTECH01", DreamTech01_Init,0}, + { "EDU2000", UNLEDU2000_Init,0}, + { "EKROM", EKROM_Init,0}, + { "ELROM", ELROM_Init,0}, + { "ETROM", ETROM_Init,0}, + { "EWROM", EWROM_Init,0}, + { "FK23C", BMCFK23C_Init,0}, + { "FK23C", BMCFK23C_Init,BMCFLAG_EXPCHRR}, + { "FK23CA", BMCFK23CA_Init,BMCFLAG_EXPCHRR}, + { "FS304", UNLFS304_Init,0}, + { "GK-192", BMCGK192_Init, 0}, + { "GS-2004", BMCGS2004_Init, 0}, + { "GS-2013", BMCGS2013_Init, 0}, + { "Ghostbusters63in1", BMCGhostbusters63in1_Init, 0}, + { "H2288", UNLH2288_Init,0}, + { "HKROM", HKROM_Init,0}, + { "KOF97", UNLKOF97_Init,0}, + { "KONAMI-QTAI", Mapper190_Init,0}, + { "KS7032", UNLKS7032_Init, 0}, + { "KS7057", UNLKS7057_Init, 0}, + { "MARIO1-MALEE2", MALEE_Init,0}, + { "MHROM", MHROM_Init,0}, + { "N625092", UNLN625092_Init,0}, + { "NROM", NROM_Init,0 }, + { "NROM-128", NROM_Init,0 }, + { "NROM-256", NROM_Init,0 }, + { "NTBROM", Mapper68_Init,0}, + { "NovelDiamond9999999in1", Novel_Init,0}, + { "OneBus", UNLOneBus_Init,0}, + { "RROM", NROM_Init,0 }, + { "RROM-128", NROM_Init,0 }, + { "SA-002", TCU02_Init, 0}, + { "SA-0036", SA0036_Init,0}, + { "SA-0037", SA0037_Init,0}, + { "SA-009", SA009_Init,0}, + { "SA-016-1M", SA0161M_Init,0}, + { "SA-72007", SA72007_Init,0}, + { "SA-72008", SA72008_Init,0}, + { "SA-NROM", TCA01_Init,0}, + { "SAROM", SAROM_Init,0}, + { "SBROM", SBROM_Init,0}, + { "SC-127", UNLSC127_Init,0}, + { "SCROM", SCROM_Init,0}, + { "SEROM", SEROM_Init,0}, + { "SGROM", SGROM_Init,0}, + { "SHERO", UNLSHeroes_Init,0}, + { "SKROM", SKROM_Init,0}, + { "SL1632", UNLSL1632_Init,0}, + { "SL1ROM", SL1ROM_Init,0}, + { "SLROM", SLROM_Init,0}, + { "SMB2J", UNLSMB2J_Init, 0}, + { "SNROM", SNROM_Init,0}, + { "SOROM", SOROM_Init,0}, + { "SUNSOFT_UNROM", SUNSOFT_UNROM_Init,0}, + { "Sachen-74LS374N", S74LS374N_Init,0}, + { "Sachen-74LS374NA", S74LS374NA_Init,0}, //seems to be custom mapper { "Sachen-8259A", S8259A_Init,0}, { "Sachen-8259B", S8259B_Init,0}, { "Sachen-8259C", S8259C_Init,0}, { "Sachen-8259D", S8259D_Init,0}, - { "Sachen-74LS374N", S74LS374N_Init,0}, - { "Sachen-74LS374NA", S74LS374NA_Init,0}, //seems to be custom mapper - { "SA-002", TCU02_Init, 0}, - { "SA-016-1M", SA0161M_Init,0}, - { "SA-72007", SA72007_Init,0}, - { "SA-72008", SA72008_Init,0}, - { "SA-009", SA009_Init,0}, - { "SA-0036", SA0036_Init,0}, - { "SA-0037", SA0037_Init,0}, - { "SA-NROM", TCA01_Init,0}, - - // /* AVE carts. */ - // { "MB-91", MB91_Init,0}, // DeathBots - // { "NINA-06", NINA06_Init,0}, // F-15 City War - // { "NINA-03", NINA03_Init,0}, // Tiles of Fate - // { "NINA-001", NINA001_Init,0}, // Impossible Mission 2 - - { "ANROM", ANROM_Init,0}, - - { "HKROM", HKROM_Init,0}, - - { "EWROM", EWROM_Init,0}, - { "EKROM", EKROM_Init,0}, - { "ELROM", ELROM_Init,0}, - { "ETROM", ETROM_Init,0}, - - { "SAROM", SAROM_Init,0}, - { "SBROM", SBROM_Init,0}, - { "SCROM", SCROM_Init,0}, - { "SEROM", SEROM_Init,0}, - { "SGROM", SGROM_Init,0}, - { "SKROM", SKROM_Init,0}, - { "SLROM", SLROM_Init,0}, - { "SL1ROM", SL1ROM_Init,0}, - { "SNROM", SNROM_Init,0}, - { "SOROM", SOROM_Init,0}, - - { "TGROM", TGROM_Init,0}, - { "TR1ROM", TFROM_Init,BMCFLAG_FORCE4}, - + { "Super24in1SC03", Super24_Init,0}, + { "SuperHIK8in1", Mapper45_Init,0}, + { "Supervision16in1", Supervision16_Init,0}, + { "T-227-1",BMCT2271_Init,0}, + { "T-230", UNLT230_Init, 0}, + { "T-262", BMCT262_Init,0}, { "TBROM", TBROM_Init,0}, + { "TC-U01-1.5M", TCU01_Init,0}, + { "TEK90", Mapper90_Init,0}, { "TEROM", TEROM_Init,0}, + { "TF1201", UNLTF1201_Init, 0}, { "TFROM", TFROM_Init,0}, - { "TLROM", TLROM_Init,0}, + { "TGROM", TGROM_Init,0}, { "TKROM", TKROM_Init,0}, - { "TSROM", TSROM_Init,0}, - - { "TLSROM", TLSROM_Init,0}, { "TKSROM", TKSROM_Init,0}, + { "TLROM", TLROM_Init,0}, + { "TLSROM", TLSROM_Init,0}, { "TQROM", TQROM_Init,0}, + { "TR1ROM", TFROM_Init,BMCFLAG_FORCE4}, + { "TSROM", TSROM_Init,0}, { "TVROM", TLROM_Init,BMCFLAG_FORCE4}, - - { "NTBROM", Mapper68_Init,0}, - - { "CPROM", CPROM_Init,BMCFLAG_16KCHRR}, - { "CNROM", CNROM_Init,0}, - { "NROM", NROM_Init,0 }, //NROM256_Init,0 }, - { "NROM-128", NROM_Init,0 }, //NROM128_Init,0 }, - { "NROM-256", NROM_Init,0 }, //NROM256_Init,0 }, - { "RROM", NROM_Init,0 }, //NROM128_Init,0 }, - { "RROM-128", NROM_Init,0 }, //NROM128_Init,0 }, - { "MHROM", MHROM_Init,0}, { "UNROM", UNROM_Init,0}, { "UOROM", UNROM_Init,0}, - { "SUNSOFT_UNROM", SUNSOFT_UNROM_Init,0}, - { "MARIO1-MALEE2", MALEE_Init,0}, - { "3D-BLOCK", UNL3DBlock_Init, 0}, - { "SMB2J", UNLSMB2J_Init, 0}, - { "AX5705", UNLAX5705_Init, 0}, - { "CC-21", UNLCC21_Init,0}, - { "H2288", UNLH2288_Init,0}, - { "KOF97", UNLKOF97_Init,0}, - { "SL1632", UNLSL1632_Init,0}, - { "SHERO", UNLSHeroes_Init,0}, - { "8237", UNL8237_Init,0}, - { "8237A", UNL8237A_Init,0}, - { "8157", UNL8157_Init,0}, - { "T-262", BMCT262_Init,0}, - { "FK23C", BMCFK23C_Init,0}, - { "FS304", UNLFS304_Init,0}, - { "A65AS", BMCA65AS_Init,0}, - { "C-N22M", UNLCN22M_Init,0}, - { "EDU2000", UNLEDU2000_Init,0}, - { "603-5052", UNL6035052_Init,0}, - { "N625092", UNLN625092_Init,0}, - { "Supervision16in1", Supervision16_Init,0}, - { "NovelDiamond9999999in1", Novel_Init,0}, - { "Super24in1SC03", Super24_Init,0}, - { "64in1NoRepeat", BMC64in1nr_Init, 0}, - { "13in1JY110", BMC13in1JY110_Init, 0}, - { "70in1", BMC70in1_Init, 0}, - { "70in1B", BMC70in1B_Init, 0}, - { "D1038", BMCD1038_Init, 0}, - { "GK-192", BMCGK192_Init, 0}, - { "SuperHIK8in1", Mapper45_Init,0}, - { "22211", UNL22211_Init,0}, - { "TF1201", UNLTF1201_Init, 0}, - { "GS-2004", BMCGS2004_Init, 0}, - { "GS-2013", BMCGS2013_Init, 0}, - { "KS7032", UNLKS7032_Init, 0}, - { "KS7057", UNLKS7057_Init, 0}, - { "T-230", UNLT230_Init, 0}, - { "CITYFIGHT", UNLCITYFIGHT_Init, 0}, - { "190in1", BMC190in1_Init, 0}, - { "Ghostbusters63in1", BMCGhostbusters63in1_Init, 0}, - { "BS-5",BMCBS5_Init, 0}, - { "411120-C",BMC411120C_Init, 0}, - { "830118C",BMC830118C_Init, 0}, - { "T-227-1",BMCT2271_Init,0}, - - { "DREAMTECH01", DreamTech01_Init,0}, - { "KONAMI-QTAI", Mapper190_Init,0}, - - { "DANCE", UNLDANCE_Init,0}, - { "OneBus", UNLOneBus_Init,0}, - { "SC-127", UNLSC127_Init,0}, - - { "TEK90", Mapper90_Init,0}, - - { "FK23C", BMCFK23C_Init,BMCFLAG_EXPCHRR}, - { "FK23CA", BMCFK23CA_Init,BMCFLAG_EXPCHRR}, {0,0,0} }; diff --git a/src/unif.h b/src/unif.h index bdd75b75..d021a66d 100644 --- a/src/unif.h +++ b/src/unif.h @@ -19,118 +19,104 @@ */ void ANROM_Init(CartInfo *info); - -void HKROM_Init(CartInfo *info); - -void ETROM_Init(CartInfo *info); +void BMC13in1JY110_Init(CartInfo *info); +void BMC190in1_Init(CartInfo *info); +void BMC411120C_Init(CartInfo *info); +void BMC64in1nr_Init(CartInfo *info); +void BMC70in1B_Init(CartInfo *info); +void BMC70in1_Init(CartInfo *info); +void BMC830118C_Init(CartInfo *info); +void BMCA65AS_Init(CartInfo *info); +void BMCBS5_Init(CartInfo *info); +void BMCD1038_Init(CartInfo *info); +void BMCFK23CA_Init(CartInfo *info); +void BMCFK23C_Init(CartInfo *info); +void BMCGK192_Init(CartInfo *info); +void BMCGS2004_Init(CartInfo *info); +void BMCGS2013_Init(CartInfo *info); +void BMCGhostbusters63in1_Init(CartInfo *info); +void BMCT2271_Init(CartInfo *info); +void BMCT262_Init(CartInfo *info); +void CNROM_Init(CartInfo *info); +void CPROM_Init(CartInfo *info); +void DEIROM_Init(CartInfo *info); +void DreamTech01_Init(CartInfo *info); void EKROM_Init(CartInfo *info); void ELROM_Init(CartInfo *info); +void ETROM_Init(CartInfo *info); void EWROM_Init(CartInfo *info); - +void GNROM_Init(CartInfo *info); +void HKROM_Init(CartInfo *info); +void MALEE_Init(CartInfo *info); +void MHROM_Init(CartInfo *info); +void Mapper190_Init(CartInfo *info); +void NROM_Init(CartInfo *info); +void Novel_Init(CartInfo *info); +void S74LS374NA_Init(CartInfo *info); +void S74LS374N_Init(CartInfo *info); +void S8259A_Init(CartInfo *info); +void S8259B_Init(CartInfo *info); +void S8259C_Init(CartInfo *info); +void S8259D_Init(CartInfo *info); +void SA0036_Init(CartInfo *info); +void SA0037_Init(CartInfo *info); +void SA009_Init(CartInfo *info); +void SA0161M_Init(CartInfo *info); +void SA72007_Init(CartInfo *info); +void SA72008_Init(CartInfo *info); void SAROM_Init(CartInfo *info); void SBROM_Init(CartInfo *info); void SCROM_Init(CartInfo *info); void SEROM_Init(CartInfo *info); void SGROM_Init(CartInfo *info); void SKROM_Init(CartInfo *info); -void SLROM_Init(CartInfo *info); void SL1ROM_Init(CartInfo *info); +void SLROM_Init(CartInfo *info); void SNROM_Init(CartInfo *info); void SOROM_Init(CartInfo *info); - -void NROM_Init(CartInfo *info); -void MHROM_Init(CartInfo *info); -void UNROM_Init(CartInfo *info); void SUNSOFT_UNROM_Init(CartInfo *info); // "Shanghi" original version mapper -void MALEE_Init(CartInfo *info); -void CNROM_Init(CartInfo *info); -void CPROM_Init(CartInfo *info); -void GNROM_Init(CartInfo *info); -void UNL3DBlock_Init(CartInfo *info); - +void Super24_Init(CartInfo *info); +void Supervision16_Init(CartInfo *info); void TBROM_Init(CartInfo *info); +void TCA01_Init(CartInfo *info); +void TCU01_Init(CartInfo *info); +void TCU02_Init(CartInfo *info); void TEROM_Init(CartInfo *info); void TFROM_Init(CartInfo *info); void TGROM_Init(CartInfo *info); void TKROM_Init(CartInfo *info); -void TSROM_Init(CartInfo *info); +void TKSROM_Init(CartInfo *info); void TLROM_Init(CartInfo *info); void TLSROM_Init(CartInfo *info); -void TKSROM_Init(CartInfo *info); void TQROM_Init(CartInfo *info); void TQROM_Init(CartInfo *info); - -void DEIROM_Init(CartInfo *info); - -void TCA01_Init(CartInfo *info); -void TCU01_Init(CartInfo *info); -void TCU02_Init(CartInfo *info); -void S8259A_Init(CartInfo *info); -void S8259B_Init(CartInfo *info); -void S8259C_Init(CartInfo *info); -void S8259D_Init(CartInfo *info); -void S74LS374N_Init(CartInfo *info); -void S74LS374NA_Init(CartInfo *info); -void SA0161M_Init(CartInfo *info); - -void SA72007_Init(CartInfo *info); -void SA72008_Init(CartInfo *info); -void SA009_Init(CartInfo *info); -void SA0036_Init(CartInfo *info); -void SA0037_Init(CartInfo *info); - -void Supervision16_Init(CartInfo *info); -void Super24_Init(CartInfo *info); -void Novel_Init(CartInfo *info); - -void BMC64in1nr_Init(CartInfo *info); -void BMC70in1_Init(CartInfo *info); -void BMC70in1B_Init(CartInfo *info); -void BMC13in1JY110_Init(CartInfo *info); -void BMCT262_Init(CartInfo *info); -void BMCFK23C_Init(CartInfo *info); -void BMCFK23CA_Init(CartInfo *info); -void BMCD1038_Init(CartInfo *info); -void BMCA65AS_Init(CartInfo *info); -void BMCGK192_Init(CartInfo *info); -void BMCGS2004_Init(CartInfo *info); -void BMCGS2013_Init(CartInfo *info); -void BMC190in1_Init(CartInfo *info); -void BMCGhostbusters63in1_Init(CartInfo *info); -void BMCBS5_Init(CartInfo *info); - -void DreamTech01_Init(CartInfo *info); -void UNLFS304_Init(CartInfo *info); -void Mapper190_Init(CartInfo *info); -void UNLCC21_Init(CartInfo *info); -void UNLCN22M_Init(CartInfo *info); -void UNLSL1632_Init(CartInfo *info); -void UNLKOF97_Init(CartInfo *info); -void UNLA9746_Init(CartInfo *info); -void UNLSHeroes_Init(CartInfo *info); -void UNLH2288_Init(CartInfo *info); -void UNL8237_Init(CartInfo *info); -void UNL8237A_Init(CartInfo *info); -void UNL8157_Init(CartInfo *info); +void TSROM_Init(CartInfo *info); void UNL22211_Init(CartInfo *info); -void UNLTF1201_Init(CartInfo *info); +void UNL3DBlock_Init(CartInfo *info); +void UNL6035052_Init(CartInfo *info); +void UNL8157_Init(CartInfo *info); +void UNL8237A_Init(CartInfo *info); +void UNL8237_Init(CartInfo *info); +void UNLA9746_Init(CartInfo *info); +void UNLAX5705_Init(CartInfo *info); +void UNLCC21_Init(CartInfo *info); +void UNLCITYFIGHT_Init(CartInfo *info); +void UNLCN22M_Init(CartInfo *info); +void UNLEDU2000_Init(CartInfo *info); +void UNLFS304_Init(CartInfo *info); +void UNLH2288_Init(CartInfo *info); +void UNLKOF97_Init(CartInfo *info); void UNLKS7032_Init(CartInfo *info); void UNLKS7057_Init(CartInfo *info); -void UNLT230_Init(CartInfo *info); -void UNLCITYFIGHT_Init(CartInfo *info); -void UNLAX5705_Init(CartInfo *info); -void UNLDANCE_Init(CartInfo *info); +void UNLN625092_Init(CartInfo *info); void UNLOneBus_Init(CartInfo *info); void UNLSC127_Init(CartInfo *info); - -void UNLEDU2000_Init(CartInfo *info); -void UNL6035052_Init(CartInfo *info); -void UNLN625092_Init(CartInfo *info); +void UNLSHeroes_Init(CartInfo *info); +void UNLSL1632_Init(CartInfo *info); void UNLSMB2J_Init(CartInfo *info); -//void UNL09034A_Init(CartInfo *info); -void BMC411120C_Init(CartInfo *info); -void BMC830118C_Init(CartInfo *info); -void BMCT2271_Init(CartInfo *info); +void UNLT230_Init(CartInfo *info); +void UNLTF1201_Init(CartInfo *info); +void UNROM_Init(CartInfo *info); extern uint8 *UNIFchrrama; // Meh. So I can stop CHR RAM // bank switcherooing with certain boards... diff --git a/vc/vc10_fceux.vcxproj b/vc/vc10_fceux.vcxproj index 55095583..258a1861 100644 --- a/vc/vc10_fceux.vcxproj +++ b/vc/vc10_fceux.vcxproj @@ -539,7 +539,6 @@ - diff --git a/vc/vc10_fceux.vcxproj.filters b/vc/vc10_fceux.vcxproj.filters index 951c702f..42d2d670 100644 --- a/vc/vc10_fceux.vcxproj.filters +++ b/vc/vc10_fceux.vcxproj.filters @@ -650,9 +650,6 @@ mappers - - mappers - mappers diff --git a/vc/vc8_fceux.vcproj b/vc/vc8_fceux.vcproj index f12e1792..ed970dc5 100644 --- a/vc/vc8_fceux.vcproj +++ b/vc/vc8_fceux.vcproj @@ -4004,10 +4004,6 @@ RelativePath="..\src\mappers\151.cpp" > - - diff --git a/vc/vc9_fceux.vcproj b/vc/vc9_fceux.vcproj index 6afb729f..8726c6da 100644 --- a/vc/vc9_fceux.vcproj +++ b/vc/vc9_fceux.vcproj @@ -2217,10 +2217,6 @@ RelativePath="..\src\mappers\156.cpp" > - -