libretro core

August 23, 2026 ยท View on GitHub

There is a libretro core.

RetroPad

A retropad can be plugged in port 1 (with or without analog stick).

DeviceAxisIDDefault actionRemapped
StandardAButton 0
StandardBButton 1
StandardX
StandardY
StandardLeftPDL(0) = 0
StandardRightPDL(0) = 255
StandardUpPDL(1) = 0
StandardDownPDL(1) = 255
StandardLSpace
StandardREnter
StandardL2Left
StandardR2Right
StandardL3
StandardR3
StandardSelect
StandardStart
AnalogLeftXPDL(0)
AnalogLeftYPDL(1)
MouseLeftButton 0
MouseRightButton 1
MouseXPDL(0)
MouseYPDL(1)

All standard buttons can be remapped to keys (in which case they lose their default action): buttons are remapped on all connected devices.

The speed of the mouse pointer can be tuned with an option.

Keyboard

  • END: equivalent to F2 to reset the machine
  • HOME: save configuration to /tmp/applewin.retro.conf

In order to have a better experience with the keyboard, one should probably enable Game Focus Mode (normally Scroll-Lock) to disable hotkeys. Even better set Auto Enable 'Game Focus' Mode to Detect.

Misc

Easiest way to run from the build folder: retroarch -L source/frontends/libretro/applewin_libretro.so ../bin/MASTER.DSK

The core can be statically linked in Linux and MSYS2, pass -DSTATIC_LINKING=ON to cmake, or disable networking -DENABLE_NETWORKING=OFF.

M3U Playlists and Disk Control

The core cupports libretro Disk Control Interface, allowing disk swaps from the frontend UI (the drive is selectable via a core option).

M3U format

A .m3u file lists disk images, one per line. Paths are relative to the M3U file's directory, similar to VICE.

Ultima V - Disk A.dsk
Ultima V - Disk B.dsk

Supported directives

DirectiveDescription
#Comment (line is ignored)
#SAVEDISK:Creates a writable blank disk in the save directory
#LABEL:Sets the display label for the next file entry
#EXTINF:Standard M3U extended info - label follows the first comma
| (pipe in filename)path.dsk|Label sets a display label for that entry

Label priority: #LABEL: / #EXTINF: override pipe labels.

#SAVEDISK:

Adds a writable save disk to the playlist. The disk image is created (as a blank .dsk) in the save directory on first use and reused on subsequent launches.

Game - Side A.dsk
Game - Side B.dsk
#SAVEDISK:Character
#SAVEDISK:

The label after #SAVEDISK: is optional. If omitted, an automatic index is used. The resulting label shown in the frontend is always prefixed with "Save Disk ".

Note: the created disk is unformatted (all zeros). Most Apple II games that request a save disk will format it themselves.

Pipe-delimited labels

Game - Side A (Disk 1 of 3).dsk|Side A
Game - Side B (Disk 2 of 3).dsk|Side B

The text after | becomes the display label in the frontend's disk control UI instead of the filename stem.

MultiDrive

When enabled, the second disk in the playlist is automatically inserted into DRIVE_2 at load time. This is useful for games that expect both drives populated (e.g. Ultima, Wizardry).

MultiDrive is triggered by either:

  • Naming the M3U file with (MD) in the stem, e.g. Ultima V (MD).m3u
  • Enabling the Floppy MultiDrive core option

Save disks (#SAVEDISK:) are never auto-inserted into DRIVE_2.

Core options

OptionValuesDescription
Disk Control DriveDrive 1, 2Active drive for the Disk Control Interface.
Playlist Start DiskFirst, PreviousWhether to start from disk 1 or resume from the previously used disk
Floppy MultiDriveDisabled, EnabledAuto-insert second disk into DRIVE_2 for all playlists