mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
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)
This commit is contained in:
parent
e12bbc8cec
commit
a5c2908540
@ -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)
|
||||
|
@ -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<gcm394_video_device> m_spg_video;
|
||||
required_device<sunplus_gcm394_audio_device> m_spg_audio;
|
||||
optional_memory_region m_internalrom;
|
||||
required_shared_ptr<u16> 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;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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);
|
||||
};
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user