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

📄 taitosnd.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 3 页
字号:
   AddZ80AROMBase(Z80ROM, 0x38, 0x66);   AddZ80AReadByte(0x0000, 0x7FFF, NULL,			NULL);			// BANK ROM   AddZ80AReadByte(0x8000, 0x8FFF, NULL,			Z80ROM+0x008000);	// Z80 RAM   AddZ80AReadByte(0x9000, 0x9001, YM2151ReadZ80_Timer,		NULL);			// YM2151   AddZ80AReadByte(0xA000, 0xA001, 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, YM2151TaitoWriteZ80,	NULL);			// YM2151+BANKING   AddZ80AWriteByte(0xA000, 0xA001, tc0140syt_write_sub_z80,	NULL);			// 68000 COMM   if(adpcmA!=NULL){   AddZ80AWriteByte(0xB000, 0xB006, adpcmA,			NULL);			// ADPCM CHANNEL A   }   if(adpcmB!=NULL){   AddZ80AWriteByte(0xC000, 0xC006, adpcmB,			NULL);			// ADPCM CHANNEL B   }   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();}/*more recent memory map: - it resembles the ym2610 one - banking is not via ym2151 - no nmi (nmi will reset the cpu) - ym30xx volume and panning support?*/void AddTaitoYM2151_xsystem(UINT32 p1, UINT32 p2, UINT32 romsize){   // Apply Speed Patch   // -----------------   Z80ROM[p1+0]=0xD3;	// OUTA (AAh)   Z80ROM[p1+1]=0xAA;	//   SetStopZ80Mode2( (UINT16) p2);   // Setup rom banking system   // ------------------------   AddTaitoSoundBanking(Z80ROM, romsize);   // Setup Z80 memory map   // --------------------   AddZ80AROMBase(Z80ROM, 0x38, 0x66);   AddZ80AReadByte(0x0000, 0x7FFF, NULL,			NULL);			// BANK ROM   AddZ80AReadByte(0xC000, 0xDFFF, NULL,			Z80ROM+0x00C000);	// Z80 RAM   AddZ80AReadByte(0xE000, 0xE001, YM2151ReadZ80_Timer,		NULL);			// YM2610   AddZ80AReadByte(0xE200, 0xE201, tc0140syt_read_sub_z80,	NULL);			// 68000 COMM   //AddZ80AReadByte(0xEA00, 0xEA00, TaitoYM2610Test,		NULL);   AddZ80AReadByte(0x0000, 0xFFFF, DefBadReadZ80,		NULL);   AddZ80AReadByte(    -1,     -1, NULL,			NULL);   AddZ80AWriteByte(0xC000, 0xDFFF, NULL,			Z80ROM+0x00C000);	// Z80 RAM   AddZ80AWriteByte(0xE000, 0xE001, YM2151WriteZ80,	        NULL);			// YM2610   AddZ80AWriteByte(0xE200, 0xE201, tc0140syt_write_sub_z80,	NULL);			// 68000 COMM   //AddZ80AWriteByte(0xE400, 0xE403, Pan2610WriteZ80_OffsetVol,NULL);			// PANNING   AddZ80AWriteByte(0xF200, 0xF200, TaitoSoundSetBank,		NULL);			// BANK SELECT   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();}void RemoveTaitoYM2151(void){   RemoveTaitoSoundBanking();}/******************************************************************************//*                                                                            *//*                       YM2203; M6295 / Taito B-System                       *//*                       ------------------------------                       *//*                                                                            *//* - Master of Weapons, Hit the Ice, Violence Fight                           *//*                                                                            *//******************************************************************************/static struct YM2203interface ym2203_interface ={  1,			// 1 x YM2203  4000000,		// Rate - Guessed  { 0x00ff20c0 },	// Volume Control  { 0 },  { 0 },  { 0 },  { 0 },  { NULL }};struct SOUND_INFO taito_ym2203_sound[] ={   { SOUND_YM2203,  &ym2203_interface,  },   { 0,             NULL,               },};static struct OKIM6295interface m6295_interface ={   1,					// 1 chip   { 8500 },				// rate   { 0 },		// rom list   { 250 },};struct SOUND_INFO taito_ym2203_m6295_sound[] ={   { SOUND_YM2203,  &ym2203_interface,  },   { SOUND_M6295,   &m6295_interface,   },   { 0,             NULL,               },};void M6295_Init(UINT8 *src, UINT32 size){  ADPCMSetBuffers(((struct ADPCMinterface*)&m6295_interface),src,0x40000);}void Taito2203_Frame(void){   cpu_execute_cycles(CPU_Z80_0, (4000000/60)*2);   /*#ifdef RAINE_DEBUG     print_debug("Z80PC0:%04x\n",z80pc);   #endif*/   cpu_interrupt(CPU_Z80_0, 0x0038);}void AddTaitoYM2203(UINT32 p1, UINT32 p2, UINT32 romsize, UINT8 *adpcm, UINT32 adpcmsize){   // Apply Speed Patch   // -----------------   Z80ROM[p1+0]=0xD3;	// OUTA (AAh)   Z80ROM[p1+1]=0xAA;	//   SetStopZ80Mode2( (UINT16) p2);   // Setup rom banking system   // ------------------------   AddTaitoSoundBanking(Z80ROM, romsize);   // Setup Z80 memory map   // --------------------   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   AddZ80AReadByte(0xA000, 0xA001, tc0140syt_read_sub_z80,  	NULL);			// 68000 COMM   if(adpcm!=NULL){   AddZ80AReadByte(0xB000, 0xB000, M6295_A_Read_Z80,       	NULL);			// ADPCM CHANNEL A   }   AddZ80AReadByte(0x0000, 0xFFFF, DefBadReadZ80,          	NULL);   AddZ80AReadByte(-1, -1, NULL, NULL);   AddZ80AWriteByte(0x8000, 0x8FFF, NULL,			Z80ROM+0x008000);	// Z80 RAM   AddZ80AWriteByte(0x9000, 0x9001, YM2203ATaitoWriteZ80,	NULL);			// YM2203+BANK SELECT   AddZ80AWriteByte(0xA000, 0xA001, tc0140syt_write_sub_z80,	NULL);			// 68000 COMM   if(adpcm!=NULL){   AddZ80AWriteByte(0xB000, 0xB000, M6295_A_Write_Z80,      NULL);			// ADPCM CHANNEL A   }   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();   // Setup M6295   // -----------   if(adpcm) M6295_Init(adpcm, adpcmsize);   ExecuteSoundFrame=&Taito2203_Frame;}// Diff Memory Map [L-System Fighting Hawk]void AddTaitoYM2203_B(UINT32 p1, UINT32 p2, UINT32 romsize, UINT8 *adpcm, UINT32 adpcmsize){   // Apply Speed Patch   // -----------------   Z80ROM[p1+0]=0xD3;	// OUTA (AAh)   Z80ROM[p1+1]=0xAA;	//   SetStopZ80Mode2( (UINT16) p2);   // Setup rom banking system   // ------------------------   AddTaitoSoundBanking(Z80ROM, romsize);   // Setup Z80 memory map   // --------------------   AddZ80AROMBase(Z80ROM, 0x0038, 0x0066);   AddZ80AReadByte(0x0000, 0x7FFF, NULL,			NULL);			// BANK ROM   AddZ80AReadByte(0x8000, 0x9FFF, NULL,			Z80ROM+0x008000);	// Z80 RAM   AddZ80AReadByte(0xF000, 0xF001, YM2203AReadZ80,        	NULL);			// YM2203   AddZ80AReadByte(0xE000, 0xE001, tc0140syt_read_sub_z80,  	NULL);			// 68000 COMM   if(adpcm!=NULL){   AddZ80AReadByte(0xB000, 0xB000, M6295_A_Read_Z80,       	NULL);			// ADPCM CHANNEL A   }   AddZ80AReadByte(0x0000, 0xFFFF, DefBadReadZ80,          	NULL);   AddZ80AReadByte(-1, -1, NULL, NULL);   AddZ80AWriteByte(0x8000, 0x9FFF, NULL,			Z80ROM+0x008000);	// Z80 RAM   AddZ80AWriteByte(0xF000, 0xF001, YM2203ATaitoWriteZ80,	NULL);			// YM2203+BANK SELECT   AddZ80AWriteByte(0xE000, 0xE001, tc0140syt_write_sub_z80,	NULL);			// 68000 COMM   if(adpcm!=NULL){   AddZ80AWriteByte(0xB000, 0xB000, M6295_A_Write_Z80,      NULL);			// ADPCM CHANNEL A   }   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();   // Setup M6295   // -----------   if(adpcm) M6295_Init(adpcm, adpcmsize);   ExecuteSoundFrame=&Taito2203_Frame;}void RemoveTaitoYM2203(void){   RemoveTaitoSoundBanking();}/************************************************************//* Taito Z80 Banking interface                              *//* ---------------------------                              *//* For 99% of Taito sound Z80s                              *//************************************************************/// AddTaitoSoundBanking():// Setup bank buffervoid AddTaitoSoundBanking(UINT8 *romsrc, UINT32 romsize){   int ta;   // Make a copy of the rom banks   ROMBANK = AllocateMem(romsize*2);   if(romsize==0x08000){   for(ta=0;ta<2;ta++){      BANKLIST[ta+0] = ROMBANK+(ta*0x8000);      BANKLIST[ta+2] = ROMBANK+(ta*0x8000);      BANKLIST[ta+4] = ROMBANK+(ta*0x8000);      BANKLIST[ta+6] = ROMBANK+(ta*0x8000);      memcpy(BANKLIST[ta]+0x0000,romsrc,            0x4000);      memcpy(BANKLIST[ta]+0x4000,romsrc+(ta*0x4000),0x4000);   }   }   if(romsize==0x10000){   for(ta=0;ta<4;ta++){      BANKLIST[ta+0] = ROMBANK+(ta*0x8000);      BANKLIST[ta+4] = ROMBANK+(ta*0x8000);      memcpy(BANKLIST[ta]+0x0000,romsrc,            0x4000);      memcpy(BANKLIST[ta]+0x4000,romsrc+(ta*0x4000),0x4000);   }   }   if(romsize==0x20000){   for(ta=0;ta<8;ta++){      BANKLIST[ta] = ROMBANK+(ta*0x8000);      memcpy(BANKLIST[ta]+0x0000,romsrc,            0x4000);      memcpy(BANKLIST[ta]+0x4000,romsrc+(ta*0x4000),0x4000);   }   }   // Current bank is [empty], user should call TaitoSoundSetBank()   curr_bank = -1;}// RemoveTaitoSoundBanking():// Remove bank buffervoid RemoveTaitoSoundBanking(void){   FreeMem(ROMBANK);   ROMBANK=NULL;}// TaitoSoundSetBank():// switch the current rom bank (0-7)void TaitoSoundSetBank(UINT16 offset, UINT8 data){   data&=7;   if(data!=curr_bank){      curr_bank = data;      Z80ASetBank( BANKLIST[curr_bank] );   }}void YM2610SetBuffers(UINT8 *bufa, UINT8 *bufb, UINT32 sizea, UINT32 sizeb){   YM2610_Rompointers[0] = bufa;   YM2610_Rompointers[1] = bufb;   YM2610_Romsizes[0]    = sizea;   YM2610_Romsizes[1]    = sizeb;}/**********************************************************/// First OKI 6295void M6295_A_Write_68k( UINT32 address, UINT16 data ){  OKIM6295_data_0_w( 0, data&0xFF );}UINT16 M6295_A_Read_68k( UINT32 address ){  return 0; //OKIM6295_status_0_r( 0 );}void M6295_A_WriteBank_68k(UINT32 address,UINT16 data) { // bankswitch  OKIM6295_bankswitch(0,data);}// Second OKI 6295void M6295_B_Write_68k( UINT32 address, UINT16 data ){  OKIM6295_data_1_w( 1, data&0xFF );}UINT16 M6295_B_Read_68k( UINT32 address ){  return 0; //OKIM6295_status_1_r( 1 );}void M6295_B_WriteBank_68k( UINT32 address, UINT16 data ){  OKIM6295_bankswitch(1,data);}/**********************************************************/// First OKI 6295void M6295_A_Write_Z80(UINT16 offset, UINT8 data){  OKIM6295_data_0_w( 0, data );}UINT16 M6295_A_Read_Z80(UINT16 offset){  return OKIM6295_status_0_r( 0 );}UINT16 M6295_A_ReadFree_Z80(UINT16 offset){   return(0x00);}void M6295_A_WriteBank_Z80(UINT16 offset, UINT8 data){  OKIM6295_bankswitch(0,data);}

⌨️ 快捷键说明

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