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

📄 darius.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 3 页
字号:
static UINT8 *GFX_BG0_SOLID;static UINT8 *GFX_FG0;static UINT8 *GFX_FG0_SOLID;static UINT8 *GFX_SPR;static UINT8 *GFX_SPR_SOLID;static int tcpu;static UINT16 BadReadWord(UINT32 address){   #ifdef RAINE_DEBUG       if(address!=0x0B0000)print_debug("Rw%01d(%06x) [%06x]\n",tcpu,address,s68000context.pc);   #endif   return(0xFFFF);}static void BadWriteWord(UINT32 address, UINT16 data){   #ifdef RAINE_DEBUG      if(address!=0x0B0000)print_debug("Ww%01d(%06x,%04x) [%06x]\n",tcpu,address,data,s68000context.pc);   #endif}static UINT8 darius_ioc_rb(UINT32 address){   address&=0xFF;   switch(address){      case 0x01:      case 0x03:         return tc0140syt_read_main_68k(address);      break;      default:         return RAM[0x42000+(address^1)];      break;   }}static UINT16 darius_ioc_rw(UINT32 address){   UINT16 ret;   ret  = darius_ioc_rb(address+0)<<8;   ret |= darius_ioc_rb(address+1)<<0;   return ret;}static void darius_ioc_wb(UINT32 address, UINT8 data){   address&=0xFF;   switch(address){      case 0x01:      case 0x03:         tc0140syt_write_main_68k(address, data);      break;      case 0x61:         RAM[0x42000+(address^1)] = data;         switch_led(0,((data>>3)&1)|((data>>4)&1));	// Coin A [Coin Inserted] + Player Start Game         switch_led(1,((data>>6)&1)|((data>>4)&1));	// Coin B [Coin Inserted] + Player Start Game       //switch_led(0,((data>>3)&1));			// Coin A [Coin Inserted]       //switch_led(1,((data>>6)&1));			// Coin B [Coin Inserted]         switch_led(2,((data>>1)&1));			// Coin A [Ready for coins]       //switch_led(3,((data>>2)&1));			// Coin B [Ready for coins]       //switch_led(4,((data>>4)&1));			// Player Start Game      break;      default:         RAM[0x42000+(address^1)] = data;      break;   }}static void darius_ioc_ww(UINT32 address, UINT16 data){   darius_ioc_wb(address+0, (UINT8) ((data>>8)&0xFF));   darius_ioc_wb(address+1, (UINT8) ((data>>0)&0xFF));}static void LoadActual(int romset){   int ta,tb,tc;      RAMSize=0x80000;   if(!(ROM=AllocateMem(0xA0000))) return;   if(!(RAM=AllocateMem(RAMSize))) return;   if(!(GFX=AllocateMem(0xC0000+0x20000+0x180000))) return;   GFX_BG0=GFX+0x000000;   GFX_FG0=GFX+0x0C0000;   GFX_SPR=GFX+0x0E0000;   if(!load_rom_index(16, RAM+0x00000, 0x10000)) return;		// 16x16 Sprites   if(!load_rom_index(12, RAM+0x10000, 0x10000)) return;   if(!load_rom_index( 8, RAM+0x20000, 0x10000)) return;   tb=0;   for(ta=0;ta<0x30000;ta++){      tc=RAM[ta];      GFX_SPR[tb+0]=((tc&0x80)>>7)<<0;      GFX_SPR[tb+1]=((tc&0x40)>>6)<<0;      GFX_SPR[tb+2]=((tc&0x20)>>5)<<0;      GFX_SPR[tb+3]=((tc&0x10)>>4)<<0;      GFX_SPR[tb+4]=((tc&0x08)>>3)<<0;      GFX_SPR[tb+5]=((tc&0x04)>>2)<<0;      GFX_SPR[tb+6]=((tc&0x02)>>1)<<0;      GFX_SPR[tb+7]=((tc&0x01)>>0)<<0;      tb+=16;      if((tb&0x7F)==0){tb-=0x78;}      else{if((tb&0x7F)==8){tb-=8;}}   }   if(!load_rom_index(17, RAM+0x00000, 0x10000)) return;		// 16x16 Sprites   if(!load_rom_index(13, RAM+0x10000, 0x10000)) return;   if(!load_rom_index( 9, RAM+0x20000, 0x10000)) return;   tb=0;   for(ta=0;ta<0x30000;ta++){      tc=RAM[ta];      GFX_SPR[tb+0]|=((tc&0x80)>>7)<<1;      GFX_SPR[tb+1]|=((tc&0x40)>>6)<<1;      GFX_SPR[tb+2]|=((tc&0x20)>>5)<<1;      GFX_SPR[tb+3]|=((tc&0x10)>>4)<<1;      GFX_SPR[tb+4]|=((tc&0x08)>>3)<<1;      GFX_SPR[tb+5]|=((tc&0x04)>>2)<<1;      GFX_SPR[tb+6]|=((tc&0x02)>>1)<<1;      GFX_SPR[tb+7]|=((tc&0x01)>>0)<<1;      tb+=16;      if((tb&0x7F)==0){tb-=0x78;}      else{if((tb&0x7F)==8){tb-=8;}}   }   if(!load_rom_index(18, RAM+0x00000, 0x10000)) return;		// 16x16 Sprites   if(!load_rom_index(14, RAM+0x10000, 0x10000)) return;   if(!load_rom_index(10, RAM+0x20000, 0x10000)) return;   tb=0;   for(ta=0;ta<0x30000;ta++){      tc=RAM[ta];      GFX_SPR[tb+0]|=((tc&0x80)>>7)<<2;      GFX_SPR[tb+1]|=((tc&0x40)>>6)<<2;      GFX_SPR[tb+2]|=((tc&0x20)>>5)<<2;      GFX_SPR[tb+3]|=((tc&0x10)>>4)<<2;      GFX_SPR[tb+4]|=((tc&0x08)>>3)<<2;      GFX_SPR[tb+5]|=((tc&0x04)>>2)<<2;      GFX_SPR[tb+6]|=((tc&0x02)>>1)<<2;      GFX_SPR[tb+7]|=((tc&0x01)>>0)<<2;      tb+=16;      if((tb&0x7F)==0){tb-=0x78;}      else{if((tb&0x7F)==8){tb-=8;}}   }   if(!load_rom_index(19, RAM+0x00000, 0x10000)) return;		// 16x16 Sprites   if(!load_rom_index(15, RAM+0x10000, 0x10000)) return;   if(!load_rom_index(11, RAM+0x20000, 0x10000)) return;   tb=0;   for(ta=0;ta<0x30000;ta++){      tc=RAM[ta];      GFX_SPR[tb+0]|=((tc&0x80)>>7)<<3;      GFX_SPR[tb+1]|=((tc&0x40)>>6)<<3;      GFX_SPR[tb+2]|=((tc&0x20)>>5)<<3;      GFX_SPR[tb+3]|=((tc&0x10)>>4)<<3;      GFX_SPR[tb+4]|=((tc&0x08)>>3)<<3;      GFX_SPR[tb+5]|=((tc&0x04)>>2)<<3;      GFX_SPR[tb+6]|=((tc&0x02)>>1)<<3;      GFX_SPR[tb+7]|=((tc&0x01)>>0)<<3;      tb+=16;      if((tb&0x7F)==0){tb-=0x78;}      else{if((tb&0x7F)==8){tb-=8;}}   }   if(!load_rom_index(20, RAM+0x00000, 0x10000)) return;	// 8x8 BG0   if(!load_rom_index(21, RAM+0x10000, 0x10000)) return;   if(!load_rom_index(22, RAM+0x20000, 0x10000)) return;   tb=0;   for(ta=0;ta<0x30000;ta++,tb+=4){      GFX_BG0[tb+0]=RAM[ta]>>4;      GFX_BG0[tb+1]=RAM[ta]&15;   }   if(!load_rom_index(23, RAM+0x00000, 0x10000)) return;   if(!load_rom_index(24, RAM+0x10000, 0x10000)) return;   if(!load_rom_index(25, RAM+0x20000, 0x10000)) return;   tb=0;   for(ta=0;ta<0x30000;ta++,tb+=4){      GFX_BG0[tb+2]=RAM[ta]>>4;      GFX_BG0[tb+3]=RAM[ta]&15;   }   if(!load_rom_index(27, RAM+0x00000, 0x4000)) return;		// 8x8 FG0   tb=0;   for(ta=0;ta<0x4000;ta++){      tc=RAM[ta];      GFX_FG0[tb+0]=((tc&0x80)>>7)<<0;      GFX_FG0[tb+1]=((tc&0x40)>>6)<<0;      GFX_FG0[tb+2]=((tc&0x20)>>5)<<0;      GFX_FG0[tb+3]=((tc&0x10)>>4)<<0;      GFX_FG0[tb+4]=((tc&0x08)>>3)<<0;      GFX_FG0[tb+5]=((tc&0x04)>>2)<<0;      GFX_FG0[tb+6]=((tc&0x02)>>1)<<0;      GFX_FG0[tb+7]=((tc&0x01)>>0)<<0;      tb+=8;   }   if(!load_rom_index(26, RAM+0x00000, 0x4000)) return;   tb=0;   for(ta=0;ta<0x4000;ta++){      tc=RAM[ta];      GFX_FG0[tb+0]|=((tc&0x80)>>7)<<1;      GFX_FG0[tb+1]|=((tc&0x40)>>6)<<1;      GFX_FG0[tb+2]|=((tc&0x20)>>5)<<1;      GFX_FG0[tb+3]|=((tc&0x10)>>4)<<1;      GFX_FG0[tb+4]|=((tc&0x08)>>3)<<1;      GFX_FG0[tb+5]|=((tc&0x04)>>2)<<1;      GFX_FG0[tb+6]|=((tc&0x02)>>1)<<1;      GFX_FG0[tb+7]|=((tc&0x01)>>0)<<1;      tb+=8;   }   GFX_BG0_SOLID = make_solid_mask_8x8  (GFX_BG0, 0x3000);   GFX_FG0_SOLID = make_solid_mask_8x8  (GFX_FG0, 0x0800);   GFX_SPR_SOLID = make_solid_mask_16x16(GFX_SPR, 0x1800);   memset(RAM,0xFF,0x30000);   if(!load_rom_index(1, RAM+0x00000, 0x10000)) return;		// 68000 MAIN   if(romset==2){   if(!load_rom_index(30,RAM+0x10000, 0x10000)) return;   }   if(!load_rom_index(3, RAM+0x20000, 0x10000)) return;   for(ta=0;ta<0x30000;ta++){      ROM[ta+ta]=RAM[ta];   }   memset(RAM,0xFF,0x30000);   if(!load_rom_index(0, RAM+0x00000, 0x10000)) return;		// 68000 MAIN   if(romset==2){   if(!load_rom_index(31,RAM+0x10000, 0x10000)) return;   }   if(!load_rom_index(2, RAM+0x20000, 0x10000)) return;   for(ta=0;ta<0x30000;ta++){      ROM[ta+ta+1]=RAM[ta];   }   if(!load_rom_index(5, RAM+0x00000, 0x10000)) return;		// 68000 SUB   if(!load_rom_index(7, RAM+0x10000, 0x10000)) return;   for(ta=0;ta<0x20000;ta++){      ROM[ta+ta+0x60000]=RAM[ta];   }   if(!load_rom_index(4, RAM+0x00000, 0x10000)) return;		// 68000 SUB   if(!load_rom_index(6, RAM+0x10000, 0x10000)) return;   for(ta=0;ta<0x20000;ta++){      ROM[ta+ta+0x60001]=RAM[ta];   }   /*----------------------*/   if(!(PCMROM=AllocateMem(0x10000))) return;   if(!load_rom_index(28, PCMROM, 0x10000)) return;   Z80ROM=RAM+0x44000;   if(!load_rom_index(29, Z80ROM, 0x10000)) return;	// Z80 SOUND ROM   Z80ROM[0x0270]=0xD3;	// OUTA (AAh)   Z80ROM[0x0271]=0xAA;	//   SetStopZ80Mode2(0x0263);   // Setup rom banking   // -----------------   AddTaitoSoundBanking(Z80ROM, 0x10000);   // Setup Z80 memory interface   // --------------------------   AddZ80AROMBase(Z80ROM, 0x0038, 0x0066);   AddZ80AReadByte(0x0000, 0x7FFF, NULL,		   NULL);		// BANK ROM   AddZ80AReadByte(0x8000, 0x8FFF, NULL,		   Z80ROM+0x008000);	// Z80 RAM   AddZ80AReadByte(0x9000, 0x9001, YM2203AReadZ80,         NULL);		// YM2203 A   AddZ80AReadByte(0xA000, 0xA001, YM2203BReadZ80,         NULL);		// YM2203 B   AddZ80AReadByte(0xB000, 0xB001, tc0140syt_read_sub_z80, NULL);		// 68000 COMM   AddZ80AReadByte(0x0000, 0xFFFF, DefBadReadZ80,          NULL);   AddZ80AReadByte(-1, -1, NULL, NULL);   AddZ80AWriteByte(0x8000, 0x8FFF, NULL,		    Z80ROM+0x008000);	// Z80 RAM   AddZ80AWriteByte(0x9000, 0x9001, YM2203AWriteZ80,        NULL);		// YM2203 A   AddZ80AWriteByte(0xA000, 0xA001, YM2203BWriteZ80,        NULL);		// YM2203 B   AddZ80AWriteByte(0xB000, 0xB001, tc0140syt_write_sub_z80,NULL);		// 68000 COMM   AddZ80AWriteByte(0xD400, 0xD400, DariusWrite_ADPCM,      NULL);		// ADPCM COMM   AddZ80AWriteByte(0xDC00, 0xDC00, TaitoSoundSetBank,      NULL);		// BANK SELECT   if( DariusStereo ){     AddZ80AWriteByte(0xC000, 0xC000, DariusYM2203SetFMPan,   NULL); /* YM2203 FM #0 pan */     AddZ80AWriteByte(0xC400, 0xC400, DariusYM2203SetFMPan,   NULL); /* YM2203 FM #1 pan */     AddZ80AWriteByte(0xC800, 0xC800, DariusYM2203SetAYPan,   NULL); /* YM2203 PSG #0 pan */     AddZ80AWriteByte(0xCC00, 0xCC00, DariusYM2203SetAYPan,   NULL); /* YM2203 PSG #1 pan */     AddZ80AWriteByte(0xD000, 0xD000, DariusMSM5205SetPan,    NULL); /* ADPCM pan */   }   AddZ80AWriteByte(0x0000, 0xFFFF, DefBadWriteZ80,         NULL);   AddZ80AWriteByte(-1, -1, NULL, NULL);   AddZ80AReadPort(0x00, 0xFF, DefBadReadZ80,           NULL);   AddZ80AReadPort(  -1,   -1, NULL,                    NULL);   AddZ80AWritePort(0xAA, 0xAA, StopZ80Mode2,           NULL);   AddZ80AWritePort(0x00, 0xFF, DefBadWriteZ80,         NULL);   AddZ80AWritePort(  -1,   -1, NULL,                   NULL);   AddZ80AInit();   TaitoSoundSetBank(0,1);   tc0140syt_reset();			// Add [J3d!]   msm5205_interface.rom[0] = PCMROM;   msm5205_interface.romsize[0] = 0x10000;   if( !DariusStereo )  msm5205_interface.updatemode = MSM5205_MONO;   else                 msm5205_interface.updatemode = MSM5205_STEREO;   /************************************/   if(romset==0){		// Original   // Main 68000 Speed Hack   WriteLong68k(&ROM[0x0070C],0x13FC0000);   WriteLong68k(&ROM[0x00710],0x00AA0000);   WriteWord68k(&ROM[0x00714],0x6100-20);   WriteLong68k(&ROM[0x00938],0x13FC0000);   WriteLong68k(&ROM[0x0093C],0x00AA0000);   // Sub 68000 Speed Hack   WriteLong68k(&ROM[0x606FA],0x13FC0000);   WriteLong68k(&ROM[0x606FE],0x00AA0000);   WriteWord68k(&ROM[0x60702],0x6100-16);   WriteLong68k(&ROM[0x6F074],0x13FC0000);   WriteLong68k(&ROM[0x6F078],0x00AA0000);   // Fix Main 68000 Checksum   WriteLong68k(&ROM[0x013A8],0x4E714E71);   WriteLong68k(&ROM[0x013BE],0x4E714E71);   // Fix Communication   WriteWord68k(&ROM[0x013EA],0x4E71);   // Fix Sub 68000 Checksum   WriteLong68k(&ROM[0x60A0A],0x4E714E71);   }   if(romset==1){		// Extra   // Main 68000 Speed Hack   WriteLong68k(&ROM[0x00716],0x13FC0000);   WriteLong68k(&ROM[0x0071A],0x00AA0000);   WriteWord68k(&ROM[0x0071E],0x6100-20);   WriteLong68k(&ROM[0x0093E],0x13FC0000);   WriteLong68k(&ROM[0x00942],0x00AA0000);   // Sub 68000 Speed Hack   WriteLong68k(&ROM[0x606FA],0x13FC0000);   WriteLong68k(&ROM[0x606FE],0x00AA0000);   WriteWord68k(&ROM[0x60702],0x6100-16);   WriteLong68k(&ROM[0x6F074],0x13FC0000);   WriteLong68k(&ROM[0x6F078],0x00AA0000);   // Fix Main 68000 Checksum   WriteLong68k(&ROM[0x013D6],0x4E714E71);   WriteLong68k(&ROM[0x013EC],0x4E714E71);   // Fix Communication   WriteWord68k(&ROM[0x01418],0x4E71);   // Fix Sub 68000 Checksum   WriteLong68k(&ROM[0x60A0A],0x4E714E71);   }   if(romset==2){		// Alternate   // Main 68000 Speed Hack   WriteLong68k(&ROM[0x0070C],0x13FC0000);   WriteLong68k(&ROM[0x00710],0x00AA0000);   WriteWord68k(&ROM[0x00714],0x6100-20);   WriteLong68k(&ROM[0x00938],0x13FC0000);   WriteLong68k(&ROM[0x0093C],0x00AA0000);   // Sub 68000 Speed Hack   WriteLong68k(&ROM[0x606FA],0x13FC0000);   WriteLong68k(&ROM[0x606FE],0x00AA0000);   WriteWord68k(&ROM[0x60702],0x6100-16);   WriteLong68k(&ROM[0x6F074],0x13FC0000);   WriteLong68k(&ROM[0x6F078],0x00AA0000);   // Fix Main 68000 Checksum   WriteLong68k(&ROM[0x013FA],0x4E714E71);   WriteLong68k(&ROM[0x01410],0x4E714E71);   // Fix Communication   WriteWord68k(&ROM[0x0143C],0x4E71);   // Fix Sub 68000 Checksum   WriteLong68k(&ROM[0x60A0A],0x4E714E71);   }   if (romset == 3) {   // Main 68000 Speed Hack   WriteLong68k(&ROM[0x00700],0x13FC0000);   WriteLong68k(&ROM[0x00704],0x00AA0000);   WriteWord68k(&ROM[0x00708],0x6100-20);   WriteLong68k(&ROM[0x0092c],0x13FC0000);   WriteLong68k(&ROM[0x00930],0x00AA0000);   // Sub 68000 Speed Hack   WriteLong68k(&ROM[0x606FA],0x13FC0000);   WriteLong68k(&ROM[0x606FE],0x00AA0000);   WriteWord68k(&ROM[0x60702],0x6100-16);   WriteLong68k(&ROM[0x6F076],0x13FC0000);   WriteLong68k(&ROM[0x6F07a],0x00AA0000);   // Fix Main 68000 Checksum   WriteLong68k(&ROM[0x01398],0x4E714E71);   //WriteLong68k(&ROM[0x013BE],0x4E714E71);   // Fix Communication

⌨️ 快捷键说明

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