⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bits.txt

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 TXT
字号:

#ifndef ASM_TILES
// C Version of draw_tile
static int draw_tile(struct bmap *bm,struct dgen_sinfo *si,int ox,int oy,unsigned tile)
{
  int tile_off,pal_off;
  int p1,p0,fx,fy,x,y;

  // shift by eight for messy border
  ox+=8; oy+=8;
  if (ox<0) return 1;
  if (ox>=(320+8)) return 1;
  if (oy<0) return 1;
  if (oy>=(224+8)) return 1;

  if ((si->vdp_reg[12]&6)==6)        // interlace mode
    tile_off=(tile&0x7ff)<<6;
  else
    tile_off=(tile&0x7ff)<<5;

  p0=(tile&0x2000)?1:0;
  p1=(tile&0x4000)?1:0;
  pal_off=(p1*2+p0)*16;

  fy=(tile&0x1000)?1:0;
  fx=(tile&0x0800)?1:0;

  for (y=0;y<8;y++)
  {
    unsigned char b;
    int col; int tx;
    tx=x;
    for (x=0;x<8;x+=2)
    {
      b =si->vram[(tile_off++)&0xffff];

      if (bm->bpp<=8)
      {
        col=pal_off+(b>>4);
        if (b>>4)
          *((unsigned char  *)(bm->data+(oy+(fy?(7-y):y))*bm->pitch+1*(ox+(fx?(7-x+0):(x+0)))))=col&63;
  
        col=pal_off+(b&15);
        if (b&15)
          *((unsigned char  *)(bm->data+(oy+(fy?(7-y):y))*bm->pitch+1*(ox+(fx?(7-x-1):(x+1)))))=col&63;
      }
      else if (bm->bpp<=16)
      {
        col=pal_off+(b>>4);
        if (b>>4)
          *((unsigned short *)(bm->data+(oy+(fy?(7-y):y))*bm->pitch+2*(ox+(fx?(7-x+0):(x+0)))))=highpal[col&63];
  
        col=pal_off+(b&15);
        if (b&15)
          *((unsigned short *)(bm->data+(oy+(fy?(7-y):y))*bm->pitch+2*(ox+(fx?(7-x-1):(x+1)))))=highpal[col&63];
      }
      else if (bm->bpp<=24)
      {
        int clr,cr,cg,cb; unsigned char *pix;
        col=pal_off+(b>>4); clr=highpal[col&63];
        cr=clr>>16; cg=clr>>8; cb=clr; cr&=0xff; cg&=0xff; cb&=0xff;
        if (b>>4)
        {
          pix=(bm->data+(oy+(fy?(7-y):y))*bm->pitch+3*(ox+(fx?(7-x+0):(x+0))));
          pix[0]=cb; pix[1]=cg; pix[2]=cr;
        }

        col=pal_off+(b&15); clr=highpal[col&63];
        cr=clr>>16; cg=clr>>8; cb=clr; cr&=0xff; cg&=0xff; cb&=0xff;
        if (b&15)
        {
          pix=(bm->data+(oy+(fy?(7-y):y))*bm->pitch+3*(ox+(fx?(7-x-1):(x+1))));
          pix[0]=cb; pix[1]=cg; pix[2]=cr;
        }
      }
      else if (bm->bpp<=32)
      {
        col=pal_off+(b>>4);
        if (b>>4)
          *((unsigned int   *)(bm->data+(oy+(fy?(7-y):y))*bm->pitch+4*(ox+(fx?(7-x+0):(x+0)))))=highpal[col&63];
  
        col=pal_off+(b&15);
        if (b&15)
          *((unsigned int   *)(bm->data+(oy+(fy?(7-y):y))*bm->pitch+4*(ox+(fx?(7-x-1):(x+1)))))=highpal[col&63];
      }
    }
    if ((si->vdp_reg[12]&3)==3) tile_off+=4;
  }

  return 0;
}
#endif

/*
  if (bmp_depth>=32)
  {
    if ( !fx  && !fy  ) draw_tile_32      (dest,lpitch,tilep,highpal+pal_off);
    if (  fx  && !fy  ) draw_tile_32_hf   (dest,lpitch,tilep,highpal+pal_off);
    if ( !fx  &&  fy  ) draw_tile_32_vf   (dest,lpitch,tilep,highpal+pal_off);
    if (  fx  &&  fy  ) draw_tile_32_hf_vf(dest,lpitch,tilep,highpal+pal_off);
  }
  else if (bmp_depth>=24)
  {
    if ( !fx  && !fy  ) draw_tile_24      (dest,lpitch,tilep,highpal+pal_off);
    if (  fx  && !fy  ) draw_tile_24_hf   (dest,lpitch,tilep,highpal+pal_off);
    if ( !fx  &&  fy  ) draw_tile_24_vf   (dest,lpitch,tilep,highpal+pal_off);
    if (  fx  &&  fy  ) draw_tile_24_hf_vf(dest,lpitch,tilep,highpal+pal_off);
  }
  else if (bmp_depth>=15)
  {
    if ( !fx  && !fy  ) draw_tile_16      (dest,lpitch,tilep,highpal+pal_off);
    if (  fx  && !fy  ) draw_tile_16_hf   (dest,lpitch,tilep,highpal+pal_off);
    if ( !fx  &&  fy  ) draw_tile_16_vf   (dest,lpitch,tilep,highpal+pal_off);
    if (  fx  &&  fy  ) draw_tile_16_hf_vf(dest,lpitch,tilep,highpal+pal_off);
  }
  else if (bmp_depth>=8)
  {
    if ( !fx  && !fy  ) draw_tile_8      (dest,lpitch,tilep,highpal+pal_off);
    if (  fx  && !fy  ) draw_tile_8_hf   (dest,lpitch,tilep,highpal+pal_off);
    if ( !fx  &&  fy  ) draw_tile_8_vf   (dest,lpitch,tilep,highpal+pal_off);
    if (  fx  &&  fy  ) draw_tile_8_hf_vf(dest,lpitch,tilep,highpal+pal_off);
  }
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -