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

📄 aquajack.c

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