?? wrestlef.c
字號:
GFX[tb+0]|=(((tc&0x80)>>7)<<2); GFX[tb+1]|=(((tc&0x40)>>6)<<2); GFX[tb+2]|=(((tc&0x20)>>5)<<2); GFX[tb+3]|=(((tc&0x10)>>4)<<2); GFX[tb+4]|=(((tc&0x08)>>3)<<2); GFX[tb+5]|=(((tc&0x04)>>2)<<2); GFX[tb+6]|=(((tc&0x02)>>1)<<2); GFX[tb+7]|=(((tc&0x01)>>0)<<2); GFX[tb+0]|=(((td&0x80)>>7)<<3); GFX[tb+1]|=(((td&0x40)>>6)<<3); GFX[tb+2]|=(((td&0x20)>>5)<<3); GFX[tb+3]|=(((td&0x10)>>4)<<3); GFX[tb+4]|=(((td&0x08)>>3)<<3); GFX[tb+5]|=(((td&0x04)>>2)<<3); GFX[tb+6]|=(((td&0x02)>>1)<<3); GFX[tb+7]|=(((td&0x01)>>0)<<3); tb+=16; if((tb&0xFF)==0){tb-=0xF8;} else{if((tb&0xFF)==8){tb-=8;}} } memset(RAM+0x00000,0x00,0x40000); memset(RAM+0x1C000,0xFF,0x01000); RAM_BG0 = RAM+0xA000; RAM_BG1 = RAM+0x8000; RAM_SPR = RAM+0x6000; RAM_FG0 = RAM+0x4000; GFX_BG0 = GFX+0x040000; GFX_BG0_SOLID = make_solid_mask_16x16(GFX_BG0, 0x1000); GFX_SPR_SOLID = make_solid_mask_16x16(GFX_SPR, 0x10000); GFX_FG0 = GFX+0x000000; GFX_FG0_SOLID = make_solid_mask_8x8(GFX_FG0, 0x1000); ROM[0xD2D1]=0x42; // Fix dodgy 24-bit addressing... ROM[0xD3B5]=0x42; // Fix dodgy 24-bit addressing... ROM[0xD827]=0x42; // Fix dodgy 24-bit addressing... ROM[0xD9AF]=0x42; // Fix dodgy 24-bit addressing... InitPaletteMap(RAM+0x0C000, 0x200, 0x10, 0x1000); set_colour_mapper(&col_map_xxxx_bbbb_gggg_rrrr);/* * Catch 68000 Interrupt wait */ WrestleFSpeedPatch();/* * StarScream Stuff follows */ ByteSwap(ROM,0x80000); ByteSwap(RAM,0x40000); AddMemFetch(0x000000, 0x07FFFF, ROM+0x000000-0x000000); // 68000 ROM AddMemFetch(-1, -1, NULL); AddReadByte(0x000000, 0x07FFFF, NULL, ROM+0x000000); // 68000 ROM AddReadByte(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000); // 68000 RAM AddReadByte(0x0C0000, 0x0C3FFF, NULL, RAM+0x004000); // SCREEN RAM AddReadByte(0x080000, 0x083FFF, NULL, RAM+0x008000); // OBJECT RAM AddReadByte(0x180000, 0x18FFFF, wf_colour_ram_rb, NULL); // PALETTE RAM AddReadByte(0x100000, 0x1000FF, NULL, RAM+0x02C000); // SCROLL AddReadByte(0x140000, 0x140FFF, NULL, RAM+0x01C000); // INPUT AddReadByte(-1, -1, NULL, NULL); AddReadWord(0x000000, 0x07FFFF, NULL, ROM+0x000000); // 68000 ROM AddReadWord(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000); // 68000 RAM AddReadWord(0x0C0000, 0x0C3FFF, NULL, RAM+0x004000); // SCREEN RAM AddReadWord(0x080000, 0x083FFF, NULL, RAM+0x008000); // OBJECT RAM AddReadWord(0x180000, 0x18FFFF, wf_colour_ram_rw, NULL); // PALETTE RAM AddReadWord(0x100000, 0x1000FF, NULL, RAM+0x02C000); // SCROLL AddReadWord(0x140000, 0x140FFF, NULL, RAM+0x01C000); // INPUT AddReadWord(-1, -1,NULL, NULL); AddWriteByte(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000); // 68000 RAM AddWriteByte(0x0C0000, 0x0C3FFF, NULL, RAM+0x004000); // SCREEN RAM AddWriteByte(0x080000, 0x083FFF, NULL, RAM+0x008000); // OBJECT RAM AddWriteByte(0x180000, 0x18FFFF, wf_colour_ram_wb, NULL); // PALETTE RAM AddWriteByte(0x140000, 0x140FFF, NULL, RAM+0x01C000); // INPUT AddWriteByte(0x100000, 0x1000FF, NULL, RAM+0x02C000); // SCROLL AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByte(-1, -1, NULL, NULL); AddWriteWord(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000); // 68000 RAM AddWriteWord(0x0C0000, 0x0C3FFF, NULL, RAM+0x004000); // SCREEN RAM AddWriteWord(0x080000, 0x083FFF, NULL, RAM+0x008000); // OBJECT RAM AddWriteWord(0x180000, 0x18FFFF, wf_colour_ram_ww, NULL); // PALETTE RAM AddWriteWord(0x140000, 0x140FFF, WFSoundWrite, NULL); // INPUT AddWriteWord(0x100000, 0x1000FF, NULL, RAM+0x02C000); // SCROLL AddWriteWord(-1, -1, NULL, NULL); AddInitMemory(); // Set Starscream mem pointers... }void ClearWrestleF(void){ #ifdef RAINE_DEBUG save_debug("ROM.bin",ROM,0x080000,1); save_debug("RAM.bin",RAM,0x040000,1); #endif}void ExecuteWrestleFFrame(void){ int ta; // DSW are mapped between several bytes, this quick // hack splits them and maps them in RAM[] ta=get_dsw(1); RAM[0x1C021]&=0xCF; RAM[0x1C021]|=(ta>>2)&0x30; RAM[0x1C023]&=0xC0; RAM[0x1C023]|=ta&0x3F; ta=get_dsw(0); RAM[0x1C025]&=0xC0; RAM[0x1C025]|=ta&0x3F; RAM[0x1C027]&=0xFC; RAM[0x1C027]|=(ta>>6)&0x03; RAM[0x1C027]^=4; cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(16,60)); // M68000 16MHz (60fps) cpu_interrupt(CPU_68K_0, 2); cpu_interrupt(CPU_68K_0, 3); TechnosSound_Frame(); // Z80; YM2151; OKI ADPCM}void RenderObject(void){ int zz,x,y,ta,nn; UINT8 *map; for(zz=0x0000;zz<0x1000;zz+=16){ if((RAM_SPR[zz+2]&0x01)!=0){ x = (32 + (RAM_SPR[zz+10] | ((RAM_SPR[zz+2]&4)<<6) ))&0x1FF; y = ((240+24) - (RAM_SPR[zz+0] | ((RAM_SPR[zz+2]&2)<<7) ))&0x1FF; MAP_PALETTE_MAPPED_NEW( (RAM_SPR[zz+8]&0x0F)|0x40, 16, map ); ta = ((RAM_SPR[zz+4]) | (RAM_SPR[zz+6]<<8)); nn = ((RAM_SPR[zz+2]>>5)&0x07)+1; switch(RAM_SPR[zz+2]&0x18){ case 0x00: do{ if((x>16)&&(y>16)&&(x<320+32)&&(y<240+32)){ if(GFX_SPR_SOLID[ta]!=0){ // No pixels; skip if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8], x, y, map); else Draw16x16_Mapped_Rot( &GFX_SPR[ta<<8], x, y, map); } } ta++; y-=16; }while(--nn); break; case 0x10: do{ if((x>16)&&(y>16)&&(x<320+32)&&(y<240+32)){ if(GFX_SPR_SOLID[ta]!=0){ // No pixels; skip if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_SPR[ta<<8], x, y, map); else Draw16x16_Mapped_FlipY_Rot( &GFX_SPR[ta<<8], x, y, map); } } ta++; y-=16; }while(--nn); break; case 0x08: y-=((nn-1)*16); do{ if((x>16)&&(y>16)&&(x<320+32)&&(y<240+32)){ if(GFX_SPR_SOLID[ta]!=0){ // No pixels; skip if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8], x, y, map); else Draw16x16_Mapped_FlipX_Rot( &GFX_SPR[ta<<8], x, y, map); } } ta++; y+=16; }while(--nn); break; case 0x18: y-=((nn-1)*16); do{ if((x>16)&&(y>16)&&(x<320+32)&&(y<240+32)){ if(GFX_SPR_SOLID[ta]!=0){ // No pixels; skip if(GFX_SPR_SOLID[ta]==1) Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8], x, y, map); else Draw16x16_Mapped_FlipXY_Rot( &GFX_SPR[ta<<8], x, y, map); } } ta++; y+=16; }while(--nn); break; } } }}void DrawWrestleF(void){ int zz,zzz,zzzz,x16,y16,x,y,ta,bg_pri; UINT8 *map; ClearPaletteMap(); bg_pri=0; ta=ReadWord(&RAM[0xA180]); if(ta==0x02BB){bg_pri=1;} // Normal Match if(ta==0x0614){bg_pri=1;} // Cage Match if(ta==0x04B7){bg_pri=2;} // Select Screen (Normal) if(ta==0xF8C7){bg_pri=2;} // Select Screen (Royal Rumble) ta=ReadWord(&RAM[0xA380]); if(ta==0x07AF){bg_pri=1;} // Out of Ring if((bg_pri==0)||(bg_pri==1)){ // BG1 // --- MAKE_SCROLL_512x512_4_16( ReadWord(&RAM[0x2C000]), ReadWord(&RAM[0x2C002])+8 ); START_SCROLL_512x512_4_16(32,32,320,240); ta = ReadWord(&RAM_BG1[zz+2])&0x1FFF; MAP_PALETTE_MAPPED_NEW( (RAM_BG1[zz]&0x0F)|0x100, 16, map ); switch(RAM_BG1[zz]&0xC0){ case 0x00: Draw16x16_Mapped_Rot(&GFX_BG0[ta<<8], x, y, map); break; case 0x40: Draw16x16_Mapped_FlipY_Rot(&GFX_BG0[ta<<8], x, y, map); break; case 0x80: Draw16x16_Mapped_FlipX_Rot(&GFX_BG0[ta<<8], x, y, map); break; case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&GFX_BG0[ta<<8], x, y, map); break; } END_SCROLL_512x512_4_16(); if(bg_pri==1) RenderObject(); // BG0 // --- MAKE_SCROLL_512x512_2_16( ReadWord(&RAM[0x2C004]), ReadWord(&RAM[0x2C006])+8 ); START_SCROLL_512x512_2_16(32,32,320,240); ta = ReadWord(&RAM_BG0[zz])&0x0FFF; if(GFX_BG0_SOLID[ta]!=0){ // No pixels; skip MAP_PALETTE_MAPPED_NEW( ((ReadWord(&RAM_BG0[zz])>>12)&0x0F)|0xC0, 16, map ); if(GFX_BG0_SOLID[ta]==1){ // Some pixels; trans Draw16x16_Trans_Mapped_Rot(&GFX_BG0[ta<<8], x, y, map); } else{ // all pixels; solid Draw16x16_Mapped_Rot(&GFX_BG0[ta<<8], x, y, map); } } END_SCROLL_512x512_2_16(); } else{ // BG0 // --- MAKE_SCROLL_512x512_2_16( ReadWord(&RAM[0x2C004]), ReadWord(&RAM[0x2C006])+8 ); START_SCROLL_512x512_2_16(32,32,320,240); MAP_PALETTE_MAPPED_NEW( ((ReadWord(&RAM_BG0[zz])>>12)&0x0F)|0xC0, 16, map ); Draw16x16_Mapped_Rot(&GFX_BG0[(ReadWord(&RAM_BG0[zz])&0x0FFF)<<8], x, y, map); END_SCROLL_512x512_2_16(); // BG1 // --- MAKE_SCROLL_512x512_4_16( ReadWord(&RAM[0x2C000]), ReadWord(&RAM[0x2C002])+8 ); START_SCROLL_512x512_4_16(32,32,320,240); ta = ReadWord(&RAM_BG1[zz+2])&0x1FFF; if(GFX_BG0_SOLID[ta]!=0){ // No pixels; skip MAP_PALETTE_MAPPED_NEW( (RAM_BG1[zz]&0x0F)|0x100, 16, map ); if(GFX_BG0_SOLID[ta]==1){ // Some pixels; trans switch(RAM_BG1[zz]&0xC0){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_BG0[ta<<8], x, y, map); break; case 0x40: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_BG0[ta<<8], x, y, map); break; case 0x80: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_BG0[ta<<8], x, y, map); break; case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_BG0[ta<<8], x, y, map); break; } } else{ // all pixels; solid switch(RAM_BG1[zz]&0xC0){ case 0x00: Draw16x16_Mapped_Rot(&GFX_BG0[ta<<8], x, y, map); break; case 0x40: Draw16x16_Mapped_FlipY_Rot(&GFX_BG0[ta<<8], x, y, map); break; case 0x80: Draw16x16_Mapped_FlipX_Rot(&GFX_BG0[ta<<8], x, y, map); break; case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&GFX_BG0[ta<<8], x, y, map); break; } } } END_SCROLL_512x512_4_16(); RenderObject(); } // FG0 // --- MAKE_SCROLL_512x512_4_8( 0, 8 ); START_SCROLL_512x512_4_8(32,32,320,240); ta = ((RAM_FG0[zz]) | (RAM_FG0[zz+2]<<8))&0xFFF; if(GFX_FG0_SOLID[ta]!=0){ // No pixels; skip MAP_PALETTE_MAPPED_NEW( RAM_FG0[zz+2]>>4, 16, map ); if(GFX_FG0_SOLID[ta]==1){ // Some pixels; trans Draw8x8_Trans_Mapped_Rot(&GFX_FG0[ta<<6], x, y, map); } else{ // all pixels; solid Draw8x8_Mapped_Rot(&GFX_FG0[ta<<6], x, y, map); } } END_SCROLL_512x512_4_8();}/*BG1 Data (4 bytes per Tile)===========================Byte(s)| Bit(s) | Description-------+76543210+---------------------------- 00 |........| Unused 01 |.x......| Tile Flip X-Axis 01 |x.......| Tile Flip Y-Axis 01 |....xxxx| Palette Bank (0-15) 02 |....xxxx| Tile Number (high 4 bits) 03 |xxxxxxxx| Tile Number (low 8 bits)BG1 Data (2 bytes per Tile)===========================Byte(s)| Bit(s) | Description-------+76543210+---------------------------- 00 |xxxx....| Palette Bank (0-15) 00 |....xxxx| Tile Number (high 4 bits) 01 |xxxxxxxx| Tile Number (low 8 bits)Sprite Data (16 bytes per Sprite)=================================Byte(s)| Bit(s) | Description-------+76543210+---------------------------- 00 |.......x| Sprite Ypos (high bit) 01 |xxxxxxxx| Sprite Ypos (low 8 bits) 03 |xxx.....| Number of chained Sprites 03 |...x....| Sprite Flip X-Axis 03 |....x...| Sprite Flip Y-Axis 05 |xxxxxxxx| Sprite Number (low 8 bits) 07 |xxxxxxxx| Sprite Number (high 8 bits) 0A |.......x| Sprite Xpos (high bit) 0B |xxxxxxxx| Sprite Xpos (low 8 bits) 0C-0F |........| Unused*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -