📄 chasehq2.c
字号:
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 + -