missamer: Move to its own driver

- Flesh out driver to make it mostly work
- Create artwork showing all lamps and inputs
This commit is contained in:
Dirk Best 2021-05-07 17:47:44 +02:00
parent cdb476ebdb
commit 763151a18c
6 changed files with 1929 additions and 16 deletions

View File

@ -4679,6 +4679,7 @@ files {
MAME_DIR .. "src/mame/drivers/ltd.cpp",
MAME_DIR .. "src/mame/drivers/macp.cpp",
MAME_DIR .. "src/mame/drivers/micropin.cpp",
MAME_DIR .. "src/mame/drivers/missamer.cpp",
MAME_DIR .. "src/mame/drivers/mephistp.cpp",
MAME_DIR .. "src/mame/drivers/mrgame.cpp",
MAME_DIR .. "src/mame/drivers/nsm.cpp",

View File

@ -797,6 +797,7 @@ minivadr.cpp
minivideo.cpp
mirage.cpp
mirax.cpp
missamer.cpp
missb2.cpp
missbamby.cpp
missile.cpp

View File

@ -319,20 +319,6 @@ ROM_START(tripjok)
ROM_END
// CPU-85 SIRMO - BELGIUM PCB 28-B
// 1x P8085A
// 1x 6.1xx MHz (not readable) XTAL
// 3x P8155
ROM_START(missamer)
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD("c48327.6p", 0x0000, 0x0800, CRC(45fd79f7) SHA1(67b115b13ef7fb94b63176e8e17d97e9480ab4d3))
ROM_LOAD("c48328.6q", 0x0800, 0x0800, CRC(0cd444ec) SHA1(a797053dbfeb67428f08e914220c34cd440181f1))
ROM_LOAD("c48329.6s", 0x1000, 0x0800, CRC(82b87e2d) SHA1(0727ddb5792e1dc105ed7478474cc97839b87106))
ROM_LOAD("c48330.6u", 0x1800, 0x0800, CRC(f76142c6) SHA1(727d657f19d5341323d1ccb6eb96e48a402e089d))
ROM_LOAD("c48331.6w", 0x2000, 0x0800, CRC(5dd0b97a) SHA1(38d8183865e7c182aef0a0a7d514acf6f961f72c))
ROM_END
GAME(1980, cntinntl, 0, bingo, bingo, bingo_state, init_bingo, ROT0, "Bally", "Continental (Bingo)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1980, cntinntl2, cntinntl, bingo, bingo, bingo_state, init_bingo, ROT0, "Bally", "Continental (Bingo, alternate version)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(19??, goldgame, 0, splin, splin, splin_state, init_splin, ROT0, "Splin", "Golden Game (Bingo)", MACHINE_IS_SKELETON_MECHANICAL)
@ -358,4 +344,3 @@ GAME(19??, domino2, 0, seeben, seeben, seeben_state, init_seeben, ROT
GAME(19??, tripjok, 0, seeben, seeben, seeben_state, init_seeben, ROT0, "Seeben (Belgium)", "Triple Joker (Bingo)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(19??, ggate, 0, seeben, seeben, seeben_state, init_seeben, ROT0, "Seeben (Belgium)", "Golden Gate (set 1) (Bingo)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(19??, ggatea, ggate, seeben, seeben, seeben_state, init_seeben, ROT0, "Seeben (Belgium)", "Golden Gate (set 2) (Bingo)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1984, missamer, 0, seeben, seeben, seeben_state, init_seeben, ROT0, "Sirmo (Belgium)", "Miss Americana (Bingo)", MACHINE_IS_SKELETON_MECHANICAL)

View File

@ -0,0 +1,563 @@
// license: BSD-3-Clause
// copyright-holders: Dirk Best
/***************************************************************************
Miss Americana
© 1984 Sirmo
"Bingo Pinball" style game.
Hardware:
- P8085A
- 6.144 MHz XTAL
- 3x P8155
TODO:
- The "Magic Lines" feature isn't emulated
- There is no ball physics simulation
- Sound isn't emulated at all (you can see triggers on the artwork)
- The optional hardware random number generator isn't emulated (see DSW D)
- Output counters
- Verify/measure clocks
- "Telephone" input/output (probably just a remote control?)
Notes:
- It will display the error "cccc" on cold boot. Just push F3 once
to reset and initialize
- Blinking tilt led means "normal operation"
- The service mode supports viewing and changing all memory values as
well as an output (SV5) and input (SV6) test
***************************************************************************/
#include "emu.h"
#include "cpu/i8085/i8085.h"
#include "machine/clock.h"
#include "machine/i8155.h"
#include "machine/nvram.h"
#include "missamer.lh"
namespace {
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class missamer_state : public driver_device
{
public:
missamer_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_ramio(*this, "ramio%u", 0U),
m_inputs(*this, "row%u", 0U),
m_extra(*this, "extra"),
m_lamps(*this, "lamp%u.%u", 0U, 0U),
m_digits(*this, "digit%u", 0U),
m_dy(0),
m_scan(0)
{ }
void missamer(machine_config &config);
protected:
void machine_start() override;
private:
required_device<i8085a_cpu_device> m_maincpu;
required_device_array<i8155_device, 3> m_ramio;
required_ioport_array<16> m_inputs;
required_ioport m_extra;
output_finder<8, 18> m_lamps;
output_finder<4> m_digits;
void mem_map(address_map &map);
void io_map(address_map &map);
void ramio0_pa_w(uint8_t data);
void ramio0_pb_w(uint8_t data);
void ramio0_pc_w(uint8_t data);
uint8_t ramio1_pa_r();
uint8_t ramio1_pb_r();
void ramio1_pc_w(uint8_t data);
void ramio2_pb_w(uint8_t data);
void ramio2_pc_w(uint8_t data);
uint32_t m_dy;
uint8_t m_scan;
};
//**************************************************************************
// ADDRESS MAPS
//**************************************************************************
void missamer_state::mem_map(address_map &map)
{
map(0x0000, 0x27ff).rom().region("maincpu", 0);
map(0x4000, 0x40ff).ram().share("nvram");
map(0x4100, 0x41ff).mirror(0x2000).rw(m_ramio[0], FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
map(0x4200, 0x42ff).mirror(0x2000).rw(m_ramio[1], FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
map(0x4300, 0x43ff).mirror(0x2000).rw(m_ramio[2], FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
map(0xc100, 0xc1ff).mirror(0x2000).rw(m_ramio[0], FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
map(0xc200, 0xc2ff).mirror(0x2000).rw(m_ramio[1], FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
map(0xc300, 0xc3ff).mirror(0x2000).rw(m_ramio[2], FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
}
//**************************************************************************
// INPUT PORT DEFINITIONS
//**************************************************************************
static INPUT_PORTS_START( missamer )
PORT_START("row0")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 1") PORT_TOGGLE
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 2") PORT_TOGGLE
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 3") PORT_TOGGLE
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 4") PORT_TOGGLE
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 5") PORT_TOGGLE
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 6") PORT_TOGGLE
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 7") PORT_TOGGLE
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Shutter")
PORT_START("row1")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 8") PORT_TOGGLE
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 9") PORT_TOGGLE
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 10") PORT_TOGGLE
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 11") PORT_TOGGLE
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 12") PORT_TOGGLE
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 13") PORT_TOGGLE
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Gate")
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Carry Over Shutter")
PORT_START("row2")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 14") PORT_TOGGLE
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 15") PORT_TOGGLE
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 16") PORT_TOGGLE
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 17") PORT_TOGGLE
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 18") PORT_TOGGLE
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 19") PORT_TOGGLE
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 20") PORT_TOGGLE
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 21") PORT_TOGGLE
PORT_START("row3")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 22") PORT_TOGGLE
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 23") PORT_TOGGLE
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 24") PORT_TOGGLE
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Hole 25") PORT_TOGGLE
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Red Rollover")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Yellow Rollover")
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Alley")
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("row4")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TRG 1")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TRG 2")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TRG 3")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TRG 4")
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TRG 5")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Carry Over Balllifter")
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Rest Contact Balllifter")
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Manual Balllift")
PORT_START("row5")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("R Button")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("X Button")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Door")
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TRG 0")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("row6")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_TILT)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Red Doorbutton")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Yellow Doorbutton")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("A Button Magic Lines")
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("B Button Magic Lines")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("C Button Magic Lines")
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("D Button Magic Lines")
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("E Button Magic Lines")
PORT_START("row7")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN2) // right coinslot
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_COIN1) // left coinslot
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Service SV1 (Service)") PORT_TOGGLE
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Service SV2 (+)")
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Service SV3 (-)")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Service SV4 (See Inside)") PORT_TOGGLE
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Service SV5 (Input Test)") PORT_TOGGLE
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Service SV6 (Output Test)") PORT_TOGGLE
// seems to control the hardware random number generator, set to 0xa7 to disable it
PORT_START("row8")
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x00, "D:1")
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x00, "D:2")
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x00, "D:3")
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "D:4")
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "D:5")
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x00, "D:6")
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "D:7")
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x00, "D:8")
PORT_START("row9")
PORT_DIPNAME(0x0f, 0x0e, "Coins (Right)") PORT_DIPLOCATION("C:1,2,3,4")
PORT_DIPSETTING( 0x00, "16")
PORT_DIPSETTING( 0x01, "15")
PORT_DIPSETTING( 0x02, "14")
PORT_DIPSETTING( 0x03, "13")
PORT_DIPSETTING( 0x04, "12")
PORT_DIPSETTING( 0x05, "11")
PORT_DIPSETTING( 0x06, "10")
PORT_DIPSETTING( 0x07, "9")
PORT_DIPSETTING( 0x08, "8")
PORT_DIPSETTING( 0x09, "7")
PORT_DIPSETTING( 0x0a, "6")
PORT_DIPSETTING( 0x0b, "5")
PORT_DIPSETTING( 0x0c, "4")
PORT_DIPSETTING( 0x0d, "3")
PORT_DIPSETTING( 0x0e, "2")
PORT_DIPSETTING( 0x0f, "1")
PORT_DIPNAME(0xf0, 0xd0, "Credits (Right)") PORT_DIPLOCATION("C:5,6,7,8")
PORT_DIPSETTING( 0x00, "15")
PORT_DIPSETTING( 0x10, "14")
PORT_DIPSETTING( 0x20, "13")
PORT_DIPSETTING( 0x30, "12")
PORT_DIPSETTING( 0x40, "11")
PORT_DIPSETTING( 0x50, "10")
PORT_DIPSETTING( 0x60, "9")
PORT_DIPSETTING( 0x70, "8")
PORT_DIPSETTING( 0x80, "7")
PORT_DIPSETTING( 0x90, "6")
PORT_DIPSETTING( 0xa0, "5")
PORT_DIPSETTING( 0xb0, "4")
PORT_DIPSETTING( 0xc0, "3")
PORT_DIPSETTING( 0xd0, "2")
PORT_DIPSETTING( 0xe0, "1")
PORT_DIPSETTING( 0xf0, "0")
PORT_START("row10")
PORT_DIPNAME(0x0f, 0x0f, "Coins (Left)") PORT_DIPLOCATION("B:1,2,3,4")
PORT_DIPSETTING( 0x00, "16")
PORT_DIPSETTING( 0x01, "15")
PORT_DIPSETTING( 0x02, "14")
PORT_DIPSETTING( 0x03, "13")
PORT_DIPSETTING( 0x04, "12")
PORT_DIPSETTING( 0x05, "11")
PORT_DIPSETTING( 0x06, "10")
PORT_DIPSETTING( 0x07, "9")
PORT_DIPSETTING( 0x08, "8")
PORT_DIPSETTING( 0x09, "7")
PORT_DIPSETTING( 0x0a, "6")
PORT_DIPSETTING( 0x0b, "5")
PORT_DIPSETTING( 0x0c, "4")
PORT_DIPSETTING( 0x0d, "3")
PORT_DIPSETTING( 0x0e, "2")
PORT_DIPSETTING( 0x0f, "1")
PORT_DIPNAME(0xf0, 0xe0, "Credits (Left)") PORT_DIPLOCATION("B:5,6,7,8")
PORT_DIPSETTING( 0x00, "15")
PORT_DIPSETTING( 0x10, "14")
PORT_DIPSETTING( 0x20, "13")
PORT_DIPSETTING( 0x30, "12")
PORT_DIPSETTING( 0x40, "11")
PORT_DIPSETTING( 0x50, "10")
PORT_DIPSETTING( 0x60, "9")
PORT_DIPSETTING( 0x70, "8")
PORT_DIPSETTING( 0x80, "7")
PORT_DIPSETTING( 0x90, "6")
PORT_DIPSETTING( 0xa0, "5")
PORT_DIPSETTING( 0xb0, "4")
PORT_DIPSETTING( 0xc0, "3")
PORT_DIPSETTING( 0xd0, "2")
PORT_DIPSETTING( 0xe0, "1")
PORT_DIPSETTING( 0xf0, "0")
PORT_START("row11")
PORT_DIPNAME(0x07, 0x07, "Win Rate") PORT_DIPLOCATION("A:1,2,3")
PORT_DIPSETTING( 0x00, "8") // Most
PORT_DIPSETTING( 0x01, "7")
PORT_DIPSETTING( 0x02, "6")
PORT_DIPSETTING( 0x03, "5")
PORT_DIPSETTING( 0x04, "4")
PORT_DIPSETTING( 0x05, "3")
PORT_DIPSETTING( 0x06, "2")
PORT_DIPSETTING( 0x07, "1") // Least
PORT_DIPNAME(0x08, 0x08, "Reflex Chances") PORT_DIPLOCATION("A:4")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x08, DEF_STR( Yes ))
PORT_DIPNAME(0x10, 0x10, "Plots") PORT_DIPLOCATION("A:5")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x10, DEF_STR( Yes ))
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "A:6")
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "A:7")
PORT_DIPNAME(0x80, 0x80, "Chance: Corner 65-10") PORT_DIPLOCATION("A:8")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x80, DEF_STR( Yes ))
PORT_START("row12")
PORT_DIPNAME(0x01, 0x01, "Chance: Corner 78-9") PORT_DIPLOCATION("E:1")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x01, DEF_STR( Yes ))
PORT_DIPNAME(0x02, 0x02, "Chance: 4 Stars As Green 53-12") PORT_DIPLOCATION("E:2")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x02, DEF_STR( Yes ))
PORT_DIPNAME(0x04, 0x04, "Chance: 4 Stars As Green 61-12") PORT_DIPLOCATION("E:3")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x04, DEF_STR( Yes ))
PORT_DIPNAME(0x08, 0x08, "Chance: Stripped Diagonal B") PORT_DIPLOCATION("E:4")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x08, DEF_STR( Yes ))
PORT_DIPNAME(0x10, 0x10, "Chance: Stripped Diagonal C") PORT_DIPLOCATION("E:5")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x10, DEF_STR( Yes ))
PORT_DIPNAME(0x20, 0x20, "Chance: Stripped Diagonal D") PORT_DIPLOCATION("E:6")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x20, DEF_STR( Yes ))
PORT_DIPNAME(0x40, 0x40, "Chance: Extra Card") PORT_DIPLOCATION("E:7")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x40, DEF_STR( Yes ))
PORT_DIPNAME(0x80, 0x80, "Chance: Any 2") PORT_DIPLOCATION("E:8")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x80, DEF_STR( Yes ))
PORT_START("row13")
PORT_DIPNAME(0x01, 0x01, "Chance: Any 3") PORT_DIPLOCATION("F:1")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x01, DEF_STR( Yes ))
PORT_DIPNAME(0x02, 0x02, "Chance: Extra Ball 17") PORT_DIPLOCATION("F:2")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x02, DEF_STR( Yes ))
PORT_DIPNAME(0x04, 0x04, "Chance: Extra Ball 16") PORT_DIPLOCATION("F:3")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x04, DEF_STR( Yes ))
PORT_DIPNAME(0x08, 0x08, "Chance: Extra Ball 15") PORT_DIPLOCATION("F:4")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x08, DEF_STR( Yes ))
PORT_DIPNAME(0x10, 0x10, "Chance: Extra Ball 14") PORT_DIPLOCATION("F:5")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x10, DEF_STR( Yes ))
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "F:6")
PORT_DIPNAME(0x40, 0x40, "Reflex") PORT_DIPLOCATION("F:7")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x40, DEF_STR( Yes ))
PORT_DIPNAME(0x80, 0x80, "Knock-Off") PORT_DIPLOCATION("F:8")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x80, DEF_STR( Yes ))
PORT_START("row14")
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "G:1")
PORT_DIPNAME(0x02, 0x02, "32 Points Extra Ball") PORT_DIPLOCATION("G:2")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x02, DEF_STR( Yes ))
PORT_DIPNAME(0x04, 0x04, "Game Speed") PORT_DIPLOCATION("G:3")
PORT_DIPSETTING( 0x00, "Fast")
PORT_DIPSETTING( 0x04, "Slow")
PORT_DIPNAME(0x08, 0x08, "32 Points Selection") PORT_DIPLOCATION("G:4")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x08, DEF_STR( Yes ))
PORT_DIPNAME(0x10, 0x10, "Mixer 2") PORT_DIPLOCATION("G:5")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x10, DEF_STR( Yes ))
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "G:6")
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "G:7")
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "G:8")
PORT_START("row15")
PORT_DIPNAME(0x01, 0x01, "Memory Test") PORT_DIPLOCATION("H:1")
PORT_DIPSETTING( 0x00, DEF_STR( On ))
PORT_DIPSETTING( 0x01, DEF_STR( Off ))
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "H:2")
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "H:3")
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "H:4")
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "H:5")
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "H:6")
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "H:7")
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "H:8")
PORT_START("extra")
PORT_DIPNAME(0x80, 0x80, "Bit 7")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x80, DEF_STR( Yes ))
PORT_DIPNAME(0x40, 0x40, "Bit 6")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x40, DEF_STR( Yes ))
PORT_DIPNAME(0x20, 0x20, "Switch Left")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x20, DEF_STR( Yes ))
PORT_DIPNAME(0x10, 0x10, "Switch Right")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x10, DEF_STR( Yes ))
PORT_DIPNAME(0x08, 0x08, "Tel 3")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x08, DEF_STR( Yes ))
PORT_DIPNAME(0x04, 0x04, "Tel 2")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x04, DEF_STR( Yes ))
PORT_DIPNAME(0x02, 0x02, "Tel 1")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x02, DEF_STR( Yes ))
PORT_DIPNAME(0x01, 0x01, "Tel 0")
PORT_DIPSETTING( 0x00, DEF_STR( No ))
PORT_DIPSETTING( 0x01, DEF_STR( Yes ))
INPUT_PORTS_END
//**************************************************************************
// MACHINE EMULATION
//**************************************************************************
void missamer_state::ramio0_pa_w(uint8_t data)
{
// outputs row 1-8
m_dy = (m_dy & 0x3ff00) | (data << 0);
}
void missamer_state::ramio0_pb_w(uint8_t data)
{
// outputs row 9-16
m_dy = (m_dy & 0x300ff) | (data << 8);
}
void missamer_state::ramio0_pc_w(uint8_t data)
{
// 54---- outputs row 18, 17
// --3210 scan column
m_dy = (m_dy & 0x0ffff) | ((data >> 4) << 16);
m_scan = ~data & 0x0f;
// circuit is actually more complicated with a 555 timer
if (BIT(m_scan, 3))
for (int i = 0; i < 18; i++)
m_lamps[m_scan & 0x07][i] = BIT(m_dy, i) ? 0 : 1;
}
uint8_t missamer_state::ramio1_pa_r()
{
// 76------ bit 7 and 6
// --5----- switch right
// ---4---- switch left
// ----3210 telephone
return m_extra->read();
}
uint8_t missamer_state::ramio1_pb_r()
{
return m_inputs[m_scan]->read();
}
void missamer_state::ramio1_pc_w(uint8_t data)
{
// 5----- cash counter
// -43210 magic motor lines e to a
//logerror("ramio1_pc_w: %02x\n", data);
}
void missamer_state::ramio2_pb_w(uint8_t data)
{
// 7------- total in counter
// -6------ total out counter
// --5----- telephone in counter
// ---4---- telephone out counter
// ----3210 led digit value
//logerror("ramio2_pb_w: %02x\n", data);
static const uint8_t ls7447[16] = {
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07,
0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0x00
};
// 74145
if (m_scan < 4)
m_digits[m_scan] = ls7447[~data & 0x0f];
}
void missamer_state::ramio2_pc_w(uint8_t data)
{
// 5----- unused
// -4---- motor playfield
// --3--- motor lifter
// ---2-- strobe port a
// ----1- abf
// -----0 int port a
//logerror("ramio2_pc_w: %02x\n", data);
}
void missamer_state::machine_start()
{
// resolve artwork outputs
m_lamps.resolve();
m_digits.resolve();
// register for save states
save_item(NAME(m_dy));
save_item(NAME(m_scan));
}
//**************************************************************************
// MACHINE DEFINTIONS
//**************************************************************************
void missamer_state::missamer(machine_config &config)
{
I8085A(config, m_maincpu, 6.144_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &missamer_state::mem_map);
m_maincpu->set_clk_out(m_ramio[1], FUNC(i8155_device::set_unscaled_clock_int));
clock_device &vco_clock(CLOCK(config, "vco_clock", 500)); // 74LS124
vco_clock.signal_handler().set_inputline(m_maincpu, I8085_RST75_LINE);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
I8155(config, m_ramio[0], 500); // VCO (470nf)
m_ramio[0]->out_to_callback().set_inputline(m_maincpu, I8085_RST65_LINE);
m_ramio[0]->out_pa_callback().set(FUNC(missamer_state::ramio0_pa_w));
m_ramio[0]->out_pb_callback().set(FUNC(missamer_state::ramio0_pb_w));
m_ramio[0]->out_pc_callback().set(FUNC(missamer_state::ramio0_pc_w));
I8155(config, m_ramio[1], 0); // CLK from 8085
// timer output: UART
m_ramio[1]->in_pa_callback().set(FUNC(missamer_state::ramio1_pa_r));
m_ramio[1]->in_pb_callback().set(FUNC(missamer_state::ramio1_pb_r));
m_ramio[1]->out_pc_callback().set(FUNC(missamer_state::ramio1_pc_w));
I8155(config, m_ramio[2], 235000); // VCO (100pf)
m_ramio[2]->out_pb_callback().set(FUNC(missamer_state::ramio2_pb_w));
m_ramio[2]->out_pc_callback().set(FUNC(missamer_state::ramio2_pc_w));
config.set_default_layout(layout_missamer);
}
//**************************************************************************
// ROM DEFINITIONS
//**************************************************************************
ROM_START( missamer )
ROM_REGION(0x2800, "maincpu", 0)
ROM_LOAD("c48327.6p", 0x0000, 0x0800, CRC(45fd79f7) SHA1(67b115b13ef7fb94b63176e8e17d97e9480ab4d3))
ROM_LOAD("c48328.6q", 0x0800, 0x0800, CRC(0cd444ec) SHA1(a797053dbfeb67428f08e914220c34cd440181f1))
ROM_LOAD("c48329.6s", 0x1000, 0x0800, CRC(82b87e2d) SHA1(0727ddb5792e1dc105ed7478474cc97839b87106))
ROM_LOAD("c48330.6u", 0x1800, 0x0800, CRC(f76142c6) SHA1(727d657f19d5341323d1ccb6eb96e48a402e089d))
ROM_LOAD("c48331.6w", 0x2000, 0x0800, CRC(5dd0b97a) SHA1(38d8183865e7c182aef0a0a7d514acf6f961f72c))
ROM_END
} // anonymous namespace
//**************************************************************************
// SYSTEM DRIVERS
//**************************************************************************
// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROTATION COMPANY FULLNAME FLAGS
GAME(1984, missamer, 0, missamer, missamer, missamer_state, empty_init, ROT0, "Sirmo", "Miss Americana", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )

1361
src/mame/layout/missamer.lay Normal file

File diff suppressed because it is too large Load Diff

View File

@ -9257,7 +9257,6 @@ michkit1 //
michkitb //
michnew //
michstake //
missamer //
montana //
newdixie //
penalty //
@ -23392,6 +23391,9 @@ mirage // (c) 1994 Mitchell
mirax // (c) 1985 Current Technologies
miraxa // (c) 1985 Current Technologies
@source:missamer.cpp
missamer // (c) 1984 Sirmo
@source:missb2.cpp
bublpong // bootleg on enhanced hardware
missb2 // bootleg on enhanced hardware