trunk/src/mame/drivers/legionna.c
| r32336 | r32337 | |
| 90 | 90 | } |
| 91 | 91 | |
| 92 | 92 | static ADDRESS_MAP_START( legionna_cop_mem, AS_PROGRAM, 16, legionna_state ) |
| 93 | AM_RANGE(0x100400, 0x100401) AM_DEVWRITE("raiden2cop", raiden2cop_device, cop_sprite_dma_param_lo_w) // grainbow |
| 94 | AM_RANGE(0x100402, 0x100403) AM_DEVWRITE("raiden2cop", raiden2cop_device, cop_sprite_dma_param_hi_w) // grainbow |
| 95 | AM_RANGE(0x10040c, 0x10040d) AM_DEVWRITE("raiden2cop", raiden2cop_device, cop_sprite_dma_size_w) // grainbow |
| 96 | |
| 93 | 97 | // AM_RANGE(0x10041c, 0x10041d) AM_WRITE(cop_angle_target_w) // angle target (for 0x6200 COP macro) |
| 94 | 98 | // AM_RANGE(0x10041e, 0x10041f) AM_WRITE(cop_angle_step_w) // angle step (for 0x6200 COP macro) |
| 95 | 99 | AM_RANGE(0x100420, 0x100421) AM_DEVWRITE("raiden2cop", raiden2cop_device, cop_itoa_low_w) |
trunk/src/mame/machine/raiden2cop.c
| r32336 | r32337 | |
| 43 | 43 | |
| 44 | 44 | m_cop_rng_max_value(0), |
| 45 | 45 | |
| 46 | m_cop_sprite_dma_param(0), |
| 47 | m_cop_sprite_dma_size(0), |
| 48 | |
| 49 | |
| 46 | 50 | m_videoramout_cb(*this), |
| 47 | 51 | m_palette(*this, ":palette") |
| 48 | 52 | { |
| r32336 | r32337 | |
| 129 | 133 | |
| 130 | 134 | save_item(NAME(m_cop_rng_max_value)); |
| 131 | 135 | |
| 136 | save_item(NAME(m_cop_sprite_dma_param)); |
| 132 | 137 | |
| 138 | save_item(NAME(m_cop_sprite_dma_size)); |
| 139 | |
| 140 | |
| 133 | 141 | m_videoramout_cb.resolve_safe(); |
| 134 | 142 | |
| 135 | 143 | cop_itoa_digit_count = 4; //TODO: Raiden 2 never inits the BCD register, value here is a guess (8 digits, as WR is 10.000.000 + a) |
| r32336 | r32337 | |
| 1080 | 1088 | READ16_MEMBER(raiden2cop_device::cop_prng_maxvalue_r) |
| 1081 | 1089 | { |
| 1082 | 1090 | return m_cop_rng_max_value; |
| 1083 | | } |
| | No newline at end of file |
| 1091 | } |
| 1092 | |
| 1093 | // misc used by 68k games (mostly grainbow?) |
| 1094 | |
| 1095 | WRITE16_MEMBER( raiden2cop_device::cop_sprite_dma_param_hi_w) |
| 1096 | { |
| 1097 | m_cop_sprite_dma_param = (m_cop_sprite_dma_param&0x0000ffff)|(data<<16); |
| 1098 | } |
| 1099 | |
| 1100 | WRITE16_MEMBER( raiden2cop_device::cop_sprite_dma_param_lo_w) |
| 1101 | { |
| 1102 | m_cop_sprite_dma_param = (m_cop_sprite_dma_param&0xffff0000)|(data&0xffff); |
| 1103 | } |
| 1104 | |
| 1105 | WRITE16_MEMBER(raiden2cop_device::cop_sprite_dma_size_w) |
| 1106 | { |
| 1107 | m_cop_sprite_dma_size = data; |
| 1108 | } |
trunk/src/mame/machine/raiden2cop.h
| r32336 | r32337 | |
| 108 | 108 | DECLARE_WRITE16_MEMBER( cop_angle_mod_val_w ); |
| 109 | 109 | |
| 110 | 110 | DECLARE_WRITE16_MEMBER(cop_hitbox_baseadr_w); |
| 111 | | DECLARE_WRITE16_MEMBER(cop_sort_lookup_hi_w); |
| 112 | | DECLARE_WRITE16_MEMBER(cop_sort_lookup_lo_w); |
| 113 | | DECLARE_WRITE16_MEMBER(cop_sort_ram_addr_hi_w); |
| 114 | | DECLARE_WRITE16_MEMBER(cop_sort_ram_addr_lo_w); |
| 115 | | DECLARE_WRITE16_MEMBER(cop_sort_param_w); |
| 116 | | DECLARE_WRITE16_MEMBER(cop_sort_dma_trig_w); |
| 117 | 111 | |
| 112 | |
| 118 | 113 | UINT32 cop_regs[8]; |
| 119 | 114 | UINT16 cop_status, cop_scale, cop_angle, cop_dist; |
| 120 | 115 | |
| r32336 | r32337 | |
| 141 | 136 | void cop_collision_read_pos(address_space &space, int slot, UINT32 spradr, bool allow_swap); |
| 142 | 137 | void cop_collision_update_hitbox(address_space &space, int slot, UINT32 hitadr); |
| 143 | 138 | |
| 139 | // Sort DMA (zeroteam, cupsoc) |
| 140 | |
| 144 | 141 | UINT32 cop_sort_ram_addr, cop_sort_lookup; |
| 145 | 142 | UINT16 cop_sort_param; |
| 146 | 143 | |
| 147 | | // RNG |
| 144 | DECLARE_WRITE16_MEMBER(cop_sort_lookup_hi_w); |
| 145 | DECLARE_WRITE16_MEMBER(cop_sort_lookup_lo_w); |
| 146 | DECLARE_WRITE16_MEMBER(cop_sort_ram_addr_hi_w); |
| 147 | DECLARE_WRITE16_MEMBER(cop_sort_ram_addr_lo_w); |
| 148 | DECLARE_WRITE16_MEMBER(cop_sort_param_w); |
| 149 | DECLARE_WRITE16_MEMBER(cop_sort_dma_trig_w); |
| 150 | |
| 151 | // RNG (cupsoc) |
| 148 | 152 | UINT16 m_cop_rng_max_value; |
| 149 | 153 | DECLARE_READ16_MEMBER(cop_prng_r); |
| 150 | 154 | DECLARE_WRITE16_MEMBER(cop_prng_maxvalue_w); |
| 151 | 155 | DECLARE_READ16_MEMBER(cop_prng_maxvalue_r); |
| 152 | 156 | |
| 157 | // misc 68k (grainbow) |
| 158 | UINT32 m_cop_sprite_dma_param; |
| 159 | DECLARE_WRITE16_MEMBER(cop_sprite_dma_param_hi_w); |
| 160 | DECLARE_WRITE16_MEMBER(cop_sprite_dma_param_lo_w); |
| 161 | DECLARE_WRITE16_MEMBER(cop_sprite_dma_size_w); |
| 162 | int m_cop_sprite_dma_size; |
| 153 | 163 | |
| 154 | 164 | protected: |
| 155 | 165 | // device-level overrides |
trunk/src/mame/machine/seicop.c
| r32336 | r32337 | |
| 1614 | 1614 | m_cop_sprite_dma_src(0), |
| 1615 | 1615 | m_cop_sprite_dma_abs_x(0), |
| 1616 | 1616 | m_cop_sprite_dma_abs_y(0), |
| 1617 | | m_cop_sprite_dma_size(0), |
| 1618 | | m_cop_sprite_dma_param(0), |
| 1619 | 1617 | m_raiden2cop(*this, ":raiden2cop") |
| 1620 | 1618 | { |
| 1621 | 1619 | |
| r32336 | r32337 | |
| 1656 | 1654 | save_item(NAME(m_cop_sprite_dma_src)); |
| 1657 | 1655 | save_item(NAME(m_cop_sprite_dma_abs_x)); |
| 1658 | 1656 | save_item(NAME(m_cop_sprite_dma_abs_y)); |
| 1659 | | save_item(NAME(m_cop_sprite_dma_size)); |
| 1660 | | save_item(NAME(m_cop_sprite_dma_param)); |
| 1661 | 1657 | } |
| 1662 | 1658 | |
| 1663 | 1659 | //------------------------------------------------- |
| r32336 | r32337 | |
| 2070 | 2066 | seibu_cop_log("%06x: COPX unhandled write data %04x at offset %04x\n", space.device().safe_pc(), data, offset*2); |
| 2071 | 2067 | break; |
| 2072 | 2068 | |
| 2073 | | /* Sprite DMA */ |
| 2074 | | case (0x000/2): |
| 2075 | | case (0x002/2): |
| 2076 | | m_cop_sprite_dma_param = (m_cop_mcu_ram[0x000/2]) | (m_cop_mcu_ram[0x002/2] << 16); |
| 2077 | | //popmessage("%08x",m_cop_sprite_dma_param & 0xffffffc0); |
| 2078 | | break; |
| 2079 | 2069 | |
| 2080 | | case (0x00c/2): { m_cop_sprite_dma_size = m_cop_mcu_ram[offset]; break; } |
| 2070 | |
| 2071 | |
| 2072 | |
| 2081 | 2073 | case (0x010/2): |
| 2082 | 2074 | { |
| 2083 | 2075 | if(data) |
| r32336 | r32337 | |
| 2088 | 2080 | m_raiden2cop->cop_regs[4]+=8; |
| 2089 | 2081 | m_cop_sprite_dma_src+=6; |
| 2090 | 2082 | |
| 2091 | | m_cop_sprite_dma_size--; |
| 2083 | m_raiden2cop->m_cop_sprite_dma_size--; |
| 2092 | 2084 | |
| 2093 | | if(m_cop_sprite_dma_size > 0) |
| 2085 | if(m_raiden2cop->m_cop_sprite_dma_size > 0) |
| 2094 | 2086 | m_raiden2cop->cop_status &= ~2; |
| 2095 | 2087 | else |
| 2096 | 2088 | m_raiden2cop->cop_status |= 2; |
| r32336 | r32337 | |
| 2500 | 2492 | |
| 2501 | 2493 | offs = (offset & 3) * 4; |
| 2502 | 2494 | |
| 2503 | | 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)); |
| 2495 | 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)); |
| 2504 | 2496 | //space.write_word(m_raiden2cop->cop_regs[4] + offs + 2,space.read_word(m_cop_sprite_dma_src+2 + offs)); |
| 2505 | 2497 | return; |
| 2506 | 2498 | } |