diff --git a/src/burn/drv/capcom/ps_m.cpp b/src/burn/drv/capcom/ps_m.cpp index 9866f706a..9e317b080 100644 --- a/src/burn/drv/capcom/ps_m.cpp +++ b/src/burn/drv/capcom/ps_m.cpp @@ -19,9 +19,10 @@ INT32 PsmInit() nRate = 11025; } - if (BurnYM2151Init(3579540, 50.0)) { // Init FM sound chip + if (BurnYM2151Init(3579540)) { // Init FM sound chip return 1; } + BurnYM2151SetAllRoutes(0.35, BURN_SND_ROUTE_BOTH); // Allocate a buffer for the intermediate sound (between YM2151 and pBurnSoundOut) nMemLen = nBurnSoundLen * 2 * sizeof(INT16); diff --git a/src/burn/drv/capcom/sf2mdt_snd.cpp b/src/burn/drv/capcom/sf2mdt_snd.cpp index 22ecd7472..f2f1182d9 100644 --- a/src/burn/drv/capcom/sf2mdt_snd.cpp +++ b/src/burn/drv/capcom/sf2mdt_snd.cpp @@ -132,7 +132,8 @@ INT32 Sf2mdtSoundInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(3579540, 50.0); + BurnYM2151Init(3579540); + BurnYM2151SetAllRoutes(0.35, BURN_SND_ROUTE_BOTH); MSM5205Init(0, Sf2mdtSynchroniseStream, 24000000 / 64, Sf2mdtMSM5205Vck0, MSM5205_S96_4B, 20, 1); MSM5205Init(1, Sf2mdtSynchroniseStream, 24000000 / 64, Sf2mdtMSM5205Vck1, MSM5205_S96_4B, 20, 1); diff --git a/src/burn/drv/cave/d_metmqstr.cpp b/src/burn/drv/cave/d_metmqstr.cpp index b1c42a78b..90386e1aa 100644 --- a/src/burn/drv/cave/d_metmqstr.cpp +++ b/src/burn/drv/cave/d_metmqstr.cpp @@ -755,8 +755,10 @@ static INT32 DrvInit() nCaveExtraXOffset = -126; CaveSpriteVisibleXOffset = -126; - BurnYM2151Init(4000000, 25.0); + BurnYM2151Init(4000000); BurnYM2151SetIrqHandler(&DrvYM2151IrqHandler); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.20, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.20, BURN_SND_ROUTE_RIGHT); memcpy(MSM6295ROM, MSM6295ROMSrc1, 0x40000); memcpy(MSM6295ROM + 0x100000, MSM6295ROMSrc2, 0x40000); diff --git a/src/burn/drv/cave/d_sailormn.cpp b/src/burn/drv/cave/d_sailormn.cpp index dfb8308a1..3f81170c2 100644 --- a/src/burn/drv/cave/d_sailormn.cpp +++ b/src/burn/drv/cave/d_sailormn.cpp @@ -947,8 +947,10 @@ static INT32 gameInit() CaveTileInitLayer(2, 0x01400000, 6, 0x4C00); } - BurnYM2151Init(32000000 / 8, 25.0); + BurnYM2151Init(32000000 / 8); BurnYM2151SetIrqHandler(&drvYM2151IRQHandler); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.30, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.30, BURN_SND_ROUTE_RIGHT); MSM6295Init(0, 16000, 100.0, 1); MSM6295Init(1, 16000, 100.0, 1); diff --git a/src/burn/drv/dataeast/d_boogwing.cpp b/src/burn/drv/dataeast/d_boogwing.cpp index ea42aaa24..f1aa5a87d 100644 --- a/src/burn/drv/dataeast/d_boogwing.cpp +++ b/src/burn/drv/dataeast/d_boogwing.cpp @@ -6,6 +6,7 @@ #include "h6280_intf.h" #include "deco16ic.h" #include "msm6295.h" +#include "burn_ym2151.h" static UINT8 *AllMem; static UINT8 *MemEnd; @@ -451,7 +452,9 @@ static INT32 DrvInit() SekSetReadByteHandler(0, boogwing_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 0, DrvYM2151WritePort, 40.0, 1006875, 140.0, 2013750, 30.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 0, DrvYM2151WritePort, 0.80, 1006875, 140.0, 2013750, 30.0); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.80, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.80, BURN_SND_ROUTE_RIGHT); GenericTilesInit(); diff --git a/src/burn/drv/dataeast/d_cbuster.cpp b/src/burn/drv/dataeast/d_cbuster.cpp index c007988b1..dd6275bbf 100644 --- a/src/burn/drv/dataeast/d_cbuster.cpp +++ b/src/burn/drv/dataeast/d_cbuster.cpp @@ -429,7 +429,7 @@ static INT32 DrvInit() SekSetReadByteHandler(0, cbuster_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, NULL, 40.0, 1006875, 75.0, 2013750, 100.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, NULL, 0.45, 1006875, 75.0, 2013750, 100.0); BurnYM2203SetAllRoutes(0, 0.60, BURN_SND_ROUTE_BOTH); GenericTilesInit(); diff --git a/src/burn/drv/dataeast/d_cninja.cpp b/src/burn/drv/dataeast/d_cninja.cpp index 5d7ea3d16..0a5c3edb2 100644 --- a/src/burn/drv/dataeast/d_cninja.cpp +++ b/src/burn/drv/dataeast/d_cninja.cpp @@ -1182,7 +1182,7 @@ static INT32 CninjaInit() SekSetReadByteHandler(0, cninja_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, DrvYM2151WritePort, 40.0, 1006875, 75.0, 2013750, 60.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, DrvYM2151WritePort, 0.45, 1006875, 75.0, 2013750, 60.0); BurnYM2203SetAllRoutes(0, 0.60, BURN_SND_ROUTE_BOTH); GenericTilesInit(); @@ -1282,7 +1282,7 @@ static INT32 EdrandyInit() SekSetReadByteHandler(0, cninja_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, DrvYM2151WritePort, 40.0, 1006875, 75.0, 2013750, 60.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, DrvYM2151WritePort, 0.45, 1006875, 75.0, 2013750, 60.0); BurnYM2203SetAllRoutes(0, 0.60, BURN_SND_ROUTE_BOTH); GenericTilesInit(); @@ -1393,7 +1393,9 @@ static INT32 MutantfInit() SekSetReadByteHandler(0, mutantf_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 0, DrvYM2151WritePort, 40.0, 1006875, 75.0, 2013750, 60.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 0, DrvYM2151WritePort, 0.45, 1006875, 75.0, 2013750, 60.0); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.45, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.45, BURN_SND_ROUTE_RIGHT); GenericTilesInit(); @@ -1490,8 +1492,9 @@ static INT32 CninjablInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(3580000, 45.0); + BurnYM2151Init(3580000); BurnYM2151SetIrqHandler(&DrvYM2151IrqHandler); + BurnYM2151SetAllRoutes(0.45, BURN_SND_ROUTE_BOTH); MSM6295Init(0, 1006875 / 132, 75.0, 1); MSM6295Init(1, 2013750 / 132, 60.0, 1); @@ -1605,7 +1608,8 @@ static INT32 StoneageInit() MSM6295Init(0, 1006875 / 132, 75.0, 1); MSM6295Init(1, 2013750 / 132, 60.0, 1); - BurnYM2151Init(3580000, 45.0); + BurnYM2151Init(3580000); + BurnYM2151SetAllRoutes(0.45, BURN_SND_ROUTE_BOTH); BurnYM2151SetIrqHandler(&DrvYM2151IrqHandler); GenericTilesInit(); @@ -1713,8 +1717,10 @@ static INT32 Robocop2Init() SekSetReadByteHandler(0, robocop2_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, DrvYM2151WritePort, 40.0, 1006875, 75.0, 2013750, 60.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, DrvYM2151WritePort, 0.45, 1006875, 75.0, 2013750, 60.0); BurnYM2203SetAllRoutes(0, 0.60, BURN_SND_ROUTE_BOTH); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.45, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.45, BURN_SND_ROUTE_RIGHT); GenericTilesInit(); diff --git a/src/burn/drv/dataeast/d_darkseal.cpp b/src/burn/drv/dataeast/d_darkseal.cpp index 902b448be..a00479421 100644 --- a/src/burn/drv/dataeast/d_darkseal.cpp +++ b/src/burn/drv/dataeast/d_darkseal.cpp @@ -394,7 +394,7 @@ static INT32 DrvInit() SekSetReadByteHandler(0, darkseal_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, NULL, 40.0, 1006875, 100.0, 2013750, 60.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, NULL, 0.55, 1006875, 100.0, 2013750, 60.0); BurnYM2203SetAllRoutes(0, 0.45, BURN_SND_ROUTE_BOTH); GenericTilesInit(); diff --git a/src/burn/drv/dataeast/d_dassault.cpp b/src/burn/drv/dataeast/d_dassault.cpp index 13a2d3483..f0eb01842 100644 --- a/src/burn/drv/dataeast/d_dassault.cpp +++ b/src/burn/drv/dataeast/d_dassault.cpp @@ -672,8 +672,10 @@ static INT32 DrvInit() SekSetReadByteHandler(1, dassault_irq_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, DrvYM2151WritePort, 40.0, 1006875, 75.0, 2013750, 60.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, DrvYM2151WritePort, 0.45, 1006875, 75.0, 2013750, 60.0); BurnYM2203SetAllRoutes(0, 0.40, BURN_SND_ROUTE_BOTH); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.45, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.45, BURN_SND_ROUTE_RIGHT); GenericTilesInit(); diff --git a/src/burn/drv/dataeast/d_dietgogo.cpp b/src/burn/drv/dataeast/d_dietgogo.cpp index 3702142ef..3b04f7e57 100644 --- a/src/burn/drv/dataeast/d_dietgogo.cpp +++ b/src/burn/drv/dataeast/d_dietgogo.cpp @@ -290,7 +290,7 @@ static INT32 DrvInit() SekSetReadByteHandler(0, dietgogo_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 2685000, 0, NULL, 45.0, 1006875, 100.0, 0, 0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 2685000, 0, NULL, 0.45, 1006875, 100.0, 0, 0); GenericTilesInit(); diff --git a/src/burn/drv/dataeast/d_funkyjet.cpp b/src/burn/drv/dataeast/d_funkyjet.cpp index 780789776..5152d101f 100644 --- a/src/burn/drv/dataeast/d_funkyjet.cpp +++ b/src/burn/drv/dataeast/d_funkyjet.cpp @@ -6,6 +6,7 @@ #include "h6280_intf.h" #include "deco16ic.h" #include "msm6295.h" +#include "burn_ym2151.h" static UINT8 *AllMem; static UINT8 *MemEnd; @@ -405,7 +406,9 @@ static INT32 DrvInit() SekSetReadByteHandler(0, funkyjet_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 0, NULL, 40.0, 1000000, 100.0, 0, 0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 0, NULL, 0.45, 1000000, 100.0, 0, 0); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.45, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.45, BURN_SND_ROUTE_RIGHT); GenericTilesInit(); diff --git a/src/burn/drv/dataeast/d_lemmings.cpp b/src/burn/drv/dataeast/d_lemmings.cpp index 340806ec8..a267dd8f8 100644 --- a/src/burn/drv/dataeast/d_lemmings.cpp +++ b/src/burn/drv/dataeast/d_lemmings.cpp @@ -455,8 +455,10 @@ static INT32 DrvInit() M6809SetReadByteHandler(lemmings_sound_read); M6809Close(); - BurnYM2151Init(3580000, 45.0); + BurnYM2151Init(3580000); BurnYM2151SetIrqHandler(&lemmingsYM2151IrqHandler); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.45, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.45, BURN_SND_ROUTE_RIGHT); MSM6295Init(0, 1023924 / 132, 50.0, 1); diff --git a/src/burn/drv/dataeast/d_rohga.cpp b/src/burn/drv/dataeast/d_rohga.cpp index 3fac5e7b7..f16a2e7b0 100644 --- a/src/burn/drv/dataeast/d_rohga.cpp +++ b/src/burn/drv/dataeast/d_rohga.cpp @@ -6,6 +6,7 @@ #include "h6280_intf.h" #include "deco16ic.h" #include "msm6295.h" +#include "burn_ym2151.h" static UINT8 *AllMem; static UINT8 *MemEnd; @@ -812,7 +813,9 @@ static INT32 RohgaInit() SekSetReadByteHandler(0, rohga_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 2685000, 0, DrvYM2151WritePort, 40.0, 1006875, 100.0, 2013750, 75.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 2685000, 0, DrvYM2151WritePort, 0.78, 1006875, 100.0, 2013750, 75.0); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.78, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.78, BURN_SND_ROUTE_RIGHT); GenericTilesInit(); @@ -904,7 +907,9 @@ static INT32 WizdfireInit() SekSetReadByteHandler(0, wizdfire_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 2685000, 0, DrvYM2151WritePort, 40.0, 1006875, 100.0, 2013750, 40.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 2685000, 0, DrvYM2151WritePort, 0.80, 1006875, 100.0, 2013750, 40.0); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.80, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.80, BURN_SND_ROUTE_RIGHT); GenericTilesInit(); @@ -991,7 +996,9 @@ static INT32 SchmeisrInit() SekSetReadByteHandler(0, rohga_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 2685000, 0, DrvYM2151WritePort, 40.0, 1006875, 100.0, 2013750, 40.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 2685000, 0, DrvYM2151WritePort, 0.80, 1006875, 100.0, 2013750, 40.0); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.80, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.80, BURN_SND_ROUTE_RIGHT); GenericTilesInit(); @@ -1093,7 +1100,9 @@ static INT32 NitrobalInit() SekSetReadByteHandler(0, wizdfire_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 2685000, 0, DrvYM2151WritePort, 40.0, 1006875, 100.0, 2013750, 40.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 2685000, 0, DrvYM2151WritePort, 0.80, 1006875, 100.0, 2013750, 40.0); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.80, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.80, BURN_SND_ROUTE_RIGHT); GenericTilesInit(); diff --git a/src/burn/drv/dataeast/d_supbtime.cpp b/src/burn/drv/dataeast/d_supbtime.cpp index f4ab25bf9..562bbcb4b 100644 --- a/src/burn/drv/dataeast/d_supbtime.cpp +++ b/src/burn/drv/dataeast/d_supbtime.cpp @@ -331,7 +331,7 @@ static INT32 DrvInit(INT32 game) SekSetReadByteHandler(0, supbtime_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 4027500, 0, NULL, 40.0, 1023924, 75.0, 0, 0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 4027500, 0, NULL, 0.45, 1023924, 75.0, 0, 0); GenericTilesInit(); diff --git a/src/burn/drv/dataeast/d_tumblep.cpp b/src/burn/drv/dataeast/d_tumblep.cpp index a580b4f3c..2ffde33c3 100644 --- a/src/burn/drv/dataeast/d_tumblep.cpp +++ b/src/burn/drv/dataeast/d_tumblep.cpp @@ -6,6 +6,7 @@ #include "h6280_intf.h" #include "deco16ic.h" #include "msm6295.h" +#include "burn_ym2151.h" static UINT8 *AllMem; static UINT8 *MemEnd; @@ -280,7 +281,9 @@ static INT32 DrvInit() SekSetReadByteHandler(0, tumblep_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 4027500, 0, NULL, 40.0, 1023924, 50.0, 0, 0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 4027500, 0, NULL, 0.45, 1023924, 50.0, 0, 0); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.45, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.45, BURN_SND_ROUTE_RIGHT); GenericTilesInit(); diff --git a/src/burn/drv/dataeast/d_vaportra.cpp b/src/burn/drv/dataeast/d_vaportra.cpp index e9c3e662c..a3b3a6d26 100644 --- a/src/burn/drv/dataeast/d_vaportra.cpp +++ b/src/burn/drv/dataeast/d_vaportra.cpp @@ -387,7 +387,7 @@ static INT32 DrvInit(INT32 type) SekSetReadByteHandler(0, vaportra_main_read_byte); SekClose(); - deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, NULL, 40.0, 1006875, 75.0, 2013750, 60.0); + deco16SoundInit(DrvHucROM, DrvHucRAM, 8055000, 1, NULL, 0.60, 1006875, 75.0, 2013750, 60.0); BurnYM2203SetAllRoutes(0, 0.60, BURN_SND_ROUTE_BOTH); GenericTilesInit(); diff --git a/src/burn/drv/dataeast/deco16ic.cpp b/src/burn/drv/dataeast/deco16ic.cpp index 73ed31155..337ab6e81 100644 --- a/src/burn/drv/dataeast/deco16ic.cpp +++ b/src/burn/drv/dataeast/deco16ic.cpp @@ -865,7 +865,8 @@ void deco16SoundInit(UINT8 *rom, UINT8 *ram, INT32 huc_clock, INT32 ym2203, void deco16_sound_enable[2] = 1; // msm6295 #0 always enabled deco16_sound_enable[3] = msmclk1 ? 1 : 0; - BurnYM2151Init(3580000, ym2151vol); + BurnYM2151Init(3580000); + BurnYM2151SetAllRoutes(ym2151vol, BURN_SND_ROUTE_BOTH); BurnYM2151SetIrqHandler(&deco16YM2151IrqHandler); if (ym2151_port != NULL) { BurnYM2151SetPortHandler(ym2151_port); diff --git a/src/burn/drv/irem/d_m72.cpp b/src/burn/drv/irem/d_m72.cpp index 91da0c40f..0ac85a67a 100644 --- a/src/burn/drv/irem/d_m72.cpp +++ b/src/burn/drv/irem/d_m72.cpp @@ -1721,8 +1721,10 @@ static INT32 DrvInit(void (*pCPUMapCallback)(), void (*pSNDMapCallback)(), INT32 break; } - BurnYM2151Init(3579545, 100.0); + BurnYM2151Init(3579545); YM2151SetIrqHandler(0, &m72YM2151IRQHandler); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); DACInit(0, 0, 1, m72SyncDAC); DACSetRoute(0, 0.40, BURN_SND_ROUTE_BOTH); diff --git a/src/burn/drv/irem/d_m90.cpp b/src/burn/drv/irem/d_m90.cpp index f0b6444b8..af66d7de6 100644 --- a/src/burn/drv/irem/d_m90.cpp +++ b/src/burn/drv/irem/d_m90.cpp @@ -1144,8 +1144,9 @@ static INT32 DrvInit(INT32 codesize, INT32 gfxlen, INT32 samples, INT32 bank, IN ZetMemEnd(); ZetClose(); - BurnYM2151Init(3579545, 15.0); + BurnYM2151Init(3579545); YM2151SetIrqHandler(0, &m72YM2151IRQHandler); + BurnYM2151SetAllRoutes(0.15, BURN_SND_ROUTE_BOTH); DACInit(0, 0, 1, m90SyncDAC); DACSetRoute(0, 0.10, BURN_SND_ROUTE_BOTH); diff --git a/src/burn/drv/irem/d_m92.cpp b/src/burn/drv/irem/d_m92.cpp index 1b80e86e3..343a88305 100644 --- a/src/burn/drv/irem/d_m92.cpp +++ b/src/burn/drv/irem/d_m92.cpp @@ -1747,8 +1747,9 @@ static INT32 DrvInit(INT32 (*pRomLoadCallback)(), const UINT8 *sound_decrypt_tab m92_irq_vectorbase = vectorbase; - BurnYM2151Init(3579545, 40.0); + BurnYM2151Init(3579545); YM2151SetIrqHandler(0, &m92YM2151IRQHandler); + BurnYM2151SetAllRoutes(0.40, BURN_SND_ROUTE_BOTH); iremga20_init(0, DrvSndROM, 0x100000, 3579545); diff --git a/src/burn/drv/irem/d_vigilant.cpp b/src/burn/drv/irem/d_vigilant.cpp index d9f98682e..6d41eaf18 100644 --- a/src/burn/drv/irem/d_vigilant.cpp +++ b/src/burn/drv/irem/d_vigilant.cpp @@ -1457,8 +1457,10 @@ static INT32 DrvInit() nCyclesTotal[1] = 3579645 / 55; GenericTilesInit(); - BurnYM2151Init(3579645, 25.0); + BurnYM2151Init(3579645); BurnYM2151SetIrqHandler(&VigilantYM2151IrqHandler); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.55, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.55, BURN_SND_ROUTE_RIGHT); DACInit(0, 0, 1, VigilantSyncDAC); DACSetRoute(0, 1.00, BURN_SND_ROUTE_BOTH); @@ -1690,8 +1692,10 @@ static INT32 KikcubicInit() nCyclesTotal[1] = 3579645 / 55; GenericTilesInit(); - BurnYM2151Init(3579645, 25.0); + BurnYM2151Init(3579645); BurnYM2151SetIrqHandler(&VigilantYM2151IrqHandler); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.55, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.55, BURN_SND_ROUTE_RIGHT); DACInit(0, 0, 1, VigilantSyncDAC); DACSetRoute(0, 1.00, BURN_SND_ROUTE_BOTH); diff --git a/src/burn/drv/konami/d_88games.cpp b/src/burn/drv/konami/d_88games.cpp index d1604508c..e95527135 100644 --- a/src/burn/drv/konami/d_88games.cpp +++ b/src/burn/drv/konami/d_88games.cpp @@ -477,7 +477,8 @@ static INT32 DrvInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(3579545, 75.0); + BurnYM2151Init(3579545); + BurnYM2151SetAllRoutes(0.75, BURN_SND_ROUTE_BOTH); UPD7759Init(0, UPD7759_STANDARD_CLOCK, DrvSndROM0); UPD7759Init(1, UPD7759_STANDARD_CLOCK, DrvSndROM1); diff --git a/src/burn/drv/konami/d_ajax.cpp b/src/burn/drv/konami/d_ajax.cpp index 15a6727da..417f4b13c 100644 --- a/src/burn/drv/konami/d_ajax.cpp +++ b/src/burn/drv/konami/d_ajax.cpp @@ -592,7 +592,9 @@ static INT32 DrvInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); K007232Init(0, 3579545, DrvSndROM0, 0x40000); K007232SetPortWriteHandler(0, DrvK007232VolCallback0); diff --git a/src/burn/drv/konami/d_aliens.cpp b/src/burn/drv/konami/d_aliens.cpp index 293940c57..e0cc202fc 100644 --- a/src/burn/drv/konami/d_aliens.cpp +++ b/src/burn/drv/konami/d_aliens.cpp @@ -427,8 +427,9 @@ static INT32 DrvInit() K051960SetCallback(K051960Callback); K051960SetSpriteOffset(8, 0); - BurnYM2151Init(3579545, 100.0); + BurnYM2151Init(3579545); BurnYM2151SetPortHandler(&DrvYM2151WritePort); + BurnYM2151SetAllRoutes(0.60, BURN_SND_ROUTE_BOTH); K007232Init(0, 3579545, DrvSndROM, 0x40000); K007232SetPortWriteHandler(0, DrvK007232VolCallback); diff --git a/src/burn/drv/konami/d_blockhl.cpp b/src/burn/drv/konami/d_blockhl.cpp index c890c3ba2..9cdaf43e6 100644 --- a/src/burn/drv/konami/d_blockhl.cpp +++ b/src/burn/drv/konami/d_blockhl.cpp @@ -363,7 +363,8 @@ static INT32 DrvInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(3579545, 100.0); + BurnYM2151Init(3579545); + BurnYM2151SetAllRoutes(0.60, BURN_SND_ROUTE_BOTH); K052109Init(DrvGfxROM0, 0x1ffff); K052109SetCallback(K052109Callback); diff --git a/src/burn/drv/konami/d_contra.cpp b/src/burn/drv/konami/d_contra.cpp index e2d4033a1..ab1582347 100644 --- a/src/burn/drv/konami/d_contra.cpp +++ b/src/burn/drv/konami/d_contra.cpp @@ -520,8 +520,10 @@ static INT32 DrvInit() M6809SetWriteByteHandler(DrvContraM6809SoundWriteByte); M6809Close(); - BurnYM2151Init(3579545, 60.0); + BurnYM2151Init(3579545); BurnYM2151SetIrqHandler(&DrvYM2151IrqHandler); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.60, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.60, BURN_SND_ROUTE_RIGHT); DrvDoReset(); diff --git a/src/burn/drv/konami/d_crimfght.cpp b/src/burn/drv/konami/d_crimfght.cpp index 9a1d7dd80..a7aee2bd0 100644 --- a/src/burn/drv/konami/d_crimfght.cpp +++ b/src/burn/drv/konami/d_crimfght.cpp @@ -528,8 +528,10 @@ static INT32 DrvInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(3579545, 100.0); + BurnYM2151Init(3579545); BurnYM2151SetPortHandler(&DrvYM2151WritePort); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); K007232Init(0, 3579545, DrvSndROM, 0x40000); K007232SetPortWriteHandler(0, DrvK007232VolCallback); diff --git a/src/burn/drv/konami/d_gbusters.cpp b/src/burn/drv/konami/d_gbusters.cpp index 0e67766a7..42f0b3e92 100644 --- a/src/burn/drv/konami/d_gbusters.cpp +++ b/src/burn/drv/konami/d_gbusters.cpp @@ -422,7 +422,8 @@ static INT32 DrvInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(3579545, 100.0); + BurnYM2151Init(3579545); + BurnYM2151SetAllRoutes(0.60, BURN_SND_ROUTE_BOTH); K007232Init(0, 3579545, DrvSndROM, 0x40000); K007232SetPortWriteHandler(0, DrvK007232VolCallback); diff --git a/src/burn/drv/konami/d_gradius3.cpp b/src/burn/drv/konami/d_gradius3.cpp index dc7450ca1..81cf87bdf 100644 --- a/src/burn/drv/konami/d_gradius3.cpp +++ b/src/burn/drv/konami/d_gradius3.cpp @@ -590,7 +590,9 @@ static INT32 DrvInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(3579545, 100.0); + BurnYM2151Init(3579545); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); K007232Init(0, 3579545, DrvSndROM, 0x80000); K007232SetPortWriteHandler(0, DrvK007232VolCallback); diff --git a/src/burn/drv/konami/d_mainevt.cpp b/src/burn/drv/konami/d_mainevt.cpp index 535249077..46e5a2864 100644 --- a/src/burn/drv/konami/d_mainevt.cpp +++ b/src/burn/drv/konami/d_mainevt.cpp @@ -758,7 +758,8 @@ static INT32 DrvInit(INT32 type) K007232Init(0, 3579545, DrvSndROM0, 0x80000); K007232SetPortWriteHandler(0, DrvK007232VolCallback); - BurnYM2151Init(3579545, 75.0); + BurnYM2151Init(3579545); + BurnYM2151SetAllRoutes(0.30, BURN_SND_ROUTE_BOTH); UPD7759Init(0, UPD7759_STANDARD_CLOCK, DrvSndROM1); diff --git a/src/burn/drv/konami/d_parodius.cpp b/src/burn/drv/konami/d_parodius.cpp index 92d317bf5..9c6c622a8 100644 --- a/src/burn/drv/konami/d_parodius.cpp +++ b/src/burn/drv/konami/d_parodius.cpp @@ -458,7 +458,9 @@ static INT32 DrvInit() K053245Init(0, DrvGfxROM1, 0xfffff, K053245Callback); K053245SetSpriteOffset(0, -112, -16); - BurnYM2151Init(3579545, 70.0); + BurnYM2151Init(3579545); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); K053260Init(0, 3579545, DrvSndROM, 0x80000); diff --git a/src/burn/drv/konami/d_simpsons.cpp b/src/burn/drv/konami/d_simpsons.cpp index ec824dc9e..588f3dbc9 100644 --- a/src/burn/drv/konami/d_simpsons.cpp +++ b/src/burn/drv/konami/d_simpsons.cpp @@ -503,7 +503,9 @@ static INT32 DrvInit() K053247Init(DrvGfxROM1, 0x3fffff, K053247Callback, 0x03 /* shadows & highlights */); K053247SetSpriteOffset(-59, 39); - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_BOTH); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.00, BURN_SND_ROUTE_BOTH); // not connected K053260Init(0, 3579545, DrvSndROM, 0x140000); diff --git a/src/burn/drv/konami/d_surpratk.cpp b/src/burn/drv/konami/d_surpratk.cpp index 38015b5b6..62d739c3e 100644 --- a/src/burn/drv/konami/d_surpratk.cpp +++ b/src/burn/drv/konami/d_surpratk.cpp @@ -376,8 +376,10 @@ static INT32 DrvInit() K053245Init(0, DrvGfxROM1, 0x7ffff, K053245Callback); K053245SetSpriteOffset(0, -112, 16); - BurnYM2151Init(3579545, 100.0); + BurnYM2151Init(3579545); YM2151SetIrqHandler(0, &DrvYM2151IRQHandler); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); GenericTilesInit(); diff --git a/src/burn/drv/konami/d_thunderx.cpp b/src/burn/drv/konami/d_thunderx.cpp index 68174baad..66a75f5f8 100644 --- a/src/burn/drv/konami/d_thunderx.cpp +++ b/src/burn/drv/konami/d_thunderx.cpp @@ -683,7 +683,8 @@ static INT32 DrvInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); + BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); K007232Init(0, 3579545, DrvSndROM, 0x80000); K007232SetPortWriteHandler(0, DrvK007232VolCallback); diff --git a/src/burn/drv/konami/d_tmnt.cpp b/src/burn/drv/konami/d_tmnt.cpp index 2e4ca40ac..43f022e49 100644 --- a/src/burn/drv/konami/d_tmnt.cpp +++ b/src/burn/drv/konami/d_tmnt.cpp @@ -4401,7 +4401,8 @@ static INT32 TmntInit() ZetClose(); // Setup the YM2151 emulation - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); + BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); K007232Init(0, 3579545, DrvSoundRom, 0x20000); K007232SetPortWriteHandler(0, DrvK007232VolCallback); @@ -4497,7 +4498,8 @@ static INT32 MiaInit() ZetClose(); // Setup the YM2151 emulation - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); + BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); K007232Init(0, 3579545, DrvSoundRom, 0x20000); K007232SetPortWriteHandler(0, DrvK007232VolCallback); @@ -4566,8 +4568,9 @@ static INT32 CuebrickInit() SekClose(); // Setup the YM2151 emulation - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); BurnYM2151SetIrqHandler(&CuebrickYM2151IrqHandler); + BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); GenericTilesInit(); @@ -4653,7 +4656,9 @@ static INT32 BlswhstlInit() ZetClose(); // Setup the YM2151 emulation - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.70, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.70, BURN_SND_ROUTE_RIGHT); K053260Init(0, 3579545, DrvSoundRom, 0x100000); @@ -4737,7 +4742,9 @@ static INT32 SsridersInit() ZetClose(); // Setup the YM2151 emulation - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); K053260Init(0, 3579545, DrvSoundRom, 0x100000); @@ -4818,7 +4825,9 @@ static INT32 Thndrx2Init() ZetClose(); // Setup the YM2151 emulation - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); K053260Init(0, 3579545, DrvSoundRom, 0x80000); @@ -4900,7 +4909,9 @@ static INT32 LgtnfghtInit() ZetClose(); // Setup the YM2151 emulation - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); K053260Init(0, 3579545, DrvSoundRom, 0x80000); @@ -4990,7 +5001,9 @@ static INT32 Tmnt2Init() ZetClose(); // Setup the YM2151 emulation - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); K053260Init(0, 3579545, DrvSoundRom, 0x200000); @@ -5078,7 +5091,9 @@ static INT32 QgakumonInit() ZetClose(); // Setup the YM2151 emulation - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); K053260Init(0, 3579545, DrvSoundRom, 0x200000); @@ -5159,7 +5174,8 @@ static INT32 PunkshotInit() ZetClose(); // Setup the YM2151 emulation - BurnYM2151Init(3579545, 25.0); + BurnYM2151Init(3579545); + BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); K053260Init(0, 3579545, DrvSoundRom, 0x80000); diff --git a/src/burn/drv/konami/d_twin16.cpp b/src/burn/drv/konami/d_twin16.cpp index 8399e3615..51741b578 100644 --- a/src/burn/drv/konami/d_twin16.cpp +++ b/src/burn/drv/konami/d_twin16.cpp @@ -1021,7 +1021,9 @@ static INT32 DrvInit(INT32 (pLoadCallback)()) K007232Init(0, 3579545, DrvSndROM0, 0x20000); K007232SetPortWriteHandler(0, DrvK007232VolCallback); - BurnYM2151Init(3579580, 75.0); + BurnYM2151Init(3579580); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); UPD7759Init(0, UPD7759_STANDARD_CLOCK, DrvSndROM1); diff --git a/src/burn/drv/konami/d_ultraman.cpp b/src/burn/drv/konami/d_ultraman.cpp index fb3304034..a680f8f1c 100644 --- a/src/burn/drv/konami/d_ultraman.cpp +++ b/src/burn/drv/konami/d_ultraman.cpp @@ -481,7 +481,9 @@ static INT32 DrvInit() K051316Init(2, DrvGfxROM3, DrvGfxROMExp3, 0x7ffff, K051316Callback2, 4, 0); K051316SetOffset(2, -105, -16); - BurnYM2151Init(4000000, 100.0); + BurnYM2151Init(4000000); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); MSM6295Init(0, 1056000 / 132, 50.0, 1); diff --git a/src/burn/drv/konami/d_vendetta.cpp b/src/burn/drv/konami/d_vendetta.cpp index 169276e85..2d504e369 100644 --- a/src/burn/drv/konami/d_vendetta.cpp +++ b/src/burn/drv/konami/d_vendetta.cpp @@ -712,7 +712,9 @@ static INT32 DrvInit(INT32 nGame) EEPROMInit(&vendetta_eeprom_intf); - BurnYM2151Init(3579545, 100.0); + BurnYM2151Init(3579545); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); K053260Init(0, 3579545, DrvSndROM, 0x100000 >> nGame); diff --git a/src/burn/drv/konami/d_xmen.cpp b/src/burn/drv/konami/d_xmen.cpp index ccc1cc45d..b59d088ee 100644 --- a/src/burn/drv/konami/d_xmen.cpp +++ b/src/burn/drv/konami/d_xmen.cpp @@ -476,7 +476,9 @@ static INT32 DrvInit() K053247Init(DrvGfxROM1, 0x3fffff, K053247Callback, 1); K053247SetSpriteOffset(-510, 158); - BurnYM2151Init(4000000, 80.0); + BurnYM2151Init(4000000); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); K054539Init(0, 48000, DrvSndROM, 0x200000); diff --git a/src/burn/drv/sega/sys16_run.cpp b/src/burn/drv/sega/sys16_run.cpp index f9fafc507..892e582cd 100644 --- a/src/burn/drv/sega/sys16_run.cpp +++ b/src/burn/drv/sega/sys16_run.cpp @@ -1839,7 +1839,8 @@ INT32 System16Init() if (PPI0PortWriteC == NULL) PPI0PortWriteC = System16APPI0WritePortC; ppi8255_init(1); - BurnYM2151Init(4000000, 25.0); + BurnYM2151Init(4000000); + BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); if (System167751ProgSize) { N7751Init(NULL); @@ -1851,6 +1852,7 @@ INT32 System16Init() N7751SetCPUOpReadArgHandler(N7751Read); YM2151SetPortWriteHandler(0, &System16N7751ControlWrite); + BurnYM2151SetAllRoutes(0.43, BURN_SND_ROUTE_BOTH); DACInit(0, 0, 1, System16ASyncDAC); DACSetRoute(0, 0.80, BURN_SND_ROUTE_BOTH); } @@ -1916,7 +1918,8 @@ INT32 System16Init() BurnYM2413Init(5000000); BurnYM2413SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); } else { - BurnYM2151Init(4000000, 25.0); + BurnYM2151Init(4000000); + BurnYM2151SetAllRoutes(0.43, BURN_SND_ROUTE_BOTH); } if (System16UPD7759DataSize) { @@ -2083,8 +2086,10 @@ INT32 System16Init() BurnYM2203SetRoute(0, BURN_SND_YM2203_AY8910_ROUTE_2, 0.13, BURN_SND_ROUTE_BOTH); BurnYM2203SetRoute(0, BURN_SND_YM2203_AY8910_ROUTE_3, 0.13, BURN_SND_ROUTE_BOTH); } else { - BurnYM2151Init(4000000, 25.0); + BurnYM2151Init(4000000); BurnYM2151SetIrqHandler(&System16YM2151IRQHandler); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.43, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.43, BURN_SND_ROUTE_RIGHT); } if (System16PCMDataSize) { @@ -2156,7 +2161,9 @@ INT32 System16Init() if (PPI0PortWriteC == NULL) PPI0PortWriteC = OutrunPPI0WritePortC; ppi8255_init(1); - BurnYM2151Init(4000000, 25.0); + BurnYM2151Init(4000000); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.43, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.43, BURN_SND_ROUTE_RIGHT); if (System16PCMDataSize) { SegaPCMInit(4000000, BANK_512, System16PCMData, System16PCMDataSize); @@ -2245,8 +2252,10 @@ INT32 System16Init() ZetClose(); } - BurnYM2151Init(4000000, 25.0); + BurnYM2151Init(4000000); BurnYM2151SetIrqHandler(&System16YM2151IRQHandler); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.43, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.43, BURN_SND_ROUTE_RIGHT); if (System16PCMDataSize) { SegaPCMInit(4000000, BANK_512, System16PCMData, System16PCMDataSize); @@ -2324,8 +2333,10 @@ INT32 System16Init() ZetClose(); } - BurnYM2151Init(32215900 / 8, 25.0); + BurnYM2151Init(32215900 / 8); BurnYM2151SetIrqHandler(&System16YM2151IRQHandler); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.43, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.43, BURN_SND_ROUTE_RIGHT); if (System16PCMDataSize) { SegaPCMInit(32215900 / 8, BANK_12M | BANK_MASKF8, System16PCMData, System16PCMDataSize); diff --git a/src/burn/drv/taito/d_asuka.cpp b/src/burn/drv/taito/d_asuka.cpp index 1094a1784..61dfca91b 100644 --- a/src/burn/drv/taito/d_asuka.cpp +++ b/src/burn/drv/taito/d_asuka.cpp @@ -1307,9 +1307,10 @@ static void BonzeZ80Setup() static void CadashSoundSetup() { - BurnYM2151Init(4000000, 50.0); + BurnYM2151Init(4000000); BurnYM2151SetIrqHandler(&CadashYM2151IRQHandler); BurnYM2151SetPortHandler(&DrvSoundBankSwitch); + BurnYM2151SetAllRoutes(0.50, BURN_SND_ROUTE_BOTH); TaitoNumYM2151 = 1; TaitoNumYM2610 = 0; @@ -1318,9 +1319,10 @@ static void CadashSoundSetup() static void AsukaSoundSetup() { - BurnYM2151Init(4000000, 50.0); + BurnYM2151Init(4000000); BurnYM2151SetIrqHandler(&CadashYM2151IRQHandler); BurnYM2151SetPortHandler(&DrvSoundBankSwitch); + BurnYM2151SetAllRoutes(0.50, BURN_SND_ROUTE_BOTH); MSM5205Init(0, DrvSynchroniseStream, 384000, AsukaMSM5205Vck, MSM5205_S48_4B, 100, 1); diff --git a/src/burn/drv/taito/d_taitomisc.cpp b/src/burn/drv/taito/d_taitomisc.cpp index 6fca7d217..cf54a15d1 100644 --- a/src/burn/drv/taito/d_taitomisc.cpp +++ b/src/burn/drv/taito/d_taitomisc.cpp @@ -4246,9 +4246,11 @@ static INT32 OpwolfInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(4000000, 50.0); + BurnYM2151Init(4000000); BurnYM2151SetIrqHandler(&TaitoYM2151IRQHandler); BurnYM2151SetPortHandler(&RbislandBankSwitch); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.75, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.75, BURN_SND_ROUTE_RIGHT); MSM5205Init(0, TaitoSynchroniseStream, 384000, OpwolfMSM5205Vck0, MSM5205_S48_4B, 60, 1); MSM5205Init(1, TaitoSynchroniseStream, 384000, OpwolfMSM5205Vck1, MSM5205_S48_4B, 60, 1); @@ -4362,9 +4364,11 @@ static INT32 OpwolfbInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(4000000, 50.0); + BurnYM2151Init(4000000); BurnYM2151SetIrqHandler(&TaitoYM2151IRQHandler); BurnYM2151SetPortHandler(&RbislandBankSwitch); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.75, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.75, BURN_SND_ROUTE_RIGHT); MSM5205Init(0, TaitoSynchroniseStream, 384000, OpwolfMSM5205Vck0, MSM5205_S48_4B, 60, 1); MSM5205Init(1, TaitoSynchroniseStream, 384000, OpwolfMSM5205Vck1, MSM5205_S48_4B, 60, 1); @@ -4463,9 +4467,10 @@ static INT32 RbislandInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(16000000 / 4, 50.0); + BurnYM2151Init(16000000 / 4); BurnYM2151SetIrqHandler(&TaitoYM2151IRQHandler); BurnYM2151SetPortHandler(&RbislandBankSwitch); + BurnYM2151SetAllRoutes(0.50, BURN_SND_ROUTE_BOTH); GenericTilesInit(); @@ -4652,9 +4657,10 @@ static INT32 RastanInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(16000000 / 4, 50.0); + BurnYM2151Init(16000000 / 4); BurnYM2151SetIrqHandler(&TaitoYM2151IRQHandler); BurnYM2151SetPortHandler(&RastanBankSwitch); + BurnYM2151SetAllRoutes(0.50, BURN_SND_ROUTE_BOTH); MSM5205Init(0, TaitoSynchroniseStream, 384000, RastanMSM5205Vck, MSM5205_S48_4B, 60, 1); @@ -4759,9 +4765,10 @@ static INT32 TopspeedInit() ZetMemEnd(); ZetClose(); - BurnYM2151Init(16000000 / 4, 50.0); + BurnYM2151Init(16000000 / 4); BurnYM2151SetIrqHandler(&TaitoYM2151IRQHandler); BurnYM2151SetPortHandler(&TopspeedBankSwitch); + BurnYM2151SetAllRoutes(0.30, BURN_SND_ROUTE_BOTH); MSM5205Init(0, TaitoSynchroniseStream, 384000, TopspeedMSM5205Vck, MSM5205_S48_4B, 60, 1); diff --git a/src/burn/drv/taito/d_taitox.cpp b/src/burn/drv/taito/d_taitox.cpp index 20d275ff6..85ef76c63 100644 --- a/src/burn/drv/taito/d_taitox.cpp +++ b/src/burn/drv/taito/d_taitox.cpp @@ -1117,8 +1117,10 @@ static INT32 TaitoXInit(INT32 nSoundType) ZetClose(); if (nSoundType == 1) { - BurnYM2151Init(4000000, 50.0); + BurnYM2151Init(4000000); BurnYM2151SetIrqHandler(&TaitoXYM2151IRQHandler); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.45, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.45, BURN_SND_ROUTE_RIGHT); } else { if (nSoundType == 2) { BurnYM2610Init(8000000, TaitoYM2610BRom, (INT32*)&TaitoYM2610BRomSize, TaitoYM2610ARom, (INT32*)&TaitoYM2610ARomSize, NULL, TaitoXSynchroniseStream, TaitoXGetTime, 0); diff --git a/src/burn/drv/taito/d_tnzs.cpp b/src/burn/drv/taito/d_tnzs.cpp index 5e0c018af..1267367f7 100644 --- a/src/burn/drv/taito/d_tnzs.cpp +++ b/src/burn/drv/taito/d_tnzs.cpp @@ -1312,7 +1312,8 @@ static INT32 Type1Init(INT32 mcutype) tnzs_mcu_init(mcutype); if (mcutype == MCU_NONE_JPOPNICS) { - BurnYM2151Init(3000000, 30.0); // jpopnics + BurnYM2151Init(3000000); // jpopnics + BurnYM2151SetAllRoutes(0.30, BURN_SND_ROUTE_BOTH); } else { BurnYM2203Init(1, 3000000, NULL, DrvSynchroniseStream, DrvGetTime, 0); BurnYM2203SetAllRoutes(0, 0.30, BURN_SND_ROUTE_BOTH); diff --git a/src/burn/drv/toaplan/d_batrider.cpp b/src/burn/drv/toaplan/d_batrider.cpp index 438accc8f..8ccf39f6a 100644 --- a/src/burn/drv/toaplan/d_batrider.cpp +++ b/src/burn/drv/toaplan/d_batrider.cpp @@ -769,7 +769,8 @@ static INT32 drvInit() drvZInit(); // Initialize Z80 - BurnYM2151Init(32000000 / 8, 50.0); + BurnYM2151Init(32000000 / 8); + BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); MSM6295Init(0, 32000000 / 10 / 132, 50.0, 1); MSM6295Init(1, 32000000 / 10 / 165, 50.0, 1); diff --git a/src/burn/drv/toaplan/d_batsugun.cpp b/src/burn/drv/toaplan/d_batsugun.cpp index d5c101557..18571e5e4 100644 --- a/src/burn/drv/toaplan/d_batsugun.cpp +++ b/src/burn/drv/toaplan/d_batsugun.cpp @@ -519,7 +519,8 @@ static INT32 DrvInit() VezClose(); } - BurnYM2151Init(3375000, 50.0); + BurnYM2151Init(3375000); + BurnYM2151SetAllRoutes(0.50, BURN_SND_ROUTE_BOTH); MSM6295Init(0, 4000000 / 132, 50.0, 1); nSpriteYOffset = 0x0001; diff --git a/src/burn/drv/toaplan/d_battleg.cpp b/src/burn/drv/toaplan/d_battleg.cpp index 43d534e7c..e2b8d4012 100644 --- a/src/burn/drv/toaplan/d_battleg.cpp +++ b/src/burn/drv/toaplan/d_battleg.cpp @@ -770,7 +770,8 @@ static INT32 battlegInit() DrvZ80Init(); // Initialize Z80 - BurnYM2151Init(32000000 / 8, 50.0); + BurnYM2151Init(32000000 / 8); + BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); MSM6295Init(0, 32000000 / 16 / 132, 50.0, 1); nToaPalLen = nColCount; diff --git a/src/burn/drv/toaplan/d_dogyuun.cpp b/src/burn/drv/toaplan/d_dogyuun.cpp index a401064ae..de15bf3e3 100644 --- a/src/burn/drv/toaplan/d_dogyuun.cpp +++ b/src/burn/drv/toaplan/d_dogyuun.cpp @@ -598,7 +598,8 @@ static INT32 DrvInit() VezClose(); } - BurnYM2151Init(3375000, 50.0); + BurnYM2151Init(3375000); + BurnYM2151SetAllRoutes(0.50, BURN_SND_ROUTE_BOTH); MSM6295Init(0, 1041667 / 132, 50.0, 1); nSpriteXOffset = 0x0024; diff --git a/src/burn/drv/toaplan/d_fixeight.cpp b/src/burn/drv/toaplan/d_fixeight.cpp index e1be2ceb4..8f3d8c678 100644 --- a/src/burn/drv/toaplan/d_fixeight.cpp +++ b/src/burn/drv/toaplan/d_fixeight.cpp @@ -603,7 +603,8 @@ static INT32 DrvInit(INT32 region) ToaPalSrc = RamPal; ToaPalInit(); - BurnYM2151Init(27000000 / 8, 50.0); + BurnYM2151Init(27000000 / 8); + BurnYM2151SetAllRoutes(0.50, BURN_SND_ROUTE_BOTH); MSM6295Init(0, 1000000 / 132, 50.0, 1); bDrawScreen = true; diff --git a/src/burn/drv/toaplan/d_kbash.cpp b/src/burn/drv/toaplan/d_kbash.cpp index c85dc016a..e561e16f1 100644 --- a/src/burn/drv/toaplan/d_kbash.cpp +++ b/src/burn/drv/toaplan/d_kbash.cpp @@ -451,7 +451,8 @@ static INT32 DrvInit() VezClose(); } - BurnYM2151Init(3375000, 50.0); + BurnYM2151Init(3375000); + BurnYM2151SetAllRoutes(0.50, BURN_SND_ROUTE_BOTH); MSM6295Init(0, 1000000 / 132, 50.0, 1); nSpriteYOffset = 0x0011; diff --git a/src/burn/drv/toaplan/d_mahoudai.cpp b/src/burn/drv/toaplan/d_mahoudai.cpp index 45fc15cf8..80c07432d 100644 --- a/src/burn/drv/toaplan/d_mahoudai.cpp +++ b/src/burn/drv/toaplan/d_mahoudai.cpp @@ -510,7 +510,8 @@ static INT32 DrvInit() ToaPalSrc = RamPal; ToaPalInit(); - BurnYM2151Init(27000000 / 8, 50.0); + BurnYM2151Init(27000000 / 8); + BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); MSM6295Init(0, 32000000 / 32 / 132, 50.0, 1); bDrawScreen = true; diff --git a/src/burn/drv/toaplan/d_shippumd.cpp b/src/burn/drv/toaplan/d_shippumd.cpp index 9a129ed00..8a9fb5430 100644 --- a/src/burn/drv/toaplan/d_shippumd.cpp +++ b/src/burn/drv/toaplan/d_shippumd.cpp @@ -529,7 +529,8 @@ static INT32 DrvInit() ToaPalSrc = RamPal; ToaPalInit(); - BurnYM2151Init(27000000 / 8, 50.0); + BurnYM2151Init(27000000 / 8); + BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); MSM6295Init(0, 32000000 / 32 / 132, 50.0, 1); bDrawScreen = true; diff --git a/src/burn/drv/toaplan/d_snowbro2.cpp b/src/burn/drv/toaplan/d_snowbro2.cpp index b0d64eeea..a714f361a 100644 --- a/src/burn/drv/toaplan/d_snowbro2.cpp +++ b/src/burn/drv/toaplan/d_snowbro2.cpp @@ -581,7 +581,8 @@ static INT32 DrvInit() ToaPalSrc = RamPal; ToaPalInit(); - BurnYM2151Init(27000000 / 8, 50.0); + BurnYM2151Init(27000000 / 8); + BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); MSM6295Init(0, 27000000 / 10 / 132, 50.0, 1); bDrawScreen = true; diff --git a/src/burn/drv/toaplan/d_truxton2.cpp b/src/burn/drv/toaplan/d_truxton2.cpp index 39bea61f7..a5d24d7c9 100644 --- a/src/burn/drv/toaplan/d_truxton2.cpp +++ b/src/burn/drv/toaplan/d_truxton2.cpp @@ -574,7 +574,9 @@ static INT32 DrvInit() ToaPalSrc = RamPal; ToaPalInit(); - BurnYM2151Init(27000000 / 8, 50.0); + BurnYM2151Init(27000000 / 8); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT); + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT); MSM6295Init(0, 27000000 / 10 / 132, 50.0, 1); bDrawScreen = true; diff --git a/src/burn/drv/toaplan/d_vfive.cpp b/src/burn/drv/toaplan/d_vfive.cpp index 6ecfe4441..d7a9113eb 100644 --- a/src/burn/drv/toaplan/d_vfive.cpp +++ b/src/burn/drv/toaplan/d_vfive.cpp @@ -496,7 +496,8 @@ static INT32 DrvInit() VezClose(); } - BurnYM2151Init(3375000, 100.0); + BurnYM2151Init(3375000); + BurnYM2151SetAllRoutes(1.00, BURN_SND_ROUTE_BOTH); nSpriteYOffset = 0x0001; diff --git a/src/burn/snd/burn_ym2151.cpp b/src/burn/snd/burn_ym2151.cpp index 45622a420..4b8b1281a 100644 --- a/src/burn/snd/burn_ym2151.cpp +++ b/src/burn/snd/burn_ym2151.cpp @@ -17,7 +17,8 @@ static UINT32 nSampleSize; static UINT32 nFractionalPosition; static UINT32 nSamplesRendered; -static INT32 nYM2151Volume; +static double YM2151Volumes[2]; +static INT32 YM2151RouteDirs[2]; static void YM2151RenderResample(INT16* pSoundBuf, INT32 nSegmentLength) { @@ -25,7 +26,7 @@ static void YM2151RenderResample(INT16* pSoundBuf, INT32 nSegmentLength) if (!DebugSnd_YM2151Initted) bprintf(PRINT_ERROR, _T("YM2151RenderResample called without init\n")); #endif - nBurnPosition += nSegmentLength; +/* nBurnPosition += nSegmentLength; if (nBurnPosition >= nBurnSoundRate) { nBurnPosition = nSegmentLength; @@ -77,6 +78,82 @@ static void YM2151RenderResample(INT16* pSoundBuf, INT32 nSegmentLength) pYM2151Buffer[1][(nFractionalPosition >> 16) - 1], pYM2151Buffer[1][(nFractionalPosition >> 16) - 0], nYM2151Volume); + }*/ + + nBurnPosition += nSegmentLength; + + if (nBurnPosition >= nBurnSoundRate) { + nBurnPosition = nSegmentLength; + + pYM2151Buffer[0][1] = pYM2151Buffer[0][(nFractionalPosition >> 16) - 3]; + pYM2151Buffer[0][2] = pYM2151Buffer[0][(nFractionalPosition >> 16) - 2]; + pYM2151Buffer[0][3] = pYM2151Buffer[0][(nFractionalPosition >> 16) - 1]; + + pYM2151Buffer[1][1] = pYM2151Buffer[1][(nFractionalPosition >> 16) - 3]; + pYM2151Buffer[1][2] = pYM2151Buffer[1][(nFractionalPosition >> 16) - 2]; + pYM2151Buffer[1][3] = pYM2151Buffer[1][(nFractionalPosition >> 16) - 1]; + + nSamplesRendered -= (nFractionalPosition >> 16) - 4; + + for (UINT32 i = 0; i <= nSamplesRendered; i++) { + pYM2151Buffer[0][4 + i] = pYM2151Buffer[0][(nFractionalPosition >> 16) + i]; + pYM2151Buffer[1][4 + i] = pYM2151Buffer[1][(nFractionalPosition >> 16) + i]; + } + + nFractionalPosition &= 0x0000FFFF; + nFractionalPosition |= 4 << 16; + } + + pYM2151Buffer[0] = pBuffer + 4 + nSamplesRendered; + pYM2151Buffer[1] = pBuffer + 4 + nSamplesRendered + 65536; + + YM2151UpdateOne(0, pYM2151Buffer, (UINT32)(nBurnPosition + 1) * nBurnYM2151SoundRate / nBurnSoundRate - nSamplesRendered); + nSamplesRendered += (UINT32)(nBurnPosition + 1) * nBurnYM2151SoundRate / nBurnSoundRate - nSamplesRendered; + + pYM2151Buffer[0] = pBuffer; + pYM2151Buffer[1] = pBuffer + 65536; + + nSegmentLength <<= 1; + + for (INT32 i = 0; i < nSegmentLength; i += 2, nFractionalPosition += nSampleSize) { + INT32 nLeftSample[4] = {0, 0, 0, 0}; + INT32 nRightSample[4] = {0, 0, 0, 0}; + INT32 nTotalLeftSample, nTotalRightSample; + + if ((YM2151RouteDirs[BURN_SND_YM2151_YM2151_ROUTE_1] & BURN_SND_ROUTE_LEFT) == BURN_SND_ROUTE_LEFT) { + nLeftSample[0] += (INT32)(pYM2151Buffer[0][(nFractionalPosition >> 16) - 3] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_1]); + nLeftSample[1] += (INT32)(pYM2151Buffer[0][(nFractionalPosition >> 16) - 2] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_1]); + nLeftSample[2] += (INT32)(pYM2151Buffer[0][(nFractionalPosition >> 16) - 1] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_1]); + nLeftSample[3] += (INT32)(pYM2151Buffer[0][(nFractionalPosition >> 16) - 0] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_1]); + } + if ((YM2151RouteDirs[BURN_SND_YM2151_YM2151_ROUTE_1] & BURN_SND_ROUTE_RIGHT) == BURN_SND_ROUTE_RIGHT) { + nRightSample[0] += (INT32)(pYM2151Buffer[0][(nFractionalPosition >> 16) - 3] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_1]); + nRightSample[1] += (INT32)(pYM2151Buffer[0][(nFractionalPosition >> 16) - 2] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_1]); + nRightSample[2] += (INT32)(pYM2151Buffer[0][(nFractionalPosition >> 16) - 1] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_1]); + nRightSample[3] += (INT32)(pYM2151Buffer[0][(nFractionalPosition >> 16) - 0] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_1]); + } + + if ((YM2151RouteDirs[BURN_SND_YM2151_YM2151_ROUTE_2] & BURN_SND_ROUTE_LEFT) == BURN_SND_ROUTE_LEFT) { + nLeftSample[0] += (INT32)(pYM2151Buffer[1][(nFractionalPosition >> 16) - 3] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_2]); + nLeftSample[1] += (INT32)(pYM2151Buffer[1][(nFractionalPosition >> 16) - 2] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_2]); + nLeftSample[2] += (INT32)(pYM2151Buffer[1][(nFractionalPosition >> 16) - 1] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_2]); + nLeftSample[3] += (INT32)(pYM2151Buffer[1][(nFractionalPosition >> 16) - 0] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_2]); + } + if ((YM2151RouteDirs[BURN_SND_YM2151_YM2151_ROUTE_2] & BURN_SND_ROUTE_RIGHT) == BURN_SND_ROUTE_RIGHT) { + nRightSample[0] += (INT32)(pYM2151Buffer[1][(nFractionalPosition >> 16) - 3] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_2]); + nRightSample[1] += (INT32)(pYM2151Buffer[1][(nFractionalPosition >> 16) - 2] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_2]); + nRightSample[2] += (INT32)(pYM2151Buffer[1][(nFractionalPosition >> 16) - 1] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_2]); + nRightSample[3] += (INT32)(pYM2151Buffer[1][(nFractionalPosition >> 16) - 0] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_2]); + } + + nTotalLeftSample = INTERPOLATE4PS_CUSTOM((nFractionalPosition >> 4) & 0x0fff, nLeftSample[0], nLeftSample[1], nLeftSample[2], nLeftSample[3], 16384.0); + nTotalRightSample = INTERPOLATE4PS_CUSTOM((nFractionalPosition >> 4) & 0x0fff, nRightSample[0], nRightSample[1], nRightSample[2], nRightSample[3], 16384.0); + + nTotalLeftSample = BURN_SND_CLIP(nTotalLeftSample); + nTotalRightSample = BURN_SND_CLIP(nTotalRightSample); + + pSoundBuf[i + 0] = nTotalLeftSample; + pSoundBuf[i + 1] = nTotalRightSample; } } @@ -92,23 +169,29 @@ static void YM2151RenderNormal(INT16* pSoundBuf, INT32 nSegmentLength) pYM2151Buffer[1] = pBuffer + nSegmentLength; YM2151UpdateOne(0, pYM2151Buffer, nSegmentLength); - - if (bBurnUseMMX) { -#if defined BUILD_X86_ASM - BurnSoundCopy_FM_A(pYM2151Buffer[0], pYM2151Buffer[1], pSoundBuf, nSegmentLength, nYM2151Volume, nYM2151Volume); -#endif - } else { - for (INT32 n = 0; n < nSegmentLength; n++) { - for (INT32 i = 0; i < 2; i++) { - INT32 nSample = pYM2151Buffer[i][n] * (nYM2151Volume >> 10); - nSample >>= 8; - - if (nSample < -32768) nSample = -32768; - if (nSample > 32767) nSample = 32767; - - pSoundBuf[(n << 1) + i] = nSample; - } + + for (INT32 n = 0; n < nSegmentLength; n++) { + INT32 nLeftSample = 0, nRightSample = 0; + + if ((YM2151RouteDirs[BURN_SND_YM2151_YM2151_ROUTE_1] & BURN_SND_ROUTE_LEFT) == BURN_SND_ROUTE_LEFT) { + nLeftSample += (INT32)(pYM2151Buffer[0][n] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_1]); } + if ((YM2151RouteDirs[BURN_SND_YM2151_YM2151_ROUTE_1] & BURN_SND_ROUTE_RIGHT) == BURN_SND_ROUTE_RIGHT) { + nRightSample += (INT32)(pYM2151Buffer[0][n] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_1]); + } + + if ((YM2151RouteDirs[BURN_SND_YM2151_YM2151_ROUTE_2] & BURN_SND_ROUTE_LEFT) == BURN_SND_ROUTE_LEFT) { + nLeftSample += (INT32)(pYM2151Buffer[1][n] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_2]); + } + if ((YM2151RouteDirs[BURN_SND_YM2151_YM2151_ROUTE_2] & BURN_SND_ROUTE_RIGHT) == BURN_SND_ROUTE_RIGHT) { + nRightSample += (INT32)(pYM2151Buffer[1][n] * YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_2]); + } + + nLeftSample = BURN_SND_CLIP(nLeftSample); + nRightSample = BURN_SND_CLIP(nRightSample); + + pSoundBuf[(n << 1) + 0] = nLeftSample; + pSoundBuf[(n << 1) + 1] = nRightSample; } } @@ -141,6 +224,13 @@ void BurnYM2151Exit() } INT32 BurnYM2151Init(INT32 nClockFrequency, float nVolume) +{ + // deprecated + + return BurnYM2151Init(nClockFrequency); +} + +INT32 BurnYM2151Init(INT32 nClockFrequency) { DebugSnd_YM2151Initted = 1; @@ -158,13 +248,9 @@ INT32 BurnYM2151Init(INT32 nClockFrequency, float nVolume) } BurnYM2151Render = YM2151RenderResample; - - nYM2151Volume = (INT32)((double)16384.0 * 100.0 / nVolume); } else { nBurnYM2151SoundRate = nBurnSoundRate; BurnYM2151Render = YM2151RenderNormal; - - nYM2151Volume = (INT32)((double)65536.0 * 100.0 / nVolume); } YM2151Init(1, nClockFrequency, nBurnYM2151SoundRate); @@ -176,10 +262,27 @@ INT32 BurnYM2151Init(INT32 nClockFrequency, float nVolume) nFractionalPosition = 4 << 16; nSamplesRendered = 0; nBurnPosition = 0; + + // default routes + YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_1] = 1.00; + YM2151Volumes[BURN_SND_YM2151_YM2151_ROUTE_2] = 1.00; + YM2151RouteDirs[BURN_SND_YM2151_YM2151_ROUTE_1] = BURN_SND_ROUTE_BOTH; + YM2151RouteDirs[BURN_SND_YM2151_YM2151_ROUTE_2] = BURN_SND_ROUTE_BOTH; return 0; } +void BurnYM2151SetRoute(INT32 nIndex, double nVolume, INT32 nRouteDir) +{ +#if defined FBA_DEBUG + if (!DebugSnd_YM2151Initted) bprintf(PRINT_ERROR, _T("BurnYM2151SetRoute called without init\n")); + if (nIndex < 0 || nIndex > 1) bprintf(PRINT_ERROR, _T("BurnYM2151SetRoute called with invalid index %i\n"), nIndex); +#endif + + YM2151Volumes[nIndex] = nVolume; + YM2151RouteDirs[nIndex] = nRouteDir; +} + void BurnYM2151Scan(INT32 nAction) { #if defined FBA_DEBUG diff --git a/src/burn/snd/burn_ym2151.h b/src/burn/snd/burn_ym2151.h index 388e1bb6e..f639d0408 100644 --- a/src/burn/snd/burn_ym2151.h +++ b/src/burn/snd/burn_ym2151.h @@ -5,6 +5,8 @@ extern "C" { } INT32 BurnYM2151Init(INT32 nClockFrequency, float nVolume); +INT32 BurnYM2151Init(INT32 nClockFrequency); +void BurnYM2151SetRoute(INT32 nIndex, double nVolume, INT32 nRouteDir); void BurnYM2151Reset(); void BurnYM2151Exit(); extern void (*BurnYM2151Render)(INT16* pSoundBuf, INT32 nSegmentLength); @@ -43,3 +45,10 @@ static inline void BurnYM2151WriteRegister(const UINT8 nValue) #define BurnYM2151SetIrqHandler(h) YM2151SetIrqHandler(0, h) #define BurnYM2151SetPortHandler(h) YM2151SetPortWriteHandler(0, h) #endif + +#define BURN_SND_YM2151_YM2151_ROUTE_1 0 +#define BURN_SND_YM2151_YM2151_ROUTE_2 1 + +#define BurnYM2151SetAllRoutes(v, d) \ + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, v, d); \ + BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, v, d);