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

📄 tc002obj.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
字号:
/******************************************************************************//*                                                                            *//*                 tc0002obj: TAITO OBJECT LAYER CHIP (OBJ)                   *//*                                                                            *//******************************************************************************/#include "gameinc.h"#include "tc002obj.h"/*NOTE:Correct name of this chip is unknown, so I'll call it tc0002obj for nowOBJECT RAM----------- 8 bytes/sprite- 256 sprites (0x800 bytes)- First sprite has *highest* priority-----+--------+-------------------------Byte | Bit(s) | Use-----+76543210+-------------------------  0  |.x......| Flip Y Axis  0  |x.......| Flip X Axis  1  |....xxxx| Colour Bank  2  |.......x| Sprite Y  3  |xxxxxxxx| Sprite Y  4  |...xxxxx| Sprite Tile  5  |xxxxxxxx| Sprite Tile  6  |.......x| Sprite X  7  |xxxxxxxx| Sprite X-----+--------+-------------------------SPRITE CONTROL--------------- Maze of Flott [603D MASK] 201C 200B 200F- Earth Joker 001C- Cadash 0011 0013 0010 0000-----+--------+-------------------------Byte | Bit(s) | Use-----+76543210+-------------------------  0  |.......x| ?  0  |......x.| Write Acknowledge?  0  |..xxxx..| Colour Bank Offset  0  |xx......| Unused  1  |...xxxxx| Unused  1  |..x.....| BG1:Sprite Priority  1  |.x......| Priority?  1  |x.......| Unused-----+--------+-------------------------OLD SPRITE CONTROL (RASTAN TYPE)-------------------------------------+--------+-------------------------Byte | Bit(s) | Use-----+76543210+-------------------------  1  |.......x| BG1:Sprite Priority?  1  |......x.| Write Acknowledge?  1  |xxx.....| Colour Bank Offset-----+--------+-------------------------UINT16 tc0002obj_conv_ctrl(UINT16 src){   UOWRD ta;   ta  = (src & 0x01) << 13;		// BG1:Sprite Priority   ta |= (src & 0xE0) >> 3;		// Colour Bank Offset   return ta;}Direct Mapped Games:Bonze Adventure/Jigoku  - OKCadash/Cadash Italian   - OKOperation Wolf          - OKRastan                  - ?Rainbow Islands         - ?Mapped Rotate 270 Games:Maze of Flott           - OKEarth Joker             - OKAsuka & Asuka           - OKVolfied                 - ?*//******************************************************************************/void render_tc0002obj_mapped(void){   int zz,x,y,ta;   UINT8 *map;   UINT8 *RAM_BG;   UINT8 *RAM_GFX;   UINT8 *RAM_MSK;   int sx_1,sy_1,sx_2,sy_2;   int ofs_x,ofs_y;   UINT32 tile_mask;   UINT32 spr_col;   RAM_BG    = tc0002obj.RAM;   RAM_GFX   = tc0002obj.GFX;   RAM_MSK   = tc0002obj.MASK;   tile_mask = tc0002obj.tile_mask;   sx_1      = tc0002obj.bmp_x - 16;   sy_1      = tc0002obj.bmp_y - 16;   sx_2      = tc0002obj.bmp_x + tc0002obj.bmp_w;   sy_2      = tc0002obj.bmp_y + tc0002obj.bmp_h;   ofs_x     = tc0002obj.bmp_x + tc0002obj.ofs_x;   ofs_y     = tc0002obj.bmp_y + tc0002obj.ofs_y;   spr_col   = ( tc0002obj.ctrl << 2) & 0xF0;   zz=0x7F8;   do{   x=(ofs_x+ReadWord(&RAM_BG[zz+6]))&0x1FF;   if((x > sx_1) && (x < sx_2)){   y=(ofs_y+ReadWord(&RAM_BG[zz+2]))&0x1FF;   if((y > sy_1) && (y < sy_2)){      ta=ReadWord(&RAM_BG[zz+4])&tile_mask;      if(RAM_MSK[ta]!=0){                        // No pixels; skip         MAP_PALETTE_MAPPED_NEW(            (RAM_BG[zz]&0x0F)|spr_col,            16,            map         );         if(RAM_MSK[ta]==1){                        // Some pixels; trans            switch(RAM_BG[1+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[1+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;            }         }      }   }   }   }while((zz-=8)>=0);}/******************************************************************************/void render_tc0002obj_mapped_r270(void){   int zz,x,y,ta;   UINT8 *map;   UINT8 *RAM_BG;   UINT8 *RAM_GFX;   UINT8 *RAM_MSK;   int sx_1,sy_1,sx_2,sy_2;   int ofs_x,ofs_y;   UINT32 tile_mask;   UINT32 spr_col;   RAM_BG    = tc0002obj.RAM;   RAM_GFX   = tc0002obj.GFX;   RAM_MSK   = tc0002obj.MASK;   tile_mask = tc0002obj.tile_mask;   sx_1      = tc0002obj.bmp_x - 16;   sy_1      = tc0002obj.bmp_y - 16;   sx_2      = tc0002obj.bmp_x + tc0002obj.bmp_w;   sy_2      = tc0002obj.bmp_y + tc0002obj.bmp_h;   ofs_x     = tc0002obj.bmp_x + tc0002obj.ofs_x;   ofs_y     = (tc0002obj.bmp_y + tc0002obj.bmp_h - 16) - tc0002obj.ofs_y;   spr_col   = ( tc0002obj.ctrl << 2) & 0xF0;   zz=0x7F8;   do{   x=(ofs_x+ReadWord(&RAM_BG[zz+2]))&0x1FF;   if((x > sx_1) && (x < sx_2)){   y=(ofs_y-ReadWord(&RAM_BG[zz+6]))&0x1FF;   if((y > sy_1) && (y < sy_2)){      ta=ReadWord(&RAM_BG[zz+4])&tile_mask;      if(RAM_MSK[ta]!=0){                        // No pixels; skip         MAP_PALETTE_MAPPED_NEW(            (RAM_BG[zz]&0x0F)|spr_col,            16,            map         );         if(RAM_MSK[ta]==1){                        // Some pixels; trans            switch(RAM_BG[1+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[1+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;            }         }      }   }   }   }while((zz-=8)>=0);}/******************************************************************************/

⌨️ 快捷键说明

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