namcos1.cpp : Updates

Reduce duplicates, Runtime tag lookups, Simplify handlers, Use shorter/correct type values
This commit is contained in:
cam900 2019-03-22 16:03:38 +09:00
parent 809f16a672
commit d3eb9d346a
4 changed files with 165 additions and 250 deletions

View File

@ -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);

View File

@ -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<mc6809e_device> m_maincpu;
required_device<mc6809e_device> m_subcpu;
@ -74,13 +83,16 @@ private:
required_device_array<dac_8bit_r2r_device, 2> m_dac;
required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<uint8_t> m_spriteram;
required_shared_ptr<uint8_t> m_triram;
required_region_ptr<uint8_t> m_rom;
required_shared_ptr<u8> m_spriteram;
required_shared_ptr<u8> m_triram;
required_region_ptr<u8> 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<ls157_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);
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);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
void driver_init() override;
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(uint16_t code, int *tile, int *mask);
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);

View File

@ -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));
}

View File

@ -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);