diff options
Diffstat (limited to 'src/mame/drivers/sunplus_gcm394.cpp')
-rw-r--r-- | src/mame/drivers/sunplus_gcm394.cpp | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/src/mame/drivers/sunplus_gcm394.cpp b/src/mame/drivers/sunplus_gcm394.cpp index 3ff7bbf7b98..d71101052f1 100644 --- a/src/mame/drivers/sunplus_gcm394.cpp +++ b/src/mame/drivers/sunplus_gcm394.cpp @@ -236,8 +236,7 @@ public: generalplus_gpac800_game_state(const machine_config& mconfig, device_type type, const char* tag) : gcm394_game_state(mconfig, type, tag), m_has_nand(false), - m_initial_copy_words(0x2000), - m_nandreadbase(0) + m_initial_copy_words(0x2000) { } @@ -248,6 +247,7 @@ public: void nand_wlsair60(); void nand_vbaby(); void nand_tsm(); + void nand_beambox(); protected: virtual void machine_reset() override; @@ -269,7 +269,7 @@ private: int m_strippedsize; int m_initial_copy_words; - int m_nandreadbase; + int m_vectorbase; }; @@ -368,7 +368,7 @@ READ8_MEMBER(generalplus_gpac800_game_state::read_nand) if (!m_has_nand) return 0x0000; - return m_strippedrom[(offset + m_nandreadbase) & (m_strippedsize - 1)]; + return m_strippedrom[offset & (m_strippedsize - 1)]; } READ16_MEMBER(gcm394_game_state::read_external_space) @@ -1029,17 +1029,17 @@ void generalplus_gpac800_game_state::machine_reset() // these vectors must either directly point to RAM, or at least redirect there after some code uint16_t* internal = (uint16_t*)memregion("maincpu:internal")->base(); - internal[0x7ff5] = 0x6fea; - internal[0x7ff6] = 0x6fec; + internal[0x7ff5] = m_vectorbase + 0x0a; + internal[0x7ff6] = m_vectorbase + 0x0c; internal[0x7ff7] = dest + 0x20; // point boot vector at code in RAM (probably in reality points to internal code that copies the first block) - internal[0x7ff8] = 0x6ff0; - internal[0x7ff9] = 0x6ff2; - internal[0x7ffa] = 0x6ff4; - internal[0x7ffb] = 0x6ff6; - internal[0x7ffc] = 0x6ff8; - internal[0x7ffd] = 0x6ffa; - internal[0x7ffe] = 0x6ffc; - internal[0x7fff] = 0x6ffe; + internal[0x7ff8] = m_vectorbase + 0x10; + internal[0x7ff9] = m_vectorbase + 0x12; + internal[0x7ffa] = m_vectorbase + 0x14; + internal[0x7ffb] = m_vectorbase + 0x16; + internal[0x7ffc] = m_vectorbase + 0x18; + internal[0x7ffd] = m_vectorbase + 0x1a; + internal[0x7ffe] = m_vectorbase + 0x1c; + internal[0x7fff] = m_vectorbase + 0x1e; internal[0x8000] = 0xb00b; } @@ -1089,6 +1089,7 @@ void generalplus_gpac800_game_state::nand_init(int blocksize, int blocksize_stri } m_has_nand = true; + m_vectorbase = 0x6fe0; } void generalplus_gpac800_game_state::nand_init210() @@ -1111,11 +1112,11 @@ void generalplus_gpac800_game_state::nand_vbaby() { nand_init840(); m_initial_copy_words = 0x1000; + m_maincpu->set_romtype(2); } void generalplus_gpac800_game_state::nand_tsm() { - nand_init210(); // something odd must be going on with the bootloader? // structure has the first 0x4000 block repeated 3 times (must appear in RAM on startup?) @@ -1124,7 +1125,14 @@ void generalplus_gpac800_game_state::nand_tsm() // the addresses written to the NAND device don't compensate for these data repeats, however dump seems ok as no other data is being repeated? // reads after startup still need checking - m_nandreadbase = (0x2000 + 0x2000 + 0x8000 + 0x8000 + 0x8000) * 2; + nand_init210(); + m_maincpu->set_romtype(1); +} + +void generalplus_gpac800_game_state::nand_beambox() +{ + nand_init210(); + m_vectorbase = 0x2fe0; } @@ -1136,4 +1144,4 @@ CONS(200?, jak_gtg, 0, 0, generalplus_gpac800, jak_gtg, generalplus_gpac800_ga CONS(200?, jak_car2, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_init210, "JAKKS Pacific Inc", "Cars 2 (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) CONS(200?, jak_tsm , 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_tsm, "JAKKS Pacific Inc", "Toy Story Mania (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) CONS(200?, vbaby, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_vbaby, "VTech", "V.Baby", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) -CONS(200?, beambox, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_init210, "Hasbro", "Playskool Heroes Transformers Rescue Bots Beam Box (Spain)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) +CONS(200?, beambox, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_beambox, "Hasbro", "Playskool Heroes Transformers Rescue Bots Beam Box (Spain)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) |