// license:BSD-3-Clause // copyright-holders:David Haywood /***************************************************************************** unlike earlier SunPlus / GeneralPlus based SoCs this one is ARM based NAND types MX30LF1G08AA ID = C2F1 Capacity = (2048+64) x 64 x 512 Star Wars Blaster - MX30LF1G08AA TMNT Hero Portal - MX30LF1G08AA DC Hero Portal - MX30LF1G08AA *****************************************************************************/ #include "emu.h" #include "cpu/arm7/arm7.h" #include "cpu/arm7/arm7core.h" #include "screen.h" #include "speaker.h" class generalplus_gpl32612_game_state : public driver_device { public: generalplus_gpl32612_game_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_screen(*this, "screen") { } void gpl32612(machine_config &config); void nand_init840(); private: virtual void machine_start() override; virtual void machine_reset() override; required_device m_maincpu; required_device m_screen; uint32_t screen_update_gpl32612(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void nand_init(int blocksize, int blocksize_stripped); std::vector m_strippedrom; }; uint32_t generalplus_gpl32612_game_state::screen_update_gpl32612(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { return 0; } void generalplus_gpl32612_game_state::machine_start() { } void generalplus_gpl32612_game_state::machine_reset() { } static INPUT_PORTS_START( gpl32612 ) INPUT_PORTS_END void generalplus_gpl32612_game_state::gpl32612(machine_config &config) { ARM9(config, m_maincpu, 240000000); // unknown core / frequency, but ARM based SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_size(320, 262); m_screen->set_visarea(0, 320-1, 0, 240-1); m_screen->set_screen_update(FUNC(generalplus_gpl32612_game_state::screen_update_gpl32612)); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); } // NAND dumps, so there will be a bootloader / boot strap at least ROM_START( jak_swbstrik ) ROM_REGION( 0x8400000, "maincpu", ROMREGION_ERASEFF ) ROM_LOAD( "starwarsblaster.bin", 0x000000, 0x8400000, CRC(02c3c4d6) SHA1(a6ae05a7d7b2015023113f6baad25458f3c01102) ) ROM_END ROM_START( jak_tmnthp ) ROM_REGION( 0x8400000, "maincpu", ROMREGION_ERASEFF ) ROM_LOAD( "tmntheroportal.bin", 0x000000, 0x8400000, CRC(75ec7127) SHA1(cd05f55a1f5a7fd3d1b0658ad6805b8777857a7e) ) ROM_END ROM_START( jak_ddhp ) ROM_REGION( 0x8400000, "maincpu", ROMREGION_ERASEFF ) ROM_LOAD( "dragonsheroesportal_mx30lf1g08aa_c2f1.bin", 0x000000, 0x8400000, CRC(825cce7b) SHA1(2185137138f2a20e5cfe9c167eeb67a146953b65) ) ROM_END ROM_START( jak_dchp ) ROM_REGION( 0x8400000, "maincpu", ROMREGION_ERASEFF ) ROM_LOAD( "dcheroportal_mx30lf1g08aa_c2f1.bin", 0x000000, 0x8400000, CRC(576a3005) SHA1(6cd9edc4def707aede3f82a21c87269d2a6bc870) ) ROM_END ROM_START( jak_prhp ) ROM_REGION( 0x8400000, "maincpu", ROMREGION_ERASEFF ) ROM_LOAD( "mx30lf1g08aa.u2", 0x000000, 0x8400000, CRC(4ccd7e53) SHA1(decbd424f088d180776a817c80b147d6a887e5c1) ) ROM_END void generalplus_gpl32612_game_state::nand_init(int blocksize, int blocksize_stripped) { uint8_t* rom = memregion("maincpu")->base(); int size = memregion("maincpu")->bytes(); int numblocks = size / blocksize; m_strippedrom.resize(numblocks * blocksize_stripped); for (int i = 0; i < numblocks; i++) { const int base = i * blocksize; const int basestripped = i * blocksize_stripped; for (int j = 0; j < blocksize_stripped; j++) { m_strippedrom[basestripped + j] = rom[base + j]; } } // debug to allow for easy use of unidasm.exe if (0) { FILE *fp; char filename[256]; sprintf(filename,"stripped_%s", machine().system().name); fp=fopen(filename, "w+b"); if (fp) { fwrite(&m_strippedrom[0], blocksize_stripped * numblocks, 1, fp); fclose(fp); } } } void generalplus_gpl32612_game_state::nand_init840() { nand_init(0x840, 0x800); } // year, name, parent, compat, machine, input, class, init, company, fullname, flags CONS( 200?, jak_swbstrik, 0, 0, gpl32612, gpl32612, generalplus_gpl32612_game_state, nand_init840, "JAKKS Pacific Inc", "Star Wars Blaster Strike", MACHINE_IS_SKELETON ) CONS( 200?, jak_tmnthp, 0, 0, gpl32612, gpl32612, generalplus_gpl32612_game_state, nand_init840, "JAKKS Pacific Inc", "Teenage Mutant Ninja Turtles Hero Portal", MACHINE_IS_SKELETON ) CONS( 200?, jak_ddhp, 0, 0, gpl32612, gpl32612, generalplus_gpl32612_game_state, nand_init840, "JAKKS Pacific Inc", "DreamWorks Dragons Hero Portal", MACHINE_IS_SKELETON ) CONS( 200?, jak_prhp, 0, 0, gpl32612, gpl32612, generalplus_gpl32612_game_state, nand_init840, "JAKKS Pacific Inc", "Power Rangers Super Megaforce Hero Portal", MACHINE_IS_SKELETON ) // from a PAL unit (probably not region specific) CONS( 200?, jak_dchp, 0, 0, gpl32612, gpl32612, generalplus_gpl32612_game_state, nand_init840, "JAKKS Pacific Inc", "DC Super Heroes The Watchtower Hero Portal", MACHINE_IS_SKELETON )