From 6637e0a53fa813270f2e89dba2eebdb586c3def1 Mon Sep 17 00:00:00 2001 From: nattthebear Date: Sat, 24 Jun 2017 09:38:03 -0400 Subject: [PATCH] pizza: add lag/polling support --- .../Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs | 3 ++- BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs | 6 +++--- waterbox/pizza/lib/global.c | 4 ++++ waterbox/pizza/lib/global.h | 2 ++ waterbox/pizza/lib/mmu.c | 3 +++ waterbox/pizza/pizza.c | 4 +++- 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs b/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs index 378cb7676e..0f5d8f475f 100644 --- a/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs +++ b/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystemEnumConverter.cs @@ -102,7 +102,8 @@ namespace BizHawk.Client.ApiHawk case "VB": case "NGP": case "DNGP": - case "O2": + case "O2": + case "SGB": return 0; // like I give a shit default: diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs index 7fb2d0038d..11380c9bb2 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs @@ -21,12 +21,12 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy public Pizza(byte[] rom, CoreComm comm) :base(comm, new Configuration { - DefaultWidth = 160, - DefaultHeight = 144, + DefaultWidth = 256, + DefaultHeight = 224, MaxWidth = 256, MaxHeight = 224, MaxSamples = 1024, - SystemId = "GB", + SystemId = "SGB", DefaultFpsNumerator = TICKSPERSECOND, DefaultFpsDenominator = TICKSPERFRAME }) diff --git a/waterbox/pizza/lib/global.c b/waterbox/pizza/lib/global.c index c6f489e230..8f0818dd94 100644 --- a/waterbox/pizza/lib/global.c +++ b/waterbox/pizza/lib/global.c @@ -29,6 +29,8 @@ char global_cpu_double_speed; char global_debug; char global_rumble; char global_window; // if true, show window +int global_lagged; +void (*global_input_callback)(void); void global_init() { @@ -38,5 +40,7 @@ void global_init() global_sgb = 0; global_cpu_double_speed = 0; global_rumble = 0; + global_lagged = 0; + global_input_callback = NULL; sprintf(global_cart_name, "NOCARTIRDGE"); } diff --git a/waterbox/pizza/lib/global.h b/waterbox/pizza/lib/global.h index 6ce10887a9..dbc477bcc6 100644 --- a/waterbox/pizza/lib/global.h +++ b/waterbox/pizza/lib/global.h @@ -28,6 +28,8 @@ extern char global_sgb; extern char global_cpu_double_speed; extern char global_rumble; extern char global_cart_name[256]; +extern int global_lagged; +extern void (*global_input_callback)(void); /* prototypes */ void global_init(); diff --git a/waterbox/pizza/lib/mmu.c b/waterbox/pizza/lib/mmu.c index 9da7d095a2..ecc7f61cc0 100644 --- a/waterbox/pizza/lib/mmu.c +++ b/waterbox/pizza/lib/mmu.c @@ -250,6 +250,9 @@ uint8_t mmu_read(uint16_t a) /* joypad reading */ case 0xFF00: + global_lagged = 0; + if (global_input_callback) + global_input_callback(); return global_sgb ? sgb_read_ff00(cycles.sampleclock) : input_get_keys(mmu.memory[a]); /* CGB HDMA transfer */ diff --git a/waterbox/pizza/pizza.c b/waterbox/pizza/pizza.c index 12e375aa19..d4cfe0b62e 100644 --- a/waterbox/pizza/pizza.c +++ b/waterbox/pizza/pizza.c @@ -106,6 +106,7 @@ EXPORT void FrameAdvance(MyFrameInfo *frame) else input_set_keys(frame->Keys); current_vbuff = frame->VideoBuffer; + global_lagged = 1; uint64_t current = cycles.sampleclock; uint64_t target = current + 35112 - overflow; @@ -125,6 +126,7 @@ EXPORT void FrameAdvance(MyFrameInfo *frame) frame->Width = 160; frame->Height = 144; } + frame->Lagged = global_lagged; current_vbuff = NULL; } @@ -135,7 +137,7 @@ EXPORT int IsCGB(void) EXPORT void SetInputCallback(void (*callback)(void)) { - // TODO + global_input_callback = callback; } EXPORT void GetMemoryAreas(MemoryArea *m)