ZX81 (EightyOne) WIP¶
Background¶
81-libretro is an work in progress port of the EightyOne (a.k.a. THE Sinclair Emulator) to libretro. The classic ZX81 games are all over the Internet, but check the colorized folder for games with Chroma 81 support. There are also many original games for the Zeddy, check Bob's Stuff for some high quality games.
The EightyOne core has been authored by
- Michael D Wynne
The EightyOne core is licensed under
A summary of the licenses behind RetroArch and its cores can be found here.
EightyOne emulates a number of ZX80, ZX81, clones, and other computers based on the same hardware:
- Sinclair ZX80
- Sinclair ZX81
- Timex TS1000
- Timex TS1500
- Lambda 8300
- Ringo R470
- MicroDigital TK85
- Jupiter ACE
However, 81-libretro only emulates the Sinclair ZX81 with 16Kb RAM for now. Other machines will be added as time permits. Push requests are welcome.
The port correctly loads and runs some many games I have around in the p format. tzx format is also supported.
EightyOne also emulates some ZX Spectrum machines, but those were left out of this core on purpose.
Extensions¶
Content that can be loaded by the EightyOne core have the following file extensions:
- .p
- .tzx
- .t81
Databases¶
RetroArch database(s) that are associated with the EightyOne core:
Features¶
RetroArch-level settings or features that the EightyOne core respects.
Feature | Supported |
---|---|
Restart | ✔ |
Screenshots | ✔ |
Saves | ✕ |
States | ✔ |
Rewind | ✔ |
Netplay | ✔ |
Core Options | ✔ |
RetroAchievements | ✕ |
RetroArch Cheats | ✕ |
Native Cheats | ✕ |
Controls | ✔ |
Remapping | ✕ |
Multi-Mouse | ✕ |
Rumble | ✕ |
Sensors | ✕ |
Camera | ✕ |
Location | ✕ |
Subsystem | ✕ |
Softpatching | ✕ |
Disk Control | ✕ |
Username | ✕ |
Language | ✕ |
Crop Overscan | ✕ |
LEDs | ✕ |
Directories¶
The EightyOne core's directory name is 'EightyOne'
The EightyOne core saves/loads to/from these directories.
RetroArch's State directory
- 'content-name'.state# (State)
Geometry and timing¶
- The EightyOne core's core provided FPS is 50
- The EightyOne core's core provided sample rate is 44100 Hz
- The EightyOne core's core provided aspect ratio is (Ratio)
Auto-configuration¶
Since configuring the core for each game can be a tedious task, the EightyOne core features auto-configuration. Games that support auto-configuration are listed in the src/gamedb/gamedb.json file, along with some information and the configuration required to play them.
Currently, there's no way to change the auto-configuration settings short of recompiling the core after making the changes. If you feel the provided auto-configuration could be better or has bugs, please open an issue.
Colorization¶
Colorization works by loading a program prior to loading the game. This program will check if the Chroma 81 expansion is installed, and, if it is, configures the colors of the ZX81 characters, and then loads the original game, which runs unaware that it's playing with colors.
Since the EightyOne core can't load arbitrary programs from the file system, the colorization program and the game must exist in the same file.
Core options¶
The EightyOne core has the following option(s) that can be tweaked from the core options menu. The default setting is bolded.
Settings with (Restart) means that core has to be closed for the new setting to be applied on next launch.
-
Tape Fast Load (Off/On)
Instantly loads files if enabled, or disable it to see the moving horizontal lines while the game loads.
-
8K-16K Contents (auto/ROM shadow/RAM/dK'tronics 4K Graphics ROM + 4K RAM)
Selects the contents of memory addresses between 8192 and 16383, a shadow copy of the ROM, 8K of RAM, or dK'tronics 4K ROM plus 4K of RAM.
-
High Resolution (auto/none/WRX)
Enables WRX high resolution.
-
Emulate Chroma 81 (auto/Off/On)
Enable the Chroma 81 interface (colorization).
Emulate Chroma 81 - auto/On
Emulate Chroma 81 - Off
-
Video Presets (clean/tv/noisy)
Change how the video is emulated (if Chroma 81 is enabled, the video is set to "clean" regardless of this option).
Video Presets - clean
Video Presets - tv
Video Presets - noisy
-
Sound emulation (auto/none/Zon X-81)
Enables sound emulation.
-
Joypad Left mapping (auto/default/new line/shift/space/./0/½/¾/⅚/⅞/9/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
Maps this joypad button to a keyboard key, defaults are the cursor keys for the directional pad and '0' to all the other buttons.
-
Joypad Right mapping (auto/default/new line/shift/space/./0/½/¾/⅚/⅞/9/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
Maps this joypad button to a keyboard key, defaults are the cursor keys for the directional pad and '0' to all the other buttons.
-
Joypad Up mapping (auto/default/new line/shift/space/./0/½/¾/⅚/⅞/9/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
Maps this joypad button to a keyboard key, defaults are the cursor keys for the directional pad and '0' to all the other buttons.
-
Joypad Down mapping (auto/default/new line/shift/space/./0/½/¾/⅚/⅞/9/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
Maps this joypad button to a keyboard key, defaults are the cursor keys for the directional pad and '0' to all the other buttons.
-
Joypad A button mapping (auto/default/new line/shift/space/./0/½/¾/⅚/⅞/9/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
Maps this joypad button to a keyboard key, defaults are the cursor keys for the directional pad and '0' to all the other buttons.
-
Joypad B button mapping (auto/default/new line/shift/space/./0/½/¾/⅚/⅞/9/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
Maps this joypad button to a keyboard key, defaults are the cursor keys for the directional pad and '0' to all the other buttons.
-
Joypad X button mapping (auto/default/new line/shift/space/./0/½/¾/⅚/⅞/9/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
Maps this joypad button to a keyboard key, defaults are the cursor keys for the directional pad and '0' to all the other buttons.
-
Joypad Y button mapping (auto/default/new line/shift/space/./0/½/¾/⅚/⅞/9/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
Maps this joypad button to a keyboard key, defaults are the cursor keys for the directional pad and '0' to all the other buttons.
-
Joypad L button mapping (auto/default/new line/shift/space/./0/½/¾/⅚/⅞/9/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
Maps this joypad button to a keyboard key, defaults are the cursor keys for the directional pad and '0' to all the other buttons.
-
Joypad R button mapping (auto/default/new line/shift/space/./0/½/¾/⅚/⅞/9/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
Maps this joypad button to a keyboard key, defaults are the cursor keys for the directional pad and '0' to all the other buttons.
-
Joypad L2 button mapping (auto/default/new line/shift/space/./0/½/¾/⅚/⅞/9/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
Maps this joypad button to a keyboard key, defaults are the cursor keys for the directional pad and '0' to all the other buttons.
-
Joypad R2 button mapping (auto/default/new line/shift/space/./0/½/¾/⅚/⅞/9/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
Maps this joypad button to a keyboard key, defaults are the cursor keys for the directional pad and '0' to all the other buttons.
-
Transparent Keyboard Overlay (Off/On)
If the keyboard overlay is transparent or opaque.
Transparent Keyboard Overlay - On
Transparent Keyboard Overlay - Off
-
Time to Release key in ms (100/300/500/1000)
How many milliseconds to wait before releasing the key pressed using the keyboard overlay.
Controllers¶
The EightyOne core supports the following device type(s) in the controls menu, bolded device types are the default for the specified user(s):
User 1 device types¶
- None - Input disabled.
- RetroPad - Joypad
- Cursor Joystick - Joypad - Switch to this for joypad inputs.
User 2 device types¶
- None - Input disabled.
- RetroPad - Joypad
- Sinclair Keyboard - Keyboard - Switch to this for keyboard inputs. Switch the User 1 device type to none if the correct keyboard inputs aren't being read.
Controller tables¶
Joypad¶
Attention
Use the Joypad mapping core options to configure the Cursor Joystick inputs.
User 1 Remap descriptors | RetroPad Inputs | Cursor Joystick |
---|---|---|
Joypad B button mapping | ||
Joypad Y button mapping | ||
Keyboard overlay | ||
Joypad Up mapping | ||
Joypad Down mapping | ||
Joypad Left mapping | ||
Joypad Right mapping | ||
Joypad A button mapping | ||
Joypad X button mapping | ||
Joypad L button mapping | ||
Joypad R button mapping | ||
Joypad L2 button mapping | ||
Joypad R2 button mapping |
Keyboard¶
RetroKeyboard Inputs | Sinclair Keyboard |
---|---|
Keyboard Backspace | VK_BACK |
Keyboard Tab | VK_TAB |
Keyboard Clear | VK_CLEAR |
Keyboard Return | VK_RETURN |
Keyboard Pause | VK_PAUSE |
Keyboard Escape | VK_ESCAPE |
Keyboard Space | VK_SPACE |
Keyboard Comma , | VK_COMMA |
Keyboard Delete | VK_DELETE |
Keyboard Keypad 0 | VK_NUMPAD0 |
Keyboard Keypad 1 | VK_NUMPAD1 |
Keyboard Keypad 2 | VK_NUMPAD2 |
Keyboard Keypad 3 | VK_NUMPAD3 |
Keyboard Keypad 4 | VK_NUMPAD4 |
Keyboard Keypad 5 | VK_NUMPAD5 |
Keyboard Keypad 6 | VK_NUMPAD6 |
Keyboard Keypad 7 | VK_NUMPAD7 |
Keyboard Keypad 8 | VK_NUMPAD8 |
Keyboard Keypad 9 | VK_NUMPAD9 |
Keyboard Keypad Period . | VK_DECIMAL |
Keyboard Keypad Divide / | VK_DIVIDE |
Keyboard Keypad Multiply * | VK_MULTIPLY |
Keyboard Keypad Minus - | VK_SUBTRACT |
Keyboard Keypad Plus + | VK_ADD |
Keyboard Up | VK_UP |
Keyboard Down | VK_DOWN |
Keyboard Right | VK_RIGHT |
Keyboard Left | VK_LEFT |
Keyboard Insert | VK_INSERT |
Keyboard Home | VK_HOME |
Keyboard End | VK_END |
Keyboard Page Up | VK_PRIOR |
Keyboard Page Down | VK_NEXT |
Keyboard F1 | VK_F1 |
Keyboard F2 | VK_F2 |
Keyboard F3 | VK_F3 |
Keyboard F4 | VK_F4 |
Keyboard F5 | VK_F5 |
Keyboard F6 | VK_F6 |
Keyboard F7 | VK_F7 |
Keyboard F8 | VK_F8 |
Keyboard F9 | VK_F9 |
Keyboard F10 | VK_F10 |
Keyboard F11 | VK_F11 |
Keyboard F12 | VK_F12 |
Keyboard F13 | VK_F13 |
Keyboard F14 | VK_F14 |
Keyboard F15 | VK_F15 |
Keyboard Num Lock | VK_NUMLOCK |
Keyboard Caps Lock | VK_CAPITAL |
Keyboard Scroll Lock | VK_SCROLL |
Keyboard Right Shift | VK_SHIFT |
Keyboard Left Shift | VK_SHIFT |
Keyboard Right Control | VK_CONTROL |
Keyboard Left Control | VK_CONTROL |
Keyboard Right Alt | VK_MENU |
Keyboard Left Alt | VK_MENU |
Keyboard Print | VK_SNAPSHOT |