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

📄 tc006vcu.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
         MAP_PALETTE_MAPPED_NEW(            RAM_BG[zz]|pal_ofs,            16,            map         );         ta = ReadWord(&RAM_BG[zz+2]) & tile_mask;         switch(RAM_BG[zz+1]&0xC0){            case 0x00: Draw16x16_64_Mapped_ZoomXY(&RAM_GFX[ta<<8],x,y,map,txx,tyy);        break;            case 0x40: Draw16x16_64_Mapped_ZoomXY_FlipY(&RAM_GFX[ta<<8],x,y,map,txx,tyy);  break;            case 0x80: Draw16x16_64_Mapped_ZoomXY_FlipX(&RAM_GFX[ta<<8],x,y,map,txx,tyy);  break;            case 0xC0: Draw16x16_64_Mapped_ZoomXY_FlipXY(&RAM_GFX[ta<<8],x,y,map,txx,tyy); break;         }      zz=(zz&0xF80)|((zz+4)&0x7F);   }   zz = zzzz = (zzzz+0x80)&0xFFF;   }   }   }   else{   zoom   = RAM_SCR[0x10];   zoom_2 = RAM_SCR[0x11];   if((zoom<=0x7F)){      MAKE_SCROLL_512x512_4_16(         scr_x - (ReadWord(&RAM_SCR[0])),         scr_y + (ReadWord(&RAM_SCR[8]))      );      START_SCROLL_512x512_4_16(bmp_x,bmp_y,bmp_w,bmp_h);      ta = ReadWord(&RAM_BG[zz+2]) & tile_mask;      if(RAM_MSK[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            RAM_BG[zz]|pal_ofs,            16,            map         );         if(RAM_MSK[ta]==1){			// Some pixels; trans            switch(RAM_BG[zz+1]&0xC0){               case 0x00: Draw16x16_Trans_Mapped_Rot(&RAM_GFX[ta<<8],x,y,map);        break;               case 0x40: Draw16x16_Trans_Mapped_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map);  break;               case 0x80: Draw16x16_Trans_Mapped_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map);  break;               case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map); break;            }         }         else{					// all pixels; solid            switch(RAM_BG[zz+1]&0xC0){               case 0x00: Draw16x16_Mapped_Rot(&RAM_GFX[ta<<8],x,y,map);        break;               case 0x40: Draw16x16_Mapped_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map);  break;               case 0x80: Draw16x16_Mapped_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map);  break;               case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map); break;            }         }      }      END_SCROLL_512x512_4_16();   }   else{   z_data_x = &z_step[(zoom-0x80)<<5];   z_data_y = &z_step[(zoom-0x80)<<5];   tx=0;   ty=0;   zzz = scr_x - (ReadWord(&RAM_SCR[0]));   zzzz=(zzz&0x1F0)>>2;   x16=zzz&15;   zzz = scr_y + (ReadWord(&RAM_SCR[8]));   zzzz|=(zzz&0x1F0)<<3;   y16=zzz&15;   //x16 = (x16 * z_data_x[tx])/16;   //y16 = (y16 * z_data_y[ty])/16;   x16 = (x16 * (zoom-0x40))/0x40;   y16 = (y16 * (zoom-0x40))/0x40;   zz=zzzz;   for(y=(48-y16);y<(224+48);y+=tyy){   tyy = z_data_y[ty];   ty  = (ty+1)&3;   for(x=(48-x16);x<(320+48);x+=txx){      txx = z_data_x[tx];      tx  = (tx+1)&3;      ta = ReadWord(&RAM_BG[zz+2]) & tile_mask;      if(RAM_MSK[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            RAM_BG[zz]|pal_ofs,            16,            map         );         if(RAM_MSK[ta]==1){			// Some pixels; trans            switch(RAM_BG[zz+1]&0xC0){               case 0x00: Draw16x16_64_Trans_Mapped_ZoomXY_Rot(&RAM_GFX[ta<<8],x,y,map,txx,tyy);        break;               case 0x40: Draw16x16_64_Trans_Mapped_ZoomXY_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map,txx,tyy);  break;               case 0x80: Draw16x16_64_Trans_Mapped_ZoomXY_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map,txx,tyy);  break;               case 0xC0: Draw16x16_64_Trans_Mapped_ZoomXY_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map,txx,tyy); break;            }         }         else{					// all pixels; solid            switch(RAM_BG[zz+1]&0xC0){               case 0x00: Draw16x16_64_Mapped_ZoomXY_Rot(&RAM_GFX[ta<<8],x,y,map,txx,tyy);        break;               case 0x40: Draw16x16_64_Mapped_ZoomXY_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map,txx,tyy);  break;               case 0x80: Draw16x16_64_Mapped_ZoomXY_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map,txx,tyy);  break;               case 0xC0: Draw16x16_64_Mapped_ZoomXY_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map,txx,tyy); break;            }         }      }      zz=(zz&0xF80)|((zz+4)&0x7F);   }   zz = zzzz = (zzzz+0x80)&0xFFF;   }   }   }   tc0006vcu_layer_count ++;}void tc0006vcu_render_layer_1024(int layer){   int zoom,zoom_2,tx,ty,txx,tyy;   UINT8 *z_data_x,*z_data_y;   int x,y,x16,y16,zzzz,zzz,zz,ta;   UINT8 *map;   UINT8 *RAM_BG;   UINT8 *RAM_SCR;   UINT8 *RAM_GFX;   UINT8 *RAM_MSK;   mapper_direct *pal_map;   UINT32 bmp_x,bmp_y,bmp_w,bmp_h;   UINT32 scr_x, scr_y, pal_ofs, tile_mask;   if(!check_layer_enabled(layer_id_data[layer]))       return;   RAM_BG    = tc0006vcu.RAM     + (layer * 0x2000);   RAM_SCR   = tc0006vcu.RAM_SCR + (layer * 0x0002);   RAM_GFX   = tc0006vcu.GFX_BG;   RAM_MSK   = tc0006vcu.GFX_BG_MASK;   pal_map   = tc0006vcu.mapper;   pal_ofs   = tc0006vcu.pal_ofs;   tile_mask = tc0006vcu.tile_mask;   bmp_x = tc0006vcu.bmp_x;   bmp_y = tc0006vcu.bmp_y;   bmp_w = tc0006vcu.bmp_w;   bmp_h = tc0006vcu.bmp_h;   scr_x = tc0006vcu.scr_x[layer];   scr_y = tc0006vcu.scr_y[layer];   if(tc0006vcu_layer_count == 0){   zoom   = RAM_SCR[0x10];   zoom_2 = RAM_SCR[0x11];   if((zoom<=0x7F)){      MAKE_SCROLL_1024x512_4_16(         scr_x - (ReadWord(&RAM_SCR[0])),         scr_y + (ReadWord(&RAM_SCR[8]))      );      START_SCROLL_1024x512_4_16(bmp_x,bmp_y,bmp_w,bmp_h);         MAP_PALETTE_MAPPED_NEW(            (RAM_BG[zz]|pal_ofs),            16,            map         );         ta = ReadWord(&RAM_BG[zz+2]) & tile_mask;         switch(RAM_BG[zz+1]&0xC0){            case 0x00: Draw16x16_Mapped_Rot(&RAM_GFX[ta<<8],x,y,map);        break;            case 0x40: Draw16x16_Mapped_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map);  break;            case 0x80: Draw16x16_Mapped_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map);  break;            case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map); break;         }      END_SCROLL_1024x512_4_16();   }   else{   z_data_x = &z_step[(zoom-0x80)<<5];   z_data_y = &z_step[(zoom-0x80)<<5];   tx=0;   ty=0;   zzz = scr_x - (ReadWord(&RAM_SCR[0]));   zzzz=(zzz&0x3F0)>>2;   x16=zzz&15;   zzz = scr_y + (ReadWord(&RAM_SCR[8]));   zzzz|=(zzz&0x1F0)<<4;   y16=zzz&15;   x16 = (x16 * z_data_x[tx])/16;   y16 = (y16 * z_data_y[ty])/16;   zz=zzzz;   for(y=(48-y16);y<(224+48);y+=tyy){   tyy = z_data_y[ty];   ty  = (ty+1)&3;   for(x=(48-x16);x<(320+48);x+=txx){      txx = z_data_x[tx];      tx  = (tx+1)&3;         MAP_PALETTE_MAPPED_NEW(            RAM_BG[zz]|pal_ofs,            16,            map         );         ta = ReadWord(&RAM_BG[zz+2]) & tile_mask;         switch(RAM_BG[zz+1]&0xC0){            case 0x00: Draw16x16_64_Mapped_ZoomXY(&RAM_GFX[ta<<8],x,y,map,txx,tyy);        break;            case 0x40: Draw16x16_64_Mapped_ZoomXY_FlipY(&RAM_GFX[ta<<8],x,y,map,txx,tyy);  break;            case 0x80: Draw16x16_64_Mapped_ZoomXY_FlipX(&RAM_GFX[ta<<8],x,y,map,txx,tyy);  break;            case 0xC0: Draw16x16_64_Mapped_ZoomXY_FlipXY(&RAM_GFX[ta<<8],x,y,map,txx,tyy); break;         }      zz=(zz&0x1F00)|((zz+4)&0xFF);   }   zz = zzzz = (zzzz+0x100)&0x1FFF;   }   }   }   else{   zoom   = RAM_SCR[0x10];   zoom_2 = RAM_SCR[0x11];   if((zoom<=0x7F)){      MAKE_SCROLL_1024x512_4_16(         scr_x - (ReadWord(&RAM_SCR[0])),         scr_y + (ReadWord(&RAM_SCR[8]))      );      START_SCROLL_1024x512_4_16(bmp_x,bmp_y,bmp_w,bmp_h);      ta = ReadWord(&RAM_BG[zz+2]) & tile_mask;      if(RAM_MSK[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            RAM_BG[zz]|pal_ofs,            16,            map         );         if(RAM_MSK[ta]==1){			// Some pixels; trans            switch(RAM_BG[zz+1]&0xC0){               case 0x00: Draw16x16_Trans_Mapped_Rot(&RAM_GFX[ta<<8],x,y,map);        break;               case 0x40: Draw16x16_Trans_Mapped_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map);  break;               case 0x80: Draw16x16_Trans_Mapped_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map);  break;               case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map); break;            }         }         else{					// all pixels; solid            switch(RAM_BG[zz+1]&0xC0){               case 0x00: Draw16x16_Mapped_Rot(&RAM_GFX[ta<<8],x,y,map);        break;               case 0x40: Draw16x16_Mapped_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map);  break;               case 0x80: Draw16x16_Mapped_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map);  break;               case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map); break;            }         }      }      END_SCROLL_1024x512_4_16();   }   else{   z_data_x = &z_step[(zoom-0x80)<<5];   z_data_y = &z_step[(zoom-0x80)<<5];   tx=0;   ty=0;   zzz = scr_x - (ReadWord(&RAM_SCR[0]));   zzzz=(zzz&0x3F0)>>2;   x16=zzz&15;   zzz = scr_y + (ReadWord(&RAM_SCR[8]));   zzzz|=(zzz&0x1F0)<<4;   y16=zzz&15;   //x16 = (x16 * z_data_x[tx])/16;   //y16 = (y16 * z_data_y[ty])/16;   x16 = (x16 * (zoom-0x40))/0x40;   y16 = (y16 * (zoom-0x40))/0x40;   zz=zzzz;   for(y=(48-y16);y<(224+48);y+=tyy){   tyy = z_data_y[ty];   ty  = (ty+1)&3;   for(x=(48-x16);x<(320+48);x+=txx){      txx = z_data_x[tx];      tx  = (tx+1)&3;      ta = ReadWord(&RAM_BG[zz+2]) & tile_mask;      if(RAM_MSK[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            RAM_BG[zz]|pal_ofs,            16,            map         );         if(RAM_MSK[ta]==1){			// Some pixels; trans            switch(RAM_BG[zz+1]&0xC0){               case 0x00: Draw16x16_64_Trans_Mapped_ZoomXY(&RAM_GFX[ta<<8],x,y,map,txx,tyy);        break;               case 0x40: Draw16x16_64_Trans_Mapped_ZoomXY_FlipY(&RAM_GFX[ta<<8],x,y,map,txx,tyy);  break;               case 0x80: Draw16x16_64_Trans_Mapped_ZoomXY_FlipX(&RAM_GFX[ta<<8],x,y,map,txx,tyy);  break;               case 0xC0: Draw16x16_64_Trans_Mapped_ZoomXY_FlipXY(&RAM_GFX[ta<<8],x,y,map,txx,tyy); break;            }         }         else{					// all pixels; solid            switch(RAM_BG[zz+1]&0xC0){               case 0x00: Draw16x16_64_Mapped_ZoomXY(&RAM_GFX[ta<<8],x,y,map,txx,tyy);        break;               case 0x40: Draw16x16_64_Mapped_ZoomXY_FlipY(&RAM_GFX[ta<<8],x,y,map,txx,tyy);  break;               case 0x80: Draw16x16_64_Mapped_ZoomXY_FlipX(&RAM_GFX[ta<<8],x,y,map,txx,tyy);  break;               case 0xC0: Draw16x16_64_Mapped_ZoomXY_FlipXY(&RAM_GFX[ta<<8],x,y,map,txx,tyy); break;            }         }      }      zz=(zz&0x1F00)|((zz+4)&0xFF);   }   zz = zzzz = (zzzz+0x100)&0x1FFF;   }   }   }   tc0006vcu_layer_count ++;}void tc0006vcu_render_fg0(void){   int x,y,x16,y16,zzzz,zzz,zz,ta;   UINT8 *map;   UINT8 *RAM_BG;   UINT8 *RAM_SCR;   UINT8 *RAM_GFX;   UINT8 *RAM_MSK;   mapper_direct *pal_map;   UINT32 bmp_x,bmp_y,bmp_w,bmp_h;   UINT32 scr_x,scr_y, pal_ofs;   if(!check_layer_enabled(layer_id_data[4]))       return;   tc0006vcu_update_gfx_fg0();   RAM_BG    = tc0006vcu.RAM + 0x0C000;   RAM_SCR   = tc0006vcu.RAM_SCR + 0x00018;   RAM_GFX   = tc0006vcu.GFX_FG;   RAM_MSK   = tc0006vcu.GFX_FG_MASK;   pal_map   = tc0006vcu.mapper;   pal_ofs   = tc0006vcu.pal_ofs;   bmp_x = tc0006vcu.bmp_x;   bmp_y = tc0006vcu.bmp_y;   bmp_w = tc0006vcu.bmp_w;   bmp_h = tc0006vcu.bmp_h;   scr_x = tc0006vcu.scr_x[4];   scr_y = tc0006vcu.scr_y[4];      MAKE_SCROLL_512x512_2_8(         scr_x - (ReadWord(&RAM_SCR[0])),         scr_y - (ReadWord(&RAM_SCR[2]))      );      START_SCROLL_512x512_2_8(bmp_x,bmp_y,bmp_w,bmp_h);      ta=RAM_BG[zz];      if(RAM_MSK[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            ((RAM_BG[1+zz]&0x3F)|pal_ofs),            16,            map         );         if(RAM_MSK[ta]==1){			// Some pixels; trans            switch(RAM_BG[1+zz]&0xC0){               case 0x00: Draw8x8_Trans_Mapped_Rot(&RAM_GFX[ta<<6],x,y,map);        break;               case 0x40: Draw8x8_Trans_Mapped_FlipY_Rot(&RAM_GFX[ta<<6],x,y,map);  break;               case 0x80: Draw8x8_Trans_Mapped_FlipX_Rot(&RAM_GFX[ta<<6],x,y,map);  break;               case 0xC0: Draw8x8_Trans_Mapped_FlipXY_Rot(&RAM_GFX[ta<<6],x,y,map); break;            }         }         else{					// all pixels; solid            switch(RAM_BG[1+zz]&0xC0){               case 0x00: Draw8x8_Mapped_Rot(&RAM_GFX[ta<<6],x,y,map);        break;               case 0x40: Draw8x8_Mapped_FlipY_Rot(&RAM_GFX[ta<<6],x,y,map);  break;               case 0x80: Draw8x8_Mapped_FlipX_Rot(&RAM_GFX[ta<<6],x,y,map);  break;               case 0xC0: Draw8x8_Mapped_FlipXY_Rot(&RAM_GFX[ta<<6],x,y,map); break;            }         }      }      END_SCROLL_512x512_2_8();   tc0006vcu_layer_count ++;}

⌨️ 快捷键说明

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