📄 topspeed.c
字号:
AddWriteWord(0xB00000, 0xB0FFFF, NULL, RAM_VIDEO_2); // SCREEN RAM AddWriteWord(0xD00000, 0xD00FFF, NULL, RAM+0x044000); // OBJECT RAM AddWriteWord(0x500000, 0x503FFF, NULL, RAM+0x030000); // COLOUR RAM AddWriteWord(0x800000, 0x80FFFF, NULL, RAM+0x045000); // ? AddWriteWord(0xE00000, 0xE0FFFF, NULL, OBJECT_MAP); // OBJECT CHAIN AddWriteWord(0xA20000, 0xA20003, NULL, RAM_SCROLL+6); // SCROLL Y AddWriteWord(0xA40000, 0xA40003, NULL, RAM_SCROLL+0); // SCROLL X AddWriteWord(0xA50000, 0xA50001, NULL, RAM_SCROLL+14); // CTRL AddWriteWord(0xB20000, 0xB20003, NULL, RAM_SCROLL_2+6); // SCROLL Y AddWriteWord(0xB40000, 0xB40003, NULL, RAM_SCROLL_2+0); // SCROLL X AddWriteWord(0xB50000, 0xB50001, NULL, RAM_SCROLL_2+14); // CTRL AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL); // <Bad Writes> AddWriteWord(-1, -1, NULL, NULL); AddInitMemory(); // Set Starscream mem pointers... AddMemFetchMC68000B(0x000000, 0x01FFFF, ROM+0x0A0000-0x000000); // 68000 ROM AddMemFetchMC68000B(-1, -1, NULL); AddReadByteMC68000B(0x000000, 0x01FFFF, NULL, ROM+0x0A0000); // 68000 ROM AddReadByteMC68000B(0x400000, 0x40FFFF, NULL, RAM+0x000000); // COMMON RAM AddReadByteMC68000B(0x880000, 0x880003, tc0220ioc_rb_port, NULL); // INPUT AddReadByteMC68000B(0x000000, 0xFFFFFF, BadReadByte, NULL); // <Bad Reads> AddReadByteMC68000B(-1, -1, NULL, NULL); AddReadWordMC68000B(0x000000, 0x01FFFF, NULL, ROM+0x0A0000); // 68000 ROM AddReadWordMC68000B(0x400000, 0x40FFFF, NULL, RAM+0x000000); // COMMON RAM AddReadWordMC68000B(0x880000, 0x880003, tc0220ioc_rw_port, NULL); // INPUT AddReadWordMC68000B(0x000000, 0xFFFFFF, BadReadWord, NULL); // <Bad Reads> AddReadWordMC68000B(-1, -1, NULL, NULL); AddWriteByteMC68000B(0x400000, 0x40FFFF, NULL, RAM+0x000000); // COMMON RAM AddWriteByteMC68000B(0x880000, 0x880003, tc0220ioc_wb_port, NULL); // INPUT AddWriteByteMC68000B(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByteMC68000B(0x000000, 0xFFFFFF, DefBadWriteByte, NULL); // <Bad Writes> AddWriteByteMC68000B(-1, -1, NULL, NULL); AddWriteWordMC68000B(0x400000, 0x40FFFF, NULL, RAM+0x000000); // COMMON RAM AddWriteWordMC68000B(0x880000, 0x880003, tc0220ioc_ww_port, NULL); // INPUT AddWriteWordMC68000B(0x000000, 0xFFFFFF, DefBadWriteWord, NULL); // <Bad Writes> AddWriteWordMC68000B(-1, -1, NULL, NULL); AddInitMemoryMC68000B(); // Set Starscream mem pointers... }void LoadFullThrottle(void){ romset=0; LoadActual();}void LoadTopSpeed(void){ romset=1; LoadActual();}void ClearFullThrottle(void){ RemoveTaitoYM2151(); #ifdef RAINE_DEBUG //save_debug("GFX.bin",GFX_OBJ_A,OBJ_A_COUNT*0x80,0); save_debug("ROM.bin",ROM,0x0C0000,1); save_debug("RAM.bin",RAM,RAMSize,1); #endif}void ClearTopSpeed(void){ RemoveTaitoYM2151(); #ifdef RAINE_DEBUG //save_debug("GFX.bin",GFX_OBJ_A,OBJ_A_COUNT*0x80,0); save_debug("ROM.bin",ROM,0x0C0000,1); save_debug("RAM.bin",RAM,RAMSize,1); #endif}void ExecuteFullThrottleFrame(void){/*----[Start of Keyboard Support]-----*/// Wheel Hack RAM[0x05501A] = 0x00; RAM[0x055018] = 0x00;//Player presses left on keyboard if (RAM[0x05501C]) { RAM[0x05501A] = 0xFF; RAM[0x055018] = 0x80; }//Player presses right on keyboard if (RAM[0x05501D]) { RAM[0x05501A] = 0x00; RAM[0x055018] = 0x7F; }// Pedals Hack RAM[0x055006] &= ~0x80; RAM[0x055006] &= ~0x40; RAM[0x055006] &= ~0x20;//Player presses accelerator on keyboard if (RAM[0x05501E]) { RAM[0x055006] |= 0x80; RAM[0x055006] &= ~0x40; RAM[0x055006] &= ~0x20;} RAM[0x055004] &= ~0x80; RAM[0x055004] &= ~0x40; RAM[0x055004] &= ~0x20;//Player presses brake on keyboard if (RAM[0x05501B]) { RAM[0x055004] |= 0x80; RAM[0x055004] &= ~0x40; RAM[0x055004] &= ~0x20;}/*----[End of Keyboard Support]-----*/ tcpu=0; cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60)); // M68000 12MHz (60fps) #ifdef RAINE_DEBUG print_debug("PC0:%06x SR0:%04x\n",s68000context.pc,s68000context.sr); #endif cpu_interrupt(CPU_68K_0, 6); tcpu=1; cpu_execute_cycles(CPU_68K_1, CPU_FRAME_MHz(12,60)); // M68000 12MHz (60fps) #ifdef RAINE_DEBUG print_debug("PC1:%06x SR1:%04x\n",s68000context.pc,s68000context.sr); #endif cpu_interrupt(CPU_68K_1, 5); Taito2151_Frame(); // Z80 and YM2151}static void render_z_system_sprites(int pri){ int x,y,ta,tb,zz; int zx,zy,rx,ry,xx,zzx,zzy; UINT8 *map,*SPR_MAP; UINT8 *zoom_dat_x; UINT8 *zoom_dat_y;/* if(pri!=0) pri=0x00; else pri=0x80;*//*01: FE00 ZOOM01: 01FF Y23: 007F ZOOM45: 8000 PRIORITY?45: 4000 FLIP Y45: 01FF X67: FF00 COLOUR67: 00FF TILE*/ // OBJECT Z-SYSTEM // --------------- for(zz=0x447F8;zz>=0x44000;zz-=8){ //if((RAM[zz+2]&0x80)==pri){ zx=(RAM[zz+2]>>0)&0x7F; zy=(RAM[zz+1]>>1)&0x7F; if((zx!=0)&&(zy!=0)){ ta = ReadWord(&RAM[zz+6])&0x0FF; if(ta!=0){ x=(32+ReadWord(&RAM[zz+4]))&0x1FF; //y=(32+ReadWord(&RAM[zz+0])+(0x3F-(zy>>1)))&0x1FF; y=(((128-16)+32+7)+(ReadWord(&RAM[zz+0])-zy))&0x1FF; MAP_PALETTE_MAPPED_NEW( (ReadWord(&RAM[zz+6])>>8)&0xFF, 16, map ); zoom_dat_x = zoom16_ofs+(zx<<3); zoom_dat_y = zoom8_ofs+(zy<<4); SPR_MAP = OBJECT_MAP + (ta<<8); switch(RAM[zz+5]&0x40){ case 0x00: xx=x; for(ry=0;ry<16;ry++){ zzy = zoom_dat_y[ry]; if((y>16)&&(y<240+32)){ ta=0; for(rx=0;rx<8;rx++){ zzx = zoom_dat_x[rx]; if((x>16)&&(x<320+32)){ tb=ReadWord(&SPR_MAP[ta])&0x7FFF; if(GFX_OBJ_A_SOLID[tb]!=0){ // No pixels; skip if(GFX_OBJ_A_SOLID[tb]==1) // Some pixels; trans Draw16x8_Trans_Mapped_ZoomXY(&GFX_OBJ_A[tb<<7],x,y,map,zzx,zzy); else // all pixels; solid Draw16x8_Mapped_ZoomXY(&GFX_OBJ_A[tb<<7],x,y,map,zzx,zzy); } } ta+=2; x = (x+zzx)&0x1FF; } } y = (y+zzy)&0x1FF; SPR_MAP+=16; x=xx; } break; case 0x40: x+=(zx+1); xx=x; for(ry=0;ry<16;ry++){ zzy = zoom_dat_y[ry]; if((y>16)&&(y<240+32)){ ta=0; for(rx=0;rx<8;rx++){ zzx = zoom_dat_x[rx]; x = (x-zzx)&0x1FF; if((x>16)&&(x<320+32)){ tb=ReadWord(&SPR_MAP[ta])&0x7FFF; if(GFX_OBJ_A_SOLID[tb]!=0){ // No pixels; skip if(GFX_OBJ_A_SOLID[tb]==1) // Some pixels; trans Draw16x8_Trans_Mapped_ZoomXY_FlipY(&GFX_OBJ_A[tb<<7],x,y,map,zzx,zzy); else // all pixels; solid Draw16x8_Mapped_ZoomXY_FlipY(&GFX_OBJ_A[tb<<7],x,y,map,zzx,zzy); } } ta+=2; } } y = (y+zzy)&0x1FF; SPR_MAP+=16; x=xx; } break; } } } //} }}void DrawFullThrottle(void){ ClearPaletteMap(); // Init tc0100scn emulation // ------------------------ tc0100scn_layer_count = 0; tc0100scn[0].ctrl = ReadWord(RAM_SCROLL+12); tc0100scn[1].ctrl = ReadWord(RAM_SCROLL_2+12); // BG0 // --- render_tc0100scn_layer_mapped(1,1); // BG1 // --- render_tc0100scn_layer_mapped(1,0); // BG2 // --- render_tc0100scn_layer_mapped(0,1); // Z-SYSTEM OBJECT // --------------- //if(check_layer_enabled(obj_id)) render_z_system_sprites(1); // BG3 // --- render_tc0100scn_layer_mapped(0,0);}/*FULL THROTTLE - JROM--------------------fullthr-------+------------------------------------B14-01 | GFX Type A (even planes?)B14-02 | GFX Type A (odd planes?)B14-03 | GFX Type B (even planes?)B14-04 | GFX Type B (odd planes?)B14-05 |*Main 68k Data RomB14-06 |*GFX BG0 (odd)B14-07 |*GFX BG0 (even)B14-25 |*SOUND Z80B14-28 | M5205 ROMB14-29 | M5205 ROMB14-30 | GFX ROADSCROLLB14-31 | ??? with Z80 code ???B14-67 |*MAIN MC68000 (even)B14-68 |*MAIN MC68000 (odd)B14-69 |*SUB MC68000 (even)B14-71 |*SUB MC68000 (odd)-------+------------------------------------TOP SPEED - JH--------------topspalt-----------+------------------------------------B14-06.ROM | GFX BG0 (odd)B14-07.ROM | GFX BG0 (even)B14-23.ROMB14-24.ROMB14-25.ROMB14-26.ROMB14-28.ROM | M5205 ROMB14-29.ROM | M5205 ROMB14-30.ROM | GFX ROADSCROLLB14-56.ROMB14-57.ROMB14-58.ROMB14-59.ROMB14-60.ROMB14-61.ROMB14-62.ROMB14-63.ROMB14-64.ROM-----------+------------------------------------TOP SPEED - MALCOR------------------topspeed---------+------------------------------------B14-06 | GFX BG0 (odd) [Equal]B14-07 | GFX BG0 (even) [Equal]B14-25 | Sound Z80 [Equal]B14-28 | M5205 ROM [Equal]B14-29 | M5205 ROM [Equal]B14-30 | GFX ROADSCROLL [Equal]B14-31 | ??? with Z80 code ??? [Equal but size diff]B14-36 | Gfx#3 (even#0)B14-37 | Gfx#3 (even#1)B14-38 | Gfx#3 (odd#0)B14-39 | Gfx#3 (odd#1)B14-40 | Gfx#2 (even#0)B14-41 | Gfx#2 (even#1)B14-42 | Gfx#2 (odd#0)B14-43 | Gfx#2 (odd#1)B14-44 | Gfx#1 (even#0)B14-45 | Gfx#1 (even#1)B14-46 | Gfx#1 (odd#0)B14-47 | Gfx#1 (odd#1)B14-48 | Gfx#0 (even#0)B14-49 | Gfx#0 (even#1)B14-50 | Gfx#0 (odd#0)B14-51 | Gfx#0 (odd#1)B14-52 | Main 68k Data Rom (even#0)B14-53 | Main 68k Data Rom (even#1)B14-54 | Main 68k Data Rom (odd#0)B14-55 | Main 68k Data Rom (odd#1)B14-67-1 | MAIN MC68000 (even) [Diff]B14-68-1 | MAIN MC68000 (odd) [Diff]B14-69 | SUB MC68000 (even) [Equal]B14-70 | SUB MC68000 (odd) [Small Diff: Rom Switch]---------+------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -