mirror of
https://github.com/holub/mame
synced 2025-04-23 17:00:53 +03:00
generalplus_gpac800 - copy some code from NAND into RAM for execution (nw)
This commit is contained in:
parent
0747c3ab98
commit
8412beb9a2
@ -251,8 +251,8 @@ void unsp_12_device::execute_fxxx_101_group(uint16_t op)
|
||||
return;
|
||||
|
||||
case 0xf145: case 0xf345: case 0xf545: case 0xf745: case 0xf945: case 0xfb45: case 0xfd45: case 0xff45:
|
||||
logerror("fir_mov off\n");
|
||||
unimplemented_opcode(op);
|
||||
logerror("unimplemented: fir_mov off\n");
|
||||
//unimplemented_opcode(op); // generalplus_gpac800 games do this on startup
|
||||
return;
|
||||
|
||||
case 0xf161: case 0xf361: case 0xf561: case 0xf761: case 0xf961: case 0xfb61: case 0xfd61: case 0xff61:
|
||||
|
@ -37,7 +37,6 @@ public:
|
||||
|
||||
void base(machine_config &config);
|
||||
|
||||
void nand_init();
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
@ -103,6 +102,33 @@ private:
|
||||
virtual DECLARE_WRITE16_MEMBER(write_external_space) override;
|
||||
};
|
||||
|
||||
|
||||
class generalplus_gpac800_game_state : public gcm394_game_state
|
||||
{
|
||||
public:
|
||||
generalplus_gpac800_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
gcm394_game_state(mconfig, type, tag),
|
||||
m_mainram(*this, "mainram")
|
||||
{
|
||||
}
|
||||
|
||||
void generalplus_gpac800(machine_config &config);
|
||||
|
||||
void nand_init();
|
||||
|
||||
protected:
|
||||
virtual void machine_reset() override;
|
||||
|
||||
void generalplus_gpac800_map(address_map &map);
|
||||
|
||||
private:
|
||||
required_shared_ptr<u16> m_mainram;
|
||||
std::vector<uint8_t> m_strippedrom;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
READ16_MEMBER(gcm394_game_state::read_external_space)
|
||||
{
|
||||
//logerror("reading offset %04x\n", offset * 2);
|
||||
@ -245,10 +271,15 @@ void wrlshunt_game_state::wrlshunt(machine_config &config)
|
||||
|
||||
m_screen->set_size(320*2, 262*2);
|
||||
m_screen->set_visarea(0, (320*2)-1, 0, (240*2)-1);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void generalplus_gpac800_game_state::generalplus_gpac800(machine_config &config)
|
||||
{
|
||||
gcm394_game_state::base(config);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &generalplus_gpac800_game_state::generalplus_gpac800_map);
|
||||
}
|
||||
|
||||
|
||||
void gcm394_game_state::switch_bank(uint32_t bank)
|
||||
{
|
||||
if (!m_bank)
|
||||
@ -303,6 +334,12 @@ void wrlshunt_game_state::wrlshunt_map(address_map &map)
|
||||
map(0x030000, 0x3fffff).ram().share("mainram");
|
||||
}
|
||||
|
||||
void generalplus_gpac800_game_state::generalplus_gpac800_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x3fffff).ram().share("mainram");
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START( gcm394 )
|
||||
PORT_START("P1")
|
||||
// entirely non-standard mat based controller (0-11 are where your feet are placed normally, row of selection places to step above those)
|
||||
@ -526,16 +563,67 @@ CONS(2009, smartfp, 0, 0, base, gcm394, gcm394_game_state, empty_init, "Fisher-P
|
||||
// Fun 2 Learn 3-in-1 SMART SPORTS ?
|
||||
|
||||
|
||||
void gcm394_game_state::nand_init()
|
||||
void generalplus_gpac800_game_state::machine_reset()
|
||||
{
|
||||
address_space& mem = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
// copy a block of code from the NAND to RAM
|
||||
for (int i = 0; i < 0x2000; i++)
|
||||
{
|
||||
uint16_t word = m_strippedrom[(i * 2) + 0] | (m_strippedrom[(i * 2) + 1] << 8);
|
||||
|
||||
mem.write_word(0x4000+i, word);
|
||||
}
|
||||
|
||||
mem.write_word(0xfff7, 0x4020); // point boot vector at code in RAM
|
||||
m_maincpu->reset(); // reset CPU so vector gets read etc.
|
||||
}
|
||||
|
||||
|
||||
void generalplus_gpac800_game_state::nand_init()
|
||||
{
|
||||
uint8_t* rom = memregion("maincpu")->base();
|
||||
int size = memregion("maincpu")->bytes();
|
||||
|
||||
const int blocksize = 0x210;
|
||||
const int blocksize_stripped = 0x200;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// NAND dumps w/ internal bootstrap (and u'nSP 2.0 extended opcodes) (have gpnandnand strings)
|
||||
// the JAKKS ones seem to be known as 'Generalplus GPAC800' hardware
|
||||
CONS(2010, wlsair60, 0, 0, base, gcm394, gcm394_game_state, nand_init, "Jungle Soft / Kids Station Toys Inc", "Wireless Air 60", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, jak_gtg, 0, 0, base, gcm394, gcm394_game_state, nand_init, "JAKKS Pacific Inc", "Golden Tee Golf (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, jak_car2, 0, 0, base, gcm394, gcm394_game_state, nand_init, "JAKKS Pacific Inc", "Cars 2 (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, jak_tsm , 0, 0, base, gcm394, gcm394_game_state, nand_init, "JAKKS Pacific Inc", "Toy Story Mania (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, vbaby, 0, 0, base, gcm394, gcm394_game_state, nand_init, "VTech", "V.Baby", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, beambox, 0, 0, base, gcm394, gcm394_game_state, nand_init, "Hasbro", "Playskool Heroes Transformers Rescue Bots Beam Box (Spain)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(2010, wlsair60, 0, 0, generalplus_gpac800, gcm394, generalplus_gpac800_game_state, nand_init, "Jungle Soft / Kids Station Toys Inc", "Wireless Air 60", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, jak_gtg, 0, 0, generalplus_gpac800, gcm394, generalplus_gpac800_game_state, nand_init, "JAKKS Pacific Inc", "Golden Tee Golf (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, jak_car2, 0, 0, generalplus_gpac800, gcm394, generalplus_gpac800_game_state, nand_init, "JAKKS Pacific Inc", "Cars 2 (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, jak_tsm , 0, 0, generalplus_gpac800, gcm394, generalplus_gpac800_game_state, nand_init, "JAKKS Pacific Inc", "Toy Story Mania (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, vbaby, 0, 0, generalplus_gpac800, gcm394, generalplus_gpac800_game_state, nand_init, "VTech", "V.Baby", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, beambox, 0, 0, generalplus_gpac800, gcm394, generalplus_gpac800_game_state, nand_init, "Hasbro", "Playskool Heroes Transformers Rescue Bots Beam Box (Spain)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
|
Loading…
Reference in New Issue
Block a user