📄 topspeed.c
字号:
GFX_OBJ_A[tb+7] =((tc&0x01)>>( 0)); tc=TMP[ta+0x40000]; GFX_OBJ_A[tb+8] =((tc&0x80)>>( 7)); GFX_OBJ_A[tb+9] =((tc&0x40)>>( 6)); GFX_OBJ_A[tb+10]=((tc&0x20)>>( 5)); GFX_OBJ_A[tb+11]=((tc&0x10)>>( 4)); GFX_OBJ_A[tb+12]=((tc&0x08)>>( 3)); GFX_OBJ_A[tb+13]=((tc&0x04)>>( 2)); GFX_OBJ_A[tb+14]=((tc&0x02)>>( 1)); GFX_OBJ_A[tb+15]=((tc&0x01)>>( 0)); tb+=16; } } if(romset==0){ if(!load_rom("b14-03", 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; } } else{ if(!load_rom("b14-46", TMP+0x00000, 0x20000)) return; // 16x16 OBJ A if(!load_rom("b14-47", TMP+0x20000, 0x20000)) return; // 16x16 OBJ A if(!load_rom("b14-44", TMP+0x40000, 0x20000)) return; // 16x16 OBJ A if(!load_rom("b14-45", TMP+0x60000, 0x20000)) return; // 16x16 OBJ A tb=0; for(ta=0;ta<0x40000;ta++){ tc=TMP[ta]; GFX_OBJ_A[tb+0] |=((tc&0x80)>>( 6)); GFX_OBJ_A[tb+1] |=((tc&0x40)>>( 5)); GFX_OBJ_A[tb+2] |=((tc&0x20)>>( 4)); GFX_OBJ_A[tb+3] |=((tc&0x10)>>( 3)); GFX_OBJ_A[tb+4] |=((tc&0x08)>>( 2)); GFX_OBJ_A[tb+5] |=((tc&0x04)>>( 1)); GFX_OBJ_A[tb+6] |=((tc&0x02)>>( 0)); GFX_OBJ_A[tb+7] |=((tc&0x01)<<( 1)); tc=TMP[ta+0x40000]; GFX_OBJ_A[tb+8] |=((tc&0x80)>>( 6)); GFX_OBJ_A[tb+9] |=((tc&0x40)>>( 5)); GFX_OBJ_A[tb+10]|=((tc&0x20)>>( 4)); GFX_OBJ_A[tb+11]|=((tc&0x10)>>( 3)); GFX_OBJ_A[tb+12]|=((tc&0x08)>>( 2)); GFX_OBJ_A[tb+13]|=((tc&0x04)>>( 1)); GFX_OBJ_A[tb+14]|=((tc&0x02)>>( 0)); GFX_OBJ_A[tb+15]|=((tc&0x01)<<( 1)); tb+=16; } } if(romset==0){ if(!load_rom("b14-02", 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; } } else{ if(!load_rom("b14-42", TMP+0x00000, 0x20000)) return; // 16x16 OBJ A if(!load_rom("b14-43", TMP+0x20000, 0x20000)) return; // 16x16 OBJ A if(!load_rom("b14-40", TMP+0x40000, 0x20000)) return; // 16x16 OBJ A if(!load_rom("b14-41", TMP+0x60000, 0x20000)) return; // 16x16 OBJ A tb=0; for(ta=0;ta<0x40000;ta++){ tc=TMP[ta]; GFX_OBJ_A[tb+0] |=((tc&0x80)>>( 5)); GFX_OBJ_A[tb+1] |=((tc&0x40)>>( 4)); GFX_OBJ_A[tb+2] |=((tc&0x20)>>( 3)); GFX_OBJ_A[tb+3] |=((tc&0x10)>>( 2)); GFX_OBJ_A[tb+4] |=((tc&0x08)>>( 1)); GFX_OBJ_A[tb+5] |=((tc&0x04)>>( 0)); GFX_OBJ_A[tb+6] |=((tc&0x02)<<( 1)); GFX_OBJ_A[tb+7] |=((tc&0x01)<<( 2)); tc=TMP[ta+0x40000]; GFX_OBJ_A[tb+8] |=((tc&0x80)>>( 5)); GFX_OBJ_A[tb+9] |=((tc&0x40)>>( 4)); GFX_OBJ_A[tb+10]|=((tc&0x20)>>( 3)); GFX_OBJ_A[tb+11]|=((tc&0x10)>>( 2)); GFX_OBJ_A[tb+12]|=((tc&0x08)>>( 1)); GFX_OBJ_A[tb+13]|=((tc&0x04)>>( 0)); GFX_OBJ_A[tb+14]|=((tc&0x02)<<( 1)); GFX_OBJ_A[tb+15]|=((tc&0x01)<<( 2)); tb+=16; } } if(romset==0){ if(!load_rom("b14-01", 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; } } else{ if(!load_rom("b14-38", TMP+0x00000, 0x20000)) return; // 16x16 OBJ A if(!load_rom("b14-39", TMP+0x20000, 0x20000)) return; // 16x16 OBJ A if(!load_rom("b14-36", TMP+0x40000, 0x20000)) return; // 16x16 OBJ A if(!load_rom("b14-37", TMP+0x60000, 0x20000)) return; // 16x16 OBJ A tb=0; for(ta=0;ta<0x40000;ta++){ tc=TMP[ta]; GFX_OBJ_A[tb+0] |=((tc&0x80)>>( 4)); GFX_OBJ_A[tb+1] |=((tc&0x40)>>( 3)); GFX_OBJ_A[tb+2] |=((tc&0x20)>>( 2)); GFX_OBJ_A[tb+3] |=((tc&0x10)>>( 1)); GFX_OBJ_A[tb+4] |=((tc&0x08)>>( 0)); GFX_OBJ_A[tb+5] |=((tc&0x04)<<( 1)); GFX_OBJ_A[tb+6] |=((tc&0x02)<<( 2)); GFX_OBJ_A[tb+7] |=((tc&0x01)<<( 3)); tc=TMP[ta+0x40000]; GFX_OBJ_A[tb+8] |=((tc&0x80)>>( 4)); GFX_OBJ_A[tb+9] |=((tc&0x40)>>( 3)); GFX_OBJ_A[tb+10]|=((tc&0x20)>>( 2)); GFX_OBJ_A[tb+11]|=((tc&0x10)>>( 1)); GFX_OBJ_A[tb+12]|=((tc&0x08)>>( 0)); GFX_OBJ_A[tb+13]|=((tc&0x04)<<( 1)); GFX_OBJ_A[tb+14]|=((tc&0x02)<<( 2)); GFX_OBJ_A[tb+15]|=((tc&0x01)<<( 3)); tb+=16; } } if(!load_rom("b14-07", TMP+0x00000, 0x20000)) return; // 8x8 TILES if(!load_rom("b14-06", TMP+0x20000, 0x20000)) return; // 8x8 TILES tb=0; for(ta=0;ta<0x20000;ta++){ GFX[tb+3]=TMP[ta+0x00000]&15; GFX[tb+2]=TMP[ta+0x00000]>>4; GFX[tb+1]=TMP[ta+0x20000]&15; GFX[tb+0]=TMP[ta+0x20000]>>4; tb+=4; } FreeMem(TMP); RAMSize=0x80000; if(!(RAM=AllocateMem(0x80000))) return; if(!(ROM=AllocateMem(0xC0000))) return; if(romset==0){ if(!load_rom("b14-67", RAM, 0x10000)) return; // 68000 MAIN ROM } else{ if(!load_rom("b14-67-1", RAM, 0x10000)) return; // 68000 MAIN ROM } for(ta=0;ta<0x10000;ta++){ ROM[ta+ta]=RAM[ta]; } if(romset==0){ if(!load_rom("b14-68", RAM, 0x10000)) return; } else{ if(!load_rom("b14-68-1", RAM, 0x10000)) return; } for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+1]=RAM[ta]; } if(romset==0){ if(!load_rom("b14-05", ROM+0x20000, 0x80000)) return; ByteSwap(ROM+0x20000,0x80000); } else{ if(!load_rom("b14-54", RAM+0x00000, 0x20000)) return; if(!load_rom("b14-55", RAM+0x20000, 0x20000)) return; for(ta=0;ta<0x40000;ta++){ ROM[ta+ta+0x20000]=RAM[ta]; } if(!load_rom("b14-52", RAM+0x00000, 0x20000)) return; if(!load_rom("b14-53", RAM+0x20000, 0x20000)) return; for(ta=0;ta<0x40000;ta++){ ROM[ta+ta+0x20001]=RAM[ta]; } } if(!load_rom("b14-69", RAM, 0x10000)) return; // 68000 SUB ROM for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+0xA0000]=RAM[ta]; } if(romset==0){ if(!load_rom("b14-71", RAM, 0x10000)) return; } else{ if(!load_rom("b14-70", RAM, 0x10000)) return; } for(ta=0;ta<0x10000;ta++){ ROM[ta+ta+0xA0001]=RAM[ta]; } /*-----[Sound Setup]-----*/ Z80ROM=RAM+0x64000; if(!load_rom("b14-25", Z80ROM, 0x10000)) return; // Z80 SOUND ROM AddTaitoYM2151(0x0348, 0x0294, 0x10000, NULL, NULL); /*-----------------------*/ memset(RAM+0x00000,0x00,0x64000); memset(RAM+0x55000,0xFF,0x00100); RAM_VIDEO = RAM+0x10000; RAM_VIDEO_2 = RAM+0x20000; RAM_SCROLL = RAM+0x1F000; RAM_SCROLL_2 = RAM+0x2F000; RAM_INPUT = RAM+0x55000; OBJECT_MAP = RAM+0x34000; GFX_OBJ_A_SOLID = make_solid_mask_16x8(GFX_OBJ_A, OBJ_A_COUNT); GFX_BG0_SOLID = make_solid_mask_8x8(GFX, 0x2000); set_colour_mapper(&col_map_xbbb_bbgg_gggr_rrrr); InitPaletteMap(RAM+0x30000, 0x100, 0x10, 0x8000); // Main 68000 Speed Hack // --------------------- WriteLong68k(&ROM[0x0063A],0x13FC0000); // move.b #$00,$AA0000 WriteLong68k(&ROM[0x0063E],0x00AA0000); // // Sub 68000 Speed Hack // --------------------- WriteLong68k(&ROM[0xB3CA8],0x4EF80100); // [B3CAE] WriteLong68k(&ROM[0xB413A],0x4EF80100); // [B4140] WriteWord68k(&ROM[0xA0100],0x4EB9); // WriteLong68k(&ROM[0xA0102],0x00014B9E); // WriteLong68k(&ROM[0xA0106],0x13FC0000); // move.b #$00,$AA0000 WriteLong68k(&ROM[0xA010A],0x00AA0000); // WriteWord68k(&ROM[0xA010E],0x6100-16); // // Init tc0220ioc emulation // ------------------------ tc0220ioc.RAM = RAM_INPUT; tc0220ioc.ctrl = 0; //TC0220_STOPCPU; reset_tc0220ioc(); memset(RAM_INPUT,0xFF,0x00020); // 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=0x1FFF; 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=0x1FFF; tc0100scn[0].layer[1].scr_x =16; tc0100scn[0].layer[1].scr_y =8; tc0100scn[1].layer[0].RAM =RAM_VIDEO_2+0x0000; tc0100scn[1].layer[0].GFX =GFX; tc0100scn[1].layer[0].MASK =GFX_BG0_SOLID; tc0100scn[1].layer[0].SCR =RAM_SCROLL_2+0; tc0100scn[1].layer[0].type =0; tc0100scn[1].layer[0].bmp_x =32; tc0100scn[1].layer[0].bmp_y =32; tc0100scn[1].layer[0].bmp_w =320; tc0100scn[1].layer[0].bmp_h =240; tc0100scn[1].layer[0].mapper =&Map_15bit_xBGR; tc0100scn[1].layer[0].tile_mask=0x1FFF; tc0100scn[1].layer[0].scr_x =16; tc0100scn[1].layer[0].scr_y =8; tc0100scn[1].layer[1].RAM =RAM_VIDEO_2+0x8000; tc0100scn[1].layer[1].GFX =GFX; tc0100scn[1].layer[1].MASK =GFX_BG0_SOLID; tc0100scn[1].layer[1].SCR =RAM_SCROLL_2+2; tc0100scn[1].layer[1].type =0; tc0100scn[1].layer[1].bmp_x =32; tc0100scn[1].layer[1].bmp_y =32; tc0100scn[1].layer[1].bmp_w =320; tc0100scn[1].layer[1].bmp_h =240; tc0100scn[1].layer[1].mapper =&Map_15bit_xBGR; tc0100scn[1].layer[1].tile_mask=0x1FFF; tc0100scn[1].layer[1].scr_x =16; tc0100scn[1].layer[1].scr_y =8; tc0100scn[0].RAM = RAM_VIDEO; tc0100scn[0].GFX_FG0 = NULL; tc0100scn[1].RAM = RAM_VIDEO_2; tc0100scn[1].GFX_FG0 = NULL; init_tc0100scn(0); init_tc0100scn(1); init_16x8_zoom(); zoom16_ofs = make_16x16_zoom_ofs_type1z(); zoom8_ofs = make_16x8_zoom_ofs_type1z();/* * StarScream Stuff follows */ ByteSwap(ROM,0xC0000); ByteSwap(RAM,0x64000); AddMemFetch(0x000000, 0x01FFFF, ROM+0x000000-0x000000); // 68000 ROM AddMemFetch(-1, -1, NULL); AddReadByte(0x000000, 0x01FFFF, NULL, ROM+0x000000); // 68000 ROM AddReadByte(0x080000, 0x0FFFFF, NULL, ROM+0x020000); // DATA ROM AddReadByte(0x400000, 0x40FFFF, NULL, RAM+0x000000); // 68000 RAM AddReadByte(0xA00000, 0xA0FFFF, NULL, RAM_VIDEO); // SCREEN RAM AddReadByte(0xB00000, 0xB0FFFF, NULL, RAM_VIDEO_2); // SCREEN RAM AddReadByte(0x7E0000, 0x7E0003, tc0140syt_read_main_68k, NULL); // SOUND AddReadByte(0x000000, 0xFFFFFF, BadReadByte, NULL); // <Bad Reads> AddReadByte(-1, -1, NULL, NULL); AddReadWord(0x000000, 0x01FFFF, NULL, ROM+0x000000); // 68000 ROM AddReadWord(0x080000, 0x0FFFFF, NULL, ROM+0x020000); // DATA ROM AddReadWord(0x400000, 0x40FFFF, NULL, RAM+0x000000); // 68000 RAM AddReadWord(0xA00000, 0xA0FFFF, NULL, RAM_VIDEO); // SCREEN RAM AddReadWord(0xB00000, 0xB0FFFF, NULL, RAM_VIDEO_2); // SCREEN RAM AddReadWord(0x500000, 0x503FFF, NULL, RAM+0x030000); // COLOUR RAM AddReadWord(0xE00000, 0xE0FFFF, NULL, OBJECT_MAP); // OBJECT CHAIN AddReadWord(0xD00000, 0xD00FFF, NULL, RAM+0x044000); // OBJECT RAM AddReadWord(0x000000, 0xFFFFFF, BadReadWord, NULL); // <Bad Reads> AddReadWord(-1, -1,NULL, NULL); AddWriteByte(0x400000, 0x40FFFF, NULL, RAM+0x000000); // 68000 RAM AddWriteByte(0xA00000, 0xA0FFFF, NULL, RAM_VIDEO); // SCREEN RAM AddWriteByte(0xB00000, 0xB0FFFF, NULL, RAM_VIDEO_2); // SCREEN RAM AddWriteByte(0xA20000, 0xA20003, NULL, RAM_SCROLL+6); // SCROLL Y AddWriteByte(0xA40000, 0xA40003, NULL, RAM_SCROLL+0); // SCROLL X AddWriteByte(0xA50000, 0xA50001, NULL, RAM_SCROLL+14); // CTRL AddWriteByte(0xB20000, 0xB20003, NULL, RAM_SCROLL_2+6); // SCROLL Y AddWriteByte(0xB40000, 0xB40003, NULL, RAM_SCROLL_2+0); // SCROLL X AddWriteByte(0xB50000, 0xB50001, NULL, RAM_SCROLL_2+14); // CTRL AddWriteByte(0x7E0000, 0x7E0003, tc0140syt_write_main_68k, NULL); // SOUND AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL); // <Bad Writes> AddWriteByte(-1, -1, NULL, NULL); AddWriteWord(0x400000, 0x40FFFF, NULL, RAM+0x000000); // 68000 RAM AddWriteWord(0xA00000, 0xA0FFFF, NULL, RAM_VIDEO); // SCREEN RAM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -