mirror of
https://github.com/holub/mame
synced 2025-05-03 21:13:18 +03:00

More Lua interface cleanup, additional properties and methods, and documentation migration/expansion. Emulated switch inputs can have "not" codes applied to host input axis directions. It works the same way as host switch inputs - push twice for a "not" prefix. Input polling helpers no longer need to store state in the input device items. There’s less leakage, and less chance of things interfering with each other. Allow snapshot view options to be configured through the internal UI via the video options menu. Made video options menus place initial focus on the currently selected view item. Removed some crud from the menu base class. Fixed the description of the "snapview" option. The value to get raw screen pixels was changed to "native" a long time ago but the description was never updated. Re-arranged the Golden Poker button lamps so that the 6-button layouts for Jolli Witch and Wild Witch make sense. In 6-button mode, the hold buttons double as bonus game and bet buttons, but the lamp outputs don't change. The simplest way to deal with this without requiring the user to switch views or using layout scripting is to place the dedicated buttons directly below the hold buttons that correspond to them. Removed some software list data that was redundantly copied into device_image_interface (m_supported was never even set, so it didn't even work), and made crc() work better (previously it wasn't recalculuated after unloading and loading another image). Made strformat.h and devcb.h play nicer with C++17 and pre-standard C++20. Format precision now correctly limits the length of string views. Confirmed that strformat.{h,cpp} works with pre-standard C++20 support in GCC 9. Removed an auto_alloc from cpu/arm7.
2372 lines
89 KiB
ReStructuredText
2372 lines
89 KiB
ReStructuredText
.. _luareference:
|
||
|
||
MAME Lua Class Reference
|
||
========================
|
||
|
||
.. contents::
|
||
:local:
|
||
:depth: 2
|
||
|
||
|
||
.. _luareference-intro:
|
||
|
||
Introduction
|
||
------------
|
||
|
||
Various aspects of MAME can be controlled using Lua scripting. Many key classes
|
||
are exposed as Lua objects.
|
||
|
||
.. _luareference-intro-containers:
|
||
|
||
Containers
|
||
~~~~~~~~~~
|
||
|
||
Many properties yield container wrappers. Container wrappers are cheap to
|
||
create, and provide an interface that is similar to a read-only table. The
|
||
complexity of operations may vary. Container wrappers usually provide most of
|
||
these operations:
|
||
|
||
#c
|
||
Get the number of items in the container.
|
||
c[k]
|
||
Returns the item corresponding to the key ``k``, or ``nil`` if the key is
|
||
not present.
|
||
pairs(c)
|
||
Iterate container by key and value. The key is what you would pass to the
|
||
index operator or the ``get`` method to get the value.
|
||
ipairs(c)
|
||
Iterate container by index and value. The index is what you would pass to
|
||
the ``at`` method to get the value (this may be the same as the key for some
|
||
containers).
|
||
c:empty()
|
||
Returns a Boolean indicating whether there are no items in the container.
|
||
c:get(k)
|
||
Returns the item corresponding to the key ``k``, or ``nil`` if the key is
|
||
not present. Usually equivalent to the index operator.
|
||
c:at(i)
|
||
Returns the value at the 1-based index ``i``, or ``nil`` if it is out of
|
||
range.
|
||
c:find(v)
|
||
Returns the key for item ``v``, or ``nil`` if it is not in the collection.
|
||
The key is what you would pass to the index operator to get the value.
|
||
c:find(v)
|
||
Returns the key for item ``v``, or ``nil`` if it is not in the container.
|
||
The key is what you would pass to the index operator to get the value.
|
||
c:index_of(v)
|
||
Returns the 1-based index for item ``v``, or ``nil`` if it is not in the
|
||
container. The index is what you would pass to the ``at`` method to get the
|
||
value.
|
||
|
||
|
||
.. _luareference-dev:
|
||
|
||
Devices
|
||
-------
|
||
|
||
Several device classes and device mix-ins classes are exposed to Lua. Devices
|
||
can be looked up by tag or enumerated.
|
||
|
||
.. _luareference-dev-enum:
|
||
|
||
Device enumerators
|
||
~~~~~~~~~~~~~~~~~~
|
||
|
||
Device enumerators are special containers that allow iterating over devices and
|
||
looking up devices by tag. A device enumerator can be created to find any kind
|
||
of device, to find devices of a particular type, or to find devices that
|
||
implement a particular interface. When iterating using ``pairs`` or ``ipairs``,
|
||
devices are returned by walking the device tree depth-first in creation order.
|
||
|
||
The index get operator looks up a device by tag. It returns ``nil`` no device
|
||
with the specified tag is found, or if the device with the specified tag does
|
||
not meet the type/interface requirements of the device enumerator. The
|
||
complexity is O(1) if the result is cached, but an uncached device lookup is
|
||
expensive. The ``at`` method has O(n) complexity.
|
||
|
||
If you create a device enumerator with a starting point other than the root
|
||
machine device, passing an absolute tag or a tag containing parent references to
|
||
the index operator may return a device that would not be discovered by
|
||
iteration. If you create a device enumerator with restricted depth, devices
|
||
that would not be found due to being too deep in the hierarchy can still be
|
||
looked up by tag.
|
||
|
||
Creating a device enumerator with depth restricted to zero can be used to
|
||
downcast a device or test whether a device implements a certain interface. For
|
||
example this will test whether a device implements the media image interface:
|
||
|
||
.. code-block:: Lua
|
||
|
||
image_intf = emu.image_enumerator(device, 0):at(1)
|
||
if image_intf then
|
||
print(string.format("Device %s mounts images", device.tag))
|
||
end
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().devices
|
||
Returns a device enumerator that will iterate over
|
||
:ref:`devices <luareference-dev-device>` in the system.
|
||
manager:machine().screens
|
||
Returns a device enumerator that will iterate over
|
||
:ref:`screen devices <luareference-dev-screen>` in the system.
|
||
manager:machine().cassettes
|
||
Returns a device enumerator that will iterate over
|
||
:ref:`cassette devices <luareference-dev-cass>` in the system.
|
||
manager:machine().images
|
||
Returns a device enumerator that will iterate over
|
||
:ref:`media image devices <luareference-dev-diimage>` in the system.
|
||
manager:machine().slots
|
||
Returns a device enumerator that will iterate over
|
||
:ref:`slot devices <luareference-dev-dislot>` in the system.
|
||
emu.device_enumerator(device, [depth])
|
||
Returns a device enumerator that will iterate over
|
||
:ref:`devices <luareference-dev-device>` in the sub-tree starting at the
|
||
specified device. The specified device will be included. If the depth is
|
||
provided, it must be an integer specifying the maximum number of levels to
|
||
iterate below the specified device (i.e. 1 will limit iteration to the
|
||
device and its immediate children).
|
||
emu.screen_enumerator(device, [depth])
|
||
Returns a device enumerator that will iterate over
|
||
:ref:`screen devices <luareference-dev-screen>` in the sub-tree starting at
|
||
the specified device. The specified device will be included if it is a
|
||
screen device. If the depth is provided, it must be an integer specifying
|
||
the maximum number of levels to iterate below the specified device (i.e. 1
|
||
will limit iteration to the device and its immediate children).
|
||
emu.cassette_enumerator(device, [depth])
|
||
Returns a device enumerator that will iterate over
|
||
:ref:`cassette devices <luareference-dev-cass>` in the sub-tree starting at
|
||
the specified device. The specified device will be included if it is a
|
||
cassette device. If the depth is provided, it must be an integer specifying
|
||
the maximum number of levels to iterate below the specified device (i.e. 1
|
||
will limit iteration to the device and its immediate children).
|
||
emu.image_enumerator(device, [depth])
|
||
Returns a device enumerator that will iterate over
|
||
:ref:`media image devices <luareference-dev-diimage>` in the sub-tree
|
||
starting at the specified device. The specified device will be included if
|
||
it is a media image device. If the depth is provided, it must be an integer
|
||
specifying the maximum number of levels to iterate below the specified
|
||
device (i.e. 1 will limit iteration to the device and its immediate
|
||
children).
|
||
emu.slot_enumerator(device, [depth])
|
||
Returns a device enumerator that will iterate over
|
||
:ref:`slot devices <luareference-dev-dislot>` in the sub-tree starting at
|
||
the specified device. The specified device will be included if it is a
|
||
slot device. If the depth is provided, it must be an integer specifying the
|
||
maximum number of levels to iterate below the specified device (i.e. 1 will
|
||
limit iteration to the device and its immediate children).
|
||
|
||
.. _luareference-dev-device:
|
||
|
||
Device
|
||
~~~~~~
|
||
|
||
Wraps MAME’s ``device_t`` class, which is a base of all device classes.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().devices[tag]
|
||
Gets a device by tag relative to the root machine device, or ``nil`` if no
|
||
such device exists.
|
||
manager:machine().devices[tag]:subdevice(tag)
|
||
Gets a device by tag relative to another arbitrary device, or ``nil`` if no
|
||
such device exists.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
device:subtag(tag)
|
||
Converts a tag relative to the device to an absolute tag.
|
||
device:siblingtag(tag)
|
||
Converts a tag relative to the device’s parent device to an absolute tag.
|
||
device:memshare(tag)
|
||
Gets a :ref:`memory share <luareference-mem-share>` by tag relative to the
|
||
device, or ``nil`` if no such memory share exists.
|
||
device:membank(tag)
|
||
Gets a :ref:`memory bank <luareference-mem-bank>` by tag relative to the
|
||
device, or ``nil`` if no such memory bank exists.
|
||
device:memregion(tag)
|
||
Gets a :ref:`memory region <luareference-mem-region>` by tag relative to the
|
||
device, or ``nil`` if no such memory region exists.
|
||
device:ioport(tag)
|
||
Gets an :ref:`I/O port <luareference-input-ioport>` by tag relative to the
|
||
device, or ``nil`` if no such I/O port exists.
|
||
device:subdevice(tag)
|
||
Gets a device by tag relative to the device.
|
||
device:siblingdevice(tag)
|
||
Gets a device by tag relative to the device’s parent.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
device.tag (read-only)
|
||
The device’s absolute tag in canonical form.
|
||
device.basetag (read-only)
|
||
The last component of the device’s tag (i.e. its tag relative to its
|
||
immediate parent), or ``"root"`` for the root machine device.
|
||
device.name (read-only)
|
||
The full display name for the device’s type.
|
||
device.shortname (read-only)
|
||
The short name of the devices type (this is used, e.g. on the command line,
|
||
when looking for resource like ROMs or artwork, and in various data files).
|
||
device.owner (read-only)
|
||
The device’s immediate parent in the device tree, or ``nil`` for the root
|
||
machine device.
|
||
device.configured (read-only)
|
||
A Boolean indicating whether the device has completed configuration.
|
||
device.started (read-only)
|
||
A Boolean indicating whether the device has completed starting.
|
||
device.debug (read-only)
|
||
The :ref:`debugger interface <luareference-debug-devdebug>` to the device if
|
||
it is a CPU device, or ``nil`` if it is not a CPU device or the debugger is
|
||
not enabled.
|
||
device.spaces[] (read-only)
|
||
A table of the device’s :ref:`address spaces <luareference-mem-space>`,
|
||
indexed by name. Only valid for devices that implement the memory
|
||
interface. Note that the names are specific to the device type and have no
|
||
special significance.
|
||
|
||
.. _luareference-dev-screen:
|
||
|
||
Screen device
|
||
~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``screen_device`` class, which represents an emulated video output.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().screens[tag]
|
||
Gets a screen device by tag relative to the root machine device, or ``nil``
|
||
if no such device exists or it is not a screen device.
|
||
|
||
Base classes
|
||
^^^^^^^^^^^^
|
||
|
||
* :ref:`luareference-dev-device`
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
screen:orientation()
|
||
Returns the rotation angle in degrees (will be one of 0, 90, 180 or 270),
|
||
whether the screen is flipped left-to-right, and whether the screen is
|
||
flipped top-to-bottom.
|
||
screen:time_until_pos(v, [h])
|
||
Gets the time remaining until the raster reaches the specified position. If
|
||
the horizontal component of the position is not specified, it defaults to
|
||
zero (0, i.e. the beginning of the line). The result is a floating-point
|
||
number in units of seconds.
|
||
screen:time_until_vblank_start()
|
||
Gets the time remaining until the start of the vertical blanking interval.
|
||
The result is a floating-point number in units of seconds.
|
||
screen:time_until_vblank_end()
|
||
Gets the time remaining until the end of the vertical blanking interval.
|
||
The result is a floating-point number in units of seconds.
|
||
screen:snapshot([filename])
|
||
Saves a screen snapshot in PNG format. If no filename is supplied, the
|
||
configured snapshot path and name format will be used. If the supplied
|
||
filename is not an absolute path, it is interpreted relative to the first
|
||
configured snapshot path. The filename may contain conversion specifiers
|
||
that will be replaced by the system name or an incrementing number.
|
||
|
||
Returns a file error if opening the snapshot file failed, or ``nil``
|
||
otherwise.
|
||
screen:pixel(x, y)
|
||
Gets the pixel at the specified location. Coordinates are in pixels, with
|
||
the origin at the top left corner of the visible area, increasing to the
|
||
right and down. Returns either a palette index or a colour in RGB format
|
||
packed into a 32-bit integer. Returns zero (0) if the specified point is
|
||
outside the visible area.
|
||
screen:pixels()
|
||
Returns all visible pixels as 32-bit integers packed into a binary string in
|
||
host Endian order. Pixels are organised in row-major order, from left to
|
||
right then top to bottom. Pixels values are either palette indices or
|
||
colours in RGB format packed into 32-bit integers.
|
||
screen:draw_box(left, top, right, bottom, [line], [fill])
|
||
Draws an outlined rectangle with edges at the specified positions.
|
||
|
||
Coordinates are floating-point numbers in units of screen pixels, with the
|
||
origin at (0, 0). Note that screen pixels often aren’t square. The
|
||
coordinate system is rotated if the screen is rotated, which is usually the
|
||
case for vertical-format screens. Before rotation, the origin is at the top
|
||
left, and coordinates increase to the right and downwards. Coordinates are
|
||
limited to the screen area.
|
||
|
||
The fill and line colours are in alpha/red/green/blue (ARGB) format.
|
||
Channel values are in the range 0 (transparent or off) to 255 (opaque or
|
||
full intensity), inclusive. Colour channel values are not pre-multiplied by
|
||
the alpha value. The channel values must be packed into the bytes of a
|
||
32-bit unsigned integer, in the order alpha, red, green, blue from
|
||
most-significant to least-significant byte. If the line colour is not
|
||
provided, the UI text colour is used; if the fill colour is not provided,
|
||
the UI background colour is used.
|
||
screen:draw_line(x1, y1, x2, y2, bottom, [color])
|
||
Draws a line from (x1, y1) to (x2, y2).
|
||
|
||
Coordinates are floating-point numbers in units of screen pixels, with the
|
||
origin at (0, 0). Note that screen pixels often aren’t square. The
|
||
coordinate system is rotated if the screen is rotated, which is usually the
|
||
case for vertical-format screens. Before rotation, the origin is at the top
|
||
left, and coordinates increase to the right and downwards. Coordinates are
|
||
limited to the screen area.
|
||
|
||
The line colour is in alpha/red/green/blue (ARGB) format. Channel values
|
||
are in the range 0 (transparent or off) to 255 (opaque or full intensity),
|
||
inclusive. Colour channel values are not pre-multiplied by the alpha value.
|
||
The channel values must be packed into the bytes of a 32-bit unsigned
|
||
integer, in the order alpha, red, green, blue from most-significant to
|
||
least-significant byte. If the line colour is not provided, the UI text
|
||
colour is used.
|
||
screen:draw_text(x|justify, y, text, [foreground], [background])
|
||
Draws text at the specified position. If the screen is rotated the text
|
||
will be rotated.
|
||
|
||
If the first argument is a number, the text will be left-aligned at this X
|
||
coordinate. If the first argument is a string, it must be ``"left"``,
|
||
``"center"`` or ``"right"`` to draw the text left-aligned at the
|
||
left edge of the screen, horizontally centred on the screen, or
|
||
right-aligned at the right edge of the screen, respectively. The second
|
||
argument specifies the Y coordinate of the maximum ascent of the text.
|
||
|
||
Coordinates are floating-point numbers in units of screen pixels, with the
|
||
origin at (0, 0). Note that screen pixels often aren’t square. The
|
||
coordinate system is rotated if the screen is rotated, which is usually the
|
||
case for vertical-format screens. Before rotation, the origin is at the top
|
||
left, and coordinates increase to the right and downwards. Coordinates are
|
||
limited to the screen area.
|
||
|
||
The foreground and background colours is in alpha/red/green/blue (ARGB)
|
||
format. Channel values are in the range 0 (transparent or off) to 255 (opaque or full intensity),
|
||
inclusive. Colour channel values are not pre-multiplied by the alpha value.
|
||
The channel values must be packed into the bytes of a 32-bit unsigned
|
||
integer, in the order alpha, red, green, blue from most-significant to
|
||
least-significant byte. If the foreground colour is not provided, the UI
|
||
text colour is used; if the background colour is not provided, the UI
|
||
background colour is used.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
screen.width (read-only)
|
||
The width of the bitmap produced by the emulated screen in pixels.
|
||
screen.height (read-only)
|
||
The height of the bitmap produced by the emulated screen in pixels.
|
||
screen.refresh (read-only)
|
||
The screen’s configured refresh rate in Hertz (this may not reflect the
|
||
current value).
|
||
screen.refresh_attoseconds (read-only)
|
||
The screen’s configured refresh interval in attoseconds (this may not
|
||
reflect the current value).
|
||
screen.xoffset (read-only)
|
||
The screen’s default X position offset. This is a floating-point number
|
||
where one (1) corresponds to the X size of the screen’s container. This may
|
||
be useful for restoring the default after adjusting the X offset via the
|
||
screen’s container.
|
||
screen.yoffset (read-only)
|
||
The screen’s default Y position offset. This is a floating-point number
|
||
where one (1) corresponds to the Y size of the screen’s container. This may
|
||
be useful for restoring the default after adjusting the Y offset via the
|
||
screen’s container.
|
||
screen.xscale (read-only)
|
||
The screen’s default X scale factor, as a floating-point number. This may
|
||
be useful for restoring the default after adjusting the X scale via the
|
||
screen’s container.
|
||
screen.yscale (read-only)
|
||
The screen’s default Y scale factor, as a floating-point number. This may
|
||
be useful for restoring the default after adjusting the Y scale via the
|
||
screen’s container.
|
||
screen.pixel_period (read-only)
|
||
The interval taken to draw a horizontal pixel, as a floating-point number in
|
||
units of seconds.
|
||
screen.scan_period (read-only)
|
||
The interval taken to draw a scan line (including the horizontal blanking
|
||
interval), as a floating-point number in units of seconds.
|
||
screen.pixel_period (read-only)
|
||
The interval taken to draw a complete frame (including blanking intervals),
|
||
as a floating-point number in units of seconds.
|
||
screen.frame_number (read-only)
|
||
The current frame number for the screen. This increments monotonically each
|
||
frame interval.
|
||
screen.container (read-only)
|
||
The :ref:`render container <luareference-render-container>` used to draw the
|
||
screen.
|
||
|
||
.. _luareference-dev-cass:
|
||
|
||
Cassette image device
|
||
~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``cassette_image_device`` class, representing a compact cassette
|
||
mechanism typically used by a home computer for program storage.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().cassettes[tag]
|
||
Gets a cassette image device by tag relative to the root machine device, or
|
||
``nil`` if no such device exists or it is not a cassette image device.
|
||
|
||
Base classes
|
||
^^^^^^^^^^^^
|
||
|
||
* :ref:`luareference-dev-device`
|
||
* :ref:`luareference-dev-diimage`
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
cassette:stop()
|
||
Disables playback.
|
||
cassette:play()
|
||
Enables playback. The cassette will play if the motor is enabled.
|
||
cassette:forward()
|
||
Sets forward play direction.
|
||
cassette:reverse()
|
||
Sets reverse play direction.
|
||
cassette:seek(time, whence)
|
||
Jump to the specified position on the tape. The time is a floating-point
|
||
number in units of seconds, relative to the point specified by the whence
|
||
argument. The whence argument must be one of ``"set"``, ``"cur"`` or
|
||
``"end"`` to seek relative to the start of the tape, the current position,
|
||
or the end of the tape, respectively.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
cassette.is_stopped (read-only)
|
||
A Boolean indicating whether the cassette is stopped (i.e. not recording and
|
||
not playing).
|
||
cassette.is_playing (read-only)
|
||
A Boolean indicating whether playback is enabled (i.e. the cassette will
|
||
play if the motor is enabled).
|
||
cassette.is_recording (read-only)
|
||
A Boolean indicating whether recording is enabled (i.e. the cassette will
|
||
record if the motor is enabled).
|
||
cassette.motor_state (read/write)
|
||
A Boolean indicating whether the cassette motor is enabled.
|
||
cassette.speaker_state (read/write)
|
||
A Boolean indicating whether the cassette speaker is enabled.
|
||
cassette.position (read-only)
|
||
The current position as a floating-point number in units of seconds relative
|
||
to the start of the tape.
|
||
cassette.length (read-only)
|
||
The length of the tape as a floating-point number in units of seconds, or
|
||
zero (0) if no tape image is mounted.
|
||
|
||
.. _luareference-dev-diimage:
|
||
|
||
Image device interface
|
||
~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``device_image_interface`` class which is a mix-in implemented by
|
||
devices that can load media image files.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().images[tag]
|
||
Gets an image device by tag relative to the root machine device, or ``nil``
|
||
if no such device exists or it is not a media image device.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
image:load(filename)
|
||
Loads the specified file as a media image. Returns ``"pass"`` or
|
||
``"fail"``.
|
||
image:load_software(name)
|
||
Loads a media image described in a software list. Returns ``"pass"`` or
|
||
``"fail"``.
|
||
image:unload()
|
||
Unloads the mounted image.
|
||
image:create(filename)
|
||
Creates and mounts a media image file with the specified name. Returns
|
||
``"pass"`` or ``"fail"``.
|
||
image:display()
|
||
Returns a “front panel display” string for the device, if supported. This
|
||
can be used to show status information, like the current head position or
|
||
motor state.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
image.is_readable (read-only)
|
||
A Boolean indicating whether the device supports reading.
|
||
image.is_writeable (read-only)
|
||
A Boolean indicating whether the device supports writing.
|
||
image.must_be_loaded (read-only)
|
||
A Boolean indicating whether the device requires a media image to be loaded
|
||
in order to start.
|
||
image.is_reset_on_load (read-only)
|
||
A Boolean indicating whether the device requires a hard reset to change
|
||
media images (usually for cartridge slots that contain hardware in addition
|
||
to memory chips).
|
||
image.image_type_name (read-only)
|
||
A string for categorising the media device.
|
||
image.instance_name (read-only)
|
||
The instance name of the device in the current configuration. This is used
|
||
for setting the media image to load on the command line or in INI files.
|
||
This is not stable, it may have a number appended that may change depending
|
||
on slot configuration.
|
||
image.brief_instance_name (read-only)
|
||
The brief instance name of the device in the current configuration. This is
|
||
used for setting the media image to load on the command line or in INI
|
||
files. This is not stable, it may have a number appended that may change
|
||
depending on slot configuration.
|
||
image.formatlist[] (read-only)
|
||
The :ref:`media image formats <luareference-dev-imagefmt>` supported by the
|
||
device, indexed by name. The index operator and ``index_of`` methods have
|
||
O(n) complexity; all other supported operations have O(1) complexity.
|
||
image.exists (read-only)
|
||
A Boolean indicating whether a media image file is mounted.
|
||
image.readonly (read-only)
|
||
A Boolean indicating whether a media image file is mounted in read-only
|
||
mode.
|
||
image.filename (read-only)
|
||
The full path to the mounted media image file, or ``nil`` if no media image
|
||
is mounted.
|
||
image.crc (read-only)
|
||
The 32-bit cyclic redundancy check of the content of the mounted image file
|
||
if the mounted media image was not loaded from a software list, is mounted
|
||
read-only and is not a CD-ROM, or zero (0) otherwise.
|
||
image.loaded_through_softlist (read-only)
|
||
A Boolean indicating whether the mounted media image was loaded from a
|
||
software list, or ``false`` if no media image is mounted.
|
||
image.software_list_name (read-only)
|
||
The short name of the software list if the mounted media image was loaded
|
||
from a software list.
|
||
image.software_longname (read-only)
|
||
The full name of the software item if the mounted media image was loaded
|
||
from a software list, or ``nil`` otherwise.
|
||
image.software_publisher (read-only)
|
||
The publisher of the software item if the mounted media image was loaded
|
||
from a software list, or ``nil`` otherwise.
|
||
image.software_year (read-only)
|
||
The release year of the software item if the mounted media image was loaded
|
||
from a software list, or ``nil`` otherwise.
|
||
image.software_parent (read-only)
|
||
The short name of the parent software item if the mounted media image was
|
||
loaded from a software list, or ``nil`` otherwise.
|
||
image.device (read-only)
|
||
The underlying :ref:`device <luareference-dev-device>`.
|
||
|
||
.. _luareference-dev-dislot:
|
||
|
||
Slot device interface
|
||
~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``device_slot_interface`` class which is a mix-in implemented by
|
||
devices that instantiate a user-specified child device.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().slots[tag]
|
||
Gets an slot device by tag relative to the root machine device, or ``nil``
|
||
if no such device exists or it is not a slot device.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
slot.fixed (read-only)
|
||
A Boolean indicating whether this is a slot with a card specified in machine
|
||
configuration that cannot be changed by the user.
|
||
slot.has_selectable_options (read-only)
|
||
A Boolean indicating whether the slot has any user-selectable options (as
|
||
opposed to options that can only be selected programmatically, typically for
|
||
fixed slots or to load media images).
|
||
slot.options[] (read-only)
|
||
The :ref:`slot options <luareference-dev-slotopt>` describing the child
|
||
devices that can be instantiated by the slot, indexed by option value. The
|
||
``at`` and ``index_of`` methods have O(n) complexity; all other supported
|
||
operations have O(1) complexity.
|
||
slot.device (read-only)
|
||
The underlying :ref:`device <luareference-dev-device>`.
|
||
|
||
.. _luareference-dev-imagefmt:
|
||
|
||
Media image format
|
||
~~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``image_device_format`` class, which describes a media file format
|
||
supported by a :ref:`media image device <luareference-dev-diimage>`.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().images[tag].formatlist[name]
|
||
Gets a media image format supported by a given device by name.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
format.name (read-only)
|
||
An abbreviated name used to identify the format. This often matches the
|
||
primary filename extension used for the format.
|
||
format.description (read-only)
|
||
The full display name of the format.
|
||
format.extensions[] (read-only)
|
||
Yields a table of filename extensions used for the format.
|
||
format.option_spec (read-only)
|
||
A string describing options available when creating a media image using this
|
||
format. The string is not intended to be human-readable.
|
||
|
||
.. _luareference-dev-slotopt:
|
||
|
||
Slot option
|
||
~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``device_slot_interface::slot_option`` class, which represents a
|
||
child device that a :ref:`slot device <luareference-dev-dislot>` slot device can
|
||
be configured to instantiate.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().slots[tag].options[name]
|
||
Gets a slot option for a given :ref:`slot device <luareference-dev-dislot>`
|
||
by name (i.e. the value used to select the option).
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
option.name (read-only)
|
||
The name of the slot option. This is the value used to select this option
|
||
on the command line or in an INI file.
|
||
option.device_fullname (read-only)
|
||
The full display name of the device type instantiated by this option.
|
||
option.device_shortname (read-only)
|
||
The short name of the device type instantiated by this option.
|
||
option.selectable (read-only)
|
||
A Boolean indicating whether the option may be selected by the user (options
|
||
that are not user-selectable are typically used for fixed slots or to load
|
||
media images).
|
||
option.default_bios (read-only)
|
||
The default BIOS setting for the device instantiated using this option, or
|
||
``nil`` if the default BIOS specified in the device’s ROM definitions will
|
||
be used.
|
||
option.clock (read-only)
|
||
The configured clock frequency for the device instantiated using this
|
||
option. This is an unsigned 32-bit integer. If the eight most-significant
|
||
bits are all set, it is a ratio of the parent device’s clock frequency, with
|
||
the numerator in bits 12-23 and the denominator in bits 0-11. If the eight
|
||
most-significant bits are not all set, it is a frequency in Hertz.
|
||
|
||
|
||
.. _luareference-mem:
|
||
|
||
Memory system
|
||
-------------
|
||
|
||
MAME’s Lua interface exposes various memory system objects, including address
|
||
spaces, memory shares, memory banks, and memory regions. Scripts can read from
|
||
and write to the emulated memory system.
|
||
|
||
.. _luareference-mem-manager:
|
||
|
||
Memory manager
|
||
~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``memory_manager`` class, which allows the memory shares, banks and
|
||
regions in a system to be enumerated.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():memory()
|
||
Gets the global memory manager instance for the emulated system.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
memory.shares[]
|
||
The :ref:`memory shares <luareference-mem-share>` in the system, indexed by
|
||
absolute tag. The ``at`` and ``index_of`` methods have O(n) complexity; all
|
||
other supported operations have O(1) complexity.
|
||
memory.banks[]
|
||
The :ref:`memory banks <luareference-mem-bank>` in the system, indexed by
|
||
absolute tag. The ``at`` and ``index_of`` methods have O(n) complexity; all
|
||
other supported operations have O(1) complexity.
|
||
memory.regions[]
|
||
The :ref:`memory regions <luareference-mem-region>` in the system, indexed
|
||
by absolute tag. The ``at`` and ``index_of`` methods have O(n) complexity;
|
||
all other supported operations have O(1) complexity.
|
||
|
||
.. _luareference-mem-space:
|
||
|
||
Address space
|
||
~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``address_space`` class, which represent’s an address space
|
||
belonging to a device.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().devices[tag].spaces[name]
|
||
Gets the address space with the specified name for a given device. Note
|
||
that names are specific to the device type.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
space:read_i{8,16,32,64}(addr)
|
||
Reads a signed integer value of the size in bits from the specified address.
|
||
space:read_u{8,16,32,64}(addr)
|
||
Reads an unsigned integer value of the size in bits from the specified
|
||
address.
|
||
space:write_i{8,16,32,64}(addr, val)
|
||
Writes a signed integer value of the size in bits to the specified address.
|
||
space:write_u{8,16,32,64}(addr, val)
|
||
Writes an unsigned integer value of the size in bits to the specified
|
||
address.
|
||
space:readv_i{8,16,32,64}(addr)
|
||
Reads a signed integer value of the size in bits from the specified virtual
|
||
address. The address is translated with the debug read intent. Returns
|
||
zero if address translation fails.
|
||
space:readv_u{8,16,32,64}(addr)
|
||
Reads an unsigned integer value of the size in bits from the specified
|
||
virtual address. The address is translated with the debug read intent.
|
||
Returns zero if address translation fails.
|
||
space:writev_i{8,16,32,64}(addr, val)
|
||
Writes a signed integer value of the size in bits to the specified virtual
|
||
address. The address is translated with the debug write intent. Does not
|
||
write if address translation fails.
|
||
space:writev_u{8,16,32,64}(addr, val)
|
||
Writes an unsigned integer value of the size in bits to the specified
|
||
virtual address. The address is translated with the debug write intent.
|
||
Does not write if address translation fails.
|
||
space:read_direct_i{8,16,32,64}(addr)
|
||
Reads a signed integer value of the size in bits from the specified address
|
||
one byte at a time by obtaining a read pointer for each byte address. If
|
||
a read pointer cannot be obtained for a byte address, the corresponding
|
||
result byte will be zero.
|
||
space:read_direct_u{8,16,32,64}(addr)
|
||
Reads an unsigned integer value of the size in bits from the specified
|
||
address one byte at a time by obtaining a read pointer for each byte
|
||
address. If a read pointer cannot be obtained for a byte address, the
|
||
corresponding result byte will be zero.
|
||
space:write_direct_i{8,16,32,64}(addr, val)
|
||
Writes a signed integer value of the size in bits to the specified address
|
||
one byte at a time by obtaining a write pointer for each byte address. If
|
||
a write pointer cannot be obtained for a byte address, the corresponding
|
||
byte will not be written.
|
||
space:write_direct_u{8,16,32,64}(addr, val)
|
||
Writes an unsigned integer value of the size in bits to the specified
|
||
address one byte at a time by obtaining a write pointer for each byte
|
||
address. If a write pointer cannot be obtained for a byte address, the
|
||
corresponding byte will not be written.
|
||
space:read_range(start, end, width, [step])
|
||
Reads a range of addresses as a binary string. The end address must be
|
||
greater than or equal to the start address. The width must be 8, 16, 30 or
|
||
64. If the step is provided, it must be a positive number of elements.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
space.name (read-only)
|
||
The display name for the address space.
|
||
space.shift (read-only)
|
||
The address granularity for the address space specified as the shift
|
||
required to translate a byte address to a native address. Positive values
|
||
shift towards the most significant bit (left) and negative values shift
|
||
towards the least significant bit (right).
|
||
space.index (read-only)
|
||
The zero-based space index. Some space indices have special meanings for
|
||
the debugger.
|
||
space.address_mask (read-only)
|
||
The address mask for the space.
|
||
space.data_width (read-only)
|
||
The data width for the space in bits.
|
||
space.endianness (read-only)
|
||
The Endianness of the space (``"big"`` or ``"little"``).
|
||
space.map (read-only)
|
||
The configured :ref:`address map <luareference-mem-map>` for the space or
|
||
``nil``.
|
||
|
||
.. _luareference-mem-map:
|
||
|
||
Address map
|
||
~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``address_map`` class, used to configure handlers for an address
|
||
space.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().devices[tag].spaces[name].map
|
||
Gets the configured address map for an address space, or ``nil`` if no map
|
||
is configured.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
map.spacenum (read-only)
|
||
The address space number of the address space the map is associated with
|
||
map.device (read-only)
|
||
The device that owns the address space the map is associated with.
|
||
map.unmap_value (read-only)
|
||
The constant value to return from unmapped reads.
|
||
map.global_mask (read-only)
|
||
Global mask to be applied to all addresses when accessing the space.
|
||
map.entries[] (read-only)
|
||
The configured :ref:`entries <luareference-mem-mapentry>` in the address
|
||
map. Uses 1-based integer indices. The index operator and the ``at``
|
||
method have O(n) complexity.
|
||
|
||
.. _luareference-mem-mapentry:
|
||
|
||
Address map entry
|
||
~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``address_map_entry`` class, representing an entry in a configured
|
||
address map.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().devices[tag].spaces[name].map.entries[index]
|
||
Gets an entry from the configured map for an address space.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
entry.address_start (read-only)
|
||
Start address of the entry’s range.
|
||
entry.address_end (read-only)
|
||
End address of the entry’s range (inclusive).
|
||
entry.address_mirror (read-only)
|
||
Address mirror bits.
|
||
entry.address_mask (read-only)
|
||
Address mask bits. Only valid for handlers.
|
||
entry.mask (read-only)
|
||
Lane mask, indicating which data lines on the bus are connected to the
|
||
handler.
|
||
entry.cswidth (read-only)
|
||
The trigger width for a handler that isn’t connected to all the data lines.
|
||
entry.read (read-only)
|
||
:ref:`Additional data <luareference-memory-handlerdata>` for the read
|
||
handler.
|
||
entry.write (read-only)
|
||
:ref:`Additional data <luareference-memory-handlerdata>` for the write
|
||
handler.
|
||
entry.share (read-only)
|
||
Memory share tag for making RAM entries accessible or ``nil``.
|
||
entry.region (read-only)
|
||
Explicit memory region tag for ROM entries, or ``nil``. For ROM entries,
|
||
``nil`` infers the region from the device tag.
|
||
entry.region_offset (read-only)
|
||
Starting offset in memory region for ROM entries.
|
||
|
||
.. _luareference-memory-handlerdata:
|
||
|
||
Address map handler data
|
||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``map_handler_data`` class, which provides configuration data to
|
||
handlers in address maps.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().devices[tag].spaces[name].map.entries[index].read
|
||
Gets the read handler data for an address map entry.
|
||
manager:machine().devices[tag].spaces[name].map.entries[index].write
|
||
Gets the write handler data for an address map entry.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
data.handlertype (read-only)
|
||
Handler type. Will be one of ``"none"``, ``"ram"``, ``"rom"``, ``"nop"``,
|
||
``"unmap"``, ``"delegate"``, ``"port"``, ``"bank"``, ``"submap"``, or
|
||
``"unknown"``. Note that multiple handler type values can yield
|
||
``"delegate"`` or ``"unknown"``.
|
||
data.bits (read-only)
|
||
Data width for the handler in bits.
|
||
data.name (read-only)
|
||
Display name for the handler, or ``nil``.
|
||
data.tag (read-only)
|
||
Tag for I/O ports and memory banks, or ``nil``.
|
||
|
||
.. _luareference-mem-share:
|
||
|
||
Memory share
|
||
~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``memory_share`` class, representing a named allocated memory zone.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():memory().shares[tag]
|
||
Gets a memory share by absolute tag, or ``nil`` if no such memory share
|
||
exists.
|
||
manager:machine().devices[tag]:memshare(tag)
|
||
Gets a memory share by tag relative to a device, or ``nil`` if no such
|
||
memory share exists.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
share:read_i{8,16,32,64}(offs)
|
||
Reads a signed integer value of the size in bits from the specified offset
|
||
in the memory share.
|
||
share:read_u{8,16,32,64}(offs)
|
||
Reads an unsigned integer value of the size in bits from the specified
|
||
offset in the memory share.
|
||
share:write_i{8,16,32,64}(offs, val)
|
||
Writes a signed integer value of the size in bits to the specified offset in
|
||
the memory share.
|
||
share:write_u{8,16,32,64}(offs, val)
|
||
Writes an unsigned integer value of the size in bits to the specified offset
|
||
in the memory share.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
share.tag (read-only)
|
||
The absolute tag of the memory share.
|
||
share.size (read-only)
|
||
The size of the memory share in bytes.
|
||
share.length (read-only)
|
||
The length of the memory share in native width elements.
|
||
share.endianness (read-only)
|
||
The Endianness of the memory share (``"big"`` or ``"little"``).
|
||
share.bitwidth (read-only)
|
||
The native element width of the memory share in bits.
|
||
share.bytewidth (read-only)
|
||
The native element width of the memory share in bytes.
|
||
|
||
.. _luareference-mem-bank:
|
||
|
||
Memory bank
|
||
~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``memory_bank`` class, representing a named memory zone
|
||
indirection.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():memory().banks[tag]
|
||
Gets a memory region by absolute tag, or ``nil`` if no such memory bank
|
||
exists.
|
||
manager:machine().devices[tag]:membank(tag)
|
||
Gets a memory region by tag relative to a device, or ``nil`` if no such
|
||
memory bank exists.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
bank.tag (read-only)
|
||
The absolute tag of the memory bank.
|
||
bank.entry (read/write)
|
||
The currently selected zero-based entry number.
|
||
|
||
.. _luareference-mem-region:
|
||
|
||
Memory region
|
||
~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``memory_region`` class, representing a memory region used to store
|
||
read-only data like ROMs or the result of fixed decryptions.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():memory().regions[tag]
|
||
Gets a memory region by absolute tag, or ``nil`` if no such memory region
|
||
exists.
|
||
manager:machine().devices[tag]:memregion(tag)
|
||
Gets a memory region by tag relative to a device, or ``nil`` if no such
|
||
memory region exists.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
region:read_i{8,16,32,64}(offs)
|
||
Reads a signed integer value of the size in bits from the specified offset
|
||
in the memory region.
|
||
region:read_u{8,16,32,64}(offs)
|
||
Reads an unsigned integer value of the size in bits from the specified
|
||
offset in the memory region.
|
||
region:write_i{8,16,32,64}(offs, val)
|
||
Writes a signed integer value of the size in bits to the specified offset in
|
||
the memory region.
|
||
region:write_u{8,16,32,64}(offs, val)
|
||
Writes an unsigned integer value of the size in bits to the specified offset
|
||
in the memory region.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
region.tag (read-only)
|
||
The absolute tag of the memory region.
|
||
region.size (read-only)
|
||
The size of the memory region in bytes.
|
||
region.length (read-only)
|
||
The length of the memory region in native width elements.
|
||
region.endianness (read-only)
|
||
The Endianness of the memory region (``"big"`` or ``"little"``).
|
||
region.bitwidth (read-only)
|
||
The native element width of the memory region in bits.
|
||
region.bytewidth (read-only)
|
||
The native element width of the memory region in bytes.
|
||
|
||
|
||
.. _luareference-input:
|
||
|
||
Input system
|
||
------------
|
||
|
||
Allows scripts to get input from the user, and access I/O ports in the emulated
|
||
system.
|
||
|
||
.. _luareference-input-ioportman:
|
||
|
||
I/O port manager
|
||
~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``ioport_manager`` class, which provides access to emulated I/O
|
||
ports and handles input configuration.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():ioport()
|
||
Gets the global I/O port manager instance for the emulated machine.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
ioport:count_players()
|
||
Returns the number of player controllers in the system.
|
||
ioport:type_group(type, player)
|
||
Returns the I/O port group for the specified I/O port type and player
|
||
number. The I/O port type is an enumerated value. The player number is a
|
||
zero-based index. Returns an integer giving the grouping for the input.
|
||
|
||
This should be called with values obtained from I/O port fields to provide
|
||
canonical grouping in an input configuration UI.
|
||
ioport:type_seq(type, player, seqtype)
|
||
Get the configured input sequence for the specified input type, player and
|
||
sequence type. The sequence type must be ``"standard"``, ``"increment"``
|
||
or ``"decrement"``. This provides access to general input configuration.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
ioport.ports[]
|
||
Gets the emulated :ref:`I/O ports <luareference-input-ioport>` in the
|
||
system. Keys are absolute tags. The ``at`` and ``index_of`` methods have
|
||
O(n) complexity; all other supported operations have O(1) complexity.
|
||
ioport.natkeyboard
|
||
Gets the :ref:`natural keyboard manager <luareference-input-natkbd>`, used
|
||
for controlling keyboard and keypad input to the emulated system.
|
||
|
||
.. _luareference-input-natkbd:
|
||
|
||
Natural keyboard manager
|
||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``natural_keyboard`` class, which manages emulated keyboard and
|
||
keypad inputs.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():ioport().natkeyboard
|
||
Gets the global natural keyboard manager instance for the emulated machine.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
natkeyboard:post(text)
|
||
Post literal text to the emulated machine. The machine must have keyboard
|
||
inputs with character bindings, and the correct keyboard input device must
|
||
be enabled.
|
||
natkeyboard:post_coded(text)
|
||
Post text to the emulated machine. Brace-enclosed codes are interpreted in
|
||
the text. The machine must have keyboard inputs with character bindings,
|
||
and the correct keyboard input device must be enabled.
|
||
|
||
The recognised codes are ``{BACKSPACE}``, ``{BS}``, ``{BKSP}``, ``{DEL}``,
|
||
``{DELETE}``, ``{END}``, ``{ENTER}``, ``{ESC}``, ``{HOME}``, ``{INS}``,
|
||
``{INSERT}``, ``{PGDN}``, ``{PGUP}``, ``{SPACE}``, ``{TAB}``, ``{F1}``,
|
||
``{F2}``, ``{F3}``, ``{F4}``, ``{F5}``, ``{F6}``, ``{F7}``, ``{F8}``,
|
||
``{F9}``, ``{F10}``, ``{F11}``, ``{F12}``, and ``{QUOTE}``.
|
||
natkeyboard:paste()
|
||
Post the contents of the host clipboard to the emulated machine. The
|
||
machine must have keyboard inputs with character bindings, and the correct
|
||
keyboard input device must be enabled.
|
||
natkeyboard:dump()
|
||
Returns a string with a human-readable description of the keyboard and
|
||
keypad input devices in the system, whether they are enabled, and their
|
||
character bindings.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
natkeyboard.empty (read-only)
|
||
A Boolean indicating whether the natural keyboard manager’s input buffer is
|
||
empty.
|
||
natkeyboard.full (read-only)
|
||
A Boolean indicating whether the natural keyboard manager’s input buffer is
|
||
full.
|
||
natkeyboard.can_post (read-only)
|
||
A Boolean indicating whether the emulated system supports posting character
|
||
data via the natural keyboard manager.
|
||
natkeyboard.is_posting (read-only)
|
||
A Boolean indicating whether posted character data is currently being
|
||
delivered to the emulated system.
|
||
natkeyboard.in_use (read/write)
|
||
A Boolean indicating whether “natural keyboard” mode is enabled. When
|
||
“natural keyboard” mode is enabled, the natural keyboard manager translates
|
||
host character input to emulated system keystrokes.
|
||
natkeyboard.keyboards[]
|
||
Gets the :ref:`keyboard/keypad input devices <luareference-input-kbddev>` in
|
||
the emulated system, indexed by absolute device tag. Index get has O(n)
|
||
complexity; all other supported operations have O(1) complexity.
|
||
|
||
.. _luareference-input-kbddev:
|
||
|
||
Keyboard input device
|
||
~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Represents a keyboard or keypad input device managed by the
|
||
:ref:`natural keyboard manager <luareference-input-natkbd>`.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():ioport().natkeyboard.keyboards[tag]
|
||
Gets the keyboard input device with the specified tag, or ``nil`` if the tag
|
||
does not correspond to a keyboard input device.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
keyboard.device (read-only)
|
||
The underlying device.
|
||
keyboard.tag (read-only)
|
||
The absolute tag of the underlying device.
|
||
keyboard.basetag (read-only)
|
||
The last component of the tag of the underlying device, or ``"root"`` for
|
||
the root machine device.
|
||
keyboard.name (read-only)
|
||
The human-readable description of the underlying device type.
|
||
keyboard.shortname (read-only)
|
||
The identifier for the underlying device type.
|
||
keyboard.is_keypad (read-only)
|
||
A Boolean indicating whether the underlying device has keypad inputs but no
|
||
keyboard inputs. This is used when determining which keyboard input devices
|
||
should be enabled by default.
|
||
keyboard.enabled (read/write)
|
||
A Boolean indicating whether the device’s keyboard and/or keypad inputs are
|
||
enabled.
|
||
|
||
.. _luareference-input-ioport:
|
||
|
||
I/O port
|
||
~~~~~~~~
|
||
|
||
Wraps MAME’s ``ioport_port`` class, representing an emulated I/O port.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():ioport().ports[tag]
|
||
Gets an emulated I/O port by absolute tag, or ``nil`` if the tag does not
|
||
correspond to an I/O port.
|
||
manager:machine().devices[devtag]:ioport(porttag)
|
||
Gets an emulated I/O port by tag relative to a device, or ``nil`` if no such
|
||
I/O port exists.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
port:read()
|
||
Read the current input value. Returns a 32-bit integer.
|
||
port:write(value, mask)
|
||
Write to the I/O port output fields that are set in the specified mask. The
|
||
value and mask must be 32-bit integers. Note that this does not set values
|
||
for input fields.
|
||
port:field(mask)
|
||
Get the first :ref:`I/O port field <luareference-input-field>` corresponding
|
||
to the bits that are set in the specified mask, or ``nil`` if there is no
|
||
corresponding field.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
port.device (read-only)
|
||
The device that owns the I/O port.
|
||
port.tag (read-only)
|
||
The absolute tag of the I/O port
|
||
port.active (read-only)
|
||
A mask indicating which bits of the I/O port correspond to active fields
|
||
(i.e. not unused or unassigned bits).
|
||
port.live (read-only)
|
||
The live state of the I/O port.
|
||
port.fields[] (read-only)
|
||
Gets a table of :ref:`fields <luareference-input-field>` indexed by name.
|
||
|
||
.. _luareference-input-field:
|
||
|
||
I/O port field
|
||
~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``ioport_field`` class, representing a field within an I/O port.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():ioport().ports[tag]:field[mask]
|
||
Gets a field for the given port by bit mask.
|
||
manager:machine():ioport().ports[tag].fields[name]
|
||
Gets a field for the given port by display name.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
field:set_value(value)
|
||
Set the value of the I/O port field. For digital fields, the value is
|
||
compared to zero to determine whether the field should be active; for
|
||
analog fields, the value must be right-aligned and in the correct range.
|
||
field:set_input_seq(seqtype, seq)
|
||
Set the input sequence for the specified sequence type. This is used to
|
||
configure per-machine input settings. The sequence type must be
|
||
``"standard"``, ``"increment"`` or ``"decrement"``.
|
||
field:input_seq(seq_type)
|
||
Get the configured input sequence for the specified sequence type. This
|
||
gets per-machine input settings. The sequence type must be ``"standard"``,
|
||
``"increment"`` or ``"decrement"``.
|
||
field:set_default_input_seq(seq_type, seq)
|
||
Set the default input sequence for the specified sequence type. This is
|
||
used to configure general input settings. The sequence type must be
|
||
``"standard"``, ``"increment"`` or ``"decrement"``.
|
||
field:default_input_seq(seq_type)
|
||
Gets the default input sequence for the specified sequence type. This is
|
||
gets general input settings. The sequence type must be ``"standard"``,
|
||
``"increment"`` or ``"decrement"``.
|
||
field:keyboard_codes(shift)
|
||
Gets a table of characters corresponding to the field for the specified
|
||
shift state. The shift state is a bit mask of active shift keys.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
field.device (read-only)
|
||
The device that owns the port that the field belongs to.
|
||
field.port (read-only)
|
||
The :ref:`I/O port <luareference-input-ioport>` that the field belongs to.
|
||
field.live (read-only)
|
||
The :ref:`live state <luareference-input-fieldlive>` of the field.
|
||
field.type (read-only)
|
||
The input type of the field. This is an enumerated value.
|
||
field.name (read-only)
|
||
The display name for the field.
|
||
field.default_name (read-only)
|
||
The name for the field from the emulated system’s configuration (cannot be
|
||
overridden by scripts or plugins).
|
||
field.player (read-only)
|
||
Zero-based player number for the field.
|
||
field.mask (read-only)
|
||
Bits in the I/O port corresponding to this field.
|
||
field.defvalue (read-only)
|
||
The field’s default value
|
||
field.sensitivity (read-only)
|
||
The sensitivity or gain for analog fields
|
||
field.way (read-only)
|
||
The number of directions allowed by the restrictor plate/gate for a digital
|
||
joystick, or zero (0) for other inputs.
|
||
field.type_class (read-only)
|
||
The type class for the input field – one of ``"keyboard"``,
|
||
``"controller"``, ``"config"``, ``"dipswitch"`` or ``"misc"``.
|
||
field.is_analog (read-only)
|
||
A Boolean indicating whether the field is an analog axis or positional
|
||
control.
|
||
field.is_digital_joystick (read-only)
|
||
A Boolean indicating whether the field corresponds to a digital joystick
|
||
switch.
|
||
field.enabled (read-only)
|
||
A Boolean indicating whether the field is enabled.
|
||
field.optional (read-only)
|
||
A Boolean indicating whether the field is optional and not required to use
|
||
the emulated system.
|
||
field.cocktail (read-only)
|
||
A Boolean indicating whether the field is only used when the system is
|
||
configured for a cocktail table cabinet.
|
||
field.toggle (read-only)
|
||
A Boolean indicating whether the field corresponds to a hardware toggle
|
||
switch or push-on, push-off button.
|
||
field.rotated (read-only)
|
||
A Boolean indicating whether the field corresponds to a control that is
|
||
rotated relative its standard orientation.
|
||
field.analog_reverse (read-only)
|
||
A Boolean indicating whether the field corresponds to an analog control that
|
||
increases in the opposite direction to the convention (e.g. larger values
|
||
when a pedal is released or a joystick is moved to the left).
|
||
field.analog_reset (read-only)
|
||
A Boolean indicating whether the field corresponds to an incremental
|
||
position input (e.g. a dial or trackball axis) that should be reset to zero
|
||
for every video frame.
|
||
field.analog_wraps (read-only)
|
||
A Boolean indicating whether the field corresponds to an analog input that
|
||
wraps from one end of its range to the other (e.g. an incremental position
|
||
input like a dial or trackball axis).
|
||
field.analog_invert (read-only)
|
||
A Boolean indicating whether the field corresponds to an analog input that
|
||
has its value ones-complemented.
|
||
field.impulse (read-only)
|
||
A Boolean indicating whether the field corresponds to a digital input that
|
||
activates for a fixed amount of time.
|
||
field.crosshair_scale (read-only)
|
||
The scale factor for translating the field’s range to crosshair position. A
|
||
value of one (1) translates the field’s full range to the full width or
|
||
height the screen.
|
||
field.crosshair_offset (read-only)
|
||
The offset for translating the field’s range to crosshair position.
|
||
field.user_value (read/write)
|
||
The value for DIP switch or configuration settings.
|
||
field.settings[] (read-only)
|
||
Gets a table of the currently enabled settings for a DIP switch or
|
||
configuration field, indexed by value.
|
||
|
||
.. _luareference-input-fieldlive:
|
||
|
||
Live I/O port field state
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``ioport_field_live`` class, representing the live state of an I/O
|
||
port field.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():ioport().ports[tag]:field(mask).live
|
||
Gets the live state for an I/O port field.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
live.name
|
||
Display name for the field.
|
||
|
||
.. _luareference-input-inputman:
|
||
|
||
Input manager
|
||
~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``input_manager`` class, which reads host input devices and checks
|
||
whether configured inputs are active.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():input()
|
||
Gets the global input manager instance for the emulated system.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
input:code_value(code)
|
||
Gets the current value for the host input corresponding to the specified
|
||
code. Returns a signed integer value, where zero is the neutral position.
|
||
input:code_pressed(code)
|
||
Returns a Boolean indicating whether the host input corresponding to the
|
||
specified code has a non-zero value (i.e. it is not in the neutral
|
||
position).
|
||
input:code_pressed_once(code)
|
||
Returns a Boolean indicating whether the host input corresponding to the
|
||
specified code has moved away from the neutral position since the last time
|
||
it was checked using this function. The input manager can track a limited
|
||
number of inputs this way.
|
||
input:code_name(code)
|
||
Get display name for an input code.
|
||
input:code_to_token(code)
|
||
Get token string for an input code. This should be used when saving
|
||
configuration.
|
||
input:code_from_token(token)
|
||
Convert a token string to an input code. Returns the invalid input code if
|
||
the token is not valid or belongs to an input device that is not present.
|
||
input:seq_pressed(seq)
|
||
Returns a Boolen indicating whether the supplied input sequence is currently
|
||
pressed.
|
||
input:seq_clean(seq)
|
||
Remove invalid elements from the supplied input sequence. Returns the new,
|
||
cleaned input sequence.
|
||
input:seq_name(seq)
|
||
Get display text for an inptu sequence.
|
||
input:seq_to_tokens(seq)
|
||
Convert an input sequence to a token string. This should be used when
|
||
saving configuration.
|
||
input:seq_from_tokens(tokens)
|
||
Convert a token string to an input sequence. This should be used when
|
||
loading configuration.
|
||
input:axis_code_poller()
|
||
Returns an :ref:`input code poller <luareference-input-codepoll>` for
|
||
obtaining an analog host input code.
|
||
input:switch_code_poller()
|
||
Returns an :ref:`input code poller <luareference-input-codepoll>` for
|
||
obtaining a host switch input code.
|
||
input:keyboard_code_poller()
|
||
Returns an :ref:`input code poller <luareference-input-codepoll>` for
|
||
obtaining a host switch input code that only considers keyboard input
|
||
devices.
|
||
input:axis_sequence_poller()
|
||
Returns an :ref:`input sequence poller <luareference-input-seqpoll>` for
|
||
obtaining an input sequence for configuring an analog input.
|
||
input:axis_sequence_poller()
|
||
Returns an :ref:`input sequence poller <luareference-input-seqpoll>` for
|
||
obtaining an input sequence for configuring a digital input.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
input.device_classes[] (read-only)
|
||
Gets a table of host
|
||
:ref:`input device classes <luareference-input-devclass>` indexed by name.
|
||
|
||
.. _luareference-input-codepoll:
|
||
|
||
Input code poller
|
||
~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``input_code_poller`` class, used to poll for host inputs being
|
||
activated.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():input():axis_code_poller()
|
||
Returns an input code poller that polls for analog inputs being activated.
|
||
manager:machine():input():switch_code_poller()
|
||
Returns an input code poller that polls for host switch inputs being
|
||
activated.
|
||
manager:machine():input():keyboard_code_poller()
|
||
Returns an input code poller that polls for host switch inputs being
|
||
activated, only considering keyboard input devices.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
poller:reset()
|
||
Resets the polling logic. Active switch inputs are cleared and initial
|
||
analog input positions are set.
|
||
poller:poll()
|
||
Returns an input code corresponding to the first relevant host input that
|
||
has been activated since the last time the method was called. Returns the
|
||
invalid input code if no relevant input has been activated.
|
||
|
||
.. _luareference-input-seqpoll:
|
||
|
||
Input sequence poller
|
||
~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``input_sequence_poller`` poller class, which allows users to
|
||
assign host input combinations to emulated inputs and other actions.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():input():axis_sequence_poller()
|
||
Returns an input sequence poller for assigning host inputs to an analog
|
||
input.
|
||
manager:machine():input():switch_sequence_poller()
|
||
Returns an input sequence poller for assigning host inputs to a switch
|
||
input.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
poller:start([seq])
|
||
Start polling. If a sequence is supplied, it is used as a starting
|
||
sequence: for analog inputs, the user can cycle between the full range, and
|
||
the positive and negative portions of an axis; for switch inputs, an “or”
|
||
code is appended and the user can add an alternate host input combination.
|
||
poller:poll()
|
||
Polls for for user input and updates the sequence if appropriate. Returns a
|
||
Boolean indicating whether sequence input is complete. If this method
|
||
returns false, you should continue polling.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
poller.sequence (read-only)
|
||
The current input sequence. This is updated while polling. It is possible
|
||
for the sequence to become invalid.
|
||
poller.valid (read-only)
|
||
A Boolean indicating whether the current input sequence is valid.
|
||
poller.modified (read-only)
|
||
A Boolean indicating whether the sequence was changed by any user input
|
||
since starting polling.
|
||
|
||
.. _luareference-input-devclass:
|
||
|
||
Host input device class
|
||
~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``input_class`` class, representing a category of host input
|
||
devices (e.g. keyboards or joysticks).
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():input().device_classes[name]
|
||
Gets an input device class by name.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
devclass.name (read-only)
|
||
The device class name.
|
||
devclass.enabled (read-only)
|
||
A Boolean indicating whether the device class is enabled.
|
||
devclass.multi (read-only)
|
||
A Boolean indicating whether the device class supports multiple devices, or
|
||
inputs from all devices in the class are combined and treated as a single
|
||
device.
|
||
devclass.devices[] (read-only)
|
||
Gets a table of :ref:`host input devices <luareference-input-inputdev>` in
|
||
the class. Keys are one-based indices.
|
||
|
||
.. _luareference-input-inputdev:
|
||
|
||
Host input device
|
||
~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``input_device`` class, representing a host input device.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():input().device_classes[name].devices[index]
|
||
Gets a specific host input device.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
inputdev.name (read-only)
|
||
Display name for the device. This is not guaranteed to be unique.
|
||
inputdev.id (read-only)
|
||
Unique identifier string for the device. This may not be human-readable.
|
||
inputdev.devindex (read-only)
|
||
Device index within the device class. This is not necessarily the same as
|
||
the index in the ``devices`` property of the device class – the ``devindex``
|
||
indices may not be contiguous.
|
||
inputdev.items (read-only)
|
||
Gets a table of :ref:`input items <luareference-input-inputitem>`, indexed
|
||
by item ID. The item ID is an enumerated value.
|
||
|
||
.. _luareference-input-inputitem:
|
||
|
||
Host input device item
|
||
~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``input_device_item`` class, representing a single host input (e.g.
|
||
a key, button, or axis).
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():input().device_classes[name].devices[index].items[id]
|
||
Gets an individual host input item. The item ID is an enumerated value.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
item.name (read-only)
|
||
The display name of the input item. Note that this is just the name of the
|
||
item itself, and does not include the device name. The full display name
|
||
for the item can be obtained by calling the ``code_name`` method on the
|
||
:ref:`input manager <luareference-input-inputman>` with the item’s code.
|
||
item.code (read-only)
|
||
The input item’s identification code. This is used by several
|
||
:ref:`input manager <luareference-input-inputman>` methods.
|
||
item.token (read-only)
|
||
The input item’s token string. Note that this is a token fragment for the
|
||
item itself, and does not include the device portion. The full token for
|
||
the item can be obtained by calling the ``code_to_token`` method on the
|
||
:ref:`input manager <luareference-input-inputman>` with the item’s code.
|
||
item.current (read-only)
|
||
The item’s current value. This is a signed integer where zero is the
|
||
neutral position.
|
||
|
||
.. _luareference-input-uiinput:
|
||
|
||
UI input manager
|
||
~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``ui_input_manager`` class, which is used for high-level input.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():uiinput()
|
||
Gets the global UI input manager instance for the machine.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
uiinput:find_mouse()
|
||
Returns host system mouse pointer X position, Y position, button state, and
|
||
the :ref:`render target <luareference-render-target>` it falls in. The
|
||
position is in host pixels, where zero is at the top/left. The button state
|
||
is a Boolean indicating whether the primary mouse button is pressed.
|
||
|
||
If the mouse pointer is not over one of MAME’s windows, this may return the
|
||
position and render target from when the mouse pointer was most recently
|
||
over one of MAME’s windows. The render target may be ``nil`` if the mouse
|
||
pointer is not over one of MAME’s windows.
|
||
uiinput:pressed(type)
|
||
Returns a Boolean indicating whether the specified UI input has been
|
||
pressed. The input type is an enumerated value.
|
||
uiinput:pressed_repeat(type, speed)
|
||
Returns a Boolean indicating whether the specified UI input has been
|
||
pressed or auto-repeat has been triggered at the specified speed. The input
|
||
type is an enumerated value; the speed is an interval in sixtieths of a
|
||
second.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
uiinput.presses_enabled (read/write)
|
||
Whether the UI input manager will check for UI inputs frame updates.
|
||
|
||
|
||
.. _luareference-render:
|
||
|
||
Render system
|
||
-------------
|
||
|
||
The render system is responsible for drawing what you see in MAME’s windows,
|
||
including emulated screens, artwork, and UI elements.
|
||
|
||
.. _luareference-render-bounds:
|
||
|
||
Render bounds
|
||
~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``render_bounds`` class, which represents a rectangle using
|
||
floating-point coordinates.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
emu.render_bounds()
|
||
Creates a render bounds object representing a unit square, with top left
|
||
corner at (0, 0) and bottom right corner at (1, 1). Note that render
|
||
target coordinates don’t necessarily have equal X and Y scales, so this may
|
||
not represent a square in the final output.
|
||
emu.render_bounds(left, top, right, bottom)
|
||
Creates a render bounds object representing a rectangle with top left
|
||
corner at (x0, y0) and bottom right corner at (x1, y1).
|
||
|
||
The arguments must all be floating-point numbers.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
bounds:includes(x, y)
|
||
Returns a Boolean indicating whether the specified point falls within the
|
||
rectangle. The rectangle must be normalised for this to work (right greater
|
||
than left and bottom greater than top).
|
||
|
||
The arguments must both be floating-point numbers.
|
||
bounds:set_xy(left, top, right, bottom)
|
||
Set the rectangle’s position and size in terms of the positions of the
|
||
edges.
|
||
|
||
The arguments must all be floating-point numbers.
|
||
bounds:set_wh(left, top, width, height)
|
||
Set the rectangle’s position and size in terms of the top top left corner
|
||
position, and the width and height.
|
||
|
||
The arguments must all be floating-point numbers.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
bounds.x0 (read/write)
|
||
The leftmost coordinate in the rectangle (i.e. the X coordinate of the left
|
||
edge or the top left corner).
|
||
bounds.x1 (read/write)
|
||
The rightmost coordinate in the rectangle (i.e. the X coordinate of the
|
||
right edge or the bottom right corner).
|
||
bounds.y0 (read/write)
|
||
The topmost coordinate in the rectangle (i.e. the Y coordinate of the top
|
||
edge or the top left corner).
|
||
bounds.y1 (read/write)
|
||
The bottommost coordinate in the rectangle (i.e. the Y coordinate of the
|
||
bottom edge or the bottom right corner).
|
||
bounds.width (read/write)
|
||
The width of the rectangle. Setting this property changes the position of
|
||
the rightmost edge.
|
||
bounds.height (read/write)
|
||
The height of the rectangle. Setting this property changes the position of
|
||
the bottommost edge.
|
||
bounds.aspect (read-only)
|
||
The width-to-height aspect ratio of the rectangle. Note that this is often
|
||
in render target coordinates which don’t necessarily have equal X and Y
|
||
scales. A rectangle representing a square in the final output doesn’t
|
||
necessarily have an aspect ratio of 1.
|
||
|
||
.. _luareference-render-color:
|
||
|
||
Render colour
|
||
~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``render_color`` class, which represents an ARGB (alpha, red,
|
||
green, blue) format colour. Channels are floating-point values ranging from
|
||
zero (0, transparent alpha or colour off) to one (1, opaque or full colour
|
||
intensity). Colour channel values are not pre-multiplied by the alpha channel
|
||
value.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
emu.render_color()
|
||
Creates a render colour object representing opaque white (all channels set
|
||
to 1). This is the identity value – ARGB multiplication by this value will
|
||
not change a colour.
|
||
emu.render_color(a, r, g, b)
|
||
Creates a render colour object with the specified alpha, red, green and
|
||
blue channel values.
|
||
|
||
The arguments must all be floating-point numbers in the range from zero (0)
|
||
to one (1), inclusive.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
color:set(a, r, g, b)
|
||
Sets the colour object’s alpha, red, green and blue channel values.
|
||
|
||
The arguments must all be floating-point numbers in the range from zero (0)
|
||
to one (1), inclusive.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
color.a (read/write)
|
||
Alpha value, in the range of zero (0, transparent) to one (1, opaque).
|
||
color.r (read/write)
|
||
Red channel value, in the range of zero (0, off) to one (1, full intensity).
|
||
color.g (read/write)
|
||
Green channel value, in the range of zero (0, off) to one (1, full
|
||
intensity).
|
||
color.b (read/write)
|
||
Blue channel value, in the range of zero (0, off) to one (1, full
|
||
intensity).
|
||
|
||
.. _luareference-render-manager:
|
||
|
||
Render manager
|
||
~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``render_manager`` class, responsible for managing render targets
|
||
and textures.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():render()
|
||
Gets the global render manager instance for the emulation session.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
render.max_update_rate (read-only)
|
||
The maximum update rate in Hertz. This is a floating-point number.
|
||
render.ui_target (read-only)
|
||
The :ref:`render target <luareference-render-target>` used to draw the user
|
||
interface (including menus, sliders and pop-up messages). This is usually
|
||
the first host window or screen.
|
||
render.ui_container (read-only)
|
||
The :ref:`render container <luareference-render-container>` used for drawing
|
||
the user interface.
|
||
render.targets[] (read-only)
|
||
The list of render targets, including output windows and screens, as well as
|
||
hidden render targets used for things like rendering screenshots. Uses
|
||
1-based integer indices. The index operator and the ``at`` method have O(n)
|
||
complexity.
|
||
|
||
.. _luareference-render-target:
|
||
|
||
Render target
|
||
~~~~~~~~~~~~~
|
||
|
||
Wrap’s MAME’s ``render_target`` class, which represents a video output channel.
|
||
This could be a host window or screen, or a hidden target used for rendering
|
||
screenshots.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():render().targets[index]
|
||
Get a render target by index.
|
||
manager:machine():render():ui_target()
|
||
Get the render target used to display the user interface (including menus,
|
||
sliders and pop-up messages). This is usually the first host window or
|
||
screen.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
target.index (read-only)
|
||
The 1-based index of the render target. This has O(n) complexity.
|
||
target.width (read-only)
|
||
The width of the render target in output pixels. This is an integer.
|
||
target.height (read-only)
|
||
The height of the render target in output pixels. This is an integer.
|
||
target.pixel_aspect (read-only)
|
||
The width-to-height aspect ratio of the render target’s pixels. This is a
|
||
floating-point number.
|
||
target.hidden (read-only)
|
||
A Boolean indicating whether this is an internal render target that is not
|
||
displayed to the user directly (e.g. the render target used to draw
|
||
screenshots).
|
||
target.is_ui_target (read-only)
|
||
A Boolean indicating whether this is the render target used to display the
|
||
user interface.
|
||
target.max_update_rate (read/write)
|
||
The maximum update rate for the render target in Hertz.
|
||
target.orientation (read/write)
|
||
The target orientation flags. This is an integer bit mask, where bit 0
|
||
(0x01) is set to mirror horizontally, bit 1 (0x02) is set to mirror
|
||
vertically, and bit 2 (0x04) is set to mirror along the top left-bottom
|
||
right diagonal.
|
||
target.view_names[]
|
||
The names of the available views for this render target. Uses 1-based
|
||
integer indices. The ``find`` and ``index_of`` methods have O(n)
|
||
complexity; all other supported operations have O(1) complexity.
|
||
target.current_view (read-only)
|
||
The currently selected view for the render target. This is a
|
||
:ref:`layout view <luareference-render-layview>` object.
|
||
target.view_index (read/write)
|
||
The 1-based index of the selected view for this render target.
|
||
target.visibility_mask (read-only)
|
||
An integer bit mask indicating which item collections are currently visible
|
||
for the current view.
|
||
target.screen_overlay (read/write)
|
||
A Boolean indicating whether screen overlays are enabled.
|
||
target.zoom_to_screen (read/write)
|
||
A Boolean indicating whether the render target is configured to scale so
|
||
that the emulated screen(s) fill as much of the output window/screen as
|
||
possible.
|
||
|
||
.. _luareference-render-container:
|
||
|
||
Render container
|
||
~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``render_container`` class.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():render().ui_container
|
||
Gets the render container used to draw the user interface, including menus,
|
||
sliders and pop-up messages.
|
||
manager:machine().screens[tag].container
|
||
Gets the render container used to draw a given screen.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
container.user_settings (read/write)
|
||
The container’s :ref:`user settings <luareference-render-contsettings>`.
|
||
This can be used to control a number of image adjustments.
|
||
container.orientation (read/write)
|
||
The container orientation flags. This is an integer bit mask, where bit 0
|
||
(0x01) is set to mirror horizontally, bit 1 (0x02) is set to mirror
|
||
vertically, and bit 2 (0x04) is set to mirror along the top left-bottom
|
||
right diagonal.
|
||
container.xscale (read/write)
|
||
The container’s X scale factor. This is a floating-point number.
|
||
container.yscale (read/write)
|
||
The container’s Y scale factor. This is a floating-point number.
|
||
container.xoffset (read/write)
|
||
The container’s X offset. This is a floating-point number where one (1)
|
||
corresponds to the X size of the container.
|
||
container.yoffset (read/write)
|
||
The container’s Y offset. This is a floating-point number where one (1)
|
||
corresponds to the Y size of the container.
|
||
container.is_empty (read-only)
|
||
A Boolean indicating whether the container has no items.
|
||
|
||
.. _luareference-render-contsettings:
|
||
|
||
Container user settings
|
||
~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``render_container::user_settings`` class, representing image
|
||
adjustments applied to a
|
||
:ref:`render container <luareference-render-container>`.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().screens[tag].container
|
||
Gets the current container user settings for a given screen.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
settings.orientation (read/write)
|
||
The container orientation flags. This is an integer bit mask, where bit 0
|
||
(0x01) is set to mirror horizontally, bit 1 (0x02) is set to mirror
|
||
vertically, and bit 2 (0x04) is set to mirror along the top left-bottom
|
||
right diagonal.
|
||
settings.brightness (read/write)
|
||
The brightness adjustment applied to the container. This is a
|
||
floating-point number.
|
||
settings.contrast (read/write)
|
||
The contrast adjustment applied to the container. This is a floating-point
|
||
number.
|
||
settings.gamma (read/write)
|
||
The gamma adjustment applied to the container. This is a floating-point
|
||
number.
|
||
settings.xscale (read/write)
|
||
The container’s X scale factor. This is a floating-point number.
|
||
settings.yscale (read/write)
|
||
The container’s Y scale factor. This is a floating-point number.
|
||
settings.xoffset (read/write)
|
||
The container’s X offset. This is a floating-point number where one (1)
|
||
represents the X size of the container.
|
||
settings.yoffset (read/write)
|
||
The container’s Y offset. This is a floating-point number where one (1)
|
||
represents the Y size of the container.
|
||
|
||
.. _luareference-render-layfile:
|
||
|
||
Layout file
|
||
~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``layout_file`` class, representing the views loaded from a layout
|
||
file for use by a render target.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
A layout file object is supplied to its layout script in the ``file`` variable.
|
||
Layout file objects are not instantiated directly from Lua scripts.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
layout:set_resolve_tags_callback(cb)
|
||
Set a function to perform additional tasks after the emulated machine has
|
||
finished starting, tags in the layout views have been resolved, and the
|
||
default view item handlers have been set up. The function must accept no
|
||
arguments.
|
||
|
||
Call with ``nil`` to remove the callback.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
layout.device (read-only)
|
||
The device that caused the layout file to be loaded. Usually the root
|
||
machine device for external layouts.
|
||
layout.views[] (read-only)
|
||
The :ref:`views <luareference-render-layview>` created from the layout file.
|
||
Views are indexed by unqualified name (i.e. the value of the ``name``
|
||
attribute). Views are ordered how they appear in the layout file when
|
||
iterating or using the ``at`` method. The index get, ``at`` and
|
||
``index_of`` methods have O(n) complexity.
|
||
|
||
Note that not all views in the XML file may be created. For example views
|
||
that reference screens provided by slot card devices will not be created if
|
||
said slot card devices are not present in the system.
|
||
|
||
.. _luareference-render-layview:
|
||
|
||
Layout view
|
||
~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``layout_view`` class, representing a view that can be displayed in
|
||
a render target. Views are created from XML layout files, which may be loaded
|
||
from external artwork, internal to MAME, or automatically generated based on the
|
||
screens in the emulated system.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
Layout scripts generally
|
||
|
||
manager:machine():render().targets[index].current_view
|
||
Gets the currently selected view for a given render target.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
view:has_screen(screen)
|
||
Returns a Boolean indicating whether the screen is present in the view.
|
||
This is true for screens that are present but not visible because the user
|
||
has hidden the item collection they belong to.
|
||
view:set_prepare_items_callback(cb)
|
||
Set a function to perform additional tasks before the view items are added
|
||
to the render target in preparation for drawing a video frame. The function
|
||
must accept no arguments. Call with ``nil`` to remove the callback.
|
||
view:set_preload_callback(cb)
|
||
Set a function to perform additional tasks after preloading visible view
|
||
items. The function must accept no arguments. Call with ``nil`` to remove
|
||
the callback.
|
||
|
||
This function may be called when the user selects a view or makes an item
|
||
collection visible. It may be called multiple times for a view, so avoid
|
||
repeating expensive tasks.
|
||
view:set_recomputed_callback(cb)
|
||
Set a function to perform additional tasks after the view’s dimensions are
|
||
recomputed. The function must accept no arguments. Call with ``nil`` to
|
||
remove the callback.
|
||
|
||
View coordinates are recomputed in various events, including the window
|
||
being resized, entering or leaving full-screen mode, and changing the zoom
|
||
to screen area setting.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
view.items[] (read-only)
|
||
The screen and layout element :ref:`items <luareference-render-layitem>` in
|
||
the view. This container does not support iteration by key using ``pairs``;
|
||
only iteration by index using ``ipairs`` is supported. The key is the value
|
||
of the ``id`` attribute if present. Only items with ``id`` attributes can
|
||
be looked up by key. The index get method has O(1) complexity, and the
|
||
``at`` and ``index_of`` methods have O(n) complexity.
|
||
view.name (read-only)
|
||
The display name for the view. This may be qualified to indicate the device
|
||
that caused the layout file to be loaded when it isn’t the root machine
|
||
device.
|
||
view.unqualified_name (read-only)
|
||
The unqualified name of the view, exactly as it appears in the ``name``
|
||
attribute in the XML layout file.
|
||
view.visible_screen_count (read-only)
|
||
The number of screens items currently enabled in the view.
|
||
view.effective_aspect (read-only)
|
||
The effective width-to-height aspect ratio of the view in its current
|
||
configuration.
|
||
view.bounds (read-only)
|
||
A :ref:`render bounds <luareference-render-bounds>` object representing the
|
||
effective bounds of the view in its current configuration. The coordinates
|
||
are in view units, which are arbitrary but assumed to have square aspect
|
||
ratio.
|
||
view.has_art
|
||
A Boolean indicating whether the view has any non-screen items, including
|
||
items that are not visible because the user has hidden the item collection
|
||
that they belong to.
|
||
|
||
.. _luareference-render-layitem:
|
||
|
||
Layout view item
|
||
~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``layout_view::item`` class, representing an item in a view. An
|
||
item is drawn as a rectangular textured surface. The texture is supplied by an
|
||
emulated screen or a layout element.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
layout.views[name].items[id]
|
||
Get a view item by ID. The item must have an ``id`` attribute in the XML
|
||
layout file to be looked up by ID.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
item:set_state(state)
|
||
Set the value used as the element state and animation state in the absence
|
||
of bindings. The argument must be an integer.
|
||
item.set_element_state_callback(cb)
|
||
Set a function to call to obtain the element state for the item. The
|
||
function must accept no arguments and return an integer. Call with ``nil``
|
||
to restore the default element state callback (based on bindings in the XML
|
||
layout file).
|
||
|
||
Note that the function must not access the item’s ``element_state``
|
||
property, as this will result in infinite recursion.
|
||
|
||
This callback will not be used to obtain the animation state for the item,
|
||
even if the item lacks explicit animation state bindings in the XML layout
|
||
file.
|
||
item.set_animation_state_callback(cb)
|
||
Set a function to call to obtain the animation state for the item. The
|
||
function must accept no arguments and return an integer. Call with ``nil``
|
||
to restore the default animation state callback (based on bindings in the
|
||
XML layout file).
|
||
|
||
Note that the function must not access the item’s ``animation_state``
|
||
property, as this will result in infinite recursion.
|
||
item.set_bounds_callback(cb)
|
||
Set a function to call to obtain the bounds for the item. The function must
|
||
accept no arguments and return a
|
||
:ref:`render bounds <luareference-render-bounds>` object in render target
|
||
coordinates. Call with ``nil`` to restore the default bounds callback
|
||
(based on the item’s animation state and ``bounds`` child elements in the
|
||
XML layout file).
|
||
|
||
Note that the function must not access the item’s ``bounds`` property, as
|
||
this will result in infinite recursion.
|
||
item.set_color_callback(cb)
|
||
Set a function to call to obtain the multiplier colour for the item. The
|
||
function must accept no arguments and return a
|
||
:ref:`render colour <luareference-render-color>` object. Call with ``nil``
|
||
to restore the default colour callback (based on the item’s animation state
|
||
and ``color`` child elements in the XML layout file).
|
||
|
||
Note that the function must not access the item’s ``color`` property, as
|
||
this will result in infinite recursion.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
item.id (read-only)
|
||
Get the optional item identifier. This is the value of the ``id`` attribute
|
||
in the XML layout file if present, or ``nil``.
|
||
item.bounds_animated (read-only)
|
||
A Boolean indicating whether the item’s bounds depend on its animation
|
||
state.
|
||
item.color_animated (read-only)
|
||
A Boolean indicating whether the item’s colour depends on its animation
|
||
state.
|
||
item.bounds (read-only)
|
||
The item’s bounds for the current state. This is a
|
||
:ref:`render bounds <luareference-render-bounds>` object in render target
|
||
coordinates.
|
||
item.color (read-only)
|
||
The item’s colour for the current state. The colour of the screen or
|
||
element texture is multiplied by this colour. This is a
|
||
:ref:`render colour <luareference-render-color>` object.
|
||
item.blend_mode (read-only)
|
||
Get the item’s blend mode. This is an integer value, where 0 means no
|
||
blending, 1 means alpha blending, 2 means RGB multiplication, 3 means
|
||
additive blending, and -1 allows the items within a container to specify
|
||
their own blending modes.
|
||
item.orientation (read-only)
|
||
Get the item orientation flags. This is an integer bit mask, where bit 0
|
||
(0x01) is set to mirror horizontally, bit 1 (0x02) is set to mirror
|
||
vertically, and bit 2 (0x04) is set to mirror along the top left-bottom
|
||
right diagonal.
|
||
item.element_state (read-only)
|
||
Get the current element state. This will call the element state callback
|
||
function to handle bindings.
|
||
item.animation_state (read-only)
|
||
Get the current animation state. This will call the animation state
|
||
callback function to handle bindings.
|
||
|
||
|
||
.. _luareference-debug:
|
||
|
||
Debugger
|
||
--------
|
||
|
||
Some of MAME’s core debugging features can be controlled from Lua script. The
|
||
debugger must be enabled to use the debugging features (usually by passing
|
||
``-debug`` on the command line).
|
||
|
||
.. _luareference-debug-manager:
|
||
|
||
Debugger manager
|
||
~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``debugger_manager`` class, providing the main interface to control
|
||
the debugger.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine():debugger()
|
||
Returns the global debugger manager instance, or ``nil`` if the debugger is
|
||
not enabled.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
debugger:command(str)
|
||
Execute a debugger console command. The argument is the command string.
|
||
The output is sent to both the debugger console and the Lua console.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
debugger.consolelog[] (read-only)
|
||
The lines in the console log (output from debugger commands). This
|
||
container only supports index and length operations.
|
||
debugger.errorlog[] (read-only)
|
||
The lines in the error log (``logerror`` output). This container only
|
||
supports index and length operations.
|
||
debugger.visible_cpu (read/write)
|
||
The CPU device with debugger focus. Changes become visible in the debugger
|
||
console after the next step. Setting to a device that is not a CPU has no
|
||
effect.
|
||
debugger.execution_state (read/write)
|
||
Either ``"run"`` if the emulated system is running, or ``"stop"`` if it is
|
||
stopped in the debugger.
|
||
|
||
.. _luareference-debug-devdebug:
|
||
|
||
Device debugger interface
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``device_debug`` class, providing the debugger interface to an
|
||
emulated CPU device.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().devices[tag]:debug()
|
||
Returns the debugger interface for an emulated CPU device, or ``nil`` if the
|
||
device is not a CPU.
|
||
|
||
Methods
|
||
^^^^^^^
|
||
|
||
debug:step([cnt])
|
||
Step by the specified number of instructions. If the instruction count is
|
||
not provided, it defaults to a single instruction.
|
||
debug:go()
|
||
Run the emulated CPU.
|
||
debug:bpset(addr, [cond], [act])
|
||
Set a breakpoint at the specified address, with an optional condition and
|
||
action. If the action is not specified, it defaults to just breaking into
|
||
the debugger. Returns the breakpoint number for the new breakpoint.
|
||
|
||
If specified, the condition must be a debugger expression that will be
|
||
evaluated each time the breakpoint is hit. Execution will only be stopped
|
||
if the expression evaluates to a non-zero value. If the condition is not
|
||
specified, it defaults to always active.
|
||
debug:bpenable([bp])
|
||
Enable the specified breakpoint, or all breakpoints for the device if no
|
||
breakpoint number is specified. Returns whether the specified number
|
||
matched a breakpoint if a breakpoint number is specified, or ``nil`` if no
|
||
breakpoint number is specified.
|
||
debug:bpdisable([bp])
|
||
Disable the specified breakpoint, or all breakpoints for the device if no
|
||
breakpoint number is specified. Returns whether the specified number
|
||
matched a breakpoint if a breakpoint number is specified, or ``nil`` if no
|
||
breakpoint number is specified.
|
||
debug:bpclear([bp])
|
||
Clear the specified breakpoint, or all breakpoints for the device if no
|
||
breakpoint number is specified. Returns whether the specified number
|
||
matched a breakpoint if a breakpoint number is specified, or ``nil`` if no
|
||
breakpoint number is specified.
|
||
debug:bplist()
|
||
Returns a table of breakpoints for the device. The keys are the breakpoint
|
||
numbers, and the values are
|
||
:ref:`breakpoint objects <luareference-debug-breakpoint>`.
|
||
debug:wpset(space, type, addr, len, [cond], [act])
|
||
Set a watchpoint over the specified address range, with an optional
|
||
condition and action. The type must be ``"r"``, ``"w"`` or ``"rw"`` for a
|
||
read, write or read/write breakpoint. If the action is not specified, it
|
||
defaults to just breaking into the debugger. Returns the watchpoint number
|
||
for the new watchpoint.
|
||
|
||
If specified, the condition must be a debugger expression that will be
|
||
evaluated each time the breakpoint is hit. Execution will only be stopped
|
||
if the expression evaluates to a non-zero value. For all watchpoints, a
|
||
``wpaddr`` variable is set to the address that triggered the watchpoint.
|
||
When a watchpoint is triggered by a write, a ``wpdata`` variable is set to
|
||
the data being written. If the condition is not specified, it defaults to
|
||
always active.
|
||
debug:wpenable([wp])
|
||
Enable the specified watchpoint, or all watchpoints for the device if no
|
||
watchpoint number is specified. Returns whether the specified number
|
||
matched a watchpoint if a watchpoint number is specified, or ``nil`` if no
|
||
watchpoint number is specified.
|
||
debug:wpdisable([wp])
|
||
Disable the specified watchpoint, or all watchpoints for the device if no
|
||
watchpoint number is specified. Returns whether the specified number
|
||
matched a watchpoint if a watchpoint number is specified, or ``nil`` if no
|
||
watchpoint number is specified.
|
||
debug:wpclear([wp])
|
||
Clear the specified watchpoint, or all watchpoints for the device if no
|
||
watchpoint number is specified. Returns whether the specified number
|
||
matched a watchpoint if a watchpoint number is specified, or ``nil`` if no
|
||
watchpoint number is specified.
|
||
debug:wplist(space)
|
||
Returns a table of watchpoints for the specified address space of the
|
||
device. The keys are the watchpoint numbers, and the values are
|
||
:ref:`watchpoint objects <luareference-debug-watchpoint>`.
|
||
|
||
.. _luareference-debug-breakpoint:
|
||
|
||
Breakpoint
|
||
~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``debug_breakpoint`` class, representing a breakpoint for an
|
||
emulated CPU device.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().devices[tag]:debug():bplist()[bp]
|
||
Gets the specified breakpoint for an emulated CPU device, or ``nil`` if no
|
||
breakpoint corresponds to the specified index.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
breakpoint.index (read-only)
|
||
The breakpoint’s index. The can be used to enable, disable or clear the
|
||
breakpoint via the
|
||
:ref:`CPU debugger interface <luareference-debug-devdebug>`.
|
||
breakpoint.enabled (read-only)
|
||
A Boolean indicating whether the breakpoint is currently enabled.
|
||
breakpoint.address (read-only)
|
||
The breakpoint’s address.
|
||
breakpoint.condition (read-only)
|
||
A debugger expression evaluated each time the breakpoint is hit. The action
|
||
will only be triggered if this expression evaluates to a non-zero value. An
|
||
empty string if no condition was specified.
|
||
breakpoint.action (read-only)
|
||
An action the debugger will run when the breakpoint is hit and the condition
|
||
evaluates to a non-zero value. An empty string if no action was specified.
|
||
|
||
.. _luareference-debug-watchpoint:
|
||
|
||
Watchpoint
|
||
~~~~~~~~~~
|
||
|
||
Wraps MAME’s ``debug_watchpoint`` class, representing a watchpoint for an
|
||
emulated CPU device.
|
||
|
||
Instantiation
|
||
^^^^^^^^^^^^^
|
||
|
||
manager:machine().devices[tag]:debug():wplist(space)[wp]
|
||
Gets the specified watchpoint for an address space of an emulated CPU
|
||
device, or ``nil`` if no watchpoint in the address space corresponds to the
|
||
specified index.
|
||
|
||
Properties
|
||
^^^^^^^^^^
|
||
|
||
watchpoint.index (read-only)
|
||
The watchpoint’s index. The can be used to enable, disable or clear the
|
||
watchpoint via the
|
||
:ref:`CPU debugger interface <luareference-debug-devdebug>`.
|
||
watchpoint.enabled (read-only)
|
||
A Boolean indicating whether the watchpoint is currently enabled.
|
||
watchpoint.type (read-only)
|
||
Either ``"r"``, ``"w"`` or ``"rw"`` for a read, write or read/write
|
||
watchpoint.
|
||
watchpoint.address (read-only)
|
||
The starting address of the watchpoint’s address range.
|
||
watchpoint.length (read-only)
|
||
The length of the watchpoint’s address range.
|
||
watchpoint.condition (read-only)
|
||
A debugger expression evaluated each time the watchpoint is hit. The action
|
||
will only be triggered if this expression evaluates to a non-zero value. An
|
||
empty string if no condition was specified.
|
||
watchpoint.action (read-only)
|
||
An action the debugger will run when the watchpoint is hit and the condition
|
||
evaluates to a non-zero value. An empty string if no action was specified.
|