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

📄 ninjaw.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 4 页
字号:
   GFX_FG0    = RAM+0x64000;   RAM_INPUT  = RAM+0x3B000;   tc0100scn[0].RAM     = RAM+0x21000-0x6000;   tc0100scn[0].GFX_FG0 = GFX_FG0;   init_tc0100scn(0);   GFX_BG0_SOLID = make_solid_mask_8x8  (GFX_BG0, 0x8000);   GFX_SPR_SOLID = make_solid_mask_16x16(GFX_SPR, 0x2000);   tc0110pcr_init_typeb(RAM+0x38000, 1, 0);   tc0110pcr_init_typeb_2(RAM+0x39000, 1, 0);   tc0110pcr_init_typeb_3(RAM+0x3A000, 1, 0);   set_colour_mapper(&col_map_xbbb_bbgg_gggr_rrrr);   InitPaletteMap(RAM+0x38000, 0x80, 0x10, 0x8000);   // Init tc0220ioc emulation   // ------------------------   tc0220ioc.RAM  = RAM_INPUT;   tc0220ioc.ctrl = 0;		//TC0220_STOPCPU;   reset_tc0220ioc();   memset(RAM_INPUT,0x00,0x20);/* *  StarScream Stuff follows */   ByteSwap(ROM,0x120000);   ByteSwap(RAM,0x60000);   AddMemFetch(0x000000, 0x0BFFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x0BFFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x0C0000, 0x0CFFFF, NULL, RAM+0x000000);			// MAIN RAM   AddReadByte(0x240000, 0x24FFFF, NULL, RAM+0x024000);			// COMMON RAM   AddReadByte(0x260000, 0x263FFF, NULL, RAM+0x034000);			// OBJECT RAM   AddReadByte(0x280000, 0x293FFF, NULL, RAM+0x010000);			// SCREEN RAM   AddReadByte(0x200000, 0x200003, tc0220ioc_rb_port, NULL);		// INPUT   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x0BFFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x0C0000, 0x0CFFFF, NULL, RAM+0x000000);			// MAIN RAM   AddReadWord(0x240000, 0x24FFFF, NULL, RAM+0x024000);			// COMMON RAM   AddReadWord(0x260000, 0x263FFF, NULL, RAM+0x034000);			// OBJECT RAM   AddReadWord(0x280000, 0x293FFF, NULL, RAM+0x010000);			// SCREEN RAM   AddReadWord(0x340000, 0x340007, tc0110pcr_rw, NULL);			// COLOR RAM SCREEN A   AddReadWord(0x350000, 0x350007, tc0110pcr_rw_2, NULL);		// COLOR RAM SCREEN B   AddReadWord(0x360000, 0x360007, tc0110pcr_rw_3, NULL);		// COLOR RAM SCREEN C   AddReadWord(0x200000, 0x200003, tc0220ioc_rw_port, NULL);		// INPUT   AddReadWord(0x2C0000, 0x2D3FFF, NULL, RAM+0x050000);			// CUSTOM2   AddReadWord(0x300000, 0x313FFF, NULL, RAM+0x064000);			// CUSTOM3   AddReadWord(0x220000, 0x220003, tc0140syt_read_main_68k, NULL);	// SOUND   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1, NULL, NULL);   AddWriteByte(0x0C0000, 0x0CFFFF, NULL, RAM+0x000000);		// MAIN RAM   AddWriteByte(0x240000, 0x24FFFF, NULL, RAM+0x024000);		// COMMON RAM   AddWriteByte(0x260000, 0x263FFF, NULL, RAM+0x034000);		// OBJECT RAM   AddWriteByte(0x280000, 0x290FFF, NULL, RAM+0x010000);		// SCREEN RAM   AddWriteByte(0x291000, 0x291FFF, tc0100scn_0_gfx_fg0_wb, NULL);	// FG0 GFX RAM   AddWriteByte(0x292000, 0x293FFF, NULL, RAM+0x022000);		// FG0 RAM   AddWriteByte(0x200000, 0x200003, tc0220ioc_wb_port, NULL);		// INPUT   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);			// Trap Idle 68000   AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);		// <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x0C0000, 0x0CFFFF, NULL, RAM+0x000000);		// MAIN RAM   AddWriteWord(0x240000, 0x24FFFF, NULL, RAM+0x024000);		// COMMON RAM   AddWriteWord(0x260000, 0x263FFF, NULL, RAM+0x034000);		// OBJECT RAM   AddWriteWord(0x280000, 0x290FFF, NULL, RAM+0x010000);		// SCREEN RAM   AddWriteWord(0x291000, 0x291FFF, tc0100scn_0_gfx_fg0_ww, NULL);	// FG0 GFX RAM   AddWriteWord(0x292000, 0x293FFF, NULL, RAM+0x022000);		// FG0 RAM   AddWriteWord(0x340000, 0x340007, tc0110pcr_ww, NULL);		// COLOR RAM SCREEN A   AddWriteWord(0x350000, 0x350007, tc0110pcr_ww_2, NULL);		// COLOR RAM SCREEN B   AddWriteWord(0x360000, 0x360007, tc0110pcr_ww_3, NULL);		// COLOR RAM SCREEN C   AddWriteWord(0x200000, 0x200003, tc0220ioc_ww_port, NULL);		// INPUT   AddWriteWord(0x2A0000, 0x2A000F, NULL, RAM+0x03B100);		// SCROLL A   AddWriteWord(0x2E0000, 0x2E000F, NULL, RAM+0x03B200);		// SCROLL B   AddWriteWord(0x320000, 0x32000F, NULL, RAM+0x03B300);		// SCROLL C   AddWriteWord(0x2C0000, 0x2D3FFF, NULL, RAM+0x050000);		// CUSTOM2   AddWriteWord(0x300000, 0x313FFF, NULL, RAM+0x064000);		// CUSTOM3   AddWriteWord(0x220000, 0x220003, tc0140syt_write_main_68k, NULL);	// SOUND   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers...    AddMemFetchMC68000B(0x000000, 0x05FFFF, ROM+0x0C0000-0x000000);	// 68000 ROM   AddMemFetchMC68000B(-1, -1, NULL);   AddReadByteMC68000B(0x000000, 0x05FFFF, NULL, ROM+0x0C0000);			// 68000 ROM   AddReadByteMC68000B(0x080000, 0x08FFFF, NULL, RAM+0x040000);			// SUB LOCAL RAM   AddReadByteMC68000B(0x240000, 0x24FFFF, NULL, RAM+0x024000);			// COMMON RAM   AddReadByteMC68000B(0x260000, 0x263FFF, NULL, RAM+0x034000);			// OBJECT RAM   AddReadByteMC68000B(0x280000, 0x293FFF, NULL, RAM+0x010000);			// SCREEN RAM   AddReadByteMC68000B(0x200000, 0x200003, tc0220ioc_rb_port, NULL);		// INPUT   AddReadByteMC68000B(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByteMC68000B(-1, -1, NULL, NULL);   AddReadWordMC68000B(0x000000, 0x05FFFF, NULL, ROM+0x0C0000);			// 68000 ROM   AddReadWordMC68000B(0x080000, 0x08FFFF, NULL, RAM+0x040000);			// SUB LOCAL RAM   AddReadWordMC68000B(0x240000, 0x24FFFF, NULL, RAM+0x024000);			// COMMON RAM   AddReadWordMC68000B(0x260000, 0x263FFF, NULL, RAM+0x034000);			// OBJECT RAM   AddReadWordMC68000B(0x280000, 0x293FFF, NULL, RAM+0x010000);			// SCREEN RAM   AddReadWordMC68000B(0x340000, 0x340007, tc0110pcr_rw, NULL);			// COLOR RAM SCREEN A   AddReadWordMC68000B(0x350000, 0x350007, tc0110pcr_rw_2, NULL);		// COLOR RAM SCREEN B   AddReadWordMC68000B(0x360000, 0x360007, tc0110pcr_rw_3, NULL);		// COLOR RAM SCREEN C   AddReadWordMC68000B(0x200000, 0x200003, tc0220ioc_rw_port, NULL);		// INPUT   AddReadWordMC68000B(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWordMC68000B(-1, -1, NULL, NULL);   AddWriteByteMC68000B(0x080000, 0x08FFFF, NULL, RAM+0x040000);		// SUB LOCAL RAM   AddWriteByteMC68000B(0x240000, 0x24FFFF, NULL, RAM+0x024000);		// COMMON RAM   AddWriteByteMC68000B(0x260000, 0x263FFF, NULL, RAM+0x034000);		// OBJECT RAM   AddWriteByteMC68000B(0x280000, 0x290FFF, NULL, RAM+0x010000);		// SCREEN RAM   AddWriteByteMC68000B(0x291000, 0x291FFF, tc0100scn_0_gfx_fg0_wb, NULL);	// FG0 GFX RAM   AddWriteByteMC68000B(0x292000, 0x293FFF, NULL, RAM+0x022000);		// FG0 RAM   AddWriteByteMC68000B(0x200000, 0x200003, 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(0x080000, 0x08FFFF, NULL, RAM+0x040000);		// SUB LOCAL RAM   AddWriteWordMC68000B(0x240000, 0x24FFFF, NULL, RAM+0x024000);		// COMMON RAM   AddWriteWordMC68000B(0x260000, 0x263FFF, NULL, RAM+0x034000);		// OBJECT RAM   AddWriteWordMC68000B(0x280000, 0x290FFF, NULL, RAM+0x010000);		// SCREEN RAM   AddWriteWordMC68000B(0x291000, 0x291FFF, tc0100scn_0_gfx_fg0_ww, NULL);	// FG0 GFX RAM   AddWriteWordMC68000B(0x292000, 0x293FFF, NULL, RAM+0x022000);		// FG0 RAM   AddWriteWordMC68000B(0x340000, 0x340007, tc0110pcr_ww, NULL);		// COLOR RAM SCREEN A   AddWriteWordMC68000B(0x350000, 0x350007, tc0110pcr_ww_2, NULL);		// COLOR RAM SCREEN B   AddWriteWordMC68000B(0x360000, 0x360007, tc0110pcr_ww_3, NULL);		// COLOR RAM SCREEN C   AddWriteWordMC68000B(0x200000, 0x200003, tc0220ioc_ww_port, NULL);		// INPUT   AddWriteWordMC68000B(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWordMC68000B(-1, -1, NULL, NULL);   AddInitMemoryMC68000B();	// Set Starscream mem pointers... }void clear_ninja_warriors(void){   RemoveTaitoYM2610();   #ifdef RAINE_DEBUG      //save_debug("ROM.bin",ROM,0x120000,1);      //save_debug("RAM.bin",RAM,0x060000,1);   #endif}void execute_ninja_warriors_frame(void){   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60));	// M68000 12MHz (60fps)   cpu_interrupt(CPU_68K_0, 4);   cpu_execute_cycles(CPU_68K_1, CPU_FRAME_MHz(12,60));	// M68000 12MHz (60fps)   cpu_interrupt(CPU_68K_1, 4);   if(romset==0)      Taito2610_FrameNinjaW();		// Z80 and YM2610   else      Taito2610_FramePan();		// Z80 and YM2610}void draw_ninja_warriors(void){   int x,y,ta,zz,zzz,zzzz,x16,y16,spr_mask;   UINT8 *map;   ClearPaletteMap();   // BG0   // ---   if(romset==0){   MAKE_SCROLL_1024x512_4_8(      38-(ReadWord(&RAM[0x3B100])),      16-(ReadWord(&RAM[0x3B106]))   );   }   else{   MAKE_SCROLL_1024x512_4_8(      38-(ReadWord(&RAM[0x3B100])+ReadWord(&RAM[0x20100])),  // Add one of the line-line offsets      16-(ReadWord(&RAM[0x3B106]))   );   }   START_SCROLL_1024x512_4_8(32,32,864,224);      ta = ReadWord(&RAM[0x10002+zz])&0x7FFF;      MAP_PALETTE_MAPPED_NEW(         RAM[0x10000+zz]&0x7F,         16,         map      );      switch(RAM[0x10001+zz]&0xC0){         case 0x00: Draw8x8_Mapped_Rot(&GFX_BG0[ta<<6],x,y,map);        break;         case 0x40: Draw8x8_Mapped_FlipY_Rot(&GFX_BG0[ta<<6],x,y,map);  break;         case 0x80: Draw8x8_Mapped_FlipX_Rot(&GFX_BG0[ta<<6],x,y,map);  break;         case 0xC0: Draw8x8_Mapped_FlipXY_Rot(&GFX_BG0[ta<<6],x,y,map); break;      }   END_SCROLL_1024x512_4_8();   // BG1   // ---   MAKE_SCROLL_1024x512_4_8(      38-(ReadWord(&RAM[0x3B102])),      16-(ReadWord(&RAM[0x3B108]))   );   START_SCROLL_1024x512_4_8(32,32,864,224);   ta=ReadWord(&RAM[0x18002+zz])&0x7FFF;   if(GFX_BG0_SOLID[ta]!=0){			// No pixels; skip      MAP_PALETTE_MAPPED_NEW(         RAM[0x18000+zz]&0x7F,         16,         map      );      if(GFX_BG0_SOLID[ta]==1){			// Some pixels; trans         switch(RAM[0x18001+zz]&0xC0){            case 0x00: Draw8x8_Trans_Mapped_Rot(&GFX_BG0[ta<<6],x,y,map);        break;            case 0x40: Draw8x8_Trans_Mapped_FlipY_Rot(&GFX_BG0[ta<<6],x,y,map);  break;            case 0x80: Draw8x8_Trans_Mapped_FlipX_Rot(&GFX_BG0[ta<<6],x,y,map);  break;            case 0xC0: Draw8x8_Trans_Mapped_FlipXY_Rot(&GFX_BG0[ta<<6],x,y,map); break;         }      }      else{					// all pixels; solid         switch(RAM[0x18001+zz]&0xC0){            case 0x00: Draw8x8_Mapped_Rot(&GFX_BG0[ta<<6],x,y,map);        break;            case 0x40: Draw8x8_Mapped_FlipY_Rot(&GFX_BG0[ta<<6],x,y,map);  break;            case 0x80: Draw8x8_Mapped_FlipX_Rot(&GFX_BG0[ta<<6],x,y,map);  break;            case 0xC0: Draw8x8_Mapped_FlipXY_Rot(&GFX_BG0[ta<<6],x,y,map); break;         }      }   }   END_SCROLL_1024x512_4_8();   // OBJECT   // ------   if(romset==0)      spr_mask = 0x3FFF;   else      spr_mask = 0x1FFF;   for(zz=0x37FF8;zz>=0x34000;zz-=8){   x = ((-16)+ReadWord(&RAM[zz+0]))&0x3FF;   y = (( 16)+ReadWord(&RAM[zz+2]))&0x1FF;   if((x>16)&&(y>16)&&(x<864+32)&&(y<224+32)){   ta=ReadWord(&RAM[zz+4])&spr_mask;   if(GFX_SPR_SOLID[ta]!=0){			// No pixels; skip      MAP_PALETTE_MAPPED_NEW(         RAM[zz+7]&0x7F,         16,         map      );      if(GFX_SPR_SOLID[ta]==1){			// Some pixels; trans         switch(RAM[zz+6]&0x03){         case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8],x,y,map);         break;         case 0x01: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,map);   break;         case 0x02: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,map);   break;         case 0x03: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,map);  break;         }      }      else{					// all pixels; solid         switch(RAM[zz+6]&0x03){         case 0x00: Draw16x16_Mapped_Rot(&GFX_SPR[ta<<8],x,y,map);         break;         case 0x01: Draw16x16_Mapped_FlipY_Rot(&GFX_SPR[ta<<8],x,y,map);   break;         case 0x02: Draw16x16_Mapped_FlipX_Rot(&GFX_SPR[ta<<8],x,y,map);   break;         case 0x03: Draw16x16_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8],x,y,map);  break;         }      }   }   }   }   // FG0   // ---   MAKE_SCROLL_1024x256_2_8(      38-(ReadWord(&RAM[0x3B104])),      16-(ReadWord(&RAM[0x3B10A]))   );   START_SCROLL_1024x256_2_8(32,32,864,224);      ta = ReadWord(&RAM[0x22000+zz]);      if(ta&0x00FF){         MAP_PALETTE_MAPPED_NEW(            (ta>>8)&0x3F,            4,            map         );         switch(ta&0xC000){            case 0x0000: Draw8x8_Trans_Mapped_Rot(&GFX_FG0[(ta&0x00FF)<<6],x,y,map);        break;            case 0x4000: Draw8x8_Trans_Mapped_FlipY_Rot(&GFX_FG0[(ta&0x00FF)<<6],x,y,map);  break;            case 0x8000: Draw8x8_Trans_Mapped_FlipX_Rot(&GFX_FG0[(ta&0x00FF)<<6],x,y,map);  break;            case 0xC000: Draw8x8_Trans_Mapped_FlipXY_Rot(&GFX_FG0[(ta&0x00FF)<<6],x,y,map); break;         }      }   END_SCROLL_1024x256_2_8();}/*280000 - 287FFF | BG0 (1024x512 - 4 bytes/tile)288000 - 28FFFF | BG1 (1024x512 - 4 bytes/tile)290000 - 2903FF | BG0 LINE290400 - 2907FF | BG1 LINE291000 - 291FFF | FG0 GFX (8x8x4 - 16 bytes/tile)292000 - 293FFF | FG0 (1024x256 - 2 bytes/tile)*/

⌨️ 快捷键说明

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