Multitini

Multitini: six more machines on the same card.

Multitini is the Appletini ONE’s second firmware. It sets the Apple II aside and loads complete FPGA machines from the SD card: a Commodore 64, a Game Boy / Game Boy Color, a Genesis / Mega Drive, a Nintendo Entertainment System, a Vectrex and an Apple IIgs at nearly 60 MHz. It installs next to the Appletini firmware, and you choose which one starts.

What it is

The Appletini firmware uses the card’s FPGA to serve an Apple II. Multitini uses the same FPGA, ARM cores, SD card, HDMI output, audio jack and USB port to be another machine. Each machine, or core, is a complete FPGA image stored on the SD card and loaded on demand. Multitini supplies everything around it: the on-screen menu, USB keyboards and gamepads, media browsing, saves, display settings and effects.

CoreVariantsWhat it loads
Commodore 64PALD64 and G64 disks, PRG programs, CRT cartridges
Game Boy / Game Boy ColorOneGB and GBC cartridges
Genesis / Mega DriveNTSC and PALMD, GEN, BIN and SMD cartridges
Nintendo Entertainment SystemNTSCNES cartridges, iNES and NES 2.0
Vectrex / Vectrex32OneVEC and BIN cartridges, Vectrex32 BASIC programs, OVR overlays
Apple IIgsOne, with ROM 1 or ROM 3HDV, PO and 2MG hard disks; PO, 2MG and WOZ 3.5-inch disks; DSK and WOZ 5.25-inch disks

Releases and their notes are on the Multitini releases page. The source is on GitHub at github.com/hasseily/multitini-one.

What you need

  • The Appletini ONE with Appletini firmware F1.3.0 and Golden Boot B2.0.6, plus Multitini itself. Installing covers all three.
  • Power, one of two ways:
    • Inside an Apple //e: the card takes its 5 V from the Apple and needs no jumper. The Apple only powers the card.
    • Out of the Apple: the standalone jumper at the top left of the card and the 12 V supply on its DC input, exactly as for ONE//e. The jumper supplies the card’s 5 V; it does not choose the firmware.
  • An HDMI display on the mini-HDMI port.
  • A USB keyboard, USB gamepads, or both on the green (bottom) USB-C host port, plus a USB mouse for the Apple IIgs. A standard hub connects several at once.
  • An SD card with the multitini folder from the download, and your games.
Multitini does not use the Apple //e keyboard. It ignores the Apple bus entirely, even with the card in the Apple: no Apple keyboard, joystick, disks or slot cards. When a core needs a keyboard, like the Commodore 64, connect a USB keyboard. The console cores play with USB gamepads, and a keyboard works for them too.

Sound comes out of the card’s 3.5 mm audio jack, as with Appletini. There is no audio over HDMI.

Installing

You need two downloads, both linked from the Downloads page:

  • The Appletini F1.3.1 release: its FIRMWARE.BIN and BOOT.BIN (Golden Boot B2.0.6).
  • The latest Multitini release. Its zip has one top folder, named for the version, that holds FIRMWARE-MULTITINI.BIN and the multitini folder with the six cores.
  1. Copy FIRMWARE.BIN, BOOT.BIN and the contents of the Multitini zip’s top folder to the top level of the SD card. If the card already has a multitini folder, merge the new one into it.
  2. Power-cycle the card. The Golden Boot installs Appletini F1.3.1 and renames its file to FIRMWARE.OK.
  3. Press A at the A:APPLETINI boot prompt, open About, choose Update Golden Boot..., then Update and reboot. In an Apple this works only from the menu opened at the boot prompt.
  4. Keep the card powered. The new Golden Boot restarts the card, installs Multitini from FIRMWARE-MULTITINI.BIN (which becomes FIRMWARE-MULTITINI.OK) and starts Appletini again.

The full procedure in the docs explains each step and what to check. If your card already has Golden Boot B2, copying FIRMWARE-MULTITINI.BIN and the multitini folder and power-cycling is enough. Never rename FIRMWARE-MULTITINI.BIN to FIRMWARE.BIN.

Afterwards, the SD card looks like this. Leave each core’s core.cfg and .bin files as they are: the card checks their sizes and checksums before loading a core.

FIRMWARE.OK
FIRMWARE-MULTITINI.OK
BOOT.OK
multitini/
  cores/
    apple-iigs/  apple-iigs-native.bin  core.cfg  roms/  media/
    c64/         c64-pal.bin  core.cfg  roms/  media/
    gbc/         gbc-native.bin  core.cfg  media/
    genesis/     genesis-ntsc.bin  genesis-pal.bin  core.cfg  media/
    nes/         nes-ntsc.bin  core.cfg  media/
    vectrex/     vectrex-native.bin  core.cfg  roms/  media/

Switching firmware

  • From Appletini: Boot Settings > Switch to Multitini restarts the card into Multitini for this session. Boot Settings > Startup firmware picks the firmware for every power-on.
  • From Multitini: System > Switch to Appletini restarts into Appletini once, and System > Startup firmware saves the power-on choice.
  • A switch saves pending disk, save and settings writes first, and leaves the startup choice unchanged. A power cycle always starts the startup firmware.

In an Apple, the program running on the Apple loses the card’s services while Multitini runs. With Appletini as the startup firmware, the simplest way back is to turn the Apple off and on again. If a firmware ever fails to start, the Golden Boot’s serial recovery can start either one.

At power-on Multitini shows its standby screen, PRESS F12 FOR MENU, unless System > Autoboot current core is on. Open or close the menu any time:

  • F12 on a USB keyboard. F12 always goes to the menu, never to the running machine.
  • On a gamepad, hold Select and Start together for half a second, then release both. Pressed on their own, Select and Start still reach the game. A controller’s Home, Guide or PS button also opens the menu.

In the menu, the D-pad or arrow keys move, A or Enter applies, B or Esc goes back, and the L/R shoulders or Shift+Tab/Tab change pages. The running machine pauses and its sound mutes while the menu is open.

PageWhat it holds
CoresChoose a machine and its variant. Your media stays with each core.
MediaDisks, cartridges and programs for the running core, and its save status.
VideoResolution, picture size and border, saved per core.
EffectsColor and CRT-style effects, saved per core.
ControlsKeyboard layout and controller assignment for the running core.
OptionsSettings the running core supplies, such as C64 turbo or Genesis pad type.
SystemFirmware switching, Golden Boot, clock, documents, USB and board status.

System > Read documents opens any TXT file under multitini on the SD card, without touching mounted media. The System page also shows the Golden Boot version and, while a BOOT.BIN is on the SD card, offers Update Golden Boot....

Cores & media

On the Cores page, Enter starts a machine and Left/Right chooses its variant, such as Genesis NTSC or PAL. The running one is marked LIVE. A switch finishes pending saves, checks and loads the new core, and brings back the media you last used with it.

Put your games in each core’s media folder:

multitini/cores/apple-iigs/media/
multitini/cores/c64/media/
multitini/cores/gbc/media/
multitini/cores/genesis/media/
multitini/cores/nes/media/
multitini/cores/vectrex/media/

Then load them from the Media page. The C64, Game Boy and Genesis browsers list their folder without subfolders; the Vectrex browser shows subfolders. A browser lists up to 144 entries, and file names must be shorter than 96 characters. The download includes no games or disks; bring your own.

Controllers

Multitini supports generic USB HID gamepads and the wired Xbox 360 (045e:028e), Xbox One (045e:02ea) and DualShock 4 (054c:05c4, 054c:09cc). Bluetooth is not supported.

By default the D-pad or left stick gives directions, and the face buttons map by position to each machine’s buttons, as listed below. Controls > Controllers remaps any pad, tests it, adjusts sticks and triggers, and assigns it to Automatic, Player 1 or Player 2 (joystick port 1 or 2 on the C64), or Not used. Maps are saved for each controller and each core.

Commodore 64

A PAL Commodore 64 with a 1541 drive as device 8. Use a USB keyboard: the C64 needs one for nearly everything beyond the joystick.

ROMs

The download puts the system ROMs in multitini/cores/c64/roms/: basic.bin, kernal.bin, characters.bin and 1541.bin, plus a fast-loading pair in roms/fast/. Without the first three the C64 cannot start; without 1541.bin, Drive 8 shows Drive ROM required.

Media

  • Drive 8: mount a D64 or G64 disk. Enter on a mounted disk saves pending writes and ejects it. Normal D64 images are writable; G64 and D64 images with error information are read-only. At a “next disk” prompt, mount the next disk here; no restart is needed.
  • Mount & Run: pick a program from the mounted D64. Enter loads it through the drive and runs it. Right only types LOAD"name",8,1, so you type RUN yourself. Left uses a direct-to-memory shortcut for eligible BASIC programs.
  • Cartridge: load a CRT image. Normal cartridges and the common bank-switched types are supported, including Ocean, Fun Play, Super Games, Epyx FastLoad, Final Cartridge I/II, C64GS, Dinamic, Magic Desk and Simons’ BASIC.
  • Program: load a loose PRG; the C64 resets and runs it.

On the first start, a drive8.d64 in the media folder is mounted automatically.

Options

  • Fast serial ROMs: uses the fast ROM pair to speed up loads that go through the standard disk routines. Custom fast loaders are not affected. Changing it restarts the C64.
  • CPU turbo: Smart 2x runs the CPU faster while keeping drive timing native. Off by default; leave it off for timing-sensitive software.

Keyboard

The default layout is US symbolic: keys type the symbols printed on your USB keyboard. Controls > Keyboard switches to MiSTer positional, which follows the C64 key positions. The special keys:

USB keyC64 key
EscRUN/STOP
Tab, Alt or GUI (Windows/Command)Commodore key
F11RESTORE
F9 / F10↑ (up-arrow) / +
Caps LockSHIFT LOCK
BackspaceINST/DEL
F1–F8F1–F8
Arrow keysCursor keys

Joysticks

A gamepad is a C64 joystick: A is Fire, B is Space and X is Control. Automatically assigned pads go to joystick port 2, which most games read; Controls > Keyboard joystick moves them to port 1.

Game Boy & Game Boy Color

Load .gb and .gbc cartridges up to 8 MB from the Cartridge row. No boot ROM is needed; the core has an open-source one built in.

Game BoyGamepadKeyboard
D-padD-pad or left stickArrow keys
A / BA / BZ / X
Start / SelectStart / SelectEnter / Right Shift

Battery RAM saves automatically to the SD card. The Battery save row shows Changes pending or Saved to SD. The Game Boy has one player.

Genesis & Mega Drive

Choose the NTSC or PAL variant on the Cores page; the cartridge header selects Japanese or export behavior within it. Load .md, .gen, .bin and .smd cartridges up to 8 MB; byte-swapped and SMD-format dumps are recognized. Two players are supported.

GenesisGamepadKeyboard (player 1)
D-padD-pad or left stickArrow keys
A / B / CA / B / XZ / X / C
X / Y / ZY / left shoulder / right shoulderA / S / D
Start / ModeStart / SelectEnter / Right Shift

Options > Controller 1 and Controller 2 choose a 6 buttons (the default) or 3 buttons pad for games that need the older protocol; a change reloads the cartridge after saving its memory. Battery RAM and EEPROM saves are written to the SD card automatically, with their status on the Cartridge save row.

Nintendo Entertainment System

An NTSC NES for standard cartridges. Load .nes files, in iNES or NES 2.0 format, from the Cartridge row; no system ROM is needed. Multitini supports mappers 0 (NROM), 1 (MMC1), 2 (UxROM), 3 (CNROM), 4 (MMC3), 7 (AxROM), 9 (MMC2), 10 (MMC4), 11 (Color Dreams), 66 (GxROM) and 71 (Camerica), and refuses other cartridges before they start. Two players are supported.

NESGamepadKeyboard
D-padD-pad or left stickArrow keys
A / BA / BZ / X
Start / SelectStart / SelectEnter / Right Shift

Battery RAM saves automatically to the SD card. The Battery save row shows its status.

Vectrex

The Vectrex needs its 8 KB system ROM (Mine Storm plus the executive) at multitini/cores/vectrex/roms/bios.bin; the download includes it. With no cartridge, the Vectrex starts its built-in Mine Storm.

  • Cartridge: load a .vec or .bin cartridge.
  • Overlay: load MiSTer .ovr screen artwork without restarting the game. An overlay with the same name as the game loads automatically; Mine_Storm.ovr goes at the top of the media folder.
  • Vectrex32 BASIC: run a .bas program. F12 stops it and returns to the menu. BASIC programs run without the system ROM.

Gamepad A, B, X and Y are buttons 1–4, and the analog stick works as the Vectrex stick; on a keyboard, use the arrow keys and Z X C V. The Video page adds Overlay enabled, Overlay brightness and Beam brightness.

Apple IIgs

A complete Apple IIgs, with a virtual ZipGS accelerator that runs its 65816 at up to 57.3 MHz, nearly 60 MHz. Use a USB keyboard, and a USB mouse for the desktop.

ROMs

The download puts the ROMs in multitini/cores/apple-iigs/roms/: the system ROMs rom1.rom and rom3.rom, the ADB keyboard and mouse controller ROMs adb1.rom and adb3.rom, the character ROM char.rom and the hard disk boot ROM hdd.rom. If they fail to load, Media > System ROMs tries again.

Disks

  • Hard disk 1–8: eight SmartPort drives in slot 7 for .hdv, ProDOS-order .po and ProDOS .2mg images. An empty drive keeps its number, so the others never move.
  • 3.5-inch floppy: an 800 KB .po or .2mg, or a 3.5-inch WOZ2.
  • 5.25-inch floppy: a 140 KB DOS-order .dsk, or a 5.25-inch WOZ2.

PO, 2MG and DSK floppies are writable. Enter on a mounted disk saves pending writes and ejects it; eject your disks before removing power. The media folder also keeps the IIgs battery RAM (pram.bin), the core’s settings and its recovery journals: leave them, and any .gsraw file next to a floppy, where they are. Save PRAM and Load PRAM on the Media page store and restore the Control Panel settings. The download has no IIgs system or game disks; bring your own.

Options

  • Accelerator card: ZipGS, or None for a stock machine. Changing it saves your media and restarts the IIgs.
  • CPU acceleration: with ZipGS, the 65816 speed: 2.8 MHz (stock), 3.6, 4.8, 7.2, 14.3, 28.6 or 57.3 MHz. Peripheral timing stays at stock speed.
  • ROM version: ROM 1 or ROM 3. Changing it saves and ejects your media and restarts the machine.
  • Speaker delay, Joystick delay, Counter delay, Sync to 1 MHz and IRQ delay: the ZipGS compatibility settings. Leave IRQ delay Off unless AppleTalk needs it.
  • Force self test: runs Apple’s self test on reset.
  • Mouse sensitivity: 25% to 400%; 100% is normal.

Keyboard, mouse & joystick

The USB keyboard is the IIgs keyboard. Alt is Open Apple (Command) and the Windows key is Option; F12 still opens the menu. To reset the IIgs:

USB keysApple IIgs
Ctrl+F11Ctrl-Reset
Ctrl+Alt+F11Ctrl-Open Apple-Reset (restart)

A USB mouse is the ADB mouse. A USB gamepad with an analog stick is the IIgs joystick, with three fire buttons; remap it in Controls > Controllers.

Video & effects

The Video page chooses the same six output resolutions as Appletini, from 1024×768 to 1920×1080, all at about 60 Hz. Resolution applies to every core; everything else on the page is saved per core: Video size (Auto or 1x–4x), a Border with a type (single line, double line, corner brackets, dashed or soft glow), one of 16 colors and 1–20 px of padding. As with Appletini, the display must accept the chosen timing; the card does not read the display’s capabilities.

The Effects page is saved per core and off by default. Check Enable effects, then adjust brightness, contrast, gamma, saturation, hue, color temperature and RGB gain; a display tint (color, white, green, amber or sepia); negative and posterize; and the CRT looks: scanlines, pixel mask (aperture grille, shadow mask or LCD grid), dot bleed, persistence, blur and glow.

Saves, screenshots & settings

Game Boy, Genesis and NES saves are written automatically next to the cartridge, as the cartridge file name plus .sav. C64 disk writes go back into the D64 image, and Apple IIgs disk writes into the mounted disk image. While a save is in progress the menu says Saving progress. Wait for Saved before removing power. Wait for it: power lost before then can lose the latest progress.

PrtScr saves the game picture with its effects, and Shift+PrtScr saves the whole screen, menu included, as PNG files in the SD card’s screenshots folder. Both can also be assigned to controller buttons. The standby screen cannot be captured.

Multitini’s settings live in multitini/settings.bin, separate from Appletini’s. Back it up before trying older Multitini firmware.

Limits

  • Multitini never uses the Apple: no Apple keyboard, display, disks or physical cards, and none of Appletini’s virtual cards. Use USB input.
  • C64: PAL only; one drive; no tape, 1581 or REU; no T64 files; G64 disks are read-only.
  • Game Boy: the cartridge real-time clock is not saved, and MBC7 and TAMA saves are not supported; no Super Game Boy, link cable or save states.
  • Genesis: no Sega CD, 32X, Master System, Pico or Virtua Racing, no light guns and no multitap.
  • NES: NTSC only; no Famicom Disk System, VS or PlayChoice, Zapper or other expansion peripherals, and no save states.
  • Apple IIgs: no NIB disk images. Software that times itself by the spacing of its I/O accesses may misbehave when accelerated; set Accelerator card to None for it.
  • Wired USB controllers only; no Bluetooth.
  • Every core outputs at about 60 Hz, including PAL machines.

Questions, or a game that misbehaves? Tell the community on the Appletini FPGA Discord or open an issue on GitHub.