From 82acf075560d18bcaf7a60a467dfdf9d293ef386 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 11 Mar 2023 17:08:33 +0100 Subject: New working systems ------------------- Race Time [hap, Sean Riddle, eggs] --- src/devices/cpu/tms1000/tms1000.cpp | 13 ++-- src/devices/cpu/tms1000/tms1000.h | 10 +-- src/mame/atari/irobot_m.cpp | 4 -- src/mame/handheld/hh_tms1k.cpp | 119 +++++++++++++++++++++++++++++++++++- src/mame/mame.lst | 1 + 5 files changed, 131 insertions(+), 16 deletions(-) diff --git a/src/devices/cpu/tms1000/tms1000.cpp b/src/devices/cpu/tms1000/tms1000.cpp index 6937fc2ab35..a45ff8fc8d3 100644 --- a/src/devices/cpu/tms1000/tms1000.cpp +++ b/src/devices/cpu/tms1000/tms1000.cpp @@ -17,6 +17,7 @@ TMS1000 TODO: - add TMS1270 (10 O pins, how does that work?) +- correct TMS1070 OPLA when an TMS1270 is found? */ @@ -27,8 +28,8 @@ TODO: // device definitions DEFINE_DEVICE_TYPE(TMS1000, tms1000_cpu_device, "tms1000", "Texas Instruments TMS1000") // 28-pin DIP, 11 R pins -DEFINE_DEVICE_TYPE(TMS1070, tms1070_cpu_device, "tms1070", "Texas Instruments TMS1070") // high voltage version -DEFINE_DEVICE_TYPE(TMS1040, tms1040_cpu_device, "tms1040", "Texas Instruments TMS1040") // same as TMS1070 with just a different pinout? +DEFINE_DEVICE_TYPE(TMS1040, tms1040_cpu_device, "tms1040", "Texas Instruments TMS1040") // high voltage version, different pinout +DEFINE_DEVICE_TYPE(TMS1070, tms1070_cpu_device, "tms1070", "Texas Instruments TMS1070") // high voltage version, OPLA on die is 10-bit like TMS1270 but has 8 O pins DEFINE_DEVICE_TYPE(TMS1200, tms1200_cpu_device, "tms1200", "Texas Instruments TMS1200") // 40-pin DIP, 13 R pins DEFINE_DEVICE_TYPE(TMS1700, tms1700_cpu_device, "tms1700", "Texas Instruments TMS1700") // 28-pin DIP, RAM/ROM size halved, 9 R pins DEFINE_DEVICE_TYPE(TMS1730, tms1730_cpu_device, "tms1730", "Texas Instruments TMS1730") // 20-pin DIP, same die as TMS1700, package has less pins: 6 R pins, 5 O pins (output PLA is still 8-bit, O1,O3,O5 unused) @@ -45,14 +46,14 @@ tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, device_typ tms1k_base_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } -tms1070_cpu_device::tms1070_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms1000_cpu_device(mconfig, TMS1070, tag, owner, clock, 8, 11, 6, 8, 2, 1, 10, address_map_constructor(FUNC(tms1070_cpu_device::rom_10bit), this), 6, address_map_constructor(FUNC(tms1070_cpu_device::ram_6bit), this)) -{ } - tms1040_cpu_device::tms1040_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms1000_cpu_device(mconfig, TMS1040, tag, owner, clock, 8, 11, 6, 8, 2, 1, 10, address_map_constructor(FUNC(tms1040_cpu_device::rom_10bit), this), 6, address_map_constructor(FUNC(tms1040_cpu_device::ram_6bit), this)) { } +tms1070_cpu_device::tms1070_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms1000_cpu_device(mconfig, TMS1070, tag, owner, clock, 8, 11, 6, 8, 2, 1, 10, address_map_constructor(FUNC(tms1070_cpu_device::rom_10bit), this), 6, address_map_constructor(FUNC(tms1070_cpu_device::ram_6bit), this)) +{ } + tms1200_cpu_device::tms1200_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms1000_cpu_device(mconfig, TMS1200, tag, owner, clock, 8, 13, 6, 8, 2, 1, 10, address_map_constructor(FUNC(tms1200_cpu_device::rom_10bit), this), 6, address_map_constructor(FUNC(tms1200_cpu_device::ram_6bit), this)) { } diff --git a/src/devices/cpu/tms1000/tms1000.h b/src/devices/cpu/tms1000/tms1000.h index ced8724b231..b957c966da4 100644 --- a/src/devices/cpu/tms1000/tms1000.h +++ b/src/devices/cpu/tms1000/tms1000.h @@ -79,16 +79,16 @@ protected: virtual u32 decode_micro(u8 sel); }; -class tms1070_cpu_device : public tms1000_cpu_device +class tms1040_cpu_device : public tms1000_cpu_device { public: - tms1070_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + tms1040_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); }; -class tms1040_cpu_device : public tms1000_cpu_device +class tms1070_cpu_device : public tms1000_cpu_device { public: - tms1040_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + tms1070_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); }; @@ -126,8 +126,8 @@ public: DECLARE_DEVICE_TYPE(TMS1000, tms1000_cpu_device) -DECLARE_DEVICE_TYPE(TMS1070, tms1070_cpu_device) DECLARE_DEVICE_TYPE(TMS1040, tms1040_cpu_device) +DECLARE_DEVICE_TYPE(TMS1070, tms1070_cpu_device) DECLARE_DEVICE_TYPE(TMS1200, tms1200_cpu_device) DECLARE_DEVICE_TYPE(TMS1700, tms1700_cpu_device) DECLARE_DEVICE_TYPE(TMS1730, tms1730_cpu_device) diff --git a/src/mame/atari/irobot_m.cpp b/src/mame/atari/irobot_m.cpp index ed8bbb1d97f..fbbfe644360 100644 --- a/src/mame/atari/irobot_m.cpp +++ b/src/mame/atari/irobot_m.cpp @@ -388,11 +388,7 @@ void irobot_state::init_irobot() load_oproms(); for (int i = 0; i < 16; i++) - { m_irmb_stack[i] = &m_mbops[0]; - m_irmb_regs[i] = 0; - } - m_irmb_latch = 0; } TIMER_DEVICE_CALLBACK_MEMBER(irobot_state::irobot_irmb_done_callback) diff --git a/src/mame/handheld/hh_tms1k.cpp b/src/mame/handheld/hh_tms1k.cpp index 2659fa0b65b..ed425af4244 100644 --- a/src/mame/handheld/hh_tms1k.cpp +++ b/src/mame/handheld/hh_tms1k.cpp @@ -37,6 +37,7 @@ ROM source notes when dumped from another title, but confident it's the same: - gpoker: Entex Electronic Poker - matchnum: LJN Electronic Concentration - palmf31: Toshiba BC-8018B +- racetime: Bandai FL Grand Prix Champion - ti1250: Texas Instruments TI-1200 - ti25503: Texas Instruments TI-1265 - ti5100: loose 1979 TMS1073NL chip @@ -121,7 +122,7 @@ on Joerg Woerner's datamath.org: http://www.datamath.org/IC_List.htm @MP2110 TMS1370 1980, Gakken Invader/Tandy Fire Away @MP2139 TMS1370 1981, Gakken Galaxy Invader 1000/Tandy Cosmic 1000 Fire Away @MP2726 TMS1040 1979, Tomy Break Up - *MP2787 TMS1070 1980, Bandai Race Time + @MP2787 TMS1070 1980, Bandai Race Time *MP2788 TMS1070 1980, Bandai Flight Time @MP3005 TMS1730 1989, Tiger Copy Cat (model 7-522) @MP3200 TMS1000 1978, Parker Brothers Electronic Master Mind @@ -998,6 +999,121 @@ ROM_END +/*************************************************************************** + + Bandai Race Time (model 8007 / 16162) + * PCB label: SM-007 + * TMS1070 MP2787 (die label: 1070B, MP2787) + * cyan/red VFD Futaba DM-8Z, 1-bit sound + + known releases: + - World: Race Time, published by Bandai + - Japan: FL Grand Prix Champion, published by Bandai + +***************************************************************************/ + +class racetime_state : public hh_tms1k_state +{ +public: + racetime_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_tms1k_state(mconfig, type, tag) + { } + + void racetime(machine_config &config); + +private: + void update_display(); + void write_r(u32 data); + void write_o(u16 data); + u8 read_k(); +}; + +// handlers + +void racetime_state::update_display() +{ + m_display->matrix(m_grid, m_plate); +} + +void racetime_state::write_r(u32 data) +{ + // R7: input mux + m_inp_mux = BIT(data, 7); + + // R10: speaker out + m_speaker->level_w(BIT(data, 10)); + + // R0-R8: VFD grid + // R9: VFD plate + m_grid = data & 0x1ff; + m_plate = (m_plate & 0xff) | (data >> 1 & 0x100); + update_display(); +} + +void racetime_state::write_o(u16 data) +{ + // O0-O7: VFD plate + m_plate = (m_plate & ~0xff) | data; + update_display(); +} + +u8 racetime_state::read_k() +{ + // K: multiplexed inputs + return read_inputs(1); +} + +// config + +static INPUT_PORTS_START( racetime ) + PORT_START("IN.0") // R7 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY +INPUT_PORTS_END + +void racetime_state::racetime(machine_config &config) +{ + // basic machine hardware + TMS1070(config, m_maincpu, 350000); // approximation - RC osc. R=47K, C=47pF + m_maincpu->read_k().set(FUNC(racetime_state::read_k)); + m_maincpu->write_r().set(FUNC(racetime_state::write_r)); + m_maincpu->write_o().set(FUNC(racetime_state::write_o)); + + // video hardware + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); + screen.set_refresh_hz(60); + screen.set_size(229, 1080); + screen.set_visarea_full(); + + PWM_DISPLAY(config, m_display).set_size(9, 9); + + // sound hardware + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker); + m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25); +} + +// roms + +ROM_START( racetime ) + ROM_REGION( 0x0400, "maincpu", 0 ) + ROM_LOAD( "mp2787", 0x0000, 0x0400, CRC(38c668b9) SHA1(2181647d4f2385a81355eaf99a40ad82f57ecdc6) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1000_common2_micro.pla", 0, 867, CRC(d33da3cf) SHA1(13c4ebbca227818db75e6db0d45b66ba5e207776) ) + ROM_REGION( 365, "maincpu:opla", 0 ) + ROM_LOAD( "tms1000_racetime_output.pla", 0, 365, CRC(192c6a44) SHA1(db0b441252d1e6bf3885e528756cfecc0468c664) ) + + ROM_REGION( 221716, "screen", 0) + ROM_LOAD( "racetime.svg", 0, 221716, CRC(d3934aed) SHA1(40b1fde191506c884b16b2ee3daaee2c6a4f4f08) ) +ROM_END + + + + + /*************************************************************************** Bandai TC7: Air Traffic Control @@ -15107,6 +15223,7 @@ CONS( 1980, arrball, 0, 0, arrball, arrball, arrball_state, emp COMP( 1980, mathmagi, 0, 0, mathmagi, mathmagi, mathmagi_state, empty_init, "APF Electronics Inc.", "Mathemagician", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW ) CONS( 1979, bcheetah, 0, 0, bcheetah, bcheetah, bcheetah_state, empty_init, "Bandai", "System Control Car: Cheetah", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_MECHANICAL ) // *** +CONS( 1980, racetime, 0, 0, racetime, racetime, racetime_state, empty_init, "Bandai", "Race Time", MACHINE_SUPPORTS_SAVE ) CONS( 1981, tc7atc, 0, 0, tc7atc, tc7atc, tc7atc_state, empty_init, "Bandai", "TC7: Air Traffic Control", MACHINE_SUPPORTS_SAVE ) COMP( 1977, palmf31, 0, 0, palmf31, palmf31, palmf31_state, empty_init, "Canon", "Palmtronic F-31", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 88bf04e775e..75cbc3f116d 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -18891,6 +18891,7 @@ phpball // Tomy playmaker // Tiger Electronics qfire // Electroplay quizwizc // Coleco +racetime // Bandai raisedvl // Entex scruiser // US Games simon // Milton Bradley -- cgit v1.2.3