mirror of
https://github.com/holub/mame
synced 2025-04-20 23:42:22 +03:00
atari_s1,atari_s2: WIP. All games except 4x4 are playable.
This commit is contained in:
parent
2cc7183557
commit
43cfca0f9a
@ -1,11 +1,11 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Robbbert
|
||||
/***********************************************************************************
|
||||
/******************************************************************************************
|
||||
|
||||
PINBALL
|
||||
Atari Generation/System 1
|
||||
PINBALL
|
||||
Atari Generation/System 1
|
||||
|
||||
Schematics and PinMAME used as references.
|
||||
Schematics and PinMAME used as references.
|
||||
|
||||
Dipswitch vs address:
|
||||
SW1 Toggle 1 = 200B
|
||||
@ -27,21 +27,24 @@
|
||||
|
||||
No NVRAM; coin counters are mechanical.
|
||||
|
||||
Until game-specific switches are set up, here is the outhole for each game:
|
||||
- spcrider: O
|
||||
- atarians: W
|
||||
- time2000: Y
|
||||
- aavenger: X
|
||||
Outhole for each game:
|
||||
- spcrider: M (solenoid 5)
|
||||
- midearth: M (solenoid 1)
|
||||
- atarians: G (solenoid unknown)
|
||||
- time2000: J (solenoid 12)
|
||||
- aavenger: X (solenoid 4)
|
||||
|
||||
Status:
|
||||
- All games are playable
|
||||
- When switched on, display is all 8, and it goes blank after a while. This is normal,
|
||||
it's documented in the manual.
|
||||
|
||||
ToDo:
|
||||
- Inputs per game; the ones there are for Airborne Avenger
|
||||
- Link up switches where 2 or more act together
|
||||
- Sound
|
||||
- Lamps, solenoids
|
||||
- Middle Earth is a disaster area
|
||||
- Mechanical sounds
|
||||
- Dips vary per game
|
||||
|
||||
|
||||
************************************************************************************/
|
||||
****************************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "machine/genpin.h"
|
||||
@ -73,9 +76,10 @@ public:
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_p_ram(*this, "ram")
|
||||
, m_dac(*this, "dac")
|
||||
, m_switch(*this, "SWITCH.%u", 0)
|
||||
, m_switch(*this, "X%u", 0)
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
, m_player_lamps(*this, "text%u", 0U)
|
||||
, m_io_outputs(*this, "out%d", 0U)
|
||||
{ }
|
||||
|
||||
void midearth(machine_config &config);
|
||||
@ -87,48 +91,50 @@ protected:
|
||||
virtual void machine_reset() override;
|
||||
|
||||
private:
|
||||
uint8_t m1080_r();
|
||||
void m1080_w(uint8_t data);
|
||||
uint8_t m1084_r();
|
||||
void m1084_w(uint8_t data);
|
||||
uint8_t m1088_r();
|
||||
void m1088_w(uint8_t data);
|
||||
uint8_t m108c_r();
|
||||
void m108c_w(uint8_t data);
|
||||
uint8_t switch_r(offs_t offset);
|
||||
void meter_w(uint8_t data);
|
||||
void audioen_w(uint8_t data);
|
||||
void audiores_w(uint8_t data);
|
||||
void midearth_w(offs_t offset, uint8_t data);
|
||||
u8 m1080_r();
|
||||
void m1080_w(u8 data);
|
||||
u8 m1084_r();
|
||||
void m1084_w(u8 data);
|
||||
u8 m1088_r();
|
||||
void m1088_w(u8 data);
|
||||
u8 m108c_r();
|
||||
void m108c_w(u8 data);
|
||||
u8 switch_r(offs_t offset);
|
||||
void disp_w(offs_t, u8);
|
||||
void meter_w(u8 data);
|
||||
void audioen_w(u8 data);
|
||||
void audiores_w(u8 data);
|
||||
void midearth_w(offs_t offset, u8 data);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(nmi);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(timer_s);
|
||||
void atari_s1_map(address_map &map);
|
||||
void mem_map(address_map &map);
|
||||
void atarians_map(address_map &map);
|
||||
void midearth_map(address_map &map);
|
||||
|
||||
bool m_audiores;
|
||||
uint8_t m_timer_s[3];
|
||||
uint8_t m_vol;
|
||||
uint8_t m_1080;
|
||||
uint8_t m_1084;
|
||||
uint8_t m_1088;
|
||||
uint8_t m_108c;
|
||||
uint8_t m_bit6;
|
||||
uint8_t m_out_offs;
|
||||
uint8_t m_t_c;
|
||||
required_region_ptr<uint8_t> m_p_prom;
|
||||
bool m_audio_en = false;
|
||||
u8 m_timer_s[3]{};
|
||||
u8 m_vol = 0;
|
||||
u8 m_1080 = 0;
|
||||
u8 m_1084 = 0;
|
||||
u8 m_1088 = 0;
|
||||
u8 m_108c = 0;
|
||||
u8 m_bit6 = 0;
|
||||
u8 m_t_c = 0;
|
||||
required_region_ptr<u8> m_p_prom;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_shared_ptr<uint8_t> m_p_ram;
|
||||
required_shared_ptr<u8> m_p_ram;
|
||||
required_device<dac_4bit_r2r_device> m_dac;
|
||||
required_ioport_array<10> m_switch;
|
||||
output_finder<78> m_digits;
|
||||
output_finder<8> m_player_lamps;
|
||||
output_finder<160> m_io_outputs; // 32 solenoids + 128 lamps
|
||||
};
|
||||
|
||||
void atari_s1_state::atari_s1_map(address_map &map)
|
||||
void atari_s1_state::mem_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0x7fff);
|
||||
map(0x0000, 0x00ff).ram().share("ram");
|
||||
map(0x0000, 0x00ff).ram().share("ram").w(FUNC(atari_s1_state::disp_w));
|
||||
map(0x1080, 0x1083).rw(FUNC(atari_s1_state::m1080_r), FUNC(atari_s1_state::m1080_w));
|
||||
map(0x1084, 0x1087).rw(FUNC(atari_s1_state::m1084_r), FUNC(atari_s1_state::m1084_w));
|
||||
map(0x1088, 0x108b).rw(FUNC(atari_s1_state::m1088_r), FUNC(atari_s1_state::m1088_w));
|
||||
@ -138,38 +144,27 @@ void atari_s1_state::atari_s1_map(address_map &map)
|
||||
map(0x4000, 0x4fff).w("watchdog", FUNC(watchdog_timer_device::reset_w));
|
||||
map(0x5080, 0x508f).w(FUNC(atari_s1_state::meter_w)); // time2000 only
|
||||
map(0x6000, 0x6fff).w(FUNC(atari_s1_state::audiores_w)); // audio reset
|
||||
map(0x7000, 0x7fff).rom();
|
||||
map(0x7000, 0x7fff).rom().region("maincpu",0);
|
||||
}
|
||||
|
||||
void atari_s1_state::atarians_map(address_map &map)
|
||||
{ // more ram
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0x7fff);
|
||||
map(0x0000, 0x01ff).ram().share("ram");
|
||||
map(0x1080, 0x1083).rw(FUNC(atari_s1_state::m1080_r), FUNC(atari_s1_state::m1080_w));
|
||||
map(0x1084, 0x1087).rw(FUNC(atari_s1_state::m1084_r), FUNC(atari_s1_state::m1084_w));
|
||||
map(0x1088, 0x108b).rw(FUNC(atari_s1_state::m1088_r), FUNC(atari_s1_state::m1088_w));
|
||||
map(0x108c, 0x108f).rw(FUNC(atari_s1_state::m108c_r), FUNC(atari_s1_state::m108c_w));
|
||||
map(0x2000, 0x204f).mirror(0x0F80).r(FUNC(atari_s1_state::switch_r));
|
||||
map(0x3000, 0x3fff).w(FUNC(atari_s1_state::audioen_w)); // audio enable
|
||||
map(0x4000, 0x4fff).w("watchdog", FUNC(watchdog_timer_device::reset_w));
|
||||
map(0x6000, 0x6fff).w(FUNC(atari_s1_state::audiores_w)); // audio reset
|
||||
map(0x7000, 0x7fff).rom();
|
||||
mem_map(map);
|
||||
map(0x0100, 0x01ff).ram();
|
||||
}
|
||||
|
||||
void atari_s1_state::midearth_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0x7fff);
|
||||
map(0x0000, 0x01ff).ram().share("ram");
|
||||
atarians_map(map);
|
||||
map(0x1000, 0x11ff).w(FUNC(atari_s1_state::midearth_w));
|
||||
map(0x2000, 0x204f).mirror(0x0F80).r(FUNC(atari_s1_state::switch_r));
|
||||
map(0x3000, 0x3fff).w(FUNC(atari_s1_state::audioen_w)); // audio enable
|
||||
map(0x4000, 0x4fff).w("watchdog", FUNC(watchdog_timer_device::reset_w));
|
||||
map(0x6000, 0x6fff).w(FUNC(atari_s1_state::audiores_w)); // audio reset
|
||||
map(0x7000, 0x7fff).rom().nopw(); // writes to FFFF due to poor coding at 7FF5
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( atari_s1 )
|
||||
PORT_START("SWITCH.0") // 2000-2007
|
||||
PORT_START("X0") // 2000-2007
|
||||
PORT_DIPNAME( 0xc3, 0x00, DEF_STR( Coinage ) ) // left chute; right chute
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) // 1C_1C ; 1C_1C
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) // 1C_2C ; 1C_2C
|
||||
@ -178,16 +173,6 @@ static INPUT_PORTS_START( atari_s1 )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) // 2C_1C ; 2C_1C
|
||||
PORT_DIPSETTING( 0x82, DEF_STR( 2C_3C ) ) // 2C_3C ; 2C_3C
|
||||
PORT_DIPSETTING( 0x81, DEF_STR( 2C_5C ) ) // 2C_5C ; 2C_5C
|
||||
// these work but they confuse the dipswitch menu
|
||||
//PORT_DIPSETTING( 0x83, DEF_STR( 2C_1C ) ) // 2C_1C ; 1C_1C
|
||||
//PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) ) // 1C_1C ; 1C_2C
|
||||
//PORT_DIPSETTING( 0x42, DEF_STR( 1C_2C ) ) // 1C_2C ; 1C_4C
|
||||
//PORT_DIPSETTING( 0x41, DEF_STR( 1C_3C ) ) // 1C_3C ; 1C_6C
|
||||
//PORT_DIPSETTING( 0x43, DEF_STR( 2C_3C ) ) // 2C_3C ; 2C_7C
|
||||
//PORT_DIPSETTING( 0xc0, DEF_STR( 2C_5C ) ) // 2C_5C ; 1C_5C
|
||||
//PORT_DIPSETTING( 0xc2, DEF_STR( 2C_7C ) ) // 2C_7C ; 1C_7C
|
||||
//PORT_DIPSETTING( 0xc1, DEF_STR( 3C_1C ) ) // 3C_1C ; 1C_1C
|
||||
//PORT_DIPSETTING( 0xc3, DEF_STR( 1C_1C ) ) // 1C_1C ; 1C_3C
|
||||
PORT_DIPNAME( 0x04, 0x04, "Match" )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
|
||||
@ -199,8 +184,7 @@ static INPUT_PORTS_START( atari_s1 )
|
||||
PORT_DIPSETTING( 0x20, "Free Game" )
|
||||
PORT_DIPSETTING( 0x10, "20000 points" ) // same as 0x30
|
||||
|
||||
PORT_START("SWITCH.1") // 2008-200F
|
||||
// This switch together with 204C thru 204F, sets the scores at which a replay is awarded
|
||||
PORT_START("X1") // 2008-200F
|
||||
PORT_DIPNAME( 0x01, 0x00, "Replay score" )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( High ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Low ) )
|
||||
@ -210,7 +194,7 @@ static INPUT_PORTS_START( atari_s1 )
|
||||
PORT_DIPNAME( 0x04, 0x00, "Spelling Award" )
|
||||
PORT_DIPSETTING( 0x00, "Extra Ball" )
|
||||
PORT_DIPSETTING( 0x04, "20,000 points" )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Test") PORT_CODE(KEYCODE_0)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Test")
|
||||
PORT_DIPNAME( 0x30, 0x10, "Exceed replay score" )
|
||||
PORT_DIPSETTING( 0x00, "Nothing" )
|
||||
PORT_DIPSETTING( 0x20, "Extra Ball" )
|
||||
@ -221,105 +205,117 @@ static INPUT_PORTS_START( atari_s1 )
|
||||
PORT_DIPSETTING( 0x40, "15" )
|
||||
PORT_DIPSETTING( 0xc0, "20" )
|
||||
|
||||
PORT_START("SWITCH.2") // 2010-2017
|
||||
PORT_START("X2") // 2010-2017
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Slam Tilt")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_NAME("Slam Tilt")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_START("SWITCH.3") // 2018-201F
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_START("X3") // 2018-201F
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_START("SWITCH.4") // 2020-2027
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Cabinet Tilt")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_TILT ) PORT_NAME("Pendulum Tilt")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Left Flipper") PORT_CODE(KEYCODE_LSHIFT)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Right Flipper") PORT_CODE(KEYCODE_RSHIFT)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 4")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 3")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 2")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 1")
|
||||
PORT_START("X4") // 2020-2027
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_NAME("Cabinet Tilt") // 17
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_NAME("Pendulum Tilt") //18
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_LSHIFT) PORT_NAME("Left Flipper") //19 flipper in midearth, aavenger, time2000. Normal input for other games.
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Right Flipper") //20 same note as above.
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("INP21")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("INP22")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("INP23")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("INP24")
|
||||
|
||||
PORT_START("SWITCH.5") // 2028-202F
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_START("X5") // 2028-202F
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_START("SWITCH.6") // 2030-2037
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 3") PORT_CODE(KEYCODE_Q)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 2") PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 1") PORT_CODE(KEYCODE_E)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 8") PORT_CODE(KEYCODE_R)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 7") PORT_CODE(KEYCODE_Y)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 6") PORT_CODE(KEYCODE_U)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 5") PORT_CODE(KEYCODE_I)
|
||||
PORT_START("X6") // 2030-2037
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("INP33")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("INP34")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("INP35") // outhole atarians
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_H) PORT_NAME("INP36")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_I) PORT_NAME("INP37")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_J) PORT_NAME("INP38") // outhole time2000
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_K) PORT_NAME("INP39")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_L) PORT_NAME("INP40")
|
||||
|
||||
PORT_START("SWITCH.7") // 2038-203F
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L Hole") PORT_CODE(KEYCODE_O)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bumper 1") PORT_CODE(KEYCODE_V)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bumper 2") PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bumper 3") PORT_CODE(KEYCODE_N)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Spinner") PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R Pocket") PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L Pocket") PORT_CODE(KEYCODE_S)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R Hole") PORT_CODE(KEYCODE_D)
|
||||
PORT_START("X7") // 2038-203F
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("INP41") // outhole middle-earth, space-riders
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("INP42")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_O) PORT_NAME("INP43")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_P) PORT_NAME("INP44")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("INP45")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("INP46")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("INP47")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("INP48")
|
||||
|
||||
PORT_START("SWITCH.8") // 2040-2047
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L Triangle") PORT_CODE(KEYCODE_F)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("10 points") PORT_CODE(KEYCODE_G)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("50 points") PORT_CODE(KEYCODE_H)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("OutHole") PORT_CODE(KEYCODE_X)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R Triangle") PORT_CODE(KEYCODE_J)
|
||||
PORT_START("X8") // 2040-2047
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_U) PORT_NAME("INP49")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_NAME("INP50")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("INP51")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("INP52") // outhole airborne-avenger
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) PORT_NAME("INP53")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("INP54")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("INP55")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("INP56")
|
||||
|
||||
PORT_START("SWITCH.9") // 2048-204F
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("50 points and adv letter") PORT_CODE(KEYCODE_K)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Captive ball rollovers") PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 'B' centre") PORT_CODE(KEYCODE_Z)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Roll thru upper right") PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
|
||||
PORT_START("X9") // 2048-204F
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("INP57")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_COLON) PORT_NAME("INP58")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("INP59")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("INP60")
|
||||
PORT_DIPNAME( 0x10, 0x00, "High score (bit 0)" )
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( High ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Low ) )
|
||||
PORT_DIPNAME( 0x20, 0x20, "High score (bit 1)" )
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( High ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Low ) )
|
||||
PORT_DIPNAME( 0x40, 0x40, "High score (bit 2)" )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( High ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Low ) )
|
||||
PORT_DIPNAME( 0x80, 0x00, "High score (bit 3)" )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( High ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Low ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
uint8_t atari_s1_state::m1080_r()
|
||||
u8 atari_s1_state::m1080_r()
|
||||
{
|
||||
return m_1080 & 0xf0;
|
||||
}
|
||||
|
||||
void atari_s1_state::m1080_w(uint8_t data)
|
||||
void atari_s1_state::m1080_w(u8 data)
|
||||
{
|
||||
m_1080 = data;
|
||||
for (u8 i = 0; i < 8; i++)
|
||||
m_io_outputs[i] = BIT(data, i);
|
||||
}
|
||||
|
||||
uint8_t atari_s1_state::m1084_r()
|
||||
u8 atari_s1_state::m1084_r()
|
||||
{
|
||||
return m_1084 & 0xf0;
|
||||
}
|
||||
|
||||
void atari_s1_state::m1084_w(uint8_t data)
|
||||
void atari_s1_state::m1084_w(u8 data)
|
||||
{
|
||||
m_1084 = data;
|
||||
for (u8 i = 0; i < 8; i++)
|
||||
m_io_outputs[8U+i] = BIT(data, i);
|
||||
|
||||
data &= 15;
|
||||
|
||||
@ -331,80 +327,109 @@ void atari_s1_state::m1084_w(uint8_t data)
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t atari_s1_state::m1088_r()
|
||||
u8 atari_s1_state::m1088_r()
|
||||
{
|
||||
return m_1088 & 0xf0;
|
||||
}
|
||||
|
||||
void atari_s1_state::m1088_w(uint8_t data)
|
||||
void atari_s1_state::m1088_w(u8 data)
|
||||
{
|
||||
m_1088 = data;
|
||||
for (u8 i = 0; i < 8; i++)
|
||||
m_io_outputs[16U+i] = BIT(data, i);
|
||||
}
|
||||
|
||||
uint8_t atari_s1_state::m108c_r()
|
||||
u8 atari_s1_state::m108c_r()
|
||||
{
|
||||
return m_108c;
|
||||
}
|
||||
|
||||
void atari_s1_state::m108c_w(uint8_t data)
|
||||
void atari_s1_state::m108c_w(u8 data)
|
||||
{
|
||||
m_108c = data;
|
||||
for (u8 i = 0; i < 8; i++)
|
||||
m_io_outputs[24U+i] = BIT(data, i);
|
||||
}
|
||||
|
||||
void atari_s1_state::meter_w(uint8_t data)
|
||||
void atari_s1_state::meter_w(u8 data)
|
||||
{
|
||||
// time2000 has optional coin counters etc
|
||||
}
|
||||
|
||||
// midearth has a ram mirror that goes on top of the output ports
|
||||
void atari_s1_state::midearth_w(offs_t offset, uint8_t data)
|
||||
void atari_s1_state::midearth_w(offs_t offset, u8 data)
|
||||
{
|
||||
m_p_ram[offset] = data;
|
||||
|
||||
switch (offset)
|
||||
if (offset < 16)
|
||||
for (u8 i = 0; i < 8; i++)
|
||||
m_io_outputs[32+offset*8+i] = BIT(data, i);
|
||||
else
|
||||
if ((offset >= 0x80) && (offset <= 0x8f))
|
||||
{
|
||||
case 0x80:
|
||||
m1080_w(data);
|
||||
break;
|
||||
case 0x84:
|
||||
m1084_w(data);
|
||||
break;
|
||||
case 0x88:
|
||||
m1088_w(data);
|
||||
break;
|
||||
case 0x8c:
|
||||
m108c_w(data);
|
||||
break;
|
||||
u8 t = BIT(offset, 2, 2);
|
||||
for (u8 i = 0; i < 8; i++)
|
||||
m_io_outputs[t*8+i] = BIT(data, i);
|
||||
|
||||
switch (t)
|
||||
{
|
||||
case 0:
|
||||
m1080_w(data);
|
||||
break;
|
||||
case 1:
|
||||
m1084_w(data);
|
||||
break;
|
||||
case 2:
|
||||
m1088_w(data);
|
||||
break;
|
||||
case 3:
|
||||
m108c_w(data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t atari_s1_state::switch_r(offs_t offset)
|
||||
u8 atari_s1_state::switch_r(offs_t offset)
|
||||
{
|
||||
return (BIT(m_switch[offset>>3]->read(), offset&7 ) << 7) | (BIT(m_bit6, 1) << 6); // switch bit | BIT6_CLK
|
||||
return (BIT(m_switch[offset>>3]->read(), offset&7 ) << 7) | (BIT(m_bit6, 1) << 6) | 0x3f; // switch bit | BIT6_CLK
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER( atari_s1_state::nmi )
|
||||
{
|
||||
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
|
||||
|
||||
m_bit6++;
|
||||
if (m_t_c > 0x40)
|
||||
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
|
||||
else
|
||||
m_t_c++;
|
||||
}
|
||||
|
||||
m_out_offs = (m_out_offs + 1) & 0x1f;
|
||||
uint8_t const p_val = m_p_ram[m_out_offs];
|
||||
if ((m_out_offs & 0x03) == 0x03)
|
||||
void atari_s1_state::disp_w(offs_t offset, u8 data)
|
||||
{
|
||||
static const u8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
|
||||
m_p_ram[offset] = data;
|
||||
|
||||
// Display
|
||||
if (offset < 32)
|
||||
{
|
||||
// Player number
|
||||
m_player_lamps[m_out_offs >> 2] = !BIT(patterns[p_val & 0x0f], 6); // uses 'g' segment
|
||||
if ((offset < 16) && ((offset & 0x03) == 0x03))
|
||||
{
|
||||
// Player number
|
||||
m_player_lamps[offset >> 2] = !BIT(patterns[data & 0x0f], 6); // uses 'g' segment
|
||||
}
|
||||
else
|
||||
{
|
||||
// Digits
|
||||
m_digits[offset*2] = patterns[data >> 4];
|
||||
m_digits[offset*2+1] = patterns[data & 15];
|
||||
}
|
||||
}
|
||||
else
|
||||
// Lamps
|
||||
if (offset < 48)
|
||||
{
|
||||
// Digits
|
||||
m_digits[(m_out_offs << 1) + 0] = patterns[p_val >> 4];
|
||||
m_digits[(m_out_offs << 1) + 1] = patterns[p_val & 0x0f];
|
||||
offset &= 15;
|
||||
for (u8 i = 0; i < 8; i++)
|
||||
m_io_outputs[32U+offset*8+i] = BIT(data, i);
|
||||
}
|
||||
}
|
||||
|
||||
@ -424,7 +449,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( atari_s1_state::timer_s )
|
||||
if (m_timer_s[1] > 15)
|
||||
{
|
||||
m_timer_s[1] = m_1088 & 15; // set to preset value
|
||||
if (!m_audiores)
|
||||
if (m_audio_en)
|
||||
{
|
||||
m_timer_s[2]++;
|
||||
offs_t offs = (m_timer_s[2] & 31) | ((m_1080 & 15) << 5);
|
||||
@ -435,38 +460,54 @@ TIMER_DEVICE_CALLBACK_MEMBER( atari_s1_state::timer_s )
|
||||
}
|
||||
}
|
||||
|
||||
void atari_s1_state::audioen_w(uint8_t data)
|
||||
void atari_s1_state::audioen_w(u8 data)
|
||||
{
|
||||
m_audio_en = true;
|
||||
}
|
||||
|
||||
void atari_s1_state::audiores_w(uint8_t data)
|
||||
void atari_s1_state::audiores_w(u8 data)
|
||||
{
|
||||
if (data==0x5b) data=0; // spcrider
|
||||
m_audiores = (data) ? 0 : 1;
|
||||
m_audio_en = false;
|
||||
}
|
||||
|
||||
|
||||
void atari_s1_state::machine_start()
|
||||
{
|
||||
genpin_class::machine_start();
|
||||
|
||||
m_digits.resolve();
|
||||
m_player_lamps.resolve();
|
||||
m_io_outputs.resolve();
|
||||
|
||||
save_item(NAME(m_audio_en));
|
||||
save_item(NAME(m_timer_s));
|
||||
save_item(NAME(m_vol));
|
||||
save_item(NAME(m_1080));
|
||||
save_item(NAME(m_1084));
|
||||
save_item(NAME(m_1088));
|
||||
save_item(NAME(m_108c));
|
||||
save_item(NAME(m_bit6));
|
||||
save_item(NAME(m_t_c));
|
||||
}
|
||||
|
||||
void atari_s1_state::machine_reset()
|
||||
{
|
||||
genpin_class::machine_reset();
|
||||
for (u8 i = 0; i < m_io_outputs.size(); i++)
|
||||
m_io_outputs[i] = 0;
|
||||
|
||||
m_vol = 0;
|
||||
m_dac->set_output_gain(0, 0);
|
||||
m_t_c = 0;
|
||||
m_audiores = 0;
|
||||
m_audio_en = false;
|
||||
m_bit6 = 0;
|
||||
m_out_offs = 0;
|
||||
}
|
||||
|
||||
void atari_s1_state::atari_s1(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M6800(config, m_maincpu, MASTER_CLK);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &atari_s1_state::atari_s1_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &atari_s1_state::mem_map);
|
||||
|
||||
WATCHDOG_TIMER(config, "watchdog");
|
||||
|
||||
@ -499,9 +540,9 @@ void atari_s1_state::midearth(machine_config &config)
|
||||
/ The Atarians (11/1976)
|
||||
/-------------------------------------------------------------------*/
|
||||
ROM_START(atarians)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
ROM_LOAD("atarian.e00", 0x7000, 0x0800, CRC(6066bd63) SHA1(e993497d0ca9f056e18838494089def8bdc265c9))
|
||||
ROM_LOAD("atarian.e0", 0x7800, 0x0800, CRC(45cb0427) SHA1(e286930ca36bdd0f79acefd142d2a5431fa8005b))
|
||||
ROM_REGION(0x1000, "maincpu", 0)
|
||||
ROM_LOAD("atarian.e00", 0x0000, 0x0800, CRC(6066bd63) SHA1(e993497d0ca9f056e18838494089def8bdc265c9))
|
||||
ROM_LOAD("atarian.e0", 0x0800, 0x0800, CRC(45cb0427) SHA1(e286930ca36bdd0f79acefd142d2a5431fa8005b))
|
||||
|
||||
ROM_REGION(0x0200, "proms", 0)
|
||||
ROM_LOAD("07028-01.bin", 0x0000, 0x0200, CRC(e8034b5b) SHA1(6959912c530efcc4a0c690800867fb0d1f33627f))
|
||||
@ -511,9 +552,9 @@ ROM_END
|
||||
/ Time 2000 (06/1977)
|
||||
/-------------------------------------------------------------------*/
|
||||
ROM_START(time2000)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
ROM_LOAD("time.e00", 0x7000, 0x0800, CRC(e380f35c) SHA1(f2b4c508c8b7a2ce9924da97c05fb31d5115f36f))
|
||||
ROM_LOAD("time.e0", 0x7800, 0x0800, CRC(1e79c133) SHA1(54ce5d59a00334fcec8b12c077d70e3629549af0))
|
||||
ROM_REGION(0x1000, "maincpu", 0)
|
||||
ROM_LOAD("time.e00", 0x0000, 0x0800, CRC(e380f35c) SHA1(f2b4c508c8b7a2ce9924da97c05fb31d5115f36f))
|
||||
ROM_LOAD("time.e0", 0x0800, 0x0800, CRC(1e79c133) SHA1(54ce5d59a00334fcec8b12c077d70e3629549af0))
|
||||
|
||||
ROM_REGION(0x0200, "proms", 0)
|
||||
ROM_LOAD("07028-01.bin", 0x0000, 0x0200, CRC(e8034b5b) SHA1(6959912c530efcc4a0c690800867fb0d1f33627f))
|
||||
@ -523,9 +564,9 @@ ROM_END
|
||||
/ Airborne Avenger (09/1977)
|
||||
/-------------------------------------------------------------------*/
|
||||
ROM_START(aavenger)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
ROM_LOAD("airborne.e00", 0x7000, 0x0800, CRC(05ac26b8) SHA1(114d587923ade9370d606e428af02a407d272c85))
|
||||
ROM_LOAD("airborne.e0", 0x7800, 0x0800, CRC(44e67c54) SHA1(7f94189c12e322c41908d651cf6a3b6061426959))
|
||||
ROM_REGION(0x1000, "maincpu", 0)
|
||||
ROM_LOAD("airborne.e00", 0x0000, 0x0800, CRC(05ac26b8) SHA1(114d587923ade9370d606e428af02a407d272c85))
|
||||
ROM_LOAD("airborne.e0", 0x0800, 0x0800, CRC(44e67c54) SHA1(7f94189c12e322c41908d651cf6a3b6061426959))
|
||||
|
||||
ROM_REGION(0x0200, "proms", 0)
|
||||
ROM_LOAD("20252-01.bin", 0x0000, 0x0200, CRC(3d44551d) SHA1(926100f8169ab20230ad2168f94e6ad65fb1a7dc))
|
||||
@ -535,18 +576,18 @@ ROM_END
|
||||
/ Middle Earth (02/1978)
|
||||
/-------------------------------------------------------------------*/
|
||||
ROM_START(midearth)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
ROM_LOAD("609.bin", 0x7000, 0x0800, CRC(589df745) SHA1(4bd3e4f177e8d86bab41f3a14c169b936eeb480a))
|
||||
ROM_LOAD("608.bin", 0x7800, 0x0800, CRC(28b92faf) SHA1(8585770f4059049f1dcbc0c6ef5718b6ff1a5431))
|
||||
ROM_REGION(0x1000, "maincpu", 0)
|
||||
ROM_LOAD("609.bin", 0x0000, 0x0800, CRC(589df745) SHA1(4bd3e4f177e8d86bab41f3a14c169b936eeb480a))
|
||||
ROM_LOAD("608.bin", 0x0800, 0x0800, CRC(28b92faf) SHA1(8585770f4059049f1dcbc0c6ef5718b6ff1a5431))
|
||||
|
||||
ROM_REGION(0x0200, "proms", 0)
|
||||
ROM_LOAD("20252-01.bin", 0x0000, 0x0200, CRC(3d44551d) SHA1(926100f8169ab20230ad2168f94e6ad65fb1a7dc))
|
||||
ROM_END
|
||||
|
||||
ROM_START(mideartha)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
ROM_LOAD("20855-01.bin", 0x7000, 0x0800, CRC(4a9d47ca) SHA1(57c4458822109c3ba2fa53ac1c1cd6e169e51b24))
|
||||
ROM_LOAD("20856-01.bin", 0x7800, 0x0800, CRC(8f119e37) SHA1(5a4d63605865f3ceca4c09dbdcd888498c615b89))
|
||||
ROM_REGION(0x1000, "maincpu", 0)
|
||||
ROM_LOAD("20855-01.bin", 0x0000, 0x0800, CRC(4a9d47ca) SHA1(57c4458822109c3ba2fa53ac1c1cd6e169e51b24))
|
||||
ROM_LOAD("20856-01.bin", 0x0800, 0x0800, CRC(8f119e37) SHA1(5a4d63605865f3ceca4c09dbdcd888498c615b89))
|
||||
|
||||
ROM_REGION(0x0200, "proms", 0)
|
||||
ROM_LOAD("20252-01.bin", 0x0000, 0x0200, CRC(3d44551d) SHA1(926100f8169ab20230ad2168f94e6ad65fb1a7dc))
|
||||
@ -556,9 +597,9 @@ ROM_END
|
||||
/ Space Riders (09/1978)
|
||||
/-------------------------------------------------------------------*/
|
||||
ROM_START(spcrider)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
ROM_LOAD("spacer.bin", 0x7000, 0x0800, CRC(3cf1cd73) SHA1(c46044fb815b439f12fb3e21c470c8b93ebdfd55))
|
||||
ROM_LOAD("spacel.bin", 0x7800, 0x0800, CRC(66ffb04e) SHA1(42d8b7fb7206b30478f631d0e947c0908dcf5419))
|
||||
ROM_REGION(0x1000, "maincpu", 0)
|
||||
ROM_LOAD("spacer.bin", 0x0000, 0x0800, CRC(3cf1cd73) SHA1(c46044fb815b439f12fb3e21c470c8b93ebdfd55))
|
||||
ROM_LOAD("spacel.bin", 0x0800, 0x0800, CRC(66ffb04e) SHA1(42d8b7fb7206b30478f631d0e947c0908dcf5419))
|
||||
|
||||
ROM_REGION(0x0200, "proms", 0)
|
||||
ROM_LOAD("20967-01.j3", 0x0000, 0x0200, CRC(da1f77b4) SHA1(b21fdc1c6f196c320ec5404013d672c35f95890b)) // PinMAME note: nuatari lists 20967-01 (and claims that all the SR boards (5) he has feature that one), manual schematics and parts list 20252-01 though
|
||||
@ -567,9 +608,9 @@ ROM_END
|
||||
} // Anonymous namespace
|
||||
|
||||
|
||||
GAME( 1976, atarians, 0, atarians, atari_s1, atari_s1_state, empty_init, ROT0, "Atari", "The Atarians", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
GAME( 1977, time2000, 0, atari_s1, atari_s1, atari_s1_state, empty_init, ROT0, "Atari", "Time 2000", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
GAME( 1977, aavenger, 0, atari_s1, atari_s1, atari_s1_state, empty_init, ROT0, "Atari", "Airborne Avenger", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
GAME( 1978, midearth, 0, midearth, atari_s1, atari_s1_state, empty_init, ROT0, "Atari", "Middle Earth", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME( 1978, mideartha, midearth, midearth, atari_s1, atari_s1_state, empty_init, ROT0, "Atari", "Middle Earth (alternate)", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME( 1978, spcrider, 0, atari_s1, atari_s1, atari_s1_state, empty_init, ROT0, "Atari", "Space Riders", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
GAME( 1976, atarians, 0, atarians, atari_s1, atari_s1_state, empty_init, ROT0, "Atari", "The Atarians", MACHINE_IS_SKELETON_MECHANICAL )
|
||||
GAME( 1977, time2000, 0, atari_s1, atari_s1, atari_s1_state, empty_init, ROT0, "Atari", "Time 2000", MACHINE_IS_SKELETON_MECHANICAL )
|
||||
GAME( 1977, aavenger, 0, atari_s1, atari_s1, atari_s1_state, empty_init, ROT0, "Atari", "Airborne Avenger", MACHINE_IS_SKELETON_MECHANICAL )
|
||||
GAME( 1978, midearth, 0, midearth, atari_s1, atari_s1_state, empty_init, ROT0, "Atari", "Middle Earth", MACHINE_IS_SKELETON_MECHANICAL )
|
||||
GAME( 1978, mideartha, midearth, midearth, atari_s1, atari_s1_state, empty_init, ROT0, "Atari", "Middle Earth (alternate)", MACHINE_IS_SKELETON_MECHANICAL )
|
||||
GAME( 1978, spcrider, 0, atari_s1, atari_s1, atari_s1_state, empty_init, ROT0, "Atari", "Space Riders", MACHINE_IS_SKELETON_MECHANICAL )
|
||||
|
@ -2,21 +2,22 @@
|
||||
// copyright-holders:Robbbert
|
||||
/****************************************************************************************
|
||||
|
||||
PINBALL
|
||||
Atari Generation/System 2 and 3
|
||||
PINBALL
|
||||
Atari Generation/System 2 and 3
|
||||
|
||||
System 2 : Manuals and PinMAME used as references (couldn't find full schematics).
|
||||
System 3 : PinMAME used as reference (couldn't find anything else).
|
||||
System 2 : Manuals and PinMAME used as references (couldn't find full schematics).
|
||||
System 3 : PinMAME used as reference (couldn't find anything else).
|
||||
|
||||
The only difference seems to be an extra bank of inputs (or something) at 2008-200B.
|
||||
The only difference seems to be an extra bank of inputs (or something) at 2008-200B.
|
||||
|
||||
Status:
|
||||
- Superman, Hercules, Roadrunner are playable.
|
||||
- Hercules: unassigned inputs, if pressed, will cause the machine to reboot
|
||||
|
||||
ToDo:
|
||||
- 4x4 not emulated yet, appears to be a different cpu and hardware.
|
||||
- sounds to be verified against a real machine
|
||||
- noise generator sounds like a loud barrrr instead of noise, fortunately it
|
||||
doesn't seem to be used.
|
||||
- inputs, outputs, dips vary per machine
|
||||
- High score isn't saved or remembered
|
||||
- 4x4 not emulated yet, it's totally different hardware.
|
||||
- noise generator sounds like a loud barrrr instead of noise, fortunately it isn't used.
|
||||
- roadrunr: test button not working, sets off an alarm instead. Slam Tilt?
|
||||
|
||||
|
||||
*****************************************************************************************/
|
||||
@ -24,6 +25,7 @@ ToDo:
|
||||
#include "emu.h"
|
||||
#include "machine/genpin.h"
|
||||
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "cpu/m6800/m6800.h"
|
||||
#include "machine/timer.h"
|
||||
#include "machine/watchdog.h"
|
||||
@ -45,57 +47,61 @@ public:
|
||||
, m_dac(*this, "dac")
|
||||
, m_dac1(*this, "dac1")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
, m_io_outputs(*this, "out%d", 0U)
|
||||
{ }
|
||||
|
||||
void atari_s2(machine_config &config);
|
||||
void atari_s3(machine_config &config);
|
||||
void fourx4(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_reset() override;
|
||||
virtual void machine_start() override { m_digits.resolve(); }
|
||||
virtual void machine_start() override;
|
||||
|
||||
private:
|
||||
void sound0_w(uint8_t data);
|
||||
void sound1_w(uint8_t data);
|
||||
void lamp_w(uint8_t data) { };
|
||||
void sol0_w(uint8_t data);
|
||||
void sol1_w(uint8_t data) { };
|
||||
void intack_w(uint8_t data);
|
||||
void display_w(offs_t offset, uint8_t data);
|
||||
void sound0_w(u8 data);
|
||||
void sound1_w(u8 data);
|
||||
void lamp_w(offs_t, u8);
|
||||
void sol0_w(u8 data);
|
||||
void sol1_w(u8 data);
|
||||
void intack_w(u8 data);
|
||||
void display_w(offs_t offset, u8 data);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(irq);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(timer_s);
|
||||
|
||||
void atari_s2_map(address_map &map);
|
||||
void atari_s3_map(address_map &map);
|
||||
void fourx4_map(address_map &map);
|
||||
|
||||
bool m_timer_sb;
|
||||
uint8_t m_timer_s[5];
|
||||
uint8_t m_sound0;
|
||||
uint8_t m_sound1;
|
||||
uint8_t m_vol;
|
||||
uint8_t m_t_c;
|
||||
uint8_t m_segment[7];
|
||||
required_region_ptr<uint8_t> m_p_prom;
|
||||
bool m_timer_sb = 0;
|
||||
u8 m_timer_s[5]{};
|
||||
u8 m_sound0 = 0;
|
||||
u8 m_sound1 = 0;
|
||||
u8 m_vol = 0;
|
||||
u8 m_t_c = 0;
|
||||
u8 m_segment[7]{};
|
||||
required_region_ptr<u8> m_p_prom;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<dac_4bit_binary_weighted_device> m_dac;
|
||||
required_device<dac_3bit_binary_weighted_device> m_dac1;
|
||||
output_finder<68> m_digits;
|
||||
output_finder<80> m_io_outputs; // 16 solenoids + 64 lamps
|
||||
};
|
||||
|
||||
|
||||
void atari_s2_state::atari_s2_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0x3fff);
|
||||
map(0x0000, 0x00ff).mirror(0x0700).ram();
|
||||
map(0x0800, 0x08ff).mirror(0x0700).ram().share("nvram"); // battery backed
|
||||
map(0x1000, 0x1000).mirror(0x07F8).portr("SWITCH.0");
|
||||
map(0x1001, 0x1001).mirror(0x07F8).portr("SWITCH.1");
|
||||
map(0x1002, 0x1002).mirror(0x07F8).portr("SWITCH.2");
|
||||
map(0x1003, 0x1003).mirror(0x07F8).portr("SWITCH.3");
|
||||
map(0x1004, 0x1004).mirror(0x07F8).portr("SWITCH.4");
|
||||
map(0x1005, 0x1005).mirror(0x07F8).portr("SWITCH.5");
|
||||
map(0x1006, 0x1006).mirror(0x07F8).portr("SWITCH.6");
|
||||
map(0x1007, 0x1007).mirror(0x07F8).portr("SWITCH.7");
|
||||
map(0x1000, 0x1000).mirror(0x07F8).portr("X0");
|
||||
map(0x1001, 0x1001).mirror(0x07F8).portr("X1");
|
||||
map(0x1002, 0x1002).mirror(0x07F8).portr("X2");
|
||||
map(0x1003, 0x1003).mirror(0x07F8).portr("X3");
|
||||
map(0x1004, 0x1004).mirror(0x07F8).portr("X4");
|
||||
map(0x1005, 0x1005).mirror(0x07F8).portr("X5");
|
||||
map(0x1006, 0x1006).mirror(0x07F8).portr("X6");
|
||||
map(0x1007, 0x1007).mirror(0x07F8).portr("X7");
|
||||
map(0x1800, 0x1800).mirror(0x071F).w(FUNC(atari_s2_state::sound0_w));
|
||||
map(0x1820, 0x1820).mirror(0x071F).w(FUNC(atari_s2_state::sound1_w));
|
||||
map(0x1840, 0x1847).mirror(0x0718).w(FUNC(atari_s2_state::display_w));
|
||||
@ -108,39 +114,28 @@ void atari_s2_state::atari_s2_map(address_map &map)
|
||||
map(0x2001, 0x2001).mirror(0x07FC).portr("DSW1");
|
||||
map(0x2002, 0x2002).mirror(0x07FC).portr("DSW2");
|
||||
map(0x2003, 0x2003).mirror(0x07FC).portr("DSW3");
|
||||
map(0x2800, 0x3fff).rom();
|
||||
map(0x2800, 0x3fff).rom().region("maincpu", 0);
|
||||
}
|
||||
|
||||
void atari_s2_state::atari_s3_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0x3fff);
|
||||
map(0x0000, 0x00ff).mirror(0x0700).ram();
|
||||
map(0x0800, 0x08ff).mirror(0x0700).ram().share("nvram"); // battery backed
|
||||
map(0x1000, 0x1000).mirror(0x07F8).portr("SWITCH.0");
|
||||
map(0x1001, 0x1001).mirror(0x07F8).portr("SWITCH.1");
|
||||
map(0x1002, 0x1002).mirror(0x07F8).portr("SWITCH.2");
|
||||
map(0x1003, 0x1003).mirror(0x07F8).portr("SWITCH.3");
|
||||
map(0x1004, 0x1004).mirror(0x07F8).portr("SWITCH.4");
|
||||
map(0x1005, 0x1005).mirror(0x07F8).portr("SWITCH.5");
|
||||
map(0x1006, 0x1006).mirror(0x07F8).portr("SWITCH.6");
|
||||
map(0x1007, 0x1007).mirror(0x07F8).portr("SWITCH.7");
|
||||
map(0x1800, 0x1800).mirror(0x071F).w(FUNC(atari_s2_state::sound0_w));
|
||||
map(0x1820, 0x1820).mirror(0x071F).w(FUNC(atari_s2_state::sound1_w));
|
||||
map(0x1840, 0x1847).mirror(0x0718).w(FUNC(atari_s2_state::display_w));
|
||||
map(0x1860, 0x1867).mirror(0x0718).w(FUNC(atari_s2_state::lamp_w));
|
||||
map(0x1880, 0x1880).mirror(0x071F).w(FUNC(atari_s2_state::sol0_w));
|
||||
map(0x18a0, 0x18a7).mirror(0x0718).w(FUNC(atari_s2_state::sol1_w));
|
||||
map(0x18c0, 0x18c0).mirror(0x071F).w("watchdog", FUNC(watchdog_timer_device::reset_w));
|
||||
map(0x18e0, 0x18e0).mirror(0x071F).w(FUNC(atari_s2_state::intack_w));
|
||||
map(0x2000, 0x2000).mirror(0x07F4).portr("DSW0");
|
||||
map(0x2001, 0x2001).mirror(0x07F4).portr("DSW1");
|
||||
map(0x2002, 0x2002).mirror(0x07F4).portr("DSW2");
|
||||
map(0x2003, 0x2003).mirror(0x07F4).portr("DSW3");
|
||||
atari_s2_map(map);
|
||||
map(0x2008, 0x2008).mirror(0x07F4).portr("DSW4");
|
||||
map(0x2009, 0x2009).mirror(0x07F4).portr("DSW5");
|
||||
map(0x200a, 0x200a).mirror(0x07F4).portr("DSW6");
|
||||
map(0x200b, 0x200b).mirror(0x07F4).portr("DSW7");
|
||||
map(0x2800, 0x3fff).rom();
|
||||
}
|
||||
|
||||
void atari_s2_state::fourx4_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map(0x0000, 0x07ff).ram();
|
||||
map(0x1000, 0x17ff).ram();
|
||||
map(0x2000, 0x27ff).ram();
|
||||
map(0x3000, 0x37ff).ram();
|
||||
map(0x8000, 0xffff).rom().region("maincpu", 0);
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( atari_s2 )
|
||||
@ -204,7 +199,7 @@ static INPUT_PORTS_START( atari_s2 )
|
||||
PORT_DIPSETTING( 0x0d, "2 coins/13 credits" )
|
||||
PORT_DIPSETTING( 0x0f, "2 coins/15 credits" )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
|
||||
PORT_BIT( 0x40, 0x00, IPT_UNUSED )
|
||||
PORT_BIT( 0x40, 0x00, IPT_UNUSED ) // Hercules: High Score Million Limit (manual says it MUST BE ON)
|
||||
PORT_DIPNAME( 0x80, 0x00, "High Score Display" )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
@ -254,76 +249,76 @@ static INPUT_PORTS_START( atari_s2 )
|
||||
PORT_START("DSW7")
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("SWITCH.0") // 1000
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Test") PORT_CODE(KEYCODE_0)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Outhole") PORT_CODE(KEYCODE_X)
|
||||
PORT_START("X0") // 1000
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Test")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Outhole")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("SWITCH.1") // 1001
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_W)
|
||||
PORT_START("X1") // 1001
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("INP09") // Hercules: reboots machine
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("INP10") // Hercules: reboots machine
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("INP11") // Hercules: reboots machine
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("INP12")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("INP13")
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("SWITCH.2") // 1002
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_E)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_R)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_U)
|
||||
PORT_START("X2") // 1002
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("INP18")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("INP19")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_H) PORT_NAME("INP20")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_I) PORT_NAME("INP21")
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("SWITCH.3") // 1003
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_I)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_O)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_S)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D)
|
||||
PORT_START("X3") // 1003
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_J) PORT_NAME("INP24")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_K) PORT_NAME("INP25")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_L) PORT_NAME("INP26")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_NAME("INP27") // Hercules: reboots machine
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("INP28")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_O) PORT_NAME("INP29")
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("SWITCH.4") // 1004
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K)
|
||||
PORT_START("X4") // 1004
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_P) PORT_NAME("INP32")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("INP33")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("INP34")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("INP35")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("INP36")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_U) PORT_NAME("INP37")
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("SWITCH.5") // 1005
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_START("X5") // 1005
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_NAME("INP40")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("INP41") // Hercules: reboots machine
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) PORT_NAME("INP42") // Hercules: reboots machine
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("INP43") // Hercules: reboots machine
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("SWITCH.6") // 1006
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_C)
|
||||
PORT_START("X6") // 1006
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_NAME("Tilt") // Superman: Slam Tilt wired in parallel with this.
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("INP52")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("INP53")
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("SWITCH.7") // 1007
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_V)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_START("X7") // 1007
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("INP56")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_COLON) PORT_NAME("INP57")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("INP58") // Hercules: reboots machine
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("INP59") // Hercules: reboots machine
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("INP60") // Hercules: reboots machine
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("INP61") // Hercules: reboots machine
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -344,7 +339,7 @@ INPUT_PORTS_END
|
||||
14 = total plays counter
|
||||
*/
|
||||
|
||||
void atari_s2_state::sol0_w(uint8_t data)
|
||||
void atari_s2_state::sol0_w(u8 data)
|
||||
{
|
||||
switch (data)
|
||||
{
|
||||
@ -362,11 +357,25 @@ void atari_s2_state::sol0_w(uint8_t data)
|
||||
//default:
|
||||
//if (data) printf("%X ",data);
|
||||
}
|
||||
for (u8 i = 0; i < 8; i++)
|
||||
m_io_outputs[i] = BIT(data, i);
|
||||
}
|
||||
|
||||
void atari_s2_state::display_w(offs_t offset, uint8_t data)
|
||||
void atari_s2_state::sol1_w(u8 data)
|
||||
{
|
||||
static constexpr uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
|
||||
for (u8 i = 0; i < 8; i++)
|
||||
m_io_outputs[8+i] = BIT(data, i);
|
||||
}
|
||||
|
||||
void atari_s2_state::lamp_w(offs_t offset, u8 data)
|
||||
{
|
||||
for (u8 i = 0; i < 8; i++)
|
||||
m_io_outputs[16+offset*8+i] = BIT(data, i);
|
||||
}
|
||||
|
||||
void atari_s2_state::display_w(offs_t offset, u8 data)
|
||||
{
|
||||
static constexpr u8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
|
||||
if (offset < 7)
|
||||
{
|
||||
m_segment[offset] = patterns[data&15];
|
||||
@ -374,12 +383,12 @@ void atari_s2_state::display_w(offs_t offset, uint8_t data)
|
||||
else
|
||||
{
|
||||
data &= 7;
|
||||
for (uint8_t i = 0; i < 7; i++)
|
||||
for (u8 i = 0; i < 7; i++)
|
||||
m_digits[i * 10 + data] = m_segment[i];
|
||||
}
|
||||
}
|
||||
|
||||
void atari_s2_state::intack_w(uint8_t data)
|
||||
void atari_s2_state::intack_w(u8 data)
|
||||
{
|
||||
m_maincpu->set_input_line(M6800_IRQ_LINE, CLEAR_LINE);
|
||||
}
|
||||
@ -438,7 +447,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( atari_s2_state::timer_s )
|
||||
// d4-5 = select initial clock frequency
|
||||
// d6 h = enable wave
|
||||
// d7 h = enable noise
|
||||
void atari_s2_state::sound0_w(uint8_t data)
|
||||
void atari_s2_state::sound0_w(u8 data)
|
||||
{
|
||||
m_sound0 = data;
|
||||
offs_t offs = (m_timer_s[2] & 31) | ((m_sound0 & 15) << 5);
|
||||
@ -448,7 +457,7 @@ void atari_s2_state::sound0_w(uint8_t data)
|
||||
|
||||
// d0-3 = volume
|
||||
// d4-7 = preset on 74LS161
|
||||
void atari_s2_state::sound1_w(uint8_t data)
|
||||
void atari_s2_state::sound1_w(u8 data)
|
||||
{
|
||||
m_sound1 = data >> 4;
|
||||
|
||||
@ -472,8 +481,28 @@ TIMER_DEVICE_CALLBACK_MEMBER( atari_s2_state::irq )
|
||||
m_t_c++;
|
||||
}
|
||||
|
||||
void atari_s2_state::machine_start()
|
||||
{
|
||||
genpin_class::machine_start();
|
||||
|
||||
m_digits.resolve();
|
||||
m_io_outputs.resolve();
|
||||
|
||||
save_item(NAME(m_timer_sb));
|
||||
save_item(NAME(m_timer_s));
|
||||
save_item(NAME(m_sound0));
|
||||
save_item(NAME(m_sound1));
|
||||
save_item(NAME(m_vol));
|
||||
save_item(NAME(m_t_c));
|
||||
save_item(NAME(m_segment));
|
||||
}
|
||||
|
||||
void atari_s2_state::machine_reset()
|
||||
{
|
||||
genpin_class::machine_reset();
|
||||
for (u8 i = 0; i < m_io_outputs.size(); i++)
|
||||
m_io_outputs[i] = 0;
|
||||
|
||||
m_vol = 0;
|
||||
m_dac->set_output_gain(0,0);
|
||||
m_dac1->set_output_gain(0,0);
|
||||
@ -510,15 +539,35 @@ void atari_s2_state::atari_s3(machine_config &config)
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &atari_s2_state::atari_s3_map);
|
||||
}
|
||||
|
||||
void atari_s2_state::fourx4(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M6502(config, m_maincpu, 1'000'000); // guess
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &atari_s2_state::fourx4_map);
|
||||
|
||||
/* Sound */
|
||||
genpin_audio(config);
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
|
||||
DAC_4BIT_BINARY_WEIGHTED(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.15); // r23-r26 (68k,33k,18k,8.2k)
|
||||
DAC_3BIT_BINARY_WEIGHTED(config, m_dac1, 0).add_route(ALL_OUTPUTS, "speaker", 0.15); // r18-r20 (100k,47k,100k)
|
||||
|
||||
/* Video */
|
||||
config.set_default_layout(layout_atari_s2);
|
||||
|
||||
// TIMER(config, "irq").configure_periodic(FUNC(atari_s2_state::irq), attotime::from_hz(XTAL(4'000'000) / 8192));
|
||||
// TIMER(config, "timer_s").configure_periodic(FUNC(atari_s2_state::timer_s), attotime::from_hz(150000));
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
/ Superman (03/1979)
|
||||
/-------------------------------------------------------------------*/
|
||||
ROM_START(supermap)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
ROM_LOAD("supmn_k.rom", 0x2800, 0x0800, CRC(a28091c2) SHA1(9f5e47db408da96a31cb2f3be0fa9fb1e79f8d85))
|
||||
ROM_LOAD("atari_m.rom", 0x3000, 0x0800, CRC(1bb6b72c) SHA1(dd24ed54de275aadf8dc0810a6af3ac97aea4026))
|
||||
ROM_LOAD("atari_j.rom", 0x3800, 0x0800, CRC(26521779) SHA1(2cf1c66441aee99b9d01859d495c12025b5ef094))
|
||||
ROM_REGION(0x1800, "maincpu", 0)
|
||||
ROM_LOAD("supmn_k.rom", 0x0000, 0x0800, CRC(a28091c2) SHA1(9f5e47db408da96a31cb2f3be0fa9fb1e79f8d85))
|
||||
ROM_LOAD("atari_m.rom", 0x0800, 0x0800, CRC(1bb6b72c) SHA1(dd24ed54de275aadf8dc0810a6af3ac97aea4026))
|
||||
ROM_LOAD("atari_j.rom", 0x1000, 0x0800, CRC(26521779) SHA1(2cf1c66441aee99b9d01859d495c12025b5ef094))
|
||||
|
||||
ROM_REGION(0x0200, "proms", 0)
|
||||
ROM_LOAD("20967-01.j3", 0x0000, 0x0200, CRC(da1f77b4) SHA1(b21fdc1c6f196c320ec5404013d672c35f95890b))
|
||||
@ -528,10 +577,10 @@ ROM_END
|
||||
/ Hercules (05/1979)
|
||||
/-------------------------------------------------------------------*/
|
||||
ROM_START(hercules)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
ROM_LOAD("herc_k.rom", 0x2800, 0x0800, CRC(65e099b1) SHA1(83a06bc82e0f8f4c0655886c6a9962bb28d00c5e))
|
||||
ROM_LOAD("atari_m.rom", 0x3000, 0x0800, CRC(1bb6b72c) SHA1(dd24ed54de275aadf8dc0810a6af3ac97aea4026))
|
||||
ROM_LOAD("atari_j.rom", 0x3800, 0x0800, CRC(26521779) SHA1(2cf1c66441aee99b9d01859d495c12025b5ef094))
|
||||
ROM_REGION(0x1800, "maincpu", 0)
|
||||
ROM_LOAD("herc_k.rom", 0x0000, 0x0800, CRC(65e099b1) SHA1(83a06bc82e0f8f4c0655886c6a9962bb28d00c5e))
|
||||
ROM_LOAD("atari_m.rom", 0x0800, 0x0800, CRC(1bb6b72c) SHA1(dd24ed54de275aadf8dc0810a6af3ac97aea4026))
|
||||
ROM_LOAD("atari_j.rom", 0x1000, 0x0800, CRC(26521779) SHA1(2cf1c66441aee99b9d01859d495c12025b5ef094))
|
||||
|
||||
ROM_REGION(0x0200, "proms", 0)
|
||||
ROM_LOAD("20967-01.j3", 0x0000, 0x0200, CRC(da1f77b4) SHA1(b21fdc1c6f196c320ec5404013d672c35f95890b))
|
||||
@ -541,10 +590,10 @@ ROM_END
|
||||
/ Road Runner (??/1979)
|
||||
/-------------------------------------------------------------------*/
|
||||
ROM_START(roadrunr)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
ROM_LOAD("0000.716", 0x2800, 0x0800, CRC(62f5f394) SHA1(ff91066d43d788119e3337788abd86e5c0bf2d92))
|
||||
ROM_LOAD("3000.716", 0x3000, 0x0800, CRC(2fc01359) SHA1(d3df20c764bb68a5316367bb18d34a03293e7fa6))
|
||||
ROM_LOAD("3800.716", 0x3800, 0x0800, CRC(77262408) SHA1(3045a732c39c96002f495f64ed752279f7d43ee7))
|
||||
ROM_REGION(0x1800, "maincpu", 0)
|
||||
ROM_LOAD("0000.716", 0x0000, 0x0800, CRC(62f5f394) SHA1(ff91066d43d788119e3337788abd86e5c0bf2d92))
|
||||
ROM_LOAD("3000.716", 0x0800, 0x0800, CRC(2fc01359) SHA1(d3df20c764bb68a5316367bb18d34a03293e7fa6))
|
||||
ROM_LOAD("3800.716", 0x1000, 0x0800, CRC(77262408) SHA1(3045a732c39c96002f495f64ed752279f7d43ee7))
|
||||
|
||||
ROM_REGION(0x0200, "proms", 0)
|
||||
ROM_LOAD("20967-01.j3", 0x0000, 0x0200, BAD_DUMP CRC(da1f77b4) SHA1(b21fdc1c6f196c320ec5404013d672c35f95890b)) // PinMAME note: unknown so far if using the 20967-01 is correct for Road Runner, but sounds good
|
||||
@ -554,20 +603,20 @@ ROM_END
|
||||
/ 4x4 (10/1982)
|
||||
/-------------------------------------------------------------------*/
|
||||
ROM_START(fourx4)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
ROM_LOAD("8000ce65.bin", 0x8000, 0x2000, CRC(27341155) SHA1(c0da1fbf64f93ab163b2ea6bfbfc7b778cea819f)) \
|
||||
ROM_LOAD("a0004c37.bin", 0xa000, 0x2000, CRC(6f93102f) SHA1(d6520987ed5805b0e6b5da5653fc7cb063e86dda)) \
|
||||
ROM_LOAD("c000a70c.bin", 0xc000, 0x2000, CRC(c31ca8d3) SHA1(53f20eff0084771dc61d19db7ddae52e4423e75e)) \
|
||||
ROM_RELOAD(0xe000, 0x2000)
|
||||
ROM_REGION(0x8000, "maincpu", 0)
|
||||
ROM_LOAD("8000ce65.bin", 0x0000, 0x2000, CRC(27341155) SHA1(c0da1fbf64f93ab163b2ea6bfbfc7b778cea819f))
|
||||
ROM_LOAD("a0004c37.bin", 0x2000, 0x2000, CRC(6f93102f) SHA1(d6520987ed5805b0e6b5da5653fc7cb063e86dda))
|
||||
ROM_LOAD("c000a70c.bin", 0x4000, 0x2000, CRC(c31ca8d3) SHA1(53f20eff0084771dc61d19db7ddae52e4423e75e))
|
||||
ROM_RELOAD(0x6000, 0x2000)
|
||||
|
||||
ROM_REGION(0x0200, "proms", ROMREGION_ERASE00)
|
||||
// doesn't have PROMs according to PinMAME
|
||||
ROM_REGION(0x0200, "proms", 0)
|
||||
ROM_LOAD("20967-01.j3", 0x0000, 0x0200, CRC(da1f77b4) SHA1(b21fdc1c6f196c320ec5404013d672c35f95890b)) // labelled as 82s130.bin which is the old name
|
||||
ROM_END
|
||||
|
||||
} // Anonymous namespace
|
||||
|
||||
|
||||
GAME( 1979, supermap, 0, atari_s2, atari_s2, atari_s2_state, empty_init, ROT0, "Atari", "Superman (Pinball)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
GAME( 1979, hercules, 0, atari_s2, atari_s2, atari_s2_state, empty_init, ROT0, "Atari", "Hercules", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
GAME( 1979, roadrunr, 0, atari_s3, atari_s2, atari_s2_state, empty_init, ROT0, "Atari", "Road Runner", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
GAME( 1982, fourx4, 0, atari_s3, atari_s2, atari_s2_state, empty_init, ROT0, "Atari", "4x4", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME( 1979, supermap, 0, atari_s2, atari_s2, atari_s2_state, empty_init, ROT0, "Atari", "Superman (Pinball)", MACHINE_IS_SKELETON_MECHANICAL )
|
||||
GAME( 1979, hercules, 0, atari_s2, atari_s2, atari_s2_state, empty_init, ROT0, "Atari", "Hercules", MACHINE_IS_SKELETON_MECHANICAL )
|
||||
GAME( 1979, roadrunr, 0, atari_s3, atari_s2, atari_s2_state, empty_init, ROT0, "Atari", "Road Runner", MACHINE_IS_SKELETON_MECHANICAL )
|
||||
GAME( 1982, fourx4, 0, fourx4, atari_s2, atari_s2_state, empty_init, ROT0, "Atari", "4x4", MACHINE_IS_SKELETON_MECHANICAL )
|
||||
|
@ -14,10 +14,10 @@ copyright-holders:Robbbert
|
||||
|
||||
<element name="P0"><text string="Ball / Match"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="P1"><text string="Credits"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="P3"><text string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="P4"><text string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="P3"><text state="0" string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="P4"><text state="0" string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="P5"><text state="0" string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
<element name="P6"><text state="0" string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
|
||||
|
||||
<view name="Default Layout">
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user