Previous 199869 Revisions Next

r17802 Tuesday 11th September, 2012 at 18:45:08 UTC by Angelo Salese
Added sort-DMA to raiden2.c
[src/mame/drivers]raiden2.c
[src/mame/includes]raiden2.h

trunk/src/mame/includes/raiden2.h
r17801r17802
125125   UINT8 cop_calculate_collsion_detection(running_machine &machine);
126126   void cop_take_hit_box_params(UINT8 offs);
127127
128   DECLARE_WRITE16_MEMBER(cop_sort_lookup_hi_w);
129   DECLARE_WRITE16_MEMBER(cop_sort_lookup_lo_w);
130   DECLARE_WRITE16_MEMBER(cop_sort_ram_addr_hi_w);
131   DECLARE_WRITE16_MEMBER(cop_sort_ram_addr_lo_w);
132   DECLARE_WRITE16_MEMBER(cop_sort_param_w);
133   DECLARE_WRITE16_MEMBER(cop_sort_dma_trig_w);
134
135   UINT32 cop_sort_ram_addr, cop_sort_lookup;
136   UINT16 cop_sort_param;
137
128138   DECLARE_DRIVER_INIT(raidendx);
129139   DECLARE_DRIVER_INIT(xsedae);
130140   DECLARE_DRIVER_INIT(zeroteam);
trunk/src/mame/drivers/raiden2.c
r17801r17802
12181218   return cop_hit_val_unk;
12191219}
12201220
1221WRITE16_MEMBER(raiden2_state::cop_sort_lookup_hi_w)
1222{
1223   cop_sort_lookup = (cop_sort_lookup&0x0000ffff)|(data<<16);
1224}
1225
1226WRITE16_MEMBER(raiden2_state::cop_sort_lookup_lo_w)
1227{
1228   cop_sort_lookup = (cop_sort_lookup&0xffff0000)|(data&0xffff);
1229}
1230
1231WRITE16_MEMBER(raiden2_state::cop_sort_ram_addr_hi_w)
1232{
1233   cop_sort_ram_addr = (cop_sort_ram_addr&0x0000ffff)|(data<<16);
1234}
1235
1236WRITE16_MEMBER(raiden2_state::cop_sort_ram_addr_lo_w)
1237{
1238   cop_sort_ram_addr = (cop_sort_ram_addr&0xffff0000)|(data&0xffff);
1239}
1240
1241WRITE16_MEMBER(raiden2_state::cop_sort_param_w)
1242{
1243   cop_sort_param = data;
1244}
1245
1246WRITE16_MEMBER(raiden2_state::cop_sort_dma_trig_w)
1247{
1248   UINT16 sort_size;
1249
1250   sort_size = data;
1251
1252   //printf("%04x %04x %04x %04x\n",cop_sort_ram_addr,cop_sort_lookup,cop_sort_param,data);
1253
1254   {
1255      int i,j;
1256      UINT8 xchg_flag;
1257      UINT32 addri,addrj;
1258      UINT16 vali,valj;
1259
1260      /* TODO: use a better algorithm than bubble sort! */
1261      for(i=2;i<sort_size;i+=2)
1262      {
1263         for(j=i-2;j<sort_size;j+=2)
1264         {
1265            addri = cop_sort_ram_addr+space.read_word(cop_sort_lookup+i);
1266            addrj = cop_sort_ram_addr+space.read_word(cop_sort_lookup+j);
1267
1268            vali = space.read_word(addri);
1269            valj = space.read_word(addrj);
1270
1271            //printf("%08x %08x %04x %04x\n",addri,addrj,vali,valj);
1272
1273            switch(cop_sort_param)
1274            {
1275               case 2:   xchg_flag = (vali > valj); break;
1276               case 1: xchg_flag = (vali < valj); break;
1277               default: xchg_flag = 0; printf("Warning: sort-DMA used with param %02x\n",cop_sort_param); break;
1278            }
1279
1280            if(xchg_flag)
1281            {
1282               UINT16 xch_val;
1283
1284               xch_val = space.read_word(cop_sort_lookup+i);
1285               space.write_word(cop_sort_lookup+i,space.read_word(cop_sort_lookup+j));
1286               space.write_word(cop_sort_lookup+j,xch_val);
1287            }
1288         }
1289      }
1290   }
1291}
1292
12211293/* MEMORY MAPS */
12221294static ADDRESS_MAP_START( raiden2_cop_mem, AS_PROGRAM, 16, raiden2_state )
12231295//  AM_RANGE(0x0041c, 0x0041d) AM_WRITENOP // angle compare (for 0x6200 COP macro)
r17801r17802
12331305   AM_RANGE(0x0043a, 0x0043b) AM_WRITE(cop_pgm_mask_w)
12341306   AM_RANGE(0x0043c, 0x0043d) AM_WRITE(cop_pgm_trigger_w)
12351307   AM_RANGE(0x00444, 0x00445) AM_WRITE(cop_scale_w)
1236   AM_RANGE(0x00450, 0x00459) AM_WRITENOP //sort-DMA params, Zero Team uses it
1308   AM_RANGE(0x00450, 0x00451) AM_WRITE(cop_sort_ram_addr_hi_w)
1309   AM_RANGE(0x00452, 0x00453) AM_WRITE(cop_sort_ram_addr_lo_w)
1310   AM_RANGE(0x00454, 0x00455) AM_WRITE(cop_sort_lookup_hi_w)
1311   AM_RANGE(0x00456, 0x00457) AM_WRITE(cop_sort_lookup_lo_w)
1312   AM_RANGE(0x00458, 0x00459) AM_WRITE(cop_sort_param_w)
12371313   AM_RANGE(0x0045a, 0x0045b) AM_WRITENOP //palette DMA brightness val, used by X Se Dae / Zero Team
12381314   AM_RANGE(0x0045c, 0x0045d) AM_WRITENOP //palette DMA brightness mode, used by X Se Dae / Zero Team (sets to 5)
12391315   AM_RANGE(0x00470, 0x00471) AM_READWRITE(cop_tile_bank_2_r,cop_tile_bank_2_w)
r17801r17802
12761352   AM_RANGE(0x006dc, 0x006dd) AM_READ(sprite_prot_dst2_r) AM_WRITE(sprite_prot_dst2_w)
12771353   AM_RANGE(0x006de, 0x006df) AM_WRITE(sprite_prot_src_w)
12781354   AM_RANGE(0x006fc, 0x006fd) AM_WRITE(cop_dma_trigger_w)
1279   AM_RANGE(0x006fe, 0x006ff) AM_WRITENOP // sort-DMA trigger
1355   AM_RANGE(0x006fe, 0x006ff) AM_WRITE(cop_sort_dma_trig_w) // sort-DMA trigger
12801356
12811357   AM_RANGE(0x00762, 0x00763) AM_READ(sprite_prot_dst1_r)
12821358ADDRESS_MAP_END

Previous 199869 Revisions Next


© 1997-2024 The MAME Team