Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libgambatte/src/cinterface.cpp
2 views
1
#include "cinterface.h"
2
#include "gambatte.h"
3
#include <cstdlib>
4
#include <cstring>
5
#include "newstate.h"
6
7
using namespace gambatte;
8
9
// new is actually called in a few different places, so replace all of them for determinism guarantees
10
void *operator new(std::size_t n)
11
{
12
void *p = std::malloc(n);
13
std::memset(p, 0, n);
14
return p;
15
}
16
17
void operator delete(void *p)
18
{
19
std::free(p);
20
}
21
22
GBEXPORT GB *gambatte_create()
23
{
24
return new GB();
25
}
26
27
GBEXPORT void gambatte_destroy(GB *g)
28
{
29
delete g;
30
}
31
32
GBEXPORT int gambatte_load(GB *g, const char *romfiledata, unsigned romfilelength, long long now, unsigned flags)
33
{
34
int ret = g->load(romfiledata, romfilelength, now, flags);
35
return ret;
36
}
37
38
GBEXPORT int gambatte_runfor(GB *g, short *soundbuf, unsigned *samples)
39
{
40
unsigned sampv = *samples;
41
int ret = g->runFor((unsigned int *) soundbuf, sampv);
42
*samples = sampv;
43
return ret;
44
}
45
46
GBEXPORT void gambatte_blitto(GB *g, unsigned int *videobuf, int pitch)
47
{
48
g->blitTo((unsigned int *)videobuf, pitch);
49
}
50
51
GBEXPORT void gambatte_setlayers(GB *g, unsigned mask)
52
{
53
g->setLayers(mask);
54
}
55
56
GBEXPORT void gambatte_reset(GB *g, long long now)
57
{
58
g->reset(now);
59
}
60
61
GBEXPORT void gambatte_setdmgpalettecolor(GB *g, unsigned palnum, unsigned colornum, unsigned rgb32)
62
{
63
g->setDmgPaletteColor(palnum, colornum, rgb32);
64
}
65
66
GBEXPORT void gambatte_setcgbpalette(GB *g, unsigned *lut)
67
{
68
g->setCgbPalette(lut);
69
}
70
71
GBEXPORT void gambatte_setinputgetter(GB *g, unsigned (*getinput)(void))
72
{
73
g->setInputGetter(getinput);
74
}
75
76
GBEXPORT void gambatte_setreadcallback(GB *g, void (*callback)(unsigned))
77
{
78
g->setReadCallback(callback);
79
}
80
81
GBEXPORT void gambatte_setwritecallback(GB *g, void (*callback)(unsigned))
82
{
83
g->setWriteCallback(callback);
84
}
85
86
GBEXPORT void gambatte_setexeccallback(GB *g, void (*callback)(unsigned))
87
{
88
g->setExecCallback(callback);
89
}
90
91
GBEXPORT void gambatte_setcdcallback(GB *g, CDCallback cdc)
92
{
93
g->setCDCallback(cdc);
94
}
95
96
97
GBEXPORT void gambatte_settracecallback(GB *g, void (*callback)(void *))
98
{
99
g->setTraceCallback(callback);
100
}
101
102
GBEXPORT void gambatte_setscanlinecallback(GB *g, void (*callback)(), int sl)
103
{
104
g->setScanlineCallback(callback, sl);
105
}
106
107
GBEXPORT void gambatte_setrtccallback(GB *g, unsigned int (*callback)())
108
{
109
g->setRTCCallback(callback);
110
}
111
112
GBEXPORT int gambatte_iscgb(GB *g)
113
{
114
return g->isCgb();
115
}
116
117
GBEXPORT int gambatte_isloaded(GB *g)
118
{
119
return g->isLoaded();
120
}
121
122
GBEXPORT void gambatte_savesavedata(GB *g, char *dest)
123
{
124
g->saveSavedata(dest);
125
}
126
127
GBEXPORT void gambatte_loadsavedata(GB *g, const char *data)
128
{
129
g->loadSavedata(data);
130
}
131
132
GBEXPORT int gambatte_savesavedatalength(GB *g)
133
{
134
return g->saveSavedataLength();
135
}
136
137
GBEXPORT int gambatte_newstatelen(GB *g)
138
{
139
NewStateDummy dummy;
140
g->SyncState<false>(&dummy);
141
return dummy.GetLength();
142
}
143
144
GBEXPORT int gambatte_newstatesave(GB *g, char *data, int len)
145
{
146
NewStateExternalBuffer saver(data, len);
147
g->SyncState<false>(&saver);
148
return !saver.Overflow() && saver.GetLength() == len;
149
}
150
151
GBEXPORT int gambatte_newstateload(GB *g, const char *data, int len)
152
{
153
NewStateExternalBuffer loader((char *)data, len);
154
g->SyncState<true>(&loader);
155
return !loader.Overflow() && loader.GetLength() == len;
156
}
157
158
GBEXPORT void gambatte_newstatesave_ex(GB *g, FPtrs *ff)
159
{
160
NewStateExternalFunctions saver(ff);
161
g->SyncState<false>(&saver);
162
}
163
164
GBEXPORT void gambatte_newstateload_ex(GB *g, FPtrs *ff)
165
{
166
NewStateExternalFunctions loader(ff);
167
g->SyncState<true>(&loader);
168
}
169
170
GBEXPORT void gambatte_romtitle(GB *g, char *dest)
171
{
172
std::strcpy(dest, g->romTitle().c_str());
173
}
174
175
GBEXPORT int gambatte_getmemoryarea(GB *g, int which, unsigned char **data, int *length)
176
{
177
return g->getMemoryArea(which, data, length);
178
}
179
180
GBEXPORT unsigned char gambatte_cpuread(GB *g, unsigned short addr)
181
{
182
return g->ExternalRead(addr);
183
}
184
185
GBEXPORT void gambatte_cpuwrite(GB *g, unsigned short addr, unsigned char val)
186
{
187
g->ExternalWrite(addr, val);
188
}
189
190
GBEXPORT int gambatte_linkstatus(GB *g, int which)
191
{
192
return g->LinkStatus(which);
193
}
194
195
GBEXPORT void gambatte_getregs(GB *g, int *dest)
196
{
197
g->GetRegs(dest);
198
}
199
200