Skip to content

Commit

Permalink
Add write_u16 function
Browse files Browse the repository at this point in the history
  • Loading branch information
JamesDunne committed Oct 11, 2019
1 parent bbedb8a commit eceb69b
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions bsnes/sfc/interface/script-interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,16 @@ struct ScriptInterface {
Memory::GlobalWriteEnable = false;
}

static auto write_u16(uint32 addr0, uint32 addr1, uint16 data) -> void {
Memory::GlobalWriteEnable = true;
{
// prevent scripts from intercepting their own writes:
::SuperFamicom::bus.write_no_intercept(addr0, data & 0x00FFu);
::SuperFamicom::bus.write_no_intercept(addr1, (data >> 8u) & 0x00FFu);
}
Memory::GlobalWriteEnable = false;
}

static auto write_block_u8(uint32 addr, uint offs, uint16 size, CScriptArray *input) -> void {
if (input == nullptr) {
asGetActiveContext()->SetException("input array cannot be null", true);
Expand Down Expand Up @@ -1413,11 +1423,16 @@ auto Interface::registerScriptDefs() -> void {
// default bus memory functions:
{
r = script.engine->SetDefaultNamespace("bus"); assert(r >= 0);

// read functions:
r = script.engine->RegisterGlobalFunction("uint8 read_u8(uint32 addr)", asFUNCTION(ScriptInterface::Bus::read_u8), asCALL_CDECL); assert(r >= 0);
r = script.engine->RegisterGlobalFunction("uint16 read_u16(uint32 addr0, uint32 addr1)", asFUNCTION(ScriptInterface::Bus::read_u16), asCALL_CDECL); assert(r >= 0);
r = script.engine->RegisterGlobalFunction("void read_block_u8(uint32 addr, uint offs, uint16 size, const array<uint8> &in output)", asFUNCTION(ScriptInterface::Bus::read_block_u8), asCALL_CDECL); assert(r >= 0);
r = script.engine->RegisterGlobalFunction("void read_block_u16(uint32 addr, uint offs, uint16 size, const array<uint16> &in output)", asFUNCTION(ScriptInterface::Bus::read_block_u16), asCALL_CDECL); assert(r >= 0);

// write functions:
r = script.engine->RegisterGlobalFunction("void write_u8(uint32 addr, uint8 data)", asFUNCTION(ScriptInterface::Bus::write_u8), asCALL_CDECL); assert(r >= 0);
r = script.engine->RegisterGlobalFunction("void write_u16(uint32 addr0, uint32 addr1, uint16 data)", asFUNCTION(ScriptInterface::Bus::write_u16), asCALL_CDECL); assert(r >= 0);
r = script.engine->RegisterGlobalFunction("void write_block_u8(uint32 addr, uint offs, uint16 size, const array<uint8> &in output)", asFUNCTION(ScriptInterface::Bus::write_block_u8), asCALL_CDECL); assert(r >= 0);
r = script.engine->RegisterGlobalFunction("void write_block_u16(uint32 addr, uint offs, uint16 size, const array<uint16> &in output)", asFUNCTION(ScriptInterface::Bus::write_block_u16), asCALL_CDECL); assert(r >= 0);

Expand Down

0 comments on commit eceb69b

Please sign in to comment.