New machines marked as NOT_WORKING

----------------------------------
V.Smile Motion (US)

New NOT_WORKING software list additions
---------------------------------------
vsmilem_cart:
  Für immer Shrek (Ger), Toy Story 3 (Ger)

-devices/bus/vsmile/vsmile_cart: Added support for later 8MWord cartridges. [Ryan Holtz]

-vsmile: Added separate machine driver for V.Smile Motion. Needs proper BIOS dump, currently using the V.Smile US BIOS. [Ryan Holtz]
This commit is contained in:
mooglyguy 2019-02-03 18:07:39 +01:00 committed by MooglyGuy
parent b6fb151b5e
commit 3cc0f27d89
10 changed files with 167 additions and 49 deletions

View File

@ -160,7 +160,7 @@ Language:
| | (IT) | Toy Story 3 (EAN 8033836704196) GP470419? |
| | 80-084422(NL) | Toy Story 3 |
| | 80-084423(UK) | Toy Story 3 |
| | 80-084424(GE) | Toy Story 3 |
| XX | 80-084424(GE) | Toy Story 3 |
| | 80-084425(FR) | Toy Story 3 |
| | 80-084427(SP) | Toy Story 3 |
+========+===================+============================================================================+
@ -184,10 +184,10 @@ Language:
| | 80-084485(FR) | La Princesse Et La Grenouille |
| | 80-084487(SP) | Tiana y el Sapo - El gran sueño de Tiana |
+========+===================+============================================================================+
| | 80-084500(US) | Shrek Forever After |
| XX | 80-084500(US) | Shrek Forever After |
| | 80-084502(NL) | Sjrek voor eeuwig en altijd |
| | 80-084503(UK) | Shrek Forever After |
| | 80-084504(GE) | Fuer immer Shrek |
| XX | 80-084504(GE) | Fuer immer Shrek |
| | 80-084505(FR) | Shrek 4 - Il Etait une Fin |
| | 80-084507(SP) | Shrek Felices para siempre |
+========+===================+============================================================================+
@ -421,6 +421,22 @@ Smartbooks currently have no dumps available, hence they are temporarily listed
</part>
</software>
<software name="fimshrek" supported="no">
<description>Für immer Shrek (Ger)</description>
<year>2010</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084504(GE)" />
<part name="cart" interface="vsmile_cart">
<feature name="pcb" value="710654-1" />
<feature name="u1" value="" /> <!-- EPOXY BLOB ROM --> <!-- 2 globs, uses /CS2 for 2nd glob -->
<feature name="u2" value="" /> <!-- EPOXY BLOB ROM -->
<dataarea name="rom" size="0x1000000">
<rom name="vsmile84504.blob1.bin" size="0x0800000" crc="3f1c79e2" sha1="1b12b9b379dd942356e6ee6594c8b80dbb9db781" offset="0x0000000" />
<rom name="vsmile84504.blob2.bin" size="0x0800000" crc="78cf731b" sha1="9b1d1eed7bd216f4feca3160c31912b7c81e4efd" offset="0x0800000" />
</dataarea>
</part>
</software>
<software name="spidermn" supported="no">
<description>Spider-Man &amp; Freunde - Geheime Missionen (Ger)</description>
<year>2010</year>
@ -478,6 +494,22 @@ Smartbooks currently have no dumps available, hence they are temporarily listed
</part>
</software>
<software name="toystor3g" supported="no">
<description>Toy Story 3 (Ger)</description>
<year>2010</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084424(GE)" />
<part name="cart" interface="vsmile_cart">
<feature name="pcb" value="710654-2" />
<feature name="u1" value="" /> <!-- EPOXY BLOB ROM --> <!-- 2 globs, uses /CS2 for 2nd glob -->
<feature name="u2" value="" /> <!-- EPOXY BLOB ROM -->
<dataarea name="rom" size="0x1000000">
<rom name="vsmile84424.blob1.bin" size="0x0800000" crc="845bbb46" sha1="1b11bb1a119715073560b40d65b77894043dd67a" offset="0x0000000" />
<rom name="vsmile84424.blob2.bin" size="0x0800000" crc="c006e9b6" sha1="2f4b32ba578117caa53bb0bf9db717d8d9dd8a13" offset="0x0800000" />
</dataarea>
</part>
</software>
<software name="wintrspt" supported="no">
<description>Wintersport (Ger)</description>
<year>2009?</year>

View File

@ -49,10 +49,12 @@ vsmile_rom_nvram_device::vsmile_rom_nvram_device(const machine_config &mconfig,
void vsmile_rom_device::device_start()
{
save_item(NAME(m_bank_offset));
}
void vsmile_rom_device::device_reset()
{
m_bank_offset = 0;
}
@ -73,3 +75,12 @@ WRITE16_MEMBER(vsmile_rom_nvram_device::bank2_w)
if (!m_nvram.empty() && offset < m_nvram.size())
COMBINE_DATA(&m_nvram[offset]);
}
/*-------------------------------------------------
CS2 bankswitching
-------------------------------------------------*/
void vsmile_rom_device::set_cs2(bool cs2)
{
m_bank_offset = cs2 ? 0x400000 : 0x000000;
}

View File

@ -16,10 +16,13 @@ public:
vsmile_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// reading and writing
virtual DECLARE_READ16_MEMBER(bank0_r) override { return m_rom[0x000000 + offset]; }
virtual DECLARE_READ16_MEMBER(bank1_r) override { return m_rom[0x100000 + offset]; }
virtual DECLARE_READ16_MEMBER(bank2_r) override { return m_rom[0x200000 + offset]; }
virtual DECLARE_READ16_MEMBER(bank3_r) override { return m_rom[0x300000 + offset]; }
virtual DECLARE_READ16_MEMBER(bank0_r) override { return m_rom[m_bank_offset + 0x000000 + offset]; }
virtual DECLARE_READ16_MEMBER(bank1_r) override { return m_rom[m_bank_offset + 0x100000 + offset]; }
virtual DECLARE_READ16_MEMBER(bank2_r) override { return m_rom[m_bank_offset + 0x200000 + offset]; }
virtual DECLARE_READ16_MEMBER(bank3_r) override { return m_rom[m_bank_offset + 0x300000 + offset]; }
// banking
virtual void set_cs2(bool cs2) override;
protected:
vsmile_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@ -27,6 +30,8 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
uint32_t m_bank_offset;
};

View File

@ -50,7 +50,7 @@ void device_vsmile_cart_interface::rom_alloc(uint32_t size, const char *tag)
if (m_rom == nullptr)
{
// We always alloc 8MB of ROM region
m_rom = (uint16_t *)device().machine().memory().region_alloc(std::string(tag).append(VSMILE_SLOT_ROM_REGION_TAG).c_str(), 0x800000, 2, ENDIANNESS_BIG)->base();
m_rom = (uint16_t *)device().machine().memory().region_alloc(std::string(tag).append(VSMILE_SLOT_ROM_REGION_TAG).c_str(), size, 2, ENDIANNESS_BIG)->base();
m_rom_size = size;
}
}
@ -138,9 +138,9 @@ image_init_result vsmile_cart_slot_device::call_load()
if (m_cart)
{
uint32_t size = loaded_through_softlist() ? get_software_region_length("rom") : length();
if (size > 0x800000)
if (size > 0x1000000)
{
seterror(IMAGE_ERROR_UNSPECIFIED, "Attempted loading a cart larger than 8MB");
seterror(IMAGE_ERROR_UNSPECIFIED, "Attempted loading a cart larger than 16MB");
return image_init_result::FAIL;
}
@ -205,7 +205,7 @@ std::string vsmile_cart_slot_device::get_default_card_software(get_default_card_
/*-------------------------------------------------
read
cart accessors
-------------------------------------------------*/
READ16_MEMBER(vsmile_cart_slot_device::bank0_r)
@ -228,11 +228,6 @@ READ16_MEMBER(vsmile_cart_slot_device::bank3_r)
return m_cart->bank3_r(space, offset, mem_mask);
}
/*-------------------------------------------------
write
-------------------------------------------------*/
WRITE16_MEMBER(vsmile_cart_slot_device::bank0_w)
{
m_cart->bank0_w(space, offset, data, mem_mask);
@ -252,3 +247,8 @@ WRITE16_MEMBER(vsmile_cart_slot_device::bank3_w)
{
m_cart->bank3_w(space, offset, data, mem_mask);
}
void vsmile_cart_slot_device::set_cs2(bool cs2)
{
m_cart->set_cs2(cs2);
}

View File

@ -33,10 +33,13 @@ public:
virtual DECLARE_READ16_MEMBER(bank1_r) { return 0; }
virtual DECLARE_READ16_MEMBER(bank2_r) { return 0; }
virtual DECLARE_READ16_MEMBER(bank3_r) { return 0; }
virtual DECLARE_WRITE16_MEMBER(bank0_w) { printf("0 %08x = %04x\n", offset, data); }
virtual DECLARE_WRITE16_MEMBER(bank1_w) { printf("1 %08x = %04x\n", offset, data); }
virtual DECLARE_WRITE16_MEMBER(bank2_w) { printf("2 %08x = %04x\n", offset, data); }
virtual DECLARE_WRITE16_MEMBER(bank3_w) { printf("3 %08x = %04x\n", offset, data); }
virtual DECLARE_WRITE16_MEMBER(bank0_w) { }
virtual DECLARE_WRITE16_MEMBER(bank1_w) { }
virtual DECLARE_WRITE16_MEMBER(bank2_w) { }
virtual DECLARE_WRITE16_MEMBER(bank3_w) { }
// banking
virtual void set_cs2(bool cs2) = 0;
void rom_alloc(uint32_t size, const char *tag);
void nvram_alloc(uint32_t size);
@ -111,6 +114,9 @@ public:
virtual DECLARE_WRITE16_MEMBER(bank2_w);
virtual DECLARE_WRITE16_MEMBER(bank3_w);
// banking
void set_cs2(bool cs2);
protected:
int m_type;
device_vsmile_cart_interface* m_cart;

View File

@ -45,7 +45,7 @@ DEFINE_DEVICE_TYPE(SPG28X, spg28x_device, "spg28x", "SPG280-series System-on-a-C
#define LOG_SIO (1U << 26)
#define LOG_EXT_MEM (1U << 27)
#define LOG_EXTINT (1U << 28)
#define LOG_IO (LOG_IO_READS | LOG_IO_WRITES | LOG_IRQS | LOG_GPIO | LOG_UART | LOG_I2C | LOG_DMA | LOG_TIMERS | LOG_UNKNOWN_IO)
#define LOG_IO (LOG_IO_READS | LOG_IO_WRITES | LOG_IRQS | LOG_GPIO | LOG_UART | LOG_I2C | LOG_DMA | LOG_TIMERS | LOG_EXTINT | LOG_UNKNOWN_IO)
#define LOG_CHANNELS (LOG_CHANNEL_READS | LOG_CHANNEL_WRITES)
#define LOG_SPU (LOG_SPU_READS | LOG_SPU_WRITES | LOG_UNKNOWN_SPU | LOG_CHANNEL_READS | LOG_CHANNEL_WRITES \
| LOG_ENVELOPES | LOG_SAMPLES | LOG_RAMPDOWN | LOG_BEAT)
@ -1587,6 +1587,11 @@ WRITE16_MEMBER(spg2xx_device::io_w)
const uint16_t old = IO_IRQ_STATUS;
IO_IRQ_STATUS &= ~data;
const uint16_t changed = (old & IO_IRQ_ENABLE) ^ (IO_IRQ_STATUS & IO_IRQ_ENABLE);
if (m_uart_rx_irq || m_uart_tx_irq)
{
LOGMASKED(LOG_IRQS | LOG_UART, "Re-setting UART IRQ due to still-unacknowledged Rx or Tx.\n");
IO_IRQ_STATUS |= 0x0100;
}
if (changed)
check_irqs(changed);
break;
@ -2033,19 +2038,24 @@ void spg2xx_device::extint_w(int channel, bool state)
m_extint[channel] = state;
if (old != state)
{
LOGMASKED(LOG_EXTINT, "extint state changed, so %sing interrupt\n", state ? "rais" : "lower");
const uint16_t mask = (channel == 0) ? 0x0200 : 0x1000;
const uint16_t old_irq = IO_IRQ_STATUS;
if (state)
IO_IRQ_STATUS |= mask;
else
IO_IRQ_STATUS &= ~mask;
check_extint_irq(channel);
}
}
if (old_irq != IO_IRQ_STATUS)
{
LOGMASKED(LOG_EXTINT, "extint IRQ changed, so checking interrupts\n");
check_irqs(mask);
}
void spg2xx_device::check_extint_irq(int channel)
{
LOGMASKED(LOG_EXTINT, "%sing extint %d interrupt\n", m_extint[channel] ? "rais" : "lower", channel + 1);
const uint16_t mask = (channel == 0) ? 0x0200 : 0x1000;
const uint16_t old_irq = IO_IRQ_STATUS;
if (m_extint[channel])
IO_IRQ_STATUS |= mask;
else
IO_IRQ_STATUS &= ~mask;
if (old_irq != IO_IRQ_STATUS)
{
LOGMASKED(LOG_EXTINT, "extint IRQ changed, so checking interrupts\n");
check_irqs(mask);
}
}

View File

@ -384,6 +384,7 @@ protected:
virtual DECLARE_READ16_MEMBER(io_r);
virtual DECLARE_WRITE16_MEMBER(io_w);
void check_extint_irq(int channel);
void check_irqs(const uint16_t changed);
inline void check_video_irq();

View File

@ -50,18 +50,6 @@ READ16_MEMBER(vsmile_base_state::bank3_r)
return ((uint16_t*)m_system_region->base())[offset];
}
void vsmile_base_state::mem_map(address_map &map)
{
map(0x000000, 0x3fffff).rw(m_bankdev, FUNC(address_map_bank_device::read16), FUNC(address_map_bank_device::write16));
map(0x000000, 0x003fff).m(m_spg, FUNC(spg2xx_device::map));
}
/************************************
*
* V.Smile
*
************************************/
void vsmile_state::machine_start()
{
vsmile_base_state::machine_start();
@ -101,6 +89,12 @@ READ16_MEMBER(vsmile_state::portb_r)
return VSMILE_PORTB_OFF_SW | VSMILE_PORTB_ON_SW | VSMILE_PORTB_RESET;
}
WRITE16_MEMBER(vsmile_state::portb_w)
{
if (BIT(mem_mask, 4))
m_cart->set_cs2(BIT(data, 4));
}
READ16_MEMBER(vsmile_state::portc_r)
{
uint16_t data = m_dsw_region->read();
@ -128,6 +122,36 @@ WRITE16_MEMBER(vsmile_state::portc_w)
}
}
/************************************
*
* V.Smile Motion-specific
*
************************************/
WRITE16_MEMBER(vsmilem_state::porta_w)
{
//printf("Port A write: %04x & %04x\n", data, mem_mask);
}
READ16_MEMBER(vsmilem_state::porta_r)
{
const uint16_t data = 0xc000;
//printf("Port A read: %04x & %04x\n", data, mem_mask);
return data;
}
/************************************
*
* Address Maps
*
************************************/
void vsmile_base_state::mem_map(address_map &map)
{
map(0x000000, 0x3fffff).rw(m_bankdev, FUNC(address_map_bank_device::read16), FUNC(address_map_bank_device::write16));
map(0x000000, 0x003fff).m(m_spg, FUNC(spg2xx_device::map));
}
void vsmile_state::banked_map(address_map &map)
{
map(0x0000000, 0x00fffff).rom().region("maincpu", 0);
@ -249,6 +273,13 @@ void vsmile_state::vsmilep(machine_config &config)
m_spg->set_pal(true);
}
void vsmilem_state::vsmilem(machine_config &config)
{
vsmile(config);
m_spg->porta_out().set(FUNC(vsmilem_state::porta_w));
m_spg->porta_in().set(FUNC(vsmilem_state::porta_r));
}
/************************************
*
* ROM Loading
@ -271,7 +302,13 @@ ROM_START( vsmilef )
ROM_LOAD16_WORD_SWAP( "sysrom_france", 0x000000, 0x200000, CRC(0cd0bdf5) SHA1(5c8d1eada1b6b545555b8d2b09325d7127681af8) )
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 )
ROM_START( vsmilem )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "vsmilebios.bin", 0x000000, 0x200000, BAD_DUMP CRC(11f1b416) SHA1(11f77c4973d29c962567390e41879c86a759c93b) )
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( 2008, vsmilem, vsmile, 0, vsmilem, vsmile, vsmilem_state, empty_init, "VTech", "V.Smile Motion (US)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )

View File

@ -85,6 +85,7 @@ private:
template <int Which> DECLARE_WRITE_LINE_MEMBER(ctrl_rts_w);
DECLARE_READ16_MEMBER(portb_r);
DECLARE_WRITE16_MEMBER(portb_w);
DECLARE_READ16_MEMBER(portc_r);
DECLARE_WRITE16_MEMBER(portc_w);
@ -115,6 +116,20 @@ private:
bool m_ctrl_select[2];
};
class vsmilem_state : public vsmile_state
{
public:
vsmilem_state(const machine_config &mconfig, device_type type, const char *tag)
: vsmile_state(mconfig, type, tag)
{ }
void vsmilem(machine_config &config);
protected:
DECLARE_WRITE16_MEMBER(porta_w);
DECLARE_READ16_MEMBER(porta_r);
};
class vsmileb_state : public vsmile_base_state
{
public:

View File

@ -38671,6 +38671,7 @@ mattelcs //
vsmile //
vsmilef //
vsmileg //
vsmilem //
@source:vsmileb.cpp
vsmileb //