trunk/src/mame/includes/raiden2.h
r18192 | r18193 | |
21 | 21 | DECLARE_WRITE16_MEMBER( cop_dma_dst_w ); |
22 | 22 | DECLARE_READ16_MEMBER( cop_dma_mode_r ); |
23 | 23 | DECLARE_WRITE16_MEMBER( cop_dma_mode_w ); |
| 24 | DECLARE_WRITE16_MEMBER( cop_pal_brightness_val_w ); |
24 | 25 | DECLARE_READ16_MEMBER ( cop_reg_high_r ); |
25 | 26 | DECLARE_WRITE16_MEMBER( cop_reg_high_w ); |
26 | 27 | DECLARE_READ16_MEMBER ( cop_reg_low_r ); |
r18192 | r18193 | |
89 | 90 | UINT8 cop_itoa_digits[10]; |
90 | 91 | UINT16 cop_dma_mode, cop_dma_src[0x200], cop_dma_dst[0x200], cop_dma_size[0x200], cop_dma_v1, cop_dma_v2, cop_dma_adr_rel; |
91 | 92 | UINT16 sprites_cur_start; |
| 93 | UINT16 pal_brightness_val; |
92 | 94 | |
93 | 95 | UINT16 cop_func_trigger[0x100/8]; /* function trigger */ |
94 | 96 | UINT16 cop_func_value[0x100/8]; /* function value (?) */ |
trunk/src/mame/drivers/raiden2.c
r18192 | r18193 | |
294 | 294 | COMBINE_DATA(&cop_dma_size[cop_dma_mode]); |
295 | 295 | } |
296 | 296 | |
| 297 | WRITE16_MEMBER(raiden2_state::cop_pal_brightness_val_w) |
| 298 | { |
| 299 | COMBINE_DATA(&pal_brightness_val); |
| 300 | } |
| 301 | |
| 302 | /* RE from Seibu Cup Soccer bootleg */ |
| 303 | static const UINT8 fade_table(int v) |
| 304 | { |
| 305 | int low = v & 0x001f; |
| 306 | int high = v & 0x03e0; |
| 307 | |
| 308 | return (low * (high | (high >> 5)) + 0x210) >> 10; |
| 309 | } |
| 310 | |
297 | 311 | WRITE16_MEMBER(raiden2_state::cop_dma_trigger_w) |
298 | 312 | { |
299 | 313 | // logerror("COP DMA mode=%x adr=%x size=%x vals=%x %x %x\n", cop_dma_mode, cop_dma_src[cop_dma_mode], cop_dma_size[cop_dma_mode], cop_dma_v1[cop_dma_mode], cop_dma_v2[cop_dma_mode], cop_dma_dst[cop_dma_mode]); |
r18192 | r18193 | |
321 | 335 | UINT32 src,dst,size; |
322 | 336 | int i; |
323 | 337 | |
324 | | src = (cop_dma_src[cop_dma_mode] << 6) + (cop_dma_adr_rel * 0x400); |
| 338 | src = (cop_dma_src[cop_dma_mode] << 6); |
325 | 339 | dst = (cop_dma_dst[cop_dma_mode] << 6); |
326 | 340 | size = ((cop_dma_size[cop_dma_mode] << 5) - (cop_dma_dst[cop_dma_mode] << 6) + 0x20)/2; |
327 | 341 | |
328 | 342 | //printf("%08x %08x %08x\n",src,dst,size); |
329 | | /* TODO: palette brightness */ |
330 | 343 | |
331 | 344 | for(i = 0;i < size;i++) |
332 | 345 | { |
333 | | space.write_word(dst, space.read_word(src)); |
| 346 | UINT16 pal_val; |
| 347 | int r,g,b; |
| 348 | int rt,gt,bt; |
| 349 | |
| 350 | bt = (space.read_word(src + (cop_dma_adr_rel * 0x400)) & 0x7c00) >> 5; |
| 351 | bt = fade_table(bt|(pal_brightness_val ^ 0)); |
| 352 | b = ((space.read_word(src)) & 0x7c00) >> 5; |
| 353 | b = fade_table(b|(pal_brightness_val ^ 0x1f)); |
| 354 | pal_val = ((b + bt) & 0x1f) << 10; |
| 355 | gt = (space.read_word(src + (cop_dma_adr_rel * 0x400)) & 0x03e0); |
| 356 | gt = fade_table(gt|(pal_brightness_val ^ 0)); |
| 357 | g = ((space.read_word(src)) & 0x03e0); |
| 358 | g = fade_table(g|(pal_brightness_val ^ 0x1f)); |
| 359 | pal_val |= ((g + gt) & 0x1f) << 5; |
| 360 | rt = (space.read_word(src + (cop_dma_adr_rel * 0x400)) & 0x001f) << 5; |
| 361 | rt = fade_table(rt|(pal_brightness_val ^ 0)); |
| 362 | r = ((space.read_word(src)) & 0x001f) << 5; |
| 363 | r = fade_table(r|(pal_brightness_val ^ 0x1f)); |
| 364 | pal_val |= ((r + rt) & 0x1f); |
| 365 | |
| 366 | space.write_word(dst, pal_val); |
334 | 367 | src+=2; |
335 | 368 | dst+=2; |
336 | 369 | } |
r18192 | r18193 | |
1370 | 1403 | AM_RANGE(0x00454, 0x00455) AM_WRITE(cop_sort_lookup_hi_w) |
1371 | 1404 | AM_RANGE(0x00456, 0x00457) AM_WRITE(cop_sort_lookup_lo_w) |
1372 | 1405 | AM_RANGE(0x00458, 0x00459) AM_WRITE(cop_sort_param_w) |
1373 | | AM_RANGE(0x0045a, 0x0045b) AM_WRITENOP //palette DMA brightness val, used by X Se Dae / Zero Team |
| 1406 | AM_RANGE(0x0045a, 0x0045b) AM_WRITE(cop_pal_brightness_val_w) //palette DMA brightness val, used by X Se Dae / Zero Team |
1374 | 1407 | AM_RANGE(0x0045c, 0x0045d) AM_WRITENOP //palette DMA brightness mode, used by X Se Dae / Zero Team (sets to 5) |
1375 | 1408 | AM_RANGE(0x00470, 0x00471) AM_READWRITE(cop_tile_bank_2_r,cop_tile_bank_2_w) |
1376 | 1409 | |