📄 zaxxon.c
字号:
static struct GfxLayout futspy_spritelayout =
{
32,32, /* 32*32 sprites */
128, /* 128 sprites */
3, /* 3 bits per pixel */
{ 2*128*128*8, 128*128*8, 0 }, /* the bitplanes are separated */
{ 0, 1, 2, 3, 4, 5, 6, 7,
8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7,
16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
24*8+0, 24*8+1, 24*8+2, 24*8+3, 24*8+4, 24*8+5, 24*8+6, 24*8+7 },
{ 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, 65*8, 66*8, 67*8, 68*8, 69*8, 70*8, 71*8,
96*8, 97*8, 98*8, 99*8, 100*8, 101*8, 102*8, 103*8 },
128*8 /* every sprite takes 128 consecutive bytes */
};
static struct GfxDecodeInfo gfxdecodeinfo[] =
{
{ 1, 0x0000, &zaxxon_charlayout1, 0, 32 }, /* characters */
{ 1, 0x1800, &zaxxon_charlayout2, 0, 32 }, /* background tiles */
{ 1, 0x7800, &spritelayout, 0, 32 }, /* sprites */
{ -1 } /* end of array */
};
static struct GfxDecodeInfo futspy_gfxdecodeinfo[] =
{
{ 1, 0x0000, &zaxxon_charlayout1, 0, 32 }, /* characters */
{ 1, 0x1800, &zaxxon_charlayout2, 0, 32 }, /* background tiles */
{ 1, 0x7800, &futspy_spritelayout, 0, 32 }, /* sprites */
{ -1 } /* end of array */
};
static struct Samplesinterface zaxxon_samples_interface =
{
12 /* 12 channels */
};
static struct MachineDriver zaxxon_machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
3072000, /* 3.072 Mhz ?? */
0,
readmem,writemem,0,0,
zaxxon_interrupt,1
}
},
60, DEFAULT_60HZ_VBLANK_DURATION, /* frames per second, vblank duration */
1, /* single CPU, no need for interleaving */
zaxxon_init_machine,
/* video hardware */
32*8, 32*8, { 0*8, 32*8-1,2*8, 30*8-1 },
gfxdecodeinfo,
256,32*8,
zaxxon_vh_convert_color_prom,
VIDEO_TYPE_RASTER,
0,
zaxxon_vh_start,
zaxxon_vh_stop,
zaxxon_vh_screenrefresh,
/* sound hardware */
0,0,0,0,
{
{
SOUND_SAMPLES,
&zaxxon_samples_interface
}
}
};
static struct MachineDriver futspy_machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
3072000, /* 3.072 Mhz ?? */
0,
readmem,futspy_writemem,0,0,
zaxxon_interrupt,1
}
},
60, DEFAULT_60HZ_VBLANK_DURATION, /* frames per second, vblank duration */
1, /* single CPU, no need for interleaving */
futspy_init_machine,
/* video hardware */
32*8, 32*8, { 0*8, 32*8-1,2*8, 30*8-1 },
futspy_gfxdecodeinfo,
256,32*8,
zaxxon_vh_convert_color_prom,
VIDEO_TYPE_RASTER,
0,
zaxxon_vh_start,
zaxxon_vh_stop,
zaxxon_vh_screenrefresh,
/* sound hardware */
0,0,0,0,
{
{
SOUND_SAMPLES,
&zaxxon_samples_interface
}
}
};
/***************************************************************************
Game driver(s)
***************************************************************************/
static const char *zaxxon_sample_names[] =
{
"*zaxxon",
"03.sam", /* Homing Missile */
"02.sam", /* Base Missile */
"01.sam", /* Laser (force field) */
"00.sam", /* Battleship (end of level boss) */
"11.sam", /* S-Exp (enemy explosion) */
"10.sam", /* M-Exp (ship explosion) */
"08.sam", /* Cannon (ship fire) */
"23.sam", /* Shot (enemy fire) */
"21.sam", /* Alarm 2 (target lock) */
"20.sam", /* Alarm 3 (low fuel) */
"05.sam", /* initial background noise */
"04.sam", /* looped asteroid noise */
0
};
ROM_START( zaxxon_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "zaxxon.3", 0x0000, 0x2000, 0x6e2b4a30 )
ROM_LOAD( "zaxxon.2", 0x2000, 0x2000, 0x1c9ea398 )
ROM_LOAD( "zaxxon.1", 0x4000, 0x1000, 0x1c123ef9 )
ROM_REGION_DISPOSE(0xd800) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "zaxxon.14", 0x0000, 0x0800, 0x07bf8c52 ) /* characters */
ROM_LOAD( "zaxxon.15", 0x0800, 0x0800, 0xc215edcb )
/* 1000-17ff empty space to convert the characters as 3bpp instead of 2 */
ROM_LOAD( "zaxxon.6", 0x1800, 0x2000, 0x6e07bb68 ) /* background tiles */
ROM_LOAD( "zaxxon.5", 0x3800, 0x2000, 0x0a5bce6a )
ROM_LOAD( "zaxxon.4", 0x5800, 0x2000, 0xa5bf1465 )
ROM_LOAD( "zaxxon.11", 0x7800, 0x2000, 0xeaf0dd4b ) /* sprites */
ROM_LOAD( "zaxxon.12", 0x9800, 0x2000, 0x1c5369c7 )
ROM_LOAD( "zaxxon.13", 0xb800, 0x2000, 0xab4e8a9a )
ROM_REGION(0x8000) /* background graphics */
ROM_LOAD( "zaxxon.8", 0x0000, 0x2000, 0x28d65063 )
ROM_LOAD( "zaxxon.7", 0x2000, 0x2000, 0x6284c200 )
ROM_LOAD( "zaxxon.10", 0x4000, 0x2000, 0xa95e61fd )
ROM_LOAD( "zaxxon.9", 0x6000, 0x2000, 0x7e42691f )
ROM_REGION(0x0200) /* color proms */
ROM_LOAD( "zaxxon.u98", 0x0000, 0x0100, 0x6cc6695b ) /* palette */
ROM_LOAD( "zaxxon.u72", 0x0100, 0x0100, 0xdeaa21f7 ) /* char lookup table */
ROM_END
ROM_START( szaxxon_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "suzaxxon.3", 0x0000, 0x2000, 0xaf7221da )
ROM_LOAD( "suzaxxon.2", 0x2000, 0x2000, 0x1b90fb2a )
ROM_LOAD( "suzaxxon.1", 0x4000, 0x1000, 0x07258b4a )
ROM_REGION_DISPOSE(0xd800) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "suzaxxon.14", 0x0000, 0x0800, 0xbccf560c ) /* characters */
ROM_LOAD( "suzaxxon.15", 0x0800, 0x0800, 0xd28c628b )
/* 1000-17ff empty space to convert the characters as 3bpp instead of 2 */
ROM_LOAD( "suzaxxon.6", 0x1800, 0x2000, 0xf51af375 ) /* background tiles */
ROM_LOAD( "suzaxxon.5", 0x3800, 0x2000, 0xa7de021d )
ROM_LOAD( "suzaxxon.4", 0x5800, 0x2000, 0x5bfb3b04 )
ROM_LOAD( "suzaxxon.11", 0x7800, 0x2000, 0x1503ae41 ) /* sprites */
ROM_LOAD( "suzaxxon.12", 0x9800, 0x2000, 0x3b53d83f )
ROM_LOAD( "suzaxxon.13", 0xb800, 0x2000, 0x581e8793 )
ROM_REGION(0x8000) /* background graphics */
ROM_LOAD( "suzaxxon.8", 0x0000, 0x2000, 0xdd1b52df )
ROM_LOAD( "suzaxxon.7", 0x2000, 0x2000, 0xb5bc07f0 )
ROM_LOAD( "suzaxxon.10", 0x4000, 0x2000, 0x68e84174 )
ROM_LOAD( "suzaxxon.9", 0x6000, 0x2000, 0xa509994b )
ROM_REGION(0x0200) /* color proms */
ROM_LOAD( "suzaxxon.u98", 0x0000, 0x0100, 0x15727a9f ) /* palette */
ROM_LOAD( "suzaxxon.u72", 0x0100, 0x0100, 0xdeaa21f7 ) /* char lookup table */
ROM_END
ROM_START( futspy_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "fs_snd.u27", 0x0000, 0x2000, 0x7578fe7f )
ROM_LOAD( "fs_snd.u28", 0x2000, 0x2000, 0x8ade203c )
ROM_LOAD( "fs_snd.u29", 0x4000, 0x1000, 0x734299c3 )
ROM_REGION_DISPOSE(0x13800) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "fs_snd.u68", 0x0000, 0x0800, 0x305fae2d ) /* characters */
ROM_LOAD( "fs_snd.u69", 0x0800, 0x0800, 0x3c5658c0 )
/* 1000-17ff empty space to convert the characters as 3bpp instead of 2 */
ROM_LOAD( "fs_vid.113", 0x1800, 0x2000, 0x36d2bdf6 ) /* background tiles */
ROM_LOAD( "fs_vid.112", 0x3800, 0x2000, 0x3740946a )
ROM_LOAD( "fs_vid.111", 0x5800, 0x2000, 0x4cd4df98 )
ROM_LOAD( "fs_vid.u77", 0x7800, 0x4000, 0x1b93c9ec ) /* sprites */
ROM_LOAD( "fs_vid.u78", 0xb800, 0x4000, 0x50e55262 )
ROM_LOAD( "fs_vid.u79", 0xf800, 0x4000, 0xbfb02e3e )
ROM_REGION(0x8000) /* background graphics */
ROM_LOAD( "fs_vid.u91", 0x0000, 0x2000, 0x86da01f4 )
ROM_LOAD( "fs_vid.u90", 0x2000, 0x2000, 0x2bd41d2d )
ROM_LOAD( "fs_vid.u93", 0x4000, 0x2000, 0xb82b4997 )
ROM_LOAD( "fs_vid.u92", 0x6000, 0x2000, 0xaf4015af )
ROM_REGION(0x0200) /* color proms */
ROM_LOAD( "futrprom.u98", 0x0000, 0x0100, 0x9ba2acaa ) /* palette */
ROM_LOAD( "futrprom.u72", 0x0100, 0x0100, 0xf9e26790 ) /* char lookup table */
ROM_END
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[0x6110],"\x00\x89\x00",3) == 0 &&
memcmp(&RAM[0x6179],"\x00\x37\x00",3) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0x6100],21*6);
RAM[0x6038] = RAM[0x6110];
RAM[0x6039] = RAM[0x6111];
RAM[0x603a] = RAM[0x6112];
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void hisave(void)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
/* make sure that the high score table is still valid (entering the */
/* test mode corrupts it) */
if (memcmp(&RAM[0x6110],"\x00\x00\x00",3) != 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite(f,&RAM[0x6100],21*6);
osd_fclose(f);
}
}
}
static int futspy_hiload(void)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if (memcmp(&RAM[0x0427],"\x00\x00\x01",3) == 0 &&
memcmp(&RAM[0x0460],"\x49\x44\x41",3) == 0 &&
memcmp(&RAM[0x6419],"\x00\x00\x01",3) == 0 &&
memcmp(&RAM[0x6450],"\x10\x00\x49",3) == 0 )
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0x6419],60);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void futspy_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[0x6419],60);
osd_fclose(f);
}
}
struct GameDriver zaxxon_driver =
{
__FILE__,
0,
"zaxxon",
"Zaxxon",
"1982",
"Sega",
"Mirko Buffoni (MAME driver)\nNicola Salmoria (MAME driver)\nAlex Judd (sound)\nGerald Vanderick (color info)\nFrank Palazzolo (sound info)\nRiek Gladys (sound info)\nJohn Butler (video)",
0,
&zaxxon_machine_driver,
0,
zaxxon_rom,
0, 0,
zaxxon_sample_names,
0, /* sound_prom */
zaxxon_input_ports,
PROM_MEMORY_REGION(3), 0, 0,
ORIENTATION_ROTATE_90,
hiload, hisave
};
struct GameDriver szaxxon_driver =
{
__FILE__,
0,
"szaxxon",
"Super Zaxxon",
"1982",
"Sega",
"Mirko Buffoni (MAME driver)\nNicola Salmoria (MAME driver)\nAlex Judd (sound)\nTim Lindquist (encryption and color info)\nFrank Palazzolo (sound info)\nRiek Gladys (sound info)",
0,
&zaxxon_machine_driver,
0,
szaxxon_rom,
0, szaxxon_decode,
zaxxon_sample_names,
0, /* sound_prom */
zaxxon_input_ports,
PROM_MEMORY_REGION(3), 0, 0,
ORIENTATION_ROTATE_90,
hiload, hisave
};
struct GameDriver futspy_driver =
{
__FILE__,
0,
"futspy",
"Future Spy",
"1984",
"Sega",
"Nicola Salmoria",
0,
&futspy_machine_driver,
0,
futspy_rom,
0, futspy_decode,
0,
0, /* sound_prom */
futspy_input_ports,
PROM_MEMORY_REGION(3), 0, 0,
ORIENTATION_ROTATE_270,
futspy_hiload, futspy_hisave
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -