diff options
Diffstat (limited to 'src/mame/drivers/rcasino.c')
-rw-r--r-- | src/mame/drivers/rcasino.c | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/src/mame/drivers/rcasino.c b/src/mame/drivers/rcasino.c new file mode 100644 index 00000000000..ecff4f264b4 --- /dev/null +++ b/src/mame/drivers/rcasino.c @@ -0,0 +1,346 @@ +/* +"Royal Casino" + + ---------------------------------------- + Casino Royal by Dyna Electronics CO. LTD + ---------------------------------------- + + Location Device File ID Checksum + -------------------------------------------- + 18B 2764 RI-W1 C62D + 16B 2764 RI-W2 AC85 + 15B 2732 RI-W3 70B7 + 11B 2732 RI-W4 0C21 + 9B 2764 RI-W5 EB59 + 8B 2764 RI-W6 C934 + 6B 2732 RI-W7 4130 + 9E 82S123 PROM1.BPR 0F29 + 8E 82S123 PROM2.BPR 0EE5 + + Notes: PCB No. D-2608208A1-2 + + Brief hardware overview + ----------------------- + + Main processor - Z80 + Sound - AY-3-8910 + + --- + + Driver by Curt Coder + +TODO: + +Get correct data for hopper on and lockout. +*/ + +#include "driver.h" +#include "sound/ay8910.h" + +static tilemap *bg_tilemap; +static int pulse; +static int hopper; +static PALETTE_INIT( rcasino ) +{ + int i; + + for (i = 0; i < machine->drv->total_colors; i++) + { + int bit0, bit1, bit2, r, g, b; + + // red component + + bit0 = (*color_prom >> 7) & 0x01; + bit1 = (*color_prom >> 6) & 0x01; + bit2 = (*color_prom >> 5) & 0x01; + + r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + // green component + + bit0 = (*color_prom >> 4) & 0x01; + bit1 = (*color_prom >> 3) & 0x01; + bit2 = (*color_prom >> 2) & 0x01; + + g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + // blue component + + bit0 = 0; + bit1 = (*color_prom >> 1) & 0x01; + bit2 = (*color_prom >> 0) & 0x01; + + b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + palette_set_color(machine, i, MAKE_RGB(r, g, b)); + + color_prom++; + } +} + +static WRITE8_HANDLER( rcasino_videoram_w ) +{ + videoram[offset] = data; + tilemap_mark_tile_dirty(bg_tilemap, offset); +} + +static WRITE8_HANDLER( rcasino_colorram_w ) +{ + colorram[offset] = data; + tilemap_mark_tile_dirty(bg_tilemap, offset); +} + +static TILE_GET_INFO( get_bg_tile_info ) +{ + int attr = colorram[tile_index]; + int bank = (attr & 0x40) >> 6; + int code = videoram[tile_index] + ((attr & 0x30) << 4); + int color = attr & 0x0f; + + SET_TILE_INFO(bank, code, color, 0); +} + +static VIDEO_START(rcasino) +{ + bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_rows, + TILEMAP_TYPE_PEN, 8, 8, 32, 32); +} + +static VIDEO_UPDATE(rcasino) +{ + tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); + return 0; +} + +static WRITE8_HANDLER( rcasino_port_10_w ) +{ +// popmessage("port 10 data %u", data); + // write several values when the wheels are spinning +} + +static WRITE8_HANDLER( rcasino_port_11_w ) +{ + /* + write 0 when "P1 FlipFlop" (start1) is pressed + write 1 when "P2 FlipFlop" (start2) is pressed + write 2 when in "Super Conti" game + + In royalmah.c games this is an input port selector, but + there are only 2 input ports in this game and this write + seems to have no effect + */ +} + +static WRITE8_HANDLER( rcasino_lamp_w ) +{ + // button lamps + set_led_status(0, data & 0x01); + set_led_status(1, data & 0x02); + set_led_status(2, data & 0x04); + set_led_status(3, data & 0x08); + set_led_status(4, data & 0x10); +} + +static WRITE8_HANDLER( rcasino_coin_counter_w ) +{ + // coin counter + coin_counter_w(0, data & 0x01); + + // payout counter + coin_counter_w(1, data & 0x04); + + // activate hopper + //hopper = data & 0x08; + + // write 0x80 if payout fails and "call dealer" appears on screen, is it a coin lockout? + //coin_lockout_w(0, data & 0x80); +//Probably, most of these systems have some protection to stop clueless people from clogging up a broken hopper. +} + +static READ8_HANDLER( rcasino_port_11_r ) +{ + if (hopper) + { + if (pulse) + pulse = 0; + else pulse = 0x04; + } + return readinputport(1) + pulse; +} + +static ADDRESS_MAP_START( rcasino_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x4fff) AM_ROM + AM_RANGE(0xe000, 0xe7ff) AM_RAM + AM_RANGE(0xf000, 0xf3ff) AM_RAM AM_WRITE(rcasino_videoram_w) AM_BASE(&videoram) + AM_RANGE(0xf800, 0xfbff) AM_RAM AM_WRITE(rcasino_colorram_w) AM_BASE(&colorram) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( rcasino_io_map, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x01, 0x01) AM_READ(AY8910_read_port_0_r) + AM_RANGE(0x02, 0x02) AM_WRITE(AY8910_write_port_0_w) + AM_RANGE(0x03, 0x03) AM_WRITE(AY8910_control_port_0_w) + AM_RANGE(0x10, 0x10) AM_READWRITE(input_port_0_r, rcasino_port_10_w) +// AM_RANGE(0x11, 0x11) AM_READWRITE(input_port_1_r, rcasino_port_11_w) + AM_RANGE(0x11, 0x11) AM_READWRITE(rcasino_port_11_r, rcasino_port_11_w) + AM_RANGE(0x12, 0x12) AM_WRITE(rcasino_lamp_w) + AM_RANGE(0x13, 0x13) AM_WRITE(rcasino_coin_counter_w) +ADDRESS_MAP_END + +static INPUT_PORTS_START( rcasino ) + PORT_START_TAG("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_A) // SW1 + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_S) // SW2 + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_D) // SW3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_F) // SW4 + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_G) // SW5 + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) // Coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME("Note Acceptor")// Note + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4) PORT_NAME("Payout")// Pay Out + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 ) // Hopper Micro + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) // 1P FlipFlop + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) // 2P FlipFlop + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("DSW1") + PORT_DIPNAME( 0x01, 0x01, "Poker available?" ) + PORT_DIPSETTING( 0x01, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x02, 0x02, "Black Jack available?") + PORT_DIPSETTING( 0x02, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x04, 0x04, "Hi and Low available?" ) + PORT_DIPSETTING( 0x04, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x08, 0x08, "Five Line (Slot) available?") + PORT_DIPSETTING( 0x08, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x10, 0x10, "Super Continental available?") + PORT_DIPSETTING( 0x10, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x20, 0x20, "Rule Change (BlackJack, even)" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Rule Change (Poker, Royal Flush)" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Rule Change (Poker, Jack or Better)") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("DSW2") + PORT_DIPNAME( 0x01, 0x01, "Enable Hopper Payout" ) // enables Payout button + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Enable Hopper Win Payout") // enables Payout button + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Hi Lo, Royal Flush" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Game Bet") + PORT_DIPSETTING( 0x08, "Normal Game") + PORT_DIPSETTING( 0x00, "Double Game") + PORT_DIPNAME( 0x10, 0x10, "Always Off" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Always Off") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_SERVICE( 0x40, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x80, 0x80, "Analyzer" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static const gfx_layout charlayout = +{ + 8, 8, + RGN_FRAC(1,2), + 2, + { 0, 0x2000*8 }, + { 7, 6, 5, 4, 3, 2, 1, 0 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8*8 +}; + +static const gfx_layout charlayout2 = +{ + 8, 8, + RGN_FRAC(1,2), + 2, + { 0, 0x1000*8 }, + { 7, 6, 5, 4, 3, 2, 1, 0 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8*8 +}; + +static GFXDECODE_START( rcasino ) + GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout, 0, 16 ) + GFXDECODE_ENTRY( REGION_GFX2, 0x0000, charlayout2, 0, 16 ) +GFXDECODE_END + +static struct AY8910interface ay8910_interface = +{ + input_port_2_r, // DSW1 + input_port_3_r, // DSW2 + 0, + 0 +}; + +static MACHINE_DRIVER_START( rcasino ) + // basic machine hardware + MDRV_CPU_ADD(Z80, 8000000/2) // ??? + MDRV_CPU_PROGRAM_MAP(rcasino_map, 0) + MDRV_CPU_IO_MAP(rcasino_io_map, 0) + MDRV_CPU_VBLANK_INT(irq0_line_hold, 1) + + 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(32*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) + + MDRV_GFXDECODE(rcasino) + MDRV_PALETTE_LENGTH(64) + MDRV_COLORTABLE_LENGTH(64) + + MDRV_PALETTE_INIT(rcasino) + MDRV_VIDEO_START(rcasino) + MDRV_VIDEO_UPDATE(rcasino) + + // sound hardware + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(AY8910, 18432000/12) + MDRV_SOUND_CONFIG(ay8910_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + +MACHINE_DRIVER_END + +ROM_START( rcasino ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "ri-w1.18b", 0x0000, 0x2000, CRC(ed105d69) SHA1(951697e1050f72967f0710155aa8ff72db73fce1) ) + ROM_LOAD( "ri-w2.16b", 0x2000, 0x2000, CRC(a1a80b33) SHA1(2f969713cae288de1985d7baa70cad50c4148970) ) + ROM_LOAD( "ri-w3.15b", 0x4000, 0x1000, CRC(acf77a36) SHA1(599470e461a261130e942d174051648459f37a37) ) + + ROM_REGION( 0x4000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "ri-w5.9b", 0x0000, 0x2000, CRC(81d20577) SHA1(50a1e0231400c106539ffa78deb3e0e6c8afc3f5) ) + ROM_LOAD( "ri-w6.8b", 0x2000, 0x2000, CRC(b2dd4e1e) SHA1(323dcfb26653c17951db65ce2ced3325d35489e4) ) + + ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "ri-w4.11b", 0x0000, 0x1000, CRC(7ca0e78c) SHA1(163cfd1f76ecbd14219146963d1abc4c09c0ac8c) ) + ROM_LOAD( "ri-w7.6b", 0x1000, 0x1000, CRC(8e0d3b9c) SHA1(c5211d834b0db488839a5c53d00435a0b59cd4ca) ) + + ROM_REGION( 0x40, REGION_PROMS, 0 ) + ROM_LOAD( "prom1.9e", 0x0000, 0x0020, CRC(93312432) SHA1(3c7abc165e6bc7e0c56ca97d89b0b5e06323b82e) ) + ROM_LOAD( "prom2.8e", 0x0020, 0x0020, CRC(2b5c7826) SHA1(c0de392aebd6982e5846c12aeb2e871358be60d7) ) +ROM_END + +GAME( 1984, rcasino, 0, rcasino, rcasino, 0, ROT270, "Dyna Electronics", "Royal Casino", GAME_IMPERFECT_COLORS ) |