mirror of
https://github.com/holub/mame
synced 2025-04-24 01:11:11 +03:00
New systems marked not working
------------------------------ Poker & 21 [Ioannis Bampoulas] unknown WHT gambling game [Hammy]
This commit is contained in:
parent
02595ddf2e
commit
b8a506be33
@ -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<uint8_t> m_fgram;
|
||||
required_shared_ptr_array<uint8_t, 3> m_reel_ram;
|
||||
required_shared_ptr_array<uint8_t, 3> m_reel_scroll;
|
||||
required_shared_ptr<uint8_t> m_reel1_alt_scroll;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<ticket_dispenser_device> m_hopper;
|
||||
required_device<gfxdecode_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<uint8_t> m_fgram;
|
||||
required_device<ticket_dispenser_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<uint8_t, 3> m_reel_ram;
|
||||
required_shared_ptr_array<uint8_t, 3> m_reel_scroll;
|
||||
required_shared_ptr<uint8_t> m_reel1_alt_scroll;
|
||||
|
||||
tilemap_t *m_reel_tilemap[3]{};
|
||||
|
||||
void vreg_w(uint8_t data);
|
||||
|
||||
template<uint8_t Reel> void reel_ram_w(offs_t offset, uint8_t data);
|
||||
|
||||
template<uint8_t Reel> 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<uint8_t Reel>
|
||||
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<uint8_t Reel>
|
||||
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);
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
void reels_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(0x00, 0x00).w(FUNC(reels_state::lamps_w));
|
||||
map(0x01, 0x01).w(FUNC(reels_state::coins_w));
|
||||
|
||||
map(0x03, 0x03).w(FUNC(fun_tech_corp_state::vreg_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_device>("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_device>("screen")->set_screen_update(FUNC(fun_tech_corp_state::screen_update));
|
||||
|
||||
subdevice<ay8910_device>("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
|
||||
|
@ -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.
|
||||
|
||||
*/
|
||||
|
||||
|
@ -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 //
|
||||
|
||||
|
@ -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.
|
||||
|
254
src/mame/skeleton/whtm68k.cpp
Normal file
254
src/mame/skeleton/whtm68k.cpp
Normal file
@ -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<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_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
|
Loading…
Reference in New Issue
Block a user