Skip to content

Commit cebdc4d

Browse files
author
gochaism
committed
Lua: add memory.registerread()
1 parent 71133f2 commit cebdc4d

File tree

5 files changed

+81
-11
lines changed

5 files changed

+81
-11
lines changed

src/common/lua-engine.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4457,7 +4457,7 @@ static const struct luaL_reg memorylib[] = {
44574457

44584458
// memory hooks
44594459
{ "registerwrite", memory_registerwrite },
4460-
//{"registerread", memory_registerread},
4460+
{ "registerread", memory_registerread },
44614461
{ "registerexec", memory_registerexec },
44624462
// alternate names
44634463
{ "register", memory_registerwrite },

src/gb/V7/GB.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1280,7 +1280,7 @@ void gbWriteMemory(register u16 address, register u8 value)
12801280
CallRegisteredLuaMemHook(address, 1, value, LUAMEMHOOK_WRITE);
12811281
}
12821282

1283-
u8 gbReadMemory(register u16 address)
1283+
u8 gbReadMemoryWrapped(register u16 address)
12841284
{
12851285
if (gbCheatMap[address])
12861286
return gbCheatRead(address);
@@ -1459,6 +1459,13 @@ u8 gbReadMemory(register u16 address)
14591459
return gbReadMemoryQuick(address);
14601460
}
14611461

1462+
u8 gbReadMemory(register u16 address)
1463+
{
1464+
u8 value = gbReadMemoryWrapped(address);
1465+
CallRegisteredLuaMemHook(address, 1, value, LUAMEMHOOK_READ);
1466+
return value;
1467+
}
1468+
14621469
void gbVblank_interrupt()
14631470
{
14641471
if (IFF & 0x80)

src/gb/V8/GB.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1839,7 +1839,7 @@ u8 gbReadOpcode(register u16 address)
18391839
return gbMemoryMap[address >> 12][address & 0x0fff];
18401840
}
18411841

1842-
u8 gbReadMemory(register u16 address)
1842+
u8 gbReadMemoryWrapped(register u16 address)
18431843
{
18441844
if (gbCheatMap[address])
18451845
return gbCheatRead(address);
@@ -2134,6 +2134,13 @@ u8 gbReadMemory(register u16 address)
21342134
return gbMemoryMap[address >> 12][address & 0x0fff];
21352135
}
21362136

2137+
u8 gbReadMemory(register u16 address)
2138+
{
2139+
u8 value = gbReadMemoryWrapped(address);
2140+
CallRegisteredLuaMemHook(address, 1, value, LUAMEMHOOK_READ);
2141+
return value;
2142+
}
2143+
21372144
void gbVblank_interrupt()
21382145
{
21392146
gbCheatWrite(false); // Emulates GS codes.

src/gba/V7/GBAMemory.cpp

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ extern int32 cpuDmaCount;
3232

3333
MemoryMap memoryMap[256];
3434

35-
u32 CPUReadMemory(u32 address)
35+
u32 CPUReadMemoryWrapped(u32 address)
3636
{
3737
#ifdef GBA_LOGGING
3838
if (address & 3)
@@ -171,7 +171,7 @@ u32 CPUReadMemory(u32 address)
171171
return value;
172172
}
173173

174-
u32 CPUReadHalfWord(u32 address)
174+
u32 CPUReadHalfWordWrapped(u32 address)
175175
{
176176
#ifdef GBA_LOGGING
177177
if (address & 1)
@@ -292,15 +292,15 @@ u32 CPUReadHalfWord(u32 address)
292292
return value;
293293
}
294294

295-
u16 CPUReadHalfWordSigned(u32 address)
295+
u16 CPUReadHalfWordSignedWrapped(u32 address)
296296
{
297297
u16 value = CPUReadHalfWord(address);
298298
if ((address & 1))
299299
value = (s8)value;
300300
return value;
301301
}
302302

303-
u8 CPUReadByte(u32 address)
303+
u8 CPUReadByteWrapped(u32 address)
304304
{
305305
switch (address >> 24)
306306
{
@@ -723,3 +723,31 @@ void CPUWriteByte(u32 address, u8 b)
723723
CPUWriteByteWrapped(address, b);
724724
CallRegisteredLuaMemHook(address, 1, b, LUAMEMHOOK_WRITE);
725725
}
726+
727+
u32 CPUReadMemory(u32 address)
728+
{
729+
u32 value = CPUReadMemoryWrapped(address);
730+
CallRegisteredLuaMemHook(address, 4, value, LUAMEMHOOK_READ);
731+
return value;
732+
}
733+
734+
u32 CPUReadHalfWord(u32 address)
735+
{
736+
u32 value = CPUReadHalfWordWrapped(address);
737+
CallRegisteredLuaMemHook(address, 4, value, LUAMEMHOOK_READ);
738+
return value;
739+
}
740+
741+
u16 CPUReadHalfWordSigned(u32 address)
742+
{
743+
u16 value = CPUReadHalfWordSignedWrapped(address);
744+
CallRegisteredLuaMemHook(address, 2, value, LUAMEMHOOK_READ);
745+
return value;
746+
}
747+
748+
u8 CPUReadByte(u32 address)
749+
{
750+
u8 value = CPUReadByteWrapped(address);
751+
CallRegisteredLuaMemHook(address, 1, value, LUAMEMHOOK_READ);
752+
return value;
753+
}

src/gba/V8/GBAMemory.cpp

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ extern const u32 objTilesAddress[3];
121121

122122
MemoryMap memoryMap[256];
123123

124-
u32 CPUReadMemory(u32 address)
124+
u32 CPUReadMemoryWrapped(u32 address)
125125
{
126126
#ifdef GBA_LOGGING
127127
if (address & 3)
@@ -270,7 +270,7 @@ u32 CPUReadMemory(u32 address)
270270
return value;
271271
}
272272

273-
u32 CPUReadHalfWord(u32 address)
273+
u32 CPUReadHalfWordWrapped(u32 address)
274274
{
275275
#ifdef GBA_LOGGING
276276
if (address & 1)
@@ -409,15 +409,15 @@ u32 CPUReadHalfWord(u32 address)
409409
return value;
410410
}
411411

412-
u16 CPUReadHalfWordSigned(u32 address)
412+
u16 CPUReadHalfWordSignedWrapped(u32 address)
413413
{
414414
u16 value = CPUReadHalfWord(address);
415415
if ((address & 1))
416416
value = (s8)value;
417417
return value;
418418
}
419419

420-
u8 CPUReadByte(u32 address)
420+
u8 CPUReadByteWrapped(u32 address)
421421
{
422422
switch (address >> 24)
423423
{
@@ -918,3 +918,31 @@ void CPUWriteByte(u32 address, u8 b)
918918
CPUWriteByteWrapped(address, b);
919919
CallRegisteredLuaMemHook(address, 1, b, LUAMEMHOOK_WRITE);
920920
}
921+
922+
u32 CPUReadMemory(u32 address)
923+
{
924+
u32 value = CPUReadMemoryWrapped(address);
925+
CallRegisteredLuaMemHook(address, 4, value, LUAMEMHOOK_READ);
926+
return value;
927+
}
928+
929+
u32 CPUReadHalfWord(u32 address)
930+
{
931+
u32 value = CPUReadHalfWordWrapped(address);
932+
CallRegisteredLuaMemHook(address, 4, value, LUAMEMHOOK_READ);
933+
return value;
934+
}
935+
936+
u16 CPUReadHalfWordSigned(u32 address)
937+
{
938+
u16 value = CPUReadHalfWordSignedWrapped(address);
939+
CallRegisteredLuaMemHook(address, 2, value, LUAMEMHOOK_READ);
940+
return value;
941+
}
942+
943+
u8 CPUReadByte(u32 address)
944+
{
945+
u8 value = CPUReadByteWrapped(address);
946+
CallRegisteredLuaMemHook(address, 1, value, LUAMEMHOOK_READ);
947+
return value;
948+
}

0 commit comments

Comments
 (0)