Skip to content

Repository files navigation

amos-ts

A TypeScript reimplementation of AMOS Pro, so you can put your old games on the web.

Eggit NSLE Thrusts
Scrawler Goldfish Draw 'n' Draw

Click a shot to play it, or drop a file (.amos, .adf, .zip, .lha etc) into amos.bitplane.net and see how it plays.

The AMOS language and the extensions already taken on are broadly complete. Some native-machine behavior remains approximated; KEYWORDS.md records the current per-keyword status.

Embed it

<div id="game" style="max-width: 640px"></div>
<script type="module">
  import { createPlayer } from 'https://amos.bitplane.net/v/latest/assets/amos-player.js'

  const player = createPlayer(document.getElementById('game'))
  const bytes = new Uint8Array(await (await fetch('MyGame.zip')).arrayBuffer())
  await player.loadArchive(bytes, 'MyGame.zip')
</script>

Versions are paths, so swap latest for a version number to pin it. /v/latest/ is under heavy development, so pin it unless you want the breakage.

npm install amos-ts gets the package with tools and other non-web things.

Docs

  • docs/library.md, the npm package: the interpreter, the loaders and the headless runner.
  • docs/internals.md, what each subsystem covers, where it lives, and the formats and semantics recovered from the original.
  • docs/cli.md, every CLI tool, and the gen* tools that rebuild the checked-in data.
  • docs/extensions/, the extension slot model, identification and evidence tiers.
  • docs/amos3d/, the AMOS 3D file formats and engine, recovered from the binary.

CLAUDE.md holds the working rules: how evidence is ranked, what a quotation may and may not do, and what each coverage classification claims.

Commands

npm run dev        # the player, on a local server
npm test           # vitest, with the coverage gate at teardown
npm run typecheck  # tsc --noEmit
npm run lint       # oxlint, correctness and suspicious rules only
npm run build      # vite lib build to dist/
npm run cli -- src/cli/<tool>.ts <args>   # run a CLI tool via tsx

npm test runs the faithfulness gate after vitest prints its summary, so read the exit code. A run can report every test passing and still exit 1.

Status

Core AMOS Professional is complete. KEYWORDS.md is the generated coverage inventory. Faithful means the observable behavior was checked against shipped source or a disassembled binary; it does not claim cycle-exact emulation.

src/amiga/ contains shims for dos, graphics, intuition, asl, locale, diskfont, workbench and a few more, modelled as far as the programs reach. UNIMPLEMENTED.md summarizes the remaining backend boundaries without duplicating the generated keyword list.

Fixtures

fixtures/ is not committed for the usual licensing reasons. Put your .AMOS and .Abk files there. The corpus integration test and src/cli/gentable.ts expect fixtures/official-amos (the AMOS/ release tree from AMOS-Professional-Official) and fixtures/aga-releases. Extension libraries go in fixtures/extensions/<id>/.

Licence

MIT. See LICENSE.

Speech is narrator-ts (MIT), a reimplementation of the Amiga narrator.device and translator.library.

The code and AMOS graphics were derived from AMOS-Professional-Official, everything else was reverse engineered for compatibility purposes.

The library on amos.bitplane.net contains copyrighted works that are assumed to be abandonware - if you'd like something removed please email gaz@bitplane.net or open a ticket here and I'll purge it from the history.

About

AMOS Pro interpreter in TypeScript, so I can play my old games

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages