📄 wiz.c
字号:
{
3, /* 3 chips */
14318000/8, /* ? */
{ 10, 10, 10 },
{ 0 },
{ 0 },
{ 0 },
{ 0 }
};
static struct AY8910interface stinger_ay8910_interface =
{
2, /* 2 chips */
14318000/8, /* ? */
{ 25, 25 },
{ 0 },
{ 0 },
{ 0 },
{ 0 }
};
#define MACHINE_DRIVER(NAME) \
static struct MachineDriver NAME##_machine_driver = \
{ \
{ \
{ \
CPU_Z80, \
18432000/6, /* 3.072 Mhz ??? */ \
0, \
readmem,writemem,0,0, \
nmi_interrupt,1 \
}, \
{ \
CPU_Z80 | CPU_AUDIO_CPU, \
14318000/8, /* ? */ \
3, \
sound_readmem,sound_writemem,0,0, \
nmi_interrupt,3 /* ??? */ \
} \
}, \
60, DEFAULT_REAL_60HZ_VBLANK_DURATION, /* frames per second, vblank duration */ \
1, /* 1 CPU slice per frame - interleaving is forced when a sound command is written */ \
0, \
\
/* video hardware */ \
32*8, 32*8, { 0*8, 32*8-1, 2*8, 30*8-1 }, \
NAME##_gfxdecodeinfo, \
256,32*8, \
wiz_vh_convert_color_prom, \
\
VIDEO_TYPE_RASTER, \
0, \
generic_vh_start, \
generic_vh_stop, \
NAME##_vh_screenrefresh, \
\
/* sound hardware */ \
0,0,0,0, \
{ \
{ \
SOUND_AY8910, \
&NAME##_ay8910_interface \
} \
} \
}
MACHINE_DRIVER(wiz);
MACHINE_DRIVER(stinger);
/***************************************************************************
Game driver(s)
***************************************************************************/
ROM_START( wiz_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "ic07_01.bin", 0x0000, 0x4000, 0xc05f2c78 )
ROM_LOAD( "ic05_03.bin", 0x4000, 0x4000, 0x7978d879 )
ROM_LOAD( "ic06_02.bin", 0x8000, 0x4000, 0x9c406ad2 )
ROM_REGION_DISPOSE(0x12000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "ic12_04.bin", 0x00000, 0x2000, 0x8969acdd )
ROM_LOAD( "ic13_05.bin", 0x02000, 0x2000, 0x2868e6a5 )
ROM_LOAD( "ic14_06.bin", 0x04000, 0x2000, 0xb398e142 )
ROM_LOAD( "ic03_07.bin", 0x06000, 0x2000, 0x297c02fc )
ROM_CONTINUE( 0x0c000, 0x2000 )
ROM_LOAD( "ic02_08.bin", 0x08000, 0x2000, 0xede77d37 )
ROM_CONTINUE( 0x0e000, 0x2000 )
ROM_LOAD( "ic01_09.bin", 0x0a000, 0x2000, 0x4d86b041 )
ROM_CONTINUE( 0x10000, 0x2000 )
ROM_REGION(0x0400) /* color proms */
ROM_LOAD( "ic23_3-1.bin", 0x0000, 0x0100, 0x2dd52fb2 ) /* palette red component */
ROM_LOAD( "ic23_3-2.bin", 0x0100, 0x0100, 0x8c2880c9 ) /* palette green component */
ROM_LOAD( "ic23_3-3.bin", 0x0200, 0x0100, 0xa488d761 ) /* palette blue component */
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "ic57_10.bin", 0x0000, 0x2000, 0x8a7575bd )
ROM_END
ROM_START( stinger_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "n1.bin", 0x0000, 0x2000, 0xf2d2790c )
ROM_LOAD( "n2.bin", 0x2000, 0x2000, 0x8fd2d8d8 )
ROM_LOAD( "n3.bin", 0x4000, 0x2000, 0xf1794d36 )
ROM_LOAD( "n4.bin", 0x6000, 0x2000, 0x230ba682 )
ROM_LOAD( "n5.bin", 0x8000, 0x2000, 0xa03a01da )
ROM_REGION_DISPOSE(0xc000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "7.bin", 0x0000, 0x2000, 0x775489be )
ROM_LOAD( "8.bin", 0x2000, 0x2000, 0x43c61b3f )
ROM_LOAD( "9.bin", 0x4000, 0x2000, 0xc9ed8fc7 )
ROM_LOAD( "10.bin", 0x6000, 0x2000, 0xf6721930 )
ROM_LOAD( "11.bin", 0x8000, 0x2000, 0xa4404e63 )
ROM_LOAD( "12.bin", 0xa000, 0x2000, 0xb60fa88c )
ROM_REGION(0x0300) /* color PROMs */
ROM_LOAD( "stinger.a7", 0x0000, 0x0100, 0x52c06fc2 ) /* red component */
ROM_LOAD( "stinger.b7", 0x0100, 0x0100, 0x9985e575 ) /* green component */
ROM_LOAD( "stinger.a8", 0x0200, 0x0100, 0x76b57629 ) /* blue component */
ROM_REGION(0x10000) /* 64k for sound cpu */
ROM_LOAD( "6.bin", 0x0000, 0x2000, 0x79757f0c )
ROM_END
ROM_START( scion_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "sc1", 0x0000, 0x2000, 0x8dcad575 )
ROM_LOAD( "sc2", 0x2000, 0x2000, 0xf608e0ba )
ROM_LOAD( "sc3", 0x4000, 0x2000, 0x915289b9 )
ROM_LOAD( "4.9j", 0x6000, 0x2000, 0x0f40d002 )
ROM_LOAD( "5.10j", 0x8000, 0x2000, 0xdc4923b7 )
ROM_REGION_DISPOSE(0xc000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "7.10e", 0x0000, 0x2000, 0x223e0d2a )
ROM_LOAD( "8.12e", 0x2000, 0x2000, 0xd3e39b48 )
ROM_LOAD( "9.15e", 0x4000, 0x2000, 0x630861b5 )
ROM_LOAD( "10.10h", 0x6000, 0x2000, 0x0d2a0d1e )
ROM_LOAD( "11.12h", 0x8000, 0x2000, 0xdc6ef8ab )
ROM_LOAD( "12.15h", 0xa000, 0x2000, 0xc82c28bf )
ROM_REGION(0x0300) /* color PROMs */
ROM_LOAD( "82s129.7a", 0x0000, 0x0100, 0x2f89d9ea ) /* red component */
ROM_LOAD( "82s129.7b", 0x0100, 0x0100, 0xba151e6a ) /* green component */
ROM_LOAD( "82s129.8a", 0x0200, 0x0100, 0xf681ce59 ) /* blue component */
ROM_REGION(0x10000) /* 64k for sound cpu */
ROM_LOAD( "sc6", 0x0000, 0x2000, 0x09f5f9c1 )
ROM_END
ROM_START( scionc_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "1.5j", 0x0000, 0x2000, 0x5aaf571e )
ROM_LOAD( "2.6j", 0x2000, 0x2000, 0xd5a66ac9 )
ROM_LOAD( "3.8j", 0x4000, 0x2000, 0x6e616f28 )
ROM_LOAD( "4.9j", 0x6000, 0x2000, 0x0f40d002 )
ROM_LOAD( "5.10j", 0x8000, 0x2000, 0xdc4923b7 )
ROM_REGION_DISPOSE(0xc000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "7.10e", 0x0000, 0x2000, 0x223e0d2a )
ROM_LOAD( "8.12e", 0x2000, 0x2000, 0xd3e39b48 )
ROM_LOAD( "9.15e", 0x4000, 0x2000, 0x630861b5 )
ROM_LOAD( "10.10h", 0x6000, 0x2000, 0x0d2a0d1e )
ROM_LOAD( "11.12h", 0x8000, 0x2000, 0xdc6ef8ab )
ROM_LOAD( "12.15h", 0xa000, 0x2000, 0xc82c28bf )
ROM_REGION(0x0300) /* color PROMs */
ROM_LOAD( "82s129.7a", 0x0000, 0x0100, 0x2f89d9ea ) /* red component */
ROM_LOAD( "82s129.7b", 0x0100, 0x0100, 0xba151e6a ) /* green component */
ROM_LOAD( "82s129.8a", 0x0200, 0x0100, 0xf681ce59 ) /* blue component */
ROM_REGION(0x10000) /* 64k for sound cpu */
ROM_LOAD( "6.9f", 0x0000, 0x2000, 0xa66a0ce6 )
ROM_END
static void stinger_decode(void)
{
static const unsigned char xortable[4][4] =
{
{ 0xa0,0x88,0x88,0xa0 }, /* .........00.0... */
{ 0x88,0x00,0xa0,0x28 }, /* .........00.1... */
{ 0x80,0xa8,0x20,0x08 }, /* .........01.0... */
{ 0x28,0x28,0x88,0x88 } /* .........01.1... */
};
int A;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
for (A = 0x0000;A < 0xc000;A++)
{
int row,col;
unsigned char src;
if (A & 0x2040)
{
/* not encrypted */
ROM[A] = RAM[A];
}
else
{
src = RAM[A];
/* pick the translation table from bits 3 and 5 */
row = ((A >> 3) & 1) + (((A >> 5) & 1) << 1);
/* pick the offset in the table from bits 3 and 5 of the source data */
col = ((src >> 3) & 1) + (((src >> 5) & 1) << 1);
/* the bottom half of the translation table is the mirror image of the top */
if (src & 0x80) col = 3 - col;
/* decode the opcodes */
ROM[A] = src ^ xortable[row][col];
}
}
}
static int wiz_hiload(void)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
/* check if the hi score table has already been initialized */
if (memcmp(&RAM[0xc04e],"\x4d\x43",2) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0xc01e],0x32);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void wiz_hisave(void)
{
void *f;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite(f,&RAM[0xc01e],0x32);
osd_fclose(f);
}
}
static int stinger_hiload(void)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
/* check if the hi score table has already been initialized */
if (memcmp(&RAM[0xc211],"\x11\x23\x10",3) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0xc031],0x2a);
osd_fread(f,&RAM[0xc200],0x14);
osd_fclose(f);
memcpy(&RAM[0xc079], &RAM[0xc031], 6);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void stinger_hisave(void)
{
void *f;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite(f,&RAM[0xc031],0x2a);
osd_fwrite(f,&RAM[0xc200],0x14);
osd_fclose(f);
}
}
static int scion_hiload(void)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
/* check if the hi score table has already been initialized */
if (memcmp(&RAM[0xc0bd],"\x18\x11\x1e",3) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0xc070],0x50);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void scion_hisave(void)
{
void *f;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite(f,&RAM[0xc070],0x50);
osd_fclose(f);
}
}
struct GameDriver wiz_driver =
{
__FILE__,
0,
"wiz",
"Wiz",
"1985",
"Seibu Kaihatsu",
"Zsolt Vasvari",
GAME_IMPERFECT_COLORS,
&wiz_machine_driver,
0,
wiz_rom,
0, 0,
0,
0, /* sound_prom */
wiz_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_270,
wiz_hiload, wiz_hisave
};
struct GameDriver stinger_driver =
{
__FILE__,
0,
"stinger",
"Stinger",
"1983",
"Seibu Denshi",
"Nicola Salmoria",
GAME_IMPERFECT_COLORS,
&stinger_machine_driver,
0,
stinger_rom,
0, stinger_decode,
0,
0,
stinger_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_90,
stinger_hiload, stinger_hisave
};
struct GameDriver scion_driver =
{
__FILE__,
0,
"scion",
"Scion",
"1984",
"Seibu Denshi",
"Nicola Salmoria",
GAME_IMPERFECT_COLORS,
&stinger_machine_driver,
0,
scion_rom,
0, 0,
0,
0,
scion_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_DEFAULT,
scion_hiload, scion_hisave
};
struct GameDriver scionc_driver =
{
__FILE__,
&scion_driver,
"scionc",
"Scion (Cinematronics)",
"1984",
"Seibu Denshi [Cinematronics license]",
"Nicola Salmoria",
GAME_IMPERFECT_COLORS,
&stinger_machine_driver,
0,
scionc_rom,
0, 0,
0,
0,
scion_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_DEFAULT,
scion_hiload, scion_hisave
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -