tecmo.c
来自「这个是延伸mame的在wince平台下的游戏模拟器的代码」· C语言 代码 · 共 1,299 行 · 第 1/3 页
C
1,299 行
PORT_START /* unused? */
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
INPUT_PORTS_START( silkworm_input_ports )
PORT_START /* IN0 bit 0-3 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY )
PORT_START /* IN0 bit 4-7 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* unused? */
PORT_START /* IN1 bit 0-3 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
PORT_START /* IN1 bit 4-7 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 | IPF_PLAYER2 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* unused? */
PORT_START /* unused? */
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START /* unused? */
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START /* DSWA bit 0-3 */
PORT_DIPNAME( 0x03, 0x00, "Coin A", IP_KEY_NONE )
PORT_DIPSETTING( 0x01, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x00, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x02, "1 Coin/2 Credits" )
PORT_DIPSETTING( 0x03, "1 Coin/3 Credits" )
PORT_DIPNAME( 0x0C, 0x00, "Coin B", IP_KEY_NONE )
PORT_DIPSETTING( 0x04, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x00, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x08, "1 Coin/2 Credits" )
PORT_DIPSETTING( 0x0C, "1 Coin/3 Credits" )
PORT_START /* DSWA bit 4-7 */
PORT_DIPNAME( 0x03, 0x00, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x03, "2" )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x01, "4" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPNAME( 0x04, 0x00, "A 7", IP_KEY_NONE ) /* unused? */
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x04, "On" )
PORT_DIPNAME( 0x08, 0x08, "Demo Sounds", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x08, "On" )
PORT_START /* DSWB bit 0-3 */
PORT_DIPNAME( 0x07, 0x00, "Bonus Life", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "50000 200000 500000" )
PORT_DIPSETTING( 0x01, "100000 300000 800000" )
PORT_DIPSETTING( 0x02, "50000 200000" )
PORT_DIPSETTING( 0x03, "100000 300000" )
PORT_DIPSETTING( 0x04, "50000" )
PORT_DIPSETTING( 0x05, "100000" )
PORT_DIPSETTING( 0x06, "200000" )
PORT_DIPSETTING( 0x07, "None" )
PORT_DIPNAME( 0x08, 0x00, "B 4", IP_KEY_NONE ) /* unused? */
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x08, "On" )
PORT_START /* DSWB bit 4-7 */
PORT_DIPNAME( 0x07, 0x00, "Difficulty", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "0" )
PORT_DIPSETTING( 0x01, "1" )
PORT_DIPSETTING( 0x02, "2" )
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x05, "5" )
/* 0x06 and 0x07 are the same as 0x00 */
PORT_DIPNAME( 0x08, 0x00, "Allow Continue", IP_KEY_NONE )
PORT_DIPSETTING( 0x08, "No" )
PORT_DIPSETTING( 0x00, "Yes" )
PORT_START /* COIN */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
INPUT_PORTS_END
static struct GfxLayout tecmo_charlayout =
{
8,8, /* 8*8 characters */
1024, /* 1024 characters */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 }, /* the bitplanes are packed in one nibble */
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
32*8 /* every char takes 32 consecutive bytes */
};
static struct GfxLayout silkworm_spritelayout =
{
16,16, /* 16*16 sprites */
2048, /* 2048 sprites */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 }, /* the bitplanes are packed in one nibble */
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4,
32*8+0*4, 32*8+1*4, 32*8+2*4, 32*8+3*4, 32*8+4*4, 32*8+5*4, 32*8+6*4, 32*8+7*4 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
16*32, 17*32, 18*32, 19*32, 20*32, 21*32, 22*32, 23*32 },
128*8 /* every sprite takes 128 consecutive bytes */
};
static struct GfxLayout silkworm_spritelayout2x =
{
32,32, /* 32*32 sprites */
512, /* 512 sprites */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 }, /* the bitplanes are packed in one nibble */
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4,
32*8+0*4, 32*8+1*4, 32*8+2*4, 32*8+3*4, 32*8+4*4, 32*8+5*4, 32*8+6*4, 32*8+7*4,
128*8+0*4, 128*8+1*4, 128*8+2*4, 128*8+3*4, 128*8+4*4, 128*8+5*4, 128*8+6*4, 128*8+7*4,
160*8+0*4, 160*8+1*4, 160*8+2*4, 160*8+3*4, 160*8+4*4, 160*8+5*4, 160*8+6*4, 160*8+7*4 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
16*32, 17*32, 18*32, 19*32, 20*32, 21*32, 22*32, 23*32,
64*32, 65*32, 66*32, 67*32, 68*32, 69*32, 70*32, 71*32,
80*32, 81*32, 82*32, 83*32, 84*32, 85*32, 86*32, 87*32 },
512*8 /* every sprite takes 512 consecutive bytes */
};
static struct GfxLayout silkworm_spritelayout8x8 =
{
8,8, /* 8*8 xprites */
8192, /* 8192 sprites */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 }, /* the bitplanes are packed in one nibble */
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
32*8 /* every sprite takes 32 consecutive bytes */
};
/* the only difference in rygar_spritelayout is that half as many sprites are present */
static struct GfxLayout rygar_spritelayout = /* only difference is half as many sprites as silkworm */
{
16,16, /* 16*16 sprites */
1024, /* 1024 sprites */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 }, /* the bitplanes are packed in one nibble */
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4,
32*8+0*4, 32*8+1*4, 32*8+2*4, 32*8+3*4, 32*8+4*4, 32*8+5*4, 32*8+6*4, 32*8+7*4 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
16*32, 17*32, 18*32, 19*32, 20*32, 21*32, 22*32, 23*32 },
128*8 /* every sprite takes 128 consecutive bytes */
};
static struct GfxLayout rygar_spritelayout2x =
{
32,32, /* 32*32 sprites */
256, /* 512 sprites */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 }, /* the bitplanes are packed in one nibble */
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4,
32*8+0*4, 32*8+1*4, 32*8+2*4, 32*8+3*4, 32*8+4*4, 32*8+5*4, 32*8+6*4, 32*8+7*4,
128*8+0*4, 128*8+1*4, 128*8+2*4, 128*8+3*4, 128*8+4*4, 128*8+5*4, 128*8+6*4, 128*8+7*4,
160*8+0*4, 160*8+1*4, 160*8+2*4, 160*8+3*4, 160*8+4*4, 160*8+5*4, 160*8+6*4, 160*8+7*4 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
16*32, 17*32, 18*32, 19*32, 20*32, 21*32, 22*32, 23*32,
64*32, 65*32, 66*32, 67*32, 68*32, 69*32, 70*32, 71*32,
80*32, 81*32, 82*32, 83*32, 84*32, 85*32, 86*32, 87*32 },
512*8 /* every sprite takes 512 consecutive bytes */
};
static struct GfxLayout rygar_spritelayout8x8 =
{
8,8, /* 8*8 xprites */
4096, /* 8192 sprites */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 }, /* the bitplanes are packed in one nibble */
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
32*8 /* every sprite takes 32 consecutive bytes */
};
static struct GfxDecodeInfo gfxdecodeinfo[] =
{
{ 1, 0x00000, &tecmo_charlayout, 256, 16 }, /* colors 256 - 511 */
{ 1, 0x08000, &silkworm_spritelayout8x8, 0, 16 }, /* colors 0 - 255 */
{ 1, 0x08000, &silkworm_spritelayout, 0, 16 }, /* 16x16 sprites */
{ 1, 0x08000, &silkworm_spritelayout2x, 0, 16 }, /* double size hack */
{ 1, 0x48000, &silkworm_spritelayout, 512, 16 }, /* bg#1 colors 512 - 767 */
{ 1, 0x88000, &silkworm_spritelayout, 768, 16 }, /* bg#2 colors 768 - 1023 */
{ -1 } /* end of array */
};
static struct GfxDecodeInfo rygar_gfxdecodeinfo[] =
{
{ 1, 0x00000, &tecmo_charlayout, 256, 16 }, /* colors 256 - 511 */
{ 1, 0x08000, &rygar_spritelayout8x8, 0, 16 }, /* colors 0 - 255 */
{ 1, 0x08000, &rygar_spritelayout, 0, 16 }, /* 16x16 sprites */
{ 1, 0x08000, &rygar_spritelayout2x, 0, 16 }, /* double size hack */
{ 1, 0x28000, &rygar_spritelayout, 512, 16 }, /* bg#1 colors 512 - 767 */
{ 1, 0x48000, &rygar_spritelayout, 768, 16 }, /* bg#2 colors 768 - 1023 */
{ -1 } /* end of array */
};
static struct YM3526interface rygar_ym3812_interface =
{
1, /* 1 chip (no more supported) */
4000000, /* 4 MHz ? (hand tuned) */
{ 255 } /* (not supported) */
};
static struct YM3526interface ym3812_interface =
{
1, /* 1 chip (no more supported) */
3600000, /* 3.6 MHz ? (hand tuned) */
{ 255 } /* (not supported) */
};
static struct ADPCMinterface adpcm_interface =
{
1, /* 1 channel */
8000, /* 8000Hz playback */
3, /* memory region 3 */
0, /* init function */
{ 255 }
};
static struct MachineDriver silkworm_machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
7600000, /* 7.6 Mhz (?????) */
0,
readmem,silkworm_writemem,0,0,
interrupt,1
},
{
CPU_Z80 | CPU_AUDIO_CPU,
4000000, /* 4 MHz ???? */
2, /* memory region #2 */
sound_readmem,sound_writemem,0,0,
interrupt,2 /* ?? */
/* NMIs are triggered by the main CPU */
}
},
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,
1024, 1024,
0,
VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,
0,
silkworm_vh_start,
tecmo_vh_stop,
tecmo_vh_screenrefresh,
/* sound hardware */
0,0,0,0,
{
{
SOUND_YM3812,
&ym3812_interface
},
{
SOUND_ADPCM,
&adpcm_interface
}
}
};
static struct MachineDriver rygar_machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
7600000,
0,
readmem,rygar_writemem,0,0,
interrupt,1
},
{
CPU_Z80 | CPU_AUDIO_CPU,
4000000, /* 4 MHz ???? */
2, /* memory region #2 */
rygar_sound_readmem,rygar_sound_writemem,0,0,
interrupt,2 /* ?? */
/* NMIs are triggered by the main CPU */
}
},
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 },
rygar_gfxdecodeinfo,
1024, 1024,
0,
VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,
0,
rygar_vh_start,
tecmo_vh_stop,
tecmo_vh_screenrefresh,
/* sound hardware */
0,0,0,0,
{
{
SOUND_YM3812,
&rygar_ym3812_interface
},
{
SOUND_ADPCM,
&adpcm_interface
},
}
};
static struct MachineDriver gemini_machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
7600000, /* 7.6 Mhz (?????) */
0,
readmem,gemini_writemem,0,0,
interrupt,1
},
{
CPU_Z80 | CPU_AUDIO_CPU,
4000000, /* 4 MHz ???? */
2, /* memory region #2 */
sound_readmem,sound_writemem,0,0,
interrupt,2 /* ?? */
/* NMIs are triggered by the main CPU */
}
},
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,
1024, 1024,
0,
VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,
0,
gemini_vh_start,
tecmo_vh_stop,
tecmo_vh_screenrefresh,
/* sound hardware */
0,0,0,0,
{
{
SOUND_YM3812,
&ym3812_interface
},
{
SOUND_ADPCM,
&adpcm_interface
}
}
};
/***************************************************************************
Game driver(s)
***************************************************************************/
ROM_START( rygar_rom )
ROM_REGION(0x18000) /* 64k for code */
ROM_LOAD( "5.5p", 0x00000, 0x08000, 0x062cd55d ) /* code */
ROM_LOAD( "cpu_5m.bin", 0x08000, 0x04000, 0x7ac5191b ) /* code */
ROM_LOAD( "cpu_5j.bin", 0x10000, 0x08000, 0xed76d606 ) /* banked at f000-f7ff */
ROM_REGION_DISPOSE(0x68000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "cpu_8k.bin", 0x00000, 0x08000, 0x4d482fb6 ) /* characters */
ROM_LOAD( "vid_6k.bin", 0x08000, 0x08000, 0xaba6db9e ) /* sprites */
ROM_LOAD( "vid_6j.bin", 0x10000, 0x08000, 0xae1f2ed6 ) /* sprites */
ROM_LOAD( "vid_6h.bin", 0x18000, 0x08000, 0x46d9e7df ) /* sprites */
ROM_LOAD( "vid_6g.bin", 0x20000, 0x08000, 0x45839c9a ) /* sprites */
ROM_LOAD( "vid_6p.bin", 0x28000, 0x08000, 0x9eae5f8e )
ROM_LOAD( "vid_6o.bin", 0x30000, 0x08000, 0x5a10a396 )
ROM_LOAD( "vid_6n.bin", 0x38000, 0x08000, 0x7b12cf3f )
ROM_LOAD( "vid_6l.bin", 0x40000, 0x08000, 0x3cea7eaa )
ROM_LOAD( "vid_6f.bin", 0x48000, 0x08000, 0x9840edd8 )
ROM_LOAD( "vid_6e.bin", 0x50000, 0x08000, 0xff65e074 )
ROM_LOAD( "vid_6c.bin", 0x58000, 0x08000, 0x89868c85 )
ROM_LOAD( "vid_6b.bin", 0x60000, 0x08000, 0x35389a7b )
ROM_REGION(0x10000) /* 64k for the audio CPU */
ROM_LOAD( "cpu_4h.bin", 0x0000, 0x2000, 0xe4a2fa87 )
ROM_REGION(0x4000) /* ADPCM samples */
ROM_LOAD( "cpu_1f.bin", 0x0000, 0x4000, 0x3cc98c5a )
ROM_END
ROM_START( rygar2_rom )
ROM_REGION(0x18000) /* 64k for code */
ROM_LOAD( "cpu_5p.bin", 0x00000, 0x08000, 0xe79c054a ) /* code */
ROM_LOAD( "cpu_5m.bin", 0x08000, 0x04000, 0x7ac5191b ) /* code */
ROM_LOAD( "cpu_5j.bin", 0x10000, 0x08000, 0xed76d606 ) /* banked at f000-f7ff */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?