From e2769abca916da18c114ee9db3c5dc44f682eded Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 20 Mar 2022 21:32:03 +0100 Subject: [PATCH] New machines marked as NOT_WORKING ---------------------------------- Auto Race [hap, Sean Riddle] Missile Attack (Mattel) [hap, Sean Riddle] Football (Mattel) [hap, Sean Riddle] Baseball (Mattel) [hap, Sean Riddle] Gravity (Mattel) [hap, Sean Riddle] --- src/devices/cpu/b5000/b5000base.h | 2 +- src/mame/drivers/hh_b5000.cpp | 409 +++++++++++++++++++++++++++++- src/mame/mame.lst | 5 + 3 files changed, 413 insertions(+), 3 deletions(-) diff --git a/src/devices/cpu/b5000/b5000base.h b/src/devices/cpu/b5000/b5000base.h index 2a332a88b48..e186ca5d8c1 100644 --- a/src/devices/cpu/b5000/b5000base.h +++ b/src/devices/cpu/b5000/b5000base.h @@ -92,7 +92,7 @@ protected: u8 m_prev3_c; bool m_sr; bool m_skip; - u8 m_seg; + u16 m_seg; u8 m_atbz_step; u8 m_tkbs_step; diff --git a/src/mame/drivers/hh_b5000.cpp b/src/mame/drivers/hh_b5000.cpp index 01d089ecc84..8662302eb00 100644 --- a/src/mame/drivers/hh_b5000.cpp +++ b/src/mame/drivers/hh_b5000.cpp @@ -8,6 +8,7 @@ Mostly calculators on these MCUs, but also Mattel's first couple of handhelds. ROM source notes when dumped from another model, but confident it's the same: - rw18r: Rockwell 8R +- misatk: Mattel Space Alert TODO: - figure out why rw18r doesn't work (ROM dump is good) @@ -27,7 +28,7 @@ TODO: // internal artwork #include "rw18r.lh" -//#include "hh_b5000_test.lh" // common test-layout - use external artwork +#include "hh_b5000_test.lh" // common test-layout - use external artwork class hh_b5000_state : public driver_device @@ -107,6 +108,404 @@ u8 hh_b5000_state::read_inputs(int columns) namespace { +/*************************************************************************** + + Mattel Auto Race + * x + +***************************************************************************/ + +class autorace_state : public hh_b5000_state +{ +public: + autorace_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_b5000_state(mconfig, type, tag) + { } + + void autorace(machine_config &config); + +private: + void write_str(u16 data); + void write_seg(u16 data); +}; + +// handlers + +void autorace_state::write_str(u16 data) +{ + m_display->write_my(data); +} + +void autorace_state::write_seg(u16 data) +{ + m_display->write_mx(data); +} + +// config + +static INPUT_PORTS_START( autorace ) + PORT_START("IN.0") // KB + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) + + PORT_START("IN.1") // DIN + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) +INPUT_PORTS_END + +void autorace_state::autorace(machine_config &config) +{ + // basic machine hardware + B6000(config, m_maincpu, 240000); // approximation + m_maincpu->write_str().set(FUNC(autorace_state::write_str)); + m_maincpu->write_seg().set(FUNC(autorace_state::write_seg)); + m_maincpu->read_kb().set_ioport("IN.0"); + m_maincpu->read_din().set_ioport("IN.1"); + m_maincpu->write_spk().set(m_speaker, FUNC(speaker_sound_device::level_w)); + + // video hardware + PWM_DISPLAY(config, m_display).set_size(9, 8); + config.set_default_layout(layout_hh_b5000_test); + + // sound hardware + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); +} + +// roms + +ROM_START( autorace ) + ROM_REGION( 0x200, "maincpu", 0 ) + ROM_LOAD( "b6000.bin", 0x000, 0x200, CRC(a112c928) SHA1(aa5d0b46a08e2460081d4148cf254dc5ec53817e) ) +ROM_END + + + + + +/*************************************************************************** + + Mattel Missile Attack + * x + +***************************************************************************/ + +class misatk_state : public hh_b5000_state +{ +public: + misatk_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_b5000_state(mconfig, type, tag) + { } + + void misatk(machine_config &config); + +private: + void write_str(u16 data); + void write_seg(u16 data); +}; + +// handlers + +void misatk_state::write_str(u16 data) +{ + m_display->write_my(data); +} + +void misatk_state::write_seg(u16 data) +{ + m_display->write_mx(data); +} + +// config + +static INPUT_PORTS_START( misatk ) + PORT_START("IN.0") // KB + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) + + PORT_START("IN.1") // DIN + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) +INPUT_PORTS_END + +void misatk_state::misatk(machine_config &config) +{ + // basic machine hardware + B6000(config, m_maincpu, 240000); // approximation + m_maincpu->write_str().set(FUNC(misatk_state::write_str)); + m_maincpu->write_seg().set(FUNC(misatk_state::write_seg)); + m_maincpu->read_kb().set_ioport("IN.0"); + m_maincpu->read_din().set_ioport("IN.1"); + m_maincpu->write_spk().set(m_speaker, FUNC(speaker_sound_device::level_w)); + + // video hardware + PWM_DISPLAY(config, m_display).set_size(9, 8); + config.set_default_layout(layout_hh_b5000_test); + + // sound hardware + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); +} + +// roms + +ROM_START( misatk ) + ROM_REGION( 0x200, "maincpu", 0 ) + ROM_LOAD( "b6001.bin", 0x000, 0x200, CRC(56564b79) SHA1(6f33f57ea312cb2018fb59f72eaff3a9642e74a2) ) +ROM_END + + + + + +/*************************************************************************** + + Mattel Football + * x + +***************************************************************************/ + +class mfootb_state : public hh_b5000_state +{ +public: + mfootb_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_b5000_state(mconfig, type, tag) + { } + + void mfootb(machine_config &config); + +private: + void write_str(u16 data); + void write_seg(u16 data); +}; + +// handlers + +void mfootb_state::write_str(u16 data) +{ + m_display->write_my(data); +} + +void mfootb_state::write_seg(u16 data) +{ + m_display->write_mx(data); +} + +// config + +static INPUT_PORTS_START( mfootb ) + PORT_START("IN.0") // KB + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) + + PORT_START("IN.1") // DIN + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) +INPUT_PORTS_END + +void mfootb_state::mfootb(machine_config &config) +{ + // basic machine hardware + B6100(config, m_maincpu, 240000); // approximation + m_maincpu->write_str().set(FUNC(mfootb_state::write_str)); + m_maincpu->write_seg().set(FUNC(mfootb_state::write_seg)); + m_maincpu->read_kb().set_ioport("IN.0"); + m_maincpu->read_din().set_ioport("IN.1"); + m_maincpu->write_spk().set(m_speaker, FUNC(speaker_sound_device::level_w)); + + // video hardware + PWM_DISPLAY(config, m_display).set_size(9, 10); + config.set_default_layout(layout_hh_b5000_test); + + // sound hardware + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); +} + +// roms + +ROM_START( mfootb ) + ROM_REGION( 0x400, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "b6100.bin", 0x0000, 0x0300, CRC(5b27620f) SHA1(667ff6cabced89ef4ad848b73d66a06526edc5e6) ) + ROM_CONTINUE( 0x0380, 0x0080 ) +ROM_END + + + + + +/*************************************************************************** + + Mattel Baseball + * x + +***************************************************************************/ + +class mbaseb_state : public hh_b5000_state +{ +public: + mbaseb_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_b5000_state(mconfig, type, tag) + { } + + void mbaseb(machine_config &config); + +private: + void write_str(u16 data); + void write_seg(u16 data); +}; + +// handlers + +void mbaseb_state::write_str(u16 data) +{ + m_display->write_my(data); +} + +void mbaseb_state::write_seg(u16 data) +{ + m_display->write_mx(data); +} + +// config + +static INPUT_PORTS_START( mbaseb ) + PORT_START("IN.0") // KB + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) + + PORT_START("IN.1") // DIN + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) +INPUT_PORTS_END + +void mbaseb_state::mbaseb(machine_config &config) +{ + // basic machine hardware + B6100(config, m_maincpu, 240000); // approximation + m_maincpu->write_str().set(FUNC(mbaseb_state::write_str)); + m_maincpu->write_seg().set(FUNC(mbaseb_state::write_seg)); + m_maincpu->read_kb().set_ioport("IN.0"); + m_maincpu->read_din().set_ioport("IN.1"); + m_maincpu->write_spk().set(m_speaker, FUNC(speaker_sound_device::level_w)); + + // video hardware + PWM_DISPLAY(config, m_display).set_size(9, 10); + config.set_default_layout(layout_hh_b5000_test); + + // sound hardware + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); +} + +// roms + +ROM_START( mbaseb ) + ROM_REGION( 0x400, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "b6101.bin", 0x0000, 0x0300, CRC(7720ddcc) SHA1(cd43126db7c6262f659f325aa58420e1a8a1a659) ) + ROM_CONTINUE( 0x0380, 0x0080 ) +ROM_END + + + + + +/*************************************************************************** + + Mattel Gravity + * x + +***************************************************************************/ + +class gravity_state : public hh_b5000_state +{ +public: + gravity_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_b5000_state(mconfig, type, tag) + { } + + void gravity(machine_config &config); + +private: + void write_str(u16 data); + void write_seg(u16 data); +}; + +// handlers + +void gravity_state::write_str(u16 data) +{ + m_display->write_my(data); +} + +void gravity_state::write_seg(u16 data) +{ + m_display->write_mx(data); +} + +// config + +static INPUT_PORTS_START( gravity ) + PORT_START("IN.0") // KB + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) + + PORT_START("IN.1") // DIN + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) +INPUT_PORTS_END + +void gravity_state::gravity(machine_config &config) +{ + // basic machine hardware + B6100(config, m_maincpu, 240000); // approximation + m_maincpu->write_str().set(FUNC(gravity_state::write_str)); + m_maincpu->write_seg().set(FUNC(gravity_state::write_seg)); + m_maincpu->read_kb().set_ioport("IN.0"); + m_maincpu->read_din().set_ioport("IN.1"); + m_maincpu->write_spk().set(m_speaker, FUNC(speaker_sound_device::level_w)); + + // video hardware + PWM_DISPLAY(config, m_display).set_size(9, 10); + config.set_default_layout(layout_hh_b5000_test); + + // sound hardware + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); +} + +// roms + +ROM_START( gravity ) + ROM_REGION( 0x400, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "b6102.bin", 0x0000, 0x0300, CRC(532f332e) SHA1(593224d3a2a5b6022f0d73b6e6fb9093d2d54f68) ) + ROM_CONTINUE( 0x0380, 0x0080 ) +ROM_END + + + + + /*************************************************************************** Rockwell 8R, Rockwell 18R @@ -222,4 +621,10 @@ ROM_END ***************************************************************************/ // YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -CONS( 1975, rw18r, 0, 0, rw18r, rw18r, rw18r_state, empty_init, "Rockwell", "18R (Rockwell)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING ) +CONS( 1976, autorace, 0, 0, autorace, autorace, autorace_state, empty_init, "Mattel Electronics", "Auto Race", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +CONS( 1976, misatk, 0, 0, misatk, misatk, misatk_state, empty_init, "Mattel Electronics", "Missile Attack (Mattel)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +CONS( 1977, mfootb, 0, 0, mfootb, mfootb, mfootb_state, empty_init, "Mattel Electronics", "Football (Mattel)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +CONS( 1978, mbaseb, 0, 0, mbaseb, mbaseb, mbaseb_state, empty_init, "Mattel Electronics", "Baseball (Mattel)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +CONS( 1980, gravity, 0, 0, gravity, gravity, gravity_state, empty_init, "Mattel Electronics", "Gravity (Mattel)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) + +COMP( 1975, rw18r, 0, 0, rw18r, rw18r, rw18r_state, empty_init, "Rockwell", "18R (Rockwell)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index c5deb939ec2..89f149b6107 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -16436,6 +16436,11 @@ hexionb // bootleg wildfire // Parker Bros @source:hh_b5000.cpp +autorace // Mattel +gravity // Mattel +mbaseb // Mattel +mfootb // Mattel +misatk // Mattel rw18r // Rockwell @source:hh_cop400.cpp