📄 tc180vcu.c
字号:
} 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 + -