From 3cc0f27d8951c3aebc5d43d22862f8f812c8b167 Mon Sep 17 00:00:00 2001 From: mooglyguy Date: Sun, 3 Feb 2019 18:07:39 +0100 Subject: New machines marked as NOT_WORKING MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ---------------------------------- 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] --- hash/vsmilem_cart.xml | 38 +++++++++++++++++-- src/devices/bus/vsmile/rom.cpp | 11 ++++++ src/devices/bus/vsmile/rom.h | 13 +++++-- src/devices/bus/vsmile/vsmile_slot.cpp | 18 ++++----- src/devices/bus/vsmile/vsmile_slot.h | 14 +++++-- src/devices/machine/spg2xx.cpp | 36 +++++++++++------- src/devices/machine/spg2xx.h | 1 + src/mame/drivers/vsmile.cpp | 69 ++++++++++++++++++++++++++-------- src/mame/includes/vsmile.h | 15 ++++++++ src/mame/mame.lst | 1 + 10 files changed, 167 insertions(+), 49 deletions(-) diff --git a/hash/vsmilem_cart.xml b/hash/vsmilem_cart.xml index ffcafbb1dd2..07bd9990595 100644 --- a/hash/vsmilem_cart.xml +++ b/hash/vsmilem_cart.xml @@ -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 + + Für immer Shrek (Ger) + 2010 + VTech + + + + + + + + + + + + Spider-Man & Freunde - Geheime Missionen (Ger) 2010 @@ -478,6 +494,22 @@ Smartbooks currently have no dumps available, hence they are temporarily listed + + Toy Story 3 (Ger) + 2010 + VTech + + + + + + + + + + + + Wintersport (Ger) 2009? diff --git a/src/devices/bus/vsmile/rom.cpp b/src/devices/bus/vsmile/rom.cpp index 49740bc7f37..584a8cfe058 100644 --- a/src/devices/bus/vsmile/rom.cpp +++ b/src/devices/bus/vsmile/rom.cpp @@ -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; +} diff --git a/src/devices/bus/vsmile/rom.h b/src/devices/bus/vsmile/rom.h index 5d93cb64109..ec39f1f743e 100644 --- a/src/devices/bus/vsmile/rom.h +++ b/src/devices/bus/vsmile/rom.h @@ -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; }; diff --git a/src/devices/bus/vsmile/vsmile_slot.cpp b/src/devices/bus/vsmile/vsmile_slot.cpp index f413a9aeb7e..e7b8546ea20 100644 --- a/src/devices/bus/vsmile/vsmile_slot.cpp +++ b/src/devices/bus/vsmile/vsmile_slot.cpp @@ -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); +} \ No newline at end of file diff --git a/src/devices/bus/vsmile/vsmile_slot.h b/src/devices/bus/vsmile/vsmile_slot.h index b50af088027..7d800677214 100644 --- a/src/devices/bus/vsmile/vsmile_slot.h +++ b/src/devices/bus/vsmile/vsmile_slot.h @@ -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; diff --git a/src/devices/machine/spg2xx.cpp b/src/devices/machine/spg2xx.cpp index a5fef62486d..f03c3e4eb25 100644 --- a/src/devices/machine/spg2xx.cpp +++ b/src/devices/machine/spg2xx.cpp @@ -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); } } diff --git a/src/devices/machine/spg2xx.h b/src/devices/machine/spg2xx.h index e8a006dc273..93b689a1ef9 100644 --- a/src/devices/machine/spg2xx.h +++ b/src/devices/machine/spg2xx.h @@ -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(); diff --git a/src/mame/drivers/vsmile.cpp b/src/mame/drivers/vsmile.cpp index 8c36fae0cdd..d498fe82653 100644 --- a/src/mame/drivers/vsmile.cpp +++ b/src/mame/drivers/vsmile.cpp @@ -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 ) diff --git a/src/mame/includes/vsmile.h b/src/mame/includes/vsmile.h index defb83e106e..0069803295f 100644 --- a/src/mame/includes/vsmile.h +++ b/src/mame/includes/vsmile.h @@ -85,6 +85,7 @@ private: template 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: diff --git a/src/mame/mame.lst b/src/mame/mame.lst index d9a29c990a9..8787b0fc1a9 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -38671,6 +38671,7 @@ mattelcs // vsmile // vsmilef // vsmileg // +vsmilem // @source:vsmileb.cpp vsmileb // -- cgit v1.2.3