mirror of
https://github.com/holub/mame
synced 2025-07-02 00:29:37 +03:00
New working machines
-------------------- Conquest (prototype) [Code Mystics]
This commit is contained in:
parent
5f712ea702
commit
d823fa71ea
@ -43734,6 +43734,7 @@ bubblesp // (c) 1982
|
|||||||
bubblesr // (c) 1982
|
bubblesr // (c) 1982
|
||||||
colony7 // (c) 1981 Taito
|
colony7 // (c) 1981 Taito
|
||||||
colony7a // (c) 1981 Taito
|
colony7a // (c) 1981 Taito
|
||||||
|
conquest // prototype
|
||||||
defcmnd // bootleg
|
defcmnd // bootleg
|
||||||
defence // bootleg
|
defence // bootleg
|
||||||
defender // (c) 1980
|
defender // (c) 1980
|
||||||
|
@ -552,7 +552,7 @@ void mayday_state::main_map(address_map &map)
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
void williams_state::base_map(address_map &map)
|
void williams_state::main_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x0000, 0xbfff).ram().share("videoram");
|
map(0x0000, 0xbfff).ram().share("videoram");
|
||||||
map(0x0000, 0x8fff).bankr("mainbank");
|
map(0x0000, 0x8fff).bankr("mainbank");
|
||||||
@ -577,25 +577,12 @@ void williams_state::base_map(address_map &map)
|
|||||||
|
|
||||||
void sinistar_state::main_map(address_map &map)
|
void sinistar_state::main_map(address_map &map)
|
||||||
{
|
{
|
||||||
base_map(map);
|
williams_state::main_map(map);
|
||||||
map(0xc900, 0xc9ff).w(FUNC(sinistar_state::vram_select_w));
|
|
||||||
map(0xd000, 0xdfff).ram();
|
map(0xd000, 0xdfff).ram();
|
||||||
map(0xe000, 0xffff).rom();
|
map(0xe000, 0xffff).rom();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
|
||||||
*
|
|
||||||
* Bubbles memory handlers
|
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
void bubbles_state::main_map(address_map &map)
|
|
||||||
{
|
|
||||||
base_map(map);
|
|
||||||
// bubbles has a full 8-bit-wide CMOS
|
|
||||||
map(0xcc00, 0xcfff).w(FUNC(bubbles_state::cmos_w)).share("nvram");
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
@ -605,7 +592,7 @@ void bubbles_state::main_map(address_map &map)
|
|||||||
|
|
||||||
void spdball_state::main_map(address_map &map)
|
void spdball_state::main_map(address_map &map)
|
||||||
{
|
{
|
||||||
base_map(map);
|
williams_state::main_map(map);
|
||||||
// install extra input handlers
|
// install extra input handlers
|
||||||
map(0xc800, 0xc800).portr("AN0");
|
map(0xc800, 0xc800).portr("AN0");
|
||||||
map(0xc801, 0xc801).portr("AN1");
|
map(0xc801, 0xc801).portr("AN1");
|
||||||
@ -678,7 +665,6 @@ void williams2_state::bank8000_map(address_map &map)
|
|||||||
map(0x0800, 0x0fff).ram().w(FUNC(williams2_state::paletteram_w)).share("paletteram");
|
map(0x0800, 0x0fff).ram().w(FUNC(williams2_state::paletteram_w)).share("paletteram");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// mysticm and inferno: D000-DFFF is RAM
|
// mysticm and inferno: D000-DFFF is RAM
|
||||||
void williams_d000_ram_state::d000_map(address_map &map)
|
void williams_d000_ram_state::d000_map(address_map &map)
|
||||||
{
|
{
|
||||||
@ -687,7 +673,6 @@ void williams_d000_ram_state::d000_map(address_map &map)
|
|||||||
map(0xe000, 0xffff).rom();
|
map(0xe000, 0xffff).rom();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// tshoot and joust2: D000-DFFF is ROM
|
// tshoot and joust2: D000-DFFF is ROM
|
||||||
void williams_d000_rom_state::d000_map(address_map &map)
|
void williams_d000_rom_state::d000_map(address_map &map)
|
||||||
{
|
{
|
||||||
@ -705,7 +690,7 @@ void williams_d000_rom_state::d000_map(address_map &map)
|
|||||||
|
|
||||||
void defender_state::sound_map(address_map &map)
|
void defender_state::sound_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x0000, 0x007f).ram(); // internal RAM
|
map(0x0000, 0x007f).ram(); // internal RAM
|
||||||
map(0x0400, 0x0403).mirror(0x8000).rw(m_pia[2], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
|
map(0x0400, 0x0403).mirror(0x8000).rw(m_pia[2], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
|
||||||
map(0xb000, 0xffff).rom();
|
map(0xb000, 0xffff).rom();
|
||||||
}
|
}
|
||||||
@ -713,8 +698,8 @@ void defender_state::sound_map(address_map &map)
|
|||||||
|
|
||||||
void williams_state::sound_map(address_map &map)
|
void williams_state::sound_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x0000, 0x007f).ram(); // internal RAM
|
map(0x0000, 0x007f).ram(); // internal RAM
|
||||||
map(0x0080, 0x00ff).ram(); // MC6810 RAM
|
map(0x0080, 0x00ff).ram(); // MC6810 RAM
|
||||||
map(0x0400, 0x0403).mirror(0x8000).rw(m_pia[2], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
|
map(0x0400, 0x0403).mirror(0x8000).rw(m_pia[2], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
|
||||||
map(0xb000, 0xffff).rom();
|
map(0xb000, 0xffff).rom();
|
||||||
}
|
}
|
||||||
@ -722,8 +707,8 @@ void williams_state::sound_map(address_map &map)
|
|||||||
/* Same as above, but for second sound board */
|
/* Same as above, but for second sound board */
|
||||||
void blaster_state::sound2_map(address_map &map)
|
void blaster_state::sound2_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x0000, 0x007f).ram(); // internal RAM
|
map(0x0000, 0x007f).ram(); // internal RAM
|
||||||
map(0x0080, 0x00ff).ram(); // MC6810 RAM
|
map(0x0080, 0x00ff).ram(); // MC6810 RAM
|
||||||
map(0x0400, 0x0403).mirror(0x8000).rw(m_pia[3], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
|
map(0x0400, 0x0403).mirror(0x8000).rw(m_pia[3], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
|
||||||
map(0xb000, 0xffff).rom();
|
map(0xb000, 0xffff).rom();
|
||||||
}
|
}
|
||||||
@ -738,8 +723,8 @@ void blaster_state::sound2_map(address_map &map)
|
|||||||
|
|
||||||
void williams2_state::sound_map(address_map &map)
|
void williams2_state::sound_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x0000, 0x007f).ram(); // internal RAM
|
map(0x0000, 0x007f).ram(); // internal RAM
|
||||||
map(0x0080, 0x00ff).ram(); // MC6810 RAM
|
map(0x0080, 0x00ff).ram(); // MC6810 RAM
|
||||||
map(0x2000, 0x2003).mirror(0x1ffc).rw(m_pia[2], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
|
map(0x2000, 0x2003).mirror(0x1ffc).rw(m_pia[2], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
|
||||||
map(0xe000, 0xffff).rom();
|
map(0xe000, 0xffff).rom();
|
||||||
}
|
}
|
||||||
@ -860,10 +845,10 @@ static INPUT_PORTS_START( colony7 )
|
|||||||
PORT_DIPSETTING( 0x02, "30k/50k" ) PORT_CONDITION("IN2",0x01,NOTEQUALS,0x01)
|
PORT_DIPSETTING( 0x02, "30k/50k" ) PORT_CONDITION("IN2",0x01,NOTEQUALS,0x01)
|
||||||
PORT_DIPSETTING( 0x00, "30k/50k" ) PORT_CONDITION("IN2",0x01,EQUALS,0x01)
|
PORT_DIPSETTING( 0x00, "30k/50k" ) PORT_CONDITION("IN2",0x01,EQUALS,0x01)
|
||||||
PORT_DIPSETTING( 0x02, "40k/70k" ) PORT_CONDITION("IN2",0x01,EQUALS,0x01)
|
PORT_DIPSETTING( 0x02, "40k/70k" ) PORT_CONDITION("IN2",0x01,EQUALS,0x01)
|
||||||
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown )) // documented as unused
|
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown )) // documented as unused
|
||||||
PORT_DIPSETTING( 0x04, DEF_STR( Off ))
|
PORT_DIPSETTING( 0x04, DEF_STR( Off ))
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ))
|
PORT_DIPSETTING( 0x00, DEF_STR( On ))
|
||||||
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown )) // documented as unused
|
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown )) // documented as unused
|
||||||
PORT_DIPSETTING( 0x08, DEF_STR( Off ))
|
PORT_DIPSETTING( 0x08, DEF_STR( Off ))
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ))
|
PORT_DIPSETTING( 0x00, DEF_STR( On ))
|
||||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN1 )
|
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN1 )
|
||||||
@ -1055,6 +1040,28 @@ static INPUT_PORTS_START( bubbles )
|
|||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
|
static INPUT_PORTS_START( conquest )
|
||||||
|
PORT_START("IN0")
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Fire")
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Thrust")
|
||||||
|
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(conquest_state, dial1_r)
|
||||||
|
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 )
|
||||||
|
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 )
|
||||||
|
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||||
|
|
||||||
|
PORT_START("IN1")
|
||||||
|
PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(conquest_state, dial0_r)
|
||||||
|
PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||||
|
|
||||||
|
PORT_START("IN2")
|
||||||
|
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||||
|
|
||||||
|
PORT_START("DIAL")
|
||||||
|
PORT_BIT( 0x0f, 0x00, IPT_DIAL ) PORT_SENSITIVITY(10) PORT_KEYDELTA(16) PORT_REVERSE
|
||||||
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
static INPUT_PORTS_START( splat )
|
static INPUT_PORTS_START( splat )
|
||||||
PORT_START("IN0")
|
PORT_START("IN0")
|
||||||
// 0x0f muxed from INP1/INP2
|
// 0x0f muxed from INP1/INP2
|
||||||
@ -1122,10 +1129,10 @@ static INPUT_PORTS_START( sinistar )
|
|||||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT )
|
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT )
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||||
|
|
||||||
PORT_START("49WAYX") // converted by port_0_49way_r()
|
PORT_START("49WAYX") // converted by port_0_49way_r()
|
||||||
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
|
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
|
||||||
|
|
||||||
PORT_START("49WAYY") // converted by port_0_49way_r()
|
PORT_START("49WAYY") // converted by port_0_49way_r()
|
||||||
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_Y ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_REVERSE
|
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_Y ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_REVERSE
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
@ -1184,10 +1191,10 @@ static INPUT_PORTS_START( blaster )
|
|||||||
PORT_START("INP2")
|
PORT_START("INP2")
|
||||||
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
|
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||||
|
|
||||||
PORT_START("49WAYX") // converted by port_0_49way_r()
|
PORT_START("49WAYX") // converted by port_0_49way_r()
|
||||||
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
|
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
|
||||||
|
|
||||||
PORT_START("49WAYY") // converted by port_0_49way_r()
|
PORT_START("49WAYY") // converted by port_0_49way_r()
|
||||||
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_Y ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_REVERSE
|
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_Y ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_REVERSE
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
@ -1210,10 +1217,10 @@ static INPUT_PORTS_START( blastkit )
|
|||||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT )
|
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT )
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||||
|
|
||||||
PORT_START("49WAYX") // converted by port_0_49way_r()
|
PORT_START("49WAYX") // converted by port_0_49way_r()
|
||||||
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
|
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
|
||||||
|
|
||||||
PORT_START("49WAYY") // converted by port_0_49way_r()
|
PORT_START("49WAYY") // converted by port_0_49way_r()
|
||||||
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_Y ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_REVERSE
|
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_Y ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_REVERSE
|
||||||
|
|
||||||
PORT_START("IN3")
|
PORT_START("IN3")
|
||||||
@ -1262,16 +1269,16 @@ static INPUT_PORTS_START( spdball )
|
|||||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START1 )
|
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START1 )
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START2 )
|
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START2 )
|
||||||
|
|
||||||
PORT_START("AN0") // analog
|
PORT_START("AN0") // analog
|
||||||
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_REVERSE PORT_PLAYER(1)
|
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_REVERSE PORT_PLAYER(1)
|
||||||
|
|
||||||
PORT_START("AN1") // analog
|
PORT_START("AN1") // analog
|
||||||
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_PLAYER(1)
|
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_PLAYER(1)
|
||||||
|
|
||||||
PORT_START("AN2") // analog
|
PORT_START("AN2") // analog
|
||||||
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_REVERSE PORT_PLAYER(2)
|
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_REVERSE PORT_PLAYER(2)
|
||||||
|
|
||||||
PORT_START("AN3") // analog
|
PORT_START("AN3") // analog
|
||||||
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_PLAYER(2)
|
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_PLAYER(2)
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
@ -1533,7 +1540,7 @@ void williams_state::williams_base(machine_config &config)
|
|||||||
{
|
{
|
||||||
// basic machine hardware
|
// basic machine hardware
|
||||||
MC6809E(config, m_maincpu, MASTER_CLOCK/3/4);
|
MC6809E(config, m_maincpu, MASTER_CLOCK/3/4);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &williams_state::base_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &williams_state::main_map);
|
||||||
|
|
||||||
M6808(config, m_soundcpu, SOUND_CLOCK); // internal clock divider of 4, effective frequency is 894.886kHz
|
M6808(config, m_soundcpu, SOUND_CLOCK); // internal clock divider of 4, effective frequency is 894.886kHz
|
||||||
m_soundcpu->set_addrmap(AS_PROGRAM, &williams_state::sound_map);
|
m_soundcpu->set_addrmap(AS_PROGRAM, &williams_state::sound_map);
|
||||||
@ -1581,55 +1588,46 @@ void williams_state::williams_base(machine_config &config)
|
|||||||
m_pia[2]->irqb_handler().set("soundirq", FUNC(input_merger_any_high_device::in_w<1>));
|
m_pia[2]->irqb_handler().set("soundirq", FUNC(input_merger_any_high_device::in_w<1>));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void williams_state::williams_b0(machine_config &config)
|
||||||
void defender_state::defender(machine_config &config)
|
|
||||||
{
|
|
||||||
williams_base(config);
|
|
||||||
|
|
||||||
// basic machine hardware
|
|
||||||
|
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &defender_state::main_map);
|
|
||||||
m_soundcpu->set_addrmap(AS_PROGRAM, &defender_state::sound_map);
|
|
||||||
|
|
||||||
ADDRESS_MAP_BANK(config, m_bankc000).set_map(&defender_state::bankc000_map).set_options(ENDIANNESS_BIG, 8, 16, 0x1000);
|
|
||||||
|
|
||||||
m_screen->set_visarea(12, 304-1, 7, 247-1);
|
|
||||||
|
|
||||||
m_blitter_config = WILLIAMS_BLITTER_NONE;
|
|
||||||
m_blitter_clip_address = 0x0000;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void defender_state::jin(machine_config &config) // needs a different screen size or the credit text is clipped
|
|
||||||
{
|
|
||||||
defender(config);
|
|
||||||
// basic machine hardware
|
|
||||||
m_screen->set_visarea(0, 315, 7, 247-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void williams_state::stargate(machine_config &config)
|
|
||||||
{
|
{
|
||||||
williams_base(config);
|
williams_base(config);
|
||||||
m_blitter_config = WILLIAMS_BLITTER_NONE;
|
m_blitter_config = WILLIAMS_BLITTER_NONE;
|
||||||
m_blitter_clip_address = 0x0000;
|
m_blitter_clip_address = 0x0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void williams_state::williams_b1(machine_config &config)
|
||||||
void williams_state::robotron(machine_config &config)
|
|
||||||
{
|
{
|
||||||
williams_base(config);
|
williams_base(config);
|
||||||
m_blitter_config = WILLIAMS_BLITTER_SC1;
|
m_blitter_config = WILLIAMS_BLITTER_SC1;
|
||||||
m_blitter_clip_address = 0xc000;
|
m_blitter_clip_address = 0xc000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void williams_state::williams_b2(machine_config &config)
|
||||||
|
{
|
||||||
|
williams_base(config);
|
||||||
|
m_blitter_config = WILLIAMS_BLITTER_SC2;
|
||||||
|
m_blitter_clip_address = 0xc000;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void defender_state::defender(machine_config &config)
|
||||||
|
{
|
||||||
|
williams_b0(config);
|
||||||
|
|
||||||
|
ADDRESS_MAP_BANK(config, m_bankc000).set_map(&defender_state::bankc000_map).set_options(ENDIANNESS_BIG, 8, 16, 0x1000);
|
||||||
|
m_screen->set_visarea(12, 304-1, 7, 247-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void defender_state::jin(machine_config &config)
|
||||||
|
{
|
||||||
|
defender(config);
|
||||||
|
// needs a different screen size or the credit text is clipped
|
||||||
|
m_screen->set_visarea(0, 315, 7, 247-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void williams_muxed_state::williams_muxed(machine_config &config)
|
void williams_muxed_state::williams_muxed(machine_config &config)
|
||||||
{
|
{
|
||||||
williams_base(config);
|
|
||||||
|
|
||||||
// basic machine hardware
|
|
||||||
|
|
||||||
// pia
|
// pia
|
||||||
m_pia[0]->readpa_handler().set_ioport("IN0").mask(0x30);
|
m_pia[0]->readpa_handler().set_ioport("IN0").mask(0x30);
|
||||||
m_pia[0]->readpa_handler().append("mux_0", FUNC(ls157_device::output_r)).mask(0x0f);
|
m_pia[0]->readpa_handler().append("mux_0", FUNC(ls157_device::output_r)).mask(0x0f);
|
||||||
@ -1648,66 +1646,44 @@ void williams_muxed_state::williams_muxed(machine_config &config)
|
|||||||
m_mux1->b_in_callback().set_ioport("INP1A");
|
m_mux1->b_in_callback().set_ioport("INP1A");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void williams_muxed_state::joust(machine_config &config)
|
void williams_muxed_state::joust(machine_config &config)
|
||||||
{
|
{
|
||||||
|
williams_b1(config);
|
||||||
williams_muxed(config);
|
williams_muxed(config);
|
||||||
m_blitter_config = WILLIAMS_BLITTER_SC1;
|
|
||||||
m_blitter_clip_address = 0xc000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void williams_muxed_state::splat(machine_config &config)
|
void williams_muxed_state::splat(machine_config &config)
|
||||||
{
|
{
|
||||||
|
williams_b2(config);
|
||||||
williams_muxed(config);
|
williams_muxed(config);
|
||||||
m_blitter_config = WILLIAMS_BLITTER_SC2;
|
|
||||||
m_blitter_clip_address = 0xc000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void spdball_state::spdball(machine_config &config)
|
void spdball_state::spdball(machine_config &config)
|
||||||
{
|
{
|
||||||
williams_base(config);
|
williams_b1(config);
|
||||||
|
|
||||||
// basic machine hardware
|
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &spdball_state::main_map);
|
|
||||||
|
|
||||||
// pia
|
// pia
|
||||||
PIA6821(config, m_pia[3], 0);
|
PIA6821(config, m_pia[3], 0);
|
||||||
m_pia[3]->readpa_handler().set_ioport("IN3");
|
m_pia[3]->readpa_handler().set_ioport("IN3");
|
||||||
m_pia[3]->readpb_handler().set_ioport("IN4");
|
m_pia[3]->readpb_handler().set_ioport("IN4");
|
||||||
|
|
||||||
m_blitter_config = WILLIAMS_BLITTER_SC1;
|
|
||||||
m_blitter_clip_address = 0xc000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void williams_state::lottofun(machine_config &config)
|
void williams_state::lottofun(machine_config &config)
|
||||||
{
|
{
|
||||||
williams_base(config);
|
williams_b1(config);
|
||||||
|
|
||||||
// basic machine hardware
|
|
||||||
|
|
||||||
// pia
|
// pia
|
||||||
m_pia[0]->writepa_handler().set("ticket", FUNC(ticket_dispenser_device::motor_w)).bit(7);
|
m_pia[0]->writepa_handler().set("ticket", FUNC(ticket_dispenser_device::motor_w)).bit(7);
|
||||||
m_pia[0]->ca2_handler().set(FUNC(williams_state::lottofun_coin_lock_w));
|
m_pia[0]->ca2_handler().set([this](int state) { machine().bookkeeping().coin_lockout_global_w(state); });
|
||||||
|
|
||||||
TICKET_DISPENSER(config, "ticket", attotime::from_msec(70), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH);
|
TICKET_DISPENSER(config, "ticket", attotime::from_msec(70), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH);
|
||||||
|
|
||||||
m_blitter_config = WILLIAMS_BLITTER_SC1;
|
|
||||||
m_blitter_clip_address = 0xc000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void sinistar_state::sinistar(machine_config &config)
|
void sinistar_state::sinistar(machine_config &config)
|
||||||
{
|
{
|
||||||
williams_base(config);
|
williams_b1(config);
|
||||||
|
m_blitter_clip_address = 0x7400;
|
||||||
// basic machine hardware
|
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &sinistar_state::main_map);
|
|
||||||
|
|
||||||
// sound hardware
|
|
||||||
HC55516(config, "cvsd", 0).add_route(ALL_OUTPUTS, "speaker", 0.8);
|
|
||||||
|
|
||||||
// pia
|
// pia
|
||||||
m_pia[0]->readpa_handler().set(FUNC(williams_state::port_0_49way_r));
|
m_pia[0]->readpa_handler().set(FUNC(williams_state::port_0_49way_r));
|
||||||
@ -1715,28 +1691,13 @@ void sinistar_state::sinistar(machine_config &config)
|
|||||||
m_pia[2]->ca2_handler().set("cvsd", FUNC(hc55516_device::digit_w));
|
m_pia[2]->ca2_handler().set("cvsd", FUNC(hc55516_device::digit_w));
|
||||||
m_pia[2]->cb2_handler().set("cvsd", FUNC(hc55516_device::clock_w));
|
m_pia[2]->cb2_handler().set("cvsd", FUNC(hc55516_device::clock_w));
|
||||||
|
|
||||||
m_blitter_config = WILLIAMS_BLITTER_SC1;
|
// sound hardware
|
||||||
m_blitter_clip_address = 0x7400;
|
HC55516(config, "cvsd", 0).add_route(ALL_OUTPUTS, "speaker", 0.8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void bubbles_state::bubbles(machine_config &config) // has a full 8-bit NVRAM equipped
|
|
||||||
{
|
|
||||||
williams_base(config);
|
|
||||||
|
|
||||||
// basic machine hardware
|
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &bubbles_state::main_map);
|
|
||||||
|
|
||||||
m_blitter_config = WILLIAMS_BLITTER_SC1;
|
|
||||||
m_blitter_clip_address = 0xc000;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void playball_state::playball(machine_config &config)
|
void playball_state::playball(machine_config &config)
|
||||||
{
|
{
|
||||||
williams_base(config);
|
williams_b1(config);
|
||||||
|
|
||||||
// basic machine hardware
|
|
||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
m_screen->set_visarea(6, 298-1, 8, 240-1);
|
m_screen->set_visarea(6, 298-1, 8, 240-1);
|
||||||
@ -1745,22 +1706,15 @@ void playball_state::playball(machine_config &config)
|
|||||||
HC55516(config, "cvsd", 0).add_route(ALL_OUTPUTS, "speaker", 0.8);
|
HC55516(config, "cvsd", 0).add_route(ALL_OUTPUTS, "speaker", 0.8);
|
||||||
|
|
||||||
// pia
|
// pia
|
||||||
m_pia[1]->writepb_handler().set(FUNC(playball_state::snd_cmd_w));
|
|
||||||
|
|
||||||
m_pia[2]->ca2_handler().set("cvsd", FUNC(hc55516_device::digit_w));
|
m_pia[2]->ca2_handler().set("cvsd", FUNC(hc55516_device::digit_w));
|
||||||
m_pia[2]->cb2_handler().set("cvsd", FUNC(hc55516_device::clock_w));
|
m_pia[2]->cb2_handler().set("cvsd", FUNC(hc55516_device::clock_w));
|
||||||
|
|
||||||
m_blitter_config = WILLIAMS_BLITTER_SC1;
|
|
||||||
m_blitter_clip_address = 0xc000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void blaster_state::blastkit(machine_config &config)
|
void blaster_state::blastkit(machine_config &config)
|
||||||
{
|
{
|
||||||
williams_base(config);
|
williams_b2(config);
|
||||||
|
m_blitter_clip_address = 0x9700;
|
||||||
// basic machine hardware
|
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &blaster_state::main_map);
|
|
||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
m_screen->set_screen_update(FUNC(blaster_state::screen_update));
|
m_screen->set_screen_update(FUNC(blaster_state::screen_update));
|
||||||
@ -1770,16 +1724,11 @@ void blaster_state::blastkit(machine_config &config)
|
|||||||
m_pia[0]->cb2_handler().set("mux_a", FUNC(ls157_x2_device::select_w));
|
m_pia[0]->cb2_handler().set("mux_a", FUNC(ls157_x2_device::select_w));
|
||||||
|
|
||||||
// All multiplexers on Blaster interface board are really LS257 with OC tied to GND (which is equivalent to LS157)
|
// All multiplexers on Blaster interface board are really LS257 with OC tied to GND (which is equivalent to LS157)
|
||||||
|
|
||||||
LS157_X2(config, m_muxa, 0);
|
LS157_X2(config, m_muxa, 0);
|
||||||
m_muxa->a_in_callback().set_ioport("IN3");
|
m_muxa->a_in_callback().set_ioport("IN3");
|
||||||
m_muxa->b_in_callback().set(FUNC(williams_state::port_0_49way_r));
|
m_muxa->b_in_callback().set(FUNC(williams_state::port_0_49way_r));
|
||||||
|
|
||||||
m_blitter_config = WILLIAMS_BLITTER_SC2;
|
|
||||||
m_blitter_clip_address = 0x9700;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void blaster_state::blaster(machine_config &config)
|
void blaster_state::blaster(machine_config &config)
|
||||||
{
|
{
|
||||||
blastkit(config);
|
blastkit(config);
|
||||||
@ -1804,8 +1753,6 @@ void blaster_state::blaster(machine_config &config)
|
|||||||
|
|
||||||
INPUT_MERGER_ANY_HIGH(config, "soundirq_b").output_handler().set_inputline(m_soundcpu_b, M6808_IRQ_LINE);
|
INPUT_MERGER_ANY_HIGH(config, "soundirq_b").output_handler().set_inputline(m_soundcpu_b, M6808_IRQ_LINE);
|
||||||
|
|
||||||
m_pia[1]->writepb_handler().set(FUNC(blaster_state::snd_cmd_w));
|
|
||||||
|
|
||||||
m_pia[2]->writepa_handler().set("ldac", FUNC(dac_byte_interface::data_w));
|
m_pia[2]->writepa_handler().set("ldac", FUNC(dac_byte_interface::data_w));
|
||||||
|
|
||||||
PIA6821(config, m_pia[3], 0);
|
PIA6821(config, m_pia[3], 0);
|
||||||
@ -1916,7 +1863,6 @@ void mysticm_state::mysticm(machine_config &config)
|
|||||||
m_pia[1]->irqb_handler().set("mainirq", FUNC(input_merger_any_high_device::in_w<2>));
|
m_pia[1]->irqb_handler().set("mainirq", FUNC(input_merger_any_high_device::in_w<2>));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void tshoot_state::tshoot(machine_config &config)
|
void tshoot_state::tshoot(machine_config &config)
|
||||||
{
|
{
|
||||||
williams2_base(config);
|
williams2_base(config);
|
||||||
@ -1941,7 +1887,6 @@ void tshoot_state::tshoot(machine_config &config)
|
|||||||
m_mux->b_in_callback().set_ioport("INP2");
|
m_mux->b_in_callback().set_ioport("INP2");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void joust2_state::joust2(machine_config &config)
|
void joust2_state::joust2(machine_config &config)
|
||||||
{
|
{
|
||||||
williams2_base(config);
|
williams2_base(config);
|
||||||
@ -1964,7 +1909,8 @@ void joust2_state::joust2(machine_config &config)
|
|||||||
m_pia[1]->irqa_handler().set("mainirq", FUNC(input_merger_any_high_device::in_w<0>));
|
m_pia[1]->irqa_handler().set("mainirq", FUNC(input_merger_any_high_device::in_w<0>));
|
||||||
m_pia[1]->irqb_handler().set("mainirq", FUNC(input_merger_any_high_device::in_w<1>));
|
m_pia[1]->irqb_handler().set("mainirq", FUNC(input_merger_any_high_device::in_w<1>));
|
||||||
|
|
||||||
// these (and ca2 above) are educated guesses, as we have no schematics for joust 2's pcb which has the 20 pin system 11 bg sound connector on it; inferno, which we have schematics to, lacks this connector. All of pia[1] ca2, pia[2] cb1, and pia[2] cb2 are unconnected/grounded on inferno.
|
// these (and ca2 above) are educated guesses, as we have no schematics for joust 2's pcb which has the 20 pin system 11 bg sound connector on it;
|
||||||
|
// inferno, which we have schematics to, lacks this connector. All of pia[1] ca2, pia[2] cb1, and pia[2] cb2 are unconnected/grounded on inferno.
|
||||||
m_bg->cb2_cb().set(m_pia[2], FUNC(pia6821_device::cb1_w));
|
m_bg->cb2_cb().set(m_pia[2], FUNC(pia6821_device::cb1_w));
|
||||||
m_pia[2]->cb2_handler().set(m_bg, FUNC(s11_obg_device::resetq_w)); // inverted?
|
m_pia[2]->cb2_handler().set(m_bg, FUNC(s11_obg_device::resetq_w)); // inverted?
|
||||||
|
|
||||||
@ -2398,6 +2344,30 @@ ROM_START( jin )
|
|||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Conquest: early prototype by Vid Kidz for Williams.
|
||||||
|
Despite concept similarities, it's not an early version of Sinistar.
|
||||||
|
|
||||||
|
ROM files were reconstructed from June 1982 source code, not dumped from EPROMs.
|
||||||
|
It appears to use the sound ROM from Defender.
|
||||||
|
|
||||||
|
*/
|
||||||
|
ROM_START( conquest )
|
||||||
|
ROM_REGION( 0x19000, "maincpu", ROMREGION_ERASE00 )
|
||||||
|
ROM_LOAD( "conquest_b.bin", 0x0e000, 0x1000, CRC(9aab5516) SHA1(a71ce8f24fd7ffda8800d1af8c164085b0e2ec0a) )
|
||||||
|
ROM_RELOAD( 0x0f000, 0x1000 )
|
||||||
|
ROM_LOAD( "conquest_a.bin", 0x10000, 0x4000, CRC(a384f4a2) SHA1(819df35281216b8be2ba066602fc7d19a860e69e) )
|
||||||
|
|
||||||
|
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||||
|
ROM_LOAD( "video_sound_rom_1.ic12", 0xf800, 0x0800, CRC(fefd5b48) SHA1(ceb0d18483f0691978c604db94417e6941ad7ff2) )
|
||||||
|
|
||||||
|
ROM_REGION( 0x0400, "proms", 0 )
|
||||||
|
ROM_LOAD( "decoder.2", 0x0000, 0x0200, CRC(8dd98da5) SHA1(da979604f7a2aa8b5a6d4a5debd2e80f77569e35) )
|
||||||
|
ROM_LOAD( "decoder.3", 0x0200, 0x0200, CRC(c3f45f70) SHA1(d19036cbc46b130548873597b44b8b70758f25c4) )
|
||||||
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Stargate ROM labels are in this format:
|
Stargate ROM labels are in this format:
|
||||||
@ -2486,6 +2456,7 @@ ROM_START( stargate ) /* "B" ROMs labeled 3002-13 through 3002-24, identical dat
|
|||||||
ROM_LOAD( "decoder_rom_5.3c", 0x0200, 0x0200, CRC(f921c5fe) SHA1(9cebb8bb935315101d248140d1b4503993ebdf8a) ) // Universal Vertical decoder ROM - 7641-5 BPROM - P/N A-5342-09695
|
ROM_LOAD( "decoder_rom_5.3c", 0x0200, 0x0200, CRC(f921c5fe) SHA1(9cebb8bb935315101d248140d1b4503993ebdf8a) ) // Universal Vertical decoder ROM - 7641-5 BPROM - P/N A-5342-09695
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Robotron 2084 ROM labels are in this format:
|
Robotron 2084 ROM labels are in this format:
|
||||||
@ -2914,6 +2885,7 @@ ROM_START( joustr ) /* Solid red labels */
|
|||||||
ROM_LOAD( "decoder_rom_6.3c", 0x0200, 0x0200, CRC(83faf25e) SHA1(30002643d08ed983a6701a7c4b5ee74a2f4a1adb) ) // Universal Vertical decoder ROM - 7641-5 BPROM - P/N A-5342-09821
|
ROM_LOAD( "decoder_rom_6.3c", 0x0200, 0x0200, CRC(83faf25e) SHA1(30002643d08ed983a6701a7c4b5ee74a2f4a1adb) ) // Universal Vertical decoder ROM - 7641-5 BPROM - P/N A-5342-09821
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Bubbles ROM labels are in this format:
|
Bubbles ROM labels are in this format:
|
||||||
@ -3125,6 +3097,7 @@ ROM_END
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Sinistar
|
Sinistar
|
||||||
|
|
||||||
Multiple different ROM boards are known to exist:
|
Multiple different ROM boards are known to exist:
|
||||||
@ -3730,7 +3703,7 @@ ROM_END
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
void defndjeu_state::driver_start()
|
void defender_state::init_defndjeu()
|
||||||
{
|
{
|
||||||
uint8_t *rom = memregion("maincpu")->base();
|
uint8_t *rom = memregion("maincpu")->base();
|
||||||
|
|
||||||
@ -3740,12 +3713,6 @@ void defndjeu_state::driver_start()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void mayday_state::driver_start()
|
|
||||||
{
|
|
||||||
m_protection = m_videoram + 0xa190;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void williams_muxed_state::init_alienar()
|
void williams_muxed_state::init_alienar()
|
||||||
{
|
{
|
||||||
m_maincpu->space(AS_PROGRAM).nop_write(0xcbff, 0xcbff);
|
m_maincpu->space(AS_PROGRAM).nop_write(0xcbff, 0xcbff);
|
||||||
@ -3765,11 +3732,11 @@ GAME( 1980, defenderg, defender, defender, defender, defender_state,
|
|||||||
GAME( 1980, defenderb, defender, defender, defender, defender_state, empty_init, ROT0, "Williams", "Defender (Blue label)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1980, defenderb, defender, defender, defender, defender_state, empty_init, ROT0, "Williams", "Defender (Blue label)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1980, defenderw, defender, defender, defender, defender_state, empty_init, ROT0, "Williams", "Defender (White label)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1980, defenderw, defender, defender, defender, defender_state, empty_init, ROT0, "Williams", "Defender (White label)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1980, defenderj, defender, defender, defender, defender_state, empty_init, ROT0, "Williams (Taito Corporation license)", "T.T Defender", MACHINE_SUPPORTS_SAVE )
|
GAME( 1980, defenderj, defender, defender, defender, defender_state, empty_init, ROT0, "Williams (Taito Corporation license)", "T.T Defender", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1980, defndjeu, defender, defender, defender, defndjeu_state, empty_init, ROT0, "bootleg (Jeutel)", "Defender (bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
GAME( 1980, defndjeu, defender, defender, defender, defender_state, init_defndjeu, ROT0, "bootleg (Jeutel)", "Defender (bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1980, tornado1, defender, defender, defender, defndjeu_state, empty_init, ROT0, "bootleg (Jeutel)", "Tornado (set 1, Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1980, tornado1, defender, defender, defender, defender_state, init_defndjeu, ROT0, "bootleg (Jeutel)", "Tornado (set 1, Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1980, tornado2, defender, defender, defender, defndjeu_state, empty_init, ROT0, "bootleg (Jeutel)", "Tornado (set 2, Defender bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // bad dump?
|
GAME( 1980, tornado2, defender, defender, defender, defender_state, init_defndjeu, ROT0, "bootleg (Jeutel)", "Tornado (set 2, Defender bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // bad dump?
|
||||||
GAME( 1980, zero, defender, defender, defender, defndjeu_state, empty_init, ROT0, "bootleg (Jeutel)", "Zero (set 1, Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1980, zero, defender, defender, defender, defender_state, init_defndjeu, ROT0, "bootleg (Jeutel)", "Zero (set 1, Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1980, zero2, defender, defender, defender, defndjeu_state, empty_init, ROT0, "bootleg (Amtec)", "Zero (set 2, Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1980, zero2, defender, defender, defender, defender_state, init_defndjeu, ROT0, "bootleg (Amtec)", "Zero (set 2, Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1980, defcmnd, defender, defender, defender, defender_state, empty_init, ROT0, "bootleg", "Defense Command (Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1980, defcmnd, defender, defender, defender, defender_state, empty_init, ROT0, "bootleg", "Defense Command (Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1981, defence, defender, defender, defender, defender_state, empty_init, ROT0, "bootleg (Outer Limits)", "Defence Command (Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1981, defence, defender, defender, defender, defender_state, empty_init, ROT0, "bootleg (Outer Limits)", "Defence Command (Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 198?, defenseb, defender, defender, defender, defender_state, empty_init, ROT0, "bootleg", "Defense (Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
GAME( 198?, defenseb, defender, defender, defender, defender_state, empty_init, ROT0, "bootleg", "Defense (Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||||
@ -3788,26 +3755,27 @@ GAME( 1981, colony7a, colony7, defender, colony7, defender_state,
|
|||||||
GAME( 1982, jin, 0, jin, jin, defender_state, empty_init, ROT90, "Falcon", "Jin", MACHINE_SUPPORTS_SAVE )
|
GAME( 1982, jin, 0, jin, jin, defender_state, empty_init, ROT90, "Falcon", "Jin", MACHINE_SUPPORTS_SAVE )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Standard Williams hardware
|
// Standard Williams hardware
|
||||||
GAME( 1981, stargate, 0, stargate, stargate, williams_state, empty_init, ROT0, "Williams / Vid Kidz", "Stargate", MACHINE_SUPPORTS_SAVE )
|
GAME( 1981, stargate, 0, williams_b0, stargate, williams_state, empty_init, ROT0, "Williams / Vid Kidz", "Stargate", MACHINE_SUPPORTS_SAVE )
|
||||||
|
|
||||||
GAME( 1982, robotron, 0, robotron, robotron, williams_state, empty_init, ROT0, "Williams / Vid Kidz", "Robotron: 2084 (Solid Blue label)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1982, conquest, 0, williams_b1, conquest, conquest_state, empty_init, ROT270, "Williams / Vid Kidz", "Conquest (prototype)", MACHINE_IS_INCOMPLETE | MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1982, robotronyo, robotron, robotron, robotron, williams_state, empty_init, ROT0, "Williams / Vid Kidz", "Robotron: 2084 (Yellow/Orange label)", MACHINE_SUPPORTS_SAVE )
|
|
||||||
GAME( 1982, robotronun, robotron, robotron, robotron, williams_state, empty_init, ROT0, "Williams / Vid Kidz (Unidesa license)", "Robotron: 2084 (Unidesa license)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1982, robotron, 0, williams_b1, robotron, williams_state, empty_init, ROT0, "Williams / Vid Kidz", "Robotron: 2084 (Solid Blue label)", MACHINE_SUPPORTS_SAVE )
|
||||||
|
GAME( 1982, robotronyo, robotron, williams_b1, robotron, williams_state, empty_init, ROT0, "Williams / Vid Kidz", "Robotron: 2084 (Yellow/Orange label)", MACHINE_SUPPORTS_SAVE )
|
||||||
|
GAME( 1982, robotronun, robotron, williams_b1, robotron, williams_state, empty_init, ROT0, "Williams / Vid Kidz (Unidesa license)", "Robotron: 2084 (Unidesa license)", MACHINE_SUPPORTS_SAVE )
|
||||||
|
|
||||||
// the 3 below are all noteworthy hacks of the Solid BLue set
|
// the 3 below are all noteworthy hacks of the Solid BLue set
|
||||||
GAME( 1987, robotron87, robotron, robotron, robotron, williams_state, empty_init, ROT0, "hack", "Robotron: 2084 (1987 'shot-in-the-corner' bugfix)", MACHINE_SUPPORTS_SAVE ) // fixes a reset bug.
|
GAME( 1987, robotron87, robotron, williams_b1, robotron, williams_state, empty_init, ROT0, "hack", "Robotron: 2084 (1987 'shot-in-the-corner' bugfix)", MACHINE_SUPPORTS_SAVE ) // fixes a reset bug.
|
||||||
GAME( 2012, robotron12, robotron, robotron, robotron, williams_state, empty_init, ROT0, "hack", "Robotron: 2084 (2012 'wave 201 start' hack)", MACHINE_SUPPORTS_SAVE ) // includes sitc bug fix, used for competitive play.
|
GAME( 2012, robotron12, robotron, williams_b1, robotron, williams_state, empty_init, ROT0, "hack", "Robotron: 2084 (2012 'wave 201 start' hack)", MACHINE_SUPPORTS_SAVE ) // includes sitc bug fix, used for competitive play.
|
||||||
GAME( 2015, robotrontd, robotron, robotron, robotron, williams_state, empty_init, ROT0, "hack", "Robotron: 2084 (2015 'tie-die V2' hack)", MACHINE_SUPPORTS_SAVE ) // inc. sitc fix, mods by some of the original developers, see backstory here http://www.robotron2084guidebook.com/gameplay/raceto100million/robo2k14_tie-die-romset/ (I guess there's a tie-die V1 before it was released to the public?)
|
GAME( 2015, robotrontd, robotron, williams_b1, robotron, williams_state, empty_init, ROT0, "hack", "Robotron: 2084 (2015 'tie-die V2' hack)", MACHINE_SUPPORTS_SAVE ) // inc. sitc fix, mods by some of the original developers, see backstory here http://www.robotron2084guidebook.com/gameplay/raceto100million/robo2k14_tie-die-romset/ (I guess there's a tie-die V1 before it was released to the public?)
|
||||||
|
|
||||||
GAME( 1982, joust, 0, joust, joust, williams_muxed_state, empty_init, ROT0, "Williams", "Joust (Green label)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1982, joust, 0, joust, joust, williams_muxed_state, empty_init, ROT0, "Williams", "Joust (Green label)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1982, joustr, joust, joust, joust, williams_muxed_state, empty_init, ROT0, "Williams", "Joust (Red label)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1982, joustr, joust, joust, joust, williams_muxed_state, empty_init, ROT0, "Williams", "Joust (Red label)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1982, jousty, joust, joust, joust, williams_muxed_state, empty_init, ROT0, "Williams", "Joust (Yellow label)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1982, jousty, joust, joust, joust, williams_muxed_state, empty_init, ROT0, "Williams", "Joust (Yellow label)", MACHINE_SUPPORTS_SAVE )
|
||||||
|
|
||||||
GAME( 1982, bubbles, 0, bubbles, bubbles, bubbles_state, empty_init, ROT0, "Williams", "Bubbles", MACHINE_SUPPORTS_SAVE )
|
GAME( 1982, bubbles, 0, williams_b1, bubbles, williams_cmos8_state, empty_init, ROT0, "Williams", "Bubbles", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1982, bubblesr, bubbles, bubbles, bubbles, bubbles_state, empty_init, ROT0, "Williams", "Bubbles (Solid Red label)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1982, bubblesr, bubbles, williams_b1, bubbles, williams_cmos8_state, empty_init, ROT0, "Williams", "Bubbles (Solid Red label)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1982, bubblesp, bubbles, bubbles, bubbles, bubbles_state, empty_init, ROT0, "Williams", "Bubbles (prototype version)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1982, bubblesp, bubbles, williams_b1, bubbles, williams_cmos8_state, empty_init, ROT0, "Williams", "Bubbles (prototype)", MACHINE_SUPPORTS_SAVE )
|
||||||
|
|
||||||
GAME( 1982, splat, 0, splat, splat, williams_muxed_state, empty_init, ROT0, "Williams", "Splat!", MACHINE_SUPPORTS_SAVE )
|
GAME( 1982, splat, 0, splat, splat, williams_muxed_state, empty_init, ROT0, "Williams", "Splat!", MACHINE_SUPPORTS_SAVE )
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "tilemap.h"
|
#include "tilemap.h"
|
||||||
|
|
||||||
|
// base Williams hardware
|
||||||
class williams_state : public driver_device
|
class williams_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -44,8 +45,11 @@ public:
|
|||||||
m_pia(*this, "pia_%u", 0U)
|
m_pia(*this, "pia_%u", 0U)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void stargate(machine_config &config);
|
void williams_base(machine_config &config);
|
||||||
void robotron(machine_config &config);
|
void williams_b0(machine_config &config);
|
||||||
|
void williams_b1(machine_config &config);
|
||||||
|
void williams_b2(machine_config &config);
|
||||||
|
|
||||||
void lottofun(machine_config &config);
|
void lottofun(machine_config &config);
|
||||||
|
|
||||||
u8 port_0_49way_r();
|
u8 port_0_49way_r();
|
||||||
@ -59,20 +63,26 @@ public:
|
|||||||
void palette_init(palette_device &palette) const;
|
void palette_init(palette_device &palette) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void williams_base(machine_config &config);
|
|
||||||
|
|
||||||
virtual void machine_start() override;
|
virtual void machine_start() override;
|
||||||
virtual void video_start() override;
|
virtual void video_start() override;
|
||||||
|
|
||||||
|
// blitter type
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
WILLIAMS_BLITTER_NONE = 0, // no blitter
|
||||||
|
WILLIAMS_BLITTER_SC1 = 1, // Special Chip 1 blitter
|
||||||
|
WILLIAMS_BLITTER_SC2 = 2 // Special Chip 2 "bugfixed" blitter
|
||||||
|
};
|
||||||
|
|
||||||
|
// controlbyte (0xCA00) bit definitions
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
//controlbyte (0xCA00) bit definitions
|
|
||||||
WMS_BLITTER_CONTROLBYTE_NO_EVEN = 0x80,
|
WMS_BLITTER_CONTROLBYTE_NO_EVEN = 0x80,
|
||||||
WMS_BLITTER_CONTROLBYTE_NO_ODD = 0x40,
|
WMS_BLITTER_CONTROLBYTE_NO_ODD = 0x40,
|
||||||
WMS_BLITTER_CONTROLBYTE_SHIFT = 0x20,
|
WMS_BLITTER_CONTROLBYTE_SHIFT = 0x20,
|
||||||
WMS_BLITTER_CONTROLBYTE_SOLID = 0x10,
|
WMS_BLITTER_CONTROLBYTE_SOLID = 0x10,
|
||||||
WMS_BLITTER_CONTROLBYTE_FOREGROUND_ONLY = 0x08,
|
WMS_BLITTER_CONTROLBYTE_FOREGROUND_ONLY = 0x08,
|
||||||
WMS_BLITTER_CONTROLBYTE_SLOW = 0x04, //2us blits instead of 1us
|
WMS_BLITTER_CONTROLBYTE_SLOW = 0x04, // 2us blits instead of 1us
|
||||||
WMS_BLITTER_CONTROLBYTE_DST_STRIDE_256 = 0x02,
|
WMS_BLITTER_CONTROLBYTE_DST_STRIDE_256 = 0x02,
|
||||||
WMS_BLITTER_CONTROLBYTE_SRC_STRIDE_256 = 0x01
|
WMS_BLITTER_CONTROLBYTE_SRC_STRIDE_256 = 0x01
|
||||||
};
|
};
|
||||||
@ -92,14 +102,10 @@ protected:
|
|||||||
std::unique_ptr<uint8_t[]> m_blitter_remap_lookup;
|
std::unique_ptr<uint8_t[]> m_blitter_remap_lookup;
|
||||||
virtual void vram_select_w(u8 data);
|
virtual void vram_select_w(u8 data);
|
||||||
virtual void cmos_w(offs_t offset, u8 data);
|
virtual void cmos_w(offs_t offset, u8 data);
|
||||||
void sinistar_vram_select_w(u8 data);
|
|
||||||
void blitter_w(address_space &space, offs_t offset, u8 data);
|
void blitter_w(address_space &space, offs_t offset, u8 data);
|
||||||
|
|
||||||
TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w);
|
TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w);
|
||||||
|
virtual void snd_cmd_w(u8 data);
|
||||||
void snd_cmd_w(u8 data);
|
|
||||||
|
|
||||||
DECLARE_WRITE_LINE_MEMBER(lottofun_coin_lock_w);
|
|
||||||
|
|
||||||
void state_save_register();
|
void state_save_register();
|
||||||
void blitter_init(int blitter_config, const uint8_t *remap_prom);
|
void blitter_init(int blitter_config, const uint8_t *remap_prom);
|
||||||
@ -115,9 +121,10 @@ protected:
|
|||||||
optional_device_array<pia6821_device, 4> m_pia;
|
optional_device_array<pia6821_device, 4> m_pia;
|
||||||
|
|
||||||
virtual void sound_map(address_map &map);
|
virtual void sound_map(address_map &map);
|
||||||
void base_map(address_map &map);
|
virtual void main_map(address_map &map);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Defender
|
||||||
class defender_state : public williams_state
|
class defender_state : public williams_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -129,8 +136,10 @@ public:
|
|||||||
void defender(machine_config &config);
|
void defender(machine_config &config);
|
||||||
void jin(machine_config &config);
|
void jin(machine_config &config);
|
||||||
|
|
||||||
|
void init_defndjeu();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void main_map(address_map &map);
|
virtual void main_map(address_map &map) override;
|
||||||
|
|
||||||
void video_control_w(u8 data);
|
void video_control_w(u8 data);
|
||||||
|
|
||||||
@ -146,17 +155,7 @@ private:
|
|||||||
void bank_select_w(u8 data);
|
void bank_select_w(u8 data);
|
||||||
};
|
};
|
||||||
|
|
||||||
class defndjeu_state : public defender_state
|
// Hoei Mayday: custom protection
|
||||||
{
|
|
||||||
public:
|
|
||||||
defndjeu_state(const machine_config &mconfig, device_type type, const char *tag) :
|
|
||||||
defender_state(mconfig, type, tag)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
private:
|
|
||||||
virtual void driver_start() override;
|
|
||||||
};
|
|
||||||
|
|
||||||
class mayday_state : public defender_state
|
class mayday_state : public defender_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -165,14 +164,11 @@ public:
|
|||||||
{ }
|
{ }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual void driver_start() override;
|
|
||||||
|
|
||||||
virtual void main_map(address_map &map) override;
|
|
||||||
|
|
||||||
uint8_t *m_protection = nullptr;
|
|
||||||
u8 protection_r(offs_t offset);
|
u8 protection_r(offs_t offset);
|
||||||
|
virtual void main_map(address_map &map) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Sinistar: blitter window clip
|
||||||
class sinistar_state : public williams_state
|
class sinistar_state : public williams_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -184,25 +180,10 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
virtual void vram_select_w(u8 data) override;
|
virtual void vram_select_w(u8 data) override;
|
||||||
|
virtual void main_map(address_map &map) override;
|
||||||
void main_map(address_map &map);
|
|
||||||
};
|
|
||||||
|
|
||||||
class bubbles_state : public williams_state
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
bubbles_state(const machine_config &mconfig, device_type type, const char *tag) :
|
|
||||||
williams_state(mconfig, type, tag)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
void bubbles(machine_config &config);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void main_map(address_map &map);
|
|
||||||
|
|
||||||
virtual void cmos_w(offs_t offset, u8 data) override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Playball: more soundlatch bits
|
||||||
class playball_state : public williams_state
|
class playball_state : public williams_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -213,9 +194,38 @@ public:
|
|||||||
void playball(machine_config &config);
|
void playball(machine_config &config);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void snd_cmd_w(u8 data);
|
virtual void snd_cmd_w(u8 data) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Bubbles: 8-bit nvram
|
||||||
|
class williams_cmos8_state : public williams_state
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
williams_cmos8_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
|
williams_state(mconfig, type, tag)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void cmos_w(offs_t offset, u8 data) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Conquest: flywheel controller
|
||||||
|
class conquest_state : public williams_cmos8_state
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
conquest_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
|
williams_cmos8_state(mconfig, type, tag),
|
||||||
|
m_dial(*this, "DIAL")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
DECLARE_CUSTOM_INPUT_MEMBER(dial0_r) { return m_dial->read() & 3; }
|
||||||
|
DECLARE_CUSTOM_INPUT_MEMBER(dial1_r) { return m_dial->read() >> 2 & 3; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
required_ioport m_dial;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Joust, Splat: muxed inputs
|
||||||
class williams_muxed_state : public williams_state
|
class williams_muxed_state : public williams_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -237,6 +247,7 @@ private:
|
|||||||
required_device<ls157_device> m_mux1;
|
required_device<ls157_device> m_mux1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Speed Ball: more input ports
|
||||||
class spdball_state : public williams_state
|
class spdball_state : public williams_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -247,9 +258,10 @@ public:
|
|||||||
void spdball(machine_config &config);
|
void spdball(machine_config &config);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void main_map(address_map &map);
|
virtual void main_map(address_map &map) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Blaster: extra sound hardware
|
||||||
class blaster_state : public williams_state
|
class blaster_state : public williams_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -283,16 +295,17 @@ private:
|
|||||||
void remap_select_w(u8 data);
|
void remap_select_w(u8 data);
|
||||||
void video_control_w(u8 data);
|
void video_control_w(u8 data);
|
||||||
TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w);
|
TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w);
|
||||||
void snd_cmd_w(u8 data);
|
virtual void snd_cmd_w(u8 data) override;
|
||||||
|
|
||||||
virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override;
|
virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override;
|
||||||
|
|
||||||
inline void update_blaster_banking();
|
inline void update_blaster_banking();
|
||||||
|
|
||||||
void main_map(address_map &map);
|
virtual void main_map(address_map &map) override;
|
||||||
void sound2_map(address_map &map);
|
void sound2_map(address_map &map);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// base Williams 2nd gen hardware
|
||||||
class williams2_state : public williams_state
|
class williams2_state : public williams_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -350,7 +363,7 @@ protected:
|
|||||||
virtual TIMER_DEVICE_CALLBACK_MEMBER(va11_callback) override;
|
virtual TIMER_DEVICE_CALLBACK_MEMBER(va11_callback) override;
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(endscreen_callback);
|
TIMER_DEVICE_CALLBACK_MEMBER(endscreen_callback);
|
||||||
TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w);
|
TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w);
|
||||||
void snd_cmd_w(u8 data);
|
virtual void snd_cmd_w(u8 data) override;
|
||||||
|
|
||||||
virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override;
|
virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override;
|
||||||
|
|
||||||
@ -383,6 +396,7 @@ protected:
|
|||||||
void d000_map(address_map &map);
|
void d000_map(address_map &map);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Inferno
|
||||||
class inferno_state : public williams_d000_ram_state
|
class inferno_state : public williams_d000_ram_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -397,6 +411,7 @@ private:
|
|||||||
required_device<ls157_device> m_mux;
|
required_device<ls157_device> m_mux;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Mystic Marathon
|
||||||
class mysticm_state : public williams_d000_ram_state
|
class mysticm_state : public williams_d000_ram_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -420,9 +435,9 @@ private:
|
|||||||
int color_decode(uint8_t base_col, int sig_J1, int y);
|
int color_decode(uint8_t base_col, int sig_J1, int y);
|
||||||
|
|
||||||
uint8_t m_bg_color = 0;
|
uint8_t m_bg_color = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Turkey Shoot
|
||||||
class tshoot_state : public williams_d000_rom_state
|
class tshoot_state : public williams_d000_rom_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -454,6 +469,7 @@ private:
|
|||||||
output_finder<> m_feather_blower;
|
output_finder<> m_feather_blower;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Joust 2
|
||||||
class joust2_state : public williams_d000_rom_state
|
class joust2_state : public williams_d000_rom_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -476,18 +492,9 @@ private:
|
|||||||
virtual void bg_select_w(u8 data) override;
|
virtual void bg_select_w(u8 data) override;
|
||||||
|
|
||||||
TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w);
|
TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w);
|
||||||
void snd_cmd_w(u8 data);
|
virtual void snd_cmd_w(u8 data) override;
|
||||||
DECLARE_WRITE_LINE_MEMBER(pia_s11_bg_strobe_w);
|
DECLARE_WRITE_LINE_MEMBER(pia_s11_bg_strobe_w);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*----------- defined in video/williams.cpp -----------*/
|
|
||||||
|
|
||||||
#define WILLIAMS_BLITTER_NONE 0 /* no blitter */
|
|
||||||
#define WILLIAMS_BLITTER_SC1 1 /* Special Chip 1 blitter */
|
|
||||||
#define WILLIAMS_BLITTER_SC2 2 /* Special Chip 2 "bugfixed" blitter */
|
|
||||||
|
|
||||||
#define WILLIAMS_TILEMAP_MYSTICM 0 /* IC79 is a 74LS85 comparator */
|
|
||||||
#define WILLIAMS_TILEMAP_TSHOOT 1 /* IC79 is a 74LS157 selector jumpered to be enabled */
|
|
||||||
#define WILLIAMS_TILEMAP_JOUST2 2 /* IC79 is a 74LS157 selector jumpered to be disabled */
|
|
||||||
|
|
||||||
#endif // MAME_MIDWAY_WILLIAMS_H
|
#endif // MAME_MIDWAY_WILLIAMS_H
|
||||||
|
@ -228,7 +228,7 @@ void williams_state::cmos_w(offs_t offset, u8 data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void bubbles_state::cmos_w(offs_t offset, u8 data)
|
void williams_cmos8_state::cmos_w(offs_t offset, u8 data)
|
||||||
{
|
{
|
||||||
/* bubbles has additional CMOS for a full 8 bits */
|
/* bubbles has additional CMOS for a full 8 bits */
|
||||||
m_nvram[offset] = data;
|
m_nvram[offset] = data;
|
||||||
@ -338,7 +338,7 @@ u8 mayday_state::protection_r(offs_t offset)
|
|||||||
/* These are compared against $a193 and $a194, respectively. Thus, to prevent */
|
/* These are compared against $a193 and $a194, respectively. Thus, to prevent */
|
||||||
/* the protection from resetting the machine, we just return $a193 for $a190, */
|
/* the protection from resetting the machine, we just return $a193 for $a190, */
|
||||||
/* and $a194 for $a191. */
|
/* and $a194 for $a191. */
|
||||||
return m_protection[offset + 3];
|
return m_videoram[0xa193 + offset];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -429,19 +429,6 @@ void blaster_state::snd_cmd_w(u8 data)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
|
||||||
*
|
|
||||||
* Lotto Fun-specific routines
|
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER(williams_state::lottofun_coin_lock_w)
|
|
||||||
{
|
|
||||||
machine().bookkeeping().coin_lockout_global_w(state & 1); /* bit 5 of PIC control port A */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Williams 2nd-gen-specific routines
|
* Williams 2nd-gen-specific routines
|
||||||
|
@ -93,6 +93,7 @@
|
|||||||
while bit 7 says odd only.
|
while bit 7 says odd only.
|
||||||
|
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
|
|
||||||
Special Chip 1 and 2 aka VLSI VL2001/2001A Pinout:
|
Special Chip 1 and 2 aka VLSI VL2001/2001A Pinout:
|
||||||
_______ _______
|
_______ _______
|
||||||
_|* \__/ |_
|
_|* \__/ |_
|
||||||
@ -146,6 +147,7 @@ The full silkscreen markings of SC2 (under the "Special Chip 2" sticker, if it i
|
|||||||
<VTi Logo> 242
|
<VTi Logo> 242
|
||||||
VL2001A
|
VL2001A
|
||||||
5410-09958
|
5410-09958
|
||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
@ -753,13 +755,13 @@ void williams2_state::blit_window_enable_w(u8 data)
|
|||||||
inline void williams_state::blit_pixel(address_space &space, int dstaddr, int srcdata, int controlbyte)
|
inline void williams_state::blit_pixel(address_space &space, int dstaddr, int srcdata, int controlbyte)
|
||||||
{
|
{
|
||||||
/* always read from video RAM regardless of the bank setting */
|
/* always read from video RAM regardless of the bank setting */
|
||||||
int curpix = (dstaddr < 0xc000) ? m_videoram[dstaddr] : space.read_byte(dstaddr); //current pixel values at dest
|
int curpix = (dstaddr < 0xc000) ? m_videoram[dstaddr] : space.read_byte(dstaddr); // current pixel values at dest
|
||||||
|
|
||||||
int solid = m_blitterram[1];
|
int solid = m_blitterram[1];
|
||||||
unsigned char keepmask = 0xff; //what part of original dst byte should be kept, based on NO_EVEN and NO_ODD flags
|
unsigned char keepmask = 0xff; // what part of original dst byte should be kept, based on NO_EVEN and NO_ODD flags
|
||||||
|
|
||||||
//even pixel (D7-D4)
|
// even pixel (D7-D4)
|
||||||
if((controlbyte & WMS_BLITTER_CONTROLBYTE_FOREGROUND_ONLY) && !(srcdata & 0xf0)) //FG only and src even pixel=0
|
if((controlbyte & WMS_BLITTER_CONTROLBYTE_FOREGROUND_ONLY) && !(srcdata & 0xf0)) // FG only and src even pixel=0
|
||||||
{
|
{
|
||||||
if(controlbyte & WMS_BLITTER_CONTROLBYTE_NO_EVEN)
|
if(controlbyte & WMS_BLITTER_CONTROLBYTE_NO_EVEN)
|
||||||
keepmask &= 0x0f;
|
keepmask &= 0x0f;
|
||||||
@ -770,8 +772,8 @@ inline void williams_state::blit_pixel(address_space &space, int dstaddr, int sr
|
|||||||
keepmask &= 0x0f;
|
keepmask &= 0x0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
//odd pixel (D3-D0)
|
// odd pixel (D3-D0)
|
||||||
if((controlbyte & WMS_BLITTER_CONTROLBYTE_FOREGROUND_ONLY) && !(srcdata & 0x0f)) //FG only and src odd pixel=0
|
if((controlbyte & WMS_BLITTER_CONTROLBYTE_FOREGROUND_ONLY) && !(srcdata & 0x0f)) // FG only and src odd pixel=0
|
||||||
{
|
{
|
||||||
if(controlbyte & WMS_BLITTER_CONTROLBYTE_NO_ODD)
|
if(controlbyte & WMS_BLITTER_CONTROLBYTE_NO_ODD)
|
||||||
keepmask &= 0xf0;
|
keepmask &= 0xf0;
|
||||||
@ -788,9 +790,9 @@ inline void williams_state::blit_pixel(address_space &space, int dstaddr, int sr
|
|||||||
else
|
else
|
||||||
curpix |= (srcdata & ~keepmask);
|
curpix |= (srcdata & ~keepmask);
|
||||||
|
|
||||||
/* if the window is enabled, only blit to videoram below the clipping address */
|
/* if the window is enabled, only blit to videoram below the clipping address */
|
||||||
/* note that we have to allow blits to non-video RAM (e.g. tileram, Sinistar $DXXX SRAM) because those */
|
/* note that we have to allow blits to non-video RAM (e.g. tileram, Sinistar $DXXX SRAM) because those */
|
||||||
/* are not blocked by the window enable */
|
/* are not blocked by the window enable */
|
||||||
if (!m_blitter_window_enable || dstaddr < m_blitter_clip_address || dstaddr >= 0xc000)
|
if (!m_blitter_window_enable || dstaddr < m_blitter_clip_address || dstaddr >= 0xc000)
|
||||||
space.write_byte(dstaddr, curpix);
|
space.write_byte(dstaddr, curpix);
|
||||||
}
|
}
|
||||||
@ -817,12 +819,13 @@ int williams_state::blitter_core(address_space &space, int sstart, int dstart, i
|
|||||||
/* loop over the width */
|
/* loop over the width */
|
||||||
for (int x = 0; x < w; x++)
|
for (int x = 0; x < w; x++)
|
||||||
{
|
{
|
||||||
if (!(controlbyte & WMS_BLITTER_CONTROLBYTE_SHIFT)) //no shift
|
if (!(controlbyte & WMS_BLITTER_CONTROLBYTE_SHIFT)) // no shift
|
||||||
{
|
{
|
||||||
blit_pixel(space, dest, m_blitter_remap[space.read_byte(source)], controlbyte);
|
blit_pixel(space, dest, m_blitter_remap[space.read_byte(source)], controlbyte);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ //shift one pixel right
|
{
|
||||||
|
// shift one pixel right
|
||||||
pixdata = (pixdata << 8) | m_blitter_remap[space.read_byte(source)];
|
pixdata = (pixdata << 8) | m_blitter_remap[space.read_byte(source)];
|
||||||
blit_pixel(space, dest, (pixdata >> 4) & 0xff, controlbyte);
|
blit_pixel(space, dest, (pixdata >> 4) & 0xff, controlbyte);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user