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

📄 tc180vcu.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
      }      map = &map_data[mapped[tc]];         if(RAM_MSK[ta]==1){			// Some pixels; trans            switch(RAM_BG[zz+3]&0xC0){               case 0x00: Draw16x16_Trans_Mapped_ZoomXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);        break;               case 0x40: Draw16x16_Trans_Mapped_ZoomXY_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0x80: Draw16x16_Trans_Mapped_ZoomXY_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0xC0: Draw16x16_Trans_Mapped_ZoomXY_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy); break;            }         }         else{					// all pixels; solid            switch(RAM_BG[zz+3]&0xC0){               case 0x00: Draw16x16_Mapped_ZoomXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);        break;               case 0x40: Draw16x16_Mapped_ZoomXY_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0x80: Draw16x16_Mapped_ZoomXY_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0xC0: Draw16x16_Mapped_ZoomXY_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy); break;            }         }      }      }      }      y = (y+zy)&OBJ_Y_MASK;      zz -= 16;   }while(ry--);   x = (x+zx)&OBJ_X_MASK;   }while(rx--);   }while(zz>=0);   for(ta=0;ta<map_count;ta+=16){      MAP_PALETTE_MAPPED_NEW(         mapping[ta>>4],         16,         map      );      for(tc=0;tc<16;tc++)         map_bored[tc+ta]=map[tc];   }      GameBitmap = bitmap_store;      init_spr16x16asm();   for(ty=32;(UINT32)ty<32+tc0180vcu.bmp_h;ty++){   for(tx=32;(UINT32)tx<32+tc0180vcu.bmp_w;tx++){      GameBitmap->line[ty][tx] = map_bored[pixel_bitmap->line[ty][tx]];   }   }      //blit(pixel_bitmap,GameBitmap,32,32,32,32,tc0180vcu.bmp_w,tc0180vcu.bmp_h);   }   else{   zz = (num-1)<<4;   do{   x        = (ofs_x+ReadWord(&RAM_BG[zz+4]))&OBJ_X_MASK;   y_store  = (ofs_y+ReadWord(&RAM_BG[zz+6]))&OBJ_Y_MASK;   rx       = RAM_BG[zz+11]&0x1F;   ry_store = RAM_BG[zz+10]&0x1F;   zoom_dat_x = zoom16_ofs+(RAM_BG[zz+9]<<5);   zoom_dat_y = zoom16_ofs+(RAM_BG[zz+8]<<5);   tx=0;   do{   y  = y_store;   ry = ry_store;   ty = 0;   zx = zoom_dat_x[tx++];   do{      zy = zoom_dat_y[ty++];      if((x > sx_1) && (x < sx_2)){      if((y > sy_1) && (y < sy_2)){      ta=ReadWord(&RAM_BG[zz])&tile_mask;      if(RAM_MSK[ta]!=0){			// No pixels; skip      MAP_PALETTE_MAPPED_NEW(         col_remap[2][RAM_BG[2+zz]&0x3F],         16,         map      );         if(RAM_MSK[ta]==1){			// Some pixels; trans            switch(RAM_BG[zz+3]&0xC0){               case 0x00: Draw16x16_Trans_Mapped_ZoomXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);        break;               case 0x40: Draw16x16_Trans_Mapped_ZoomXY_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0x80: Draw16x16_Trans_Mapped_ZoomXY_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0xC0: Draw16x16_Trans_Mapped_ZoomXY_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy); break;            }         }         else{					// all pixels; solid            switch(RAM_BG[zz+3]&0xC0){               case 0x00: Draw16x16_Mapped_ZoomXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);        break;               case 0x40: Draw16x16_Mapped_ZoomXY_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0x80: Draw16x16_Mapped_ZoomXY_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0xC0: Draw16x16_Mapped_ZoomXY_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy); break;            }         }      }      }      }      y = (y+zy)&OBJ_Y_MASK;      zz -= 16;   }while(ry--);   x = (x+zx)&OBJ_X_MASK;   }while(rx--);   }while(zz>=0);   }}/******************************************************************************/void vcu_render_bg0_r270(void){   int x,y,x16,y16,zzzz,zzz,zz;   UINT8 *map;   UINT8 *RAM_BG;   UINT8 *RAM_SCR;   UINT8 *RAM_GFX;   UINT32 tile_mask;   UINT32 bmp_x,bmp_y,bmp_w,bmp_h;   UINT32 scr_x,scr_y;   RAM_BG    = tc0180vcu.RAM + 0x04000;   RAM_SCR   = tc0180vcu.RAM + 0x13C00;   RAM_GFX   = tc0180vcu.GFX_BG0;   tile_mask = tc0180vcu.tile_mask;   bmp_x = tc0180vcu.bmp_x;   bmp_y = tc0180vcu.bmp_y;   bmp_w = tc0180vcu.bmp_w;   bmp_h = tc0180vcu.bmp_h;   scr_x = tc0180vcu.scr_x;   scr_y = tc0180vcu.scr_y;      MAKE_SCROLL_1024x1024_2_16(         scr_y-(ReadWord(RAM_SCR+0)),         scr_x-(ReadWord(RAM_SCR+2))      );      START_SCROLL_1024x1024_2_16_R270(bmp_x,bmp_y,bmp_w,bmp_h);         MAP_PALETTE_MAPPED_NEW(            col_remap[0][RAM_BG[0x2000+zz]&0x3F],            16,            map         );      switch(RAM_BG[0x2000+zz]&0xC0){         case 0x00: Draw16x16_Mapped_Rot(&RAM_GFX[(ReadWord(&RAM_BG[zz])&tile_mask)<<8],x,y,map);        break;         case 0x80: Draw16x16_Mapped_FlipY_Rot(&RAM_GFX[(ReadWord(&RAM_BG[zz])&tile_mask)<<8],x,y,map);  break;         case 0x40: Draw16x16_Mapped_FlipX_Rot(&RAM_GFX[(ReadWord(&RAM_BG[zz])&tile_mask)<<8],x,y,map);  break;         case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&RAM_GFX[(ReadWord(&RAM_BG[zz])&tile_mask)<<8],x,y,map); break;      }      END_SCROLL_1024x1024_2_16();}void vcu_render_bg1_r270(void){   int x,y,x16,y16,zzzz,zzz,zz,ta;   UINT8 *map;   UINT8 *RAM_BG;   UINT8 *RAM_SCR;   UINT8 *RAM_GFX;   UINT8 *RAM_MSK;   UINT32 tile_mask;   UINT32 bmp_x,bmp_y,bmp_w,bmp_h;   UINT32 scr_x,scr_y;   RAM_BG    = tc0180vcu.RAM + 0x00000;   RAM_SCR   = tc0180vcu.RAM + 0x13800;   RAM_GFX   = tc0180vcu.GFX_BG0;   RAM_MSK   = tc0180vcu.GFX_BG0_MSK;   tile_mask = tc0180vcu.tile_mask;   bmp_x = tc0180vcu.bmp_x;   bmp_y = tc0180vcu.bmp_y;   bmp_w = tc0180vcu.bmp_w;   bmp_h = tc0180vcu.bmp_h;   scr_x = tc0180vcu.scr_x;   scr_y = tc0180vcu.scr_y;      MAKE_SCROLL_1024x1024_2_16(         scr_y-(ReadWord(RAM_SCR+0)),         scr_x-(ReadWord(RAM_SCR+2))      );      START_SCROLL_1024x1024_2_16_R270(bmp_x,bmp_y,bmp_w,bmp_h);      ta=ReadWord(&RAM_BG[zz])&tile_mask;      if(RAM_MSK[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            col_remap[1][RAM_BG[0x2000+zz]&0x3F],            16,            map         );         if(RAM_MSK[ta]==1){			// Some pixels; trans            switch(RAM_BG[0x2000+zz]&0xC0){               case 0x00: Draw16x16_Trans_Mapped_Rot(&RAM_GFX[ta<<8],x,y,map);        break;               case 0x80: Draw16x16_Trans_Mapped_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map);  break;               case 0x40: 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[0x2000+zz]&0xC0){               case 0x00: Draw16x16_Mapped_Rot(&RAM_GFX[ta<<8],x,y,map);        break;               case 0x80: Draw16x16_Mapped_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map);  break;               case 0x40: 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_1024x1024_2_16();}void vcu_render_bg2_r270(void){   int x,y,x16,y16,zzzz,zzz,zz,ta,tx;   UINT8 *map;   UINT8 *RAM_BG;   UINT8 *RAM_SCR;   UINT8 *GFX_BG;   UINT8 *RAM_MSK;   UINT32 bmp_x,bmp_y,bmp_w,bmp_h;   UINT32 scr_x,scr_y;   RAM_BG    = tc0180vcu.RAM + 0x08000;   RAM_SCR   = NULL;   GFX_BG    = tc0180vcu.GFX_BG2;   RAM_MSK   = tc0180vcu.GFX_BG2_MSK;   if(tc0180vcu.RAM_2){      RAM_BG = tc0180vcu.RAM + ((ReadWord(&tc0180vcu.RAM_2[0x0C])&0x0F00)<<4);   }   bmp_x = tc0180vcu.bmp_x;   bmp_y = tc0180vcu.bmp_y;   bmp_w = tc0180vcu.bmp_w;   bmp_h = tc0180vcu.bmp_h;   scr_x = tc0180vcu.scr_x;   scr_y = tc0180vcu.scr_y;   tx = 128-(bmp_h>>2);      MAKE_SCROLL_512x256_2_8(         scr_y,		//-(ReadWord(RAM_SCR+0)),         scr_x		//-(ReadWord(RAM_SCR+6))      );      zz=zzzz;      for(x=bmp_x;(UINT32)x<(bmp_w+bmp_x);x+=8,zz+=tx){      for(y=(bmp_h+bmp_y-8);(UINT32)y>=bmp_y;y-=8,zz+=2){      ta=ReadWord(&RAM_BG[zz])&0xFFF;      if(RAM_MSK[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            col_remap[3][RAM_BG[1+zz]>>4],            16,            map         );         if(RAM_MSK[ta]==1){			// Some pixels; trans            Draw8x8_Trans_Mapped_Rot(&GFX_BG[ta<<6],x,y,map);         }         else{					// all pixels; solid            Draw8x8_Mapped_Rot(&GFX_BG[ta<<6],x,y,map);         }      }      }      }}void vcu_render_obj_r270(int pri){   int x,y,zz,ta,tx,ty;   int rx,ry,x_store,rx_store;   int zx,zy,tc,tp;   UINT8 *zoom_dat_x;   UINT8 *zoom_dat_y;   UINT8 *map;   UINT8 *RAM_BG;   UINT8 *RAM_GFX;   UINT8 *RAM_MSK;   UINT32 tile_mask;   int sx_1,sy_1,sx_2,sy_2;   int ofs_x,ofs_y;   tp=1;   if(pri!=0) tp=0;   RAM_BG    = tc0180vcu.RAM + 0x10000;   RAM_GFX   = tc0180vcu.GFX_BG0;   RAM_MSK   = tc0180vcu.GFX_BG0_MSK;   tile_mask = tc0180vcu.tile_mask;   sx_1      = tc0180vcu.bmp_x - 16;   sy_1      = tc0180vcu.bmp_y - 16;   sx_2      = tc0180vcu.bmp_x + tc0180vcu.bmp_w;   sy_2      = tc0180vcu.bmp_y + tc0180vcu.bmp_h;   ofs_x     = tc0180vcu.bmp_x - tc0180vcu.scr_x;   ofs_y     = (tc0180vcu.bmp_y + tc0180vcu.bmp_h) + tc0180vcu.scr_y;   if(tc0180vcu.RAM_2){   if(ReadWord(&tc0180vcu.RAM_2[0x0E])&0x0100){      pixel_blit=1;   }   else{      if(pixel_blit) clear(pixel_bitmap);      map_count=0;      pixel_blit=0;      memset(mapped,255,256);   }   }   else{      pixel_blit=0;   }   if(pixel_blit){   if(tp==0){      bitmap_store = GameBitmap;      GameBitmap = pixel_bitmap;      init_spr16x16asm();   zz = 0x1FF0;   do{   y        = (ofs_y-ReadWord(&RAM_BG[zz+4]))&OBJ_X_MASK;   x_store  = (ofs_x+ReadWord(&RAM_BG[zz+6]))&OBJ_Y_MASK;   ry       = RAM_BG[zz+11]&0x1F;   rx_store = RAM_BG[zz+10]&0x1F;   zoom_dat_x = zoom16_ofs+(RAM_BG[zz+8]<<5);   zoom_dat_y = zoom16_ofs+(RAM_BG[zz+9]<<5);   ty = ry;   do{   x  = x_store;   rx = rx_store;   tx = 0;   zy = zoom_dat_y[ty--];   y  = (y-zy)&OBJ_X_MASK;   do{      zx = zoom_dat_x[tx++];      if((x > sx_1) && (x < sx_2)){      if((y > sy_1) && (y < sy_2)){      tc = RAM_BG[2+zz]&0x3F;      //if((tc&0x01)==tp){      ta=ReadWord(&RAM_BG[zz])&tile_mask;      if(RAM_MSK[ta]!=0){			// No pixels; skip      tc = col_remap[2][tc];      if(mapped[tc] == 255 ){         mapped[tc] = map_count;         mapping[map_count>>4] = tc;         map_count += 16;         map_count &= 255;      }      map = &map_data[mapped[tc]];         if(RAM_MSK[ta]==1){			// Some pixels; trans            switch(RAM_BG[zz+3]&0xC0){               case 0x00: Draw16x16_Trans_Mapped_ZoomXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);        break;               case 0x80: Draw16x16_Trans_Mapped_ZoomXY_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0x40: Draw16x16_Trans_Mapped_ZoomXY_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0xC0: Draw16x16_Trans_Mapped_ZoomXY_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy); break;            }         }         else{					// all pixels; solid            switch(RAM_BG[zz+3]&0xC0){               case 0x00: Draw16x16_Mapped_ZoomXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);        break;               case 0x80: Draw16x16_Mapped_ZoomXY_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0x40: Draw16x16_Mapped_ZoomXY_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0xC0: Draw16x16_Mapped_ZoomXY_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy); break;            }         }      }//}      }      }      x = (x+zx)&OBJ_Y_MASK;      zz -= 16;   }while(rx--);   }while(ry--);   }while(zz>=0);   for(ta=0;ta<map_count;ta+=16){      MAP_PALETTE_MAPPED_NEW(         mapping[ta>>4],         16,         map      );      for(tc=0;tc<16;tc++)         map_bored[tc+ta]=map[tc];   }      GameBitmap = bitmap_store;      init_spr16x16asm();   for(ty=32;(UINT32)ty<32+tc0180vcu.bmp_h;ty++){   for(tx=32;(UINT32)tx<32+tc0180vcu.bmp_w;tx++){      GameBitmap->line[ty][tx] = map_bored[pixel_bitmap->line[ty][tx]];   }   }   }   }   else{   zz = 0x1FF0;   do{   y        = (ofs_y-ReadWord(&RAM_BG[zz+4]))&OBJ_X_MASK;   x_store  = (ofs_x+ReadWord(&RAM_BG[zz+6]))&OBJ_Y_MASK;   ry       = RAM_BG[zz+11]&0x1F;   rx_store = RAM_BG[zz+10]&0x1F;   zoom_dat_x = zoom16_ofs+(RAM_BG[zz+8]<<5);   zoom_dat_y = zoom16_ofs+(RAM_BG[zz+9]<<5);   ty = ry;   do{   x  = x_store;   rx = rx_store;   tx = 0;   zy = zoom_dat_y[ty--];   y  = (y-zy)&OBJ_X_MASK;   do{      zx = zoom_dat_x[tx++];      if((x > sx_1) && (x < sx_2)){      if((y > sy_1) && (y < sy_2)){      tc = RAM_BG[2+zz]&0x3F;      if((tc&0x01)==tp){      ta=ReadWord(&RAM_BG[zz])&tile_mask;      if(RAM_MSK[ta]!=0){			// No pixels; skip      MAP_PALETTE_MAPPED_NEW(         col_remap[2][tc],         16,         map      );         if(RAM_MSK[ta]==1){			// Some pixels; trans            switch(RAM_BG[zz+3]&0xC0){               case 0x00: Draw16x16_Trans_Mapped_ZoomXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);        break;               case 0x80: Draw16x16_Trans_Mapped_ZoomXY_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0x40: Draw16x16_Trans_Mapped_ZoomXY_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0xC0: Draw16x16_Trans_Mapped_ZoomXY_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy); break;            }         }         else{					// all pixels; solid            switch(RAM_BG[zz+3]&0xC0){               case 0x00: Draw16x16_Mapped_ZoomXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);        break;               case 0x80: Draw16x16_Mapped_ZoomXY_FlipY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0x40: Draw16x16_Mapped_ZoomXY_FlipX_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0xC0: Draw16x16_Mapped_ZoomXY_FlipXY_Rot(&RAM_GFX[ta<<8],x,y,map,zx,zy); break;            }         }      }}      }      }      x = (x+zx)&OBJ_Y_MASK;      zz -= 16;   }while(rx--);   }while(ry--);   }while(zz>=0);   }}/******************************************************************************/

⌨️ 快捷键说明

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