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

📄 topspeed.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 3 页
字号:
   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 + -