📄 1942.c
字号:
INPUT_PORTS_START( input_ports )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_START /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_START /* IN2 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_START /* DSW0 */
PORT_DIPNAME( 0x07, 0x07, "Coin A", IP_KEY_NONE )
PORT_DIPSETTING( 0x01, "4 Coins/1 Credit" )
PORT_DIPSETTING( 0x02, "3 Coins/1 Credit" )
PORT_DIPSETTING( 0x04, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x07, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x03, "2 Coins/3 Credits" )
PORT_DIPSETTING( 0x06, "1 Coin/2 Credits" )
PORT_DIPSETTING( 0x05, "1 Coin/4 Credits" )
PORT_DIPSETTING( 0x00, "Free Play" )
PORT_DIPNAME( 0x08, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Upright" )
PORT_DIPSETTING( 0x08, "Cocktail" )
PORT_DIPNAME( 0x30, 0x30, "Bonus Life", IP_KEY_NONE )
PORT_DIPSETTING( 0x30, "20000 80000" )
PORT_DIPSETTING( 0x20, "20000 100000" )
PORT_DIPSETTING( 0x10, "30000 80000" )
PORT_DIPSETTING( 0x00, "30000 100000" )
PORT_DIPNAME( 0xc0, 0xc0, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x80, "1" )
PORT_DIPSETTING( 0x40, "2" )
PORT_DIPSETTING( 0xc0, "3" )
PORT_DIPSETTING( 0x00, "5" )
PORT_START /* DSW1 */
PORT_DIPNAME( 0x07, 0x07, "Coin B", IP_KEY_NONE )
PORT_DIPSETTING( 0x01, "4 Coins/1 Credit" )
PORT_DIPSETTING( 0x02, "3 Coins/1 Credit" )
PORT_DIPSETTING( 0x04, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x07, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x03, "2 Coins/3 Credits" )
PORT_DIPSETTING( 0x06, "1 Coin/2 Credits" )
PORT_DIPSETTING( 0x05, "1 Coin/4 Credits" )
PORT_DIPSETTING( 0x00, "Free Play" )
PORT_BITX( 0x08, 0x08, IPT_DIPSWITCH_NAME | IPF_TOGGLE, "Service Mode", OSD_KEY_F2, IP_JOY_NONE, 0 )
PORT_DIPSETTING( 0x08, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x10, 0x10, "Flip Screen", IP_KEY_NONE )
PORT_DIPSETTING( 0x10, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x60, 0x60, "Difficulty", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "Easy" )
PORT_DIPSETTING( 0x60, "Normal" )
PORT_DIPSETTING( 0x20, "Hard" )
PORT_DIPSETTING( 0x00, "Hardest" )
PORT_DIPNAME( 0x80, 0x80, "Freeze", IP_KEY_NONE )
PORT_DIPSETTING( 0x80, "Off" )
PORT_DIPSETTING( 0x00, "On" )
INPUT_PORTS_END
static struct GfxLayout charlayout =
{
8,8, /* 8*8 characters */
512, /* 512 characters */
2, /* 2 bits per pixel */
{ 4, 0 },
{ 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3 },
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
16*8 /* every char takes 16 consecutive bytes */
};
static struct GfxLayout tilelayout =
{
16,16, /* 16*16 tiles */
512, /* 512 tiles */
3, /* 3 bits per pixel */
{ 0, 512*32*8, 2*512*32*8 }, /* the bitplanes are separated */
{ 0, 1, 2, 3, 4, 5, 6, 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 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
32*8 /* every tile takes 32 consecutive bytes */
};
static struct GfxLayout spritelayout =
{
16,16, /* 16*16 sprites */
512, /* 512 sprites */
4, /* 4 bits per pixel */
{ 512*64*8+4, 512*64*8+0, 4, 0 },
{ 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3,
32*8+0, 32*8+1, 32*8+2, 32*8+3, 33*8+0, 33*8+1, 33*8+2, 33*8+3 },
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
64*8 /* every sprite takes 64 consecutive bytes */
};
static struct GfxDecodeInfo gfxdecodeinfo[] =
{
{ 1, 0x00000, &charlayout, 0, 64 },
{ 1, 0x02000, &tilelayout, 64*4, 4*32 },
{ 1, 0x0e000, &spritelayout, 64*4+4*32*8, 16 },
{ -1 } /* end of array */
};
static struct AY8910interface ay8910_interface =
{
2, /* 2 chips */
1500000, /* 1.5 MHz ? */
{ 255, 255 },
{ 0 },
{ 0 },
{ 0 },
{ 0 }
};
static struct MachineDriver machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
4000000, /* 4 Mhz (?) */
0,
readmem,writemem,0,0,
c1942_interrupt,2
},
{
CPU_Z80 | CPU_AUDIO_CPU,
3000000, /* 3 Mhz ??? */
3, /* memory region #3 */
sound_readmem,sound_writemem,0,0,
interrupt,4
}
},
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,
256, 64*4+4*32*8+16*16,
c1942_vh_convert_color_prom,
VIDEO_TYPE_RASTER,
0,
c1942_vh_start,
c1942_vh_stop,
c1942_vh_screenrefresh,
/* sound hardware */
0,0,0,0,
{
{
SOUND_AY8910,
&ay8910_interface
}
}
};
/***************************************************************************
Game driver(s)
***************************************************************************/
ROM_START( c1942_rom )
ROM_REGION(0x1c000) /* 64k for code + 3*16k for the banked ROMs images */
ROM_LOAD( "1-n3a.bin", 0x00000, 0x4000, 0x40201bab )
ROM_LOAD( "1-n4.bin", 0x04000, 0x4000, 0xa60ac644 )
ROM_LOAD( "1-n5.bin", 0x10000, 0x4000, 0x835f7b24 )
ROM_LOAD( "1-n6.bin", 0x14000, 0x2000, 0x821c6481 )
ROM_LOAD( "1-n7.bin", 0x18000, 0x4000, 0x5df525e1 )
ROM_REGION_DISPOSE(0x1e000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "1-f2.bin", 0x00000, 0x2000, 0x6ebca191 ) /* characters */
ROM_LOAD( "2-a1.bin", 0x02000, 0x2000, 0x3884d9eb ) /* tiles */
ROM_LOAD( "2-a2.bin", 0x04000, 0x2000, 0x999cf6e0 )
ROM_LOAD( "2-a3.bin", 0x06000, 0x2000, 0x8edb273a )
ROM_LOAD( "2-a4.bin", 0x08000, 0x2000, 0x3a2726c3 )
ROM_LOAD( "2-a5.bin", 0x0a000, 0x2000, 0x1bd3d8bb )
ROM_LOAD( "2-a6.bin", 0x0c000, 0x2000, 0x658f02c4 )
ROM_LOAD( "2-l1.bin", 0x0e000, 0x4000, 0x2528bec6 ) /* sprites */
ROM_LOAD( "2-l2.bin", 0x12000, 0x4000, 0xf89287aa )
ROM_LOAD( "2-n1.bin", 0x16000, 0x4000, 0x024418f8 )
ROM_LOAD( "2-n2.bin", 0x1a000, 0x4000, 0xe2c7e489 )
ROM_REGION(0x0600) /* color PROMs */
ROM_LOAD( "08e_sb-5.bin", 0x0000, 0x0100, 0x93ab8153 ) /* red component */
ROM_LOAD( "09e_sb-6.bin", 0x0100, 0x0100, 0x8ab44f7d ) /* green component */
ROM_LOAD( "10e_sb-7.bin", 0x0200, 0x0100, 0xf4ade9a4 ) /* blue component */
ROM_LOAD( "f01_sb-0.bin", 0x0300, 0x0100, 0x6047d91b ) /* char lookup table */
ROM_LOAD( "06d_sb-4.bin", 0x0400, 0x0100, 0x4858968d ) /* tile lookup table */
ROM_LOAD( "03k_sb-8.bin", 0x0500, 0x0100, 0xf6fad943 ) /* sprite lookup table */
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "1-c11.bin", 0x0000, 0x4000, 0xbd87f06b )
ROM_END
ROM_START( c1942a_rom )
ROM_REGION(0x1c000) /* 64k for code + 3*16k for the banked ROMs images */
ROM_LOAD( "1-n3.bin", 0x00000, 0x4000, 0x612975f2 )
ROM_LOAD( "1-n4.bin", 0x04000, 0x4000, 0xa60ac644 )
ROM_LOAD( "1-n5.bin", 0x10000, 0x4000, 0x835f7b24 )
ROM_LOAD( "1-n6.bin", 0x14000, 0x2000, 0x821c6481 )
ROM_LOAD( "1-n7.bin", 0x18000, 0x4000, 0x5df525e1 )
ROM_REGION_DISPOSE(0x1e000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "1-f2.bin", 0x00000, 0x2000, 0x6ebca191 ) /* characters */
ROM_LOAD( "2-a1.bin", 0x02000, 0x2000, 0x3884d9eb ) /* tiles */
ROM_LOAD( "2-a2.bin", 0x04000, 0x2000, 0x999cf6e0 )
ROM_LOAD( "2-a3.bin", 0x06000, 0x2000, 0x8edb273a )
ROM_LOAD( "2-a4.bin", 0x08000, 0x2000, 0x3a2726c3 )
ROM_LOAD( "2-a5.bin", 0x0a000, 0x2000, 0x1bd3d8bb )
ROM_LOAD( "2-a6.bin", 0x0c000, 0x2000, 0x658f02c4 )
ROM_LOAD( "2-l1.bin", 0x0e000, 0x4000, 0x2528bec6 ) /* sprites */
ROM_LOAD( "2-l2.bin", 0x12000, 0x4000, 0xf89287aa )
ROM_LOAD( "2-n1.bin", 0x16000, 0x4000, 0x024418f8 )
ROM_LOAD( "2-n2.bin", 0x1a000, 0x4000, 0xe2c7e489 )
ROM_REGION(0x0600) /* color PROMs */
ROM_LOAD( "08e_sb-5.bin", 0x0000, 0x0100, 0x93ab8153 ) /* red component */
ROM_LOAD( "09e_sb-6.bin", 0x0100, 0x0100, 0x8ab44f7d ) /* green component */
ROM_LOAD( "10e_sb-7.bin", 0x0200, 0x0100, 0xf4ade9a4 ) /* blue component */
ROM_LOAD( "f01_sb-0.bin", 0x0300, 0x0100, 0x6047d91b ) /* char lookup table */
ROM_LOAD( "06d_sb-4.bin", 0x0400, 0x0100, 0x4858968d ) /* tile lookup table */
ROM_LOAD( "03k_sb-8.bin", 0x0500, 0x0100, 0xf6fad943 ) /* sprite lookup table */
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "1-c11.bin", 0x0000, 0x4000, 0xbd87f06b )
ROM_END
ROM_START( c1942b_rom )
ROM_REGION(0x1c000) /* 64k for code + 3*16k for the banked ROMs images */
ROM_LOAD( "srb-03.n3", 0x00000, 0x4000, 0xd9dafcc3 )
ROM_LOAD( "srb-04.n4", 0x04000, 0x4000, 0xda0cf924 )
ROM_LOAD( "srb-05.n5", 0x10000, 0x4000, 0xd102911c )
ROM_LOAD( "srb-06.n6", 0x14000, 0x2000, 0x466f8248 )
ROM_LOAD( "srb-07.n7", 0x18000, 0x4000, 0x0d31038c )
ROM_REGION_DISPOSE(0x1e000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "1-f2.bin", 0x00000, 0x2000, 0x6ebca191 ) /* characters */
ROM_LOAD( "2-a1.bin", 0x02000, 0x2000, 0x3884d9eb ) /* tiles */
ROM_LOAD( "2-a2.bin", 0x04000, 0x2000, 0x999cf6e0 )
ROM_LOAD( "2-a3.bin", 0x06000, 0x2000, 0x8edb273a )
ROM_LOAD( "2-a4.bin", 0x08000, 0x2000, 0x3a2726c3 )
ROM_LOAD( "2-a5.bin", 0x0a000, 0x2000, 0x1bd3d8bb )
ROM_LOAD( "2-a6.bin", 0x0c000, 0x2000, 0x658f02c4 )
ROM_LOAD( "2-l1.bin", 0x0e000, 0x4000, 0x2528bec6 ) /* sprites */
ROM_LOAD( "2-l2.bin", 0x12000, 0x4000, 0xf89287aa )
ROM_LOAD( "2-n1.bin", 0x16000, 0x4000, 0x024418f8 )
ROM_LOAD( "2-n2.bin", 0x1a000, 0x4000, 0xe2c7e489 )
ROM_REGION(0x0600) /* color PROMs */
ROM_LOAD( "08e_sb-5.bin", 0x0000, 0x0100, 0x93ab8153 ) /* red component */
ROM_LOAD( "09e_sb-6.bin", 0x0100, 0x0100, 0x8ab44f7d ) /* green component */
ROM_LOAD( "10e_sb-7.bin", 0x0200, 0x0100, 0xf4ade9a4 ) /* blue component */
ROM_LOAD( "f01_sb-0.bin", 0x0300, 0x0100, 0x6047d91b ) /* char lookup table */
ROM_LOAD( "06d_sb-4.bin", 0x0400, 0x0100, 0x4858968d ) /* tile lookup table */
ROM_LOAD( "03k_sb-8.bin", 0x0500, 0x0100, 0xf6fad943 ) /* sprite lookup table */
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "1-c11.bin", 0x0000, 0x4000, 0xbd87f06b )
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[0xe801],"\x00\x04\x00\x00",4) == 0 &&
memcmp(&RAM[0xe981],"\x00\x00\x01\x00",4) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
int i;
osd_fread(f,&RAM[0xe800],16*25);
osd_fread(f,&RAM[0xe9c0],1);
/* find the high score */
for (i = 0;i < 16*25;i += 16)
{
if (RAM[0xe800 + i] == 0x00)
{
RAM[0xe040] = RAM[0xe801 + i] >> 4;
RAM[0xe041] = RAM[0xe801 + i] & 0x0f;
RAM[0xe042] = RAM[0xe802 + i] >> 4;
RAM[0xe043] = RAM[0xe802 + i] & 0x0f;
RAM[0xe044] = RAM[0xe803 + i] >> 4;
RAM[0xe045] = RAM[0xe803 + i] & 0x0f;
RAM[0xe046] = RAM[0xe804 + i] >> 4;
RAM[0xe047] = RAM[0xe804 + i] & 0x0f;
break;
}
}
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[0xe800],16*25);
osd_fwrite(f,&RAM[0xe9c0],1);
osd_fclose(f);
}
}
struct GameDriver c1942_driver =
{
__FILE__,
0,
"1942",
"1942 (set 1)",
"1984",
"Capcom",
"Paul Leaman (hardware info)\nNicola Salmoria (MAME driver)",
0,
&machine_driver,
0,
c1942_rom,
0, 0,
0,
0, /* sound_prom */
input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_270,
hiload, hisave
};
struct GameDriver c1942a_driver =
{
__FILE__,
&c1942_driver,
"1942a",
"1942 (set 2)",
"1984",
"Capcom",
"Paul Leaman (hardware info)\nNicola Salmoria (MAME driver)",
0,
&machine_driver,
0,
c1942a_rom,
0, 0,
0,
0, /* sound_prom */
input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_270,
hiload, hisave
};
struct GameDriver c1942b_driver =
{
__FILE__,
&c1942_driver,
"1942b",
"1942 (set 3)",
"1984",
"Capcom",
"Paul Leaman (hardware info)\nNicola Salmoria (MAME driver)",
0,
&machine_driver,
0,
c1942b_rom,
0, 0,
0,
0, /* sound_prom */
input_ports,
PROM_MEMORY_REGION(2), 0, 0,
ORIENTATION_ROTATE_270,
hiload, hisave
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -