{"id":2027,"date":"2013-06-12T14:54:24","date_gmt":"2013-06-12T14:54:24","guid":{"rendered":"http:\/\/www.ollmetzer.com\/?p=2027"},"modified":"2013-06-13T19:49:53","modified_gmt":"2013-06-13T19:49:53","slug":"steinschlag-mit-8bit","status":"publish","type":"post","link":"https:\/\/www.ollmetzer.com\/?p=2027","title":{"rendered":"Steinschlag &#8211; mit 8Bit"},"content":{"rendered":"<p>Am Dienstag dieser Woche konnte ich wieder einen interessanten Vortrag aus der Reihe \u201cShift-Restore-Escape\u201d an der Humboldt Universit\u00e4t h\u00f6ren. Das Thema:<\/p>\n<p><strong>Vom Wiedereinstig in die 8 Bit Welt &#8211; Die Programmierung eines Spiels f\u00fcr Atari Computer<\/strong><\/p>\n<p>Bevor der Vortrag begann, gab es zur Einstimmung ein paar astreine Chiptunes zu h\u00f6ren. Mein Eindruck war, dass sich der Sound gar nicht so sehr vom SID des Commodore 64 unterschied. In seiner Anmoderation erw\u00e4hnte Stefan H\u00f6ltgen dann zu meinem Erstaunen, dass die Musik vom <a title=\"Wikipedia: Atari TIA\" href=\"http:\/\/de.wikipedia.org\/wiki\/Atari_TIA\" target=\"_blank\">TIA<\/a> &#8211; also dem Grafikchip des Atari erzeugt wurde.<\/p>\n<p>Berthold Fritz, Jahrgang &#8217;69, begann seinen Vortrag damit, dass er die Motivation, heutzutage ein Spiel f\u00fcr den 30 Jahre alten Atari Homecomputer zu programmieren, darlegte. Den Entwicklungsprozess hat er in seinem Blog <a href=\"http:\/\/retrozock.com\/\" target=\"retrozock\">retrozock.com<\/a> begleitend beschrieben.<\/p>\n<p><strong>Motivation<\/strong><\/p>\n<p>Fritz begann mit der Feststellung, dass er im Laufe der Zeit &#8211; von Heimcomputern \u00fcber 16 Bit Rechner bis zu heutigen PCs immer mehr zum reinen Bediener und Konsumenten degradiert ist. Er war damit unzufrieden und wollte sich Wissen um die Funktion der Rechner erarbeiten. Die heutigen Rechner sind mit ihrer Komplexit\u00e4t, M\u00e4chtigkeit und zahlreichen API und Abstarktionslayern allerdings nicht gut geeignet. Daher erinnerte er sich an den <a title=\"Wikipedia: Atari  Heimcomputer\" href=\"http:\/\/de.wikipedia.org\/wiki\/Atari_800_XL#Atari_XL\" target=\"_blank\">Atari 800XL<\/a> aus seiner Jugend.<\/p>\n<div id=\"attachment_2025\" style=\"width: 490px\" class=\"wp-caption aligncenter\"><a rel=\"attachment wp-att-2025\" href=\"http:\/\/www.ollmetzer.com\/?attachment_id=2025\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2025\" class=\"size-medium wp-image-2025\" title=\"Atari 800 XL von 1983\" src=\"http:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/atari800xl-480x197.jpg\" alt=\"Atari 800 XL von 1983\" width=\"480\" height=\"197\" srcset=\"https:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/atari800xl-480x197.jpg 480w, https:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/atari800xl.jpg 1024w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><p id=\"caption-attachment-2025\" class=\"wp-caption-text\">Atari 800 XL von 1983<\/p><\/div>\n<p>Die Frage was denn nun genau zu programmieren ist, war schnell beantwortet: Ein Spiel. Und zwar ein Spiel mit einfacher und bew\u00e4hrter Spielmechanik, bei der der Spass nicht unbedingt von umwerfender Grafik abh\u00e4ngt. Das Spiel <em>Dirt, Rock, Diamonds and other Perils<\/em> ist ein Nachbau des beliebten und of kopierten <a title=\"Wikipedia: Boulder Dash\" href=\"http:\/\/de.wikipedia.org\/wiki\/Boulder_dash\" target=\"_blank\">Boulder Dash<\/a>. Der Entwicklungsprozess dauerte ca. 2 Jahre und ist noch nicht v\u00f6llig abgeschlossen, da das Spiel zum Beispiel noch keine Musik hat.<\/p>\n<p><strong>Programmiersprache und Werkzeuge<\/strong><\/p>\n<p>Die Wahl der Programmiersprache wurde schnell entschieden. Die ersten Versuche, einen Spielbildschirm mit 800 Bytes in Basic aufzubauen f\u00fchrten zu dem erwarteten Ergebnis: Es ist viel zu langsam (ca. 3 Sekunden). Derselbe Algorithmus in Assembler schaffte das in weniger als einer 50stel Sekunde.<\/p>\n<p>Die Frage, welche Werkzeuge zu verwenden sind, war bereits schwieriger. Soll es Crossdevelopment auf Macintosh mit einem Atari Emulator (Atari800MacX) sein oder soll direkt auf der Zielplattform entwickelt werden? Welcher Assembler mit welchem Vorgehen ist zu bevorzugen?<\/p>\n<p>Fritz entschied sich daf\u00fcr, direkt auf dem Atari zu entwickeln und zwar so, dass Sourcecode, Assembler und Objektcode gleichzeitig im Spiecher vorgehalten werden. Das ist komfortabel, schr\u00e4nkt jedoch die maximale Gr\u00f6sse des Programms stark ein. Das Spiel wurde letztlich ca. 5 KB gross.<\/p>\n<p><strong>Vom Werden und Wachsen<\/strong><\/p>\n<p>Die paar Befehle des 6502 Prozessors sind schnell gelernt, eine Memory Map hervorgeholt und los geht die Entwicklung. Die ersten Gehversuche sind noch v\u00f6llig ohne Grafik und dienen der \u00dcberpr\u00fcfung der Spielmechanik.<\/p>\n<div id=\"attachment_2022\" style=\"width: 490px\" class=\"wp-caption aligncenter\"><a rel=\"attachment wp-att-2022\" href=\"http:\/\/www.ollmetzer.com\/?attachment_id=2022\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2022\" class=\"size-medium wp-image-2022\" title=\"Spiel ohne Grafik\" src=\"http:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/variante_1-480x279.jpg\" alt=\"Spiel ohne Grafik\" width=\"480\" height=\"279\" srcset=\"https:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/variante_1-480x279.jpg 480w, https:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/variante_1.jpg 1024w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><p id=\"caption-attachment-2022\" class=\"wp-caption-text\">Spiel ohne Grafik<\/p><\/div>\n<p>Nachdem hier die ersten Probleme gel\u00f6st wurden, kam handcodierte Grafik hinzu. Jetzt kann man schon das eigentliche Spiel erkennen. Die Farbigkeit hat mich sehr an <a title=\"Wikipedia: Dig Dug\" href=\"http:\/\/en.wikipedia.org\/wiki\/Dig_Dug\" target=\"_blank\">DigDug<\/a> erinnert.<\/p>\n<div id=\"attachment_2023\" style=\"width: 490px\" class=\"wp-caption aligncenter\"><a rel=\"attachment wp-att-2023\" href=\"http:\/\/www.ollmetzer.com\/?attachment_id=2023\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2023\" class=\"size-medium wp-image-2023\" title=\"Spiel mit erster Grafik\" src=\"http:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/variante_2-480x308.jpg\" alt=\"Spiel mit erster Grafik\" width=\"480\" height=\"308\" srcset=\"https:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/variante_2-480x308.jpg 480w, https:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/variante_2.jpg 1024w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><p id=\"caption-attachment-2023\" class=\"wp-caption-text\">Spiel mit erster Grafik<\/p><\/div>\n<p>Manchmal ist selbst Maschinensprache nicht schnell genug &#8211; insbesondere wenn man innerhalb der Spiellogik mit verschachtelten Schleifen hantiert. Das Thema Code Optimierung kam daher im Vortrag nicht zu kurz. Drei oder vier gesparte Taktzyklen machen sich sehr bemerkbar, wenn die betreffende Stelle mehrere tausend mal pro Sekunde durchlaufen wird.<\/p>\n<div id=\"attachment_2026\" style=\"width: 490px\" class=\"wp-caption aligncenter\"><a rel=\"attachment wp-att-2026\" href=\"http:\/\/www.ollmetzer.com\/?attachment_id=2026\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2026\" class=\"size-medium wp-image-2026\" title=\"Code Optimierung\" src=\"http:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/optimierung-480x368.jpg\" alt=\"Code Optimierung\" width=\"480\" height=\"368\" srcset=\"https:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/optimierung-480x368.jpg 480w, https:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/optimierung.jpg 1024w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><p id=\"caption-attachment-2026\" class=\"wp-caption-text\">Code Optimierung<\/p><\/div>\n<p>Obwohl das eigentliche Ziel bei der Spielentwicklung der Erkenntnisgewinn war und es nur an zweiter Stelle darum ging, ein tolles Spiel zu bauen, kann sich das Ergebnis absolut sehen lassen.<\/p>\n<div id=\"attachment_2024\" style=\"width: 490px\" class=\"wp-caption aligncenter\"><a rel=\"attachment wp-att-2024\" href=\"http:\/\/www.ollmetzer.com\/?attachment_id=2024\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2024\" class=\"size-medium wp-image-2024\" title=\"Das - fast - fertige Spiel\" src=\"http:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/variante_3-480x303.jpg\" alt=\"Das - fast - fertige Spiel\" width=\"480\" height=\"303\" srcset=\"https:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/variante_3-480x303.jpg 480w, https:\/\/www.ollmetzer.com\/wp-content\/uploads\/2013\/06\/variante_3.jpg 1024w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><p id=\"caption-attachment-2024\" class=\"wp-caption-text\">Das - fast - fertige Spiel<\/p><\/div>\n<p>Nach dem sehr gelungenen Vortrag ging es dann anschliessend in etwas verkleinerter Runde in ein Restaurant, wo weiter gefachsimpelt wurde. Ein rundherum gelungener Abend.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Am Dienstag dieser Woche konnte ich wieder einen interessanten Vortrag aus der Reihe \u201cShift-Restore-Escape\u201d an der Humboldt Universit\u00e4t h\u00f6ren. Das Thema: Vom Wiedereinstig in die 8 Bit Welt &#8211; Die Programmierung eines Spiels f\u00fcr Atari Computer Bevor der Vortrag begann, gab es zur Einstimmung ein paar astreine Chiptunes zu h\u00f6ren. Mein Eindruck war, dass sich [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,14],"tags":[],"class_list":["post-2027","post","type-post","status-publish","format-standard","hentry","category-development","category-retro"],"_links":{"self":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts\/2027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2027"}],"version-history":[{"count":1,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts\/2027\/revisions"}],"predecessor-version":[{"id":2028,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts\/2027\/revisions\/2028"}],"wp:attachment":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}