fourx4: split off to a separate driver.

This commit is contained in:
Robbbert 2021-11-28 15:08:16 +11:00
parent c04720297c
commit 12fc6b7720
5 changed files with 125 additions and 50 deletions

View File

@ -4638,6 +4638,7 @@ createMAMEProjects(_target, _subtarget, "pinball")
files {
MAME_DIR .. "src/mame/drivers/allied.cpp",
MAME_DIR .. "src/mame/drivers/alvg.cpp",
MAME_DIR .. "src/mame/drivers/atari_4x4.cpp",
MAME_DIR .. "src/mame/drivers/atari_s1.cpp",
MAME_DIR .. "src/mame/drivers/atari_s2.cpp",
MAME_DIR .. "src/mame/drivers/barni.cpp",

View File

@ -83,6 +83,7 @@ atarisy1.cpp
atarisy2.cpp
atarisy4.cpp
atarittl.cpp
atari_4x4.cpp
atari_s1.cpp
atari_s2.cpp
atetris.cpp

View File

@ -0,0 +1,120 @@
// license:BSD-3-Clause
// copyright-holders:Robbbert
/****************************************************************************************
PINBALL
Atari 4X4
Unlike all the other Atari pinballs, this one seems to use a 6502.
There's no manuals or full schematics.
The game has 8 captive balls in 2 banks of 4, and they can be released by hitting a
target (one per ball). Therefore, most of the time you're playing multiball.
Status:
- Skeleton
ToDo:
- Everything
- The audio prom is the same one used in Atari System 2, so the sound card should be the
same.
*****************************************************************************************/
#include "emu.h"
#include "machine/genpin.h"
#include "cpu/m6502/m6502.h"
//#include "machine/timer.h"
//#include "sound/dac.h"
//#include "speaker.h"
//#include "atari_s2.lh"
namespace {
class atari_4x4_state : public genpin_class
{
public:
atari_4x4_state(const machine_config &mconfig, device_type type, const char *tag)
: genpin_class(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_digits(*this, "digit%u", 0U)
, m_io_outputs(*this, "out%d", 0U)
{ }
void fourx4(machine_config &config);
private:
virtual void machine_reset() override;
virtual void machine_start() override;
void mem_map(address_map &map);
required_device<m6502_device> m_maincpu;
output_finder<68> m_digits; // don't know how many
output_finder<80> m_io_outputs; // ?? solenoids + ?? lamps
};
void atari_4x4_state::mem_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_4x4 )
INPUT_PORTS_END
void atari_4x4_state::machine_start()
{
genpin_class::machine_start();
m_digits.resolve();
m_io_outputs.resolve();
//save_item(NAME(m_segment));
}
void atari_4x4_state::machine_reset()
{
genpin_class::machine_reset();
for (u8 i = 0; i < m_io_outputs.size(); i++)
m_io_outputs[i] = 0;
}
void atari_4x4_state::fourx4(machine_config &config)
{
/* basic machine hardware */
M6502(config, m_maincpu, 1'000'000); // guess
m_maincpu->set_addrmap(AS_PROGRAM, &atari_4x4_state::mem_map);
/* Video */
//config.set_default_layout(layout_fourx4);
/* 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)
//TIMER(config, "timer_s").configure_periodic(FUNC(atari_s2_state::timer_s), attotime::from_hz(150000));
}
/*-------------------------------------------------------------------
/ 4x4 (10/1982)
/-------------------------------------------------------------------*/
ROM_START(fourx4)
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", 0)
ROM_LOAD("20967-01.j3", 0x0000, 0x0200, CRC(da1f77b4) SHA1(b21fdc1c6f196c320ec5404013d672c35f95890b))
ROM_END
} // Anonymous namespace
GAME( 1982, fourx4, 0, fourx4, atari_4x4, atari_4x4_state, empty_init, ROT0, "Atari", "4x4", MACHINE_IS_SKELETON_MECHANICAL )

View File

@ -14,7 +14,6 @@ Status:
- Superman, Hercules, Roadrunner are playable.
ToDo:
- 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,7 +23,6 @@ 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"
@ -51,7 +49,6 @@ public:
void atari_s2(machine_config &config);
void atari_s3(machine_config &config);
void fourx4(machine_config &config);
protected:
virtual void machine_reset() override;
@ -70,7 +67,6 @@ private:
void atari_s2_map(address_map &map);
void atari_s3_map(address_map &map);
void fourx4_map(address_map &map);
bool m_timer_sb = 0;
u8 m_timer_s[5]{};
@ -127,16 +123,6 @@ void atari_s2_state::atari_s3_map(address_map &map)
map(0x200b, 0x200b).mirror(0x07F4).portr("DSW7");
}
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 )
PORT_START("DSW0")
PORT_DIPNAME( 0x07, 0x05, "Max Credits" )
@ -553,26 +539,6 @@ 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)
@ -613,24 +579,9 @@ ROM_START(roadrunr)
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
ROM_END
/*-------------------------------------------------------------------
/ 4x4 (10/1982)
/-------------------------------------------------------------------*/
ROM_START(fourx4)
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", 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_IS_SKELETON_MECHANICAL )
GAME( 1979, hercules, 0, atari_s2, hercules, 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 )

View File

@ -2888,6 +2888,9 @@ via4386vio // Via 4386 VIO / Highscreen universal board (48
zi4dvs // Zida 4DVS motherboard (486)
zito4dps // ZIDA Tomato board 4DPS (486)
@source:atari_4x4.cpp
fourx4 //
@source:atari_s1.cpp
aavenger //
atarians //
@ -2897,7 +2900,6 @@ spcrider //
time2000 //
@source:atari_s2.cpp
fourx4 //
hercules //
roadrunr //
supermap //