From a5c2908540df92330117715727459fc09f7d7eed Mon Sep 17 00:00:00 2001 From: David Haywood <28625134+DavidHaywood@users.noreply.github.com> Date: Tue, 26 May 2020 16:22:41 +0100 Subject: [PATCH] identified tkmag220 as a bad dump, there's corrupt data in most banks and it fails test (nw) (#6745) * tkmag220 notes (nw) * hook up banking for tkmag220 (nw) * unfortunately it also looks like a bad dump (nw) * sprite flip behavior seems connected to resolution (nw) --- .../machine/generalplus_gpl16250soc.cpp | 108 ++++++++++++++++-- src/devices/machine/generalplus_gpl16250soc.h | 53 +++++++-- .../machine/generalplus_gpl16250soc_video.cpp | 6 +- src/mame/drivers/generalplus_gpl16250_rom.cpp | 54 +++++---- .../drivers/generalplus_gpl16250_romram.cpp | 9 +- src/mame/includes/generalplus_gpl16250.h | 17 +-- .../includes/generalplus_gpl16250_romram.h | 15 +++ 7 files changed, 197 insertions(+), 65 deletions(-) diff --git a/src/devices/machine/generalplus_gpl16250soc.cpp b/src/devices/machine/generalplus_gpl16250soc.cpp index 1f5860ceae6..984b7ebc8c9 100644 --- a/src/devices/machine/generalplus_gpl16250soc.cpp +++ b/src/devices/machine/generalplus_gpl16250soc.cpp @@ -371,7 +371,8 @@ READ16_MEMBER(sunplus_gcm394_base_device::ioarea_7860_porta_r) WRITE16_MEMBER(sunplus_gcm394_base_device::ioarea_7860_porta_w) { LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_7860_porta_w %04x\n", machine().describe_context(), data); - m_porta_out(data); + if (m_porta_out) + m_porta_out(data); } READ16_MEMBER(sunplus_gcm394_base_device::ioarea_7861_porta_buffer_r) @@ -431,7 +432,8 @@ WRITE16_MEMBER(sunplus_gcm394_base_device::ioarea_7869_portb_buffer_w) WRITE16_MEMBER(sunplus_gcm394_base_device::ioarea_7868_portb_w) { LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_7868_portb_w %04x\n", machine().describe_context(), data); - //m_portb_out(data); + if (m_portb_out) + m_portb_out(data); } READ16_MEMBER(sunplus_gcm394_base_device::ioarea_786a_portb_direction_r) @@ -470,6 +472,8 @@ WRITE16_MEMBER(sunplus_gcm394_base_device::ioarea_7870_portc_w) { LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_7870_portc_w %04x\n", machine().describe_context(), data); m_7870 = data; + if (m_portc_out) + m_portc_out(data); } READ16_MEMBER(sunplus_gcm394_base_device::ioarea_7871_portc_buffer_r) @@ -478,6 +482,12 @@ READ16_MEMBER(sunplus_gcm394_base_device::ioarea_7871_portc_buffer_r) return 0xffff;// m_7871; } +WRITE16_MEMBER(sunplus_gcm394_base_device::ioarea_7871_portc_buffer_w) +{ + LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_7871_portc_buffer_w %04x\n", machine().describe_context(), data); +} + + READ16_MEMBER(sunplus_gcm394_base_device::ioarea_7872_portc_direction_r) { LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_7872_portc_direction_r\n", machine().describe_context()); @@ -502,7 +512,58 @@ WRITE16_MEMBER(sunplus_gcm394_base_device::ioarea_7873_portc_attribute_w) m_7873_portc_attribute = data; } +// Port D +READ16_MEMBER(sunplus_gcm394_base_device::ioarea_7878_portd_r) +{ + LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_7878_portd_r\n", machine().describe_context()); + return m_portd_in(); +} + +WRITE16_MEMBER(sunplus_gcm394_base_device::ioarea_7878_portd_w) +{ + LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_7878_portd_w %04x\n", machine().describe_context(), data); + //m_7878 = data; + + if (m_portd_out) + m_portd_out(data); +} + +READ16_MEMBER(sunplus_gcm394_base_device::ioarea_7879_portd_buffer_r) +{ + LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_7879_portd_buffer_r\n", machine().describe_context()); + return 0xffff;// m_7871; +} + +WRITE16_MEMBER(sunplus_gcm394_base_device::ioarea_7879_portd_buffer_w) +{ + LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_7879_portd_buffer_w %04x\n", machine().describe_context(), data); +} + + +READ16_MEMBER(sunplus_gcm394_base_device::ioarea_787a_portd_direction_r) +{ + LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_787a_portd_direction_r\n", machine().describe_context()); + return m_787a_portd_direction; +} + +WRITE16_MEMBER(sunplus_gcm394_base_device::ioarea_787a_portd_direction_w) +{ + LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_787a_portd_direction_w %04x\n", machine().describe_context(), data); + m_787a_portd_direction = data; +} + +READ16_MEMBER(sunplus_gcm394_base_device::ioarea_787b_portd_attribute_r) +{ + LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_787b_portd_attribute_r\n", machine().describe_context()); + return m_787b_portd_attribute; +} + +WRITE16_MEMBER(sunplus_gcm394_base_device::ioarea_787b_portd_attribute_w) +{ + LOGMASKED(LOG_GCM394_IO, "%s:sunplus_gcm394_base_device::ioarea_787b_portd_attribute_w %04x\n", machine().describe_context(), data); + m_787b_portd_attribute = data; +} READ16_MEMBER(sunplus_gcm394_base_device::unkarea_7882_r) { LOGMASKED(LOG_GCM394, "%s:sunplus_gcm394_base_device::unkarea_7882_r\n", machine().describe_context()); return 0xffff;// m_7882; } @@ -652,7 +713,7 @@ WRITE16_MEMBER(sunplus_gcm394_base_device::unk_w) void sunplus_gcm394_base_device::base_internal_map(address_map &map) { - map(0x000000, 0x006fff).ram(); + map(0x000000, 0x006fff).ram().share("mainram"); map(0x007000, 0x007fff).rw(FUNC(sunplus_gcm394_base_device::unk_r), FUNC(sunplus_gcm394_base_device::unk_w)); // catch unhandled // ###################################################################################################################################################################################### @@ -781,7 +842,8 @@ void sunplus_gcm394_base_device::base_internal_map(address_map &map) // 783d // 783e - // 7841 + // 7840 - accessed by code in RAM when changing bank in tkmag220 + // 7841 - ^^ // ###################################################################################################################################################################################### // 786x - 787x - IO related? @@ -799,19 +861,20 @@ void sunplus_gcm394_base_device::base_internal_map(address_map &map) // 786c I/O PortB Latch / Wakeup map(0x007870, 0x007870).rw(FUNC(sunplus_gcm394_base_device::ioarea_7870_portc_r) ,FUNC(sunplus_gcm394_base_device::ioarea_7870_portc_w)); // 7870 I/O PortC Data Register - map(0x007871, 0x007871).r(FUNC(sunplus_gcm394_base_device::ioarea_7871_portc_buffer_r)); // 7871 I/O PortC Buffer Register + map(0x007871, 0x007871).rw(FUNC(sunplus_gcm394_base_device::ioarea_7871_portc_buffer_r), FUNC(sunplus_gcm394_base_device::ioarea_7871_portc_buffer_w)); // 7871 I/O PortC Buffer Register map(0x007872, 0x007872).rw(FUNC(sunplus_gcm394_base_device::ioarea_7872_portc_direction_r), FUNC(sunplus_gcm394_base_device::ioarea_7872_portc_direction_w)); // 7872 I/O PortC Direction Register map(0x007873, 0x007873).rw(FUNC(sunplus_gcm394_base_device::ioarea_7873_portc_attribute_r), FUNC(sunplus_gcm394_base_device::ioarea_7873_portc_attribute_w)); // 7873 I/O PortC Attribute Register // 7874 (data 0x1249) (bkrankp data 0x36db) + + map(0x007878, 0x007878).rw(FUNC(sunplus_gcm394_base_device::ioarea_7878_portd_r) ,FUNC(sunplus_gcm394_base_device::ioarea_7878_portd_w)); // 7878 I/O PortD Data Register + map(0x007879, 0x007879).rw(FUNC(sunplus_gcm394_base_device::ioarea_7879_portd_buffer_r), FUNC(sunplus_gcm394_base_device::ioarea_7879_portd_buffer_w)); // 7879 I/O PortD Buffer Register + map(0x00787a, 0x00787a).rw(FUNC(sunplus_gcm394_base_device::ioarea_787a_portd_direction_r), FUNC(sunplus_gcm394_base_device::ioarea_787a_portd_direction_w)); // 787a I/O PortD Direction Register + map(0x00787b, 0x00787b).rw(FUNC(sunplus_gcm394_base_device::ioarea_787b_portd_attribute_r), FUNC(sunplus_gcm394_base_device::ioarea_787b_portd_attribute_w)); // 787b I/O PortD Attribute Register + // 787c (data 0x1249) (bkrankp data 0x36db) // 787e (data 0x1249) (bkrankp data 0x36db) - // 7878 I/O PortD Data Register - // 7879 I/O PortD Buffer Register - // 787a I/O PortD Direction Register - // 787b I/O PortD Attribute Register - // 7880 map(0x007882, 0x007882).rw(FUNC(sunplus_gcm394_base_device::unkarea_7882_r), FUNC(sunplus_gcm394_base_device::unkarea_7882_w)); @@ -1311,9 +1374,12 @@ void sunplus_gcm394_base_device::device_start() m_porta_in.resolve_safe(0); m_portb_in.resolve_safe(0); m_portc_in.resolve_safe(0); + m_portd_in.resolve_safe(0); m_porta_out.resolve(); - + m_portb_out.resolve(); + m_portc_out.resolve(); + m_portd_out.resolve(); m_space_read_cb.resolve_safe(0); @@ -1559,6 +1625,9 @@ uint16_t sunplus_gcm394_base_device::read_space(uint32_t offset) return val; } + + + void sunplus_gcm394_base_device::write_space(uint32_t offset, uint16_t data) { address_space& space = this->space(AS_PROGRAM); @@ -1572,6 +1641,23 @@ void sunplus_gcm394_base_device::write_space(uint32_t offset, uint16_t data) } } +READ16_MEMBER(sunplus_gcm394_base_device::speedup_hack_r) +{ + u32 const pc = this->pc(); + + if (pc == m_speedup_pc) + this->spin_until_time(this->cycles_to_attotime(2000)); + + return m_mainram[m_speedup_address]; +} + + +void sunplus_gcm394_base_device::install_speedup_hack(int address, int pc) +{ + this->space(AS_PROGRAM).install_read_handler(address, address, read16_delegate(*this, FUNC(sunplus_gcm394_base_device::speedup_hack_r))); + m_speedup_address = address; + m_speedup_pc = pc; +} void sunplus_gcm394_base_device::device_add_mconfig(machine_config &config) diff --git a/src/devices/machine/generalplus_gpl16250soc.h b/src/devices/machine/generalplus_gpl16250soc.h index 14ff23e7d68..aebcecaec9e 100644 --- a/src/devices/machine/generalplus_gpl16250soc.h +++ b/src/devices/machine/generalplus_gpl16250soc.h @@ -34,17 +34,23 @@ public: m_spg_video(*this, "spgvideo"), m_spg_audio(*this, "spgaudio"), m_internalrom(*this, "internal"), + m_mainram(*this, "mainram"), m_porta_in(*this), m_portb_in(*this), m_portc_in(*this), + m_portd_in(*this), m_porta_out(*this), + m_portb_out(*this), + m_portc_out(*this), + m_portd_out(*this), m_nand_read_cb(*this), m_csbase(0x20000), m_romtype(0), m_space_read_cb(*this), m_space_write_cb(*this), m_boot_mode(0), - m_cs_callback(*this, DEVICE_SELF, FUNC(sunplus_gcm394_base_device::default_cs_callback)) + m_cs_callback(*this, DEVICE_SELF, FUNC(sunplus_gcm394_base_device::default_cs_callback)), + m_speedup_address(-1) { } @@ -53,8 +59,12 @@ public: auto porta_in() { return m_porta_in.bind(); } auto portb_in() { return m_portb_in.bind(); } auto portc_in() { return m_portc_in.bind(); } + auto portd_in() { return m_portd_in.bind(); } auto porta_out() { return m_porta_out.bind(); } + auto portb_out() { return m_portb_out.bind(); } + auto portc_out() { return m_portc_out.bind(); } + auto portd_out() { return m_portd_out.bind(); } auto space_read_callback() { return m_space_read_cb.bind(); } auto space_write_callback() { return m_space_write_cb.bind(); } @@ -80,6 +90,8 @@ public: void set_romtype(int romtype) { m_romtype = romtype; } + void install_speedup_hack(int address, int pc); + protected: virtual void device_start() override; @@ -94,12 +106,17 @@ protected: required_device m_spg_video; required_device m_spg_audio; optional_memory_region m_internalrom; + required_shared_ptr m_mainram; devcb_read16 m_porta_in; devcb_read16 m_portb_in; devcb_read16 m_portc_in; + devcb_read16 m_portd_in; devcb_write16 m_porta_out; + devcb_write16 m_portb_out; + devcb_write16 m_portc_out; + devcb_write16 m_portd_out; uint16_t m_dma_params[8][4]; @@ -132,12 +149,16 @@ protected: uint16_t m_786a_portb_direction; uint16_t m_786b_portb_attribute; + uint16_t m_7872_portc_direction; + uint16_t m_7873_portc_attribute; + + uint16_t m_787a_portd_direction; + uint16_t m_787b_portd_attribute; + uint16_t m_7870; //uint16_t m_7871; - uint16_t m_7872_portc_direction; - uint16_t m_7873_portc_attribute; uint16_t m_7882; uint16_t m_7883; @@ -230,6 +251,9 @@ private: DECLARE_WRITE16_MEMBER(unkarea_7835_w); + DECLARE_READ16_MEMBER(unkarea_782d_r); + DECLARE_WRITE16_MEMBER(unkarea_782d_w); + // Port A DECLARE_READ16_MEMBER(ioarea_7860_porta_r); DECLARE_WRITE16_MEMBER(ioarea_7860_porta_w); @@ -250,21 +274,26 @@ private: DECLARE_READ16_MEMBER(ioarea_786b_portb_attribute_r); DECLARE_WRITE16_MEMBER(ioarea_786b_portb_attribute_w); - DECLARE_READ16_MEMBER(unkarea_782d_r); - DECLARE_WRITE16_MEMBER(unkarea_782d_w); - - - + // Port C DECLARE_READ16_MEMBER(ioarea_7870_portc_r); DECLARE_WRITE16_MEMBER(ioarea_7870_portc_w); - DECLARE_READ16_MEMBER(ioarea_7871_portc_buffer_r); - + DECLARE_WRITE16_MEMBER(ioarea_7871_portc_buffer_w); DECLARE_READ16_MEMBER(ioarea_7872_portc_direction_r); DECLARE_WRITE16_MEMBER(ioarea_7872_portc_direction_w); DECLARE_READ16_MEMBER(ioarea_7873_portc_attribute_r); DECLARE_WRITE16_MEMBER(ioarea_7873_portc_attribute_w); + // Port D + DECLARE_READ16_MEMBER(ioarea_7878_portd_r); + DECLARE_WRITE16_MEMBER(ioarea_7878_portd_w); + DECLARE_READ16_MEMBER(ioarea_7879_portd_buffer_r); + DECLARE_WRITE16_MEMBER(ioarea_7879_portd_buffer_w); + DECLARE_READ16_MEMBER(ioarea_787a_portd_direction_r); + DECLARE_WRITE16_MEMBER(ioarea_787a_portd_direction_w); + DECLARE_READ16_MEMBER(ioarea_787b_portd_attribute_r); + DECLARE_WRITE16_MEMBER(ioarea_787b_portd_attribute_w); + DECLARE_READ16_MEMBER(unkarea_7882_r); DECLARE_WRITE16_MEMBER(unkarea_7882_w); DECLARE_READ16_MEMBER(unkarea_7883_r); @@ -330,6 +359,10 @@ private: // config registers (external pins) int m_boot_mode; // 2 pins determine boot mode, likely only read at power-on sunplus_gcm394_cs_callback_device m_cs_callback; + + DECLARE_READ16_MEMBER(speedup_hack_r); + int m_speedup_address; + int m_speedup_pc; }; diff --git a/src/devices/machine/generalplus_gpl16250soc_video.cpp b/src/devices/machine/generalplus_gpl16250soc_video.cpp index df8cf363e17..c14462d19a6 100644 --- a/src/devices/machine/generalplus_gpl16250soc_video.cpp +++ b/src/devices/machine/generalplus_gpl16250soc_video.cpp @@ -870,7 +870,7 @@ void gcm394_base_video_device::draw_sprite(const rectangle& cliprect, uint32_t s uint32_t palette_offset; // different attribute use? - if (addressing_mode == 0) // smartfp, paccon + if (screenwidth == 320) { flip_x = (attr & TILE_X_FLIP); bpp = attr & 0x0003; @@ -879,9 +879,9 @@ void gcm394_base_video_device::draw_sprite(const rectangle& cliprect, uint32_t s } else { - flip_x = 0;// (attr & TILE_X_FLIP); // wrlshunt, jak_totm, jak_s550 do not want this to be flip bit, gormiti does. also configurable, or error in spriteram content? + flip_x = 0;// (attr & TILE_X_FLIP); bpp = attr & 0x0003; - yflipmask = 0;// attr& TILE_Y_FLIP ? h - 1 : 0; // see flipx comment + yflipmask = 0;// attr& TILE_Y_FLIP ? h - 1 : 0; palette_offset = (attr & 0x0f00) >> 4; } diff --git a/src/mame/drivers/generalplus_gpl16250_rom.cpp b/src/mame/drivers/generalplus_gpl16250_rom.cpp index 3d195217492..3af7ecb0b82 100644 --- a/src/mame/drivers/generalplus_gpl16250_rom.cpp +++ b/src/mame/drivers/generalplus_gpl16250_rom.cpp @@ -329,7 +329,7 @@ static INPUT_PORTS_START( tkmag220 ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_START("IN2") - PORT_DIPNAME( 0x0001, 0x0001, "IN2" ) + PORT_DIPNAME( 0x0001, 0x0001, "IN2" ) // set 0x0001 and 0x0002 on to get a test mode (some of the ROM banks fail their test, but dumps were repeatable, should be verified on another unit) PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) @@ -344,27 +344,13 @@ static INPUT_PORTS_START( tkmag220 ) PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Menu") PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -410,7 +396,7 @@ ROM_START( tkmag220 ) //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "u1g-2a.u2", 0x0000000, 0x8000000, CRC(0fd769a1) SHA1(df19402bcd20075483d63fb98fb3fa42bd33ccfd) ) + ROM_LOAD16_WORD_SWAP( "u1g-2a.u2", 0x0000000, 0x8000000, BAD_DUMP CRC(0fd769a1) SHA1(df19402bcd20075483d63fb98fb3fa42bd33ccfd) ) // several sections of ROM appear to be erased, and fails ROM test, some games have missing graphics pulling from those areas, others crash due to missing code ROM_END @@ -422,8 +408,28 @@ void tkmag220_game_state::tkmag220(machine_config &config) m_maincpu->porta_in().set_ioport("IN0"); m_maincpu->portb_in().set_ioport("IN1"); m_maincpu->portc_in().set_ioport("IN2"); + + m_maincpu->portd_out().set(FUNC(tkmag220_game_state::tkmag220_portd_w)); } +void tkmag220_game_state::tkmag220_portd_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + if (m_maincpu->pc() < 0x10000) + { + logerror("%s: port write %04x\n", machine().describe_context().c_str(), data); + + int newbank = 0; + + if (data & 0x8000) newbank |= 1; + if (data & 0x0002) newbank |= 2; + if (data & 0x0004) newbank |= 4; + + m_upperbase = newbank * (0x1000000 / 2); + } + +} + + READ16_MEMBER(tkmag220_game_state::cs0_r) { // [:] installing cs0 handler start_address 00000000 end_address 007fffff @@ -442,7 +448,6 @@ void tkmag220_game_state::machine_reset() m_maincpu->set_pal_sprites_hack(0x000); m_maincpu->set_pal_back_hack(0x000); m_maincpu->set_alt_tile_addressing_hack(1); - } void gormiti_game_state::machine_reset() @@ -451,6 +456,7 @@ void gormiti_game_state::machine_reset() m_maincpu->set_alt_tile_addressing_hack(1); } + // the JAKKS ones of these seem to be known as 'Generalplus GPAC500' hardware? CONS(2009, smartfp, 0, 0, base, smartfp, gcm394_game_state, empty_init, "Fisher-Price", "Fun 2 Learn Smart Fit Park (UK)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) CONS(2009, smartfps, smartfp, 0, base, smartfp, gcm394_game_state, empty_init, "Fisher-Price", "Fun 2 Learn Smart Fit Park (Spain)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) diff --git a/src/mame/drivers/generalplus_gpl16250_romram.cpp b/src/mame/drivers/generalplus_gpl16250_romram.cpp index 0c2ef2d3adc..836e58a777a 100644 --- a/src/mame/drivers/generalplus_gpl16250_romram.cpp +++ b/src/mame/drivers/generalplus_gpl16250_romram.cpp @@ -320,6 +320,11 @@ void lazertag_game_state::machine_reset() m_maincpu->set_pal_sprites_hack(0x800); } +void paccon_game_state::machine_reset() +{ + jak_s500_game_state::machine_reset(); + m_maincpu->install_speedup_hack(0x6593, 0x30033); +} ROM_START( paccon ) @@ -487,8 +492,10 @@ which is also found in the Wireless Air 60 ROM. */ + + // also sold as "Pac-Man Connect & Play 35th Anniversary" (same ROM?) -CONS(2012, paccon, 0, 0, paccon, paccon, jak_s500_game_state, init_wrlshunt, "Bandai", "Pac-Man Connect & Play (Feb 14 2012 10:46:23)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) +CONS(2012, paccon, 0, 0, paccon, paccon, paccon_game_state, init_wrlshunt, "Bandai", "Pac-Man Connect & Play (Feb 14 2012 10:46:23)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) CONS(2008, lazertag, 0, 0, wrlshunt, jak_s500, lazertag_game_state, init_wrlshunt, "Tiger Electronics", "Lazer Tag Video Game Module", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) diff --git a/src/mame/includes/generalplus_gpl16250.h b/src/mame/includes/generalplus_gpl16250.h index 2137df990c1..18243509602 100644 --- a/src/mame/includes/generalplus_gpl16250.h +++ b/src/mame/includes/generalplus_gpl16250.h @@ -88,27 +88,12 @@ protected: virtual void machine_reset() override; - /* - virtual DECLARE_READ16_MEMBER(porta_r) override - { - return machine().rand(); - } - - virtual DECLARE_READ16_MEMBER(portb_r) override - { - return machine().rand(); - } - - virtual DECLARE_WRITE16_MEMBER(porta_w) override - { - } - */ - private: int m_upperbase; virtual DECLARE_READ16_MEMBER(cs0_r) override; + void tkmag220_portd_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); }; diff --git a/src/mame/includes/generalplus_gpl16250_romram.h b/src/mame/includes/generalplus_gpl16250_romram.h index 1f1b25c96ba..4dc8cdfa01e 100644 --- a/src/mame/includes/generalplus_gpl16250_romram.h +++ b/src/mame/includes/generalplus_gpl16250_romram.h @@ -85,6 +85,21 @@ private: }; +class paccon_game_state : public jak_s500_game_state +{ +public: + paccon_game_state(const machine_config& mconfig, device_type type, const char* tag) : + jak_s500_game_state(mconfig, type, tag) + { + } + +protected: + //virtual void machine_start() override; + virtual void machine_reset() override; + +private: +}; + #endif // MAME_INCLUDES_GENERALPLUS_GPL16250_ROMRAM_H