THE CHAMBER · THE MACHINE
The Machine
The Machine is the Commodore 64 emulator nopsta stored on Ethereum in 2022. Rather than serving the machine and its programs from a server of its own, this page reads them from Ethereum, checks their cryptographic fingerprints against the ones it carries, and runs them in your browser.
THE LOG
The machine
The machine is the emulator nopsta stored on Ethereum in 2022, in four data contracts: the gunzip helper and three parts of minimal64. The page reads them from the chain first; if no node answers, it uses the site's own copies of the same bytes; either way each part must hash to the pin the page carries, or it does not run, and NOW PLAYING says which source it was.
The machine runs in a frame that cannot reach this page, the network or your storage; the page speaks to it over one port, by a written protocol. Nothing on this page reaches into the machine: the mode is PURE, and the provenance would say INTERVENED if anything ever did. The machine document is GPL-2.0-only, nopsta's licence; the page around it is MIT; what is what.
The programs
The page starts on Tony: Born for Adventure, the proof-of-concept token from before the series and the demo its programs are built on, read from its contract and checked the same way; any other program is one LOAD away in the list.
A program is read from its contract the way anyone can read it: the Chamber's prg(id), stamped with the block you load it at, is held to the pinned base outside its 42-byte stamp and to the row and the block inside it; the Perception Chamber Canary's prgWithBrain(1) is held to the frozen program outside its mind and to the head revision's record inside it, and any earlier revision of that mind, REVISIONS on its row, is read from the blob its record names and held to the record's hash, genesis to its pin as well; the two older tokens are held to their pinned hashes. The pins are in the catalogue, which a public script checks against the chain for anyone who runs it (how).
A program of your own runs here too, through FROM A FILE: a .prg, a program picked from the directory of a .d64, or hex or base64 pasted in. It stays in this browser, the page checks only its shape and reads it for what it needs, and NOW PLAYING says YOUR FILE. The machine has no drive, nopsta's build having nothing behind its serial bus, so a program of a disk runs alone, and one that loads more from the disk stops there. A .crt cartridge runs in the four formats the machine has, Normal, Ocean Type 1, C64GS and Magic Desk; an 8K Normal image trips a fault in the machine's reader and is refused, repackable as 16K or Magic Desk. The machine can attach a cartridge but not remove it, so a cartridge stays in the port for the life of a machine, and anything loaded after it starts a new one.
What the words mean
The words on the provenance line mean what they say: PINNED, the bytes matched a commitment this page held before it asked; CONTRACT-CONSISTENT, they matched what the same node reported in the same session; NODE-REPORTED, a fact one node stated; YOUR FILE, a file of yours, about which the page claims nothing. One node is asked, and it is named. The links in NOW PLAYING open the same contracts, tokens and blocks on Etherscan, in a new tab, so every claim can be checked against a second source while the machine runs on.
Controls and boundaries
The firmware is a switch. The programs of the series run bare, as they do on chain, and run the same with the firmware present, because they bank it out as they start. AUTO reads a file of yours for what it needs: a program that calls the KERNAL or BASIC, hooks the KERNAL's interrupt vectors, is BASIC itself or has no stub a bare machine can start it by gets the on-chain OpenROMs and READY first; one that needs none of that runs bare, and a program that banks the ROMs out and sets its own interrupt vectors is read as bare whatever its data looks like. The scan reads byte patterns, and a program can hide a dependency from it, so the switch stays yours: on boots to READY and RESET brings the prompt back; off is bare.
INPUT says what the arrows and letters feed: a joystick in port 2, the port the programs of the series read; in port 1; in both ports at once; or the keyboard. AUTO reads a file of yours for what it reads and takes both ports when it cannot tell. Under joystick input the arrows and Z, X and space are the stick and every other key still types, so a game that wants a key on one screen and the stick on the next has both. On a phone the ring is read by angle and its hole is rest; the programs of the series stand still with two directions held, so a diagonal counts as one direction unless DIAGONALS says both. Escape is RUN/STOP and never leaves this page, Home is CLR/HOME, and F1 to F7 are the function keys. The sound starts with your first tap or key on the page, and a phone on silent stays silent. RESET starts the machine over; under the firmware, READY comes back.
A public node sees the address you read from and the contracts you ask for, nothing else; to use a node of your own, open the standalone machine with ?rpc= and your endpoint.