GithubHelp home page GithubHelp logo

stefanschramm / retroload Goto Github PK

View Code? Open in Web Editor NEW
3.0 2.0 0.0 951 KB

RetroLoad.com is a web application for converting tape archive files of historical computers into sound.

Home Page: https://retroload.com/

License: GNU Affero General Public License v3.0

JavaScript 3.22% Dockerfile 0.64% Makefile 1.59% Assembly 5.91% Python 0.58% BASIC 0.06% Shell 0.14% TypeScript 87.85%
6502 6510 8bit-computers assembly hello-world retrocomputing retrogaming tape-archive vintage-computers z80

retroload's Introduction

retroload

RetroLoad.com is a web application for converting tape images of historical computers into sound for loading them on real devices using an audio line cable or cassette adapter.

This repository contains the npm packages

  • retroload, a command line interface (CLI) for converting tape images to WAVE files or playing them,
  • retroload-lib, the fundamental library used by the CLI and RetroLoad.com

Project state: A lot is still work in progress. Some of the (more complex) tape archive formats are only partly supported.

Installation from NPM registry

sudo npm install -g retroload

Using retroload CLI

A list of available command line options can be shown using retroload --help.

MACHINES.md contains some instructions on how to load tapes on different devices.

Creating WAVE files

Convert an MSX tape archive into an audio file named example.wav:

retroload retroload-lib/examples/formats/msx_cas_binary/rl.cas -o example.wav

retroload will try to automatically determine the input format by its content and file extension. For formats that are not automatically detected, the --format option needs to be specified.

Playing tape archives directly

When the -o option is omitted, retroload automatically tries to play the generated audio data.

Example collection

./retroload-lib/examples/formats contains minimal example tape archives of different formats for different machines. Some of them, listed in Examples.ts, have successfully been loaded to real machines and can be used for testing. If the example files won't load on your machine, it's unlikely that any other tape archive will successfully load using retroload.

Rebuilding examples

There is a Dockerfile that prepares an environment in which the examples can be (re)built. The container has to be started with the formats directory as bind mount to /formats.

Rebuilding all examples:

cd retroload-lib/examples
docker build -t retroload-examples .
docker run -v "$(pwd)/formats:/formats" retroload-examples

Or enter the container to build individual examples:

docker run -itv "$(pwd)/formats:/formats" retroload-examples /bin/bash
cd /formats/msx_cas_binary
make clean
make
exit

If you want to build the examples without Docker, you can look up the Dockerfile for the required tools to be installed in your environment (assemblers, tape format converters).

Installation from Git repository (development environment)

For development you can build and install retroload directly from the repository using npm link:

git clone https://github.com/stefanschramm/retroload.git
cd retroload
npm ci # install dependencies
npm run build # calls TypeScript "compiler"
sudo npm link retroload/ # the "/" is important!

Later you can remove the symlinks by

sudo npm unlink retroload -g

retroload's People

Contributors

stefanschramm avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

retroload's Issues

Unable to play image on macOS

macOS: 13.5.2 (22G91); speaker lib not installed; aplay and play not available

...% retroload rl.tap               
Format: KC .TAP-File, Target: kc
TypeError: Cannot read properties of null (reading 'toString')
    at AplayWrapper.<anonymous> (file:///Users/user0/retroload/retroload/dist/esm/player/AplayWrapper.js:20:44)
    at Generator.next (<anonymous>)
    at file:///Users/user0/retroload/retroload/dist/esm/player/AplayWrapper.js:7:71
    at new Promise (<anonymous>)
    at __awaiter (file:///Users/user0/retroload/retroload/dist/esm/player/AplayWrapper.js:3:12)
    at AplayWrapper.create (file:///Users/user0/retroload/retroload/dist/esm/player/AplayWrapper.js:14:16)
    at file:///Users/user0/retroload/retroload/dist/esm/retroload.js:115:38
    at Generator.next (<anonymous>)
    at fulfilled (file:///Users/user0/retroload/retroload/dist/esm/retroload.js:5:58)

Implement further TZX/CDT block types

Especially these cases are currently missing in TzxProcessor:

      case 0x15: // Direct Recording
      case 0x18: // CSW Recording
      case 0x21: // Group start
      case 0x3c: // ?
      case 0x79: // ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.