From 9a6decef067e52a6ca8df00e0ba877153008d511 Mon Sep 17 00:00:00 2001 From: goyuken Date: Mon, 16 Jun 2014 15:59:39 +0000 Subject: [PATCH] GB: cleanup and stuff --- .../Consoles/Nintendo/Gameboy/Gambatte.cs | 7 + .../Consoles/Nintendo/Gameboy/LibGambatte.cs | 3 +- libgambatte/include/gambatte.h | 3 +- libgambatte/include/inputgetter.h | 33 ----- libgambatte/libgambatte.vcxproj | 1 - libgambatte/libgambatte.vcxproj.filters | 3 - libgambatte/src/cinterface.cpp | 122 ++++++------------ libgambatte/src/cpu.h | 2 +- libgambatte/src/gambatte.cpp | 2 +- libgambatte/src/memory.cpp | 1 - libgambatte/src/memory.h | 4 +- output/dll/libgambatte.dll | Bin 151040 -> 150528 bytes 12 files changed, 51 insertions(+), 130 deletions(-) delete mode 100644 libgambatte/include/inputgetter.h diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs index 7158569dd2..774ff55764 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs @@ -148,6 +148,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy Util.Hash_SHA1(romdata), Util.Hash_MD5(romdata) ); + { + byte[] buff = new byte[32]; + LibGambatte.gambatte_romtitle(GambatteState, buff); + string romname = System.Text.Encoding.ASCII.GetString(buff); + Console.WriteLine("Core reported rom name: {0}", romname); + } + TimeCallback = new LibGambatte.RTCCallback(GetCurrentTime); LibGambatte.gambatte_setrtccallback(GambatteState, TimeCallback); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs index da18f72a49..5346c852bf 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/LibGambatte.cs @@ -316,9 +316,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy /// ROM header title of currently loaded ROM image. /// /// opaque state pointer + /// enough room for 16 ascii chars plus terminator /// [DllImport("libgambatte.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern string gambatte_romtitle(IntPtr core); + public static extern string gambatte_romtitle(IntPtr core, byte[] data); /// /// memory areas that gambatte_getmemoryarea() can return diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index 8652739799..990d3f9a64 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -19,7 +19,6 @@ #ifndef GAMBATTE_H #define GAMBATTE_H -#include "inputgetter.h" #include "gbint.h" #include #include @@ -84,7 +83,7 @@ public: void setCgbPalette(unsigned *lut); /** Sets the callback used for getting input state. */ - void setInputGetter(InputGetter *getInput); + void setInputGetter(unsigned (*getInput)()); void setReadCallback(void (*callback)(unsigned)); void setWriteCallback(void (*callback)(unsigned)); diff --git a/libgambatte/include/inputgetter.h b/libgambatte/include/inputgetter.h deleted file mode 100644 index d280de179a..0000000000 --- a/libgambatte/include/inputgetter.h +++ /dev/null @@ -1,33 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2007 by Sindre AamÄs * - * aamas@stud.ntnu.no * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License version 2 as * - * published by the Free Software Foundation. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License version 2 for more details. * - * * - * You should have received a copy of the GNU General Public License * - * version 2 along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ -#ifndef GAMBATTE_INPUTGETTER_H -#define GAMBATTE_INPUTGETTER_H - -namespace gambatte { -class InputGetter { -public: - enum { A = 0x01, B = 0x02, SELECT = 0x04, START = 0x08, RIGHT = 0x10, LEFT = 0x20, UP = 0x40, DOWN = 0x80 }; - virtual ~InputGetter() {}; - - /** @return A|B|SELECT|START|RIGHT|LEFT|UP|DOWN if those buttons are pressed. */ - virtual unsigned operator()() = 0; -}; -} - -#endif diff --git a/libgambatte/libgambatte.vcxproj b/libgambatte/libgambatte.vcxproj index 434d1c23c3..a61ab0e8fc 100644 --- a/libgambatte/libgambatte.vcxproj +++ b/libgambatte/libgambatte.vcxproj @@ -86,7 +86,6 @@ - diff --git a/libgambatte/libgambatte.vcxproj.filters b/libgambatte/libgambatte.vcxproj.filters index 5571702c18..614dad17ef 100644 --- a/libgambatte/libgambatte.vcxproj.filters +++ b/libgambatte/libgambatte.vcxproj.filters @@ -99,9 +99,6 @@ Header Files - - Header Files - Header Files diff --git a/libgambatte/src/cinterface.cpp b/libgambatte/src/cinterface.cpp index b6bb0328eb..88bed9f184 100644 --- a/libgambatte/src/cinterface.cpp +++ b/libgambatte/src/cinterface.cpp @@ -1,223 +1,175 @@ #include "cinterface.h" #include "gambatte.h" #include +#include #include "newstate.h" using namespace gambatte; - -GBEXPORT void *gambatte_create() +GBEXPORT GB *gambatte_create() { - GB *g = new GB(); - return (void *) g; + return new (std::calloc(1, sizeof (GB))) GB(); } -GBEXPORT void gambatte_destroy(void *core) +GBEXPORT void gambatte_destroy(GB *g) { - GB *g = (GB *) core; - delete g; + g->~GB(); + std::free(g); } -GBEXPORT int gambatte_load(void *core, const char *romfiledata, unsigned romfilelength, long long now, unsigned flags) +GBEXPORT int gambatte_load(GB *g, const char *romfiledata, unsigned romfilelength, long long now, unsigned flags) { - GB *g = (GB *) core; int ret = g->load(romfiledata, romfilelength, now, flags); return ret; } -GBEXPORT long gambatte_runfor(void *core, short *soundbuf, unsigned *samples) +GBEXPORT long gambatte_runfor(GB *g, short *soundbuf, unsigned *samples) { - GB *g = (GB *) core; unsigned sampv = *samples; long ret = g->runFor((unsigned int *) soundbuf, sampv); *samples = sampv; return ret; } -GBEXPORT void gambatte_blitto(void *core, unsigned long *videobuf, int pitch) +GBEXPORT void gambatte_blitto(GB *g, unsigned long *videobuf, int pitch) { - GB *g = (GB *) core; g->blitTo((unsigned int *)videobuf, pitch); } -GBEXPORT void gambatte_reset(void *core, long long now) +GBEXPORT void gambatte_reset(GB *g, long long now) { - GB *g = (GB *) core; g->reset(now); } -GBEXPORT void gambatte_setdmgpalettecolor(void *core, unsigned palnum, unsigned colornum, unsigned rgb32) +GBEXPORT void gambatte_setdmgpalettecolor(GB *g, unsigned palnum, unsigned colornum, unsigned rgb32) { - GB *g = (GB *) core; g->setDmgPaletteColor(palnum, colornum, rgb32); } -GBEXPORT void gambatte_setcgbpalette(void *core, unsigned *lut) +GBEXPORT void gambatte_setcgbpalette(GB *g, unsigned *lut) { - GB *g = (GB *) core; g->setCgbPalette(lut); } -class CInputGetter: public InputGetter +GBEXPORT void gambatte_setinputgetter(GB *g, unsigned (*getinput)(void)) { -public: - - unsigned (*inputfunc)(void); - unsigned operator()() - { - return inputfunc (); - } -}; - -GBEXPORT void gambatte_setinputgetter(void *core, unsigned (*getinput)(void)) -{ - GB *g = (GB *) core; - CInputGetter *cig = new CInputGetter(); - cig->inputfunc = getinput; - // how do i manage the lifetime of cig? - g->setInputGetter(cig); + g->setInputGetter(getinput); } -GBEXPORT void gambatte_setreadcallback(void *core, void (*callback)(unsigned)) +GBEXPORT void gambatte_setreadcallback(GB *g, void (*callback)(unsigned)) { - GB *g = (GB *) core; g->setReadCallback(callback); } -GBEXPORT void gambatte_setwritecallback(void *core, void (*callback)(unsigned)) +GBEXPORT void gambatte_setwritecallback(GB *g, void (*callback)(unsigned)) { - GB *g = (GB *) core; g->setWriteCallback(callback); } -GBEXPORT void gambatte_setexeccallback(void *core, void (*callback)(unsigned)) +GBEXPORT void gambatte_setexeccallback(GB *g, void (*callback)(unsigned)) { - GB *g = (GB *) core; g->setExecCallback(callback); } -GBEXPORT void gambatte_settracecallback(void *core, void (*callback)(void *)) +GBEXPORT void gambatte_settracecallback(GB *g, void (*callback)(void *)) { - GB *g = (GB *) core; g->setTraceCallback(callback); } -GBEXPORT void gambatte_setscanlinecallback(void *core, void (*callback)(), int sl) +GBEXPORT void gambatte_setscanlinecallback(GB *g, void (*callback)(), int sl) { - GB *g = (GB *) core; g->setScanlineCallback(callback, sl); } -GBEXPORT void gambatte_setrtccallback(void *core, unsigned int (*callback)()) +GBEXPORT void gambatte_setrtccallback(GB *g, unsigned int (*callback)()) { - GB *g = (GB *) core; g->setRTCCallback(callback); } -GBEXPORT int gambatte_iscgb(void *core) +GBEXPORT int gambatte_iscgb(GB *g) { - GB *g = (GB *) core; return g->isCgb(); } -GBEXPORT int gambatte_isloaded(void *core) +GBEXPORT int gambatte_isloaded(GB *g) { - GB *g = (GB *) core; return g->isLoaded(); } -GBEXPORT void gambatte_savesavedata(void *core, char *dest) +GBEXPORT void gambatte_savesavedata(GB *g, char *dest) { - GB *g = (GB *) core; g->saveSavedata(dest); } -GBEXPORT void gambatte_loadsavedata(void *core, const char *data) +GBEXPORT void gambatte_loadsavedata(GB *g, const char *data) { - GB *g = (GB *) core; g->loadSavedata(data); } -GBEXPORT int gambatte_savesavedatalength(void *core) +GBEXPORT int gambatte_savesavedatalength(GB *g) { - GB *g = (GB *) core; return g->saveSavedataLength(); } -GBEXPORT long gambatte_newstatelen(void *core) +GBEXPORT long gambatte_newstatelen(GB *g) { - GB *g = (GB *) core; NewStateDummy dummy; g->SyncState(&dummy); return dummy.GetLength(); } -GBEXPORT int gambatte_newstatesave(void *core, char *data, long len) +GBEXPORT int gambatte_newstatesave(GB *g, char *data, long len) { - GB *g = (GB *) core; NewStateExternalBuffer saver(data, len); g->SyncState(&saver); return !saver.Overflow() && saver.GetLength() == len; } -GBEXPORT int gambatte_newstateload(void *core, const char *data, long len) +GBEXPORT int gambatte_newstateload(GB *g, const char *data, long len) { - GB *g = (GB *) core; NewStateExternalBuffer loader((char *)data, len); g->SyncState(&loader); return !loader.Overflow() && loader.GetLength() == len; } -GBEXPORT void gambatte_newstatesave_ex(void *core, FPtrs *ff) +GBEXPORT void gambatte_newstatesave_ex(GB *g, FPtrs *ff) { - GB *g = (GB *) core; NewStateExternalFunctions saver(ff); g->SyncState(&saver); } -GBEXPORT void gambatte_newstateload_ex(void *core, FPtrs *ff) +GBEXPORT void gambatte_newstateload_ex(GB *g, FPtrs *ff) { - GB *g = (GB *) core; NewStateExternalFunctions loader(ff); g->SyncState(&loader); } -static char horriblebuff[64]; -GBEXPORT const char *gambatte_romtitle(void *core) +GBEXPORT void gambatte_romtitle(GB *g, char *dest) { - GB *g = (GB *) core; - const char *s = g->romTitle().c_str(); - std::strncpy(horriblebuff, s, 63); - horriblebuff[63] = 0; - return horriblebuff; + std::strcpy(dest, g->romTitle().c_str()); } -GBEXPORT int gambatte_getmemoryarea(void *core, int which, unsigned char **data, int *length) +GBEXPORT int gambatte_getmemoryarea(GB *g, int which, unsigned char **data, int *length) { - GB *g = (GB *) core; return g->getMemoryArea(which, data, length); } -GBEXPORT unsigned char gambatte_cpuread(void *core, unsigned short addr) +GBEXPORT unsigned char gambatte_cpuread(GB *g, unsigned short addr) { - GB *g = (GB *) core; return g->ExternalRead(addr); } -GBEXPORT void gambatte_cpuwrite(void *core, unsigned short addr, unsigned char val) +GBEXPORT void gambatte_cpuwrite(GB *g, unsigned short addr, unsigned char val) { - GB *g = (GB *) core; g->ExternalWrite(addr, val); } -GBEXPORT int gambatte_linkstatus(void *core, int which) +GBEXPORT int gambatte_linkstatus(GB *g, int which) { - GB *g = (GB *) core; return g->LinkStatus(which); } -GBEXPORT void gambatte_getregs(void *core, int *dest) +GBEXPORT void gambatte_getregs(GB *g, int *dest) { - GB *g = (GB *) core; g->GetRegs(dest); } diff --git a/libgambatte/src/cpu.h b/libgambatte/src/cpu.h index 55a72b6364..0a8cdd4d24 100644 --- a/libgambatte/src/cpu.h +++ b/libgambatte/src/cpu.h @@ -63,7 +63,7 @@ public: memory.setVideoBuffer(videoBuf, pitch); } - void setInputGetter(InputGetter *getInput) { + void setInputGetter(unsigned (*getInput)()) { memory.setInputGetter(getInput); } diff --git a/libgambatte/src/gambatte.cpp b/libgambatte/src/gambatte.cpp index 7fbe2c8647..1c7dcc1f62 100644 --- a/libgambatte/src/gambatte.cpp +++ b/libgambatte/src/gambatte.cpp @@ -98,7 +98,7 @@ void GB::reset(const std::uint32_t now) { } } -void GB::setInputGetter(InputGetter *getInput) { +void GB::setInputGetter(unsigned (*getInput)()) { p_->cpu.setInputGetter(getInput); } diff --git a/libgambatte/src/memory.cpp b/libgambatte/src/memory.cpp index f4e26ce60f..848255d25a 100644 --- a/libgambatte/src/memory.cpp +++ b/libgambatte/src/memory.cpp @@ -19,7 +19,6 @@ #include "memory.h" #include "video.h" #include "sound.h" -#include "inputgetter.h" #include "savestate.h" #include diff --git a/libgambatte/src/memory.h b/libgambatte/src/memory.h index 8cc3bfd615..7f5c82863a 100644 --- a/libgambatte/src/memory.h +++ b/libgambatte/src/memory.h @@ -38,7 +38,7 @@ class Memory { void (*writeCallback)(unsigned); void (*execCallback)(unsigned); - InputGetter *getInput; + unsigned (*getInput)(); unsigned long divLastUpdate; unsigned long lastOamDmaUpdate; @@ -159,7 +159,7 @@ public: int loadROM(const char *romfiledata, unsigned romfilelength, bool forceDmg, bool multicartCompat); - void setInputGetter(InputGetter *getInput) { + void setInputGetter(unsigned (*getInput)()) { this->getInput = getInput; } diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index e893f84f8994a11008dd3ae5601cd65330ca9505..2511c2094ad354223eb8e455b1adb658e4eab526 100644 GIT binary patch delta 28055 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