From d3eb9d346a35f121404d38c14eea7199200a6d7c Mon Sep 17 00:00:00 2001 From: cam900 Date: Fri, 22 Mar 2019 16:03:38 +0900 Subject: namcos1.cpp : Updates Reduce duplicates, Runtime tag lookups, Simplify handlers, Use shorter/correct type values --- src/mame/drivers/namcos1.cpp | 8 +- src/mame/includes/namcos1.h | 85 ++++++++------ src/mame/machine/namcos1.cpp | 273 ++++++++++++++----------------------------- src/mame/video/namcos1.cpp | 53 +++++---- 4 files changed, 167 insertions(+), 252 deletions(-) diff --git a/src/mame/drivers/namcos1.cpp b/src/mame/drivers/namcos1.cpp index a8ed56b9b95..348169dfd88 100644 --- a/src/mame/drivers/namcos1.cpp +++ b/src/mame/drivers/namcos1.cpp @@ -347,12 +347,12 @@ C - uses sub board with support for player 3 and 4 controls /**********************************************************************/ -WRITE8_MEMBER(namcos1_state::audiocpu_irq_ack_w) +void namcos1_state::audiocpu_irq_ack_w(u8 data) { m_audiocpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); } -WRITE8_MEMBER(namcos1_state::mcu_irq_ack_w) +void namcos1_state::mcu_irq_ack_w(u8 data) { m_mcu->set_input_line(HD6301_IRQ_LINE, CLEAR_LINE); } @@ -372,14 +372,14 @@ READ8_MEMBER(namcos1_state::dsw_r) return 0xf0 | bitswap<4>(m_dsw_sel->output_r(space, 0), 0, 1, 2, 3); } -WRITE8_MEMBER(namcos1_state::coin_w) +void namcos1_state::coin_w(u8 data) { machine().bookkeeping().coin_lockout_global_w(BIT(~data, 0)); machine().bookkeeping().coin_counter_w(0, BIT(data, 1)); machine().bookkeeping().coin_counter_w(1, BIT(data, 2)); } -WRITE8_MEMBER(namcos1_state::dac_gain_w) +void namcos1_state::dac_gain_w(u8 data) { /* DAC0 (GAIN0 = bit0, GAIN1 = bit2) */ int dac0_gain = (BIT(data, 2) << 1) | BIT(data, 0); diff --git a/src/mame/includes/namcos1.h b/src/mame/includes/namcos1.h index 13be3197c3e..3b8f0604e29 100644 --- a/src/mame/includes/namcos1.h +++ b/src/mame/includes/namcos1.h @@ -33,6 +33,9 @@ public: m_rom(*this, "user1"), m_soundbank(*this, "soundbank"), m_mcubank(*this, "mcubank"), + m_io_in(*this, "IN%u", 0U), + m_io_control(*this, "CONTROL%u", 0U), + m_io_paddle(*this, "PADDLE%u", 0U), m_io_dipsw(*this, "DIPSW"), m_dsw_sel(*this, "dsw_sel") { } @@ -63,6 +66,12 @@ public: void init_dspirit(); void init_pistoldm(); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + void driver_init() override; + private: required_device m_maincpu; required_device m_subcpu; @@ -74,13 +83,16 @@ private: required_device_array m_dac; required_device m_gfxdecode; - required_shared_ptr m_spriteram; - required_shared_ptr m_triram; - required_region_ptr m_rom; + required_shared_ptr m_spriteram; + required_shared_ptr m_triram; + required_region_ptr m_rom; required_memory_bank m_soundbank; required_memory_bank m_mcubank; + optional_ioport_array<4> m_io_in; + optional_ioport_array<2> m_io_control; + optional_ioport_array<2> m_io_paddle; required_ioport m_io_dipsw; required_device m_dsw_sel; @@ -91,51 +103,50 @@ private: int m_key_swap4; int m_key_bottom4; int m_key_top4; - unsigned int m_key_quotient; - unsigned int m_key_reminder; - unsigned int m_key_numerator_high_word; - uint8_t m_key[8]; + u32 m_key_quotient; + u32 m_key_reminder; + u32 m_key_numerator_high_word; + u8 m_key[8]; int m_mcu_patch_data; int m_reset; int m_input_count; int m_strobe; int m_strobe_count; int m_stored_input[2]; - int m_copy_sprites; - uint8_t m_drawmode_table[16]; + bool m_copy_sprites; + u8 m_drawmode_table[16]; DECLARE_WRITE_LINE_MEMBER(subres_w); - DECLARE_WRITE8_MEMBER(audiocpu_irq_ack_w); - DECLARE_WRITE8_MEMBER(mcu_irq_ack_w); + void audiocpu_irq_ack_w(u8 data); + void mcu_irq_ack_w(u8 data); DECLARE_READ8_MEMBER(dsw_r); - DECLARE_WRITE8_MEMBER(coin_w); - DECLARE_WRITE8_MEMBER(dac_gain_w); - DECLARE_WRITE8_MEMBER(sound_bankswitch_w); - DECLARE_WRITE8_MEMBER(mcu_bankswitch_w); - DECLARE_WRITE8_MEMBER(mcu_patch_w); - DECLARE_READ8_MEMBER(quester_paddle_r); - DECLARE_READ8_MEMBER(berabohm_buttons_r); - DECLARE_READ8_MEMBER(faceoff_inputs_r); - DECLARE_WRITE8_MEMBER(spriteram_w); - DECLARE_WRITE8_MEMBER(_3dcs_w); - DECLARE_READ8_MEMBER(no_key_r); - DECLARE_WRITE8_MEMBER(no_key_w); - DECLARE_READ8_MEMBER(key_type1_r); - DECLARE_WRITE8_MEMBER(key_type1_w); - DECLARE_READ8_MEMBER(key_type2_r); - DECLARE_WRITE8_MEMBER(key_type2_w); - DECLARE_READ8_MEMBER(key_type3_r); - DECLARE_WRITE8_MEMBER(key_type3_w); - - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - void driver_init() override; - - void TilemapCB(uint16_t code, int *tile, int *mask); + void coin_w(u8 data); + void dac_gain_w(u8 data); + void sound_bankswitch_w(u8 data); + void mcu_bankswitch_w(u8 data); + void mcu_patch_w(u8 data); + u8 quester_paddle_r(offs_t offset); + u8 berabohm_buttons_r(offs_t offset); + u8 faceoff_inputs_r(offs_t offset); + void spriteram_w(offs_t offset, u8 data); + void _3dcs_w(offs_t offset, u8 data); + u8 no_key_r(offs_t offset); + void no_key_w(offs_t offset, u8 data); + u8 key_type1_r(offs_t offset); + void key_type1_w(offs_t offset, u8 data); + u8 key_type2_r(offs_t offset); + void key_type2_w(offs_t offset, u8 data); + u8 key_type3_r(offs_t offset); + void key_type3_w(offs_t offset, u8 data); + + void key_type_1_init(int key_id); + void key_type_2_init(int key_id); + void key_type_3_init(int key_id, int reg, int rng, int swap4_arg, int swap4, int bottom4, int top4); + + void TilemapCB(u16 code, int *tile, int *mask); void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(screen_vblank); void main_map(address_map &map); diff --git a/src/mame/machine/namcos1.cpp b/src/mame/machine/namcos1.cpp index 627e2a8222c..02dc8fedb50 100644 --- a/src/mame/machine/namcos1.cpp +++ b/src/mame/machine/namcos1.cpp @@ -10,20 +10,20 @@ * * *******************************************************************************/ -WRITE8_MEMBER( namcos1_state::_3dcs_w ) +void namcos1_state::_3dcs_w(offs_t offset, u8 data) { if (offset & 1) popmessage("LEFT"); else popmessage("RIGHT"); } -READ8_MEMBER( namcos1_state::no_key_r ) +u8 namcos1_state::no_key_r(offs_t offset) { popmessage("%s: keychip read %04x\n", m_mcu->tag(), m_mcu->pc(), offset); return 0; } -WRITE8_MEMBER( namcos1_state::no_key_w ) +void namcos1_state::no_key_w(offs_t offset, u8 data) { popmessage("%s: keychip write %04x=%02x\n", m_mcu->tag(), m_mcu->pc(), offset, data); } @@ -128,7 +128,7 @@ puzlclub: CPU #0 PC e017: keychip write 0003=35 [they probably used RAM instead of a key chip for this prototype] CPU #0 PC e3d4: keychip read 0003 [AND #$37 = key no.] */ -READ8_MEMBER( namcos1_state::key_type1_r ) +u8 namcos1_state::key_type1_r(offs_t offset) { // logerror("%s: keychip read %04x\n", machine().describe_context(), offset); @@ -159,7 +159,7 @@ READ8_MEMBER( namcos1_state::key_type1_r ) return 0; } -WRITE8_MEMBER( namcos1_state::key_type1_w ) +void namcos1_state::key_type1_w(offs_t offset, u8 data) { // logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data); @@ -311,7 +311,7 @@ CPU #0 PC e574: keychip read 0001 */ -READ8_MEMBER( namcos1_state::key_type2_r ) +u8 namcos1_state::key_type2_r(offs_t offset) { // logerror("%s: keychip read %04x\n", machine().describe_context(), offset); @@ -330,7 +330,7 @@ READ8_MEMBER( namcos1_state::key_type2_r ) return 0; } -WRITE8_MEMBER( namcos1_state::key_type2_w ) +void namcos1_state::key_type2_w(offs_t offset, u8 data) { // logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data); @@ -340,8 +340,8 @@ WRITE8_MEMBER( namcos1_state::key_type2_w ) if (offset == 3) { - unsigned int d = (m_key[0] << 8) | m_key[1]; - unsigned int n = (m_key_numerator_high_word << 16) | (m_key[2] << 8) | m_key[3]; + u32 d = (m_key[0] << 8) | m_key[1]; + u32 n = (m_key_numerator_high_word << 16) | (m_key[2] << 8) | m_key[3]; if (d) { @@ -437,7 +437,7 @@ CPU #0 PC ca96: keychip read 0043 [0x30 | (ARG & 0x0f)] CPU #0 PC e45a: keychip read 0030 [discarded] */ -READ8_MEMBER( namcos1_state::key_type3_r ) +u8 namcos1_state::key_type3_r(offs_t offset) { // logerror("%s: keychip read %04x\n", machine().describe_context(), offset); @@ -447,7 +447,7 @@ READ8_MEMBER( namcos1_state::key_type3_r ) The schematics don't show A11 being used, so I go for this handling. */ - int op = (offset & 0x70) >> 4; + const int op = (offset & 0x70) >> 4; if (op == m_key_reg) return m_key_id; if (op == m_key_rng) return machine().rand(); @@ -461,7 +461,7 @@ READ8_MEMBER( namcos1_state::key_type3_r ) return 0; } -WRITE8_MEMBER( namcos1_state::key_type3_w ) +void namcos1_state::key_type3_w(offs_t offset, u8 data) { // logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data); @@ -476,7 +476,7 @@ WRITE8_MEMBER( namcos1_state::key_type3_w ) * * *******************************************************************************/ -WRITE8_MEMBER(namcos1_state::sound_bankswitch_w) +void namcos1_state::sound_bankswitch_w(u8 data) { m_soundbank->set_entry((data & 0x70) >> 4); } @@ -545,7 +545,7 @@ void namcos1_state::machine_reset() *******************************************************************************/ /* mcu banked rom area select */ -WRITE8_MEMBER(namcos1_state::mcu_bankswitch_w) +void namcos1_state::mcu_bankswitch_w(u8 data) { int bank; @@ -581,7 +581,7 @@ WRITE8_MEMBER(namcos1_state::mcu_bankswitch_w) /* I found set $A6 only initialize in MCU */ /* This patch kill write this data by MCU case $A6 to xx(clear) */ -WRITE8_MEMBER(namcos1_state::mcu_patch_w) +void namcos1_state::mcu_patch_w(u8 data) { //logerror("mcu C000 write %s data=%02x\n",machine().describe_context(),data); if (m_mcu_patch_data == 0xa6) return; @@ -603,14 +603,14 @@ void namcos1_state::driver_init() { if ((i & 0x010000) == 0) { - uint8_t t = m_rom[i]; + u8 t = m_rom[i]; m_rom[i] = m_rom[i + 0x010000]; m_rom[i + 0x010000] = t; } } // kludge! see notes - m_mcu->space(AS_PROGRAM).install_write_handler(0xc000, 0xc000, write8_delegate(FUNC(namcos1_state::mcu_patch_w), this)); + m_mcu->space(AS_PROGRAM).install_write_handler(0xc000, 0xc000, write8smo_delegate(FUNC(namcos1_state::mcu_patch_w), this)); // these are overridden as needed in the specific DRIVER_INIT_MEMBERs m_key_id = 0; @@ -622,6 +622,38 @@ void namcos1_state::driver_init() m_key_top4 = 0; } +void namcos1_state::key_type_1_init(int key_id) +{ + m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, + read8sm_delegate(FUNC(namcos1_state::key_type1_r),this), + write8sm_delegate(FUNC(namcos1_state::key_type1_w),this)); + m_key_id = key_id; +} + +void namcos1_state::key_type_2_init(int key_id) +{ + m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, + read8sm_delegate(FUNC(namcos1_state::key_type2_r),this), + write8sm_delegate(FUNC(namcos1_state::key_type2_w),this)); + m_key_id = key_id; + save_item(NAME(m_key_quotient)); + save_item(NAME(m_key_reminder)); + save_item(NAME(m_key_numerator_high_word)); +} + +void namcos1_state::key_type_3_init(int key_id, int reg, int rng, int swap4_arg, int swap4, int bottom4, int top4) +{ + m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, + read8sm_delegate(FUNC(namcos1_state::key_type3_r),this), + write8sm_delegate(FUNC(namcos1_state::key_type3_w),this)); + m_key_id = key_id; + m_key_reg = reg; + m_key_rng = rng; + m_key_swap4_arg = swap4_arg; + m_key_swap4 = swap4; + m_key_bottom4 = bottom4; + m_key_top4 = top4; +} /******************************************************************************* * Shadowland / Youkai Douchuuki specific * @@ -637,10 +669,7 @@ void namcos1_state::init_shadowld() void namcos1_state::init_dspirit() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type1_r),this), - write8_delegate(FUNC(namcos1_state::key_type1_w),this)); - m_key_id = 0x36; + key_type_1_init(0x36); } /******************************************************************************* @@ -649,10 +678,7 @@ void namcos1_state::init_dspirit() void namcos1_state::init_wldcourt() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type1_r),this), - write8_delegate(FUNC(namcos1_state::key_type1_w),this)); - m_key_id = 0x35; + key_type_1_init(0x35); } /******************************************************************************* @@ -661,10 +687,7 @@ void namcos1_state::init_wldcourt() void namcos1_state::init_blazer() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type1_r),this), - write8_delegate(FUNC(namcos1_state::key_type1_w),this)); - m_key_id = 0x13; + key_type_1_init(0x13); } /******************************************************************************* @@ -673,10 +696,7 @@ void namcos1_state::init_blazer() void namcos1_state::init_puzlclub() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type1_r),this), - write8_delegate(FUNC(namcos1_state::key_type1_w),this)); - m_key_id = 0x35; + key_type_1_init(0x35); } /******************************************************************************* @@ -685,13 +705,7 @@ void namcos1_state::init_puzlclub() void namcos1_state::init_pacmania() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type2_r),this), - write8_delegate(FUNC(namcos1_state::key_type2_w),this)); - m_key_id = 0x12; - save_item(NAME(m_key_quotient)); - save_item(NAME(m_key_reminder)); - save_item(NAME(m_key_numerator_high_word)); + key_type_2_init(0x12); } /******************************************************************************* @@ -700,13 +714,7 @@ void namcos1_state::init_pacmania() void namcos1_state::init_alice() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type2_r),this), - write8_delegate(FUNC(namcos1_state::key_type2_w),this)); - m_key_id = 0x25; - save_item(NAME(m_key_quotient)); - save_item(NAME(m_key_reminder)); - save_item(NAME(m_key_numerator_high_word)); + key_type_2_init(0x25); } /******************************************************************************* @@ -715,13 +723,7 @@ void namcos1_state::init_alice() void namcos1_state::init_galaga88() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type2_r),this), - write8_delegate(FUNC(namcos1_state::key_type2_w),this)); - m_key_id = 0x31; - save_item(NAME(m_key_quotient)); - save_item(NAME(m_key_reminder)); - save_item(NAME(m_key_numerator_high_word)); + key_type_2_init(0x31); } /******************************************************************************* @@ -730,13 +732,7 @@ void namcos1_state::init_galaga88() void namcos1_state::init_ws() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type2_r),this), - write8_delegate(FUNC(namcos1_state::key_type2_w),this)); - m_key_id = 0x07; - save_item(NAME(m_key_quotient)); - save_item(NAME(m_key_reminder)); - save_item(NAME(m_key_numerator_high_word)); + key_type_2_init(0x07); } /******************************************************************************* @@ -745,13 +741,7 @@ void namcos1_state::init_ws() void namcos1_state::init_bakutotu() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type2_r),this), - write8_delegate(FUNC(namcos1_state::key_type2_w),this)); - m_key_id = 0x22; - save_item(NAME(m_key_quotient)); - save_item(NAME(m_key_reminder)); - save_item(NAME(m_key_numerator_high_word)); + key_type_2_init(0x22); } /******************************************************************************* @@ -760,16 +750,7 @@ void namcos1_state::init_bakutotu() void namcos1_state::init_splatter() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 181; - m_key_reg = 3; - m_key_rng = 4; - m_key_swap4_arg = -1; - m_key_swap4 = -1; - m_key_bottom4 = -1; - m_key_top4 = -1; + key_type_3_init(181, 3, 4, -1, -1, -1, -1); } /******************************************************************************* @@ -778,16 +759,7 @@ void namcos1_state::init_splatter() void namcos1_state::init_rompers() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 182; - m_key_reg = 7; - m_key_rng = -1; - m_key_swap4_arg = -1; - m_key_swap4 = -1; - m_key_bottom4 = -1; - m_key_top4 = -1; + key_type_3_init(182, 7, -1, -1, -1, -1, -1); } /******************************************************************************* @@ -796,16 +768,7 @@ void namcos1_state::init_rompers() void namcos1_state::init_blastoff() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 183; - m_key_reg = 0; - m_key_rng = 7; - m_key_swap4_arg = 3; - m_key_swap4 = 5; - m_key_bottom4 = -1; - m_key_top4 = -1; + key_type_3_init(183, 0, 7, 3, 5, -1, -1); } /******************************************************************************* @@ -814,16 +777,7 @@ void namcos1_state::init_blastoff() void namcos1_state::init_ws89() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 184; - m_key_reg = 2; - m_key_rng = -1; - m_key_swap4_arg = -1; - m_key_swap4 = -1; - m_key_bottom4 = -1; - m_key_top4 = -1; + key_type_3_init(184, 2, -1, -1, -1, -1, -1); } /******************************************************************************* @@ -832,16 +786,7 @@ void namcos1_state::init_ws89() void namcos1_state::init_tankfrce() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 185; - m_key_reg = 5; - m_key_rng = -1; - m_key_swap4_arg = 1; - m_key_swap4 = -1; - m_key_bottom4 = 2; - m_key_top4 = -1; + key_type_3_init(185, 5, -1, 1, -1, 2, -1); } void namcos1_state::init_tankfrc4() @@ -853,7 +798,7 @@ void namcos1_state::init_tankfrc4() m_stored_input[0] = 0; m_stored_input[1] = 0; - m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8_delegate(FUNC(namcos1_state::faceoff_inputs_r), this)); + m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8sm_delegate(FUNC(namcos1_state::faceoff_inputs_r), this)); save_item(NAME(m_input_count)); save_item(NAME(m_stored_input)); } @@ -864,16 +809,7 @@ void namcos1_state::init_tankfrc4() void namcos1_state::init_dangseed() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 308; - m_key_reg = 6; - m_key_rng = -1; - m_key_swap4_arg = 5; - m_key_swap4 = -1; - m_key_bottom4 = 0; - m_key_top4 = 4; + key_type_3_init(308, 6, -1, 5, -1, 0, 4); } /******************************************************************************* @@ -882,16 +818,7 @@ void namcos1_state::init_dangseed() void namcos1_state::init_pistoldm() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 309; - m_key_reg = 1; - m_key_rng = 2; - m_key_swap4_arg = 0; - m_key_swap4 = -1; - m_key_bottom4 = 4; - m_key_top4 = -1; + key_type_3_init(309, 1, 2, 0, -1, 4, -1); } /******************************************************************************* @@ -900,16 +827,7 @@ void namcos1_state::init_pistoldm() void namcos1_state::init_ws90() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 310; - m_key_reg = 4; - m_key_rng = -1; - m_key_swap4_arg = 7; - m_key_swap4 = -1; - m_key_bottom4 = 3; - m_key_top4 = -1; + key_type_3_init(310, 4, -1, 7, -1, 3, -1); } /******************************************************************************* @@ -918,16 +836,7 @@ void namcos1_state::init_ws90() void namcos1_state::init_soukobdx() { driver_init(); - m_c117->space(AS_PROGRAM).install_readwrite_handler(0x2f8000, 0x2f9fff, - read8_delegate(FUNC(namcos1_state::key_type3_r),this), - write8_delegate(FUNC(namcos1_state::key_type3_w),this)); - m_key_id = 311; - m_key_reg = 2; - m_key_rng = 3; /*?*/ - m_key_swap4_arg = 0; - m_key_swap4 = -1; - m_key_bottom4 = 4; - m_key_top4 = -1; + key_type_3_init(311, 2, 3 /*?*/, 0, -1, 4, -1); } @@ -935,16 +844,16 @@ void namcos1_state::init_soukobdx() /******************************************************************************* * Quester specific * *******************************************************************************/ -READ8_MEMBER( namcos1_state::quester_paddle_r ) +u8 namcos1_state::quester_paddle_r(offs_t offset) { if (offset == 0) { int ret; if (!(m_strobe & 0x20)) - ret = (ioport("CONTROL0")->read()&0x90) | (m_strobe & 0x40) | (ioport("PADDLE0")->read()&0x0f); + ret = (m_io_control[0]->read()&0x90) | (m_strobe & 0x40) | (m_io_paddle[0]->read()&0x0f); else - ret = (ioport("CONTROL0")->read()&0x90) | (m_strobe & 0x40) | (ioport("PADDLE1")->read()&0x0f); + ret = (m_io_control[0]->read()&0x90) | (m_strobe & 0x40) | (m_io_paddle[1]->read()&0x0f); m_strobe ^= 0x40; @@ -955,9 +864,9 @@ READ8_MEMBER( namcos1_state::quester_paddle_r ) int ret; if (!(m_strobe & 0x20)) - ret = (ioport("CONTROL1")->read()&0x90) | 0x00 | (ioport("PADDLE0")->read()>>4); + ret = (m_io_control[1]->read()&0x90) | 0x00 | (m_io_paddle[0]->read()>>4); else - ret = (ioport("CONTROL1")->read()&0x90) | 0x20 | (ioport("PADDLE1")->read()>>4); + ret = (m_io_control[1]->read()&0x90) | 0x20 | (m_io_paddle[1]->read()>>4); if (!(m_strobe & 0x40)) m_strobe ^= 0x20; @@ -969,7 +878,7 @@ void namcos1_state::init_quester() { m_strobe = 0; driver_init(); - m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8_delegate(FUNC(namcos1_state::quester_paddle_r), this)); + m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8sm_delegate(FUNC(namcos1_state::quester_paddle_r), this)); save_item(NAME(m_strobe)); } @@ -979,7 +888,7 @@ void namcos1_state::init_quester() * Beraboh Man specific * *******************************************************************************/ -READ8_MEMBER( namcos1_state::berabohm_buttons_r ) +u8 namcos1_state::berabohm_buttons_r(offs_t offset) { int res; @@ -987,16 +896,13 @@ READ8_MEMBER( namcos1_state::berabohm_buttons_r ) { int inp = m_input_count; - if (inp == 4) res = ioport("CONTROL0")->read(); + if (inp == 4) res = m_io_control[0]->read(); else { - char portname[40]; - #ifdef PRESSURE_SENSITIVE static int counter[4]; - sprintf(portname,"IN%d",inp); /* IN0-IN3 */ - res = ioport(portname)->read(); + res = m_io_in[inp]->read(); /* IN0-IN3 */ if (res & 0x80) { if (counter[inp] >= 0) @@ -1019,8 +925,7 @@ READ8_MEMBER( namcos1_state::berabohm_buttons_r ) else counter[inp] = -1; #else - sprintf(portname,"IN%d",inp); /* IN0-IN3 */ - res = ioport(portname)->read(); + res = m_io_in[inp]->read(); /* IN0-IN3 */ if (res & 1) res = 0x7f; /* weak */ else if (res & 2) res = 0x48; /* medium */ else if (res & 4) res = 0x40; /* strong */ @@ -1031,7 +936,7 @@ READ8_MEMBER( namcos1_state::berabohm_buttons_r ) } else { - res = ioport("CONTROL1")->read() & 0x8f; + res = m_io_control[1]->read() & 0x8f; /* the strobe cannot happen too often, otherwise the MCU will waste too much time reading the inputs and won't have enough cycles to play two @@ -1059,7 +964,7 @@ void namcos1_state::init_berabohm() m_strobe = 0; m_strobe_count = 0; driver_init(); - m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8_delegate(FUNC(namcos1_state::berabohm_buttons_r), this)); + m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8sm_delegate(FUNC(namcos1_state::berabohm_buttons_r), this)); save_item(NAME(m_input_count)); save_item(NAME(m_strobe)); save_item(NAME(m_strobe_count)); @@ -1073,19 +978,19 @@ void namcos1_state::init_berabohm() // used by faceoff and tankforce 4 player (input multiplex) -READ8_MEMBER( namcos1_state::faceoff_inputs_r ) +u8 namcos1_state::faceoff_inputs_r(offs_t offset) { int res; if (offset == 0) { - res = (ioport("CONTROL0")->read() & 0x80) | m_stored_input[0]; + res = (m_io_control[0]->read() & 0x80) | m_stored_input[0]; return res; } else { - res = ioport("CONTROL1")->read() & 0x80; + res = m_io_control[1]->read() & 0x80; /* the strobe cannot happen too often, otherwise the MCU will waste too much time reading the inputs and won't have enough cycles to play two @@ -1100,17 +1005,17 @@ READ8_MEMBER( namcos1_state::faceoff_inputs_r ) switch (m_input_count) { case 0: - m_stored_input[0] = ioport("IN0")->read() & 0x1f; - m_stored_input[1] = (ioport("IN3")->read() & 0x07) << 3; + m_stored_input[0] = m_io_in[0]->read() & 0x1f; + m_stored_input[1] = (m_io_in[3]->read() & 0x07) << 3; break; case 3: - m_stored_input[0] = ioport("IN2")->read() & 0x1f; + m_stored_input[0] = m_io_in[2]->read() & 0x1f; break; case 4: - m_stored_input[0] = ioport("IN1")->read() & 0x1f; - m_stored_input[1] = ioport("IN3")->read() & 0x18; + m_stored_input[0] = m_io_in[1]->read() & 0x1f; + m_stored_input[1] = m_io_in[3]->read() & 0x18; break; default: @@ -1138,7 +1043,7 @@ void namcos1_state::init_faceoff() m_stored_input[1] = 0; driver_init(); - m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8_delegate(FUNC(namcos1_state::faceoff_inputs_r), this)); + m_mcu->space(AS_PROGRAM).install_read_handler(0x1400, 0x1401, read8sm_delegate(FUNC(namcos1_state::faceoff_inputs_r), this)); save_item(NAME(m_input_count)); save_item(NAME(m_stored_input)); } diff --git a/src/mame/video/namcos1.cpp b/src/mame/video/namcos1.cpp index af5c91be3a1..ccabf3c0ca9 100644 --- a/src/mame/video/namcos1.cpp +++ b/src/mame/video/namcos1.cpp @@ -53,7 +53,7 @@ Namco System 1 Video Hardware ***************************************************************************/ -void namcos1_state::TilemapCB(uint16_t code, int *tile, int *mask) +void namcos1_state::TilemapCB(u16 code, int *tile, int *mask) { code &= 0x3fff; *tile = code; @@ -82,7 +82,7 @@ void namcos1_state::video_start() for (i = 0x0800;i < 0x1000;i++) m_c116->shadow_table()[i] = i + 0x0800; - m_copy_sprites = 0; + m_copy_sprites = false; save_item(NAME(m_copy_sprites)); } @@ -95,7 +95,7 @@ void namcos1_state::video_start() ***************************************************************************/ -WRITE8_MEMBER( namcos1_state::spriteram_w ) +void namcos1_state::spriteram_w(offs_t offset, u8 data) { /* 0000-07ff work ram */ /* 0800-0fff sprite ram */ @@ -103,7 +103,7 @@ WRITE8_MEMBER( namcos1_state::spriteram_w ) /* a write to this offset tells the sprite chip to buffer the sprite list */ if (offset == 0x0ff2) - m_copy_sprites = 1; + m_copy_sprites = true; } @@ -136,32 +136,32 @@ sprite format: void namcos1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - uint8_t *spriteram = m_spriteram + 0x800; - const uint8_t *source = &spriteram[0x800-0x20]; /* the last is NOT a sprite */ - const uint8_t *finish = &spriteram[0]; + u8 *spriteram = m_spriteram + 0x800; + const u8 *source = &spriteram[0x800-0x20]; /* the last is NOT a sprite */ + const u8 *finish = &spriteram[0]; gfx_element *gfx = m_gfxdecode->gfx(0); - int sprite_xoffs = spriteram[0x07f5] + ((spriteram[0x07f4] & 1) << 8); - int sprite_yoffs = spriteram[0x07f7]; + const int sprite_xoffs = spriteram[0x07f5] + ((spriteram[0x07f4] & 1) << 8); + const int sprite_yoffs = spriteram[0x07f7]; while (source >= finish) { static const int sprite_size[4] = { 16, 8, 32, 4 }; - int attr1 = source[10]; - int attr2 = source[14]; - int color = source[12]; + const u8 attr1 = source[10]; + const u8 attr2 = source[14]; + u32 color = source[12]; int flipx = (attr1 & 0x20) >> 5; int flipy = (attr2 & 0x01); - int sizex = sprite_size[(attr1 & 0xc0) >> 6]; - int sizey = sprite_size[(attr2 & 0x06) >> 1]; - int tx = (attr1 & 0x18) & (~(sizex-1)); - int ty = (attr2 & 0x18) & (~(sizey-1)); + const u16 sizex = sprite_size[(attr1 & 0xc0) >> 6]; + const u16 sizey = sprite_size[(attr2 & 0x06) >> 1]; + const u16 tx = (attr1 & 0x18) & (~(sizex - 1)); + const u16 ty = (attr2 & 0x18) & (~(sizey - 1)); int sx = source[13] + ((color & 0x01) << 8); int sy = -source[15] - sizey; - int sprite = source[11]; - int sprite_bank = attr1 & 7; - int priority = (source[14] & 0xe0) >> 5; - int pri_mask = (0xff << (priority + 1)) & 0xff; + u32 sprite = source[11]; + const u32 sprite_bank = attr1 & 7; + const int priority = (source[14] & 0xe0) >> 5; + const u8 pri_mask = (0xff << (priority + 1)) & 0xff; sprite += sprite_bank * 256; color = color >> 1; @@ -205,7 +205,7 @@ void namcos1_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, co -uint32_t namcos1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 namcos1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int i; rectangle new_clip = cliprect; @@ -252,16 +252,15 @@ WRITE_LINE_MEMBER(namcos1_state::screen_vblank) { if (m_copy_sprites) { - uint8_t *spriteram = m_spriteram + 0x800; - int i,j; + u8 *spriteram = m_spriteram + 0x800; - for (i = 0;i < 0x800;i += 16) + for (int i = 0; i < 0x800; i += 16) { - for (j = 10;j < 16;j++) - spriteram[i+j] = spriteram[i+j - 6]; + for (int j = 10; j < 16; j++) + spriteram[i + j] = spriteram[i + j - 6]; } - m_copy_sprites = 0; + m_copy_sprites = false; } m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); m_subcpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); -- cgit v1.2.3