summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/leapfrog_leappad.cpp
diff options
context:
space:
mode:
author David Haywood <mamehaze@gmail.com>2019-02-03 10:03:59 +0000
committer MooglyGuy <MooglyGuy@users.noreply.github.com>2019-02-03 11:03:59 +0100
commit74e3b56ddbb5fba4471e18bff61f348be3d2df91 (patch)
tree39c6989b7438c8dc84b97be3845125930d7b5dcd /src/mame/drivers/leapfrog_leappad.cpp
parentb4aa8fdc108ed02c83e2d291f790078a0223ebd0 (diff)
skeleton stuff (mostly to give Clawgrip a starting place) (#4586)
* new NOT WORKING machines --- C2 Color [zhongtiao1] 35 in 1 Super Twins [Sean Riddle] LeapPad [Sean Riddle] My First LeapPad [Sean Riddle] -leappad: Added software lists. [David Haywood] -c2color: Added software lists. [David Haywood] leappad note: Currently BIOS is not dumped for LeapPad, but some carts are, BIOS is dumped for My First LeapPad, but not carts. (nw) c2color note: Again the internal ROM isn't dumped, but we need the placeholder driver for the software list hookup, 2 carts are dumped. (nw) -vsmile: Added softlist loading for some of the trickier vsmile cases based on new dumps from Sean Riddle. Note, the Vsmile Motion game is 16MB so clearly needs some kind of banking. (nw)
Diffstat (limited to 'src/mame/drivers/leapfrog_leappad.cpp')
-rw-r--r--src/mame/drivers/leapfrog_leappad.cpp130
1 files changed, 130 insertions, 0 deletions
diff --git a/src/mame/drivers/leapfrog_leappad.cpp b/src/mame/drivers/leapfrog_leappad.cpp
new file mode 100644
index 00000000000..6a8e6e117a3
--- /dev/null
+++ b/src/mame/drivers/leapfrog_leappad.cpp
@@ -0,0 +1,130 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+/******************************************************************************
+
+ LEAPPAD:
+ Example-Video: https://www.youtube.com/watch?v=LtUhENu5TKc
+ The LEAPPAD is basically compareable to the SEGA PICO, but without
+ Screen-Output! Each "Game" consists of two parts (Book + Cartridge).
+ Insert the cartridge into the system and add the Book on the Top of the
+ "console" and you can click on each pages and hear sounds or
+ learning-stuff on each page...
+
+ MY FIRST LEAPPAD:
+ Basically the same as the LEAPPAD, but for even younger kids! (Cartridge
+ internal PCB's are identical to LEAPPAD)
+ Example Video: https://www.youtube.com/watch?v=gsf8XYV1Tpg
+
+ Don't get confused by the name "LEAPPAD", as it looks like Leapfrog
+ also released some kind of Tablet with this name, and they even released
+ a new "LEAPPAD" in around 2016:
+ https://www.youtube.com/watch?v=MXFSgj6xLTU , which nearly looks like the
+ same, but is most likely techically completely different..
+
+*******************************************************************************/
+
+#include "emu.h"
+
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
+
+#include "screen.h"
+#include "softlist.h"
+#include "speaker.h"
+
+class leapfrog_leappad_state : public driver_device
+{
+public:
+ leapfrog_leappad_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_cart(*this, "cartslot")
+ , m_cart_region(nullptr)
+ { }
+
+ void leapfrog_leappad(machine_config &config);
+ void leapfrog_mfleappad(machine_config &config);
+
+private:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart);
+
+ required_device<generic_slot_device> m_cart;
+ memory_region *m_cart_region;
+};
+
+
+
+void leapfrog_leappad_state::machine_start()
+{
+ // if there's a cart, override the standard mapping
+ if (m_cart && m_cart->exists())
+ {
+ std::string region_tag;
+ m_cart_region = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ }
+}
+
+void leapfrog_leappad_state::machine_reset()
+{
+}
+
+DEVICE_IMAGE_LOAD_MEMBER(leapfrog_leappad_state, cart)
+{
+ uint32_t size = m_cart->common_get_size("rom");
+
+ m_cart->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_LITTLE);
+ m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
+
+ return image_init_result::PASS;
+}
+
+static INPUT_PORTS_START( leapfrog_leappad )
+INPUT_PORTS_END
+
+
+
+void leapfrog_leappad_state::leapfrog_leappad(machine_config &config)
+{
+ //ARCA5(config, m_maincpu, 96000000/10); // LeapPad Leapfrog 05-9-01 FS80A363 (doesn't appear to be Arcompact, what is it?)
+ //m_maincpu->set_addrmap(AS_PROGRAM, &leapfrog_leappad_state::map);
+
+ // screenless
+
+ GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "leapfrog_leappad_cart");
+ m_cart->set_width(GENERIC_ROM16_WIDTH);
+ m_cart->set_device_load(device_image_load_delegate(&leapfrog_leappad_state::device_image_load_cart, this));
+
+ SOFTWARE_LIST(config, "cart_list").set_original("leapfrog_leappad_cart");
+}
+
+void leapfrog_leappad_state::leapfrog_mfleappad(machine_config &config)
+{
+ //ARCA5(config, m_maincpu, 96000000/10); // LeapPad Leapfrog 05-9-01 FS80A363 (doesn't appear to be Arcompact, what is it?)
+ //m_maincpu->set_addrmap(AS_PROGRAM, &leapfrog_leappad_state::map);
+
+ // screenless
+
+ GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "leapfrog_mfleappad_cart");
+ m_cart->set_width(GENERIC_ROM16_WIDTH);
+ m_cart->set_device_load(device_image_load_delegate(&leapfrog_leappad_state::device_image_load_cart, this));
+
+ SOFTWARE_LIST(config, "cart_list").set_original("leapfrog_mfleappad_cart");
+}
+
+// both of these contain the string "Have you copied our ROM?" near the date codes
+
+ROM_START( leappad )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "leappadbios.bin", 0x000000, 0x100000, CRC(c886cddc) SHA1(f8a83b156feb28315d2321758678e141600a0d4e) ) // contains "Aug 06 2001.16:33:16.155-00450.LeapPad ILA2 Universal Base ROM" and "Copyright (c) 1998-2001 Knowledge Kids Enterprises, Inc."
+ROM_END
+
+ROM_START( mfleappad )
+ ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "myfirstleappadbios.bin", 0x000000, 0x400000, CRC(19174c16) SHA1(e0ba644fdf38fd5f91ab8c4b673c4a658cc3e612) ) // contains "Feb 13 2004.10:58:53.152-10573.MFLP US Base ROM - 2004" and "Copyright (c) 2004 LeapFrog Enterprises, Inc."
+ROM_END
+
+// year, name, parent, compat, machine, input, class, init, company, fullname, flags
+CONS( 2001, leappad, 0, 0, leapfrog_leappad, leapfrog_leappad, leapfrog_leappad_state, empty_init, "LeapFrog", "LeapPad", MACHINE_IS_SKELETON )
+CONS( 2004, mfleappad, 0, 0, leapfrog_mfleappad, leapfrog_leappad, leapfrog_leappad_state, empty_init, "LeapFrog", "My First LeapPad", MACHINE_IS_SKELETON )