Libretro: Add core option to mute sound channels
This commit is contained in:
parent
5a4c788dad
commit
94f1102395
|
@ -29,6 +29,9 @@
|
||||||
#define RETRO_DEVICE_GBA_ALT1 RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 1)
|
#define RETRO_DEVICE_GBA_ALT1 RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 1)
|
||||||
#define RETRO_DEVICE_GBA_ALT2 RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 2)
|
#define RETRO_DEVICE_GBA_ALT2 RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 2)
|
||||||
|
|
||||||
|
#define SAMPLERATE 32768
|
||||||
|
#define FRAMERATE (16777216.0 / 280896.0)
|
||||||
|
|
||||||
#define ISHEXDEC ((codeLine[cursor]>='0') && (codeLine[cursor]<='9')) || ((codeLine[cursor]>='a') && (codeLine[cursor]<='f')) || ((codeLine[cursor]>='A') && (codeLine[cursor]<='F'))
|
#define ISHEXDEC ((codeLine[cursor]>='0') && (codeLine[cursor]<='9')) || ((codeLine[cursor]>='a') && (codeLine[cursor]<='f')) || ((codeLine[cursor]>='A') && (codeLine[cursor]<='F'))
|
||||||
|
|
||||||
static retro_log_printf_t log_cb;
|
static retro_log_printf_t log_cb;
|
||||||
|
@ -197,6 +200,12 @@ void retro_set_environment(retro_environment_t cb)
|
||||||
{ "vbam_layer_6", "Show window layer 1; enabled|disabled" },
|
{ "vbam_layer_6", "Show window layer 1; enabled|disabled" },
|
||||||
{ "vbam_layer_7", "Show window layer 2; enabled|disabled" },
|
{ "vbam_layer_7", "Show window layer 2; enabled|disabled" },
|
||||||
{ "vbam_layer_8", "Show sprite window layer; enabled|disabled" },
|
{ "vbam_layer_8", "Show sprite window layer; enabled|disabled" },
|
||||||
|
{ "vbam_sound_1", "Sound channel 1; enabled|disabled" },
|
||||||
|
{ "vbam_sound_2", "Sound channel 2; enabled|disabled" },
|
||||||
|
{ "vbam_sound_3", "Sound channel 3; enabled|disabled" },
|
||||||
|
{ "vbam_sound_4", "Sound channel 4; enabled|disabled" },
|
||||||
|
{ "vbam_sound_5", "Direct Sound A; enabled|disabled" },
|
||||||
|
{ "vbam_sound_6", "Direct Sound B; enabled|disabled" },
|
||||||
{ NULL, NULL },
|
{ NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -228,13 +237,13 @@ void retro_get_system_info(struct retro_system_info *info)
|
||||||
|
|
||||||
void retro_get_system_av_info(struct retro_system_av_info *info)
|
void retro_get_system_av_info(struct retro_system_av_info *info)
|
||||||
{
|
{
|
||||||
info->geometry.base_width = 240;
|
info->geometry.base_width = 240;
|
||||||
info->geometry.base_height = 160;
|
info->geometry.base_height = 160;
|
||||||
info->geometry.max_width = 240;
|
info->geometry.max_width = 240;
|
||||||
info->geometry.max_height = 160;
|
info->geometry.max_height = 160;
|
||||||
info->geometry.aspect_ratio = 3.0 / 2.0;
|
info->geometry.aspect_ratio = 3.0 / 2.0;
|
||||||
info->timing.fps = 16777216.0 / 280896.0;
|
info->timing.fps = (double)FRAMERATE;
|
||||||
info->timing.sample_rate = 32000.0;
|
info->timing.sample_rate = (double)SAMPLERATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void retro_init(void)
|
void retro_init(void)
|
||||||
|
@ -548,43 +557,58 @@ static uint8_t sensorDarknessLevel = 0; // so we can adjust sensor from gamepad
|
||||||
|
|
||||||
static void update_variables(void)
|
static void update_variables(void)
|
||||||
{
|
{
|
||||||
char key[256];
|
char key[256];
|
||||||
struct retro_variable var;
|
struct retro_variable var;
|
||||||
var.key=key;
|
var.key = key;
|
||||||
|
|
||||||
int disabled_layers=0;
|
int disabled_layers=0;
|
||||||
|
|
||||||
strcpy(key, "vbam_layer_x");
|
strcpy(key, "vbam_layer_x");
|
||||||
for (int i=0;i<8;i++)
|
for (int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
key[strlen("vbam_layer_")]='1'+i;
|
key[strlen("vbam_layer_")] = '1' + i;
|
||||||
var.value=NULL;
|
var.value = NULL;
|
||||||
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && var.value[0]=='d')
|
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && var.value[0] == 'd')
|
||||||
{
|
disabled_layers |= 0x100 << i;
|
||||||
disabled_layers|=0x100<<i;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
layerSettings = 0xFF00 ^ disabled_layers;
|
|
||||||
layerEnable = DISPCNT & layerSettings;
|
|
||||||
CPUUpdateRenderBuffers(false);
|
|
||||||
|
|
||||||
var.key = "vbam_usebios";
|
layerSettings = 0xFF00 ^ disabled_layers;
|
||||||
var.value = NULL;
|
layerEnable = DISPCNT & layerSettings;
|
||||||
|
CPUUpdateRenderBuffers(false);
|
||||||
|
|
||||||
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
|
unsigned sound_enabled = 0x30F;
|
||||||
{
|
strcpy(key, "vbam_sound_x");
|
||||||
bool newval = (strcmp(var.value, "enabled") == 0);
|
for (unsigned i = 0; i < 6; i++)
|
||||||
usebios = newval;
|
{
|
||||||
}
|
key[strlen("vbam_sound_")] = '1' + i;
|
||||||
|
var.value = NULL;
|
||||||
|
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && var.value[0] == 'd')
|
||||||
|
{
|
||||||
|
unsigned which = (i < 4) ? (1 << i) : (0x100 << (i - 4));
|
||||||
|
sound_enabled &= ~(which);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var.key = "vbam_solarsensor";
|
if (soundGetEnable() != sound_enabled)
|
||||||
var.value = NULL;
|
soundSetEnable(sound_enabled & 0x30F);
|
||||||
|
|
||||||
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
|
var.key = "vbam_usebios";
|
||||||
{
|
var.value = NULL;
|
||||||
|
|
||||||
|
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
|
||||||
|
{
|
||||||
|
bool newval = (strcmp(var.value, "enabled") == 0);
|
||||||
|
usebios = newval;
|
||||||
|
}
|
||||||
|
|
||||||
|
var.key = "vbam_solarsensor";
|
||||||
|
var.value = NULL;
|
||||||
|
|
||||||
|
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
|
||||||
|
{
|
||||||
sensorDarknessLevel = atoi(var.value);
|
sensorDarknessLevel = atoi(var.value);
|
||||||
systemUpdateSolarSensor(sensorDarknessLevel);
|
systemUpdateSolarSensor(sensorDarknessLevel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FINAL_VERSION
|
#ifdef FINAL_VERSION
|
||||||
|
|
Loading…
Reference in New Issue