From 7c377fc88a3fbb7f69b91a15dc414c8965624a89 Mon Sep 17 00:00:00 2001 From: Nuke.YKT Date: Fri, 29 May 2015 02:00:45 +0900 Subject: Added OPL3 mode support. --- opl/opl_sdl.c | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) (limited to 'opl/opl_sdl.c') diff --git a/opl/opl_sdl.c b/opl/opl_sdl.c index 8834ee07..0621995f 100644 --- a/opl/opl_sdl.c +++ b/opl/opl_sdl.c @@ -71,6 +71,7 @@ static uint64_t pause_offset; // OPL software emulator structure. static Chip opl_chip; +static int opl_new; // Temporary mixing buffer used by the mixing callback. @@ -164,15 +165,30 @@ static void FillBuffer(int16_t *buffer, unsigned int nsamples) assert(nsamples < mixing_freq); - Chip__GenerateBlock2(&opl_chip, nsamples, mix_buffer); + if (opl_new) + { + Chip__GenerateBlock3(&opl_chip, nsamples, mix_buffer); - // Mix into the destination buffer, doubling up into stereo. + // Mix into the destination buffer, doubling up into stereo. - for (i=0; i timer1.expire_time) { result |= 0x80; // Either have expired @@ -439,6 +461,9 @@ static void WriteRegister(unsigned int reg_num, unsigned int value) break; + case OPL_REG_NEW: + opl_new = value & 0x01; + default: Chip__WriteReg(&opl_chip, reg_num, value); break; @@ -451,6 +476,10 @@ static void OPL_SDL_PortWrite(opl_port_t port, unsigned int value) { register_num = value; } + else if (port == OPL_REGISTER_PORT_OPL3) + { + register_num = value | 0x100; + } else if (port == OPL_DATA_PORT) { WriteRegister(register_num, value); -- cgit v1.2.3 From 1e516e34911d3a95479c303fe26b59f20e618252 Mon Sep 17 00:00:00 2001 From: Nuke.YKT Date: Fri, 29 May 2015 17:30:12 +0900 Subject: Text formatting. --- opl/opl_sdl.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'opl/opl_sdl.c') diff --git a/opl/opl_sdl.c b/opl/opl_sdl.c index 0621995f..1334ac07 100644 --- a/opl/opl_sdl.c +++ b/opl/opl_sdl.c @@ -71,7 +71,7 @@ static uint64_t pause_offset; // OPL software emulator structure. static Chip opl_chip; -static int opl_new; +static int opl_opl3mode; // Temporary mixing buffer used by the mixing callback. @@ -165,7 +165,7 @@ static void FillBuffer(int16_t *buffer, unsigned int nsamples) assert(nsamples < mixing_freq); - if (opl_new) + if (opl_opl3mode) { Chip__GenerateBlock3(&opl_chip, nsamples, mix_buffer); @@ -374,7 +374,7 @@ static int OPL_SDL_Init(unsigned int port_base) DBOPL_InitTables(); Chip__Chip(&opl_chip); Chip__Setup(&opl_chip, mixing_freq); - opl_new = 0; + opl_opl3mode = 0; callback_mutex = SDL_CreateMutex(); callback_queue_mutex = SDL_CreateMutex(); @@ -462,7 +462,7 @@ static void WriteRegister(unsigned int reg_num, unsigned int value) break; case OPL_REG_NEW: - opl_new = value & 0x01; + opl_opl3mode = value & 0x01; default: Chip__WriteReg(&opl_chip, reg_num, value); -- cgit v1.2.3