2021-11-25 21:58:29 +00:00
<!doctype html> < html lang = en class = "js csstransforms3d" >
< head >
< meta charset = utf-8 >
< meta name = viewport content = "width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" >
< meta name = generator content = "Hugo 0.89.4" >
< meta name = description content >
< link rel = "shortcut icon" href = ./images/favicon.png type = image/x-icon >
< link rel = icon href = ./images/favicon.png type = image/x-icon >
< title > Lua API reference :: Mesen Documentation< / title >
2021-11-25 22:14:05 +00:00
< link href = ./css/nucleus.css?1637878444 rel = stylesheet >
< link href = ./css/font-awesome.min.css?1637878444 rel = stylesheet >
< link href = ./css/hybrid.css?1637878444 rel = stylesheet >
< link href = ./css/featherlight.min.css?1637878444 rel = stylesheet >
< link href = ./css/perfect-scrollbar.min.css?1637878444 rel = stylesheet >
< link href = ./css/horsey.css?1637878444 rel = stylesheet >
< link href = ./css/theme.css?1637878444 rel = stylesheet >
< link href = ./css/hugo-theme.css?1637878444 rel = stylesheet >
< link href = ./css/custom.css?1637878444 rel = stylesheet >
< link href = ./css/theme-green.css?1637878444 rel = stylesheet >
< script src = ./js/jquery-2.x.min.js?1637878444 > < / script >
2021-11-25 21:58:29 +00:00
< style type = text/css > : root # header + # content > # left > # rlblock_left { display : none !important } < / style >
< / head >
< body data-url = ./apireference.html >
< nav id = sidebar >
< div id = header-wrapper >
< div id = header >
< a id = logo href = ./index.html >
< img src = ./images/MesenIcon.png >
< / a >
< / div >
< div class = searchbox >
< label for = search-by > < i class = "fa fa-search" > < / i > < / label >
< input data-search-input id = search-by type = text placeholder = Search... >
< span data-search-clear > < i class = "fa fa-close" > < / i > < / span >
< / div >
2021-11-25 22:14:05 +00:00
< script type = text/javascript src = ./js/lunr.min.js?1637878444 > < / script >
< script type = text/javascript src = ./js/horsey.js?1637878444 > < / script >
2021-11-25 21:58:29 +00:00
< script type = text/javascript > var baseurl = "" < / script >
2021-11-25 22:14:05 +00:00
< script type = text/javascript src = ./js/searchjson.js?1637878444 > < / script >
< script type = text/javascript src = ./js/search.js?1637878444 > < / script >
2021-11-25 21:58:29 +00:00
< / div >
< div class = highlightable >
< ul class = topics >
< li data-nav-id = /gettingstarted.html title = "Getting Started" class = dd-item >
< a href = ./gettingstarted.html >
Getting Started
< / a >
< / li >
< li data-nav-id = /configuration.html title = Configuration class = dd-item >
< a href = ./configuration.html >
Configuration
< / a >
< ul >
< li data-nav-id = /configuration/audio.html title = "Audio Options" class = dd-item >
< a href = ./configuration/audio.html >
Audio Options
< / a >
< / li >
< li data-nav-id = /configuration/input.html title = "Input Options" class = dd-item >
< a href = ./configuration/input.html >
Input Options
< / a >
< / li >
< li data-nav-id = /configuration/video.html title = "Video Options" class = dd-item >
< a href = ./configuration/video.html >
Video Options
< / a >
< / li >
< li data-nav-id = /configuration/emulation.html title = "Emulation Options" class = dd-item >
< a href = ./configuration/emulation.html >
Emulation Options
< / a >
< / li >
< li data-nav-id = /configuration/preferences.html title = Preferences class = dd-item >
< a href = ./configuration/preferences.html >
Preferences
< / a >
< / li >
< / ul >
< / li >
< li data-nav-id = /tools.html title = Tools class = dd-item >
< a href = ./tools.html >
Tools
< / a >
< / li >
< li data-nav-id = /debugging.html title = "Debugging Tools" class = dd-item >
< a href = ./debugging.html >
Debugging Tools
< / a >
< ul >
< li data-nav-id = /debugging/debugger.html title = Debugger class = dd-item >
< a href = ./debugging/debugger.html >
Debugger
< / a >
< / li >
< li data-nav-id = /debugging/apuviewer.html title = "APU Viewer" class = dd-item >
< a href = ./debugging/apuviewer.html >
APU Viewer
< / a >
< / li >
< li data-nav-id = /debugging/assembler.html title = Assembler class = dd-item >
< a href = ./debugging/assembler.html >
Assembler
< / a >
< / li >
< li data-nav-id = /debugging/eventviewer.html title = "Event Viewer" class = dd-item >
< a href = ./debugging/eventviewer.html >
Event Viewer
< / a >
< / li >
< li data-nav-id = /debugging/memorytools.html title = "Memory Tools" class = dd-item >
< a href = ./debugging/memorytools.html >
Memory Tools
< / a >
< / li >
< li data-nav-id = /debugging/performanceprofiler.html title = "Performance Profiler" class = dd-item >
< a href = ./debugging/performanceprofiler.html >
Performance Profiler
< / a >
< / li >
< li data-nav-id = /debugging/ppuviewer.html title = "PPU Viewer" class = dd-item >
< a href = ./debugging/ppuviewer.html >
PPU Viewer
< / a >
< / li >
< li data-nav-id = /debugging/scriptwindow.html title = "Script Window" class = dd-item >
< a href = ./debugging/scriptwindow.html >
Script Window
< / a >
< / li >
< li data-nav-id = /debugging/texthooker.html title = "Text Hooker" class = dd-item >
< a href = ./debugging/texthooker.html >
Text Hooker
< / a >
< / li >
< li data-nav-id = /debugging/tracelogger.html title = "Trace Logger" class = dd-item >
< a href = ./debugging/tracelogger.html >
Trace Logger
< / a >
< / li >
< li data-nav-id = /debugging/debuggerintegration.html title = "Integration with compilers" class = dd-item >
< a href = ./debugging/debuggerintegration.html >
Integration with compilers
< / a >
< / li >
< / ul >
< / li >
< li data-nav-id = /hdpacks.html title = "HD Packs" class = dd-item >
< a href = ./hdpacks.html >
HD Packs
< / a >
< / li >
< li data-nav-id = /apireference.html title = "Lua API reference" class = "dd-item
parent
active">
< a href = ./apireference.html >
Lua API reference
< / a >
< ul >
< li data-nav-id = /apireference/changelog.html title = Changelog class = dd-item >
< a href = ./apireference/changelog.html >
Changelog
< / a >
< / li >
< li data-nav-id = /apireference/callbacks.html title = Callbacks class = dd-item >
< a href = ./apireference/callbacks.html >
Callbacks
< / a >
< / li >
< li data-nav-id = /apireference/drawing.html title = Drawing class = dd-item >
< a href = ./apireference/drawing.html >
Drawing
< / a >
< / li >
< li data-nav-id = /apireference/emulation.html title = Emulation class = dd-item >
< a href = ./apireference/emulation.html >
Emulation
< / a >
< / li >
< li data-nav-id = /apireference/input.html title = Input class = dd-item >
< a href = ./apireference/input.html >
Input
< / a >
< / li >
< li data-nav-id = /apireference/logging.html title = Logging class = dd-item >
< a href = ./apireference/logging.html >
Logging
< / a >
< / li >
< li data-nav-id = /apireference/memoryaccess.html title = "Memory Access" class = dd-item >
< a href = ./apireference/memoryaccess.html >
Memory Access
< / a >
< / li >
< li data-nav-id = /apireference/misc.html title = Miscellaneous class = dd-item >
< a href = ./apireference/misc.html >
Miscellaneous
< / a >
< / li >
< li data-nav-id = /apireference/enums.html title = Enums class = dd-item >
< a href = ./apireference/enums.html >
Enums
< / a >
< / li >
< / ul >
< / li >
< / ul >
< section id = shortcuts >
< h3 > More< / h3 >
< ul >
< li role >
< a class = padding href = https://www.mesen.ca > < img style = vertical-align:middle src = ./images/favicon.png > < span style = display:inline;vertical-align:middle > Website< / span > < / a >
< / li >
< li role >
< a class = padding href = https://github.com/SourMesen/Mesen > < i class = "fa fa-github" > < / i > GitHub< / a >
< / li >
< / ul >
< / section >
< div id = menuspacer > < / div >
< section id = footer >
< div class = menuFooter >
< div class = donateButton > < a href = https://www.mesen.ca/Donate.php > < img src = ./images/patreon.png alt = "Become a Patron!" width = 66% height = 66% > < / a > < / div >
< div class = donateButton > < a class = bmc-button target = _blank href = https://www.mesen.ca/BuyCoffee.php > < img src = ./images/BMC-btn-logo.svg alt = Donate > < span style = margin-left:5px > Donate< / span > < / a > < / div >
Version: < b > 0.9.9< / b > < br >
Last Updated: < b > 2021-11-25< / b >
< / div >
< / section >
< / div >
< / nav >
< section id = body >
< div id = overlay > < / div >
< div class = "padding highlightable sticky-parent" >
< div class = sticky-spacer >
< div id = top-bar >
< div id = breadcrumbs itemscope itemtype = http://data-vocabulary.org/Breadcrumb >
< span id = sidebar-toggle-span >
< a href = # id = sidebar-toggle data-sidebar-toggle >
< i class = "fa fa-bars" > < / i >
< / a >
< / span >
< span id = toc-menu > < i class = "fa fa-list-alt" > < / i > < / span >
< span class = links >
< a href = ./ > Home< / a > > Lua API reference
< / span >
< / div >
< div class = progress >
< div class = wrapper >
< nav id = TableOfContents >
< ul >
< li > < a href = #changelog > Changelog< / a > < / li >
< li > < a href = #api-references > API References< / a > < / li >
< li > < a href = #additional-features > Additional features< / a >
< ul >
< li > < a href = #test-runner-mode > Test Runner Mode< / a > < / li >
< li > < a href = #luasocket > LuaSocket< / a > < / li >
< / ul >
< / li >
< / ul >
< / nav >
< / div >
< / div >
< / div >
< / div >
< div id = body-inner >
< h1 > Lua API reference< / h1 >
< p > This section documents the Mesen-specific Lua API that is available in scripts via the < a href = ./debugging/scriptwindow.html > script window< / a > .< / p >
< h2 id = changelog > Changelog< / h2 >
< p > Lua scripting is still a relatively recent feature and the API is not quite stable yet. To get a list of the major changes between different versions of Mesen, take a look at the < a href = ./apireference/changelog.html > Changelog< / a > .< / p >
< h2 id = api-references > API References< / h2 >
< ul >
< li > < a href = ./apireference/callbacks.html > Callbacks< / a > < / li >
< li > < a href = ./apireference/drawing.html > Drawing< / a > < / li >
< li > < a href = ./apireference/emulation.html > Emulation< / a > < / li >
< li > < a href = ./apireference/input.html > Input< / a > < / li >
< li > < a href = ./apireference/logging.html > Logging< / a > < / li >
< li > < a href = ./apireference/memoryaccess.html > Memory Access< / a > < / li >
< li > < a href = ./apireference/misc.html > Miscellaneous< / a > < / li >
< li > < a href = ./apireference/enums.html > Enums< / a > < / li >
< / ul >
< h2 id = additional-features > Additional features< / h2 >
< h3 id = test-runner-mode > Test Runner Mode< / h3 >
< p > Mesen can be started in a headless test runner mode that can be used to implement automated testing by using Lua scripts.< / p >
< p > To start Mesen in headless mode, use the < code > --testrunner< / code > command line option and specify both a game and a Lua script to run:< / p >
< pre tabindex = 0 > < code > Mesen.exe --testrunner MyGame.nes MyTest.lua
< / code > < / pre > < p > This will start Mesen (headless), load the game and the Lua script and start executing the game at maximum speed until the Lua script calls the < a href = ./apireference/emulation.html#stop > emu.stop()< / a > function. The < a href = ./apireference/emulation.html#stop > emu.stop()< / a > function can specify an exit code, which will be returned by the Mesen process, which can be used to validate whether the test passed or failed.< / p >
< h3 id = luasocket > LuaSocket< / h3 >
< p > The Lua implementation found in Mesen has a version of < a href = http://w3.impa.br/~diego/software/luasocket/ > LuaSocket< / a > (< a href = https://github.com/diegonehab/luasocket > GitHub< / a > ) built into it. The < code > socket< / code > and < code > mime< / code > packages are available and can be accessed by using < code > local socket = require("socket.core")< / code > and < code > local mime = require("mime.core")< / code > , respectively.< / p >
< p > See < a href = http://w3.impa.br/~diego/software/luasocket/reference.html > LuaSocket’ s documentation< / a > for more information on how to use this library.< / p >
< p > Here is a tiny TCP socket sample that connects to google.com via HTTP and downloads the page:< / p >
< pre tabindex = 0 > < code > local socket = require(" socket.core" )
local tcp = sock.tcp()
--Set a 2-second timeout for all request, otherwise the process could hang!
tcp:settimeout(2)
local res = tcp:connect(" www.google.com" , 80)
tcp:send(" GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n" )
local text
repeat
text = tcp:receive()
emu.log(text)
until text == nil
< / code > < / pre >
< footer class = footline >
< / footer >
< / div >
< / div >
< div id = navigation >
< a class = "nav nav-prev" href = ./hdpacks.html title = "HD Packs" > < i class = "fa fa-chevron-left" > < / i > < / a >
< a class = "nav nav-next" href = ./apireference/changelog.html title = Changelog style = margin-right:0 > < i class = "fa fa-chevron-right" > < / i > < / a >
< / div >
< / section >
< div style = left:-1000px;overflow:scroll;position:absolute;top:-1000px;border:none;box-sizing:content-box;height:200px;margin:0;padding:0;width:200px >
< div style = border:none;box-sizing:content-box;height:200px;margin:0;padding:0;width:200px > < / div >
< / div >
2021-11-25 22:14:05 +00:00
< script src = ./js/clipboard.min.js?1637878444 > < / script >
< script src = ./js/perfect-scrollbar.min.js?1637878444 > < / script >
< script src = ./js/perfect-scrollbar.jquery.min.js?1637878444 > < / script >
< script src = ./js/jquery.sticky-kit.min.js?1637878444 > < / script >
< script src = ./js/featherlight.min.js?1637878444 > < / script >
< script src = ./js/html5shiv-printshiv.min.js?1637878444 > < / script >
< script src = ./js/highlight.pack.js?1637878444 > < / script >
2021-11-25 21:58:29 +00:00
< script > hljs . initHighlightingOnLoad ( ) < / script >
2021-11-25 22:14:05 +00:00
< script src = ./js/modernizr.custom.71422.js?1637878444 > < / script >
< script src = ./js/learn.js?1637878444 > < / script >
< script src = ./js/hugo-learn.js?1637878444 > < / script >
< link href = ./mermaid/mermaid.css?1637878444 type = text/css rel = stylesheet >
< script src = ./mermaid/mermaid.js?1637878444 > < / script >
2021-11-25 21:58:29 +00:00
< script > mermaid . initialize ( { startOnLoad : ! 0 } ) < / script >
< / body >
< / html >