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

📄 warriorb.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
   // -----------------   WriteWord68k(&ROM[0x0376A],0x4EF9);		//	jmp	$400   WriteLong68k(&ROM[0x0376C],0x00000400);	//   WriteLong68k(&ROM[0x00400],0x4A2DA91E);	//	tst.b	-22242(a5)   WriteWord68k(&ROM[0x00404],0x670A);		//	beq.S	LAB_0142   WriteLong68k(&ROM[0x00406],0x206DA924);	//	movea.l	-22236(a5),a0   WriteWord68k(&ROM[0x0040A],0x4E90);		//	jsr	(a0)   WriteLong68k(&ROM[0x0040C],0x422DA91E);	//	clr.b	-22242(a5)   WriteLong68k(&ROM[0x00410],0x13FC0000);	//	move.b	#$00,$AA0000	; Speed Hack   WriteLong68k(&ROM[0x00414],0x00AA0000);	//   WriteWord68k(&ROM[0x00418],0x6100-0x1A);	//	bra.s	<loop>   WriteLong68k(&ROM[0x03764],0x4EB80420);	//	jsr	($420).w   WriteLong68k(&ROM[0x00420],0x4EB838AE);	//	jsr	(EXT_00CC).w	; Random Gen   WriteLong68k(&ROM[0x00424],0x13FC0000);	//	move.b	#$00,$AA0000	; Speed Hack   WriteLong68k(&ROM[0x00428],0x00AA0000);	//   WriteWord68k(&ROM[0x0042C],0x4E75);		//	rts   // Fix Freeze   // ----------   WriteWord68k(&ROM[0x033B6],0x4E71);   // Init tc0220ioc emulation   // ------------------------   tc0220ioc.RAM  = RAM_INPUT;   tc0220ioc.ctrl = 0;		//TC0220_STOPCPU;   reset_tc0220ioc();/* *  StarScream Stuff follows */   ByteSwap(ROM,0x100000);   ByteSwap(RAM,0x70000);   AddMemFetch(0x000000, 0x1FFFFF, ROM+0x000000-0x000000);		// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x1FFFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x200000, 0x20FFFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadByte(0x300000, 0x313FFF, NULL, RAM+0x010000);			// SCREEN RAM   AddReadByte(0x340000, 0x353FFF, NULL, RAM+0x024000);			// OBJECT RAM   AddReadByte(0x800000, 0x80001F, NULL, RAM_INPUT);			// INPUT   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x1FFFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x200000, 0x20FFFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadWord(0x300000, 0x313FFF, NULL, RAM+0x010000);			// SCREEN RAM   AddReadWord(0x340000, 0x353FFF, NULL, RAM+0x024000);			// OBJECT RAM   AddReadWord(0x400000, 0x400007, tc0110pcr_rw, NULL);			// COLOR RAM SCREEN A   AddReadWord(0x420000, 0x420007, tc0110pcr_rw_2, NULL);		// COLOR RAM SCREEN B   AddReadWord(0x600000, 0x601FFF, NULL, RAM+0x038000);			// SPRITE RAM   AddReadWord(0x800000, 0x80001F, NULL, RAM_INPUT);			// INPUT   AddReadWord(0x830000, 0x830003, tc0140syt_read_main_68k, NULL);	// SOUND COMM   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1, NULL, NULL);   AddWriteByte(0x200000, 0x20FFFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteByte(0x300000, 0x310FFF, NULL, RAM+0x010000);		// SCREEN RAM   AddWriteByte(0x340000, 0x353FFF, NULL, RAM+0x024000);		// OBJECT RAM   AddWriteByte(0x311000, 0x311FFF, tc0100scn_0_gfx_fg0_wb, NULL);	// FG0 GFX RAM   AddWriteByte(0x312000, 0x313FFF, NULL, RAM+0x022000);		// SCREEN RAM   AddWriteWord(0x800000, 0x80001F, tc0220ioc_wb, NULL);		// INPUT   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);			// Trap Idle 68000   AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);		// <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x200000, 0x20FFFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteWord(0x300000, 0x310FFF, NULL, RAM+0x010000);		// SCREEN RAM   AddWriteWord(0x340000, 0x353FFF, NULL, RAM+0x024000);		// OBJECT RAM   AddWriteWord(0x311000, 0x311FFF, tc0100scn_0_gfx_fg0_ww, NULL);	// FG0 GFX RAM   AddWriteWord(0x312000, 0x313FFF, NULL, RAM+0x022000);		// SCREEN RAM   AddWriteWord(0x400000, 0x400007, tc0110pcr_ww, NULL);		// COLOR RAM SCREEN A   AddWriteWord(0x420000, 0x420007, tc0110pcr_ww_2, NULL);		// COLOR RAM SCREEN B   AddWriteWord(0x600000, 0x601FFF, NULL, RAM+0x038000);		// SPRITE RAM   AddWriteWord(0x320000, 0x32000F, NULL, RAM+0x040020);		// SCROLL A RAM   AddWriteWord(0x360000, 0x36000F, NULL, RAM+0x040040);		// SCROLL B RAM   AddWriteWord(0x830000, 0x830003, tc0140syt_write_main_68k, NULL);	// SOUND COMM   AddWriteWord(0x800000, 0x80001F, tc0220ioc_ww, NULL);		// INPUT   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers... }void ClearWarriorBlade(void){   RemoveTaitoYM2610();   #ifdef RAINE_DEBUG      //save_debug("ROM.bin",ROM,0x100000,1);      //save_debug("RAM.bin",RAM,0x070000,1);   #endif}void ExecuteWarriorBladeFrame(void){   //print_ingame(600,"%04x",ReadWord(&RAM[0x4002C]));   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(20,60));	// M68000 20MHz (60fps)   /*#ifdef RAINE_DEBUG      print_debug("PC0:%06x SR:%04x\n",s68000context.pc,s68000context.sr);   #endif*/   cpu_interrupt(CPU_68K_0, 4);   Taito2610_FrameWarriorB();		// Z80 and YM2610}void DrawWarriorBlade(void){   int x,y,ta;   int zz,zzz,zzzz,x16,y16;   UINT8 *map;   UINT8 *RAM_BGA;   UINT8 *RAM_BGB;   UINT8 *SCR_BGA;   UINT8 *SCR_BGB;   ClearPaletteMap();   if((ReadWord(&RAM[0x4002C])&0x08)==0){   RAM_BGA = RAM+0x10000;   RAM_BGB = RAM+0x18000;   SCR_BGA = RAM+0x40020;   SCR_BGB = RAM+0x40022;   }   else{   RAM_BGA = RAM+0x18000;   RAM_BGB = RAM+0x10000;   SCR_BGA = RAM+0x40022;   SCR_BGB = RAM+0x40020;   }   // BG0   // ---   MAKE_SCROLL_1024x512_4_8(      20-(ReadWord(&SCR_BGA[0])),       8-(ReadWord(&SCR_BGA[6]))   );   zz=zzzz;   for(y=(32-y16);y<(240+32);y+=8){   for(x=(32-x16);x<(320+32-x16);x+=8){      MAP_PALETTE_MAPPED_NEW(         RAM_BGA[zz]&0x7F,         16,         map      );      ta = ReadWord(&RAM_BGA[2+zz]);      switch(RAM_BGA[1+zz]&0xC0){      case 0x00: Draw8x8_Mapped_Rot(&GFX_BG0[ta<<6],x,y,map);        break;      case 0x40: Draw8x8_Mapped_FlipY_Rot(&GFX_BG0[ta<<6],x,y,map);  break;      case 0x80: Draw8x8_Mapped_FlipX_Rot(&GFX_BG0[ta<<6],x,y,map);  break;      case 0xC0: Draw8x8_Mapped_FlipXY_Rot(&GFX_BG0[ta<<6],x,y,map); break;      }      zz=(zz&0x7E00)|((zz+4)&0x1FF);   }   for(x=(320+32-x16);x<(640+32);x+=8){      MAP_PALETTE_MAPPED_NEW(         RAM_BGA[zz]&0x7F,         16,         map      );      ta = ReadWord(&RAM_BGA[2+zz]);      switch(RAM_BGA[1+zz]&0xC0){      case 0x00: Draw8x8_Mapped_Rot(&GFX_BG1[ta<<6],x,y,map);        break;      case 0x40: Draw8x8_Mapped_FlipY_Rot(&GFX_BG1[ta<<6],x,y,map);  break;      case 0x80: Draw8x8_Mapped_FlipX_Rot(&GFX_BG1[ta<<6],x,y,map);  break;      case 0xC0: Draw8x8_Mapped_FlipXY_Rot(&GFX_BG1[ta<<6],x,y,map); break;      }      zz=(zz&0x7E00)|((zz+4)&0x1FF);   }   zzzz=(zzzz+0x200)&0x7FFF;   zz=zzzz;   }   // BG1   // ---   MAKE_SCROLL_1024x512_4_8(      20-(ReadWord(&SCR_BGB[0])),       8-(ReadWord(&SCR_BGB[6]))   );   zz=zzzz;   for(y=(32-y16);y<(240+32);y+=8){   for(x=(32-x16);x<(320+32-x16);x+=8){   ta=ReadWord(&RAM_BGB[2+zz]);   if(GFX_BG0_SOLID[ta]){			// No pixels; skip      MAP_PALETTE_MAPPED_NEW(         RAM_BGB[zz]&0x7F,         16,         map      );      if(GFX_BG0_SOLID[ta]==1){			// Some pixels; trans         switch(RAM_BGB[1+zz]&0xC0){            case 0x00: Draw8x8_Trans_Mapped_Rot(&GFX_BG0[ta<<6],x,y,map);        break;            case 0x40: Draw8x8_Trans_Mapped_FlipY_Rot(&GFX_BG0[ta<<6],x,y,map);  break;            case 0x80: Draw8x8_Trans_Mapped_FlipX_Rot(&GFX_BG0[ta<<6],x,y,map);  break;            case 0xC0: Draw8x8_Trans_Mapped_FlipXY_Rot(&GFX_BG0[ta<<6],x,y,map); break;         }      }      else{					// all pixels; solid         switch(RAM_BGB[1+zz]&0xC0){            case 0x00: Draw8x8_Mapped_Rot(&GFX_BG0[ta<<6],x,y,map);        break;            case 0x40: Draw8x8_Mapped_FlipY_Rot(&GFX_BG0[ta<<6],x,y,map);  break;            case 0x80: Draw8x8_Mapped_FlipX_Rot(&GFX_BG0[ta<<6],x,y,map);  break;            case 0xC0: Draw8x8_Mapped_FlipXY_Rot(&GFX_BG0[ta<<6],x,y,map); break;         }      }   }   zz=(zz&0x7E00)|((zz+4)&0x1FF);   }   for(x=(320+32-x16);x<(640+32);x+=8){   ta=ReadWord(&RAM_BGB[2+zz]);   if(GFX_BG1_SOLID[ta]){			// No pixels; skip      MAP_PALETTE_MAPPED_NEW(         RAM_BGB[zz]&0x7F,         16,         map      );      if(GFX_BG1_SOLID[ta]==1){			// Some pixels; trans         switch(RAM_BGB[1+zz]&0xC0){            case 0x00: Draw8x8_Trans_Mapped_Rot(&GFX_BG1[ta<<6],x,y,map);        break;            case 0x40: Draw8x8_Trans_Mapped_FlipY_Rot(&GFX_BG1[ta<<6],x,y,map);  break;            case 0x80: Draw8x8_Trans_Mapped_FlipX_Rot(&GFX_BG1[ta<<6],x,y,map);  break;            case 0xC0: Draw8x8_Trans_Mapped_FlipXY_Rot(&GFX_BG1[ta<<6],x,y,map); break;         }      }      else{					// all pixels; solid         switch(RAM_BGB[1+zz]&0xC0){            case 0x00: Draw8x8_Mapped_Rot(&GFX_BG1[ta<<6],x,y,map);        break;            case 0x40: Draw8x8_Mapped_FlipY_Rot(&GFX_BG1[ta<<6],x,y,map);  break;            case 0x80: Draw8x8_Mapped_FlipX_Rot(&GFX_BG1[ta<<6],x,y,map);  break;            case 0xC0: Draw8x8_Mapped_FlipXY_Rot(&GFX_BG1[ta<<6],x,y,map); break;         }      }   }   zz=(zz&0x7E00)|((zz+4)&0x1FF);   }   zzzz=(zzzz+0x200)&0x7FFF;   zz=zzzz;   }   for(zz=0x393F8;zz>=0x38000;zz-=8){   x=((32)+ReadWord(&RAM[zz+6]))&0x3FF;   y=((32+224+256)-ReadWord(&RAM[zz]))&0x1FF;   if((x>16)&&(y>16)&&(x<640+32)&&(y<240+32)){   ta=ReadWord(&RAM[zz+2])&0x7FFF;   if(GFX_SPR_SOLID[ta]){			// No pixels; skip      MAP_PALETTE_MAPPED_NEW(         RAM[zz+4]&0x7F,         16,         map      );      if(GFX_SPR_SOLID[ta]==1){			// Some pixels; trans         switch(RAM[zz+7]&0x0C){         case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8],x,y,map);        break;         case 0x04: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,map);  break;         case 0x08: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,map);  break;         case 0x0C: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,map); break;         }      }      else{					// all pixels; solid         switch(RAM[zz+7]&0x0C){         case 0x00: Draw16x16_Mapped_Rot(&GFX_SPR[ta<<8],x,y,map);        break;         case 0x04: Draw16x16_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,map);  break;         case 0x08: Draw16x16_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,map);  break;         case 0x0C: Draw16x16_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,map); break;         }      }   }   }   }   // FG0   // ---   MAKE_SCROLL_1024x256_2_8(      20-(ReadWord(&RAM[0x40024])),       8-(ReadWord(&RAM[0x4002A]))   );   START_SCROLL_1024x256_2_8(32,32,640,240);      ta = ReadWord(&RAM[0x22000+zz]);      if(ta&0x00FF){         MAP_PALETTE_MAPPED_NEW(            (ta>>8)&0x3F,            16,            map         );         switch(ta&0xC000){            case 0x0000: Draw8x8_Trans_Mapped_Rot(&GFX_FG0[(ta&0x00FF)<<6],x,y,map);        break;            case 0x4000: Draw8x8_Trans_Mapped_FlipY_Rot(&GFX_FG0[(ta&0x00FF)<<6],x,y,map);  break;            case 0x8000: Draw8x8_Trans_Mapped_FlipX_Rot(&GFX_FG0[(ta&0x00FF)<<6],x,y,map);  break;            case 0xC000: Draw8x8_Trans_Mapped_FlipXY_Rot(&GFX_FG0[(ta&0x00FF)<<6],x,y,map); break;         }      }   END_SCROLL_1024x256_2_8();}

⌨️ 快捷键说明

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