bitcircus101 · Raspberry Pi 1 · 360 × 288 · PAL 50 Hz

tvtv

Eine Demoszene-Show für einen alten Röhrenfernseher, live berechnet auf einem Raspberry Pi 1 von 2012: ein Kern, 700 MHz, keine Bilddateien. Siebzehn Szenen laufen in Schleife, dazu zwei Folien-Decks, die erklären, wie alles funktioniert. Diese Seite führt denselben C-Code aus, übersetzt nach WebAssembly.

Leertaste pausiert, N springt weiter. Szenen mit · gehören nicht zur Schleife: die zwei Folien-Decks und die Testkarte. Das Gerät ist unserem nachgezeichnet, einem Toshiba C-500, ein 5-Zoll-Kofferfernseher aus den frühen Achtzigern. 2× ist die Pixelverdopplung, die der Pi auf dem Weg zum Fernseher macht, CRT das Glas und die Zeilen der Röhre; der Balken ist die Zeit, die dein Rechner pro Bild braucht, gemessen an den 20 ms des Pi.

Kurz gesagt

Hardware
Ein Raspberry Pi 1 Model B von 2012: ein ARM1176-Kern mit 700 MHz, 512 MB RAM. Ein alter Röhrenfernseher am Composite-Ausgang, PAL, 50 Bilder pro Sekunde.
Pixel
Die Show malt in ein Canvas von 360 × 288 Pixeln mit 16 Bit Farbe und schreibt es direkt in den Linux-Framebuffer; jedes Pixel wird auf dem Weg hinaus verdoppelt. Kein X, kein Fenster, keine Bilder.
Budget
50 Bilder pro Sekunde lassen 20 Millisekunden pro Bild. Alles Teure, Sinus, Winkel, Abstände, wird einmal in Tabellen gerechnet; ein Bild schlägt nur nach und addiert.
Code
Rund 2500 Zeilen C: 19 Szenendateien, ein Kern, ein Sequencer und zwei Folien-Decks als reiner Text. Diese Seite führt sie unverändert aus; ein Shim von 70 Zeilen vertritt den Framebuffer. GPL-3.0 für den Code, CC-BY-4.0 für die Texte.

So funktioniert es

Jede Szene ist eine Datei mit zwei Funktionen: init() rechnet vor, frame(t) malt das Bild zum Zeitpunkt t. Ein Sequencer spielt die Szenen nacheinander ab und blendet weich über. Die Bilder sind klassische Tricks der Demoszene der 90er: vier addierte Sinuswellen werden ein Plasma, Winkel und Abstand zur Mitte werden die Koordinaten einer Tunnel-Textur, ein Puffer voller Hitze, der abkühlt und driftet, wird Feuer, jedes Pixel eines Wortes wird ein Teilchen mit Schwerkraft.

Der Fernseher wollte erst überredet werden. Der Pi spricht von Haus aus NTSC, der Fernseher erwartet PAL, also war das erste Bild schwarzweiß. 576 Zeilen im Zeilensprung flackerten, also läuft die Show mit 720 × 288 progressiv bei 50 Hz. Und eine Röhre versteckt ihre Ränder, also hat eine Testkarten-Szene den Overscan Zeile für Zeile vermessen.

Programmiert hat die Show Claude, eine KI, per SSH vom Mac aus, ohne den Fernseher je zu sehen. Deshalb sind die Werkzeuge, die Bilder rendern, Bewegung messen und ganze Szenen zu einem Flipbook bündeln, so wichtig wie die Szenen selbst. Das Whitepaper erzählt diese Geschichte.

Mitglieder steuern die Show per SSH: ssh zapper öffnet eine Fernbedienung im Terminal, jede Szene hat eine Programmnummer, und eine Szene in C lässt sich hochladen und wird zum eigenen Kanal, gebaut, offscreen durchgespielt und mit Rollback eingetauscht. Die Show läuft in einer Sandbox, als Nutzer, der sonst nichts darf.

Weiterlesen

Flipbook

Ganze Szenen Bild für Bild, scrubbar, mit Zeitleiste und Notizen.

Whitepaper

Wie die Show funktioniert und wie sie entstand. Auch als PDF.

Quellcode

Code, Folien und Werkzeuge auf GitHub. Bauen, ohne Pi ansehen, eine Szene hinzufügen.