Previous 199869 Revisions Next

r21424 Sunday 24th February, 2013 at 19:30:21 UTC by Angelo Salese
Applied RGB brightness on bike select, and fixed a silly bug on it
[src/mame/drivers]coolridr.c

trunk/src/mame/drivers/coolridr.c
r21423r21424
478478   UINT8 *m_h1_pcg;
479479   UINT16 *m_h1_pal;
480480   void flush_pal_data( UINT16 offset );
481   void apply_rgb_control(int screen_num,int *r, int *g, int *b);
481482   int m_gfx_index;
482483   int m_color_bank;
483   UINT32 m_rgb_ctrl[2];
484   struct {
485      UINT32 setting;
486      UINT8 gradient;
487   }m_rgb_ctrl[2];
484488   UINT32 m_pen_fill[2];
485489
486490   osd_work_queue *    m_work_queue[2]; // work queue, one per screen
r21423r21424
554558
555559UINT32 coolridr_state::screen_update_coolridr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int which)
556560{
557   /* planes seems to basically be at 0x8000 and 0x28000... */
561   int bg_r,bg_g,bg_b;
558562
559563   if(m_pen_fill[which])
560564   {
561      int bg_r,bg_g,bg_b;
562565      /* logic here is a bit of a guess. */
563566      bg_r = (((m_pen_fill[which] >> 16) & 0x7f) << 1) | (((m_pen_fill[which] >> 16) & 0x80) >> 7);
564567      bg_g = (((m_pen_fill[which] >> 8) & 0x7f) << 1) | (((m_pen_fill[which] >> 8) & 0x80) >> 7);
r21423r21424
583586      m_color_bank = which * 2;
584587      /* TODO: the whole transpen logic might be incorrect */
585588      transpen_setting = (VREG(0x3c) & 0x80000000) >> 31;
589      bg_r = (VREG(0x3c) >> 10) & 0x1f;
590      bg_g = (VREG(0x3c) >> 5) & 0x1f;
591      bg_b = (VREG(0x3c) >> 0) & 0x1f;
592      apply_rgb_control(which,&bg_r,&bg_g,&bg_b);
586593
587      bitmap.fill(MAKE_ARGB(0xff,(VREG(0x3c) >> 16) & 0xff,(VREG(0x3c) >> 8) & 0xff,VREG(0x3c) & 0xff),cliprect);
594      bitmap.fill(MAKE_ARGB(0xff,pal5bit(bg_r),pal5bit(bg_g),pal5bit(bg_b)),cliprect);
588595
589596       for (int y=0;y<64;y++)
590597       {
r21423r21424
18151822   }
18161823}
18171824
1818void coolridr_state::flush_pal_data( UINT16 offset )
1825void coolridr_state::apply_rgb_control(int screen_num,int *r, int *g, int *b)
18191826{
1820   int r,g,b;
1821   int screen_type = (offset & 0x400) >> 10;
1822   int rgb_setting = m_rgb_ctrl[screen_type] & ~0x1f;
1823   int rgb_gradient = m_rgb_ctrl[screen_type] & 0x1f;
1827   if(!m_rgb_ctrl[screen_num].gradient)
1828      return;
18241829
1825   r = ((m_h1_pal[offset] & 0x7c00) >> 10);
1826   g = ((m_h1_pal[offset] & 0x03e0) >> 5);
1827   b = ((m_h1_pal[offset] & 0x001f) >> 0);
1828   if(rgb_setting == 0x1240) /* fade-in / outs */
1830   if(m_rgb_ctrl[screen_num].setting == 0x1240) /* fade-in / outs */
18291831   {
1830      r -= rgb_gradient;
1831      g -= rgb_gradient;
1832      b -= rgb_gradient;
1833      if(r < 0) { r = 0; }
1834      if(g < 0) { g = 0; }
1835      if(b < 0) { b = 0; }
1832      *r -= m_rgb_ctrl[screen_num].gradient;
1833      *g -= m_rgb_ctrl[screen_num].gradient;
1834      *b -= m_rgb_ctrl[screen_num].gradient;
1835      if(*r < 0) { *r = 0; }
1836      if(*g < 0) { *g = 0; }
1837      if(*b < 0) { *b = 0; }
18361838   }
1837   else if(rgb_setting == 0x920) /* at bike select / outside tunnels, addition */
1839   else if(m_rgb_ctrl[screen_num].setting == 0x920) /* at bike select / outside tunnels, addition */
18381840   {
1839      r += rgb_gradient;
1840      g += rgb_gradient;
1841      b += rgb_gradient;
1842      if(r > 0x1f) { r = 0x1f; }
1843      if(g > 0x1f) { g = 0x1f; }
1844      if(b > 0x1f) { b = 0x1f; }
1841      *r += m_rgb_ctrl[screen_num].gradient;
1842      *g += m_rgb_ctrl[screen_num].gradient;
1843      *b += m_rgb_ctrl[screen_num].gradient;
1844      if(*r > 0x1f) { *r = 0x1f; }
1845      if(*g > 0x1f) { *g = 0x1f; }
1846      if(*b > 0x1f) { *b = 0x1f; }
18451847   }
1846   else if(rgb_setting == 0x800) /* when you get hit TODO: algo might be different. */
1848   else if(m_rgb_ctrl[screen_num].setting == 0x800) /* when you get hit TODO: algo might be different. */
18471849   {
1848      g &= (0x1f - rgb_gradient);
1849      b &= (0x1f - rgb_gradient);
1850      *g &= (0x1f - m_rgb_ctrl[screen_num].gradient);
1851      *b &= (0x1f - m_rgb_ctrl[screen_num].gradient);
18501852   }
1851   else if(rgb_gradient)
1853   else
18521854   {
1853      popmessage("%08x %08x",rgb_setting,rgb_gradient);
1855      popmessage("%08x %08x",m_rgb_ctrl[screen_num].setting,m_rgb_ctrl[screen_num].gradient);
18541856   }
1857}
18551858
1859void coolridr_state::flush_pal_data( UINT16 offset )
1860{
1861   int r,g,b;
1862   int screen_type = (offset & 0x400) >> 10;
1863
1864   r = ((m_h1_pal[offset] & 0x7c00) >> 10);
1865   g = ((m_h1_pal[offset] & 0x03e0) >> 5);
1866   b = ((m_h1_pal[offset] & 0x001f) >> 0);
1867   apply_rgb_control(screen_type,&r,&g,&b);
1868
18561869   palette_set_color_rgb(machine(),offset,pal5bit(r),pal5bit(g),pal5bit(b));
18571870}
18581871
r21423r21424
19481961            break;
19491962         case 0x40: /* screen 1 - almost certainly RGB brightness (at least bits 4 - 0) */
19501963         case 0x44: /* screen 2 / */
1951            m_rgb_ctrl[(cmd & 4) >> 2] = m_framebuffer_vram[(0+dma_index)/4] & 0xffffff;
1964            m_rgb_ctrl[(cmd & 4) >> 2].setting = m_framebuffer_vram[(0+dma_index)/4] & 0xffffe0;
1965            m_rgb_ctrl[(cmd & 4) >> 2].gradient = m_framebuffer_vram[(0+dma_index)/4] & 0x1f;
19521966            for(int i=((cmd & 4) * 0x100);i<((cmd & 4) * 0x100)+0x400;i++)
19531967               flush_pal_data( i );
19541968            dma_index+=4;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team