diff --git a/src/mame/drivers/coolridr.c b/src/mame/drivers/coolridr.c index b18e160241c..4972e4f5b7a 100644 --- a/src/mame/drivers/coolridr.c +++ b/src/mame/drivers/coolridr.c @@ -480,6 +480,7 @@ public: void flush_pal_data( UINT16 offset ); int m_gfx_index; int m_color_bank; + UINT32 m_rgb_ctrl[2]; osd_work_queue * m_work_queue[2]; // work queue, one per screen static void *draw_tile_row_threaded(void *param, int threadid); @@ -1782,13 +1783,44 @@ WRITE32_MEMBER(coolridr_state::sysh1_unk_blit_w) } } - void coolridr_state::flush_pal_data( UINT16 offset ) { int r,g,b; + int screen_type = (offset & 0x400) >> 10; + int rgb_setting = m_rgb_ctrl[screen_type] & ~0x1f; + int rgb_gradient = m_rgb_ctrl[screen_type] & 0x1f; + r = ((m_h1_pal[offset] & 0x7c00) >> 10); g = ((m_h1_pal[offset] & 0x03e0) >> 5); b = ((m_h1_pal[offset] & 0x001f) >> 0); + if(rgb_setting == 0x1240) /* fade-in / outs */ + { + r -= rgb_gradient; + g -= rgb_gradient; + b -= rgb_gradient; + if(r < 0) { r = 0; } + if(g < 0) { g = 0; } + if(b < 0) { b = 0; } + } + else if(rgb_setting == 0x920) /* at bike select, addition */ + { + r += rgb_gradient; + g += rgb_gradient; + b += rgb_gradient; + if(r > 0x1f) { r = 0x1f; } + if(g > 0x1f) { g = 0x1f; } + if(b > 0x1f) { b = 0x1f; } + } + else if(rgb_setting == 0x800) /* when you get hit TODO: algo might be different. */ + { + g &= (0x1f - rgb_gradient); + b &= (0x1f - rgb_gradient); + } + else if(rgb_gradient) + { + popmessage("%08x %08x",rgb_setting,rgb_gradient); + } + palette_set_color_rgb(machine(),offset,pal5bit(r),pal5bit(g),pal5bit(b)); } @@ -1837,7 +1869,6 @@ void coolridr_state::sysh1_dma_transfer( address_space &space, UINT16 dma_index printf("unk values to %02x dst %08x\n",cmd,dst); dst &= 0x000fffff; - /* TODO: might as well improve the dirty handling */ for(int i=0;i> 2] = m_framebuffer_vram[(0+dma_index)/4] & 0xffffff; + for(int i=((cmd & 4) * 0x100);i<((cmd & 4) * 0x100)+0x400;i++) + flush_pal_data( i ); + dma_index+=4; + break; default: printf("%02x %08x\n",cmd,m_framebuffer_vram[(0+dma_index)/4]); dma_index+=4;