From b8a506be335d832b5a749e88ecca87055f635503 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Thu, 8 Aug 2024 22:29:47 +0200 Subject: New systems marked not working ------------------------------ Poker & 21 [Ioannis Bampoulas] unknown WHT gambling game [Hammy] --- src/mame/igs/funtech.cpp | 381 ++++++++++++++++++++++++++++++++++------- src/mame/igs/igs_m027.cpp | 2 + src/mame/mame.lst | 4 + src/mame/skeleton/boramz80.cpp | 6 +- src/mame/skeleton/whtm68k.cpp | 254 +++++++++++++++++++++++++++ 5 files changed, 578 insertions(+), 69 deletions(-) create mode 100644 src/mame/skeleton/whtm68k.cpp diff --git a/src/mame/igs/funtech.cpp b/src/mame/igs/funtech.cpp index 9bb6b0cea9f..52f7b709bfc 100644 --- a/src/mame/igs/funtech.cpp +++ b/src/mame/igs/funtech.cpp @@ -1,8 +1,8 @@ // license:BSD-3-Clause -// copyright-holders:David Haywood -/* +// copyright-holders: David Haywood -program rom contains the following details +/* +fts2in1's program ROM contains the following details COMPANY:FUN TECH CORPORATION PRODUCT-NAME:SUPER TWO IN ONE @@ -12,20 +12,25 @@ SOFTWARE-DESIGNER:RANG CHANG LI,CHIH HNI HUANG,WEN CHANG LIN PROGRAM-VERSION:1.0 PROGRAM-DATE:09/23/1993 -8x8 tiles and 8x32 reels, likely going to be very similar to skylncr.cpp or goldstar.cpp (which are both very similar anyway) -palette addresses are the same as unkch in goldstar.cpp, but the io stuff is definitely different here +8x8 tiles and 8x32 reels, very similar to skylncr.cpp or goldstar.cpp (which are both very similar anyway) +palette addresses are the same as unkch in goldstar.cpp, but the I/O stuff is definitely different here board has an M5255 for sound and an unpopulated position for a YM2413 or UM3567 +fts2ina runs on a simplified PCB (83330 13 P2IN1 - 1994 © FUN TECH), with no reels support. +It has a K-665 (Oki M6295 clone) instead of the unpopulated YM2413 / UM3567 and a WF19054 instead of the +equivalent M5255. Moreover, it has a 12 MHz XTAL instead of 10 MHz. */ #include "emu.h" #include "cpu/z80/z80.h" -#include "sound/ay8910.h" #include "machine/nvram.h" #include "machine/ticket.h" +#include "sound/ay8910.h" +#include "sound/okim6295.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -41,76 +46,102 @@ class fun_tech_corp_state : public driver_device public: fun_tech_corp_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_fgram(*this, "fgram"), - m_reel_ram(*this, "reel_ram.%u", 0U), - m_reel_scroll(*this, "reel_scroll.%u", 0U), - m_reel1_alt_scroll(*this, "reel1_alt_scroll"), m_maincpu(*this, "maincpu"), - m_hopper(*this, "hopper"), m_gfxdecode(*this, "gfxdecode"), + m_fgram(*this, "fgram"), + m_hopper(*this, "hopper"), m_lamps(*this, "lamp%u", 0U) { } - void funtech(machine_config &config); + void poker21(machine_config &config); protected: virtual void machine_start() override; virtual void video_start() override; -private: - required_shared_ptr m_fgram; - required_shared_ptr_array m_reel_ram; - required_shared_ptr_array m_reel_scroll; - required_shared_ptr m_reel1_alt_scroll; required_device m_maincpu; - required_device m_hopper; required_device m_gfxdecode; - output_finder<6> m_lamps; uint8_t m_vreg = 0; tilemap_t *m_fg_tilemap = nullptr; - INTERRUPT_GEN_MEMBER(vblank_interrupt); - void lamps_w(uint8_t data); void coins_w(uint8_t data); - void vreg_w(uint8_t data); + + void program_map(address_map &map); + + void base(machine_config &config); + +private: + required_shared_ptr m_fgram; + required_device m_hopper; + output_finder<6> m_lamps; + + INTERRUPT_GEN_MEMBER(vblank_interrupt); void fgram_w(offs_t offset, uint8_t data); + void vreg_w(uint8_t data); TILE_GET_INFO_MEMBER(get_fg_tile_info); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void io_map(address_map &map); +}; + +class reels_state : public fun_tech_corp_state +{ +public: + reels_state(const machine_config &mconfig, device_type type, const char *tag) : + fun_tech_corp_state(mconfig, type, tag), + m_reel_ram(*this, "reel_ram.%u", 0U), + m_reel_scroll(*this, "reel_scroll.%u", 0U), + m_reel1_alt_scroll(*this, "reel1_alt_scroll") + { } + + void funtech(machine_config &config); + +protected: + virtual void video_start() override; + +private: + required_shared_ptr_array m_reel_ram; + required_shared_ptr_array m_reel_scroll; + required_shared_ptr m_reel1_alt_scroll; + tilemap_t *m_reel_tilemap[3]{}; + void vreg_w(uint8_t data); + template void reel_ram_w(offs_t offset, uint8_t data); template TILE_GET_INFO_MEMBER(get_reel_tile_info); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void funtech_io_map(address_map &map); - void funtech_map(address_map &map); + void io_map(address_map &map); + void program_map(address_map &map); }; TILE_GET_INFO_MEMBER(fun_tech_corp_state::get_fg_tile_info) { int code = m_fgram[tile_index]; - int attr = m_fgram[tile_index+0x800]; + int const attr = m_fgram[tile_index + 0x800]; code |= (attr & 0x0f) << 8; - if (m_vreg&1) code |= 0x1000; + if (m_vreg & 0x1) code |= 0x1000; tileinfo.set(0, code, - attr>>4, + attr >> 4, 0); } template -TILE_GET_INFO_MEMBER(fun_tech_corp_state::get_reel_tile_info) +TILE_GET_INFO_MEMBER(reels_state::get_reel_tile_info) { int code = m_reel_ram[Reel][tile_index]; if (m_vreg & 0x4) code |= 0x100; @@ -123,7 +154,7 @@ TILE_GET_INFO_MEMBER(fun_tech_corp_state::get_reel_tile_info) } template -void fun_tech_corp_state::reel_ram_w(offs_t offset, uint8_t data) +void reels_state::reel_ram_w(offs_t offset, uint8_t data) { m_reel_ram[Reel][offset] = data; m_reel_tilemap[Reel]->mark_tile_dirty(offset); @@ -133,10 +164,15 @@ void fun_tech_corp_state::video_start() { m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(fun_tech_corp_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); m_fg_tilemap->set_transparent_pen(0); +} - m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(fun_tech_corp_state::get_reel_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); - m_reel_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(fun_tech_corp_state::get_reel_tile_info<1>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); - m_reel_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(fun_tech_corp_state::get_reel_tile_info<2>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); +void reels_state::video_start() +{ + fun_tech_corp_state::video_start(); + + m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(reels_state::get_reel_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + m_reel_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(reels_state::get_reel_tile_info<1>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + m_reel_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(reels_state::get_reel_tile_info<2>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); m_reel_tilemap[0]->set_scroll_cols(64); m_reel_tilemap[1]->set_scroll_cols(64); @@ -147,7 +183,7 @@ void fun_tech_corp_state::video_start() void fun_tech_corp_state::fgram_w(offs_t offset, uint8_t data) { m_fgram[offset] = data; - m_fg_tilemap->mark_tile_dirty(offset&0x7ff); + m_fg_tilemap->mark_tile_dirty(offset & 0x7ff); } @@ -155,6 +191,14 @@ uint32_t fun_tech_corp_state::screen_update(screen_device &screen, bitmap_ind16 { bitmap.fill(0, cliprect); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + return 0; +} + +uint32_t reels_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(0, cliprect); + if (!(m_vreg & 0x40)) { for (uint8_t reel = 0; reel < 3; reel++) @@ -198,22 +242,26 @@ INTERRUPT_GEN_MEMBER(fun_tech_corp_state::vblank_interrupt) } - -void fun_tech_corp_state::funtech_map(address_map &map) +void fun_tech_corp_state::program_map(address_map &map) { map(0x0000, 0xbfff).rom(); map(0xc000, 0xc1ff).ram().w("palette", FUNC(palette_device::write8)).share("palette"); map(0xc800, 0xc9ff).ram().w("palette", FUNC(palette_device::write8_ext)).share("palette_ext"); - map(0xd000, 0xd7ff).rom(); // maybe + map(0xd000, 0xd7ff).rom(); map(0xd800, 0xdfff).ram().share("nvram"); - map(0xe000, 0xefff).ram().w(FUNC(fun_tech_corp_state::fgram_w)).share(m_fgram); - map(0xf000, 0xf1ff).ram().w(FUNC(fun_tech_corp_state::reel_ram_w<0>)).share(m_reel_ram[0]); - map(0xf200, 0xf3ff).ram().w(FUNC(fun_tech_corp_state::reel_ram_w<1>)).share(m_reel_ram[1]); - map(0xf400, 0xf5ff).ram().w(FUNC(fun_tech_corp_state::reel_ram_w<2>)).share(m_reel_ram[2]); +} + +void reels_state::program_map(address_map &map) +{ + fun_tech_corp_state::program_map(map); + + map(0xf000, 0xf1ff).ram().w(FUNC(reels_state::reel_ram_w<0>)).share(m_reel_ram[0]); + map(0xf200, 0xf3ff).ram().w(FUNC(reels_state::reel_ram_w<1>)).share(m_reel_ram[1]); + map(0xf400, 0xf5ff).ram().w(FUNC(reels_state::reel_ram_w<2>)).share(m_reel_ram[2]); map(0xf600, 0xf7ff).ram(); map(0xf840, 0xf87f).ram().share(m_reel_scroll[0]); @@ -247,7 +295,19 @@ void fun_tech_corp_state::coins_w(uint8_t data) m_hopper->motor_w(BIT(data, 7)); } + void fun_tech_corp_state::vreg_w(uint8_t data) +{ + if (data & 0xfe) logerror("vreg_w %02x\n", data); + + // ---- ---t + // t = text tile bank + + m_vreg = data; + m_fg_tilemap->mark_all_dirty(); +} + +void reels_state::vreg_w(uint8_t data) { if (data & 0xb2) logerror("vreg_w %02x\n", data); @@ -263,14 +323,33 @@ void fun_tech_corp_state::vreg_w(uint8_t data) -void fun_tech_corp_state::funtech_io_map(address_map &map) +void fun_tech_corp_state::io_map(address_map &map) { map.global_mask(0xff); - // lamps? - map(0x00, 0x00).w(FUNC(fun_tech_corp_state::lamps_w)); + map(0x01, 0x01).w(FUNC(fun_tech_corp_state::coins_w)); + map(0x02, 0x02).w(FUNC(fun_tech_corp_state::lamps_w)); + + map(0x04, 0x04).portr("IN0"); + map(0x05, 0x05).portr("IN1"); + map(0x06, 0x06).portr("DSW4"); + map(0x07, 0x07).portr("DSW3"); + + map(0x10, 0x10).r("aysnd", FUNC(ay8910_device::data_r)); + map(0x11, 0x11).w("aysnd", FUNC(ay8910_device::data_w)); + map(0x12, 0x12).w("aysnd", FUNC(ay8910_device::address_w)); + + map(0x1a, 0x1a).w(FUNC(fun_tech_corp_state::vreg_w)); +} - map(0x03, 0x03).w(FUNC(fun_tech_corp_state::vreg_w)); +void reels_state::io_map(address_map &map) +{ + map.global_mask(0xff); + // lamps? + map(0x00, 0x00).w(FUNC(reels_state::lamps_w)); + map(0x01, 0x01).w(FUNC(reels_state::coins_w)); + + map(0x03, 0x03).w(FUNC(reels_state::vreg_w)); map(0x04, 0x04).portr("IN0"); map(0x05, 0x05).portr("IN1"); @@ -282,14 +361,14 @@ void fun_tech_corp_state::funtech_io_map(address_map &map) map(0x12, 0x12).w("aysnd", FUNC(ay8910_device::address_w)); } -static INPUT_PORTS_START( funtech ) +static INPUT_PORTS_START( fts2in1 ) PORT_START("IN0") // the buttons are all multi-purpose as it's a 2-in-1. PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5, Bet") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("Coin A") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("Coin C") PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME("Coin D") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1, Take Score, Odds, Left Stop") // shows odds in 8-liner game + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1, Take Score, Odds, Left Stop") // shows odds in 8-liner game PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4, Double-Up") // manual suggests this shows odds, but it doesn't PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3, Small, Right Stop") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2, Big, Center Stop") @@ -412,24 +491,155 @@ static INPUT_PORTS_START( funtech ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END +static INPUT_PORTS_START( poker21 ) + PORT_START("IN0") + // the buttons are all multi-purpose as it's a 2-in-1. + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5, Bet") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("Coin A") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("Coin C") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME("Coin D") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1, Take Score, Odds, Left Stop") // shows odds in 8-liner game + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4, Double-Up") // manual suggests this shows odds, but it doesn't + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3, Small, Right Stop") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2, Big, Center Stop") + + PORT_START("IN1") // port 0x13 + PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW4:1" ) + PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW4:2" ) + PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW4:3" ) + PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW4:4" ) + PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW4:5" ) + PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW4:6" ) + PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW4:7" ) + PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW4:8" ) + + // the board contains 4 banks of 8 dipswitches + PORT_START("DSW1") + PORT_DIPNAME( 0x03, 0x03, "Hopper Limit" ) PORT_DIPLOCATION("NO. 1:1,2") + PORT_DIPSETTING( 0x00, "300" ) + PORT_DIPSETTING( 0x02, "500" ) + PORT_DIPSETTING( 0x01, "1000" ) + PORT_DIPSETTING( 0x03, "Unlimited" ) + PORT_DIPNAME( 0x1c, 0x1c, "Credit Limit" ) PORT_DIPLOCATION("NO. 1:3,4,5") + PORT_DIPSETTING( 0x00, "5,000" ) + PORT_DIPSETTING( 0x10, "10,000" ) + PORT_DIPSETTING( 0x08, "20,000" ) + PORT_DIPSETTING( 0x18, "30,000" ) + PORT_DIPSETTING( 0x04, "40,000" ) + PORT_DIPSETTING( 0x14, "50,000" ) + PORT_DIPSETTING( 0x0c, "100,000" ) + PORT_DIPSETTING( 0x1c, "Unlimited" ) + PORT_DIPNAME( 0x20, 0x20, "Credit Limit Display" ) PORT_DIPLOCATION("NO. 1:6") + PORT_DIPSETTING( 0x20, "Not Displayed" ) + PORT_DIPSETTING( 0x00, "Displayed" ) + PORT_DIPNAME( 0xc0, 0xc0, "Coin A Rate" ) PORT_DIPLOCATION("NO. 1:7,8") + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" ) + + PORT_START("DSW2") + PORT_DIPNAME( 0x07, 0x07, "Keyin B Rate" ) PORT_DIPLOCATION("NO. 2:1,2,3") + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x06, "1 Coin/10 Credits" ) + PORT_DIPSETTING( 0x01, "1 Coin/20 Credits" ) + PORT_DIPSETTING( 0x05, "1 Coin/25 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin/50 Credits" ) + PORT_DIPSETTING( 0x07, "1 Coin/100 Credits" ) + PORT_DIPNAME( 0x18, 0x18, "Coin C Rate" ) PORT_DIPLOCATION("NO. 2:4,5") + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x18, "1 Coin/10 Credits" ) + PORT_DIPNAME( 0xe0, 0xe0, "Coin D Rate" ) PORT_DIPLOCATION("NO. 2:6,7,8") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C) ) + PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0xa0, "1 Coin/10 Credits" ) + PORT_DIPSETTING( 0x60, "1 Coin/25 Credits" ) + PORT_DIPSETTING( 0xe0, "1 Coin/50 Credits" ) + + PORT_START("DSW3") + PORT_DIPNAME( 0x0f, 0x0f, "Main Game Pay Rate" ) PORT_DIPLOCATION("NO. 3:1,2,3,4") + PORT_DIPSETTING( 0x00, "50%" ) + PORT_DIPSETTING( 0x08, "53%" ) + PORT_DIPSETTING( 0x04, "56%" ) + PORT_DIPSETTING( 0x0c, "59%" ) + PORT_DIPSETTING( 0x02, "62%" ) + PORT_DIPSETTING( 0x0a, "65%" ) + PORT_DIPSETTING( 0x06, "68%" ) + PORT_DIPSETTING( 0x0e, "71%" ) + PORT_DIPSETTING( 0x01, "74%" ) + PORT_DIPSETTING( 0x09, "77%" ) + PORT_DIPSETTING( 0x05, "80%" ) + PORT_DIPSETTING( 0x0d, "83%" ) + PORT_DIPSETTING( 0x03, "86%" ) + PORT_DIPSETTING( 0x0b, "89%" ) + PORT_DIPSETTING( 0x07, "92%" ) + PORT_DIPSETTING( 0x0f, "95%" ) + PORT_DIPNAME( 0x10, 0x10, "Double Up Game" ) PORT_DIPLOCATION("NO. 3:5") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Double Up Pay Rate" ) PORT_DIPLOCATION("NO. 3:6") + PORT_DIPSETTING( 0x00, "80%" ) + PORT_DIPSETTING( 0x20, "90%" ) + PORT_DIPNAME( 0x40, 0x40, "Double Up 7 Player Value" ) PORT_DIPLOCATION("NO. 3:7") + PORT_DIPSETTING( 0x40, "Loss" ) + PORT_DIPSETTING( 0x00, "Draw" ) + PORT_DIPNAME( 0x80, 0x80, "Double Up Girl Display" ) PORT_DIPLOCATION("NO. 3:8") // if set to No girl remains clothed when winning + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) + + PORT_START("DSW4") + PORT_DIPNAME( 0x01, 0x01, "Reel Speed" ) PORT_DIPLOCATION("NO. 4:1") + PORT_DIPSETTING( 0x01, "Low" ) + PORT_DIPSETTING( 0x00, "High" ) + PORT_DIPNAME( 0x06, 0x06, "Max Bet" ) PORT_DIPLOCATION("NO. 4:2,3") + PORT_DIPSETTING( 0x00, "8" ) + PORT_DIPSETTING( 0x04, "16" ) + PORT_DIPSETTING( 0x02, "32" ) + PORT_DIPSETTING( 0x06, "64" ) + PORT_DIPNAME( 0x08, 0x08, "Min Bet for Any Bonus" ) PORT_DIPLOCATION("NO. 4:4") + PORT_DIPSETTING( 0x00, "8" ) + PORT_DIPSETTING( 0x08, "16" ) + PORT_DIPNAME( 0x30, 0x30, "Bonus Games Entry Condition" ) PORT_DIPLOCATION("NO. 4:5,6") + PORT_DIPSETTING( 0x00, "1-3-1-5-1" ) + PORT_DIPSETTING( 0x20, "1-4-1-6-1" ) + PORT_DIPSETTING( 0x10, "1-5-1-7-1" ) + PORT_DIPSETTING( 0x30, "1-6-1-8-1" ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("NO. 4:7") // unused according to manual + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) PORT_DIPLOCATION("NO. 4:8") // unused according to manual + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + static const gfx_layout tiles8x32_layout = { 8,32, RGN_FRAC(1,1), 8, - { 0, 1, 2, 3, 4 ,5, 6, 7 }, - { 0, 8, 16, 24, 32, 40, 48, 56 }, - { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64, 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64, 16*64, 17*64, 18*64, 19*64, 20*64, 21*64, 22*64, 23*64, 24*64, 25*64, 26*64, 27*64, 28*64, 29*64, 30*64, 31*64 }, + { STEP8(0,1) }, + { STEP8(0,8) }, + { STEP32(0,64) }, 32*64 }; -static GFXDECODE_START( gfx_funtech ) - GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 16 ) - GFXDECODE_ENTRY( "gfx2", 0, tiles8x32_layout, 0x100, 1 ) +static GFXDECODE_START( gfx_fts2in1 ) + GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x4_packed_lsb, 0, 16 ) + GFXDECODE_ENTRY( "reels", 0, tiles8x32_layout, 0x100, 1 ) GFXDECODE_END +static GFXDECODE_START( gfx_poker21 ) + GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x4_packed_lsb, 0, 16 ) +GFXDECODE_END @@ -441,54 +651,93 @@ void fun_tech_corp_state::machine_start() } -void fun_tech_corp_state::funtech(machine_config &config) +void fun_tech_corp_state::base(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, 4000000); /* ? MHz */ - m_maincpu->set_addrmap(AS_PROGRAM, &fun_tech_corp_state::funtech_map); - m_maincpu->set_addrmap(AS_IO, &fun_tech_corp_state::funtech_io_map); - m_maincpu->set_vblank_int("screen", FUNC(fun_tech_corp_state::vblank_interrupt)); + // basic machine hardware + Z80(config, m_maincpu, 10_MHz_XTAL / 2 ); // divider not verified + m_maincpu->set_vblank_int("screen", FUNC(reels_state::vblank_interrupt)); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(512, 256); screen.set_visarea(0, 512-1, 8, 256-8-1); - screen.set_screen_update(FUNC(fun_tech_corp_state::screen_update)); screen.set_palette("palette"); - GFXDECODE(config, m_gfxdecode, "palette", gfx_funtech); + GFXDECODE(config, m_gfxdecode, "palette", gfx_poker21); PALETTE(config, "palette").set_format(palette_device::xBGR_555, 0x200); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); TICKET_DISPENSER(config, m_hopper, attotime::from_msec(50), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - ay8910_device &aysnd(AY8910(config, "aysnd", 1500000)); /* M5255, ? MHz */ + ay8910_device &aysnd(AY8910(config, "aysnd", 10_MHz_XTAL / 8)); // M5255, divider not verified aysnd.port_a_read_callback().set_ioport("DSW1"); aysnd.port_b_read_callback().set_ioport("DSW2"); aysnd.add_route(ALL_OUTPUTS, "mono", 1.00); } +void reels_state::funtech(machine_config &config) +{ + base(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &reels_state::program_map); + m_maincpu->set_addrmap(AS_IO, &reels_state::io_map); + + subdevice("screen")->set_screen_update(FUNC(reels_state::screen_update)); + + m_gfxdecode->set_info(gfx_fts2in1); +} + +void fun_tech_corp_state::poker21(machine_config &config) +{ + base(config); + + m_maincpu->set_clock(12_MHz_XTAL / 4); // divider not verified + m_maincpu->set_addrmap(AS_PROGRAM, &fun_tech_corp_state::program_map); + m_maincpu->set_addrmap(AS_IO, &fun_tech_corp_state::io_map); + //m_maincpu->set_vblank_int("screen", FUNC(fun_tech_corp_state::irq0_line_hold)); + + subdevice("screen")->set_screen_update(FUNC(fun_tech_corp_state::screen_update)); + + subdevice("aysnd")->set_clock(12_MHz_XTAL / 12); // WF19054, divider not verified + + OKIM6295(config, "oki", 12_MHz_XTAL / 12, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80); // divider and pin 7 not verified +} ROM_START( fts2in1 ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "u5.bin", 0x00000, 0x10000, CRC(ab19fd28) SHA1(a65ff732e0aaaec256cc63beff5f24419e691645) ) - ROM_REGION( 0x80000, "gfx1", 0 ) // crc printed on label matches half the data, even if chip was double size. Seen on a second PCB with correct sized ROM. + ROM_REGION( 0x80000, "tiles", 0 ) // CRC printed on label matches half the data, even if chip was double size. Seen on a second PCB with correct sized ROM. ROM_LOAD( "u18.bin", 0x00000, 0x80000, CRC(d1154aac) SHA1(dc03c4b7a4dfda2a30bfabaeb0ce053660961663) ) // 1ST AND 2ND HALF IDENTICAL - ROM_REGION( 0x40000, "gfx2", 0 ) + ROM_REGION( 0x40000, "reels", 0 ) ROM_LOAD16_BYTE( "u29.bin", 0x00000, 0x20000, CRC(ed6a1e2f) SHA1(2c72e764c7c8091a8fa1dfc257a84d61e2da0e4b) ) ROM_LOAD16_BYTE( "u30.bin", 0x00001, 0x20000, CRC(d572bddc) SHA1(06499aeb47085a02af9eb4987ed987f9a3a397f7) ) ROM_END +ROM_START( poker21 ) // no ROM labels present + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "27c512.u6", 0x00000, 0x10000, CRC(77abd0c0) SHA1(18cc08911180a252f66c9c599f799f8e1ac3c875) ) + + ROM_REGION( 0x40000, "tiles", 0 ) + ROM_LOAD( "27c020.u29", 0x00000, 0x40000, CRC(b19a4dd5) SHA1(97b615e548141b2c087a710cdf6df2b746d3881a) ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "27c020.u36", 0x00000, 0x40000, CRC(7185dc79) SHA1(db01a5221f423137f89b04c0607b5c93d2a795f3) ) + + ROM_REGION( 0x200, "plds", ROMREGION_ERASE00 ) + ROM_LOAD( "palce20v8.u19", 0x000, 0x157, NO_DUMP ) +ROM_END + } // anonymous namespace -GAMEL( 1993, fts2in1, 0, funtech, funtech, fun_tech_corp_state, empty_init, ROT0, "Fun Tech Corporation", "Super Two In One", MACHINE_SUPPORTS_SAVE, layout_fts2in1 ) +GAMEL( 1993, fts2in1, 0, funtech, fts2in1, reels_state, empty_init, ROT0, "Fun Tech Corporation", "Super Two In One", MACHINE_SUPPORTS_SAVE, layout_fts2in1 ) +GAME( 1994, poker21, 0, poker21, poker21, fun_tech_corp_state, empty_init, ROT0, "Fun Tech Corporation", "Poker & 21", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // doesn't like interrupts diff --git a/src/mame/igs/igs_m027.cpp b/src/mame/igs/igs_m027.cpp index c30df42763c..3bb58b08da4 100644 --- a/src/mame/igs/igs_m027.cpp +++ b/src/mame/igs/igs_m027.cpp @@ -19,6 +19,8 @@ a holographic sticker, this appears to be unprotected but has only been read for a few sets, it probably either acts as a secondary protection device or as a main CPU instructing the ARM. + For Crazy Bugs, MCUs with stickers J9 and F9 have been dumped and both + contained the same data, despite the different sticker. */ diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 45a517bf158..140654a765e 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -19952,6 +19952,7 @@ dunhuang // (c) 1995 @source:igs/funtech.cpp fts2in1 +poker21 @source:igs/goldstar.cpp 3cdpoker // hack? @@ -42515,6 +42516,9 @@ vp415 // (c) 1983 Philips @source:skeleton/webtouchone.cpp wto2840sp // +@source:skeleton/whtm68k.cpp +unkwht + @source:skeleton/xbase09.cpp xbase09 // diff --git a/src/mame/skeleton/boramz80.cpp b/src/mame/skeleton/boramz80.cpp index 59e7c09788a..b590e7e3324 100644 --- a/src/mame/skeleton/boramz80.cpp +++ b/src/mame/skeleton/boramz80.cpp @@ -196,7 +196,7 @@ void boramz80_state::pk(machine_config &config) ppi.in_pa_callback().set([this] () { logerror("%s: PPI port A read\n", machine().describe_context()); return ioport("IN0")->read(); }); ppi.in_pb_callback().set([this] () { logerror("%s: PPI port B read\n", machine().describe_context()); return ioport("IN1")->read(); }); ppi.in_pc_callback().set([this] () { logerror("%s: PPI port C read\n", machine().describe_context()); return ioport("IN2")->read(); }); - ppi.out_pc_callback().set([this] (u8 data) { logerror("%s: PPI port C write %02x\n", machine().describe_context(), data); }); + ppi.out_pc_callback().set([this] (uint8_t data) { logerror("%s: PPI port C write %02x\n", machine().describe_context(), data); }); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // TODO: everything screen.set_refresh_hz(60); @@ -264,5 +264,5 @@ ROM_END } // anonymous namespace -GAME( 1987, pkboram, 0, pk, pkboram, boramz80_state, empty_init, ROT0, "Boram", "PK", MACHINE_IS_SKELETON ) // PK-BORAM 0211 aug.04.1987. BORAM CORP -GAME( 1988, tpkboram, 0, pk, tpkboram, boramz80_state, empty_init, ROT0, "Boram", "Turbo PK", MACHINE_IS_SKELETON ) // PK-TURBO jan.29.1988. BORAM CORP. +GAME( 1987, pkboram, 0, pk, pkboram, boramz80_state, empty_init, ROT0, "Boram", "PK - New Exciting Poker!", MACHINE_IS_SKELETON ) // PK-BORAM 0211 aug.04.1987. BORAM CORP +GAME( 1988, tpkboram, 0, pk, tpkboram, boramz80_state, empty_init, ROT0, "Boram", "Turbo PK", MACHINE_IS_SKELETON ) // PK-TURBO jan.29.1988. BORAM CORP. diff --git a/src/mame/skeleton/whtm68k.cpp b/src/mame/skeleton/whtm68k.cpp new file mode 100644 index 00000000000..914e6f3f8d7 --- /dev/null +++ b/src/mame/skeleton/whtm68k.cpp @@ -0,0 +1,254 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* +Unknown WHT gambling game + +The PCB is marked 'COPYRIGHT FOR WHT ELE CO,. VER 3.0' + +Main components are: + +M68HC000P10 CPU +24.000 MHz XTAL (near CPU) +2x MK48H64N-120 SRAM (near CPU) +HM6116L-70 SRAM (near battery) +P-80C32 audio CPU +HM6116L-70 SRAM (near P-80C32) +GM68B45S CRTC +12.000 MHz XTAL (near CRTC and P-80C32) +2x MU9C4870-80PC RAMDAC +5x HM6265L-70 SRAM (near GFX ROMs) +3x Lattice pLSI 1032-60LJ +KB89C67 (YM2413 clone) +3.579545 MHz XTAL (near KB89C67) +K-665 sound chip (Oki M6295 clone) +2x 8-DIP banks +*/ + + +#include "emu.h" + +#include "cpu/m68000/m68000.h" +#include "cpu/mcs51/mcs51.h" +#include "sound/okim6295.h" +#include "sound/ymopl.h" +#include "video/mc6845.h" +#include "video/ramdac.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "tilemap.h" + + +// configurable logging +#define LOG_PORTS (1U << 1) + +//#define VERBOSE (LOG_GENERAL | LOG_PORTS) + +#include "logmacro.h" + +#define LOGPORTS(...) LOGMASKED(LOG_PORTS, __VA_ARGS__) + + +namespace { + +class whtm68k_state : public driver_device +{ +public: + whtm68k_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_gfxdecode(*this, "gfxdecode") + { } + + void unkwht(machine_config &config) ATTR_COLD; + +protected: + virtual void video_start() override ATTR_COLD; + +private: + required_device m_maincpu; + required_device m_gfxdecode; + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void main_program_map(address_map &map) ATTR_COLD; + void audio_program_map(address_map &map) ATTR_COLD; + void audio_io_map(address_map &map) ATTR_COLD; +}; + + +void whtm68k_state::video_start() +{ +} + +uint32_t whtm68k_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(rgb_t::black(), cliprect); + + return 0; +} + + +void whtm68k_state::main_program_map(address_map &map) +{ + map(0x000000, 0x03ffff).rom(); + map(0xd00000, 0xd03fff).ram(); + map(0xd10000, 0xd13fff).ram(); + map(0xd20000, 0xd23fff).ram(); + map(0xe00000, 0xe03fff).ram(); +} + +void whtm68k_state::audio_program_map(address_map &map) +{ + map(0x0000, 0x1fff).rom(); + map(0x8000, 0xffff).rom().region("audiocpu", 0x8000); // TODO: banked somewhere here +} + +void whtm68k_state::audio_io_map(address_map &map) +{ + map(0x8000, 0x803f).ram(); // ?? + map(0xa000, 0xa000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); + // some kind of latch with the main CPU or inputs? Returning rand activates the sound chips. + //map(0xb000, 0xb000).lr8(NAME([this] () -> uint8_t { return machine().rand(); })); + map(0xc000, 0xc001).w("ym", FUNC(ym2413_device::write)); +} + + +static INPUT_PORTS_START( unkwht ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW1:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW1:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW1:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW1:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW1:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW1:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW1:8") + + PORT_START("DSW2") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW2:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW2:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW2:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW2:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW2:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW2:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW2:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW2:8") +INPUT_PORTS_END + + + // TODO: wrong, just enough to see something in the decoder +const gfx_layout gfx_8x8x4_packed_msb_r = +{ + 8,8, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { STEP8(28,-4) }, + { STEP8(0,4*8) }, + 8*8*4 +}; + +static GFXDECODE_START( gfx_wht ) + GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x4_packed_msb_r, 0, 16 ) +GFXDECODE_END + + +void whtm68k_state::unkwht(machine_config &config) +{ + // basic machine hardware + M68000(config, m_maincpu, 24_MHz_XTAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &whtm68k_state::main_program_map); + //m_maincpu->set_vblank_int("screen", FUNC(whtm68k_state::irq2_line_hold)); + + i80c32_device &audiocpu(I80C32(config, "audiocpu", 12_MHz_XTAL)); + audiocpu.set_addrmap(AS_PROGRAM, &whtm68k_state::audio_program_map); + audiocpu.set_addrmap(AS_IO, &whtm68k_state::audio_io_map); + audiocpu.port_in_cb<0>().set([this] () { LOGPORTS("%s: 80C32 port 0 read\n", machine().describe_context()); return 0; }); + audiocpu.port_in_cb<1>().set([this] () { LOGPORTS("%s: 80C32 port 1 read\n", machine().describe_context()); return 0; }); + audiocpu.port_in_cb<2>().set([this] () { LOGPORTS("%s: 80C32 port 2 read\n", machine().describe_context()); return 0; }); + audiocpu.port_in_cb<3>().set([this] () { LOGPORTS("%s: 80C32 port 3 read\n", machine().describe_context()); return 0; }); + audiocpu.port_out_cb<0>().set([this] (uint8_t data) { LOGPORTS("%s: 80C32 port 0 write %02x\n", machine().describe_context(), data); }); + audiocpu.port_out_cb<1>().set([this] (uint8_t data) { LOGPORTS("%s: 80C32 port 1 write %02x\n", machine().describe_context(), data); }); + audiocpu.port_out_cb<2>().set([this] (uint8_t data) { LOGPORTS("%s: 80C32 port 2 write %02x\n", machine().describe_context(), data); }); + audiocpu.port_out_cb<3>().set([this] (uint8_t data) { LOGPORTS("%s: 80C32 port 3 write %02x\n", machine().describe_context(), data); }); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // TODO: everything + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea_full(); + screen.set_screen_update(FUNC(whtm68k_state::screen_update)); + + hd6845s_device &crtc(HD6845S(config, "crtc", 12_MHz_XTAL / 12)); // divisor guessed + crtc.set_screen("screen"); + crtc.set_show_border_area(false); + crtc.set_char_width(8); + + RAMDAC(config, "ramdac", 0, "palette"); // MU9C4870-80PC + RAMDAC(config, "ramdac2", 0, "palette"); // MU9C4870-80PC + + GFXDECODE(config, "gfxdecode", "palette", gfx_wht); + PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x400); // TODO + + SPEAKER(config, "mono").front_center(); + + YM2413(config, "ym", 3.579545_MHz_XTAL).add_route(ALL_OUTPUTS, "mono", 1.0); // KB89C67? + + OKIM6295(config, "oki", 12_MHz_XTAL / 12, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // clock and pin 7 not verified +} + + +ROM_START( unkwht ) + ROM_REGION( 0x40000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "chs_p1.u13", 0x00000, 0x20000, CRC(6f180b89) SHA1(cfbdd93360f6f8a8c47624c2522e6c005658a436) ) + ROM_LOAD16_BYTE( "chs_p2.u14", 0x00001, 0x20000, CRC(c8f53b59) SHA1(c8c7e0131e7cbfda59cd658da0f3d4a28deef0b1) ) + + ROM_REGION( 0x20000, "audiocpu", 0 ) + ROM_LOAD( "chs_m.u74", 0x00000, 0x20000, CRC(b0c030df) SHA1(0cd388dc39004a41cc58ebedab32cc45e338f64b) ) + + ROM_REGION( 0x60000, "tiles", 0 ) + ROM_LOAD( "chs_v1.u50", 0x00000, 0x20000, CRC(dde0d62b) SHA1(bbf0d7dadbeec9036c20a4dfd64a8276c4ff1664) ) + ROM_LOAD( "chs_v2.u54", 0x20000, 0x20000, CRC(347db59c) SHA1(532d5621ea45fe569e37612f99fed46e6b6fe377) ) // the u53 socket is between u50 and u53 on PCB + ROM_LOAD( "chs_v3.u53", 0x40000, 0x20000, CRC(36353ce4) SHA1(427c9b946398a38afae850c199438808eee96d80) ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "chs_s.u34", 0x00000, 0x20000, CRC(e8492df9) SHA1(08be7cd33b751d56ec830240840adfd841b3af93) ) // 1xxxxxxxxxxxxxxxx = 0x00, very few samples +ROM_END + +} // anonymous namespace + + +GAME( 1996, unkwht, 0, unkwht, unkwht, whtm68k_state, empty_init, ROT0, "WHT", "unknown WHT gambling game", MACHINE_IS_SKELETON ) // 1996 WHT copyright in GFX -- cgit v1.2.3