📄 taitosnd.c
字号:
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 + -