📄 aquajack.c
字号:
AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL); // <Bad writes> AddWriteByte(-1, -1, NULL, NULL); AddWriteWord(0x100000, 0x107FFF, NULL, RAM+0x000000); // 68000 RAM AddWriteWord(0xA00000, 0xA0FFFF, NULL, RAM_VIDEO); // SCREEN RAM AddWriteWord(0xC40000, 0xC403FF, NULL, RAM+0x01E000); // OBJECT RAM AddWriteWord(0x300000, 0x300007, tc0110pcr_ww, NULL); // COLOUR RAM AddWriteWord(0xA20000, 0xA2000F, NULL, RAM_SCROLL); // SCROLL RAM AddWriteWord(0x800000, 0x801FFF, NULL, RAM+0x020000); // ROAD RAM AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL); // <Bad writes> AddWriteWord(-1, -1, NULL, NULL); AddInitMemory(); // Set Starscream mem pointers... AddMemFetchMC68000B(0x000000, 0x03FFFF, ROM+0x040000-0x000000); // 68000 ROM AddMemFetchMC68000B(-1, -1, NULL); AddReadByteMC68000B(0x000000, 0x03FFFF, NULL, ROM+0x040000); // 68000 ROM AddReadByteMC68000B(0x100000, 0x103FFF, NULL, RAM+0x018000); // SUB LOCAL RAM AddReadByteMC68000B(0x104000, 0x107FFF, NULL, RAM+0x004000); // COMMON RAM AddReadByteMC68000B(0x300000, 0x300003, tc0140syt_read_main_68k, NULL); // SOUND COMM AddReadByteMC68000B(0x200000, 0x20000F, NULL, RAM_INPUT); // INPUT AddReadByteMC68000B(0x000000, 0xFFFFFF, DefBadReadByte, NULL); // <Bad Reads> AddReadByteMC68000B(-1, -1, NULL, NULL); AddReadWordMC68000B(0x000000, 0x03FFFF, NULL, ROM+0x040000); // 68000 ROM AddReadWordMC68000B(0x100000, 0x103FFF, NULL, RAM+0x018000); // SUB LOCAL RAM AddReadWordMC68000B(0x104000, 0x107FFF, NULL, RAM+0x004000); // COMMON RAM AddReadWordMC68000B(0x300000, 0x300003, tc0140syt_read_main_68k, NULL); // SOUND COMM AddReadWordMC68000B(0x200000, 0x20000F, NULL, RAM_INPUT); // INPUT AddReadWordMC68000B(0x000000, 0xFFFFFF, DefBadReadWord, NULL); // <Bad Reads> AddReadWordMC68000B(-1, -1, NULL, NULL); AddWriteByteMC68000B(0x100000, 0x103FFF, NULL, RAM+0x018000); // SUB LOCAL RAM AddWriteByteMC68000B(0x104000, 0x107FFF, NULL, RAM+0x004000); // COMMON RAM AddWriteByteMC68000B(0x200000, 0x20000F, tc0220ioc_wb, NULL); // INPUT AddWriteByteMC68000B(0xAA0000, 0xAA0001, Stop68000, NULL); // Trap Idle 68000 AddWriteByteMC68000B(0x000000, 0xFFFFFF, DefBadWriteByte, NULL); // <Bad Writes> AddWriteByteMC68000B(-1, -1, NULL, NULL); AddWriteWordMC68000B(0x100000, 0x103FFF, NULL, RAM+0x018000); // SUB LOCAL RAM AddWriteWordMC68000B(0x104000, 0x107FFF, NULL, RAM+0x004000); // COMMON RAM AddWriteWordMC68000B(0x300000, 0x300003, tc0140syt_write_main_68k, NULL); // SOUND COMM AddWriteWordMC68000B(0x200000, 0x20000F, tc0220ioc_ww, NULL); // INPUT AddWriteWordMC68000B(0x000000, 0xFFFFFF, DefBadWriteWord, NULL); // <Bad Writes> AddWriteWordMC68000B(-1, -1, NULL, NULL); AddInitMemoryMC68000B(); // Set Starscream mem pointers... }void clear_aqua_jack(void){ RemoveTaitoYM2610(); #ifdef RAINE_DEBUG //save_debug("ROM.bin",ROM,0x080000,1); save_debug("RAM.bin",RAM,0x040000,1); //save_debug("GFX.bin",GFX,0x55B000,0); #endif}void execute_aqua_jack_frame(void){#if 0 int ta; for(ta=0;ta<16;ta++){ cpu_execute_cycles(CPU_68K_0, 1800000/16); cpu_execute_cycles(CPU_68K_1, 1800000/16); } cpu_interrupt(CPU_68K_0, 4);#else int ta; ta=0;CPULoop: cpu_execute_cycles(CPU_68K_0, 1800000); if((s68000context.pc)>=0x100){ if((s68000context.pc)!=0x208){ #ifdef RAINE_DEBUG print_debug("PC0-WAIT:%06x SR0:%04x\n",s68000context.pc,s68000context.sr); #endif } cpu_execute_cycles(CPU_68K_1, 1800000); ta++; if(ta<16){ goto CPULoop; } } cpu_execute_cycles(CPU_68K_1, 1800000); #ifdef RAINE_DEBUG print_debug("PC0:%06x SR0:%04x\n",s68000context.pc,s68000context.sr); #endif cpu_interrupt(CPU_68K_0, 4);#endif 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=0x1E3F8;zz>=0x1E000;zz-=8){ //if((RAM[zz+2]&0x80)==pri){ zx=(RAM[zz+4]>>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+2])))&0x1FF; //y=(32+ReadWord(&RAM[zz+0])+(0x3F-(zy)))&0x1FF; y=(32+(ReadWord(&RAM[zz+0])))&0x1FF; MAP_PALETTE_MAPPED_NEW( (ReadWord(&RAM[zz+4])>>8)&0xFF, 16, map ); zoom_dat_x = zoom16_ofs+(zx<<2); zoom_dat_y = zoom8_ofs+(zy<<3); SPR_MAP = OBJECT_MAP + (ta<<6); if((RAM[zz+7]&0x80)==0){ switch(RAM[zz+3]&0x40){ 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; } } else{ switch(RAM[zz+3]&0x40){ case 0x00: 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 0x40: 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 draw_aqua_jack(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); // OBJECT // ------ render_z_system_sprites(1); // FG0 // --- render_tc0100scn_layer_mapped(0,2);}/*Sprite List Format (8 bytes/sprite)===================================Byte | Bit(s) | Description-----+76543210+-------------------- 0 |.xxxxxx.| ZoomY (0-63) 0 |.......x| Y Position (High) 1 |xxxxxxxx| Y Position (Low) 2 |.x......| Flip Y Axis 2 |x.......| Sprite:BG1 Priority 2 |.......x| X Position (High) 3 |xxxxxxxx| X Position (Low) 4 |xxxxxxxx| Palette Bank 5 |..xxxxxx| ZoomX (0-63) 6 |x.......| Flip X Axis? 6 |.....xxx| Sprite Number (High) 7 |xxxxxxxx| Sprite Number (Low)*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -