From f634b3ee9452cfc43a099bbbec7296f73667b1dd Mon Sep 17 00:00:00 2001 From: David Haywood <28625134+DavidHaywood@users.noreply.github.com> Date: Thu, 27 Aug 2020 21:03:19 +0100 Subject: new NOT WORKING machines (#7142) New NOT WORKING machines ---- Zeebo (Brazil) [Triple Oxygen] --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/zeebo_qualcomm_adreno130.cpp | 142 ++++++++++++++++++++++++++ src/mame/mame.lst | 3 + 3 files changed, 146 insertions(+) create mode 100644 src/mame/drivers/zeebo_qualcomm_adreno130.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index dc6560cc99c..265f3f4a117 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -4520,6 +4520,7 @@ files { MAME_DIR .. "src/mame/drivers/gscpm.cpp", MAME_DIR .. "src/mame/drivers/gsz80.cpp", MAME_DIR .. "src/mame/drivers/ultim809.cpp", + MAME_DIR .. "src/mame/drivers/zeebo_qualcomm_adreno130.cpp", } end diff --git a/src/mame/drivers/zeebo_qualcomm_adreno130.cpp b/src/mame/drivers/zeebo_qualcomm_adreno130.cpp new file mode 100644 index 00000000000..3978046dfaf --- /dev/null +++ b/src/mame/drivers/zeebo_qualcomm_adreno130.cpp @@ -0,0 +1,142 @@ +// license:BSD-3-Clause +// copyright-holders: +/****************************************************************************** + +"Zeebo", or "Genie" or "Longcheer W800", is a video game developed in a partnership +between Qualcomm and Zeebo Inc., the North American arm of the Brazilian company Tectoy. + +A large amount of information can be found on +https://www.tripleoxygen.net/wiki/console/zeebo/start + +---- + +Zeebo comes equipped with an ARM11 processor running at 528 MHZ. It is a chip +with low energy consumption and widely used in smartphones, such as the iPhone 3G. + +Its graphics core is called Adreno 130, and was developed by Qualcomm with technology +from ATI. + +---- + +System was launched in 2009, but discontinued shortly after. + +Games were downloaded to NAND, but once the online store was closed the games could +no longer be downloaded, leaving no way to get them back onto the system after +after a factory restore or similar. + +---- + +The information from the site above should be transferred into the driver, there +are details such as the memory map, and dumps of RAM from a running system. + +Is there a bootstrap ROM, or does this happen transparently to the CPU? how is +memory configuration determined by default etc? + +This driver needs a proper owner. + +*******************************************************************************/ + +#include "emu.h" + +#include "cpu/arm7/arm7.h" +#include "speaker.h" +#include "screen.h" + + +class zeebo_game_state : public driver_device +{ +public: + zeebo_game_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "arm11") + { } + + void zeebo(machine_config &config); + +private: + virtual void machine_start() override; + virtual void machine_reset() override; + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void zeebo_arm11_map(address_map &map); + + void copy_block(int i, int blocksize, int blocksize_stripped, uint8_t* nandrom, int dest); + void bootstrap(); + + required_device m_maincpu; +}; + +void zeebo_game_state::zeebo_arm11_map(address_map &map) +{ + map(0x00000000, 0x03ffffff).ram(); +} + + +void zeebo_game_state::copy_block(int i, int blocksize, int blocksize_stripped, uint8_t* nandrom, int dest) +{ + const int base = i * blocksize; + address_space& mem = m_maincpu->space(AS_PROGRAM); + + for (int j = 0; j < blocksize_stripped; j++) + { + uint8_t data = nandrom[base + j]; + //printf("writing to %08x : %02x", dest + j, data); + mem.write_byte((dest+j)^3, data); + } +} + +void zeebo_game_state::bootstrap() +{ + uint8_t* rom = memregion("nand")->base(); + + int j = 0; + for (int i = 0xB700; i < 0xB800; i++) // how much is copied? + { + copy_block(i, 0x210, 0x200, rom, j * 0x200); + j++; + } +} + + +void zeebo_game_state::machine_start() +{ +} + +void zeebo_game_state::machine_reset() +{ + bootstrap(); +} + + +static INPUT_PORTS_START( zeebo ) +INPUT_PORTS_END + + +uint32_t zeebo_game_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + return 0; +} + +void zeebo_game_state::zeebo(machine_config &config) +{ + ARM11(config, m_maincpu, 528000000); // 528 MHz ARM11 based SoC + m_maincpu->set_addrmap(AS_PROGRAM, &zeebo_game_state::zeebo_arm11_map); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(640, 480); + screen.set_visarea(0, 640-1, 0, 480-1); + screen.set_screen_update(FUNC(zeebo_game_state::screen_update)); + + SPEAKER(config, "speaker").front_center(); +} + +ROM_START( zeebo ) + ROM_REGION32_BE( 0x8400000, "nand", 0 ) + // older versions should be dumped too if possible + ROM_LOAD( "1.1.2_spare.bin", 0x000000, 0x8400000, CRC(64bd6faa) SHA1(da0db9585d15cf7f1f127e39b0a5fa47f3c13cc0) ) +ROM_END + +CONS( 2009, zeebo, 0, 0, zeebo, zeebo, zeebo_game_state, empty_init, "Zeebo Inc.", "Zeebo (Brazil)", MACHINE_IS_SKELETON ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 531a74f81e6..bb6cd32c4dc 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -42652,6 +42652,9 @@ zerozone // (c) 1993 Comad @source:zexall.cpp zexall // zexall z80 test suite with kevtris' preloader/serial interface at 0000-00ff +@source:zeebo_qualcomm_adreno130.cpp +zeebo + @source:zms8085.cpp zephyr // -- cgit v1.2.3