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

📄 biomtoy.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 3 页
字号:
   GAME_PUZZLE | GAME_PRIVATE};static void BiomToyDecode(char *S,int tb, int td){   int ta,tc,tb2;   if(!load_rom(S, RAM, 0x80000)) return;   tb2 = tb;   for(ta=0x00000;ta<0x40000;ta++){      tc=RAM[ta];      GFX[tb+0]|=((tc&0x80)>>7)<<td;      GFX[tb+1]|=((tc&0x40)>>6)<<td;      GFX[tb+2]|=((tc&0x20)>>5)<<td;      GFX[tb+3]|=((tc&0x10)>>4)<<td;      GFX[tb+4]|=((tc&0x08)>>3)<<td;      GFX[tb+5]|=((tc&0x04)>>2)<<td;      GFX[tb+6]|=((tc&0x02)>>1)<<td;      GFX[tb+7]|=((tc&0x01)>>0)<<td;      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=0x8;}}   }   tb = tb2+0x400000;   for(ta=0x40000;ta<0x80000;ta++){      tc=RAM[ta];      GFX[tb+0]|=((tc&0x80)>>7)<<td;      GFX[tb+1]|=((tc&0x40)>>6)<<td;      GFX[tb+2]|=((tc&0x20)>>5)<<td;      GFX[tb+3]|=((tc&0x10)>>4)<<td;      GFX[tb+4]|=((tc&0x08)>>3)<<td;      GFX[tb+5]|=((tc&0x04)>>2)<<td;      GFX[tb+6]|=((tc&0x02)>>1)<<td;      GFX[tb+7]|=((tc&0x01)>>0)<<td;      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=0x8;}}   }}void LoadBiomToy(void){   int ta;   RAMSize = 0x80000;   if(!(ROM=AllocateMem(0x100000)))   return;   if(!(RAM=AllocateMem(RAMSize)))    return;   if(!(GFX=AllocateMem(0x800000)))   return;    if(!(ADPCM=AllocateMem(0x140000))) return;   /* 68000 ROMs */	   if(!load_rom("d18", RAM, 0x80000)) return;   for(ta=0;ta<0x80000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom("d16", RAM, 0x80000)) return;   for(ta=0;ta<0x80000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   memset(GFX+0x00000,0x00,0x800000);   BiomToyDecode("j6", 0x000000,3); 		   BiomToyDecode("j7", 0x000000,2);   BiomToyDecode("j9", 0x000000,1);   BiomToyDecode("j10",0x000000,0);   BiomToyDecode("h6", 0x200000,3);   BiomToyDecode("h7", 0x200000,2);   BiomToyDecode("h9", 0x200000,1);   BiomToyDecode("h10",0x200000,0);     GFX_CHAR16 = GFX + 0x000000;   GFX_TILE16 = GFX + 0x400000;      RAM_VIDEO = RAM + 0x00000;   RAM_SPR   = RAM + 0x20000;      GFX_CHAR16_SOLID = make_solid_mask_16x16( GFX_CHAR16, 0x04000  ); // 0x04000 = num_tiles   GFX_TILE16_SOLID = make_solid_mask_16x16( GFX_TILE16, 0x04000  );      InitPaletteMap(RAM+0x010000, 0x40, 0x10, 0x8000);   set_colour_mapper(&col_map_xbbb_bbgg_gggr_rrrr);   // ADPCM banks      if(!load_rom("c1", RAM, 0x80000))   return;   //   for(ta=0;ta<16;ta++)   memcpy(ADPCM,RAM,0x40000);   memcpy(ADPCM+0x40000,RAM,0x80000);   //for(ta=0;ta<8;ta++)   //memcpy(ADPCM+0x30000+ta*0x40000,RAM+ta*0x10000,0x10000);   if(!load_rom("c3",ADPCM+0xc0000,0x80000))   return;/*    for(ta=0;ta<8;ta++) *//*       memcpy(ADPCM+0x230000+ta*0x40000,RAM+ta*0x10000,0x10000); */   ADPCMSetBuffers(((struct ADPCMinterface*)&m6295_interface),ADPCM,0x40000);      memset(RAM+0x000000,0x00,0x50000);   memset(RAM+0x030000,0xFF,0x10);  /* *  StarScream Stuff follows */   ByteSwap(ROM,0x100000);   ByteSwap(RAM,0x50000);   AddMemFetch(0x000000, 0x0FFFFF, ROM);				// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x0FFFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x100000, 0x101FFF, NULL, RAM+0x000000);			// VIDEORAM   AddReadByte(0x200000, 0x2007FF, NULL, RAM+0x010000);			// PALETTERAM   AddReadByte(0x440000, 0x440FFF, NULL, RAM+0x020000);			// SPRITERAM   AddReadByte(0x700000, 0x700007, NULL, RAM+0x030000);                 // DSW/INPUT   AddReadByte(0x70000F, 0x70000F, OKIM6295_status_0_r, NULL);  	                // ADPCM CHANNEL A   AddReadByte(0xFF0000, 0xFFFFFF, NULL, RAM+0x040000);			// WORKRAM   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x0FFFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x100000, 0x101FFF, NULL, RAM+0x000000);			// VIDEORAM   AddReadWord(0x200000, 0x2007FF, NULL, RAM+0x010000);			// PALETTERAM   AddReadWord(0x440000, 0x440FFF, NULL, RAM+0x020000);			// SPRITERAM   AddReadWord(0x700000, 0x700007, NULL, RAM+0x030000);			// DSW/INPUT   AddReadWord(0xFF0000, 0xFFFFFF, NULL, RAM+0x040000);			// WORKRAM   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1, NULL, NULL);   AddWriteByte(0x100000, 0x101FFF, NULL, RAM+0x000000);		// VIDEORAM   AddWriteByte(0x108000, 0x108007, NULL, RAM+0x008000);		// Video registers   AddWriteByte(0x200000, 0x2007FF, NULL, RAM+0x010000);		// PALETTERAM   AddWriteByte(0x440000, 0x440FFF, NULL, RAM+0x020000);		// SPRITERAM   AddWriteByte(0x70000D, 0x70000D, M6295_A_WriteBank_68k, NULL);             // ADPCM BANKSWITCH   AddWriteByte(0x70000F, 0x70000F, OKIM6295_data_0_w, NULL);                 // ADPCM CHANNEL A   AddWriteByte(0xFF0000, 0xFFFFFF, NULL, RAM+0x040000);		// WORKRAM   AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);		// <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x100000, 0x101FFF, NULL, RAM+0x000000);		// VIDEORAM   AddWriteWord(0x108000, 0x108007, NULL, RAM+0x008000);		// Video registers   AddWriteWord(0x200000, 0x2007FF, NULL, RAM+0x010000);		// PALETTERAM   AddWriteWord(0x440000, 0x440FFF, NULL, RAM+0x020000);		// SPRITERAM   AddWriteWord(0xFF0000, 0xFFFFFF, NULL, RAM+0x040000);		// WORKRAM   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers...}static void ManiacsqDecode(char *S, int td){   int ta,tc,tb=0;   if(!load_rom(S, RAM, 0x40000)) return;   for(ta=0x00000;ta<0x40000;ta++){      tc=RAM[ta];      GFX[tb+0]|=((tc&0x80)>>7)<<td;      GFX[tb+1]|=((tc&0x40)>>6)<<td;      GFX[tb+2]|=((tc&0x20)>>5)<<td;      GFX[tb+3]|=((tc&0x10)>>4)<<td;      GFX[tb+4]|=((tc&0x08)>>3)<<td;      GFX[tb+5]|=((tc&0x04)>>2)<<td;      GFX[tb+6]|=((tc&0x02)>>1)<<td;      GFX[tb+7]|=((tc&0x01)>>0)<<td;      tb+=16;      if((tb&0xFF)==0){tb-=0xF8;}      else{if((tb&0xFF)==8){tb-=0x8;}}   }}void LoadManiacsq(void){   int ta;   RAMSize = 0x80000;   if(!(ROM=AllocateMem(0x40000)))    return;   if(!(RAM=AllocateMem(RAMSize)))    return;   if(!(GFX=AllocateMem(0x200000)))   return;    if(!(ADPCM=AllocateMem(0x140000))) return;   /* 68000 ROMs */	   if(!load_rom("d18", RAM, 0x20000)) return;   for(ta=0;ta<0x20000;ta++){      ROM[ta+ta]=RAM[ta];   }   if(!load_rom("d16", RAM, 0x20000)) return;   for(ta=0;ta<0x20000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   memset(GFX+0x00000,0x00,0x200000);   ManiacsqDecode("f3", 3); 		   ManiacsqDecode("f2", 2);   ManiacsqDecode("f1", 1);   ManiacsqDecode("f0", 0);     GFX_CHAR16 = GFX;   GFX_TILE16 = GFX_CHAR16;      RAM_VIDEO = RAM + 0x00000;   RAM_SPR   = RAM + 0x20000;      GFX_CHAR16_SOLID = make_solid_mask_16x16( GFX_CHAR16, 0x2000  );   GFX_TILE16_SOLID = GFX_CHAR16_SOLID;   InitPaletteMap(RAM+0x010000, 0x40, 0x10, 0x8000);   set_colour_mapper(&col_map_xbbb_bbgg_gggr_rrrr);   // ADPCM banks      if(!load_rom("c1", RAM, 0x80000))   return;   memcpy(ADPCM,RAM,0x40000);   memcpy(ADPCM+0x40000,RAM,0x80000);   memcpy(ADPCM+0xc0000,RAM,0x80000); // Twice the same rom... !   ADPCMSetBuffers(((struct ADPCMinterface*)&m6295_interface),ADPCM,0x40000);      memset(RAM+0x000000,0x00,0x50000);   memset(RAM+0x030000,0xFF,0x10);/* *  StarScream Stuff follows */   ByteSwap(ROM,0x40000);   ByteSwap(RAM,0x50000);   AddMemFetch(0x000000, 0x03FFFF, ROM);				// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x03FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x100000, 0x101FFF, NULL, RAM+0x000000);			// VIDEORAM   AddReadByte(0x200000, 0x2007FF, NULL, RAM+0x010000);			// PALETTERAM   AddReadByte(0x440000, 0x440FFF, NULL, RAM+0x020000);			// SPRITERAM   AddReadByte(0x700000, 0x700007, NULL, RAM+0x030000);                 // DSW/INPUT   AddReadByte(0x70000F, 0x70000F, OKIM6295_status_0_r, NULL);  	                // ADPCM CHANNEL A   AddReadByte(0xFF0000, 0xFFFFFF, NULL, RAM+0x040000);			// WORKRAM   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x03FFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x100000, 0x101FFF, NULL, RAM+0x000000);			// VIDEORAM   AddReadWord(0x200000, 0x2007FF, NULL, RAM+0x010000);			// PALETTERAM   AddReadWord(0x440000, 0x440FFF, NULL, RAM+0x020000);			// SPRITERAM   AddReadWord(0x700000, 0x700007, NULL, RAM+0x030000);			// DSW/INPUT   AddReadWord(0xFF0000, 0xFFFFFF, NULL, RAM+0x040000);			// WORKRAM   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1, NULL, NULL);   AddWriteByte(0x100000, 0x101FFF, NULL, RAM+0x000000);		// VIDEORAM   AddWriteByte(0x108000, 0x108007, NULL, RAM+0x008000);		// Video registers   AddWriteByte(0x200000, 0x2007FF, NULL, RAM+0x010000);		// PALETTERAM   AddWriteByte(0x440000, 0x440FFF, NULL, RAM+0x020000);		// SPRITERAM   AddWriteByte(0x70000D, 0x70000D, M6295_A_WriteBank_68k, NULL);             // ADPCM BANKSWITCH   AddWriteByte(0x70000F, 0x70000F, OKIM6295_data_0_w, NULL);                 // ADPCM CHANNEL A   AddWriteByte(0xFF0000, 0xFFFFFF, NULL, RAM+0x040000);		// WORKRAM   AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);		// <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x100000, 0x101FFF, NULL, RAM+0x000000);		// VIDEORAM   AddWriteWord(0x108000, 0x108007, NULL, RAM+0x008000);		// Video registers   AddWriteWord(0x200000, 0x2007FF, NULL, RAM+0x010000);		// PALETTERAM   AddWriteWord(0x440000, 0x440FFF, NULL, RAM+0x020000);		// SPRITERAM   AddWriteWord(0xFF0000, 0xFFFFFF, NULL, RAM+0x040000);		// WORKRAM   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers...}void ExecuteBiomToyFrame(void){   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(16,60));	// M68000 12MHz (60fps) but it's smoother with 16MHZ   cpu_interrupt(CPU_68K_0, 6);}void ExecuteManiacsqFrame(void){   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60));   cpu_interrupt(CPU_68K_0, 6);}void DrawBiomToy(void){   int zz,zzz,zzzz,x16,y16,x,y,ta;   UINT8 *map;   ClearPaletteMap();   clear_game_screen(0);  // needed to see the service screen properly      //  SCREEN 1

⌨️ 快捷键说明

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