trunk/src/mame/video/stvvdp2.c
| r20771 | r20772 | |
| 2438 | 2438 | ); |
| 2439 | 2439 | } |
| 2440 | 2440 | |
| 2441 | |
| 2442 | static void stv_vdp2_compute_color_offset( running_machine &machine,int *r, int *g, int *b, int cor ) |
| 2443 | { |
| 2444 | saturn_state *state = machine.driver_data<saturn_state>(); |
| 2445 | if ( cor == 0 ) |
| 2446 | { |
| 2447 | *r = (STV_VDP2_COAR & 0x100) ? (*r - (0x100 - (STV_VDP2_COAR & 0xff))) : ((STV_VDP2_COAR & 0xff) + *r); |
| 2448 | *g = (STV_VDP2_COAG & 0x100) ? (*g - (0x100 - (STV_VDP2_COAG & 0xff))) : ((STV_VDP2_COAG & 0xff) + *g); |
| 2449 | *b = (STV_VDP2_COAB & 0x100) ? (*b - (0x100 - (STV_VDP2_COAB & 0xff))) : ((STV_VDP2_COAB & 0xff) + *b); |
| 2450 | } |
| 2451 | else |
| 2452 | { |
| 2453 | *r = (STV_VDP2_COBR & 0x100) ? (*r - (0xff - (STV_VDP2_COBR & 0xff))) : ((STV_VDP2_COBR & 0xff) + *r); |
| 2454 | *g = (STV_VDP2_COBG & 0x100) ? (*g - (0xff - (STV_VDP2_COBG & 0xff))) : ((STV_VDP2_COBG & 0xff) + *g); |
| 2455 | *b = (STV_VDP2_COBB & 0x100) ? (*b - (0xff - (STV_VDP2_COBB & 0xff))) : ((STV_VDP2_COBB & 0xff) + *b); |
| 2456 | } |
| 2457 | if(*r < 0) { *r = 0; } |
| 2458 | if(*r > 0xff) { *r = 0xff; } |
| 2459 | if(*g < 0) { *g = 0; } |
| 2460 | if(*g > 0xff) { *g = 0xff; } |
| 2461 | if(*b < 0) { *b = 0; } |
| 2462 | if(*b > 0xff) { *b = 0xff; } |
| 2463 | } |
| 2464 | |
| 2465 | static void stv_vdp2_compute_color_offset_UINT32(running_machine &machine,UINT32 *rgb, int cor) |
| 2466 | { |
| 2467 | saturn_state *state = machine.driver_data<saturn_state>(); |
| 2468 | int _r = RGB_RED(*rgb); |
| 2469 | int _g = RGB_GREEN(*rgb); |
| 2470 | int _b = RGB_BLUE(*rgb); |
| 2471 | if ( cor == 0 ) |
| 2472 | { |
| 2473 | _r = (STV_VDP2_COAR & 0x100) ? (_r - (0x100 - (STV_VDP2_COAR & 0xff))) : ((STV_VDP2_COAR & 0xff) + _r); |
| 2474 | _g = (STV_VDP2_COAG & 0x100) ? (_g - (0x100 - (STV_VDP2_COAG & 0xff))) : ((STV_VDP2_COAG & 0xff) + _g); |
| 2475 | _b = (STV_VDP2_COAB & 0x100) ? (_b - (0x100 - (STV_VDP2_COAB & 0xff))) : ((STV_VDP2_COAB & 0xff) + _b); |
| 2476 | } |
| 2477 | else |
| 2478 | { |
| 2479 | _r = (STV_VDP2_COBR & 0x100) ? (_r - (0xff - (STV_VDP2_COBR & 0xff))) : ((STV_VDP2_COBR & 0xff) + _r); |
| 2480 | _g = (STV_VDP2_COBG & 0x100) ? (_g - (0xff - (STV_VDP2_COBG & 0xff))) : ((STV_VDP2_COBG & 0xff) + _g); |
| 2481 | _b = (STV_VDP2_COBB & 0x100) ? (_b - (0xff - (STV_VDP2_COBB & 0xff))) : ((STV_VDP2_COBB & 0xff) + _b); |
| 2482 | } |
| 2483 | if(_r < 0) { _r = 0; } |
| 2484 | if(_r > 0xff) { _r = 0xff; } |
| 2485 | if(_g < 0) { _g = 0; } |
| 2486 | if(_g > 0xff) { _g = 0xff; } |
| 2487 | if(_b < 0) { _b = 0; } |
| 2488 | if(_b > 0xff) { _b = 0xff; } |
| 2489 | |
| 2490 | *rgb = MAKE_RGB(_r, _g, _b); |
| 2491 | } |
| 2492 | |
| 2441 | 2493 | static void stv_vdp2_drawgfxzoom_rgb555( |
| 2442 | 2494 | bitmap_rgb32 &dest_bmp,const rectangle &clip,running_machine &machine, |
| 2443 | 2495 | UINT32 code,UINT32 color,int flipx,int flipy,int sx,int sy, |
| r20771 | r20772 | |
| 2565 | 2617 | b = pal5bit((data & 0x7c00) >> 10); |
| 2566 | 2618 | g = pal5bit((data & 0x03e0) >> 5); |
| 2567 | 2619 | r = pal5bit( data & 0x001f); |
| 2620 | if(stv2_current_tilemap.fade_control & 1) |
| 2621 | stv_vdp2_compute_color_offset(machine,&r,&g,&b,stv2_current_tilemap.fade_control & 2); |
| 2622 | |
| 2568 | 2623 | dest[x] = MAKE_RGB(r, g, b); |
| 2569 | 2624 | x_index += dx; |
| 2570 | 2625 | } |
| r20771 | r20772 | |
| 2589 | 2644 | b = pal5bit((data & 0x7c00) >> 10); |
| 2590 | 2645 | g = pal5bit((data & 0x03e0) >> 5); |
| 2591 | 2646 | r = pal5bit( data & 0x001f); |
| 2647 | if(stv2_current_tilemap.fade_control & 1) |
| 2648 | stv_vdp2_compute_color_offset(machine,&r,&g,&b,stv2_current_tilemap.fade_control & 2); |
| 2649 | |
| 2592 | 2650 | if( data ) dest[x] = MAKE_RGB(r, g, b); |
| 2593 | 2651 | x_index += dx; |
| 2594 | 2652 | } |
| r20771 | r20772 | |
| 2613 | 2671 | b = pal5bit((data & 0x7c00) >> 10); |
| 2614 | 2672 | g = pal5bit((data & 0x03e0) >> 5); |
| 2615 | 2673 | r = pal5bit( data & 0x001f); |
| 2674 | if(stv2_current_tilemap.fade_control & 1) |
| 2675 | stv_vdp2_compute_color_offset(machine,&r,&g,&b,stv2_current_tilemap.fade_control & 2); |
| 2676 | |
| 2616 | 2677 | if( data ) dest[x] = alpha_blend_r32(dest[x], MAKE_RGB(r, g, b), alpha); |
| 2617 | 2678 | x_index += dx; |
| 2618 | 2679 | } |
| r20771 | r20772 | |
| 2637 | 2698 | b = pal5bit((data & 0x7c00) >> 10); |
| 2638 | 2699 | g = pal5bit((data & 0x03e0) >> 5); |
| 2639 | 2700 | r = pal5bit( data & 0x001f); |
| 2701 | if(stv2_current_tilemap.fade_control & 1) |
| 2702 | stv_vdp2_compute_color_offset(machine,&r,&g,&b,stv2_current_tilemap.fade_control & 2); |
| 2703 | |
| 2640 | 2704 | if( data ) dest[x] = stv_add_blend(dest[x], MAKE_RGB(r, g, b)); |
| 2641 | 2705 | x_index += dx; |
| 2642 | 2706 | } |
| r20771 | r20772 | |
| 2842 | 2906 | |
| 2843 | 2907 | } |
| 2844 | 2908 | |
| 2845 | | static void stv_vdp2_compute_color_offset( running_machine &machine,int *r, int *g, int *b, int cor ) |
| 2846 | | { |
| 2847 | | saturn_state *state = machine.driver_data<saturn_state>(); |
| 2848 | | if ( cor == 0 ) |
| 2849 | | { |
| 2850 | | *r = (STV_VDP2_COAR & 0x100) ? (*r - (0x100 - (STV_VDP2_COAR & 0xff))) : ((STV_VDP2_COAR & 0xff) + *r); |
| 2851 | | *g = (STV_VDP2_COAG & 0x100) ? (*g - (0x100 - (STV_VDP2_COAG & 0xff))) : ((STV_VDP2_COAG & 0xff) + *g); |
| 2852 | | *b = (STV_VDP2_COAB & 0x100) ? (*b - (0x100 - (STV_VDP2_COAB & 0xff))) : ((STV_VDP2_COAB & 0xff) + *b); |
| 2853 | | } |
| 2854 | | else |
| 2855 | | { |
| 2856 | | *r = (STV_VDP2_COBR & 0x100) ? (*r - (0xff - (STV_VDP2_COBR & 0xff))) : ((STV_VDP2_COBR & 0xff) + *r); |
| 2857 | | *g = (STV_VDP2_COBG & 0x100) ? (*g - (0xff - (STV_VDP2_COBG & 0xff))) : ((STV_VDP2_COBG & 0xff) + *g); |
| 2858 | | *b = (STV_VDP2_COBB & 0x100) ? (*b - (0xff - (STV_VDP2_COBB & 0xff))) : ((STV_VDP2_COBB & 0xff) + *b); |
| 2859 | | } |
| 2860 | | if(*r < 0) { *r = 0; } |
| 2861 | | if(*r > 0xff) { *r = 0xff; } |
| 2862 | | if(*g < 0) { *g = 0; } |
| 2863 | | if(*g > 0xff) { *g = 0xff; } |
| 2864 | | if(*b < 0) { *b = 0; } |
| 2865 | | if(*b > 0xff) { *b = 0xff; } |
| 2866 | | } |
| 2867 | 2909 | |
| 2868 | | static void stv_vdp2_compute_color_offset_UINT32(running_machine &machine,UINT32 *rgb, int cor) |
| 2869 | | { |
| 2870 | | saturn_state *state = machine.driver_data<saturn_state>(); |
| 2871 | | int _r = RGB_RED(*rgb); |
| 2872 | | int _g = RGB_GREEN(*rgb); |
| 2873 | | int _b = RGB_BLUE(*rgb); |
| 2874 | | if ( cor == 0 ) |
| 2875 | | { |
| 2876 | | _r = (STV_VDP2_COAR & 0x100) ? (_r - (0x100 - (STV_VDP2_COAR & 0xff))) : ((STV_VDP2_COAR & 0xff) + _r); |
| 2877 | | _g = (STV_VDP2_COAG & 0x100) ? (_g - (0x100 - (STV_VDP2_COAG & 0xff))) : ((STV_VDP2_COAG & 0xff) + _g); |
| 2878 | | _b = (STV_VDP2_COAB & 0x100) ? (_b - (0x100 - (STV_VDP2_COAB & 0xff))) : ((STV_VDP2_COAB & 0xff) + _b); |
| 2879 | | } |
| 2880 | | else |
| 2881 | | { |
| 2882 | | _r = (STV_VDP2_COBR & 0x100) ? (_r - (0xff - (STV_VDP2_COBR & 0xff))) : ((STV_VDP2_COBR & 0xff) + _r); |
| 2883 | | _g = (STV_VDP2_COBG & 0x100) ? (_g - (0xff - (STV_VDP2_COBG & 0xff))) : ((STV_VDP2_COBG & 0xff) + _g); |
| 2884 | | _b = (STV_VDP2_COBB & 0x100) ? (_b - (0xff - (STV_VDP2_COBB & 0xff))) : ((STV_VDP2_COBB & 0xff) + _b); |
| 2885 | | } |
| 2886 | | if(_r < 0) { _r = 0; } |
| 2887 | | if(_r > 0xff) { _r = 0xff; } |
| 2888 | | if(_g < 0) { _g = 0; } |
| 2889 | | if(_g > 0xff) { _g = 0xff; } |
| 2890 | | if(_b < 0) { _b = 0; } |
| 2891 | | if(_b > 0xff) { _b = 0xff; } |
| 2892 | | |
| 2893 | | *rgb = MAKE_RGB(_r, _g, _b); |
| 2894 | | } |
| 2895 | | |
| 2896 | 2910 | static void stv_vdp2_drawgfx_rgb555( bitmap_rgb32 &dest_bmp, const rectangle &clip, running_machine &machine, UINT32 code, int flipx, int flipy, |
| 2897 | 2911 | int sx, int sy, int transparency, int alpha) |
| 2898 | 2912 | { |