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

📄 ctribebl.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
   for(ta=0;ta<0x80000;ta++){      tc=ROM[ta];      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);      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=0x8;}}   }   tb=0x200000;   if(!load_rom("ct_mr3.rom", ROM, 0x80000)) return;		// SPR   for(ta=0;ta<0x80000;ta++){      tc=ROM[ta];      GFX[tb+0]|=(((tc&0x80)>>7)<<3);      GFX[tb+1]|=(((tc&0x40)>>6)<<3);      GFX[tb+2]|=(((tc&0x20)>>5)<<3);      GFX[tb+3]|=(((tc&0x10)>>4)<<3);      GFX[tb+4]|=(((tc&0x08)>>3)<<3);      GFX[tb+5]|=(((tc&0x04)>>2)<<3);      GFX[tb+6]|=(((tc&0x02)>>1)<<3);      GFX[tb+7]|=(((tc&0x01)>>0)<<3);      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=0x8;}}   }   tb=0x600000;   if(!load_rom("ct_ep8.rom", ROM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      tc=ROM[ta];      GFX[tb+0]=(((tc&0x80)>>7)<<0);      GFX[tb+1]=(((tc&0x40)>>6)<<0);      GFX[tb+2]=(((tc&0x20)>>5)<<0);      GFX[tb+3]=(((tc&0x10)>>4)<<0);      GFX[tb+4]=(((tc&0x08)>>3)<<0);      GFX[tb+5]=(((tc&0x04)>>2)<<0);      GFX[tb+6]=(((tc&0x02)>>1)<<0);      GFX[tb+7]=(((tc&0x01)>>0)<<0);      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=0x8;}}   }   tb=0x600000;   if(!load_rom("ct_ep7.rom", ROM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      tc=ROM[ta];      GFX[tb+0]|=(((tc&0x80)>>7)<<1);      GFX[tb+1]|=(((tc&0x40)>>6)<<1);      GFX[tb+2]|=(((tc&0x20)>>5)<<1);      GFX[tb+3]|=(((tc&0x10)>>4)<<1);      GFX[tb+4]|=(((tc&0x08)>>3)<<1);      GFX[tb+5]|=(((tc&0x04)>>2)<<1);      GFX[tb+6]|=(((tc&0x02)>>1)<<1);      GFX[tb+7]|=(((tc&0x01)>>0)<<1);      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=0x8;}}   }   tb=0x600000;   if(!load_rom("ct_ep6.rom", ROM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      tc=ROM[ta];      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);      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=0x8;}}   }   tb=0x600000;   if(!load_rom("ct_ep5.rom", ROM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      tc=ROM[ta];      GFX[tb+0]|=(((tc&0x80)>>7)<<3);      GFX[tb+1]|=(((tc&0x40)>>6)<<3);      GFX[tb+2]|=(((tc&0x20)>>5)<<3);      GFX[tb+3]|=(((tc&0x10)>>4)<<3);      GFX[tb+4]|=(((tc&0x08)>>3)<<3);      GFX[tb+5]|=(((tc&0x04)>>2)<<3);      GFX[tb+6]|=(((tc&0x02)>>1)<<3);      GFX[tb+7]|=(((tc&0x01)>>0)<<3);      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=0x8;}}   }   if(!load_rom_index(2, RAM, 0x20000)) return;            // MAIN 68000   for(ta=0;ta<0x20000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom_index(0, RAM, 0x20000)) return;   for(ta=0;ta<0x20000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   if(!load_rom("ct_ep2.rom", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x40000]=RAM[ta];   }   if(!load_rom("ct_ep2.rom", RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x40001]=RAM[ta];   }   GFX_BG0_SOLID = make_solid_mask_16x16(GFX + 0x000000, 0x2000);   GFX_SPR_SOLID = make_solid_mask_16x16(GFX + 0x200000, 0x4800);   memset(RAM+0x00000,0x00,0x40000);   InitPaletteMap(RAM+0x12000, 0x30, 0x10, 0x1000);   set_colour_mapper(&col_map_xxxx_bbbb_gggg_rrrr);   CombaTribesSpeedPatch();/*   WriteLong68k(&ROM[0x00A54],0x13FC0000);   WriteLong68k(&ROM[0x00A58],0x00AA0000);   WriteWord68k(&ROM[0x00A5C],0x4E71);   WriteLong68k(&ROM[0x00402],0x13FC0000);   WriteLong68k(&ROM[0x00406],0x00AA0000);   WriteWord68k(&ROM[0x0040A],0x4E71);   WriteLong68k(&ROM[0x09EA2],0x13FC0000);   WriteLong68k(&ROM[0x09EA6],0x00AA0000);   WriteWord68k(&ROM[0x09EAA],0x4E71);   WriteLong68k(&ROM[0x0B29A],0x13FC0000);   WriteLong68k(&ROM[0x0B29E],0x00AA0000);   WriteWord68k(&ROM[0x0B2A2],0x4E71);*//* *  StarScream Stuff follows */   ByteSwap(ROM,0x60000);   ByteSwap(RAM,0x40000);   AddMemFetch(0x000000, 0x05FFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x05FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadByte(0x080000, 0x083FFF, NULL, RAM+0x004000);			// VIDEO RAM   AddReadByte(0x0C0000, 0x0C0FFF, NULL, RAM+0x011000);			// SCROLL RAM   AddReadByte(0x100000, 0x100FFF, NULL, RAM+0x012000);			// COLOR RAM   AddReadByte(0x140000, 0x14000F, NULL, RAM+0x013000);			// COMM RAM   AddReadByte(0x180000, 0x18000F, NULL, RAM+0x014000);			// INPUTS   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x05FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadWord(0x080000, 0x083FFF, NULL, RAM+0x004000);			// VIDEO RAM   AddReadWord(0x0C0000, 0x0C0FFF, NULL, RAM+0x011000);			// SCROLL RAM   AddReadWord(0x100000, 0x100FFF, NULL, RAM+0x012000);			// COLOR RAM   AddReadWord(0x140000, 0x14000F, NULL, RAM+0x013000);			// COMM RAM   AddReadWord(0x180000, 0x18000F, NULL, RAM+0x014000);			// INPUTS   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteByte(0x080000, 0x083FFF, NULL, RAM+0x004000);		// VIDEO RAM   AddWriteByte(0x0C0000, 0x0C0FFF, NULL, RAM+0x011000);		// SCROLL RAM   AddWriteByte(0x100000, 0x100FFF, NULL, RAM+0x012000);		// COLOR RAM   AddWriteByte(0x140000, 0x14000F, WriteOutByte, NULL);		//   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);			// Trap Idle 68000   AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);		// <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x1C0000, 0x1C3FFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteWord(0x080000, 0x083FFF, NULL, RAM+0x004000);		// VIDEO RAM   AddWriteWord(0x0C0000, 0x0C0FFF, NULL, RAM+0x011000);		// SCROLL RAM   AddWriteWord(0x100000, 0x100FFF, NULL, RAM+0x012000);		// COLOR RAM   AddWriteWord(0x140000, 0x14000F, WriteOutWord, NULL);		//   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers... }void ClearCombaTribes(void){   #ifdef RAINE_DEBUG      save_debug("ROM.bin",ROM,0x060000,1);      save_debug("RAM.bin",RAM,0x040000,1);      //save_debug("GFX.bin",GFX,0x680000,0);   #endif}void ExecuteCombaTribesFrame(void){   int ta;   // DSW are mapped between several bytes, this quick   // hack splits them and maps them in RAM[]   ta=get_dsw(1);   RAM[0x14001]&=0xCF;   RAM[0x14001]|=(ta>>2)&0x30;   RAM[0x14003]&=0xC0;   RAM[0x14003]|=ta&0x3F;   ta=get_dsw(0);   RAM[0x14005]&=0xC0;   RAM[0x14005]|=ta&0x3F;   RAM[0x14007]&=0xFC;   RAM[0x14007]|=(ta>>6)&0x03;   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60));	// M68000 12MHz (60fps)#ifdef RAINE_DEBUG      print_debug("PC:%06x SR:%04x\n",s68000context.pc,s68000context.sr);#endif   cpu_interrupt(CPU_68K_0, 5);   cpu_interrupt(CPU_68K_0, 6);   TechnosSoundOld_Frame();	// Z80; YM2151; OKI ADPCM}void DrawCombaTribes(void){   UINT8 *MAP;   int x,y,ta,tb;   int zz,zzz,zzzz,x16,y16;   int td;   ClearPaletteMap();   // (0x30,0x1000);   zzz=ReadWord(&RAM[0x11004]);   zzzz=((zzz&0x1F0)>>4)<<1;			// X Offset (16-511)   x16=zzz&15;					// X Offset (0-15)   zzz=ReadWord(&RAM[0x11006]);   zzzz|=((zzz&0x1F0)>>4)<<6;			// Y Offset (16-511)   y16=zzz&15;					// Y Offset (0-15)   zzzz&=0x7FF;   zz=zzzz;   for(y=32-y16;y<256+32;y+=16){   for(x=32-x16;x<320+32;x+=16){      MAP_PALETTE_MAPPED_NEW(         ((ReadWord(&RAM[zz+0x6000]))>>12)|0x20,         16,         MAP      );      Draw16x16_Mapped_Rot(&GFX[((ReadWord(&RAM[zz+0x6000])&0xFFF)|0x1000)<<8],x,y,MAP);      zz=(zz&0x7C0)|((zz+2)&0x3F);   }   zzzz=(zzzz+0x40)&0x7FF;   zz=zzzz;   }   zzz=ReadWord(&RAM[0x11000]);   zzzz=((zzz&0x1F0)>>4)<<2;			// X Offset (16-511)   x16=zzz&15;					// X Offset (0-15)   zzz=ReadWord(&RAM[0x11002]);   zzzz|=((zzz&0x1F0)>>4)<<7;			// Y Offset (16-511)   y16=zzz&15;					// Y Offset (0-15)   zzzz&=0xFFF;   zz=zzzz;   for(y=32-y16;y<256+32;y+=16){   for(x=32-x16;x<320+32;x+=16){      ta=ReadWord(&RAM[zz+0x4002])&0x1FFF;      if( GFX_BG0_SOLID[ta] && ta){         MAP_PALETTE_MAPPED_NEW(            (RAM[zz+0x4000]&15)|0x10,            16,            MAP         );         if(GFX_BG0_SOLID[ta]==1){            if((RAM[zz+0x4000]&0x40)==0){Draw16x16_Trans_Mapped_Rot(&GFX[(ta<<8)],x,y,MAP);}            else{                        Draw16x16_Trans_Mapped_FlipY_Rot(&GFX[(ta<<8)],x,y,MAP);}         }         else{            if((RAM[zz+0x4000]&0x40)==0){Draw16x16_Mapped_Rot(&GFX[(ta<<8)],x,y,MAP);}            else{                        Draw16x16_Mapped_FlipY_Rot(&GFX[(ta<<8)],x,y,MAP);}         }      }      zz=(zz&0xF80)|((zz+4)&0x7F);   }   zzzz=(zzzz+0x80)&0xFFF;   zz=zzzz;   }   for(zz=0x5000;zz<0x5800;zz+=16){      if(((td=RAM[zz+2])&1)!=0){      x=(RAM[zz+10]+((td&4)<<6))+32;      if(x>(320+32)){         x-=512;      }      if((x>16)&&(x<320+32)){         y=(RAM[zz]+((td&2)<<7));         y=(256+16-y)&0x1FF;         ta=((RAM[zz+6]<<8)|(RAM[zz+4]))&0x7FFF;         MAP_PALETTE_MAPPED_NEW(            (RAM[zz+8])&15,            16,            MAP         );         tb=(td>>5);         switch(td&0x18){            case 0x00:               for(td=0;td<=tb;td++){               if((y>16)&&(y<256+32)){               Draw16x16_Trans_Mapped_Rot(&GFX[0x200000+(ta<<8)],x,y,MAP);               }               ta++;               y-=16;               }            break;            case 0x10:               for(td=0;td<=tb;td++){               if((y>16)&&(y<256+32)){               Draw16x16_Trans_Mapped_FlipY_Rot(&GFX[0x200000+(ta<<8)],x,y,MAP);               }               ta++;               y-=16;               }            break;            case 0x08:               y-=(tb<<4);               for(td=0;td<=tb;td++){               if((y>16)&&(y<256+32)){               Draw16x16_Trans_Mapped_FlipX_Rot(&GFX[0x200000+(ta<<8)],x,y,MAP);               }               ta++;               y+=16;               }            break;            case 0x18:               y-=(tb<<4);               for(td=0;td<=tb;td++){               if((y>16)&&(y<256+32)){               Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX[0x200000+(ta<<8)],x,y,MAP);               }               ta++;               y+=16;               }            break;         }      }      }   }}/*SPRITE RAM----------- 16 bytes/sprite (only odd bytes used)Byte | Bit(s) | Usage-----+76543210+-------------------  1  |xxxxxxxx| Sprite Y (low)  3  |.......x| Sprite Enable  3  |......x.| Sprite Y (high)  3  |.....x..| Sprite X (high)  3  |....x...| Sprite Flip Y  3  |...x....| Sprite Flip X  3  |xxx.....| Sprite Chain  5  |xxxxxxxx| Sprite Number (low)  7  |..xxxxxx| Sprite Number (high)  9  |....xxxx| Sprite Palette  B  |xxxxxxxx| Sprite X (low)  D  |........| Unused  F  |........| Unused*/

⌨️ 快捷键说明

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