{"id":3078,"date":"2025-01-09T10:48:50","date_gmt":"2025-01-09T10:48:50","guid":{"rendered":"https:\/\/research.swissdigitization.ch\/?p=3078"},"modified":"2025-08-10T07:35:49","modified_gmt":"2025-08-10T07:35:49","slug":"chludens-demo","status":"publish","type":"post","link":"https:\/\/research.swissdigitization.ch\/?p=3078","title":{"rendered":"CONFOEDERATIO LUDENS (CHLUDENS) DEMO &#8211; A RESEARCH DEMO 2024\/2025"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"779\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.09.30-1024x779.png\" alt=\"\" class=\"wp-image-3112\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.09.30-1024x779.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.09.30-300x228.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.09.30-768x584.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.09.30-1536x1168.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.09.30-624x475.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.09.30.png 1938w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Im Rahmen des Forschungsprojekte war geplant auch eine eigene Demo zu erstellen, um zu verstehen, was da passiert ist und zu erkennen, was aus der Demoscene in den Games vorkommt. <br><br>Aus diesen Gr\u00fcnden entstand die CHLUDENS-Demo auf dem Amiga.  <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Confoederatio Ludens: Thank You for All Your Demoz &amp; Gamez from 1970-2000! | MountainBytes 2025\" width=\"625\" height=\"352\" src=\"https:\/\/www.youtube.com\/embed\/MNnPiSpEKHE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Forschungsfragen<\/h2>\n\n\n\n<p>Das CHLudens Demo entstand im Rahmen des Focus der Experimentellen Arch\u00e4ologie.<br><br><strong>Dazu gibt es einige Forschungsfragen: <\/strong><br><br>&#8211; Wie complex war es eine (kleine) Demo von Grund auf (keine Frameworks) zu entwickeln? <br>&#8211; Wie ist das mit anderen zusammen eine kleine Demo zu erarbeiten?<br><br><strong>In der Entwicklung kamen folgende Fragen hinzu:<\/strong><\/p>\n\n\n\n<p><br>&#8211; Warum \u00fcberhaupt eine Demo (Motivationsapekt)?<br>&#8211; Was ist eine kleine Demo?<br>&#8211; Was ist der Unterschied, wenn man schon mit einem Framework arbeitet (siehe die auch selbst entwickelte Unxyz-Demo)? <br>&#8211; Wie findet man ein geeignetes Thema ?<br>&#8211; Wie l\u00e4sst sich der Hintergrund einer Demo (Funktion, Code) in eine Demo einbauen?<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Motivationsfrage<\/h2>\n\n\n\n<p>Prinzipiell ging es darum eine kleine Demo zu erstellen. Grundidee war eine Demo mit dem Team der ZHdK zu machen. Jeder sollte einen Teil daran teilhaben. <br><br>Da die Leute allerdings zu besch\u00e4ftigt sind aktuell, habe ich mich entschieden das Demo-Framework alleine zu machen und anschliessend die Leute f\u00fcr den Demotext einzubeziehen und zwar alle Mitglieder der Forschungsgruppe bzw. die einzelnen Forschungsgruppen d\u00fcrfen selber entscheiden, was in ihren Text kommt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Entwicklung der Idee<\/h2>\n\n\n\n<p>Am Anfang stand die Idee eine m\u00f6glichst ausgefeilte Demo zu machen. Eben, um zu zeigen, was man da alles konnte und so war die Idee, die selbst entwickelte Engine cryAmiga-Engine zu nutzen. Diese unterst\u00fctze Scrolling, Sprites und Bobs. Also die perfekte Voraussetzung. Neu hinzuk\u00e4me nur noch die Scrollschrift. Ein Klacks im Vergleich zu einer ganzen GameengineEntwicklung, so die Idee. <\/p>\n\n\n\n<p><strong>Der Amiga als Handicap<\/strong><\/p>\n\n\n\n<p>Und die Erkenntnisse der GameEngine konnte dazu einfliessen: Die Sprites sind so de facto nicht wirklich nutzbar (8*4 farbig und %2 == 0 m\u00fcssen dieselbe Farben haben), also bleibt eigentlich letztlich nur der Blitter \u00fcbrig mit seine Blobs etwa f\u00fcr Scrollschriften. Dasselbe Demo auf einer Console w\u00fcrde sehr viel mehr und mit viel weniger Aufwand und Verlust von &#8222;Nerven&#8220;  allein per Sprites erledigbar sein. <br><br>Und klar: Inhalt die Scene oder ein anderes Thema. Aber was?<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Die cryAmiga Engine mit der Schweiz als fressendem Maul &#8211; tilebasiert.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"787\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-1-1024x787.png\" alt=\"\" class=\"wp-image-3098\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-1-1024x787.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-1-300x231.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-1-768x590.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-1-1536x1181.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-1-624x480.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-1.png 1824w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Die Idee dabei eine Scrollschrift, dar\u00fcber eine sich ver\u00e4ndernde Welt und vielleicht sogar die Schweiz als Tier mit kleinen anderen Tieren als Sprites\/Bobs. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"825\" height=\"1024\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.54-825x1024.png\" alt=\"\" class=\"wp-image-3097\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.54-825x1024.png 825w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.54-242x300.png 242w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.54-768x954.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.54-624x775.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.54.png 1224w\" sizes=\"auto, (max-width: 825px) 100vw, 825px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"738\" height=\"1024\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.38-738x1024.png\" alt=\"\" class=\"wp-image-3100\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.38-738x1024.png 738w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.38-216x300.png 216w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.38-768x1066.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.38-1107x1536.png 1107w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.38-624x866.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.38.png 1130w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"634\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.06-1024x634.png\" alt=\"\" class=\"wp-image-3101\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.06-1024x634.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.06-300x186.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.06-768x476.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.06-624x386.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.06.png 1156w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Aber diese Engine braucht nat\u00fcrlich viele Ressourcen. L\u00e4dt lange und ist deswegen schwerf\u00e4llig. Aus diesem Grund &#8211; auch eine typische Demoscene Idee vermutlich &#8211; wurde neu angefangen. Alles weggeworfen und wiederverwendet. Es sollte schlank und einfach werden. <\/p>\n\n\n\n<p>Mit dem Umschwenken auf &#8222;Alles Neu und Besser&#8220; (einer typischen Entwickeler* Attititude, die das ganze Testing nicht bedenkt) kam dann die Idee auf doch etwas zum Inhalt des CHLudens Projektes zu machen statt einer v\u00f6llig freien (inhaltlich) Demo. Und was f\u00fcr ein Thema wenn \u00fcberhaupt? <\/p>\n\n\n\n<p>Siehe dazu auch <a href=\"https:\/\/research.swissdigitization.ch\/?p=3072\">Spreadpoints Themenfindungsprozess<\/a> (ToDo: Umfrage zur Ideation und Themenfindung in der Demoscene)<\/p>\n\n\n\n<p>Vielleicht die Herausstellung und ein Danke-Sch\u00f6n an die Entwickler* und den Inhalt von CHLudens?<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"781\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02-1024x781.png\" alt=\"\" class=\"wp-image-3081\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02-1024x781.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02-300x229.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02-768x586.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02-1536x1172.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02-624x476.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02.png 1780w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Dazu eine Geschichte der Cracker-\/Demoscene und der Frage &#8211; was ist neu, wie steht es gegen die 80er Jahre Szene. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"917\" height=\"1024\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.17-917x1024.png\" alt=\"\" class=\"wp-image-3102\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.17-917x1024.png 917w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.17-269x300.png 269w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.17-768x858.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.17-624x697.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.17.png 1198w\" sizes=\"auto, (max-width: 917px) 100vw, 917px\" \/><\/figure>\n\n\n\n<p>Die Frage allerdings war hier dann, ok hier geht es schon um Inhalt, also Erkennntnisse, die teilweise erst rudiment\u00e4r da sind und da m\u00fcsste man sich dann im gesamten Projekt verst\u00e4ndigen. Zudem konnte man den Inhalt auch in einer anderen Demo unterbringen. Und anderseits hat sich gezeigt mit der OnlineAusstellung &#8222;<a href=\"https:\/\/www.toniz.ch\/?room=demoscene\">Code Imagerey<\/a>&#8222;, dass das Interesse der Szene selbst an sich und ihrer Geschichte nicht unbedingt gross ist. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"745\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-11-um-11.35.24-1024x745.png\" alt=\"\" class=\"wp-image-3122\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-11-um-11.35.24-1024x745.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-11-um-11.35.24-300x218.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-11-um-11.35.24-768x559.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-11-um-11.35.24-1536x1117.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-11-um-11.35.24-624x454.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-11-um-11.35.24.png 1870w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Kurz und gut. Es war schwierig ein Thema zu finden bzw. eines zu finden, das all den Anspr\u00fcchen dieses kleinen Projektes enstpr\u00e4chen.<\/p>\n\n\n\n<p>Deswegen gab es einen Neuanfang: Eine Demo \u00fcber CHLUDENS und das Vorstellen des Projekts inklusive Thematisierung von einigen Aspekten wie etwa das Nicht-Vorkommen von Code in Demos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Entwicklung<\/h2>\n\n\n\n<p>Die urspr\u00fcngliche cryAmiga-Engine wurde v\u00f6llig entfernt und alles fortgeworfen. \u00dcbrig blieb eine einfache Struktur. Ein Screen der 32+320+32 Pixel breit ist und sich \u00fcber 512 Pixel erstreckt. 256 Pixel sind sichtbar und das &#8222;Backoffice&#8220; wie Buffers und etwa der Font liegen in zweiten Screen. Dieses ganze technische Setup liegt in einem Bild und wird als Bild bearbeitet. Also keine eigenen Tools sondern einfach integrierbar in Workflows.<\/p>\n\n\n\n<p>Das &#8222;Bild&#8220; und die Infrastruktur sieht dabei folgendermassen aus:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"384\" height=\"512\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/title.png\" alt=\"\" class=\"wp-image-3104\" style=\"width:414px;height:auto\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/title.png 384w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/title-225x300.png 225w\" sizes=\"auto, (max-width: 384px) 100vw, 384px\" \/><\/figure>\n\n\n\n<p>Technisch wird das Ganze so genutzt (Das Overlay zeigt Grenzen und Tiles):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"384\" height=\"512\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/title-1.png\" alt=\"\" class=\"wp-image-3126\" style=\"width:581px;height:auto\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/title-1.png 384w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/title-1-225x300.png 225w\" sizes=\"auto, (max-width: 384px) 100vw, 384px\" \/><\/figure>\n\n\n\n<p><br><br>Hier wird prinzipiell mit dem Blitter (Grafikprozessor) des Amigas rumkopiert und das ganze ist verst\u00e4ndlich auch f\u00fcr Uninvolvierte*.<\/p>\n\n\n\n<p>Damit liess sich auch ein bisschen nachvollziehbar machen, wie diese Demo und ihre Realisation funktioniert. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Coding<\/h2>\n\n\n\n<p>Da das meiste schon im geladenen Bild liegt (also fast nichts generiert werden musste) sollte der Aufwand sich in Grenzen halten. Hauptsache war vorallem die Scrollschrift.<\/p>\n\n\n\n<p>Scrollschriften funktionieren prinzipiell nach dem Motto: Verschiebe den Inhalt der Schrift nach links und h\u00e4nge alle Charbreite wieder einen neuen Buchstaben an. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"930\" height=\"450\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.33.10.png\" alt=\"\" class=\"wp-image-3108\" style=\"width:304px;height:auto\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.33.10.png 930w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.33.10-300x145.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.33.10-768x372.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.33.10-624x302.png 624w\" sizes=\"auto, (max-width: 930px) 100vw, 930px\" \/><\/figure>\n\n\n\n<p>Die Scrollschrift sollte \u00fcber den Hintergrund laufen und steuerbar sein. <\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Der Schrifthintergrund musste also als erstes gebackuped werden.<\/li>\n\n\n\n<li>Restauriert den Hintergrund (falls das was ist)<\/li>\n\n\n\n<li>Dann kopiert man den Schriftbuffer (Hidden-Screen) dar\u00fcber ins Screenmemory &#8211; 15x je ein Pixel verschoben. Dies ist n\u00f6tig weil die einzelnen Pixel in Bytes abgelegt sind. 1 Byte enth\u00e4lt 8 Pixel. Und das ist das, was der Blitter gut kann.<\/li>\n\n\n\n<li>Alle 16 Mal muss nun die Scrollschrift 16 Pixel (inklusive Maske) nach links geschoben werden. Dann kann ein neuer Buchstabe hinzugef\u00fcgt werden aus den Bl\u00f6cken. <\/li>\n\n\n\n<li>Wartet auf das zu EndeZeichnen des Bildschirms &#8211; der User kann es anschauen<\/li>\n\n\n\n<li>und beginnt wieder bei 2.<\/li>\n<\/ol>\n\n\n\n<p>Visualisiert sieht das Ganze so aus:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"744\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.28.31-1024x744.png\" alt=\"\" class=\"wp-image-3107\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.28.31-1024x744.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.28.31-300x218.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.28.31-768x558.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.28.31-1536x1116.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.28.31-624x453.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.28.31.png 1924w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Am Anfang wurde einfach ein Schriftart genutzt einfarbig. Dies war einfach zu nutzen weil die Farbe gleichzeitig auch als Maske benutzt werden konnte. Die Maske braucht es, damit klar ist, was kopiert werden soll und ! wenn es mehr als eine Farbe ist.<\/p>\n\n\n\n<p> Und weil eine sehr farbige Scrollschrift angedacht war, musste also eine Maske kreiert werden. Diese wird nun per Programm genieriert unter die <\/p>\n\n\n\n<p>Wie immer war das Konzept von Anfang an, einigermassen klar, war ja auch nicht die erste entwickelt Scrollschrift. In Assembler allerdings ist das ganze ungemein schwieriger geworden. Das Debugging ist kompliziert, es gab einen Ruckler in der Schrift und und und.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Der fehlende Code<\/h2>\n\n\n\n<p>Die meisten Demos verstecken ihr Gemachtheit oder ihre Konstruktion. Es ist dann immer diese magische Moment: &#8222;WOW. Wie funktioniert das?&#8220; Diese Zelebrierung des Geniekults (zumindest Diassemblieren muss man das Ganze und den &#8218;Code&#8216; verstehen) ist eigentlich ein Unding und deswegen wurde versucht zuerst die Konstruktion der Scrollschrift in der Demo aufzuzeigen. Die Demo scrollt in den Hidden Bereich des Screens und &#8222;erkl\u00e4rt&#8220; in der Scrollschrift, wie es funktioniert.<\/p>\n\n\n\n<p>Noch gravierender ist, dass in fast keinen Games der Code gar nicht vorkommt. Aus diesem Grund wurde ein Teil der Grafik per Code generiert und anschliessend wurde der vereinfachte Code ins Demo integriert und zwar genau so, dass unter dem Output auch das Programm beginnt, in das w\u00e4hrend der Demo gescrollt wird.<\/p>\n\n\n\n<p>Der Output:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"38\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.38.10-1024x38.png\" alt=\"\" class=\"wp-image-3109\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.38.10-1024x38.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.38.10-300x11.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.38.10-768x28.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.38.10-1536x56.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.38.10-624x23.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.38.10.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ein einfaches Band mit Pixeln. Im Amiga ist dies ein Layer von 4 (16 Farben) in den 01 geschrieben werden.<\/p>\n\n\n\n<p>Der Code dazu findet sich auch in der Demo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"978\" height=\"70\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.39.21.png\" alt=\"\" class=\"wp-image-3110\" style=\"width:433px;height:auto\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.39.21.png 978w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.39.21-300x21.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.39.21-768x55.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-11.39.21-624x45.png 624w\" sizes=\"auto, (max-width: 978px) 100vw, 978px\" \/><\/figure>\n\n\n\n<p> Will man nun die ganze Grafik einen Pixel nach rechts bewegen, muss man die 01 \u00fcber die Bytes hinausbewegen (Shiften). Ein grosser Aufwand. Daf\u00fcr wurde der Grafikprozessor eingef\u00fchrt beim Amiga &#8211; der Blitter.<\/p>\n\n\n\n<p>Leider ist das Videomemory des Amigas so, dass dies, was wir hier sehen eine Bitplane ist und es braucht 4 Bitplanes f\u00fcr 16 Farben. Das heisst, will man zum Beispiel die Farbe 9 erstellen. Muss man in der ersten Bitplane ein 1 hineinschreiben, im zweiten eine 0 und im dritten Bitplane wieder eine 1. Das ganze ist also recht kompliziert.<\/p>\n\n\n\n<p>Der gesamte Code findet sich am Ende dieses Blogeintrags.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Designentwicklung <\/h2>\n\n\n\n<p>Zuerst sollte es ja ein Demo zum Inhalt werden von CHLudens. Damit w\u00e4ren die verschiedenen Bereiche in den Vordergrund ger\u00fcckt. Die Idee dahinter: die verschiedenen Arten des Entertainments dargestellt im Medium der Demo. Klare Sache.<\/p>\n\n\n\n<p>Die Grafik sollte typisch sein f\u00fcr diese Zeit &#8211; eventuell auch Moderner Grafik und Visualsierung im Comic-Stil und die \u00fcblichen handgerenerten 3D Schriften. Hier sieht man schon die Probleme die sich ergeben mit 3D Schriften und Farbwahl. Aufl\u00f6sung und Farbwahl m\u00fcssen sehr gut aufeinanderabgestimmt sein, sonst wirkt es maximal Artifiziell (siehe oben SWISS WONDER &#8211; das nat\u00fcrlich SWISS MIRACLE heissen sollte.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"781\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02-1024x781.png\" alt=\"\" class=\"wp-image-3081\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02-1024x781.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02-300x229.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02-768x586.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02-1536x1172.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02-624x476.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-25-um-20.41.02.png 1780w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Nach dem Fokuswechsel zu einer Demo f\u00fcr das Forschungsprojekt &#8211; mehr im Sinne eines Crackersintros mit Greetings etc. Sah die Sache dann folgenermassen aus. <\/p>\n\n\n\n<p>Die Schweiz als fressendes Maul gemacht aus Tiles. Dann aber auch die Erkenntnis, dass es wenig tilebasierte Demos gibt (Zudem gibt es schon eine tilebasierte Demo von CHLUdens &#8211; unver\u00f6ffentlicht UGLY DEMO) und der Style schwierig w\u00e4re.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"787\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-1024x787.png\" alt=\"\" class=\"wp-image-3084\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-1024x787.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-300x231.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-768x590.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-1536x1181.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36-624x480.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.00.36.png 1824w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Es folgte auch eine Auseinandersetzung mit dem CHLUDENS-LOGO. Das sich letztlich als ungeeignet herausstellte (Zu  wenig Bezug zur dargestellten Computergames-Szene mit Joystick) und deswegen wurde dann die Schweiz &#8222;bespielt&#8220; oder kontrolliert als Spiel (symbolisch).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"757\" height=\"1024\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.47-757x1024.png\" alt=\"\" class=\"wp-image-3085\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.47-757x1024.png 757w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.47-222x300.png 222w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.47-768x1039.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.47-1136x1536.png 1136w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.47-624x844.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.01.47.png 1226w\" sizes=\"auto, (max-width: 757px) 100vw, 757px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"887\" height=\"1024\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.24-887x1024.png\" alt=\"\" class=\"wp-image-3086\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.24-887x1024.png 887w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.24-260x300.png 260w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.24-768x887.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.24-624x720.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.02.24.png 1256w\" sizes=\"auto, (max-width: 887px) 100vw, 887px\" \/><\/figure>\n\n\n\n<p>Erste implementierte Visuals. Wobei der Prozess hin und her ging: Digital &#8211; Analoge Zeichnung etc. <\/p>\n\n\n\n<p>Zuerst wurde ein Stil angestrebt, der sich klar an der Demoscene der 80er Jahre anlehnt: viel glitzerndes und spiegelndes 3D. Am Ende wurde eher Abstrakt 3D benutzt in der Gesamtanlage mit klaren Fl\u00e4chen und einem &#8218;\u00fcberbleuchteten&#8216; oder grafischen Joystick hin zum ebenfalls 2D wirkenden Gesamttitel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"752\" height=\"496\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-30-um-20.51.26.png\" alt=\"\" class=\"wp-image-3082\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-30-um-20.51.26.png 752w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-30-um-20.51.26-300x198.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-30-um-20.51.26-624x412.png 624w\" sizes=\"auto, (max-width: 752px) 100vw, 752px\" \/><\/figure>\n\n\n\n<p>Dabei sollte der Schriftzug den R\u00fcckbezug zur 80\/90er Szene gew\u00e4hrleisten mit einer handgerenderten 3D-Schrift. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"665\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-30-um-21.03.23-1024x665.png\" alt=\"\" class=\"wp-image-3087\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-30-um-21.03.23-1024x665.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-30-um-21.03.23-300x195.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-30-um-21.03.23-768x499.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-30-um-21.03.23-1536x998.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-30-um-21.03.23-2048x1330.png 2048w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-30-um-21.03.23-624x405.png 624w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Gerade die Lesbarkeit bei nur 320&#215;200 war ein Problem. Wie vermittelt man mit so wenig Aufl\u00f6sung und Farbe Inhalt? Visualisierten Inahlt.. Es musste eine lesbare Schrift gefunden werden bei etwa 12-16 Pixeln, die nicht nachtr\u00e4glich bearbeitet werden muss (Abst\u00e4nde etc). <\/p>\n\n\n\n<p>Aber gerade die Scrollschrift wurde dann auch zum Designproblem. Abstrakte Formen mit Fl\u00e4chen vertragen sich nat\u00fcrlich eher schlecht mit gepixelten 3D-Buchstaben. Wobei auch klar ist: Die Anspr\u00fcche an 3D Buchstaben in Scrollschriften sind durch die 80\/90er Jahr Crackerdemos\/Demos hoch. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"665\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.17.18-1024x665.png\" alt=\"\" class=\"wp-image-3090\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.17.18-1024x665.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.17.18-300x195.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.17.18-768x499.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.17.18-1536x998.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.17.18-2048x1330.png 2048w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.17.18-624x405.png 624w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Pixeln wie in den 80\/90er Jahren: Crackintros und ersten Megademos<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"386\" height=\"434\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-29-um-20.18.53.png\" alt=\"\" class=\"wp-image-3118\" style=\"width:285px;height:auto\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-29-um-20.18.53.png 386w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2024-12-29-um-20.18.53-267x300.png 267w\" sizes=\"auto, (max-width: 386px) 100vw, 386px\" \/><\/figure>\n\n\n\n<p>Mehr zu Reflektionen und Co als Stilmittel findet sich im BlogArtikel &#8222;Metall, \u201e<a href=\"https:\/\/research.swissdigitization.ch\/?p=2959\">Farbverl\u00e4ufe\u201c &amp; Reflektionen in 16\/32-bits-Demos&amp;Games \u2013 eine (manuelle 3D-)Designtechnik<\/a>&#8222;.<\/p>\n\n\n\n<p>Wie sollte sie ins Gesamtdesign integriert sein? Ebenfalls Pseudo 3D? Sah nicht besonders gut aus &#8211; im Gesamtkonzept.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"665\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.58.12-1024x665.png\" alt=\"\" class=\"wp-image-3089\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.58.12-1024x665.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.58.12-300x195.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.58.12-768x499.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.58.12-1536x998.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.58.12-2048x1330.png 2048w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-03-um-12.58.12-624x405.png 624w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Aber auch andere und viele Versuche waren nicht unbedingt besser. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"129\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.45.17-1024x129.png\" alt=\"\" class=\"wp-image-3093\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.45.17-1024x129.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.45.17-300x38.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.45.17-768x97.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.45.17-624x78.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.45.17.png 1384w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"665\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.44.31-1024x665.png\" alt=\"\" class=\"wp-image-3088\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.44.31-1024x665.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.44.31-300x195.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.44.31-768x499.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.44.31-1536x998.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.44.31-2048x1330.png 2048w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-04-um-20.44.31-624x405.png 624w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Problematisch war vorallem &#8211; wenn es nicht ganz fl\u00e4chige Buchstaben waren &#8211; wenn sie nur aus einer Farbe bestanden bzw. einem Farbspektrum. Sie wirkten einfach zu langweilig. <br><br>Aus allem dies entstand ein fl\u00e4chiger und zugleich 3D Font mit 3 Farbspektren. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"133\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-06-um-15.11.36-1024x133.png\" alt=\"\" class=\"wp-image-3091\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-06-um-15.11.36-1024x133.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-06-um-15.11.36-300x39.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-06-um-15.11.36-768x100.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-06-um-15.11.36-1536x200.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-06-um-15.11.36-624x81.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-06-um-15.11.36.png 1832w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Dieser Font erinnert auch nicht unbedingt an seine Materialit\u00e4t wie es viele Cracker-\/Demos der 80er Jahre mit Metall versuchen. Am ehesten kommt noch Neon als &#8218;defiktionalisiertes&#8216; Material in Frage.Die Idee der Scrollschrift ist dabei, die Farben und ihre Bedeutung (Graustufen Einfl\u00fcsse aufzunehmen und mit Gr\u00fcn etwas neues zu sagen: Meinung Ideen der Teams) aufzunehmen.<\/p>\n\n\n\n<p>Zus\u00e4tzlich wurde noch mit generischeren Formen gespielt und dies kommt am Anfang der Demo auch vor: Es gibt ein Pattern im Hintergrund, das mit den Buchstaben Masken dargestellt wird. Hier steht das Fl\u00e4chige im Vordergrund.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"718\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.25.15-1024x718.png\" alt=\"\" class=\"wp-image-3094\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.25.15-1024x718.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.25.15-300x210.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.25.15-768x538.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.25.15-1536x1077.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.25.15-624x437.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.25.15.png 2014w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Aus heutiger Perspektive (Design) passt dieser Schriftzug fast besser, auch wenn er f\u00fcr den Stil zu wenig Fl\u00e4che in den einzelnen Buchstaben aufweist. Allerding hat jeder Buchstaben einen leicht anderen Hintergrund und ist nie dieselbe Kombination. Aber ob dies je jemandem auff\u00e4llt .-)<\/p>\n\n\n\n<p>Anbei der Hidden-Screen mit der oben dem aktuellen Muster f\u00fcr die Schrift, darunter dann das Muster und ganz unten der nun benutzte Font.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"770\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.26.36-1024x770.png\" alt=\"\" class=\"wp-image-3095\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.26.36-1024x770.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.26.36-300x226.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.26.36-768x578.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.26.36-1536x1155.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.26.36-624x469.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-01-09-um-10.26.36.png 1888w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Aktuelle Demo<br><\/h2>\n\n\n\n<p>Die aktuelle Demo sieht folgendermassen aus mit noch Demotexten:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"720\" style=\"aspect-ratio: 956 \/ 720;\" width=\"956\" controls src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Screen-2025-01-06-160434.mp4\"><\/video><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Wie funktioniert diese einfach Demo?<\/h3>\n\n\n\n<p>Die Demo erkl\u00e4rt zuerst den Aufbau des Screens beim Amiga (eine an und f\u00fcr sich schon komplizierte Sache). Danach wird anhand eines Source-Code-Ausschnittes gezeigt, wie ein Muster auf den Screen gezeichnet wird.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"730\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.45-1024x730.png\" alt=\"\" class=\"wp-image-3605\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.45-1024x730.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.45-300x214.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.45-768x548.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.45-1536x1095.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.45-624x445.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.45.png 1994w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Es geht hier um den roten einfarbigen Balken. Danach wird auch noch der ganze Screen, der verborgen und ist, dort wird erkl\u00e4rt wie die Scrollschrift funktioniert.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"753\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.54-1024x753.png\" alt=\"\" class=\"wp-image-3606\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.54-1024x753.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.54-300x221.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.54-768x565.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.54-1536x1130.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.54-624x459.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/01\/Bildschirmfoto-2025-02-13-um-21.40.54.png 1898w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Texte<\/h3>\n\n\n\n<p>Die Texte, die kollaborativ zusammengetragen wurden von den einzelnen Teams.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>(PIONIEERS) \nYOU ARE THE PIONEERS OF THE DIGITAL! ON YOUR APPLE II, TI99, MS-DOS, BBC MICRO, C64, MSX, UNIX, MAC, HYPERTEXT, ATARI ST, AMIGA, WIN95, HTML, SHOCKWAVE, JAVASCRIPT, FLASH, JAVA AND AND AND. YOU ARE THE DEVELOPERS OF GAMES, DEMOS, (CRACKS AND VIRUSES). WE WOULD LIKE TO THANK YOU FOR ALL YOUR WORK FROM 1970 - 2000! THANK YOU! YOU BUILT SOMETHING IN A TIME WHEN TECHNOLOGY WAS NOT LOVED AND GAMES WERE HELLISH. YOU DEVELOPED GRAPHICS, ANIMATIONS, SOUND EFFECTS, MUSIC AND A LOT OF CODE. AND PUT THIS ALL TOGETHER. GAMES IN ACTION. INTERACTIVE MULTIMEDIA IN THE EARLY DAYS. YOU DEVELOPED NOT EXISTING - NEW WORLDS IN DEMOS OR GAMES: THE CYBERSPACE. THE LIST OF GAMES FROM YOU IS NOW 200 ENTRIES LONG. ALTHOUGH MANY OF YOU DIDN'T STAY IN GAME DESIGN, YOU ALSO BUILD UP THE NEW  FIELD OF IT.  WE ALSO SAY HERE; THANK YOU VERY MUCH.         YOUR ARTIFACTS ARE THE SUBJECT OF THE CONFOEDERATIO LUDENS PROJECT.  (DEMO) YOU CAN SEE THE MAP OF SWITZERLAND. TO THE LEFT OF THE MAP YOU CAN SEE THE HARDWARE AND SOFTWARE DEVELOPMENTS THAT CAME FROM OUTSIDE. IN THE CENTER IS SWITZERLAND WITH ITS DEVELOPMENTS AND THE SHIFT IN DEVELOPMENT FROM THE JOYSTICK TO THE MOUSE AS AN INPUT DEVICE FOR SELF-DEVELOPED PERSONAL COMPUTER GAMES. ON THE RIGHT-HAND SIDE YOU CAN SEE THE SOFTWARE INNOVATIONS AND THE POLITICAL CHANGES. THIS IS A SIMPLE RESEARCH DEMO OF OUR EXPERIMENTAL ARCHEOLOGY FOCUS. THE RESEARCH QUESTION WAS;'HOW COMPLEX WAS IT TO CREATE A SIMPLE AMIGA DEMO?'. THE TOPIC THE RESEARCH PROJECT CHLUDENS. THE RESULT YOU FIND AT THE END OF THE SCROLLTEXT OR ON RESEARCH.SWISSIGITIZATION.CH.  THE DEMO WAS RELEASED AT MOUNTAINBYTES.CH 2025. CODE AND VISUALS BY LA1N, MUSIC BY COMPUTERMUSIKER.  \n\n(PROJECT) \nCONFOEDERATIO LUDENS IS AN SNF RESEARCH PROJECT EXPLORING THE SWISS GAME DESIGN SCENE FROM 1970-2000. DO YOU STILL HAVE A GAME ON A DISK? THEN LET US KNOW VIA OUR WEBSITE. YOU CAN ALSO FIND OUT MORE ABOUT THE PROJECT IN GENERAL AT; WWW.CHLUDENS.CH OR WRITE AN E-MAIL TO INFO AT CHLUDENS.CH THE PARTNERS OF THE PROJECT ARE ZHDK, HKB, UNIBE, UNIL  \n\n(GREETINGS)\nTHANKS TO DEPECHE FOR ALL THE HELP AND OF COURSE RWERNER, SCA, RHEUBI, CHALLER, JESPERSON, DEPECHE, PACKERMANN, PRESOLE, BANDIT, BLOODY MARY, CARINA, UNLOCK, SHANA, DIPSWITCH AND JJUUL. CODE IS EVERYTHING IN DEMOS BUT THERE IS NO SOURCE CODE INSIDE DEMOS GREETINGS FROM R2GF; LET THE SWISS NATIONAL VIDEO GAME MUSEUM BE! \n\n(TECHNICS)\nIT IS IN 68000 ASSEMBLY - 16+32 BIT. A VERY COOL PROCESSOR FOR DEVELOPERS. SIMPLE STRAIGHT NOT LIKE THE CHEAP 6502! \n\nTHE 'SCREEN' HAS A 32 PX BORDER LEFT AND RIGHT (FOR HIDDING THE CREATING OF THE SCROLLTEXT). IT IS 512 PIXEL HEIGHT. ONLY THE FIRST 256 PX YOU SEE, THE REST IS SCROLLTEXT BUFFER AND THE FONT. YOU CAN ALWAYS WITH THE MOUSEBUTTON SWITCH BETWEEN THE 'TWO SCREENS' (IN FACT IT IS ONE MEMORY AREA, THERFORE YOU CAN SCROLL IN IT DOWN LIKE IN SOME SECONDS). THE SCREEN HAS 4 LAYERS (PLANES) - MEANS 16 COLORS. EXAMPLE 4 LAYERS (BITPLANES) ; 1 0 0 1 IS THE COLOR 9 (1+8). AND EVEN MORE COMPLICATED; 1 BYTE IN THIS BITPLANE CODES FOR 8 PIXELS.  \nWRITING DIRECTLY IN A BITPLANE YOU SEE HERE IN GREEN. c THIS CODE CREATES THE DARK RED PATTERN. IT WRITES 8 LINES WITH 40 BYTES (320 BYTES) INTO THE SCREEN-MEMORY. \nBUT FOR A 16 COLOR PIXEL, YOU HAVE TO DO THIS ON 4 LAYERS. SO YOU HAVE TO DO THE SAME THING 4 TIMES. A LOT OF BLITTER WORK.  t STUPID THING! EXPANDABLE YES. BUT EVERYTHING IS SPREADED IN THE MEMORY. \nWHY IS SO FLICKERING? THE GLITCH HAPPENS BECAUSE THE SCROLLTEXT IS NOT EVERY TIME PAINTED, WHEN THE CATHODIC BEAMS COMES BY. YOU COULD SOLVE THIS BY USING DOUBLEBUFFERING. YOU SHOW ONE SCREEN AND IN THE BACKGROUND YOU CREATE THE OTHER AND THEN SHOW IT. THIS WOULD BE MUCH MORE WORK AND WE WOULDNT SEE THE PROBLEMS OF A 'SIMPLE' DEMO. \nTHE 'SCROLLER'; THE ONLY CHALLENGE IN THIS DEMO. d HOW IT WORKS; \n0. YOU TAKE THE BACKUP AND COPY IT BACK TO THE SCREEN. \n1. YOU MAKE A BACKUP AGAIN. \n2. YOU SHIFT LEFT - 15 TIMES THE TEXTBUFFER TO THE VISIBLE SCREEN (BLITTER)\n3. YOU SHIFT NOW THE TEXTBUFFER (INCL. MASK) 16 PIXELS LEFT AND ADD THE NEXT CHAR (AND MASK) FROM THE CHARBLOCKS \n4. YOU WAIT FOR THE NEXT SCREEN-REFRESH \n5. AND THEN ENDLESS FROM 0 \n\n(TEAM ZHDK) \nHEY SIS AND BROS, DON'T YOU KNOW, WE ARE THE KINGS AND PROS. CREDIT TO US.  THAT'S MELAKKO, THE ARCADE LIGHTNING BOLT, IXISTENZ, THE RELENTLESS  EXCAVATOR AND RE-MAKER OF INNOVATIONS, INMIU, THE ENTHUSIASTIC AND CRITICAL DEVELOPER ASSESSOR, ZIJAN, THE INCREDIBLE WEBFLOWING DATA AND NETWORK ANALYZER, DAVEBENTFIELD, THE OMNISCIENT COMMUNITY MOLE, FLUFFYADRENALINE, THE UNBELIEVABLY FOCUSED PLOWER OF MEDIA ARCHIVES, AND CYBERSUTER, THE UNRESTRAINED FAST-PACED INFORMATION JUNKIE. THAT'S US, THE GAMELAB OF ZHDK, THE GREAT CH-LUDENS ZURICH TEAM, THE KEEPERS OF TIME AND HISTORY OF SWISS GAME DESIGN.  LARISSA; GREETINGS EARTHLINGS DID YOU KNOW EVEN ALIENS ARE INTERESTED IN THE HISTORY OF SWISS GAME DEVELOPMENT THIS MEANS YOU SHOULD DEFINITELY ALSO BE INTERESTED IN OUR PROJECT CH-LUDENS MY FOCUS IS ON RESEARCHING HOW EARLY SWISS GAME DEVELOPERS MADE GAMES YOU KNOW, I\u2019M INTERESTED IN THE WORKFLOWS AND PRACTISES THAT WERE COMMON IN THE 80S AND 90S IN SWISS VIDEO GAME PRODUCTION WERE THEY ALL JUST FREAKS? OR WERE THEY GENUIS AND INNOVATORS?MAYBE BOTH! BUT THE GAME DESIGN SCENE IN THE 80S WAS VERY ACTIVE OUR DATABASE CONTAINS OVER 200 SWISS GAMES MADE IN THE YEARS BETWEEN 1968 TO 2000! INCREDIBLE! BEFORE I GIVE THE WORD BACK TO THE TEAM I WANT TO GREET PANDALF AND PERLIN. WHO THE HELL ARE THEY? THEY ARE MY CATS! MEOW MEOW MEOW  HERE IS FUN FACT THE LONGEST SCROLLTEXT HAS AROUNDD 450 BLOCKS AND WAS RELEASED IN 1990 IN A COMMODORE 64 DEMO CALLED THE LONGEST SCROLLTEXT BY BABOONS  DAVE; SHOUTOUT TO THE EARLY SWISS GAMEDEVS ;P MANY THANKS TO SSI, CHRIS H., BIG APPLE, SATURNUS THE INVINCIBLE AND RENE S.!   MELAKKO; HEYALL FELLOW PINBALL LOVERS! SORRY FOR THE HOMECOMPUTERS, BUT PINBALL IS NOT DEAD! LET'S KEEP TILTING, KEEP FLIPPERING! GREETS TO YOU FROM MELAKKO  CYBERSUTER;  THE OLD SWISS GAME DESIGN SCENE WAS HIP AND HOT AND A LOT BETTER THAN YOU THOUGHT! LOCKED UP IN A CHICKEN COOP THEY MADE A SHOOT\u2019EM UP. HURDLED TOGETHER IN A RAILROAD KEEPER'S COTTAGE FAR FROM CIVILIZATION, THEY CODED AND MADE ADVENTURE GAMES WHILE GETTING FED NOTHING BUT  POLENTA DAY IN, DAY OUT.   \n\n(TEAM HKB BERN) \nTHE FIRST GAME OF PONG. A LITTLE SOLITAIRE ON THE COMPUTER IN THE OFFICE. PLAYING ARCADE MACHINES IN THE VILLAGE PUB. AFTERNOONS AT YOUR FRIENDS CONSOLES. SWAPPING GAMES IN THE SCHOOL YARD. THE FIRST GAMES STORES, MAJOR GAMING EVENTS, COMMUNITY MEETINGS. PLAYING IN THE TOY DEPARTMENT OF THE JELMOLI DEPARTMENT STORE.  ALL THESE MEMORIES ARE AN IMPORTANT PART OF EARLY GAMING CULTURE IN SWITZERLAND. THE AIM OF THE CH-LUDENS SUB-PROJECT SWISS GAMESCAPES+ IS IT TO USE ORAL HISTORY TO PRESERVE THE EVERYDAY HISTORY OF THIS EARLY GAMING CULTURE AND THUS ALSO TO EXPAND HISTORICAL KNOWLEDGE ABOUT DIGITAL MEDIA AND THEIR USE IN SWITZERLAND AND THIS EARLY PHASE OF THE DIGITALIZATION OF SOCIETY.  EUGEN PFISTER; MEIN VATER BRACHTE MIR VON DER KINDHEIT AN BEI COMPUTER ALS GANZ SELBSTVERSTAENDLICHEN BESTANDTEIL MEINER WELT ZU VERSTEHEN. ICH BIN MIT COMPUTERN AUFGEWACHSEN, ZUERST EINEN SCHNEIDER CPC, DANN SEHR FRUEH EINEN EIGENEN IBM PC, OHNE DAS JE ZU HINTERFRAGEN. DAS FORSCHUNGSINTERESSE VON HISTORIKER*INNEN IST IMMER AUCH ZU EINEM TEIL AUTOBIOGRAPHISCH BEDINGT. SO AUCH BEI MIR. VERMUTLICH ERFORSCHE ICH DIE GESCHICHTE DIGITALER SPIELE, WEIL SIE SEIT MEINER KINDHEIT ZENTRALER MOMENT MEINES LEBENS SIND. HEUTE HABE ICH ABER DAS WERKZEUG, DIESE SELBSTVERSTAENDLICHKEIT HISTORISCH KRITISCH ZU HINTERFRAGEN, UND SO ERKENNTNISSE ZU GEWINNEN, DIE UEBER MEINE PERSOENLICHE BIOGRAFIE WEIT HINAUSREICHEN.  ADRIAN; THGIE SENDS MUCH LOVE TO HIS FOLKS AT LUDENS, ALL LURKERS AND HIS SISTER (YOURE AWESOME). LUDOLOGY VS. NARRATOLOGY? LOL ;3 YOURE BOTH WRONG. DRINK COFFEE AND EAT DONUTS LIKE ITS 1990 AND DALE COOPER IS IN THE HOUSE.    \n\n(TEAM BERN UNIVERSITY) \nNO TEXT  \n\n(TEAM UNIL LAUSANNE) \nTHE LAUSANNE TEAM IN CHLUDENS CONSISTS OF PIERRE-YVES, SOPHIE, GUILLAUME, JOHAN AND YANNICK. THEY EXCAVATE AND STUDY DIODES AND VIDEO GAMES CREATED IN WELSCHLAND, FOCUSING ON THE PRACTICE OF CREATING THESE GAMES AND MANIPULATING WHAT WERE ONCE FUTURISTIC MACHINES THAT PROMISED TO FREE US FROM CORRUPTION AND DECREPITUDE (THOUGH WE KNOW THAT THE FUTURE TOOK A DIFFERENT DIRECTION). WE WOULD LIKE TO PAY TRIBUTE TO ALL OF THE RACCOONS IN THE WORLD, WITH THEIR TINY HANDS, WHO HELP US SEE THINGS FROM A DIFFERENT PERSPECTIVE. SHOUT OUT TO ALCATRAZ, ARC ANGELS, LIQUID SQUAD, INSERT COIN, DACTAR VII, THE AMIGA TASK FORCE, CATHY, JDN, BLUPI, COLONEL YAGOV, CURZIO, ARIZONA SOFTWARE, MARIELLE STAMM, ELECLUB READERS, GONISOFT, VTX, LE CONCEPT MODERNE, CHRIS CHAUFFAT, ARCANTEL, ROSSET, AND JUERI! WE FORGET MANY OTHERS...   \n\n(RESULTS) \nFIRST PROBLEM WAS TO FIND A TOPIC TO BE HONEST. ABOUT WHAT? IF I DO SIZECODING IT IS CLEAR, BUT A SIMPLE DEMO? YOU WILL SAY; 'THERE MUST BE A MESSAGE.' BUT TECHNIC CAN NOT BE THE ONLY MESSAGE.  \nMORE ABOUT THE RESULTS DIRECTLY HERE; \nRESEARCH.SWISSDIGITIZATION.CH SEARCH FOR CHLUDENS AND DEMO  \n\t \nTHIS IS NO BOOK, SO YOU DON'T HAVE TO READ TO THE END. THERE IS NO AHA EFFECT. NO 3 ACTS. SORRY 3 2 1 &#91;RESTART]  \n<\/code><\/pre>\n\n\n\n<p><br>Die Musik stammt vom Musiker Computermusiker. Es ist eine in den 90er auf dem Amiga entstandenes Lied. <\/p>\n\n\n\n<p>Anschliessen wird wie f\u00fcr eine Demo &#8222;\u00fcblich&#8220; das Ganze an einem DemosceneEvent <a href=\"http:\/\/mountainbytes.ch\">mountainbytes.ch<\/a> ver\u00f6ffentlicht und die Reaktionen ausgewertet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Code als Ganzes<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>;======================================================================================================================\n; CHLUDENS-DEMOSCENE\n;======================================================================================================================\n; \n;  CODE &amp; VISUALS: LA1N (info@la1n.ch)\n;  MUSIC: COMPUTERMUSIKER\n;  SCROLLTEXT: THE TEAMS\n;\n; AREA: EXPERIMENTAL ARCHEOLOGY\n; RESEARCH: HOW COMPLEX WAS IT TO MAKE A SIMPLE DEMO ON THE AMIGA\n;\n;======================================================================================================================\n; made with and for VisualStudioCode and Amiga-Assembly-Modul \n;======================================================================================================================\n\n; More ideas (not released):\n; Chars explode at the end of the line  \n\n\n;======================================================================================================================\n; FS-UAE (Emulator):\n;\n; (FS-LUAE: Ctrl+w &gt; fast forward)\n; Ctrl+return &gt; fullscrren\n; Ctrl+A &gt; several times &gt; real fullscreen\n; Command: pause\/resum\n;\n;======================================================================================================================\n\n; ---------------------\n; TITLE-SCREEN\n; ---------------------\n; Image-Data\n; C_DATA.s\n; - exported by https:\/\/www.stef.be\/dpaint\/ (chrome) &gt; load it &gt; Save as &gt; planes\n; colors:\n; colors.S (automatic)\n; - exported by https:\/\/www.stef.be\/dpaint\/ &gt; Save as &gt; planes &gt; .palette.xt\n; &gt; colorsTitle.s update manual!!! \n\n; if you export a picture \n; than change colors (&gt; PALETTE)\n\n; if you wanna use the 'scrolltext', you need to have 1 as the white color\n; &gt; 1. go to palette (menu) &gt; from image 2. edit palette 2.1 swap color \n; &gt; 2.2 lock 2.3. reduce?\n\n; ---------------------\n; BLOCKS\n; ---------------------\n; use Processing-Tool\n\n; ---------------------\n; SPRITE\n; ---------------------\n; use Processing-Tool\n\n; ---------------------\n; BOBS\n; ---------------------\n; use Processing-Tool\n\n; ---------------------\n; CODING\n; ---------------------\n; ATTENTION: DONT USE D7,D6,A7,A&amp; \n; IS SOMEHOW NEEDED BY MUSIC AND MOUSE\n\n; ------------------------------\n; 68000 KNOWHOW\n; ------------------------------\n\n; 68k online ausprobieren\n; https:\/\/asm-editor.specy.app\/projects\/GuILvBB\n\n; CLR.&#91;B\/W\/L]\n; ADD.&#91;B\/W\/L]\n; SUB.&#91;B\/W\/L]\n; MOVE.&#91;B\/W\/L]\n; SWAP.&#91;B\/W\/L]\n\n; WITHOUT .B\/W\/L &gt; WORD\n; MOVE #4,d0 MEANS MOVE.W #4,d0!!!\n\n; MULTIPLY:\n; ROL ETC \n; DIV&#91;U|S] \/ (int)   W1: RESULT  W2: REST %\n; MUL&#91;U|S] * (int)\n;\n; Data-Register: d0-d7\n; Adress-Register: a0-a7\n; \n; CMP.&#91;B\/W\/L]\n; BNE\/BEQ etc.\n;\n; UNSIGMED\n; BHI.w &gt;\n; BCS.w &lt;\n;\n; SIGNED\n; BGT.w &gt;\n; BLT.w &lt;\n;\n\n;         even\n; label:  must be even for 68k!\n\n; DBRA: FOR-NEXT\n;    move.l #10\n; lab:\n;    dbra d0,lab\n\n; ------------------\n; errors\/failures\n; ------------------\n; cmp.l xyz,d0  ; &lt; d0 and xyz not long!!!\n\n\n;\n; COPPER - graphic processor binded to crt-raster\n;\n; If you install a copper list, this will be executed forever! \n; but you can put labels and write direct there !\n;\n; commands WAIT,MOVE,SKIP\n;  \n;\n; water ... \n;\t\t; data, command\n;\t\t; will be always executed\n;\t\tDC.W    $9601,$FF00 \t; wait for line 150\n;\t\tdc.w\t$0180,$0fff   ; set color\n\n\n; music\nmusicMode equ 0 ; music on 1 off 0\n\n; font mask\ncreateFontMask equ 1 ; create font mask automatic (black is transparent) otherwise paint it .-)\n\n; mouse active in menu?\nMouseMenuActive equ 1\n\n; screenfactor\nscreenFactorWidth = 1\nscreenFactorHeight = 2\n\nBLTDDAT\t=0\t;result of the last word. used for bob collision detection and \n\t\t;MFM decoding\nDMACONR\t=2\t;bit 14=blitter busy flag\n\nBLTCON0\t=$40\t;blitter operation setup\nBLTCON1\t=$42\nBLTAFWM\t=$44\nBLTALWM\t=$46\n\nBLTCPTH\t=$48\t;sources, destination, and size\nBLTCPTL\t=$4a\nBLTBPTH\t=$4c\nBLTBPTL\t=$4e\nBLTAPTH\t=$50\nBLTAPTL\t=$52\nBLTDPTH\t=$54\nBLTDPTL\t=$56\n\nBLTSIZE\t=$58\n\nBLTCON0L=$5a\t;ECS\/AGA registers\nBLTSIZV\t=$5c\nBLTSIZH\t=$5e\n\nBLTCMOD\t=$60\t;modulos\nBLTBMOD\t=$62\n\nBLTAMOD\t=$64 ; 108\nBLTDMOD\t=$66 ; \n\n; BLTDMOD\t=$66 ; \n; BLTDMOD\t=$66 ; \n\n\n\nBLTCDAT\t=$70\t;data to replace sources\nBLTBDAT\t=$72\nBLTADAT\t=$74\n\n\n\nDMACON\t=$96\t;bit 6: enable blitter DMA. bit 10: give blitter priority over\n\t\t;the CPU.\n\n\n\n\tsection\tGameCode,CODE_P\n\n;======================================================================================================================\n; Startup File\n; Makes sure we take control of the OS the proper way\n;======================================================================================================================\n\n\tinclude\t\"lib\/startup.s\"\n\n;======================================================================================================================\n; Which DMAs we will enable\n;\n; 15\tSET\/CLR\tSet\/Clear control bit.\n;\t\t\t\tDetermines if bits written with a 1 get set or cleared\n;\t\t\t    Bits written with a zero are unchanged\n; 14\tBBUSY\tBlitter busy status bit (read only)\n; 13\tBZERO\tBlitter logic zero status bit (read only)\n; 12\tX\t\n; 11\tX\t\n; 10\tBLTPRI\tBlitter DMA priority (also called \"blitter nasty\" for stealing from CPU)\n; 09\tDMAEN\tEnable all DMA below (also UHRES DMA)\n; 08\tBPLEN\tBit plane DMA enable\n; 07\tCOPEN\tCoprocessor DMA enable\n; 06\tBLTEN\tBlitter DMA enable\n; 05\tSPREN\tSprite DMA enable\n; 04\tDSKEN\tDisk DMA enable\n; 03\tAUD3EN\tAudio channel 3 DMA enable\n; 02\tAUD2EN\tAudio channel 2 DMA enable\n; 01\tAUD1EN\tAudio channel 1 DMA enable\n; 00\tAUD0EN\tAudio channel 0 DMA enable\n;======================================================================================================================\n\n\t\t\t\t\t\t\t\t;5432109876543210\nDMASET\t\t\t\t\tequ\t\t%1000001110101111\t; Enable Copper, Bitplane DMA, Sprite DMA, Sound DMA\n\nWaitDisk\t\t\t\tequ\t\t30\t\t; Defined in Startup.s : Time to wait 50-150 to save\/load (50 = 1 second in Pal system)\n\n\n;======================================================================================================================\n; Main Program Start\n;======================================================================================================================\n\nborder_offset = 32 ; border around ...\n\t\t; border_offset_blt1 = border_offset\/4\nborder_offset_byte = border_offset\/8\nborder_offset_word = border_offset\/16 ; tiles\naddress_screen_addframe =  border_offset_byte;  + 8*(320\/8);  +  +border_offset_byte*(320+2*border_offset)\/8 \n\n;======================================================================================================================\n; Libs und co\n;======================================================================================================================\n\n; Libs\n\t\tinclude\t\"Source\/Constants.s\"\n\t\tinclude\t\"Source\/Utils.s\"\n\t\tinclude\t\"Lib\/music.s\"\n\n\nSTART:\n\t\t;--------------------------------------------------------------------------------------------------------------\n\t\t; Saving everything for startup file\n\t\t;--------------------------------------------------------------------------------------------------------------\n\n\t\tmovem.l\td0-d7\/a0-a6,-(SP)\n\n\t\t; bsr.w\tWaitForRaster\n\n\t\t;--------------------------------------------------------------------------------------------------------------\n\t\t; The following is more setup to complete the startup file \n\t\t;--------------------------------------------------------------------------------------------------------------\n\n\t\t; Custom Chips HW Base Address\n\t\tlea\t\t$dff000,a5\n\n\t\t; DMA Set \/ Enable\n\t\tmove.w\t#DMASET,$96(a5)\t\t; DMACON - Enable Bitplane, Copper DMA, Sprties\n\n\t\t; Disable AGA for compatibility\n\t\tmove.w\t#0,$1fc(a5)\t\t\t; Disable AGA\n\t\tmove.w\t#$c00,$106(a5)\t\t; Disable AGA\n\t\tmove.w\t#$11,$10c(a5)\t\t; Disable AGA\n\n\t\t; ----------------------\n\t\t; BLITTER ENABLING\n\t\t; ----------------------\n\t\tmove.w #$8040,$dff096 ; enable blitter\n\t\t; move.w #$87e0,$dff096\n\t\t\n\t\t;--------------------------------------------------------------------------------------------------------------\n\t\t; Init Main Game Screen\n\t\t; This only need to be initialised once\n\t\t;--------------------------------------------------------------------------------------------------------------\n\n\t\t; bsr.w\tInitBitPlanes\n\t\t; bsr.w\tInitColours\n\n\t\n\n\t\t;--------------------------------------------------------------------------------------------------------------\n\t\t; Init the Intro Screen\n\t\t;--------------------------------------------------------------------------------------------------------------\n\n\t\t; Init the Intro Screen Bitplanes and Colours\n\t\t; bsr.w\tInitIntroScr  ; wird nachtr\u00e4glich gemacht!\n\t\t; bsr.w\tSetIntroCol\t\n\n\t\t;--------------------------------------------------------------------------------------------------------------\n\t\t; The following is more setup to complete the startup file \n\t\t;--------------------------------------------------------------------------------------------------------------\n\n\t\t; Custom Chips HW Base Address\n\t\tlea\t\t$dff000,a5\n\n\t\t;--------------------------------------------------------------------------------------------------------------\n\t\t; ENABLE COPPER\n\t\t;--------------------------------------------------------------------------------------------------------------\n\t\tlea\t\t$dff000,a5\n\t\tmove.l\t#CopperList,$80(a5)\t; Point to our copper\n\n\n\t\t;--------------------------------------------------------------------------------------------------------------\n\t\t; Init Bitplanes\n\t\t;--------------------------------------------------------------------------------------------------------------\n\n\t\tmove.l\t#GameScreenBitplanes,d0\t\t; Source Image Address that is the address of Bitplane 1\n\t\tlea\t\tGameBitplanePointers,a0\t\t; Bitplane Pointers in the Copper\n\t\tmoveq.l\t#NoOfBpls-1,d1\t\t\t\t; Number of Bitplanes\n\t\tmove.l\t#BitplaneSize,d2\t\t\t; Add the bitplane size to the source start Image Address\n\t\tbsr.w\tSetBitPlanes\t\t\t\t; Set the Bitplane Pointers\n\n\t\t;--------------------------------------------------------------------------------------------------------------\n\t\t; Init Music\n\t\t;--------------------------------------------------------------------------------------------------------------\n\n\t\tIF musicMode\n\t\t\tbsr.w\tmt_init\n\t\tENDIF\n\n\n\t\t; jsr colorsToGameColors\n\n\t\t; -----------------------------\n\t\t; create mask for \n\t\t; font \n\t\t; -----------------------------\n\t\tIF createFontMask\n\n\n\t\t\t\tmove.l #2,d6\n\n\t\t\t\tmove.l #screen,a0\n\t\t\t\tadd.l #(512-6*16)*(64+320)\/8,a0\n\n\t\t\tlines3:\n\n\t\t\t\tmove.l #(320+64)*16\/8,d3\n\t\t\txorit:\n\n\t\t\t\t; plane 0\n\t\t\t\tclr.l d0\n\t\t\t\tmove.b (a0),d0\t\t\t\n\t\t\t\tmove.l a0,a1\n\t\t\t\t; plane 1\n\t\t\t\tadd.l #BitplaneSizeWide,a1\n\t\t\t\tor.b (a1),d0\n\t\t\t\t; plane 2\n\t\t\t\tadd.l #BitplaneSizeWide,a1\n\t\t\t\tor.b (a1),d0\n\t\t\t\t; plane 3\n\t\t\t\tadd.l #BitplaneSizeWide,a1\n\t\t\t\tor.b (a1),d0\n\n\t\t\t\t; store\n\t\t\t\tmove.l a0,a2\n\t\t\t\tadd.l  #16*(320+64)\/8,a2\n;\t\t\t\tmove.b #111,(a2)\n\t\t\t\tmove.b d0,(a2)\n\n\t\t\t\tadd.l #1,a0\n\t\t\t\tdbra d3,xorit\n\n\n\t\t\t\tadd.l #16*(64+320)\/8,a0\n\n\t\t\t\tdbra d6,lines3\n\n\t\tENDIF\n\n\t\t;--------------------------------------------------------------------------------------------------------------\n\t\t; setup borders &amp; co\n\t\t;--------------------------------------------------------------------------------------------------------------\n\t\t; https:\/\/www.amigarealm.com\/computing\/knowledge\/hardref\/ch3.htm#:~:text=The%20register%20DIWSTRT%20(for%20%22Display,DIWSTRT%20for%20a%20basic%20playfield.\n\t\t; display area\n\t\t; \n\t\t; &#91;]\n\t\t; low-resolution:\n\t\t; playfield 320x200 \n\n\t\tmove.w #border_offset_byte*2,screenoffset_x_borderleft ; odd  ; border_offset_byte\n\t\tmove.w #border_offset_byte*2,screenoffset_x_borderright ; even\n\n\t\n\t\tmove.w #0,scrollX\n\t\tmove.w #0,scrollY\n;\t\tmove.w #256,scrollY\n\t\tjsr updateCameraAndScrolling\n\n\t\t; move.w    $DFF006,$DFF180 ; background\n\n\t\t; up &amp; down \n\t\tmove.w #1,direction\n\n\t\t; ------------------\n\t\t; some democode\n\t\t; ------------------\n\t\t; more complex than in the code\n\t\t; in the demo of course (32 pixels border)\n\t\t\tmove.l #screen+(320+2*32)\/8*(512+238),a0 ; screen-address:\n\t\t\tmove.l #(320+2*32)\/8*8,d3\t; bytes of one line * 8 \n\t\tcopyfor: \t\t\t\t\t\t; jump \n\t\t\tmove.b #%011001010,(a0)+    ; set the pixels activ \n\t\t\tdbra d3,copyfor\t\t\t\t; d3 = d3-1 ; if (d3&gt;0) jmp copfor\n\nscrollTextY = 196\n\n\t\t; ------------------\n\t\t; copy background\n\t\t; ------------------\n\t\tmove.w #scrollTextY,copySourceY\n\t\tmove.w scrollerPositionY,copySourceY\n\t\tmove.w #256+80+16+16,copyTargetY\n\t\tjsr copySliceVertical\t\t\n\n\n; ------------------\ndemoloop:\n; ------------------\n\n\t\t\t; vsync\n\t\t    bsr.w\tWaitForRaster\n\n\t\t; move.w #0,cursorLeft\n\n\t\t; keyboard\n\t\tjsr _keyboard\n\n\n\t\tIF musicMode\n\t\t\tbsr.w\tmt_music\n\t\tENDIF\n\n\t\t; -------------------\n\t\t; up\/down\n\t\t; -------------------\n\t\tcmp.w #1,showTech\n\t\tbne  showTech_if\n\n\t\t\t; up\n\t\t\tcmp.w #1,direction\n\t\t\tbne go_up\n\t\t\t\tadd.w #1,scrollY\n\t\t\tcmp.w #255,scrollY\n\t\t\tbne   go_up\n\t\t\t\tmove.w #0,direction\n\t\t\tgo_up:\n\n\t\t\t; down\n\t\t\tcmp.w #0,direction\n\t\t\tbne go_down\n\t\t\t\tsub.w #1,scrollY\n\t\t\tcmp.w #1,scrollY\n\t\t\tbne   go_down\n\t\t\t\tmove.w #1,direction\n\t\t\tgo_down:\n\n\t\t\tjsr updateCameraAndScrolling\n\n\t\t\t; move.w    $DFF006,$DFF180 ; background\n\t\t\t; move.w scrollY,$DFF180\n\n\t\tshowTech_if:\n\n\t\t; scroll down or up\n\t\tcmp.w #1,scrollDoIt\n\t\tbne scroll_xyt\n\n\t\t\t; scrollYTo: dc.w 0\n\t\t\tmove.w scrollY,d0\n\t\t\tcmp.w scrollYTo,d0\n\t\t\tblt if_lowerthan\n\t\t\t\tsub.w #1,scrollY\n\t\t\t\tjsr updateCameraAndScrolling\n\t\t\t\tjmp iflowerthan_x\n\t\t\tif_lowerthan:\n\t\t\tcmp.w scrollYTo,d0\n\t\t\tbgt if_lowerthant\n\t\t\t\tadd.w #1,scrollY\n\t\t\t\tjsr updateCameraAndScrolling\n\t\t\tif_lowerthant:\n\t\t\tiflowerthan_x:\n\n\t\t\t; end?\n\t\t\tmove.w scrollY,d0\n\t\t\tcmp.w scrollYTo,d0\n\t\t\tbne tax\n\t\t\t\tmove.w #0,scrollDoIt\n\t\t\ttax:\n\t\tscroll_xyt:\n\n\n\t\t; ------------------\n\t\t; copy up\n\t\t; ------------------\n;\t\tmove.w #256+256-16,copySourceY\n;\t\tmove.w #120,copyTargetY\n;\t\tjsr copySliceVertical\t\t\n\n; copyBlock16\n;\t\tmove.w #64,copySourceX\n;\t\tmove.w #512-16,copySourceY\n;\t\tmove.w #64,copyTargetX\n;\t\tmove.w #0,copyTargetY\n;\t\tjsr copyBlock16\n\n\t\t; ------------------\n\t\t; waiting\n\t\t; ------------------\n\t\tcmp.l #0,waitingCounter\n\t\tbeq   if_waitingCE\n\t\t\tsub.l #1,waitingCounter\n\t\tif_waitingCE:\n\n\t\tcmp.l #0,waitingCounter\n\t\tbne   if_waitingC\n\t\t\tsub.w #1,scrollTextX ; scroller\t\t\n\n\t\t\tcmp.w #1,scrollTextX\n\t\t\tblt   if_waitingC\n\t\t\tcmp.w #1,cursorLeft\n\t\t\tbne if_cursorleft\n\t\t\t\tsub.w #1,scrollTextX ; scroller\t\t\n\n\t\t\tif_cursorleft:\n\t\tif_waitingC:\n\n\t\t; ------------------\n\t\t; scroller default\n\t\t; ------------------\n\t\t; more speed\n\t\t\n\t\t\n\n\t\t; default\n\t\tcmp.l #0,waitingCounter\n\t\tbne   if_scrollerTextX\n\t\tcmp.w #-1,scrollTextX\n\t\tbne if_scrollerTextX\n\n\tdumplyX:\n\n\t\t\t; from the beginning\n\t\t\tmove.w #15,scrollTextX\n\n\t\t\tcmp.w #1,cursorLeft\n\t\t\tbne ohnono \n\t\t\t\tmove.w #14,scrollTextX\n\t\tohnono:\n\n\t\t\t; jsr rainbow\n\n\t\t\t; scroll 16 pixel left ... \n;\t\t\tmove.w #256+80,copySourceY\n;\t\t\tmove.w #256+80,copyTargetY\n;\t\t\tjsr copySliceVerticalShiftLeft\n;\n;\t\t\t\t; mask\n;\t\t\t\tmove.w #256+80+16,copySourceY\n;\t\t\t\tmove.w #256+80+16,copyTargetY\n;\t\t\t\tjsr copySliceVerticalShiftLeft\n\n\t\t\t; copy left\n\t\t\t; scroll\n\t\t\tmove.w #256+80,copySourceY\n\t\t\tmove.w #256+80,copyTargetY\n\t\t\tmove.w #32,copyHeight\n\t\t\tjsr copySliceVerticalShiftLeft\n\t\t\tmove.w #16,copyHeight\n\n\n\t\t\t; scroll index \n\t\t\tadd.l #1,scrollindex\n\n\t\t\t; scrolltext: \n\t\t\tmove.l #scrolltext,a0\n\t\t\tadd.l  scrollindex,a0\n\t\t\tclr.l d0\n\t\t\tmove.b (a0),d0\n\n\t\t\t; end of the string\n\t\t\tcmp.b #0,d0\n\t\t\tbne ifnull\n\t\t\t   move.l #0,scrollindex\n\t\t\t   move.b #32,d0\t\n\t\t\tifnull:\n\t\t\t\n\t\t\t; commands\n\n\t\t\t; 103 - g - glitch\n\t\t\tcmpi.b #103,d0\n\t\t\tbne _keyboard_ifg\n\t\t\t\tmove.w    $DFF006,$DFF180 ; background\t  \n\t\t\t\tjmp nextchar\n\t\t\t_keyboard_ifg:\n\n\t\t\t; 119 - w - wait\n\t\t\tcmpi.b #119,d0\n\t\t\tbne _keyboard_ifw\n\t\t\t\tmove.w #10,waitingCounter\n\t\t\t\tjmp nextchar\n\t\t\t_keyboard_ifw:\n\n\t\t\t; 116 - t - to\n\t\t\tcmpi.b #116,d0\n\t\t\tbne _keyboard_ift\n\n\t\t\t\tmove.w #0,scrollYTo\n\t\t\t\tmove.w #1,scrollDoIt\n\n;\t\t\t\tmove.w #0,scrollX\n;\t\t\t\tmove.w #0,scrollY\n;\t\t\t\tjsr updateCameraAndScrolling\t\n\t\t\t\tjmp nextchar\n\t\t\t_keyboard_ift:\n\n\t\t\t; 99 - c - show code\n\t\t\tcmpi.b #99,d0\n\t\t\tbne _keyboard_ifc\n\n\t\t\t\tmove.w #40,scrollYTo\n\t\t\t\tmove.w #1,scrollDoIt\n\n\t\t\t\t; waitingCounter\n;\t\t\t\tmove.w #0,scrollX\n;\t\t\t\tmove.w #0,scrollY\n;\t\t\t\tjsr updateCameraAndScrolling\t\n\t\t\t\tjmp nextchar\n\t\t\t_keyboard_ifc:\n\n\t\t\t; 100 - d - show code\n\t\t\tcmpi.b #100,d0\n\t\t\tbne _keyboard_ifd\n\n\t\t\t\tmove.w #256,scrollYTo\n\t\t\t\tmove.w #1,scrollDoIt\n\n\t\t\t\t; waitingCounter\n;\t\t\t\tmove.w #0,scrollX\n;\t\t\t\tmove.w #0,scrollY\n;\t\t\t\tjsr updateCameraAndScrolling\t\n\t\t\t\tjmp nextchar\n\t\t\t_keyboard_ifd:\n\n\t\t\t; 102 - e - end show font\n\t\t\tcmpi.b #101,d0\n\t\t\tbne _keyboard_ife\n\n\t\t\t\tmove.w #1,showfont\n\n\t\t\t\tjmp nextchar\n\t\t\t_keyboard_ife:\n\n\t\t\t; 103 - f - end show font\n\t\t\tcmpi.b #102,d0\n\t\t\tbne _keyboard_iff\n\n\t\t\t\tmove.w #0,showfont\n\n\t\t\t\tjmp nextchar\n\t\t\t_keyboard_iff:\n\n\n\t\t\t; 109 - m - message\n\t\t\tcmpi.b #109,d0\n\t\t\tbne _keyboard_ifm\n\t\t\t\tmove.w #0,scrollX\n\t\t\t\tmove.w #185,scrollY\n\t\t\t\tjsr updateCameraAndScrolling\t\n\t\t\t\tjmp nextchar\n\t\t\t_keyboard_ifm:\n\n\n\t\t\t; copy new char\n\t\t\tmove.w #320+32+32-16,copyTargetX\n\t\t\tmove.w #256+80,copyTargetY\n\t\t\tmove.w #32,copyHeight\n\t\t\tjsr copyCharAt \n\t\t\tmove.w #16,copyHeight\n\n\t\t\tnextchar:\n\n\t\t\t; copy char\n\t\t\t;move.w #64,copySourceX\n\t\t\t;move.w #512-16,copySourceY\n\t\t\t;move.w #320+32+32-16,copyTargetX\n\t\t\t;move.w #256+80,copyTargetY\n\t\t\t;jsr copyBlock16\n\n\n; BACKGROUND FROM A POINT\n; \n\t\tcmp.w #0,showfont\n\t\tbne if_fonttexture\n\t\t\tadd.l #1,scrollCharXCounter\n\t\t\tcmp.l #20,scrollCharXCounter\n\t\t\tbne nft_fuck\n\t\t\t\tmove.l #0,scrollCharXCounter\n\t\tnft_fuck:\n\t\t\tmove.l scrollCharXCounter,d0\n\t\t\tmulu #16,d0\n\t\t\tadd.l #32,d0\n\t\t\tmove.w d0,copySourceX\n\n\t\t\tmove.w #512-8*16,copySourceY\n\n\t\t\tmove.w #320+32+32-16,copyTargetX\n\t\t\tmove.w #256+80,copyTargetY\n\t\t\tjsr copyBlock16\t\t\n\t\tif_fonttexture:\n\n\n\n; always to this somewhere &gt; same speed\n\n\t\t\t; add new char\n\n\t\tjmp if_scrollerTextX_End\n\t\tif_scrollerTextX:\n\n\t\t\t; some add ons? \n\t\t\n\n\t\tif_scrollerTextX_End:\n\n\n\n\n\t\t\t; ------------------\n\t\t\t; backupground\n\t\t\t; ------------------\n\t\t\t; restore\n\t\t\tmove.w #256+80+16+16,copySourceY\n\t\t\tmove.w #scrollTextY,copyTargetY\n\t\t\tmove.w scrollerPositionY,copyTargetY\t\t\t\n\t\t\tjsr copySliceVertical\t\n\n\n\t\t\t; ------------------\n\t\t\t; waving\/wave\n\t\t\t; ------------------\n\t\t\t; no waving\n\t\t\tcmp.l #0,wave\n\t\t\tbne   if_waveactive\n\t\t\t\tmove.w #scrollTextY,scrollerPositionY\n\t\t\tif_waveactive:\n\n\t\t\t; waving\n\t\t\tcmp.l #1,wave\n\t\t\tbne   if_waveactive_yes\n\n\t\t\t\tadd.l #1,waveindex\n\t\t\t\tmove.l #wave_tab,a0\n\t\t\t\tadd.l waveindex,a0\n\t\t\t\tclr.l d1\n\t\t\t\tmove.b (a0),d1\n\n\t\t\t\tcmp.b #255,d1\n\t\t\t\tbne restart_it\n\t\t\t\t   move.l #0,waveindex\t\n\t\t\t\trestart_it:\n\n\t\t\t\tmove.w #scrollTextY,scrollerPositionY\n\t\t\t\tsub.w #50,scrollerPositionY\n\t\t\t\t; move.w #10,d0\n\t\t\t\tadd.w d1,scrollerPositionY\n\n\t\t\tif_waveactive_yes:\n\t\n\n\t\t\t; ------------------\n\t\t\t; copy background\n\t\t\t; ------------------\n\t\t\tmove.w #scrollTextY,copySourceY\n\t\t\tmove.w scrollerPositionY,copySourceY\n\t\t\tmove.w #256+80+16+16,copyTargetY\n\t\t\tjsr copySliceVertical\t\t\n\n\n\t\t\t; new text\n\t\t\tmove.w #0,copySourceX\n\t\t\tmove.w #256+80,copySourceY\n\t\t\tmove.w scrollTextX,copyTargetX\n\t\t\tmove.w #scrollTextY,copyTargetY\n\t\t\tmove.w scrollerPositionY,copyTargetY\t\t\t\n\t\t\tjsr bobCopyShifted\n\n\n\n\n\n\n\t\t; mouse click?\n  \t    btst   #6,$BFE001      \n   \t\tbne   if_mouseclicked\n\n\n\t\t\tcmp.l #1,clicked\n\t\t\tbeq eee\n\t\t\t\tmove.w #0,scrollX\n\t;\t\t\tmove.w #0,scrollY\n\t\t\t\tcmp.w #256,scrollY\n\t\t\t\tbne gbt \n\t\t\t\tmove.w #0,scrollY\n\t\t\t\tjmp xtl\n\t\t\t\tgbt:\n\t\t\t\tmove.w #256,scrollY\n\t\t\t\txtl:\n\t\t\t\tjsr updateCameraAndScrolling\n\t\t\teee:\n\n\t\t\tmove.l #1,clicked\n\n\t\t\tjmp if_mouseclicked_e\n\t\tif_mouseclicked:\n\n\t\t\tmove.l #0,clicked\n\n\t\tif_mouseclicked_e:\n\n\n\n; ------------------\n\t\tjmp demoloop\n; ------------------\n\n\t\tbsr.w\tmt_end\n\n\t\t; ---------------------------\n\t\t; BACK TO AMIGADOS\n\t\t; ---------------------------\n\n;\t\tmovem.l\td0-d7\/a0-a6,-(SP)\n\t\tmovem.l\t(SP)+,d0-d7\/a0-a6\n\n\t\trts\n\n\n; ---------------------------\n; SUBROUTINES\n; ---------------------------\n\ncopySourceX: \tdc.w 0 ; 16?\ncopySourceY: \tdc.w 0\n\ncopyTargetX: \tdc.w 0  ; default 0\ncopyTargetY: \tdc.w 0\n\ncopyHeight: \tdc.w 16\n\n; ----------------------------------\n; COPYSLICE (Vertical)\n; ----------------------------------\ncopySliceVertical:\n\n\t\tmovem.l\td0-d7\/a0-a6,-(SP)\n\t\t; movem.l\t(SP)+,d0-d7\/a0-a6\n\n\t\t; ----------------------------------\n\t\t; direct copying\n\t\t; ----------------------------------\n\t\tmove.l #3,d4\n\n\t\t\tmove.l #screen,tmpScreenAddress\t\t\n\n\t\tcopy_direct:\n\t\t\tmove.l tmpScreenAddress,a5\t\t\t\n\t\t\tmove.l tmpScreenAddress,a4\n\n\t\t\tjsr waitForBlitter\t\t\n\t\t\tmove.l #$09f00000,BLTCON0(a6);$dff040 mode : combination + XORETC\t\n\t\t\tmove.l #$ffffffff,BLTAFWM(a6) ; mask \n\t\t\t\t; SOURCE\n\t\t\tclr.l d1\n\t\t\tmove.w copySourceY,d1 ; 16*y\n\t\t\t\tmulu #(2*border_offset_byte+40),d1\n\t\t\t\tadd.l  d1,a5\n\t\t\t\tmove.l a5,BLTAPTH(a6); $dff054  ; high &amp; low\n\t\t\t\t; TARGET\n\t\t\tclr.l d1\n\t\t\tmove.w copyTargetY,d1\n\t\t\t\tmulu #(2*border_offset_byte+40),d1\n\t\t\t\tadd.l    d1,a4\n\t\t\t\tmove.l a4,BLTDPTH(a6); $dff054  ; high &amp; low\n\t\t\t\tmove.w #0,BLTAMOD(a6); $dff066\n\t\t\t\tmove.w #0,BLTDMOD(a6) ; todo: add skip factor !!!\n\t\t\t\tmove.w #64*16+(2*32+320)\/16,BLTSIZE(a6) ; $dff058 ; set size\t\t\n\n\t\t\tadd.l #BitplaneSizeWide,tmpScreenAddress\n\t\tdbra d4,copy_direct\n\n\t\tmovem.l\t(SP)+,d0-d7\/a0-a6\n\n\t\trts\n\n\n; ----------------------------------\n; copyBlock16:\n; ----------------------------------\ncopyBlock16:\n\n\t\tmovem.l\td0-d7\/a0-a6,-(SP)\n\n\n\t\t; ----------------------------------\n\t\t; direct copying\n\t\t; ----------------------------------\n\t\tmove.l #3,d4\n\n\t\t\tmove.l #screen,tmpScreenAddress\t\t\t\t\t\n\t\t\t\tclr.l d0\n\t\t\t\tmove.w copySourceX,d0\n\t\t\t\tdivu  #8,d0\n\t\t\t\text.w d0\n\t\t\t\t; mulu #2,d0\n\t\t\t\tadd.l d0,tmpScreenAddress\n\n\t\t\tmove.l #screen,tmpScreenAddressTarget\t\t\n\t\t\t\tclr.l d0\n\t\t\t\tmove.w copyTargetX,d0\n\t\t\t\tdivu  #8,d0\n\t\t\t\text.w d0\n\t\t\t\t; mulu #2,d0\n\t\t\t\tadd.l d0,tmpScreenAddressTarget\n\n\t\tcopy_direct16:\n\t\t\tmove.l tmpScreenAddress,a5\t\t\t\n\t\t\tmove.l tmpScreenAddressTarget,a4\n\n\t\t\tjsr waitForBlitter\t\t\n\t\t\tmove.l #$09f00000,BLTCON0(a6);$dff040 mode : combination + XORETC\t\n\t\t\tmove.l #$ffffffff,BLTAFWM(a6) ; mask \n\t\t\t\t; SOURCE\n\t\t\tclr.l d1\n\t\t\tmove.w copySourceY,d1 ; 16*y\n\t\t\t\tmulu #(2*border_offset_byte+40),d1\n\t\t\t\tadd.l  d1,a5\n\t\t\t\tmove.l a5,BLTAPTH(a6); $dff054  ; high &amp; low\n\t\t\t\t; TARGET\n\t\t\tclr.l d1\n\t\t\tmove.w copyTargetY,d1\n\t\t\t\tmulu #(2*border_offset_byte+40),d1\n\t\t\t\tadd.l    d1,a4\n\t\t\t\tmove.l a4,BLTDPTH(a6); $dff054  ; high &amp; low\n\t\t\n\t\t\tmove.w #(2*32+320-16)\/8,BLTAMOD(a6); $dff066\n\t\t\tmove.w #(2*32+320-16)\/8,BLTDMOD(a6) ; todo: add skip factor !!!\n\t\t\t\n;\t\t\tmove.w #64*16+16\/16,BLTSIZE(a6) ; $dff058 ; set size\t\t\n\n\t\t\t\tclr.l d1\n\t\t\t\tmove.w copyHeight,d1\n\t\t\t\tmulu #64,d1\n\t\t\t\tadd.l #+16\/16,d1\n\t\t\t\tmove.w d1,BLTSIZE(a6)\n\n\t\t\tadd.l #BitplaneSizeWide,tmpScreenAddress\n\t\t\tadd.l #BitplaneSizeWide,tmpScreenAddressTarget\n\n\t\tdbra d4,copy_direct16\n\n\t\tmovem.l\t(SP)+,d0-d7\/a0-a6\n\n\t\trts\n\n; ----------------------------------\n; COPY SHIFT LEFT SLICE (Vertical)\n; ----------------------------------\ncopySliceVerticalShiftLeft:\n\n\t\tmove.l #3,d4\n\n\t\t\tmove.l #screen,tmpScreenAddress\t\n\t\t\tadd.l #2,tmpScreenAddress\t\n\t\t\tmove.l #screen,tmpScreenAddressTarget\t\n\n\t\tcopy_direct_shift:\n\n\t\t\tmove.l tmpScreenAddress,a5\t\t\t\n\t\t\tmove.l tmpScreenAddressTarget,a4\n\n\t\t\tjsr waitForBlitter\t\n\n\t\t\tmove.l #$09f00000,BLTCON0(a6);$dff040 mode : combination + XORETC\t\n\t\t\tmove.l #$ffffffff,BLTAFWM(a6) ; mask \n\t\t\t\t; SOURCE\n\t\t\tclr.l d1\n\t\t\tmove.w copySourceY,d1 ; 16*y\n\t\t\t\tmulu #(2*border_offset_byte+40),d1\n\t\t\t\tadd.l  d1,a5\n\t\t\t\tmove.l a5,BLTAPTH(a6); $dff054  ; high &amp; low\n\t\t\t\t; TARGET\n\t\t\tclr.l d1\n\t\t\tmove.w copyTargetY,d1\n\t\t\t\tmulu #(2*border_offset_byte+40),d1\n\t\t\t\tadd.l    d1,a4\n\t\t\t\tmove.l a4,BLTDPTH(a6); $dff054  ; high &amp; low\n\t\t\t\tmove.w #2,BLTAMOD(a6); $dff066\n\t\t\t\tmove.w #2,BLTDMOD(a6) ; todo: add skip factor !!!\n\t\t\t\t; move.w #64*16+(2*32+320-16)\/16,BLTSIZE(a6) ; $dff058 ; set size\n\t\t\t\tclr.l d1\n\t\t\t\tmove.w copyHeight,d1\n\t\t\t\tmulu #64,d1\n\t\t\t\tadd #(2*32+320-16)\/16,d1\n\t\t\t\tmove.w d1,BLTSIZE(a6)\t\t\n\n\t\t\tadd.l #BitplaneSizeWide,tmpScreenAddress\n\t\t\tadd.l #BitplaneSizeWide,tmpScreenAddressTarget\n\n\t\tdbra d4,copy_direct_shift\n\n\t\trts\n\n; --------------\n; COPY &amp; SHIFT Horizontal\n; --------------\nbobCopyShifted:\n\n\t\t\t; params\n\t\t\tmove.l #screen,scrollingSource\n\n\t\t\tmove.l #screen,scrollingTarget\n\n\t\t\tmove.l #3,d6\nall_planes:\n\n\t\t\tjsr waitForBlitter\n\n\t\t\t\tmove.w #0,bob1616_x_raster\n\t\t\t\tmove.w #0,bob1616_x_rest\n\n\t\t\t\t; bob1616_x_raster\n\t\t\t\tclr.l  d0\n\t\t\t\tmove.w copyTargetX,d0\n\t\t\t\tdivu   #16,d0\n\t\t\t\tswap.w   d0\n\t\t\t\tmove.w d0,bob1616_x_rest\n\t\t\t\tclr.w  d0\n\t\t\t\tswap.w   d0\n\t\t\t\tmove.w d0,bob1616_x_raster\n\n\t\t\t\t; COMMAND\n\t\t\t\t\tclr.l d1\n\t\t\t\t\tmove.w  bob1616_x_rest,d1 \n\t\t\t\t\tror.w\t#4,d1\n\t\t\t\t\tmove.w\td1,BLTCON1(a6) ;  set up the B scroll value !!!! (forgotten)   --- was not set!!!! 4 \n\t\t\t\t\tor.w\t#$0fca,d1\t; \tset up the A scroll value and the\n\t\t\t\t\tmove.w\td1,BLTCON0(a6)\t;\tminterm for D = notA.C + B\n\t\t\t\t; TYPE OF MASK\n\t\t\t\tmove.l #$ffff0000,BLTAFWM(a6) ; mask \n\t\t\t\t; SOURCE\n\t\t\t\t\tmove.l scrollingSource,a5\n\t\t\t\t\tclr.l d1\n\t\t\t\tmove.w copySourceY,d1\n\t\t\t\t\tmulu #(2*border_offset_byte+40),d1\n\t\t\t\t\tadd.l  d1,a5\n\t\t\t\t\tcmp.l #3,d6\n\t\t\t\t\tbne notthe_defaultmask\n\n\t\t\t\t\t\tmove.l a5,scrollingSourceMask\n\t\t\t\t\t\t; version 1: no add\n\t\t\t\t\t\t; version 2: add on\n\t\t\t\t\t\tadd.l #16*(320+64)\/8,scrollingSourceMask\n\n\t\t\t\t\tnotthe_defaultmask:\n\n; try out\n;\tmove.l scrollingSource,a5\n;\tadd.l  #(320+2*32)\/8,a5\n\n\t\t\t\t\tmove.l a5,BLTBPTH(a6); \n\t\t\t\t; MASK\n\t\t\t\tmove.l scrollingSourceMask,BLTAPTH(a6); MASK\n\n\t\t\t\t; TARGET\n\t\t\t\t\tmove.l scrollingTarget,a4\n\t\t\t\t\tclr.l d1\n\t\t\t\t\tmove.w copyTargetY,d1\n\t\t\t\t\tmulu #(2*border_offset_byte+40),d1\n\t\t\t\tadd.l    d1,a4\n\n\t\t\t\tmove.l a4,BLTCPTH(a6); target - screen - xor screen\n\t\t\t\tmove.l a4,BLTDPTH(a6); $dff054  ; high &amp; low\n\t\t\t\tmove.w #0,BLTAMOD(a6); $dff066 ; skip source\n\t\t\t\tmove.w #0,BLTBMOD(a6); $dff066 ; skip source\n\t\t\t\tmove.w #0,BLTCMOD(a6) ; todo: add skip factor !!! ; skip target\n\t\t\t\tmove.w #0,BLTDMOD(a6) ; todo: add skip factor !!! ; skip target\n\n\t\t\t; SIZE - copyHeight\n\t\t\tmove.w #64*16+(2*32+320)\/16,BLTSIZE(a6) ; $dff058 ; set size\t\n\n\t\t\tadd.l #(320*screenFactorWidth+2*border_offset)\/8*256*screenFactorHeight,scrollingSource \n\t\t\tadd.l #(320*screenFactorWidth+2*border_offset)\/8*256*screenFactorHeight,scrollingTarget\n\t\t\t\t\n\t\tdbra d6,all_planes\n\t\t; all 4 planes :-(\n\n\t\trts\n\n\n; ---------------------------\n; CHAR\n; ---------------------------\n\ncharParsed: dc.l 1\n\ncopyCharAt:\n\n\t\t\tmove.l #0,charParsed\n\t\t\tmovem.l\td0-d7\/a0-a6,-(SP)\n\n\t\t\t; start x\/y\n\t\t\tmove.w #32+16,copySourceX\n\t\t\tmove.w #512-6*16,copySourceY\n\n\t\t\t; space\n\t\t\tcmp.b #32,d0\n\t\t\tbne if_space\n\t\t\t\tmove.w #32,copySourceX\n\t\t\t\tmove.w #0,d0\n\t\t\t\tmove.l #1,charParsed\n\t\t\t\tjmp direct_char\t\t\t\t\n\t\t\tif_space:\n\n\t\t\t; 0-9 48\n\t\t\tcmp.b #48,d0\n\t\t\tblt if_num\n\t\t\tcmp.b #48+10,d0\n\t\t\tbgt if_num\n\t\t\t\tsub.l #48,d0\n\t\t\t\tmove.w #32,copySourceX\t\t\t\t\n\t\t\t\tmove.w #512-2*16,copySourceY\n\t\t\t\tmove.l #1,charParsed\n\t\t\t\tjmp direct_char\n\t\t\tif_num:\n\n\t\t\t; T+\n\t\t\tcmp.w #84,d0\n\t\t\tblt if_tplus\n\t\t\tcmp.w #65+28,d0\n\t\t\tbgt if_tplus\n\t\t\t\tsub.w #84,d0\n\t\t\t\tmove.w #32,copySourceX\n\t\t\t\tmove.w #512-4*16,copySourceY\n\t\t\t\tmove.l #1,charParsed\n\t\t\t\tjmp direct_char\n\t\t\tif_tplus:\n\n; sonderzeichen\n\t\t\tmove.l #sonderzeichen,a0\n\t\tsearchchar:\n\t\t\tclr.l d1\n\t\t\tclr.l d2\n\t\t\tmove.b (a0)+,d1\n\t\t\tmove.b (a0)+,d2\n\n\t\t\t\tcmp.b d0,d1\n\t\t\t\tbne if_foundsonderzeichen\n\t\t\t\t\tmove.w #32,copySourceX\n\t\t\t\t\tclr.l d0\n\t\t\t\t\tmove.w d2,d0\n\t\t\t\t\tmove.w #512-4*16,copySourceY\t\n\t\t\t\t\tmove.l #1,charParsed\t\t\t\t\n\t\t\t\t\tjmp direct_char\t\t\n\t\t\t\tif_foundsonderzeichen:\n\n\t\t\tcmp.b #0,d1\n\t\t\tbne searchchar\n\n\t\tsonderzeichen_done:\n\n\t\t\t; default\n\t\t\t; d0\n\t\t\tcmp.w #64,d0\n\t\t\tbls   if_aplus\n\t\t\tcmp.w #65+30,d0\n\t\t\tbgt   if_aplus\n\t\t\t\tsub.l #65,d0\n\t\t\t\tmove.l #1,charParsed\n\t\t\tif_aplus:\n\t\t\t; update source\n\n\t\t\t\n\n\t\t\tcmp.l #0,charParsed\n\t\t\tbne parsedXYZ\n\t\t\t    move.w #0,d0\n\t\t\t\tmove.w #144,copySourceX\n\t\t\t\tmove.w #480,copySourceY\t\t\n\t\t\tparsedXYZ:\n\n\t\tdirect_char:\n\n\t\t\t; copy char\n\t\t\tmulu #16,d0\n\t\t\tadd.w d0,copySourceX\n\n\t\tdirect_char_direct: ; .-) stupid name\n\n\t\t\tjsr copyBlock16\n\n\t\t\t; and the mask!\n\t\t\t; copy the mask now\n\n\t\t; todo: param!\n\n\t\t\tadd.w #16,copySourceY\n\t\t\tadd.w #16,copyTargetY\n\t\t\tjsr copyBlock16\n\n\t\t\tmovem.l\t(SP)+,d0-d7\/a0-a6\n\n\t\t\trts\n; ---------------------------\n; HELPERS\n; ---------------------------\n\nwaitForBlitter:\n\t\t\tlea $dff000,a6  ; blitter base \n\t\t\t\t\tmove.w #$8040,DMACON(a6) ; enable blitter with offset\n\t\t\t\t\ttst DMACONR(a6); $dff002\n\t\t\twaitblittingbob16:\n\t\t\t\t\tbtst #6,DMACONR(a6); $dff002\n\t\t\t\t\tbne waitblittingbob16\n\n\t\t\trts \n\n\n; ------------------------\n; debug effect\n; ------------------------\nrainbow: \n\t\tmove.w    $DFF006,$DFF180 ; background\n\t\trts\n\nwork_start: \n\t\tmove.w    $0,$DFF180 ; background\n\t\trts\n\nwork_stop: \n\t\tmove.w    $DFF002,$DFF180 ; background\n\t\trts\n\n\n; ------------------------\n; screen\n; ------------------------\n\nupdateCameraAndScrolling: \n\n\t\tjmp xyz\n\t\t; check if something changed\n\t\tmove.w  scrollX,d0\n\t\tcmp.w hscrollX,d0\n\t\tbne   updateCamera\n\t\tmove.w  scrollY,d0\n\t\tcmp.w hscrollY,d0\n\t\tbne   updateCamera\n\t\tjmp   nocameraupdate\nupdateCamera:\n\n\t\txyz:\n\n\n\nBitplaneSizeWide =((320*screenFactorWidth+2*32)\/8)*256*screenFactorHeight\t; 256!\t\t\t; Size of 1 Bitplanes\n\n\t    move.l\t#GameScreenBitplanes,d0\t\t; Source Image Address that is the address of Bitplane 1\n;\t\tcmp.l #0,scrollCameraAddress\n;\t\tbeq    noextracamera\n;\t\t\tmove.l scrollCameraAddress,d0\nnoextracamera:\t\t\n\n\t   add.l   #address_screen_addframe,d0  ; border\n\n;\n;\t\tclr.l   d5\n;\t\tmove.w  scrollY,d5\n;\t\tdivu    #16,d5\n;\t\text.l   d5\n;\t\tadd.l   d5,d0\n\t\t\n\t\t; yscroll\n\t\tclr.l   d5\n\t\tmove.w scrollY,d5\n\t\tmulu    #40*screenFactorWidth+2*border_offset_byte,d5\n\t\tadd.l   d5,d0\n\t\tlea\t\tGameBitplanePointers,a0\t\t; Bitplane Pointers in the Copper\n\n\t\tlea\t\t$dff000,a5\n\t\tmoveq.l\t#NoOfBpls-1,d1\t\t\t\t; Number of Bitplanes\n\t\tmove.l\t#BitplaneSizeWide,d2\t\t\t; Add the bitplane size to the source start Image Address\n\t\tbsr\tSetBitPlanes \n\n\n\nnocameraupdate:\n\n\t\trts\n\n;======================================================================================================================\n;  Chip Data Section \/ Chipmemory\n;======================================================================================================================\n\n;======================================================================================================================\n; Requires Chip Mememory\n;======================================================================================================================\n\n\t\tSECTION\tCopper,DATA_C\n\n;======================================================================================================================\n; Main Game Screen - Copper List\n;======================================================================================================================\n\nCopperList:\n\n\nSpritePointers:\nSpritePointer0:\n\t\tdc.w\t$0120,$0000,$0122,$0000\t\t; Sprite 0\nSpritePointer1:\n\t\tdc.w\t$0124,$0000,$0126,$0000\t\t; Sprite 1\nSpritePointer2:\n\t\tdc.w\t$0128\nEnemySpritePtr:\n\t\tdc.w\t$0000,$012a,$0000\t\t\t; Sprite 2\nSpritePointer3:\n\t\tdc.w\t$012c,$0000,$012e,$0000\t\t; Sprite 3\nSpritePointer4:\n\t\tdc.w\t$0130,$0000,$0132,$0000\t\t; Sprite 4\nSpritePointer5:\n\t\tdc.w\t$0134,$0000,$0136,$0000\t\t; Sprite 5\nSpritePointer6:\n\t\tdc.w\t$0138,$0000,$013a,$0000\t\t; Sprite 6\nSpritePointer7:\n\t\tdc.w\t$013c,$0000,$013e,$0000\t\t; Sprite 7\n\nScreenDefinition:\n\t\t; Screen Definition\n\nScreenDefStartY:\n\t\tdc.w\t$008e,$2c81\t\t\t\t\t; DiwStrt\n\t\tdc.w\t$0090,$2cc1\t\t\t\t\t; DiwStop\n\t\tdc.w\t$0092,$0038\t\t\t\t\t; DdfStart LoRes\n\t\tdc.w\t$0094,$00d0\t\t\t\t\t; DdfStop LoRes\n\t\tdc.w\t$0102,$0000\t\t\t\t\t; BplCon1\n\t\tdc.w\t$0104,$003f\t\t\t\t\t; BplCon2 - Sprite on top of Both Playfields (%0000 0000 0011 1111)\n;       screen offset \n\t\tdc.w\t$0108\nscreenoffset_x_borderleft:\t\t\n\t\tdc.w $0000\t\t\t\t\t; Bpl1Mod - left - even \t\t\n\t\tdc.w\t$010a\nscreenoffset_x_borderright:\n\t\tdc.w $0000\t\t\t\t\t; Bpl2Mod - right - odd?\n\n\t\t;15\tHIRES\t    HIRES = High resolution (640*200\/640*400 interlace) mode\n\t\t;14\tBPUx\t    Bit planes use\n\t\t;13\tBPUx\t    Bit planes use\n\t\t;12\tBPUx\t    Bit planes use\n\t\t;11\tHAM\t        Hold and modify mode, now using either 6 or 8 bit planes.\n\t\t;10\tDPF\t        Double playfield (PF1 = odd &amp; PF2 = even bit planes) now available in all resolutions.\n\t\t;               If BPU = 6 and HAM = 0 and DPF = 0 a special mode is defined that allows bitplane\n\t\t;               6 to cause an intensity reduction of the other 5 bitplanes. \n\t\t;               The color register output selected by 5 bitplanes is shifted to half intensity by the 6th bit plane.\n\t\t;               This is called EXTRA-HALFBRITE Mode.\n\t\t;09\tCOLOR\t    Enables color burst output signal\n\t\t;08\tGAUD\t    Genlock audio enable. This level appears on the ZD pin on denise during all blanking periods, unless ZDCLK bit is set.\n\t\t;07\tUHRES\t    Ultrahi res enables the UHRES pointers (for 1k*1k) also needs bits in DMACON (hires chips only).\n\t\t;               Disables hard stops for vert, horiz display windows.\n\t\t;06\tSHRES\t    Super hi-res mode (35ns pixel width)\n\t\t;05\tBYPASS=0\tBit planes are scrolled and prioritized normally, but bypass color table and 8 bit wide data appear on R(7:0).\n\t\t;04\tBPU3=0\t    See above (BPUx)\n\t\t;03\tLPEN\t    Light pen enable (reset on power up)\n\t\t;02\tLACE\t    Interlace enable (reset on power up)\n\t\t;01\tERSY\t    External resync (HSYNC, VSYNC pads become inputs) (reset on power up)\n\t\t;00\tECSENA=0\tWhen low (default), the following bits in BPLCON3 are disabled: BRDRBLNK,BRDNTRAN,ZDCLKEN,BRDSPRT, and EXTBLKEN.\n\t\t;               These 5 bits can always be set by writing to BPLCON3, however there effects are inhibited until ECSENA goes high.\n\t\t;               This allows rapid context switching between pre-ECS viewports and new ones.\n\n\tBPLCON0:\n\t\t\t\t\t;  5432109876543210\n\t\tdc.w\t$0100,%0100001000000000\t\t; bit 13 - 4 bitplanes, 16 colors, Lo-Res\n\n\t\t;15\tENSP7\tEnable Sprite 7 (ORed with Sprite 6)\n\t\t;14\tENSP5\tEnable Sprite 5 (ORed with Sprite 4)\n\t\t;13\tENSP3\tEnable Sprite 3 (ORed with Sprite 2)\n\t\t;12\tENSP1\tEnable Sprite 1 (ORed with Sprite 0)\n\t\t;11\tENSP6\tEnable bit plane 6 (match reqd. for collision)\n\t\t;10\tENSP5\tEnable bit plane 5 (match reqd. for collision)\n\t\t;09\tENSP4\tEnable bit plane 4 (match reqd. for collision)\n\t\t;08\tENSP3\tEnable bit plane 3 (match reqd. for collision)\n\t\t;07\tENSP2\tEnable bit plane 2 (match reqd. for collision)\n\t\t;06\tENSP1\tEnable bit plane 1 (match reqd. for collision)\n\t\t;05\tENSP6\tMatch value for bit plane 6 collision\n\t\t;04\tENSP5\tMatch value for bit plane 5 collision\n\t\t;03\tENSP4\tMatch value for bit plane 4 collision\n\t\t;02\tENSP3\tMatch value for bit plane 3 collision\n\t\t;01\tENSP2\tMatch value for bit plane 2 collision\n\t\t;00\tENSP1\tMatch value for bit plane 1 collision\n\n\t\t\t\t;      5432109876543210\n\t\tdc.w\t$0098,%1111000000000000\t\t; CLXCON  $dff098\n; \t\tdc.w\t$0098,%1110000000000000\t\t; CLXCON  $dff098\n\n\t\tdc.w\t$00e0\nGameBitplanePointers:\n\t\tdc.w\t$0000,$00e2,$0000\t\t\t; bitplane 1\n\t\tdc.w\t$00e4,$0000,$00e6,$0000\t\t; bitplane 2\n\t\tdc.w\t$00e8,$0000,$00ea,$0000\t\t; bitplane 3\n\t\tdc.w\t$00ec,$0000,$00ee,$0000\t\t; bitplane 4\n\nInGameColors:\n    dc.w    $0180\nGameScreenColours:\n\n; PALETTE CHANGE HERE ... \n\n; {0X000,0X111,0X610,0X444,0X910,0X060,0X088,0Xf10,0X888,0X0a0,0X0cc,0Xccc,0X0ff,0X0f0,0Xff0,0Xfff}\n\ncolor_0:\n    dc.w    $0000                       ; color00 - plane 1\n    dc.w    $0182\ncolor_1:\n\tdc.w $0111                 ; color01 - plane 1 \n    dc.w    $0184\ncolor_2:\t\n\tdc.w $0610                 ; color02 - plane 2\n    dc.w    $0186\ncolor_3:\t\n\tdc.w $0444                 ; color03 - plane 2\n    dc.w    $0188\ncolor_4:\t\t\n\tdc.w $0910                 ; color04 - plane 3\n    dc.w    $018A\ncolor_5:\t\t\t\n\tdc.w $0060                 ; color05 - plane 3\n    dc.w    $018C\ncolor_6:\n\tdc.w $0088                 ; color06 - plane 3\n    dc.w    $018E\ncolor_7:\n\tdc.w $0f10                 ; color07 - plane 3\n    dc.w    $0190\ncolor_8:\t\n\tdc.w $0888                 ; color08 - plane 4\n    dc.w    $0192\n\n; 0X0a0,0X0cc,0Xccc,0X0ff,0X0f0,0Xff0,0Xfff}\n\ncolor_9:\n\tdc.w $00a0                ; color09 - plane 4\n    dc.w    $0194\ncolor_10:\n\tdc.w $00cc                 ; color10 - plane 4\n    dc.w    $0196\ncolor_11:\n\tdc.w $0ccc                 ; color11 - plane 4\n    dc.w    $0198\ncolor_12:\t\n\tdc.w $00ff                 ; color12 - plane 4\n    dc.w    $019A\ncolor_13:\t\n\tdc.w $00f0                ; color13 - plane 4\n    dc.w    $019C\ncolor_14:\n\tdc.w $0ff0                ; color14 - plane 4\n    dc.w    $019E\ncolor_15:\t\n\tdc.w $0fff                 ; color15 - plane 4\n \n;    dc.w    $0000                       ; color00 - plane 1\n;    dc.w    $0182,$0fff                 ; color01 - plane 1 \n;    dc.w    $0184,$0fff                 ; color02 - plane 2\n;    dc.w    $0186,$0fff                 ; color03 - plane 2\n;    dc.w    $0188,$0fff                 ; color04 - plane 3\n;    dc.w    $018A,$0fff                 ; color05 - plane 3\n;    dc.w    $018C,$0fff                 ; color06 - plane 3\n;    dc.w    $018E,$0fff                 ; color07 - plane 3\n;    dc.w    $0190,$0fff                 ; color08 - plane 4\n;    dc.w    $0192,$0fff                 ; color09 - plane 4\n;    dc.w    $0194,$0fff                 ; color10 - plane 4\n;    dc.w    $0196,$0fff                 ; color11 - plane 4\n;    dc.w    $0198,$0fff                 ; color12 - plane 4\n;    dc.w    $019A,$0fff                 ; color13 - plane 4\n;    dc.w    $019C,$0fff                 ; color14 - plane 4\n;    dc.w    $019E,$0fff                 ; color15 - plane 4\n\n\n; 0 always transprent\n; _1,2,3 for two sprites !\n\nSpritesColours:\n\t\t; Sprite 0 and 1 Colours\n\t\tdc.w\t$01A0\nspritecolor_01_0:\t\t\n\t\tdc.w\t$0000\t\t\t\t\t; color16 - Transparent\n\t\tdc.w\t$01A2\nspritecolor_01_1:\t\t\t\t\n\t\tdc.w \t$0fff\t\t\t\t\t; color17 - Sprite Colour 1 - White \n\t\tdc.w\t$01A4\n\nPlayerColour:\nspritecolor_01_2:\t\t\n\t\tdc.w\t$0fff\t\t\t\t\t\t\t; color18 - Sprite Colour 2 - Brown\n\t\tdc.w\t$01A6\nspritecolor_01_3:\t\t\n\t\tdc.w \t$0fff\t\t\t\t\t; color19 - Sprite Colour 3 - Black\n\n\t\t; Sprite 2 and 3 Colours\nspritecolor_4:\n\t\tdc.w\t$01A8\nspritecolor_23_0:\t\t\n\t\tdc.w    $0000\t\t\t\t\t; color20 - Transparent\n\t\tdc.w\t$01AA\nspritecolor_23_1:\t\t\t\t\n\t\tdc.w \t$00c0\t\t\t\t\t; color21 - Sprite Colour 1\n\t\tdc.w\t$01AC\nspritecolor_23_2:\t\t\t\t\t\t\n\t\tdc.w \t$0080\t\t\t\t\t; color22 - Sprite Colour 2\n\t\tdc.w\t$01AE\nspritecolor_23_3:\t\t\t\t\t\t\n\t\tdc.w \t$0040\t\t\t\t\t; color23 - Sprite Colour 3\n\n\t\t; Sprite 4 and 5 Colours\n\t\tdc.w\t$01b0\nspritecolor_45_0:\t\t\t\t\n\t\tdc.w \t$0000\t\t\t\t\t; color20 - Transparent\n\t\tdc.w\t$01b2\nspritecolor_45_1:\t\t\t\t\t\t\n\t\tdc.w \t$0c00\t\t\t\t\t; color21 - Sprite Colour 1\n\t\tdc.w\t$01b4\nspritecolor_45_2:\t\t\t\t\t\n\t\tdc.w \t$0800\t\t\t\t\t; color22 - Sprite Colour 2\n\t\tdc.w\t$01b6\nspritecolor_45_3:\n\t\tdc.w \t$0400\t\t\t\t\t; color23 - Sprite Colour 3\n\n\t\t; Sprite 6 and 7 Colours\n\t\tdc.w\t$01b8\nspritecolor_67_0:\t\t\n\t\tdc.w \t$0000\t\t\t\t\t; color20 - Transparent\n\t\tdc.w\t$01b\nspritecolor_67_1:\t\t\n\t\tdc.w \t$00cc\t\t\t\t\t; color21 - Sprite Colour 1\n\t\tdc.w\t$01bC\nspritecolor_67_2:\t\t\n\t\tdc.w \t$0088\t\t\t\t\t; color22 - Sprite Colour 2\n\t\tdc.w\t$01bE\nspritecolor_67_3:\n\t\tdc.w    $0044\t\t\t\t\t; color23 - Sprite Colour 3\n\n\t\t; band\n;\t\tDC.W    $FFA1,$FF00 \t; wait \n\t\t; http:\/\/amigadev.elowar.com\/read\/ADCD_2.1\/Hardware_Manual_guide\/node004B.html\n;\t\tdc.w\t$0180,$0200   ; set color\n;\t\tDC.W    $FFA8,$FF00 \t; wait \n;\t\tdc.w\t$0180,$0900   ; set color\n\n\t\t\n\t\tdc.w\t$ffdf,$fffe\t\t; ?\n\t\tdc.w\t$FFFF,$FFFE\t\t\t\t\t; End of copperlist\n\n\n; -----------------------------\n ; KEYBOARD\n ; -----------------------------\n\n\t\teven\nkeyPressed:\n\tdc.w 1\n\n_keyboard:\n\tmovem.l d0-d2,-(sp)\n\n\t;V\u00e9rifier dans ICR que la requ\u00eate est bien g\u00e9n\u00e9r\u00e9e par le CIA A aur l'\u00e9v\u00e9nement SP (bascule des 8 bits re\u00e7us du clavier dans SDR)\n\n\tbtst #3,$BFED01\n\tbeq _keyboardNotKeyboard\n\n\t;Lire les 8 bits dans SDR et d\u00e9tecter s'il s'agit de la pression ou du rel\u00e2chement d'une touche\n\n\tmove.b $BFEC01,d0\n\tbtst #0,d0\n\tbne _keyboardKeyDown\n\tmove.w #$00F0,d1\t\t;Touche rel\u00e2ch\u00e9e : couleur vert\n\tbra _keyboardKeyUp\n_keyboardKeyDown:\n\tmove.w #$0F00,d1\t\t;Touche press\u00e9e : couleur rouge\n_keyboardKeyUp:\n\n\t;Changer la couleur de fond si la touche press\u00e9e est celle attendue (ESC)\n\n\tnot.b d0\n\tlsr.b #1,d0\n\n\tmove.l #0,d1\n\n\t; key pressed\n\tclr.l d2\n\tmove.b d0,d2\n\tmove.w d2,keyPressed\n\n\t; speed 1x \n\tcmpi.b #$20,d0\n\tbne _keyboardNotA\n\n\t\tmove.w #0,cursorLeft\n\t\tmove.w #0,scrollLeftUp\n\n\t_keyboardNotA:\n\n\t; speed 2x\n\tcmpi.b #$21,d0\n\tbne _keyboardNotS\n\n\t\tmove.w #1,cursorLeft\n\t\tmove.w #0,scrollLeftUp\n\n\t_keyboardNotS:\n\n\n\n\n\n\n\tcmpi.b #$45,d0\n\tbne _keyboardNotESC\n\t; move.w d1,COLOR00(a5)\n\t  move.w    $DFF006,$DFF180 ; background\n\t;  move.w #1,cursorLeft\n_keyboardNotESC:\n\n\t; 1 ... \n\tcmpi.b #$01,d0\n\tbne _keyboardNot1\n\t\tmove.l #demo_project-scrolltext,scrollindex\n\t\tmove.l #1,d1\n_keyboardNot1:\n\n\t; 2 ... \n\tcmpi.b #$02,d0\n\tbne _keyboardNot2\n\t\tmove.l #team_project-scrolltext,scrollindex\n\t\tmove.l #1,d1\n_keyboardNot2:\n\n\t; 3 ... \n\tcmpi.b #$03,d0\n\tbne _keyboardNot3\n\t\tmove.l #demo_greets-scrolltext,scrollindex\n\t\tmove.l #1,d1\n_keyboardNot3:\n\n\t; 4\n\tcmpi.b #$04,d0\n\tbne _keyboardNot4\n\t\tmove.l #demo_tech-scrolltext,scrollindex\n\t\tmove.l #1,d1\n_keyboardNot4:\n\n\t; 5\n\tcmpi.b #$05,d0\n\tbne _keyboardNot5\n\t\tmove.l #team_zuerich-scrolltext,scrollindex\n\t\tmove.l #1,d1\n_keyboardNot5:\n\n\t; 6 \n\tcmpi.b #$06,d0\n\tbne _keyboardNot6\n\t\tmove.l #team_hkb-scrolltext,scrollindex\n\t\tmove.l #1,d1\n_keyboardNot6:\n\n\t; 7 \n\tcmpi.b #$07,d0\n\tbne _keyboardNot7\n\t\tmove.l #team_unibe-scrolltext,scrollindex\n\t\tmove.l #1,d1\n_keyboardNot7:\n\n\t; 8\n\tcmpi.b #$08,d0\n\tbne _keyboardNot8\n\t\tmove.l #team_unil-scrolltext,scrollindex\n\t\tmove.l #1,d1\n_keyboardNot8:\n\n\t; 9\n\tcmpi.b #$09,d0\n\tbne _keyboardNot9\n\t\tmove.l #demo_results-scrolltext,scrollindex\n\t\tmove.l #1,d1\n_keyboardNot9:\n\n\t; jump to ... \n\tcmp.l #1,d1\n\tbne if_scrolljump\n\n\t\tmove.w    $DFF006,$DFF180 ; background\n\n\t\tmove.w #256-8,copySourceY\n\t\tmove.w #256+80,copyTargetY\n\t\tjsr copySliceVertical\t\n\n\t\tmove.w #256-8,copySourceY\n\t\tmove.w #256+80+16,copyTargetY\n\t\tjsr copySliceVertical\t\n\n\t\tjsr reset_all\n\n\tif_scrolljump:\n\n\n\t;Acquitter aupr\u00e8s du clavier en maintenant \u00e0 0 le signal sur sa ligne KDAT durant 85 us, ce qui s'effectue en positionnant SPMODE \u00e0 1 dans CRA (\"software must pulse the line low for 85 microseconds to ensure compatibility with all keyboard models\" et \"the KDAT line is active low &#91;...] a low level (0V) is interpreted as 1\"). Pour rappel, une ligne raster, c'est 227,5 cycles de 280 ns, donc 63,7 us, ce qui signifie qu'il faut attendre que le raster ait parcouru deux lignes. Maintenant, ce n'est pas tr\u00e8s \u00e9l\u00e9gant d'attendre que le raster se balade en se tournant les pouces...\n\n\tbset #6,$BFEE01\n\t\n\tmove.l $DFF004,d0\n\tlsr.l #8,d0\n\tand.w #$01FF,d0\n\tmoveq #2-1,d1\n_keyboardWait85us:\n\tmove.l $DFF004,d2\n\tlsr.l #8,d2\n\tand.w #$01FF,d2\n\tcmp.w d0,d2\n\tbeq _keyboardWait85us\n\tmove.w d2,d0\n\tdbf d1,_keyboardWait85us\n\n\tbclr #6,$BFEE01\n\n_keyboardNotKeyboard:\n\tmovem.l (sp)+,d0-d2\n\trts\n\n \n ; rest all \n reset_all:\n    \n\t\tmove.l #0,direction\n\t\tmove.l #0,waitingCounter\n\n\t\tmove.w #0,scrollDoIt\n\n\t\tmove.w #1,showfont\n\n\t\t; waitingCounter\n\t\tmove.w #0,scrollX\n\t\tmove.w #0,scrollY\n\t\tjsr updateCameraAndScrolling\t\t\n\n\trts\n\n even\n\n;======================================================================================================================\n;  VARS\n;======================================================================================================================\n\nclicked: dc.l 0\n\ncounter: dc.w 0\n\nscrollTextX: dc.w 1 \n\nshowTech: dc.w 0\n\ndirection: dc.w 1\n\nwaitingCounter: dc.l 0\n\nscrollingSource: dc.l 0\nscrollingSourceMask: dc.l 0\nscrollingTarget: dc.l 0\n\nbob1616_screen: dc.l 0\n\nbob1616_id:\tdc.w 0\nbob1616_x:\tdc.w 10   \nbob1616_y:\tdc.W 10  \n\nbob1616_x_raster: dc.w 10\nbob1616_x_rest: dc.w 0\n\nactualHiddenScreenAddress: dc.l 0\nactualHiddenScreenAddressAdd: dc.l 0\n\ntmpScreenAddress: dc.l 0\ntmpScreenAddressTarget: dc.l 0\n\nscrollX: dc.w 0\nscrollY: dc.w 0\nhscrollX: dc.w 2001\nhscrollY: dc.w 2001\n\n; scrolling\nscrollDoIt: dc.w 0\nscrollYTo: dc.w 0\n\nscrollTextPositionY: dc.w 196\n\nscrollCameraAddress: dc.l 0\n\nscrollCharXCounter: dc.l 0\n\nshowfont: dc.w 1\n\nscrollerPositionY: dc.w 196\n\ncursorLeft: dc.w 0\n\nscrollLeftUp: dc.w 0\n\nwave: dc.l 0\nwaveindex: dc.l 0\n\teven \nwave_tab: \n\tdc.b 0\n\tdc.b 0\n\tdc.b 1\n\tdc.b 1\n\tdc.b 1\n\tdc.b 1\n\tdc.b 2\n\tdc.b 2\n\tdc.b 2\n\tdc.b 2\n\tdc.b 3\n\tdc.b 3\n\tdc.b 4\n\tdc.b 4\n\tdc.b 4\n\tdc.b 4\n\tdc.b 4\n\tdc.b 4\n\tdc.b 4\n\tdc.b 4\n\tdc.b 3\n\tdc.b 3\n\tdc.b 3\n\tdc.b 3\n\tdc.b 3\n\tdc.b 2\n\tdc.b 2\n\tdc.b 2\n\tdc.b 2\n\tdc.b 1\n\tdc.b 1\n\tdc.b 1\n\tdc.b 1\n\tdc.b 1\n\tdc.b 255\n\n; --------------------------------\n; SCROLLING-TEXT\n; --------------------------------\n\teven\nscrollindex: dc.l 0\n\teven\nscrolltext: \n\t; test\n\t; dc.b \"  FONT:  +':,()&#91;]#.-!? ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 \"\n\n;\tdc.b \"  COMMANDS: GLITCH gggg WAIT  SCROLLING s TOP t CODE c MESSAGE _ TOGGLEFONT f \"\n\n\t; dc.b \"  CODEggc  f  WAS SOLL DAS? WO BIST DU? e  WOW d IS ALL GOD THIS t \"\n\n;\tdc.b \" HELLO WORLD. wARE YOU OUT THERE? I LIVE INSIDE THIS COMPUTER. AND GUESS WHAT. ONCE COMPUTERS WILL RULE THE WORLD HAHA \"\n\n\tdc.b \" f'FUCK WHAT A DIRTY PLAIN FONT! COULDNT YOU DO SOMETHING WITH MORE COLORS AND HAND RENDERED 3D? THE AMIGA IS ABOUT COLORS!' e OF COURSE WE CAN. :-) \"\n\ndemo_project: \n\t; demo\n\n\tdc.b \" THIS IS A SIMPLE RESEARCH DEMO OF OUR EXPERIMENTAL ARCHEOLOGY FOCUS. THE RESEARCH QUESTION WAS:'HOW COMPLEX WAS IT TO CREATE A SIMPLE AMIGA DEMO?'. THE TOPIC THE RESEARCH PROJECT CHLUDENS. THE RESULT YOU FIND AT THE END OF THE SCROLLTEXT OR ON RESEARCH.SWISSIGITIZATION.CH. THE DEMO WAS RELEASED AT MOUNTAIN-BYTES.CH 2025. CODE AND VISUALS BY LA1N, MUSIC BY COMPUTERMUSIKER.  \"\n\nteam_project:\n\tdc.b \" (PROJECT) \"\n\tdc.b \"THE PROJECT CONFODERATIO LUDENS RESEARCHES \"\n\tdc.b \"THE GAMEDEVELOPMENT AND GAMECULTURE FROM 1970 - 2000.\"\n\tdc.b \" THE PROJECTPARTENERS ARE ZHDK, HKB, UNIBE, UNIL  \"\n\ndemo_greets: \n\t; demo\n\tdc.b \" (GREETINGS) YES THANKS TO DEPECHE FOR ALL THE HELP. AND OF COURSE ALL OF YOU, WHO MADE A CRACK, DEMO, (VIRUS), GAME FROM 1970 - 2000. SOMETHING LIKE A DIGITAL 'ELITE'.  \"\n\ndemo_tech: \n\t; demo\n\tdc.b \" (TECHNICS)  IT IS IN 68000 ASSEMBLY - 16+32 BIT. A VERY COOL PROCESSOR FOR DEVELOPERS. SIMPLE STRAIGHT NOT LIKE THE CHEAP 6502! \"\n\n\tdc.b \"THE 'SCREEN' HAS A 32 PX BORDER LEFT AND RIGHT (FOR HIDDING THE CREATING OF THE SCROLLTEXT). IT IS 512 PIXEL HEIGHT. ONLY THE FIRST 256 PX YOU SEE, THE REST IS SCROLLTEXT BUFFER AND THE FONT. YOU CAN ALWAYS WITH THE MOUSEBUTTON SWITCH BETWEEN THE 'TWO SCREENS' (IN FACT IT IS ONE MEMORY AREA, THERFORE YOU CAN SCROLL IN IT DOWN LIKE IN SOME SECONDS). THE SCREEN HAS 4 LAYERS (PLANES) - MEANS 16 COLORS. EXAMPLE 4 LAYERS (BITPLANES) : 1 0 0 1 IS THE COLOR 9 (1+8). AND EVEN MORE COMPLICATED: 1 BYTE IN THIS BITPLANE CODES FOR 8 PIXELS.  \"\n\tdc.b \"WRITING DIRECTLY IN A BITPLANE YOU SEE HERE IN GREEN. c THIS CODE CREATES THE DARK RED PATTERN. IT WRITES 8 LINES WITH 40 BYTES (320 BYTES) INTO THE SCREEN-MEMORY. \"\n\tdc.b \"BUT FOR A 16 COLOR PIXEL, YOU HAVE TO DO THIS ON 4 LAYERS. SO YOU HAVE TO DO THE SAME THING 4 TIMES. A LOT OF BLITTER WORK.  t STUPID THING! EXPANDABLE YES. BUT EVERYTHING IS SPREADED IN THE MEMORY. \"\n\tdc.b \"WHY IS SO FLICKERING? THE GLITCH HAPPENS BECAUSE THE SCROLLTEXT IS NOT EVERY TIME PAINTED, WHEN THE CATHODIC BEAMS COMES BY. YOU COULD SOLVE THIS BY USING DOUBLEBUFFERING. YOU SHOW ONE SCREEN AND IN THE BACKGROUND YOU CREATE THE OTHER AND THEN SHOW IT. THIS WOULD BE MUCH MORE WORK AND WE WOULDNT SEE THE PROBLEMS OF A 'SIMPLE' DEMO. \"\n\tdc.b \"THE 'SCROLLER': THE ONLY CHALLENGE IN THIS DEMO. d HOW IT WORKS: \"\n\tdc.b \" 0. YOU TAKE THE BACKUP AND COPY IT BACK TO THE SCREEN. \"\n\tdc.b \" 1. YOU MAKE A BACKUP AGAIN. \"\n\tdc.b \" 2. YOU SHIFT LEFT - 15 TIMES THE TEXTBUFFER TO THE VISIBLE SCREEN (BLITTER)\"\n\tdc.b \" 3. YOU SHIFT NOW THE TEXTBUFFER (INCL. MASK) 16 PIXELS LEFT AND ADD THE NEXT CHAR (AND MASK) FROM THE CHARBLOCKS \"\n\tdc.b \" 4. YOU WAIT FOR THE NEXT SCREEN-REFRESH \"\n\tdc.b \" 5. AND THEN ENDLESS FROM 0 \"\n\tdc.b \" t \"\n\nteam_zuerich:\n\tdc.b \"  \"\n\tdc.b \"(TEAM ZHDK) WE ARE TEAM ZUERICH. NOEMI: 'HELLO FREAKS!' \"\n\tdc.b \"  \"\n\nteam_hkb:\n\tdc.b \" \"\n\tdc.b \"(TEAM HKB BERN) \"\n\tdc.b \"    \"\n\nteam_unibe:\n\tdc.b \" \"\n\tdc.b \"(TEAM BERN UNI) \"\n\tdc.b \"    \"\n\nteam_unil:\n\tdc.b \" \"\n\tdc.b \"(TEAM UNIL LAUSANNE) \"\n\tdc.b \"    \"\n\ndemo_results:\n\tdc.b \" \"\n\tdc.b \"(RESULTS) FIRST PROBLEM WAS TO FIND A TOPIC TO BE HONEST. ABOUT WHAT? IF I DO SIZECODING IT IS CLEAR, BUT A SIMPLE DEMO? YOU WILL SAY: 'THERE MUST BE A MESSAGE.' BUT TECHNIC CAN NOT BE THE MESSAGE AT ALL.  \"\n\tdc.b \" THE SOUND POSSIBILITIES ARE OF COURSE FANTASTIC. \"\n\tdc.b \" AS I GAMEDESIGNER I WOULD LIKE TO HAVE MORE SPRITES (NO COMPUTING POWER USED) AND USE THEM FOR THE SCROLLTEXT. BUT THE SPRITES ARE TRASH (8 x SPRITES WITH 4 COLORS AND 2 HAVE THE SAME COLOR). SO YOU HAVE TO USE THE BLITTER, WHICH IS A COOL THING FOR 1985. BUT YOU HAVE TO DO A LOT ON YOUR OWN. BACKUP THE BACKGROUND, COPY THE BITPLANES AND AFTER USAGE, RESTORE. THIS IS A LOT OF MANGEMENT WORK AND USES A LOT OF TIME.    \"\n\nrestart: \n\tdc.b \" THIS IS NO BOOK, SO YOU DON'T HAVE TO READ TO THE END. THERE IS NO AHA EFFECT. NO 3 ACTS. SORRY 3 2 1 &#91;RESTART]  \"\n\tdc.b 0\n\teven\n\n\n; https:\/\/www.gladir.com\/LEXIQUE\/POLICES\/amigaascii.htm\nsonderzeichen: ; there is no better word than sonderzeichen .-) \n\t\t\t   ; it is also one point, why so long there were no german\/french software versions .-(\n\n\t; +':,()&#91;]#.-!?\n\n\tdc.b 43,7 ;+ \n\tdc.b 39,8 ;'\n\tdc.b 58,9 ;:\n\tdc.b 44,10 ;,\n\n\tdc.b 40,11 ;(\n\tdc.b 41,12 ;)\n\n\tdc.b 91,13 ;&#91;\n\tdc.b 93,14 ;]\n\n\tdc.b 35,15 ;#\n\tdc.b 46,16 ;.\n\n\tdc.b 45,17 ;-\n\tdc.b 33,18 ;!\n\tdc.b 63,19 ;?\n\n\tdc.b 0,0\t\n\n\n\teven\n\n; --------------------------------\n; MUSIC AREA\n; --------------------------------\nmt_data:\n\t\tincbin \"music.mod\"\nmt_data_End:\n\n; --------------------------------\n; SCREEN AREA\n; --------------------------------\nscreen:\nBackofficeBitplanes:\nGameScreenBitplanes:\nIntroScreen:\n\t\tincbin \"gfx\/title.planes\"\n\t\t; blk.b (2*border_offset_byte+40*screenFactorWidth)*256*screenFactorHeight*4,0 ; 256 y coords\n\n\n \n  <\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Im Rahmen des Forschungsprojekte war geplant auch eine eigene Demo zu erstellen, um zu verstehen, was da passiert ist und zu erkennen, was aus der Demoscene in den Games vorkommt. Aus diesen Gr\u00fcnden entstand die CHLUDENS-Demo auf dem Amiga. Forschungsfragen Das CHLudens Demo entstand im Rahmen des Focus der Experimentellen Arch\u00e4ologie. Dazu gibt es einige [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[105,106],"tags":[],"class_list":["post-3078","post","type-post","status-publish","format-standard","hentry","category-experimentellearcheologie","category-experimentellearcheologiemethode"],"_links":{"self":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/3078","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3078"}],"version-history":[{"count":20,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/3078\/revisions"}],"predecessor-version":[{"id":5351,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/3078\/revisions\/5351"}],"wp:attachment":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3078"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3078"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3078"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}