Previous 199869 Revisions Next

r21470 Wednesday 27th February, 2013 at 18:45:09 UTC by David Haywood
make the flash effects full-screen
[src/mame/drivers]coolridr.c

trunk/src/mame/drivers/coolridr.c
r21469r21470
417417   UINT32 m_blitterClearMode;
418418   INT16 m_blitterClearCount;
419419   pen_t m_tilepals[0x10000];
420   pen_t m_fadedpals[0x8000];
420421
421422   // store the blit params here
422423   UINT32 m_spriteblit[12];
r21469r21470
522523   UINT16 *m_h1_vram;
523524   UINT8 *m_h1_pcg;
524525   UINT16 *m_h1_pal;
525   void flush_pal_data( UINT16 offset );
526   void apply_rgb_control(int screen_num,int *r, int *g, int *b);
527526   int m_gfx_index;
528527   int m_color_bank;
529528   struct {
r21469r21470
886885      bg_r = (VREG(0x3c) >> 10) & 0x1f;
887886      bg_g = (VREG(0x3c) >> 5) & 0x1f;
888887      bg_b = (VREG(0x3c) >> 0) & 0x1f;
889      apply_rgb_control(which,&bg_r,&bg_g,&bg_b);
890888
891889      bitmap.fill(VREG(0x3c),cliprect);
892890
r21469r21470
915913
916914UINT32 coolridr_state::screen_update_coolridr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int which)
917915{
916   if(m_rgb_ctrl[which].gradient)
917   {
918      if( (m_rgb_ctrl[which].setting == 0x1240) || (m_rgb_ctrl[which].setting == 0x920) || (m_rgb_ctrl[which].setting == 0x800) )
919      {
920      }
921      else
922      {
923         popmessage("%08x %08x",m_rgb_ctrl[which].setting,m_rgb_ctrl[which].gradient);
924      }
925   }
918926
927   // there are probably better ways to do this
928   for (int i = 0; i < 0x8000; i++)
929   {
930      int r = (i >> 10)&0x1f;
931      int g = (i >> 5)&0x1f;
932      int b = (i >> 0)&0x1f;
933
934      if(m_rgb_ctrl[which].gradient)
935      {
936         /* fade-in / outs */
937         if(m_rgb_ctrl[which].setting == 0x1240)
938         {
939            r -= m_rgb_ctrl[which].gradient;
940            g -= m_rgb_ctrl[which].gradient;
941            b -= m_rgb_ctrl[which].gradient;
942            if(r < 0) { r = 0; }
943            if(g < 0) { g = 0; }
944            if(b < 0) { b = 0; }
945         }
946         else if(m_rgb_ctrl[which].setting == 0x920) /* at bike select / outside tunnels, addition */
947         {
948            r += m_rgb_ctrl[which].gradient;
949            g += m_rgb_ctrl[which].gradient;
950            b += m_rgb_ctrl[which].gradient;
951            if(r > 0x1f) { r = 0x1f; }
952            if(g > 0x1f) { g = 0x1f; }
953            if(b > 0x1f) { b = 0x1f; }
954         }
955         else if(m_rgb_ctrl[which].setting == 0x800) /* when you get hit TODO: algo might be different. */
956         {
957            r += m_rgb_ctrl[which].gradient;
958            g -= m_rgb_ctrl[which].gradient;
959            b -= m_rgb_ctrl[which].gradient;
960            if(r > 0x1f) { r = 0x1f; }
961            if(g < 0) { g = 0; }
962            if(b < 0) { b = 0; }
963         }
964      }
965      m_fadedpals[i] = (r<<10|g<<5|b);
966   }
967
968
969
919970   if (which==0)
920971   {
921      // will probably need a custom function
922      copybitmap_trans(bitmap, m_screen1_bitmap, 0, 0, 0, 0, cliprect, 0x8000);
972      for (int y=0;y<384;y++)
973      {
974         UINT16* linesrc = &m_screen1_bitmap.pix16(y);
975         UINT16* linedest = &bitmap.pix16(y);
976
977         for (int x=0;x<496;x++)
978         {
979            linedest[x] = m_fadedpals[linesrc[x]];
980         }
981      }
923982   }
924983   else
925984   {
926      // will probably need a custom function
927      copybitmap_trans(bitmap, m_screen2_bitmap, 0, 0, 0, 0, cliprect, 0x8000);
985      for (int y=0;y<384;y++)
986      {
987         UINT16* linesrc = &m_screen2_bitmap.pix16(y);
988         UINT16* linedest = &bitmap.pix16(y);
989
990         for (int x=0;x<496;x++)
991         {
992            linedest[x] = m_fadedpals[linesrc[x]];
993         }
994      }
928995   }
929996
930997   return 0;
r21469r21470
26522719   }
26532720}
26542721
2655void coolridr_state::apply_rgb_control(int screen_num,int *r, int *g, int *b)
2656{
2657   if(!m_rgb_ctrl[screen_num].gradient)
2658      return;
26592722
2660   if(m_rgb_ctrl[screen_num].setting == 0x1240) /* fade-in / outs */
2661   {
2662      *r -= m_rgb_ctrl[screen_num].gradient;
2663      *g -= m_rgb_ctrl[screen_num].gradient;
2664      *b -= m_rgb_ctrl[screen_num].gradient;
2665      if(*r < 0) { *r = 0; }
2666      if(*g < 0) { *g = 0; }
2667      if(*b < 0) { *b = 0; }
2668   }
2669   else if(m_rgb_ctrl[screen_num].setting == 0x920) /* at bike select / outside tunnels, addition */
2670   {
2671      *r += m_rgb_ctrl[screen_num].gradient;
2672      *g += m_rgb_ctrl[screen_num].gradient;
2673      *b += m_rgb_ctrl[screen_num].gradient;
2674      if(*r > 0x1f) { *r = 0x1f; }
2675      if(*g > 0x1f) { *g = 0x1f; }
2676      if(*b > 0x1f) { *b = 0x1f; }
2677   }
2678   else if(m_rgb_ctrl[screen_num].setting == 0x800) /* when you get hit TODO: algo might be different. */
2679   {
2680      *r += m_rgb_ctrl[screen_num].gradient;
2681      *g -= m_rgb_ctrl[screen_num].gradient;
2682      *b -= m_rgb_ctrl[screen_num].gradient;
2683      if(*r > 0x1f) { *r = 0x1f; }
2684      if(*g < 0) { *g = 0; }
2685      if(*b < 0) { *b = 0; }
2686   }
2687   else
2688   {
2689      popmessage("%08x %08x",m_rgb_ctrl[screen_num].setting,m_rgb_ctrl[screen_num].gradient);
2690   }
2691}
26922723
2693void coolridr_state::flush_pal_data( UINT16 offset )
2694{
2695   int r,g,b;
2696   int screen_type = (offset & 0x200) >> 9;
2697
2698   r = ((m_h1_pal[offset] & 0x7c00) >> 10);
2699   g = ((m_h1_pal[offset] & 0x03e0) >> 5);
2700   b = ((m_h1_pal[offset] & 0x001f) >> 0);
2701   apply_rgb_control(screen_type,&r,&g,&b);
2702
2703//   palette_set_color_rgb(machine(),offset,pal5bit(r),pal5bit(g),pal5bit(b));
2704   m_tilepals[offset&0xffff] = (r<<10) | (g<<5) | b;
2705}
2706
27072724void coolridr_state::sysh1_dma_transfer( address_space &space, UINT16 dma_index )
27082725{
27092726   UINT32 src = 0,dst = 0,size = 0;
r21469r21470
27732790            for(int i=0;i<size;i+=2)
27742791            {
27752792               m_h1_pal[dst] = space.read_word(src);
2776               flush_pal_data(dst);
2793               m_tilepals[dst&0xffff] = m_h1_pal[dst];
27772794               dst++;
27782795               src+=2;
27792796            }
r21469r21470
27992816            m_rgb_ctrl[(cmd & 4) >> 2].setting = m_framebuffer_vram[(0+dma_index)/4] & 0xffffe0;
28002817            m_rgb_ctrl[(cmd & 4) >> 2].gradient = m_framebuffer_vram[(0+dma_index)/4] & 0x1f;
28012818
2802            /* 0x000-0x1ff - 0x400-0x5ff screen 1 */
2803            /* 0x200-0x3ff - 0x600-0x7ff screen 2 */
2804            for(int i=((cmd & 4) << 7);i<((cmd & 4) << 7)+0x200;i++)
2805            {
2806               flush_pal_data( i );
2807               flush_pal_data( i + 0x400 );
2808            }
28092819
28102820            dma_index+=4;
28112821            break;
r21469r21470
35973607   DEVCB_DRIVER_LINE_MEMBER(coolridr_state, scsp2_to_sh1_irq)
35983608};
35993609
3610
3611PALETTE_INIT( RRRRR_GGGGG_BBBBB_double )
3612{
3613   int i;
3614
3615   for (i = 0; i < 0x10000; i++)
3616      palette_set_color(machine, i, MAKE_RGB( pal5bit((i >> 10)&0x1f), pal5bit(((i >> 5))&0x1f), pal5bit((i >> 0)&0x1f)));
3617}
3618
3619
36003620#define MAIN_CLOCK XTAL_28_63636MHz
36013621
36023622static MACHINE_CONFIG_START( coolridr, coolridr_state )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team