hook up new c-chip to superman and volfied

This commit is contained in:
dinkc64 2018-03-27 13:37:57 +00:00
parent eb4948acb3
commit 7f6d71d3c3
8 changed files with 112 additions and 169 deletions

View File

@ -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

View File

@ -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),$(<D))/$(@F) $(foreach dir,$(alldir),--include-dir $(srcdir)$(dir))
else
@echo @windres -F pe-i386 $(DEF) $< -o $(subst $(srcdir),$(objdir),$(<D))/$(@F) $(foreach dir,$(alldir),--include-dir $(srcdir)$(dir))
@windres -F pe-i386 $(DEF) $< -o $(subst $(srcdir),$(objdir),$(<D))/$(@F) $(foreach dir,$(alldir),--include-dir $(srcdir)$(dir))
endif
endif
@ -730,10 +724,12 @@ ifeq ($(MAKELEVEL),1)
%.o: %.cpp
@echo Compiling $<...
@echo $(CC) $(CXXFLAGS) -c $< -o $(subst $(srcdir),$(objdir),$(<D))/$(@F)
@$(CC) $(CXXFLAGS) -c $< -o $(subst $(srcdir),$(objdir),$(<D))/$(@F)
%.o: %.c
@echo Compiling $<...
@echo $(CC) $(CFLAGS) -c $< -o $(subst $(srcdir),$(objdir),$(<D))/$(@F)
@$(CC) $(CFLAGS) -c $< -o $(subst $(srcdir),$(objdir),$(<D))/$(@F)
%.o: %.asm
@ -744,6 +740,7 @@ else
%.o: %.c
@echo Compiling $<...
@echo $(CC) $(CFLAGS) -c $< -o $@
@$(CC) $(CFLAGS) -c $< -o $@
%.o: %.asm

View File

@ -31,20 +31,5 @@ extern UINT8 cchip_active;
} \
if (a >= (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); \
}
}

View File

@ -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

View File

@ -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,

View File

@ -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,

View File

@ -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);

View File

@ -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);