Weil es geht: DOOM auf dem Raspberry Pico

Das komplette Gameplay in Originalgeschwindigkeit mit Sound meisterte Graham Sanderson mit seiner DOOM-Portierung auf den Kleinstrechner - Hut ab!

In Pocket speichern vorlesen Druckansicht 48 Kommentare lesen
Lesezeit: 1 Min.
Von
  • Carsten Meyer

Während sich der Einsteiger schon an einer einsam blinkenden LED am Raspi Pico erfreut, schaffte Github-User Graham Sanderson das (fast) Unmögliche: Er portierte die erste DOOM-Version aus den 90er-Jahren auf den Kleinstrechner.

Die Grafikausgabe erfolgt retro-gemäß über RGB an einer VGA-Buchse, während der Sound von einer Soundblaster-Emulation beigesteuert wird. Damit das Ganze in die 2 MByte Flash-Speicher und das knappe RAM passte, waren einige Tricks nötig - obwohl, wie Sanderson beteuert, keine Splash-Screens und Räume des 1993 erschienenen Spiele-Klassikers weggelassen wurden.

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmmung wird hier ein externes Video (Kaltura Inc.) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Kaltura Inc.) übermittelt werden. Mehr dazu in unserer Datenschutzerklärung.

Unter anderem hat der Autor die (unter GPL freigegebenen) DOOM-Sourcen komplett überarbeiten müssen; oft reicht ja schon ein platzsparendes Byte statt eines 32-Bit-Wertes. Ebenso war eine andere Komprimierung der normalerweise 4 MByte großen Datenstrukturen, Wellenformen und Texturen nötig; mit einer WHD- statt WAD-Kodierung passten sie schließlich in 1,7 MByte.

Eine weitere Herausforderung war das Nachladen aus dem Flash in das mit 256 kByte für diesen Zweck äußerst knapp bemessenen RAM des Raspi Pico. Da der darauf verbaute RP2040-Prozessor zwei gleiche Cortex-M0+-Kerne besitzt, teilen die sich die Aufgaben gerecht: Während sich der eine um das Gameplay kümmert, rendert der andere die Frames und bereitet die Wellenformen für den emulierten OPL2-Synthesizer-Chip auf. Die Soundausgabe erfolgt dann digital über eine I2S-Schnittstelle.

(cm)