Alternate-history fiction: Avenell Stagecraft and the Cyclorama console never existed. The hardware described here is real — fully specified, and emulated at playcyclorama.com. Play ERG: NIGHTSIDE RUN

Cyclorama SDKLicensing

Licensing

The Avenell Cyclorama SDK is open. The machine's specification, instruction set, ROM format, reference emulator, toolchain, SDK runtime and conformance suite are free for anyone to implement, use and build on. The names and logos are not: they are trademarks, and TRADEMARKS.md says what you may do with them.

This file says which licence applies to which path of this repository. Every source file also names its licence in an SPDX header (see "SPDX headers" below).

Tiers

TierLicenceWhat it covers
OPEN-CODEApache-2.0ISA tables, the CYASM assembler, the SCRIM compiler, the emulator core, the reference player and debugger logic, build and test tooling, conformance ROMs, demo cartridges, tests
SDK runtimeApache-2.0 WITH LLVM-exceptionCode the toolchain copies into the ROMs you build: the roms/lib/ includes and the SCRIM runtime
OPEN-SPECCC BY 4.0Specification prose: the HED-0041 manual, the spec notes, the SCRIM language specification, the hardware facts file, this repository's documentation

Rules that hold across the tiers:

Path map

The longest matching path decides: a file beats a * pattern, which beats a folder.

Top level

PathTierNotes
LICENSE, LICENSES/, NOTICEOPEN-CODELicence texts keep their own terms
README.md, LICENSING.md, TRADEMARKS.md, CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md, CHANGELOG.mdOPEN-SPECThe front page and the policy text
package.json, package-lock.json, tsconfig.json, .nvmrc, .gitattributes, .gitignore, .editorconfig, .github/, EXPORT.jsonOPEN-CODEBuild and CI configuration; EXPORT.json records the release this tree is

Specification and hardware facts

PathTierNotes
docs/manual/src/, docs/manual/index.htmlOPEN-SPECHED-0041, the hardware and programmer's reference (index.html is built from src/)
docs/manual/examples/OPEN-CODEThe manual's worked .asm examples are code, so they can be pasted into programs (Apache-2.0: see "SDK runtime code")
docs/spec-notes.md, docs/scrim-spec.mdOPEN-SPECSpec rulings and the SCRIM language specification
canon/canon-public.jsonOPEN-SPECThe hardware facts the manual states, as data (the manual tests check the manual against it)
docs/guide/OPEN-SPECThe SDK guides and tutorials

Code

PathTierNotes
src/OPEN-CODEISA tables, register map, assembler and disassembler, emulator core, asset converters, SCRIM compiler, reference player, browser conformance harness, debugger logic
src/scrim/runtime.incSDK runtimeThe runtime routines the SCRIM compiler links into every SCRIM ROM
tools/OPEN-CODECommand-line tools: build, conformance, budgets, replays, manual build, test tiers, doctor, verify
tests/OPEN-CODETests, conformance ROM sources (tests/conformance/), fixtures and golden frames

Cartridges

PathTierNotes
roms/lib/SDK runtimeThe Cue Sound Driver and its documentation
roms/lantern-test/, roms/lantern-scrim/, roms/sound-test/, roms/slice-test/OPEN-CODEDemo and test cartridges
roms/manifest.jsonOPEN-CODESize and SHA-256 of every ROM the build makes
replays/OPEN-CODECompletion replays of the open cartridges
examples/OPEN-CODEThe example programs the guides quote (Apache-2.0: see "SDK runtime code" for reusing their code in a ROM)

SPDX headers

Every source file opens with two comment lines in its own comment syntax (// TypeScript, <!-- --> HTML, ; CYASM .asm/.inc and .art/.song, -- SCRIM, # YAML and dotfiles). The first two lines of tools/asm.ts:

From tools/asm.ts, lines 1–2

// SPDX-FileCopyrightText: 2026 rick-learns
// SPDX-License-Identifier: Apache-2.0

The identifier is Apache-2.0 (OPEN-CODE), Apache-2.0 WITH LLVM-exception (SDK runtime) or CC-BY-4.0 (OPEN-SPEC). Formats without a comment syntax (JSON, Markdown, save states, images), the licence texts, .nvmrc and the generated docs/manual/index.html carry no header; the path map above licenses them. Comment lines never change ROM bytes, and the manual build drops the header lines of the fragments it publishes.

The manual (HED-0041)

The manual's text is CC BY 4.0. Its front matter contains an in-world notice ("Licensed developers only … confidential …"). That notice is part of the fiction: the console never existed, the document is written in the voice of a 1987 engineering reference, and its technical content is exact and normative for the emulator and tools here.

Attribution for reuse: "HED-0041 Cyclorama Hardware & Programmer's Reference, by rick-learns, CC BY 4.0". Adapters may say what they changed; they may not imply endorsement (CC BY 4.0 section 2(a)(6), and TRADEMARKS.md).

SDK runtime code

The assembler and compiler themselves are Apache-2.0. Some SDK code is copied into the ROMs people build: the roms/lib/*.inc includes such as the Cue Sound Driver, and the runtime routines the SCRIM compiler links (src/scrim/runtime.inc). Apache-2.0 section 4 would require distributors of such ROMs to carry the licence and NOTICE, which a cartridge has no place for. So this code is licensed Apache-2.0 WITH LLVM-exception: the exception waives the attribution requirement when the library code is embedded in compiled output. It is compatible with Apache-2.0 and only adds a permission.

The example programs (examples/, docs/manual/examples/) are plain Apache-2.0, without the exception. Code you write yourself after reading them is yours; a ROM that contains code copied from them is a distribution of that code, and Apache-2.0 section 4 then asks you to carry the licence and NOTICE with it (for a cartridge, alongside it: in its documentation or download).