diff --git a/src/drivers/libretro/libretro.c b/src/drivers/libretro/libretro.c index 43a4d33..a83f842 100644 --- a/src/drivers/libretro/libretro.c +++ b/src/drivers/libretro/libretro.c @@ -1223,33 +1223,33 @@ static void check_variables(bool startup) bool do_reinit = false; if (!strcmp(var.value, "disabled") - && FSettings.overclock_enabled != 0) + && ppu.overclock_enabled != 0) { - FSettings.skip_7bit_overclocking = 1; - FSettings.extrascanlines = 0; - FSettings.vblankscanlines = 0; - FSettings.overclock_enabled = 0; + ppu.skip_7bit_overclocking = 1; + ppu.extrascanlines = 0; + ppu.vblankscanlines = 0; + ppu.overclock_enabled = 0; do_reinit = true; } else if (!strcmp(var.value, "2x-Postrender")) { - FSettings.skip_7bit_overclocking = 1; - FSettings.extrascanlines = 266; - FSettings.vblankscanlines = 0; - FSettings.overclock_enabled = 1; + ppu.skip_7bit_overclocking = 1; + ppu.extrascanlines = 266; + ppu.vblankscanlines = 0; + ppu.overclock_enabled = 1; do_reinit = true; } else if (!strcmp(var.value, "2x-VBlank")) { - FSettings.skip_7bit_overclocking = 1; - FSettings.extrascanlines = 0; - FSettings.vblankscanlines = 266; - FSettings.overclock_enabled = 1; + ppu.skip_7bit_overclocking = 1; + ppu.extrascanlines = 0; + ppu.vblankscanlines = 266; + ppu.overclock_enabled = 1; do_reinit = true; } - FSettings.normal_scanlines = FSettings.dendy ? SCANLINES_DENDY : SCANLINES_NORMAL; - FSettings.totalscanlines = FSettings.normal_scanlines + (FSettings.overclock_enabled ? FSettings.extrascanlines : 0); + ppu.normal_scanlines = FSettings.dendy ? SCANLINES_DENDY : SCANLINES_NORMAL; + ppu.totalscanlines = ppu.normal_scanlines + (ppu.overclock_enabled ? ppu.extrascanlines : 0); if (do_reinit && startup) { diff --git a/src/fceu.c b/src/fceu.c index 748e7f7..7977e5c 100644 --- a/src/fceu.c +++ b/src/fceu.c @@ -341,14 +341,14 @@ int FCEUI_Initialize(void) { FSettings.UsrLastSLine[0] = 231; FSettings.UsrLastSLine[1] = 239; 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.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(); X6502_Init(); return 1; @@ -482,8 +482,8 @@ void FCEU_ResetVidSys(void) if (PAL) FSettings.dendy = 0; - FSettings.normal_scanlines = FSettings.dendy ? SCANLINES_DENDY : SCANLINES_NORMAL; - FSettings.totalscanlines = FSettings.normal_scanlines + (FSettings.overclock_enabled ? FSettings.extrascanlines : 0); + ppu.normal_scanlines = FSettings.dendy ? SCANLINES_DENDY : SCANLINES_NORMAL; + ppu.totalscanlines = ppu.normal_scanlines + (ppu.overclock_enabled ? ppu.extrascanlines : 0); FCEUPPU_SetVideoSystem(w || FSettings.dendy); SetSoundVariables(); diff --git a/src/fceu.h b/src/fceu.h index 27be7a2..4756bda 100644 --- a/src/fceu.h +++ b/src/fceu.h @@ -88,14 +88,6 @@ typedef struct { int soundq; 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 ramstate; int dendy; diff --git a/src/ppu.c b/src/ppu.c index fdf7675..ca4ea73 100644 --- a/src/ppu.c +++ b/src/ppu.c @@ -64,6 +64,8 @@ static uint32 ppulut1[256]; static uint32 ppulut2[256]; static uint32 ppulut3[128]; +FCEU_PPU ppu; + static void makeppulut(void) { int x; int y; @@ -660,7 +662,7 @@ static void DoLine(void) uint8 *target = NULL; uint8 *dtarget = NULL; - if (scanline >= 240 && scanline != FSettings.totalscanlines) + if (scanline >= 240 && scanline != ppu.totalscanlines) { X6502_Run(256 + 69); scanline++; @@ -1166,10 +1168,10 @@ int FCEUPPU_Loop(int skip) { TriggerNMI(); } X6502_Run((scanlines_per_frame - 242) * (256 + 85) - 12); - if (FSettings.overclock_enabled && FSettings.vblankscanlines) { - if (!DMC_7bit || !FSettings.skip_7bit_overclocking) { + if (ppu.overclock_enabled && ppu.vblankscanlines) { + if (!DMC_7bit || !ppu.skip_7bit_overclocking) { overclocking = 1; - X6502_Run(FSettings.vblankscanlines * (256 + 85) - 12); + X6502_Run(ppu.vblankscanlines * (256 + 85) - 12); overclocking = 0; } } @@ -1203,7 +1205,7 @@ int FCEUPPU_Loop(int skip) { kook ^= 1; } if (GameInfo->type == GIT_NSF) - X6502_Run((256 + 85) * FSettings.normal_scanlines); + X6502_Run((256 + 85) * ppu.normal_scanlines); #ifdef FRAMESKIP else if (skip) { int y; @@ -1234,19 +1236,19 @@ int FCEUPPU_Loop(int skip) { deemp = PPU[1] >> 5; /* manual samples can't play correctly with overclocking */ - if (DMC_7bit && FSettings.skip_7bit_overclocking) - FSettings.totalscanlines = FSettings.normal_scanlines; + if (DMC_7bit && ppu.skip_7bit_overclocking) + ppu.totalscanlines = ppu.normal_scanlines; 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]++; /* if ((PPUViewer) && (scanline == PPUViewScanline)) UpdatePPUView(1); */ DoLine(); - if (scanline < FSettings.normal_scanlines || scanline == FSettings.totalscanlines) + if (scanline < ppu.normal_scanlines || scanline == ppu.totalscanlines) overclocking = 0; 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; overclocking = 1; } diff --git a/src/ppu.h b/src/ppu.h index d9cfcec..829de71 100644 --- a/src/ppu.h +++ b/src/ppu.h @@ -1,6 +1,18 @@ #ifndef _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_Reset(void); void FCEUPPU_Power(void); diff --git a/src/video.c b/src/video.c index d54be19..80da854 100644 --- a/src/video.c +++ b/src/video.c @@ -52,15 +52,15 @@ int FCEU_InitVirtualVideo(void) { /* 256 bytes per scanline, * 240 scanline maximum, +8 for alignment, */ if (!XBuf) - XBuf = (uint8*)(FCEU_malloc(256 * (256 + FSettings.extrascanlines + 8))); + XBuf = (uint8*)(FCEU_malloc(256 * (256 + ppu.extrascanlines + 8))); if (!XDBuf) - XDBuf = (uint8*)(FCEU_malloc(256 * (256 + FSettings.extrascanlines + 8))); + XDBuf = (uint8*)(FCEU_malloc(256 * (256 + ppu.extrascanlines + 8))); if (!XBuf || !XDBuf) return 0; - memset(XBuf, 128, 256 * (256 + FSettings.extrascanlines + 8)); - memset(XDBuf, 128, 256 * (256 + FSettings.extrascanlines + 8)); + memset(XBuf, 128, 256 * (256 + ppu.extrascanlines + 8)); + memset(XDBuf, 128, 256 * (256 + ppu.extrascanlines + 8)); return 1; }