Move overclock-related variables to ppu instead

Just makes more sense since overclocking is ppu-based.
This commit is contained in:
negativeExponent
2021-06-03 10:50:22 +08:00
parent 46ca02a206
commit f6cc87a8fa
6 changed files with 52 additions and 46 deletions

View File

@@ -1223,33 +1223,33 @@ static void check_variables(bool startup)
bool do_reinit = false; bool do_reinit = false;
if (!strcmp(var.value, "disabled") if (!strcmp(var.value, "disabled")
&& FSettings.overclock_enabled != 0) && ppu.overclock_enabled != 0)
{ {
FSettings.skip_7bit_overclocking = 1; ppu.skip_7bit_overclocking = 1;
FSettings.extrascanlines = 0; ppu.extrascanlines = 0;
FSettings.vblankscanlines = 0; ppu.vblankscanlines = 0;
FSettings.overclock_enabled = 0; ppu.overclock_enabled = 0;
do_reinit = true; do_reinit = true;
} }
else if (!strcmp(var.value, "2x-Postrender")) else if (!strcmp(var.value, "2x-Postrender"))
{ {
FSettings.skip_7bit_overclocking = 1; ppu.skip_7bit_overclocking = 1;
FSettings.extrascanlines = 266; ppu.extrascanlines = 266;
FSettings.vblankscanlines = 0; ppu.vblankscanlines = 0;
FSettings.overclock_enabled = 1; ppu.overclock_enabled = 1;
do_reinit = true; do_reinit = true;
} }
else if (!strcmp(var.value, "2x-VBlank")) else if (!strcmp(var.value, "2x-VBlank"))
{ {
FSettings.skip_7bit_overclocking = 1; ppu.skip_7bit_overclocking = 1;
FSettings.extrascanlines = 0; ppu.extrascanlines = 0;
FSettings.vblankscanlines = 266; ppu.vblankscanlines = 266;
FSettings.overclock_enabled = 1; ppu.overclock_enabled = 1;
do_reinit = true; do_reinit = true;
} }
FSettings.normal_scanlines = FSettings.dendy ? SCANLINES_DENDY : SCANLINES_NORMAL; ppu.normal_scanlines = FSettings.dendy ? SCANLINES_DENDY : SCANLINES_NORMAL;
FSettings.totalscanlines = FSettings.normal_scanlines + (FSettings.overclock_enabled ? FSettings.extrascanlines : 0); ppu.totalscanlines = ppu.normal_scanlines + (ppu.overclock_enabled ? ppu.extrascanlines : 0);
if (do_reinit && startup) if (do_reinit && startup)
{ {

View File

@@ -341,14 +341,14 @@ int FCEUI_Initialize(void) {
FSettings.UsrLastSLine[0] = 231; FSettings.UsrLastSLine[0] = 231;
FSettings.UsrLastSLine[1] = 239; FSettings.UsrLastSLine[1] = 239;
FSettings.SoundVolume = 100; FSettings.SoundVolume = 100;
FSettings.overclock_enabled = 0;
FSettings.skip_7bit_overclocking = 1;
FSettings.totalscanlines = 0;
FSettings.normal_scanlines = SCANLINES_NORMAL;
FSettings.extrascanlines = 0;
FSettings.vblankscanlines = 0;
FSettings.dendy = 0; FSettings.dendy = 0;
FSettings.swapDuty = 0; FSettings.swapDuty = 0;
ppu.overclock_enabled = 0;
ppu.skip_7bit_overclocking = 1;
ppu.totalscanlines = 0;
ppu.normal_scanlines = SCANLINES_NORMAL;
ppu.extrascanlines = 0;
ppu.vblankscanlines = 0;
FCEUPPU_Init(); FCEUPPU_Init();
X6502_Init(); X6502_Init();
return 1; return 1;
@@ -482,8 +482,8 @@ void FCEU_ResetVidSys(void)
if (PAL) if (PAL)
FSettings.dendy = 0; FSettings.dendy = 0;
FSettings.normal_scanlines = FSettings.dendy ? SCANLINES_DENDY : SCANLINES_NORMAL; ppu.normal_scanlines = FSettings.dendy ? SCANLINES_DENDY : SCANLINES_NORMAL;
FSettings.totalscanlines = FSettings.normal_scanlines + (FSettings.overclock_enabled ? FSettings.extrascanlines : 0); ppu.totalscanlines = ppu.normal_scanlines + (ppu.overclock_enabled ? ppu.extrascanlines : 0);
FCEUPPU_SetVideoSystem(w || FSettings.dendy); FCEUPPU_SetVideoSystem(w || FSettings.dendy);
SetSoundVariables(); SetSoundVariables();

View File

@@ -88,14 +88,6 @@ typedef struct {
int soundq; int soundq;
int lowpass; int lowpass;
/* PPU Overclocking */
int overclock_enabled; /* 1 : enable, 0 : disable duh! */
int skip_7bit_overclocking; /* 7-bit samples have priority over overclocking */
int extrascanlines;
int vblankscanlines;
int normal_scanlines; /* 240 : normal, 290 : dendy */
int totalscanlines;
int show_crosshair; int show_crosshair;
int ramstate; int ramstate;
int dendy; int dendy;

View File

@@ -64,6 +64,8 @@ static uint32 ppulut1[256];
static uint32 ppulut2[256]; static uint32 ppulut2[256];
static uint32 ppulut3[128]; static uint32 ppulut3[128];
FCEU_PPU ppu;
static void makeppulut(void) { static void makeppulut(void) {
int x; int x;
int y; int y;
@@ -660,7 +662,7 @@ static void DoLine(void)
uint8 *target = NULL; uint8 *target = NULL;
uint8 *dtarget = NULL; uint8 *dtarget = NULL;
if (scanline >= 240 && scanline != FSettings.totalscanlines) if (scanline >= 240 && scanline != ppu.totalscanlines)
{ {
X6502_Run(256 + 69); X6502_Run(256 + 69);
scanline++; scanline++;
@@ -1166,10 +1168,10 @@ int FCEUPPU_Loop(int skip) {
TriggerNMI(); TriggerNMI();
} }
X6502_Run((scanlines_per_frame - 242) * (256 + 85) - 12); X6502_Run((scanlines_per_frame - 242) * (256 + 85) - 12);
if (FSettings.overclock_enabled && FSettings.vblankscanlines) { if (ppu.overclock_enabled && ppu.vblankscanlines) {
if (!DMC_7bit || !FSettings.skip_7bit_overclocking) { if (!DMC_7bit || !ppu.skip_7bit_overclocking) {
overclocking = 1; overclocking = 1;
X6502_Run(FSettings.vblankscanlines * (256 + 85) - 12); X6502_Run(ppu.vblankscanlines * (256 + 85) - 12);
overclocking = 0; overclocking = 0;
} }
} }
@@ -1203,7 +1205,7 @@ int FCEUPPU_Loop(int skip) {
kook ^= 1; kook ^= 1;
} }
if (GameInfo->type == GIT_NSF) if (GameInfo->type == GIT_NSF)
X6502_Run((256 + 85) * FSettings.normal_scanlines); X6502_Run((256 + 85) * ppu.normal_scanlines);
#ifdef FRAMESKIP #ifdef FRAMESKIP
else if (skip) { else if (skip) {
int y; int y;
@@ -1234,19 +1236,19 @@ int FCEUPPU_Loop(int skip) {
deemp = PPU[1] >> 5; deemp = PPU[1] >> 5;
/* manual samples can't play correctly with overclocking */ /* manual samples can't play correctly with overclocking */
if (DMC_7bit && FSettings.skip_7bit_overclocking) if (DMC_7bit && ppu.skip_7bit_overclocking)
FSettings.totalscanlines = FSettings.normal_scanlines; ppu.totalscanlines = ppu.normal_scanlines;
else else
FSettings.totalscanlines = FSettings.normal_scanlines + (FSettings.overclock_enabled ? FSettings.extrascanlines : 0); ppu.totalscanlines = ppu.normal_scanlines + (ppu.overclock_enabled ? ppu.extrascanlines : 0);
for (scanline = 0; scanline < FSettings.totalscanlines; ) { /* scanline is incremented in DoLine. Evil. :/ */ for (scanline = 0; scanline < ppu.totalscanlines; ) { /* scanline is incremented in DoLine. Evil. :/ */
deempcnt[deemp]++; deempcnt[deemp]++;
/* if ((PPUViewer) && (scanline == PPUViewScanline)) UpdatePPUView(1); */ /* if ((PPUViewer) && (scanline == PPUViewScanline)) UpdatePPUView(1); */
DoLine(); DoLine();
if (scanline < FSettings.normal_scanlines || scanline == FSettings.totalscanlines) if (scanline < ppu.normal_scanlines || scanline == ppu.totalscanlines)
overclocking = 0; overclocking = 0;
else { else {
if (DMC_7bit && FSettings.skip_7bit_overclocking) /* 7bit sample started after 240th line */ if (DMC_7bit && ppu.skip_7bit_overclocking) /* 7bit sample started after 240th line */
break; break;
overclocking = 1; overclocking = 1;
} }

View File

@@ -1,6 +1,18 @@
#ifndef _FCEU_PPU_H #ifndef _FCEU_PPU_H
#define _FCEU_PPU_H #define _FCEU_PPU_H
typedef struct {
/* PPU Overclocking */
int overclock_enabled; /* 1 : enable, 0 : disable duh! */
int skip_7bit_overclocking; /* 7-bit samples have priority over overclocking */
int extrascanlines;
int vblankscanlines;
int normal_scanlines; /* 240 : normal, 290 : dendy */
int totalscanlines;
} FCEU_PPU;
extern FCEU_PPU ppu;
void FCEUPPU_Init(void); void FCEUPPU_Init(void);
void FCEUPPU_Reset(void); void FCEUPPU_Reset(void);
void FCEUPPU_Power(void); void FCEUPPU_Power(void);

View File

@@ -52,15 +52,15 @@ int FCEU_InitVirtualVideo(void)
{ {
/* 256 bytes per scanline, * 240 scanline maximum, +8 for alignment, */ /* 256 bytes per scanline, * 240 scanline maximum, +8 for alignment, */
if (!XBuf) if (!XBuf)
XBuf = (uint8*)(FCEU_malloc(256 * (256 + FSettings.extrascanlines + 8))); XBuf = (uint8*)(FCEU_malloc(256 * (256 + ppu.extrascanlines + 8)));
if (!XDBuf) if (!XDBuf)
XDBuf = (uint8*)(FCEU_malloc(256 * (256 + FSettings.extrascanlines + 8))); XDBuf = (uint8*)(FCEU_malloc(256 * (256 + ppu.extrascanlines + 8)));
if (!XBuf || !XDBuf) if (!XBuf || !XDBuf)
return 0; return 0;
memset(XBuf, 128, 256 * (256 + FSettings.extrascanlines + 8)); memset(XBuf, 128, 256 * (256 + ppu.extrascanlines + 8));
memset(XDBuf, 128, 256 * (256 + FSettings.extrascanlines + 8)); memset(XDBuf, 128, 256 * (256 + ppu.extrascanlines + 8));
return 1; return 1;
} }