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

📄 tc004vcu.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
   WriteWord(&RAM_GFX_HG0B[addr],data);   // Write to 8x8 GFX   // ----------------   addr=addr<<2;   GFX_HG0[addr+0]=(GFX_HG0[addr+0]&0x03)|(((data&0x8000)>>15)<<3)|(((data&0x0080)>>7)<<2);   GFX_HG0[addr+1]=(GFX_HG0[addr+1]&0x03)|(((data&0x4000)>>14)<<3)|(((data&0x0040)>>6)<<2);   GFX_HG0[addr+2]=(GFX_HG0[addr+2]&0x03)|(((data&0x2000)>>13)<<3)|(((data&0x0020)>>5)<<2);   GFX_HG0[addr+3]=(GFX_HG0[addr+3]&0x03)|(((data&0x1000)>>12)<<3)|(((data&0x0010)>>4)<<2);   GFX_HG0[addr+4]=(GFX_HG0[addr+4]&0x03)|(((data&0x0800)>>11)<<3)|(((data&0x0008)>>3)<<2);   GFX_HG0[addr+5]=(GFX_HG0[addr+5]&0x03)|(((data&0x0400)>>10)<<3)|(((data&0x0004)>>2)<<2);   GFX_HG0[addr+6]=(GFX_HG0[addr+6]&0x03)|(((data&0x0200)>>9)<<3)|(((data&0x0002)>>1)<<2);   GFX_HG0[addr+7]=(GFX_HG0[addr+7]&0x03)|(((data&0x0100)>>8)<<3)|(((data&0x0001)>>0)<<2);   }}/******************************************************************************/void tc0004vcu_render_bg0(void){   int x,y,x16,y16,zzzz,zzz,zz;   UINT8 *map;   UINT8 *RAM_BG;   UINT8 *RAM_BG_B;   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    = tc0004vcu.RAM + 0x0C000;   RAM_BG_B  = tc0004vcu.RAM + 0x1C000;   RAM_SCR   = tc0004vcu.RAM + 0x20802;   RAM_GFX   = tc0004vcu.GFX_BG0;   tile_mask = tc0004vcu.tile_mask;   bmp_x = tc0004vcu.bmp_x;   bmp_y = tc0004vcu.bmp_y;   bmp_w = tc0004vcu.bmp_w;   bmp_h = tc0004vcu.bmp_h;   scr_x = tc0004vcu.scr_x;   scr_y = tc0004vcu.scr_y;      MAKE_SCROLL_1024x1024_2_16(         scr_x-(ReadWord(RAM_SCR+0)),         scr_y+(ReadWord(RAM_SCR+4))      );      START_SCROLL_1024x1024_2_16(bmp_x,bmp_y,bmp_w,bmp_h);         MAP_PALETTE_MAPPED_NEW(            RAM_BG_B[zz]&0x3F,            16,            map         );      switch(RAM_BG_B[zz]&0xC0){         case 0x00: Draw16x16_Mapped_Rot(&RAM_GFX[(ReadWord(&RAM_BG[zz])&tile_mask)<<8],x,y,map);        break;         case 0x40: Draw16x16_Mapped_FlipY_Rot(&RAM_GFX[(ReadWord(&RAM_BG[zz])&tile_mask)<<8],x,y,map);  break;         case 0x80: 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 tc0004vcu_render_bg1(void){   int x,y,x16,y16,zzzz,zzz,zz,ta;   UINT8 *map;   UINT8 *RAM_BG;   UINT8 *RAM_BG_B;   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    = tc0004vcu.RAM + 0x0E000;   RAM_BG_B  = tc0004vcu.RAM + 0x1E000;   RAM_SCR   = tc0004vcu.RAM + 0x20804;   RAM_GFX   = tc0004vcu.GFX_BG0;   RAM_MSK   = tc0004vcu.GFX_BG0_MSK;   tile_mask = tc0004vcu.tile_mask;   bmp_x = tc0004vcu.bmp_x;   bmp_y = tc0004vcu.bmp_y;   bmp_w = tc0004vcu.bmp_w;   bmp_h = tc0004vcu.bmp_h;   scr_x = tc0004vcu.scr_x;   scr_y = tc0004vcu.scr_y;      MAKE_SCROLL_1024x1024_2_16(         scr_x-(ReadWord(RAM_SCR+0)),         scr_y+(ReadWord(RAM_SCR+4))      );      START_SCROLL_1024x1024_2_16(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(            RAM_BG_B[zz]&0x3F,            16,            map         );         if(RAM_MSK[ta]==1){			// Some pixels; trans            switch(RAM_BG_B[zz]&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_B[zz]&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_1024x1024_2_16();}void tc0004vcu_render_fg0(void){   int x,y,x16,y16,zzzz,zzz,zz,ta,tx;   UINT8 *map;   UINT8 *RAM_BG;   UINT8 *RAM_SCR;   UINT8 *GFX_BG;   UINT32 bmp_x,bmp_y,bmp_w,bmp_h;   UINT32 scr_x,scr_y;   RAM_BG    = tc0004vcu.RAM + 0x01000;   RAM_SCR   = tc0004vcu.RAM + 0x2080A;   GFX_BG    = tc0004vcu.GFX_FG0;   bmp_x = tc0004vcu.bmp_x;   bmp_y = tc0004vcu.bmp_y;   bmp_w = tc0004vcu.bmp_w;   bmp_h = tc0004vcu.bmp_h;   scr_x = tc0004vcu.scr_x;   scr_y = tc0004vcu.scr_y;   tx = 64-(bmp_w>>3);      MAKE_SCROLL_512x512_1_8(         scr_x, //-(ReadWord(RAM_SCR+0)),         scr_y  //+(ReadWord(RAM_SCR+4))      );      zz=zzzz;      for(y=bmp_y;(UINT32)y<(bmp_h+bmp_y);y+=8,zz+=tx){      for(x=bmp_x;(UINT32)x<(bmp_w+bmp_x);x+=8,zz++){      ta=RAM_BG[zz^1];      if(ta!=0){				// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            32,            16,            map         );         Draw8x8_Trans_Mapped_Rot(&GFX_BG[ta<<6],x,y,map);      }      }      }}static UINT32 chain_y_size[4] ={   1,	// 64x16: OK   2,	// 64x32: ?   4,	// 64x64: OK   4,	// 64x64: ?};void tc0004vcu_render_obj(void){   int x,y,zz,ta,td;   int rx,ry,x_store,zx,zy;   UINT8 *zoom_dat_x;   UINT8 *zoom_dat_y;   UINT8 *zdx_store;   UINT8 *map;   UINT8 *RAM_BG;   UINT8 *RAM_GFX;   UINT8 *RAM_MSK;   UINT8 *RAM_CH;   UINT8 *RAM_CH_B;   UINT32 tile_mask;   int sx_1,sy_1,sx_2,sy_2;   int ofs_x,ofs_y;   RAM_BG    = tc0004vcu.RAM + 0x20400;   RAM_GFX   = tc0004vcu.GFX_BG0;   RAM_MSK   = tc0004vcu.GFX_BG0_MSK;   RAM_CH    = tc0004vcu.RAM + 0x00000;   RAM_CH_B  = tc0004vcu.RAM + 0x10000;   tile_mask = tc0004vcu.tile_mask;   sx_1      = tc0004vcu.bmp_x;   sy_1      = tc0004vcu.bmp_y;   sx_2      = tc0004vcu.bmp_x + tc0004vcu.bmp_w;   sy_2      = tc0004vcu.bmp_y + tc0004vcu.bmp_h;   ofs_x     = tc0004vcu.bmp_x - tc0004vcu.scr_x;   ofs_y     = tc0004vcu.bmp_y - tc0004vcu.scr_y;   zz = 0x03F0;   do{      if(ReadWord(&RAM_BG[zz+4])!=0x0000){   x_store    = (ofs_x+ReadWord(&RAM_BG[zz+2]))&OBJ_X_MASK;   y          = (ofs_y+ReadWord(&RAM_BG[zz+0]))&OBJ_Y_MASK;   td         = ((ReadWord(&RAM_BG[zz+6])&0x1FFF)<<3);   zdx_store  = zoom16_ofs+(zoom_conv_x[(RAM_BG[zz+5]&0x7F)]<<2);   //zoom_dat_y = zoom16_ofs+(zoom_conv_y[(RAM_BG[zz+4]&0x7F)]<<2);   zoom_dat_y = zoom16_ofs+(zoom_conv_x[(RAM_BG[zz+5]&0x7F)]<<2);   ry         = chain_y_size[(ReadWord(&RAM_BG[zz])>>10)&0x03];   do{   x          = x_store;   rx         = 4;   zoom_dat_x = zdx_store;   zy         = *zoom_dat_y++;   do{      zx = *zoom_dat_x++;      if(((x+zx) > sx_1) && (x < sx_2)){      if(((y+zy) > sy_1) && (y < sy_2)){      ta=ReadWord(&RAM_CH[td])&tile_mask;      if(RAM_MSK[ta]!=0){			// No pixels; skip      MAP_PALETTE_MAPPED_NEW(         RAM_CH_B[td]&0x3F,         16,         map      );         if(RAM_MSK[ta]==1){			// Some pixels; trans            switch(RAM_CH_B[td]&0xC0){               case 0x00: Draw16x16_32_Trans_Mapped_ZoomXY(&RAM_GFX[ta<<8],x,y,map,zx,zy);        break;               case 0x40: Draw16x16_32_Trans_Mapped_ZoomXY_FlipY(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0x80: Draw16x16_32_Trans_Mapped_ZoomXY_FlipX(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0xC0: Draw16x16_32_Trans_Mapped_ZoomXY_FlipXY(&RAM_GFX[ta<<8],x,y,map,zx,zy); break;            }         }         else{					// all pixels; solid            switch(RAM_CH_B[td]&0xC0){               case 0x00: Draw16x16_32_Mapped_ZoomXY(&RAM_GFX[ta<<8],x,y,map,zx,zy);        break;               case 0x40: Draw16x16_32_Mapped_ZoomXY_FlipY(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0x80: Draw16x16_32_Mapped_ZoomXY_FlipX(&RAM_GFX[ta<<8],x,y,map,zx,zy);  break;               case 0xC0: Draw16x16_32_Mapped_ZoomXY_FlipXY(&RAM_GFX[ta<<8],x,y,map,zx,zy); break;            }         }      }      }      }      x = (x+zx)&OBJ_X_MASK;      td += 2;   }while(--rx);   y = (y+zy)&OBJ_Y_MASK;   }while(--ry);   }   }while((zz-=8)>=0);}/******************************************************************************/

⌨️ 快捷键说明

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