Just connect your computer's cassette port to the headphone socket on a laptop or smartphone and you're ready to load games!
PlayUEF is ready to use immediately, for free, linked to over 1000 games, at http://playuef.8bitkick.cc
Local UEF conversion & WAV download
Press play on the media player in the web page to play the cassette audio from the browser.
Clicking the cassette player causes PlayUEF to download the converted audio as a WAV.
LOCAL=true parameter to the URL causes PlayUEF to request user to select a file to convert on their local machine.
Tested on Chrome, Safari, Firefox and Microsoft Edge browser
Known issues on some versions of IE and Android browsers (e.g. UC browser), to be fixed...
No parameters defaults to loading Acorn Electron Arcadians.
FILE=<string>URL to UEF file or zip containing UEF
LOCAL=truePrompt user to select local file
BAUD=<int>Change base frequency. Defaults to Acorn standard 1200 Hz.
BAUD=1400works comfortably on my Acorn Electron and BBC Micro issue 7
PHASE=<int>Change sine phase. Defaults to Acorn standard 180 degrees.
CARRIER=<int>Carrier tone length factor * 2
CARRIER=0Minimal inter-block carrier tones, works on Acorn Electron
CARRIER=1Works on BBC Micro issue 7
STOPBIT=<int>Equal to number of cycles per stop bit * 2. Effects 0x0100 chunks only.
STOPBIT=1Works on Acorn Electron Issue 2 & 4
STOPBIT=3Works on BBC Micro Issue 7
STOPBIT=4Works on BBC Micro Issue 3. (Default)
TURBO=1Equivalent to CARRIER=0&STOPBIT=1
Converting to 44.1KHz digital audio means loading can be faster than tape (due to hardware limits on the Electron's cassette interface only about 35% faster so far).
Loading times for Acorn Electron Arcadians (YMMV)
- 245 secs - 1200 baud default
- 190 secs - &TURBO=1
- 166 secs - &TURBO=1&BAUD=1400
- 150 secs - &TURBO=1&BAUD=1550&PHASE=220
Supported UEF chunks
See the UEF specification draft for more details.
Fully implemented UEF chunks
0x0100Implicit start/stop bit tape data block
0x1111Carrier tone with dummy byte at byte
0x0104defined data block (for Acorn Atom and BBC titles like AndroidAttack & Joust)
0x0116- floating point gap is approximated to interger gap
0x0114- security cycles replaced with carrier tone
0x0113Change of base frequency
These seem to usually reflect mechanical variance of original cassette player behavior. As we just want to load game data rather than recreate archival quality audio, these are ignored.
- Test on Acorn Atom
For development purposes you can up a local web server as below and navigate to http://localhost:8000/PlayUEF.html in your web browser
$ cd PlayUEF $ python -m SimpleHTTPServer 8000 Serving HTTP on 0.0.0.0 port 8000 ...
http://localhost:8000/test.html generates links to the STH UEF archive.
Thanks to Thomas Harte for the UEF spec and Wouter Hobers for uef2wave.py, BigEd, Commie_User, DavidB, Vanekp of the stardot forum for suggestions and Matt Godbolt for the awesome JSbeeb. Not forgetting Arcadian and the archive of over 1000 games at the STH archive which make this project come to life.