Description:
Amico8 is a PICO-8 fantasy console emulator for Amiga computers with a
68020 or better processor. It loads and runs PICO-8 cartridges in
both text (.p8) and image (.p8.png) format directly from the Amiga
file system.
Project status:
Amico8 is ready. Roughly 1100 cartridges have been tested and they
launch and play, with the AOT/JIT native compiler ON just as with it
OFF. Every problem found or reported has been solved. Audio is at
about 90%: all waveforms, the note effects and the music sequencer are
in place, a few timbres are still being tuned. Unknown bugs may of
course still be in there - report them - but this is meant to work.
Features:
- Runs the vast majority of PICO-8 cartridges (.p8 and .p8.png)
- Full 128x128 pixel display, 2x scaled to 256x256 via Amiga copper tricks
- 16-colour PICO-8 palette mapped to Amiga 12-bit hardware palette
- Joystick (port 2) and keyboard input
- Mouse support (port 1) for carts that use mouse API
- Paula audio: all 8 PICO-8 waveforms (triangle, tilted-saw, saw, square,
pulse, organ, noise, phaser) plus the buzz/noiz timbre variants, the note
effects (slide, vibrato, drop, fade in/out, arpeggio) and custom instruments
- Serial PCM streaming - serial(0x808) digitised audio for carts with
sampled speech or music (Berzerk, Impossible Mission, Amstrad chip tunes)
- AOT (Ahead-of-Time) native m68k code compiler - ON by default for a
noticeably faster emulator (switch it off in the launcher, or with the
NOAOT CLI option, if a particular cart misbehaves under it)
- Multi-cart support: load() chains between cartridges (e.g. POOM, The Mind)
- BBS cart browser: browse and download cartridges from the Lexaloffle BBS
directly from the Amiga (requires AmiSSL + bsdsocket.library)
- GUI launcher, with a Check Version button that asks juen.in whether a
newer release is available and can install it for you: it fetches the
build you are running, keeps the old one as <name>.old, and restarts
- Auto Update checkbox: does that check by itself at every start, installs
what it finds and restarts into it, without asking each time
Two executables are provided:
Amico8 - 68020/030 version, no FPU required.
Runs on any Amiga with a 68020 or better.
Amico8_040 - 68040/060 version, optimised instruction scheduling.
Recommended for 040/060 systems.
Recommended processor: 68060.
Usage:
Amico8 - start with GUI! (recommended)
or from CLI:
Amico8 CART=<cartridge.p8.png>
Amico8 ? (show all CLI options)
Controls:
Joystick port 2 / cursor keys - d-pad (btn 0..3)
Z / Y / C / Alt (or fire 1) - O button (btn 4)
X / Ctrl (or fire 2) - X button (btn 5)
Enter - open / close pause menu
P - freeze (debug pause)
F4 - jump to the previous cart *
F5 - jump to a random cart *
F6 - jump to the next cart *
ESC - return to launcher
* F4/F5/F6 work only when started from the GUI launcher (they
step through the launcher's games-folder list). A short
"now loading <name>" splash shows which cart was picked
(press ESC during it to drop back to the launcher instead).
When you return to the launcher, the selection lands on the
cart you were last playing - including one reached via F4/F5/F6.
Limitations:
- Some newer PICO-8 API calls may not be implemented
- Serial PCM (digitised) audio plays on a single Paula channel, so while a
cart streams it the PCM comes out of one speaker (mono), the synth timbre
is close to but not bit-exact with real PICO-8
- SOME CARTS NEED THE NETWORK AND LOOK BROKEN WITHOUT IT. A cart can ask for
a companion cartridge you do not have on disk, and Amico8 fetches it from
the Lexaloffle BBS. Offline (or without bsdsocket.library/AmiSSL) that
fetch cannot finish and the cart sits on the loading screen - it is waiting
for a file, not crashing. linecraft is one: it asks for worldata.p8 before
drawing anything. Connect the Amiga, or put the missing cart in the same
drawer.
---
Tested games:
Over 1100 tested PICO-8 cartridges launch and run, with the AOT/JIT native
compiler ON just as well as with it OFF. Everything found or reported has
been fixed.
---
Code used:
Lua 5.2 - scripting engine base
Copyright (C) 1994-2015 Lua.org, PUC-Rio
Authors: R. Ierusalimschy, L. H. de Figueiredo, W. Celes
License: MIT (http://www.lua.org/license.html)
The Lua VM and standard libraries form the core of the interpreter.
z8lua - PICO-8-compatible Lua fork (from the Zepto-8 project)
Copyright (C) 2016-2024 Sam Hocevar <sam@hocevar.net>
License: WTFPL (http://www.wtfpl.net/)
Source: https://github.com/samhocevar/zepto8
z8lua extends Lua 5.2 with PICO-8-specific syntax (short-if, compound
assignment operators, integer division, fix32 number type, PICO-8 math
functions). The file z8lua/lpico8lib.c is taken directly from Zepto-8.
p8_compress - PICO-8 cartridge decompression
Copyright (C) 2014-2022 Lexaloffle Games LLP
License: MIT
Decompresses PICO-8 Lua source code from both old ":c:" format and
modern "pxa" compressed format.
stb_image - PNG image loader
Author: Sean Barrett
License: MIT / Public Domain
Source: https://github.com/nothings/stb
Used for loading .p8.png cartridge images.
FAKE-08 - reference PICO-8 implementation
Author: Jonathan (jtothebell)
License: MIT
Source: https://github.com/jtothebell/fake-08
A HUGE thank-you here. FAKE-08's source was by far the most
valuable reference in this whole project - over and over it was
what let us pin down exactly how PICO-8 really behaves: API
semantics, the audio synthesis model, iterator and metatable
edge cases, the fill-pattern glyph values, the _update_buttons
contract, music-pattern timing, and countless smaller details
were all settled by reading it. Many bugs would have taken days
longer (or stayed unsolved) without it. Not a single line of
FAKE-08 is in the Amico8 binary - it was only consulted during
development - but its clarity made this port possible. Thank you,
Jonathan.
---
Thanks:
Kempy/Veezya, MWB113, Tytus, Paluch, tomcat666, Aladin - testing
Quad, OlekW200i, Wozik, Mirq, Borsuk - moral support
Jonathan (jtothebell) - FAKE-08 reference implementation
---
Pawel "Juen" Nowak
Contact: j@ki.je or via imp3!
|