📄 amidar.c
字号:
static struct GfxLayout spritelayout =
{
16,16, /* 16*16 sprites */
64, /* 64 sprites */
2, /* 2 bits per pixel */
{ 0, 64*16*16 }, /* the two 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 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8 },
32*8 /* every sprite takes 32 consecutive bytes */
};
static struct GfxDecodeInfo gfxdecodeinfo[] =
{
{ 1, 0x0000, &charlayout, 0, 8 },
{ 1, 0x0000, &spritelayout, 0, 8 },
{ -1 } /* end of array */
};
static struct AY8910interface ay8910_interface =
{
2, /* 2 chips */
14318000/8, /* 1.78975 Mhz */
{ 0x30ff, 0x30ff },
{ soundlatch_r },
{ scramble_portB_r },
{ 0 },
{ 0 }
};
static struct MachineDriver machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
18432000/6, /* 3.072 Mhz */
0,
amidar_readmem,writemem,0,0,
nmi_interrupt,1
},
{
CPU_Z80 | CPU_AUDIO_CPU,
14318000/8, /* 1.78975 Mhz */
3, /* memory region #3 */
sound_readmem,sound_writemem,sound_readport,sound_writeport,
ignore_interrupt,1 /* interrupts are triggered by the main CPU */
}
},
60, 2500, /* 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,32,
amidar_vh_convert_color_prom,
VIDEO_TYPE_RASTER|VIDEO_SUPPORTS_DIRTY,
0,
generic_vh_start,
generic_vh_stop,
amidar_vh_screenrefresh,
/* sound hardware */
0,0,0,0,
{
{
SOUND_AY8910,
&ay8910_interface
}
}
};
/***************************************************************************
Game driver(s)
***************************************************************************/
ROM_START( amidar_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "amidarus.2c", 0x0000, 0x1000, 0x951e0792 )
ROM_LOAD( "amidarus.2e", 0x1000, 0x1000, 0xa1a3a136 )
ROM_LOAD( "amidarus.2f", 0x2000, 0x1000, 0xa5121bf5 )
ROM_LOAD( "amidarus.2h", 0x3000, 0x1000, 0x051d1c7f )
ROM_LOAD( "amidarus.2j", 0x4000, 0x1000, 0x351f00d5 )
ROM_REGION_DISPOSE(0x1000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "amidarus.5f", 0x0000, 0x0800, 0x2cfe5ede )
ROM_LOAD( "amidarus.5h", 0x0800, 0x0800, 0x57c4fd0d )
ROM_REGION(0x20) /* color prom */
ROM_LOAD( "amidar.clr", 0x0000, 0x20, 0xf940dcc3 )
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "amidarus.5c", 0x0000, 0x1000, 0x8ca7b750 )
ROM_LOAD( "amidarus.5d", 0x1000, 0x1000, 0x9b5bdc0a )
ROM_END
ROM_START( amidarjp_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "amidar.2c", 0x0000, 0x1000, 0xc294bf27 )
ROM_LOAD( "amidar.2e", 0x1000, 0x1000, 0xe6e96826 )
ROM_LOAD( "amidar.2f", 0x2000, 0x1000, 0x3656be6f )
ROM_LOAD( "amidar.2h", 0x3000, 0x1000, 0x1be170bd )
ROM_REGION_DISPOSE(0x1000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "amidar.5f", 0x0000, 0x0800, 0x5e51e84d )
ROM_LOAD( "amidar.5h", 0x0800, 0x0800, 0x2f7f1c30 )
ROM_REGION(0x20) /* color prom */
ROM_LOAD( "amidar.clr", 0x0000, 0x20, 0xf940dcc3 )
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "amidar.5c", 0x0000, 0x1000, 0xc4b66ae4 )
ROM_LOAD( "amidar.5d", 0x1000, 0x1000, 0x806785af )
ROM_END
ROM_START( amigo_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "2732.a1", 0x0000, 0x1000, 0x930dc856 )
ROM_LOAD( "2732.a2", 0x1000, 0x1000, 0x66282ff5 )
ROM_LOAD( "2732.a3", 0x2000, 0x1000, 0xe9d3dc76 )
ROM_LOAD( "2732.a4", 0x3000, 0x1000, 0x4a4086c9 )
ROM_REGION_DISPOSE(0x1000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "2716.a6", 0x0000, 0x0800, 0x2082ad0a )
ROM_LOAD( "2716.a5", 0x0800, 0x0800, 0x3029f94f )
ROM_REGION(0x20) /* color prom */
ROM_LOAD( "amidar.clr", 0x0000, 0x20, 0xf940dcc3 )
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "2732.a7", 0x0000, 0x1000, 0x8ca7b750 )
ROM_LOAD( "2732.a8", 0x1000, 0x1000, 0x9b5bdc0a )
ROM_END
ROM_START( turtles_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "turt_vid.2c", 0x0000, 0x1000, 0xec5e61fb )
ROM_LOAD( "turt_vid.2e", 0x1000, 0x1000, 0xfd10821e )
ROM_LOAD( "turt_vid.2f", 0x2000, 0x1000, 0xddcfc5fa )
ROM_LOAD( "turt_vid.2h", 0x3000, 0x1000, 0x9e71696c )
ROM_LOAD( "turt_vid.2j", 0x4000, 0x1000, 0xfcd49fef )
ROM_REGION_DISPOSE(0x1000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "turt_vid.5h", 0x0000, 0x0800, 0xe5999d52 )
ROM_LOAD( "turt_vid.5f", 0x0800, 0x0800, 0xc3ffd655 )
ROM_REGION(0x20) /* color prom */
ROM_LOAD( "turtles.clr", 0x0000, 0x20, 0xf3ef02dd )
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "turt_snd.5c", 0x0000, 0x1000, 0xf0c30f9a )
ROM_LOAD( "turt_snd.5d", 0x1000, 0x1000, 0xaf5fc43c )
ROM_END
ROM_START( turpin_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "m1", 0x0000, 0x1000, 0x89177473 )
ROM_LOAD( "m2", 0x1000, 0x1000, 0x4c6ca5c6 )
ROM_LOAD( "m3", 0x2000, 0x1000, 0x62291652 )
ROM_LOAD( "turt_vid.2h", 0x3000, 0x1000, 0x9e71696c )
ROM_LOAD( "m5", 0x4000, 0x1000, 0x7d2600f2 )
ROM_REGION_DISPOSE(0x1000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "turt_vid.5h", 0x0000, 0x0800, 0xe5999d52 )
ROM_LOAD( "turt_vid.5f", 0x0800, 0x0800, 0xc3ffd655 )
ROM_REGION(0x20) /* color prom */
ROM_LOAD( "turtles.clr", 0x0000, 0x20, 0xf3ef02dd )
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "turt_snd.5c", 0x0000, 0x1000, 0xf0c30f9a )
ROM_LOAD( "turt_snd.5d", 0x1000, 0x1000, 0xaf5fc43c )
ROM_END
ROM_START( k600_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "600_vid.2c", 0x0000, 0x1000, 0x8ee090ae )
ROM_LOAD( "600_vid.2e", 0x1000, 0x1000, 0x45bfaff2 )
ROM_LOAD( "600_vid.2f", 0x2000, 0x1000, 0x9f4c8ed7 )
ROM_LOAD( "600_vid.2h", 0x3000, 0x1000, 0xa92ef056 )
ROM_LOAD( "600_vid.2j", 0x4000, 0x1000, 0x6dadd72d )
ROM_REGION_DISPOSE(0x1000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "600_vid.5h", 0x0000, 0x0800, 0x006c3d56 )
ROM_LOAD( "600_vid.5f", 0x0800, 0x0800, 0x7dbc0426 )
ROM_REGION(0x20) /* color prom */
ROM_LOAD( "turtles.clr", 0x0000, 0x20, 0xf3ef02dd )
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "600_snd.5c", 0x0000, 0x1000, 0x1773c68e )
ROM_LOAD( "600_snd.5d", 0x1000, 0x1000, 0xa311b998 )
ROM_END
static int amidar_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[0x8200],"\x00\x00\x01",3) == 0 &&
memcmp(&RAM[0x821b],"\x00\x00\x01",3) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0x8200],3*10);
RAM[0x80a8] = RAM[0x8200];
RAM[0x80a9] = RAM[0x8201];
RAM[0x80aa] = RAM[0x8202];
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static int turtles_hiload(void) /* V.V */
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
/* same as Amidar, but the high score table is initialized with zeros */
/* a working quick-and-dirty solution is to update the top high score */
/* and the whole table at different times */
/* further study of the game code may provide a cleaner solution */
static int first_pass = 0;
static unsigned char top_score[] = { 0, 0, 0 };
if (first_pass == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,top_score,3);
osd_fclose(f);
}
first_pass = 1;
}
if ((memcmp(&RAM[0x80A0],"\xc0\xc0\x00",3) == 0))
{
RAM[0x80a8] = top_score[0];
RAM[0x80a9] = top_score[1];
RAM[0x80aa] = top_score[2];
return 0;
} /* continuously updating top high score - really dirty solution */
else if (memcmp(&RAM[0x80A0],"\xc6\xc6\x00",3) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0x8200],3*10);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void amidar_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[0x8200],3*10);
osd_fclose(f);
}
}
struct GameDriver amidar_driver =
{
__FILE__,
0,
"amidar",
"Amidar (US)",
"1982",
"Konami (Stern license)",
"Robert Anschuetz (Arcade emulator)\nNicola Salmoria (MAME driver)\nAlan J. McCormick (color info)",
0,
&machine_driver,
0,
amidar_rom,
0, 0,
0,
0, /* sound_prom */
amidar_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_90,
amidar_hiload, amidar_hisave
};
struct GameDriver amidarjp_driver =
{
__FILE__,
&amidar_driver,
"amidarjp",
"Amidar (Japan)",
"1981",
"Konami",
"Robert Anschuetz (Arcade emulator)\nNicola Salmoria (MAME driver)\nAlan J. McCormick (color info)",
0,
&machine_driver,
0,
amidarjp_rom,
0, 0,
0,
0, /* sound_prom */
amidarjp_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_90,
amidar_hiload, amidar_hisave
};
struct GameDriver amigo_driver =
{
__FILE__,
&amidar_driver,
"amigo",
"Amigo",
"1982",
"bootleg",
"Robert Anschuetz (Arcade emulator)\nNicola Salmoria (MAME driver)\nAlan J. McCormick (color info)",
0,
&machine_driver,
0,
amigo_rom,
0, 0,
0,
0, /* sound_prom */
amidar_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_90,
amidar_hiload, amidar_hisave
};
struct GameDriver turtles_driver =
{
__FILE__,
0,
"turtles",
"Turtles",
"1981",
"Stern",
"Robert Anschuetz (Arcade emulator)\nNicola Salmoria (MAME driver)\nAlan J. McCormick (color info)",
0,
&machine_driver,
0,
turtles_rom,
0, 0,
0,
0, /* sound_prom */
turtles_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_90,
turtles_hiload, amidar_hisave
};
struct GameDriver turpin_driver =
{
__FILE__,
&turtles_driver,
"turpin",
"Turpin",
"1981",
"Sega",
"Robert Anschuetz (Arcade emulator)\nNicola Salmoria (MAME driver)\nAlan J. McCormick (color info)",
0,
&machine_driver,
0,
turpin_rom,
0, 0,
0,
0, /* sound_prom */
turpin_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_90,
turtles_hiload, amidar_hisave
};
struct GameDriver k600_driver =
{
__FILE__,
&turtles_driver,
"600",
"600",
"1981",
"Konami",
"Robert Anschuetz (Arcade emulator)\nNicola Salmoria (MAME driver)\nAlan J. McCormick (color info)",
0,
&machine_driver,
0,
k600_rom,
0, 0,
0,
0, /* sound_prom */
k600_input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_90,
turtles_hiload, amidar_hisave
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -