Glossary
========
This page defines important terms that are used throughout libretro.py's documentation.
.. glossary::
callback
callback function
A function that's passed to a :term:`core` or :term:`frontend` at runtime,
rather than at link-time like most C functions.
.. note::
Some libretro frontends link their cores statically due to platform limits.
libretro.py isn't one of them --
all cores must be loaded at runtime!
content
The data that's loaded into a :term:`core`,
usually a :term:`ROM` containing a game.
core
An application wrapped in a library that exports the :term:`libretro` API.
Usually an emulator, but sometimes a game engine or media player.
Libretro cores are distributed as dynamically-loaded libraries on most platforms,
including all those supported by libretro.py.
driver
backend
An object that implements a subset of the :term:`libretro` API
in terms of the :term:`protocol`\s defined in :mod:`libretro.drivers`.
.. tip::
libretro.py borrows this idea from :term:`RetroArch`,
which uses this term similarly;
most of its subsystems have multiple implementations
that can be swapped out at runtime without the :term:`core` noticing.
For example, the Windows build of RetroArch can use WASAPI or DirectAudio for sound output;
both backends implement the same internal interface.
environment call
envcall
A :term:`callback` function exposed to a :term:`core`
that queries, modifies, or provides an interface to
the :term:`frontend`'s runtime environment.
All envcalls are invoked through the callback
passed to :meth:`.Core.set_environment`
(or equivalently, :c:type:`retro_environment_t`).
frontend
An application that loads and runs :term:`libretro` :term:`core`\s.
:term:`RetroArch` is the most well-known libretro frontend,
but many others exist.
libretro
A common interface between the :term:`frontend` and the :term:`core`;
exposing a game or emulator with this interface
allows it to benefit from a frontend's supported features
without the author having to implement it themselves.
Similar APIs such as `BizHawk `_
and `Jolly Good `_ exist,
but these fall outside the scope of libretro.py.
libretro.h
The specific C header that defines the :term:`libretro` interface.
Almost all types in :mod:`libretro.api` are based on this header.
.. seealso::
`libretro.h`_ on GitHub
port
A "slot" that accepts input from an abstract device like the :term:`RetroPad`.
These usually correspond to an emulated platform's controller ports,
but not necessarily.
protocol
Python term for an interface.
It's convenient to define one as a :class:`~typing.Protocol` subclass,
but not usually required.
RetroArch
`RetroArch `_ is the canonical example ("reference implementation")
of a libretro :term:`frontend`.
Though it's the most popular, others exist -- including libretro.py!
RetroPad
gamepad
joypad
joystick
The abstraction over a gamepad used by libretro.
Modeled after a SNES controller with analog triggers and joysticks.
All cores that use gamepads specify their input in terms of RetroPad buttons.
ROM
ROM image
disk image
dump
ISO
A digital backup of a game's **r**\ead-**o**\nly **m**\emory,
including all of its code and data.
Most :term:`core`\s accept one or more of these as :term:`content`.
Sometimes called an ISO or a dump,
especially for disk-based media.
.. note::
Although there are technical nuances in how these terms are used,
the distinctions aren't relevant to libretro.py unless otherwise noted.
subsystem
A secondary platform that augments a core's primary emulated hardware.
virtual environment
venv
A project-scoped installation of Python and various packages.
Useful for developing a project with multiple versions of Python at once.
Think of it like Python's equivalent of :file:`node_modules`.
.. hint:: Not related to :term:`environment call`\s.
.. _libretro.h: https://github.com/libretro/RetroArch/blob/master/libretro-common/include/libretro.h