mirror of
https://github.com/holub/mame
synced 2025-05-11 16:48:52 +03:00
namcos1.cpp : Updates
Reduce duplicates, Runtime tag lookups, Simplify handlers, Use shorter/correct type values
This commit is contained in:
parent
809f16a672
commit
d3eb9d346a
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user