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

📄 tecmosys.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 3 页
字号:
   GFX_SPR=GFX+0x020000;   if(!load_rom("gaiden.1", RAM, 0x20000)) return;	// 68000 ROM   for(ta=0;ta<0x20000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom("gaiden.2", RAM, 0x20000)) return;   for(ta=0;ta<0x20000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   tb=0;   if(!load_rom("gaiden.5", RAM, 0x10000)) return;	// 8x8 FG0 GFX   for(ta=0;ta<0x10000;ta++){      GFX_FG0[tb++]=RAM[ta]>>4;      GFX_FG0[tb++]=RAM[ta]&15;   }   tb=0;   if(!load_rom("gaiden.6",  RAM+0x00000, 0x20000)) return;	// 16x16 SPRITES   if(!load_rom("gaiden.8",  RAM+0x20000, 0x20000)) return;   if(!load_rom("gaiden.10", RAM+0x40000, 0x20000)) return;   if(!load_rom("gaiden.12", RAM+0x60000, 0x20000)) return;   for(ta=0;ta<0x80000;ta+=2){      GFX_SPR[tb+0]=RAM[ta]>>4;      GFX_SPR[tb+1]=RAM[ta]&15;      GFX_SPR[tb+4]=RAM[ta+1]>>4;      GFX_SPR[tb+5]=RAM[ta+1]&15;      tb+=8;   }   tb=0;   if(!load_rom("gaiden.7",  RAM+0x00000, 0x20000)) return;	// 16x16 SPRITES   if(!load_rom("gaiden.9",  RAM+0x20000, 0x20000)) return;   if(!load_rom("gaiden.11", RAM+0x40000, 0x20000)) return;   if(!load_rom("gaiden.13", RAM+0x60000, 0x20000)) return;   for(ta=0;ta<0x80000;ta+=2){      GFX_SPR[tb+2]=RAM[ta]>>4;      GFX_SPR[tb+3]=RAM[ta]&15;      GFX_SPR[tb+6]=RAM[ta+1]>>4;      GFX_SPR[tb+7]=RAM[ta+1]&15;      tb+=8;   }   tb=0;   if(!load_rom("14.bin", RAM+0x00000, 0x20000)) return;	// 16x16 BG0   if(!load_rom("15.bin", RAM+0x20000, 0x20000)) return;   if(!load_rom("16.bin", RAM+0x40000, 0x20000)) return;   if(!load_rom("17.bin", RAM+0x60000, 0x20000)) return;   for(ta=0;ta<0x80000;ta+=4){      GFX_BG0[tb+0]=RAM[ta+0]>>4;      GFX_BG0[tb+1]=RAM[ta+0]&15;      GFX_BG0[tb+2]=RAM[ta+1]>>4;      GFX_BG0[tb+3]=RAM[ta+1]&15;      GFX_BG0[tb+4]=RAM[ta+2]>>4;      GFX_BG0[tb+5]=RAM[ta+2]&15;      GFX_BG0[tb+6]=RAM[ta+3]>>4;      GFX_BG0[tb+7]=RAM[ta+3]&15;      tb+=16;      if((tb&0x7F)==0){tb-=0x78;}      else{if((tb&0x7F)==8){tb-=0x8;}}   }   tb=0;   if(!load_rom("18.bin", RAM+0x00000, 0x20000)) return;	// 16x16 BG1   if(!load_rom("19.bin", RAM+0x20000, 0x20000)) return;   if(!load_rom("20.bin", RAM+0x40000, 0x20000)) return;   if(!load_rom("21.bin", RAM+0x60000, 0x20000)) return;   for(ta=0;ta<0x80000;ta+=4){      GFX_BG1[tb+0]=RAM[ta+0]>>4;      GFX_BG1[tb+1]=RAM[ta+0]&15;      GFX_BG1[tb+2]=RAM[ta+1]>>4;      GFX_BG1[tb+3]=RAM[ta+1]&15;      GFX_BG1[tb+4]=RAM[ta+2]>>4;      GFX_BG1[tb+5]=RAM[ta+2]&15;      GFX_BG1[tb+6]=RAM[ta+3]>>4;      GFX_BG1[tb+7]=RAM[ta+3]&15;      tb+=16;      if((tb&0x7F)==0){tb-=0x78;}      else{if((tb&0x7F)==8){tb-=0x8;}}   }   GFX_BG0_SOLID = make_solid_mask_16x16(GFX_BG0, 0x100000 >> 8);   GFX_BG1_SOLID = make_solid_mask_16x16(GFX_BG1, 0x100000 >> 8);   GFX_FG0_SOLID = make_solid_mask_8x8(GFX_FG0, 0x020000 >> 6);   GFX_SPR_SOLID = make_solid_mask_8x8(GFX_SPR, 0x200000 >> 6);   FreeMem(RAM);   RAMSize=0x24000+0x10000;   if(!(RAM=AllocateMem(RAMSize))) return;   /*-------[SOUND SYSTEM INIT]-------*/   Z80ROM=RAM+0x24000;   if(!load_rom("gaiden.3", Z80ROM, 0x10000)) return;	// Z80 SOUND ROM   if(!(PCMROM = AllocateMem(0x20000))) return;   if(!load_rom("gaiden.4", PCMROM, 0x20000)) return;	// ADPCM ROM   AddTecmoSound(0x00BD, 0x00BD, 0x10000, PCMROM, 0x20000);   /*---------------------------------*/   memset(RAM+0x00000,0x00,0x24000);   memset(RAM+0x1A000,0xFF,0x01000);   // 68000 Speed hack   // ----------------   WriteWord68k(&ROM[0x1338],0x4EF9);		// jmp $000300   WriteLong68k(&ROM[0x133A],0x00000300);   WriteWord68k(&ROM[0x300],0x41F9);		// lea #$001344,a0   WriteLong68k(&ROM[0x302],0x00001344);   WriteWord68k(&ROM[0x306],0x4EB9);		// jsr $0011D8   WriteLong68k(&ROM[0x308],0x000011D8);   WriteLong68k(&ROM[0x30C],0x13FC0000);	// move.w #$0000,$AA0000   WriteLong68k(&ROM[0x310],0x00AA0000);	//   WriteWord68k(&ROM[0x314],0x60EA);		// bra <loop>   // Fix 68000 Checksum   // ------------------   ROM[0x54A]=0x60;   ROM[0x552]=0x60;   InitPaletteMap(RAM+0x18000, 0x40, 0x10, 0x1000);   set_colour_mapper(&col_map_xxxx_bbbb_gggg_rrrr);/* *  StarScream Stuff follows */   ByteSwap(ROM,0x40000);   ByteSwap(RAM,0x20000);   AddMemFetch(0x000000, 0x03FFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x03FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x060000, 0x07FFFF, NULL, RAM+0x000000);			// *ALL* RAM   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x03FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x060000, 0x07FFFF, NULL, RAM+0x000000);			// *ALL* RAM   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0x060000, 0x079FFF, NULL, RAM+0x000000);		// *ALL* RAM   AddWriteByte(0x07A000, 0x07FFFF, CtrlWriteB, NULL);			// *ALL* RAM   AddWriteByte(0xAA0000, 0xAA0001, Stop68000,  NULL);			// Trap Idle 68000   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x060000, 0x07FFFF, NULL, RAM+0x000000);		// *ALL* RAM   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers...}void LoadTKnight(void){   int ta,tb;   if(!(ROM=AllocateMem(0x40000))) return;   if(!(RAM=AllocateMem(0x80000))) return;   if(!(GFX=AllocateMem(0x420000))) return;   GFX_BG0=GFX+0x220000;   GFX_BG1=GFX+0x320000;   GFX_FG0=GFX+0x000000;   GFX_SPR=GFX+0x020000;   if(!load_rom("TKNI1.BIN", RAM, 0x20000)) return;	// 68000 ROM   for(ta=0;ta<0x20000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom("TKNI2.BIN", RAM, 0x20000)) return;   for(ta=0;ta<0x20000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   tb=0;   if(!load_rom("TKNI5.BIN", RAM, 0x10000)) return;	// 8x8 FG0 GFX   for(ta=0;ta<0x10000;ta++){      GFX_FG0[tb++]=RAM[ta]>>4;      GFX_FG0[tb++]=RAM[ta]&15;   }   tb=0;   if(!load_rom("TKNI9.BIN", RAM, 0x80000)) return;	// 16x16 SPRITES   for(ta=0;ta<0x80000;ta+=2){      GFX_SPR[tb+0]=RAM[ta]>>4;      GFX_SPR[tb+1]=RAM[ta]&15;      GFX_SPR[tb+4]=RAM[ta+1]>>4;      GFX_SPR[tb+5]=RAM[ta+1]&15;      tb+=8;   }   tb=0;   if(!load_rom("TKNI8.BIN", RAM, 0x80000)) return;   for(ta=0;ta<0x80000;ta+=2){      GFX_SPR[tb+2]=RAM[ta]>>4;      GFX_SPR[tb+3]=RAM[ta]&15;      GFX_SPR[tb+6]=RAM[ta+1]>>4;      GFX_SPR[tb+7]=RAM[ta+1]&15;      tb+=8;   }   tb=0;   if(!load_rom("TKNI7.BIN", RAM, 0x80000)) return;		// 16x16 BACKGROUND   for(ta=0;ta<0x80000;ta+=4){      GFX_BG0[tb+0]=RAM[ta+0]>>4;      GFX_BG0[tb+1]=RAM[ta+0]&15;      GFX_BG0[tb+2]=RAM[ta+1]>>4;      GFX_BG0[tb+3]=RAM[ta+1]&15;      GFX_BG0[tb+4]=RAM[ta+2]>>4;      GFX_BG0[tb+5]=RAM[ta+2]&15;      GFX_BG0[tb+6]=RAM[ta+3]>>4;      GFX_BG0[tb+7]=RAM[ta+3]&15;      tb+=16;      if((tb&0x7F)==0){tb-=0x78;}      else{if((tb&0x7F)==8){tb-=0x8;}}   }   tb=0;   if(!load_rom("TKNI6.BIN", RAM, 0x80000)) return;		// 16x16 BACKGROUND   for(ta=0;ta<0x80000;ta+=4){      GFX_BG1[tb+0]=RAM[ta+0]>>4;      GFX_BG1[tb+1]=RAM[ta+0]&15;      GFX_BG1[tb+2]=RAM[ta+1]>>4;      GFX_BG1[tb+3]=RAM[ta+1]&15;      GFX_BG1[tb+4]=RAM[ta+2]>>4;      GFX_BG1[tb+5]=RAM[ta+2]&15;      GFX_BG1[tb+6]=RAM[ta+3]>>4;      GFX_BG1[tb+7]=RAM[ta+3]&15;      tb+=16;      if((tb&0x7F)==0){tb-=0x78;}      else{if((tb&0x7F)==8){tb-=0x8;}}   }   GFX_BG0_SOLID = make_solid_mask_16x16(GFX_BG0, 0x100000 >> 8);   GFX_BG1_SOLID = make_solid_mask_16x16(GFX_BG1, 0x100000 >> 8);   GFX_FG0_SOLID = make_solid_mask_8x8(GFX_FG0, 0x020000 >> 6);   GFX_SPR_SOLID = make_solid_mask_8x8(GFX_SPR, 0x200000 >> 6);   FreeMem(RAM);   RAMSize=0x24000+0x10000;   if(!(RAM=AllocateMem(RAMSize))) return;   /*-------[SOUND SYSTEM INIT]-------*/   Z80ROM=RAM+0x24000;   if(!load_rom("TKNI3.BIN", Z80ROM, 0x10000)) return;	// Z80 SOUND ROM   if(!(PCMROM = AllocateMem(0x20000))) return;   if(!load_rom("TKNI4.BIN", PCMROM, 0x20000)) return;	// ADPCM ROM   AddTecmoSound(0x00D2, 0x00D2, 0x10000, PCMROM, 0x20000);   /*---------------------------------*/   memset(RAM+0x00000,0x00,0x24000);   memset(RAM+0x1A000,0xFF,0x01000);   // Protected JSR's hack   // --------------------   WriteLong68k(&ROM[0x1AA76],0x0240001F);	// andi.w #$001F,d0   WriteWord68k(&ROM[0x1AA7A],0xE348);		// lsl.w #1,d0   WriteLong68k(&ROM[0x1AA7C],0x4BF824D2);	// lea $24d2.w,a5   WriteLong68k(&ROM[0x1AA80],0x30350000);	// move.w 0(a5,d0.w),d0   WriteWord68k(&ROM[0x1AA84],0x4E75);		// rts   // 68000 Speed hack   // ----------------   WriteLong68k(&ROM[0x0AAE],0x13FC0000);	// move.w #$0000,$AA0000   WriteLong68k(&ROM[0x0AB2],0x00AA0000);	//   InitPaletteMap(RAM+0x18000, 0x40, 0x10, 0x1000);   set_colour_mapper(&col_map_xxxx_bbbb_gggg_rrrr);/* *  StarScream Stuff follows */   ByteSwap(ROM,0x40000);   ByteSwap(RAM,0x20000);   AddMemFetch(0x000000, 0x03FFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x03FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x060000, 0x07FFFF, NULL, RAM+0x000000);			// *ALL* RAM   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x03FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x060000, 0x07FFFF, NULL, RAM+0x000000);			// *ALL* RAM   AddReadWord(-1, -1,NULL, NULL);   AddWriteByte(0x060000, 0x079FFF, NULL, RAM+0x000000);		// *ALL* RAM   AddWriteByte(0x07A000, 0x07FFFF, CtrlWriteB, NULL);			// *ALL* RAM   AddWriteByte(0xAA0000, 0xAA0001, Stop68000,  NULL);			// Trap Idle 68000   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x060000, 0x07FFFF, NULL, RAM+0x000000);		// *ALL* RAM   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers...}void ClearTecmoSys(void){   #ifdef RAINE_DEBUG      //save_debug("ROM.bin",ROM,0x040000,1);      //save_debug("RAM.bin",RAM,0x020000,1);   #endif}void ExecuteTecmoSysFrame(void){   RAM[0x1A005] = get_dsw(0);   RAM[0x1A004] = get_dsw(1);   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(10,60));	// M68000 10MHz (60fps)   cpu_interrupt(CPU_68K_0, 5);   cpu_execute_cycles(CPU_Z80_0, CPU_FRAME_MHz(8,60));   cpu_interrupt(CPU_Z80_0, 0x38);}static void draw_tecmo_object(int pri){   static int spr_off[4 * 4 * 2] =   {      0,  0, 16,  0,  0, 16, 16, 16,     32,  0, 48,  0, 32, 16, 48, 16,      0, 32, 16, 32,  0, 48, 16, 48,     32, 32, 48, 32, 32, 48, 48, 48,   };   int x, y, ta, zz, dx, dy, i;   UINT8 *MAP;   for(zz=0x16000;zz<0x16800;zz+=16){			// SPRITES (HIGH PRIORITY)   if((RAM[zz]&0x84)==pri){   y=(ReadWord(&RAM[zz+6])+48)&0x1FF;   x=(ReadWord(&RAM[zz+8])+64)&0x1FF;   if((x>0)&&(y>0)&&(x<256+64)&&(y<224+64)){   ta=ReadWord(&RAM[zz+2]);   if(ta!=0){      MAP_PALETTE_MAPPED_NEW(         RAM[zz+4]>>4,         16,         MAP      );      switch(RAM[zz]&3)      {         case 0:            switch(RAM[zz+4]&0x03){            case 0:			// 8x8               Draw8x8_Trans_Mapped_Rot(&GFX_SPR[ta<<6],x,y,MAP);            break;

⌨️ 快捷键说明

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