?? terraf.c
字號:
AddReadWord(0x000000, 0x04FFFF, NULL, ROM+0x000000); // 68000 ROM AddReadWord(0x060000, 0x07FFFF, NULL, RAM+0x000000); // ALL RAM AddReadWord(-1, -1,NULL, NULL); AddWriteByte(0x060000, 0x07FFFF, NULL, RAM+0x000000); // ALL RAM AddWriteByte(0x0C0000, 0x0C000F, NULL, RAM+0x020000); // ??? AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByte(-1, -1, NULL, NULL); AddWriteWord(0x060000, 0x07FFFF, NULL, RAM+0x000000); // ALL RAM AddWriteWord(0xBB0000, 0xBB0001, NichiSoundCommWrite68k, NULL); // SOUND COMM AddWriteWord(-1, -1, NULL, NULL); AddInitMemory(); // Set Starscream mem pointers...}void ClearTerraF(void){ RemoveNichibutsuYM3526();}void ExecuteTerraFFrame(void){ cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60)); // M68000 12MHz (60fps) cpu_interrupt(CPU_68K_0, 1); Nichibutsu3526_Frame(); // Z80 and YM3526}void DrawTerraF(void){ UINT8 *map; int x,y,ta,zz,zzz,zzzz,x16,y16; ClearPaletteMap(); // BG0 // --- if(((zzz=ReadWord(RAM_SCR))&0x0200)==0){ clear_game_screen(0); // Game has no solid BG0 } else{ zzz=15+(ReadWord(&RAM[0x1C004])); zzzz=((zzz&0x1F0)>>4)<<1; // X Offset (16-511) x16=15-(zzz&15); // X Offset (0-15) zzz=95+(ReadWord(&RAM[0x1C002])); zzzz+=((zzz&0x3F0)>>4)<<6; // Y Offset (16-511) y16=15-(zzz&15); // Y Offset (0-15) zzzz&=0xFFF; for(x=(16+y16);x<(320+32);x+=16){ zz=zzzz; for(y=(16+x16);y<(224+32);y+=16){ MAP_PALETTE_MAPPED( Map_12bit_xxxxRRRRGGGGBBBB_Rev, (RAM[0x14001+zz]>>3)|0x60, 16, map ); Draw16x16_Mapped(&GFX_BG0[(ReadWord(&RAM[0x14000+zz])&0x3FF)<<8],x,y,map); zz+=2; if((zz&0x3F)==0){zz-=0x40;} } zzzz+=0x40; zzzz&=0xFFF; } } // OBJECT LOW // ---------- if(((zzz=ReadWord(RAM_SCR))&0x0800)!=0){ for(zz=0;zz<0x600;zz+=8){ if((ReadWord(&RAM[zz+0])&0x1000)==0){ ta=ReadWord(&RAM[zz+2])&0x3FF; if(MSK_SPR[ta]!=0){ // No pixels; skip y=((320+32+32) - ReadWord(&RAM[zz+0]))&0x1FF; x=(ReadWord(&RAM[zz+6]) - (32+32))&0x1FF; if((x>16)&&(y>16)&&(x<320+32)&&(y<224+32)){ MAP_PALETTE_MAPPED( Map_12bit_xxxxRRRRGGGGBBBB_Rev, (RAM[zz+5]&0x1F)|0x20, 16, map ); if(MSK_SPR[ta]==1){ // Some pixels; trans switch(RAM[zz+3]&0x30){ case 0x00: Draw16x16_Trans_Mapped(&GFX_SPR[ta<<8],x,y,map); break; case 0x10: Draw16x16_Trans_Mapped_FlipX(&GFX_SPR[ta<<8],x,y,map); break; case 0x20: Draw16x16_Trans_Mapped_FlipY(&GFX_SPR[ta<<8],x,y,map); break; case 0x30: Draw16x16_Trans_Mapped_FlipXY(&GFX_SPR[ta<<8],x,y,map); break; } } else{ // all pixels; solid switch(RAM[zz+3]&0x30){ case 0x00: Draw16x16_Mapped(&GFX_SPR[ta<<8],x,y,map); break; case 0x10: Draw16x16_Mapped_FlipX(&GFX_SPR[ta<<8],x,y,map); break; case 0x20: Draw16x16_Mapped_FlipY(&GFX_SPR[ta<<8],x,y,map); break; case 0x30: Draw16x16_Mapped_FlipXY(&GFX_SPR[ta<<8],x,y,map); break; } } } } } } } // BG1 // --- if(((zzz=ReadWord(RAM_SCR))&0x0400)!=0){ zzz=15+((RAM[0x1C007])|(((RAM[0x1D001]>>0)&3)<<8)); zzzz=((zzz&0x1F0)>>4)<<1; // X Offset (16-511) x16=15-(zzz&15); // X Offset (0-15) zzz=95+((RAM[0x1C009])|(((RAM[0x1D001]>>4)&3)<<8)); zzzz+=((zzz&0x3F0)>>4)<<6; // Y Offset (16-511) y16=15-(zzz&15); // Y Offset (0-15) zzzz&=0xFFF; for(x=(16+y16);x<(320+32);x+=16){ zz=zzzz; for(y=(16+x16);y<(224+32);y+=16){ ta=ReadWord(&RAM[0x10000+zz])&0x3FF; if(MSK_BG1[ta]!=0){ // No pixels; skip MAP_PALETTE_MAPPED( Map_12bit_xxxxRRRRGGGGBBBB_Rev, (RAM[0x10001+zz]>>3)|0x40, 16, map ); if(MSK_BG1[ta]==1){ // Some pixels; trans Draw16x16_Trans_Mapped(&GFX_BG1[ta<<8],x,y,map); } else{ // all pixels; solid Draw16x16_Mapped(&GFX_BG1[ta<<8],x,y,map); } } zz+=2; if((zz&0x3F)==0){zz-=0x40;} } zzzz+=0x40; zzzz&=0xFFF; } } // OBJECT HIGH // ----------- if(((zzz=ReadWord(RAM_SCR))&0x0800)!=0){ for(zz=0;zz<0x600;zz+=8){ if((ReadWord(&RAM[zz+0])&0x1000)!=0){ ta=ReadWord(&RAM[zz+2])&0x3FF; if(MSK_SPR[ta]!=0){ // No pixels; skip y=((320+32+32) - ReadWord(&RAM[zz+0]))&0x1FF; x=(ReadWord(&RAM[zz+6]) - (32+32))&0x1FF; if((x>16)&&(y>16)&&(x<320+32)&&(y<224+32)){ MAP_PALETTE_MAPPED( Map_12bit_xxxxRRRRGGGGBBBB_Rev, (RAM[zz+5]&0x1F)|0x20, 16, map ); if(MSK_SPR[ta]==1){ // Some pixels; trans switch(RAM[zz+3]&0x30){ case 0x00: Draw16x16_Trans_Mapped(&GFX_SPR[ta<<8],x,y,map); break; case 0x10: Draw16x16_Trans_Mapped_FlipX(&GFX_SPR[ta<<8],x,y,map); break; case 0x20: Draw16x16_Trans_Mapped_FlipY(&GFX_SPR[ta<<8],x,y,map); break; case 0x30: Draw16x16_Trans_Mapped_FlipXY(&GFX_SPR[ta<<8],x,y,map); break; } } else{ // all pixels; solid switch(RAM[zz+3]&0x30){ case 0x00: Draw16x16_Mapped(&GFX_SPR[ta<<8],x,y,map); break; case 0x10: Draw16x16_Mapped_FlipX(&GFX_SPR[ta<<8],x,y,map); break; case 0x20: Draw16x16_Mapped_FlipY(&GFX_SPR[ta<<8],x,y,map); break; case 0x30: Draw16x16_Mapped_FlipXY(&GFX_SPR[ta<<8],x,y,map); break; } } } } } } } // FG0 // --- if(((zzz=ReadWord(RAM_SCR))&0x0100)!=0){ zz=64*2; for(y=224+24;y>=32;y-=8){ for(x=32+32;x<256+32+32;x+=8){ ta=(((RAM[0x8800+zz]&3)<<14)|((RAM[0x8000+zz])<<6)); if(ta!=0){ MAP_PALETTE_MAPPED( Map_12bit_xxxxRRRRGGGGBBBB_Rev, (RAM[0x8800+zz]>>4), 16, map ); Draw8x8_Trans_Mapped(&GFX_FG0[ta],x,y,map); } zz+=2; } } zz=64*2; for(y=224+24;y>=32;y-=8){ for(x=0+32;x<32+32;x+=8){ ta=(((RAM[0x9800+zz+0x38]&3)<<14)|((RAM[0x9000+zz+0x38])<<6)); if(ta!=0){ MAP_PALETTE_MAPPED( Map_12bit_xxxxRRRRGGGGBBBB_Rev, (RAM[0x9800+zz+0x38]>>4), 16, map ); Draw8x8_Trans_Mapped(&GFX_FG0[ta],x,y,map); } ta=(((RAM[0x9800+zz]&3)<<14)|((RAM[0x9000+zz])<<6)); if(ta!=0){ MAP_PALETTE_MAPPED( Map_12bit_xxxxRRRRGGGGBBBB_Rev, (RAM[0x9800+zz]>>4), 16, map ); Draw8x8_Trans_Mapped(&GFX_FG0[ta],x+256+32,y,map); } zz+=2; } zz+=56; } }}/*-----+--------+--------------------Byte | Bit(s) | Info-----+76543210+-------------------- 0 |....xxxx| Sprite Y (high) 1 |xxxxxxxx| Sprite Y (low) 2 |...x....| Sprite Flip X Axis 2 |..x.....| Sprite Flip Y Axis 2 |......xx| Sprite Number (high) 3 |xxxxxxxx| Sprite Number (low) 4 |...xxxxx| Colour Bank 6 |xxxxxxxx| Sprite X (high) 7 |xxxxxxxx| Sprite X (low) -----+--------+--------------------*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -