Machines promoted to working

----------------------------
V.Smile Baby (US) [Ryan Holtz]

New working clones
--------------------
V.Smile Baby (Sweden) [Ryan Holtz, Sean Ridde, Clawgrip]

-vsmileb: Split into a separate CPP file. Identified input codes and hooked up inputs. [Ryan Holtz, bmx]
This commit is contained in:
Ryan Holtz 2019-01-23 01:31:24 +01:00
parent ecadb2d952
commit 796f6c402f
5 changed files with 339 additions and 238 deletions

View File

@ -3622,7 +3622,9 @@ files {
MAME_DIR .. "src/mame/audio/socrates.cpp",
MAME_DIR .. "src/mame/audio/socrates.h",
MAME_DIR .. "src/mame/drivers/inteladv.cpp",
MAME_DIR .. "src/mame/includes/vsmile.h",
MAME_DIR .. "src/mame/drivers/vsmile.cpp",
MAME_DIR .. "src/mame/drivers/vsmileb.cpp",
MAME_DIR .. "src/mame/drivers/clickstart.cpp",
MAME_DIR .. "src/mame/drivers/storio.cpp",
}

View File

@ -52,8 +52,8 @@ DEFINE_DEVICE_TYPE(SPG28X, spg28x_device, "spg28x", "SPG280-series System-on-a-C
#define LOG_PPU (LOG_PPU_READS | LOG_PPU_WRITES | LOG_UNKNOWN_PPU)
#define LOG_ALL (LOG_IO | LOG_SPU | LOG_PPU | LOG_VLINES | LOG_SEGMENT | LOG_FIQ)
//#define VERBOSE (LOG_ALL & ~LOG_SPU)
#define VERBOSE (0)
#define VERBOSE (LOG_ALL & ~LOG_SPU)
//#define VERBOSE (0)
#include "logmacro.h"
#define SPG_DEBUG_VIDEO (0)

View File

@ -3,146 +3,16 @@
/******************************************************************************
V-Tech V.Smile console emulation
V-Tech V.Smile Baby console emulation
Similar Systems:
V.Smile Pocket
V.Smile Cyber Pocket
V.Smile PC Pal
V-Motion Active Learning System
V.Flash
V.Baby
Leapfrog Leapster
*******************************************************************************/
#include "emu.h"
#include "bus/vsmile/vsmile_ctrl.h"
#include "bus/vsmile/vsmile_slot.h"
#include "bus/vsmile/rom.h"
#include "includes/vsmile.h"
#include "cpu/unsp/unsp.h"
#include "machine/bankdev.h"
#include "machine/spg2xx.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
class vsmile_base_state : public driver_device
{
public:
vsmile_base_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_spg(*this, "spg")
, m_maincpu(*this, "maincpu")
, m_screen(*this, "screen")
, m_bankdev(*this, "bank")
, m_cart(*this, "cartslot")
, m_system_region(*this, "maincpu")
{ }
void vsmile_base(machine_config &config);
protected:
virtual void machine_start() override;
void mem_map(address_map &map);
DECLARE_WRITE8_MEMBER(chip_sel_w);
DECLARE_READ16_MEMBER(bank3_r);
required_device<spg2xx_device> m_spg;
required_device<unsp_device> m_maincpu;
required_device<screen_device> m_screen;
required_device<address_map_bank_device> m_bankdev;
required_device<vsmile_cart_slot_device> m_cart;
required_memory_region m_system_region;
};
class vsmile_state : public vsmile_base_state
{
public:
vsmile_state(const machine_config &mconfig, device_type type, const char *tag)
: vsmile_base_state(mconfig, type, tag)
, m_ctrl(*this, "ctrl%u", 1U)
, m_dsw_region(*this, "REGION")
{ }
void vsmile(machine_config &config);
void vsmilep(machine_config &config);
private:
virtual void machine_start() override;
virtual void machine_reset() override;
void banked_map(address_map &map);
DECLARE_WRITE8_MEMBER(ctrl_tx_w);
template <int Which> DECLARE_WRITE_LINE_MEMBER(ctrl_rts_w);
DECLARE_READ16_MEMBER(portb_r);
DECLARE_READ16_MEMBER(portc_r);
DECLARE_WRITE16_MEMBER(portc_w);
DECLARE_WRITE8_MEMBER(uart_rx);
enum
{
VSMILE_PORTB_CS1 = 0x01,
VSMILE_PORTB_CS2 = 0x02,
VSMILE_PORTB_CART = 0x04,
VSMILE_PORTB_RESET = 0x08,
VSMILE_PORTB_FRONT24 = 0x10,
VSMILE_PORTB_OFF = 0x20,
VSMILE_PORTB_OFF_SW = 0x40,
VSMILE_PORTB_ON_SW = 0x80,
VSMILE_PORTC_VER = 0x0f,
VSMILE_PORTC_LOGO = 0x10,
VSMILE_PORTC_TEST = 0x20,
VSMILE_PORTC_AMP = 0x40,
VSMILE_PORTC_SYSRESET = 0x80,
};
required_device_array<vsmile_ctrl_port_device, 2> m_ctrl;
required_ioport m_dsw_region;
bool m_ctrl_rts[2];
bool m_ctrl_select[2];
};
class vsmileb_state : public vsmile_base_state
{
public:
vsmileb_state(const machine_config &mconfig, device_type type, const char *tag)
: vsmile_base_state(mconfig, type, tag)
, m_io_logo(*this, "LOGO")
{ }
void vsmileb(machine_config &config);
void vsmilebp(machine_config &config);
private:
virtual void machine_start() override;
void banked_map(address_map &map);
DECLARE_READ16_MEMBER(porta_r);
DECLARE_READ16_MEMBER(portb_r);
DECLARE_READ16_MEMBER(portc_r);
DECLARE_WRITE16_MEMBER(porta_w);
DECLARE_WRITE16_MEMBER(portb_w);
DECLARE_WRITE16_MEMBER(portc_w);
required_ioport m_io_logo;
};
/************************************
*
* Common
@ -286,70 +156,6 @@ void vsmile_state::banked_map(address_map &map)
map(0x1b00000, 0x1bfffff).r(FUNC(vsmile_state::bank3_r));
}
/************************************
*
* V.Smile Baby
*
************************************/
void vsmileb_state::machine_start()
{
vsmile_base_state::machine_start();
}
READ16_MEMBER(vsmileb_state::porta_r)
{
uint16_t data = 0x0302 | (m_io_logo->read() ? 0x0080 : 0x0000);
logerror("%s: GPIO Port A Read: %04x\n", machine().describe_context(), data);
return data;
}
READ16_MEMBER(vsmileb_state::portb_r)
{
uint16_t data = 0x0080;
logerror("%s: GPIO Port B Read: %04x\n", machine().describe_context(), data);
return data;
}
READ16_MEMBER(vsmileb_state::portc_r)
{
uint16_t data = 0;
logerror("%s: GPIO Port C Read: %04x\n", machine().describe_context(), data);
return data;
}
WRITE16_MEMBER(vsmileb_state::porta_w)
{
logerror("%s: GPIO Port A Write: %04x & %04x = %04x\n", machine().describe_context(), data, mem_mask, data & mem_mask);
}
WRITE16_MEMBER(vsmileb_state::portb_w)
{
logerror("%s: GPIO Port B Write: %04x & %04x = %04x\n", machine().describe_context(), data, mem_mask, data & mem_mask);
}
WRITE16_MEMBER(vsmileb_state::portc_w)
{
logerror("%s: GPIO Port C Write: %04x & %04x = %04x\n", machine().describe_context(), data, mem_mask, data & mem_mask);
}
void vsmileb_state::banked_map(address_map &map)
{
map(0x0000000, 0x03fffff).rom().region("maincpu", 0);
map(0x0400000, 0x07fffff).rom().region("maincpu", 0);
map(0x0800000, 0x0bfffff).rom().region("maincpu", 0);
map(0x1000000, 0x13fffff).rw(m_cart, FUNC(vsmile_cart_slot_device::bank0_r), FUNC(vsmile_cart_slot_device::bank0_w));
map(0x1400000, 0x15fffff).rw(m_cart, FUNC(vsmile_cart_slot_device::bank0_r), FUNC(vsmile_cart_slot_device::bank0_w));
map(0x1600000, 0x17fffff).rw(m_cart, FUNC(vsmile_cart_slot_device::bank2_r), FUNC(vsmile_cart_slot_device::bank2_w));
map(0x1800000, 0x18fffff).rw(m_cart, FUNC(vsmile_cart_slot_device::bank0_r), FUNC(vsmile_cart_slot_device::bank0_w));
map(0x1900000, 0x19fffff).rw(m_cart, FUNC(vsmile_cart_slot_device::bank1_r), FUNC(vsmile_cart_slot_device::bank1_w));
map(0x1a00000, 0x1afffff).rw(m_cart, FUNC(vsmile_cart_slot_device::bank2_r), FUNC(vsmile_cart_slot_device::bank2_w));
map(0x1b00000, 0x1bfffff).r(FUNC(vsmileb_state::bank3_r));
}
/************************************
*
* Inputs
@ -372,13 +178,11 @@ static INPUT_PORTS_START( vsmile )
PORT_BIT( 0xe0, 0x00, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( vsmileb )
PORT_START("LOGO")
PORT_DIPNAME( 0x10, 0x10, "VTech Intro" )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x10, "On" )
PORT_BIT( 0xe0, 0x00, IPT_UNUSED )
INPUT_PORTS_END
/************************************
*
* Machine Configs
*
************************************/
static void vsmile_cart(device_slot_interface &device)
{
@ -445,27 +249,11 @@ void vsmile_state::vsmilep(machine_config &config)
m_spg->set_pal(true);
}
void vsmileb_state::vsmileb(machine_config &config)
{
vsmile_base(config);
m_bankdev->set_addrmap(AS_PROGRAM, &vsmileb_state::banked_map);
m_spg->porta_in().set(FUNC(vsmileb_state::porta_r));
m_spg->portb_in().set(FUNC(vsmileb_state::portb_r));
m_spg->portc_in().set(FUNC(vsmileb_state::portc_r));
m_spg->porta_out().set(FUNC(vsmileb_state::porta_w));
m_spg->portb_out().set(FUNC(vsmileb_state::portb_w));
m_spg->portc_out().set(FUNC(vsmileb_state::portc_w));
SOFTWARE_LIST(config, "cart_list").set_original("vsmileb_cart");
}
void vsmileb_state::vsmilebp(machine_config &config)
{
vsmileb(config);
m_spg->set_pal(true);
}
/************************************
*
* ROM Loading
*
************************************/
// TODO: decide on a dump endian, these likely differ in endianess due to different dumping technqiues
ROM_START( vsmile )
@ -483,20 +271,7 @@ ROM_START( vsmilef )
ROM_LOAD16_WORD_SWAP( "sysrom_france", 0x000000, 0x200000, CRC(0cd0bdf5) SHA1(5c8d1eada1b6b545555b8d2b09325d7127681af8) )
ROM_END
ROM_START( vsmileb )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "vbabybios.bin", 0x000000, 0x800000, CRC(ddc7f845) SHA1(2c17d0f54200070176d03d44a40c7923636e596a) )
ROM_END
ROM_START( vsmilebsw )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD16_WORD_SWAP( "vsmileswedenbios.bin", 0x000000, 0x800000, CRC(8b464b19) SHA1(cea304ba886c39e86906aad3dce17d5fff7cfcbe) )
ROM_END
// year, name, parent, compat, machine, input, class, init, company, fullname, flags
CONS( 2005, vsmile, 0, 0, vsmile, vsmile, vsmile_state, empty_init, "VTech", "V.Smile (US)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2005, vsmileg, vsmile, 0, vsmilep, vsmile, vsmile_state, empty_init, "VTech", "V.Smile (Germany)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2005, vsmilef, vsmile, 0, vsmilep, vsmile, vsmile_state, empty_init, "VTech", "V.Smile (France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2005, vsmileb, 0, 0, vsmileb, vsmileb, vsmileb_state, empty_init, "VTech", "V.Smile Baby (US)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2005, vsmilebsw ,vsmileb, 0, vsmilebp,vsmileb, vsmileb_state, empty_init, "VTech", "V.Smile Baby (Sweden)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )

View File

@ -0,0 +1,164 @@
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
/******************************************************************************
V-Tech V.Smile Baby console emulation
*******************************************************************************/
#include "emu.h"
#include "includes/vsmile.h"
#include "softlist.h"
#include "speaker.h"
/************************************
*
* V.Smile Baby
*
************************************/
void vsmileb_state::machine_start()
{
vsmile_base_state::machine_start();
save_item(NAME(m_mode));
}
void vsmileb_state::machine_reset()
{
m_mode = 0x0400;
}
READ16_MEMBER(vsmileb_state::porta_r)
{
return 0x0302 | (m_io_logo->read() ? 0x0080 : 0x0000);
}
READ16_MEMBER(vsmileb_state::portb_r)
{
return 0x0080;
}
INPUT_CHANGED_MEMBER(vsmileb_state::pad_button_changed)
{
uint16_t value = m_mode;
if (newval == 0)
{
value |= 0x0080;
}
else
{
value |= (uint16_t)(uintptr_t)param;
}
m_spg->uart_rx((uint8_t)(value >> 8));
m_spg->uart_rx((uint8_t)value);
}
template <uint16_t V> INPUT_CHANGED_MEMBER(vsmileb_state::sw_mode)
{
if (!newval && oldval)
{
m_mode = V;
const uint16_t value = m_mode | 0x0080;
m_spg->uart_rx((uint8_t)(value >> 8));
m_spg->uart_rx((uint8_t)value);
}
}
void vsmileb_state::banked_map(address_map &map)
{
map(0x0000000, 0x03fffff).rom().region("maincpu", 0);
map(0x0400000, 0x07fffff).rom().region("maincpu", 0);
map(0x0800000, 0x0bfffff).rom().region("maincpu", 0);
map(0x1000000, 0x13fffff).rw(m_cart, FUNC(vsmile_cart_slot_device::bank0_r), FUNC(vsmile_cart_slot_device::bank0_w));
map(0x1400000, 0x15fffff).rw(m_cart, FUNC(vsmile_cart_slot_device::bank0_r), FUNC(vsmile_cart_slot_device::bank0_w));
map(0x1600000, 0x17fffff).rw(m_cart, FUNC(vsmile_cart_slot_device::bank2_r), FUNC(vsmile_cart_slot_device::bank2_w));
map(0x1800000, 0x18fffff).rw(m_cart, FUNC(vsmile_cart_slot_device::bank0_r), FUNC(vsmile_cart_slot_device::bank0_w));
map(0x1900000, 0x19fffff).rw(m_cart, FUNC(vsmile_cart_slot_device::bank1_r), FUNC(vsmile_cart_slot_device::bank1_w));
map(0x1a00000, 0x1afffff).rw(m_cart, FUNC(vsmile_cart_slot_device::bank2_r), FUNC(vsmile_cart_slot_device::bank2_w));
map(0x1b00000, 0x1bfffff).r(FUNC(vsmileb_state::bank3_r));
}
/************************************
*
* Inputs
*
************************************/
static INPUT_PORTS_START( vsmileb )
PORT_START("BUTTONS")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmileb_state, pad_button_changed, vsmileb_state::BUTTON_YELLOW) PORT_NAME("Yellow")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmileb_state, pad_button_changed, vsmileb_state::BUTTON_BLUE) PORT_NAME("Blue")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmileb_state, pad_button_changed, vsmileb_state::BUTTON_ORANGE) PORT_NAME("Orange")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmileb_state, pad_button_changed, vsmileb_state::BUTTON_GREEN) PORT_NAME("Green")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmileb_state, pad_button_changed, vsmileb_state::BUTTON_RED) PORT_NAME("Red")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmileb_state, pad_button_changed, vsmileb_state::BUTTON_CLOUD) PORT_NAME("Cloud")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmileb_state, pad_button_changed, vsmileb_state::BUTTON_BALL) PORT_NAME("Ball")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmileb_state, pad_button_changed, vsmileb_state::BUTTON_EXIT) PORT_NAME("Exit")
PORT_START("MODE")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Play Time") PORT_CHANGED_MEMBER(DEVICE_SELF, vsmileb_state, sw_mode<0x0400>, nullptr) // three-position function switch
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Watch & Learn") PORT_CHANGED_MEMBER(DEVICE_SELF, vsmileb_state, sw_mode<0x0800>, nullptr)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Learn & Explore") PORT_CHANGED_MEMBER(DEVICE_SELF, vsmileb_state, sw_mode<0x0c00>, nullptr)
PORT_START("LOGO")
PORT_DIPNAME( 0x10, 0x10, "VTech Intro" )
PORT_DIPSETTING( 0x00, DEF_STR(Off) )
PORT_DIPSETTING( 0x10, DEF_STR(On) )
PORT_BIT( 0xef, 0x00, IPT_UNUSED )
INPUT_PORTS_END
/************************************
*
* Machine Configs
*
************************************/
void vsmileb_state::vsmileb(machine_config &config)
{
vsmile_base(config);
m_bankdev->set_addrmap(AS_PROGRAM, &vsmileb_state::banked_map);
SPG28X(config.replace(), m_spg, XTAL(27'000'000), m_maincpu, m_screen);
m_spg->chip_select().set(FUNC(vsmileb_state::chip_sel_w));
m_spg->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
m_spg->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
m_spg->porta_in().set(FUNC(vsmileb_state::porta_r));
m_spg->portb_in().set(FUNC(vsmileb_state::portb_r));
SOFTWARE_LIST(config, "cart_list").set_original("vsmileb_cart");
}
void vsmileb_state::vsmilebp(machine_config &config)
{
vsmileb(config);
m_spg->set_pal(true);
}
/************************************
*
* ROM Loading
*
************************************/
// TODO: decide on a dump endian, these likely differ in endianess due to different dumping technqiues
ROM_START( vsmileb )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "vbabybios.bin", 0x000000, 0x800000, CRC(ddc7f845) SHA1(2c17d0f54200070176d03d44a40c7923636e596a) )
ROM_END
ROM_START( vsmilebsw )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD16_WORD_SWAP( "vsmileswedenbios.bin", 0x000000, 0x800000, CRC(8b464b19) SHA1(cea304ba886c39e86906aad3dce17d5fff7cfcbe) )
ROM_END
// year, name, parent, compat, machine, input, class, init, company, fullname, flags
CONS( 2005, vsmileb, 0, 0, vsmileb, vsmileb, vsmileb_state, empty_init, "VTech", "V.Smile Baby (US)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2005, vsmilebsw ,vsmileb, 0, vsmilebp,vsmileb, vsmileb_state, empty_init, "VTech", "V.Smile Baby (Sweden)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )

160
src/mame/includes/vsmile.h Normal file
View File

@ -0,0 +1,160 @@
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
/******************************************************************************
V-Tech V.Smile console emulation
V-Tech V.Smile Baby console emulation
Similar Systems:
V.Smile Pocket
V.Smile Cyber Pocket
V.Smile PC Pal
V-Motion Active Learning System
V.Flash
V.Baby
Leapfrog Leapster
*******************************************************************************/
#ifndef MAME_INCLUDES_VSMILE_H
#define MAME_INCLUDES_VSMILE_H
#include "bus/vsmile/vsmile_ctrl.h"
#include "bus/vsmile/vsmile_slot.h"
#include "bus/vsmile/rom.h"
#include "cpu/unsp/unsp.h"
#include "machine/bankdev.h"
#include "machine/spg2xx.h"
#include "screen.h"
class vsmile_base_state : public driver_device
{
public:
vsmile_base_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_spg(*this, "spg")
, m_maincpu(*this, "maincpu")
, m_screen(*this, "screen")
, m_bankdev(*this, "bank")
, m_cart(*this, "cartslot")
, m_system_region(*this, "maincpu")
{ }
void vsmile_base(machine_config &config);
protected:
virtual void machine_start() override;
void mem_map(address_map &map);
DECLARE_WRITE8_MEMBER(chip_sel_w);
DECLARE_READ16_MEMBER(bank3_r);
required_device<spg2xx_device> m_spg;
required_device<unsp_device> m_maincpu;
required_device<screen_device> m_screen;
required_device<address_map_bank_device> m_bankdev;
required_device<vsmile_cart_slot_device> m_cart;
required_memory_region m_system_region;
};
class vsmile_state : public vsmile_base_state
{
public:
vsmile_state(const machine_config &mconfig, device_type type, const char *tag)
: vsmile_base_state(mconfig, type, tag)
, m_ctrl(*this, "ctrl%u", 1U)
, m_dsw_region(*this, "REGION")
{ }
void vsmile(machine_config &config);
void vsmilep(machine_config &config);
private:
virtual void machine_start() override;
virtual void machine_reset() override;
void banked_map(address_map &map);
DECLARE_WRITE8_MEMBER(ctrl_tx_w);
template <int Which> DECLARE_WRITE_LINE_MEMBER(ctrl_rts_w);
DECLARE_READ16_MEMBER(portb_r);
DECLARE_READ16_MEMBER(portc_r);
DECLARE_WRITE16_MEMBER(portc_w);
DECLARE_WRITE8_MEMBER(uart_rx);
enum
{
VSMILE_PORTB_CS1 = 0x01,
VSMILE_PORTB_CS2 = 0x02,
VSMILE_PORTB_CART = 0x04,
VSMILE_PORTB_RESET = 0x08,
VSMILE_PORTB_FRONT24 = 0x10,
VSMILE_PORTB_OFF = 0x20,
VSMILE_PORTB_OFF_SW = 0x40,
VSMILE_PORTB_ON_SW = 0x80,
VSMILE_PORTC_VER = 0x0f,
VSMILE_PORTC_LOGO = 0x10,
VSMILE_PORTC_TEST = 0x20,
VSMILE_PORTC_AMP = 0x40,
VSMILE_PORTC_SYSRESET = 0x80,
};
required_device_array<vsmile_ctrl_port_device, 2> m_ctrl;
required_ioport m_dsw_region;
bool m_ctrl_rts[2];
bool m_ctrl_select[2];
};
class vsmileb_state : public vsmile_base_state
{
public:
vsmileb_state(const machine_config &mconfig, device_type type, const char *tag)
: vsmile_base_state(mconfig, type, tag)
, m_io_logo(*this, "LOGO")
{ }
void vsmileb(machine_config &config);
void vsmilebp(machine_config &config);
enum : uint16_t
{
BUTTON_YELLOW = 0x01fe,
BUTTON_BLUE = 0x03ee,
BUTTON_ORANGE = 0x03de,
BUTTON_GREEN = 0x03be,
BUTTON_RED = 0x02fe,
BUTTON_CLOUD = 0x03f6,
BUTTON_BALL = 0x03fa,
BUTTON_EXIT = 0x03fc
};
DECLARE_INPUT_CHANGED_MEMBER(pad_button_changed);
// make slide switches usable on a keyboard
template <uint16_t V> DECLARE_INPUT_CHANGED_MEMBER(sw_mode);
private:
virtual void machine_start() override;
virtual void machine_reset() override;
void banked_map(address_map &map);
DECLARE_READ16_MEMBER(porta_r);
DECLARE_READ16_MEMBER(portb_r);
required_ioport m_io_logo;
uint16_t m_mode;
};
#endif // MAME_INCLUDES_VSMILE_H