From 478e80a5d38ba9cfd8805fb56921690616a7277b Mon Sep 17 00:00:00 2001 From: goyuken Date: Sat, 3 May 2014 17:43:39 +0000 Subject: [PATCH] gambatte: misc code cleanup --- libgambatte/include/gambatte.h | 8 ---- libgambatte/src/cinterface.cpp | 72 +++++++++++++++----------------- libgambatte/src/cinterface.h | 73 +-------------------------------- libgambatte/src/gambatte.cpp | 16 +------- output/dll/libgambatte.dll | Bin 175616 -> 175616 bytes 5 files changed, 34 insertions(+), 135 deletions(-) diff --git a/libgambatte/include/gambatte.h b/libgambatte/include/gambatte.h index 2e4a65dd2b..c800189461 100644 --- a/libgambatte/include/gambatte.h +++ b/libgambatte/include/gambatte.h @@ -122,14 +122,6 @@ public: */ bool loadState(std::istream &file); - /** Selects which state slot to save state to or load state from. - * There are 10 such slots, numbered from 0 to 9 (periodically extended for all n). - */ - void selectState(int n); - - /** Current state slot selected with selectState(). Returns a value between 0 and 9 inclusive. */ - int currentState() const; - /** ROM header title of currently loaded ROM image. */ const std::string romTitle() const; diff --git a/libgambatte/src/cinterface.cpp b/libgambatte/src/cinterface.cpp index 242dda2aef..56c128b197 100644 --- a/libgambatte/src/cinterface.cpp +++ b/libgambatte/src/cinterface.cpp @@ -5,26 +5,26 @@ using namespace gambatte; -__declspec(dllexport) void *gambatte_create() +GBEXPORT void *gambatte_create() { GB *g = new GB(); return (void *) g; } -__declspec(dllexport) void gambatte_destroy(void *core) +GBEXPORT void gambatte_destroy(void *core) { GB *g = (GB *) core; delete g; } -__declspec(dllexport) int gambatte_load(void *core, const char *romfiledata, unsigned romfilelength, long long now, unsigned flags) +GBEXPORT int gambatte_load(void *core, const char *romfiledata, unsigned romfilelength, long long now, unsigned flags) { GB *g = (GB *) core; int ret = g->load(romfiledata, romfilelength, now, flags); return ret; } -__declspec(dllexport) long gambatte_runfor(void *core, short *soundbuf, unsigned *samples) +GBEXPORT long gambatte_runfor(void *core, short *soundbuf, unsigned *samples) { GB *g = (GB *) core; unsigned sampv = *samples; @@ -33,25 +33,25 @@ __declspec(dllexport) long gambatte_runfor(void *core, short *soundbuf, unsigned return ret; } -__declspec(dllexport) void gambatte_blitto(void *core, unsigned long *videobuf, int pitch) +GBEXPORT void gambatte_blitto(void *core, unsigned long *videobuf, int pitch) { GB *g = (GB *) core; g->blitTo((unsigned int *)videobuf, pitch); } -__declspec(dllexport) void gambatte_reset(void *core, long long now) +GBEXPORT void gambatte_reset(void *core, long long now) { GB *g = (GB *) core; g->reset(now); } -__declspec(dllexport) void gambatte_setdmgpalettecolor(void *core, unsigned palnum, unsigned colornum, unsigned rgb32) +GBEXPORT void gambatte_setdmgpalettecolor(void *core, unsigned palnum, unsigned colornum, unsigned rgb32) { GB *g = (GB *) core; g->setDmgPaletteColor(palnum, colornum, rgb32); } -__declspec(dllexport) void gambatte_setcgbpalette(void *core, unsigned *lut) +GBEXPORT void gambatte_setcgbpalette(void *core, unsigned *lut) { GB *g = (GB *) core; g->setCgbPalette(lut); @@ -68,7 +68,7 @@ public: } }; -__declspec(dllexport) void gambatte_setinputgetter(void *core, unsigned (*getinput)(void)) +GBEXPORT void gambatte_setinputgetter(void *core, unsigned (*getinput)(void)) { GB *g = (GB *) core; CInputGetter *cig = new CInputGetter(); @@ -77,87 +77,79 @@ __declspec(dllexport) void gambatte_setinputgetter(void *core, unsigned (*getinp g->setInputGetter(cig); } -__declspec(dllexport) void gambatte_setreadcallback(void *core, void (*callback)(unsigned)) +GBEXPORT void gambatte_setreadcallback(void *core, void (*callback)(unsigned)) { GB *g = (GB *) core; g->setReadCallback(callback); } -__declspec(dllexport) void gambatte_setwritecallback(void *core, void (*callback)(unsigned)) +GBEXPORT void gambatte_setwritecallback(void *core, void (*callback)(unsigned)) { GB *g = (GB *) core; g->setWriteCallback(callback); } -__declspec(dllexport) void gambatte_setexeccallback(void *core, void (*callback)(unsigned)) +GBEXPORT void gambatte_setexeccallback(void *core, void (*callback)(unsigned)) { GB *g = (GB *) core; g->setExecCallback(callback); } -__declspec(dllexport) void gambatte_settracecallback(void *core, void (*callback)(void *)) +GBEXPORT void gambatte_settracecallback(void *core, void (*callback)(void *)) { GB *g = (GB *) core; g->setTraceCallback(callback); } -__declspec(dllexport) void gambatte_setscanlinecallback(void *core, void (*callback)(), int sl) +GBEXPORT void gambatte_setscanlinecallback(void *core, void (*callback)(), int sl) { GB *g = (GB *) core; g->setScanlineCallback(callback, sl); } -__declspec(dllexport) void gambatte_setrtccallback(void *core, unsigned int (*callback)()) +GBEXPORT void gambatte_setrtccallback(void *core, unsigned int (*callback)()) { GB *g = (GB *) core; g->setRTCCallback(callback); } -__declspec(dllexport) void gambatte_setsavedir(void *core, const char *sdir) +GBEXPORT void gambatte_setsavedir(void *core, const char *sdir) { GB *g = (GB *) core; g->setSaveDir(std::string(sdir)); } -__declspec(dllexport) int gambatte_iscgb(void *core) +GBEXPORT int gambatte_iscgb(void *core) { GB *g = (GB *) core; return g->isCgb(); } -__declspec(dllexport) int gambatte_isloaded(void *core) +GBEXPORT int gambatte_isloaded(void *core) { GB *g = (GB *) core; return g->isLoaded(); } -/* -__declspec(dllexport) void gambatte_savesavedata(void *core) -{ - GB *g = (GB *) core; - g->saveSavedata(); -} -*/ - -__declspec(dllexport) void gambatte_savesavedata(void *core, char *dest) +GBEXPORT void gambatte_savesavedata(void *core, char *dest) { GB *g = (GB *) core; g->saveSavedata(dest); } -__declspec(dllexport) void gambatte_loadsavedata(void *core, const char *data) +GBEXPORT void gambatte_loadsavedata(void *core, const char *data) { GB *g = (GB *) core; g->loadSavedata(data); } -__declspec(dllexport) int gambatte_savesavedatalength(void *core) +GBEXPORT int gambatte_savesavedatalength(void *core) { GB *g = (GB *) core; return g->saveSavedataLength(); } -__declspec(dllexport) int gambatte_savestate(void *core, char **data, unsigned *len) +GBEXPORT int gambatte_savestate(void *core, char **data, unsigned *len) { GB *g = (GB *) core; @@ -174,19 +166,19 @@ __declspec(dllexport) int gambatte_savestate(void *core, char **data, unsigned * return 1; } -__declspec(dllexport) void gambatte_savestate_destroy(char *data) +GBEXPORT void gambatte_savestate_destroy(char *data) { std::free(data); } -__declspec(dllexport) int gambatte_loadstate(void *core, const char *data, unsigned len) +GBEXPORT int gambatte_loadstate(void *core, const char *data, unsigned len) { GB *g = (GB *) core; return g->loadState(std::istringstream(std::string(data, len), std::ios_base::binary | std::ios_base::in)); } static char horriblebuff[64]; -__declspec(dllexport) const char *gambatte_romtitle(void *core) +GBEXPORT const char *gambatte_romtitle(void *core) { GB *g = (GB *) core; const char *s = g->romTitle().c_str(); @@ -195,43 +187,43 @@ __declspec(dllexport) const char *gambatte_romtitle(void *core) return horriblebuff; } -__declspec(dllexport) void gambatte_setgamegenie(void *core, const char *codes) +GBEXPORT void gambatte_setgamegenie(void *core, const char *codes) { GB *g = (GB *) core; g->setGameGenie(std::string(codes)); } -__declspec(dllexport) void gambatte_setgameshark(void *core, const char *codes) +GBEXPORT void gambatte_setgameshark(void *core, const char *codes) { GB *g = (GB *) core; g->setGameShark(std::string(codes)); } -__declspec(dllexport) int gambatte_getmemoryarea(void *core, int which, unsigned char **data, int *length) +GBEXPORT int gambatte_getmemoryarea(void *core, int which, unsigned char **data, int *length) { GB *g = (GB *) core; return g->getMemoryArea(which, data, length); } -__declspec(dllexport) unsigned char gambatte_cpuread(void *core, unsigned short addr) +GBEXPORT unsigned char gambatte_cpuread(void *core, unsigned short addr) { GB *g = (GB *) core; return g->ExternalRead(addr); } -__declspec(dllexport) void gambatte_cpuwrite(void *core, unsigned short addr, unsigned char val) +GBEXPORT void gambatte_cpuwrite(void *core, unsigned short addr, unsigned char val) { GB *g = (GB *) core; g->ExternalWrite(addr, val); } -__declspec(dllexport) int gambatte_linkstatus(void *core, int which) +GBEXPORT int gambatte_linkstatus(void *core, int which) { GB *g = (GB *) core; return g->LinkStatus(which); } -__declspec(dllexport) void gambatte_getregs(void *core, int *dest) +GBEXPORT void gambatte_getregs(void *core, int *dest) { GB *g = (GB *) core; g->GetRegs(dest); diff --git a/libgambatte/src/cinterface.h b/libgambatte/src/cinterface.h index 57cc1e16f2..353991ab12 100644 --- a/libgambatte/src/cinterface.h +++ b/libgambatte/src/cinterface.h @@ -3,77 +3,6 @@ // these are all documented on the C# side -extern "C" -{ - __declspec(dllexport) void *gambatte_create(); - __declspec(dllexport) void gambatte_destroy(void *core); - - __declspec(dllexport) int gambatte_load(void *core, const char *romfiledata, unsigned romfilelength, long long now, unsigned flags); - - __declspec(dllexport) long gambatte_runfor(void *core, short *soundbuf, unsigned *samples); - __declspec(dllexport) void gambatte_blitto(void *core, unsigned long *videobuf, int pitch); - - __declspec(dllexport) void gambatte_reset(void *core, long long now); - - __declspec(dllexport) void gambatte_setdmgpalettecolor(void *core, unsigned palnum, unsigned colornum, unsigned rgb32); - - __declspec(dllexport) void gambatte_setcgbpalette(void *core, unsigned *lut); - - __declspec(dllexport) void gambatte_setinputgetter(void *core, unsigned (*getinput)(void)); - - __declspec(dllexport) void gambatte_setreadcallback(void *core, void (*callback)(unsigned)); - - __declspec(dllexport) void gambatte_setwritecallback(void *core, void (*callback)(unsigned)); - - __declspec(dllexport) void gambatte_setexeccallback(void *core, void (*callback)(unsigned)); - - __declspec(dllexport) void gambatte_settracecallback(void *core, void (*callback)(void *)); - - __declspec(dllexport) void gambatte_setscanlinecallback(void *core, void (*callback)(), int sl); - - __declspec(dllexport) void gambatte_setrtccallback(void *core, unsigned int (*callback)()); - - __declspec(dllexport) void gambatte_setsavedir(void *core, const char *sdir); - - __declspec(dllexport) int gambatte_iscgb(void *core); - - __declspec(dllexport) int gambatte_isloaded(void *core); - - __declspec(dllexport) void gambatte_savesavedata(void *core, char *dest); - __declspec(dllexport) void gambatte_loadsavedata(void *core, const char *data); - __declspec(dllexport) int gambatte_savesavedatalength(void *core); - - //__declspec(dllexport) int gambatte_savestate(void *core, const unsigned long *videobuf, int pitch); - - //__declspec(dllexport) int gambatte_loadstate(void *core); - - __declspec(dllexport) int gambatte_savestate(void *core, char **data, unsigned *len); - __declspec(dllexport) void gambatte_savestate_destroy(char *data); - - __declspec(dllexport) int gambatte_loadstate(void *core, const char *data, unsigned len); - - //__declspec(dllexport) void gambatte_selectstate(void *core, int n); - - //__declspec(dllexport) int gambatte_currentstate(void *core); - - __declspec(dllexport) const char *gambatte_romtitle(void *core); - - __declspec(dllexport) void gambatte_setgamegenie(void *core, const char *codes); - - __declspec(dllexport) void gambatte_setgameshark(void *core, const char *codes); - - __declspec(dllexport) int gambatte_getmemoryarea(void *core, int which, unsigned char **data, int *length); - - __declspec(dllexport) unsigned char gambatte_cpuread(void *core, unsigned short addr); - - __declspec(dllexport) void gambatte_cpuwrite(void *core, unsigned short addr, unsigned char val); - - __declspec(dllexport) int gambatte_linkstatus(void *core, int which); - - __declspec(dllexport) void gambatte_getregs(void *core, int *dest); - -} - - +#define GBEXPORT extern "C" __declspec(dllexport) #endif diff --git a/libgambatte/src/gambatte.cpp b/libgambatte/src/gambatte.cpp index 89a00dbfe1..37436fd71f 100644 --- a/libgambatte/src/gambatte.cpp +++ b/libgambatte/src/gambatte.cpp @@ -30,19 +30,14 @@ static const std::string itos(const int i) { return ss.str(); } -static const std::string statePath(const std::string &basePath, const int stateNo) { - return basePath + "_" + itos(stateNo) + ".gqs"; -} - namespace gambatte { struct GB::Priv { CPU cpu; - int stateNo; bool gbaCgbMode; gambatte::uint_least32_t *vbuff; - Priv() : stateNo(1), gbaCgbMode(false) + Priv() : gbaCgbMode(false), vbuff(0) { vbuff = new gambatte::uint_least32_t[160*144]; } @@ -156,8 +151,6 @@ int GB::load(const char *romfiledata, unsigned romfilelength, const std::uint32_ setInitState(state, p_->cpu.isCgb(), p_->gbaCgbMode = flags & GBA_CGB, now); p_->cpu.loadState(state); //p_->cpu.loadSavedata(); - - p_->stateNo = 1; } return failed; @@ -245,13 +238,6 @@ bool GB::saveState(std::ostream &file) { return false; } -void GB::selectState(int n) { - n -= (n / 10) * 10; - p_->stateNo = n < 0 ? n + 10 : n; -} - -int GB::currentState() const { return p_->stateNo; } - const std::string GB::romTitle() const { if (p_->cpu.loaded()) { char title[0x11]; diff --git a/output/dll/libgambatte.dll b/output/dll/libgambatte.dll index 2f5e11e7ed2ceb9d55cafe9db6221328d9073c21..7946642f5b217ead2027deb60bda0bcfa4b92126 100644 GIT binary patch delta 13752 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 F{|^*Lz?J|2