diff --git a/makefile b/makefile index d0e786db6..f795e315a 100644 --- a/makefile +++ b/makefile @@ -19,10 +19,10 @@ export UNICODE = 1 # Use Segoe Fonts (installed by default on Windows Vista and newer) -USE_SEGOE = 1 +#USE_SEGOE = 1 # Build A68K ASM 68000 core -#BUILD_A68K = 1 +BUILD_A68K = 1 # Include x86 Assembly routines BUILD_X86_ASM = 1 @@ -40,10 +40,10 @@ INCLUDE_7Z_SUPPORT = 1 INCLUDE_AVI_RECORDING = 1 # Include Files that require C++11 (Killer Instinct, Midway Mortal Kombat style drivers, and associated files) - requires C++11 support -INCLUDE_CPLUSPLUS11_FILES = 1 +#INCLUDE_CPLUSPLUS11_FILES = 1 # Include symbols and other debug information in the executable -#SYMBOL = 1 +SYMBOL = 1 # Include features for debugging drivers DEBUG = 1 diff --git a/makefile.mingw b/makefile.mingw index 908d9bb2d..42f275ac2 100644 --- a/makefile.mingw +++ b/makefile.mingw @@ -11,7 +11,7 @@ unexport # # Check for changes in header files -DEPEND = 1 +#DEPEND = 0 @@ -119,7 +119,6 @@ lib += -luser32 -lgdi32 -lcomdlg32 -lcomctl32 -lshell32 -lwinmm -lshlwapi -ladva ifdef INCLUDE_AVI_RECORDING lib += -lvfw32 endif - depobj += resource.o \ @@ -228,16 +227,15 @@ CXXFLAGS = -pipe \ endif ifdef GCC471 CFLAGS = -pipe \ - -std=gnu99 -O1 \ + -std=gnu99 -O3 \ -mwindows \ -fforce-addr -finline-limit=1200 -fthread-jumps \ - -fexpensive-optimizations \ -Wall -Wno-long-long -Wno-sign-compare -Wno-uninitialized -Wno-unused \ -Wno-sequence-point \ $(DEF) $(incdir) CXXFLAGS = -pipe \ - -std=gnu++11 -O1 \ + -std=gnu++11 -O3 \ -mwindows \ -fforce-addr -finline-limit=1200 -fthread-jumps \ -fexpensive-optimizations -fcheck-new \ @@ -352,9 +350,6 @@ endif ifdef BUILD_X64_EXE DEF := $(DEF) -DBUILD_X64_EXE -ifdef INCLUDE_CPLUSPLUS11_FILES - DEF := $(DEF) -DXBYAK_NO_OP_NAMES -DMIPS3_X64_DRC -endif endif ifdef USE_SEGOE @@ -474,7 +469,8 @@ endif $(NAME).exe: $(allobj) $(objdir)/drivers.o @echo @echo Linking executable... $(NAME).exe - @$(LD) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(lib) + @echo $(LD) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(lib) + $(LD) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(lib) ifdef DEBUG @@ -504,6 +500,9 @@ ifdef PERL @$(srcdir)dep/scripts/gamelist.pl -o $@ -l gamelist.txt \ $(filter %.cpp,$(foreach file,$(drvsrc:.o=.cpp),$(foreach dir,$(alldir), \ $(firstword $(wildcard $(srcdir)$(dir)/$(file)))))) + @echo @$(srcdir)dep/scripts/gamelist.pl -o $@ -l gamelist.txt \ + $(filter %.cpp,$(foreach file,$(drvobj:.o=.cpp),$(foreach dir,$(alldir), \ + $(firstword $(wildcard $(srcdir)$(dir)/$(file)))))) else ifeq ($(MAKELEVEL),2) @echo @@ -547,9 +546,11 @@ ifeq ($(MAKELEVEL),2) endif endif +@echo $(app_gnuc.rc): app.rc $(license.rc) $(license.rtf) $(srcdir)dep/scripts/fixrc.pl $(srcdir)burner/resource/fba.ico $(srcdir)burner/resource/about.bmp $(srcdir)burner/resource/splash.bmp $(srcdir)burner/resource/misc.bmp $(app_gnuc.rc): app.rc $(license.rc) $(license.rtf) $(srcdir)dep/scripts/fixrc.pl $(srcdir)burner/resource/fba.ico $(srcdir)burner/resource/about.bmp $(srcdir)burner/resource/splash.bmp $(srcdir)burner/resource/misc.bmp ifdef PERL + @echo @$(srcdir)dep/scripts/fixrc.pl $< -o $@ @$(srcdir)dep/scripts/fixrc.pl $< -o $@ else ifeq ($(MAKELEVEL),2) @@ -591,29 +592,21 @@ endif $(objdir)cpu/m68k/m68kcpu.o: $(srcdir)cpu/m68k/m68kcpu.c $(objdir)dep/generated/m68kops.h $(srcdir)cpu/m68k/m68k.h $(srcdir)cpu/m68k/m68kconf.h @echo Compiling Musashi MC680x0 core \(m68kcpu.c\)... + @echo $(CC) $(CFLAGS) -c $(srcdir)cpu/m68k/m68kcpu.c -o $(objdir)cpu/m68k/m68kcpu.o @$(CC) $(CFLAGS) -c $(srcdir)cpu/m68k/m68kcpu.c -o $(objdir)cpu/m68k/m68kcpu.o $(objdir)cpu/m68k/m68kops.o: $(objdir)cpu/m68k/m68kmake.exe $(objdir)dep/generated/m68kops.h $(objdir)dep/generated/m68kops.c $(srcdir)cpu/m68k/m68k.h $(srcdir)cpu/m68k/m68kconf.h @echo Compiling Musashi MC680x0 core \(m68kops.c\)... + @echo $(CC) $(CFLAGS) -c $(objdir)dep/generated/m68kops.c -o $(objdir)cpu/m68k/m68kops.o @$(CC) $(CFLAGS) -c $(objdir)dep/generated/m68kops.c -o $(objdir)cpu/m68k/m68kops.o -$(objdir)cpu/m68k/m68kopac.o: $(objdir)cpu/m68k/m68kmake.exe $(objdir)dep/generated/m68kops.h $(objdir)dep/generated/m68kopac.c $(srcdir)cpu/m68k/m68k.h $(srcdir)cpu/m68k/m68kconf.h - @echo Compiling Musashi MC680x0 core \(m68kopac.c\)... - @$(CC) $(CFLAGS) -c $(objdir)dep/generated/m68kopac.c -o $(objdir)cpu/m68k/m68kopac.o - -$(objdir)cpu/m68k/m68kopdm.o: $(objdir)cpu/m68k/m68kmake.exe $(objdir)dep/generated/m68kops.h $(objdir)dep/generated/m68kopdm.c $(srcdir)cpu/m68k/m68k.h $(srcdir)cpu/m68k/m68kconf.h - @echo Compiling Musashi MC680x0 core \(m68kopdm.c\)... - @$(CC) $(CFLAGS) -c $(objdir)dep/generated/m68kopdm.c -o $(objdir)cpu/m68k/m68kopdm.o - -$(objdir)cpu/m68k/m68kopnz.o: $(objdir)cpu/m68k/m68kmake.exe $(objdir)dep/generated/m68kops.h $(objdir)dep/generated/m68kopnz.c $(srcdir)cpu/m68k/m68k.h $(srcdir)cpu/m68k/m68kconf.h - @echo Compiling Musashi MC680x0 core \(m68kopnz.c\)... - @$(CC) $(CFLAGS) -c $(objdir)dep/generated/m68kopnz.c -o $(objdir)cpu/m68k/m68kopnz.o - $(objdir)dep/generated/m68kops.h: $(objdir)cpu/m68k/m68kmake.exe $(srcdir)cpu/m68k/m68k_in.c + @echo $(objdir)/cpu/m68k/m68kmake $(objdir)dep/generated/ $(srcdir)cpu/m68k/m68k_in.c $(objdir)/cpu/m68k/m68kmake $(objdir)dep/generated/ $(srcdir)cpu/m68k/m68k_in.c $(objdir)cpu/m68k/m68kmake.exe: $(srcdir)cpu/m68k/m68kmake.c @echo Compiling Musashi MC680x0 core \(m68kmake.c\)... + @echo $(CC) $(CFLAGS) $(srcdir)cpu/m68k/m68kmake.c -o $(objdir)cpu/m68k/m68kmake.exe @$(CC) $(CFLAGS) $(srcdir)cpu/m68k/m68kmake.c -o $(objdir)cpu/m68k/m68kmake.exe @@ -711,6 +704,7 @@ ifdef GCC471 ifdef BUILD_X64_EXE @windres -F pe-x86-64 $(DEF) $< -o $(subst $(srcdir),$(objdir),$(= (0x0800 | base) && a <= (0x0fff | base)) { \ cchip_asic_write68k((a & 0x7ff) >> 1, d); \ - } - -#define CCHIP_READ8(base) \ - if (a >= (0x0000 | base) && a <= (0x07ff | base)) \ - return cchip_68k_read((a & 0x7ff) >> 1); \ - \ - if (a >= (0x0800 | base) && a <= (0x0fff | base)) \ - return cchip_asic_read((a & 0x7ff) >> 1); - -#define CCHIP_WRITE8(base) \ - if (a >= (0x0000 | base) && a <= (0x07ff | base)) { \ - cchip_68k_write((a & 0x7ff) >> 1, d); \ return; \ - } \ - if (a >= (0x0800 | base) && a <= (0x0fff | base)) { \ - cchip_asic_write68k((a & 0x7ff) >> 1, d); \ - } + } diff --git a/src/burn/drv/taito/cchip.cpp b/src/burn/drv/taito/cchip.cpp index 2ece37081..6235b2be1 100644 --- a/src/burn/drv/taito/cchip.cpp +++ b/src/burn/drv/taito/cchip.cpp @@ -6,6 +6,7 @@ static UINT8 CurrentBank; +#if 0 // Superman C-Chip static UINT8 SupermanPort = 0; @@ -104,6 +105,7 @@ void SupermanCChipScan(INT32 nAction) SCAN_VAR(SupermanPort); } } +#endif // Mega Blast @@ -154,6 +156,7 @@ void MegabCChipScan(INT32 nAction) } } +#if 0 // Rainbow Islands C-Chip static UINT8 *CRAM[8]; @@ -927,6 +930,7 @@ void RainbowCChipScan(INT32 nAction) BurnRandomScan(nAction); } } +#endif ///////////////////////////////////////////////////////////////////////////////////////// @@ -2271,6 +2275,7 @@ void BonzeCChipScan(INT32 nAction) } #endif +#if 0 /************************************************************************* Volfied C-Chip Protection @@ -2683,8 +2688,9 @@ void VolfiedCChipRamWrite(INT32 offset, UINT8 data) } } } +#endif - +#if 0 /************************************* * * Reads from C-Chip @@ -2794,3 +2800,4 @@ void VolfiedCChipScan(INT32 nAction) SCAN_VAR(volfied_current_cmd); } } +#endif diff --git a/src/burn/drv/taito/d_taitomisc.cpp b/src/burn/drv/taito/d_taitomisc.cpp index 55f85f9ce..7109212ea 100644 --- a/src/burn/drv/taito/d_taitomisc.cpp +++ b/src/burn/drv/taito/d_taitomisc.cpp @@ -225,7 +225,7 @@ static struct BurnInputInfo VolfiedInputList[] = {"P2 Up" , BIT_DIGITAL , TaitoInputPort3 + 1, "p2 up" }, {"P2 Down" , BIT_DIGITAL , TaitoInputPort3 + 2, "p2 down" }, - {"P2 Left" , BIT_DIGITAL , TaitoInputPort3 + 3, "p2 left" }, + {"P2 Left" , BIT_DIGITAL , TaitoInputPort3 + 7, "p2 left" }, {"P2 Right" , BIT_DIGITAL , TaitoInputPort3 + 4, "p2 right" }, {"P2 Fire 1" , BIT_DIGITAL , TaitoInputPort3 + 5, "p2 fire 1" }, @@ -528,6 +528,8 @@ static void VolfiedMakeInputs() if (TaitoInputPort3[5]) TaitoInput[3] -= 0x20; if (TaitoInputPort3[6]) TaitoInput[3] -= 0x40; if (TaitoInputPort3[7]) TaitoInput[3] -= 0x80; + + cchip_loadports(TaitoInput[0], TaitoInput[1], TaitoInput[2], TaitoInput[3]); } static struct BurnDIPInfo DariusDIPList[]= @@ -2326,14 +2328,14 @@ static struct BurnRomInfo VolfiedRomDesc[] = { { "c04-09.14", 0x10000, 0xc78cf057, BRF_GRA | TAITO_SPRITESA_BYTESWAP }, { "c04-10.15", 0x10000, 0x429b6b49, BRF_GRA | TAITO_SPRITESA_BYTESWAP }, { "c04-09.14", 0x10000, 0xc78cf057, BRF_GRA | TAITO_SPRITESA_BYTESWAP }, + + { "cchip_c04-23", 0x02000, 0x46b0b479, BRF_ESS | BRF_PRG | TAITO_CCHIP_EEPROM }, { "c04-4-1.3", 0x00200, 0xab9fae65, BRF_OPT }, { "c04-5.75", 0x00200, 0x2763ec89, BRF_OPT }, - - { "cchip_c04-23", 0x02000, 0x00000000, BRF_OPT | BRF_NODUMP }, }; -STD_ROM_PICK(Volfied) +STDROMPICKEXT(Volfied, Volfied, cchip) STD_ROM_FN(Volfied) static struct BurnRomInfo VolfiedjRomDesc[] = { @@ -2356,14 +2358,14 @@ static struct BurnRomInfo VolfiedjRomDesc[] = { { "c04-09.14", 0x10000, 0xc78cf057, BRF_GRA | TAITO_SPRITESA_BYTESWAP }, { "c04-10.15", 0x10000, 0x429b6b49, BRF_GRA | TAITO_SPRITESA_BYTESWAP }, { "c04-09.14", 0x10000, 0xc78cf057, BRF_GRA | TAITO_SPRITESA_BYTESWAP }, + + { "cchip_c04-23", 0x02000, 0x46b0b479, BRF_ESS | BRF_PRG | TAITO_CCHIP_EEPROM }, { "c04-4-1.3", 0x00200, 0xab9fae65, BRF_OPT }, { "c04-5.75", 0x00200, 0x2763ec89, BRF_OPT }, - - { "cchip_c04-23", 0x02000, 0x00000000, BRF_OPT | BRF_NODUMP }, }; -STD_ROM_PICK(Volfiedj) +STDROMPICKEXT(Volfiedj, Volfiedj, cchip) STD_ROM_FN(Volfiedj) static struct BurnRomInfo VolfiedjoRomDesc[] = { @@ -2386,14 +2388,14 @@ static struct BurnRomInfo VolfiedjoRomDesc[] = { { "c04-09.14", 0x10000, 0xc78cf057, BRF_GRA | TAITO_SPRITESA_BYTESWAP }, { "c04-10.15", 0x10000, 0x429b6b49, BRF_GRA | TAITO_SPRITESA_BYTESWAP }, { "c04-09.14", 0x10000, 0xc78cf057, BRF_GRA | TAITO_SPRITESA_BYTESWAP }, + + { "cchip_c04-23", 0x02000, 0x46b0b479, BRF_ESS | BRF_PRG | TAITO_CCHIP_EEPROM }, { "c04-4-1.3", 0x00200, 0xab9fae65, BRF_OPT }, { "c04-5.75", 0x00200, 0x2763ec89, BRF_OPT }, - - { "cchip_c04-23", 0x02000, 0x00000000, BRF_OPT | BRF_NODUMP }, }; -STD_ROM_PICK(Volfiedjo) +STDROMPICKEXT(Volfiedjo, Volfiedjo, cchip) STD_ROM_FN(Volfiedjo) static struct BurnRomInfo VolfieduRomDesc[] = { @@ -2416,14 +2418,14 @@ static struct BurnRomInfo VolfieduRomDesc[] = { { "c04-09.14", 0x10000, 0xc78cf057, BRF_GRA | TAITO_SPRITESA_BYTESWAP }, { "c04-10.15", 0x10000, 0x429b6b49, BRF_GRA | TAITO_SPRITESA_BYTESWAP }, { "c04-09.14", 0x10000, 0xc78cf057, BRF_GRA | TAITO_SPRITESA_BYTESWAP }, + + { "cchip_c04-23", 0x02000, 0x46b0b479, BRF_ESS | BRF_PRG | TAITO_CCHIP_EEPROM }, { "c04-4-1.3", 0x00200, 0xab9fae65, BRF_OPT }, { "c04-5.75", 0x00200, 0x2763ec89, BRF_OPT }, - - { "cchip_c04-23", 0x02000, 0x00000000, BRF_OPT | BRF_NODUMP }, }; -STD_ROM_PICK(Volfiedu) +STDROMPICKEXT(Volfiedu, Volfiedu, cchip) STD_ROM_FN(Volfiedu) static int MemIndex() @@ -3431,10 +3433,7 @@ void __fastcall Topspeed68K2WriteWord(UINT32 a, UINT16 d) UINT8 __fastcall Volfied68KReadByte(UINT32 a) { - if (a >= 0xf00000 && a <= 0xf007ff) { - INT32 Offset = (a - 0xf00000) >> 1; - return VolfiedCChipRamRead(Offset); - } + CCHIP_READ(0xf00000) switch (a) { case 0xd00001: { @@ -3445,10 +3444,6 @@ UINT8 __fastcall Volfied68KReadByte(UINT32 a) return TC0140SYTCommRead(); } - case 0xf00803: { - return VolfiedCChipCtrlRead() & 0xff; - } - default: { bprintf(PRINT_NORMAL, _T("68K Read byte => %06X\n"), a); } @@ -3471,11 +3466,7 @@ void __fastcall Volfied68KWriteByte(UINT32 a, UINT8 d) return; } - if (a >= 0xf00000 && a <= 0xf007ff) { - INT32 Offset = (a - 0xf00000) >> 1; - VolfiedCChipRamWrite(Offset, d); - return; - } + CCHIP_WRITE(0xf00000) switch (a) { case 0x700001: { @@ -3488,16 +3479,6 @@ void __fastcall Volfied68KWriteByte(UINT32 a, UINT8 d) return; } - case 0xf00803: { - // cchip ctrl write - ignored - return; - } - - case 0xf00c01: { - VolfiedCChipBankWrite(d); - return; - } - default: { bprintf(PRINT_NORMAL, _T("68K Write byte => %06X, %02X\n"), a, d); } @@ -3506,11 +3487,8 @@ void __fastcall Volfied68KWriteByte(UINT32 a, UINT8 d) UINT16 __fastcall Volfied68KReadWord(UINT32 a) { - if (a >= 0xf00000 && a <= 0xf007ff) { - INT32 Offset = (a - 0xf00000) >> 1; - return VolfiedCChipRamRead(Offset); - } - + CCHIP_READ(0xf00000) + switch (a) { case 0xd00000: { return 0x60; @@ -3537,11 +3515,7 @@ void __fastcall Volfied68KWriteWord(UINT32 a, UINT16 d) return; } - if (a >= 0xf00000 && a <= 0xf007ff) { - INT32 Offset = (a - 0xf00000) >> 1; - VolfiedCChipRamWrite(Offset, d & 0xff); - return; - } + CCHIP_WRITE(0xf00000) switch (a) { case 0x600000: { @@ -3564,11 +3538,6 @@ void __fastcall Volfied68KWriteWord(UINT32 a, UINT16 d) return; } - case 0xf00c00: { - VolfiedCChipBankWrite(d); - return; - } - default: { bprintf(PRINT_NORMAL, _T("68K Write word => %06X, %04X\n"), a, d); } @@ -5353,7 +5322,7 @@ static INT32 VolfiedInit() nTaitoCyclesTotal[0] = 8000000 / 60; nTaitoCyclesTotal[1] = 4000000 / 60; - VolfiedCChipInit(); + cchip_init(); // Reset the driver TaitoResetFunction = VolfiedDoReset; @@ -6086,6 +6055,11 @@ static INT32 JumpingFrame() ZetOpen(0); BurnTimerUpdate(i * (nTaitoCyclesTotal[1] / nInterleave)); ZetClose(); + + if (cchip_active) { // volfied + cchip_run(12000000 / 60 / nInterleave); + if (i == 9) cchip_interrupt(); + } } ZetOpen(0); @@ -6542,7 +6516,7 @@ struct BurnDriver BurnDrvFullthrl = { }; struct BurnDriver BurnDrvVolfied = { - "volfied", NULL, NULL, NULL, "1989", + "volfied", NULL, "cchip", NULL, "1989", "Volfied (World, revision 1)\0", NULL, "Taito Corporation Japan", "Taito Misc", NULL, NULL, NULL, NULL, BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0, @@ -6552,7 +6526,7 @@ struct BurnDriver BurnDrvVolfied = { }; struct BurnDriver BurnDrvVolfiedj = { - "volfiedj", "volfied", NULL, NULL, "1989", + "volfiedj", "volfied", "cchip", NULL, "1989", "Volfied (Japan, revision 1)\0", NULL, "Taito Corporation", "Taito Misc", NULL, NULL, NULL, NULL, BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0, @@ -6562,7 +6536,7 @@ struct BurnDriver BurnDrvVolfiedj = { }; struct BurnDriver BurnDrvVolfiedjo = { - "volfiedjo", "volfied", NULL, NULL, "1989", + "volfiedjo", "volfied", "cchip", NULL, "1989", "Volfied (Japan)\0", NULL, "Taito Corporation", "Taito Misc", NULL, NULL, NULL, NULL, BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0, @@ -6572,7 +6546,7 @@ struct BurnDriver BurnDrvVolfiedjo = { }; struct BurnDriver BurnDrvVolfiedu = { - "volfiedu", "volfied", NULL, NULL, "1989", + "volfiedu", "volfied", "cchip", NULL, "1989", "Volfied (US, revision 1)\0", NULL, "Taito America Corporation", "Taito Misc", NULL, NULL, NULL, NULL, BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0, diff --git a/src/burn/drv/taito/d_taitox.cpp b/src/burn/drv/taito/d_taitox.cpp index 7e630bb0d..f41971b53 100644 --- a/src/burn/drv/taito/d_taitox.cpp +++ b/src/burn/drv/taito/d_taitox.cpp @@ -30,7 +30,7 @@ static struct BurnInputInfo SupermanInputList[]= {"Reset" , BIT_DIGITAL, &TaitoReset , "reset" }, {"Service" , BIT_DIGITAL, TaitoInputPort2 + 2, "service" }, - {"Tilt" , BIT_DIGITAL, TaitoInputPort2 + 3, "tilt" }, + {"Tilt" , BIT_DIGITAL, TaitoInputPort2 + 7, "tilt" }, {"Dip 1" , BIT_DIPSWITCH, TaitoDip + 0 , "dip" }, {"Dip 2" , BIT_DIPSWITCH, TaitoDip + 1 , "dip" }, }; @@ -76,7 +76,10 @@ static void TaitoXMakeInputs() TaitoInput[0] -= (TaitoInputPort0[i] & 1) << i; TaitoInput[1] -= (TaitoInputPort1[i] & 1) << i; TaitoInput[2] -= (TaitoInputPort2[i] & 1) << i; + } + if (cchip_active) { + cchip_loadports(TaitoInput[0], TaitoInput[1], 0, TaitoInput[2]); } } @@ -576,6 +579,15 @@ static struct BurnDIPInfo DaisenpuDIPList[]= STDDIPINFO(Daisenpu) +// Taito C-Chip BIOS +static struct BurnRomInfo emptyRomDesc[] = { + { "", 0, 0, 0 }, +}; + +static struct BurnRomInfo cchipRomDesc[] = { + { "cchip_upd78c11.bin", 0x01000, 0x43021521, BRF_BIOS | TAITO_CCHIP_BIOS}, +}; + static struct BurnRomInfo BallbrosRomDesc[] = { { "10a", 0x20000, 0x4af0e858, BRF_ESS | BRF_PRG | TAITO_68KROM1_BYTESWAP }, { "5a", 0x20000, 0x0b983a69, BRF_ESS | BRF_PRG | TAITO_68KROM1_BYTESWAP }, @@ -667,10 +679,10 @@ static struct BurnRomInfo SupermanRomDesc[] = { { "b61-01.e18", 0x80000, 0x3cf99786, BRF_SND | TAITO_YM2610B }, - { "b61_11.m11", 0x10000, 0x00000000, BRF_ESS | BRF_PRG | BRF_NODUMP }, + { "b61_11.m11", 0x02000, 0x3bc5d44b, BRF_ESS | BRF_PRG | TAITO_CCHIP_EEPROM }, }; -STD_ROM_PICK(Superman) +STDROMPICKEXT(Superman, Superman, cchip) STD_ROM_FN(Superman) static struct BurnRomInfo SupermanuRomDesc[] = { @@ -688,10 +700,10 @@ static struct BurnRomInfo SupermanuRomDesc[] = { { "b61-01.e18", 0x80000, 0x3cf99786, BRF_SND | TAITO_YM2610B }, - { "b61_11.m11", 0x10000, 0x00000000, BRF_ESS | BRF_PRG | BRF_NODUMP }, + { "b61_11.m11", 0x02000, 0x3bc5d44b, BRF_ESS | BRF_PRG | TAITO_CCHIP_EEPROM }, }; -STD_ROM_PICK(Supermanu) +STDROMPICKEXT(Supermanu, Supermanu, cchip) STD_ROM_FN(Supermanu) static struct BurnRomInfo SupermanjRomDesc[] = { @@ -709,10 +721,10 @@ static struct BurnRomInfo SupermanjRomDesc[] = { { "b61-01.e18", 0x80000, 0x3cf99786, BRF_SND | TAITO_YM2610B }, - { "b61_11.m11", 0x10000, 0x00000000, BRF_ESS | BRF_PRG | BRF_NODUMP }, + { "b61_11.m11", 0x02000, 0x3bc5d44b, BRF_ESS | BRF_PRG | TAITO_CCHIP_EEPROM }, }; -STD_ROM_PICK(Supermanj) +STDROMPICKEXT(Supermanj, Supermanj, cchip) STD_ROM_FN(Supermanj) static struct BurnRomInfo TwinhawkRomDesc[] = { @@ -771,6 +783,9 @@ static INT32 MemIndex() TaitoZ80Rom1 = Next; Next += TaitoZ80Rom1Size; TaitoYM2610ARom = Next; Next += TaitoYM2610ARomSize; TaitoYM2610BRom = Next; Next += TaitoYM2610BRomSize; + + cchip_rom = Next; Next += TaitoCCHIPBIOSSize; + cchip_eeprom = Next; Next += TaitoCCHIPEEPROMSize; TaitoRamStart = Next; @@ -792,10 +807,8 @@ static INT32 MemIndex() UINT8 __fastcall TaitoX68KReadByte(UINT32 a) { - if (TaitoIC_SupermanCChipInUse) { - if (a >= 0x900000 && a <= 0x9007ff) { - return SupermanCChipRamRead((a - 0x900000) >> 1, TaitoInput[0], TaitoInput[1], TaitoInput[2]); - } + if (cchip_active) { + CCHIP_READ(0x900000) } switch (a) { @@ -818,24 +831,8 @@ UINT8 __fastcall TaitoX68KReadByte(UINT32 a) case 0x800003: { return TC0140SYTCommRead(); } - - case 0x900001: { - return TaitoInput[0]; - } - - case 0x900003: { - return TaitoInput[1]; - } - - case 0x900005: { - return TaitoInput[2]; - } - - case 0x900803: { - if (TaitoIC_SupermanCChipInUse) return SupermanCChipCtrlRead(); - } - - default: { + + default: { bprintf(PRINT_NORMAL, _T("68K #1 Read byte => %06X\n"), a); } } @@ -845,13 +842,10 @@ UINT8 __fastcall TaitoX68KReadByte(UINT32 a) void __fastcall TaitoX68KWriteByte(UINT32 a, UINT8 d) { - if (TaitoIC_SupermanCChipInUse) { - if (a >= 0x900000 && a <= 0x9007ff) { - SupermanCChipRamWrite((a - 0x900000) >> 1, d); - return; - } + if (cchip_active) { + CCHIP_WRITE(0x900000) } - + switch (a) { case 0x300000: case 0x300001: { @@ -886,26 +880,7 @@ void __fastcall TaitoX68KWriteByte(UINT32 a, UINT8 d) TC0140SYTCommWrite(d); return; } - - case 0x900009: { - // coin write - return; - } - - case 0x900803: { - if (TaitoIC_SupermanCChipInUse) { - SupermanCChipCtrlWrite(); - return; - } - } - - case 0x900c01: { - if (TaitoIC_SupermanCChipInUse) { - SupermanCChipBankWrite(d); - return; - } - } - + case 0xc00000: case 0xc00001: { //??? @@ -1234,8 +1209,6 @@ static INT32 SupermanInit() { INT32 nRet; - SupermanCChipInit(); - TaitoSpriteAModulo = 0x200; TaitoSpriteANumPlanes = 4; TaitoSpriteAWidth = 16; @@ -1246,7 +1219,9 @@ static INT32 SupermanInit() TaitoNumSpriteA = 0x4000; nRet = TaitoXInit(0); - + + cchip_init(); + TaitoIrqLine = 6; return nRet; @@ -1498,6 +1473,11 @@ static INT32 TaitoXFrame() ZetOpen(0); BurnTimerUpdate(i * (nTaitoCyclesTotal[1] / nInterleave)); ZetClose(); + + if (cchip_active) { // superman + cchip_run(8000000 / 60 / nInterleave); + if (i == (nInterleave - 1)) cchip_interrupt(); + } } ZetOpen(0); @@ -1657,7 +1637,7 @@ struct BurnDriver BurnDrvKyustrkr = { }; struct BurnDriver BurnDrvSuperman = { - "superman", NULL, NULL, NULL, "1988", + "superman", NULL, "cchip", NULL, "1988", "Superman (World)\0", NULL, "Taito Corporation", "Taito X", NULL, NULL, NULL, NULL, BDF_GAME_WORKING, 2, HARDWARE_TAITO_TAITOX, GBF_SCRFIGHT, 0, @@ -1667,7 +1647,7 @@ struct BurnDriver BurnDrvSuperman = { }; struct BurnDriver BurnDrvSupermanu = { - "supermanu", "superman", NULL, NULL, "1988", + "supermanu", "superman", "cchip", NULL, "1988", "Superman (US)\0", NULL, "Taito Corporation", "Taito X", NULL, NULL, NULL, NULL, BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_TAITOX, GBF_SCRFIGHT, 0, @@ -1677,7 +1657,7 @@ struct BurnDriver BurnDrvSupermanu = { }; struct BurnDriver BurnDrvSupermanj = { - "supermanj", "superman", NULL, NULL, "1988", + "supermanj", "superman", "cchip", NULL, "1988", "Superman (Japan)\0", NULL, "Taito Corporation", "Taito X", NULL, NULL, NULL, NULL, BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_TAITOX, GBF_SCRFIGHT, 0, diff --git a/src/burn/drv/taito/taito.cpp b/src/burn/drv/taito/taito.cpp index afa8977dc..8dc0e3009 100644 --- a/src/burn/drv/taito/taito.cpp +++ b/src/burn/drv/taito/taito.cpp @@ -571,7 +571,7 @@ INT32 TaitoLoadRoms(INT32 bLoad) Offset = 0; i = Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum; - + while (i < Taito68KRom1Num + Taito68KRom2Num + Taito68KRom3Num + TaitoZ80Rom1Num + TaitoZ80Rom2Num + TaitoCharRomNum + TaitoCharBRomNum + TaitoSpriteARomNum) { BurnDrvGetRomInfo(&ri, i + 0); diff --git a/src/burn/drv/taito/taito_ic.cpp b/src/burn/drv/taito/taito_ic.cpp index 646b4aa7c..5ba7cfc87 100644 --- a/src/burn/drv/taito/taito_ic.cpp +++ b/src/burn/drv/taito/taito_ic.cpp @@ -26,11 +26,11 @@ INT32 TaitoWatchdog; void TaitoICReset() { - if (TaitoIC_SupermanCChipInUse) SupermanCChipReset(); + //if (TaitoIC_SupermanCChipInUse) SupermanCChipReset(); if (TaitoIC_MegabCChipInUse) MegabCChipReset(); - if (TaitoIC_RainbowCChipInUse) RainbowCChipReset(); + //if (TaitoIC_RainbowCChipInUse) RainbowCChipReset(); if (TaitoIC_OpwolfCChipInUse) OpwolfCChipReset(); - if (TaitoIC_VolfiedCChipInUse) VolfiedCChipReset(); + //if (TaitoIC_VolfiedCChipInUse) VolfiedCChipReset(); if (TaitoIC_PC080SNInUse) PC080SNReset(); if (TaitoIC_PC090OJInUse) PC090OJReset(); @@ -54,11 +54,11 @@ void TaitoICReset() void TaitoICExit() { - if (TaitoIC_SupermanCChipInUse) SupermanCChipExit(); + //if (TaitoIC_SupermanCChipInUse) SupermanCChipExit(); if (TaitoIC_MegabCChipInUse) MegabCChipExit(); - if (TaitoIC_RainbowCChipInUse) RainbowCChipExit(); + //if (TaitoIC_RainbowCChipInUse) RainbowCChipExit(); if (TaitoIC_OpwolfCChipInUse) OpwolfCChipExit(); - if (TaitoIC_VolfiedCChipInUse) VolfiedCChipExit(); + //if (TaitoIC_VolfiedCChipInUse) VolfiedCChipExit(); if (TaitoIC_PC080SNInUse) PC080SNExit(); if (TaitoIC_PC090OJInUse) PC090OJExit(); @@ -103,11 +103,11 @@ void TaitoICExit() void TaitoICScan(INT32 nAction) { - if (TaitoIC_SupermanCChipInUse) SupermanCChipScan(nAction); + //if (TaitoIC_SupermanCChipInUse) SupermanCChipScan(nAction); if (TaitoIC_MegabCChipInUse) MegabCChipScan(nAction); - if (TaitoIC_RainbowCChipInUse) RainbowCChipScan(nAction); + //if (TaitoIC_RainbowCChipInUse) RainbowCChipScan(nAction); if (TaitoIC_OpwolfCChipInUse) OpwolfCChipScan(nAction); - if (TaitoIC_VolfiedCChipInUse) VolfiedCChipScan(nAction); + //if (TaitoIC_VolfiedCChipInUse) VolfiedCChipScan(nAction); if (TaitoIC_PC080SNInUse) PC080SNScan(nAction); if (TaitoIC_PC090OJInUse) PC090OJScan(nAction);