diff options
Diffstat (limited to 'src/mame/drivers/hh_amis2k.cpp')
-rw-r--r-- | src/mame/drivers/hh_amis2k.cpp | 284 |
1 files changed, 0 insertions, 284 deletions
diff --git a/src/mame/drivers/hh_amis2k.cpp b/src/mame/drivers/hh_amis2k.cpp deleted file mode 100644 index 0030abd77c2..00000000000 --- a/src/mame/drivers/hh_amis2k.cpp +++ /dev/null @@ -1,284 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -// thanks-to:Sean Riddle -/*************************************************************************** - - AMI S2000 series handhelds or other simple devices. - - TODO: - - were any other handhelds with this MCU released? - - wildfire sound can be improved, volume decay should be more steep at the start, - and the pitch sounds wrong too (latter is an MCU emulation problem) - -***************************************************************************/ - -#include "emu.h" -#include "cpu/amis2000/amis2000.h" -#include "video/pwm.h" -#include "machine/timer.h" -#include "sound/spkrdev.h" -#include "speaker.h" - -// internal artwork -#include "wildfire.lh" - -//#include "hh_amis2k_test.lh" // common test-layout - use external artwork - - -class hh_amis2k_state : public driver_device -{ -public: - hh_amis2k_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<amis2000_base_device> m_maincpu; - optional_device<pwm_display_device> m_display; - optional_device<speaker_sound_device> m_speaker; - optional_ioport_array<4> m_inputs; // max 4 - - // misc common - u16 m_a; // MCU address bus - u8 m_d; // MCU data bus - int m_f; // MCU F_out pin - u16 m_inp_mux; // multiplexed inputs mask - - u8 read_inputs(int columns); - -protected: - virtual void machine_start() override; - virtual void machine_reset() override; -}; - - -// machine start/reset - -void hh_amis2k_state::machine_start() -{ - // zerofill - m_a = 0; - m_d = 0; - m_f = 0; - m_inp_mux = 0; - - // register for savestates - save_item(NAME(m_a)); - save_item(NAME(m_d)); - save_item(NAME(m_f)); - save_item(NAME(m_inp_mux)); -} - -void hh_amis2k_state::machine_reset() -{ -} - - - -/*************************************************************************** - - Helper Functions - -***************************************************************************/ - -// generic input handlers - -u8 hh_amis2k_state::read_inputs(int columns) -{ - u8 ret = 0; - - // read selected input rows - for (int i = 0; i < columns; i++) - if (m_inp_mux >> i & 1) - ret |= m_inputs[i]->read(); - - return ret; -} - - - -/*************************************************************************** - - Minidrivers (subclass, I/O, Inputs, Machine Config, ROM Defs) - -***************************************************************************/ - -namespace { - -/*************************************************************************** - - Parker Brothers Wildfire, by Bob and Holly Doyle (prototype), and Garry Kitchen - * AMI S2150, labeled C10641 - * RC circuit for speaker volume decay (see patent US4334679 FIG.5, - the 2 resistors at A12 are 10K and the cap is 4.7uF) - - This is an electronic handheld pinball game. It has dozens of small leds - to create the illusion of a moving ball, and even the flippers are leds. - A drawing of a pinball table is added as overlay. - - led translation table: led Lzz from patent US4334679 FIG.4* = MAME y.x: - *note: 2 mistakes in it: L19 between L12 and L14 should be L13, and L84 should of course be L48 - - 0 = - 10 = 6.6 20 = 4.5 30 = 5.3 40 = 5.7 50 = 11.6 - 1 = 10.7 11 = 5.6 21 = 4.4 31 = 4.3 41 = 6.0 51 = 11.5 - 2 = 10.0 12 = 6.5 22 = 5.4 32 = 5.2 42 = 7.0 52 = 11.4 - 3 = 10.1 13 = 7.5 23 = 6.3 33 = 5.1 43 = 8.0 53 = 11.3 - 4 = 10.2 14 = 8.5 24 = 7.3 34 = 11.7 44 = 9.0 60 = 3.6 - 5 = 10.3 15 = 9.4 25 = 11.1 35 = 7.1 45 = 6.7 61 = 3.6(!) - 6 = 10.4 16 = 8.4 26 = 9.3 36 = 9.1 46 = 7.7 62 = 3.5 - 7 = 10.5 17 = 7.4 27 = 9.2 37 = 5.0 47 = 8.7 63 = 3.5(!) - 8 = 8.6 18 = 11.2 28 = 8.2 38 = 6.1 48 = 9.7 70 = 3.3 - 9 = 7.6 19 = 5.5 29 = 11.0 39 = 8.1 49 = - - - NOTE!: MAME external artwork is required - -***************************************************************************/ - -class wildfire_state : public hh_amis2k_state -{ -public: - wildfire_state(const machine_config &mconfig, device_type type, const char *tag) : - hh_amis2k_state(mconfig, type, tag) - { } - - void update_display(); - DECLARE_WRITE8_MEMBER(write_d); - DECLARE_WRITE16_MEMBER(write_a); - DECLARE_WRITE_LINE_MEMBER(write_f); - - void speaker_update(); - TIMER_DEVICE_CALLBACK_MEMBER(speaker_decay_sim); - double m_speaker_volume; - void wildfire(machine_config &config); - -protected: - virtual void machine_start() override; -}; - -void wildfire_state::machine_start() -{ - hh_amis2k_state::machine_start(); - - // zerofill/init - m_speaker_volume = 0; - save_item(NAME(m_speaker_volume)); -} - -// handlers - -void wildfire_state::speaker_update() -{ - if (~m_a & 0x1000) - m_speaker_volume = 1.0; - - m_speaker->level_w(m_f * 0x7fff * m_speaker_volume); -} - -TIMER_DEVICE_CALLBACK_MEMBER(wildfire_state::speaker_decay_sim) -{ - // volume decays when speaker is off (divisor and timer period determine duration) - speaker_update(); - m_speaker_volume /= 1.0025; -} - -void wildfire_state::update_display() -{ - m_display->matrix(~m_a, m_d); -} - -WRITE8_MEMBER(wildfire_state::write_d) -{ - // D0-D7: led/7seg data - m_d = bitswap<8>(data,7,0,1,2,3,4,5,6); - update_display(); -} - -WRITE16_MEMBER(wildfire_state::write_a) -{ - // A0-A2: digit select - // A3-A11: led select - m_a = data; - update_display(); - - // A12: speaker on - speaker_update(); -} - -WRITE_LINE_MEMBER(wildfire_state::write_f) -{ - // F: speaker out - m_f = state; - speaker_update(); -} - -// config - -static INPUT_PORTS_START( wildfire ) - PORT_START("IN.0") // I - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Shooter Button") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Left Flipper") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Right Flipper") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) -INPUT_PORTS_END - -// 7seg decoder table differs from default, this one is made by hand -static const u8 wildfire_7seg_table[0x10] = -{ - 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, // 0, 1, 2, 3, 4, 5, 6, 7 - 0x7f, 0x6f, 0x77, 0x73, 0x39, 0x38, 0x79, 0x40 // 8, 9, ?, P, ?, L, ?, - -}; - -void wildfire_state::wildfire(machine_config &config) -{ - /* basic machine hardware */ - AMI_S2152(config, m_maincpu, 850000); // approximation - RC osc. R=?, C=? - m_maincpu->set_7seg_table(wildfire_7seg_table); - m_maincpu->read_i().set_ioport("IN.0"); - m_maincpu->write_d().set(FUNC(wildfire_state::write_d)); - m_maincpu->write_a().set(FUNC(wildfire_state::write_a)); - m_maincpu->write_f().set(FUNC(wildfire_state::write_f)); - - /* video hardware */ - PWM_DISPLAY(config, m_display).set_size(12, 8); - m_display->set_segmask(7, 0x7f); - m_display->set_bri_levels(0.01, 0.1); // bumpers are dimmed - config.set_default_layout(layout_wildfire); - - /* 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(wildfire_state::speaker_decay_sim), attotime::from_usec(100)); - - // set volume levels (set_output_gain is too slow for sub-frame intervals) - static s16 speaker_levels[0x8000]; - for (int i = 0; i < 0x8000; i++) - speaker_levels[i] = i; - m_speaker->set_levels(0x8000, speaker_levels); -} - -// roms - -ROM_START( wildfire ) - ROM_REGION( 0x0800, "maincpu", ROMREGION_ERASE00 ) - // Typed in from patent US4334679, data should be correct(it included checksums). 1st half was also dumped/verfied with release version. - ROM_LOAD( "us4341385", 0x0000, 0x0400, CRC(84ac0f1f) SHA1(1e00ddd402acfc2cc267c34eed4b89d863e2144f) ) - ROM_CONTINUE( 0x0600, 0x0200 ) -ROM_END - - - -} // anonymous namespace - -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ - -// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -CONS( 1979, wildfire, 0, 0, wildfire, wildfire, wildfire_state, empty_init, "Parker Brothers", "Wildfire (patent)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) // note: pretty sure that it matches the commercial release |