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

📄 chasehq2.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 3 页
字号:
   AddReadWordMC68000B(-1, -1, NULL, NULL);   AddWriteByteMC68000B(0x200000, 0x203FFF, NULL, RAM+0x030000);	// MAIN RAM   AddWriteByteMC68000B(0x208000, 0x20BFFF, NULL, RAM+0x008000);	// COMMON RAM   AddWriteByteMC68000B(0xA00000, 0xA01FFF, NULL, RAM+0x038000);	// ROADSCROLL RAM   AddWriteByteMC68000B(0xAA0000, 0xAA0001, Stop68000, NULL);		// Trap Idle 68000   AddWriteByteMC68000B(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);	// <Bad Writes>   AddWriteByteMC68000B(-1, -1, NULL, NULL);   AddWriteWordMC68000B(0x200000, 0x203FFF, NULL, RAM+0x030000);	// MAIN RAM   AddWriteWordMC68000B(0x208000, 0x20BFFF, NULL, RAM+0x008000);	// COMMON RAM   AddWriteWordMC68000B(0xA00000, 0xA01FFF, NULL, RAM+0x038000);	// ROADSCROLL RAM   AddWriteWordMC68000B(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);	// <Bad Writes>   AddWriteWordMC68000B(-1, -1, NULL, NULL);   AddInitMemoryMC68000B();	// Set Starscream mem pointers... }void LoadChaseHQ2(void){   load_actual(0);}void LoadChaseHQ2_alt(void){   load_actual(1);}void ClearChaseHQ2(void){   RemoveTaitoYM2610();   #ifdef RAINE_DEBUG      save_debug("ROM.bin",ROM,0x0A0000,1);      save_debug("RAM.bin",RAM,0x050000,1);      //save_debug("GFX.bin",GFX,0x100000,0);   #endif}void ExecuteChaseHQ2Frame(void){   static int int6_frame;   int wheel;   wheel = 0;   if(RAM[0x02281C])      wheel = -128;   if(RAM[0x02281D])      wheel = 127;   RAM[0x022818] = wheel;   RAM[0x02281A] = wheel>>8;   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   if(cpu_get_pc(CPU_68K_0) == 0x1006){      cpu_interrupt(CPU_68K_0, 4);      int6_frame ^=1;      if(int6_frame & 1)      cpu_interrupt(CPU_68K_0, 6);   }   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, 4);   Taito2610_Frame();			// Z80 and YM2610}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;*/   // OBJECT Z-SYSTEM   // ---------------   for(zz=0x40000;zz<0x41000;zz+=8){      //if((RAM[zz+2]&0x80)==pri){      zx=(RAM[zz+2]>>0)&0x3F;      zy=(RAM[zz+1]>>1)&0x3F;      if((zx!=0)&&(zy!=0)){         ta = ReadWord(&RAM[zz+6])&0xFFF;         if(ta!=0){            x=(32+(ReadWord(&RAM[zz+4])))&0x1FF;            y=( (64+32-10) + ReadWord(&RAM[zz+0]) - (zy) )&0x1FF;            MAP_PALETTE_MAPPED(               Map_15bit_xBGR,               (ReadWord(&RAM[zz+2])>>7)&0xFF,               16,               map            );            zoom_dat_x = zoom16_ofs+(zx<<2);            zoom_dat_y = zoom8_ofs+(zy<<3);            SPR_MAP = OBJECT_MAP + (ta<<6);            switch(RAM[zz+5]&0xC0){            case 0x00:            xx=x;            for(ry=0;ry<8;ry++){            zzy = zoom_dat_y[ry];            if((y>16)&&(y<240+32)){            ta=0;            for(rx=0;rx<4;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+=8;            x=xx;            }            break;            case 0x40:            x+=(zx+1);            xx=x;            for(ry=0;ry<8;ry++){            zzy = zoom_dat_y[ry];            if((y>16)&&(y<240+32)){            ta=0;            for(rx=0;rx<4;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+=8;            x=xx;            }            break;            case 0x80:            y+=zy;            xx=x;            for(ry=0;ry<8;ry++){            zzy = zoom_dat_y[ry];            y = (y-zzy)&0x1FF;            if((y>16)&&(y<240+32)){            ta=0;            for(rx=0;rx<4;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_FlipX(&GFX_OBJ_A[tb<<7],x,y,map,zzx,zzy);                  else						// all pixels; solid                     Draw16x8_Mapped_ZoomXY_FlipX(&GFX_OBJ_A[tb<<7],x,y,map,zzx,zzy);               }            }            ta+=2;            x = (x+zzx)&0x1FF;            }            }            SPR_MAP+=8;            x=xx;            }            break;            case 0xC0:            x+=(zx+1);            y+=zy;            xx=x;            for(ry=0;ry<8;ry++){            zzy = zoom_dat_y[ry];            y = (y-zzy)&0x1FF;            if((y>16)&&(y<240+32)){            ta=0;            for(rx=0;rx<4;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_FlipXY(&GFX_OBJ_A[tb<<7],x,y,map,zzx,zzy);                  else						// all pixels; solid                     Draw16x8_Mapped_ZoomXY_FlipXY(&GFX_OBJ_A[tb<<7],x,y,map,zzx,zzy);               }            }            ta+=2;            }            }            SPR_MAP+=8;            x=xx;            }            break;            }         }      }   //}   }}void DrawChaseHQ2(void){   ClearPaletteMap();   // Init tc0100scn emulation   // ------------------------   tc0100scn_layer_count = 0;   tc0100scn[0].ctrl = ReadWord(RAM_SCROLL+12);   // BG0   // ---   render_tc0100scn_layer_mapped(0,0);   // BG1   // ---   render_tc0100scn_layer_mapped(0,1);   // 3D-ROAD Z-SYSTEM   // ----------------   tc0150rod_init_palette();   tc0150rod_render(0x000,0x800);   // Z-SYSTEM OBJECT   // ---------------   render_z_system_sprites(1);   // FG0   // ---   render_tc0100scn_layer_mapped(0,2);   tc0150rod_show_palette();}/*Sprite List Format (8 bytes/sprite)===================================Byte | Bit(s) | Description-----+76543210+--------------------  0  |.xxxxxx.| Zoom (0-63)  0  |.......x| Y Position (High)  1  |xxxxxxxx| Y Position (Low)  2  |.xxxxxxx| Color Bank (High)  3  |x.......| Color Bank (Low)  3  |..xxxxxx| Zoom (0-63)  4  |.x......| Flip Y Axis  4  |x.......| Flip X Axis  4  |.......x| X Position (High)  5  |xxxxxxxx| X Position (Low)  6  |....xxxx| Sprite Number (High)  7  |xxxxxxxx| Sprite Number (Low)*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -