Merge remote-tracking branch 'origin/master'

This commit is contained in:
Ivan Vangelista 2020-03-13 19:30:55 +01:00
commit 1bb63a68bf
3 changed files with 120 additions and 37 deletions

View File

@ -100,11 +100,58 @@ void tlcs90_device::tmp91641_mem(address_map &map)
tmp90840_regs(map); tmp90840_regs(map);
} }
void tlcs90_device::tmp90844_regs(address_map &map)
{
map(0xffc0, 0xfff7).rw(FUNC(tlcs90_device::reserved_r), FUNC(tlcs90_device::reserved_w));
//map(0xffc0, 0xffc0).rw(FUNC(tlcs90_device::p0_r), FUNC(tlcs90_device::p0_w));
//map(0xffc1, 0xffc1).w(FUNC(tlcs90_device::p0cr_w));
//map(0xffc2, 0xffc2).rw(FUNC(tlcs90_device::p1_r), FUNC(tlcs90_device::p1_w));
//map(0xffc3, 0xffc3).w(FUNC(tlcs90_device::p1cr_w));
//map(0xffc4, 0xffc4).rw(FUNC(tlcs90_device::p2_r), FUNC(tlcs90_device::p2_w));
//map(0xffc5, 0xffc5).w(FUNC(tlcs90_device::p2cr_w));
map(0xffc6, 0xffc6).rw(FUNC(tlcs90_device::p3_r), FUNC(tlcs90_device::p3_w));
//map(0xffc7, 0xffc7).w(FUNC(tlcs90_device::p3cr_w));
map(0xffc8, 0xffc8).rw(FUNC(tlcs90_device::p4_r), FUNC(tlcs90_device::p4_w));
//map(0xffc9, 0xffc9).w(FUNC(tlcs90_device::p4cr_w));
map(0xffca, 0xffca).r(FUNC(tlcs90_device::p5_r)) /*w(FUNC(tlcs90_device::p5_w))*/;
map(0xffcb, 0xffcb).rw(FUNC(tlcs90_device::p6_r), FUNC(tlcs90_device::p6_w));
map(0xffcc, 0xffcc).rw(FUNC(tlcs90_device::p7_r), FUNC(tlcs90_device::p7_w));
map(0xffcd, 0xffcd).w(FUNC(tlcs90_device::p67cr_w));
//map(0xffce, 0xffce).rw(FUNC(tlcs90_device::p23fr_r), FUNC(tlcs90_device::p23fr_w));
//map(0xffcf, 0xffcf).rw(FUNC(tlcs90_device::p4fr_r), FUNC(tlcs90_device::p4fr_w));
//map(0xffd0, 0xffd0).rw(FUNC(tlcs90_device::p67fr_r), FUNC(tlcs90_device::p67fr_w));
//map(0xffd1, 0xffd1).rw(FUNC(tlcs90_device::p25fr_r), FUNC(tlcs90_device::p25fr_w));
//map(0xffd2, 0xffd2).rw(FUNC(tlcs90_device::wdmod_r), FUNC(tlcs90_device::wdmod_w));
//map(0xffd3, 0xffd3).w(FUNC(tlcs90_device::wdcr_w));
map(0xffd4, 0xffd7).w(FUNC(tlcs90_device::treg_8bit_w));
map(0xffd8, 0xffd8).rw(FUNC(tlcs90_device::t01mod_r), FUNC(tlcs90_device::t01mod_w));
map(0xffd9, 0xffd9).rw(FUNC(tlcs90_device::t23mod_r), FUNC(tlcs90_device::t23mod_w));
//map(0xffda, 0xffda).rw(FUNC(tlcs90_device::tffcr_r), FUNC(tlcs90_device::tffcr_w));
//map(0xffdb, 0xffdb).rw(FUNC(tlcs90_device::trdc_r), FUNC(tlcs90_device::trdc_w));
map(0xffdc, 0xffdc).rw(FUNC(tlcs90_device::trun_r), FUNC(tlcs90_device::trun_w));
map(0xffe0, 0xffe3). /*r(FUNC(tlcs90_device::cap_16bit_r)).*/ w(FUNC(tlcs90_device::treg_16bit_w));
map(0xffe4, 0xffe4).rw(FUNC(tlcs90_device::t4mod_r), FUNC(tlcs90_device::t4mod_w));
//map(0xffe5, 0xffe5).rw(FUNC(tlcs90_device::t4ffcr_r), FUNC(tlcs90_device::t4ffcr_w));
//map(0xffe6, 0xffe6).rw(FUNC(tlcs90_device::scmod_r), FUNC(tlcs90_device::scmod_w));
//map(0xffe7, 0xffe7).rw(FUNC(tlcs90_device::sccr_r), FUNC(tlcs90_device::sccr_w));
//map(0xffe8, 0xffe8).rw(FUNC(tlcs90_device::scbuf_r), FUNC(tlcs90_device::scbuf_w));
//map(0xffe9, 0xffe9).rw(FUNC(tlcs90_device::brgcr_r), FUNC(tlcs90_device::brgcr_w));
map(0xffea, 0xffea). /*r(FUNC(tlcs90_device::irfl_r).*/ w(FUNC(tlcs90_device::irf_clear_w));
//map(0xffeb, 0xffeb).rw(FUNC(tlcs90_device::irfh_r), FUNC(tlcs90_device::p1fr_w));
//map(0xffef, 0xffef).rw(FUNC(tlcs90_device::status_r), FUNC(tlcs90_device::status_w));
//map(0xffef, 0xffef).rw(FUNC(tlcs90_device::admod_r), FUNC(tlcs90_device::admod_w));
//map(0xfff0, 0xfff3).r(FUNC(tlcs90_device::adreg_r));
map(0xfff4, 0xfff4). /*r(FUNC(tlcs90_device::intel_r).*/ w(FUNC(tlcs90_device::intel_w));
map(0xfff5, 0xfff5). /*r(FUNC(tlcs90_device::inteh_r).*/ w(FUNC(tlcs90_device::inteh_w));
//map(0xfff6, 0xfff6).rw(FUNC(tlcs90_device::dmael_r), FUNC(tlcs90_device::dmael_w));
//map(0xfff7, 0xfff7).rw(FUNC(tlcs90_device::dmaeh_r), FUNC(tlcs90_device::dmaeh_w));
}
void tlcs90_device::tmp90ph44_mem(address_map &map) void tlcs90_device::tmp90ph44_mem(address_map &map)
{ {
map(0x0000, 0x3fff).rom(); // 16KB PROM (internal) map(0x0000, 0x3fff).rom(); // 16KB PROM (internal)
map(0xfdc0, 0xffbf).ram(); // 512b RAM (internal) map(0xfdc0, 0xffbf).ram(); // 512b RAM (internal)
tmp90840_regs(map); // TODO: has 8 more registers tmp90844_regs(map);
} }
@ -2486,6 +2533,28 @@ void tlcs90_device::tclk_w(uint8_t data)
m_tclk = data; m_tclk = data;
} }
uint8_t tlcs90_device::t01mod_r()
{
return (m_tmod & 0x0f) << 4 | (m_tclk & 0x0f);
}
void tlcs90_device::t01mod_w(uint8_t data)
{
m_tmod = (m_tmod & 0xf0) | (data & 0xf0) >> 4;
m_tclk = (m_tclk & 0xf0) | (data & 0x0f);
}
uint8_t tlcs90_device::t23mod_r()
{
return (m_tmod & 0xf0) | (m_tclk & 0xf0) >> 4;
}
void tlcs90_device::t23mod_w(uint8_t data)
{
m_tmod = (data & 0xf0) | (m_tmod & 0x0f);
m_tclk = (data & 0x0f) << 4 | (m_tclk & 0x0f);
}
void tlcs90_device::treg_8bit_w(offs_t offset, uint8_t data) void tlcs90_device::treg_8bit_w(offs_t offset, uint8_t data)
{ {
m_treg_8bit[offset] = data; m_treg_8bit[offset] = data;
@ -2602,14 +2671,14 @@ uint8_t tlcs90_device::reserved_r(offs_t offset)
{ {
uint16_t iobase = 0xffc0; uint16_t iobase = 0xffc0;
if (!machine().side_effects_disabled()) if (!machine().side_effects_disabled())
logerror("Read from unimplemented SFR at %04X\n", iobase + offset); logerror("%04X: Read from unimplemented SFR at %04X\n", m_pc.w.l, iobase + offset);
return 0; return 0;
} }
void tlcs90_device::reserved_w(offs_t offset, uint8_t data) void tlcs90_device::reserved_w(offs_t offset, uint8_t data)
{ {
uint16_t iobase = 0xffc0; uint16_t iobase = 0xffc0;
logerror("Write to unimplemented SFR at %04X\n", iobase + offset); logerror("%04X: Write %02X to unimplemented SFR at %04X\n", m_pc.w.l, data, iobase + offset);
} }
void tlcs90_device::t90_start_timer(int i) void tlcs90_device::t90_start_timer(int i)

View File

@ -20,6 +20,7 @@ protected:
void tmp90840_regs(address_map &map); void tmp90840_regs(address_map &map);
void tmp90840_mem(address_map &map); void tmp90840_mem(address_map &map);
void tmp90841_mem(address_map &map); void tmp90841_mem(address_map &map);
void tmp90844_regs(address_map &map);
void tmp90ph44_mem(address_map &map); void tmp90ph44_mem(address_map &map);
void tmp91640_mem(address_map &map); void tmp91640_mem(address_map &map);
void tmp91641_mem(address_map &map); void tmp91641_mem(address_map &map);
@ -76,6 +77,10 @@ protected:
void tmod_w(uint8_t data); void tmod_w(uint8_t data);
uint8_t tclk_r(); uint8_t tclk_r();
void tclk_w(uint8_t data); void tclk_w(uint8_t data);
uint8_t t01mod_r();
void t01mod_w(uint8_t data);
uint8_t t23mod_r();
void t23mod_w(uint8_t data);
void treg_8bit_w(offs_t offset, uint8_t data); void treg_8bit_w(offs_t offset, uint8_t data);
uint8_t t4mod_r(); uint8_t t4mod_r();
void t4mod_w(uint8_t data); void t4mod_w(uint8_t data);

View File

@ -956,6 +956,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( cupsoc ) static INPUT_PORTS_START( cupsoc )
// p3 and p4 inputs are routed thru two 10-pins on lower-left of PCB
// TODO: dip-conditional with coin slots // TODO: dip-conditional with coin slots
// SEIBU_COIN_INPUTS override // SEIBU_COIN_INPUTS override
PORT_START("COIN") PORT_START("COIN")
@ -974,8 +975,10 @@ static INPUT_PORTS_START( cupsoc )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) //TEST PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) //TEST
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x00f0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x00f0, IP_ACTIVE_LOW, IPT_UNUSED )
// 9-10 of p4 connector
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START3 ) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START4 ) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START4 )
// 9-10 of p3 presumably routes anywhere on following (GND on manuals)
PORT_BIT( 0xfc00, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0xfc00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("PLAYERS12") PORT_START("PLAYERS12")
@ -983,39 +986,42 @@ static INPUT_PORTS_START( cupsoc )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Shoot")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Pass")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Unused (Debug)")
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Shoot")
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Pass")
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Unused (Debug)")
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("PLAYERS34") PORT_START("PLAYERS34")
// 1-8 p3 connector
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_NAME("P3 Shoot")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_NAME("P3 Pass")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) PORT_NAME("P3 Unused (Debug)")
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN3 ) // p3 coin slot PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN3 ) // p3 coin slot
// 1-8 p4 connector
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) PORT_NAME("P4 Shoot")
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) PORT_NAME("P4 Pass")
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_NAME("P4 Unused (Debug)")
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN4 ) // p4 coin slot PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN4 ) // p4 coin slot
// manuals confirms all OFF as default setting
PORT_START("DSW1") PORT_START("DSW1")
PORT_DIPNAME( 0x0007, 0x0007, "Coin 1 (3)" ) PORT_DIPNAME( 0x0007, 0x0007, "Coin 1 (3)" ) PORT_DIPLOCATION("SW1:1,2,3")
PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0001, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0001, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) )
@ -1024,7 +1030,7 @@ static INPUT_PORTS_START( cupsoc )
PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0003, DEF_STR( 1C_6C ) ) PORT_DIPSETTING( 0x0003, DEF_STR( 1C_6C ) )
PORT_DIPNAME( 0x0038, 0x0038, "Coin 2 (4)" ) PORT_DIPNAME( 0x0038, 0x0038, "Coin 2 (4)" ) PORT_DIPLOCATION("SW1:4,5,6")
PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) )
@ -1033,60 +1039,59 @@ static INPUT_PORTS_START( cupsoc )
PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0020, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x0020, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0018, DEF_STR( 1C_6C ) ) PORT_DIPSETTING( 0x0018, DEF_STR( 1C_6C ) )
PORT_DIPNAME( 0x0040, 0x0040, "Staring Coin" ) PORT_DIPNAME( 0x0040, 0x0040, "Starting Coin" ) PORT_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x0040, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0000, "x2" ) PORT_DIPSETTING( 0x0000, "x2" )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0300, 0x0300, "Time vs Computer" ) PORT_DIPNAME( 0x0300, 0x0300, "Time vs Computer, 1 Player" ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x0200, "1:30" ) PORT_DIPSETTING( 0x0200, "1:30" )
PORT_DIPSETTING( 0x0300, "2:00" ) PORT_DIPSETTING( 0x0300, "2:00" )
PORT_DIPSETTING( 0x0100, "2:30" ) PORT_DIPSETTING( 0x0100, "2:30" )
PORT_DIPSETTING( 0x0000, "3:00" ) PORT_DIPSETTING( 0x0000, "3:00" )
PORT_DIPNAME( 0x0c00, 0x0c00, "Time vs Player, 2 Players" ) // the duplicate settings of following three aren't actually documented in manual
// tested 2p/4p via stopwatch, matches 2min and 3min of effective time.
PORT_DIPNAME( 0x0c00, 0x0c00, "Time Player vs Player, 2 Players" ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0800, "2:00" ) PORT_DIPSETTING( 0x0800, "2:00" )
PORT_DIPSETTING( 0x0c00, "2:30" ) PORT_DIPSETTING( 0x0c00, "2:30" )
PORT_DIPSETTING( 0x0400, "3:00" ) PORT_DIPSETTING( 0x0400, "3:00" )
PORT_DIPSETTING( 0x0000, "x:xx" ) PORT_DIPSETTING( 0x0000, "2:00 (duplicate)" )
PORT_DIPNAME( 0x3000, 0x3000, "Time vs Player, 3 Players" ) PORT_DIPNAME( 0x3000, 0x3000, "Time Player vs Player, 3 Players" ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x2000, "2:30" ) PORT_DIPSETTING( 0x2000, "2:30" )
PORT_DIPSETTING( 0x3000, "3:00" ) PORT_DIPSETTING( 0x3000, "3:00" )
PORT_DIPSETTING( 0x1000, "3:30" ) PORT_DIPSETTING( 0x1000, "3:30" )
PORT_DIPSETTING( 0x0000, "x:xx" ) PORT_DIPSETTING( 0x0000, "2:30 (duplicate)" )
PORT_DIPNAME( 0xc000, 0xc000, "Time vs Player, 4 Players" ) PORT_DIPNAME( 0xc000, 0xc000, "Time Player vs Player, 4 Players" ) PORT_DIPLOCATION("SW2:7,8")
PORT_DIPSETTING( 0x8000, "3:00" ) PORT_DIPSETTING( 0x8000, "3:00" )
PORT_DIPSETTING( 0xc000, "3:30" ) PORT_DIPSETTING( 0xc000, "3:30" )
PORT_DIPSETTING( 0x4000, "4:00" ) PORT_DIPSETTING( 0x4000, "4:00" )
PORT_DIPSETTING( 0x0000, "x:xx" ) PORT_DIPSETTING( 0x0000, "3:00 (duplicate)" )
PORT_START("DSW2") PORT_START("DSW2")
PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW3:1,2")
PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x000c, 0x0000, "Players / Coin Mode" ) PORT_DIPNAME( 0x000c, 0x000c, "Cabinet Setting" ) PORT_DIPLOCATION("SW3:3,4")
PORT_DIPSETTING( 0x0000, "4 Players / 1 Coin Slot" ) PORT_DIPSETTING( 0x0000, "4 Players / 1 Coin Slot" )
PORT_DIPSETTING( 0x0004, "4 Players / 4 Coin Slots" ) PORT_DIPSETTING( 0x0004, "4 Players / 4 Coin Slots" )
PORT_DIPSETTING( 0x0008, "4 Players / 2 Coin Slots" ) PORT_DIPSETTING( 0x0008, "4 Players / 2 Coin Slots" )
PORT_DIPSETTING( 0x000c, "2 Players" ) PORT_DIPSETTING( 0x000c, "2 Players" )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) ) PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW3:5")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) PORT_DIPSETTING( 0x0010, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Service_Mode ) ) PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Service_Mode ) ) PORT_DIPLOCATION("SW3:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW3:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW3:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
// probably not mapped, service lists 3*8 dips PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPNAME( 0xff00, 0xff00, DEF_STR( Unused ) )
PORT_DIPSETTING( 0xff00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END INPUT_PORTS_END
/*****************************************************************************/ /*****************************************************************************/
@ -1445,7 +1450,11 @@ void legionna_state::cupsoc(machine_config &config)
screen.set_refresh_hz(60); screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
screen.set_size(42*8, 36*8); screen.set_size(42*8, 36*8);
screen.set_visarea(0*8, 40*8-1, 0*8, 30*8-1); // TODO: real PCB is a bit more complex,
// it's really 320x256 in-game but with 8px border color on top/bottom.
// Border color is also not pure black but a very dark grey,
// can be seen when throw-in on bottom line occurs.
screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
screen.set_screen_update(FUNC(legionna_state::screen_update_grainbow)); screen.set_screen_update(FUNC(legionna_state::screen_update_grainbow));
screen.set_palette(m_palette); screen.set_palette(m_palette);