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

📄 wwfsstar.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
      else{if((tb&0xFF)==12){tb-=12;}}}}   }   tb=0x340000;   if(!load_rom("wwfs31.bin", RAM+0x00000, 0x10000)) return;		// *   if(!load_rom("wwfs30.bin", RAM+0x10000, 0x10000)) return;   if(!load_rom("wwfs29.bin", RAM+0x20000, 0x10000)) return;   if(!load_rom("wwfs28.bin", RAM+0x30000, 0x10000)) return;   for(ta=0;ta<0x40000;ta++){      tc=RAM[ta];      GFX[tb+3]=(((tc&0x80)>>7)<<3);      GFX[tb+2]=(((tc&0x40)>>6)<<3);      GFX[tb+1]=(((tc&0x20)>>5)<<3);      GFX[tb+0]=(((tc&0x10)>>4)<<3);      GFX[tb+3]|=(((tc&0x08)>>3)<<2);      GFX[tb+2]|=(((tc&0x04)>>2)<<2);      GFX[tb+1]|=(((tc&0x02)>>1)<<2);      GFX[tb+0]|=(((tc&0x01)>>0)<<2);      tb+=16;      if((tb&0xFF)==0){tb-=0xFC;}      else{if((tb&0xFF)==4){tb-=0xFC;}      else{if((tb&0xFF)==8){tb-=0xFC;}      else{if((tb&0xFF)==12){tb-=12;}}}}   }   tb=0x340000;   if(!load_rom("wwfs15.bin", RAM+0x00000, 0x10000)) return;   if(!load_rom("wwfs14.bin", RAM+0x10000, 0x10000)) return;   if(!load_rom("wwfs13.bin", RAM+0x20000, 0x10000)) return;   if(!load_rom("wwfs12.bin", RAM+0x30000, 0x10000)) return;   for(ta=0;ta<0x40000;ta++){      tc=RAM[ta];      GFX[tb+3]|=(((tc&0x80)>>7)<<1);      GFX[tb+2]|=(((tc&0x40)>>6)<<1);      GFX[tb+1]|=(((tc&0x20)>>5)<<1);      GFX[tb+0]|=(((tc&0x10)>>4)<<1);      GFX[tb+3]|=(((tc&0x08)>>3)<<0);      GFX[tb+2]|=(((tc&0x04)>>2)<<0);      GFX[tb+1]|=(((tc&0x02)>>1)<<0);      GFX[tb+0]|=(((tc&0x01)>>0)<<0);      tb+=16;      if((tb&0xFF)==0){tb-=0xFC;}      else{if((tb&0xFF)==4){tb-=0xFC;}      else{if((tb&0xFF)==8){tb-=0xFC;}      else{if((tb&0xFF)==12){tb-=12;}}}}   }   tb=0x440000;   if(!load_rom("wwfs47.bin", RAM+0x00000, 0x10000)) return;		// 16x16 BG0 TILES   if(!load_rom("wwfs46.bin", RAM+0x10000, 0x10000)) return;   if(!load_rom("wwfs45.bin", RAM+0x20000, 0x10000)) return;   if(!load_rom("wwfs44.bin", RAM+0x30000, 0x10000)) return;   for(ta=0;ta<0x40000;ta++){      tc=RAM[ta];      GFX[tb+3]=(((tc&0x80)>>7)<<3);      GFX[tb+2]=(((tc&0x40)>>6)<<3);      GFX[tb+1]=(((tc&0x20)>>5)<<3);      GFX[tb+0]=(((tc&0x10)>>4)<<3);      GFX[tb+3]|=(((tc&0x08)>>3)<<2);      GFX[tb+2]|=(((tc&0x04)>>2)<<2);      GFX[tb+1]|=(((tc&0x02)>>1)<<2);      GFX[tb+0]|=(((tc&0x01)>>0)<<2);      tb+=16;      if((tb&0xFF)==0){tb-=0xFC;}      else{if((tb&0xFF)==4){tb-=0xFC;}      else{if((tb&0xFF)==8){tb-=0xFC;}      else{if((tb&0xFF)==12){tb-=12;}}}}   }   tb=0x440000;   if(!load_rom("wwfs51.bin", RAM+0x00000, 0x10000)) return;   if(!load_rom("wwfs50.bin", RAM+0x10000, 0x10000)) return;   if(!load_rom("wwfs49.bin", RAM+0x20000, 0x10000)) return;   if(!load_rom("wwfs48.bin", RAM+0x30000, 0x10000)) return;   for(ta=0;ta<0x40000;ta++){      tc=RAM[ta];      GFX[tb+3]|=(((tc&0x80)>>7)<<1);      GFX[tb+2]|=(((tc&0x40)>>6)<<1);      GFX[tb+1]|=(((tc&0x20)>>5)<<1);      GFX[tb+0]|=(((tc&0x10)>>4)<<1);      GFX[tb+3]|=(((tc&0x08)>>3)<<0);      GFX[tb+2]|=(((tc&0x04)>>2)<<0);      GFX[tb+1]|=(((tc&0x02)>>1)<<0);      GFX[tb+0]|=(((tc&0x01)>>0)<<0);      tb+=16;      if((tb&0xFF)==0){tb-=0xFC;}      else{if((tb&0xFF)==4){tb-=0xFC;}      else{if((tb&0xFF)==8){tb-=0xFC;}      else{if((tb&0xFF)==12){tb-=12;}}}}   }   GFX_FG0_SOLID = make_solid_mask_8x8  (GFX + 0x000000, 0x1000);   GFX_SPR_SOLID = make_solid_mask_16x16(GFX + 0x040000, 0x4000);   GFX_BG0_SOLID = make_solid_mask_16x16(GFX + 0x440000, 0x1000);   if(!load_rom("wwfs08.bin", RAM, 0x10000)) return;		// MAIN 68000   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom("wwfs07.bin", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   if(!load_rom("wwfs10.bin", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x20000]=RAM[ta];   }   if(!load_rom("wwfs09.bin", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x20001]=RAM[ta];   }   memset(RAM+0x00000,0xFF,0x40000);   InitPaletteMap(RAM+0x13000, 0x18, 0x10, 0x1000);   set_colour_mapper(&col_map_xxxx_bbbb_gggg_rrrr);   WWFSuperStarsSpeedPatch();/* *  StarScream Stuff follows */   ByteSwap(ROM,0x40000);   ByteSwap(RAM,0x40000);   AddMemFetch(0x000000, 0x03FFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x03FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x1C0000, 0x1CFFFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadByte(0x080000, 0x080FFF, NULL, RAM+0x010000);			// FG0 RAM   AddReadByte(0x0C0000, 0x0C0FFF, NULL, RAM+0x011000);			// BG0 RAM   AddReadByte(0x100000, 0x100FFF, NULL, RAM+0x012000);			// OBJECT RAM   AddReadByte(0x140000, 0x140FFF, NULL, RAM+0x013000);			// COLOR RAM   AddReadByte(0x180000, 0x18000F, NULL, RAM+0x014000);			// INPUTS   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x03FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x1C0000, 0x1CFFFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadWord(0x080000, 0x080FFF, NULL, RAM+0x010000);			// FG0 RAM   AddReadWord(0x0C0000, 0x0C0FFF, NULL, RAM+0x011000);			// BG0 RAM   AddReadWord(0x100000, 0x100FFF, NULL, RAM+0x012000);			// OBJECT RAM   AddReadWord(0x140000, 0x140FFF, NULL, RAM+0x013000);			// COLOR RAM   AddReadWord(0x180000, 0x18000F, NULL, RAM+0x014000);			// INPUTS   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0x1C0000, 0x1CFFFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteByte(0x080000, 0x080FFF, NULL, RAM+0x010000);		// FG0 RAM   AddWriteByte(0x0C0000, 0x0C0FFF, NULL, RAM+0x011000);		// BG0 RAM   AddWriteByte(0x100000, 0x100FFF, NULL, RAM+0x012000);		// OBJECT RAM   AddWriteByte(0x140000, 0x140FFF, NULL, RAM+0x013000);		// COLOR RAM   AddWriteByte(0x180000, 0x18000F, WriteOutByte, NULL);		// OUTPUTS   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);			// Trap Idle 68000   AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);		// <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x1C0000, 0x1CFFFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteWord(0x080000, 0x080FFF, NULL, RAM+0x010000);		// FG0 RAM   AddWriteWord(0x0C0000, 0x0C0FFF, NULL, RAM+0x011000);		// BG0 RAM   AddWriteWord(0x100000, 0x100FFF, NULL, RAM+0x012000);		// OBJECT RAM   AddWriteWord(0x140000, 0x140FFF, NULL, RAM+0x013000);		// COLOR RAM   AddWriteWord(0x180000, 0x18000F, WriteOutWord, NULL);		// OUTPUTS   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers... }void ClearWWFSuperStars(void){   #ifdef RAINE_DEBUG      save_debug("ROM.bin",ROM,0x040000,1);      save_debug("RAM.bin",RAM,0x040000,1);      //save_debug("GFX.bin",GFX,0x540000,0);   #endif}void ExecuteWWFSuperStarsFrame(void){   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60));	// M68000 12MHz (60fps)   cpu_interrupt(CPU_68K_0, 5);   cpu_interrupt(CPU_68K_0, 6);   TechnosSoundOld_Frame();		// Z80; YM2151; OKI ADPCM}void DrawWWFSuperStars(void){   int x,y,ta;   int zz,zzz,zzzz,x16,y16;   int td,zx,zy,zxx;   UINT8 *map;   ClearPaletteMap();   zzz=ReadWord(&RAM[0x14014]);   zzzz=((zzz&0x1F0)>>4)<<2;			// X Offset (16-511)   x16=zzz&15;					// X Offset (0-15)   zx=zzzz&0x007F;   zzz=ReadWord(&RAM[0x14016]);   zzzz=((zzz&0x1F0)>>4)<<6;			// Y Offset (16-511)   y16=zzz&15;					// Y Offset (0-15)   zy=zzzz&0x07FF;   for(y=32-y16;y<256+32;y+=16){   zxx=zx;      for(x=32-x16;x<256+32;x+=16){         zz=0x11000+((zy&0x3FF)|(zxx&0x3F));			// Build offset         zz+=(zxx&0x0040)<<4;         zz+=(zy&0x0400)<<1;         MAP_PALETTE_MAPPED_NEW(            ((RAM[zz]>>4)&7)|0x10,            16,            map         );         if((RAM[zz]&0x80)==0){            Draw16x16_Mapped_Rot(&GFX[0x440000+((((RAM[zz]<<8)|(RAM[zz+2]))&0xFFF)<<8)],x,y,map);         }         else{            Draw16x16_Mapped_FlipY_Rot(&GFX[0x440000+((((RAM[zz]<<8)|(RAM[zz+2]))&0xFFF)<<8)],x,y,map);         }         zxx+=4;         zxx&=0x7F;      }   zy+=0x40;   zy&=0x7FF;   }   for(zz=0x12000;zz<0x12400;zz+=10){      td=RAM[zz+2];      if((td&0x01)!=0){      x=((td&0x08)<<5)|(RAM[zz+8]);      x=((256+16)-x)&0x1FF;      y=((td&0x04)<<6)|(RAM[zz+0]);      y=((256+16)-y)&0x1FF;      if((x>16)&&(x<256+32)){         ta=((RAM[zz+4]<<8)|(RAM[zz+6]))&0x3FFF;         MAP_PALETTE_MAPPED_NEW(            (td>>4)+8,            16,            map         );         if((td&0x02)==0){         if((y>16)&&(y<256+32)){         switch(RAM[zz+4]&0xC0){            case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map);        break;            case 0x80: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map);  break;            case 0x40: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map);  break;            case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map); break;         }         }         }         else{         ta &= 0x3FFE;         if((y>16)&&(y<256+32)){         switch(RAM[zz+4]&0xC0){            case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX[0x40000+((ta+1)<<8)],x,y,map);        break;            case 0x80: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX[0x40000+((ta+1)<<8)],x,y,map);  break;            case 0x40: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map);  break;            case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map); break;         }         }         y=(y-16)&0x1FF;                  if((y>16)&&(y<256+32)){         switch(RAM[zz+4]&0xC0){            case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map);        break;            case 0x80: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX[0x40000+((ta+0)<<8)],x,y,map);  break;            case 0x40: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX[0x40000+((ta+1)<<8)],x,y,map);  break;            case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX[0x40000+((ta+1)<<8)],x,y,map); break;         }         }         }      }      }   }   zz=0x10000;   for(y=32;y<256+32;y+=8){   for(x=32;x<256+32;x+=8){      ta=((RAM[zz]<<8)|(RAM[zz+2]))&0xFFF;      if(ta!=0){         MAP_PALETTE_MAPPED_NEW(            RAM[zz]>>4,            16,            map         );         Draw8x8_Trans_Mapped_Rot(&GFX[ta<<6],x,y,map);      }      zz+=4;   }   }}/*WWF SUPERSTARS (C) 1989 TECHNOS-------------------------------Main CPU....68000Sound CPUs..Z80; YM2151; M6295Sprite RAM----------- 10 bytes/sprite entry.- Even bytes unused, so just 5 bytes/sprite  entry.- Sprites are 16x16.- Chain Y bit allows drawing of 2 sprites  per entry (ie. to give a 16x32).Byte | Bit(s) | Description-----+76543210+----------------------  0  |........| <Unused>  1  |xxxxxxxx| Sprite Y (low)  2  |........| <Unused>  3  |.......x| Sprite Enable  3  |......x.| Chain Y (16x32)  3  |.....x..| Sprite Y (high)  3  |....x...| Sprite X (high)  3  |xxxx....| Colour Bank  4  |........| <Unused>  5  |.x......| Flip X Axis  5  |x.......| Flip Y Axis  5  |..xxxxxx| Sprite Number (high)  6  |........| <Unused>  7  |xxxxxxxx| Sprite Number (low)  8  |........| <Unused>  9  |xxxxxxxx| Sprite X (low)Colour RAM----------- 24 banks of 16 colours.Banks | Usage------+-------------------- 0-15 | FG0 Layer 8-23 | Sprites16-23 | BG0 LayerFileName   | Description-----------+---------------------------------WWFS01.BIN | Z80 ROMWWFS02.BIN | ADPCM Sampledata (block#1)WWFS03.BIN | ADPCM Sampledata (block#3)WWFS04.BIN | ADPCM Sampledata (block#2)WWFS05.BIN | ADPCM Sampledata (block#4)WWFS06.BIN | 8x8 FG0 GFX (block#1)WWFS07.BIN | 68000 ROM (block#1) (odd)WWFS08.BIN | 68000 ROM (block#1) (even)WWFS09.BIN | 68000 ROM (block#2) (odd)WWFS10.BIN | 68000 ROM (block#2) (even)WWFS11.BIN | 8x8 FG0 GFX (block#2)WWFS12.BIN | 16x16 SPRITES (block#1a)WWFS13.BIN | 16x16 SPRITES (block#2a)WWFS14.BIN | 16x16 SPRITES (block#3a)WWFS15.BIN | 16x16 SPRITES (block#4a)WWFS16.BIN | 16x16 SPRITES (block#5a)WWFS17.BIN | 16x16 SPRITES (block#6a)WWFS18.BIN | 16x16 SPRITES (block#7a)WWFS19.BIN | 16x16 SPRITES (block#8a)WWFS20.BIN | 16x16 SPRITES (block#9a)WWFS21.BIN | 16x16 SPRITES (block#10a)WWFS22.BIN | 16x16 SPRITES (block#11a)WWFS23.BIN | 16x16 SPRITES (block#12a)WWFS24.BIN | 16x16 SPRITES (block#13a)WWFS25.BIN | 16x16 SPRITES (block#14a)WWFS26.BIN | 16x16 SPRITES (block#15a)WWFS27.BIN | 16x16 SPRITES (block#16a)WWFS28.BIN | 16x16 SPRITES (block#1b)WWFS29.BIN | 16x16 SPRITES (block#2b)WWFS30.BIN | 16x16 SPRITES (block#3b)WWFS31.BIN | 16x16 SPRITES (block#4b)WWFS32.BIN | 16x16 SPRITES (block#9b)WWFS33.BIN | 16x16 SPRITES (block#10b)WWFS34.BIN | 16x16 SPRITES (block#11b)WWFS35.BIN | 16x16 SPRITES (block#12b)WWFS36.BIN | 16x16 SPRITES (block#5b)WWFS37.BIN | 16x16 SPRITES (block#6b)WWFS38.BIN | 16x16 SPRITES (block#7b)WWFS39.BIN | 16x16 SPRITES (block#8b)WWFS40.BIN | 16x16 SPRITES (block#13b)WWFS41.BIN | 16x16 SPRITES (block#14b)WWFS42.BIN | 16x16 SPRITES (block#15b)WWFS43.BIN | 16x16 SPRITES (block#16b)WWFS44.BIN | 16x16 BG0 TILES (block#4a)WWFS45.BIN | 16x16 BG0 TILES (block#3a)WWFS46.BIN | 16x16 BG0 TILES (block#2a)WWFS47.BIN | 16x16 BG0 TILES (block#1a)WWFS48.BIN | 16x16 BG0 TILES (block#4b)WWFS49.BIN | 16x16 BG0 TILES (block#3b)WWFS50.BIN | 16x16 BG0 TILES (block#2b)WWFS51.BIN | 16x16 BG0 TILES (block#1b)*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -