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

📄 wrestlef.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
      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();   if(bg_pri==0) RenderObject();   }   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 + -