📄 rastan.c
字号:
PORT_DIPSETTING( 0x02, "Easy" )
PORT_DIPSETTING( 0x03, "Medium" )
PORT_DIPSETTING( 0x01, "Hard" )
PORT_DIPSETTING( 0x00, "Hardest" )
PORT_DIPNAME( 0x0c, 0x0c, "Bonus Life", IP_KEY_NONE )
PORT_DIPSETTING( 0x0c, "100000" )
PORT_DIPSETTING( 0x08, "150000" )
PORT_DIPSETTING( 0x04, "200000" )
PORT_DIPSETTING( 0x00, "250000" )
PORT_DIPNAME( 0x30, 0x30, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x20, "4" )
PORT_DIPSETTING( 0x10, "5" )
PORT_DIPSETTING( 0x00, "6" )
PORT_DIPNAME( 0x40, 0x40, "Allow Continue", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "No" )
PORT_DIPSETTING( 0x40, "Yes" )
PORT_DIPNAME( 0x80, 0x80, "Unknown 2", IP_KEY_NONE )
PORT_DIPSETTING( 0x80, "Off" )
PORT_DIPSETTING( 0x00, "On" )
INPUT_PORTS_END
static struct GfxLayout spritelayout1 =
{
8,8, /* 8*8 sprites */
0x4000, /* 16384 sprites */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 },
{ 0, 4, 0x40000*8+0 ,0x40000*8+4, 8+0, 8+4, 0x40000*8+8+0, 0x40000*8+8+4 },
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
16*8 /* every sprite takes 16 consecutive bytes */
};
static struct GfxLayout spritelayout2 =
{
16,16, /* 16*16 sprites */
4096, /* 4096 sprites */
4, /* 4 bits per pixel */
{ 0, 1, 2, 3 },
{
0, 4, 0x40000*8+0 ,0x40000*8+4,
8+0, 8+4, 0x40000*8+8+0, 0x40000*8+8+4,
16+0, 16+4, 0x40000*8+16+0, 0x40000*8+16+4,
24+0, 24+4, 0x40000*8+24+0, 0x40000*8+24+4
},
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
8*32, 9*32, 10*32, 11*32, 12*32, 13*32, 14*32, 15*32 },
64*8 /* every sprite takes 64 consecutive bytes */
};
static struct GfxDecodeInfo gfxdecodeinfo[] =
{
{ 1, 0x00000, &spritelayout1, 0, 0x80 }, /* sprites 8x8*/
{ 1, 0x80000, &spritelayout2, 0, 0x80 }, /* sprites 16x16*/
{ -1 } /* end of array */
};
static struct YM2151interface ym2151_interface =
{
1, /* 1 chip */
4000000, /* 4 MHz ? */
{ 50 },
{ rastan_irq_handler },
{ rastan_bankswitch_w }
};
static struct ADPCMinterface adpcm_interface =
{
1, /* 1 chip */
8000, /* 8000Hz playback */
3, /* memory region 3 */
0, /* init function */
{ 60 }
};
static struct MachineDriver machine_driver =
{
/* basic machine hardware */
{
{
CPU_M68000,
8000000, /* 8 Mhz */
0,
rastan_readmem,rastan_writemem,0,0,
rastan_interrupt,1
},
{
CPU_Z80,
4000000, /* 4 Mhz */
2,
rastan_s_readmem,rastan_s_writemem,0,0,
ignore_interrupt,1
}
},
60, DEFAULT_60HZ_VBLANK_DURATION, /* frames per second, vblank duration */
10, /* 10 CPU slices per frame - enough for the sound CPU to read all commands */
0,
/* video hardware */
40*8, 32*8, { 0*8, 40*8-1, 1*8, 31*8-1 },
gfxdecodeinfo,
2048, 2048,
0,
VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,
0,
rastan_vh_start,
rastan_vh_stop,
rastan_vh_screenrefresh,
/* sound hardware */
SOUND_SUPPORTS_STEREO,0,0,0,
{
{
SOUND_YM2151_ALT,
&ym2151_interface
},
{
SOUND_ADPCM,
&adpcm_interface
}
}
};
/***************************************************************************
Game driver(s)
***************************************************************************/
ROM_START( rastan_rom )
ROM_REGION(0x60000) /* 6*64k for 68000 code */
ROM_LOAD_EVEN( "ic19_38.bin", 0x00000, 0x10000, 0x1c91dbb1 )
ROM_LOAD_ODD ( "ic07_37.bin", 0x00000, 0x10000, 0xecf20bdd )
ROM_LOAD_EVEN( "ic20_40.bin", 0x20000, 0x10000, 0x0930d4b3 )
ROM_LOAD_ODD ( "ic08_39.bin", 0x20000, 0x10000, 0xd95ade5e )
ROM_LOAD_EVEN( "ic21_42.bin", 0x40000, 0x10000, 0x1857a7cb )
ROM_LOAD_ODD ( "ic09_43.bin", 0x40000, 0x10000, 0xc34b9152 )
ROM_REGION_DISPOSE(0x100000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "ic40_01.bin", 0x00000, 0x20000, 0xcd30de19 ) /* 8x8 0 */
ROM_LOAD( "ic39_03.bin", 0x20000, 0x20000, 0xab67e064 ) /* 8x8 0 */
ROM_LOAD( "ic67_02.bin", 0x40000, 0x20000, 0x54040fec ) /* 8x8 1 */
ROM_LOAD( "ic66_04.bin", 0x60000, 0x20000, 0x94737e93 ) /* 8x8 1 */
ROM_LOAD( "ic15_05.bin", 0x80000, 0x20000, 0xc22d94ac ) /* sprites 1a */
ROM_LOAD( "ic14_07.bin", 0xa0000, 0x20000, 0xb5632a51 ) /* sprites 3a */
ROM_LOAD( "ic28_06.bin", 0xc0000, 0x20000, 0x002ccf39 ) /* sprites 1b */
ROM_LOAD( "ic27_08.bin", 0xe0000, 0x20000, 0xfeafca05 ) /* sprites 3b */
ROM_REGION(0x1c000) /* 64k for the audio CPU */
ROM_LOAD( "ic49_19.bin", 0x00000, 0x4000, 0xee81fdd8 )
ROM_CONTINUE( 0x10000, 0xc000 )
ROM_REGION(0x10000) /* 64k for the samples */
ROM_LOAD( "ic76_20.bin", 0x0000, 0x10000, 0xfd1a34cc ) /* samples are 4bit ADPCM */
ROM_END
ROM_START( rastsaga_rom )
ROM_REGION(0x60000) /* 6*64k for 68000 code */
ROM_LOAD_EVEN( "rs19_38.bin", 0x00000, 0x10000, 0xa38ac909 )
ROM_LOAD_ODD ( "rs07_37.bin", 0x00000, 0x10000, 0xbad60872 )
ROM_LOAD_EVEN( "rs20_40.bin", 0x20000, 0x10000, 0x6bcf70dc )
ROM_LOAD_ODD ( "rs08_39.bin", 0x20000, 0x10000, 0x8838ecc5 )
ROM_LOAD_EVEN( "rs21_42.bin", 0x40000, 0x10000, 0xb626c439 )
ROM_LOAD_ODD ( "rs09_43.bin", 0x40000, 0x10000, 0xc928a516 )
ROM_REGION_DISPOSE(0x100000) /* temporary space for graphics (disposed after conversion) */
ROM_LOAD( "ic40_01.bin", 0x00000, 0x20000, 0xcd30de19 ) /* 8x8 0 */
ROM_LOAD( "ic39_03.bin", 0x20000, 0x20000, 0xab67e064 ) /* 8x8 0 */
ROM_LOAD( "ic67_02.bin", 0x40000, 0x20000, 0x54040fec ) /* 8x8 1 */
ROM_LOAD( "ic66_04.bin", 0x60000, 0x20000, 0x94737e93 ) /* 8x8 1 */
ROM_LOAD( "ic15_05.bin", 0x80000, 0x20000, 0xc22d94ac ) /* sprites 1a */
ROM_LOAD( "ic14_07.bin", 0xa0000, 0x20000, 0xb5632a51 ) /* sprites 3a */
ROM_LOAD( "ic28_06.bin", 0xc0000, 0x20000, 0x002ccf39 ) /* sprites 1b */
ROM_LOAD( "ic27_08.bin", 0xe0000, 0x20000, 0xfeafca05 ) /* sprites 3b */
ROM_REGION(0x1c000) /* 64k for the audio CPU */
ROM_LOAD( "ic49_19.bin", 0x00000, 0x4000, 0xee81fdd8 )
ROM_CONTINUE( 0x10000, 0xc000 )
ROM_REGION(0x10000) /* 64k for the samples */
ROM_LOAD( "ic76_20.bin", 0x0000, 0x10000, 0xfd1a34cc ) /* samples are 4bit ADPCM */
ROM_END
ADPCM_SAMPLES_START(rastan_samples)
ADPCM_SAMPLE(0x00, 0x0000, 0x0200*2)
ADPCM_SAMPLE(0x02, 0x0200, 0x0500*2)
ADPCM_SAMPLE(0x07, 0x0700, 0x2100*2)
ADPCM_SAMPLE(0x28, 0x2800, 0x3b00*2)
ADPCM_SAMPLE(0x63, 0x6300, 0x4e00*2)
ADPCM_SAMPLE(0xb1, 0xb100, 0x1600*2)
ADPCM_SAMPLES_END
static int rastan_hiload(void)
{
void *f;
/* check if the hi score table has already been initialized */
if ((memcmp(&rastan_ram[0x140], "\x27\x31\x31\x00", 4) == 0) &&
(memcmp(&rastan_ram[0x162], "\x59\x47\x4e\x54", 4) == 0))
{
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&rastan_ram[0x140],38);
WRITE_WORD(&rastan_spriteram[0xb4], 0x2a +
((READ_WORD(&rastan_ram[0x142]) & 0x000f)));
WRITE_WORD(&rastan_spriteram[0xbc], 0x2a +
((READ_WORD(&rastan_ram[0x142]) & 0x00f0) >> 4));
WRITE_WORD(&rastan_spriteram[0xc4], 0x2a +
((READ_WORD(&rastan_ram[0x144]) & 0x0f00) >> 8));
WRITE_WORD(&rastan_spriteram[0xcc], 0x2a +
((READ_WORD(&rastan_ram[0x144]) & 0xf000) >> 12));
WRITE_WORD(&rastan_spriteram[0xd4], 0x2a +
((READ_WORD(&rastan_ram[0x144]) & 0x000f)));
WRITE_WORD(&rastan_spriteram[0xdc], 0x2a +
((READ_WORD(&rastan_ram[0x144]) & 0x00f0) >> 4));
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void rastan_hisave(void)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite(f,&rastan_ram[0x140],38);
osd_fclose(f);
}
}
struct GameDriver rastan_driver =
{
__FILE__,
0,
"rastan",
"Rastan",
"1987",
"Taito Japan",
"Jarek Burczynski\nMarco Cassili",
0,
&machine_driver,
0,
rastan_rom,
0, 0,
0,
(void *)rastan_samples, /* sound_prom */
rastan_input_ports,
0, 0, 0, /* colors, palette, colortable */
ORIENTATION_DEFAULT,
rastan_hiload, rastan_hisave
};
struct GameDriver rastsaga_driver =
{
__FILE__,
&rastan_driver,
"rastsaga",
"Rastan Saga",
"1987",
"Taito",
"Jarek Burczynski\nMarco Cassili",
0,
&machine_driver,
0,
rastsaga_rom,
0, 0,
0,
(void *)rastan_samples, /* sound_prom */
rastsaga_input_ports,
0, 0, 0, /* colors, palette, colortable */
ORIENTATION_DEFAULT,
rastan_hiload, rastan_hisave
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -