{"id":4043,"date":"2025-04-22T09:46:28","date_gmt":"2025-04-22T09:46:28","guid":{"rendered":"https:\/\/research.swissdigitization.ch\/?p=4043"},"modified":"2025-04-22T09:51:51","modified_gmt":"2025-04-22T09:51:51","slug":"digital-experimental-archeology-in-action-atari-st-draw-small-text-20-min","status":"publish","type":"post","link":"https:\/\/research.swissdigitization.ch\/?p=4043","title":{"rendered":"Digital Experimental Archeology in Action: Atari ST &#8211; Draw Small Text [20 Min]"},"content":{"rendered":"\n<figure class=\"wp-block-video\"><video height=\"720\" style=\"aspect-ratio: 1084 \/ 720;\" width=\"1084\" controls src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Screen-2025-04-22-092244.mp4\"><\/video><\/figure>\n\n\n\n<p>Das Recording ist Realtime aufgenommen worden anhand einem konkreten Problem im DevProzess der GameEngine und des Spiels (Port vom Amiga) HolyCube (<a href=\"https:\/\/www.youtube.com\/watch?v=o4BfdliiUVU\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=o4BfdliiUVU\">Orginal C64 Game<\/a>). <\/p>\n\n\n\n<p> zeigt meine pers\u00f6nliche Arbeitsoberfl\u00e4che. Diese besteht aus:<br><br>0. MacOS X <br>1. Compiler in der Shell <br>2. Editor (Sublime)<br>3. Atari Emulator: Hatari<br>4. eigenes GrafikTool f\u00fcr Tile-Design<\/p>\n\n\n\n<p>Das anstehende Problem hier: Die Textroutine f\u00fcr kleine Texte (drawSmallText) scheint \u00fcberhaupt nicht zu funktionieren. Dahinter liegt das Problem der Routine drawSmallBlock. Das normale System in der Engine ist 16&#215;16 Pixel gross. F\u00fcr die Darstellung von kleineren Texten (Lauftext) wurde zus\u00e4tzlich ein 8&#215;8 Font erarbeitet. Die Bl\u00f6cke sind alle nacheinander abgelegt in 2 Bytes (16Pixel) * 16 Linien. <\/p>\n\n\n\n<p>Dieser 8&#215;8 Font findet sich im Tiledesign-tool in den Bl\u00f6cken 2+. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"784\" height=\"352\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Bildschirmfoto-2025-04-22-um-11.35.05.png\" alt=\"\" class=\"wp-image-4046\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Bildschirmfoto-2025-04-22-um-11.35.05.png 784w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Bildschirmfoto-2025-04-22-um-11.35.05-300x135.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Bildschirmfoto-2025-04-22-um-11.35.05-768x345.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Bildschirmfoto-2025-04-22-um-11.35.05-624x280.png 624w\" sizes=\"auto, (max-width: 784px) 100vw, 784px\" \/><\/figure>\n\n\n\n<p>Der Screen des Atari ST ist aufgebaut nach Linien. Eine Linie besteht aus jeweils 16 Pixeln in 2 Bytes*4 Ebenen. Die Bitplane-Anordnung \u00e4hnelt damit mehr dem C64 als dem Amiga, wo die Bitplanes pro Wert auf 4 verschiedene Bereich verteilt ist.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<!--more-->\n\n\n\n<p>ATARI ST &#8211; ein 16 Pixel Block (20 Pro Linie)<\/p>\n\n\n\n<p>%10010000 00000000  +<br>%01010000 00000000  +<br>%00110000 00000000  +<br>%0011000 00000000  +<br><br>Ergibt Total 16 m\u00f6gliche Farben :<br>   1*1<br>     1*2<br>      1*4<br>        1*8<br>           1+2+4+8 = 15<br>   1|2|4|8|15 <br><\/p>\n\n\n\n<p>Dadurch ergibt sich das Problem, jeweils nur 1 Byte * 4 (8Pixel) von einem Ort in den anderen zu kopieren. Dann zum n\u00e4chsten. Im Screen liegen dann anders als im Blockbereich. Diese Bytes dann eine Zeilenl\u00e4nge auseinander &#8211; also 160 Bytes.<br><br>Wie im folgenden zu sehen ist, sollte ein 0 gezeichnet werden 20 mal in der obersten Linie, doch nichts passiert. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"333\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Bildschirmfoto-2025-04-22-um-08.56.36-2048x666-1-1024x333.png\" alt=\"\" class=\"wp-image-4045\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Bildschirmfoto-2025-04-22-um-08.56.36-2048x666-1-1024x333.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Bildschirmfoto-2025-04-22-um-08.56.36-2048x666-1-300x98.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Bildschirmfoto-2025-04-22-um-08.56.36-2048x666-1-768x250.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Bildschirmfoto-2025-04-22-um-08.56.36-2048x666-1-1536x500.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Bildschirmfoto-2025-04-22-um-08.56.36-2048x666-1-624x203.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/04\/Bildschirmfoto-2025-04-22-um-08.56.36-2048x666-1.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-researchblog-swissdigitization-latest-findings-and-outcomes wp-block-embed-researchblog-swissdigitization-latest-findings-and-outcomes\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"ywnRQnKKQi\"><a href=\"https:\/\/research.swissdigitization.ch\/?p=4040\">Erwartetes Ergebnis != compiliertes Ergebnis<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8222;Erwartetes Ergebnis != compiliertes Ergebnis&#8220; &#8212; ResearchBlog Swissdigitization - Latest findings and outcomes.\" src=\"https:\/\/research.swissdigitization.ch\/?p=4040&#038;embed=true#?secret=TjaB4qViOH#?secret=ywnRQnKKQi\" data-secret=\"ywnRQnKKQi\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Im Video oben sieht man nun den Prozess.<br><br>00. Checken des Effekts (Erwartung gegen Realisierung)<br>0. Analyse des Problem<br>1. \u00c4nderung des Codes<br>2. Compilierung<br>3. Oeffnen des Emulators (gemeinesamer Ordner in C von Atari ST und MacOS)<br>4. Starten des Programms (nur 2x mal korrektes Starten &#8211; keine Ahnung warum nicht mehr)<br><br><strong>Debugging<\/strong><br><br>Im obigen Prozess wird versucht herauszufinden, was ist das Problem. Schnell wird klar, das Problem liegt in der Routine drawSmallBlock. Dies ist ersichtlich an den Verschiebungen innerhalb des Screens.<\/p>\n\n\n\n<p><strong>Sichtbar<\/strong><br><br>Mehrere Durchl\u00e4ufe den Bildschirmaufbau zu verstehen und anzupassen. Einige Fehler mit Byte (0-255) statt Word (0-65537) oder LongWord (0-&#8230;). Hier sieht man vorallem &#8222;Konzentrationsproblem&#8220; oder anders gesagt, Probleme damit, dass eben alles nur Speicher ist. Auch der Screen und sein Inhalt.<br><br>Langsames Herantasten.<\/p>\n\n\n\n<p>Schwierigkeit besteht im Verstehen des techn. Bildschirmaufbaus (Memory-Pixel) und das korrekt Verschieben und Rechnen von Memory\/Screen Daten.<\/p>\n\n\n\n<p>Irgendwann gelingt es. <br><br>\/\/ ToDo: feingliedriges Erkl\u00e4ren, was passiert und was gedacht wird. <br><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Recording ist Realtime aufgenommen worden anhand einem konkreten Problem im DevProzess der GameEngine und des Spiels (Port vom Amiga) HolyCube (Orginal C64 Game). zeigt meine pers\u00f6nliche Arbeitsoberfl\u00e4che. Diese besteht aus: 0. MacOS X 1. Compiler in der Shell 2. Editor (Sublime)3. Atari Emulator: Hatari4. eigenes GrafikTool f\u00fcr Tile-Design Das anstehende Problem hier: Die Textroutine [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4043","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/4043","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=4043"}],"version-history":[{"count":4,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/4043\/revisions"}],"predecessor-version":[{"id":4050,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/4043\/revisions\/4050"}],"wp:attachment":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}