Lua: чтение неподписанного DWORD не работает в эмуляторе Bizhawk
Когда я запускаю свой код, я получаю сообщение об ошибке в этой строке:
personality = memory.readdwordunsigned(0x02024744)
Это сообщение об ошибке, которое мне выдает консоль:
LuaInterface.LuaScriptException: [string "main"]:26: attempt to call field 'readdwordunsigned' (a nil value)
Некоторое время я проводил некоторые тесты и исследования, и не могу заставить его работать, несмотря на то, что эта концепция используется в нескольких других проектах, таких как этот: https://projectpokemon.org/forums/showthread.php?16681-Gen-3-Lua-Scripts
Некоторая другая информация:
1. Я запускаю скрипт lua на эмуляторе BizHawk.
2. если я изменяю строку на memory.readbyte(), я получаю другое сообщение, которое заставляет меня поверить, что консоль не распознает memory.readdwordunsigned() как функцию.
3. Сценарий находится в той же папке, что и исполняемый файл для эмулятора.
Спасибо заранее за любую помощь
1 ответ
Оказывается, что поддержка memory.readdwordunsigned() больше не поддерживается в эмуляторе BizHawk. После обширных исследований и помощи в комментариях к моему вопросу мне удалось найти работающую альтернативу:memory.usememorydomain("System Bus")
personality=memory.read_u32_le(0x02024744)
Для тех, кто считает этот ответ полезным, обратите внимание, что dword не имеет знака и имеет размер 4 байта, следовательно, использование u32
потому что меч 32 бита и без знака. Например, если вы хотите использовать подписанный байт, вы должны использовать s8
вместо. le
означает мало эндиен, be
вместо этого можно использовать для большого эндиена.
Важно указать область памяти перед попыткой чтения из памяти, поскольку область памяти, которую я использовал (IWRAM), а также все другие области памяти, за исключением системной шины, приводили к этой ошибке из-за размера адреса памяти.