mirror of
https://github.com/holub/mame
synced 2025-06-08 05:44:09 +03:00
new WORKING machine
---- Denver (GMP-270CMK2) (Family Sport 200-in-1) [Team Europe, David Haywood]
This commit is contained in:
parent
165a4f4d39
commit
1d9d7a16c5
@ -73,9 +73,26 @@ protected:
|
|||||||
virtual DECLARE_READ16_MEMBER(porta_r) override;
|
virtual DECLARE_READ16_MEMBER(porta_r) override;
|
||||||
virtual DECLARE_READ16_MEMBER(portb_r) override;
|
virtual DECLARE_READ16_MEMBER(portb_r) override;
|
||||||
virtual DECLARE_READ16_MEMBER(portc_r) override;
|
virtual DECLARE_READ16_MEMBER(portc_r) override;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class denver_200in1_state : public mywicodx_state
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
denver_200in1_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||||
|
mywicodx_state(mconfig, type, tag)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
void init_denver();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void machine_reset() override;
|
||||||
|
|
||||||
|
virtual DECLARE_READ16_MEMBER(porta_r) override;
|
||||||
|
virtual DECLARE_READ16_MEMBER(portb_r) override;
|
||||||
|
virtual DECLARE_READ16_MEMBER(portc_r) override;
|
||||||
|
|
||||||
|
virtual DECLARE_WRITE16_MEMBER(porta_w) override;
|
||||||
|
};
|
||||||
|
|
||||||
void zon32bit_state::device_post_load()
|
void zon32bit_state::device_post_load()
|
||||||
{
|
{
|
||||||
@ -144,6 +161,7 @@ WRITE16_MEMBER(mywicodx_state::porta_w)
|
|||||||
(mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x',
|
(mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x',
|
||||||
(mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x');
|
(mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x');
|
||||||
|
|
||||||
|
|
||||||
m_porta_dat = data;
|
m_porta_dat = data;
|
||||||
|
|
||||||
int oldbank = m_basebank;
|
int oldbank = m_basebank;
|
||||||
@ -166,6 +184,80 @@ WRITE16_MEMBER(mywicodx_state::porta_w)
|
|||||||
|
|
||||||
if (oldbank != m_basebank)
|
if (oldbank != m_basebank)
|
||||||
m_maincpu->invalidate_cache();
|
m_maincpu->invalidate_cache();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE16_MEMBER(denver_200in1_state::porta_w)
|
||||||
|
{
|
||||||
|
if (0)
|
||||||
|
{
|
||||||
|
if (m_maincpu->pc() < 0x10000)
|
||||||
|
{
|
||||||
|
logerror("%s: porta_w %04x (%04x) %c %c %c %c | %c %c %c %c | %c %c %c %c | %c %c %c %c \n", machine().describe_context(), data, mem_mask,
|
||||||
|
(mem_mask & 0x8000) ? ((data & 0x8000) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x4000) ? ((data & 0x4000) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x2000) ? ((data & 0x2000) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x1000) ? ((data & 0x1000) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x0800) ? ((data & 0x0800) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x0400) ? ((data & 0x0400) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x0200) ? ((data & 0x0200) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x0100) ? ((data & 0x0100) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x0080) ? ((data & 0x0080) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x0040) ? ((data & 0x0040) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x0020) ? ((data & 0x0020) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x0010) ? ((data & 0x0010) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x0008) ? ((data & 0x0008) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x0004) ? ((data & 0x0004) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x',
|
||||||
|
(mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_maincpu->pc() < 0x10000)
|
||||||
|
{
|
||||||
|
int oldbank = m_basebank;
|
||||||
|
|
||||||
|
if (mem_mask & 0x0200)
|
||||||
|
{
|
||||||
|
if (data & 0x0200)
|
||||||
|
{
|
||||||
|
m_basebank |= 4;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_basebank &= ~4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mem_mask & 0x0400)
|
||||||
|
{
|
||||||
|
if (data & 0x0400)
|
||||||
|
{
|
||||||
|
m_basebank |= 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_basebank &= ~1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mem_mask & 0x0800)
|
||||||
|
{
|
||||||
|
if (data & 0x0800)
|
||||||
|
{
|
||||||
|
m_basebank |= 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_basebank &= ~2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oldbank != m_basebank)
|
||||||
|
m_maincpu->invalidate_cache();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -275,6 +367,7 @@ READ16_MEMBER(zon32bit_state::z32_rom_r)
|
|||||||
|
|
||||||
int base = 0x0000000;
|
int base = 0x0000000;
|
||||||
|
|
||||||
|
if (m_basebank & 4) base |= 0x4000000;
|
||||||
if (m_basebank & 2) base |= 0x2000000;
|
if (m_basebank & 2) base |= 0x2000000;
|
||||||
if (m_basebank & 1) base |= 0x1000000;
|
if (m_basebank & 1) base |= 0x1000000;
|
||||||
|
|
||||||
@ -295,6 +388,22 @@ READ16_MEMBER(zon32bit_state::z32_rom_r)
|
|||||||
return 0x0000;// m_romregion[offset];
|
return 0x0000;// m_romregion[offset];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
READ16_MEMBER(denver_200in1_state::portc_r)
|
||||||
|
{
|
||||||
|
return m_io_p3->read();
|
||||||
|
}
|
||||||
|
|
||||||
|
READ16_MEMBER(denver_200in1_state::portb_r)
|
||||||
|
{
|
||||||
|
return m_io_p2->read();
|
||||||
|
}
|
||||||
|
|
||||||
|
READ16_MEMBER(denver_200in1_state::porta_r)
|
||||||
|
{
|
||||||
|
return 0x0ff8 | (machine().rand()&1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void zon32bit_state::machine_start()
|
void zon32bit_state::machine_start()
|
||||||
{
|
{
|
||||||
spg2xx_game_state::machine_start();
|
spg2xx_game_state::machine_start();
|
||||||
@ -326,6 +435,14 @@ void mywicodx_state::machine_reset()
|
|||||||
m_maincpu->invalidate_cache();
|
m_maincpu->invalidate_cache();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void denver_200in1_state::machine_reset()
|
||||||
|
{
|
||||||
|
zon32bit_state::machine_reset();
|
||||||
|
m_basebank = 6;
|
||||||
|
m_maincpu->invalidate_cache();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static INPUT_PORTS_START( zon32bit )
|
static INPUT_PORTS_START( zon32bit )
|
||||||
PORT_START("P1")
|
PORT_START("P1")
|
||||||
@ -655,6 +772,13 @@ ROM_START( oplayer )
|
|||||||
ROM_LOAD16_WORD_SWAP( "oplayer.bin", 0x0000000, 0x4000000, CRC(aa09c358) SHA1(df2855cdfdf2b693636cace8768e579b9d5bc657) )
|
ROM_LOAD16_WORD_SWAP( "oplayer.bin", 0x0000000, 0x4000000, CRC(aa09c358) SHA1(df2855cdfdf2b693636cace8768e579b9d5bc657) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
ROM_START( dnv200fs )
|
||||||
|
ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 )
|
||||||
|
ROM_LOAD16_WORD_SWAP( "famsport200in1.u2", 0x0000000, 0x8000000, CRC(f59221e2) SHA1(d532cf5a80ffe9d527efcccbf380a7a860f0fbd9) )
|
||||||
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void oplayer_100in1_state::init_oplayer()
|
void oplayer_100in1_state::init_oplayer()
|
||||||
{
|
{
|
||||||
@ -671,6 +795,24 @@ void oplayer_100in1_state::init_oplayer()
|
|||||||
rom[0xc351e + (0x3000000 / 2)] = 0xf165;
|
rom[0xc351e + (0x3000000 / 2)] = 0xf165;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void denver_200in1_state::init_denver()
|
||||||
|
{
|
||||||
|
// TODO: remove these hacks
|
||||||
|
|
||||||
|
// patch checks when booting each bank, similar to oplayer
|
||||||
|
uint16_t* rom = (uint16_t*)memregion("maincpu")->base();
|
||||||
|
rom[0x175f7 + (0x0000000 / 2)] = 0xf165;
|
||||||
|
rom[0x18f47 + (0x1000000 / 2)] = 0xf165;
|
||||||
|
rom[0x33488 + (0x2000000 / 2)] = 0xf165;
|
||||||
|
rom[0x87f81 + (0x3000000 / 2)] = 0xf165;
|
||||||
|
rom[0x764d9 + (0x4000000 / 2)] = 0xf165;
|
||||||
|
rom[0xb454e + (0x5000000 / 2)] = 0xf165;
|
||||||
|
rom[0x43c30 + (0x6000000 / 2)] = 0xf165; // boot
|
||||||
|
rom[0x1fb00 + (0x7000000 / 2)] = 0xf165;
|
||||||
|
|
||||||
|
// no exit patches required?
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Box advertises this as '40 Games Included' but the cartridge, which was glued directly to the PCB, not removable, is a 41-in-1. Maybe some versions exist with a 40 game selection.
|
// Box advertises this as '40 Games Included' but the cartridge, which was glued directly to the PCB, not removable, is a 41-in-1. Maybe some versions exist with a 40 game selection.
|
||||||
@ -683,3 +825,23 @@ CONS( 200?, mywicodx, 0, 0, zon32bit, zon32bit, mywicodx_state, empty_init,
|
|||||||
// issues with 'low battery' always showing, but otherwise functional
|
// issues with 'low battery' always showing, but otherwise functional
|
||||||
CONS( 200?, oplayer, 0, 0, zon32bit, oplayer, oplayer_100in1_state, init_oplayer, "OPlayer", "OPlayer Mobile Game Console (MGS03-white) (Family Sport 100-in-1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
CONS( 200?, oplayer, 0, 0, zon32bit, oplayer, oplayer_100in1_state, init_oplayer, "OPlayer", "OPlayer Mobile Game Console (MGS03-white) (Family Sport 100-in-1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||||
|
|
||||||
|
/*
|
||||||
|
DENVER(r)
|
||||||
|
|
||||||
|
PO:9075
|
||||||
|
Model: GMP-270CMK2
|
||||||
|
OPERATED BY 3 X AAA-BATTERIES (NOT INCL)
|
||||||
|
OR MINI-USB POWER SOURCE
|
||||||
|
Power consumption:0.6W/hour
|
||||||
|
Standby consumption:0.25mW/hour
|
||||||
|
Imported by:
|
||||||
|
DENVER ELECTRONICS A/S
|
||||||
|
Stavneagervej 22
|
||||||
|
DK-8250 EGAA
|
||||||
|
DENMARK
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
CONS( 200?, dnv200fs, 0, 0, zon32bit, oplayer, denver_200in1_state, init_denver, "Denver", "Denver (GMP-270CMK2) (Family Sport 200-in-1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||||
|
|
||||||
|
|
||||||
|
@ -37467,6 +37467,7 @@ lx_jg7415 //
|
|||||||
mywicodx //
|
mywicodx //
|
||||||
zon32bit // Zone 32-bit
|
zon32bit // Zone 32-bit
|
||||||
oplayer
|
oplayer
|
||||||
|
dnv200fs
|
||||||
|
|
||||||
@source:spiders.cpp
|
@source:spiders.cpp
|
||||||
spiders // (c) 1981 Sigma Ent. Inc.
|
spiders // (c) 1981 Sigma Ent. Inc.
|
||||||
|
Loading…
Reference in New Issue
Block a user