diff --git a/src/devices/sound/sp0250.cpp b/src/devices/sound/sp0250.cpp index bc9c7072883..9894b2cbe6c 100644 --- a/src/devices/sound/sp0250.cpp +++ b/src/devices/sound/sp0250.cpp @@ -36,20 +36,20 @@ should be 312, but 312 = 39*8 so it doesn't look right because a divider by 39 i DEFINE_DEVICE_TYPE(SP0250, sp0250_device, "sp0250", "GI SP0250 LPC") -sp0250_device::sp0250_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, SP0250, tag, owner, clock), - device_sound_interface(mconfig, *this), - m_amp(0), - m_pitch(0), - m_repeat(0), - m_pcount(0), - m_rcount(0), - m_playing(0), - m_RNG(0), - m_stream(nullptr), - m_voiced(0), - m_fifo_pos(0), - m_drq(*this) +sp0250_device::sp0250_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, SP0250, tag, owner, clock), + device_sound_interface(mconfig, *this), + m_amp(0), + m_pitch(0), + m_repeat(0), + m_pcount(0), + m_rcount(0), + m_playing(0), + m_RNG(0), + m_stream(nullptr), + m_voiced(0), + m_fifo_pos(0), + m_drq(*this) { for (auto & elem : m_fifo) { @@ -75,7 +75,7 @@ void sp0250_device::device_start() m_drq.resolve_safe(); if (!m_drq.isnull()) { - m_drq( ASSERT_LINE); + m_drq(ASSERT_LINE); m_tick_timer= machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sp0250_device::timer_tick), this)); m_tick_timer->adjust(attotime::from_hz(clock()) * CLOCK_DIVIDER, 0, attotime::from_hz(clock()) * CLOCK_DIVIDER); } @@ -122,9 +122,6 @@ static int16_t sp0250_gc(uint8_t v) void sp0250_device::load_values() { - int f; - - m_filter[0].B = sp0250_gc(m_fifo[ 0]); m_filter[0].F = sp0250_gc(m_fifo[ 1]); m_amp = sp0250_ga(m_fifo[ 2]); @@ -147,7 +144,7 @@ void sp0250_device::load_values() m_pcount = 0; m_rcount = 0; - for (f = 0; f < 6; f++) + for (int f = 0; f < 6; f++) m_filter[f].z1 = m_filter[f].z2 = 0; m_playing = 1; @@ -185,13 +182,11 @@ uint8_t sp0250_device::drq_r() void sp0250_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) { stream_sample_t *output = outputs[0]; - int i; - for (i = 0; i < samples; i++) + for (int i = 0; i < samples; i++) { if (m_playing) { int16_t z0; - int f; if (m_voiced) { @@ -214,7 +209,7 @@ void sp0250_device::sound_stream_update(sound_stream &stream, stream_sample_t ** m_RNG >>= 1; } - for (f = 0; f < 6; f++) + for (int f = 0; f < 6; f++) { z0 += ((m_filter[f].z1 * m_filter[f].F) >> 8) + ((m_filter[f].z2 * m_filter[f].B) >> 9); diff --git a/src/mame/drivers/milton6805.cpp b/src/mame/drivers/milton6805.cpp index 06ea73f4b60..5c75ed68f99 100644 --- a/src/mame/drivers/milton6805.cpp +++ b/src/mame/drivers/milton6805.cpp @@ -7,6 +7,10 @@ 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. @@ -23,6 +27,9 @@ TODO: #include "sound/sp0250.h" #include "speaker.h" +// internal artwork +#include "milton.lh" // clickable + namespace { @@ -86,7 +93,7 @@ READ8_MEMBER(milton_state::data_r) return 0; // TMC0430 data - u8 data = 0xff; + u8 data = 0; m_grom[0]->readz(&data); m_grom[1]->readz(&data); return data; @@ -150,15 +157,15 @@ READ8_MEMBER(milton_state::input_r) static INPUT_PORTS_START( milton ) PORT_START("IN.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_J) PORT_NAME("Red Button 7") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Red Button 6") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Red Button 5") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Red Button 4") + 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_D) PORT_NAME("Red Button 3") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Red Button 2") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Red Button 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") @@ -169,15 +176,15 @@ static INPUT_PORTS_START( milton ) 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_Q) PORT_NAME("Yellow Button 1") // starting at top, then clockwise - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Yellow Button 2") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Yellow Button 3") + 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_R) PORT_NAME("Yellow Button 4") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Yellow Button 5") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Yellow Button 6") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Yellow Button 7") + 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") INPUT_PORTS_END @@ -203,6 +210,8 @@ void milton_state::milton(machine_config &config) 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(ALL_OUTPUTS, "speaker", 1.0); @@ -218,7 +227,7 @@ 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_ERASEFF ) + 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 @@ -232,4 +241,4 @@ ROM_END ******************************************************************************/ // 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 ) +CONS( 1980, milton, 0, 0, milton, milton, milton_state, empty_init, "Milton Bradley", "Electronic Milton", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/layout/milton.lay b/src/mame/layout/milton.lay new file mode 100644 index 00000000000..6333d904428 --- /dev/null +++ b/src/mame/layout/milton.lay @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +