Merge pull request #107 from Tatsuya79/master

Change cycles hack. Add sprite limit tweak.
This commit is contained in:
Twinaphex 2018-02-10 08:33:30 +01:00 committed by GitHub
commit fc6e980615
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 9 deletions

View File

@ -224,7 +224,8 @@ static retro_audio_sample_batch_t audio_batch_cb = NULL;
static retro_environment_t environ_cb = NULL;
extern s9xcommand_t keymap[1024];
bool overclock_cycles = false;
bool reduce_sprite_flicker = false;
static void check_variables(void)
{
@ -283,6 +284,17 @@ static void check_variables(void)
overclock_cycles = false;
}
var.key = "snes9x_next_reduce_sprite_flicker";
var.value = NULL;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
{
if (strcmp(var.value, "enabled") == 0)
reduce_sprite_flicker = true;
else
reduce_sprite_flicker = false;
}
if (reset_sfx)
S9xResetSuperFX();
}
@ -376,13 +388,13 @@ void retro_set_input_state(retro_input_state_t cb)
}
static bool use_overscan;
bool overclock_cycles = false;
void retro_set_environment(retro_environment_t cb)
{
static const struct retro_variable vars[] = {
{ "snes9x_next_overclock", "SuperFX Overclock; Disabled(10MHz)|40MHz|60MHz|80MHz|100MHz|Underclock(5MHz)|Underclock(8MHz)" },
{ "snes9x_next_overclock_cycles", "CPU Overclock (Hack, Unsafe); disabled|enabled" },
{ "snes9x_next_overclock_cycles", "Reduce Slowdown (Hack, Unsafe); disabled|enabled" },
{ "snes9x_next_reduce_sprite_flicker", "Reduce Flickering (Hack, Unsafe); disabled|enabled" },
{ NULL, NULL },
};

View File

@ -188,6 +188,7 @@
#include "bsx.h"
extern uint8 OpenBus;
extern bool overclock_cycles;
int32 memory_speed (uint32 address)
{
@ -196,7 +197,7 @@ int32 memory_speed (uint32 address)
if (address & 0x800000)
return (CPU.FastROMSpeed);
return (SLOW_ONE_CYCLE);
return (overclock_cycles ? 6 : SLOW_ONE_CYCLE);
}
if ((address + 0x6000) & 0x4000)

View File

@ -200,6 +200,8 @@ extern uint8 *HDMAMemPointers[8];
extern struct SLineData LineData[240];
static uint8 dma_sa1_channels_chars[9][8];
extern bool reduce_sprite_flicker;
#define TILE_PLUS(t, x) (((t) & 0xfc00) | ((t + x) & 0x3ff))
bool8 S9xGraphicsInit (void)
@ -391,7 +393,7 @@ static void SetupOBJ (void)
for ( i = 0; i < SNES_HEIGHT_EXTENDED; i++)
{
GFX.OBJLines[i].RTOFlags = 0;
GFX.OBJLines[i].Tiles = 34;
GFX.OBJLines[i].Tiles = (reduce_sprite_flicker ? 60 : 34);
for ( j = 0; j < 32; j++)
GFX.OBJLines[i].OBJ[j].Sprite = -1;
}
@ -522,7 +524,7 @@ static void SetupOBJ (void)
int j;
GFX.OBJLines[Y_two].RTOFlags = Y_two ? GFX.OBJLines[Y_two - 1].RTOFlags : 0;
GFX.OBJLines[Y_two].Tiles = 34;
GFX.OBJLines[Y_two].Tiles = (reduce_sprite_flicker ? 60 : 34);
FirstSprite = (PPU.FirstSprite + Y_two) & 0x7f;
S = FirstSprite;

View File

@ -233,9 +233,9 @@ extern "C" {
#define SNES_MAX_PAL_VCOUNTER 312
#define SNES_HCOUNTER_MAX 341
#define ONE_CYCLE (overclock_cycles ? 4 : 6)
#define SLOW_ONE_CYCLE (overclock_cycles ? 4 : 8)
#define TWO_CYCLES (overclock_cycles ? 6 : 12)
#define ONE_CYCLE (overclock_cycles ? 3 : 6)
#define SLOW_ONE_CYCLE (overclock_cycles ? 1 : 8)
#define TWO_CYCLES (overclock_cycles ? 1 : 12)
#define ONE_DOT_CYCLE 4
#define ONE_DOT_CYCLE_DIV_2 2