Previous 199869 Revisions Next

r21405 Saturday 23rd February, 2013 at 17:57:53 UTC by Angelo Salese
Make the transfers UINT16, saves some calcs and gives a speed gain
[src/mame/drivers]coolridr.c

trunk/src/mame/drivers/coolridr.c
r21404r21405
468468
469469   void sysh1_dma_transfer( address_space &space, UINT16 dma_index );
470470
471   UINT8 *m_h1_vram;
472   UINT8 *m_h1_pcg;
473   UINT8 *m_h1_pal;
471   UINT16 *m_h1_vram;
472   UINT16 *m_h1_pcg;
473   UINT16 *m_h1_pal;
474474};
475475
476476#define PRINT_BLIT_STUFF \
r21404r21405
498498   machine().primary_screen->register_screen_bitmap(m_screen1_bitmap);
499499   machine().primary_screen->register_screen_bitmap(m_screen2_bitmap);
500500
501   m_h1_vram = auto_alloc_array_clear(machine(), UINT8, VRAM_SIZE);
502   m_h1_pcg = auto_alloc_array_clear(machine(), UINT8, VRAM_SIZE);
503   m_h1_pal = auto_alloc_array_clear(machine(), UINT8, VRAM_SIZE);
501   m_h1_vram = auto_alloc_array_clear(machine(), UINT16, VRAM_SIZE);
502   m_h1_pcg = auto_alloc_array_clear(machine(), UINT16, VRAM_SIZE);
503   m_h1_pal = auto_alloc_array_clear(machine(), UINT16, VRAM_SIZE);
504504
505505   save_pointer(NAME(m_h1_vram), VRAM_SIZE);
506506   save_pointer(NAME(m_h1_pcg), VRAM_SIZE);
r21404r21405
548548         xisrc = (xdst + scrollx) & (xi_mask);
549549         yisrc = (ydst + scrolly) & (yi_mask);
550550         src_offs = (xsrc + (ysrc*xsize));
551         src_offs *= 2;
552551         src_offs += base_offset;
553552
554         cur_tile = (m_h1_vram[src_offs]<<8)|m_h1_vram[src_offs+1];
553         cur_tile = m_h1_vram[src_offs];
555554
556555         tile = cur_tile & 0x07ff;
557556         color = m_color + ((cur_tile & 0x0800) >> 11) * 4;
558557
559558         /* we have a tile number, fetch into the PCG RAM */
560559         pcg_offs = (xisrc+yisrc*xi_size)+tile*xi_size*yi_size;
561         dot_data = m_h1_pcg[pcg_offs] & 0xff;
560         dot_data = m_h1_pcg[pcg_offs/2];
561         dot_data>>= ((pcg_offs & 1) ^ 1) * 8;
562         dot_data&= 0xff;
562563         dot_data+= color<<8;
563         dot_data*= 2;
564564
565565         /* finally, take the palette data (TODO: apply RGB control) */
566         pal_data = m_h1_pal[dot_data]<<8|m_h1_pal[dot_data+1];
566         pal_data = m_h1_pal[dot_data];
567567         r = pal5bit((pal_data >> 10) & 0x1f);
568568         g = pal5bit((pal_data >> 5) & 0x1f);
569569         b = pal5bit((pal_data >> 0) & 0x1f);
r21404r21405
15151515   UINT8 end_dma_mark;
15161516   UINT8 cmd;
15171517   UINT8 is_dma;
1518   UINT16 *dst_ptr;
15181519
15191520   end_dma_mark = 0;
15201521
r21404r21405
15351536            size = m_framebuffer_vram[(8+dma_index)/4];
15361537            if(dst & 0xfff00000)
15371538               printf("unk values to %02x dst %08x\n",cmd,dst);
1538            dst &= 0x000fffff;
1539            dst_ptr = m_h1_vram;
1540            dst &= 0x000ffffe;
1541            dst >>= 1;
15391542            is_dma = 1;
15401543            dma_index+=0xc;
15411544            break;
r21404r21405
15461549            size = m_framebuffer_vram[(8+dma_index)/4];
15471550            if(dst & 0xfff00000)
15481551               printf("unk values to %02x dst %08x\n",cmd,dst);
1549            dst &= 0x000fffff;
1550            is_dma = 3;
1551            //printf("%08x %08x %08x %02x\n",src,dst,size,cmd);
1552            dst_ptr = m_h1_pcg;
1553            dst &= 0x000ffffe;
1554            dst >>= 1;
1555            is_dma = 1;
15521556            dma_index+=0xc;
15531557            break;
15541558
r21404r21405
15591563            /* Note: there are also some reads at 0x3e00000. This tells us that the DMA thing actually mirrors at 0x3c00000 too. */
15601564            if(dst & 0xfff00000)
15611565               printf("unk values to %02x dst %08x\n",cmd,dst);
1562            dst &= 0x000fffff;
1563            is_dma = 2;
1564            //printf("%08x %08x %08x %02x\n",src,dst,size,cmd);
1566            dst_ptr = m_h1_pal;
1567            dst &= 0x000ffffe;
1568            dst >>= 1;
1569            is_dma = 1;
15651570            dma_index+=0xc;
15661571            break;
15671572
r21404r21405
15841589            break;
15851590      }
15861591
1587   /* TODO: clean-up at a later stage (once that I properly rewrite everything) */
1588   if(is_dma == 1)
1592   if(is_dma)
15891593   {
1590      UINT16 read_src;
1591
15921594      for(int i=0;i<size;i+=2)
15931595      {
1594         read_src = space.read_word(src);
1595
1596         m_h1_vram[dst] = read_src >> 8;
1597         m_h1_vram[dst+1] = read_src & 0xff;
1598         dst+=2;
1596         dst_ptr[dst] = space.read_word(src);
1597         dst++;
15991598         src+=2;
16001599      }
16011600   }
1602   else if(is_dma == 2)
1603   {
1604      UINT16 read_src;
16051601
1606      for(int i=0;i<size;i+=2)
1607      {
1608         read_src = space.read_word(src);
1609
1610         m_h1_pal[dst] = read_src >> 8;
1611         m_h1_pal[dst+1] = read_src & 0xff;
1612         dst+=2;
1613         src+=2;
1614      }
1615   }
1616   else if(is_dma == 3)
1617   {
1618      UINT16 read_src;
1619
1620      for(int i=0;i<size;i+=2)
1621      {
1622         read_src = space.read_word(src);
1623
1624         m_h1_pcg[dst] = read_src >> 8;
1625         m_h1_pcg[dst+1] = read_src & 0xff;
1626         dst+=2;
1627         src+=2;
1628      }
1629   }
1630
16311602   }while(!end_dma_mark );
16321603}
16331604

Previous 199869 Revisions Next


© 1997-2024 The MAME Team