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

📄 chasehq2.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 3 页
字号:
   tb=0;   for(ta=0;ta<OBJ_A_COUNT*0x10;ta+=2){      tc=ReadWord(&TMP[ta]);      GFX_OBJ_A[tb+0] =((tc&0x8000)>>(15));      GFX_OBJ_A[tb+1] =((tc&0x4000)>>(14));      GFX_OBJ_A[tb+2] =((tc&0x2000)>>(13));      GFX_OBJ_A[tb+3] =((tc&0x1000)>>(12));      GFX_OBJ_A[tb+4] =((tc&0x0800)>>(11));      GFX_OBJ_A[tb+5] =((tc&0x0400)>>(10));      GFX_OBJ_A[tb+6] =((tc&0x0200)>>( 9));      GFX_OBJ_A[tb+7] =((tc&0x0100)>>( 8));      GFX_OBJ_A[tb+8] =((tc&0x0080)>>( 7));      GFX_OBJ_A[tb+9] =((tc&0x0040)>>( 6));      GFX_OBJ_A[tb+10]=((tc&0x0020)>>( 5));      GFX_OBJ_A[tb+11]=((tc&0x0010)>>( 4));      GFX_OBJ_A[tb+12]=((tc&0x0008)>>( 3));      GFX_OBJ_A[tb+13]=((tc&0x0004)>>( 2));      GFX_OBJ_A[tb+14]=((tc&0x0002)>>( 1));      GFX_OBJ_A[tb+15]=((tc&0x0001)>>( 0));      tb+=16;   }   if(!load_rom_index(2, TMP, OBJ_A_COUNT*0x10)) return;	// 16x16 OBJ A   tb=0;   for(ta=0;ta<OBJ_A_COUNT*0x10;ta+=2){      tc=ReadWord(&TMP[ta]);      GFX_OBJ_A[tb+0] |=((tc&0x8000)>>(14));      GFX_OBJ_A[tb+1] |=((tc&0x4000)>>(13));      GFX_OBJ_A[tb+2] |=((tc&0x2000)>>(12));      GFX_OBJ_A[tb+3] |=((tc&0x1000)>>(11));      GFX_OBJ_A[tb+4] |=((tc&0x0800)>>(10));      GFX_OBJ_A[tb+5] |=((tc&0x0400)>>( 9));      GFX_OBJ_A[tb+6] |=((tc&0x0200)>>( 8));      GFX_OBJ_A[tb+7] |=((tc&0x0100)>>( 7));      GFX_OBJ_A[tb+8] |=((tc&0x0080)>>( 6));      GFX_OBJ_A[tb+9] |=((tc&0x0040)>>( 5));      GFX_OBJ_A[tb+10]|=((tc&0x0020)>>( 4));      GFX_OBJ_A[tb+11]|=((tc&0x0010)>>( 3));      GFX_OBJ_A[tb+12]|=((tc&0x0008)>>( 2));      GFX_OBJ_A[tb+13]|=((tc&0x0004)>>( 1));      GFX_OBJ_A[tb+14]|=((tc&0x0002)>>( 0));      GFX_OBJ_A[tb+15]|=((tc&0x0001)<<( 1));      tb+=16;   }   if(!load_rom_index(1, TMP, OBJ_A_COUNT*0x10)) return;	// 16x16 OBJ A   tb=0;   for(ta=0;ta<OBJ_A_COUNT*0x10;ta+=2){      tc=ReadWord(&TMP[ta]);      GFX_OBJ_A[tb+0] |=((tc&0x8000)>>(13));      GFX_OBJ_A[tb+1] |=((tc&0x4000)>>(12));      GFX_OBJ_A[tb+2] |=((tc&0x2000)>>(11));      GFX_OBJ_A[tb+3] |=((tc&0x1000)>>(10));      GFX_OBJ_A[tb+4] |=((tc&0x0800)>>( 9));      GFX_OBJ_A[tb+5] |=((tc&0x0400)>>( 8));      GFX_OBJ_A[tb+6] |=((tc&0x0200)>>( 7));      GFX_OBJ_A[tb+7] |=((tc&0x0100)>>( 6));      GFX_OBJ_A[tb+8] |=((tc&0x0080)>>( 5));      GFX_OBJ_A[tb+9] |=((tc&0x0040)>>( 4));      GFX_OBJ_A[tb+10]|=((tc&0x0020)>>( 3));      GFX_OBJ_A[tb+11]|=((tc&0x0010)>>( 2));      GFX_OBJ_A[tb+12]|=((tc&0x0008)>>( 1));      GFX_OBJ_A[tb+13]|=((tc&0x0004)>>( 0));      GFX_OBJ_A[tb+14]|=((tc&0x0002)<<( 1));      GFX_OBJ_A[tb+15]|=((tc&0x0001)<<( 2));      tb+=16;   }   if(!load_rom_index(3, TMP, OBJ_A_COUNT*0x10)) return;	// 16x16 OBJ A   tb=0;   for(ta=0;ta<OBJ_A_COUNT*0x10;ta+=2){      tc=ReadWord(&TMP[ta]);      GFX_OBJ_A[tb+0] |=((tc&0x8000)>>(12));      GFX_OBJ_A[tb+1] |=((tc&0x4000)>>(11));      GFX_OBJ_A[tb+2] |=((tc&0x2000)>>(10));      GFX_OBJ_A[tb+3] |=((tc&0x1000)>>( 9));      GFX_OBJ_A[tb+4] |=((tc&0x0800)>>( 8));      GFX_OBJ_A[tb+5] |=((tc&0x0400)>>( 7));      GFX_OBJ_A[tb+6] |=((tc&0x0200)>>( 6));      GFX_OBJ_A[tb+7] |=((tc&0x0100)>>( 5));      GFX_OBJ_A[tb+8] |=((tc&0x0080)>>( 4));      GFX_OBJ_A[tb+9] |=((tc&0x0040)>>( 3));      GFX_OBJ_A[tb+10]|=((tc&0x0020)>>( 2));      GFX_OBJ_A[tb+11]|=((tc&0x0010)>>( 1));      GFX_OBJ_A[tb+12]|=((tc&0x0008)>>( 0));      GFX_OBJ_A[tb+13]|=((tc&0x0004)<<( 1));      GFX_OBJ_A[tb+14]|=((tc&0x0002)<<( 2));      GFX_OBJ_A[tb+15]|=((tc&0x0001)<<( 3));      tb+=16;   }   if(!load_rom_index(5, OBJECT_MAP, 0x80000)) return; // TILE MAPPING   if(!load_rom_index(4, TMP, 0x80000)) return;	// 8x8 BG0 TILES   tb=0;   for(ta=0;ta<0x80000;ta+=2){      tc=ReadWord(&TMP[ta]);      GFX[tb+0] = ((tc&0xF000)>>12);      GFX[tb+1] = ((tc&0x0F00)>> 8);      GFX[tb+2] = ((tc&0x00F0)>> 4);      GFX[tb+3] = ((tc&0x000F)>> 0);      tb+=4;   }   FreeMem(TMP);   GFX_OBJ_A_SOLID = make_solid_mask_16x8(GFX_OBJ_A, OBJ_A_COUNT);   GFX_BG0_SOLID   = make_solid_mask_8x8 (GFX,       0x4000);   RAMSize=0x80000;   if(!(RAM=AllocateMem(0x80000))) return;   if(!(ROM=AllocateMem(0xA0000))) return;   if(!load_rom_index(15, RAM+0x00000, 0x20000)) return;	// 68000 MAIN ROM   if(!load_rom_index(16, RAM+0x20000, 0x20000)) return;	// 68000 MAIN ROM   for(ta=0;ta<0x40000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom_index(17, RAM+0x00000, 0x20000)) return;   if(!load_rom_index(18, RAM+0x20000, 0x20000)) return;   for(ta=0;ta<0x40000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   if(!load_rom_index(13, RAM, 0x10000)) return;	// 68000 SUB ROM   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x80000]=RAM[ta];   }   if(!load_rom_index(12, RAM, 0x10000)) return;   for(ta=0;ta<0x10000;ta++){      ROM[ta+ta+0x80001]=RAM[ta];   }   /*-----[Sound Setup]-----*/   Z80ROM=RAM+0x50000;   if(!load_rom_index(14, Z80ROM, 0x20000)) return;		// Z80 SOUND ROM   if(!(PCMROM=AllocateMem(0x200000))) return;   if(!load_rom_index(10,PCMROM+0x000000,0x80000)) return;	// Delta-T   if(!load_rom_index( 9,PCMROM+0x080000,0x80000)) return;	// Main   if(!load_rom_index( 8,PCMROM+0x100000,0x80000)) return;	// Main   if(!load_rom_index( 7,PCMROM+0x180000,0x80000)) return;	// Main   YM2610SetBuffers(PCMROM+0x00000, PCMROM+0x80000, 0x80000, 0x180000);   AddTaitoYM2610B(0x0234, 0x01B4, 0x20000);   /*-----------------------*/   memset(RAM+0x00000,0x00,0x40000);   memset(RAM+0x22800,0xFF,0x00800);   RAM_VIDEO  = RAM+0x10000;   RAM_SCROLL = RAM+0x29000;   RAM_INPUT  = RAM+0x22800;   InitPaletteMap(RAM+0x20000, 0x100, 0x10, 0x8000);   GFX_FG0    = RAM+0x3C000;   // Motor wait   WriteWord68k(&ROM[0x009B4],0x4E71);		//	nop   // Main 68000 Speed Hack   WriteLong68k(&ROM[0x00FFE],0x13FC0000);	//	move.b	#$00,$AA0000   WriteLong68k(&ROM[0x01002],0x00AA0000);	//   WriteWord68k(&ROM[0x01006],0x4E71);		//	nop   // Sub 68000 Speed Hack   WriteLong68k(&ROM[0x804D6],0x13FC0000);	//	move.b	#$00,$AA0000   WriteLong68k(&ROM[0x804DA],0x00AA0000);	//   // 300 = ? 301 = debug msgs   302 = ? 303 = ?   // 304 = ? 305 = motor enable 306 = ? 307 = ?/*   WriteLong68k(&ROM[0x00300],0x01000101);   WriteLong68k(&ROM[0x00304],0x00000101);*/   //WriteWord68k(&ROM[0x08158],0x6040);   //WriteLong68k(&ROM[0x0819E],0x13FC0000);   //WriteLong68k(&ROM[0x081A2],0x00BB0000);   // Init tc0220ioc emulation   // ------------------------   tc0220ioc.RAM  = RAM_INPUT;   tc0220ioc.ctrl = 0;		//TC0220_STOPCPU;   reset_tc0220ioc();   // Init tc0150rod emulation   // ------------------------   tc0150rod.RAM  	= RAM + 0x38000;   tc0150rod.GFX  	= GFX_LINES;   tc0150rod.PAL  	= PAL_MAP;   tc0150rod.mapper	= &Map_15bit_xBGR;   tc0150rod.bmp_x	= 32;   tc0150rod.bmp_y	= 32;   tc0150rod.bmp_w	= 320;   tc0150rod.bmp_h	= 240;   tc0150rod.scr_x	= 0;   tc0150rod.scr_y	= -15;   // 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_15bit_xBGR;   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_15bit_xBGR;   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_15bit_xBGR;   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_16x8_zoom();   zoom16_ofs = make_16x16_zoom_ofs_type1zz();   zoom8_ofs  = make_16x8_zoom_ofs_type1zz();/*   init_16x8_zoom();   zoom16_ofs = make_16x16_zoom_ofs_type1z();   zoom8_ofs  = make_16x8_zoom_ofs_type1z();*//* *  StarScream Stuff follows */   ByteSwap(ROM,0xA0000);   ByteSwap(RAM,0x50000);   AddMemFetch(0x000000, 0x07FFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x07FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x100000, 0x10FFFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadByte(0xA00000, 0xA0FFFF, NULL, RAM_VIDEO);			// SCREEN RAM   AddReadByte(0x200000, 0x20001F, tc0220ioc_rb, NULL);			// INPUT   AddReadByte(0x420000, 0x420003, tc0140syt_read_main_68k, NULL);	// SOUND COMM   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x07FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x100000, 0x10FFFF, NULL, RAM+0x000000);			// 68000 RAM   AddReadWord(0xA00000, 0xA0FFFF, NULL, RAM_VIDEO);			// SCREEN RAM   AddReadWord(0xC00000, 0xC01FFF, NULL, RAM+0x040000);			// OBJECT RAM   AddReadWord(0x800000, 0x801FFF, NULL, RAM+0x020000);			// COLOR RAM   AddReadWord(0x200000, 0x20001F, tc0220ioc_rw, NULL);			// INPUT   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0x100000, 0x10FFFF, NULL, RAM+0x000000);		// 68000 RAM   AddWriteByte(0xA06000, 0xA06FFF, tc0100scn_0_gfx_fg0_wb, NULL);	// FG0 GFX RAM   AddWriteByte(0xA00000, 0xA0FFFF, NULL, RAM_VIDEO);			// SCREEN RAM   AddWriteByte(0x200000, 0x20001F, tc0220ioc_wb, NULL);		// INPUT   AddWriteByte(0x420000, 0x420003, tc0140syt_write_main_68k, NULL);	// SOUND COMM   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+0x000000);		// 68000 RAM   AddWriteWord(0xA06000, 0xA06FFF, tc0100scn_0_gfx_fg0_ww, NULL);	// FG0 GFX RAM   AddWriteWord(0xA00000, 0xA0FFFF, NULL, RAM_VIDEO);			// SCREEN RAM   AddWriteWord(0xC00000, 0xC01FFF, NULL, RAM+0x040000);		// OBJECT RAM   AddWriteWord(0xA20000, 0xA2000F, NULL, RAM_SCROLL);			// SCROLL RAM   AddWriteWord(0x800000, 0x801FFF, NULL, RAM+0x020000);		// COLOR RAM   AddWriteWord(0x200000, 0x20001F, tc0220ioc_ww, NULL);		// INPUT   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers...    AddMemFetchMC68000B(0x000000, 0x01FFFF, ROM+0x080000);	// 68000 ROM   AddMemFetchMC68000B(-1, -1, NULL);   AddReadByteMC68000B(0x000000, 0x01FFFF, NULL, ROM+0x080000);		// 68000 ROM   AddReadByteMC68000B(0x200000, 0x203FFF, NULL, RAM+0x030000);		// MAIN RAM   AddReadByteMC68000B(0x208000, 0x20BFFF, NULL, RAM+0x008000);		// COMMON RAM   AddReadByteMC68000B(0x000000, 0xFFFFFF, DefBadReadByte, NULL);	// <Bad Reads>   AddReadByteMC68000B(-1, -1, NULL, NULL);   AddReadWordMC68000B(0x000000, 0x01FFFF, NULL, ROM+0x080000);		// 68000 ROM   AddReadWordMC68000B(0x200000, 0x203FFF, NULL, RAM+0x030000);		// MAIN RAM   AddReadWordMC68000B(0x208000, 0x20BFFF, NULL, RAM+0x008000);		// COMMON RAM   AddReadWordMC68000B(0x000000, 0xFFFFFF, DefBadReadWord, NULL);	// <Bad Reads>

⌨️ 快捷键说明

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