diff --git a/src/mame/sega/segas16b.cpp b/src/mame/sega/segas16b.cpp index 780049b6b65..664d0aef0a2 100644 --- a/src/mame/sega/segas16b.cpp +++ b/src/mame/sega/segas16b.cpp @@ -1277,7 +1277,6 @@ void segas16b_state::machine_start() void segas16b_state::machine_reset() { m_atomicp_sound_count = 0; - m_hwc_input_value = 0; m_mj_input_num = 0; m_mj_last_val = 0; @@ -1490,10 +1489,8 @@ uint16_t segas16b_state::hwchamp_custom_io_r(address_space &space, offs_t offset switch (offset & 0x30/2) { case 0x20/2: - result = (m_hwc_input_value & 0x80) >> 7; - if (!machine().side_effects_disabled()) - m_hwc_input_value <<= 1; - return result; + return m_adc->d0_r(space); + case 0x30/2: // c43035 /* Signals, affects blocking and stance (both fists down, both fists up, up/down or down/up) @@ -1535,25 +1532,7 @@ void segas16b_state::hwchamp_custom_io_w(address_space &space, offs_t offset, ui switch (offset & 0x30/2) { case 0x20/2: - switch (offset & 3) - { - case 0: - m_hwc_input_value = m_hwc_monitor->read(); - break; - - // TODO: order of these two flipped when returning a status of 0xf0 instead of open bus in r 0x30? - case 1: - m_hwc_input_value = m_hwc_right->read(); - break; - - case 2: - m_hwc_input_value = m_hwc_left->read(); - break; - - default: - m_hwc_input_value = 0xff; - break; - } + m_adc->address_w(offset & 3, 0); break; case 0x30/2: @@ -4157,6 +4136,26 @@ void segas16b_state::aceattacb_fd1094(machine_config &config) m_cxdio->in_portb_cb().set_ioport("HANDX2"); } +void segas16b_state::hwchamp(machine_config &config) +{ + system16b(config); + MSM6253(config, m_adc, 0); + m_adc->set_input_tag<0>("MONITOR"); + // TODO: order of these two flipped when returning a status of 0xf0 instead of open bus in r 0x30? + m_adc->set_input_tag<1>("RIGHT"); + m_adc->set_input_tag<2>("LEFT"); +} + +void segas16b_state::hwchamp_fd1094(machine_config &config) +{ + system16b_fd1094(config); + MSM6253(config, m_adc, 0); + m_adc->set_input_tag<0>("MONITOR"); + // TODO: order of these two flipped when returning a status of 0xf0 instead of open bus in r 0x30? + m_adc->set_input_tag<1>("RIGHT"); + m_adc->set_input_tag<2>("LEFT"); +} + void segas16b_state::system16b_i8751(machine_config &config) { system16b(config); @@ -9861,7 +9860,6 @@ void segas16b_state::init_generic(segas16b_rom_board rom_board) // save state save_item(NAME(m_atomicp_sound_count)); - save_item(NAME(m_hwc_input_value)); save_item(NAME(m_mj_input_num)); save_item(NAME(m_mj_last_val)); } @@ -10110,9 +10108,9 @@ GAME( 1989, goldnaxe3, goldnaxe, system16b_fd1094, goldnaxe, segas16b_stat GAME( 1989, goldnaxe2, goldnaxe, system16b_i8751, goldnaxe, segas16b_state, init_generic_5704, ROT0, "Sega", "Golden Axe (set 2, US) (8751 317-0112)", 0 ) GAME( 1989, goldnaxe1, goldnaxe, system16b_fd1094_5797, goldnaxe, segas16b_state, init_generic_5797, ROT0, "Sega", "Golden Axe (set 1, World) (FD1094 317-0110)", 0 ) -GAME( 1987, hwchamp, 0, system16b, hwchamp, segas16b_state, init_hwchamp_5521, ROT0, "Sega", "Heavyweight Champ (set 1)", 0 ) -GAME( 1987, hwchampa, hwchamp, system16b, hwchamp, segas16b_state, init_hwchamp_5521, ROT0, "Sega", "Heavyweight Champ (set 2)", 0 ) -GAME( 1987, hwchampj, hwchamp, system16b_fd1094, hwchamp, segas16b_state, init_hwchamp_5521, ROT0, "Sega", "Heavyweight Champ (Japan) (FD1094 317-0046)", 0 ) +GAME( 1987, hwchamp, 0, hwchamp, hwchamp, segas16b_state, init_hwchamp_5521, ROT0, "Sega", "Heavyweight Champ (set 1)", 0 ) +GAME( 1987, hwchampa, hwchamp, hwchamp, hwchamp, segas16b_state, init_hwchamp_5521, ROT0, "Sega", "Heavyweight Champ (set 2)", 0 ) +GAME( 1987, hwchampj, hwchamp, hwchamp_fd1094, hwchamp, segas16b_state, init_hwchamp_5521, ROT0, "Sega", "Heavyweight Champ (Japan) (FD1094 317-0046)", 0 ) GAME( 1989, mvp, 0, system16b_fd1094_5797, mvp, segas16b_state, init_generic_5797, ROT0, "Sega", "MVP (set 2, US) (FD1094 317-0143)", 0 ) GAME( 1989, mvpj, mvp, system16b_fd1094, mvp, segas16b_state, init_generic_5704, ROT0, "Sega", "MVP (set 1, Japan) (FD1094 317-0142)", 0 ) @@ -10217,7 +10215,7 @@ GAME( 1987, sonicbomd, sonicbom, system16b, sonicbom, segas16b_stat GAME( 1990, ryukyud, ryukyu, system16b, ryukyu, segas16b_state, init_generic_5704, ROT0, "bootleg", "RyuKyu (Japan) (bootleg of FD1094 317-5023 set)", 0 ) -GAME( 1987, hwchampjd, hwchamp, system16b, hwchamp, segas16b_state, init_hwchamp_5521, ROT0, "bootleg", "Heavyweight Champ (Japan) (bootleg of FD1094 317-0046 set)", 0 ) +GAME( 1987, hwchampjd, hwchamp, hwchamp, hwchamp, segas16b_state, init_hwchamp_5521, ROT0, "bootleg", "Heavyweight Champ (Japan) (bootleg of FD1094 317-0046 set)", 0 ) GAME( 1987, bulletd, bullet, system16b, bullet, segas16b_state, init_generic_5358_small, ROT0, "bootleg", "Bullet (bootleg of FD1094 317-0041 set)", 0 ) diff --git a/src/mame/sega/segas16b.h b/src/mame/sega/segas16b.h index 6a2a5e51fef..2ad3870ae92 100644 --- a/src/mame/sega/segas16b.h +++ b/src/mame/sega/segas16b.h @@ -10,21 +10,24 @@ #pragma once +#include "315_5195.h" +#include "segaic16_m.h" +#include "segaic16.h" +#include "sega16sp.h" + #include "cpu/m68000/m68000.h" #include "cpu/mcs51/mcs51.h" #include "cpu/z80/z80.h" -#include "315_5195.h" #include "machine/cxd1095.h" #include "machine/gen_latch.h" +#include "machine/msm6253.h" #include "machine/nvram.h" -#include "segaic16_m.h" #include "machine/upd4701.h" #include "sound/dac.h" #include "sound/upd7759.h" #include "sound/ymopm.h" #include "sound/ymopl.h" -#include "segaic16.h" -#include "sega16sp.h" + #include "screen.h" INPUT_PORTS_EXTERN( system16b_generic ); @@ -54,6 +57,7 @@ public: , m_soundlatch(*this, "soundlatch") , m_cxdio(*this, "cxdio") , m_upd4701a(*this, "upd4701a%u", 1U) + , m_adc(*this, "adc") , m_workram(*this, "workram") , m_i8751_sync_timer(nullptr) , m_romboard(ROM_BOARD_INVALID) @@ -64,10 +68,6 @@ public: , m_i8751_initial_config(nullptr) , m_atomicp_sound_divisor(0) , m_atomicp_sound_count(0) - , m_hwc_input_value(0) - , m_hwc_monitor(*this, "MONITOR") - , m_hwc_left(*this, "LEFT") - , m_hwc_right(*this, "RIGHT") , m_hwc_left_limit(*this, "LEFT_LIMIT") , m_hwc_right_limit(*this, "RIGHT_LIMIT") , m_mj_input_num(0) @@ -87,6 +87,8 @@ public: void fpointbla(machine_config &config); void atomicp(machine_config &config); void aceattacb_fd1094(machine_config &config); + void hwchamp(machine_config &config); + void hwchamp_fd1094(machine_config &config); void system16b_i8751(machine_config &config); void system16c(machine_config &config); void system16b_mc8123(machine_config &config); @@ -248,6 +250,7 @@ protected: optional_device m_soundlatch; // not for atomicp optional_device m_cxdio; // for aceattac optional_device_array m_upd4701a; // for aceattac + optional_device m_adc; // for hwchamp // memory pointers required_shared_ptr m_workram; @@ -267,10 +270,6 @@ protected: // game-specific state uint8_t m_atomicp_sound_count; - uint8_t m_hwc_input_value; - optional_ioport m_hwc_monitor; - optional_ioport m_hwc_left; - optional_ioport m_hwc_right; optional_ioport m_hwc_left_limit; optional_ioport m_hwc_right_limit; uint8_t m_mj_input_num;