summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/milton6805.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/milton6805.cpp')
-rw-r--r--src/mame/drivers/milton6805.cpp308
1 files changed, 0 insertions, 308 deletions
diff --git a/src/mame/drivers/milton6805.cpp b/src/mame/drivers/milton6805.cpp
deleted file mode 100644
index d12a5b4ff58..00000000000
--- a/src/mame/drivers/milton6805.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:hap
-// thanks-to:Sean Riddle
-/******************************************************************************
-
-Milton Bradley Milton
-
-This is the talking tabletop game, not the chess computer with the same name.
-
-Game 1: Match beginning of a phrase(red button) with end of phrase(yellow button).
-Game 2: Same as game 1, but all in one turn.
-Game 3: Press phrase end buttons, memorize them, press Go and match them.
-
-Hardware is an odd combination: MC6805P2 MCU, GI SP0250 speech + 2*TMC0430 GROM.
-See patent 4326710 for detailed information, except MC6805 clocked from SP0250 3.12MHz
-and GROM clocked by 3.12MHz/8=390kHz.
-
-******************************************************************************/
-
-#include "emu.h"
-#include "cpu/m6805/m68705.h"
-#include "machine/clock.h"
-#include "machine/tmc0430.h"
-#include "sound/sp0250.h"
-#include "speaker.h"
-
-// internal artwork
-#include "milton.lh" // clickable
-
-class milton_filter_device;
-
-
-class milton_state : public driver_device
-{
-public:
- milton_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_grom(*this, "grom%u", 0),
- m_speech(*this, "sp0250"),
- m_filter(*this, "filter"),
- m_inputs(*this, "IN.%u", 0)
- { }
-
- void milton(machine_config &config);
-
- DECLARE_INPUT_CHANGED_MEMBER(volume_changed);
-
-protected:
- virtual void machine_start() override;
-
-private:
- required_device<m6805_hmos_device> m_maincpu;
- required_device_array<tmc0430_device, 2> m_grom;
- required_device<sp0250_device> m_speech;
- required_device<milton_filter_device> m_filter;
- required_ioport_array<5> m_inputs;
-
- u8 m_data;
- u8 m_control;
-
- DECLARE_WRITE8_MEMBER(data_w);
- DECLARE_READ8_MEMBER(data_r);
- DECLARE_WRITE8_MEMBER(control_w);
- DECLARE_READ8_MEMBER(control_r);
- DECLARE_READ8_MEMBER(input_r);
-};
-
-void milton_state::machine_start()
-{
- // zerofill
- m_data = 0;
- m_control = 0xff;
-
- // register for savestates
- save_item(NAME(m_data));
- save_item(NAME(m_control));
-}
-
-
-
-/******************************************************************************
- LED Filter
-******************************************************************************/
-
-class milton_filter_device : public device_t, public device_sound_interface
-{
-public:
- milton_filter_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
-
-protected:
- virtual void device_start() override;
- virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
-
-private:
- sound_stream *m_stream;
- output_finder<> m_led_out;
-};
-
-DEFINE_DEVICE_TYPE(MILTON_LED_FILTER, milton_filter_device, "milton_led_filter", "Milton LED Filter")
-
-
-milton_filter_device::milton_filter_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, MILTON_LED_FILTER, tag, owner, clock),
- device_sound_interface(mconfig, *this),
- m_led_out(*this, "led")
-{ }
-
-void milton_filter_device::device_start()
-{
- m_stream = stream_alloc(1, 1, machine().sample_rate());
- m_led_out.resolve();
-}
-
-void milton_filter_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
-{
- int level = 0;
-
- for (int i = 0; i < samples; i++)
- {
- level += abs(inputs[0][i]);
- outputs[0][i] = inputs[0][i];
- }
-
- if (samples > 0)
- level /= samples;
-
- // 2 leds connected to the audio circuit
- const int threshold = 1500;
- m_led_out = (level > threshold) ? 1 : 0;
-}
-
-
-
-/******************************************************************************
- I/O
-******************************************************************************/
-
-WRITE8_MEMBER(milton_state::data_w)
-{
- // TMC0430 + SP0250 data
- m_data = data;
-}
-
-READ8_MEMBER(milton_state::data_r)
-{
- if (machine().side_effects_disabled())
- return 0;
-
- // TMC0430 data
- u8 data = 0;
- m_grom[0]->readz(&data);
- m_grom[1]->readz(&data);
- return data;
-}
-
-WRITE8_MEMBER(milton_state::control_w)
-{
- // d0-d4: input mux
-
- // d5: SP0250 data present
- if (~m_control & data & 0x20)
- m_speech->write(space, 0, m_data);
-
- // d1: TMC0430 M
- // d3: TMC0430 MO
- // d7: TMC0430 GS
- for (int i = 0; i < 2; i++)
- {
- m_grom[i]->m_line(BIT(data, 1));
- m_grom[i]->mo_line(BIT(data, 3));
- m_grom[i]->gsq_line(BIT(~data, 7));
- }
-
- // write pending TMC0430 data
- if (m_control & ~data & 0x80 && ~data & 2)
- {
- m_grom[0]->write(m_data);
- m_grom[1]->write(m_data);
- }
-
- m_control = data;
-}
-
-READ8_MEMBER(milton_state::control_r)
-{
- if (machine().side_effects_disabled())
- return 0;
-
- // d6: SP0250 data request
- // other: no function (DDRB = 0xbf)
- return m_speech->drq_r() ? 0x40 : 0;
-}
-
-READ8_MEMBER(milton_state::input_r)
-{
- u8 data = 0;
-
- // d0-d3: multiplexed inputs
- for (int i = 0; i < 5; i++)
- if (BIT(~m_control, i))
- data |= m_inputs[i]->read();
-
- return ~data;
-}
-
-
-
-/******************************************************************************
- Input Ports
-******************************************************************************/
-
-static INPUT_PORTS_START( milton )
- PORT_START("IN.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Red Button 7")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Red Button 6")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Red Button 5")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Red Button 4")
-
- PORT_START("IN.1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Red Button 3")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Red Button 2")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Red Button 1")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Purple Button 1")
-
- PORT_START("IN.2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Purple Button 2")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Purple Button 3")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Z) PORT_NAME("Go")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_X) PORT_NAME("Score")
-
- PORT_START("IN.3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Reset")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Yellow Button 1") // starting at top, then clockwise
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Yellow Button 2")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_NAME("Yellow Button 3")
-
- PORT_START("IN.4")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Yellow Button 4")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Yellow Button 5")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Yellow Button 6")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_J) PORT_NAME("Yellow Button 7")
-
- PORT_START("VOLUME")
- PORT_CONFNAME( 0x01, 0x00, "Volume" ) PORT_CHANGED_MEMBER(DEVICE_SELF, milton_state, volume_changed, 0)
- PORT_CONFSETTING( 0x01, "Low" )
- PORT_CONFSETTING( 0x00, "High" )
-INPUT_PORTS_END
-
-INPUT_CHANGED_MEMBER(milton_state::volume_changed)
-{
- m_filter->set_output_gain(0, newval ? 0.25 : 1.0);
-}
-
-
-
-/******************************************************************************
- Machine Configs
-******************************************************************************/
-
-void milton_state::milton(machine_config &config)
-{
- /* basic machine hardware */
- M6805P2(config, m_maincpu, 3.12_MHz_XTAL);
- m_maincpu->porta_w().set(FUNC(milton_state::data_w));
- m_maincpu->porta_r().set(FUNC(milton_state::data_r));
- m_maincpu->portb_w().set(FUNC(milton_state::control_w));
- m_maincpu->portb_r().set(FUNC(milton_state::control_r));
- m_maincpu->portc_r().set(FUNC(milton_state::input_r));
-
- TMC0430(config, m_grom[0], "groms", 0x0000, 0);
- TMC0430(config, m_grom[1], "groms", 0x2000, 1);
-
- clock_device &gromclock(CLOCK(config, "gromclock", 3.12_MHz_XTAL/8));
- gromclock.signal_handler().set(m_grom[0], FUNC(tmc0430_device::gclock_in));
- gromclock.signal_handler().append(m_grom[1], FUNC(tmc0430_device::gclock_in));
-
- config.set_default_layout(layout_milton);
-
- /* sound hardware */
- SPEAKER(config, "speaker").front_center();
- SP0250(config, m_speech, 3.12_MHz_XTAL).add_route(0, m_filter, 1.0, 0);
- MILTON_LED_FILTER(config, m_filter).add_route(0, "speaker", 1.0);
-}
-
-
-
-/******************************************************************************
- ROM Definitions
-******************************************************************************/
-
-ROM_START( milton )
- ROM_REGION( 0x800, "maincpu", 0 )
- ROM_LOAD("sc87008p_783-4043-001", 0x000, 0x800, CRC(b054dbea) SHA1(b5339c8170e773b68505c3d60dc75249a583d60a) )
-
- ROM_REGION( 0x4000, "groms", ROMREGION_ERASE00 )
- ROM_LOAD("4043-003", 0x0000, 0x1800, CRC(d95df757) SHA1(6723480866f6393d310e304ef3b61e3a319a7beb) )
- ROM_LOAD("4043-004", 0x2000, 0x1800, CRC(9ac929f7) SHA1(1a27d56fc49eb4e58ea3b5c58d7fbedc5a751592) )
-ROM_END
-
-
-
-/******************************************************************************
- Drivers
-******************************************************************************/
-
-// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
-CONS( 1980, milton, 0, 0, milton, milton, milton_state, empty_init, "Milton Bradley", "Electronic Milton", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )