mirror of
https://github.com/holub/mame
synced 2025-04-22 00:11:58 +03:00
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:
parent
b6fb151b5e
commit
3cc0f27d89
@ -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 & 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>
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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 )
|
||||
|
@ -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:
|
||||
|
@ -38671,6 +38671,7 @@ mattelcs //
|
||||
vsmile //
|
||||
vsmilef //
|
||||
vsmileg //
|
||||
vsmilem //
|
||||
|
||||
@source:vsmileb.cpp
|
||||
vsmileb //
|
||||
|
Loading…
Reference in New Issue
Block a user