2016-08-13 2 views
1

Когда я запускаю мой код я получаю ошибку на этой линии:Lua: Read Unsigned DWORD не работает в Bizhawk Emulator

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

Некоторые другие инфор mation:
1. Я запускаю сценарий lua на эмуляторе BizHawk.
2. Если я меняю строку на memory.readbyte(), я получаю другое сообщение, которое заставляет меня полагать, что консоль не распознает memory.readdwordunsigned() как funciton.
3. Скрипт находится в той же папке, что и исполняемый файл для эмулятора.

Заранее спасибо за любую помощь

+0

Просто прочитайте http://tasvideos.org/Bizhawk/LuaFunctions.html быстро. Нет такой функции. Возможно, это было сделано для старой версии эмулятора. Похоже, вы должны заменить его вызовом на одну из операций 'memory.read_? '. Я не знаю достаточно о платформе, чтобы рассказать вам размер или сущность слова. – ktb

+0

А, я волновался, что так будет. Я попробую функции на этой странице сделать еще несколько исследований в надежде найти ответ. Если я не могу, я могу просто загрузить старую версию эмулятора. Спасибо за помощь! –

ответ

1

Оказывается, что поддержка memory.readdwordunsigned() больше не поддерживается в BizHawk Emulator. После обширных исследований и помощи от комментария, опубликованного по моему вопросу, мне удалось найти рабочую альтернативу: memory.usememorydomain("System Bus") personality=memory.read_u32_le(0x02024744)

Для всех, кто нашел этот ответ полезным, обратите внимание, что dword не имеет знака и 4 байта, следовательно использование u32, поскольку dword - 32 бит и без знака. Например, если вы хотите использовать подписанный байт, вместо этого вы должны использовать s8. le означает маленький энтинец, be можно использовать вместо этого для большого эндиена.

Важно указать область памяти перед попыткой чтения из памяти, так как область памяти, которую я использовал (IWRAM), а также все другие области памяти, кроме системной шины, выдает эту ошибку из-за размера адрес памяти.