diff options
Diffstat (limited to 'src/mame/drivers/cowrace.c')
-rw-r--r-- | src/mame/drivers/cowrace.c | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/src/mame/drivers/cowrace.c b/src/mame/drivers/cowrace.c new file mode 100644 index 00000000000..3a1f30b3bf1 --- /dev/null +++ b/src/mame/drivers/cowrace.c @@ -0,0 +1,220 @@ +/************************************************************************************************************* + + Cow Race + + preliminary driver by Luca Elia + +*************************************************************************************************************/ + +#include "driver.h" +#include "sound/okim6295.h" +#include "sound/2203intf.h" + +static tilemap *tmap; + +static WRITE8_HANDLER( cowrace_videoram_w ) +{ + videoram[offset] = data; + tilemap_mark_tile_dirty(tmap, offset); +} + +static WRITE8_HANDLER( cowrace_colorram_w ) +{ + colorram[offset] = data; + tilemap_mark_tile_dirty(tmap, offset); +} + +static TILE_GET_INFO( get_tile_info ) +{ + UINT16 code = videoram[ tile_index ] + (colorram[ tile_index ] << 8) ; + SET_TILE_INFO(1, code & 0x1ff, 0, TILE_FLIPYX( 0 ));; +} + +static VIDEO_START( cowrace ) +{ + tmap = tilemap_create( get_tile_info, tilemap_scan_rows, + TILEMAP_TYPE_PEN, 8,8, 0x20,0x20 ); + + tilemap_set_transparent_pen(tmap, 0); +} + +static VIDEO_UPDATE( cowrace ) +{ + fillbitmap(bitmap,machine->pens[0],cliprect); + tilemap_draw(bitmap,cliprect, tmap, 0, 0); + return 0; +} + +#ifdef UNUSED_FUNCTION +static WRITE8_HANDLER( cowrace_soundlatch_w ) +{ + soundlatch_w(0, data); + cpunum_set_input_line(1, INPUT_LINE_NMI, PULSE_LINE); +} +#endif + +static READ8_HANDLER( ret_ff ) +{ + return 0xff; +} + +static READ8_HANDLER( ret_00 ) +{ + return 0x00; +} + +static UINT8 cowrace_38c2; + +static WRITE8_HANDLER( cowrace_38c2_w ) +{ + cowrace_38c2 = data; +} + +static READ8_HANDLER( cowrace_30c3_r ) +{ + switch( cowrace_38c2 ) + { + case 0x02: return 0x03; break; + case 0x04: return 0x00; break; + } + + return 0xff; +} + +static ADDRESS_MAP_START( mem_map_cowrace, ADDRESS_SPACE_PROGRAM, 8 ) +AM_RANGE(0x302f, 0x302f) AM_READ( ret_00 ) +AM_RANGE(0x30c3, 0x30c3) AM_READ( cowrace_30c3_r ) +AM_RANGE(0x38c2, 0x38c2) AM_READWRITE( ret_ff, cowrace_38c2_w ) + + AM_RANGE(0x0000, 0x2fff) AM_ROM + AM_RANGE(0x3000, 0x33ff) AM_RAM + AM_RANGE(0x4000, 0x43ff) AM_READWRITE( MRA8_RAM, cowrace_videoram_w ) AM_BASE( &videoram ) + AM_RANGE(0x5000, 0x53ff) AM_READWRITE( MRA8_RAM, cowrace_colorram_w ) AM_BASE( &colorram ) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( io_map_cowrace, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x00, 0x00) AM_NOP +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( mem_map_sound_cowrace, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x1fff) AM_ROM + AM_RANGE(0x2000, 0x23ff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( io_map_sound_cowrace, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x40, 0x40) AM_READWRITE(YM2203_read_port_0_r,YM2203_write_port_0_w) + AM_RANGE(0x41, 0x41) AM_WRITE(YM2203_control_port_0_w) +ADDRESS_MAP_END + + +static const gfx_layout layout8x8x2 = +{ + 8,8, + RGN_FRAC(1,2), + 2, + { + RGN_FRAC(0,2), + RGN_FRAC(1,2) + }, + { STEP8(0,1) }, + { STEP8(0,8) }, + 8*8 +}; + +static const gfx_layout layout8x8x4 = +{ + 8,8, + RGN_FRAC(1,4), + 4, + { + RGN_FRAC(0,4), + RGN_FRAC(1,4), + RGN_FRAC(2,4), + RGN_FRAC(3,4) + }, + { STEP8(0,1) }, + { STEP8(0,8) }, + 8*8 +}; + +static GFXDECODE_START( cowrace ) + GFXDECODE_ENTRY( REGION_GFX1, 0x000000, layout8x8x4, 0, 0x1 ) + GFXDECODE_ENTRY( REGION_GFX2, 0x000000, layout8x8x2, 0, 0x1 ) +GFXDECODE_END + +static INPUT_PORTS_START( cowrace ) + PORT_START // IN0 +INPUT_PORTS_END + +static struct YM2203interface ym2203_interface_1 = +{ + soundlatch_r, OKIM6295_status_0_r, // read A,B + 0, OKIM6295_data_0_w, // write A,B + 0 +}; + + +static MACHINE_DRIVER_START( cowrace ) + + /* basic machine hardware */ + MDRV_CPU_ADD(Z80, 4000000) + MDRV_CPU_PROGRAM_MAP(mem_map_cowrace,0) + MDRV_CPU_IO_MAP(io_map_cowrace,0) + MDRV_CPU_VBLANK_INT(irq0_line_hold,1) + + MDRV_CPU_ADD(Z80, 4000000) + MDRV_CPU_PROGRAM_MAP(mem_map_sound_cowrace,0) + MDRV_CPU_IO_MAP(io_map_sound_cowrace,0) + MDRV_CPU_VBLANK_INT(irq0_line_hold,1) // NMI by main CPU + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(256, 256) + MDRV_SCREEN_VISIBLE_AREA(0, 256-1, 0, 256-1) + MDRV_GFXDECODE(cowrace) + MDRV_PALETTE_LENGTH(0x1000) + + MDRV_VIDEO_START(cowrace) + MDRV_VIDEO_UPDATE(cowrace) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + MDRV_SOUND_ADD(OKIM6295, 1056000) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) // clock frequency & pin 7 not verified + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.80) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.80) + + MDRV_SOUND_ADD(YM2203, 3000000) + MDRV_SOUND_CONFIG(ym2203_interface_1) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.80) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.80) +MACHINE_DRIVER_END + + +ROM_START( cowrace ) + ROM_REGION( 0x8000, REGION_CPU1, 0 ) + ROM_LOAD( "u3.bin", 0x0000, 0x8000, CRC(c05c3bd3) SHA1(b7199a069ab45edd25e021589b79105cdfa5511a) ) + + ROM_REGION( 0x2000, REGION_CPU2, 0 ) + ROM_LOAD( "u164.bin", 0x0000, 0x2000, CRC(9affa1c8) SHA1(bfc07693e8f749cbf20ab8cda33975b66f567962) ) + + ROM_REGION( 0x10000, REGION_GFX1, 0 ) + ROM_LOAD( "u94.bin", 0x0000, 0x8000, CRC(945dc115) SHA1(bdd145234e6361c42ed20e8ca4cac64f07332748) ) + ROM_LOAD( "u95.bin", 0x8000, 0x8000, CRC(fc1fc006) SHA1(326a67c1ea0f487ecc8b7aef2d90124a01e6dee3) ) + + ROM_REGION( 0x4000, REGION_GFX2, 0 ) + ROM_LOAD( "u139.bin", 0x0000, 0x2000, CRC(b746bb2f) SHA1(5f5f48752689079ed65fe7bb4a69512ada5db05d) ) + ROM_LOAD( "u140.bin", 0x2000, 0x2000, CRC(7e24b674) SHA1(c774efeb8e4e833e73c29007d5294c93df1abef4) ) + + ROM_REGION( 0x20000, REGION_SOUND1, 0 ) + ROM_LOAD( "u4.bin", 0x00000, 0x20000, CRC(f92a3ab5) SHA1(fc164492793597eadb8a50154410936edb74fa23) ) +ROM_END + +GAME( 19??, cowrace, 0, cowrace, cowrace, 0, ROT0, "<unknown>", "Cow Race", GAME_NOT_WORKING ) |