mirror of
https://github.com/holub/mame
synced 2025-07-05 18:08:04 +03:00
Preliminary RGB ctrl
This commit is contained in:
parent
bf0797fa0e
commit
bf64eeaaa8
@ -480,6 +480,7 @@ public:
|
|||||||
void flush_pal_data( UINT16 offset );
|
void flush_pal_data( UINT16 offset );
|
||||||
int m_gfx_index;
|
int m_gfx_index;
|
||||||
int m_color_bank;
|
int m_color_bank;
|
||||||
|
UINT32 m_rgb_ctrl[2];
|
||||||
|
|
||||||
osd_work_queue * m_work_queue[2]; // work queue, one per screen
|
osd_work_queue * m_work_queue[2]; // work queue, one per screen
|
||||||
static void *draw_tile_row_threaded(void *param, int threadid);
|
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 )
|
void coolridr_state::flush_pal_data( UINT16 offset )
|
||||||
{
|
{
|
||||||
int r,g,b;
|
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);
|
r = ((m_h1_pal[offset] & 0x7c00) >> 10);
|
||||||
g = ((m_h1_pal[offset] & 0x03e0) >> 5);
|
g = ((m_h1_pal[offset] & 0x03e0) >> 5);
|
||||||
b = ((m_h1_pal[offset] & 0x001f) >> 0);
|
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));
|
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);
|
printf("unk values to %02x dst %08x\n",cmd,dst);
|
||||||
dst &= 0x000fffff;
|
dst &= 0x000fffff;
|
||||||
|
|
||||||
/* TODO: might as well improve the dirty handling */
|
|
||||||
for(int i=0;i<size;i++)
|
for(int i=0;i<size;i++)
|
||||||
{
|
{
|
||||||
m_h1_pcg[dst] = space.read_byte(src);
|
m_h1_pcg[dst] = space.read_byte(src);
|
||||||
@ -1876,13 +1907,18 @@ void coolridr_state::sysh1_dma_transfer( address_space &space, UINT16 dma_index
|
|||||||
case 0x24: /* unknown table */
|
case 0x24: /* unknown table */
|
||||||
case 0x30: /* screen 1 - 0x80 at boot, then 0x808080 */
|
case 0x30: /* screen 1 - 0x80 at boot, then 0x808080 */
|
||||||
case 0x34: /* screen 2 / */
|
case 0x34: /* screen 2 / */
|
||||||
case 0x40: /* screen 1 - almost certainly RGB brightness (at least bits 4 - 0) */
|
|
||||||
case 0x44: /* screen 2 / */
|
|
||||||
case 0x50: /* screen 1 - unknown */
|
case 0x50: /* screen 1 - unknown */
|
||||||
case 0x54: /* screen 2 / */
|
case 0x54: /* screen 2 / */
|
||||||
//printf("%02x %08x\n",cmd,m_framebuffer_vram[(0+dma_index)/4]);
|
//printf("%02x %08x\n",cmd,m_framebuffer_vram[(0+dma_index)/4]);
|
||||||
dma_index+=4;
|
dma_index+=4;
|
||||||
break;
|
break;
|
||||||
|
case 0x40: /* screen 1 - almost certainly RGB brightness (at least bits 4 - 0) */
|
||||||
|
case 0x44: /* screen 2 / */
|
||||||
|
m_rgb_ctrl[(cmd & 4) >> 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:
|
default:
|
||||||
printf("%02x %08x\n",cmd,m_framebuffer_vram[(0+dma_index)/4]);
|
printf("%02x %08x\n",cmd,m_framebuffer_vram[(0+dma_index)/4]);
|
||||||
dma_index+=4;
|
dma_index+=4;
|
||||||
|
Loading…
Reference in New Issue
Block a user