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

📄 othunder.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
   ROM[0x7FF06]=0x13;		// move.b #$00,$AA0000   ROM[0x7FF07]=0xFC;		// (Speed Hack)   ROM[0x7FF08]=0x00;   ROM[0x7FF09]=0x00;   ROM[0x7FF0A]=0x00;   ROM[0x7FF0B]=0xAA;   ROM[0x7FF0C]=0x00;   ROM[0x7FF0D]=0x00;   ROM[0x7FF0E]=0x60;		// Loop   ROM[0x7FF0F]=0x100-0x0A;   // EEPROM Read Hack   // ----------------   WriteLong68k(&ROM[0xCD68],0x4E560000);	//	link	a6,#0   WriteLong68k(&ROM[0xCD6C],0x48E7C0C0);	//	movem.l	D0-D1/a0-a1,-(a7)   WriteLong68k(&ROM[0xCD70],0x206E0008);	//	movea.l	8(a6),a0   WriteLong68k(&ROM[0xCD74],0x322E000C);	//	move	12(a6),D1   WriteLong68k(&ROM[0xCD78],0x02810000);	//	andi.l	#$0000003F,D1   WriteWord68k(&ROM[0xCD7C],0x003F);		//   WriteWord68k(&ROM[0xCD7E],0x43F9);		//	lea	EXT_0000,a1   WriteLong68k(&ROM[0xCD80],0x00BB0000);	//   WriteWord68k(&ROM[0xCD84],0xE349);		//	lsL	#1,D1   WriteWord68k(&ROM[0xCD86],0xD2C1);		//	adda	D1,a1   WriteWord68k(&ROM[0xCD88],0x3091);		//	move	(a1),(a0)   WriteLong68k(&ROM[0xCD8A],0x4CDF0303);	//	movem.l	(a7)+,D0-D1/a0-a1   WriteWord68k(&ROM[0xCD8E],0x4E5E);		//	unlk	a6   WriteWord68k(&ROM[0xCD90],0x4E75);		//	rts   // EEPROM Write Hack   // -----------------   WriteLong68k(&ROM[0xCE32],0x4E560000);	//	link	a6,#0   WriteLong68k(&ROM[0xCE36],0x48E7C0C0);	//	movem.l	D0-D1/a0-a1,-(a7)   WriteLong68k(&ROM[0xCE3A],0x206E0008);	//	movea.l	8(a6),a0   WriteLong68k(&ROM[0xCE3E],0x322E000C);	//	move	12(a6),D1   WriteLong68k(&ROM[0xCE42],0x02810000);	//	andi.l	#$0000003F,D1   WriteWord68k(&ROM[0xCE46],0x003F);		//   WriteWord68k(&ROM[0xCE48],0x43F9);		//	lea	EXT_0000,a1   WriteLong68k(&ROM[0xCE4A],0x00BB0000);	//   WriteWord68k(&ROM[0xCE4E],0xE349);		//	lsL	#1,D1   WriteWord68k(&ROM[0xCE50],0xD2C1);		//	adda	D1,a1   WriteWord68k(&ROM[0xCE52],0x3290);		//	move	(a0),(a1)   WriteLong68k(&ROM[0xCE54],0x4CDF0303);	//	movem.l	(a7)+,D0-D1/a0-a1   WriteWord68k(&ROM[0xCE58],0x4E5E);		//	unlk	a6   WriteWord68k(&ROM[0xCE5A],0x4E75);		//	rts   // Init tc0220ioc emulation   // ------------------------   tc0220ioc.RAM  = RAM_INPUT;   tc0220ioc.ctrl = 0;		//TC0220_STOPCPU;   reset_tc0220ioc();   // Init tc0100scn emulation   // ------------------------   tc0100scn[0].layer[0].RAM	=RAM_VIDEO+0x0000;   tc0100scn[0].layer[0].GFX	=GFX;   tc0100scn[0].layer[0].MASK	=GFX_BG0_SOLID;   tc0100scn[0].layer[0].SCR	=RAM_SCROLL+0;   tc0100scn[0].layer[0].type	=0;   tc0100scn[0].layer[0].bmp_x	=64;   tc0100scn[0].layer[0].bmp_y	=64;   tc0100scn[0].layer[0].bmp_w	=320;   tc0100scn[0].layer[0].bmp_h	=240;   tc0100scn[0].layer[0].mapper	=&Map_15bit_xRGB;   tc0100scn[0].layer[0].tile_mask=0x3FFF;   tc0100scn[0].layer[0].scr_x	=20;   tc0100scn[0].layer[0].scr_y	=8;   tc0100scn[0].layer[1].RAM	=RAM_VIDEO+0x8000;   tc0100scn[0].layer[1].GFX	=GFX;   tc0100scn[0].layer[1].MASK	=GFX_BG0_SOLID;   tc0100scn[0].layer[1].SCR	=RAM_SCROLL+2;   tc0100scn[0].layer[1].type	=0;   tc0100scn[0].layer[1].bmp_x	=64;   tc0100scn[0].layer[1].bmp_y	=64;   tc0100scn[0].layer[1].bmp_w	=320;   tc0100scn[0].layer[1].bmp_h	=240;   tc0100scn[0].layer[1].mapper	=&Map_15bit_xRGB;   tc0100scn[0].layer[1].tile_mask=0x3FFF;   tc0100scn[0].layer[1].scr_x	=20;   tc0100scn[0].layer[1].scr_y	=8;   tc0100scn[0].layer[2].RAM	=RAM_VIDEO+0x4000;   tc0100scn[0].layer[2].GFX	=GFX_FG0;   tc0100scn[0].layer[2].SCR	=RAM_SCROLL+4;   tc0100scn[0].layer[2].type	=3;   tc0100scn[0].layer[2].bmp_x	=64;   tc0100scn[0].layer[2].bmp_y	=64;   tc0100scn[0].layer[2].bmp_w	=320;   tc0100scn[0].layer[2].bmp_h	=240;   tc0100scn[0].layer[2].mapper	=&Map_15bit_xRGB;   tc0100scn[0].layer[2].scr_x	=20;   tc0100scn[0].layer[2].scr_y	=8;   tc0100scn[0].RAM     = RAM_VIDEO;   tc0100scn[0].GFX_FG0 = GFX_FG0;   init_tc0100scn(0);/* *  StarScream Stuff follows */   ByteSwap(ROM,0x80000);   ByteSwap(RAM,0x3C000);   AddMemFetch(0x000000, 0x07FFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x07FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x080000, 0x08FFFF, NULL, RAM+0x000000);			// MAIN RAM   AddReadByte(0x200000, 0x20FFFF, NULL, RAM_VIDEO);			// SCREEN RAM   AddReadByte(0x090000, 0x09000F, NULL, RAM_INPUT);			// INPUT   AddReadByte(0x500000, 0x50000F, NULL, RAM+0x028200);			// GUN PORTS   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x07FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x080000, 0x08FFFF, NULL, RAM+0x000000);			// MAIN RAM   AddReadWord(0x200000, 0x20FFFF, NULL, RAM_VIDEO);			// SCREEN RAM   AddReadWord(0x400000, 0x4005FF, NULL, RAM+0x020000);			// SPRITE RAM   AddReadWord(0x090000, 0x09000F, NULL, RAM_INPUT);			// INPUT   AddReadWord(0x100000, 0x100007, tc0110pcr_rw, NULL);			// COLOR RAM   AddReadWord(0x300000, 0x300003, tc0140syt_read_main_68k, NULL);	// SOUND COMM   AddReadWord(0xBB0000, 0xBB007F, NULL, EEPROM+0x000000);		// EEPROM   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1, NULL, NULL);   AddWriteByte(0x080000, 0x08FFFF, NULL, RAM+0x000000);		// MAIN RAM   AddWriteByte(0x206000, 0x206FFF, tc0100scn_0_gfx_fg0_wb, NULL);	// FG0 GFX RAM   AddWriteByte(0x200000, 0x20FFFF, NULL, RAM_VIDEO);			// SCREEN RAM   AddWriteByte(0x500000, 0x50000F, NULL, RAM+0x028200);		// GUN PORTS   AddWriteByte(0x090000, 0x09000F, 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(0x080000, 0x08FFFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteWord(0x206000, 0x206FFF, tc0100scn_0_gfx_fg0_ww, NULL);	// FG0 GFX RAM   AddWriteWord(0x200000, 0x20FFFF, NULL, RAM_VIDEO);			// SCREEN RAM   AddWriteWord(0x400000, 0x4005FF, NULL, RAM+0x020000);		// SPRITE RAM   AddWriteWord(0x100000, 0x100007, tc0110pcr_ww, NULL);		// COLOR RAM   AddWriteWord(0x220000, 0x22000F, NULL, RAM_SCROLL);			// SCROLL RAM   AddWriteWord(0x500000, 0x50000F, NULL, RAM+0x028200);		// GUN PORTS   AddWriteWord(0x300000, 0x300003, tc0140syt_write_main_68k, NULL);	// SOUND COMM   AddWriteWord(0x600000, 0x60000F, NULL, RAM+0x028400);		// ??? RAM   AddWriteWord(0x090000, 0x09000F, tc0220ioc_ww, NULL);		// INPUT   AddWriteWord(0xBB0000, 0xBB007F, NULL, EEPROM+0x000000);		// EEPROM   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers...    x1=64;   myy1=64;   x2=64;   y2=64;   GameMouse=1;}void ClearOpThunderbolt(void){   RemoveTaitoYM2610();   save_eeprom();   #ifdef RAINE_DEBUG      //save_debug("ROM.bin",ROM,0x080000,1);      save_debug("RAM.bin",RAM,0x058000,1);      //save_debug("GFX.bin",GFX,0x55B000,0);   #endif}void ExecuteOpThunderboltFrame(void){   /*------[Mouse Hack]-------*/   set_mouse_range(0,0,319,239);   x11=319-mouse_x;   myy11=mouse_y;   x1=(x11<<7)/320;   myy1=(myy11<<7)/240;   if(x1<0){x1=0;}   if(x1>127){x1=127;}   if(myy1<0){myy1=0;}   if(myy1>127){myy1=127;}   if(mouse_b&1) RAM[0x2800E] &= ~0x01;   if(mouse_b&2) RAM[0x2800E] &= ~0x04;   /*-----[Keyboard Hack]-----*/   if(((RAM[0x28010]&0x01)!=0)&&(myy1>  0)) myy1--;   if(((RAM[0x28010]&0x02)!=0)&&(myy1<127)) myy1++;   if(((RAM[0x28010]&0x08)!=0)&&(x1>  0)) x1--;   if(((RAM[0x28010]&0x04)!=0)&&(x1<127)) x1++;   if(((RAM[0x28020]&0x01)!=0)&&(y2>  0)) y2--;   if(((RAM[0x28020]&0x02)!=0)&&(y2<127)) y2++;   if(((RAM[0x28020]&0x08)!=0)&&(x2>  0)) x2--;   if(((RAM[0x28020]&0x04)!=0)&&(x2<127)) x2++;   /*----[Write Positions]----*/   RAM[0x2854]=x1+128-64;   RAM[0x2856]=myy1+128-64;   RAM[0x2858]=x2+128-64;   RAM[0x285A]=y2+128-64;   /*------[EE-ROM Hack]------*/   WriteLong(&RAM[0xA026+0x00], 0x00C00040);   WriteLong(&RAM[0xA026+0x04], 0x80000002);   WriteLong(&RAM[0xA026+0x08], 0x00C00040);   WriteLong(&RAM[0xA026+0x0C], 0xE0000001);   WriteLong(&RAM[0xA026+0x10], 0x00C00040);   WriteLong(&RAM[0xA026+0x14], 0x80000002);   WriteLong(&RAM[0xA026+0x18], 0x00C00040);   WriteLong(&RAM[0xA026+0x1C], 0xE0000001);   WriteLong(&RAM[0xA026+0x20], 0x00800080);   WriteLong(&RAM[0xA026+0x24], 0x00800080);   WriteLong(&RAM[0xA026+0x28], 0x80000002);   WriteLong(&RAM[0xA026+0x2C], 0xE0000001);   WriteLong(&RAM[0xA026+0x30], 0x80000002);   WriteLong(&RAM[0xA026+0x34], 0xE0000001);   WriteLong(&RAM[0xA026+0x38], 0x80000002);   WriteLong(&RAM[0xA026+0x3C], 0xE0000001);   WriteLong(&RAM[0xA026+0x40], 0x80000002);   WriteLong(&RAM[0xA026+0x44], 0xE0000001);   WriteLong(&RAM[0xA026+0x24], 0x00800080);   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);   Taito2610_Frame();			// Z80 and YM2610}void DrawOpThunderbolt(void){   int x,y,z,ta,zz;   UINT8 *MAP;   ClearPaletteMap();   // Init tc0100scn emulation   // ------------------------   tc0100scn_layer_count = 0;   tc0100scn[0].ctrl = ReadWord(RAM_SCROLL+12);   // BG0   // ---   render_tc0100scn_layer_mapped_flipy(0,0);   // OBJECT LOW   // ----------   for(zz=0x20600-8;zz>=0x20000;zz-=8){      if((RAM[zz+3]&0x80)!=0){      z=(RAM[zz+1]>>1)&63;      if(z!=0){         y=RAM[zz];         if((RAM[zz+1]&1)!=0){y=0-((y^255)+1);}         y=32+19+y;         x=ReadWord(&RAM[zz+2])&0x1FF;         if(x>400){x=0-((x^511)+1);}         x=(320+(63-z))-x;         if((x>0)&&(y>0)&&(x<320+64)&&(y<240+64)){            ta=ReadWord(&RAM[zz+6])&0x7FF;            if((ta!=0)&&(ta<0x559)){      MAP_PALETTE_MAPPED_NEW(               RAM[zz+5],               16,        MAP            );               if((RAM[zz+7]&0x80)==0){                  if((RAM[zz+3]&0x40)!=0){	Draw64x64_Trans_Mapped_Zoom(&GFX_SPR[ta<<12],x,y,MAP,z);}                  else{				Draw64x64_Trans_Mapped_Zoom_FlipY(&GFX_SPR[ta<<12],x,y,MAP,z);}               }               else{                  if((RAM[zz+3]&0x40)!=0){	Draw64x64_Trans_Mapped_Zoom_FlipX(&GFX_SPR[ta<<12],x,y,MAP,z);}                  else{				Draw64x64_Trans_Mapped_Zoom_FlipXY(&GFX_SPR[ta<<12],x,y,MAP,z);}               }            }         }      }      }   }   // BG1   // ---   render_tc0100scn_layer_mapped_flipy(0,1);   // OBJECT HIGH   // -----------   for(zz=0x20600-8;zz>=0x20000;zz-=8){      if((RAM[zz+3]&0x80)==0){      z=(RAM[zz+1]>>1)&63;      if(z!=0){         y=RAM[zz];         if((RAM[zz+1]&1)!=0){y=0-((y^255)+1);}         y=32+19+y;         x=ReadWord(&RAM[zz+2])&0x1FF;         if(x>400){x=0-((x^511)+1);}         x=(320+(63-z))-x;         if((x>0)&&(y>0)&&(x<320+64)&&(y<240+64)){            ta=ReadWord(&RAM[zz+6])&0x7FF;            if((ta!=0)&&(ta<0x559)){      MAP_PALETTE_MAPPED_NEW(               RAM[zz+5],               16,        MAP            );               //(*Zoom64x64_Trans_Mapped_JumpList[z])(&GFX_SPR[ta<<12],x,y,MAP);               if((RAM[zz+7]&0x80)==0){                  if((RAM[zz+3]&0x40)!=0){	Draw64x64_Trans_Mapped_Zoom(&GFX_SPR[ta<<12],x,y,MAP,z);}                  else{				Draw64x64_Trans_Mapped_Zoom_FlipY(&GFX_SPR[ta<<12],x,y,MAP,z);}               }               else{                  if((RAM[zz+3]&0x40)!=0){	Draw64x64_Trans_Mapped_Zoom_FlipX(&GFX_SPR[ta<<12],x,y,MAP,z);}                  else{				Draw64x64_Trans_Mapped_Zoom_FlipXY(&GFX_SPR[ta<<12],x,y,MAP,z);}               }            }         }      }      }   }   // FG0   // ---   render_tc0100scn_layer_mapped_flipy(0,2);   // GUNS   // ----   x=(64+(((127-x2)*320)>>7))-7;		// Player 2   y=(64+((y2*240)>>7))-(7+16);   if((x>48)&&(y>48)&&(x<320+64)&&(y<240+64)){      Draw16x16_Trans(SpriteGun2,x,y,0);   }   x=(64+(319-x11))-7;				// Player 1   y=(64+myy11)-(7+16);   if((x>48)&&(y>48)&&(x<320+64)&&(y<240+64)){      Draw16x16_Trans(SpriteGun1,x,y,0);   }   pal[254].r=0;   pal[254].g=0;   pal[254].b=0;   pal[253].r=31;   pal[253].g=31;   pal[253].b=63;   pal[252].r=63;   pal[252].g=31;   pal[252].b=31;}/*Sprite List Format (8 bytes/sprite)===================================Byte | Bit(s) | Description-----+76543210+--------------------  0  |.xxxxxx.| ZoomY (0-63)  0  |.......x| Y Position (High)  1  |xxxxxxxx| Y Position (Low)  2  |.x......| Flip Y Axis  2  |x.......| Sprite:BG1 Priority  2  |..?????x| X Position (High)  3  |xxxxxxxx| X Position (Low)  4  |xxxxxxxx| Palette Bank  5  |..xxxxxx| ZoomX (0-63)  6  |x.......| Flip X Axis?  6  |.....xxx| Sprite Number (High)  7  |xxxxxxxx| Sprite Number (Low)*/

⌨️ 快捷键说明

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