-spg2xx: Added more machine().describe_context() logging, nw

-vsmile: Added intro region selection and logo enable DIPs. Started separating vsmileb into its own driver. [Ryan Holtz]
This commit is contained in:
mooglyguy 2019-01-16 05:11:07 +01:00 committed by MooglyGuy
parent c89439dd23
commit bede44aafd
2 changed files with 72 additions and 34 deletions

View File

@ -1007,14 +1007,14 @@ READ16_MEMBER(spg2xx_device::io_r)
{
case 0x01: case 0x06: case 0x0b: // GPIO Data Port A/B/C
do_gpio(offset, false);
LOGMASKED(LOG_GPIO, "io_r: %s %c = %04x\n", gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], m_io_regs[offset]);
LOGMASKED(LOG_GPIO, "%s: io_r: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], m_io_regs[offset]);
val = m_io_regs[offset];
break;
case 0x02: case 0x03: case 0x04: case 0x05:
case 0x07: case 0x08: case 0x09: case 0x0a:
case 0x0c: case 0x0d: case 0x0e: case 0x0f: // Other GPIO regs
LOGMASKED(LOG_GPIO, "io_r: %s %c = %04x\n", gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], m_io_regs[offset]);
LOGMASKED(LOG_GPIO, "%s: io_r: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], m_io_regs[offset]);
break;
case 0x10: // Timebase Control
@ -1035,15 +1035,15 @@ READ16_MEMBER(spg2xx_device::io_r)
break;
case 0x21: // IRQ Control
LOGMASKED(LOG_IRQS, "io_r: I/O IRQ Control = %04x\n", val);
LOGMASKED(LOG_IRQS, "%s: io_r: I/O IRQ Control = %04x\n", machine().describe_context(), val);
break;
case 0x22: // IRQ Status
LOGMASKED(LOG_IRQS, "io_r: I/O IRQ Status = %04x\n", val);
LOGMASKED(LOG_IRQS, "%s: io_r: I/O IRQ Status = %04x\n", machine().describe_context(), val);
break;
case 0x23: // External Memory Control
LOGMASKED(LOG_IO_READS, "io_r: Ext. Memory Control = %04x\n", val);
LOGMASKED(LOG_IO_READS, "%s: io_r: Ext. Memory Control = %04x\n", machine().describe_context(), val);
break;
case 0x25: // ADC Control
@ -1307,7 +1307,7 @@ WRITE16_MEMBER(spg2xx_device::io_w)
{
case 0x00: // GPIO special function select
{
LOGMASKED(LOG_GPIO, "io_w: GPIO Configuration = %04x (IOBWake:%d, IOAWake:%d, IOBSpecSel:%d, IOASpecSel:%d)\n", data
LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Configuration = %04x (IOBWake:%d, IOAWake:%d, IOBSpecSel:%d, IOASpecSel:%d)\n", machine().describe_context(), data
, BIT(data, 4), BIT(data, 3), BIT(data, 1), BIT(data, 0));
const uint16_t old = m_io_regs[offset];
m_io_regs[offset] = data;
@ -1326,33 +1326,33 @@ WRITE16_MEMBER(spg2xx_device::io_w)
case 0x02: case 0x04: // Port A
case 0x07: case 0x09: // Port B
case 0x0c: case 0x0d: case 0x0e: case 0x0f: // Port C
LOGMASKED(LOG_GPIO, "io_w: %s %c = %04x\n", gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], data);
LOGMASKED(LOG_GPIO, "%s: io_w: %s %c = %04x\n", machine().describe_context(), gpioregs[(offset - 1) % 5], gpioports[(offset - 1) / 5], data);
m_io_regs[offset] = data;
do_gpio(offset, true);
break;
case 0x03: // Port A Direction
LOGMASKED(LOG_GPIO, "io_w: GPIO Direction Port A = %04x\n", data);
LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Direction Port A = %04x\n", machine().describe_context(), data);
m_io_regs[offset] = data;
update_porta_special_modes();
do_gpio(offset, true);
break;
case 0x08: // Port B Direction
LOGMASKED(LOG_GPIO, "io_w: GPIO Direction Port B = %04x\n", data);
LOGMASKED(LOG_GPIO, "%s: io_w: GPIO Direction Port B = %04x\n", machine().describe_context(), data);
m_io_regs[offset] = data;
update_portb_special_modes();
do_gpio(offset, true);
break;
case 0x05: // Port A Special
LOGMASKED(LOG_GPIO, "io_w: Port A Special Function Select: %04x\n", data);
LOGMASKED(LOG_GPIO, "%s: io_w: Port A Special Function Select: %04x\n", machine().describe_context(), data);
m_io_regs[offset] = data;
update_porta_special_modes();
break;
case 0x0a: // Port B Special
LOGMASKED(LOG_GPIO, "io_w: Port B Special Function Select: %04x\n", data);
LOGMASKED(LOG_GPIO, "%s: io_w: Port B Special Function Select: %04x\n", machine().describe_context(), data);
m_io_regs[offset] = data;
update_portb_special_modes();
break;

View File

@ -2,26 +2,18 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
V-Tech V.Smile console emulat
V-Tech V.Smile console emulation
V-Tech V.Smile Baby console emulation
Status:
Similar Systems:
Most games boot but lack controls
To-Do:
Proper UART support (SPG2xx) for controller
Similar Systems: ( from http://en.wkikpedia.org/wiki/V.Smile )
V.Smile by VTech, a system designed for children under the age of 10
V.Smile Pocket (2 versions)
V.Smile Pocket
V.Smile Cyber Pocket
V.Smile PC Pal
V-Motion Active Learning System
Leapster
V.Smile Baby Infant Development System
V.Flash
V.Baby
Leapfrog Leapster
*******************************************************************************/
@ -44,15 +36,16 @@ class vsmile_state : public driver_device
public:
vsmile_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_spg(*this, "spg")
, m_cart(*this, "cartslot")
, m_bankdev(*this, "bank")
, m_system_region(*this, "maincpu")
, m_io_joy(*this, "JOY")
, m_io_colors(*this, "COLORS")
, m_io_buttons(*this, "BUTTONS")
, m_dsw_region(*this, "REGION")
, m_cart_region(nullptr)
, m_cart_addr_mask(0)
, m_uart_tx_timer(nullptr)
@ -68,6 +61,9 @@ public:
DECLARE_INPUT_CHANGED_MEMBER(pad_color_changed);
DECLARE_INPUT_CHANGED_MEMBER(pad_button_changed);
protected:
required_device<spg2xx_device> m_spg;
private:
virtual void machine_start() override;
virtual void machine_reset() override;
@ -121,13 +117,13 @@ private:
required_device<unsp_device> m_maincpu;
required_device<screen_device> m_screen;
required_device<spg2xx_device> m_spg;
required_device<generic_slot_device> m_cart;
required_device<address_map_bank_device> m_bankdev;
required_memory_region m_system_region;
required_ioport m_io_joy;
required_ioport m_io_colors;
required_ioport m_io_buttons;
required_ioport m_dsw_region;
memory_region *m_cart_region;
uint32_t m_cart_addr_mask;
@ -149,6 +145,27 @@ private:
uint16_t m_portc_data;
};
class vsmileb_state : public vsmile_state
{
public:
vsmileb_state(const machine_config &mconfig, device_type type, const char *tag)
: vsmile_state(mconfig, type, tag)
{ }
void vsmileb(machine_config &config);
private:
DECLARE_READ16_MEMBER(porta_r);
};
READ16_MEMBER(vsmileb_state::porta_r)
{
static uint16_t return_data = 0x0101;
uint16_t data = return_data;
return_data ^= 0x0201;
return data;
}
void vsmile_state::uart_tx_fifo_push(uint8_t data)
{
if (m_uart_tx_fifo_count == ARRAY_LENGTH(m_uart_tx_fifo))
@ -231,7 +248,7 @@ READ16_MEMBER(vsmile_state::portb_r)
READ16_MEMBER(vsmile_state::portc_r)
{
uint16_t data = 0x0014;
uint16_t data = m_dsw_region->read();
data |= m_ctrl_rts[0] ? 0 : 0x0400;
data |= m_ctrl_rts[1] ? 0 : 0x1000;
data |= 0x2000;
@ -406,7 +423,7 @@ void vsmile_state::banked_map(address_map &map)
map(0x1000000, 0x13fffff).r(FUNC(vsmile_state::bank0_r));
map(0x1400000, 0x15fffff).r(FUNC(vsmile_state::bank0_r));
map(0x1600000, 0x17fffff).r(FUNC(vsmile_state::bank1_r));
map(0x1600000, 0x17fffff).r(FUNC(vsmile_state::bank2_r));
map(0x1800000, 0x18fffff).r(FUNC(vsmile_state::bank0_r));
map(0x1900000, 0x19fffff).r(FUNC(vsmile_state::bank1_r));
@ -441,6 +458,20 @@ static INPUT_PORTS_START( vsmile )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_PLAYER(1) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_state, pad_button_changed, 2) PORT_NAME("Help")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_PLAYER(1) PORT_CHANGED_MEMBER(DEVICE_SELF, vsmile_state, pad_button_changed, 3) PORT_NAME("ABC")
PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("REGION")
PORT_DIPNAME( 0x0f, 0x04, "BIOS Region" )
PORT_DIPSETTING( 0x04, "UK/US" )
PORT_DIPSETTING( 0x07, "China" )
PORT_DIPSETTING( 0x08, "Mexico" )
PORT_DIPSETTING( 0x0a, "Italy" )
PORT_DIPSETTING( 0x0b, "Germany" )
PORT_DIPSETTING( 0x0c, "Spain" )
PORT_DIPSETTING( 0x0d, "France" )
PORT_DIPNAME( 0x10, 0x10, "VTech Intro" )
PORT_DIPSETTING( 0x00, "No" )
PORT_DIPSETTING( 0x10, "Yes" )
PORT_BIT( 0xe0, 0x00, IPT_UNUSED )
INPUT_PORTS_END
void vsmile_state::vsmile(machine_config &config)
@ -489,6 +520,13 @@ void vsmile_state::vsmilep(machine_config &config)
m_spg->set_pal(true);
}
void vsmileb_state::vsmileb(machine_config &config)
{
vsmile(config);
m_spg->porta_in().set(FUNC(vsmileb_state::porta_r));
SOFTWARE_LIST(config, "cart_list2").set_original("vsmileb_cart");
}
ROM_START( vsmile )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "vsmilebios.bin", 0x000000, 0x200000, CRC(11f1b416) SHA1(11f77c4973d29c962567390e41879c86a759c93b) )
@ -509,8 +547,8 @@ ROM_START( vsmileb )
ROM_LOAD( "vbabybios.bin", 0x000000, 0x800000, CRC(ddc7f845) SHA1(2c17d0f54200070176d03d44a40c7923636e596a) )
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, vsmile, vsmile, vsmile_state, empty_init, "VTech", "V.Smile Baby (US)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
// 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, vsmile, vsmileb_state, empty_init, "VTech", "V.Smile Baby (US)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )