The README listed only the SDL2 and the console frontends, and the build instructions for all of them lived in the README. Now there is a Frontends section with the eight of them, each linking to a page with how to build it, how to use it and what it can not do. The libretro pages take the frontend_ prefix as well. The feature list moves to doc/features.md, leaving a summary in the README. The default configuration was wrong in the two places it was written: it listed a parallel card in slot 1 and a mouse in slot 4, which are empty and a Mockingboard, and flags -disk35 and -hd that no longer exist. Both lists now come from -showConfig.
5.8 KiB
Running the libretro core on a Mac
From nothing to the core running in RetroArch, with the checks worth doing on the way. See frontend_libretro.md for what the core is and what it supports.
1. Install RetroArch
Use retroarch-metal, not retroarch.
brew install --cask retroarch-metal
The two casks are the same version and the graphics API makes no difference to
this core, which hands over a finished picture and never touches it. What
matters is the architecture: retroarch-metal is a universal build, while
retroarch is Intel only.
That is not a matter of taste. On an Apple Silicon Mac the Intel build runs under Rosetta, and the Go runtime inside the core cannot allocate memory in a translated process of that size. It dies immediately with
SIGSEGV: segmentation violation
PC=0x1228a0111 m=1 sigcode=1 addr=0x0
runtime.(*mheap).allocNeedsZero(...)
taking RetroArch with it. A core built for both architectures does not help, because the problem is the translation and not the slice that gets loaded.
Check what you have:
lipo -archs /Applications/RetroArch.app/Contents/MacOS/RetroArch
x86_64 arm64 is what you want. Plain x86_64 on an Apple Silicon Mac is the
Intel cask, and the core will not run in it.
2. Build the core
git clone https://github.com/ivanizag/izapple2
cd izapple2/frontend/a2libretro
make universal
make universal builds for both architectures and prints what it made. Plain
make builds for the host only, which is fine on an Intel Mac and fine for an
arm64 RetroArch, but the universal one covers either.
3. Install it
mkdir -p ~/Library/Application\ Support/RetroArch/cores
mkdir -p ~/Library/Application\ Support/RetroArch/info
cp izapple2_libretro.dylib ~/Library/Application\ Support/RetroArch/cores/
cp izapple2_libretro.info ~/Library/Application\ Support/RetroArch/info/
The .info file is what makes RetroArch show the core by name with its list of
what it can and cannot do. Without it the core still works, but it appears
unnamed and the content dialog will not filter Apple II disks.
4. Let the keyboard reach the Apple II
This one is not optional on a computer core, and it is worth doing before you start typing.
RetroArch keeps a good number of keys for its own hotkeys, and they never reach
the machine. F1 opens the menu and, the one that will puzzle you, p pauses
the emulator instead of typing a P. Its answer is Game Focus: with it on,
every key goes to the core and RetroArch keeps only the key that toggles it.
Rebind the toggle first. It comes bound to Scroll Lock, which no Mac keyboard has, so out of the box you can turn Game Focus on and have no way to turn it off again.
- Settings > Input > Hotkeys > Game Focus (Toggle), press it and then press
F12, or anything else free. Do not use the alt or option keys, the core uses those for the open and closed apple. - Settings > Input > Auto Enable 'Game Focus' Mode and set it to
Detect. The core tells the frontend that it has a keyboard, so Game Focus comes on by itself whenever the emulator is running, and stays off for your game cores.Onalso works and applies to every core, where F12 turns it off.
The menu search, the magnifier or /, finds both if you type focus.
If you do end up stuck in Game Focus with no working toggle, ⌘Q or the macOS menu bar quits RetroArch. Those are handled by macOS and not by RetroArch's input, so Game Focus does not swallow them.
5. Check that it works
Each of these checks something different, so it is worth going through them in order the first time.
- Load Core. "Apple II (izapple2)" is in the list, which means the
.infofile was found. Pick it. - Start Core. The Apple //e boots DOS 3.3 and lands on the
]prompt after a couple of seconds. The picture, the disk emulation and the frame timing all work. - Type
PRINT 2+2and Return. It answers4. The keyboard is reaching the machine, so Game Focus is doing its job. - Settings > Video > Scaling, set Aspect Ratio to
Core Provided. The picture is 4:3 and the text is not stretched. - Quick Menu > Core Options, set Monitor to
green. The screen turns green phosphor at once, with no reset. - Type
CATALOGand Return. The files of the DOS 3.3 diskette are listed, so the drive is being read. Press a key when the listing pauses to see the rest. - Type
SAVE HELLOand Return, then look in the save directory, which Settings > Directory > Saves shows and is~/Documents/RetroArch/savesby default. There is ados33.dsk.ovlof a few kilobytes: the save went to an overlay and the DOS 3.3 built into the core was not touched. - Load Content and pick a
.dskor.wozgame. It boots. - For a game on several diskettes, load an
.m3ulisting them and open Quick Menu > Disk Control. The diskettes are there by name, and ejecting, selecting another one and inserting swaps it.
When something goes wrong
RetroArch dies as soon as the core loads, with a SIGSEGV in
runtime.(*mheap).allocNeedsZero in the log. The Intel RetroArch under Rosetta,
see step 1. Install retroarch-metal.
The core does not appear in Load Core. Wrong directory, check
Settings > Directory > Cores. If it loads but shows up unnamed, the .info
file is not in the info directory.
Some keys do nothing, or p pauses the emulator. Game Focus is off, see
step 4.
Nothing gets you out of Game Focus. The toggle is still on Scroll Lock. ⌘Q to quit, then rebind it.
To see what the core itself has to say, run RetroArch from a terminal instead of from the Finder, so that its output is not thrown away:
/Applications/RetroArch.app/Contents/MacOS/RetroArch 2>&1 | tee /tmp/retroarch.log