Skip to content

Enterprise - 64/128 (ep128emu)

Background

Leverage the convenience of libretro/retroarch to emulate the Z80 based home computers that the original ep128emu supports - that is, Enterprise 64/128, Videoton TVC, Amstrad CPC and ZX Spectrum. Focus is on Enterprise and TVC.

The ep128emu core has been authored by:
- Istvan Varga (ep128emu)
- Zoltan Balogh (libretro core specific modifications)

The ep128emu core is licensed under GPL2. A summary of the licenses behind RetroArch and its cores can be found here.

Requirements

Since the emulated machines are 8-bit platforms from the 1980's, modern setups should have no problem emulating them. Tested on Raspberry Pi 2.

Extensions

Content that can be loaded by the ep128emu core have the following file extensions:

  • .img - Enterprise, CPC or TVC floppy disk image
  • .dsk - Enterprise, CPC or TVC floppy disk image
  • .tap - Enterprise or ZX Spectrum tape image
  • .dtf - Enterprise compressed file
  • .cas - Videoton TVC file format
  • .wav - sound file interpreted as Enterprise tape
  • .tvcwav - sound file interpreted as Videoton TVC tape
  • .cdt - Amstrad CPC tape image
  • .tzx - ZX Spectrum tape image
  • .bas, .com, .trn, .128, . - common extensions for Enterprise executable files, including no extension

From version 1.1.0, emulator core is able to handle mono PCM WAV files with 1..8 bit depth as tape recordings. It is possible to enable libsndfile support during compilation, and then a wider range of formats are recognized, including MP3 if libsndfile version is at least 1.1. Using the .wav file extension will trigger the built-in RetroArch media player by default, it can be disabled under Settings / File Browser / Use Built-in Media Player. Rename .wav files to have .tvcwav extension to be interpreted as TVC tapes.

RetroArch database(s) that are associated with the ep128emu core:

  • None yet

Features

Frontend-level settings or features that the ep128emu core respects.

Feature Supported
Restart
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 ep128emu core's library name is ep128emu. The ep128emu core saves/loads to/from these directories.

Frontend's System directory

File Description
ep128emu/rom/* BIOS files are loaded from here
ep128emu/config/* System-wide emulation configuration files

Geometry and timing

  • The ep128emu core's core provided FPS is 50
  • The ep128emu core's core provided sample rate is 44.1 kHz
  • The ep128emu core's base width is 768
  • The ep128emu core's base height is 288
  • The ep128emu core's max width is 768
  • The ep128emu core's max height is 576 (interlace mode)
  • The ep128emu core's core provided aspect ratio is 4:3 (interlace mode)

The intelligent zoom function can reduce the apparent width/height, aspect ratio is also adjusted.

If there is LED driver configured in RetroArch, second LED should reflect disk activity state.

Usage

Load any supported content file. Content type will be autodetected, and if possible, started. Content-specific configuration file is also loaded if present. Without content, core starts with Enterprise 128 disk configuration.

In case of multi-disk (or multi-tape) games, use the Disk Control menu to add the subsequent images and switch between them. You can also use RetroArch's built-in memory analyzer to set up cheats.

Apart from disk/tape/fileIO differences, the core will adjust the emulated machine configuration in some cases:
- if content file has .DTF extension, ZozoTools BIOS will be used
- if content file name contains [req brd-rom], German BIOS will be used
- if content file name contains [req zrom], Hungarian language BIOS and EPDOS will be used
- if EP128_DISK_ISDOS (or EP64_DISK_ISDOS) type is supplied via configuration file, IS-DOS (CP/M flavor for Enterprise) will be used

Core options

The ep128emu 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.

  • Main thread wait (ms) (0|1|5|10) - forced sleep in main thread for lower CPU use
  • High sound quality (1|0) - disable in case of performance problems
  • Use accelerated SW framebuffer (0|1) - enable in case of performance problems (has some known bugs with interlace mode)
  • Enable resolution changes (requires restart) (1|0)
  • Border lines to keep when zooming in (0|2|4|8|10|20)
  • System ROM version (EP only) (Original|Enhanced) - enhanced ROM contains faster memory test at startup
  • User 1 Zoom button (R3|Start|Select|X|Y|A|B|L|R|L2|R2|L3)
  • User 1 Info button (L3|R3|Start|Select|X|Y|A|B|L|R|L2|R2)
  • User 1 Autofire for button (None|X|Y|A|B|L|R|L2|R2|L3|R3|Start|Select)
  • User 1 Autofire repeat delay (1|2|4|8|16)

Control device types

The emulated systems use several joystick types (all digital, with 1 fire button usually). Enterprise and TVC have a built-in joystick, and two external joystick connections. The ep128emu core supports device type changes in the controls menu. Change of the type updates the joypad and fire button mapping.

Emulated machine User 1 default joypad User 2 default joypad User 3 default joypad
Enterprise Internal External 1 External 2
TVC Internal External 1 External 2
CPC External 1 External 2
ZX Kempston Sinclair 1 Sinclair 2
  • Core default - Joypad and fire button is mapped as default (see above)
  • Internal Joystick - Joypad and fire button is mapped for internal joystick on Enterprise and TVC. On CPC it is mapped to cursor keys.
  • External Joystick 1 / Kempston - Joypad and fire button is mapped for external joystick 1 (Kempston interface in case of ZX)
  • External Joystick 2 - Joypad and fire button is mapped for external joystick 2
  • Sinclair Joystick 1 - Joypad and fire button is mapped for Sinclair joystick 1. Only useful for ZX. Joystick inputs are emulated as keys: 1 (left), 2 (right), 3 (down), 4 (up), 5 (fire).
  • Sinclair Joystick 2 - Joypad and fire button is mapped for Sinclair joystick 2. Only useful for ZX. Joystick inputs are emulated as keys: 6 (left), 7 (right), 8 (down), 9 (up) ,0 (fire).
  • Protek Joystick - Joypad and fire button is mapped for Protek/AGF joystick. Only useful for ZX. Joystick inputs are emulated as keys: 5 (left), 6 (down), 7 (up), 8 (right) ,0 (fire).
  • External Joystick 3..6 - Joypad and fire button is mapped for external joystick 3..6. Only useful for Enterprise, very rarely used.

Joypad

RetroPad Inputs Default action for user 1 Recommended override
for content-specific configuration

Respective directions for:
Enterprise, TVC: Internal joystick
CPC: External joystick 1
ZX Spectrum: Kempston interface
Enterprise, TVC: space (fire for internal joystick)
CPC: External joystick 1 fire
ZX Spectrum: Kempston joystick
Enter
CPC: External joystick 1 fire 2 In-game key required for secondary action
- In-game key required for other action (if any)
- In-game key required to select the supported input method (if any)
- In-game key required to start the game (if any)
Key 0 In-game key required for other action (if any)
Key 1 In-game key required for other action (if any)
Key 2 In-game key required for other action (if any)
Key 3 In-game key required for other action (if any)
Info display -
Intelligent zoom (Zoom is also available via keyboard F12)

Keyboard

Enterprise 128

The ep128emu core takes the Enterprise UK keyboard as a basis:

Most mappings are straightforward positionally from an ISO UK keyboard:
- Dark green: natural mapping, both position and function matches nicely
- Light green: either position or function is slightly different
- Yellow: function is different
- Red: extra mapping
- Dark grey: keys intentionally reserved for RetroArch / OS functions

Exceptions are marked in the following table:

RetroKeyboard Inputs Enterprise keyboard input
Keyboard F9 Hold
Keyboard F10 Stop
Keyboard Pause Stop
Keyboard Backquote ` Escape (alternative mapping)
Keyboard Equals = ^ (caret)
Keyboard Backspace Erase
Keyboard Left Bracket [ @ (at)
Keyboard Right Bracket ] [ (left bracket)
Keyboard Quote ' : (colon)
Keyboard Backslash \ ] (right bracket) (shown as # in ISO map)
Keyboard Oem 102 \ (backslash)
Keyboard Home \ (alternative mapping)
Keyboard Delete Del
Keyboard Insert Ins
Keyboard Keypad 0 External joystick 1 fire
Keyboard Keypad 2 External joystick 1 down
Keyboard Keypad 4 External joystick 1 left
Keyboard Keypad 6 External joystick 1 right
Keyboard Keypad 8 External joystick 1 up

Videoton TVC

The Videoton TVC has a layout that is somewhat similar to ISO Hungarian layout:

Since TVC has several extra keys, but no function keys, F-row is used as replacement for those.

RetroKeyboard Inputs TVC keyboard input
Keyboard F1 @
Keyboard F2 ;
Keyboard F3 <
Keyboard F4 \
Keyboard F5 *
Keyboard F6 ^
Keyboard F7 [
Keyboard F8 ]
Keyboard F9 *
Keyboard F10 í
Keyboard Backquote ` 0
Keyboard 0 ö
Keyboard Minus - ü
Keyboard Equals = ó
Keyboard Left Bracket [ ő
Keyboard Right Bracket ] ú
Keyboard Semicolon ; é
Keyboard Quote ' á
Keyboard Backslash \ ű
Keyboard Oem 102 í
Keyboard Home ű (alternative mapping)
Keyboard Delete Del
Keyboard Insert Ins
Keyboard Keypad 0 External joystick 1 fire
Keyboard Keypad 2 External joystick 1 down
Keyboard Keypad 4 External joystick 1 left
Keyboard Keypad 6 External joystick 1 right
Keyboard Keypad 8 External joystick 1 up

Amstrad CPC

The Amstrad CPC 464/664 and 6128 fit well to ISO UK layout, with only slight differences:


Function key row is mapped to Fn-array. Extra mappings are marked in the following table:

RetroKeyboard Inputs CPC keyboard input
Keyboard F1 Fn1
Keyboard F2 Fn2
Keyboard F3 Fn3
Keyboard F4 Fn4
Keyboard F5 Fn5
Keyboard F6 Fn6
Keyboard F7 Fn7
Keyboard F8 Fn8
Keyboard F9 Fn9
Keyboard F10 Fn0
Keyboard F11 Fn Dot (.)
Keyboard Keypad Enter Fn Enter
Keyboard Oem 102 \
Keyboard Home \ (alternative mapping)
Keyboard Delete Del
Keyboard Insert Copy
Keyboard Left Alt Copy (alternative mapping)
Keyboard Right Alt Fn Dot (alternative mapping)
Keyboard Keypad 0 External joystick 1 fire
Keyboard Keypad Period . External joystick 1 fire 2
Keyboard Keypad 2 External joystick 1 down
Keyboard Keypad 4 External joystick 1 left
Keyboard Keypad 6 External joystick 1 right
Keyboard Keypad 8 External joystick 1 up

BIOS

Following "BIOS" files are used for emulation. Note: in usual 8-bit home computer terms, these are "ROM"s as they contain the original machine's read-only memory dumps.

From version 1.1.0, external BIOS files are optional.

Filename Description md5sum
exos21.rom Enterprise 128 Expandible OS 2.1
For EP128
f36f24cbb87745fbd2714e4df881db09
basic21.rom Enterprise 128 BASIC Interpreter v2.1
For EP128
e972fe42b398c9ff1d93ff014786aec6
exdos13.rom Enterprise 128 Disk Controller v1.3
For EP64/128 disk configs
ddff70c014d1958dc75378b6c9aab6f8
exos20.rom Enterprise 64 Expandible OS 2.0
For EP64
5ad3baaad3b5156d6b60b34229a676fb
basic20.rom Enterprise 64 BASIC Interpreter v2.0
For EP64
8e18edce4a7acb2c33cc0ab18f988482
epfileio.rom Enterprise 128 Direct File I/O
For loading from host file (instead of disk or tape image)
a68ebcbc73a4d2178d755b7755bf18fe
exos24uk.rom Enterprise 128 Expandible OS 2.4
Only for enhanced functions (fast memory test)
55af78f877a21ca45eb2df68a74fcc60
hun.rom Enterprise 128 Hungarian language extension 22167938f142c222f40992839aa21a06
epdos16f.rom Enterprise 128 EP-DOS 6593dff00ab32a4b1fc084674ededf2b
exdos14isdos10uk.rom Enterprise 128 IS-DOS (CP/M) f91c4a507cc6895bdd9c43df4f021df3
brd.rom Enterprise 128 German language extension 6af0402906944fd134004b85097c8524
zt19uk.rom Enterprise 128 ZozoTools extension
For loading from DTF files
228540b6be83ae2acd7569c8ff0f91d0
tvc22_sys.rom Videoton TVC system BIOS
For TVC emulation
8c54285f541930cde766069942bad0f2
tvc22_ext.rom Videoton TVC extension BIOS
For TVC emulation
5ce95a26ceed5bec73995d83568da9cf
tvcfileio.rom Videoton TVC Direct File I/O
For loading from host file (instead of disk or tape image)
a2cf86ba8e7fc58b242137fe59036832
tvc_dos12d.rom Videoton TVC disk BIOS
For TVC disk configs
88dc7876d584f90e4106f91444ab23b7
cpc464.rom Amstrad CPC 464 BIOS
For CPC 464
a993f85b88ac4350cf4d41554e87fe4f
cpc664.rom Amstrad CPC 664 BIOS
For CPC 664
5a384a2310f472c7857888371c00ed66
cpc6128.rom Amstrad CPC 6128 BIOS
For CPC 6128
b96280dc6c95a48857b4b8eb931533ae
cpc_amsdos.rom Amstrad CPC AMSDOS BIOS
For CPC disk configs
25629dfe870d097469c217b95fdc1c95
zx128.rom ZX Spectrum 128 BIOS
For ZX Spectrum 128
85fede415f4294cc777517d7eada482e
zx48.rom ZX Spectrum 48 BIOS
For ZX Spectrum 16/48
4c42a2f075212361c3117015b107ff68

Special emulation

Enterprise 128 has software extensions to emulate ZX Spectrum (48, 128) and Amstrad CPC. As a technical quirk, these emulators can be run in the ep128emu-core, creating a double emulation layer.

SPEMU

  • Obtain ROM version of SPEmu from the EnterpriseForever forums.
  • Place ROM files under RetroArch system directory: system/ep128emu/roms/
  • Create a custom config file into RetroArch system directory called system/ep128emu/config/enterprise.ep128cfg:

    machineDetailedType "EP128_TAPE"
    memory.ram.size 256
    memory.rom.40.file "spemu128.rom"
    memory.rom.40.offset 0
    memory.rom.41.file "spemu128.rom"
    memory.rom.41.offset 16384
    memory.rom.42.file "spemu128.rom"
    memory.rom.42.offset 32768
    tape.forceMotorOn Yes

  • Start ep128emu core without content

  • Invoke the SPEmu extension with :sp128
  • Choose Load tape
  • Enter RetroArch Quick menu (F1), go to Disk Control, and select the .tap file containing the Spectrum program
  • Later on, remember to remove the custom config file if you run into problems with regular Enterprise programs afterwards

CPCEMU

  • Obtain COM version of CPCEmu from the EnterpriseForever forums.
  • Start CPCEMU.COM the usual way (select the file in RetroArch and open it with ep128emu core)
  • Once the blue screen has loaded, open quick menu (F1) go to Disk Control and select the file that needs to be loaded
  • Continue, enable keyboard pass-through with Scroll Lock, and issue RUN command as needed
  • It may be needed to change the control type to External 2 in Quick Menu / Controls

Last update: 2024-04-19