mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +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
|
||||
colony7 // (c) 1981 Taito
|
||||
colony7a // (c) 1981 Taito
|
||||
conquest // prototype
|
||||
defcmnd // bootleg
|
||||
defence // bootleg
|
||||
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, 0x8fff).bankr("mainbank");
|
||||
@ -577,25 +577,12 @@ void williams_state::base_map(address_map &map)
|
||||
|
||||
void sinistar_state::main_map(address_map &map)
|
||||
{
|
||||
base_map(map);
|
||||
map(0xc900, 0xc9ff).w(FUNC(sinistar_state::vram_select_w));
|
||||
williams_state::main_map(map);
|
||||
map(0xd000, 0xdfff).ram();
|
||||
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)
|
||||
{
|
||||
base_map(map);
|
||||
williams_state::main_map(map);
|
||||
// install extra input handlers
|
||||
map(0xc800, 0xc800).portr("AN0");
|
||||
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");
|
||||
}
|
||||
|
||||
|
||||
// mysticm and inferno: D000-DFFF is RAM
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
// tshoot and joust2: D000-DFFF is ROM
|
||||
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)
|
||||
{
|
||||
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(0xb000, 0xffff).rom();
|
||||
}
|
||||
@ -713,8 +698,8 @@ void defender_state::sound_map(address_map &map)
|
||||
|
||||
void williams_state::sound_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x007f).ram(); // internal RAM
|
||||
map(0x0080, 0x00ff).ram(); // MC6810 RAM
|
||||
map(0x0000, 0x007f).ram(); // internal 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(0xb000, 0xffff).rom();
|
||||
}
|
||||
@ -722,8 +707,8 @@ void williams_state::sound_map(address_map &map)
|
||||
/* Same as above, but for second sound board */
|
||||
void blaster_state::sound2_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x007f).ram(); // internal RAM
|
||||
map(0x0080, 0x00ff).ram(); // MC6810 RAM
|
||||
map(0x0000, 0x007f).ram(); // internal 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(0xb000, 0xffff).rom();
|
||||
}
|
||||
@ -738,8 +723,8 @@ void blaster_state::sound2_map(address_map &map)
|
||||
|
||||
void williams2_state::sound_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x007f).ram(); // internal RAM
|
||||
map(0x0080, 0x00ff).ram(); // MC6810 RAM
|
||||
map(0x0000, 0x007f).ram(); // internal 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(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( 0x00, "30k/50k" ) 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( 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( 0x00, DEF_STR( On ))
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN1 )
|
||||
@ -1055,6 +1040,28 @@ static INPUT_PORTS_START( bubbles )
|
||||
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 )
|
||||
PORT_START("IN0")
|
||||
// 0x0f muxed from INP1/INP2
|
||||
@ -1122,10 +1129,10 @@ static INPUT_PORTS_START( sinistar )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT )
|
||||
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_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
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -1184,10 +1191,10 @@ static INPUT_PORTS_START( blaster )
|
||||
PORT_START("INP2")
|
||||
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_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
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -1210,10 +1217,10 @@ static INPUT_PORTS_START( blastkit )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT )
|
||||
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_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_START("IN3")
|
||||
@ -1262,16 +1269,16 @@ static INPUT_PORTS_START( spdball )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START1 )
|
||||
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_START("AN1") // analog
|
||||
PORT_START("AN1") // analog
|
||||
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_START("AN3") // analog
|
||||
PORT_START("AN3") // analog
|
||||
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_PLAYER(2)
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -1533,7 +1540,7 @@ void williams_state::williams_base(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
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
|
||||
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>));
|
||||
}
|
||||
|
||||
|
||||
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)
|
||||
void williams_state::williams_b0(machine_config &config)
|
||||
{
|
||||
williams_base(config);
|
||||
m_blitter_config = WILLIAMS_BLITTER_NONE;
|
||||
m_blitter_clip_address = 0x0000;
|
||||
}
|
||||
|
||||
|
||||
void williams_state::robotron(machine_config &config)
|
||||
void williams_state::williams_b1(machine_config &config)
|
||||
{
|
||||
williams_base(config);
|
||||
m_blitter_config = WILLIAMS_BLITTER_SC1;
|
||||
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)
|
||||
{
|
||||
williams_base(config);
|
||||
|
||||
// basic machine hardware
|
||||
|
||||
// pia
|
||||
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);
|
||||
@ -1648,66 +1646,44 @@ void williams_muxed_state::williams_muxed(machine_config &config)
|
||||
m_mux1->b_in_callback().set_ioport("INP1A");
|
||||
}
|
||||
|
||||
|
||||
void williams_muxed_state::joust(machine_config &config)
|
||||
{
|
||||
williams_b1(config);
|
||||
williams_muxed(config);
|
||||
m_blitter_config = WILLIAMS_BLITTER_SC1;
|
||||
m_blitter_clip_address = 0xc000;
|
||||
}
|
||||
|
||||
|
||||
void williams_muxed_state::splat(machine_config &config)
|
||||
{
|
||||
williams_b2(config);
|
||||
williams_muxed(config);
|
||||
m_blitter_config = WILLIAMS_BLITTER_SC2;
|
||||
m_blitter_clip_address = 0xc000;
|
||||
}
|
||||
|
||||
|
||||
void spdball_state::spdball(machine_config &config)
|
||||
{
|
||||
williams_base(config);
|
||||
|
||||
// basic machine hardware
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &spdball_state::main_map);
|
||||
williams_b1(config);
|
||||
|
||||
// pia
|
||||
PIA6821(config, m_pia[3], 0);
|
||||
m_pia[3]->readpa_handler().set_ioport("IN3");
|
||||
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)
|
||||
{
|
||||
williams_base(config);
|
||||
|
||||
// basic machine hardware
|
||||
williams_b1(config);
|
||||
|
||||
// pia
|
||||
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);
|
||||
|
||||
m_blitter_config = WILLIAMS_BLITTER_SC1;
|
||||
m_blitter_clip_address = 0xc000;
|
||||
}
|
||||
|
||||
|
||||
void sinistar_state::sinistar(machine_config &config)
|
||||
{
|
||||
williams_base(config);
|
||||
|
||||
// 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);
|
||||
williams_b1(config);
|
||||
m_blitter_clip_address = 0x7400;
|
||||
|
||||
// pia
|
||||
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]->cb2_handler().set("cvsd", FUNC(hc55516_device::clock_w));
|
||||
|
||||
m_blitter_config = WILLIAMS_BLITTER_SC1;
|
||||
m_blitter_clip_address = 0x7400;
|
||||
// sound hardware
|
||||
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)
|
||||
{
|
||||
williams_base(config);
|
||||
|
||||
// basic machine hardware
|
||||
williams_b1(config);
|
||||
|
||||
// video hardware
|
||||
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);
|
||||
|
||||
// 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]->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)
|
||||
{
|
||||
williams_base(config);
|
||||
|
||||
// basic machine hardware
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &blaster_state::main_map);
|
||||
williams_b2(config);
|
||||
m_blitter_clip_address = 0x9700;
|
||||
|
||||
// video hardware
|
||||
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));
|
||||
|
||||
// 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);
|
||||
m_muxa->a_in_callback().set_ioport("IN3");
|
||||
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)
|
||||
{
|
||||
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);
|
||||
|
||||
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));
|
||||
|
||||
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>));
|
||||
}
|
||||
|
||||
|
||||
void tshoot_state::tshoot(machine_config &config)
|
||||
{
|
||||
williams2_base(config);
|
||||
@ -1941,7 +1887,6 @@ void tshoot_state::tshoot(machine_config &config)
|
||||
m_mux->b_in_callback().set_ioport("INP2");
|
||||
}
|
||||
|
||||
|
||||
void joust2_state::joust2(machine_config &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]->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_pia[2]->cb2_handler().set(m_bg, FUNC(s11_obg_device::resetq_w)); // inverted?
|
||||
|
||||
@ -2398,6 +2344,30 @@ ROM_START( jin )
|
||||
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:
|
||||
@ -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_END
|
||||
|
||||
|
||||
/*
|
||||
|
||||
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_END
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Bubbles ROM labels are in this format:
|
||||
@ -3125,6 +3097,7 @@ ROM_END
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Sinistar
|
||||
|
||||
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();
|
||||
|
||||
@ -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()
|
||||
{
|
||||
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, 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, defndjeu, defender, defender, defender, defndjeu_state, empty_init, 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, 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, zero, defender, defender, defender, defndjeu_state, empty_init, 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, 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, defender_state, init_defndjeu, ROT0, "bootleg (Jeutel)", "Tornado (set 1, Defender bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
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, defender_state, init_defndjeu, ROT0, "bootleg (Jeutel)", "Zero (set 1, 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( 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 )
|
||||
@ -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 )
|
||||
|
||||
|
||||
|
||||
// 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, 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, conquest, 0, williams_b1, conquest, conquest_state, empty_init, ROT270, "Williams / Vid Kidz", "Conquest (prototype)", MACHINE_IS_INCOMPLETE | 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
|
||||
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( 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( 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( 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, 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, 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, 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, bubbles, 0, bubbles, bubbles, bubbles_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, bubblesp, bubbles, bubbles, bubbles, bubbles_state, empty_init, ROT0, "Williams", "Bubbles (prototype version)", 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, williams_b1, bubbles, williams_cmos8_state, empty_init, ROT0, "Williams", "Bubbles (Solid Red label)", 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 )
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "screen.h"
|
||||
#include "tilemap.h"
|
||||
|
||||
// base Williams hardware
|
||||
class williams_state : public driver_device
|
||||
{
|
||||
public:
|
||||
@ -44,8 +45,11 @@ public:
|
||||
m_pia(*this, "pia_%u", 0U)
|
||||
{ }
|
||||
|
||||
void stargate(machine_config &config);
|
||||
void robotron(machine_config &config);
|
||||
void williams_base(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);
|
||||
|
||||
u8 port_0_49way_r();
|
||||
@ -59,20 +63,26 @@ public:
|
||||
void palette_init(palette_device &palette) const;
|
||||
|
||||
protected:
|
||||
void williams_base(machine_config &config);
|
||||
|
||||
virtual void machine_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
|
||||
{
|
||||
//controlbyte (0xCA00) bit definitions
|
||||
WMS_BLITTER_CONTROLBYTE_NO_EVEN = 0x80,
|
||||
WMS_BLITTER_CONTROLBYTE_NO_ODD = 0x40,
|
||||
WMS_BLITTER_CONTROLBYTE_SHIFT = 0x20,
|
||||
WMS_BLITTER_CONTROLBYTE_SOLID = 0x10,
|
||||
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_SRC_STRIDE_256 = 0x01
|
||||
};
|
||||
@ -92,14 +102,10 @@ protected:
|
||||
std::unique_ptr<uint8_t[]> m_blitter_remap_lookup;
|
||||
virtual void vram_select_w(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);
|
||||
|
||||
TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w);
|
||||
|
||||
void snd_cmd_w(u8 data);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(lottofun_coin_lock_w);
|
||||
virtual void snd_cmd_w(u8 data);
|
||||
|
||||
void state_save_register();
|
||||
void blitter_init(int blitter_config, const uint8_t *remap_prom);
|
||||
@ -115,9 +121,10 @@ protected:
|
||||
optional_device_array<pia6821_device, 4> m_pia;
|
||||
|
||||
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
|
||||
{
|
||||
public:
|
||||
@ -129,8 +136,10 @@ public:
|
||||
void defender(machine_config &config);
|
||||
void jin(machine_config &config);
|
||||
|
||||
void init_defndjeu();
|
||||
|
||||
protected:
|
||||
virtual void main_map(address_map &map);
|
||||
virtual void main_map(address_map &map) override;
|
||||
|
||||
void video_control_w(u8 data);
|
||||
|
||||
@ -146,17 +155,7 @@ private:
|
||||
void bank_select_w(u8 data);
|
||||
};
|
||||
|
||||
class defndjeu_state : public defender_state
|
||||
{
|
||||
public:
|
||||
defndjeu_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
defender_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
private:
|
||||
virtual void driver_start() override;
|
||||
};
|
||||
|
||||
// Hoei Mayday: custom protection
|
||||
class mayday_state : public defender_state
|
||||
{
|
||||
public:
|
||||
@ -165,14 +164,11 @@ public:
|
||||
{ }
|
||||
|
||||
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);
|
||||
virtual void main_map(address_map &map) override;
|
||||
};
|
||||
|
||||
// Sinistar: blitter window clip
|
||||
class sinistar_state : public williams_state
|
||||
{
|
||||
public:
|
||||
@ -184,25 +180,10 @@ public:
|
||||
|
||||
private:
|
||||
virtual void vram_select_w(u8 data) 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;
|
||||
virtual void main_map(address_map &map) override;
|
||||
};
|
||||
|
||||
// Playball: more soundlatch bits
|
||||
class playball_state : public williams_state
|
||||
{
|
||||
public:
|
||||
@ -213,9 +194,38 @@ public:
|
||||
void playball(machine_config &config);
|
||||
|
||||
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
|
||||
{
|
||||
public:
|
||||
@ -237,6 +247,7 @@ private:
|
||||
required_device<ls157_device> m_mux1;
|
||||
};
|
||||
|
||||
// Speed Ball: more input ports
|
||||
class spdball_state : public williams_state
|
||||
{
|
||||
public:
|
||||
@ -247,9 +258,10 @@ public:
|
||||
void spdball(machine_config &config);
|
||||
|
||||
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
|
||||
{
|
||||
public:
|
||||
@ -283,16 +295,17 @@ private:
|
||||
void remap_select_w(u8 data);
|
||||
void video_control_w(u8 data);
|
||||
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;
|
||||
|
||||
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);
|
||||
};
|
||||
|
||||
// base Williams 2nd gen hardware
|
||||
class williams2_state : public williams_state
|
||||
{
|
||||
public:
|
||||
@ -350,7 +363,7 @@ protected:
|
||||
virtual TIMER_DEVICE_CALLBACK_MEMBER(va11_callback) override;
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(endscreen_callback);
|
||||
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;
|
||||
|
||||
@ -383,6 +396,7 @@ protected:
|
||||
void d000_map(address_map &map);
|
||||
};
|
||||
|
||||
// Inferno
|
||||
class inferno_state : public williams_d000_ram_state
|
||||
{
|
||||
public:
|
||||
@ -397,6 +411,7 @@ private:
|
||||
required_device<ls157_device> m_mux;
|
||||
};
|
||||
|
||||
// Mystic Marathon
|
||||
class mysticm_state : public williams_d000_ram_state
|
||||
{
|
||||
public:
|
||||
@ -420,9 +435,9 @@ private:
|
||||
int color_decode(uint8_t base_col, int sig_J1, int y);
|
||||
|
||||
uint8_t m_bg_color = 0;
|
||||
|
||||
};
|
||||
|
||||
// Turkey Shoot
|
||||
class tshoot_state : public williams_d000_rom_state
|
||||
{
|
||||
public:
|
||||
@ -454,6 +469,7 @@ private:
|
||||
output_finder<> m_feather_blower;
|
||||
};
|
||||
|
||||
// Joust 2
|
||||
class joust2_state : public williams_d000_rom_state
|
||||
{
|
||||
public:
|
||||
@ -476,18 +492,9 @@ private:
|
||||
virtual void bg_select_w(u8 data) override;
|
||||
|
||||
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);
|
||||
};
|
||||
|
||||
/*----------- 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
|
||||
|
@ -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 */
|
||||
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 */
|
||||
/* the protection from resetting the machine, we just return $a193 for $a190, */
|
||||
/* 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
|
||||
|
@ -93,6 +93,7 @@
|
||||
while bit 7 says odd only.
|
||||
|
||||
******************************************************************************
|
||||
|
||||
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
|
||||
VL2001A
|
||||
5410-09958
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#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)
|
||||
{
|
||||
/* 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];
|
||||
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)
|
||||
if((controlbyte & WMS_BLITTER_CONTROLBYTE_FOREGROUND_ONLY) && !(srcdata & 0xf0)) //FG only and src even pixel=0
|
||||
// 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_NO_EVEN)
|
||||
keepmask &= 0x0f;
|
||||
@ -770,8 +772,8 @@ inline void williams_state::blit_pixel(address_space &space, int dstaddr, int sr
|
||||
keepmask &= 0x0f;
|
||||
}
|
||||
|
||||
//odd pixel (D3-D0)
|
||||
if((controlbyte & WMS_BLITTER_CONTROLBYTE_FOREGROUND_ONLY) && !(srcdata & 0x0f)) //FG only and src odd pixel=0
|
||||
// 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_NO_ODD)
|
||||
keepmask &= 0xf0;
|
||||
@ -788,9 +790,9 @@ inline void williams_state::blit_pixel(address_space &space, int dstaddr, int sr
|
||||
else
|
||||
curpix |= (srcdata & ~keepmask);
|
||||
|
||||
/* 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 */
|
||||
/* are not blocked by the window enable */
|
||||
/* 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 */
|
||||
/* are not blocked by the window enable */
|
||||
if (!m_blitter_window_enable || dstaddr < m_blitter_clip_address || dstaddr >= 0xc000)
|
||||
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 */
|
||||
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);
|
||||
}
|
||||
else
|
||||
{ //shift one pixel right
|
||||
{
|
||||
// shift one pixel right
|
||||
pixdata = (pixdata << 8) | m_blitter_remap[space.read_byte(source)];
|
||||
blit_pixel(space, dest, (pixdata >> 4) & 0xff, controlbyte);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user