trunk/src/mame/drivers/raiden2.c
| r17801 | r17802 | |
| 1218 | 1218 | return cop_hit_val_unk; |
| 1219 | 1219 | } |
| 1220 | 1220 | |
| 1221 | WRITE16_MEMBER(raiden2_state::cop_sort_lookup_hi_w) |
| 1222 | { |
| 1223 | cop_sort_lookup = (cop_sort_lookup&0x0000ffff)|(data<<16); |
| 1224 | } |
| 1225 | |
| 1226 | WRITE16_MEMBER(raiden2_state::cop_sort_lookup_lo_w) |
| 1227 | { |
| 1228 | cop_sort_lookup = (cop_sort_lookup&0xffff0000)|(data&0xffff); |
| 1229 | } |
| 1230 | |
| 1231 | WRITE16_MEMBER(raiden2_state::cop_sort_ram_addr_hi_w) |
| 1232 | { |
| 1233 | cop_sort_ram_addr = (cop_sort_ram_addr&0x0000ffff)|(data<<16); |
| 1234 | } |
| 1235 | |
| 1236 | WRITE16_MEMBER(raiden2_state::cop_sort_ram_addr_lo_w) |
| 1237 | { |
| 1238 | cop_sort_ram_addr = (cop_sort_ram_addr&0xffff0000)|(data&0xffff); |
| 1239 | } |
| 1240 | |
| 1241 | WRITE16_MEMBER(raiden2_state::cop_sort_param_w) |
| 1242 | { |
| 1243 | cop_sort_param = data; |
| 1244 | } |
| 1245 | |
| 1246 | WRITE16_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 | |
| 1221 | 1293 | /* MEMORY MAPS */ |
| 1222 | 1294 | static ADDRESS_MAP_START( raiden2_cop_mem, AS_PROGRAM, 16, raiden2_state ) |
| 1223 | 1295 | // AM_RANGE(0x0041c, 0x0041d) AM_WRITENOP // angle compare (for 0x6200 COP macro) |
| r17801 | r17802 | |
| 1233 | 1305 | AM_RANGE(0x0043a, 0x0043b) AM_WRITE(cop_pgm_mask_w) |
| 1234 | 1306 | AM_RANGE(0x0043c, 0x0043d) AM_WRITE(cop_pgm_trigger_w) |
| 1235 | 1307 | 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) |
| 1237 | 1313 | AM_RANGE(0x0045a, 0x0045b) AM_WRITENOP //palette DMA brightness val, used by X Se Dae / Zero Team |
| 1238 | 1314 | AM_RANGE(0x0045c, 0x0045d) AM_WRITENOP //palette DMA brightness mode, used by X Se Dae / Zero Team (sets to 5) |
| 1239 | 1315 | AM_RANGE(0x00470, 0x00471) AM_READWRITE(cop_tile_bank_2_r,cop_tile_bank_2_w) |
| r17801 | r17802 | |
| 1276 | 1352 | AM_RANGE(0x006dc, 0x006dd) AM_READ(sprite_prot_dst2_r) AM_WRITE(sprite_prot_dst2_w) |
| 1277 | 1353 | AM_RANGE(0x006de, 0x006df) AM_WRITE(sprite_prot_src_w) |
| 1278 | 1354 | 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 |
| 1280 | 1356 | |
| 1281 | 1357 | AM_RANGE(0x00762, 0x00763) AM_READ(sprite_prot_dst1_r) |
| 1282 | 1358 | ADDRESS_MAP_END |