summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/hh_pic16.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/hh_pic16.cpp')
-rw-r--r--src/mame/drivers/hh_pic16.cpp1929
1 files changed, 0 insertions, 1929 deletions
diff --git a/src/mame/drivers/hh_pic16.cpp b/src/mame/drivers/hh_pic16.cpp
deleted file mode 100644
index 102111824bc..00000000000
--- a/src/mame/drivers/hh_pic16.cpp
+++ /dev/null
@@ -1,1929 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:hap
-// thanks-to:Sean Riddle, Kevin Horton
-/***************************************************************************
-
- GI PIC 16xx-driven dedicated handhelds or other simple devices.
-
- known chips:
-
- serial device etc.
------------------------------------------------------------
- *020 1650 19??, GI Economega IV TV PPL Tuning System Control
- *021 1650 1978, GI AY-3-8910 demo board
- @024 1655 1979, Toytronic? Football
- @033 1655A 1979, Toytronic Football (newer)
- @036 1655A 1979, Ideal Maniac
- @043 1655A 1979, Caprice Pro-Action Baseball
- @049 1655A 1980, Kingsford Match Me(?)/Mini Match Me
- @051 1655A 1979, Tandy Electronic Basketball
- @053 1655A 1979, Atari Touch Me
- @0?? 1655A 1979, Tiger Half Court Computer Basketball/Sears Electronic Basketball (custom label)
- @061 1655A 1980, Lakeside Le Boom
- @078 1655A 1980, Ideal Flash
- *081 1655A 1981, Ramtex Space Invaders/Block Buster
- @094 1655A 1980, GAF Melody Madness
- @110 1650A 1979, Tiger/Tandy Rocket Pinball
- *123 1655A? 1980, Kingsford Match Me/Mini Match Me
- @133 1650A 1981, U.S. Games Programmable Baseball/Tandy 2-Player Baseball
- @144 1650A 1981, U.S. Games/Tandy 2-Player Football
- *192 1650 19??, <unknown> phone dialer (have dump)
- *255 1655 19??, <unknown> talking clock (have dump)
- *518 1650A 19??, GI Teleview Control Chip (features differ per program)
- *519 1650A 19??, "
- *532 1650A 19??, "
- *533 1650A 19??, "
- *536 1650 1982, GI Teleview Autodialer/Terminal Identifier
-
- (* means undumped unless noted, @ denotes it's in this driver)
-
-
- TODO:
- - tweak MCU frequency for games when video/audio recording surfaces(YouTube etc.)
- - us2pfball player led is brighter, but I can't get a stable picture
- - ttfball: discrete sound part, for volume gating?
- - what's the relation between hccbaskb and tbaskb? Is one the bootleg of the
- other? Or are they both made by the same subcontractor? I presume Toytronic.
- - uspbball and pabball internal artwork
-
-***************************************************************************/
-
-#include "emu.h"
-#include "cpu/pic16c5x/pic16c5x.h"
-#include "video/pwm.h"
-#include "machine/clock.h"
-#include "machine/timer.h"
-#include "sound/spkrdev.h"
-#include "speaker.h"
-
-#include "flash.lh" // clickable
-#include "hccbaskb.lh"
-#include "leboom.lh" // clickable
-#include "maniac.lh" // clickable
-#include "melodym.lh" // clickable
-#include "matchme.lh" // clickable
-#include "rockpin.lh"
-#include "tbaskb.lh"
-#include "touchme.lh" // clickable
-#include "ttfball.lh"
-#include "us2pfball.lh"
-
-#include "hh_pic16_test.lh" // common test-layout - use external artwork
-
-
-class hh_pic16_state : public driver_device
-{
-public:
- hh_pic16_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_display(*this, "display"),
- m_speaker(*this, "speaker"),
- m_inputs(*this, "IN.%u", 0)
- { }
-
- // devices
- required_device<pic16c5x_device> m_maincpu;
- optional_device<pwm_display_device> m_display;
- optional_device<speaker_sound_device> m_speaker;
- optional_ioport_array<6> m_inputs; // max 6
-
- // misc common
- u8 m_a; // MCU port A write data
- u8 m_b; // " B
- u8 m_c; // " C
- u8 m_d; // " D
- u16 m_inp_mux; // multiplexed inputs mask
-
- u16 read_inputs(int columns, u16 colmask = ~0);
- u8 read_rotated_inputs(int columns, u8 rowmask = ~0);
- virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button);
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
-};
-
-
-// machine start/reset
-
-void hh_pic16_state::machine_start()
-{
- // zerofill
- m_a = 0;
- m_b = 0;
- m_c = 0;
- m_d = 0;
- m_inp_mux = ~0;
-
- // register for savestates
- save_item(NAME(m_a));
- save_item(NAME(m_b));
- save_item(NAME(m_c));
- save_item(NAME(m_d));
- save_item(NAME(m_inp_mux));
-}
-
-void hh_pic16_state::machine_reset()
-{
-}
-
-
-
-/***************************************************************************
-
- Helper Functions
-
-***************************************************************************/
-
-// generic input handlers
-
-u16 hh_pic16_state::read_inputs(int columns, u16 colmask)
-{
- // active low
- u16 ret = ~0 & colmask;
-
- // read selected input rows
- for (int i = 0; i < columns; i++)
- if (~m_inp_mux >> i & 1)
- ret &= m_inputs[i]->read();
-
- return ret;
-}
-
-u8 hh_pic16_state::read_rotated_inputs(int columns, u8 rowmask)
-{
- u8 ret = 0;
- u16 colmask = (1 << columns) - 1;
-
- // read selected input columns
- for (int i = 0; i < 8; i++)
- if (1 << i & rowmask && ~m_inputs[i]->read() & ~m_inp_mux & colmask)
- ret |= 1 << i;
-
- // active low
- return ~ret & rowmask;
-}
-
-INPUT_CHANGED_MEMBER(hh_pic16_state::reset_button)
-{
- // when an input is directly wired to MCU MCLR pin
- m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
-}
-
-
-
-/***************************************************************************
-
- Minidrivers (subclass, I/O, Inputs, Machine Config, ROM Defs)
-
-***************************************************************************/
-
-namespace {
-
-/***************************************************************************
-
- Atari Touch Me
- * PIC 1655A-053
- * 2 7seg LEDs + 4 other LEDs, 1-bit sound
-
- This is the handheld version of the 1974 arcade game.
-
- known revisions:
- - Model BH-100 GI C013233 Rev 2 Atari W 1979: PIC 1655A-053
- - Model BH-100 C013150 Rev 6 Atari 1979: AMI C10745 (custom ASIC)
-
-***************************************************************************/
-
-class touchme_state : public hh_pic16_state
-{
-public:
- touchme_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- void update_display();
- void update_speaker();
- u8 read_a();
- void write_b(u8 data);
- void write_c(u8 data);
- void touchme(machine_config &config);
-};
-
-// handlers
-
-void touchme_state::update_display()
-{
- m_display->matrix(~m_b & 0x7b, m_c);
-}
-
-void touchme_state::update_speaker()
-{
- m_speaker->level_w((m_b >> 7 & 1) | (m_c >> 6 & 2));
-}
-
-u8 touchme_state::read_a()
-{
- // A: multiplexed inputs
- return read_inputs(3, 0xf);
-}
-
-void touchme_state::write_b(u8 data)
-{
- // B0-B2: input mux
- m_inp_mux = data & 7;
-
- // B0,B1: digit select
- // B3-B6: leds
- m_b = data;
- update_display();
-
- // B7: speaker lead 1
- update_speaker();
-}
-
-void touchme_state::write_c(u8 data)
-{
- // C0-C6: digit segments
- m_c = data;
- update_display();
-
- // C7: speaker lead 2
- update_speaker();
-}
-
-// config
-
-static INPUT_PORTS_START( touchme )
- PORT_START("IN.0") // B0 port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Last")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("High")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Skill")
-
- PORT_START("IN.1") // B1 port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Blue Button")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Yellow Button")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Red Button")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Green Button")
-
- PORT_START("IN.2") // B2 port A
- PORT_CONFNAME( 0x07, 0x01^0x07, "Game Select" )
- PORT_CONFSETTING( 0x01^0x07, "1" )
- PORT_CONFSETTING( 0x02^0x07, "2" )
- PORT_CONFSETTING( 0x04^0x07, "3" )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
-INPUT_PORTS_END
-
-void touchme_state::touchme(machine_config &config)
-{
- /* basic machine hardware */
- PIC1655(config, m_maincpu, 300000); // approximation - RC osc. R=100K, C=47pF
- m_maincpu->read_a().set(FUNC(touchme_state::read_a));
- m_maincpu->write_b().set(FUNC(touchme_state::write_b));
- m_maincpu->read_c().set_constant(0xff);
- m_maincpu->write_c().set(FUNC(touchme_state::write_c));
-
- // PIC CLKOUT, tied to RTCC
- CLOCK(config, "clock", 300000/4).signal_handler().set_inputline("maincpu", PIC16C5x_RTCC);
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(7, 7);
- m_display->set_segmask(3, 0x7f);
- config.set_default_layout(layout_touchme);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker);
- static const double speaker_levels[] = { 0.0, 1.0, -1.0, 0.0 };
- m_speaker->set_levels(4, speaker_levels);
- m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
-}
-
-// roms
-
-ROM_START( touchme )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1655a-053", 0x0000, 0x0400, CRC(f0858f0a) SHA1(53ffe111d43db1c110847590350ef62f02ed5e0e) )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
- Caprice Pro-Action Baseball (manufactured by Calfax)
- * PIC 1655A-043
- * 1 7seg LED + 36 other LEDs, CD4028, 1-bit sound
-
-***************************************************************************/
-
-class pabball_state : public hh_pic16_state
-{
-public:
- pabball_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- void update_display();
- void write_b(u8 data);
- void write_c(u8 data);
- void pabball(machine_config &config);
-};
-
-// handlers
-
-void pabball_state::update_display()
-{
- // CD4028 BCD to decimal decoder
- // CD4028 0-8: led select, 9: 7seg
- u16 sel = m_c & 0xf;
- if (sel & 8) sel &= 9;
- sel = 1 << sel;
-
- m_display->matrix(sel, m_b);
-}
-
-void pabball_state::write_b(u8 data)
-{
- // B: led data
- m_b = ~data;
- update_display();
-}
-
-void pabball_state::write_c(u8 data)
-{
- // C2: RTCC pin
- m_maincpu->set_input_line(PIC16C5x_RTCC, data >> 2 & 1);
-
- // C7: speaker out
- m_speaker->level_w(data >> 7 & 1);
-
- // C0-C3: CD4028 A-D
- m_c = data;
- update_display();
-}
-
-// config
-
-static INPUT_PORTS_START( pabball )
- PORT_START("IN.0") // port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Curve Left")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL PORT_NAME("P2 Curve Right")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Straight")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN.1") // port C
- PORT_BIT( 0xcf, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Hit")
- PORT_CONFNAME( 0x20, 0x00, DEF_STR( Players ) )
- PORT_CONFSETTING( 0x00, "1" )
- PORT_CONFSETTING( 0x20, "2" )
-
- PORT_START("RESET")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_pic16_state, reset_button, 0)
-INPUT_PORTS_END
-
-void pabball_state::pabball(machine_config &config)
-{
- /* basic machine hardware */
- PIC1655(config, m_maincpu, 1200000); // approximation - RC osc. R=18K, C=27pF
- m_maincpu->read_a().set_ioport("IN.0");
- m_maincpu->write_b().set(FUNC(pabball_state::write_b));
- m_maincpu->read_c().set_ioport("IN.1");
- m_maincpu->write_c().set(FUNC(pabball_state::write_c));
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(10, 8);
- m_display->set_segmask(0x200, 0xff);
- config.set_default_layout(layout_hh_pic16_test);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
-}
-
-// roms
-
-ROM_START( pabball )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1655a-043", 0x0000, 0x0400, CRC(43c9b765) SHA1(888a431bab9bcb241c14f33f70863fa2ad89c96b) )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
- GAF Melody Madness
- * PIC 1655A-094
- * 2 lamps under tube, 1-bit sound
-
- Melody Madness is a tabletop music memory game, shaped like a jukebox.
- It can also be played as a simple electronic piano.
-
-***************************************************************************/
-
-class melodym_state : public hh_pic16_state
-{
-public:
- melodym_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- void write_b(u8 data);
- u8 read_c();
- void write_c(u8 data);
- void melodym(machine_config &config);
-};
-
-// handlers
-
-void melodym_state::write_b(u8 data)
-{
- // B2-B6: input mux
- m_inp_mux = data >> 2 & 0x1f;
-}
-
-u8 melodym_state::read_c()
-{
- // C0-C4: multiplexed inputs
- return read_inputs(5, 0x1f) | 0xe0;
-}
-
-void melodym_state::write_c(u8 data)
-{
- // C6: both lamps
- m_display->matrix(1, ~data >> 6 & 1);
-
- // C7: speaker out
- m_speaker->level_w(~data >> 7 & 1);
-}
-
-// config
-
-static INPUT_PORTS_START( melodym )
- PORT_START("IN.0") // B2 port C
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_NAME("Button 1")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_NAME("Button 2")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_NAME("Button 3")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_NAME("Button 4")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_NAME("Button 5")
-
- PORT_START("IN.1") // B3 port C
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Button 6")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("Button 7")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Button 8")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Button 9")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Button 10")
-
- PORT_START("IN.2") // B4 port C
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Button 11")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Button 12")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) // there is no button 13
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("Button 14")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("Button 15")
-
- PORT_START("IN.3") // B5 port C
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Button 16")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Button 17")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Button 18")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_NAME("Button 19")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Button 20")
-
- PORT_START("IN.4") // B6 port C
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("Button 21")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("Button 22")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("Button 23")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("Button 24")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("Button 25")
-
- PORT_START("IN.5") // port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_NAME("Novice")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_NAME("Whiz")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_NAME("Pro")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_NAME("Note")
-INPUT_PORTS_END
-
-void melodym_state::melodym(machine_config &config)
-{
- /* basic machine hardware */
- PIC1655(config, m_maincpu, 1000000); // approximation
- m_maincpu->read_a().set_ioport("IN.5");
- m_maincpu->write_b().set(FUNC(melodym_state::write_b));
- m_maincpu->read_c().set(FUNC(melodym_state::read_c));
- m_maincpu->write_c().set(FUNC(melodym_state::write_c));
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(1, 1);
- m_display->set_bri_levels(0.9);
- config.set_default_layout(layout_melodym);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
-}
-
-// roms
-
-ROM_START( melodym )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1655a-094", 0x0000, 0x0400, CRC(6d35bd7b) SHA1(20e326085878f69a9d4ef1651ef4443f27188567) )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
- Ideal Maniac, by Ralph Baer
- * PIC 1655A-036
- * 2 7seg LEDs, 1-bit sound
-
- Maniac is a reflex game for 2-4 players. There are 4 challenges:
- 1: Musical Maniac: Press the button as soon as the music stops.
- 2: Sounds Abound: Count the number of tones in the song, then press the button
- after the same amount of beeps.
- 3: Look Twice: Press the button after the game repeats the first pattern.
- 4: Your Time Is Up: Press the button after estimating the duration of the tone.
-
-***************************************************************************/
-
-class maniac_state : public hh_pic16_state
-{
-public:
- maniac_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- void update_display();
- void update_speaker();
- void write_b(u8 data);
- void write_c(u8 data);
- void maniac(machine_config &config);
-};
-
-// handlers
-
-void maniac_state::update_display()
-{
- m_display->write_row(0, ~m_b & 0x7f);
- m_display->write_row(1, ~m_c & 0x7f);
- m_display->update();
-}
-
-void maniac_state::update_speaker()
-{
- m_speaker->level_w((m_b >> 7 & 1) | (m_c >> 6 & 2));
-}
-
-void maniac_state::write_b(u8 data)
-{
- // B0-B6: left 7seg
- m_b = data;
- update_display();
-
- // B7: speaker lead 1
- update_speaker();
-}
-
-void maniac_state::write_c(u8 data)
-{
- // C0-C6: right 7seg
- m_c = data;
- update_display();
-
- // C7: speaker lead 2
- update_speaker();
-}
-
-// config
-
-static INPUT_PORTS_START( maniac )
- PORT_START("IN.0") // port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // top button, increment clockwise
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
-INPUT_PORTS_END
-
-void maniac_state::maniac(machine_config &config)
-{
- /* basic machine hardware */
- PIC1655(config, m_maincpu, 1000000); // approximation - RC osc. R=~13.4K, C=470pF
- m_maincpu->read_a().set_ioport("IN.0");
- m_maincpu->write_b().set(FUNC(maniac_state::write_b));
- m_maincpu->write_c().set(FUNC(maniac_state::write_c));
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(2, 7);
- m_display->set_segmask(3, 0x7f);
- config.set_default_layout(layout_maniac);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker);
- static const double speaker_levels[] = { 0.0, 1.0, -1.0, 0.0 };
- m_speaker->set_levels(4, speaker_levels);
- m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
-}
-
-// roms
-
-ROM_START( maniac )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1655a-036", 0x0000, 0x0400, CRC(a96f7011) SHA1(e97ae44d3c1e74c7e1024bb0bdab03eecdc9f827) )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
- Ideal Flash
- * PCB label 25-600321, REV C, TCI-A3H / 94HB
- * PIC 1655A-078
- * 2 7seg LEDs + 8 other LEDs, 1-bit sound with volume decay
-
- Flash is a wall-mounted game, players throw beanbags to activate the buttons.
- It's described in patent US4333657 as an electronic dart game.
-
- BTANB: In games 4 and 5 it's easy to lock up the program by pressing the
- buttons repeatedly and causing a score overflow. Although that wouldn't be
- possible by properly throwing beanbags at it. This bug is warned about in
- the manual.
-
- This could also be purchased as a bare PCB from Radio Shack under the Archer
- brand, catalog number 277-1013. It was named "Sound Effects Chassis" but
- clearly it's nothing like that. The instruction leaflet that came with the
- PCB says to attach a speaker and a 9V power source. It actually takes 5V,
- 9V would break it. The only thing it has to say about the game itself is
- "Your module will produce blinking lights and several different sounds."
-
-***************************************************************************/
-
-class flash_state : public hh_pic16_state
-{
-public:
- flash_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- void update_display();
- void write_b(u8 data);
- u8 read_c();
- void write_c(u8 data);
-
- void speaker_decay_reset();
- TIMER_DEVICE_CALLBACK_MEMBER(speaker_decay_sim);
- double m_speaker_volume;
- void flash(machine_config &config);
-
-protected:
- virtual void machine_start() override;
-};
-
-void flash_state::machine_start()
-{
- hh_pic16_state::machine_start();
-
- // zerofill/init
- m_speaker_volume = 0;
- save_item(NAME(m_speaker_volume));
-}
-
-// handlers
-
-void flash_state::speaker_decay_reset()
-{
- if (~m_b & 0x40)
- m_speaker_volume = 20.0;
-
- // it takes a bit before it actually starts fading
- double vol = (m_speaker_volume > 1.0) ? 1.0 : m_speaker_volume;
- m_speaker->set_output_gain(0, vol);
-}
-
-TIMER_DEVICE_CALLBACK_MEMBER(flash_state::speaker_decay_sim)
-{
- // volume decays when speaker is off (divisor and timer period determine duration)
- speaker_decay_reset();
- m_speaker_volume /= 1.15;
-}
-
-void flash_state::update_display()
-{
- m_display->matrix(~m_b >> 4 & 3, (~m_c >> 1 & 0x7f) | (~m_b << 7 & 0x780));
-}
-
-void flash_state::write_b(u8 data)
-{
- // B0-B3: led data
- // B4,B5: led select
- m_b = data;
- update_display();
-
- // B6: speaker on
- // B7: speaker out
- speaker_decay_reset();
- m_speaker->level_w(data >> 7 & 1);
-}
-
-u8 flash_state::read_c()
-{
- // C1-C7: buttons
- return (m_c & 1) ? 0xff : m_inputs[1]->read();
-}
-
-void flash_state::write_c(u8 data)
-{
- // C0: enable buttons
- // C1-C7: digit segments
- m_c = data;
- update_display();
-}
-
-// config
-
-static INPUT_PORTS_START( flash )
- PORT_START("IN.0") // port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) // top button, increment clockwise
- PORT_BIT( 0x0e, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN.1") // port C
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 )
-INPUT_PORTS_END
-
-void flash_state::flash(machine_config &config)
-{
- /* basic machine hardware */
- PIC1655(config, m_maincpu, 1050000); // approximation
- m_maincpu->read_a().set_ioport("IN.0");
- m_maincpu->write_b().set(FUNC(flash_state::write_b));
- m_maincpu->read_c().set(FUNC(flash_state::read_c));
- m_maincpu->write_c().set(FUNC(flash_state::write_c));
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(2, 7+4);
- m_display->set_segmask(3, 0x7f);
- config.set_default_layout(layout_flash);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
- TIMER(config, "speaker_decay").configure_periodic(FUNC(flash_state::speaker_decay_sim), attotime::from_msec(25));
-}
-
-// roms
-
-ROM_START( flash )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1655a-078", 0x0000, 0x0400, CRC(bf780733) SHA1(57ac4620d87492280ab8cf69c148f98e38ecedc4) )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
- Kingsford Match Me
- * PIC 1655A-049
- * 8 lamps, 1-bit sound
-
- Known releases:
- - USA(1): Match Me/Mini Match Me(latter is the handheld version, same game)
- - USA(2): Me Too, published by Talbot
- - Hong Kong: Gotcha!/Encore/Follow Me, published by Toytronic
-
- The original is probably by Toytronic, Kingsford's version being licensed from them.
-
- Known revisions:
- - PIC 1655A-049 (this one, dumped from a Mini Match Me)
- - PIC 1655A-123 (seen in Match Me and Mini Match Me)
-
-***************************************************************************/
-
-class matchme_state : public hh_pic16_state
-{
-public:
- matchme_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- void write_b(u8 data);
- void write_c(u8 data);
- u8 read_c();
-
- void set_clock();
- DECLARE_INPUT_CHANGED_MEMBER(speed_switch) { set_clock(); }
- void matchme(machine_config &config);
-
-protected:
- virtual void machine_reset() override;
-};
-
-void matchme_state::machine_reset()
-{
- hh_pic16_state::machine_reset();
- set_clock();
-}
-
-// handlers
-
-void matchme_state::set_clock()
-{
- // MCU clock is ~1.2MHz by default (R=18K, C=15pF), high speed setting adds a
- // 10pF cap to speed it up by about 7.5%.
- m_maincpu->set_unscaled_clock((m_inputs[4]->read() & 1) ? 1300000 : 1200000);
-}
-
-void matchme_state::write_b(u8 data)
-{
- // B0-B7: lamps
- m_display->matrix(1, data);
-}
-
-u8 matchme_state::read_c()
-{
- // C0-C3: multiplexed inputs from C4-C6
- m_inp_mux = m_c >> 4 & 7;
- u8 lo = read_inputs(3, 0xf);
-
- // C4-C6: multiplexed inputs from C0-C3
- m_inp_mux = m_c & 0xf;
- u8 hi = read_rotated_inputs(4, 7);
-
- return lo | hi << 4 | 0x80;
-}
-
-void matchme_state::write_c(u8 data)
-{
- // C0-C6: input mux
- m_c = data;
-
- // C7: speaker out + RTCC pin
- m_speaker->level_w(data >> 7 & 1);
- m_maincpu->set_input_line(PIC16C5x_RTCC, data >> 7 & 1);
-}
-
-// config
-
-static INPUT_PORTS_START( matchme )
- PORT_START("IN.0") // C4 port C
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) // purple
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) // pink
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) // yellow
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) // blue
-
- PORT_START("IN.1") // C5 port C
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON5 ) // red
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON6 ) // cyan
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON7 ) // orange
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON8 ) // green
-
- PORT_START("IN.2") // C6 port C
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START )
- PORT_BIT( 0x02, 0x02, IPT_CUSTOM ) PORT_CONDITION("FAKE", 0x03, EQUALS, 0x03) // Last/Auto
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_NAME("Long")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN.3") // port A
- PORT_CONFNAME( 0x07, 0x00^0x07, "Game" )
- PORT_CONFSETTING( 0x00^0x07, "1" )
- PORT_CONFSETTING( 0x01^0x07, "2" )
- PORT_CONFSETTING( 0x02^0x07, "3" )
- PORT_CONFSETTING( 0x04^0x07, "4" )
- PORT_CONFNAME( 0x08, 0x08, DEF_STR( Difficulty ) )
- PORT_CONFSETTING( 0x08, "Amateur" ) // AM
- PORT_CONFSETTING( 0x00, "Professional" ) // PRO
-
- PORT_START("IN.4") // another fake
- PORT_CONFNAME( 0x01, 0x00, "Speed" ) PORT_CHANGED_MEMBER(DEVICE_SELF, matchme_state, speed_switch, 0)
- PORT_CONFSETTING( 0x00, DEF_STR( Low ) )
- PORT_CONFSETTING( 0x01, DEF_STR( High ) )
-
- PORT_START("FAKE") // Last/Auto are electronically the same button
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_NAME("Last")
- PORT_CONFNAME( 0x02, 0x02, "Music" )
- PORT_CONFSETTING( 0x02, "Manual" )
- PORT_CONFSETTING( 0x00, "Auto" )
-INPUT_PORTS_END
-
-void matchme_state::matchme(machine_config &config)
-{
- /* basic machine hardware */
- PIC1655(config, m_maincpu, 1200000); // see set_clock
- m_maincpu->read_a().set_ioport("IN.3");
- m_maincpu->write_b().set(FUNC(matchme_state::write_b));
- m_maincpu->read_c().set(FUNC(matchme_state::read_c));
- m_maincpu->write_c().set(FUNC(matchme_state::write_c));
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(1, 8);
- config.set_default_layout(layout_matchme);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
-}
-
-// roms
-
-ROM_START( matchme )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1655a-049", 0x0000, 0x0400, CRC(fa3f4805) SHA1(57cbac18baa201927e99cd69cc2ffda4d2e642bb) )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
- Lakeside Le Boom
- * PIC 1655A-061
- * 1 led, 1-bit sound with RC circuit for volume decay
-
- This is a tabletop timebomb defusion game. It's shaped like an aerial bomb,
- colored black on USA version, yellow on dual-language Canadian version.
- The game starts 'ticking' when the player opens the keypad door. To begin,
- select the game mode, rows(keypad size), and fuse duration.
-
- Game modes as described on the box:
- 1: Eliminate the buttons one by one in the order set out by the computer. Press
- one twice and you'll be sorry!
- 2: For 2 or more players. Take turns pressing the buttons, remember which ones.
- Press a button a second time and watch out, it's all over.
- 3: The computer picks one secret button that stops the fuse. You must press it
- on your 5th turn. Listen to the clues and you'll do fine.
- 4: The computer picks a secret combination. Find it first by listening to the
- clues. Find the right order and you'll get it to fizzle out.
-
-***************************************************************************/
-
-class leboom_state : public hh_pic16_state
-{
-public:
- leboom_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- u8 read_a();
- void write_b(u8 data);
- void write_c(u8 data);
-
- void speaker_decay_reset();
- TIMER_DEVICE_CALLBACK_MEMBER(speaker_decay_sim);
- double m_speaker_volume;
- void leboom(machine_config &config);
-
-protected:
- virtual void machine_start() override;
-};
-
-void leboom_state::machine_start()
-{
- hh_pic16_state::machine_start();
-
- // zerofill/init
- m_speaker_volume = 0;
- save_item(NAME(m_speaker_volume));
-}
-
-// handlers
-
-void leboom_state::speaker_decay_reset()
-{
- if (~m_c & 0x80)
- m_speaker_volume = 1.0;
-
- m_speaker->set_output_gain(0, m_speaker_volume);
-}
-
-TIMER_DEVICE_CALLBACK_MEMBER(leboom_state::speaker_decay_sim)
-{
- // volume decays when speaker is off (divisor and timer period determine duration)
- speaker_decay_reset();
- m_speaker_volume /= 1.015;
-}
-
-u8 leboom_state::read_a()
-{
- // A: multiplexed inputs
- return read_inputs(6, 0xf);
-}
-
-void leboom_state::write_b(u8 data)
-{
- // B0-B5: input mux
- m_inp_mux = data & 0x3f;
-}
-
-void leboom_state::write_c(u8 data)
-{
- // C4: single led
- m_display->matrix(1, data >> 4 & 1);
-
- // C7: speaker on
- m_c = data;
- speaker_decay_reset();
-
- // C6: speaker out
- m_speaker->level_w(data >> 6 & 1);
-}
-
-// config
-
-static INPUT_PORTS_START( leboom )
- PORT_START("IN.0") // B0 port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_NAME("Red Button 1")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Red Button 2")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Red Button 3")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Red Button 4")
-
- PORT_START("IN.1") // B1 port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_NAME("Red-Red Button")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("Red-Green Button")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Red-Yellow Button")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Red-Blue Button")
-
- PORT_START("IN.2") // B2 port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_NAME("Shortest")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Short")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("Long")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Longest")
-
- PORT_START("IN.3") // B3 port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_NAME("Yellow Button 1")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Yellow Button 2")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("Yellow Button 3")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_NAME("Yellow Button 4")
-
- PORT_START("IN.4") // B4 port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_NAME("Blue Button 1")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Blue Button 2")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("Blue Button 3")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Blue Button 4")
-
- PORT_START("IN.5") // B5 port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_NAME("Blue Button 5")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) PORT_NAME("Blue Button 6")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_H) PORT_NAME("Blue Button 7")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("Blue Button 8")
-INPUT_PORTS_END
-
-void leboom_state::leboom(machine_config &config)
-{
- /* basic machine hardware */
- PIC1655(config, m_maincpu, 1000000); // approximation
- m_maincpu->read_a().set(FUNC(leboom_state::read_a));
- m_maincpu->write_b().set(FUNC(leboom_state::write_b));
- m_maincpu->read_c().set_constant(0xff);
- m_maincpu->write_c().set(FUNC(leboom_state::write_c));
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(1, 1);
- config.set_default_layout(layout_leboom);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
- TIMER(config, "speaker_decay").configure_periodic(FUNC(leboom_state::speaker_decay_sim), attotime::from_msec(25));
-}
-
-// roms
-
-ROM_START( leboom )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1655a-061", 0x0000, 0x0400, CRC(5880eea1) SHA1(e3795b347fd5df9de084da36e33f6b70fbc0b0ae) )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
- Tandy Electronic Basketball (model 60-2146)
- * PIC 1655A-51
- * 2 7seg LEDs + 21 other LEDs, 1-bit sound
-
- The ROM is nearly identical to hccbaskb, the shell/overlay is the same as
- U.S. Games/Tandy Trick Shot Basketball.
-
-***************************************************************************/
-
-class tbaskb_state : public hh_pic16_state
-{
-public:
- tbaskb_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- void update_display();
- u8 read_a();
- void write_b(u8 data);
- void write_c(u8 data);
- void tbaskb(machine_config &config);
-};
-
-// handlers
-
-void tbaskb_state::update_display()
-{
- m_display->matrix(m_b, m_c);
-}
-
-u8 tbaskb_state::read_a()
-{
- // A2: skill switch, A3: multiplexed inputs
- return m_inputs[5]->read() | read_inputs(5, 8) | 3;
-}
-
-void tbaskb_state::write_b(u8 data)
-{
- // B0: RTCC pin
- m_maincpu->set_input_line(PIC16C5x_RTCC, data & 1);
-
- // B0-B4: input mux
- m_inp_mux = ~data & 0x1f;
-
- // B0-B3: led select
- // B4,B5: digit select
- m_b = data;
- update_display();
-}
-
-void tbaskb_state::write_c(u8 data)
-{
- // C7: speaker out
- m_speaker->level_w(data >> 7 & 1);
-
- // C0-C6: led data
- m_c = ~data;
- update_display();
-}
-
-// config
-
-static INPUT_PORTS_START( tbaskb )
- PORT_START("IN.0") // B0 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_16WAY
-
- PORT_START("IN.1") // B1 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_16WAY
-
- PORT_START("IN.2") // B2 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_16WAY
-
- PORT_START("IN.3") // B3 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_16WAY
-
- PORT_START("IN.4") // B4 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 )
-
- PORT_START("IN.5") // port A2
- PORT_CONFNAME( 0x04, 0x04, DEF_STR( Difficulty ) )
- PORT_CONFSETTING( 0x04, "1" )
- PORT_CONFSETTING( 0x00, "2" )
-INPUT_PORTS_END
-
-void tbaskb_state::tbaskb(machine_config &config)
-{
- /* basic machine hardware */
- PIC1655(config, m_maincpu, 950000); // approximation - RC osc. R=18K, C=47pF
- m_maincpu->read_a().set(FUNC(tbaskb_state::read_a));
- m_maincpu->write_b().set(FUNC(tbaskb_state::write_b));
- m_maincpu->read_c().set_constant(0xff);
- m_maincpu->write_c().set(FUNC(tbaskb_state::write_c));
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(6, 7);
- m_display->set_segmask(0x30, 0x7f);
- m_display->set_bri_levels(0.01, 0.2); // player led is brighter
- config.set_default_layout(layout_tbaskb);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
-}
-
-// roms
-
-ROM_START( tbaskb )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1655a-051", 0x0000, 0x0400, CRC(92534b40) SHA1(7055e32846c913e68f7d35f279cd537f6325f4f2) )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
- Tiger Electronics Rocket Pinball (model 7-460)
- * PIC 1650A-110, 69-11397
- * 3 7seg LEDs + 44 other LEDs, 1-bit sound
-
- known releases:
- - Hong Kong(1): Rocket Pinball
- - Hong Kong(2): Spaceship Pinball, published by Toytronic
- - USA(1): Rocket Pinball (model 60-2140), published by Tandy
- - USA(2): Cosmic Pinball (model 49-65456), published by Sears
-
-***************************************************************************/
-
-class rockpin_state : public hh_pic16_state
-{
-public:
- rockpin_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- void update_display();
- void write_a(u8 data);
- void write_b(u8 data);
- void write_c(u8 data);
- void write_d(u8 data);
- void rockpin(machine_config &config);
-};
-
-// handlers
-
-void rockpin_state::update_display()
-{
- // 3 7seg leds from ports A and B
- m_display->matrix_partial(0, 3, m_a, m_b, false);
-
- // 44 leds from ports C and D
- m_display->matrix_partial(3, 6, m_d, m_c);
-}
-
-void rockpin_state::write_a(u8 data)
-{
- // A3,A4: speaker out
- m_speaker->level_w(data >> 3 & 3);
-
- // A0-A2: select digit
- m_a = ~data & 7;
- update_display();
-}
-
-void rockpin_state::write_b(u8 data)
-{
- // B0-B6: digit segments
- m_b = data & 0x7f;
- update_display();
-}
-
-void rockpin_state::write_c(u8 data)
-{
- // C0-C7: led data
- m_c = ~data;
- update_display();
-}
-
-void rockpin_state::write_d(u8 data)
-{
- // D0-D5: led select
- m_d = ~data;
- update_display();
-}
-
-// config
-
-static INPUT_PORTS_START( rockpin )
- PORT_START("IN.0") // port A
- PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Right Flipper")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Left Flipper")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Ball")
-INPUT_PORTS_END
-
-void rockpin_state::rockpin(machine_config &config)
-{
- /* basic machine hardware */
- PIC1650(config, m_maincpu, 450000); // approximation - RC osc. R=47K, C=47pF
- m_maincpu->read_a().set_ioport("IN.0");
- m_maincpu->write_a().set(FUNC(rockpin_state::write_a));
- m_maincpu->read_b().set_constant(0xff);
- m_maincpu->write_b().set(FUNC(rockpin_state::write_b));
- m_maincpu->read_c().set_constant(0xff);
- m_maincpu->write_c().set(FUNC(rockpin_state::write_c));
- m_maincpu->read_d().set_constant(0xff);
- m_maincpu->write_d().set(FUNC(rockpin_state::write_d));
-
- // PIC CLKOUT, tied to RTCC
- CLOCK(config, "clock", 450000/4).signal_handler().set_inputline(m_maincpu, PIC16C5x_RTCC);
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(3+6, 8);
- m_display->set_segmask(7, 0x7f);
- config.set_default_layout(layout_rockpin);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker);
- static const double speaker_levels[] = { 0.0, 1.0, -1.0, 0.0 };
- m_speaker->set_levels(4, speaker_levels);
- m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
-}
-
-// roms
-
-ROM_START( rockpin )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1650a-110_69-11397", 0x0000, 0x0400, CRC(d5396e77) SHA1(952feaff70fde53a9eda84c54704520d50749e78) )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
- Tiger Electronics Half Court Computer Basketball (model 7-470)
- * PIC 1655A(no serial), 69-11557
- * 2 7seg LEDs + 26 other LEDs, 1-bit sound
-
- known releases:
- - Hong Kong: Half Court Computer Basketball
- - USA: Electronic Basketball (model 49-65453), published by Sears
-
-***************************************************************************/
-
-class hccbaskb_state : public hh_pic16_state
-{
-public:
- hccbaskb_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- void update_display();
- u8 read_a();
- void write_b(u8 data);
- void write_c(u8 data);
- void hccbaskb(machine_config &config);
-};
-
-// handlers
-
-void hccbaskb_state::update_display()
-{
- m_display->matrix(m_b, m_c);
-}
-
-u8 hccbaskb_state::read_a()
-{
- // A2: skill switch, A3: multiplexed inputs
- return m_inputs[5]->read() | read_inputs(5, 8) | 3;
-}
-
-void hccbaskb_state::write_b(u8 data)
-{
- // B0: RTCC pin
- m_maincpu->set_input_line(PIC16C5x_RTCC, data & 1);
-
- // B0-B4: input mux
- m_inp_mux = ~data & 0x1f;
-
- // B7: speaker out
- m_speaker->level_w(data >> 7 & 1);
-
- // B0-B4: led select
- // B5,B6: digit select
- m_b = data;
- update_display();
-}
-
-void hccbaskb_state::write_c(u8 data)
-{
- // C0-C6: led data
- m_c = ~data;
- update_display();
-}
-
-// config
-
-static INPUT_PORTS_START( hccbaskb )
- PORT_START("IN.0") // B0 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_16WAY
-
- PORT_START("IN.1") // B1 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_16WAY
-
- PORT_START("IN.2") // B2 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_16WAY
-
- PORT_START("IN.3") // B3 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_16WAY
-
- PORT_START("IN.4") // B4 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 )
-
- PORT_START("IN.5") // port A2
- PORT_CONFNAME( 0x04, 0x04, DEF_STR( Difficulty ) )
- PORT_CONFSETTING( 0x04, "1" )
- PORT_CONFSETTING( 0x00, "2" )
-INPUT_PORTS_END
-
-void hccbaskb_state::hccbaskb(machine_config &config)
-{
- /* basic machine hardware */
- PIC1655(config, m_maincpu, 950000); // approximation - RC osc. R=15K, C=47pF
- m_maincpu->read_a().set(FUNC(hccbaskb_state::read_a));
- m_maincpu->write_b().set(FUNC(hccbaskb_state::write_b));
- m_maincpu->read_c().set_constant(0xff);
- m_maincpu->write_c().set(FUNC(hccbaskb_state::write_c));
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(7, 7);
- m_display->set_segmask(0x60, 0x7f);
- m_display->set_bri_levels(0.01, 0.2); // player led is brighter
- config.set_default_layout(layout_hccbaskb);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
-}
-
-// roms
-
-ROM_START( hccbaskb )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "69-11557", 0x0000, 0x0400, CRC(56e81079) SHA1(1933f87f82c4c53f953534dba7757c9afc52d5bc) )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
- Toytronic Football (set 1)
- * PIC 1655A-033
- * 4511 7seg BCD decoder, 7 7seg LEDs + 27 other LEDs, 1-bit sound
-
- (no brand) Football (set 2)
- * PIC 1655-024
- * rest same as above, 1 less button
-
- Hello and welcome to another Mattel Football clone, there are so many of these.
- The 1655-024 one came from an unbranded handheld, but comparison suggests that
- it's the 'prequel' of 1655A-033.
-
- The 1655-024 version looks and sounds the same as Conic "Electronic Football".
-
-***************************************************************************/
-
-class ttfball_state : public hh_pic16_state
-{
-public:
- ttfball_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- void update_display();
- u8 read_a();
- void write_b(u8 data);
- void write_c(u8 data);
- void ttfball(machine_config &config);
-};
-
-// handlers
-
-void ttfball_state::update_display()
-{
- // C0-C2: led data
- // C0-C3: 4511 A-D, C4: digit segment DP
- // C5: select digits or led matrix
- const u8 _4511_map[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0,0,0,0,0,0 };
- u16 led_data = (m_c & 0x20) ? (_4511_map[m_c & 0xf] | (~m_c << 3 & 0x80)) : (~m_c << 8 & 0x700);
-
- m_display->matrix(m_b | (m_c << 1 & 0x100), led_data);
-}
-
-u8 ttfball_state::read_a()
-{
- // A3: multiplexed inputs, A0-A2: other inputs
- return m_inputs[5]->read() | read_inputs(5, 8);
-}
-
-void ttfball_state::write_b(u8 data)
-{
- // B0: RTCC pin
- m_maincpu->set_input_line(PIC16C5x_RTCC, data & 1);
-
- // B0,B1,B3,B7: input mux low
- m_inp_mux = (m_inp_mux & 0x10) | (~data & 3) | (~data >> 1 & 4) | (~data >> 4 & 8);
-
- // B0-B7: led select (see above)
- m_b = data;
- update_display();
-}
-
-void ttfball_state::write_c(u8 data)
-{
- // C6: speaker out
- m_speaker->level_w(data >> 6 & 1);
-
- // C7: input mux high
- m_inp_mux = (m_inp_mux & 0xf) | (data >> 3 & 0x10);
-
- // C0-C7: led data/select (see above)
- m_c = data;
- update_display();
-}
-
-// config
-
-static INPUT_PORTS_START( ttfball )
- PORT_START("IN.0") // B0 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_16WAY
-
- PORT_START("IN.1") // B1 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_16WAY
-
- PORT_START("IN.2") // B3 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_16WAY
-
- PORT_START("IN.3") // B7 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_16WAY
-
- PORT_START("IN.4") // C7 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Kick")
-
- PORT_START("IN.5") // port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Status")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Score")
- PORT_CONFNAME( 0x04, 0x04, DEF_STR( Difficulty ) )
- PORT_CONFSETTING( 0x04, "1" )
- PORT_CONFSETTING( 0x00, "2" )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( ttfballa )
- PORT_START("IN.0") // B0 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Kick")
-
- PORT_START("IN.1") // B1 port A3
- PORT_BIT( 0x08, 0x08, IPT_CUSTOM ) PORT_CONDITION("FAKE", 0x03, EQUALS, 0x00) // left/right
-
- PORT_START("IN.2") // B3 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_16WAY
-
- PORT_START("IN.3") // B7 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_16WAY
-
- PORT_START("IN.4") // C7 port A3
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN.5") // port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Status")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Score")
- PORT_CONFNAME( 0x04, 0x04, DEF_STR( Difficulty ) )
- PORT_CONFSETTING( 0x04, "1" )
- PORT_CONFSETTING( 0x00, "2" )
-
- PORT_START("FAKE") // fake port for left/right combination
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY PORT_NAME("P1 Left/Right")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY PORT_NAME("P1 Left/Right")
-INPUT_PORTS_END
-
-void ttfball_state::ttfball(machine_config &config)
-{
- /* basic machine hardware */
- PIC1655(config, m_maincpu, 800000); // approximation - RC osc. R=27K(set 1) or 33K(set 2), C=68pF
- m_maincpu->read_a().set(FUNC(ttfball_state::read_a));
- m_maincpu->write_b().set(FUNC(ttfball_state::write_b));
- m_maincpu->read_c().set_constant(0xff);
- m_maincpu->write_c().set(FUNC(ttfball_state::write_c));
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(9, 11);
- m_display->set_segmask(0x7f, 0xff);
- m_display->set_bri_levels(0.003, 0.03); // player led is brighter
- config.set_default_layout(layout_ttfball);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
-}
-
-// roms
-
-ROM_START( ttfball )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1655a-033", 0x0000, 0x0400, CRC(2b500501) SHA1(f7fe464663c56e2181a31a1dc5f1f5239df57bed) )
-ROM_END
-
-ROM_START( ttfballa )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1655-024", 0x0000, 0x0400, CRC(9091102f) SHA1(ef72759f20b5a99e0366863caad1e26be114263f) )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
- U.S. Games Programmable Baseball
- * PIC 1650A-133
- * 3 7seg LEDs + 36 other LEDs, 1-bit sound
-
- known releases:
- - USA(1): Programmable Baseball
- - USA(2): Electronic 2-Player Baseball (model 60-2157), published by Tandy
-
-***************************************************************************/
-
-class uspbball_state : public hh_pic16_state
-{
-public:
- uspbball_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- void update_display();
- void write_a(u8 data);
- void write_b(u8 data);
- void write_c(u8 data);
- void write_d(u8 data);
- void uspbball(machine_config &config);
-};
-
-// handlers
-
-void uspbball_state::update_display()
-{
- m_display->matrix(m_d, m_c << 8 | m_b);
-}
-
-void uspbball_state::write_a(u8 data)
-{
- // A0: speaker out
- m_speaker->level_w(data & 1);
-}
-
-void uspbball_state::write_b(u8 data)
-{
- // B: digit segment data
- m_b = bitswap<8>(data,0,1,2,3,4,5,6,7);
- update_display();
-}
-
-void uspbball_state::write_c(u8 data)
-{
- // C: led data
- m_c = ~data;
- update_display();
-}
-
-void uspbball_state::write_d(u8 data)
-{
- // D0-D2: digit select
- // D3-D5: led select
- m_d = ~data;
- update_display();
-}
-
-// config
-
-static INPUT_PORTS_START( uspbball )
- PORT_START("IN.0") // port A
- PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Curve Right")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Slow")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL PORT_NAME("P2 Fast")
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL PORT_NAME("P2 Curve Left")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_COCKTAIL PORT_NAME("P2 Change Up/Fielder")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Batter")
-
- PORT_START("IN.1") // port D
- PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_CONFNAME( 0x80, 0x80, DEF_STR( Players ) )
- PORT_CONFSETTING( 0x80, "1" )
- PORT_CONFSETTING( 0x00, "2" )
-INPUT_PORTS_END
-
-void uspbball_state::uspbball(machine_config &config)
-{
- /* basic machine hardware */
- PIC1650(config, m_maincpu, 900000); // approximation - RC osc. R=22K, C=47pF
- m_maincpu->read_a().set_ioport("IN.0");
- m_maincpu->write_a().set(FUNC(uspbball_state::write_a));
- m_maincpu->read_b().set_constant(0xff);
- m_maincpu->write_b().set(FUNC(uspbball_state::write_b));
- m_maincpu->read_c().set_constant(0xff);
- m_maincpu->write_c().set(FUNC(uspbball_state::write_c));
- m_maincpu->read_d().set_constant(0xff);
- m_maincpu->write_d().set(FUNC(uspbball_state::write_d));
-
- // PIC CLKOUT, tied to RTCC
- CLOCK(config, "clock", 900000/4).signal_handler().set_inputline("maincpu", PIC16C5x_RTCC);
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(6, 16);
- m_display->set_segmask(7, 0x7f);
- config.set_default_layout(layout_hh_pic16_test);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
-}
-
-// roms
-
-ROM_START( uspbball )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1650a-133", 0x0000, 0x0400, CRC(479e98be) SHA1(67437177b059dfa6e01940da26daf997cec96ead) )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
- U.S. Games Electronic 2-Player Football
- * PIC 1650A-144
- * 8 7seg LEDs + 2 other LEDs, 1-bit sound
-
- known releases:
- - USA(1): Electronic 2-Player Football
- - USA(2): Electronic 2-Player Football (model 60-2156), published by Tandy
-
-***************************************************************************/
-
-class us2pfball_state : public hh_pic16_state
-{
-public:
- us2pfball_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_pic16_state(mconfig, type, tag)
- { }
-
- void update_display();
- u8 read_a();
- void write_a(u8 data);
- void write_b(u8 data);
- void write_c(u8 data);
- void write_d(u8 data);
- void us2pfball(machine_config &config);
-};
-
-// handlers
-
-void us2pfball_state::update_display()
-{
- m_display->matrix(m_d | (m_a << 6 & 0x300), m_c);
-}
-
-u8 us2pfball_state::read_a()
-{
- // A0,A1: multiplexed inputs, A4-A7: other inputs
- return read_inputs(4, 3) | (m_inputs[4]->read() & 0xf0) | 0x0c;
-}
-
-void us2pfball_state::write_a(u8 data)
-{
- // A2,A3: leds
- m_a = data;
- update_display();
-}
-
-void us2pfball_state::write_b(u8 data)
-{
- // B0-B3: input mux
- m_inp_mux = data & 0xf;
-}
-
-void us2pfball_state::write_c(u8 data)
-{
- // C7: speaker out
- m_speaker->level_w(data >> 7 & 1);
-
- // C0-C6: digit segments
- m_c = data;
- update_display();
-}
-
-void us2pfball_state::write_d(u8 data)
-{
- // D0-D7: digit select
- m_d = ~data;
- update_display();
-}
-
-// config
-
-static INPUT_PORTS_START( us2pfball )
- PORT_START("IN.0") // B0 port A low
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_16WAY
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_16WAY
-
- PORT_START("IN.1") // B1 port A low
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_16WAY
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_16WAY
-
- PORT_START("IN.2") // B2 port A low
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_16WAY
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_16WAY
-
- PORT_START("IN.3") // B3 port A low
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_16WAY
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_16WAY
-
- PORT_START("IN.4") // port A high
- PORT_CONFNAME( 0x10, 0x10, DEF_STR( Players ) )
- PORT_CONFSETTING( 0x10, "1" )
- PORT_CONFSETTING( 0x00, "2" )
- PORT_CONFNAME( 0x20, 0x20, DEF_STR( Difficulty ) )
- PORT_CONFSETTING( 0x20, "1" ) // college
- PORT_CONFSETTING( 0x00, "2" ) // pro
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SELECT ) PORT_TOGGLE PORT_NAME("Play Selector") // pass
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Kick/Pass") // K/P
-
- PORT_START("IN.5") // port B
- PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START ) PORT_NAME("Status/Score") // S
-INPUT_PORTS_END
-
-void us2pfball_state::us2pfball(machine_config &config)
-{
- /* basic machine hardware */
- PIC1650(config, m_maincpu, 800000); // approximation - RC osc. R=39K, C=75pF
- m_maincpu->read_a().set(FUNC(us2pfball_state::read_a));
- m_maincpu->write_a().set(FUNC(us2pfball_state::write_a));
- m_maincpu->read_b().set_ioport("IN.5");
- m_maincpu->write_b().set(FUNC(us2pfball_state::write_b));
- m_maincpu->read_c().set_constant(0xff);
- m_maincpu->write_c().set(FUNC(us2pfball_state::write_c));
- m_maincpu->read_d().set_constant(0xff);
- m_maincpu->write_d().set(FUNC(us2pfball_state::write_d));
-
- // PIC CLKOUT, tied to RTCC
- CLOCK(config, "clock", 800000/4).signal_handler().set_inputline("maincpu", PIC16C5x_RTCC);
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(10, 7);
- m_display->set_segmask(0xff, 0x7f);
- config.set_default_layout(layout_us2pfball);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
-}
-
-// roms
-
-ROM_START( us2pfball )
- ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "pic_1650a-144", 0x0000, 0x0400, CRC(ef3677c9) SHA1(33f89c79e7e090710681dffe09eddaf66b5cb794) )
-ROM_END
-
-
-
-} // anonymous namespace
-
-/***************************************************************************
-
- Game driver(s)
-
-***************************************************************************/
-
-// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
-CONS( 1979, touchme, 0, 0, touchme, touchme, touchme_state, empty_init, "Atari", "Touch Me (handheld, Rev 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-
-CONS( 1979, pabball, 0, 0, pabball, pabball, pabball_state, empty_init, "Caprice / Calfax", "Pro-Action Baseball", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-
-CONS( 1980, melodym, 0, 0, melodym, melodym, melodym_state, empty_init, "GAF", "Melody Madness", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-
-CONS( 1979, maniac, 0, 0, maniac, maniac, maniac_state, empty_init, "Ideal Toy Corporation", "Maniac", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1980, flash, 0, 0, flash, flash, flash_state, empty_init, "Ideal Toy Corporation", "Flash (Ideal)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-
-CONS( 1980, matchme, 0, 0, matchme, matchme, matchme_state, empty_init, "Kingsford", "Match Me", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-
-CONS( 1980, leboom, 0, 0, leboom, leboom, leboom_state, empty_init, "Lakeside", "Le Boom", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-
-CONS( 1979, tbaskb, 0, 0, tbaskb, tbaskb, tbaskb_state, empty_init, "Tandy Corporation", "Electronic Basketball (Tandy)", MACHINE_SUPPORTS_SAVE )
-
-CONS( 1979, rockpin, 0, 0, rockpin, rockpin, rockpin_state, empty_init, "Tiger Electronics", "Rocket Pinball", MACHINE_SUPPORTS_SAVE )
-CONS( 1979, hccbaskb, 0, 0, hccbaskb, hccbaskb, hccbaskb_state, empty_init, "Tiger Electronics", "Half Court Computer Basketball", MACHINE_SUPPORTS_SAVE )
-
-CONS( 1979, ttfball, 0, 0, ttfball, ttfball, ttfball_state, empty_init, "Toytronic", "Football (Toytronic, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
-CONS( 1979, ttfballa, ttfball, 0, ttfball, ttfballa, ttfball_state, empty_init, "Toytronic", "Football (Toytronic, set 2)", MACHINE_SUPPORTS_SAVE )
-
-CONS( 1981, uspbball, 0, 0, uspbball, uspbball, uspbball_state, empty_init, "U.S. Games", "Programmable Baseball", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-CONS( 1981, us2pfball, 0, 0, us2pfball, us2pfball, us2pfball_state, empty_init, "U.S. Games", "Electronic 2-Player Football", MACHINE_SUPPORTS_SAVE )