mirror of
https://github.com/holub/mame
synced 2025-04-20 23:42:22 +03:00
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:
parent
ecadb2d952
commit
796f6c402f
@ -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",
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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 )
|
||||
|
164
src/mame/drivers/vsmileb.cpp
Normal file
164
src/mame/drivers/vsmileb.cpp
Normal 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
160
src/mame/includes/vsmile.h
Normal 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
|
Loading…
Reference in New Issue
Block a user