Skip to content

Commit 90c0214

Browse files
committed
Add prop IMemoryApi.MainMemoryName, further delegate mainmemory lib
1 parent 1619b33 commit 90c0214

File tree

3 files changed

+58
-61
lines changed

3 files changed

+58
-61
lines changed

src/BizHawk.Client.Common/Api/Classes/MemoryApi.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ MemoryDomain LazyInit()
4242
set => _currentMemoryDomain = value;
4343
}
4444

45-
private IMemoryDomains DomainList
45+
public IMemoryDomains DomainList
4646
{
4747
get
4848
{
@@ -56,6 +56,20 @@ private IMemoryDomains DomainList
5656
}
5757
}
5858

59+
public string MainMemoryName
60+
{
61+
get
62+
{
63+
if (MemoryDomainCore == null)
64+
{
65+
var error = $"Error: {Emulator.Attributes().CoreName} does not implement memory domains";
66+
LogCallback(error);
67+
throw new NotImplementedException(error);
68+
}
69+
return MemoryDomainCore.MainMemory.Name;
70+
}
71+
}
72+
5973
public MemoryApi(Action<string> logCallback) => LogCallback = logCallback;
6074

6175
private MemoryDomain NamedDomainOrCurrent(string name)

src/BizHawk.Client.Common/Api/Interfaces/IMemoryApi.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ namespace BizHawk.Client.Common
44
{
55
public interface IMemoryApi : IExternalApi
66
{
7+
string MainMemoryName { get; }
8+
79
void SetBigEndian(bool enabled = true);
810

911
List<string> GetMemoryDomainList();

src/BizHawk.Client.Common/lua/LuaHelperLibs/MainMemoryLuaLibrary.cs

Lines changed: 41 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -11,38 +11,22 @@ namespace BizHawk.Client.Common
1111
[Description("Main memory library reads and writes from the Main memory domain (the default memory domain set by any given core)")]
1212
public sealed class MainMemoryLuaLibrary : LuaLibraryBase
1313
{
14-
[RequiredService]
15-
private IEmulator Emulator { get; set; }
16-
17-
[OptionalService]
18-
private IMemoryDomains MemoryDomainCore { get; set; }
19-
2014
public MainMemoryLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
2115
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
2216

2317
public override string Name => "mainmemory";
2418

25-
private MemoryDomain Domain
26-
{
27-
get
28-
{
29-
if (MemoryDomainCore != null)
30-
{
31-
return MemoryDomainCore.MainMemory;
32-
}
19+
private MemoryDomain _mainMemDomain;
3320

34-
var error = $"Error: {Emulator.Attributes().CoreName} does not implement memory domains";
35-
Log(error);
36-
throw new NotImplementedException(error);
37-
}
38-
}
21+
private string _mainMemName;
22+
23+
private MemoryDomain Domain => _mainMemDomain ??= ((MemoryApi) APIs.Memory).DomainList[MainMemName];
24+
25+
private string MainMemName => _mainMemName ??= APIs.Memory.MainMemoryName;
3926

4027
[LuaMethodExample("local stmaiget = mainmemory.getname( );")]
4128
[LuaMethod("getname", "returns the name of the domain defined as main memory for the given core")]
42-
public string GetName()
43-
{
44-
return Domain.Name;
45-
}
29+
public string GetName() => MainMemName;
4630

4731
[LuaMethodExample("local uimaiget = mainmemory.getcurrentmemorydomainsize( );")]
4832
[LuaMethod("getcurrentmemorydomainsize", "Returns the number of bytes of the domain defined as main memory")]
@@ -53,18 +37,15 @@ public uint GetSize()
5337

5438
[LuaMethodExample("local uimairea = mainmemory.readbyte( 0x100 );")]
5539
[LuaMethod("readbyte", "gets the value from the given address as an unsigned byte")]
56-
public uint ReadByte(int addr) => APIs.Memory.ReadByte(addr, Domain.Name);
40+
public uint ReadByte(int addr) => APIs.Memory.ReadByte(addr, MainMemName);
5741

5842
[LuaMethodExample("mainmemory.writebyte( 0x100, 1000 );")]
5943
[LuaMethod("writebyte", "Writes the given value to the given address as an unsigned byte")]
60-
public void WriteByte(int addr, uint value) => APIs.Memory.WriteByte(addr, value, Domain.Name);
44+
public void WriteByte(int addr, uint value) => APIs.Memory.WriteByte(addr, value, MainMemName);
6145

6246
[LuaMethodExample("local nlmairea = mainmemory.readbyterange( 0x100, 64 );")]
6347
[LuaMethod("readbyterange", "Reads the address range that starts from address, and is length long. Returns the result into a table of key value pairs (where the address is the key).")]
64-
public LuaTable ReadByteRange(int addr, int length)
65-
{
66-
return _th.ListToTable(APIs.Memory.ReadByteRange(addr, length, Domain.Name));
67-
}
48+
public LuaTable ReadByteRange(int addr, int length) => _th.ListToTable(APIs.Memory.ReadByteRange(addr, length, MainMemName));
6849

6950
/// <remarks>TODO C# version requires a contiguous address range</remarks>
7051
[LuaMethodExample("")]
@@ -74,7 +55,7 @@ public void WriteByteRange(LuaTable memoryblock)
7455
#if true
7556
foreach (var (addr, v) in _th.EnumerateEntries<double, double>(memoryblock))
7657
{
77-
APIs.Memory.WriteByte(LuaInt(addr), (uint) v, Domain.Name);
58+
APIs.Memory.WriteByte(LuaInt(addr), (uint) v, MainMemName);
7859
}
7960
#else
8061
var d = Domain;
@@ -105,223 +86,223 @@ public void WriteByteRange(LuaTable memoryblock)
10586
public float ReadFloat(int addr, bool bigendian)
10687
{
10788
APIs.Memory.SetBigEndian(bigendian);
108-
return APIs.Memory.ReadFloat(addr, Domain.Name);
89+
return APIs.Memory.ReadFloat(addr, MainMemName);
10990
}
11091

11192
[LuaMethodExample("mainmemory.writefloat( 0x100, 10.0, false );")]
11293
[LuaMethod("writefloat", "Writes the given 32-bit float value to the given address and endian")]
11394
public void WriteFloat(int addr, double value, bool bigendian)
11495
{
11596
APIs.Memory.SetBigEndian(bigendian);
116-
APIs.Memory.WriteFloat(addr, value, Domain.Name);
97+
APIs.Memory.WriteFloat(addr, value, MainMemName);
11798
}
11899

119100
[LuaMethodExample("local inmairea = mainmemory.read_s8( 0x100 );")]
120101
[LuaMethod("read_s8", "read signed byte")]
121-
public int ReadS8(int addr) => APIs.Memory.ReadS8(addr, Domain.Name);
102+
public int ReadS8(int addr) => APIs.Memory.ReadS8(addr, MainMemName);
122103

123104
[LuaMethodExample("mainmemory.write_s8( 0x100, 1000 );")]
124105
[LuaMethod("write_s8", "write signed byte")]
125-
public void WriteS8(int addr, uint value) => APIs.Memory.WriteS8(addr, unchecked((int) value), Domain.Name);
106+
public void WriteS8(int addr, uint value) => APIs.Memory.WriteS8(addr, unchecked((int) value), MainMemName);
126107

127108
[LuaMethodExample("local uimairea = mainmemory.read_u8( 0x100 );")]
128109
[LuaMethod("read_u8", "read unsigned byte")]
129-
public uint ReadU8(int addr) => APIs.Memory.ReadU8(addr, Domain.Name);
110+
public uint ReadU8(int addr) => APIs.Memory.ReadU8(addr, MainMemName);
130111

131112
[LuaMethodExample("mainmemory.write_u8( 0x100, 1000 );")]
132113
[LuaMethod("write_u8", "write unsigned byte")]
133-
public void WriteU8(int addr, uint value) => APIs.Memory.WriteU8(addr, value, Domain.Name);
114+
public void WriteU8(int addr, uint value) => APIs.Memory.WriteU8(addr, value, MainMemName);
134115

135116
[LuaMethodExample("local inmairea = mainmemory.read_s16_le( 0x100 );")]
136117
[LuaMethod("read_s16_le", "read signed 2 byte value, little endian")]
137118
public int ReadS16Little(int addr)
138119
{
139120
APIs.Memory.SetBigEndian(false);
140-
return APIs.Memory.ReadS16(addr, Domain.Name);
121+
return APIs.Memory.ReadS16(addr, MainMemName);
141122
}
142123

143124
[LuaMethodExample("mainmemory.write_s16_le( 0x100, -1000 );")]
144125
[LuaMethod("write_s16_le", "write signed 2 byte value, little endian")]
145126
public void WriteS16Little(int addr, int value)
146127
{
147128
APIs.Memory.SetBigEndian(false);
148-
APIs.Memory.WriteS16(addr, value, Domain.Name);
129+
APIs.Memory.WriteS16(addr, value, MainMemName);
149130
}
150131

151132
[LuaMethodExample("local inmairea = mainmemory.read_s16_be( 0x100 );")]
152133
[LuaMethod("read_s16_be", "read signed 2 byte value, big endian")]
153134
public int ReadS16Big(int addr)
154135
{
155136
APIs.Memory.SetBigEndian();
156-
return APIs.Memory.ReadS16(addr, Domain.Name);
137+
return APIs.Memory.ReadS16(addr, MainMemName);
157138
}
158139

159140
[LuaMethodExample("mainmemory.write_s16_be( 0x100, -1000 );")]
160141
[LuaMethod("write_s16_be", "write signed 2 byte value, big endian")]
161142
public void WriteS16Big(int addr, int value)
162143
{
163144
APIs.Memory.SetBigEndian();
164-
APIs.Memory.WriteS16(addr, value, Domain.Name);
145+
APIs.Memory.WriteS16(addr, value, MainMemName);
165146
}
166147

167148
[LuaMethodExample("local uimairea = mainmemory.read_u16_le( 0x100 );")]
168149
[LuaMethod("read_u16_le", "read unsigned 2 byte value, little endian")]
169150
public uint ReadU16Little(int addr)
170151
{
171152
APIs.Memory.SetBigEndian(false);
172-
return APIs.Memory.ReadU16(addr, Domain.Name);
153+
return APIs.Memory.ReadU16(addr, MainMemName);
173154
}
174155

175156
[LuaMethodExample("mainmemory.write_u16_le( 0x100, 1000 );")]
176157
[LuaMethod("write_u16_le", "write unsigned 2 byte value, little endian")]
177158
public void WriteU16Little(int addr, uint value)
178159
{
179160
APIs.Memory.SetBigEndian(false);
180-
APIs.Memory.WriteU16(addr, value, Domain.Name);
161+
APIs.Memory.WriteU16(addr, value, MainMemName);
181162
}
182163

183164
[LuaMethodExample("local uimairea = mainmemory.read_u16_be( 0x100 );")]
184165
[LuaMethod("read_u16_be", "read unsigned 2 byte value, big endian")]
185166
public uint ReadU16Big(int addr)
186167
{
187168
APIs.Memory.SetBigEndian();
188-
return APIs.Memory.ReadU16(addr, Domain.Name);
169+
return APIs.Memory.ReadU16(addr, MainMemName);
189170
}
190171

191172
[LuaMethodExample("mainmemory.write_u16_be( 0x100, 1000 );")]
192173
[LuaMethod("write_u16_be", "write unsigned 2 byte value, big endian")]
193174
public void WriteU16Big(int addr, uint value)
194175
{
195176
APIs.Memory.SetBigEndian();
196-
APIs.Memory.WriteU16(addr, value, Domain.Name);
177+
APIs.Memory.WriteU16(addr, value, MainMemName);
197178
}
198179

199180
[LuaMethodExample("local inmairea = mainmemory.read_s24_le( 0x100 );")]
200181
[LuaMethod("read_s24_le", "read signed 24 bit value, little endian")]
201182
public int ReadS24Little(int addr)
202183
{
203184
APIs.Memory.SetBigEndian(false);
204-
return APIs.Memory.ReadS24(addr, Domain.Name);
185+
return APIs.Memory.ReadS24(addr, MainMemName);
205186
}
206187

207188
[LuaMethodExample("mainmemory.write_s24_le( 0x100, -1000 );")]
208189
[LuaMethod("write_s24_le", "write signed 24 bit value, little endian")]
209190
public void WriteS24Little(int addr, int value)
210191
{
211192
APIs.Memory.SetBigEndian(false);
212-
APIs.Memory.WriteS24(addr, value, Domain.Name);
193+
APIs.Memory.WriteS24(addr, value, MainMemName);
213194
}
214195

215196
[LuaMethodExample("local inmairea = mainmemory.read_s24_be( 0x100 );")]
216197
[LuaMethod("read_s24_be", "read signed 24 bit value, big endian")]
217198
public int ReadS24Big(int addr)
218199
{
219200
APIs.Memory.SetBigEndian();
220-
return APIs.Memory.ReadS24(addr, Domain.Name);
201+
return APIs.Memory.ReadS24(addr, MainMemName);
221202
}
222203

223204
[LuaMethodExample("mainmemory.write_s24_be( 0x100, -1000 );")]
224205
[LuaMethod("write_s24_be", "write signed 24 bit value, big endian")]
225206
public void WriteS24Big(int addr, int value)
226207
{
227208
APIs.Memory.SetBigEndian();
228-
APIs.Memory.WriteS24(addr, value, Domain.Name);
209+
APIs.Memory.WriteS24(addr, value, MainMemName);
229210
}
230211

231212
[LuaMethodExample("local uimairea = mainmemory.read_u24_le( 0x100 );")]
232213
[LuaMethod("read_u24_le", "read unsigned 24 bit value, little endian")]
233214
public uint ReadU24Little(int addr)
234215
{
235216
APIs.Memory.SetBigEndian(false);
236-
return APIs.Memory.ReadU24(addr, Domain.Name);
217+
return APIs.Memory.ReadU24(addr, MainMemName);
237218
}
238219

239220
[LuaMethodExample("mainmemory.write_u24_le( 0x100, 1000 );")]
240221
[LuaMethod("write_u24_le", "write unsigned 24 bit value, little endian")]
241222
public void WriteU24Little(int addr, uint value)
242223
{
243224
APIs.Memory.SetBigEndian(false);
244-
APIs.Memory.WriteU24(addr, value, Domain.Name);
225+
APIs.Memory.WriteU24(addr, value, MainMemName);
245226
}
246227

247228
[LuaMethodExample("local uimairea = mainmemory.read_u24_be( 0x100 );")]
248229
[LuaMethod("read_u24_be", "read unsigned 24 bit value, big endian")]
249230
public uint ReadU24Big(int addr)
250231
{
251232
APIs.Memory.SetBigEndian();
252-
return APIs.Memory.ReadU24(addr, Domain.Name);
233+
return APIs.Memory.ReadU24(addr, MainMemName);
253234
}
254235

255236
[LuaMethodExample("mainmemory.write_u24_be( 0x100, 1000 );")]
256237
[LuaMethod("write_u24_be", "write unsigned 24 bit value, big endian")]
257238
public void WriteU24Big(int addr, uint value)
258239
{
259240
APIs.Memory.SetBigEndian();
260-
APIs.Memory.WriteU24(addr, value, Domain.Name);
241+
APIs.Memory.WriteU24(addr, value, MainMemName);
261242
}
262243

263244
[LuaMethodExample("local inmairea = mainmemory.read_s32_le( 0x100 );")]
264245
[LuaMethod("read_s32_le", "read signed 4 byte value, little endian")]
265246
public int ReadS32Little(int addr)
266247
{
267248
APIs.Memory.SetBigEndian(false);
268-
return APIs.Memory.ReadS32(addr, Domain.Name);
249+
return APIs.Memory.ReadS32(addr, MainMemName);
269250
}
270251

271252
[LuaMethodExample("mainmemory.write_s32_le( 0x100, -1000 );")]
272253
[LuaMethod("write_s32_le", "write signed 4 byte value, little endian")]
273254
public void WriteS32Little(int addr, int value)
274255
{
275256
APIs.Memory.SetBigEndian(false);
276-
APIs.Memory.WriteS32(addr, value, Domain.Name);
257+
APIs.Memory.WriteS32(addr, value, MainMemName);
277258
}
278259

279260
[LuaMethodExample("local inmairea = mainmemory.read_s32_be( 0x100 );")]
280261
[LuaMethod("read_s32_be", "read signed 4 byte value, big endian")]
281262
public int ReadS32Big(int addr)
282263
{
283264
APIs.Memory.SetBigEndian();
284-
return APIs.Memory.ReadS32(addr, Domain.Name);
265+
return APIs.Memory.ReadS32(addr, MainMemName);
285266
}
286267

287268
[LuaMethodExample("mainmemory.write_s32_be( 0x100, -1000 );")]
288269
[LuaMethod("write_s32_be", "write signed 4 byte value, big endian")]
289270
public void WriteS32Big(int addr, int value)
290271
{
291272
APIs.Memory.SetBigEndian();
292-
APIs.Memory.WriteS32(addr, value, Domain.Name);
273+
APIs.Memory.WriteS32(addr, value, MainMemName);
293274
}
294275

295276
[LuaMethodExample("local uimairea = mainmemory.read_u32_le( 0x100 );")]
296277
[LuaMethod("read_u32_le", "read unsigned 4 byte value, little endian")]
297278
public uint ReadU32Little(int addr)
298279
{
299280
APIs.Memory.SetBigEndian(false);
300-
return APIs.Memory.ReadU32(addr, Domain.Name);
281+
return APIs.Memory.ReadU32(addr, MainMemName);
301282
}
302283

303284
[LuaMethodExample("mainmemory.write_u32_le( 0x100, 1000 );")]
304285
[LuaMethod("write_u32_le", "write unsigned 4 byte value, little endian")]
305286
public void WriteU32Little(int addr, uint value)
306287
{
307288
APIs.Memory.SetBigEndian(false);
308-
APIs.Memory.WriteU32(addr, value, Domain.Name);
289+
APIs.Memory.WriteU32(addr, value, MainMemName);
309290
}
310291

311292
[LuaMethodExample("local uimairea = mainmemory.read_u32_be( 0x100 );")]
312293
[LuaMethod("read_u32_be", "read unsigned 4 byte value, big endian")]
313294
public uint ReadU32Big(int addr)
314295
{
315296
APIs.Memory.SetBigEndian();
316-
return APIs.Memory.ReadU32(addr, Domain.Name);
297+
return APIs.Memory.ReadU32(addr, MainMemName);
317298
}
318299

319300
[LuaMethodExample("mainmemory.write_u32_be( 0x100, 1000 );")]
320301
[LuaMethod("write_u32_be", "write unsigned 4 byte value, big endian")]
321302
public void WriteU32Big(int addr, uint value)
322303
{
323304
APIs.Memory.SetBigEndian();
324-
APIs.Memory.WriteU32(addr, value, Domain.Name);
305+
APIs.Memory.WriteU32(addr, value, MainMemName);
325306
}
326307
}
327308
}

0 commit comments

Comments
 (0)