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

📄 darius2d.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 2 页
字号:
   /// Checksum Fix   WriteWord68k(&ROM[0x012BE],0x4E71);		//	nop   /// Allow Rom Versions   WriteLong68k(&ROM[0x01280],0x4E714E71);	//	nop   // 68000 Speed Hack   WriteLong68k(&ROM[0x012A4],0x13FC0000);	// 	move.b	#$00,$AA0000   WriteLong68k(&ROM[0x012A8],0x00AA0000);   WriteWord68k(&ROM[0x012AC],0x6100-16);	//	bra.s	<loop>   memset(RAM+0x00000,0x00,0xA0000);   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);   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,0x80000);   ByteSwap(RAM,0x60000);   AddMemFetch(0x000000, 0x0FFFFF, ROM+0x000000-0x000000);	// 68000 ROM   AddMemFetch(-1, -1, NULL);   AddReadByte(0x000000, 0x0FFFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadByte(0x100000, 0x10FFFF, NULL, RAM+0x000000);			// MAIN RAM   AddReadByte(0x600000, 0x603FFF, NULL, RAM+0x034000);			// OBJECT RAM   AddReadByte(0x200000, 0x213FFF, NULL, RAM+0x010000);			// SCREEN RAM   AddReadByte(0x800000, 0x80001F, tc0220ioc_rb, NULL);			// INPUT   AddReadByte(0x000000, 0xFFFFFF, DefBadReadByte, NULL);		// <Bad Reads>   AddReadByte(-1, -1, NULL, NULL);   AddReadWord(0x000000, 0x0FFFFF, NULL, ROM+0x000000);			// 68000 ROM   AddReadWord(0x100000, 0x10FFFF, NULL, RAM+0x000000);			// MAIN RAM   AddReadWord(0x600000, 0x603FFF, NULL, RAM+0x034000);			// OBJECT RAM   AddReadWord(0x200000, 0x213FFF, NULL, RAM+0x010000);			// SCREEN RAM   AddReadWord(0x240000, 0x253FFF, NULL, RAM+0x050000);			// SCREEN B   AddReadWord(0x400000, 0x400007, tc0110pcr_rw, NULL);			// COLOR RAM SCREEN A   AddReadWord(0x420000, 0x420007, tc0110pcr_rw_2, NULL);		// COLOR RAM SCREEN B   AddReadWord(0x800000, 0x80001F, tc0220ioc_rw, NULL);			// INPUT   AddReadWord(0x830000, 0x830003, tc0140syt_read_main_68k, NULL);	// SOUND   AddReadWord(0x000000, 0xFFFFFF, DefBadReadWord, NULL);		// <Bad Reads>   AddReadWord(-1, -1, NULL, NULL);   AddWriteByte(0x100000, 0x10FFFF, NULL, RAM+0x000000);		// MAIN RAM   AddWriteByte(0x600000, 0x603FFF, NULL, RAM+0x034000);		// OBJECT RAM   AddWriteByte(0x200000, 0x210FFF, NULL, RAM+0x010000);		// SCREEN RAM   AddWriteByte(0x211000, 0x211FFF, tc0100scn_0_gfx_fg0_wb, NULL);	// FG0 GFX RAM   AddWriteByte(0x212000, 0x213FFF, NULL, RAM+0x022000);		// FG0 RAM   AddWriteByte(0x800000, 0x80001F, tc0220ioc_wb, NULL);		// INPUT   AddWriteByte(0xAA0000, 0xAA0001, Stop68000, NULL);			// Trap Idle 68000   AddWriteByte(0x000000, 0xFFFFFF, DefBadWriteByte, NULL);		// <Bad Writes>   AddWriteByte(-1, -1, NULL, NULL);   AddWriteWord(0x100000, 0x10FFFF, NULL, RAM+0x000000);		// MAIN RAM   AddWriteWord(0x600000, 0x603FFF, NULL, RAM+0x034000);		// OBJECT RAM   AddWriteWord(0x200000, 0x210FFF, NULL, RAM+0x010000);		// SCREEN RAM   AddWriteWord(0x211000, 0x211FFF, tc0100scn_0_gfx_fg0_ww, NULL);	// FG0 GFX RAM   AddWriteWord(0x212000, 0x213FFF, NULL, RAM+0x022000);		// FG0 RAM   AddWriteWord(0x240000, 0x253FFF, NULL, RAM+0x050000);		// SCREEN B   AddWriteWord(0x400000, 0x400007, tc0110pcr_ww, NULL);		// COLOR RAM SCREEN A   AddWriteWord(0x420000, 0x420007, tc0110pcr_ww_2, NULL);		// COLOR RAM SCREEN B   AddWriteWord(0x800000, 0x80001F, tc0220ioc_ww, NULL);		// INPUT   AddWriteWord(0x220000, 0x22000F, NULL, RAM+0x03B100);		// SCROLL A   AddWriteWord(0x260000, 0x26000F, NULL, RAM+0x03B200);		// SCROLL B   AddWriteWord(0x830000, 0x830003, tc0140syt_write_main_68k, NULL);	// SOUND   AddWriteWord(0x000000, 0xFFFFFF, DefBadWriteWord, NULL);		// <Bad Writes>   AddWriteWord(-1, -1, NULL, NULL);   AddInitMemory();	// Set Starscream mem pointers... }void clear_darius_2_dual(void){   RemoveTaitoYM2610();   #ifdef RAINE_DEBUG      //save_debug("ROM.bin",ROM,0x080000,1);      //save_debug("RAM.bin",RAM,0x060000,1);      //save_debug("GFX.bin",GFX,0x400000,0);   #endif}void execute_darius_2_dual_frame(void){   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(12,60));	// M68000 12MHz (60fps)#ifdef RAINE_DEBUG      print_debug("PC:%06x SR:%04x\n",s68000context.pc,s68000context.sr);#endif   cpu_interrupt(CPU_68K_0, 4);   Taito2610_Frame();			// Z80 and YM2610}void draw_darius_2_dual(void){   int x,y,ta,zz,zzz,zzzz,x16,y16;   UINT8 *map;   ClearPaletteMap();   // BG0   // ---   MAKE_SCROLL_1024x512_4_8(      20-(ReadWord(&RAM[0x3B100])+ReadWord(&RAM[0x20100])),  // Add one of the line-line offsets      24-(ReadWord(&RAM[0x3B106]))   );   START_SCROLL_1024x512_4_8(32,32,640,224);      ta = ReadWord(&RAM[0x10002+zz])&0x7FFF;      MAP_PALETTE_MAPPED(         Map_15bit_xBGR,         RAM[0x10000+zz]&0x7F,         16,         map      );      switch(RAM[0x10001+zz]&0xC0){         case 0x00: Draw8x8_Mapped(&GFX_BG0[ta<<6],x,y,map);        break;         case 0x40: Draw8x8_Mapped_FlipY(&GFX_BG0[ta<<6],x,y,map);  break;         case 0x80: Draw8x8_Mapped_FlipX(&GFX_BG0[ta<<6],x,y,map);  break;         case 0xC0: Draw8x8_Mapped_FlipXY(&GFX_BG0[ta<<6],x,y,map); break;      }   END_SCROLL_1024x512_4_8();   // BG1   // ---   MAKE_SCROLL_1024x512_4_8(      20-(ReadWord(&RAM[0x3B102])),      24-(ReadWord(&RAM[0x3B108]))   );   START_SCROLL_1024x512_4_8(32,32,640,224);   ta=ReadWord(&RAM[0x18002+zz])&0x7FFF;   if(GFX_BG0_SOLID[ta]!=0){			// No pixels; skip      MAP_PALETTE_MAPPED(         Map_15bit_xBGR,         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(&GFX_BG0[ta<<6],x,y,map);        break;            case 0x40: Draw8x8_Trans_Mapped_FlipY(&GFX_BG0[ta<<6],x,y,map);  break;            case 0x80: Draw8x8_Trans_Mapped_FlipX(&GFX_BG0[ta<<6],x,y,map);  break;            case 0xC0: Draw8x8_Trans_Mapped_FlipXY(&GFX_BG0[ta<<6],x,y,map); break;         }      }      else{					// all pixels; solid         switch(RAM[0x18001+zz]&0xC0){            case 0x00: Draw8x8_Mapped(&GFX_BG0[ta<<6],x,y,map);        break;            case 0x40: Draw8x8_Mapped_FlipY(&GFX_BG0[ta<<6],x,y,map);  break;            case 0x80: Draw8x8_Mapped_FlipX(&GFX_BG0[ta<<6],x,y,map);  break;            case 0xC0: Draw8x8_Mapped_FlipXY(&GFX_BG0[ta<<6],x,y,map); break;         }      }   }   END_SCROLL_1024x512_4_8();   // OBJECT   // ------   for(zz=0x353F8;zz>=0x34000;zz-=8){   x=((32)+ReadWord(&RAM[zz+6]))&0x3FF;   y=((32+224+240)-ReadWord(&RAM[zz]))&0x1FF;   if((x>16)&&(y>16)&&(x<640+32)&&(y<224+32)){   ta=ReadWord(&RAM[zz+2])&0x1FFF;   if(GFX_SPR_SOLID[ta]){			// No pixels; skip      MAP_PALETTE_MAPPED(         Map_15bit_xBGR,         RAM[zz+4]&0x7F,         16,         map      );      if(GFX_SPR_SOLID[ta]==1){			// Some pixels; trans         switch(RAM[zz+7]&0x0C){         case 0x00: Draw16x16_Trans_Mapped(&GFX_SPR[ta<<8],x,y,map);        break;         case 0x04: Draw16x16_Trans_Mapped_FlipY(&GFX_SPR[ta<<8],x,y,map);  break;         case 0x08: Draw16x16_Trans_Mapped_FlipX(&GFX_SPR[ta<<8],x,y,map);  break;         case 0x0C: Draw16x16_Trans_Mapped_FlipXY(&GFX_SPR[ta<<8],x,y,map); break;         }      }      else{					// all pixels; solid         switch(RAM[zz+7]&0x0C){         case 0x00: Draw16x16_Mapped(&GFX_SPR[ta<<8],x,y,map);        break;         case 0x04: Draw16x16_Mapped_FlipY(&GFX_SPR[ta<<8],x,y,map);  break;         case 0x08: Draw16x16_Mapped_FlipX(&GFX_SPR[ta<<8],x,y,map);  break;         case 0x0C: Draw16x16_Mapped_FlipXY(&GFX_SPR[ta<<8],x,y,map); break;         }      }   }   }   }   // FG0   // ---   MAKE_SCROLL_1024x256_2_8(      20-(ReadWord(&RAM[0x3B104])),      24-(ReadWord(&RAM[0x3B10A]))   );   START_SCROLL_1024x256_2_8(32,32,640,224);      ta = ReadWord(&RAM[0x22000+zz]);      if(ta&0x00FF){         MAP_PALETTE_MAPPED(            Map_15bit_xBGR,            (ta>>8)&0x3F,            4,            map         );         switch(ta&0xC000){            case 0x0000: Draw8x8_Trans_Mapped(&GFX_FG0[(ta&0x00FF)<<6],x,y,map);        break;            case 0x4000: Draw8x8_Trans_Mapped_FlipY(&GFX_FG0[(ta&0x00FF)<<6],x,y,map);  break;            case 0x8000: Draw8x8_Trans_Mapped_FlipX(&GFX_FG0[(ta&0x00FF)<<6],x,y,map);  break;            case 0xC000: Draw8x8_Trans_Mapped_FlipXY(&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 + -