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

📄 wgp.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 3 页
字号:
   // Fix COMMON RAM sync problems   WriteWord68k(&ROM[0x02E0E],0x600C);   // Speed Hack M68000A   WriteLong68k(&ROM[0x0159A],0x067915F3);   WriteLong68k(&ROM[0x0159E],0x00108DA0);   WriteLong68k(&ROM[0x015A2],0x13FC0000);	//	move.b	#$00,$AA0000   WriteLong68k(&ROM[0x015A6],0x00AA0000);	//   WriteWord68k(&ROM[0x015AA],0x6100-18);   // Speed Hack M68000B   WriteWord68k(&ROM[0x40942],0x5279);		//	inc random number   WriteLong68k(&ROM[0x40944],0x00101682);   WriteLong68k(&ROM[0x40948],0x13FC0000);	//	move.b	#$00,$AA0000   WriteLong68k(&ROM[0x4094C],0x00AA0000);	//   WriteWord68k(&ROM[0x40950],0x6100-16);   WriteLong68k(&ROM[0x4820C],0x4E714E71);	//	don't kill random number   WriteWord68k(&ROM[0x48210],0x4E71);   // ?   WriteWord68k(&ROM[0x482D2],0x4E71);   // LAN HEAD ERROR   WriteWord68k(&ROM[0x504D8],0x6010);   // 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	=32;   tc0100scn[0].layer[0].bmp_y	=32;   tc0100scn[0].layer[0].bmp_w	=320;   tc0100scn[0].layer[0].bmp_h	=240;   tc0100scn[0].layer[0].mapper	=&Map_12bit_RGBx;   tc0100scn[0].layer[0].tile_mask=0x3FFF;   tc0100scn[0].layer[0].scr_x	=16;   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	=32;   tc0100scn[0].layer[1].bmp_y	=32;   tc0100scn[0].layer[1].bmp_w	=320;   tc0100scn[0].layer[1].bmp_h	=240;   tc0100scn[0].layer[1].mapper	=&Map_12bit_RGBx;   tc0100scn[0].layer[1].tile_mask=0x3FFF;   tc0100scn[0].layer[1].scr_x	=16;   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	=32;   tc0100scn[0].layer[2].bmp_y	=32;   tc0100scn[0].layer[2].bmp_w	=320;   tc0100scn[0].layer[2].bmp_h	=240;   tc0100scn[0].layer[2].mapper	=&Map_12bit_RGBx;   tc0100scn[0].layer[2].scr_x	=16;   tc0100scn[0].layer[2].scr_y	=8;   tc0100scn[0].RAM     = RAM_VIDEO;   tc0100scn[0].GFX_FG0 = GFX_FG0;   init_tc0100scn(0);   init_16x16_zoom();   zoom16_ofs = make_16x16_zoom_ofs_type1z();   obj_id = add_layer_info("Zooming Object" );   rod_id = add_layer_info("Roadscroll"     );/* *  StarScream Stuff follows */   ByteSwap(ROM,0x80000);   ByteSwap(RAM,0x70000);   AddMemFetch(0x000000, 0x03FFFF, ROM+0x000000-0x000000);		// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x0FFFFF, NULL, ROM+0x000000);			// 68000 ROM *   AddReadByte(0x100000, 0x10FFFF, NULL, RAM_MAIN);			// 68000 RAM *   AddReadByte(0x300000, 0x30FFFF, NULL, RAM_VIDEO);			// SCREEN RAM *   AddReadByte(0x500000, 0x51FFFF, NULL, RAM_VIDEO_2);			// ?   AddReadByte(0x140000, 0x143FFF, NULL, RAM_COMMON);			// COMMON RAM *   AddReadByte(0x400000, 0x40FFFF, NULL, RAM_OBJECT);			// ?   AddReadByte(0x180000, 0x18001F, tc0220ioc_rb, NULL);			// INPUT *   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x0FFFFF, NULL, ROM+0x000000);			// 68000 ROM *   AddReadWord(0x100000, 0x10FFFF, NULL, RAM_MAIN);			// 68000 RAM *   AddReadWord(0x300000, 0x30FFFF, NULL, RAM_VIDEO);			// SCREEN RAM *   AddReadWord(0x500000, 0x51FFFF, NULL, RAM_VIDEO_2);			// ?   AddReadWord(0x140000, 0x143FFF, NULL, RAM_COMMON);			// COMMON RAM *   AddReadWord(0x400000, 0x40FFFF, NULL, RAM_OBJECT);			// ?   AddReadWord(0x700000, 0x701FFF, NULL, RAM_COLOUR);			// COLOR RAM *   AddReadWord(0x200000, 0x20000F, NULL, RAM_INPUT_2);			// ?   AddReadWord(0x180000, 0x18001F, tc0220ioc_rw, NULL);			// INPUT *   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0x100000, 0x10FFFF, NULL, RAM_MAIN);			// 68000 RAM *   AddWriteByte(0x306000, 0x306FFF, tc0100scn_0_gfx_fg0_wb, NULL);	// FG0 GFX RAM *   AddWriteByte(0x300000, 0x30FFFF, NULL, RAM_VIDEO);			// SCREEN RAM *   AddWriteByte(0x500000, 0x51FFFF, NULL, RAM_VIDEO_2);			// ?   AddWriteByte(0x140000, 0x143FFF, NULL, RAM_COMMON);			// COMMON RAM *   AddWriteByte(0x400000, 0x40FFFF, NULL, RAM_OBJECT);			// ?   AddWriteByte(0x180000, 0x18001F, 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(0x100000, 0x10FFFF, NULL, RAM_MAIN);			// 68000 RAM *   AddWriteWord(0x306000, 0x306FFF, tc0100scn_0_gfx_fg0_ww, NULL);	// FG0 GFX RAM *   AddWriteWord(0x300000, 0x30FFFF, NULL, RAM_VIDEO);			// SCREEN RAM *   AddWriteWord(0x500000, 0x51FFFF, NULL, RAM_VIDEO_2);			// ?   AddWriteWord(0x140000, 0x143FFF, NULL, RAM_COMMON);			// COMMON RAM *   AddWriteWord(0x400000, 0x40FFFF, NULL, RAM_OBJECT);			// ?   AddWriteWord(0x700000, 0x701FFF, NULL, RAM_COLOUR);			// COLOR RAM *   AddWriteWord(0x320000, 0x32000F, NULL, RAM_SCROLL);			// SCROLL RAM *   AddWriteWord(0x520000, 0x52001F, NULL, RAM_SCROLL_2);		// ?   AddWriteWord(0x180000, 0x18001F, tc0220ioc_ww, NULL);		// INPUT *   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers...    AddMemFetchMC68000B(0x000000, 0x03FFFF, ROM+0x040000-0x000000);	// 68000 ROM   AddMemFetchMC68000B(-1, -1, NULL);   AddReadByteMC68000B(0x000000, 0x03FFFF, NULL, ROM+0x040000);		// 68000 ROM   AddReadByteMC68000B(0x100000, 0x107FFF, NULL, RAM_MAIN_2);		// MAIN RAM   AddReadByteMC68000B(0x140000, 0x143FFF, NULL, RAM_COMMON);		// COMMON RAM *   AddReadByteMC68000B(0x200000, 0x200003, tc0140syt_read_main_68k, NULL); // SOUND COMM *   AddReadByteMC68000B(0x000000, 0xFFFFFF, DefBadReadByte, NULL);	// <Bad Reads>   AddReadByteMC68000B(-1, -1, NULL, NULL);   AddReadWordMC68000B(0x000000, 0x03FFFF, NULL, ROM+0x040000);		// 68000 ROM   AddReadWordMC68000B(0x100000, 0x107FFF, NULL, RAM_MAIN_2);		// MAIN RAM   AddReadWordMC68000B(0x140000, 0x143FFF, NULL, RAM_COMMON);		// COMMON RAM *   AddReadWordMC68000B(0x000000, 0xFFFFFF, DefBadReadWord, NULL);	// <Bad Reads>   AddReadWordMC68000B(-1, -1, NULL, NULL);   AddWriteByteMC68000B(0x100000, 0x107FFF, NULL, RAM_MAIN_2);		// MAIN RAM   AddWriteByteMC68000B(0x140000, 0x143FFF, NULL, RAM_COMMON);		// COMMON RAM *   AddWriteByteMC68000B(0x200000, 0x200003, tc0140syt_write_main_68k, NULL); // SOUND COMM *   AddWriteByteMC68000B(0xAA0000, 0xAA0001, Stop68000, NULL);		// Trap Idle 68000   AddWriteByteMC68000B(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);	// <Bad Writes>   AddWriteByteMC68000B(-1, -1, NULL, NULL);   AddWriteWordMC68000B(0x100000, 0x107FFF, NULL, RAM_MAIN_2);		// MAIN RAM   AddWriteWordMC68000B(0x140000, 0x143FFF, NULL, RAM_COMMON);		// COMMON RAM *   AddWriteWordMC68000B(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);	// <Bad Writes>   AddWriteWordMC68000B(-1, -1, NULL, NULL);   AddInitMemoryMC68000B();	// Set Starscream mem pointers... }void load_world_grand_prix(void){   load_actual(0);}void load_world_grand_prix_japanese(void){   load_actual(1);}void ClearWorldGrandPrix(void){   RemoveTaitoYM2610();   #ifdef RAINE_DEBUG      //save_debug("ROM.bin",ROM,0x100000,1);      save_debug("RAM.bin",RAM,0x070000,1);      save_debug("GFX.bin",GFX_PIV,0x400000,0);   #endif}void ExecuteWorldGrandPrixFrame(void){   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60));		// M68000 12MHz (60fps)   #ifdef RAINE_DEBUG      print_debug("PC0:%06x SR:%04x\n",s68000context.pc,s68000context.sr);   #endif   cpu_interrupt(CPU_68K_0, 4);   cpu_interrupt(CPU_68K_0, 6);   cpu_interrupt(CPU_68K_0, 6);   cpu_interrupt(CPU_68K_0, 6);   cpu_interrupt(CPU_68K_0, 6);   cpu_interrupt(CPU_68K_0, 6);   cpu_interrupt(CPU_68K_0, 6);   cpu_execute_cycles(CPU_68K_1, CPU_FRAME_MHz(12,60));		// M68000 12MHz (60fps)   #ifdef RAINE_DEBUG      print_debug("PC1:%06x SR:%04x\n",s68000context.pc,s68000context.sr);   #endif   cpu_interrupt(CPU_68K_1, 4);   cpu_interrupt(CPU_68K_1, 6);   Taito2610_Frame();				// Z80 and YM2610   check_layer_switches();}static void render_z_system_sprites(void){   int x,y,ta,tb,zz;   int zx,zy,rx,ry,xx,zzx,zzy;   UINT8 *map,*SPR_MAP;   UINT8 *zoom_dat_x;   UINT8 *zoom_dat_y;   // OBJECT Z-SYSTEM   // ---------------   for(zz=0x4C000;zz<0x4DC00;zz+=16){      zx=0x7F;      zy=0x7F;      if((zx!=0)&&(zy!=0)){         ta = (ReadWord(&RAM[zz+4]))&0x3FF;         if(ta!=0){            x=(32+ReadWord(&RAM[zz+0]))&0x1FF;            y=(32+ReadWord(&RAM[zz+2]))&0x1FF;            MAP_PALETTE_MAPPED_NEW(               (ReadWord(&RAM[zz+6])>>7)&0x3F,               16,               map            );            if((zx&0x40)!=0){					// [128x128]            zoom_dat_x = zoom16_ofs+(zx<<3);            zoom_dat_y = zoom16_ofs+(zy<<3);            SPR_MAP = RAM + 0x40000 + (ta<<8);            switch(RAM[zz+5]&0x00){            case 0x00:            xx=x;            for(ry=0;ry<8;ry++){            zzy = zoom_dat_y[ry];            if((y>16)&&(y<240+32)){            ta=0;            for(rx=0;rx<8;rx++){            zzx = zoom_dat_x[rx];            if((x>16)&&(x<320+32)){               tb=ReadWord(&SPR_MAP[ta])&0x3FFF;               if(GFX_OBJ_B_SOLID[tb]!=0){			// No pixels; skip                  if(GFX_OBJ_B_SOLID[tb]==1)			// Some pixels; trans                     Draw16x16_Trans_Mapped_ZoomXY_Rot(&GFX_OBJ_B[tb<<8],x,y,map,zzx,zzy);                  else						// all pixels; solid                     Draw16x16_Mapped_ZoomXY_Rot(&GFX_OBJ_B[tb<<8],x,y,map,zzx,zzy);               }            }            ta+=4;            x = (x+zzx)&0x1FF;            }            }            y = (y+zzy)&0x1FF;            SPR_MAP+=32;            x=xx;            }            break;            case 0x40:            x+=(zx+1);            xx=x;            for(ry=0;ry<8;ry++){            zzy = zoom_dat_y[ry];            if((y>16)&&(y<240+32)){            ta=0;            for(rx=0;rx<8;rx++){            zzx = zoom_dat_x[rx];            x = (x-zzx)&0x1FF;            if((x>16)&&(x<320+32)){               tb=ReadWord(&SPR_MAP[ta])&0x3FFF;               if(GFX_OBJ_B_SOLID[tb]!=0){			// No pixels; skip                  if(GFX_OBJ_B_SOLID[tb]==1)			// Some pixels; trans                     Draw16x16_Trans_Mapped_ZoomXY_FlipY_Rot(&GFX_OBJ_B[tb<<8],x,y,map,zzx,zzy);                  else						// all pixels; solid                     Draw16x16_Mapped_ZoomXY_FlipY_Rot(&GFX_OBJ_B[tb<<8],x,y,map,zzx,zzy);               }            }            ta+=2;            }            }            y = (y+zzy)&0x1FF;            SPR_MAP+=16;            x=xx;            }            break;            case 0x80:            y+=zy;            xx=x;            for(ry=0;ry<8;ry++){            zzy = zoom_dat_y[ry];            y = (y-zzy)&0x1FF;            if((y>16)&&(y<240+32)){            ta=0;            for(rx=0;rx<8;rx++){            zzx = zoom_dat_x[rx];            if((x>16)&&(x<320+32)){               tb=ReadWord(&SPR_MAP[ta])&0x3FFF;               if(GFX_OBJ_B_SOLID[tb]!=0){			// No pixels; skip                  if(GFX_OBJ_B_SOLID[tb]==1)			// Some pixels; trans                     Draw16x16_Trans_Mapped_ZoomXY_FlipX_Rot(&GFX_OBJ_B[tb<<8],x,y,map,zzx,zzy);                  else						// all pixels; solid                     Draw16x16_Mapped_ZoomXY_FlipX_Rot(&GFX_OBJ_B[tb<<8],x,y,map,zzx,zzy);               }            }            ta+=2;            x = (x+zzx)&0x1FF;            }            }            SPR_MAP+=16;            x=xx;            }            break;            case 0xC0:            x+=(zx+1);            y+=zy;            xx=x;            for(ry=0;ry<8;ry++){            zzy = zoom_dat_y[ry];            y = (y-zzy)&0x1FF;            if((y>16)&&(y<240+32)){            ta=0;            for(rx=0;rx<8;rx++){            zzx = zoom_dat_x[rx];            x = (x-zzx)&0x1FF;            if((x>16)&&(x<320+32)){               tb=ReadWord(&SPR_MAP[ta])&0x3FFF;               if(GFX_OBJ_B_SOLID[tb]!=0){			// No pixels; skip                  if(GFX_OBJ_B_SOLID[tb]==1)			// Some pixels; trans                     Draw16x16_Trans_Mapped_ZoomXY_FlipXY_Rot(&GFX_OBJ_B[tb<<8],x,y,map,zzx,zzy);                  else						// all pixels; solid                     Draw16x16_Mapped_ZoomXY_FlipXY_Rot(&GFX_OBJ_B[tb<<8],x,y,map,zzx,zzy);               }            }            ta+=2;            }            }            SPR_MAP+=16;            x=xx;            }            break;            }            }            else{            if((zy&0x20)!=0){					// [64x128]            zoom_dat_x = zoom16_ofs+(((zx<<1)|1)<<3);            zoom_dat_y = zoom16_ofs+(zy<<3);            SPR_MAP = RAM + 0x20000 + (ta<<7);            switch(RAM[zz+5]&0xC0){            case 0x00:            xx=x;            for(ry=0;ry<8;ry++){            zzy = zoom_dat_y[ry];            if((y>16)&&(y<240+32)){            ta=0;            for(rx=0;rx<4;rx++){            zzx = zoom_dat_x[rx];            if((x>16)&&(x<320+32)){               tb=ReadWord(&SPR_MAP[ta])&0x3FFF;               if(GFX_OBJ_B_SOLID[tb]!=0){			// No pixels; skip                  if(GFX_OBJ_B_SOLID[tb]==1)			// Some pixels; trans                     Draw16x16_Trans_Mapped_ZoomXY_Rot(&GFX_OBJ_B[tb<<8],x,y,map,zzx,zzy);                  else						// all pixels; solid                     Draw16x16_Mapped_ZoomXY_Rot(&GFX_OBJ_B[tb<<8],x,y,map,zzx,zzy);               }            }            ta+=2;            x = (x+zzx)&0x1FF;            }

⌨️ 快捷键说明

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