mirror of
https://github.com/holub/mame
synced 2025-04-23 17:00:53 +03:00
more (nw)
This commit is contained in:
parent
626cb0ebd7
commit
8f590ef8f0
@ -90,6 +90,10 @@ WRITE16_MEMBER(legionna_state::sound_comms_w)
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( legionna_cop_mem, AS_PROGRAM, 16, legionna_state )
|
||||
AM_RANGE(0x100400, 0x100401) AM_DEVWRITE("raiden2cop", raiden2cop_device, cop_sprite_dma_param_lo_w) // grainbow
|
||||
AM_RANGE(0x100402, 0x100403) AM_DEVWRITE("raiden2cop", raiden2cop_device, cop_sprite_dma_param_hi_w) // grainbow
|
||||
AM_RANGE(0x10040c, 0x10040d) AM_DEVWRITE("raiden2cop", raiden2cop_device, cop_sprite_dma_size_w) // grainbow
|
||||
|
||||
// AM_RANGE(0x10041c, 0x10041d) AM_WRITE(cop_angle_target_w) // angle target (for 0x6200 COP macro)
|
||||
// AM_RANGE(0x10041e, 0x10041f) AM_WRITE(cop_angle_step_w) // angle step (for 0x6200 COP macro)
|
||||
AM_RANGE(0x100420, 0x100421) AM_DEVWRITE("raiden2cop", raiden2cop_device, cop_itoa_low_w)
|
||||
|
@ -43,6 +43,10 @@ raiden2cop_device::raiden2cop_device(const machine_config &mconfig, const char *
|
||||
|
||||
m_cop_rng_max_value(0),
|
||||
|
||||
m_cop_sprite_dma_param(0),
|
||||
m_cop_sprite_dma_size(0),
|
||||
|
||||
|
||||
m_videoramout_cb(*this),
|
||||
m_palette(*this, ":palette")
|
||||
{
|
||||
@ -129,6 +133,10 @@ void raiden2cop_device::device_start()
|
||||
|
||||
save_item(NAME(m_cop_rng_max_value));
|
||||
|
||||
save_item(NAME(m_cop_sprite_dma_param));
|
||||
|
||||
save_item(NAME(m_cop_sprite_dma_size));
|
||||
|
||||
|
||||
m_videoramout_cb.resolve_safe();
|
||||
|
||||
@ -1080,4 +1088,21 @@ WRITE16_MEMBER(raiden2cop_device::cop_prng_maxvalue_w)
|
||||
READ16_MEMBER(raiden2cop_device::cop_prng_maxvalue_r)
|
||||
{
|
||||
return m_cop_rng_max_value;
|
||||
}
|
||||
}
|
||||
|
||||
// misc used by 68k games (mostly grainbow?)
|
||||
|
||||
WRITE16_MEMBER( raiden2cop_device::cop_sprite_dma_param_hi_w)
|
||||
{
|
||||
m_cop_sprite_dma_param = (m_cop_sprite_dma_param&0x0000ffff)|(data<<16);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( raiden2cop_device::cop_sprite_dma_param_lo_w)
|
||||
{
|
||||
m_cop_sprite_dma_param = (m_cop_sprite_dma_param&0xffff0000)|(data&0xffff);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(raiden2cop_device::cop_sprite_dma_size_w)
|
||||
{
|
||||
m_cop_sprite_dma_size = data;
|
||||
}
|
||||
|
@ -108,12 +108,7 @@ public:
|
||||
DECLARE_WRITE16_MEMBER( cop_angle_mod_val_w );
|
||||
|
||||
DECLARE_WRITE16_MEMBER(cop_hitbox_baseadr_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sort_lookup_hi_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sort_lookup_lo_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sort_ram_addr_hi_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sort_ram_addr_lo_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sort_param_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sort_dma_trig_w);
|
||||
|
||||
|
||||
UINT32 cop_regs[8];
|
||||
UINT16 cop_status, cop_scale, cop_angle, cop_dist;
|
||||
@ -141,15 +136,30 @@ public:
|
||||
void cop_collision_read_pos(address_space &space, int slot, UINT32 spradr, bool allow_swap);
|
||||
void cop_collision_update_hitbox(address_space &space, int slot, UINT32 hitadr);
|
||||
|
||||
// Sort DMA (zeroteam, cupsoc)
|
||||
|
||||
UINT32 cop_sort_ram_addr, cop_sort_lookup;
|
||||
UINT16 cop_sort_param;
|
||||
|
||||
// RNG
|
||||
DECLARE_WRITE16_MEMBER(cop_sort_lookup_hi_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sort_lookup_lo_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sort_ram_addr_hi_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sort_ram_addr_lo_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sort_param_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sort_dma_trig_w);
|
||||
|
||||
// RNG (cupsoc)
|
||||
UINT16 m_cop_rng_max_value;
|
||||
DECLARE_READ16_MEMBER(cop_prng_r);
|
||||
DECLARE_WRITE16_MEMBER(cop_prng_maxvalue_w);
|
||||
DECLARE_READ16_MEMBER(cop_prng_maxvalue_r);
|
||||
|
||||
// misc 68k (grainbow)
|
||||
UINT32 m_cop_sprite_dma_param;
|
||||
DECLARE_WRITE16_MEMBER(cop_sprite_dma_param_hi_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sprite_dma_param_lo_w);
|
||||
DECLARE_WRITE16_MEMBER(cop_sprite_dma_size_w);
|
||||
int m_cop_sprite_dma_size;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
|
@ -1614,8 +1614,6 @@ seibu_cop_legacy_device::seibu_cop_legacy_device(const machine_config &mconfig,
|
||||
m_cop_sprite_dma_src(0),
|
||||
m_cop_sprite_dma_abs_x(0),
|
||||
m_cop_sprite_dma_abs_y(0),
|
||||
m_cop_sprite_dma_size(0),
|
||||
m_cop_sprite_dma_param(0),
|
||||
m_raiden2cop(*this, ":raiden2cop")
|
||||
{
|
||||
|
||||
@ -1656,8 +1654,6 @@ void seibu_cop_legacy_device::device_start()
|
||||
save_item(NAME(m_cop_sprite_dma_src));
|
||||
save_item(NAME(m_cop_sprite_dma_abs_x));
|
||||
save_item(NAME(m_cop_sprite_dma_abs_y));
|
||||
save_item(NAME(m_cop_sprite_dma_size));
|
||||
save_item(NAME(m_cop_sprite_dma_param));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -2070,14 +2066,10 @@ WRITE16_MEMBER( seibu_cop_legacy_device::generic_cop_w )
|
||||
seibu_cop_log("%06x: COPX unhandled write data %04x at offset %04x\n", space.device().safe_pc(), data, offset*2);
|
||||
break;
|
||||
|
||||
/* Sprite DMA */
|
||||
case (0x000/2):
|
||||
case (0x002/2):
|
||||
m_cop_sprite_dma_param = (m_cop_mcu_ram[0x000/2]) | (m_cop_mcu_ram[0x002/2] << 16);
|
||||
//popmessage("%08x",m_cop_sprite_dma_param & 0xffffffc0);
|
||||
break;
|
||||
|
||||
case (0x00c/2): { m_cop_sprite_dma_size = m_cop_mcu_ram[offset]; break; }
|
||||
|
||||
|
||||
|
||||
case (0x010/2):
|
||||
{
|
||||
if(data)
|
||||
@ -2088,9 +2080,9 @@ WRITE16_MEMBER( seibu_cop_legacy_device::generic_cop_w )
|
||||
m_raiden2cop->cop_regs[4]+=8;
|
||||
m_cop_sprite_dma_src+=6;
|
||||
|
||||
m_cop_sprite_dma_size--;
|
||||
m_raiden2cop->m_cop_sprite_dma_size--;
|
||||
|
||||
if(m_cop_sprite_dma_size > 0)
|
||||
if(m_raiden2cop->m_cop_sprite_dma_size > 0)
|
||||
m_raiden2cop->cop_status &= ~2;
|
||||
else
|
||||
m_raiden2cop->cop_status |= 2;
|
||||
@ -2500,7 +2492,7 @@ WRITE16_MEMBER( seibu_cop_legacy_device::generic_cop_w )
|
||||
|
||||
offs = (offset & 3) * 4;
|
||||
|
||||
space.write_word(m_raiden2cop->cop_regs[4] + offs + 0,space.read_word(m_cop_sprite_dma_src + offs) + (m_cop_sprite_dma_param & 0x3f));
|
||||
space.write_word(m_raiden2cop->cop_regs[4] + offs + 0,space.read_word(m_cop_sprite_dma_src + offs) + (m_raiden2cop->m_cop_sprite_dma_param & 0x3f));
|
||||
//space.write_word(m_raiden2cop->cop_regs[4] + offs + 2,space.read_word(m_cop_sprite_dma_src+2 + offs));
|
||||
return;
|
||||
}
|
||||
|
@ -50,8 +50,7 @@ private:
|
||||
UINT16 m_cop_rom_addr_lo,m_cop_rom_addr_hi,m_cop_rom_addr_unk;
|
||||
|
||||
UINT32 m_cop_sprite_dma_src;
|
||||
int m_cop_sprite_dma_abs_x,m_cop_sprite_dma_abs_y,m_cop_sprite_dma_size;
|
||||
UINT32 m_cop_sprite_dma_param;
|
||||
int m_cop_sprite_dma_abs_x,m_cop_sprite_dma_abs_y;
|
||||
|
||||
|
||||
void cop_take_hit_box_params(UINT8 offs);
|
||||
|
Loading…
Reference in New Issue
Block a user