📄 biomtoy.c
字号:
// ---------- MAKE_SCROLL_512x512_4_16( ReadWord(&RAM[0x8006]), ReadWord(&RAM[0x8004])+16 ); START_SCROLL_512x512_4_16(32,32,320,240); ta = (ReadWord( &RAM_VIDEO[zz+0x1000] ) >> 2); if( GFX_TILE16_SOLID[ta] ){ MAP_PALETTE_MAPPED_NEW( RAM_VIDEO[zz+0x1000+2] & 0x3F , // bank 16, map ); if(GFX_TILE16_SOLID[ta]==1){ // Some pixels; trans switch( RAM_VIDEO[zz+0x1000] & 0x03){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x01: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x02: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x03: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; } }else{ switch( RAM_VIDEO[zz+0x1000] & 0x03){ // all pixels; solid case 0x00: Draw16x16_Mapped_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x01: Draw16x16_Mapped_FlipY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x02: Draw16x16_Mapped_FlipX_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x03: Draw16x16_Mapped_FlipXY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; } } } END_SCROLL_512x512_4_16(); // SCREEN 0 // ---------- MAKE_SCROLL_512x512_4_16( ReadWord(&RAM[0x8002])+4, // offset ReadWord(&RAM[0x8000])+16 ); START_SCROLL_512x512_4_16(32,32,320,240); ta = (ReadWord( &RAM_VIDEO[zz] ) >> 2); if( GFX_TILE16_SOLID[ta] ){ MAP_PALETTE_MAPPED_NEW( RAM_VIDEO[zz+2] & 0x3F , 16, map ); if(GFX_TILE16_SOLID[ta]==1){ // Some pixels; trans switch(RAM_VIDEO[zz] & 0x03){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x01: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x02: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x03: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; } }else{ switch(RAM_VIDEO[zz] & 0x03){ // all pixels; solid case 0x00: Draw16x16_Mapped_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x01: Draw16x16_Mapped_FlipY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x02: Draw16x16_Mapped_FlipX_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x03: Draw16x16_Mapped_FlipXY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; } } } END_SCROLL_512x512_4_16(); // SPRITES // --------- for(zz=6;zz<0x1000-6;zz+=8){ y = 240 - RAM_SPR[zz]; y += (y< 0) ? 0x110 : 0x10; if( (y>16) && (y<240+32) ){ ta = (ReadWord(&RAM_SPR[zz+6]) >> 2); if(GFX_CHAR16_SOLID[ta]){ // No pixels; skip x = 32 + (ReadWord(&RAM_SPR[zz+4])&0x1FF) - 15; if((x>16)&&(x<320+32)){ MAP_PALETTE_MAPPED_NEW( (RAM_SPR[zz+5] & 0x7E) >> 1, 16, map ); if(GFX_CHAR16_SOLID[ta]==1){ // Some pixels; trans switch(RAM_SPR[zz+1]&0xC0){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; case 0x40: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; case 0x80: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; } } else{ // all pixels; solid switch(RAM_SPR[zz+1]&0xC0){ case 0x00: Draw16x16_Mapped_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; case 0x40: Draw16x16_Mapped_FlipY_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; case 0x80: Draw16x16_Mapped_FlipX_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; } } } } } } }void DrawManiacsq(void){ int zz,zzz,zzzz,x16,y16,x,y,ta; UINT8 *map; ClearPaletteMap(); // We do not clear the screen because otherwise text doesn't work properly // SCREEN 0 // ---------- MAKE_SCROLL_512x512_4_16( ReadWord(&RAM[0x8002])+4, // offset ReadWord(&RAM[0x8000])+16 ); START_SCROLL_512x512_4_16(32,32,320,240); ta = (ReadWord( &RAM_VIDEO[zz] ) >> 2)&0x1FFF; if( GFX_TILE16_SOLID[ta] ){ MAP_PALETTE_MAPPED_NEW( RAM_VIDEO[zz+2] & 0x3F , 16, map ); if(GFX_TILE16_SOLID[ta]==1){ // Some pixels; trans switch(RAM_VIDEO[zz] & 0x03){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x01: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x02: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x03: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; } }else{ switch(RAM_VIDEO[zz] & 0x03){ // all pixels; solid case 0x00: Draw16x16_Mapped_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x01: Draw16x16_Mapped_FlipY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x02: Draw16x16_Mapped_FlipX_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x03: Draw16x16_Mapped_FlipXY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; } } } END_SCROLL_512x512_4_16(); // SCREEN 1 // ---------- MAKE_SCROLL_512x512_4_16( ReadWord(&RAM[0x8006]), ReadWord(&RAM[0x8004])+16 ); START_SCROLL_512x512_4_16(32,32,320,240); ta = (ReadWord( &RAM_VIDEO[zz+0x1000] ) >> 2)&0x1FFF; if( GFX_TILE16_SOLID[ta] ){ MAP_PALETTE_MAPPED_NEW( RAM_VIDEO[zz+0x1000+2] & 0x3F , // bank 16, map ); if(GFX_TILE16_SOLID[ta]==1){ // Some pixels; trans switch( RAM_VIDEO[zz+0x1000] & 0x03){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x01: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x02: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x03: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; } }else{ switch( RAM_VIDEO[zz+0x1000] & 0x03){ // all pixels; solid case 0x00: Draw16x16_Mapped_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x01: Draw16x16_Mapped_FlipY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x02: Draw16x16_Mapped_FlipX_Rot(&GFX_TILE16[ta<<8], x, y, map); break; case 0x03: Draw16x16_Mapped_FlipXY_Rot(&GFX_TILE16[ta<<8], x, y, map); break; } } } END_SCROLL_512x512_4_16(); // SPRITES // --------- for(zz=6;zz<0x1000-6;zz+=8){ y = 240 - RAM_SPR[zz]; y += (y< 0) ? 0x110 : 0x10; if( (y>16) && (y<240+32) ){ ta = (ReadWord(&RAM_SPR[zz+6]) >> 2)&0x1FFF; if(GFX_CHAR16_SOLID[ta]){ // No pixels; skip x = 32 + (ReadWord(&RAM_SPR[zz+4])&0x1FF) - 15; if((x>16)&&(x<320+32)){ MAP_PALETTE_MAPPED_NEW( (RAM_SPR[zz+5] & 0x7E) >> 1, 16, map ); if(GFX_CHAR16_SOLID[ta]==1){ // Some pixels; trans switch(RAM_SPR[zz+1]&0xC0){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; case 0x40: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; case 0x80: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; } } else{ // all pixels; solid switch(RAM_SPR[zz+1]&0xC0){ case 0x00: Draw16x16_Mapped_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; case 0x40: Draw16x16_Mapped_FlipY_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; case 0x80: Draw16x16_Mapped_FlipX_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&GFX_CHAR16[ta<<8], x, y, map); break; } } } } } } }/***********************************************************************************************From MAME source: Tile format ----------- Screen 0 & 1: (32*32, 16x16 tiles) Byte | Bit(s) | Description -----+-FEDCBA98-76543210-+-------------------------- 0 | -------- -------x | flip x 0 | -------- ------x- | flip y 0 | -------- xxxxxx-- | code (low 6 bits) 0 | xxxxxxxx -------- | code (high 8 bits) 2 | -------- --xxxxxx | color 2 | -------- xx------ | priority 2 | xxxxxxxx -------- | not used Sprite Format ------------- Byte | Bit(s) | Description -----+-FEDCBA98-76543210-+-------------------------- 0 | -------- xxxxxxxx | y position 0 | -----xxx -------- | not used 0 | ----x--- -------- | sprite size 0 | --xx---- -------- | sprite priority 0 | -x------ -------- | flipx 0 | x------- -------- | flipy 2 | xxxxxxxx xxxxxxxx | not used 4 | -------x xxxxxxxx | x position 4 | -xxxxxx- -------- | sprite color 6 | -------- ------xx | sprite code (8x8 cuadrant) 6 | xxxxxxxx xxxxxx-- | sprite codeNotes- sprite size: if bit is on the sprite is 8x8, oteherwise it's 16x16 In biomtoy and maniacsq this bit is always off and it's not used in the driver- priority In biomtoy it's always 0. In maniacsq the priority changes but there's no need to draw the same plane with different priorities because swapping layers works good************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -