📄 gyruss.c
字号:
512, /* 512 characters */
2, /* 2 bits per pixel */
{ 4, 0 },
{ 0, 1, 2, 3, 8*8+0,8*8+1,8*8+2,8*8+3 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
16*8 /* every char takes 16 consecutive bytes */
};
static struct GfxLayout spritelayout1 =
{
8,16, /* 16*8 sprites */
256, /* 256 sprites */
4, /* 4 bits per pixel */
{ 0x4000*8+4, 0x4000*8+0, 4, 0 },
{ 0, 1, 2, 3, 8*8, 8*8+1, 8*8+2, 8*8+3 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 },
64*8 /* every sprite takes 64 consecutive bytes */
};
static struct GfxLayout spritelayout2 =
{
16,16, /* 16*16 sprites */
256, /* 256 sprites */
4, /* 4 bits per pixel */
{ 0x4000*8+4, 0x4000*8+0, 4, 0 },
{ 0, 1, 2, 3, 8*8, 8*8+1, 8*8+2, 8*8+3,
16*8+0, 16*8+1, 16*8+2, 16*8+3, 24*8, 24*8+1, 24*8+2, 24*8+3 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 },
64*8 /* every sprite takes 64 consecutive bytes */
};
static struct GfxDecodeInfo gfxdecodeinfo[] =
{
{ 1, 0x0000, &charlayout, 0, 16 },
{ 1, 0x2000, &spritelayout1, 16*4, 16 }, /* upper half */
{ 1, 0x2010, &spritelayout1, 16*4, 16 }, /* lower half */
{ 1, 0x2000, &spritelayout2, 16*4, 16 },
{ -1 } /* end of array */
};
static struct AY8910interface ay8910_interface =
{
5, /* 5 chips */
1789772, /* 1.789772727 MHz */
{ 0x201e, 0x201e, 0x3023, 0x3023, 0x3023 },
/* R L | R R L */
/* effects | music */
{ 0, 0, gyruss_portA_r },
{ 0 },
{ 0 },
{ gyruss_filter0_w, gyruss_filter1_w }
};
#ifndef USE_SAMPLES
static struct DACinterface dac_interface =
{
1,
{ 80 }
};
#else
static struct Samplesinterface samples_interface =
{
1 /* 1 channel */
};
#endif
static struct MachineDriver machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
3072000, /* 3.072 Mhz (?) */
0,
readmem,writemem,0,0,
nmi_interrupt,1
},
{
CPU_Z80 | CPU_AUDIO_CPU,
3579545, /* 3.5795454 Mhz */
3, /* memory region #3 */
sound_readmem,sound_writemem,sound_readport,sound_writeport,
ignore_interrupt,1 /* interrupts are triggered by the main CPU */
},
#ifndef USE_SAMPLES
{
CPU_I8039 | CPU_AUDIO_CPU,
8000000/15, /* 8Mhz crystal */
5, /* memory region #5 */
i8039_readmem,i8039_writemem,i8039_readport,i8039_writeport,
ignore_interrupt,1
}
#endif
},
60, DEFAULT_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 },
gfxdecodeinfo,
32,16*4+16*16,
gyruss_vh_convert_color_prom,
VIDEO_TYPE_RASTER|VIDEO_SUPPORTS_DIRTY,
0,
generic_vh_start,
generic_vh_stop,
gyruss_vh_screenrefresh,
/* sound hardware */
SOUND_SUPPORTS_STEREO,gyruss_sh_start,0,0,
{
{
SOUND_AY8910,
&ay8910_interface
},
#ifndef USE_SAMPLES
{
SOUND_DAC,
&dac_interface
}
#else
{
SOUND_SAMPLES,
&samples_interface
}
#endif
}
};
/***************************************************************************
Game driver(s)
***************************************************************************/
ROM_START( gyruss_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "gyrussk.1", 0x0000, 0x2000, 0xc673b43d )
ROM_LOAD( "gyrussk.2", 0x2000, 0x2000, 0xa4ec03e4 )
ROM_LOAD( "gyrussk.3", 0x4000, 0x2000, 0x27454a98 )
/* the diagnostics ROM would go here */
ROM_REGION_DISPOSE(0xa000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "gyrussk.4", 0x0000, 0x2000, 0x27d8329b )
ROM_LOAD( "gyrussk.6", 0x2000, 0x2000, 0xc949db10 )
ROM_LOAD( "gyrussk.5", 0x4000, 0x2000, 0x4f22411a )
ROM_LOAD( "gyrussk.8", 0x6000, 0x2000, 0x47cd1fbc )
ROM_LOAD( "gyrussk.7", 0x8000, 0x2000, 0x8e8d388c )
ROM_REGION(0x0220) /* color PROMs */
ROM_LOAD( "gyrussk.pr3", 0x0000, 0x0020, 0x98782db3 ) /* palette */
ROM_LOAD( "gyrussk.pr1", 0x0020, 0x0100, 0x7ed057de ) /* sprite lookup table */
ROM_LOAD( "gyrussk.pr2", 0x0120, 0x0100, 0xde823a81 ) /* character lookup table */
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "gyrussk.1a", 0x0000, 0x2000, 0xf4ae1c17 )
ROM_LOAD( "gyrussk.2a", 0x2000, 0x2000, 0xba498115 )
/* the diagnostics ROM would go here */
ROM_REGION(0x2000) /* Gyruss also contains a 6809, we don't need to emulate it */
/* but need the data tables contained in its ROM */
ROM_LOAD( "gyrussk.9", 0x0000, 0x2000, 0x822bf27e )
ROM_REGION(0x1000) /* 8039 */
ROM_LOAD( "gyrussk.3a", 0x0000, 0x1000, 0x3f9b5dea )
ROM_END
ROM_START( gyrussce_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "gya-1.bin", 0x0000, 0x2000, 0x85f8b7c2 )
ROM_LOAD( "gya-2.bin", 0x2000, 0x2000, 0x1e1a970f )
ROM_LOAD( "gya-3.bin", 0x4000, 0x2000, 0xf6dbb33b )
/* the diagnostics ROM would go here */
ROM_REGION_DISPOSE(0xa000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "gyrussk.4", 0x0000, 0x2000, 0x27d8329b )
ROM_LOAD( "gyrussk.6", 0x2000, 0x2000, 0xc949db10 )
ROM_LOAD( "gyrussk.5", 0x4000, 0x2000, 0x4f22411a )
ROM_LOAD( "gyrussk.8", 0x6000, 0x2000, 0x47cd1fbc )
ROM_LOAD( "gyrussk.7", 0x8000, 0x2000, 0x8e8d388c )
ROM_REGION(0x0220) /* color PROMs */
ROM_LOAD( "gyrussk.pr3", 0x0000, 0x0020, 0x98782db3 ) /* palette */
ROM_LOAD( "gyrussk.pr1", 0x0020, 0x0100, 0x7ed057de ) /* sprite lookup table */
ROM_LOAD( "gyrussk.pr2", 0x0120, 0x0100, 0xde823a81 ) /* character lookup table */
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "gyrussk.1a", 0x0000, 0x2000, 0xf4ae1c17 )
ROM_LOAD( "gyrussk.2a", 0x2000, 0x2000, 0xba498115 )
/* the diagnostics ROM would go here */
ROM_REGION(0x2000) /* Gyruss also contains a 6809, we don't need to emulate it */
/* but need the data tables contained in its ROM */
ROM_LOAD( "gyrussk.9", 0x0000, 0x2000, 0x822bf27e )
ROM_REGION(0x1000) /* 8039 */
ROM_LOAD( "gyrussk.3a", 0x0000, 0x1000, 0x3f9b5dea )
ROM_END
ROM_START( venus_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "r1", 0x0000, 0x2000, 0xd030abb1 )
ROM_LOAD( "r2", 0x2000, 0x2000, 0xdbf65d4d )
ROM_LOAD( "r3", 0x4000, 0x2000, 0xdb246fcd )
/* the diagnostics ROM would go here */
ROM_REGION_DISPOSE(0xa000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "gyrussk.4", 0x0000, 0x2000, 0x27d8329b )
ROM_LOAD( "gyrussk.6", 0x2000, 0x2000, 0xc949db10 )
ROM_LOAD( "gyrussk.5", 0x4000, 0x2000, 0x4f22411a )
ROM_LOAD( "gyrussk.8", 0x6000, 0x2000, 0x47cd1fbc )
ROM_LOAD( "gyrussk.7", 0x8000, 0x2000, 0x8e8d388c )
ROM_REGION(0x0220) /* color PROMs */
ROM_LOAD( "gyrussk.pr3", 0x0000, 0x0020, 0x98782db3 ) /* palette */
ROM_LOAD( "gyrussk.pr1", 0x0020, 0x0100, 0x7ed057de ) /* sprite lookup table */
ROM_LOAD( "gyrussk.pr2", 0x0120, 0x0100, 0xde823a81 ) /* character lookup table */
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "gyrussk.1a", 0x0000, 0x2000, 0xf4ae1c17 )
ROM_LOAD( "gyrussk.2a", 0x2000, 0x2000, 0xba498115 )
/* the diagnostics ROM would go here */
ROM_REGION(0x2000) /* Gyruss also contains a 6809, we don't need to emulate it */
/* but need the data tables contained in its ROM */
ROM_LOAD( "gyrussk.9", 0x0000, 0x2000, 0x822bf27e )
ROM_REGION(0x1000) /* 8039 */
ROM_LOAD( "gyrussk.3a", 0x0000, 0x1000, 0x3f9b5dea )
ROM_END
#ifdef USE_SAMPLES
static const char *gyruss_sample_names[] =
{
"*gyruss",
"AUDIO01.SAM",
"AUDIO02.SAM",
"AUDIO03.SAM",
"AUDIO04.SAM",
"AUDIO05.SAM",
"AUDIO06.SAM",
"AUDIO07.SAM",
0 /* end of array */
};
#endif
static int 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[0x9489],"\x00\x00\x01",3) == 0 &&
memcmp(&RAM[0x94a9],"\x00\x43\x00",3) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0x9488],8*5);
RAM[0x940b] = RAM[0x9489];
RAM[0x940c] = RAM[0x948a];
RAM[0x940d] = RAM[0x948b];
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void 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[0x9488],8*5);
osd_fclose(f);
}
}
struct GameDriver gyruss_driver =
{
__FILE__,
0,
"gyruss",
"Gyruss (Konami)",
"1983",
"Konami",
"Mike Cuddy (hardware info)\nPete Ground (hardware info)\nMirko Buffoni (MAME driver)\nNicola Salmoria (MAME driver)\nTim Lindquist (color info)\nMarco Cassili",
0,
&machine_driver,
0,
gyruss_rom,
0, 0,
#ifdef USE_SAMPLES
gyruss_sample_names,
#else
0,
#endif
0, /* sound_prom */
gyruss_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_90,
hiload, hisave
};
struct GameDriver gyrussce_driver =
{
__FILE__,
&gyruss_driver,
"gyrussce",
"Gyruss (Centuri)",
"1983",
"Konami (Centuri license)",
"Mike Cuddy (hardware info)\nPete Ground (hardware info)\nMirko Buffoni (MAME driver)\nNicola Salmoria (MAME driver)\nTim Lindquist (color info)\nMarco Cassili",
0,
&machine_driver,
0,
gyrussce_rom,
0, 0,
#ifdef USE_SAMPLES
gyruss_sample_names,
#else
0,
#endif
0, /* sound_prom */
gyrussce_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_90,
hiload, hisave
};
struct GameDriver venus_driver =
{
__FILE__,
&gyruss_driver,
"venus",
"Venus",
"1983",
"bootleg",
"Mike Cuddy (hardware info)\nPete Ground (hardware info)\nMirko Buffoni (MAME driver)\nNicola Salmoria (MAME driver)\nTim Lindquist (color info)\nMarco Cassili",
0,
&machine_driver,
0,
venus_rom,
0, 0,
#ifdef USE_SAMPLES
gyruss_sample_names,
#else
0,
#endif
0, /* sound_prom */
gyrussce_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_90,
hiload, hisave
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -