PNM to X86 Bootloader Animation (64k Demo)

Wähle eine P6 PNM (320x200) bei 256 Farben.
Die letzten 10 Farben der Palette (246-255) werden mittels Color Cycling animiert.


16000

Bereit.

Beispiel "Hausboot"

Hier ein mittels KI erzeugtes Beispielbild haus.jpg aus dem Prompt "Pixel Art Stil. Hölzernes Haus mit gemütlichem Kaminfeuer, einem Bett, Einmachgläsern im Regal und einem Buch auf einem Tisch"

Du erzeugst daraus dann eine pnm Datei, z.B. mittels imagemagick, auf exakt 320x200 Pixeln (VGA) bei 256 Farben Palette:

convert haus.jpg -resize \!320x200 -sharpen 1x1 -colors 256 haus.pnm

Wird dann zu haus.pnm

Dann den Generator hier auf der Seite nutzen und aus der haus.pnm dann die boot.img erzeugen. Nutzbar dann via:

qemu-system-i386 -drive format=raw,file=boot.img

und vielen Varianten ebenso:

qemu-system-x86_64 -hda boot.img
qemu-system-x86_64 -fda boot.img

Quick & Dirty Live Boot meines Images (wenn du mir traust)

qemu-system-x86_64 -snapshot -hda https://finalmedia.de/code/js/playground/pnm2boot/boot.img

Das snapshot ist nötig, weil ja readonly image

Wenn du direkt was sehen willst:

Hier auch noch ein leicht zu merkender redirect für den live boot via internet:

qemu-system-x86_64 -snapshot -hda https://finalmedia.de/hausboot

Blick hinter die Kulissen

Wenn du wissen willst, wie das gemacht ist, schau einfach in den Quellcode dieser Webseite. Es sind nur wenige Zeilen Javascript und der Magic Blob.

Wenn dich auch der verwendete x86er Bootloader Blob, bzw. der Assembler Code mit Comments interessiert: hier die einfach verständliche Einsteiger-Variante für das reine Standbild.

Die vollständig kommentierte Variante mit Colorcycling hier

Was einem PNM ist, falls du das noch nicht weißt, erfährst du bei Wikipedia hier.

Ja, eigentlich kann man das hier in Javascript auch aus einer png bauen und die gleich passend automatisch skalieren, ich habe aber an anderer Stelle noch die PNMs benötigt und ohne Kompression. Daher baut das hier auf PNM auf.