📄 superchs.c
字号:
SCR1_YOFS=0xFFF8; SCR2_YOFS=0xFFF8; SCR3_YOFS=0xFFF8; if(!load_rom("d46-35.27", RAM, 0x40000)) return; for(ta=0;ta<0x40000;ta++){ ROM[(ta<<2)+0]=RAM[ta]; } if(!load_rom("d46-34.25", RAM, 0x40000)) return; for(ta=0;ta<0x40000;ta++){ ROM[(ta<<2)+1]=RAM[ta]; } if(!load_rom("d46-33.23", RAM, 0x40000)) return; for(ta=0;ta<0x40000;ta++){ ROM[(ta<<2)+2]=RAM[ta]; } if(!load_rom("d46-31.21", RAM, 0x40000)) return; for(ta=0;ta<0x40000;ta++){ ROM[(ta<<2)+3]=RAM[ta]; } // Load 68000 PROGRAM ROMS ROM3 = load_region[REGION_ROM3]; M68000ROM = load_region[REGION_ROM2]; if(!(PCMROM=AllocateMem(0xe00000))) return; load_be("d46-10.2",PCMROM+0x000000,0x200000); load_be("d46-12.4",PCMROM+0x400000,0x200000); load_be("d46-11.5",PCMROM+0x800000,0x200000); max_banks_this_game=6; memset(PCMROM+0xc00000,0x1fffff,0); memset(RAM+0x00000,0x00,0xB0000); memset(RAM+0x69000,0xFF,0x01000); RAM[0x69001] &= ~8; add_eeprom(EEPROM, 0x80, EPR_INVALIDATE_ON_ROM_CHANGE); load_eeprom(); // eeprom hacks WriteWord68k(&ROM[0x007292],0x7F00); // raine #$00 <read eeprom> WriteWord68k(&ROM[0x007294],0x4E75); // rts WriteWord68k(&ROM[0x007316],0x7F01); // raine #$01 <write eeprom> WriteWord68k(&ROM[0x007318],0x4E75); // rts // main cpu speed hack WriteWord68k(&ROM[0x0006FA],0x7F02); // raine #$02 <stop cpu> WriteWord68k(&ROM[0x0006FC],0x6100-8); // bra.s <loop> // main rom checksum WriteWord68k(&ROM[0x0036AA],0x4E75); // communication lockup WriteWord68k(&ROM[0x0005D0],0x4E71); // sub cpu speed hack WriteLong68k(&ROM[0x10044E],0x4EF80300); WriteWord68k(&ROM[0x100300],0x52B9); WriteLong68k(&ROM[0x100302],0x0080000A); WriteLong68k(&ROM[0x100306],0x13FC0000); WriteLong68k(&ROM[0x10030A],0x00AA0000); WriteWord68k(&ROM[0x10030E],0x6100-16); F3SystemEEPROMAccess=&F3SysEEPROMAccessMode1; set_colour_mapper(&col_map_xxxx_xxxx_rrrr_rrrr_gggg_gggg_bbbb_bbbb); InitPaletteMap(RAM+0x60000, 0x200, 0x40, 0x8000); init_m68k(); setup_sound_68000();/* * StarScream Stuff follows */ ByteSwap(ROM3,0x40000); AddMemFetchMC68000B(0x000000, 0x03FFFF, ROM3-0x000000); // 68000 ROM AddMemFetchMC68000B(-1, -1, NULL); AddReadByteMC68000B(0x000000, 0x03FFFF, NULL, ROM3); // 68000 ROM AddReadByteMC68000B(0x200000, 0x20FFFF, NULL, RAM+0x080000); // WORK RAM AddReadByteMC68000B(0x800000, 0x80FFFF, ram_comm_rb, NULL); // COMMON RAM AddReadByteMC68000B(0x600000, 0x60FFFF, NULL, RAM+0x090000); // ? AddReadByteMC68000B(0xA00000, 0xA001FF, NULL, RAM+0x0A0000); // ? AddReadByteMC68000B(0x000000, 0xFFFFFF, DefBadReadByte, NULL); // <Bad Reads> AddReadByteMC68000B(-1, -1, NULL, NULL); AddReadWordMC68000B(0x000000, 0x03FFFF, NULL, ROM3); // 68000 ROM AddReadWordMC68000B(0x200000, 0x20FFFF, NULL, RAM+0x080000); // WORK RAM AddReadWordMC68000B(0x800000, 0x80FFFF, ram_comm_rw, NULL); // COMMON RAM AddReadWordMC68000B(0x600000, 0x60FFFF, NULL, RAM+0x090000); // ? AddReadWordMC68000B(0xA00000, 0xA001FF, NULL, RAM+0x0A0000); // ? AddReadWordMC68000B(0x000000, 0xFFFFFF, DefBadReadWord, NULL); // <Bad Reads> AddReadWordMC68000B(-1, -1,NULL, NULL); AddWriteByteMC68000B(0x200000, 0x20FFFF, NULL, RAM+0x080000); // WORK RAM AddWriteByteMC68000B(0x800000, 0x80FFFF, ram_comm_wb, NULL); // COMMON RAM AddWriteByteMC68000B(0x600000, 0x60FFFF, NULL, RAM+0x090000); // ? AddWriteByteMC68000B(0xA00000, 0xA001FF, NULL, RAM+0x0A0000); // ? AddWriteByteMC68000B(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByteMC68000B(0x000000, 0xFFFFFF, DefBadWriteByte, NULL); // <Bad Writes> AddWriteByteMC68000B(-1, -1, NULL, NULL); AddWriteWordMC68000B(0x200000, 0x20FFFF, NULL, RAM+0x080000); // WORK RAM AddWriteWordMC68000B(0x800000, 0x80FFFF, ram_comm_ww, NULL); // COMMON RAM AddWriteWordMC68000B(0x600000, 0x60FFFF, NULL, RAM+0x090000); // ? AddWriteWordMC68000B(0xA00000, 0xA001FF, NULL, RAM+0x0A0000); // ? AddWriteWordMC68000B(0x000000, 0xFFFFFF, DefBadWriteWord, NULL); // <Bad Writes> AddWriteWordMC68000B(-1, -1, NULL, NULL); AddInitMemoryMC68000B(); // Set Starscream mem pointers... Reset68020();}void ClearSuperChase(void){ save_eeprom(); #ifdef RAINE_DEBUG save_debug("ROM.bin",ROM3,0x40000,0); save_debug("RAM.bin",RAM,0x0B0000,0); //save_debug("GFX.bin",GFX_OBJ_A,OBJ_A_COUNT*0x100,0); #endif}void ExecuteSuperChaseFrame(void){ int ta; for (ta=0; ta<f3_slices; ta++) { cpu_execute_cycles(CPU_M68020_0, CPU_FRAME_MHz(16,60*f3_slices)); //1600000/f3_slices); if (RaineSoundCard) { cpu_execute_cycles(CPU_68K_0,CPU_FRAME_MHz(16,60*f3_slices)); // M68000 16MHz (60fps) if (int7_active) { f3_timer_callback(); } } } #ifdef RAINE_DEBUG print_debug("PC020:%06x SR:%04x\n",regs.pc,regs.sr); #endif Interrupt68020(2); Interrupt68020(3); cpu_execute_cycles(CPU_68K_1, CPU_FRAME_MHz(8,60)); // M68000 8MHz (60fps) #ifdef RAINE_DEBUG // Not sure wether these are actually about the 2nd 68k... print_debug("PC000:%06x SR0:%04x\n",s68000context.pc,s68000context.sr); #endif if(((regs.sr & 0x0700)!=0x0700)&&(s68000context.pc==0x030e)) cpu_interrupt(CPU_68K_1, 4); IntF3System();}void DrawSuperChase(void){ int x,y,ta,zz,zzz,zzzz,x16,y16; UINT8 *map; ClearPaletteMap(); // Init tc0003vcu emulation // ------------------------ tc0003vcu_layer_count = 0; if(RefreshBuffers){ tc0003vcu.RAM = RAM+0x20000; tc0003vcu.mapper = &Map_24bit_xRGB; tc0003vcu.bmp_x = 64; tc0003vcu.bmp_y = 64; tc0003vcu.bmp_w = 320; tc0003vcu.bmp_h = 240; tc0003vcu.scr_x = 0; tc0003vcu.scr_y = 0; } if(check_layer_enabled(f3_bg0_id)){ MAKE_SCROLL_1024x512_4_16( (ReadWord68k(&RAM_SCR0[0])-SCR0_XOFS)>>0, (ReadWord68k(&RAM_SCR0[8])-SCR0_YOFS)>>0 ); START_SCROLL_1024x512_4_16(64,64,320,240); MAP_PALETTE_MAPPED_NEW( ReadWord68k(&RAM_BG0[zz])&0x1FF, 16, map ); switch(RAM_BG0[zz]&0xC0){ case 0x00: Draw16x16_Mapped_Rot(&GFX_BG0[(ReadWord68k(&RAM_BG0[zz+2])&0x3FFF)<<8],x,y,map); break; case 0x40: Draw16x16_Mapped_FlipY_Rot(&GFX_BG0[(ReadWord68k(&RAM_BG0[zz+2])&0x3FFF)<<8],x,y,map); break; case 0x80: Draw16x16_Mapped_FlipX_Rot(&GFX_BG0[(ReadWord68k(&RAM_BG0[zz+2])&0x3FFF)<<8],x,y,map); break; case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&GFX_BG0[(ReadWord68k(&RAM_BG0[zz+2])&0x3FFF)<<8],x,y,map); break; } END_SCROLL_1024x512_4_16(); } if(check_layer_enabled(f3_bg1_id)){ MAKE_SCROLL_1024x512_4_16( (ReadWord68k(&RAM_SCR1[0])-SCR1_XOFS)>>0, (ReadWord68k(&RAM_SCR1[8])-SCR1_YOFS)>>0 ); START_SCROLL_1024x512_4_16(64,64,320,240); ta=ReadWord68k(&RAM_BG1[zz+2])&0x3FFF; if(ta!=0){ MAP_PALETTE_MAPPED_NEW( ReadWord68k(&RAM_BG1[zz])&0x1FF, 16, map ); if(GFX_BG0_SOLID[ta]==0){ switch(RAM_BG1[zz]&0xC0){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0x40: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0x80: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_BG0[ta<<8],x,y,map); break; } } else{ switch(RAM_BG1[zz]&0xC0){ case 0x00: Draw16x16_Mapped_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0x40: Draw16x16_Mapped_FlipY_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0x80: Draw16x16_Mapped_FlipX_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&GFX_BG0[ta<<8],x,y,map); break; } } } END_SCROLL_1024x512_4_16(); } if(check_layer_enabled(f3_bg2_id)){ MAKE_SCROLL_1024x512_4_16( (ReadWord68k(&RAM_SCR2[0])-SCR2_XOFS)>>0, (ReadWord68k(&RAM_SCR2[8])-SCR2_YOFS)>>0 ); START_SCROLL_1024x512_4_16(64,64,320,240); ta=ReadWord68k(&RAM_BG2[zz+2])&0x3FFF; if(ta!=0){ MAP_PALETTE_MAPPED_NEW( ReadWord68k(&RAM_BG2[zz])&0x1FF, 16, map ); if(GFX_BG0_SOLID[ta]==0){ switch(RAM_BG2[zz]&0xC0){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0x40: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0x80: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_BG0[ta<<8],x,y,map); break; } } else{ switch(RAM_BG2[zz]&0xC0){ case 0x00: Draw16x16_Mapped_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0x40: Draw16x16_Mapped_FlipY_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0x80: Draw16x16_Mapped_FlipX_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&GFX_BG0[ta<<8],x,y,map); break; } } } END_SCROLL_1024x512_4_16(); } if(check_layer_enabled(f3_bg3_id)){ MAKE_SCROLL_1024x512_4_16( (ReadWord68k(&RAM_SCR3[0])-SCR3_XOFS)>>0, (ReadWord68k(&RAM_SCR3[8])-SCR3_YOFS)>>0 ); START_SCROLL_1024x512_4_16(64,64,320,240); ta=ReadWord68k(&RAM_BG3[zz+2])&0x3FFF; if(ta!=0){ MAP_PALETTE_MAPPED_NEW( ReadWord68k(&RAM_BG3[zz])&0x1FF, 16, map ); if(GFX_BG0_SOLID[ta]==0){ switch(RAM_BG3[zz]&0xC0){ case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0x40: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0x80: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0xC0: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_BG0[ta<<8],x,y,map); break; } } else{ switch(RAM_BG3[zz]&0xC0){ case 0x00: Draw16x16_Mapped_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0x40: Draw16x16_Mapped_FlipY_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0x80: Draw16x16_Mapped_FlipX_Rot(&GFX_BG0[ta<<8],x,y,map); break; case 0xC0: Draw16x16_Mapped_FlipXY_Rot(&GFX_BG0[ta<<8],x,y,map); break; } } } END_SCROLL_1024x512_4_16(); } if(check_layer_enabled(f3_bg5_id)){ f3video_render_fg0_gfx2(); }}/*d67-01.rom | Ensoniq Sample Datad67-02.rom | Ensoniq Sample Datad67-03.rom | Zoom Tiles (plane#0)d67-04.rom | Zoom Tiles (plane#1)d67-05.rom | Zoom Tiles (plane#2)d67-06.rom | Zoom Tiles (plane#3)d67-07.rom | Zoom Tiles (plane#4)d67-08.rom | 16x16 F3 Tiles (even)d67-09.rom | 16x16 F3 Tiles (odd)d67-10.rom | 8x8 F2 Tiles (even)d67-11.rom | 8x8 F2 Tiles (odd)d67-12.rom | Mask data (???)d67-13.rom | Zoom Object Mapsd67-17.rom | 68020 rom (byte#2)d67-18.rom | 68020 rom (byte#1)d67-19.rom | 68020 rom (byte#0)d67-20.rom | 68000 rom (even)d67-21.rom | 68000 rom (odd)d67-23.rom | 68020 rom (byte#3)readme.txt | dumped by aracorn*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -