📄 biomtoy.c
字号:
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 + -