Previous 199869 Revisions Next

r32337 Wednesday 24th September, 2014 at 00:46:25 UTC by David Haywood
more (nw)
[src/mame/drivers]legionna.c
[src/mame/machine]raiden2cop.c raiden2cop.h seicop.c seicop.h

trunk/src/mame/drivers/legionna.c
r32336r32337
9090}
9191
9292static 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
9397//   AM_RANGE(0x10041c, 0x10041d) AM_WRITE(cop_angle_target_w) // angle target (for 0x6200 COP macro)
9498//   AM_RANGE(0x10041e, 0x10041f) AM_WRITE(cop_angle_step_w)   // angle step   (for 0x6200 COP macro)
9599   AM_RANGE(0x100420, 0x100421) AM_DEVWRITE("raiden2cop", raiden2cop_device, cop_itoa_low_w)
trunk/src/mame/machine/raiden2cop.c
r32336r32337
4343
4444   m_cop_rng_max_value(0),
4545
46   m_cop_sprite_dma_param(0),
47   m_cop_sprite_dma_size(0),
48
49
4650   m_videoramout_cb(*this),
4751   m_palette(*this, ":palette")
4852{
r32336r32337
129133
130134   save_item(NAME(m_cop_rng_max_value));
131135
136   save_item(NAME(m_cop_sprite_dma_param));
132137
138   save_item(NAME(m_cop_sprite_dma_size));
139
140
133141   m_videoramout_cb.resolve_safe();
134142
135143   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)
r32336r32337
10801088READ16_MEMBER(raiden2cop_device::cop_prng_maxvalue_r)
10811089{
10821090   return m_cop_rng_max_value;
1083}
No newline at end of file
1091}
1092
1093// misc used by 68k games (mostly grainbow?)
1094
1095WRITE16_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
1100WRITE16_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
1105WRITE16_MEMBER(raiden2cop_device::cop_sprite_dma_size_w)
1106{
1107   m_cop_sprite_dma_size = data;
1108}
trunk/src/mame/machine/raiden2cop.h
r32336r32337
108108   DECLARE_WRITE16_MEMBER( cop_angle_mod_val_w );
109109
110110   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);
117111
112
118113   UINT32 cop_regs[8];
119114   UINT16 cop_status, cop_scale, cop_angle, cop_dist;
120115   
r32336r32337
141136   void cop_collision_read_pos(address_space &space, int slot, UINT32 spradr, bool allow_swap);
142137   void cop_collision_update_hitbox(address_space &space, int slot, UINT32 hitadr);
143138
139   // Sort DMA (zeroteam, cupsoc)
140
144141   UINT32 cop_sort_ram_addr, cop_sort_lookup;
145142   UINT16 cop_sort_param;
146143
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)
148152   UINT16 m_cop_rng_max_value;
149153   DECLARE_READ16_MEMBER(cop_prng_r);
150154   DECLARE_WRITE16_MEMBER(cop_prng_maxvalue_w);
151155   DECLARE_READ16_MEMBER(cop_prng_maxvalue_r);
152156
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;
153163
154164protected:
155165   // device-level overrides
trunk/src/mame/machine/seicop.c
r32336r32337
16141614   m_cop_sprite_dma_src(0),
16151615   m_cop_sprite_dma_abs_x(0),
16161616   m_cop_sprite_dma_abs_y(0),
1617   m_cop_sprite_dma_size(0),
1618   m_cop_sprite_dma_param(0),
16191617   m_raiden2cop(*this, ":raiden2cop")
16201618{
16211619
r32336r32337
16561654   save_item(NAME(m_cop_sprite_dma_src));
16571655   save_item(NAME(m_cop_sprite_dma_abs_x));
16581656   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));
16611657}
16621658
16631659//-------------------------------------------------
r32336r32337
20702066         seibu_cop_log("%06x: COPX unhandled write data %04x at offset %04x\n", space.device().safe_pc(), data, offset*2);
20712067         break;
20722068
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;
20792069
2080      case (0x00c/2): { m_cop_sprite_dma_size = m_cop_mcu_ram[offset]; break; }
2070
2071   
2072
20812073      case (0x010/2):
20822074      {
20832075         if(data)
r32336r32337
20882080            m_raiden2cop->cop_regs[4]+=8;
20892081            m_cop_sprite_dma_src+=6;
20902082
2091            m_cop_sprite_dma_size--;
2083            m_raiden2cop->m_cop_sprite_dma_size--;
20922084
2093            if(m_cop_sprite_dma_size > 0)
2085            if(m_raiden2cop->m_cop_sprite_dma_size > 0)
20942086               m_raiden2cop->cop_status &= ~2;
20952087            else
20962088               m_raiden2cop->cop_status |= 2;
r32336r32337
25002492
25012493            offs = (offset & 3) * 4;
25022494
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));
25042496            //space.write_word(m_raiden2cop->cop_regs[4] + offs + 2,space.read_word(m_cop_sprite_dma_src+2 + offs));
25052497            return;
25062498         }
trunk/src/mame/machine/seicop.h
r32336r32337
5050   UINT16 m_cop_rom_addr_lo,m_cop_rom_addr_hi,m_cop_rom_addr_unk;
5151
5252   UINT32 m_cop_sprite_dma_src;
53   int m_cop_sprite_dma_abs_x,m_cop_sprite_dma_abs_y,m_cop_sprite_dma_size;
54   UINT32 m_cop_sprite_dma_param;
53   int m_cop_sprite_dma_abs_x,m_cop_sprite_dma_abs_y;
5554
5655
5756   void cop_take_hit_box_params(UINT8 offs);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team